Name: series-workflowmd5j2 Phase: Running StartedAt: 2026-07-12 09:55:51 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd5j2[0] Phase: Succeeded StartedAt: 2026-07-12 09:55:51 +0000 UTC FinishedAt: 2026-07-12 10:15:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd5j2[0].run-triage Phase: Succeeded StartedAt: 2026-07-12 09:55:51 +0000 UTC FinishedAt: 2026-07-12 10:15:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "61cccb8363fcc282d4ae0555b8739dd227f5ad0b", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "61cccb8363fcc282d4ae0555b8739dd227f5ad0b", "config_name": "upstream-apparmor-kasan.config", "series_id": "849f86aa-76b3-4682-ab99-bed8cf748297" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "mlock_fixup", "apply_vma_lock_flags", "apply_mlockall_flags", "unmap_source_vma", "check_prep_vma", "memfd_check_seals_mmap", "create_init_stack_vma", "thp_get_unmapped_area_vmaflags" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEwOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWxvY2tfZml4dXAmIzM0OywKICAgICYjMzQ7YXBwbHlfdm1hX2xvY2tfZmxhZ3MmIzM0OywKICAgICYjMzQ7YXBwbHlfbWxvY2thbGxfZmxhZ3MmIzM0OywKICAgICYjMzQ7dW5tYXBfc291cmNlX3ZtYSYjMzQ7LAogICAgJiMzNDtjaGVja19wcmVwX3ZtYSYjMzQ7LAogICAgJiMzNDttZW1mZF9jaGVja19zZWFsc19tbWFwJiMzNDssCiAgICAmIzM0O2NyZWF0ZV9pbml0X3N0YWNrX3ZtYSYjMzQ7LAogICAgJiMzNDt0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1ham9yIHJlZmFjdG9yaW5nIG9mIFZNQSBmbGFncyBoYW5kbGluZyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHRyYW5zaXRpb25pbmcgZnJvbSBgdm1fZmxhZ3NfdGAgdG8gYHZtYV9mbGFnc190YC4gSXQgbW9kaWZpZXMgY3JpdGljYWwgcGF0aHMgaW4gbW1hcCwgbXJlbWFwLCBtbG9jaywgYW5kIG1wcm90ZWN0LiBUaGVzZSBjaGFuZ2VzIGZ1bmN0aW9uYWxseSBhbHRlciBob3cgVk1BIGZsYWdzIGFyZSBzZXQsIGNsZWFyZWQsIGFuZCB0ZXN0ZWQsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2UgaW5jb3JyZWN0IG1lbW9yeSBwcm90ZWN0aW9ucywgYWNjb3VudGluZyBlcnJvcnMsIG9yIGxvY2tpbmcgaXNzdWVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZXNlIGZsYWdzLCBhdm9pZGluZyB0aGUgYWJzb2x1dGUgaG90dGVzdCBwYXRocyBsaWtlIGBkb19tbWFwYCB0byBwcmV2ZW50IHNrZXdlZCBkaXN0cmlidXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEwOjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2U4ZGUyYmQxMTlkZTczZDk0NjhkYTRlZjdlMzlkOGU4NDc5NGNhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDEyIDEwOjE0OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdmRzby5jIGIvYXJjaC9taXBzL2tlcm5lbC92ZHNvLmNcbmluZGV4IGJkMWZjMTdkMzk3NWRjLi45NDg3Mzc3NWZjMGY0NSAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdmRzby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMva2VybmVsL3Zkc28uY1xuQEAgLTkxLDggJiM0Mzs5MSw4IEBAIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgaW50IHVzZXNfaW50ZXJwKVxuIFxuIFx0XHQvKiBNYXAgZGVsYXkgc2xvdCBlbXVsYXRpb24gcGFnZSAqL1xuIFx0XHRiYXNlID0gZG9fbW1hcChOVUxMLCBTVEFDS19UT1AsIFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9FWEVDLFxuLVx0XHRcdCAgICAgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUgfCBNQVBfRklYRUQsIDAsIDAsIFx1MDAyNnVudXNlZCxcbi1cdFx0XHQgICAgICAgTlVMTCk7XG4mIzQzO1x0XHRcdCAgICAgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUgfCBNQVBfRklYRUQsXG4mIzQzO1x0XHRcdCAgICAgICBFTVBUWV9WTUFfRkxBR1MsIDAsIFx1MDAyNnVudXNlZCwgTlVMTCk7XG4gXHRcdGlmIChJU19FUlJfVkFMVUUoYmFzZSkpIHtcbiBcdFx0XHRyZXQgPSBiYXNlO1xuIFx0XHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jIGIvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmNcbmluZGV4IDI4YmVjNWJjNzg3OTQ5Li44MjEyN2UzMWRjYTZkZSAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuY1xuQEAgLTY1OSw3ICYjNDM7NjU5LDggQEAgdW5zaWduZWQgbG9uZyBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0dW5zaWduZWQgaW50IHBzaXplO1xuIFxuIFx0aWYgKHJhZGl4X2VuYWJsZWQoKSlcbi1cdFx0cmV0dXJuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcbiYjNDM7XHRcdHJldHVybiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0XHQgbGVnYWN5X3RvX3ZtYV9mbGFncyh2bV9mbGFncykpO1xuIFxuIFx0aWYgKGZpbHAgXHUwMDI2XHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxuIFx0XHRwc2l6ZSA9IGZpbGVfdG9fcHNpemUoZmlscCk7XG5AQCAtNjc5LDcgJiM0Mzs2ODAsOCBAQCB1bnNpZ25lZCBsb25nIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdHVuc2lnbmVkIGludCBwc2l6ZTtcbiBcbiBcdGlmIChyYWRpeF9lbmFibGVkKCkpXG4tXHRcdHJldHVybiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oZmlscCwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCB2bV9mbGFncyk7XG4mIzQzO1x0XHRyZXR1cm4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKGZpbHAsIGFkZHIwLCBsZW4sXG4mIzQzO1x0XHRcdFx0cGdvZmYsIGZsYWdzLCBsZWdhY3lfdG9fdm1hX2ZsYWdzKHZtX2ZsYWdzKSk7XG4gXG4gXHRpZiAoZmlscCBcdTAwMjZcdTAwMjYgaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXG4gXHRcdHBzaXplID0gZmlsZV90b19wc2l6ZShmaWxwKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uY1xuaW5kZXggZTNlZDY4NGRkY2YyOTEuLjMyYTA1ZDg4OWI5YTJiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uY1xuQEAgLTEyNTIsNyAmIzQzOzEyNTIsNyBAQCBpbnQgZHJtX2dlbV9tbWFwX29iaihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdW5zaWduZWQgbG9uZyBvYmpfc2l6ZSxcbiBcdFx0fVxuIFxuIFx0XHR2bV9mbGFnc19zZXQodm1hLCBWTV9JTyB8IFZNX1BGTk1BUCB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XG4tXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZG1hX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZG1hX2hlbHBlci5jXG5pbmRleCAxYzAwYTcxYWIzYzlkMC4uN2Q5NjEyMDc1ZDMxMGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9kbWFfaGVscGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2RtYV9oZWxwZXIuY1xuQEAgLTU0MCw3ICYjNDM7NTQwLDcgQEAgaW50IGRybV9nZW1fZG1hX21tYXAoc3RydWN0IGRybV9nZW1fZG1hX29iamVjdCAqZG1hX29iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpcbiBcdHZtX2ZsYWdzX21vZCh2bWEsIFZNX0RPTlREVU1QIHwgVk1fRE9OVEVYUEFORCwgVk1fUEZOTUFQKTtcbiBcbiBcdGlmIChkbWFfb2JqLVx1MDAzZW1hcF9ub25jb2hlcmVudCkge1xuLVx0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuJiM0MztcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gXG4gXHRcdHJldCA9IGRtYV9tbWFwX3BhZ2VzKGRybV9kZXZfZG1hX2RldihkbWFfb2JqLVx1MDAzZWJhc2UuZGV2KSxcbiBcdFx0XHRcdCAgICAgdm1hLCB2bWEtXHUwMDNldm1fZW5kIC0gdm1hLVx1MDAzZXZtX3N0YXJ0LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmNcbmluZGV4IGM5ODk0NTllYjIxNTkxLi4wNmQwMTlkNTFkM2U2YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuY1xuQEAgLTc2NCw3ICYjNDM7NzY0LDcgQEAgaW50IGRybV9nZW1fc2htZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX1BGTk1BUCB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XG4tXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuJiM0MztcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFx0aWYgKHNobWVtLVx1MDAzZW1hcF93YylcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmNcbmluZGV4IDJlNGQ2ZDExN2VlMmQ4Li5mOWM4YjdiMmJmYzdhZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmNcbkBAIC0xMzMsNyAmIzQzOzEzMyw3IEBAIHN0YXRpYyBpbnQgZXRuYXZpdl9nZW1fbW1hcF9vYmooc3RydWN0IGV0bmF2aXZfZ2VtX29iamVjdCAqZXRuYXZpdl9vYmosXG4gXG4gXHR2bV9mbGFnc19zZXQodm1hLCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xuIFxuLVx0dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuJiM0MztcdHZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gXG4gXHRpZiAoZXRuYXZpdl9vYmotXHUwMDNlZmxhZ3MgXHUwMDI2IEVUTkFfQk9fV0MpIHtcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1fcGFnZV9wcm90KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZ2VtLmNcbmluZGV4IDlhNjI3MGYzZGNhNmJmLi4wMjA4YzkyNTk1NzI1YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dlbS5jXG5AQCAtMzc3LDEzICYjNDM7Mzc3LDEzIEBAIHN0YXRpYyBpbnQgZXh5bm9zX2RybV9nZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0XG4gXG4gXHQvKiBub24tY2FjaGFibGUgYXMgZGVmYXVsdC4gKi9cbiBcdGlmIChleHlub3NfZ2VtLVx1MDAzZWZsYWdzIFx1MDAyNiBFWFlOT1NfQk9fQ0FDSEFCTEUpXG4tXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcdGVsc2UgaWYgKGV4eW5vc19nZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEVYWU5PU19CT19XQylcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9XG4tXHRcdFx0cGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncykpO1xuJiM0MztcdFx0XHRwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xuIFx0ZWxzZVxuIFx0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID1cbi1cdFx0XHRwZ3Byb3Rfbm9uY2FjaGVkKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4mIzQzO1x0XHRcdHBncHJvdF9ub25jYWNoZWQodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XG4gXG4gXHRyZXQgPSBleHlub3NfZHJtX2dlbV9tbWFwX2J1ZmZlcihleHlub3NfZ2VtLCB2bWEpO1xuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uY1xuaW5kZXggMDY0NGY4NWM2YzhlNTIuLjljYTkwYzFiYjViNDIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uY1xuQEAgLTExMiw3ICYjNDM7MTEyLDcgQEAgaTkxNV9nZW1fbW1hcF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLFxuIFx0XHR2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7XG4gXHRcdGlmICh2bWEgXHUwMDI2XHUwMDI2IF9fdm1hX21hdGNoZXModm1hLCBvYmotXHUwMDNlYmFzZS5maWxwLCBhZGRyLCBhcmdzLVx1MDAzZXNpemUpKVxuIFx0XHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPVxuLVx0XHRcdFx0cGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncykpO1xuJiM0MztcdFx0XHRcdHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XG4gXHRcdGVsc2VcbiBcdFx0XHRhZGRyID0gLUVOT01FTTtcbiBcdFx0bW1hcF93cml0ZV91bmxvY2sobW0pO1xuQEAgLTEwMjQsNyAmIzQzOzEwMjQsNyBAQCBpOTE1X2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLFxuIFx0ZnB1dChhbm9uKTtcbiBcbiBcdGlmIChvYmotXHUwMDNlb3BzLVx1MDAzZW1tYXBfb3BzKSB7XG4tXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcdFx0dm1hLVx1MDAzZXZtX29wcyA9IG9iai1cdTAwM2VvcHMtXHUwMDNlbW1hcF9vcHM7XG4gXHRcdHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBvYmotXHUwMDNlYmFzZS52bWFfbm9kZS5kcml2ZXJfcHJpdmF0ZTtcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTAzNSw3ICYjNDM7MTAzNSw3IEBAIGk5MTVfZ2VtX29iamVjdF9tbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosXG4gXHRzd2l0Y2ggKG1tby1cdTAwM2VtbWFwX3R5cGUpIHtcbiBcdGNhc2UgSTkxNV9NTUFQX1RZUEVfV0M6XG4gXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPVxuLVx0XHRcdHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpKTtcbiYjNDM7XHRcdFx0cGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcdFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnZtX29wc19jcHU7XG4gXHRcdGJyZWFrO1xuIFxuQEAgLTEwNDMsMTkgJiM0MzsxMDQzLDE5IEBAIGk5MTVfZ2VtX29iamVjdF9tbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosXG4gXHRcdEdFTV9XQVJOX09OKDEpO1xuIFx0XHRmYWxsdGhyb3VnaDtcbiBcdGNhc2UgSTkxNV9NTUFQX1RZUEVfV0I6XG4tXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcdFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnZtX29wc19jcHU7XG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBJOTE1X01NQVBfVFlQRV9VQzpcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9XG4tXHRcdFx0cGdwcm90X25vbmNhY2hlZCh2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncykpO1xuJiM0MztcdFx0XHRwZ3Byb3Rfbm9uY2FjaGVkKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xuIFx0XHR2bWEtXHUwMDNldm1fb3BzID0gXHUwMDI2dm1fb3BzX2NwdTtcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIEk5MTVfTU1BUF9UWVBFX0dUVDpcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9XG4tXHRcdFx0cGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncykpO1xuJiM0MztcdFx0XHRwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xuIFx0XHR2bWEtXHUwMDNldm1fb3BzID0gXHUwMDI2dm1fb3BzX2d0dDtcbiBcdFx0YnJlYWs7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uY1xuaW5kZXggY2JmNzIzYTVkODZmYTkuLjZhNzhlMjQyZGU3YzZiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jXG5AQCAtMTEyNSw3ICYjNDM7MTEyNSw3IEBAIHN0YXRpYyBpbnQgbXNtX2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0XG4gXHRzdHJ1Y3QgbXNtX2dlbV9vYmplY3QgKm1zbV9vYmogPSB0b19tc21fYm8ob2JqKTtcbiBcbiBcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX1BGTk1BUCB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XG4tXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gbXNtX2dlbV9wZ3Byb3QobXNtX29iaiwgdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpKTtcbiYjNDM7XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gbXNtX2dlbV9wZ3Byb3QobXNtX29iaiwgdm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmNcbmluZGV4IDIwZGJhMDJkNjE3NWJjLi45YTZlZTJlODgwYzBhZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmNcbkBAIC01NSw3ICYjNDM7NTUsNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBub3V2ZWF1X3R0bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0Z290byBlcnJvcl91bmxvY2s7XG4gXG4gXHRub3V2ZWF1X2JvX2RlbF9pb19yZXNlcnZlX2xydShibyk7XG4tXHRwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuJiM0MztcdHByb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFx0cmV0ID0gdHRtX2JvX3ZtX2ZhdWx0X3Jlc2VydmVkKHZtZiwgcHJvdCwgVFRNX0JPX1ZNX05VTV9QUkVGQVVMVCk7XG4gXHRub3V2ZWF1X2JvX2FkZF9pb19yZXNlcnZlX2xydShibyk7XG4gXHRpZiAocmV0ID09IFZNX0ZBVUxUX1JFVFJZIFx1MDAyNlx1MDAyNiAhKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZmJkZXYuYyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZmJkZXYuY1xuaW5kZXggY2EzZmIxODZiZjE5NTQuLjQ4ODE3Nzc2NDJkMjk2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYmRldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2ZiZGV2LmNcbkBAIC04NCw3ICYjNDM7ODQsNyBAQCBzdGF0aWMgaW50IG9tYXBfZmJkZXZfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvXG4gXG4gc3RhdGljIGludCBvbWFwX2ZiZGV2X2ZiX21tYXAoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbi1cdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4mIzQzO1x0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XG4gXG4gXHRyZXR1cm4gZmJfZGVmZXJyZWRfaW9fbW1hcChpbmZvLCB2bWEpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9nZW0uY1xuaW5kZXggMDA0MDRmYjZjMjlhYWUuLmZiMGU2ZjU1NmIzMTQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9nZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9nZW0uY1xuQEAgLTUzOCw5ICYjNDM7NTM4LDkgQEAgc3RhdGljIGludCBvbWFwX2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWNcbiBcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCB8IFZNX0lPIHwgVk1fTUlYRURNQVApO1xuIFxuIFx0aWYgKG9tYXBfb2JqLVx1MDAzZWZsYWdzIFx1MDAyNiBPTUFQX0JPX1dDKSB7XG4tXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcdH0gZWxzZSBpZiAob21hcF9vYmotXHUwMDNlZmxhZ3MgXHUwMDI2IE9NQVBfQk9fVU5DQUNIRUQpIHtcbi1cdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpKTtcbiYjNDM7XHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xuIFx0fSBlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogV2UgZG8gaGF2ZSBzb21lIHByaXZhdGUgb2JqZWN0cywgYXQgbGVhc3QgZm9yIHNjYW5vdXQgYnVmZmVyc1xuQEAgLTU1OCw3ICYjNDM7NTU4LDcgQEAgc3RhdGljIGludCBvbWFwX2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWNcbiBcdFx0dm1hLVx1MDAzZXZtX3Bnb2ZmIC09IGRybV92bWFfbm9kZV9zdGFydChcdTAwMjZvYmotXHUwMDNldm1hX25vZGUpO1xuIFx0XHR2bWFfc2V0X2ZpbGUodm1hLCBvYmotXHUwMDNlZmlscCk7XG4gXG4tXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcdH1cbiBcbiBcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXG5pbmRleCBhMWUyZWIxY2E3YmJlNi4uNzcwNTU2MzUzOTY4NzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXG5AQCAtNzc2LDcgJiM0Mzs3NzYsNyBAQCBzdGF0aWMgaW50IHBhbnRob3JfZ2VtX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdlxuIFx0fVxuIFxuIFx0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fUEZOTUFQIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QKTtcbi1cdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4mIzQzO1x0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gXHRpZiAoc2hvdWxkX21hcF93YyhibykpXG4gXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5jXG5pbmRleCBiMTg4NTM5ZGNhMGIyNS4uOWExZGM5ZjEyMDcyOWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5jXG5AQCAtMjU1LDcgJiM0MzsyNTUsNyBAQCBzdGF0aWMgaW50IHJvY2tjaGlwX2RybV9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosXG4gXHQgKi9cbiBcdHZtX2ZsYWdzX21vZCh2bWEsIFZNX0lPIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QLCBWTV9QRk5NQVApO1xuIFxuLVx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpKTtcbiYjNDM7XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuIFxuIFx0aWYgKHJrX29iai1cdTAwM2VwYWdlcylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmNcbmluZGV4IDFkOGQyN2E1ZWE4OWI4Li5mNzZhZjczM2VhNzkzOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jXG5AQCAtNjAyLDcgJiM0Mzs2MDIsNyBAQCBpbnQgX190ZWdyYV9nZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXG4gXHRcdHZtYS1cdTAwM2V2bV9wZ29mZiA9IHZtX3Bnb2ZmO1xuIFx0fSBlbHNlIHtcbi1cdFx0cGdwcm90X3QgcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKTtcbiYjNDM7XHRcdHBncHJvdF90IHByb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFxuIFx0XHR2bV9mbGFnc19tb2Qodm1hLCBWTV9NSVhFRE1BUCwgVk1fUEZOTUFQKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdnJhbS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ZyYW0uY1xuaW5kZXggNGFlM2NiYzM1ZGQzNjQuLjU0NGE2YWJkZGJjOGI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ZyYW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ZyYW0uY1xuQEAgLTU1LDcgJiM0Mzs1NSw3IEBAIHN0YXRpYyBpbnQgdmlydGlvX2dwdV92cmFtX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosXG4gXG4gXHR2bWEtXHUwMDNldm1fcGdvZmYgLT0gZHJtX3ZtYV9ub2RlX3N0YXJ0KFx1MDAyNm9iai1cdTAwM2V2bWFfbm9kZSk7XG4gXHR2bV9mbGFnc19zZXQodm1hLCBWTV9NSVhFRE1BUCB8IFZNX0RPTlRFWFBBTkQpO1xuLVx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKTtcbiYjNDM7XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuIFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnZpcnRpb19ncHVfdnJhbV92bV9vcHM7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcGFnZV9kaXJ0eS5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcGFnZV9kaXJ0eS5jXG5pbmRleCA0NTU2MWJjMWM5ZWZmZS4uYTlmZDQwMTVhMGNhYTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9wYWdlX2RpcnR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3BhZ2VfZGlydHkuY1xuQEAgLTQ4MSw3ICYjNDM7NDgxLDcgQEAgdm1fZmF1bHRfdCB2bXdfYm9fdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRpZiAodmJvLVx1MDAzZWRpcnR5IFx1MDAyNlx1MDAyNiB2Ym8tXHUwMDNlZGlydHktXHUwMDNlbWV0aG9kID09IFZNV19CT19ESVJUWV9NS1dSSVRFKVxuIFx0XHRwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IH5WTV9TSEFSRUQpO1xuIFx0ZWxzZVxuLVx0XHRwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuJiM0MztcdFx0cHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gXG4gXHRyZXQgPSB0dG1fYm9fdm1fZmF1bHRfcmVzZXJ2ZWQodm1mLCBwcm90LCBudW1fcHJlZmF1bHQpO1xuIFx0aWYgKHJldCA9PSBWTV9GQVVMVF9SRVRSWSBcdTAwMjZcdTAwMjYgISh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUKSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmNcbmluZGV4IGFiZTI1YWVkZWVhZGVmLi44Mzg3OTdjYzY1ZDc5MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5jXG5AQCAtMjgxLDcgJiM0MzsyODEsNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBiYXJyaWVyX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0cGdwcm90X3QgcHJvdDtcbiBcdGludCBpZHg7XG4gXG4tXHRwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuJiM0MztcdHByb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFxuIFx0aWYgKGRybV9kZXZfZW50ZXIoZGV2LCBcdTAwMjZpZHgpKSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgcGZuO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9tbWlvX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX21taW9fZ2VtLmNcbmluZGV4IDhjODAzZWYyMzNjYzRkLi4zNzQxYWU2MGY1MzJiZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9tbWlvX2dlbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfbW1pb19nZW0uY1xuQEAgLTE0OSw3ICYjNDM7MTQ5LDcgQEAgc3RhdGljIGludCB4ZV9tbWlvX2dlbV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqYmFzZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpcbiBcbiBcdC8qIFNldCB2bV9wZ29mZiAodXNlZCBhcyBhIGZha2UgYnVmZmVyIG9mZnNldCBieSBEUk0pIHRvIDAgKi9cbiBcdHZtYS1cdTAwM2V2bV9wZ29mZiA9IDA7XG4tXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncykpO1xuJiM0MztcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xuIFx0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fSU8gfCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVAgfFxuIFx0XHQgICAgIFZNX0RPTlRDT1BZIHwgVk1fTk9SRVNFUlZFKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmNcbmluZGV4IGVlYzRjMWRhM2Y5ZTMxLi5kZDE1ODQ0M2Y1NWYxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jXG5AQCAtODAsNyAmIzQzOzgwLDcgQEAgc3RhdGljIGludCB4ZW5fZHJtX2Zyb250X2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmosXG4gXHQgKiB3aGljaCBpcyBtYXBwZWQgYXMgTm9ybWFsIElubmVyIFdyaXRlLUJhY2sgT3V0ZXIgV3JpdGUtQmFja1xuIFx0ICogSW5uZXItU2hhcmVhYmxlLlxuIFx0ICovXG4tXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuJiM0MztcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFxuIFx0LypcbiBcdCAqIHZtX29wZXJhdGlvbnNfc3RydWN0LmZhdWx0IGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgaWYgQ1BVIGFjY2Vzc1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYl9pb19mb3BzLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfaW9fZm9wcy5jXG5pbmRleCA2YWI2MGZjZDAwNTAxNC4uNmQwYThjOGUxNDFhMjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfaW9fZm9wcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfaW9fZm9wcy5jXG5AQCAtMTYxLDcgJiM0MzsxNjEsNyBAQCBpbnQgZmJfaW9fbW1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRcdGxlbiA9IGluZm8tXHUwMDNlZml4Lm1taW9fbGVuO1xuIFx0fVxuIFxuLVx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKTtcbiYjNDM7XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZnJhbWVidWZmZXIodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCwgdm1hLVx1MDAzZXZtX3N0YXJ0LFxuIFx0XHRcdFx0XHQgICAgICAgdm1hLVx1MDAzZXZtX2VuZCwgc3RhcnQpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmNcbmluZGV4IGY1N2ZhMjFhMjUwMzUzLi4zZGU1ODZkYTE5N2JkOSAxMDA2NDRcbi0tLSBhL2ZzL2Fpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9haW8uY1xuQEAgLTYwNCw3ICYjNDM7NjA0LDcgQEAgc3RhdGljIGludCBhaW9fc2V0dXBfcmluZyhzdHJ1Y3Qga2lvY3R4ICpjdHgsIHVuc2lnbmVkIGludCBucl9ldmVudHMpXG4gXG4gXHRjdHgtXHUwMDNlbW1hcF9iYXNlID0gZG9fbW1hcChjdHgtXHUwMDNlYWlvX3JpbmdfZmlsZSwgMCwgY3R4LVx1MDAzZW1tYXBfc2l6ZSxcbiBcdFx0XHRcdCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuLVx0XHRcdFx0IE1BUF9TSEFSRUQsIDAsIDAsIFx1MDAyNnVudXNlZCwgTlVMTCk7XG4mIzQzO1x0XHRcdFx0IE1BUF9TSEFSRUQsIEVNUFRZX1ZNQV9GTEFHUywgMCwgXHUwMDI2dW51c2VkLCBOVUxMKTtcbiBcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcbiBcdGlmIChJU19FUlIoKHZvaWQgKiljdHgtXHUwMDNlbW1hcF9iYXNlKSkge1xuIFx0XHRjdHgtXHUwMDNlbW1hcF9zaXplID0gMDtcbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCA5ZmRkZDFlMGI4MTNhYi4uNDMwNjZmOWRkZjUyZDEgMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC0xODQsNyAmIzQzOzE4NCw4IEBAIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmIChhZGRyKVxuIFx0XHRhZGRyMCA9IEFMSUdOKGFkZHIsIGh1Z2VfcGFnZV9zaXplKGgpKTtcbiBcbi1cdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XG4mIzQzO1x0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgRU1QVFlfVk1BX0ZMQUdTKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG5pbmRleCBjYWU5N2MzMDcyODA5Ny4uOWU0M2UxMzhjMGI3NzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbkBAIC0zOTEsOSAmIzQzOzM5MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfZGlzYWJsZWRfYnlfaHcodm9pZClcbiBcbiB1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyk7XG4tdW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0Mzt1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyxcbi1cdFx0dm1fZmxhZ3NfdCB2bV9mbGFncyk7XG4mIzQzO1x0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpO1xuIFxuIGVudW0gc3BsaXRfdHlwZSB7XG4gXHRTUExJVF9UWVBFX1VOSUZPUk0sXG5AQCAtNjE3LDkgJiM0Mzs2MTcsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuICNkZWZpbmUgdGhwX2dldF91bm1hcHBlZF9hcmVhXHROVUxMXG4gXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nXG4tdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbi1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxuJiM0Mzt0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuJiM0MztcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWZkLmggYi9pbmNsdWRlL2xpbnV4L21lbWZkLmhcbmluZGV4IGI0ZmRhMDlkYWI5ZjYxLi5jMTU5ZTQwZTNmMzRhMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtZmQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1mZC5oXG5AQCAtMTQsOSAmIzQzOzE0LDkgQEAgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KTtcbiAgKiB0byBzZWFsaW5nLCBvciAwIG90aGVyd2lzZS5cbiAgKlxuICAqIFdlIGFsc28gdXBkYXRlIFZNQSBmbGFncyBpZiBhcHByb3ByaWF0ZSBieSBtYW5pcHVsYXRpbmcgdGhlIFZNQSBmbGFncyBwb2ludGVkXG4tICogdG8gYnkgdm1fZmxhZ3NfcHRyLlxuJiM0MzsgKiB0byBieSB2bWFfZmxhZ3NfcHRyLlxuICAqL1xuLWludCBtZW1mZF9jaGVja19zZWFsc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB2bV9mbGFnc190ICp2bV9mbGFnc19wdHIpO1xuJiM0MztpbnQgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm1hX2ZsYWdzX3QgKnZtYV9mbGFnc19wdHIpO1xuIHN0cnVjdCBmaWxlICptZW1mZF9hbGxvY19maWxlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IG1lbWZkX2dldF9zZWFscyhzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4gaW50IG1lbWZkX2FkZF9zZWFscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IHNlYWxzKTtcbkBAIC0zMCw3ICYjNDM7MzAsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbiBcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIH1cbiBzdGF0aWMgaW5saW5lIGludCBtZW1mZF9jaGVja19zZWFsc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLFxuLVx0XHRcdFx0XHQgdm1fZmxhZ3NfdCAqdm1fZmxhZ3NfcHRyKVxuJiM0MztcdFx0XHRcdFx0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDMyYmI3MjNmZmJiOTJkLi41NTBmYjkyOTU3ZDE4OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtNDQyLDggJiM0Mzs0NDIsMTAgQEAgZW51bSB7XG4gI2RlZmluZSBWTV9TVEFDS1x0SU5JVF9WTV9GTEFHKFNUQUNLKVxuICNpZmRlZiBDT05GSUdfU1RBQ0tfR1JPV1NVUFxuICNkZWZpbmUgVk1fU1RBQ0tfRUFSTFlcdElOSVRfVk1fRkxBRyhTVEFDS19FQVJMWSlcbiYjNDM7I2RlZmluZSBWTUFfU1RBQ0tfRUFSTFkgbWtfdm1hX2ZsYWdzKFZNQV9TVEFDS19FQVJMWV9CSVQpXG4gI2Vsc2VcbiAjZGVmaW5lIFZNX1NUQUNLX0VBUkxZXHRWTV9OT05FXG4mIzQzOyNkZWZpbmUgVk1BX1NUQUNLX0VBUkxZIEVNUFRZX1ZNQV9GTEFHU1xuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfUEtFWVNcbiAjZGVmaW5lIFZNX1BLRVlfU0hJRlQgKChfX2ZvcmNlIGludClWTUFfSElHSF9BUkNIXzBfQklUKVxuQEAgLTQ2NSwxNSAmIzQzOzQ2NywxOCBAQCBlbnVtIHtcbiAjaWYgZGVmaW5lZChDT05GSUdfWDg2X1VTRVJfU0hBRE9XX1NUQUNLKSB8fCBkZWZpbmVkKENPTkZJR19BUk02NF9HQ1MpIHx8IFxcXG4gXHRkZWZpbmVkKENPTkZJR19SSVNDVl9VU0VSX0NGSSlcbiAjZGVmaW5lIFZNX1NIQURPV19TVEFDS1x0SU5JVF9WTV9GTEFHKFNIQURPV19TVEFDSylcbiYjNDM7I2RlZmluZSBWTUFfU0hBRE9XX1NUQUNLIG1rX3ZtYV9mbGFncyhWTUFfU0hBRE9XX1NUQUNLX0JJVClcbiAjZGVmaW5lIFZNQV9TVEFSVEdBUF9GTEFHUyBta192bWFfZmxhZ3MoVk1BX0dST1dTRE9XTl9CSVQsIFZNQV9TSEFET1dfU1RBQ0tfQklUKVxuICNlbHNlXG4gI2RlZmluZSBWTV9TSEFET1dfU1RBQ0tcdFZNX05PTkVcbiYjNDM7I2RlZmluZSBWTUFfU0hBRE9XX1NUQUNLIEVNUFRZX1ZNQV9GTEFHU1xuICNkZWZpbmUgVk1BX1NUQVJUR0FQX0ZMQUdTIG1rX3ZtYV9mbGFncyhWTUFfR1JPV1NET1dOX0JJVClcbiAjZW5kaWZcbiAjaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpXG4gI2RlZmluZSBWTV9TQU9cdFx0SU5JVF9WTV9GTEFHKFNBTylcbiAjZWxpZiBkZWZpbmVkKENPTkZJR19QQVJJU0MpXG4gI2RlZmluZSBWTV9HUk9XU1VQXHRJTklUX1ZNX0ZMQUcoR1JPV1NVUClcbiYjNDM7I2RlZmluZSBWTUFfR1JPV1NVUFx0bWtfdm1hX2ZsYWdzKFZNQV9HUk9XU1VQX0JJVClcbiAjZWxpZiBkZWZpbmVkKENPTkZJR19TUEFSQzY0KVxuICNkZWZpbmUgVk1fU1BBUkNfQURJXHRJTklUX1ZNX0ZMQUcoU1BBUkNfQURJKVxuICNkZWZpbmUgVk1fQVJDSF9DTEVBUlx0SU5JVF9WTV9GTEFHKEFSQ0hfQ0xFQVIpXG5AQCAtNDg1LDYgJiM0Mzs0OTAsNyBAQCBlbnVtIHtcbiAjZW5kaWZcbiAjaWZuZGVmIFZNX0dST1dTVVBcbiAjZGVmaW5lIFZNX0dST1dTVVBcdFZNX05PTkVcbiYjNDM7I2RlZmluZSBWTUFfR1JPV1NVUFx0RU1QVFlfVk1BX0ZMQUdTXG4gI2VuZGlmXG4gI2lmZGVmIENPTkZJR19BUk02NF9NVEVcbiAjZGVmaW5lIFZNX01URVx0XHRJTklUX1ZNX0ZMQUcoTVRFKVxuQEAgLTU0MCw2ICYjNDM7NTQ2LDggQEAgZW51bSB7XG4gXG4gLyogQml0cyBzZXQgaW4gdGhlIFZNQSB1bnRpbCB0aGUgc3RhY2sgaXMgaW4gaXRzIGZpbmFsIGxvY2F0aW9uICovXG4gI2RlZmluZSBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQIChWTV9SQU5EX1JFQUQgfCBWTV9TRVFfUkVBRCB8IFZNX1NUQUNLX0VBUkxZKVxuJiM0MzsjZGVmaW5lIFZNQV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQIGFwcGVuZF92bWFfZmxhZ3MoXHRcdFxcXG4mIzQzO1x0Vk1BX1NUQUNLX0VBUkxZLCBWTUFfUkFORF9SRUFEX0JJVCwgVk1BX1NFUV9SRUFEX0JJVClcbiBcbiAjZGVmaW5lIFRBU0tfRVhFQ19CSVQgKChjdXJyZW50LVx1MDAzZXBlcnNvbmFsaXR5IFx1MDAyNiBSRUFEX0lNUExJRVNfRVhFQykgPyBcXFxuIFx0XHQgICAgICAgVk1BX0VYRUNfQklUIDogVk1BX1JFQURfQklUKVxuQEAgLTE1NzgsMTEgJiM0MzsxNTg2LDI0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfaW5pdGlhbF9zdGFjayhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdFx0dm1hLVx1MDAzZXZtX2VuZCBcdTAwM2U9IHZtYS1cdTAwM2V2bV9tbS1cdTAwM2VzdGFydF9zdGFjaztcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIHZtYV9pc190ZW1wb3Jhcnlfc3RhY2soY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB2bWFfZmxhZ3NfY2FuX2dyb3coY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzKVxuIHtcbi1cdGludCBtYXliZV9zdGFjayA9IHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0dST1dTRE9XTiB8IFZNX0dST1dTVVApO1xuJiM0MztcdGlmICh2bWFfZmxhZ3NfdGVzdF9zaW5nbGVfbWFzayhmbGFncywgVk1BX0dST1dTVVApKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0aWYgKHZtYV9mbGFnc190ZXN0KGZsYWdzLCBWTUFfR1JPV1NET1dOX0JJVCkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2Nhbl9ncm93KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHZtYV9mbGFnc19jYW5fZ3JvdyhcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuJiM0Mzt9XG4gXG4tXHRpZiAoIW1heWJlX3N0YWNrKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX3RlbXBvcmFyeV9zdGFjayhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiYjNDM7e1xuJiM0MztcdGlmICghdm1hX2Nhbl9ncm93KHZtYSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGlmICgodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQKSA9PVxuQEAgLTQxNzQsMTggJiM0Mzs0MTk1LDIwIEBAIHVuc2lnbmVkIGxvbmcgcmFuZG9taXplX3BhZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyByYW5nZSk7XG4gXG4gdW5zaWduZWQgbG9uZ1xuIF9fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXG4tXHRcdCAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKTtcbiYjNDM7XHRcdCAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxuJiM0MztcdFx0ICAgIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG4gXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nXG4gZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXG4gXHRcdCAgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncylcbiB7XG4tXHRyZXR1cm4gX19nZXRfdW5tYXBwZWRfYXJlYShmaWxlLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XG4mIzQzO1x0cmV0dXJuIF9fZ2V0X3VubWFwcGVkX2FyZWEoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICAgRU1QVFlfVk1BX0ZMQUdTKTtcbiB9XG4gXG4tZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0Mzt1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nICpwb3B1bGF0ZSxcbiYjNDM7XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgKnBvcHVsYXRlLFxuIFx0c3RydWN0IGxpc3RfaGVhZCAqdWYpO1xuIGV4dGVybiBpbnQgZG9fdm1pX211bm1hcChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdCB1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLCBzdHJ1Y3QgbGlzdF9oZWFkICp1ZixcbkBAIC00NTg0LDI2ICYjNDM7NDYwNywzNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmFuZ2VfaW5fdm1hX2Rlc2MoY29uc3Qgc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYyxcbiAjaWZkZWYgQ09ORklHX01NVVxuIHBncHJvdF90IHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3NfdCB2bV9mbGFncyk7XG4gXG4tc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4mIzQzO3N0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuIFx0Y29uc3Qgdm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKTtcbiBcbiBcdHJldHVybiB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2dldF9wYWdlX3Byb3QoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWEtXHUwMDNlZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgdm1hX3NldF9wYWdlX3Byb3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4ge1xuIFx0cmV0dXJuIF9fcGdwcm90KDApO1xuIH1cbi1zdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9nZXRfcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcbiYjNDM7c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX3BncHJvdCgwKTtcbiYjNDM7fVxuJiM0MztzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9nZXRfcGFnZV9wcm90KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiBcdHJldHVybiBfX3BncHJvdCgwKTtcbiB9XG4gc3RhdGljIGlubGluZSB2b2lkIHZtYV9zZXRfcGFnZV9wcm90KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbi1cdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4mIzQzO1x0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gfVxuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxuaW5kZXggOTVkMDA0MGRmNTg0MTMuLjEwYmU4YTU0YjQxNmY5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcbkBAIC0xOTMsMjEgJiM0MzsxOTMsMTggQEAgdW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGZsYWdzKTtcbiBcbi11bnNpZ25lZCBsb25nIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsXG4tXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBsZW4sXG4tXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsXG4tXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG4tXHRcdFx0XHRcdCAgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpO1xuJiM0Mzt1bnNpZ25lZCBsb25nIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG4gXG4gdW5zaWduZWQgbG9uZ1xuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncyk7XG4mIzQzO1x0XHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKTtcbiB1bnNpZ25lZCBsb25nXG4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKTtcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9waWNrX21tYXBfbGF5b3V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IHJsaW1pdCAqcmxpbV9zdGFjaykge31cbmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmNcbmluZGV4IGIzZThhNThlMTc3ZDNiLi5iYjFhNzIxYTNlNzQ2ZSAxMDA2NDRcbi0tLSBhL2lwYy9zaG0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvaXBjL3NobS5jXG5AQCAtMTY2MSw3ICYjNDM7MTY2MSw4IEBAIGxvbmcgZG9fc2htYXQoaW50IHNobWlkLCBjaGFyIF9fdXNlciAqc2htYWRkciwgaW50IHNobWZsZyxcbiBcdFx0XHRnb3RvIGludmFsaWQ7XG4gXHR9XG4gXG4tXHRhZGRyID0gZG9fbW1hcChmaWxlLCBhZGRyLCBzaXplLCBwcm90LCBmbGFncywgMCwgMCwgXHUwMDI2cG9wdWxhdGUsIE5VTEwpO1xuJiM0MztcdGFkZHIgPSBkb19tbWFwKGZpbGUsIGFkZHIsIHNpemUsIHByb3QsIGZsYWdzLCBFTVBUWV9WTUFfRkxBR1MsIDAsXG4mIzQzO1x0XHQgICAgICAgXHUwMDI2cG9wdWxhdGUsIE5VTEwpO1xuIFx0KnJhZGRyID0gYWRkcjtcbiBcdGVyciA9IDA7XG4gXHRpZiAoSVNfRVJSX1ZBTFVFKGFkZHIpKVxuZGlmZiAtLWdpdCBhL21tL2RlYnVnLmMgYi9tbS9kZWJ1Zy5jXG5pbmRleCA0OTc2NTRiMzZmMWFiNS4uOWEwMjk3YjM5ODhkODkgMTAwNjQ0XG4tLS0gYS9tbS9kZWJ1Zy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kZWJ1Zy5jXG5AQCAtMTk3LDcgJiM0MzsxOTcsNyBAQCB2b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRcdFwmIzM0O251bWFfbmV4dF9zY2FuICVsdSBudW1hX3NjYW5fb2Zmc2V0ICVsdSBudW1hX3NjYW5fc2VxICVkXFxuXCYjMzQ7XG4gI2VuZGlmXG4gXHRcdFwmIzM0O3RsYl9mbHVzaF9wZW5kaW5nICVkXFxuXCYjMzQ7XG4tXHRcdFwmIzM0O2RlZl9mbGFnczogJSNseCglcEd2KVxcblwmIzM0OyxcbiYjNDM7XHRcdFwmIzM0O2RlZl9mbGFnczogJSpwYiglcEd2KVxcblwmIzM0OyxcbiBcbiBcdFx0bW0sIG1tLVx1MDAzZXRhc2tfc2l6ZSxcbiBcdFx0bW0tXHUwMDNlbW1hcF9iYXNlLCBtbS1cdTAwM2VtbWFwX2xlZ2FjeV9iYXNlLFxuQEAgLTIyNiw3ICYjNDM7MjI2LDggQEAgdm9pZCBkdW1wX21tKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0XHRtbS1cdTAwM2VudW1hX25leHRfc2NhbiwgbW0tXHUwMDNlbnVtYV9zY2FuX29mZnNldCwgbW0tXHUwMDNlbnVtYV9zY2FuX3NlcSxcbiAjZW5kaWZcbiBcdFx0YXRvbWljX3JlYWQoXHUwMDI2bW0tXHUwMDNldGxiX2ZsdXNoX3BlbmRpbmcpLFxuLVx0XHRtbS1cdTAwM2VkZWZfZmxhZ3MsIFx1MDAyNm1tLVx1MDAzZWRlZl9mbGFnc1xuJiM0MztcdFx0TlVNX1ZNQV9GTEFHX0JJVFMsIG1tLVx1MDAzZWRlZl92bWFfZmxhZ3MuX192bWFfZmxhZ3MsXG4mIzQzO1x0XHRcdTAwMjZtbS1cdTAwM2VkZWZfdm1hX2ZsYWdzXG4gXHQpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGR1bXBfbW0pO1xuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAwZGM2ZDYzMDU3MGZhZi4uNDBkNmI0MDc4ZTNkNDMgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTE5Niw3ICYjNDM7MTE5Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc190cmFuc3BhcmVudF9odWdlcGFnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxuIFx0XHRsb2ZmX3Qgb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIHNpemUsXG4tXHRcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4mIzQzO1x0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuIFx0bG9mZl90IG9mZl9lbmQgPSBvZmYgJiM0MzsgbGVuO1xuIFx0bG9mZl90IG9mZl9hbGlnbiA9IHJvdW5kX3VwKG9mZiwgc2l6ZSk7XG5AQCAtMTIxMiw4ICYjNDM7MTIxMiw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0aWYgKGxlbl9wYWQgXHUwMDNjIGxlbiB8fCAob2ZmICYjNDM7IGxlbl9wYWQpIFx1MDAzYyBvZmYpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0ID0gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxwLCBhZGRyLCBsZW5fcGFkLFxuLVx0XHRcdFx0XHQgICBvZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsIGZsYWdzLCB2bV9mbGFncyk7XG4mIzQzO1x0cmV0ID0gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MoZmlscCwgYWRkciwgbGVuX3BhZCxcbiYjNDM7XHRcdFx0XHRcdCAgICBvZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICAgIHZtYV9mbGFncyk7XG4gXG4gXHQvKlxuIFx0ICogVGhlIGZhaWx1cmUgbWlnaHQgYmUgZHVlIHRvIGxlbmd0aCBwYWRkaW5nLiBUaGUgY2FsbGVyIHdpbGwgcmV0cnlcbkBAIC0xMjM4LDI1ICYjNDM7MTIzOSwyNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXVuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7dW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0dW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG4tXHRcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4mIzQzO1x0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyByZXQ7XG4gXHRsb2ZmX3Qgb2ZmID0gKGxvZmZfdClwZ29mZiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiBcbi1cdHJldCA9IF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgb2ZmLCBmbGFncywgUE1EX1NJWkUsIHZtX2ZsYWdzKTtcbiYjNDM7XHRyZXQgPSBfX3RocF9nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIG9mZiwgZmxhZ3MsIFBNRF9TSVpFLFxuJiM0MztcdFx0XHRcdCAgICAgIHZtYV9mbGFncyk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4tXHRcdFx0XHRcdCAgICB2bV9mbGFncyk7XG4mIzQzO1x0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICAgICB2bWFfZmxhZ3MpO1xuIH1cbiBcbiB1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncylcbiB7XG4tXHRyZXR1cm4gdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIDApO1xuJiM0MztcdHJldHVybiB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBFTVBUWV9WTUFfRkxBR1MpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh0aHBfZ2V0X3VubWFwcGVkX2FyZWEpO1xuIFxuZGlmZiAtLWdpdCBhL21tL21lbWZkLmMgYi9tbS9tZW1mZC5jXG5pbmRleCA2YzcyZmU2Y2FlZjc1ZC4uYzcwOGQ5MjUzM2Y0YWIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1mZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1mZC5jXG5AQCAtMzcwLDM5ICYjNDM7MzcwLDM2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc193cml0ZV9zZWFsZWQodW5zaWduZWQgaW50IHNlYWxzKVxuIFx0cmV0dXJuIHNlYWxzIFx1MDAyNiAoRl9TRUFMX1dSSVRFIHwgRl9TRUFMX0ZVVFVSRV9XUklURSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgY2hlY2tfd3JpdGVfc2VhbCh2bV9mbGFnc190ICp2bV9mbGFnc19wdHIpXG4mIzQzO3N0YXRpYyBpbnQgY2hlY2tfd3JpdGVfc2VhbCh2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzX3B0cilcbiB7XG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gKnZtX2ZsYWdzX3B0cjtcbi1cdHZtX2ZsYWdzX3QgbWFzayA9IHZtX2ZsYWdzIFx1MDAyNiAoVk1fU0hBUkVEIHwgVk1fV1JJVEUpO1xuLVxuIFx0LyogSWYgYSBwcml2YXRlIG1hcHBpbmcgdGhlbiB3cml0YWJpbGl0eSBpcyBpcnJlbGV2YW50LiAqL1xuLVx0aWYgKCEobWFzayBcdTAwMjYgVk1fU0hBUkVEKSlcbiYjNDM7XHRpZiAoIXZtYV9mbGFnc190ZXN0KHZtYV9mbGFnc19wdHIsIFZNQV9TSEFSRURfQklUKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKlxuIFx0ICogTmV3IFBST1RfV1JJVEUgYW5kIE1BUF9TSEFSRUQgbW1hcHMgYXJlIG5vdCBhbGxvd2VkIHdoZW5cbiBcdCAqIHdyaXRlIHNlYWxzIGFyZSBhY3RpdmUuXG4gXHQgKi9cbi1cdGlmIChtYXNrIFx1MDAyNiBWTV9XUklURSlcbiYjNDM7XHRpZiAodm1hX2ZsYWdzX3Rlc3Qodm1hX2ZsYWdzX3B0ciwgVk1BX1dSSVRFX0JJVCkpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4gXHQvKlxuIFx0ICogVGhpcyBpcyBhIHJlYWQtb25seSBtYXBwaW5nLCBkaXNhbGxvdyBtcHJvdGVjdCgpIGZyb20gbWFraW5nIGFcbiBcdCAqIHdyaXRlLXNlYWxlZCBtYXBwaW5nIHdyaXRhYmxlIGluIGZ1dHVyZS5cbiBcdCAqL1xuLVx0KnZtX2ZsYWdzX3B0ciBcdTAwMjY9IH5WTV9NQVlXUklURTtcbiYjNDM7XHR2bWFfZmxhZ3NfY2xlYXIodm1hX2ZsYWdzX3B0ciwgVk1BX01BWVdSSVRFX0JJVCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzX3B0cilcbiYjNDM7aW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKVxuIHtcbiBcdGludCBlcnIgPSAwO1xuIFx0dW5zaWduZWQgaW50ICpzZWFsc19wdHIgPSBtZW1mZF9maWxlX3NlYWxzX3B0cihmaWxlKTtcbiBcdHVuc2lnbmVkIGludCBzZWFscyA9IHNlYWxzX3B0ciA/ICpzZWFsc19wdHIgOiAwO1xuIFxuIFx0aWYgKGlzX3dyaXRlX3NlYWxlZChzZWFscykpXG4tXHRcdGVyciA9IGNoZWNrX3dyaXRlX3NlYWwodm1fZmxhZ3NfcHRyKTtcbiYjNDM7XHRcdGVyciA9IGNoZWNrX3dyaXRlX3NlYWwodm1hX2ZsYWdzX3B0cik7XG4gXG4gXHRyZXR1cm4gZXJyO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9tbG9jay5jIGIvbW0vbWxvY2suY1xuaW5kZXggOTdlNDkwMzhkOGQzM2UuLmVmYTY3MTZlNGRmYmRmIDEwMDY0NFxuLS0tIGEvbW0vbWxvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWxvY2suY1xuQEAgLTMyOSw3ICYjNDM7MzI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFsbG93X21sb2NrX211bmxvY2soc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdCAqIGJlIHNwbGl0LiBBbmQgdGhlIHBhZ2VzIGFyZSBub3QgaW4gVk1fTE9DS2VkIFZNQVxuIFx0ICogY2FuIGJlIHJlY2xhaW1lZC5cbiBcdCAqL1xuLVx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9MT0NLRUQpKVxuJiM0MztcdGlmICghdm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LyogZm9saW9fd2l0aGluX3JhbmdlKCkgY2Fubm90IHRha2UgS1NNLCBidXQgYW55IHNtYWxsIGZvbGlvIGlzIE9LICovXG5AQCAtMzY4LDcgJiM0MzszNjgsNyBAQCBzdGF0aWMgaW50IG1sb2NrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGZvbGlvID0gcG1kX2ZvbGlvKCpwbWQpO1xuIFx0XHRpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKVxuIFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9MT0NLRUQpXG4mIzQzO1x0XHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdFx0bWxvY2tfZm9saW8oZm9saW8pO1xuIFx0XHRlbHNlXG4gXHRcdFx0bXVubG9ja19mb2xpbyhmb2xpbyk7XG5AQCAtMzkzLDcgJiM0MzszOTMsNyBAQCBzdGF0aWMgaW50IG1sb2NrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGlmICghYWxsb3dfbWxvY2tfbXVubG9jayhmb2xpbywgdm1hLCBzdGFydCwgZW5kLCBzdGVwKSlcbiBcdFx0XHRnb3RvIG5leHRfZW50cnk7XG4gXG4tXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbiYjNDM7XHRcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSlcbiBcdFx0XHRtbG9ja19mb2xpbyhmb2xpbyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRtdW5sb2NrX2ZvbGlvKGZvbGlvKTtcbkBAIC00MTcsOCAmIzQzOzQxNyw4IEBAIHN0YXRpYyBpbnQgbWxvY2tfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiAgKiBAZW5kIC0gZW5kIG9mIHJhbmdlIGluIEB2bWFcbiAgKiBAbmV3X3ZtYV9mbGFncyAtIHRoZSBuZXcgc2V0IG9mIGZsYWdzIGZvciBAdm1hLlxuICAqXG4tICogQ2FsbGVkIGZvciBtbG9jaygpLCBtbG9jazIoKSBhbmQgbWxvY2thbGwoKSwgdG8gc2V0IEB2bWEgVk1fTE9DS0VEO1xuLSAqIGNhbGxlZCBmb3IgbXVubG9jaygpIGFuZCBtdW5sb2NrYWxsKCksIHRvIGNsZWFyIFZNX0xPQ0tFRCBmcm9tIEB2bWEuXG4mIzQzOyAqIENhbGxlZCBmb3IgbWxvY2soKSwgbWxvY2syKCkgYW5kIG1sb2NrYWxsKCksIHRvIHNldCBAdm1hIFZNQV9MT0NLRURfQklUO1xuJiM0MzsgKiBjYWxsZWQgZm9yIG11bmxvY2soKSBhbmQgbXVubG9ja2FsbCgpLCB0byBjbGVhciBWTUFfTE9DS0VEX0JJVCBmcm9tIEB2bWEuXG4gICovXG4gc3RhdGljIHZvaWQgbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG5AQCAtNDMxLDE0ICYjNDM7NDMxLDE0IEBAIHN0YXRpYyB2b2lkIG1sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcbiBcdC8qXG4gXHQgKiBUaGVyZSBpcyBhIHNsaWdodCBjaGFuY2UgdGhhdCBjb25jdXJyZW50IHBhZ2UgbWlncmF0aW9uLFxuLVx0ICogb3IgcGFnZSByZWNsYWltIGZpbmRpbmcgYSBwYWdlIG9mIHRoaXMgbm93LVZNX0xPQ0tFRCB2bWEsXG4mIzQzO1x0ICogb3IgcGFnZSByZWNsYWltIGZpbmRpbmcgYSBwYWdlIG9mIHRoaXMgbm93LVZNQV9MT0NLRURfQklUIHZtYSxcbiBcdCAqIHdpbGwgY2FsbCBtbG9ja192bWFfZm9saW8oKSBhbmQgcmFpc2UgcGFnZSYjMzk7cyBtbG9ja19jb3VudDpcbiBcdCAqIGRvdWJsZSBjb3VudGluZywgbGVhdmluZyB0aGUgcGFnZSB1bmV2aWN0YWJsZSBpbmRlZmluaXRlbHkuXG4tXHQgKiBDb21tdW5pY2F0ZSB0aGlzIGRhbmdlciB0byBtbG9ja192bWFfZm9saW8oKSB3aXRoIFZNX0lPLFxuLVx0ICogd2hpY2ggaXMgYSBWTV9TUEVDSUFMIGZsYWcgbm90IGFsbG93ZWQgb24gVk1fTE9DS0VEIHZtYXMuXG4mIzQzO1x0ICogQ29tbXVuaWNhdGUgdGhpcyBkYW5nZXIgdG8gbWxvY2tfdm1hX2ZvbGlvKCkgd2l0aCBWTUFfSU9fQklULFxuJiM0MztcdCAqIHdoaWNoIGlzIGEgVk1BX1NQRUNJQUxfRkxBR1MgZmxhZyBub3QgYWxsb3dlZCBvbiBWTUFfTE9DS0VEX0JJVCB2bWFzLlxuIFx0ICogbW1hcF9sb2NrIGlzIGhlbGQgaW4gd3JpdGUgbW9kZSBoZXJlLCBzbyB0aGlzIHdlaXJkXG4gXHQgKiBjb21iaW5hdGlvbiBzaG91bGQgbm90IGJlIHZpc2libGUgdG8gb3RoZXIgbW1hcF9sb2NrIHVzZXJzO1xuLVx0ICogYnV0IFdSSVRFX09OQ0Ugc28gcm1hcCB3YWxrZXJzIG11c3Qgc2VlIFZNX0lPIGlmIFZNX0xPQ0tFRC5cbiYjNDM7XHQgKiBidXQgV1JJVEVfT05DRSBzbyBybWFwIHdhbGtlcnMgbXVzdCBzZWUgVk1BX0lPX0JJVCBpZiBWTUFfTE9DS0VEX0JJVC5cbiBcdCAqL1xuIFx0aWYgKHZtYV9mbGFnc190ZXN0KG5ld192bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSlcbiBcdFx0dm1hX2ZsYWdzX3NldChuZXdfdm1hX2ZsYWdzLCBWTUFfSU9fQklUKTtcbkBAIC00NTgsNyAmIzQzOzQ1OCw3IEBAIHN0YXRpYyB2b2lkIG1sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiAvKlxuICAqIG1sb2NrX2ZpeHVwICAtIGhhbmRsZSBtbG9ja1thbGxdL211bmxvY2tbYWxsXSByZXF1ZXN0cy5cbiAgKlxuLSAqIEZpbHRlcnMgb3V0IFwmIzM0O3NwZWNpYWxcJiMzNDsgdm1hcyAtLSBWTV9MT0NLRUQgbmV2ZXIgZ2V0cyBzZXQgZm9yIHRoZXNlLCBhbmRcbiYjNDM7ICogRmlsdGVycyBvdXQgXCYjMzQ7c3BlY2lhbFwmIzM0OyB2bWFzIC0tIFZNQV9MT0NLRURfQklUIG5ldmVyIGdldHMgc2V0IGZvciB0aGVzZSwgYW5kXG4gICogbXVubG9jayBpcyBhIG5vLW9wLiAgSG93ZXZlciwgZm9yIHNvbWUgc3BlY2lhbCB2bWFzLCB3ZSBnbyBhaGVhZCBhbmRcbiAgKiBwb3B1bGF0ZSB0aGUgcHRlcy5cbiAgKlxuQEAgLTQ2NiwyNCAmIzQzOzQ2NiwyMyBAQCBzdGF0aWMgdm9pZCBtbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gICovXG4gc3RhdGljIGludCBtbG9ja19maXh1cChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0ICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnByZXYsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tXHQgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHZtX2ZsYWdzX3QgbmV3ZmxhZ3MpXG4mIzQzO1x0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB2bWFfZmxhZ3NfdCAqbmV3X3ZtYV9mbGFncylcbiB7XG4tXHR2bWFfZmxhZ3NfdCBuZXdfdm1hX2ZsYWdzID0gbGVnYWN5X3RvX3ZtYV9mbGFncyhuZXdmbGFncyk7XG4gXHRjb25zdCB2bWFfZmxhZ3NfdCBvbGRfdm1hX2ZsYWdzID0gdm1hLVx1MDAzZWZsYWdzO1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4gXHRpbnQgbnJfcGFnZXM7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbi1cdGlmICh2bWFfZmxhZ3Nfc2FtZV9wYWlyKFx1MDAyNm9sZF92bWFfZmxhZ3MsIFx1MDAyNm5ld192bWFfZmxhZ3MpIHx8XG4mIzQzO1x0aWYgKHZtYV9mbGFnc19zYW1lX3BhaXIoXHUwMDI2b2xkX3ZtYV9mbGFncywgbmV3X3ZtYV9mbGFncykgfHxcbiBcdCAgICB2bWFfaXNfc2VjcmV0bWVtKHZtYSkgfHwgIXZtYV9zdXBwb3J0c19tbG9jayh2bWEpKSB7XG4gXHRcdC8qXG4tXHRcdCAqIERvbiYjMzk7dCBzZXQgVk1fTE9DS0VEIG9yIFZNX0xPQ0tPTkZBVUxUIGFuZCBkb24mIzM5O3QgY291bnQuXG4tXHRcdCAqIEZvciBzZWNyZXRtZW0sIGRvbiYjMzk7dCBhbGxvdyB0aGUgbWVtb3J5IHRvIGJlIHVubG9ja2VkLlxuJiM0MztcdFx0ICogRG9uJiMzOTt0IHNldCBWTUFfTE9DS0VEX0JJVCBvciBWTUFfTE9DS09ORkFVTFRfQklUIGFuZCBkb24mIzM5O3RcbiYjNDM7XHRcdCAqIGNvdW50LiAgRm9yIHNlY3JldG1lbSwgZG9uJiMzOTt0IGFsbG93IHRoZSBtZW1vcnkgdG8gYmUgdW5sb2NrZWQuXG4gXHRcdCAqL1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3Modm1pLCAqcHJldiwgdm1hLCBzdGFydCwgZW5kLCBcdTAwMjZuZXdfdm1hX2ZsYWdzKTtcbiYjNDM7XHR2bWEgPSB2bWFfbW9kaWZ5X2ZsYWdzKHZtaSwgKnByZXYsIHZtYSwgc3RhcnQsIGVuZCwgbmV3X3ZtYV9mbGFncyk7XG4gXHRpZiAoSVNfRVJSKHZtYSkpIHtcbiBcdFx0cmV0ID0gUFRSX0VSUih2bWEpO1xuIFx0XHRnb3RvIG91dDtcbkBAIC00OTMsNyAmIzQzOzQ5Miw3IEBAIHN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdCAqIEtlZXAgdHJhY2sgb2YgYW1vdW50IG9mIGxvY2tlZCBWTS5cbiBcdCAqL1xuIFx0bnJfcGFnZXMgPSAoZW5kIC0gc3RhcnQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVx0aWYgKCF2bWFfZmxhZ3NfdGVzdChcdTAwMjZuZXdfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpXG4mIzQzO1x0aWYgKCF2bWFfZmxhZ3NfdGVzdChuZXdfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdG5yX3BhZ2VzID0gLW5yX3BhZ2VzO1xuIFx0ZWxzZSBpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2b2xkX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHRucl9wYWdlcyA9IDA7XG5AQCAtNTAyLDE1ICYjNDM7NTAxLDE1IEBAIHN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdC8qXG4gXHQgKiB2bV9mbGFncyBpcyBwcm90ZWN0ZWQgYnkgdGhlIG1tYXBfbG9jayBoZWxkIGluIHdyaXRlIG1vZGUuXG4gXHQgKiBJdCYjMzk7cyBva2F5IGlmIHRyeV90b191bm1hcF9vbmUgdW5tYXBzIGEgcGFnZSBqdXN0IGFmdGVyIHdlXG4tXHQgKiBzZXQgVk1fTE9DS0VELCBwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suXG4mIzQzO1x0ICogc2V0IFZNQV9MT0NLRURfQklULCBwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suXG4gXHQgKi9cbi1cdGlmICh2bWFfZmxhZ3NfdGVzdChcdTAwMjZuZXdfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0aWYgKHZtYV9mbGFnc190ZXN0KG5ld192bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSBcdTAwMjZcdTAwMjZcbiBcdCAgICB2bWFfZmxhZ3NfdGVzdChcdTAwMjZvbGRfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpIHtcbiBcdFx0LyogTm8gd29yayB0byBkbywgYW5kIG1sb2NraW5nIHR3aWNlIHdvdWxkIGJlIHdyb25nICovXG4gXHRcdHZtYV9zdGFydF93cml0ZSh2bWEpO1xuLVx0XHR2bWEtXHUwMDNlZmxhZ3MgPSBuZXdfdm1hX2ZsYWdzO1xuJiM0MztcdFx0dm1hLVx1MDAzZWZsYWdzID0gKm5ld192bWFfZmxhZ3M7XG4gXHR9IGVsc2Uge1xuLVx0XHRtbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCBcdTAwMjZuZXdfdm1hX2ZsYWdzKTtcbiYjNDM7XHRcdG1sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIG5ld192bWFfZmxhZ3MpO1xuIFx0fVxuIG91dDpcbiBcdCpwcmV2ID0gdm1hO1xuQEAgLTUxOCw3ICYjNDM7NTE3LDcgQEAgc3RhdGljIGludCBtbG9ja19maXh1cChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIH1cbiBcbiBzdGF0aWMgaW50IGFwcGx5X3ZtYV9sb2NrX2ZsYWdzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sXG4tXHRcdFx0XHR2bV9mbGFnc190IGZsYWdzKVxuJiM0MztcdFx0XHRcdGNvbnN0IHZtYV9mbGFnc190ICpmbGFncylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5zdGFydCwgZW5kLCB0bXA7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgKnByZXY7XG5AQCAtNTQzLDE4ICYjNDM7NTQyLDIwIEBAIHN0YXRpYyBpbnQgYXBwbHlfdm1hX2xvY2tfZmxhZ3ModW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbixcbiBcdHRtcCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbiBcdGZvcl9lYWNoX3ZtYV9yYW5nZSh2bWksIHZtYSwgZW5kKSB7XG4gXHRcdGludCBlcnJvcjtcbi1cdFx0dm1fZmxhZ3NfdCBuZXdmbGFncztcbiYjNDM7XHRcdHZtYV9mbGFnc190IG5ld2ZsYWdzO1xuIFxuIFx0XHRpZiAodm1hLVx1MDAzZXZtX3N0YXJ0ICE9IHRtcClcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdFx0bmV3ZmxhZ3MgPSB2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IH5WTV9MT0NLRURfTUFTSztcbi1cdFx0bmV3ZmxhZ3MgfD0gZmxhZ3M7XG4mIzQzO1x0XHRuZXdmbGFncyA9IHZtYS1cdTAwM2VmbGFncztcbiYjNDM7XHRcdHZtYV9mbGFnc19jbGVhcl9tYXNrKFx1MDAyNm5ld2ZsYWdzLCBWTUFfTE9DS0VEX01BU0spO1xuJiM0MztcdFx0dm1hX2ZsYWdzX3NldF9tYXNrKFx1MDAyNm5ld2ZsYWdzLCAqZmxhZ3MpO1xuJiM0MztcbiBcdFx0LyogSGVyZSB3ZSBrbm93IHRoYXQgIHZtYS1cdTAwM2V2bV9zdGFydCBcdTAwM2M9IG5zdGFydCBcdTAwM2Mgdm1hLVx1MDAzZXZtX2VuZC4gKi9cbiBcdFx0dG1wID0gdm1hLVx1MDAzZXZtX2VuZDtcbiBcdFx0aWYgKHRtcCBcdTAwM2UgZW5kKVxuIFx0XHRcdHRtcCA9IGVuZDtcbi1cdFx0ZXJyb3IgPSBtbG9ja19maXh1cChcdTAwMjZ2bWksIHZtYSwgXHUwMDI2cHJldiwgbnN0YXJ0LCB0bXAsIG5ld2ZsYWdzKTtcbiYjNDM7XHRcdGVycm9yID0gbWxvY2tfZml4dXAoXHUwMDI2dm1pLCB2bWEsIFx1MDAyNnByZXYsIG5zdGFydCwgdG1wLCBcdTAwMjZuZXdmbGFncyk7XG4gXHRcdGlmIChlcnJvcilcbiBcdFx0XHRyZXR1cm4gZXJyb3I7XG4gXHRcdHRtcCA9IHZtYV9pdGVyX2VuZChcdTAwMjZ2bWkpO1xuQEAgLTU4OSw3ICYjNDM7NTkwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfbW1fbWxvY2tlZF9wYWdlX25yKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRlbmQgPSBzdGFydCAmIzQzOyBsZW47XG4gXG4gXHRmb3JfZWFjaF92bWFfcmFuZ2Uodm1pLCB2bWEsIGVuZCkge1xuLVx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9MT0NLRUQpIHtcbiYjNDM7XHRcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSkge1xuIFx0XHRcdGlmIChzdGFydCBcdTAwM2Ugdm1hLVx1MDAzZXZtX3N0YXJ0KVxuIFx0XHRcdFx0Y291bnQgLT0gKHN0YXJ0IC0gdm1hLVx1MDAzZXZtX3N0YXJ0KTtcbiBcdFx0XHRpZiAoZW5kIFx1MDAzYyB2bWEtXHUwMDNldm1fZW5kKSB7XG5AQCAtNjE1LDcgJiM0Mzs2MTYsOCBAQCBzdGF0aWMgaW50IF9fbWxvY2tfcG9zaXhfZXJyb3JfcmV0dXJuKGxvbmcgcmV0dmFsKVxuIFx0cmV0dXJuIHJldHZhbDtcbiB9XG4gXG4tc3RhdGljIF9fbXVzdF9jaGVjayBpbnQgZG9fbWxvY2sodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbiwgdm1fZmxhZ3NfdCBmbGFncylcbiYjNDM7c3RhdGljIF9fbXVzdF9jaGVjayBpbnQgZG9fbWxvY2sodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdFx0XHQgdm1hX2ZsYWdzX3QgKmZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbG9ja2VkO1xuIFx0dW5zaWduZWQgbG9uZyBsb2NrX2xpbWl0O1xuQEAgLTY2NCwyNCAmIzQzOzY2NiwyNyBAQCBzdGF0aWMgX19tdXN0X2NoZWNrIGludCBkb19tbG9jayh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLCB2bV9mbGFnc190IGZsYVxuIFxuIFNZU0NBTExfREVGSU5FMihtbG9jaywgdW5zaWduZWQgbG9uZywgc3RhcnQsIHNpemVfdCwgbGVuKVxuIHtcbi1cdHJldHVybiBkb19tbG9jayhzdGFydCwgbGVuLCBWTV9MT0NLRUQpO1xuJiM0MztcdHZtYV9mbGFnc190IGZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9MT0NLRURfQklUKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRvX21sb2NrKHN0YXJ0LCBsZW4sIFx1MDAyNmZsYWdzKTtcbiB9XG4gXG4gU1lTQ0FMTF9ERUZJTkUzKG1sb2NrMiwgdW5zaWduZWQgbG9uZywgc3RhcnQsIHNpemVfdCwgbGVuLCBpbnQsIGZsYWdzKVxuIHtcbi1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSBWTV9MT0NLRUQ7XG4mIzQzO1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9MT0NLRURfQklUKTtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgfk1MT0NLX09ORkFVTFQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBNTE9DS19PTkZBVUxUKVxuLVx0XHR2bV9mbGFncyB8PSBWTV9MT0NLT05GQVVMVDtcbiYjNDM7XHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTE9DS09ORkFVTFRfQklUKTtcbiBcbi1cdHJldHVybiBkb19tbG9jayhzdGFydCwgbGVuLCB2bV9mbGFncyk7XG4mIzQzO1x0cmV0dXJuIGRvX21sb2NrKHN0YXJ0LCBsZW4sIFx1MDAyNnZtYV9mbGFncyk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FMihtdW5sb2NrLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW4pXG4ge1xuJiM0MztcdHZtYV9mbGFnc190IGZsYWdzID0gRU1QVFlfVk1BX0ZMQUdTO1xuIFx0aW50IHJldDtcbiBcbiBcdHN0YXJ0ID0gdW50YWdnZWRfYWRkcihzdGFydCk7XG5AQCAtNjkxLDcgJiM0Mzs2OTYsNyBAQCBTWVNDQUxMX0RFRklORTIobXVubG9jaywgdW5zaWduZWQgbG9uZywgc3RhcnQsIHNpemVfdCwgbGVuKVxuIFxuIFx0aWYgKG1tYXBfd3JpdGVfbG9ja19raWxsYWJsZShjdXJyZW50LVx1MDAzZW1tKSlcbiBcdFx0cmV0dXJuIC1FSU5UUjtcbi1cdHJldCA9IGFwcGx5X3ZtYV9sb2NrX2ZsYWdzKHN0YXJ0LCBsZW4sIDApO1xuJiM0MztcdHJldCA9IGFwcGx5X3ZtYV9sb2NrX2ZsYWdzKHN0YXJ0LCBsZW4sIFx1MDAyNmZsYWdzKTtcbiBcdG1tYXBfd3JpdGVfdW5sb2NrKGN1cnJlbnQtXHUwMDNlbW0pO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC02OTksNDYgJiM0Mzs3MDQsNDggQEAgU1lTQ0FMTF9ERUZJTkUyKG11bmxvY2ssIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbilcbiBcbiAvKlxuICAqIFRha2UgdGhlIE1DTF8qIGZsYWdzIHBhc3NlZCBpbnRvIG1sb2NrYWxsIChvciAwIGlmIGNhbGxlZCBmcm9tIG11bmxvY2thbGwpXG4tICogYW5kIHRyYW5zbGF0ZSBpbnRvIHRoZSBhcHByb3ByaWF0ZSBtb2RpZmljYXRpb25zIHRvIG1tLVx1MDAzZWRlZl9mbGFncyBhbmQvb3IgdGhlXG4tICogZmxhZ3MgZm9yIGFsbCBjdXJyZW50IFZNQXMuXG4mIzQzOyAqIGFuZCB0cmFuc2xhdGUgaW50byB0aGUgYXBwcm9wcmlhdGUgbW9kaWZpY2F0aW9ucyB0byBtbS1cdTAwM2VkZWZfdm1hX2ZsYWdzIGFuZC9vclxuJiM0MzsgKiB0aGUgZmxhZ3MgZm9yIGFsbCBjdXJyZW50IFZNQXMuXG4gICpcbiAgKiBUaGVyZSBhcmUgYSBjb3VwbGUgb2Ygc3VidGxldGllcyB3aXRoIHRoaXMuICBJZiBtbG9ja2FsbCgpIGlzIGNhbGxlZCBtdWx0aXBsZVxuICAqIHRpbWVzIHdpdGggZGlmZmVyZW50IGZsYWdzLCB0aGUgdmFsdWVzIGRvIG5vdCBuZWNlc3NhcmlseSBzdGFjay4gIElmIG1sb2NrYWxsXG4gICogaXMgY2FsbGVkIG9uY2UgaW5jbHVkaW5nIHRoZSBNQ0xfRlVUVVJFIGZsYWcgYW5kIHRoZW4gYSBzZWNvbmQgdGltZSB3aXRob3V0XG4tICogaXQsIFZNX0xPQ0tFRCBhbmQgVk1fTE9DS09ORkFVTFQgd2lsbCBiZSBjbGVhcmVkIGZyb20gbW0tXHUwMDNlZGVmX2ZsYWdzLlxuJiM0MzsgKiBpdCwgVk1BX0xPQ0tFRF9CSVQgYW5kIFZNQV9MT0NLT05GQVVMVF9CSVQgd2lsbCBiZSBjbGVhcmVkIGZyb21cbiYjNDM7ICogbW0tXHUwMDNlZGVmX3ZtYV9mbGFncy5cbiAgKi9cbiBzdGF0aWMgaW50IGFwcGx5X21sb2NrYWxsX2ZsYWdzKGludCBmbGFncylcbiB7XG4gXHRWTUFfSVRFUkFUT1Iodm1pLCBjdXJyZW50LVx1MDAzZW1tLCAwKTtcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXHUwMDNlbW07XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgKnByZXYgPSBOVUxMO1xuLVx0dm1fZmxhZ3NfdCB0b19hZGQgPSAwO1xuJiM0MztcdHZtYV9mbGFnc190IHRvX2FkZCA9IEVNUFRZX1ZNQV9GTEFHUztcbiBcbi1cdGN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlZGVmX2ZsYWdzIFx1MDAyNj0gflZNX0xPQ0tFRF9NQVNLO1xuJiM0MztcdHZtYV9mbGFnc19jbGVhcl9tYXNrKFx1MDAyNm1tLVx1MDAzZWRlZl92bWFfZmxhZ3MsIFZNQV9MT0NLRURfTUFTSyk7XG4gXHRpZiAoZmxhZ3MgXHUwMDI2IE1DTF9GVVRVUkUpIHtcbi1cdFx0Y3VycmVudC1cdTAwM2VtbS1cdTAwM2VkZWZfZmxhZ3MgfD0gVk1fTE9DS0VEO1xuJiM0MztcdFx0dm1hX2ZsYWdzX3NldChcdTAwMjZtbS1cdTAwM2VkZWZfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7XG4gXG4gXHRcdGlmIChmbGFncyBcdTAwMjYgTUNMX09ORkFVTFQpXG4tXHRcdFx0Y3VycmVudC1cdTAwM2VtbS1cdTAwM2VkZWZfZmxhZ3MgfD0gVk1fTE9DS09ORkFVTFQ7XG4mIzQzO1x0XHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2bW0tXHUwMDNlZGVmX3ZtYV9mbGFncywgVk1BX0xPQ0tPTkZBVUxUX0JJVCk7XG4gXG4gXHRcdGlmICghKGZsYWdzIFx1MDAyNiBNQ0xfQ1VSUkVOVCkpXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IE1DTF9DVVJSRU5UKSB7XG4tXHRcdHRvX2FkZCB8PSBWTV9MT0NLRUQ7XG4mIzQzO1x0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnRvX2FkZCwgVk1BX0xPQ0tFRF9CSVQpO1xuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1DTF9PTkZBVUxUKVxuLVx0XHRcdHRvX2FkZCB8PSBWTV9MT0NLT05GQVVMVDtcbiYjNDM7XHRcdFx0dm1hX2ZsYWdzX3NldChcdTAwMjZ0b19hZGQsIFZNQV9MT0NLT05GQVVMVF9CSVQpO1xuIFx0fVxuIFxuIFx0Zm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7XG4gXHRcdGludCBlcnJvcjtcbi1cdFx0dm1fZmxhZ3NfdCBuZXdmbGFncztcbiYjNDM7XHRcdHZtYV9mbGFnc190IG5ld2ZsYWdzID0gdm1hLVx1MDAzZWZsYWdzO1xuIFxuLVx0XHRuZXdmbGFncyA9IHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgflZNX0xPQ0tFRF9NQVNLO1xuLVx0XHRuZXdmbGFncyB8PSB0b19hZGQ7XG4mIzQzO1x0XHR2bWFfZmxhZ3NfY2xlYXJfbWFzayhcdTAwMjZuZXdmbGFncywgVk1BX0xPQ0tFRF9NQVNLKTtcbiYjNDM7XHRcdHZtYV9mbGFnc19zZXRfbWFzayhcdTAwMjZuZXdmbGFncywgdG9fYWRkKTtcbiBcbiBcdFx0ZXJyb3IgPSBtbG9ja19maXh1cChcdTAwMjZ2bWksIHZtYSwgXHUwMDI2cHJldiwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLFxuLVx0XHRcdFx0ICAgIG5ld2ZsYWdzKTtcbiYjNDM7XHRcdFx0XHQgICAgXHUwMDI2bmV3ZmxhZ3MpO1xuIFx0XHQvKiBJZ25vcmUgZXJyb3JzLCBidXQgcHJldiBuZWVkcyBmaXhpbmcgdXAuICovXG4gXHRcdGlmIChlcnJvcilcbiBcdFx0XHRwcmV2ID0gdm1hO1xuZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuY1xuaW5kZXggMzA4YTQzZWFiZDgzYjEuLjRiZjI2YjBmMWU2ZTM2IDEwMDY0NFxuLS0tIGEvbW0vbW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tbWFwLmNcbkBAIC04MCwxMyAmIzQzOzgwLDEzIEBAIGNvcmVfcGFyYW0oaWdub3JlX3JsaW1pdF9kYXRhLCBpZ25vcmVfcmxpbWl0X2RhdGEsIGJvb2wsIDA2NDQpO1xuIC8qIFVwZGF0ZSB2bWEtXHUwMDNldm1fcGFnZV9wcm90IHRvIHJlZmxlY3Qgdm1hLVx1MDAzZXZtX2ZsYWdzLiAqL1xuIHZvaWQgdm1hX3NldF9wYWdlX3Byb3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuLVx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYS1cdTAwM2V2bV9mbGFncztcbiYjNDM7XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSB2bWEtXHUwMDNlZmxhZ3M7XG4gXHRwZ3Byb3RfdCB2bV9wYWdlX3Byb3Q7XG4gXG4tXHR2bV9wYWdlX3Byb3QgPSB2bV9wZ3Byb3RfbW9kaWZ5KHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QsIHZtX2ZsYWdzKTtcbiYjNDM7XHR2bV9wYWdlX3Byb3QgPSB2bWFfcGdwcm90X21vZGlmeSh2bWEtXHUwMDNldm1fcGFnZV9wcm90LCB2bWFfZmxhZ3MpO1xuIFx0aWYgKHZtYV93YW50c193cml0ZW5vdGlmeSh2bWEsIHZtX3BhZ2VfcHJvdCkpIHtcbi1cdFx0dm1fZmxhZ3MgXHUwMDI2PSB+Vk1fU0hBUkVEO1xuLVx0XHR2bV9wYWdlX3Byb3QgPSB2bV9wZ3Byb3RfbW9kaWZ5KHZtX3BhZ2VfcHJvdCwgdm1fZmxhZ3MpO1xuJiM0MztcdFx0dm1hX2ZsYWdzX2NsZWFyKFx1MDAyNnZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpO1xuJiM0MztcdFx0dm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bWFfZmxhZ3MpO1xuIFx0fVxuIFx0LyogcmVtb3ZlX3Byb3RlY3Rpb25fcHRlcyByZWFkcyB2bWEtXHUwMDNldm1fcGFnZV9wcm90IHdpdGhvdXQgbW1hcF9sb2NrICovXG4gXHRXUklURV9PTkNFKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QsIHZtX3BhZ2VfcHJvdCk7XG5AQCAtMTAyLDE1ICYjNDM7MTAyLDE2IEBAIHZvaWQgdm1hX3NldF9wYWdlX3Byb3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gICovXG4gc3RhdGljIGludCBjaGVja19icmtfbGltaXRzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pXG4ge1xuJiM0MztcdGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbiYjNDM7XHRjb25zdCBib29sIGlzX2RlZl9sb2NrZWQgPVxuJiM0MztcdFx0dm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bW0tXHUwMDNlZGVmX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpO1xuIFx0dW5zaWduZWQgbG9uZyBtYXBwZWRfYWRkcjtcbiBcbiBcdG1hcHBlZF9hZGRyID0gZ2V0X3VubWFwcGVkX2FyZWEoTlVMTCwgYWRkciwgbGVuLCAwLCBNQVBfRklYRUQpO1xuIFx0aWYgKElTX0VSUl9WQUxVRShtYXBwZWRfYWRkcikpXG4gXHRcdHJldHVybiBtYXBwZWRfYWRkcjtcbiBcbi1cdHJldHVybiBtbG9ja19mdXR1cmVfb2soY3VycmVudC1cdTAwM2VtbSxcbi1cdFx0XHQgICAgICBjdXJyZW50LVx1MDAzZW1tLVx1MDAzZWRlZl9mbGFncyBcdTAwMjYgVk1fTE9DS0VELCBsZW4pXG4tXHRcdD8gMCA6IC1FQUdBSU47XG4mIzQzO1x0cmV0dXJuIG1sb2NrX2Z1dHVyZV9vayhtbSwgaXNfZGVmX2xvY2tlZCwgbGVuKSA/IDAgOiAtRUFHQUlOO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTEoYnJrLCB1bnNpZ25lZCBsb25nLCBicmspXG5AQCAtMTk3LDcgJiM0MzsxOTgsNyBAQCBTWVNDQUxMX0RFRklORTEoYnJrLCB1bnNpZ25lZCBsb25nLCBicmspXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0bW0tXHUwMDNlYnJrID0gYnJrO1xuLVx0aWYgKG1tLVx1MDAzZWRlZl9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKVxuJiM0MztcdGlmICh2bWFfZmxhZ3NfdGVzdChcdTAwMjZtbS1cdTAwM2VkZWZfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdHBvcHVsYXRlID0gdHJ1ZTtcbiBcbiBzdWNjZXNzOlxuQEAgLTI4MCw3ICYjNDM7MjgxLDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbGVfbW1hcF9vayhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgKiBkb19tbWFwKCkgLSBQZXJmb3JtIGEgdXNlcmxhbmQgbWVtb3J5IG1hcHBpbmcgaW50byB0aGUgY3VycmVudCBwcm9jZXNzXG4gICogYWRkcmVzcyBzcGFjZSBvZiBsZW5ndGggQGxlbiB3aXRoIHByb3RlY3Rpb24gYml0cyBAcHJvdCwgbW1hcCBmbGFncyBAZmxhZ3NcbiAgKiAoZnJvbSB3aGljaCBWTUEgZmxhZ3Mgd2lsbCBiZSBpbmZlcnJlZCksIGFuZCBhbnkgYWRkaXRpb25hbCBWTUEgZmxhZ3MgdG9cbi0gKiBhcHBseSBAdm1fZmxhZ3MuIElmIHRoaXMgaXMgYSBmaWxlLWJhY2tlZCBtYXBwaW5nIHRoZW4gdGhlIGZpbGUgaXMgc3BlY2lmaWVkXG4mIzQzOyAqIGFwcGx5IEB2bWFfZmxhZ3MuIElmIHRoaXMgaXMgYSBmaWxlLWJhY2tlZCBtYXBwaW5nIHRoZW4gdGhlIGZpbGUgaXMgc3BlY2lmaWVkXG4gICogaW4gQGZpbGUgYW5kIHBhZ2Ugb2Zmc2V0IGludG8gdGhlIGZpbGUgdmlhIEBwZ29mZi5cbiAgKlxuICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcGVyZm9ybSBzZWN1cml0eSBjaGVja3Mgb24gdGhlIGZpbGUgYW5kIGFzc3VtZXMsIGlmXG5AQCAtMzIwLDcgJiM0MzszMjEsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9tbWFwX29rKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuICAqICgyKSBmb3IgZGV0YWlscy5cbiAgKiBAZmxhZ3M6IEZsYWdzIHNwZWNpZnlpbmcgaG93IHRoZSBtYXBwaW5nIHNob3VsZCBiZSBwZXJmb3JtZWQsIHNlZSBtbWFwICgyKVxuICAqIGZvciBkZXRhaWxzLlxuLSAqIEB2bV9mbGFnczogVk1BIGZsYWdzIHdoaWNoIHNob3VsZCBiZSBzZXQgYnkgZGVmYXVsdCwgb3IgMCBvdGhlcndpc2UuXG4mIzQzOyAqIEB2bWFfZmxhZ3M6IFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgc2V0IGJ5IGRlZmF1bHQsIG9yIEVNUFRZX1ZNQV9GTEFHU1xuJiM0MzsgKiBvdGhlcndpc2UuXG4gICogQHBnb2ZmOiBQYWdlIG9mZnNldCBpbnRvIHRoZSBAZmlsZSBpZiBmaWxlLWJhY2tlZCwgc2hvdWxkIGJlIDAgb3RoZXJ3aXNlLlxuICAqIEBwb3B1bGF0ZTogQSBwb2ludGVyIHRvIGEgdmFsdWUgd2hpY2ggd2lsbCBiZSBzZXQgdG8gMCBpZiBubyBwb3B1bGF0aW9uIG9mXG4gICogdGhlIHJhbmdlIGlzIHJlcXVpcmVkLCBvciB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHBvcHVsYXRlIGlmIGl0IGlzLiBNdXN0IGJlXG5AQCAtMzM1LDcgJiM0MzszMzcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9tbWFwX29rKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuICAqL1xuIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHByb3QsXG4tXHRcdFx0dW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncyxcbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzLFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgKnBvcHVsYXRlLFxuIFx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnVmKVxuIHtcbkBAIC0zOTksMTMgJiM0Mzs0MDEsMTggQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHQgKiB0by4gd2UgYXNzdW1lIGFjY2VzcyBwZXJtaXNzaW9ucyBoYXZlIGJlZW4gaGFuZGxlZCBieSB0aGUgb3BlblxuIFx0ICogb2YgdGhlIG1lbW9yeSBvYmplY3QsIHNvIHdlIGRvbiYjMzk7dCBkbyBhbnkgaGVyZS5cbiBcdCAqL1xuLVx0dm1fZmxhZ3MgfD0gY2FsY192bV9wcm90X2JpdHMocHJvdCwgcGtleSkgfCBjYWxjX3ZtX2ZsYWdfYml0cyhmaWxlLCBmbGFncykgfFxuLVx0XHRcdG1tLVx1MDAzZWRlZl9mbGFncyB8IFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUM7XG4mIzQzO1x0dm1hX2ZsYWdzX3NldF9tYXNrKFx1MDAyNnZtYV9mbGFncyxcbiYjNDM7XHRcdFx0ICAgbGVnYWN5X3RvX3ZtYV9mbGFncyhjYWxjX3ZtX3Byb3RfYml0cyhwcm90LCBwa2V5KSkpO1xuJiM0MztcdHZtYV9mbGFnc19zZXRfbWFzayhcdTAwMjZ2bWFfZmxhZ3MsXG4mIzQzO1x0XHRcdCAgIGxlZ2FjeV90b192bWFfZmxhZ3MoY2FsY192bV9mbGFnX2JpdHMoZmlsZSwgZmxhZ3MpKSk7XG4mIzQzO1x0dm1hX2ZsYWdzX3NldF9tYXNrKFx1MDAyNnZtYV9mbGFncywgbW0tXHUwMDNlZGVmX3ZtYV9mbGFncyk7XG4mIzQzO1x0dm1hX2ZsYWdzX3NldChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9NQVlSRUFEX0JJVCwgVk1BX01BWVdSSVRFX0JJVCxcbiYjNDM7XHRcdCAgICAgIFZNQV9NQVlFWEVDX0JJVCk7XG4gXG4gXHQvKiBPYnRhaW4gdGhlIGFkZHJlc3MgdG8gbWFwIHRvLiB3ZSB2ZXJpZnkgKG9yIHNlbGVjdCkgaXQgYW5kIGVuc3VyZVxuIFx0ICogdGhhdCBpdCByZXByZXNlbnRzIGEgdmFsaWQgc2VjdGlvbiBvZiB0aGUgYWRkcmVzcyBzcGFjZS5cbiBcdCAqL1xuLVx0YWRkciA9IF9fZ2V0X3VubWFwcGVkX2FyZWEoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcbiYjNDM7XHRhZGRyID0gX19nZXRfdW5tYXBwZWRfYXJlYShmaWxlLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywgdm1hX2ZsYWdzKTtcbiBcdGlmIChJU19FUlJfVkFMVUUoYWRkcikpXG4gXHRcdHJldHVybiBhZGRyO1xuIFxuQEAgLTQxOCw3ICYjNDM7NDI1LDcgQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGlmICghY2FuX2RvX21sb2NrKCkpXG4gXHRcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGlmICghbWxvY2tfZnV0dXJlX29rKG1tLCB2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VELCBsZW4pKVxuJiM0MztcdGlmICghbWxvY2tfZnV0dXJlX29rKG1tLCB2bWFfZmxhZ3NfdGVzdChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSwgbGVuKSlcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG4gXG4gXHRpZiAoZmlsZSkge1xuQEAgLTQ2MSwyMiAmIzQzOzQ2OCwyMyBAQCB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRpZiAoSVNfQVBQRU5EKGlub2RlKSBcdTAwMjZcdTAwMjYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURSkpXG4gXHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcbi1cdFx0XHR2bV9mbGFncyB8PSBWTV9TSEFSRUQgfCBWTV9NQVlTSEFSRTtcbiYjNDM7XHRcdFx0dm1hX2ZsYWdzX3NldChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklULCBWTUFfTUFZU0hBUkVfQklUKTtcbiBcdFx0XHRpZiAoIShmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfV1JJVEUpKVxuLVx0XHRcdFx0dm1fZmxhZ3MgXHUwMDI2PSB+KFZNX01BWVdSSVRFIHwgVk1fU0hBUkVEKTtcbiYjNDM7XHRcdFx0XHR2bWFfZmxhZ3NfY2xlYXIoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTUFZV1JJVEVfQklULFxuJiM0MztcdFx0XHRcdFx0XHRWTUFfU0hBUkVEX0JJVCk7XG4gXHRcdFx0ZmFsbHRocm91Z2g7XG4gXHRcdGNhc2UgTUFQX1BSSVZBVEU6XG4gXHRcdFx0aWYgKCEoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1JFQUQpKVxuIFx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHRcdFx0aWYgKHBhdGhfbm9leGVjKFx1MDAyNmZpbGUtXHUwMDNlZl9wYXRoKSkge1xuLVx0XHRcdFx0aWYgKHZtX2ZsYWdzIFx1MDAyNiBWTV9FWEVDKVxuJiM0MztcdFx0XHRcdGlmICh2bWFfZmxhZ3NfdGVzdChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9FWEVDX0JJVCkpXG4gXHRcdFx0XHRcdHJldHVybiAtRVBFUk07XG4tXHRcdFx0XHR2bV9mbGFncyBcdTAwMjY9IH5WTV9NQVlFWEVDO1xuJiM0MztcdFx0XHRcdHZtYV9mbGFnc19jbGVhcihcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9NQVlFWEVDX0JJVCk7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdGlmICghY2FuX21tYXBfZmlsZShmaWxlKSlcbiBcdFx0XHRcdHJldHVybiAtRU5PREVWO1xuLVx0XHRcdGlmICh2bV9mbGFncyBcdTAwMjYgKFZNX0dST1dTRE9XTnxWTV9HUk9XU1VQKSlcbiYjNDM7XHRcdFx0aWYgKHZtYV9mbGFnc19jYW5fZ3JvdyhcdTAwMjZ2bWFfZmxhZ3MpKVxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtNDg4LDIzICYjNDM7NDk2LDI3IEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHQgKiBDaGVjayB0byBzZWUgaWYgd2UgYXJlIHZpb2xhdGluZyBhbnkgc2VhbHMgYW5kIHVwZGF0ZSBWTUFcbiBcdFx0ICogZmxhZ3MgaWYgbmVjZXNzYXJ5IHRvIGF2b2lkIGZ1dHVyZSBzZWFsIHZpb2xhdGlvbnMuXG4gXHRcdCAqL1xuLVx0XHRlcnIgPSBtZW1mZF9jaGVja19zZWFsc19tbWFwKGZpbGUsIFx1MDAyNnZtX2ZsYWdzKTtcbiYjNDM7XHRcdGVyciA9IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoZmlsZSwgXHUwMDI2dm1hX2ZsYWdzKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZXJyO1xuIFx0fSBlbHNlIHtcbiBcdFx0c3dpdGNoIChmbGFncyBcdTAwMjYgTUFQX1RZUEUpIHtcbiBcdFx0Y2FzZSBNQVBfU0hBUkVEOlxuLVx0XHRcdGlmICh2bV9mbGFncyBcdTAwMjYgKFZNX0dST1dTRE9XTnxWTV9HUk9XU1VQKSlcbiYjNDM7XHRcdFx0aWYgKHZtYV9mbGFnc19jYW5fZ3JvdyhcdTAwMjZ2bWFfZmxhZ3MpKVxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZ25vcmUgcGdvZmYuXG4gXHRcdFx0ICovXG4gXHRcdFx0cGdvZmYgPSAwO1xuLVx0XHRcdHZtX2ZsYWdzIHw9IFZNX1NIQVJFRCB8IFZNX01BWVNIQVJFO1xuJiM0MztcdFx0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQsIFZNQV9NQVlTSEFSRV9CSVQpO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIE1BUF9EUk9QUEFCTEU6XG4tXHRcdFx0aWYgKFZNX0RST1BQQUJMRSA9PSBWTV9OT05FKVxuJiM0MztcdFx0Y2FzZSBNQVBfRFJPUFBBQkxFOiB7XG4mIzQzO1x0XHRcdHZtYV9mbGFnc190IGRyb3BwYWJsZSA9IFZNQV9EUk9QUEFCTEU7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAodm1hX2ZsYWdzX2VtcHR5KFx1MDAyNmRyb3BwYWJsZSkpXG4gXHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRcdHZtYV9mbGFnc19zZXRfbWFzayhcdTAwMjZ2bWFfZmxhZ3MsIGRyb3BwYWJsZSk7XG4mIzQzO1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogQSBsb2NrZWQgb3Igc3RhY2sgYXJlYSBtYWtlcyBubyBzZW5zZSB0byBiZSBkcm9wcGFibGUuXG4gXHRcdFx0ICpcbkBAIC01MTUsMjMgJiM0Mzs1MjcsMjQgQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGZsYWdzIFx1MDAyNiAoTUFQX0xPQ0tFRCB8IE1BUF9IVUdFVExCKSlcbiBcdFx0XHQgICAgICAgIHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdGlmICh2bV9mbGFncyBcdTAwMjYgKFZNX0dST1dTRE9XTiB8IFZNX0dST1dTVVApKVxuJiM0MztcdFx0XHRpZiAodm1hX2ZsYWdzX2Nhbl9ncm93KFx1MDAyNnZtYV9mbGFncykpXG4gXHRcdFx0ICAgICAgICByZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0XHR2bV9mbGFncyB8PSBWTV9EUk9QUEFCTEU7XG4tXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZiB0aGUgcGFnZXMgY2FuIGJlIGRyb3BwZWQsIHRoZW4gaXQgZG9lc24mIzM5O3QgbWFrZVxuIFx0XHRcdCAqIHNlbnNlIHRvIHJlc2VydmUgdGhlbS5cbiBcdFx0XHQgKi9cbi1cdFx0XHR2bV9mbGFncyB8PSBWTV9OT1JFU0VSVkU7XG4mIzQzO1x0XHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTk9SRVNFUlZFX0JJVCk7XG4gXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBMaWtld2lzZSwgdGhleSYjMzk7cmUgdm9sYXRpbGUgZW5vdWdoIHRoYXQgdGhleVxuIFx0XHRcdCAqIHNob3VsZG4mIzM5O3Qgc3Vydml2ZSBmb3JrcyBvciBjb3JlZHVtcHMuXG4gXHRcdFx0ICovXG4tXHRcdFx0dm1fZmxhZ3MgfD0gVk1fV0lQRU9ORk9SSyB8IFZNX0RPTlREVU1QO1xuJiM0MztcdFx0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnZtYV9mbGFncywgVk1BX1dJUEVPTkZPUktfQklULFxuJiM0MztcdFx0XHRcdCAgICAgIFZNQV9ET05URFVNUF9CSVQpO1xuJiM0MztcbiBcdFx0XHRmYWxsdGhyb3VnaDtcbiYjNDM7XHRcdH1cbiBcdFx0Y2FzZSBNQVBfUFJJVkFURTpcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIFNldCBwZ29mZiBhY2NvcmRpbmcgdG8gYWRkciBmb3IgYW5vbl92bWEuXG5AQCAtNTQ0LDIyICYjNDM7NTU3LDIyIEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0fVxuIFxuIFx0Lypcbi1cdCAqIFNldCAmIzM5O1ZNX05PUkVTRVJWRSYjMzk7IGlmIHdlIHNob3VsZCBub3QgYWNjb3VudCBmb3IgdGhlXG4tXHQgKiBtZW1vcnkgdXNlIG9mIHRoaXMgbWFwcGluZy5cbiYjNDM7XHQgKiBTZXQgVk1BX05PUkVTRVJWRV9CSVQgaWYgd2Ugc2hvdWxkIG5vdCBhY2NvdW50IGZvciB0aGUgbWVtb3J5IHVzZVxuJiM0MztcdCAqIG9mIHRoaXMgbWFwcGluZy5cbiBcdCAqL1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBNQVBfTk9SRVNFUlZFKSB7XG4gXHRcdC8qIFdlIGhvbm9yIE1BUF9OT1JFU0VSVkUgaWYgYWxsb3dlZCB0byBvdmVyY29tbWl0ICovXG4gXHRcdGlmIChzeXNjdGxfb3ZlcmNvbW1pdF9tZW1vcnkgIT0gT1ZFUkNPTU1JVF9ORVZFUilcbi1cdFx0XHR2bV9mbGFncyB8PSBWTV9OT1JFU0VSVkU7XG4mIzQzO1x0XHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTk9SRVNFUlZFX0JJVCk7XG4gXG4gXHRcdC8qIGh1Z2V0bGIgYXBwbGllcyBzdHJpY3Qgb3ZlcmNvbW1pdCB1bmxlc3MgTUFQX05PUkVTRVJWRSAqL1xuIFx0XHRpZiAoZmlsZSBcdTAwMjZcdTAwMjYgaXNfZmlsZV9odWdlcGFnZXMoZmlsZSkpXG4tXHRcdFx0dm1fZmxhZ3MgfD0gVk1fTk9SRVNFUlZFO1xuJiM0MztcdFx0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnZtYV9mbGFncywgVk1BX05PUkVTRVJWRV9CSVQpO1xuIFx0fVxuIFxuLVx0YWRkciA9IG1tYXBfcmVnaW9uKGZpbGUsIGFkZHIsIGxlbiwgdm1fZmxhZ3MsIHBnb2ZmLCB1Zik7XG4mIzQzO1x0YWRkciA9IG1tYXBfcmVnaW9uKGZpbGUsIGFkZHIsIGxlbiwgdm1hX2ZsYWdzLCBwZ29mZiwgdWYpO1xuIFx0aWYgKCFJU19FUlJfVkFMVUUoYWRkcikgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCh2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKSB8fFxuJiM0MztcdCAgICAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkgfHxcbiBcdCAgICAgKGZsYWdzIFx1MDAyNiAoTUFQX1BPUFVMQVRFIHwgTUFQX05PTkJMT0NLKSkgPT0gTUFQX1BPUFVMQVRFKSlcbiBcdFx0KnBvcHVsYXRlID0gbGVuO1xuIFx0cmV0dXJuIGFkZHI7XG5AQCAtNjQ1LDkgJiM0Mzs2NTgsOSBAQCBTWVNDQUxMX0RFRklORTEob2xkX21tYXAsIHN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgX191c2VyICosIGFyZylcbiAgKiBEZXRlcm1pbmUgaWYgdGhlIGFsbG9jYXRpb24gbmVlZHMgdG8gZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm9cbiAgKiBleGlzdGluZyBtYXBwaW5nIHdpdGhpbiBpdCYjMzk7cyBndWFyZCBnYXBzLCBmb3IgdXNlIGFzIHN0YXJ0X2dhcC5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbi1cdGlmICh2bV9mbGFncyBcdTAwMjYgVk1fU0hBRE9XX1NUQUNLKVxuJiM0MztcdGlmICh2bWFfZmxhZ3NfdGVzdF9zaW5nbGVfbWFzayhcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9TSEFET1dfU1RBQ0spKVxuIFx0XHRyZXR1cm4gUEFHRV9TSVpFO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNjg5LDcgJiM0Mzs3MDIsNyBAQCB1bnNpZ25lZCBsb25nIHZtX3VubWFwcGVkX2FyZWEoc3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyAqaW5mbylcbiB1bnNpZ25lZCBsb25nXG4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXG4tXHRcdFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxuJiM0MztcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXHUwMDNlbW07XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgKnByZXY7XG5AQCAtNzE0LDcgJiM0Mzs3MjcsNyBAQCBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpbmZvLmxlbmd0aCA9IGxlbjtcbiBcdGluZm8ubG93X2xpbWl0ID0gbW0tXHUwMDNlbW1hcF9iYXNlO1xuIFx0aW5mby5oaWdoX2xpbWl0ID0gbW1hcF9lbmQ7XG4tXHRpbmZvLnN0YXJ0X2dhcCA9IHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bV9mbGFncyk7XG4mIzQzO1x0aW5mby5zdGFydF9nYXAgPSBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1hX2ZsYWdzKTtcbiBcdGlmIChmaWxwIFx1MDAyNlx1MDAyNiBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcbiBcdFx0aW5mby5hbGlnbl9tYXNrID0gaHVnZV9wYWdlX21hc2tfYWxpZ24oZmlscCk7XG4gXHRyZXR1cm4gdm1fdW5tYXBwZWRfYXJlYShcdTAwMjZpbmZvKTtcbkBAIC03MjcsNyAmIzQzOzc0MCw3IEBAIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4ge1xuIFx0cmV0dXJuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4tXHRcdFx0XHRcdCB2bV9mbGFncyk7XG4mIzQzO1x0XHRcdFx0XHQgbGVnYWN5X3RvX3ZtYV9mbGFncyh2bV9mbGFncykpO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC03MzgsNyAmIzQzOzc1MSw3IEBAIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiB1bnNpZ25lZCBsb25nXG4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxuJiM0MztcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCAqcHJldjtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbkBAIC03NjYsNyAmIzQzOzc3OSw3IEBAIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0aW5mby5sZW5ndGggPSBsZW47XG4gXHRpbmZvLmxvd19saW1pdCA9IFBBR0VfU0laRTtcbiBcdGluZm8uaGlnaF9saW1pdCA9IGFyY2hfZ2V0X21tYXBfYmFzZShhZGRyLCBtbS1cdTAwM2VtbWFwX2Jhc2UpO1xuLVx0aW5mby5zdGFydF9nYXAgPSBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1fZmxhZ3MpO1xuJiM0MztcdGluZm8uc3RhcnRfZ2FwID0gc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtYV9mbGFncyk7XG4gXHRpZiAoZmlscCBcdTAwMjZcdTAwMjYgaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXG4gXHRcdGluZm8uYWxpZ25fbWFzayA9IGh1Z2VfcGFnZV9tYXNrX2FsaWduKGZpbHApO1xuIFx0YWRkciA9IHZtX3VubWFwcGVkX2FyZWEoXHUwMDI2aW5mbyk7XG5AQCAtNzk1LDIzICYjNDM7ODA4LDI0IEBAIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxuIHtcbiBcdHJldHVybiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4tXHRcdFx0XHRcdFx0IHZtX2ZsYWdzKTtcbiYjNDM7XHRcdFx0XHRcdFx0IGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3MpKTtcbiB9XG4gI2VuZGlmXG4gXG4tdW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuLVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxuJiM0Mzt1bnNpZ25lZCBsb25nIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyxcbiYjNDM7XHRcdHZtYV9mbGFnc190IHZtYV9mbGFncylcbiB7XG4gXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfVE9QRE9XTiwgY3VycmVudC1cdTAwM2VtbSkpXG4gXHRcdHJldHVybiBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oZmlscCwgYWRkciwgbGVuLCBwZ29mZixcbi1cdFx0XHRcdFx0XHQgICAgICBmbGFncywgdm1fZmxhZ3MpO1xuLVx0cmV0dXJuIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcbiYjNDM7XHRcdFx0XHRmbGFncywgdm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpKTtcbiYjNDM7XHRyZXR1cm4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyxcbiYjNDM7XHRcdFx0dm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpKTtcbiB9XG4gXG4gdW5zaWduZWQgbG9uZ1xuIF9fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXG4tXHRcdHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyAoKmdldF9hcmVhKShzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKVxuQEAgLTg0NiwxMSAmIzQzOzg2MCwxMSBAQCBfX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxuIFx0XHQgICBcdTAwMjZcdTAwMjYgIWFkZHIgLyogbm8gaGludCAqL1xuIFx0XHQgICBcdTAwMjZcdTAwMjYgSVNfQUxJR05FRChsZW4sIFBNRF9TSVpFKSkge1xuIFx0XHQvKiBFbnN1cmVzIHRoYXQgbGFyZ2VyIGFub255bW91cyBtYXBwaW5ncyBhcmUgVEhQIGFsaWduZWQuICovXG4tXHRcdGFkZHIgPSB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxlLCBhZGRyLCBsZW4sXG4tXHRcdFx0XHRcdFx0ICAgICBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcbiYjNDM7XHRcdGFkZHIgPSB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MoZmlsZSwgYWRkciwgbGVuLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICBwZ29mZiwgZmxhZ3MsIHZtYV9mbGFncyk7XG4gXHR9IGVsc2Uge1xuLVx0XHRhZGRyID0gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxlLCBhZGRyLCBsZW4sXG4tXHRcdFx0XHRcdFx0ICAgIHBnb2ZmLCBmbGFncywgdm1fZmxhZ3MpO1xuJiM0MztcdFx0YWRkciA9IG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbGUsIGFkZHIsIGxlbixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBwZ29mZiwgZmxhZ3MsIHZtYV9mbGFncyk7XG4gXHR9XG4gXHRpZiAoSVNfRVJSX1ZBTFVFKGFkZHIpKVxuIFx0XHRyZXR1cm4gYWRkcjtcbkBAIC04NjgsNyAmIzQzOzg4Miw4IEBAIHVuc2lnbmVkIGxvbmdcbiBtbV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcbiBcdFx0ICAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIHtcbi1cdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTtcbiYjNDM7XHRyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHQgICAgIEVNUFRZX1ZNQV9GTEFHUyk7XG4gfVxuIEVYUE9SVF9TWU1CT0wobW1fZ2V0X3VubWFwcGVkX2FyZWEpO1xuIFxuQEAgLTk3MCw3ICYjNDM7OTg1LDcgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX2V4dGVuZF92bWFfbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25cbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHRpZiAoZXhwYW5kX3N0YWNrX2xvY2tlZChwcmV2LCBhZGRyKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHRpZiAocHJldi1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKVxuJiM0MztcdGlmICh2bWFfdGVzdChwcmV2LCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdHBvcHVsYXRlX3ZtYV9wYWdlX3JhbmdlKHByZXYsIGFkZHIsIHByZXYtXHUwMDNldm1fZW5kLCBOVUxMKTtcbiBcdHJldHVybiBwcmV2O1xuIH1cbkBAIC05OTQsNyAmIzQzOzEwMDksNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfZXh0ZW5kX3ZtYV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvblxuIFx0c3RhcnQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4gXHRpZiAoZXhwYW5kX3N0YWNrX2xvY2tlZCh2bWEsIGFkZHIpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbiYjNDM7XHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdHBvcHVsYXRlX3ZtYV9wYWdlX3JhbmdlKHZtYSwgYWRkciwgc3RhcnQsIE5VTEwpO1xuIFx0cmV0dXJuIHZtYTtcbiB9XG5AQCAtMTExOSwxOCAmIzQzOzExMzQsMTggQEAgU1lTQ0FMTF9ERUZJTkU1KHJlbWFwX2ZpbGVfcGFnZXMsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBzaXplLFxuIFx0ICovXG4gXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBzdGFydCk7XG4gXG4tXHRpZiAoIXZtYSB8fCAhKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fU0hBUkVEKSkge1xuJiM0MztcdGlmICghdm1hIHx8ICF2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKSkge1xuIFx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRwcm90IHw9IHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVBRCA/IFBST1RfUkVBRCA6IDA7XG4tXHRwcm90IHw9IHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fV1JJVEUgPyBQUk9UX1dSSVRFIDogMDtcbi1cdHByb3QgfD0gdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9FWEVDID8gUFJPVF9FWEVDIDogMDtcbiYjNDM7XHRwcm90IHw9IHZtYV90ZXN0KHZtYSwgVk1BX1JFQURfQklUKSA/IFBST1RfUkVBRCA6IDA7XG4mIzQzO1x0cHJvdCB8PSB2bWFfdGVzdCh2bWEsIFZNQV9XUklURV9CSVQpID8gUFJPVF9XUklURSA6IDA7XG4mIzQzO1x0cHJvdCB8PSB2bWFfdGVzdCh2bWEsIFZNQV9FWEVDX0JJVCkgPyBQUk9UX0VYRUMgOiAwO1xuIFxuIFx0ZmxhZ3MgXHUwMDI2PSBNQVBfTk9OQkxPQ0s7XG4gXHRmbGFncyB8PSBNQVBfU0hBUkVEIHwgTUFQX0ZJWEVEIHwgTUFQX1BPUFVMQVRFO1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKVxuJiM0MztcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSlcbiBcdFx0ZmxhZ3MgfD0gTUFQX0xPQ0tFRDtcbiBcbiBcdC8qIFNhdmUgdm1fZmxhZ3MgdXNlZCB0byBjYWxjdWxhdGUgcHJvdCBhbmQgZmxhZ3MsIGFuZCByZWNoZWNrIGxhdGVyLiAqL1xuQEAgLTExOTEsNyAmIzQzOzEyMDYsNyBAQCBTWVNDQUxMX0RFRklORTUocmVtYXBfZmlsZV9wYWdlcywgdW5zaWduZWQgbG9uZywgc3RhcnQsIHVuc2lnbmVkIGxvbmcsIHNpemUsXG4gXHR9XG4gXG4gXHRyZXQgPSBkb19tbWFwKHZtYS1cdTAwM2V2bV9maWxlLCBzdGFydCwgc2l6ZSxcbi1cdFx0XHRwcm90LCBmbGFncywgMCwgcGdvZmYsIFx1MDAyNnBvcHVsYXRlLCBOVUxMKTtcbiYjNDM7XHRcdFx0cHJvdCwgZmxhZ3MsIEVNUFRZX1ZNQV9GTEFHUywgcGdvZmYsIFx1MDAyNnBvcHVsYXRlLCBOVUxMKTtcbiBvdXQ6XG4gXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XG4gXHRmcHV0KGZpbGUpO1xuQEAgLTEyMzMsNyAmIzQzOzEyNDgsNyBAQCBpbnQgdm1fYnJrX2ZsYWdzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0LCBib29sIGlzX2V4ZWMpXG4gXG4gXHR2bWEgPSB2bWFfcHJldihcdTAwMjZ2bWkpO1xuIFx0cmV0ID0gZG9fYnJrX2ZsYWdzKFx1MDAyNnZtaSwgdm1hLCBhZGRyLCBsZW4sIHZtYV9mbGFncyk7XG4tXHRwb3B1bGF0ZSA9ICgobW0tXHUwMDNlZGVmX2ZsYWdzIFx1MDAyNiBWTV9MT0NLRUQpICE9IDApO1xuJiM0MztcdHBvcHVsYXRlID0gdm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bW0tXHUwMDNlZGVmX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpO1xuIFx0bW1hcF93cml0ZV91bmxvY2sobW0pO1xuIFx0dXNlcmZhdWx0ZmRfdW5tYXBfY29tcGxldGUobW0sIFx1MDAyNnVmKTtcbiBcdGlmIChwb3B1bGF0ZSBcdTAwMjZcdTAwMjYgIXJldClcbkBAIC0xMjU2LDcgJiM0MzsxMjcxLDcgQEAgdW5zaWduZWQgbG9uZyB0ZWFyX2Rvd25fdm1hcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxuIFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTtcbiBcdHZtYV9pdGVyX3NldCh2bWksIHZtYS1cdTAwM2V2bV9lbmQpO1xuIFx0ZG8ge1xuLVx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKVxuJiM0MztcdFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0FDQ09VTlRfQklUKSlcbiBcdFx0XHRucl9hY2NvdW50ZWQgJiM0Mzs9IHZtYV9wYWdlcyh2bWEpO1xuIFx0XHR2bWFfbWFya19kZXRhY2hlZCh2bWEpO1xuIFx0XHRyZW1vdmVfdm1hKHZtYSk7XG5AQCAtMTQwNSw3ICYjNDM7MTQyMCw3IEBAIHN0YXRpYyBpbnQgc3BlY2lhbF9tYXBwaW5nX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4ge1xuIFx0LypcbiBcdCAqIEZvcmJpZCBzcGxpdHRpbmcgc3BlY2lhbCBtYXBwaW5ncyAtIGtlcm5lbCBoYXMgZXhwZWN0YXRpb25zIG92ZXJcbi1cdCAqIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gbWFwcGluZy4gVG9nZXRoZXIgd2l0aCBWTV9ET05URVhQQU5EXG4mIzQzO1x0ICogdGhlIG51bWJlciBvZiBwYWdlcyBpbiBtYXBwaW5nLiBUb2dldGhlciB3aXRoIFZNQV9ET05URVhQQU5EX0JJVFxuIFx0ICogdGhlIHNpemUgb2Ygdm1hIHNob3VsZCBzdGF5IHRoZSBzYW1lIG92ZXIgdGhlIHNwZWNpYWwgbWFwcGluZyYjMzk7c1xuIFx0ICogbGlmZXRpbWUuXG4gXHQgKi9cbkBAIC0xNjc3LDcgJiM0MzsxNjkyLDcgQEAgYm9vbCBtbWFwX3JlYWRfbG9ja19tYXliZV9leHBhbmQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKCEobmV3X3ZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fR1JPV1NET1dOKSlcbiYjNDM7XHRpZiAoIXZtYV90ZXN0KG5ld192bWEsIFZNQV9HUk9XU0RPV05fQklUKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0bW1hcF93cml0ZV9sb2NrKG1tKTtcbkBAIC0xNzI3LDcgJiM0MzsxNzQyLDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxuIFx0XHRyZXR2YWwgPSB2bWFfc3RhcnRfd3JpdGVfa2lsbGFibGUobXBudCk7XG4gXHRcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gXHRcdFx0Z290byBsb29wX291dDtcbi1cdFx0aWYgKG1wbnQtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0RPTlRDT1BZKSB7XG4mIzQzO1x0XHRpZiAodm1hX3Rlc3QobXBudCwgVk1BX0RPTlRDT1BZX0JJVCkpIHtcbiBcdFx0XHRyZXR2YWwgPSB2bWFfaXRlcl9jbGVhcl9nZnAoXHUwMDI2dm1pLCBtcG50LVx1MDAzZXZtX3N0YXJ0LFxuIFx0XHRcdFx0XHRcdCAgICBtcG50LVx1MDAzZXZtX2VuZCwgR0ZQX0tFUk5FTCk7XG4gXHRcdFx0aWYgKHJldHZhbClcbkBAIC0xNzM3LDcgJiM0MzsxNzUyLDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGNoYXJnZSA9IDA7XG4tXHRcdGlmIChtcG50LVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKSB7XG4mIzQzO1x0XHRpZiAodm1hX3Rlc3QobXBudCwgVk1BX0FDQ09VTlRfQklUKSkge1xuIFx0XHRcdHVuc2lnbmVkIGxvbmcgbGVuID0gdm1hX3BhZ2VzKG1wbnQpO1xuIFxuIFx0XHRcdGlmIChzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5X21tKG9sZG1tLCBsZW4pKSAvKiBzaWMgKi9cbkBAIC0xNzU1LDE2ICYjNDM7MTc3MCwxOSBAQCBfX2xhdGVudF9lbnRyb3B5IGludCBkdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pXG4gXHRcdHJldHZhbCA9IGR1cF91c2VyZmF1bHRmZCh0bXAsIFx1MDAyNnVmKTtcbiBcdFx0aWYgKHJldHZhbClcbiBcdFx0XHRnb3RvIGZhaWxfbm9tZW1fYW5vbl92bWFfZm9yaztcbi1cdFx0aWYgKHRtcC1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fV0lQRU9ORk9SSykge1xuJiM0MztcbiYjNDM7XHRcdGlmICh2bWFfdGVzdCh0bXAsIFZNQV9XSVBFT05GT1JLX0JJVCkpIHtcbiBcdFx0XHQvKlxuLVx0XHRcdCAqIFZNX1dJUEVPTkZPUksgZ2V0cyBhIGNsZWFuIHNsYXRlIGluIHRoZSBjaGlsZC5cbiYjNDM7XHRcdFx0ICogVk1BX1dJUEVPTkZPUktfQklUIGdldHMgYSBjbGVhbiBzbGF0ZSBpbiB0aGUgY2hpbGQuXG4gXHRcdFx0ICogRG9uJiMzOTt0IHByZXBhcmUgYW5vbl92bWEgdW50aWwgZmF1bHQgc2luY2Ugd2UgZG9uJiMzOTt0XG4gXHRcdFx0ICogY29weSBwYWdlIGZvciBjdXJyZW50IHZtYS5cbiBcdFx0XHQgKi9cbiBcdFx0XHR0bXAtXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xuIFx0XHR9IGVsc2UgaWYgKGFub25fdm1hX2ZvcmsodG1wLCBtcG50KSlcbiBcdFx0XHRnb3RvIGZhaWxfbm9tZW1fYW5vbl92bWFfZm9yaztcbi1cdFx0dm1fZmxhZ3NfY2xlYXIodG1wLCBWTV9MT0NLRURfTUFTSyk7XG4mIzQzO1xuJiM0MztcdFx0dm1hX3N0YXJ0X3dyaXRlKHRtcCk7XG4mIzQzO1x0XHR2bWFfY2xlYXJfZmxhZ3NfbWFzayh0bXAsIFZNQV9MT0NLRURfTUFTSyk7XG4gXHRcdC8qXG4gXHRcdCAqIENvcHkvdXBkYXRlIGh1Z2V0bGIgcHJpdmF0ZSB2bWEgaW5mb3JtYXRpb24uXG4gXHRcdCAqL1xuQEAgLTE3OTcsNyAmIzQzOzE4MTUsNyBAQCBfX2xhdGVudF9lbnRyb3B5IGludCBkdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pXG4gXHRcdFx0aV9tbWFwX3VubG9ja193cml0ZShtYXBwaW5nKTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoISh0bXAtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1dJUEVPTkZPUkspKVxuJiM0MztcdFx0aWYgKCF2bWFfdGVzdCh0bXAsIFZNQV9XSVBFT05GT1JLX0JJVCkpXG4gXHRcdFx0cmV0dmFsID0gY29weV9wYWdlX3JhbmdlKHRtcCwgbXBudCk7XG4gXG4gXHRcdGlmIChyZXR2YWwpIHtcbmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5jIGIvbW0vbXByb3RlY3QuY1xuaW5kZXggZGMyN2JiYzE3MTJmZDUuLjI4ODhlZTYzOGQ4NzJhIDEwMDY0NFxuLS0tIGEvbW0vbXByb3RlY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbXByb3RlY3QuY1xuQEAgLTQwLDcgJiM0Mzs0MCw3IEBAXG4gXG4gc3RhdGljIGJvb2wgbWF5YmVfY2hhbmdlX3B0ZV93cml0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcHRlX3QgcHRlKVxuIHtcbi1cdGlmIChXQVJOX09OX09OQ0UoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1dSSVRFKSkpXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghdm1hX3Rlc3Qodm1hLCBWTUFfV1JJVEVfQklUKSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIERvbiYjMzk7dCB0b3VjaCBlbnRyaWVzIHRoYXQgYXJlIG5vdCBldmVuIHJlYWRhYmxlLiAqL1xuQEAgLTk3LDcgJiM0Mzs5Nyw3IEBAIHN0YXRpYyBib29sIGNhbl9jaGFuZ2Vfc2hhcmVkX3B0ZV93cml0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBib29sIGNhbl9jaGFuZ2VfcHRlX3dyaXRhYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgICBwdGVfdCBwdGUpXG4ge1xuLVx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpKVxuJiM0MztcdGlmICghdm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCkpXG4gXHRcdHJldHVybiBjYW5fY2hhbmdlX3ByaXZhdGVfcHRlX3dyaXRhYmxlKHZtYSwgYWRkciwgcHRlKTtcbiBcbiBcdHJldHVybiBjYW5fY2hhbmdlX3NoYXJlZF9wdGVfd3JpdGFibGUodm1hLCBwdGUpO1xuQEAgLTE5NCw3ICYjNDM7MTk0LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHNldF93cml0ZV9wcm90X2NvbW1pdF9mbHVzaF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVcbiB7XG4gXHRib29sIHNldF93cml0ZTtcbiBcbi1cdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRCkge1xuJiM0MztcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKSkge1xuIFx0XHRzZXRfd3JpdGUgPSBjYW5fY2hhbmdlX3NoYXJlZF9wdGVfd3JpdGFibGUodm1hLCBwdGVudCk7XG4gXHRcdHByb3RfY29tbWl0X2ZsdXNoX3B0ZXModm1hLCBhZGRyLCBwdGVwLCBvbGRwdGUsIHB0ZW50LCBucl9wdGVzLFxuIFx0XHRcdFx0ICAgICAgIC8qIGlkeCA9ICovIDAsIHNldF93cml0ZSwgdGxiKTtcbkBAIC04NDYsOCAmIzQzOzg0Niw4IEBAIG1wcm90ZWN0X2ZpeHVwKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbiBcdFx0dm1fdW5hY2N0X21lbW9yeShucnBhZ2VzKTtcbiBcbiBcdC8qXG4tXHQgKiBQcml2YXRlIFZNX0xPQ0tFRCBWTUEgYmVjb21pbmcgd3JpdGFibGU6IHRyaWdnZXIgQ09XIHRvIGF2b2lkIG1ham9yXG4tXHQgKiBmYXVsdCBvbiBhY2Nlc3MuXG4mIzQzO1x0ICogUHJpdmF0ZSBWTUFfTE9DS0VEX0JJVCBWTUEgYmVjb21pbmcgd3JpdGFibGU6IHRyaWdnZXIgQ09XIHRvIGF2b2lkXG4mIzQzO1x0ICogbWFqb3IgZmF1bHQgb24gYWNjZXNzLlxuIFx0ICovXG4gXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bmV3X3ZtYV9mbGFncywgVk1BX1dSSVRFX0JJVCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgdm1hX2ZsYWdzX3Rlc3QoXHUwMDI2b2xkX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpIFx1MDAyNlx1MDAyNlxuQEAgLTkyMSw3ICYjNDM7OTIxLDcgQEAgc3RhdGljIGludCBkb19tcHJvdGVjdF9wa2V5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdHN0YXJ0ID0gdm1hLVx1MDAzZXZtX3N0YXJ0O1xuIFx0XHRlcnJvciA9IC1FSU5WQUw7XG4tXHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fR1JPV1NET1dOKSlcbiYjNDM7XHRcdGlmICghdm1hX3Rlc3Qodm1hLCBWTUFfR1JPV1NET1dOX0JJVCkpXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAodm1hLVx1MDAzZXZtX3N0YXJ0IFx1MDAzZSBzdGFydClcbkBAIC05MjksNyAmIzQzOzkyOSw3IEBAIHN0YXRpYyBpbnQgZG9fbXByb3RlY3RfcGtleSh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLFxuIFx0XHRpZiAodW5saWtlbHkoZ3Jvd3MgXHUwMDI2IFBST1RfR1JPV1NVUCkpIHtcbiBcdFx0XHRlbmQgPSB2bWEtXHUwMDNldm1fZW5kO1xuIFx0XHRcdGVycm9yID0gLUVJTlZBTDtcbi1cdFx0XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0dST1dTVVApKVxuJiM0MztcdFx0XHRpZiAoIXZtYV90ZXN0X3NpbmdsZV9tYXNrKHZtYSwgVk1BX0dST1dTVVApKVxuIFx0XHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcdH1cbkBAIC05NTMsNyAmIzQzOzk1Myw3IEBAIHN0YXRpYyBpbnQgZG9fbXByb3RlY3RfcGtleSh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLFxuIFx0XHR9XG4gXG4gXHRcdC8qIERvZXMgdGhlIGFwcGxpY2F0aW9uIGV4cGVjdCBQUk9UX1JFQUQgdG8gaW1wbHkgUFJPVF9FWEVDICovXG4tXHRcdGlmIChyaWVyIFx1MDAyNlx1MDAyNiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NQVlFWEVDKSlcbiYjNDM7XHRcdGlmIChyaWVyIFx1MDAyNlx1MDAyNiB2bWFfdGVzdCh2bWEsIFZNQV9NQVlFWEVDX0JJVCkpXG4gXHRcdFx0cHJvdCB8PSBQUk9UX0VYRUM7XG4gXG4gXHRcdC8qXG5kaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuY1xuaW5kZXggMzg0ZWY0Y2MyMTk1YmEuLmI2NGFhMWY2ZTA3ZWRlIDEwMDY0NFxuLS0tIGEvbW0vbXJlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21yZW1hcC5jXG5AQCAtNjgsNyAmIzQzOzY4LDcgQEAgc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3Qge1xuIFx0Ym9vbCBwb3B1bGF0ZV9leHBhbmQ7XHRcdC8qIG1sb2NrKCkmIzM5O2QgZXhwYW5kZWQsIG11c3QgcG9wdWxhdGUuICovXG4gXHRlbnVtIG1yZW1hcF90eXBlIHJlbWFwX3R5cGU7XHQvKiBleHBhbmQsIHNocmluaywgZXRjLiAqL1xuIFx0Ym9vbCBtbWFwX2xvY2tlZDtcdFx0LyogSXMgbW0gY3VycmVudGx5IHdyaXRlLWxvY2tlZD8gKi9cbi1cdHVuc2lnbmVkIGxvbmcgY2hhcmdlZDtcdFx0LyogSWYgVk1fQUNDT1VOVCwgIyBwYWdlcyB0byBhY2NvdW50LiAqL1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZDtcdFx0LyogSWYgVk1BX0FDQ09VTlRfQklULCAjIHBncyB0byBhY2NvdW50ICovXG4gXHRib29sIHZtaV9uZWVkc19pbnZhbGlkYXRlO1x0LyogSXMgdGhlIFZNQSBpdGVyYXRvciBpbnZhbGlkYXRlZD8gKi9cbiB9O1xuIFxuQEAgLTk2Myw3ICYjNDM7OTYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdnJtX3NldF9uZXdfYWRkcihzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFxuIFx0aWYgKHZybS1cdTAwM2VmbGFncyBcdTAwMjYgTVJFTUFQX0ZJWEVEKVxuIFx0XHRtYXBfZmxhZ3MgfD0gTUFQX0ZJWEVEO1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUFZU0hBUkUpXG4mIzQzO1x0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX01BWVNIQVJFX0JJVCkpXG4gXHRcdG1hcF9mbGFncyB8PSBNQVBfU0hBUkVEO1xuIFxuIFx0cmVzID0gZ2V0X3VubWFwcGVkX2FyZWEodm1hLVx1MDAzZXZtX2ZpbGUsIG5ld19hZGRyLCB2cm0tXHUwMDNlbmV3X2xlbiwgcGdvZmYsXG5AQCAtOTg1LDcgJiM0Mzs5ODUsNyBAQCBzdGF0aWMgYm9vbCB2cm1fY2FsY19jaGFyZ2Uoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGNoYXJnZWQ7XG4gXG4tXHRpZiAoISh2cm0tXHUwMDNldm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKSlcbiYjNDM7XHRpZiAoIXZtYV90ZXN0KHZybS1cdTAwM2V2bWEsIFZNQV9BQ0NPVU5UX0JJVCkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LypcbkBAIC0xMDEyLDcgJiM0MzsxMDEyLDcgQEAgc3RhdGljIGJvb2wgdnJtX2NhbGNfY2hhcmdlKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gICovXG4gc3RhdGljIHZvaWQgdnJtX3VuY2hhcmdlKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4ge1xuLVx0aWYgKCEodnJtLVx1MDAzZXZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fQUNDT1VOVCkpXG4mIzQzO1x0aWYgKCF2bWFfdGVzdCh2cm0tXHUwMDNldm1hLCBWTUFfQUNDT1VOVF9CSVQpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHR2bV91bmFjY3RfbWVtb3J5KHZybS1cdTAwM2VjaGFyZ2VkKTtcbkBAIC0xMDMyLDcgJiM0MzsxMDMyLDcgQEAgc3RhdGljIHZvaWQgdnJtX3N0YXRfYWNjb3VudChzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2cm0tXHUwMDNldm1hO1xuIFxuIFx0dm1fc3RhdF9hY2NvdW50KG1tLCB2bWEtXHUwMDNldm1fZmxhZ3MsIHBhZ2VzKTtcbi1cdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbiYjNDM7XHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdG1tLVx1MDAzZWxvY2tlZF92bSAmIzQzOz0gcGFnZXM7XG4gfVxuIFxuQEAgLTExNzYsNyAmIzQzOzExNzYsNyBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHQgKiBhcm9zZSwgaW4gd2hpY2ggY2FzZSB3ZSBfZG9fIHdpc2ggdG8gdW5tYXAgdGhlIF9uZXdfIFZNQSwgd2hpY2ggbWVhbnNcbiBcdCAqIHdlIGFjdHVhbGx5IF9kb18gd2FudCBpdCBiZSB1bmFjY291bnRlZC5cbiBcdCAqL1xuLVx0Ym9vbCBhY2NvdW50YWJsZV9tb3ZlID0gKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fQUNDT1VOVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0Ym9vbCBhY2NvdW50YWJsZV9tb3ZlID0gdm1hX3Rlc3Qodm1hLCBWTUFfQUNDT1VOVF9CSVQpIFx1MDAyNlx1MDAyNlxuIFx0XHQhKHZybS1cdTAwM2VmbGFncyBcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUCk7XG4gXG4gXHQvKlxuQEAgLTExOTUsNyAmIzQzOzExOTUsNyBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHQgKiBwb3J0aW9ucyBvZiB0aGUgb3JpZ2luYWwgVk1BIHRoYXQgcmVtYWluLlxuIFx0ICovXG4gXHRpZiAoYWNjb3VudGFibGVfbW92ZSkge1xuLVx0XHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX0FDQ09VTlQpO1xuJiM0MztcdFx0dm1hX2NsZWFyX2ZsYWdzKHZtYSwgVk1BX0FDQ09VTlRfQklUKTtcbiBcdFx0LyogV2UgYXJlIGFib3V0IHRvIHNwbGl0IHZtYSwgc28gc3RvcmUgdGhlIHN0YXJ0L2VuZC4gKi9cbiBcdFx0dm1fc3RhcnQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4gXHRcdHZtX2VuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG5AQCAtMTIyMCw4ICYjNDM7MTIyMCw4IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiBcdCAqIHwgICAgICAgICAgICAgfFxuIFx0ICogfC0tLS0tLS0tLS0tLS18XG4gXHQgKlxuLVx0ICogSGF2aW5nIGNsZWFyZWQgVk1fQUNDT1VOVCBmcm9tIHRoZSB3aG9sZSBWTUEsIGFmdGVyIHdlIHVubWFwIGFib3ZlXG4tXHQgKiB3ZSYjMzk7bGwgZW5kIHVwIHdpdGg6XG4mIzQzO1x0ICogSGF2aW5nIGNsZWFyZWQgVk1BX0FDQ09VTlRfQklUIGZyb20gdGhlIHdob2xlIFZNQSwgYWZ0ZXIgd2UgdW5tYXBcbiYjNDM7XHQgKiBhYm92ZSB3ZSYjMzk7bGwgZW5kIHVwIHdpdGg6XG4gXHQgKlxuIFx0ICogICAgYWRkciAgZW5kXG4gXHQgKiAgICAgfCAgICAgfFxuQEAgLTEyNDEsMTMgJiM0MzsxMjQxLDE1IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiBcdFx0aWYgKHZtX3N0YXJ0IFx1MDAzYyBhZGRyKSB7XG4gXHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2ID0gdm1hX3ByZXYoXHUwMDI2dm1pKTtcbiBcbi1cdFx0XHR2bV9mbGFnc19zZXQocHJldiwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqL1xuJiM0MztcdFx0XHR2bWFfc3RhcnRfd3JpdGUocHJldik7XG4mIzQzO1x0XHRcdHZtYV9zZXRfZmxhZ3MocHJldiwgVk1BX0FDQ09VTlRfQklUKTtcbiBcdFx0fVxuIFxuIFx0XHRpZiAodm1fZW5kIFx1MDAzZSBlbmQpIHtcbiBcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQgPSB2bWFfbmV4dChcdTAwMjZ2bWkpO1xuIFxuLVx0XHRcdHZtX2ZsYWdzX3NldChuZXh0LCBWTV9BQ0NPVU5UKTsgLyogQWNxdWlyZXMgVk1BIGxvY2suICovXG4mIzQzO1x0XHRcdHZtYV9zdGFydF93cml0ZShuZXh0KTtcbiYjNDM7XHRcdFx0dm1hX3NldF9mbGFncyhuZXh0LCBWTUFfQUNDT1VOVF9CSVQpO1xuIFx0XHR9XG4gXHR9XG4gfVxuQEAgLTEzMzAsOCAmIzQzOzEzMzIsOCBAQCBzdGF0aWMgdm9pZCBkb250dW5tYXBfY29tcGxldGUoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSxcbiBcdHVuc2lnbmVkIGxvbmcgb2xkX3N0YXJ0ID0gdnJtLVx1MDAzZXZtYS1cdTAwM2V2bV9zdGFydDtcbiBcdHVuc2lnbmVkIGxvbmcgb2xkX2VuZCA9IHZybS1cdTAwM2V2bWEtXHUwMDNldm1fZW5kO1xuIFxuLVx0LyogV2UgYWx3YXlzIGNsZWFyIFZNX0xPQ0tFRFtPTkZBVUxUXSBvbiB0aGUgb2xkIFZNQS4gKi9cbi1cdHZtX2ZsYWdzX2NsZWFyKHZybS1cdTAwM2V2bWEsIFZNX0xPQ0tFRF9NQVNLKTtcbiYjNDM7XHQvKiBXZSBhbHdheXMgY2xlYXIgVk1BX0xPQ0tFRFtPTkZBVUxUXV9CSVQgb24gdGhlIG9sZCBWTUEuICovXG4mIzQzO1x0dm1hX2NsZWFyX2ZsYWdzX21hc2sodnJtLVx1MDAzZXZtYSwgVk1BX0xPQ0tFRF9NQVNLKTtcbiBcbiBcdC8qXG4gXHQgKiBhbm9uX3ZtYSBsaW5rcyBvZiB0aGUgb2xkIHZtYSBpcyBubyBsb25nZXIgbmVlZGVkIGFmdGVyIGl0cyBwYWdlXG5AQCAtMTc2NywxNCAmIzQzOzE3NjksMTQgQEAgc3RhdGljIGludCBjaGVja19wcmVwX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFx0ICogYmFzZWQgb24gdGhlIG9yaWdpbmFsLiAgVGhlcmUgYXJlIG5vIGtub3duIHVzZSBjYXNlcyBmb3IgdGhpc1xuIFx0ICogYmVoYXZpb3IuICBBcyBhIHJlc3VsdCwgZmFpbCBzdWNoIGF0dGVtcHRzLlxuIFx0ICovXG4tXHRpZiAoIW9sZF9sZW4gXHUwMDI2XHUwMDI2ICEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fU0hBUkVEIHwgVk1fTUFZU0hBUkUpKSkge1xuJiM0MztcdGlmICghb2xkX2xlbiBcdTAwMjZcdTAwMjYgIXZtYV90ZXN0X2FueSh2bWEsIFZNQV9TSEFSRURfQklULCBWTUFfTUFZU0hBUkVfQklUKSkge1xuIFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7JXMgKCVkKTogYXR0ZW1wdGVkIHRvIGR1cGxpY2F0ZSBhIHByaXZhdGUgbWFwcGluZyB3aXRoIG1yZW1hcC4gIFRoaXMgaXMgbm90IHN1cHBvcnRlZC5cXG5cJiMzNDssXG4gXHRcdFx0ICAgICBjdXJyZW50LVx1MDAzZWNvbW0sIGN1cnJlbnQtXHUwMDNlcGlkKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRpZiAoKHZybS1cdTAwM2VmbGFncyBcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0KHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0RPTlRFWFBBTkQgfCBWTV9QRk5NQVApKSlcbiYjNDM7XHQgICAgdm1hX3Rlc3RfYW55KHZtYSwgVk1BX0RPTlRFWFBBTkRfQklULCBWTUFfUEZOTUFQX0JJVCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LypcbkBAIC0xODA0LDcgJiM0MzsxODA2LDcgQEAgc3RhdGljIGludCBjaGVja19wcmVwX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qIFdlIGFyZSBleHBhbmRpbmcgYW5kIHRoZSBWTUEgaXMgbWxvY2soKSYjMzk7ZCBzbyB3ZSBuZWVkIHRvIHBvcHVsYXRlLiAqL1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKVxuJiM0MztcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSlcbiBcdFx0dnJtLVx1MDAzZXBvcHVsYXRlX2V4cGFuZCA9IHRydWU7XG4gXG4gXHQvKiBOZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgYSBncm93aW5nIG1hcHBpbmcgKi9cbkBAIC0xODEyLDEwICYjNDM7MTgxNCwxMCBAQCBzdGF0aWMgaW50IGNoZWNrX3ByZXBfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHRpZiAocGdvZmYgJiM0MzsgKG5ld19sZW4gXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpIFx1MDAzYyBwZ29mZilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fRE9OVEVYUEFORCB8IFZNX1BGTk1BUCkpXG4mIzQzO1x0aWYgKHZtYV90ZXN0X2FueSh2bWEsIFZNQV9ET05URVhQQU5EX0JJVCwgVk1BX1BGTk1BUF9CSVQpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbi1cdGlmICghbWxvY2tfZnV0dXJlX29rKG1tLCB2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRCwgdnJtLVx1MDAzZWRlbHRhKSlcbiYjNDM7XHRpZiAoIW1sb2NrX2Z1dHVyZV9vayhtbSwgdm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCksIHZybS1cdTAwM2VkZWx0YSkpXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuIFxuIFx0aWYgKCFtYXlfZXhwYW5kX3ZtKG1tLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MsIHZybS1cdTAwM2VkZWx0YSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkpXG5kaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmNcbmluZGV4IGFkYzBiMGNhOTA2YmRmLi40OThlMDFlZTQwYjA1NiAxMDA2NDRcbi0tLSBhL21tL25vbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL25vbW11LmNcbkBAIC0xMDE0LDExICYjNDM7MTAxNCwxMiBAQCB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBsZW4sXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBwcm90LFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG4tXHRcdFx0dm1fZmxhZ3NfdCB2bV9mbGFncyxcbiYjNDM7XHRcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzLFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgcGdvZmYsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyAqcG9wdWxhdGUsXG4gXHRcdFx0c3RydWN0IGxpc3RfaGVhZCAqdWYpXG4ge1xuJiM0MztcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWFfZmxhZ3NfdG9fbGVnYWN5KHZtYV9mbGFncyk7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdHN0cnVjdCB2bV9yZWdpb24gKnJlZ2lvbjtcbiBcdHN0cnVjdCByYl9ub2RlICpyYjtcbmRpZmYgLS1naXQgYS9tbS91dGlsLmMgYi9tbS91dGlsLmNcbmluZGV4IDUwOTA0NTc1NDJjYTljLi5iZjA1MTNkMWQzZDA4NiAxMDA2NDRcbi0tLSBhL21tL3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXRpbC5jXG5AQCAtNTc4LDggJiM0Mzs1NzgsOCBAQCB1bnNpZ25lZCBsb25nIHZtX21tYXBfcGdvZmYoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmICghcmV0KSB7XG4gXHRcdGlmIChtbWFwX3dyaXRlX2xvY2tfa2lsbGFibGUobW0pKVxuIFx0XHRcdHJldHVybiAtRUlOVFI7XG4tXHRcdHJldCA9IGRvX21tYXAoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFnLCAwLCBwZ29mZiwgXHUwMDI2cG9wdWxhdGUsXG4tXHRcdFx0ICAgICAgXHUwMDI2dWYpO1xuJiM0MztcdFx0cmV0ID0gZG9fbW1hcChmaWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWcsIEVNUFRZX1ZNQV9GTEFHUywgcGdvZmYsXG4mIzQzO1x0XHRcdCAgICAgIFx1MDAyNnBvcHVsYXRlLCBcdTAwMjZ1Zik7XG4gXHRcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcbiBcdFx0dXNlcmZhdWx0ZmRfdW5tYXBfY29tcGxldGUobW0sIFx1MDAyNnVmKTtcbiBcdFx0aWYgKHBvcHVsYXRlKVxuQEAgLTYyNywyMCAmIzQzOzYyNywyMCBAQCBFWFBPUlRfU1lNQk9MKHZtX21tYXApO1xuIHVuc2lnbmVkIGxvbmcgdm1fbW1hcF9zaGFkb3dfc3RhY2sodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncylcbiB7XG4mIzQzO1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gVk1BX1NIQURPV19TVEFDSztcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbiBcdHVuc2lnbmVkIGxvbmcgcmV0LCB1bnVzZWQ7XG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gVk1fU0hBRE9XX1NUQUNLO1xuIFxuIFx0ZmxhZ3MgfD0gTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFO1xuIFx0aWYgKGFkZHIpXG4gXHRcdGZsYWdzIHw9IE1BUF9GSVhFRF9OT1JFUExBQ0U7XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuLVx0XHR2bV9mbGFncyB8PSBWTV9OT0hVR0VQQUdFO1xuJiM0MztcdFx0dm1hX2ZsYWdzX3NldChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9OT0hVR0VQQUdFX0JJVCk7XG4gXG4gXHRtbWFwX3dyaXRlX2xvY2sobW0pO1xuIFx0cmV0ID0gZG9fbW1hcChOVUxMLCBhZGRyLCBsZW4sIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLFxuLVx0XHQgICAgICB2bV9mbGFncywgMCwgXHUwMDI2dW51c2VkLCBOVUxMKTtcbiYjNDM7XHRcdCAgICAgIHZtYV9mbGFncywgMCwgXHUwMDI2dW51c2VkLCBOVUxMKTtcbiBcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcbiBcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuY1xuaW5kZXggOWQ1NTZkMzNiMjRiZDEuLmI1YmMzZWVjOTYxYzc5IDEwMDY0NFxuLS0tIGEvbW0vdm1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5jXG5AQCAtNTYsNyAmIzQzOzU2LDcgQEAgc3RydWN0IG1tYXBfc3RhdGUge1xuIFx0XHQucGdsZW4gPSBQSFlTX1BGTihsZW5fKSxcdFx0XHRcdFxcXG4gXHRcdC52bWFfZmxhZ3MgPSB2bWFfZmxhZ3NfLFx0XHRcdFx0XFxcbiBcdFx0LmZpbGUgPSBmaWxlXyxcdFx0XHRcdFx0XHRcXFxuLVx0XHQucGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hX2ZsYWdzXyksXHRcdFxcXG4mIzQzO1x0XHQucGFnZV9wcm90ID0gdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3NfKSxcdFxcXG4gXHR9XG4gXG4gI2RlZmluZSBWTUdfTU1BUF9TVEFURShuYW1lLCBtYXBfLCB2bWFfKVx0XHRcdFx0XFxcbkBAIC0yMTc2LDcgJiM0MzsyMTc2LDcgQEAgYm9vbCB2bWFfd2FudHNfd3JpdGVub3RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBncHJvdF90IHZtX3BhZ2VfcHJvdClcbiBcdC8qIFRoZSBvcGVuIHJvdXRpbmUgZGlkIHNvbWV0aGluZyB0byB0aGUgcHJvdGVjdGlvbnMgdGhhdCBwZ3Byb3RfbW9kaWZ5XG4gXHQgKiB3b24mIzM5O3QgcHJlc2VydmU/ICovXG4gXHRpZiAocGdwcm90X3ZhbCh2bV9wYWdlX3Byb3QpICE9XG4tXHQgICAgcGdwcm90X3ZhbCh2bV9wZ3Byb3RfbW9kaWZ5KHZtX3BhZ2VfcHJvdCwgdm1hLVx1MDAzZXZtX2ZsYWdzKSkpXG4mIzQzO1x0ICAgIHBncHJvdF92YWwodm1hX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bWEtXHUwMDNlZmxhZ3MpKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LypcbkBAIC0yODgzLDcgJiM0MzsyODgzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuICAqIGZpbGUgdG8gYmUgbWFwcGVkLCBvdGhlcndpc2UgTlVMTC5cbiAgKiBAYWRkcjogVGhlIHBhZ2UtYWxpZ25lZCBhZGRyZXNzIGF0IHdoaWNoIHRvIHBlcmZvcm0gdGhlIG1hcHBpbmcuXG4gICogQGxlbjogVGhlIHBhZ2UtYWxpZ25lZCwgbm9uLXplcm8sIGxlbmd0aCBvZiB0aGUgbWFwcGluZy5cbi0gKiBAdm1fZmxhZ3M6IFRoZSBWTUEgZmxhZ3Mgd2hpY2ggc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIG1hcHBpbmcuXG4mIzQzOyAqIEB2bWFfZmxhZ3M6IFRoZSBWTUEgZmxhZ3Mgd2hpY2ggc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIG1hcHBpbmcuXG4gICogQHBnb2ZmOiBJZiBAZmlsZSBpcyBzcGVjaWZpZWQsIHRoZSBwYWdlIG9mZnNldCBpbnRvIHRoZSBmaWxlLCBpZiBub3QgdGhlblxuICAqIHRoZSB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IGluIG1lbW9yeSBvZiB0aGUgYW5vbnltb3VzIG1hcHBpbmcuXG4gICogQHVmOiBPcHRpb25hbGx5LCBhIHBvaW50ZXIgdG8gYSBsaXN0IGhlYWQgdXNlZCBmb3IgdHJhY2tpbmcgdXNlcmZhdWx0ZmQgdW5tYXBcbkBAIC0yODkzLDEyICYjNDM7Mjg5MywxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX21tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gICogYmVlbiBwZXJmb3JtZWQuXG4gICovXG4gdW5zaWduZWQgbG9uZyBtbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4mIzQzO1x0XHRcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHZtYV9mbGFnc190IHZtYV9mbGFncyxcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHN0cnVjdCBsaXN0X2hlYWQgKnVmKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcmV0O1xuIFx0Ym9vbCB3cml0YWJsZV9maWxlX21hcHBpbmcgPSBmYWxzZTtcbi1cdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3MpO1xuIFxuIFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKGN1cnJlbnQtXHUwMDNlbW0pO1xuIFxuQEAgLTI5MDcsNyAmIzQzOzI5MDYsNyBAQCB1bnNpZ25lZCBsb25nIG1tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFxuIFx0LyogQWxsb3cgYXJjaGl0ZWN0dXJlcyB0byBzYW5pdHktY2hlY2sgdGhlIHZtX2ZsYWdzLiAqL1xuLVx0aWYgKCFhcmNoX3ZhbGlkYXRlX2ZsYWdzKHZtX2ZsYWdzKSlcbiYjNDM7XHRpZiAoIWFyY2hfdmFsaWRhdGVfZmxhZ3Modm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHQvKiBNYXAgd3JpdGFibGUgYW5kIGVuc3VyZSB0aGlzIGlzbiYjMzk7dCBhIHNlYWxlZCBtZW1mZC4gKi9cbkBAIC0zNDIwLDE4ICYjNDM7MzQxOSwyMSBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKl9faW5zdGFsbF9zcGVjaWFsX21hcHBpbmcoXG4gXHR2bV9mbGFnc190IHZtX2ZsYWdzLCB2b2lkICpwcml2LFxuIFx0Y29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICpvcHMpXG4ge1xuLVx0aW50IHJldDtcbiYjNDM7XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSBsZWdhY3lfdG9fdm1hX2ZsYWdzKHZtX2ZsYWdzKTtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHR2bWEgPSB2bV9hcmVhX2FsbG9jKG1tKTtcbi1cdGlmICh1bmxpa2VseSh2bWEgPT0gTlVMTCkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KCF2bWEpKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbi1cdHZtX2ZsYWdzIHw9IG1tLVx1MDAzZWRlZl9mbGFncyB8IFZNX0RPTlRFWFBBTkQ7XG4mIzQzO1x0dm1hX2ZsYWdzX3NldF9tYXNrKFx1MDAyNnZtYV9mbGFncywgbW0tXHUwMDNlZGVmX3ZtYV9mbGFncyk7XG4mIzQzO1x0dm1hX2ZsYWdzX3NldChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9ET05URVhQQU5EX0JJVCk7XG4gXHRpZiAocGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpXG4tXHRcdHZtX2ZsYWdzIHw9IFZNX1NPRlRESVJUWTtcbi1cdHZtX2ZsYWdzX2luaXQodm1hLCB2bV9mbGFncyBcdTAwMjYgflZNX0xPQ0tFRF9NQVNLKTtcbi1cdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4mIzQzO1x0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnZtYV9mbGFncywgVk1BX1NPRlRESVJUWV9CSVQpO1xuJiM0MztcdHZtYV9mbGFnc19jbGVhcl9tYXNrKFx1MDAyNnZtYV9mbGFncywgVk1BX0xPQ0tFRF9NQVNLKTtcbiYjNDM7XHR2bWEtXHUwMDNlZmxhZ3MgPSB2bWFfZmxhZ3M7XG4mIzQzO1x0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gXG4gXHR2bWEtXHUwMDNldm1fb3BzID0gb3BzO1xuIFx0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHByaXY7XG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmggYi9tbS92bWEuaFxuaW5kZXggYWRiN2EwYmExMTkyMDguLjBiYzdkNTIxZTk3Njc3IDEwMDY0NFxuLS0tIGEvbW0vdm1hLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5oXG5AQCAtNTE3LDcgJiM0Mzs1MTcsNyBAQCBpbnQgbW1fdGFrZV9hbGxfbG9ja3Moc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuIHZvaWQgbW1fZHJvcF9hbGxfbG9ja3Moc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuIFxuIHVuc2lnbmVkIGxvbmcgbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0dW5zaWduZWQgbG9uZyBsZW4sIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIHVuc2lnbmVkIGxvbmcgcGdvZmYsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGxlbiwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp1Zik7XG4gXG4gaW50IGRvX2Jya19mbGFncyhzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYnJrdm1hLFxuQEAgLTU0MSw5ICYjNDM7NTQxLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfd2FudHNfbWFudWFsX3B0ZV93cml0ZV91cGdyYWRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfTU1VXG4tc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bV9wZ3Byb3RfbW9kaWZ5KHBncHJvdF90IG9sZHByb3QsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4mIzQzO3N0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX3BncHJvdF9tb2RpZnkocGdwcm90X3Qgb2xkcHJvdCwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbi1cdHJldHVybiBwZ3Byb3RfbW9kaWZ5KG9sZHByb3QsIHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3MpKTtcbiYjNDM7XHRjb25zdCBwZ3Byb3RfdCBwcm90ID0gdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGdwcm90X21vZGlmeShvbGRwcm90LCBwcm90KTtcbiB9XG4gI2VuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvbW0vdm1hX2V4ZWMuYyBiL21tL3ZtYV9leGVjLmNcbmluZGV4IGVmMWZhMmIxNjFmM2JhLi43YWYxMjYwNjg5Yjk3ZSAxMDA2NDRcbi0tLSBhL21tL3ZtYV9leGVjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYV9leGVjLmNcbkBAIC0xMTIsMTUgJiM0MzsxMTIsMTcgQEAgaW50IHJlbG9jYXRlX3ZtYV9kb3duKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHNoaWZ0KVxuIGludCBjcmVhdGVfaW5pdF9zdGFja192bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXG4gXHRcdFx0ICB1bnNpZ25lZCBsb25nICp0b3BfbWVtX3ApXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFZNX1NUQUNLX0ZMQUdTIHwgVk1fU1RBQ0tfSU5DT01QTEVURV9TRVRVUDtcbiYjNDM7XHR2bWFfZmxhZ3NfdCBmbGFncyA9IFZNQV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQO1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIFx0aW50IGVycjtcbi1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1fYXJlYV9hbGxvYyhtbSk7XG4gXG4mIzQzO1x0LyogVk1BX1NUQUNLX0ZMQUdTIGFuZCBWTUFfU1RBQ0tfSU5DT01QTEVURV9TRVRVUCBtdXN0IG5vdCBvdmVybGFwLiAqL1xuJiM0MztcdFZNX1dBUk5fT05fT05DRSh2bWFfZmxhZ3NfdGVzdF9hbnlfbWFzayhcdTAwMjZmbGFncywgVk1BX1NUQUNLX0ZMQUdTKSk7XG4mIzQzO1xuJiM0MztcdHZtYSA9IHZtX2FyZWFfYWxsb2MobW0pO1xuIFx0aWYgKCF2bWEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0dm1hX3NldF9hbm9ueW1vdXModm1hKTtcbi1cbiBcdGlmIChtbWFwX3dyaXRlX2xvY2tfa2lsbGFibGUobW0pKSB7XG4gXHRcdGVyciA9IC1FSU5UUjtcbiBcdFx0Z290byBlcnJfZnJlZTtcbkBAIC0xMzQsMTkgJiM0MzsxMzYsMjEgQEAgaW50IGNyZWF0ZV9pbml0X3N0YWNrX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2tzbTtcbiBcbiYjNDM7XHR2bWFfZmxhZ3Nfc2V0X21hc2soXHUwMDI2ZmxhZ3MsIFZNQV9TVEFDS19GTEFHUyk7XG4mIzQzO1x0dm1hX3NldF9hbm9ueW1vdXModm1hKTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogUGxhY2UgdGhlIHN0YWNrIGF0IHRoZSBsYXJnZXN0IHN0YWNrIGFkZHJlc3MgdGhlIGFyY2hpdGVjdHVyZVxuIFx0ICogc3VwcG9ydHMuIExhdGVyLCB3ZSYjMzk7bGwgbW92ZSB0aGlzIHRvIGFuIGFwcHJvcHJpYXRlIHBsYWNlLiBXZSBkb24mIzM5O3RcbiBcdCAqIHVzZSBTVEFDS19UT1AgYmVjYXVzZSB0aGF0IGNhbiBkZXBlbmQgb24gYXR0cmlidXRlcyB3aGljaCBhcmVuJiMzOTt0XG4gXHQgKiBjb25maWd1cmVkIHlldC5cbiBcdCAqL1xuLVx0Vk1fV0FSTl9PTl9PTkNFKFZNX1NUQUNLX0ZMQUdTIFx1MDAyNiBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQKTtcbiBcdHZtYS1cdTAwM2V2bV9lbmQgPSBTVEFDS19UT1BfTUFYO1xuIFx0dm1hLVx1MDAzZXZtX3N0YXJ0ID0gdm1hLVx1MDAzZXZtX2VuZCAtIFBBR0VfU0laRTtcbiBcdGlmIChwZ3RhYmxlX3N1cHBvcnRzX3NvZnRfZGlydHkoKSlcbi1cdFx0ZmxhZ3MgfD0gVk1fU09GVERJUlRZO1xuLVx0dm1fZmxhZ3NfaW5pdCh2bWEsIGZsYWdzKTtcbi1cdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4mIzQzO1x0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNmZsYWdzLCBWTUFfU09GVERJUlRZX0JJVCk7XG4mIzQzO1x0dm1hLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4mIzQzO1x0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gXG4gXHRlcnIgPSBpbnNlcnRfdm1fc3RydWN0KG1tLCB2bWEpO1xuIFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL21lbWFsbG9jLmMgYi9zb3VuZC9jb3JlL21lbWFsbG9jLmNcbmluZGV4IDkzMjA2NzFkZmNjOGIwLi41YmM3ZTU4NmI0MzBmNSAxMDA2NDRcbi0tLSBhL3NvdW5kL2NvcmUvbWVtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc291bmQvY29yZS9tZW1hbGxvYy5jXG5AQCAtODUxLDcgJiM0Mzs4NTEsNyBAQCBzdGF0aWMgdm9pZCBzbmRfZG1hX25vbmNvaGVyZW50X2ZyZWUoc3RydWN0IHNuZF9kbWFfYnVmZmVyICpkbWFiKVxuIHN0YXRpYyBpbnQgc25kX2RtYV9ub25jb2hlcmVudF9tbWFwKHN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqZG1hYixcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpXG4ge1xuLVx0YXJlYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KGFyZWEtXHUwMDNldm1fZmxhZ3MpO1xuJiM0MztcdGFyZWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3QoYXJlYSk7XG4gXHRyZXR1cm4gZG1hX21tYXBfcGFnZXMoZG1hYi1cdTAwM2VkZXYuZGV2LCBhcmVhLFxuIFx0XHRcdCAgICAgIGFyZWEtXHUwMDNldm1fZW5kIC0gYXJlYS1cdTAwM2V2bV9zdGFydCxcbiBcdFx0XHQgICAgICB2aXJ0X3RvX3BhZ2UoZG1hYi1cdTAwM2VhcmVhKSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcbmluZGV4IDc3M2UyMzMwM2UyNmFmLi42NGYzOGE4MzYxM2U1NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcbkBAIC0yNDUsOCAmIzQzOzI0NSwxMCBAQCBlbnVtIHtcbiAjZGVmaW5lIFZNX1NUQUNLXHRJTklUX1ZNX0ZMQUcoU1RBQ0spXG4gI2lmZGVmIENPTkZJR19TVEFDS19HUk9XU1VQXG4gI2RlZmluZSBWTV9TVEFDS19FQVJMWVx0SU5JVF9WTV9GTEFHKFNUQUNLX0VBUkxZKVxuJiM0MzsjZGVmaW5lIFZNQV9TVEFDS19FQVJMWSBta192bWFfZmxhZ3MoVk1BX1NUQUNLX0VBUkxZX0JJVClcbiAjZWxzZVxuICNkZWZpbmUgVk1fU1RBQ0tfRUFSTFlcdFZNX05PTkVcbiYjNDM7I2RlZmluZSBWTUFfU1RBQ0tfRUFSTFkgRU1QVFlfVk1BX0ZMQUdTXG4gI2VuZGlmXG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19QS0VZU1xuICNkZWZpbmUgVk1fUEtFWV9TSElGVCAoKF9fZm9yY2UgaW50KVZNQV9ISUdIX0FSQ0hfMF9CSVQpXG5AQCAtMzE1LDYgJiM0MzszMTcsOCBAQCBlbnVtIHtcbiBcbiAvKiBCaXRzIHNldCBpbiB0aGUgVk1BIHVudGlsIHRoZSBzdGFjayBpcyBpbiBpdHMgZmluYWwgbG9jYXRpb24gKi9cbiAjZGVmaW5lIFZNX1NUQUNLX0lOQ09NUExFVEVfU0VUVVAgKFZNX1JBTkRfUkVBRCB8IFZNX1NFUV9SRUFEIHwgVk1fU1RBQ0tfRUFSTFkpXG4mIzQzOyNkZWZpbmUgVk1BX1NUQUNLX0lOQ09NUExFVEVfU0VUVVAgYXBwZW5kX3ZtYV9mbGFncyhcdFx0XFxcbiYjNDM7XHRWTUFfU1RBQ0tfRUFSTFksIFZNQV9SQU5EX1JFQURfQklULCBWTUFfU0VRX1JFQURfQklUKVxuIFxuICNkZWZpbmUgVEFTS19FWEVDX0JJVCAoKGN1cnJlbnQtXHUwMDNlcGVyc29uYWxpdHkgXHUwMDI2IFJFQURfSU1QTElFU19FWEVDKSA/IFxcXG4gXHRcdCAgICAgICBWTV9FWEVDX0JJVCA6IFZNX1JFQURfQklUKVxuQEAgLTE0MjQsMjAgJiM0MzsxNDI4LDE4IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX2l0ZXJfbmV4dF9yYW5nZShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkpXG4gfVxuIFxuIGJvb2wgdm1hX3dhbnRzX3dyaXRlbm90aWZ5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ3Byb3RfdCB2bV9wYWdlX3Byb3QpO1xuJiM0MztzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9wZ3Byb3RfbW9kaWZ5KHBncHJvdF90IG9sZHByb3QsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG4gXG4gLyogVXBkYXRlIHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgdG8gcmVmbGVjdCB2bWEtXHUwMDNldm1fZmxhZ3MuICovXG4gc3RhdGljIGlubGluZSB2b2lkIHZtYV9zZXRfcGFnZV9wcm90KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbi1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWEtXHUwMDNldm1fZmxhZ3M7XG4mIzQzO1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gdm1hLVx1MDAzZWZsYWdzO1xuIFx0cGdwcm90X3Qgdm1fcGFnZV9wcm90O1xuIFxuLVx0LyogdGVzdGluZzogd2UgaW5saW5lIHZtX3BncHJvdF9tb2RpZnkoKSB0byBhdm9pZCBjbGFzaCB3aXRoIHZtYS5oLiAqL1xuLVx0dm1fcGFnZV9wcm90ID0gcGdwcm90X21vZGlmeSh2bWEtXHUwMDNldm1fcGFnZV9wcm90LCB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzKSk7XG4tXG4mIzQzO1x0dm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCwgdm1hX2ZsYWdzKTtcbiBcdGlmICh2bWFfd2FudHNfd3JpdGVub3RpZnkodm1hLCB2bV9wYWdlX3Byb3QpKSB7XG4tXHRcdHZtX2ZsYWdzIFx1MDAyNj0gflZNX1NIQVJFRDtcbi1cdFx0LyogdGVzdGluZzogd2UgaW5saW5lIHZtX3BncHJvdF9tb2RpZnkoKSB0byBhdm9pZCBjbGFzaCB3aXRoIHZtYS5oLiAqL1xuLVx0XHR2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfbW9kaWZ5KHZtX3BhZ2VfcHJvdCwgdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFncykpO1xuJiM0MztcdFx0dm1hX2ZsYWdzX2NsZWFyKFx1MDAyNnZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpO1xuJiM0MztcdFx0dm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bWFfZmxhZ3MpO1xuIFx0fVxuIFx0LyogcmVtb3ZlX3Byb3RlY3Rpb25fcHRlcyByZWFkcyB2bWEtXHUwMDNldm1fcGFnZV9wcm90IHdpdGhvdXQgbW1hcF9sb2NrICovXG4gXHRXUklURV9PTkNFKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QsIHZtX3BhZ2VfcHJvdCk7XG5AQCAtMTU0Nyw3ICYjNDM7MTU0OSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGdldF9zeXNjdGxfbWF4X21hcF9jb3VudCh2b2lkKVxuICNkZWZpbmUgcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KClcdElTX0VOQUJMRUQoQ09ORklHX01FTV9TT0ZUX0RJUlRZKVxuICNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2dldF9wYWdlX3Byb3Qodm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuJiM0MztzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9mbGFnc190b19wYWdlX3Byb3Qodm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbiBcdGNvbnN0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWFfZmxhZ3NfdG9fbGVnYWN5KHZtYV9mbGFncyk7XG4gXG5AQCAtMTU3NSwzICYjNDM7MTU3Nyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X2Nhbl9tb2RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRpZiAodm1hX2lzX2F0dGFjaGVkKHZtYSkpXG4gXHRcdHZtYV9hc3NlcnRfd3JpdGVfbG9ja2VkKHZtYSk7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYS1cdTAwM2VmbGFncyk7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMDoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21sb2NrX2ZpeHVwJiMzNDssCiAgICAmIzM0O2FwcGx5X3ZtYV9sb2NrX2ZsYWdzJiMzNDssCiAgICAmIzM0O2FwcGx5X21sb2NrYWxsX2ZsYWdzJiMzNDssCiAgICAmIzM0O3VubWFwX3NvdXJjZV92bWEmIzM0OywKICAgICYjMzQ7Y2hlY2tfcHJlcF92bWEmIzM0OywKICAgICYjMzQ7bWVtZmRfY2hlY2tfc2VhbHNfbW1hcCYjMzQ7LAogICAgJiMzNDtjcmVhdGVfaW5pdF9zdGFja192bWEmIzM0OywKICAgICYjMzQ7dGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtYWpvciByZWZhY3RvcmluZyBvZiBWTUEgZmxhZ3MgaGFuZGxpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCB0cmFuc2l0aW9uaW5nIGZyb20gYHZtX2ZsYWdzX3RgIHRvIGB2bWFfZmxhZ3NfdGAuIEl0IG1vZGlmaWVzIGNyaXRpY2FsIHBhdGhzIGluIG1tYXAsIG1yZW1hcCwgbWxvY2ssIGFuZCBtcHJvdGVjdC4gVGhlc2UgY2hhbmdlcyBmdW5jdGlvbmFsbHkgYWx0ZXIgaG93IFZNQSBmbGFncyBhcmUgc2V0LCBjbGVhcmVkLCBhbmQgdGVzdGVkLCB3aGljaCBjb3VsZCBpbnRyb2R1Y2UgYnVncyBsaWtlIGluY29ycmVjdCBtZW1vcnkgcHJvdGVjdGlvbnMsIGFjY291bnRpbmcgZXJyb3JzLCBvciBsb2NraW5nIGlzc3Vlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGVzZSBmbGFncywgYXZvaWRpbmcgdGhlIGFic29sdXRlIGhvdHRlc3QgcGF0aHMgbGlrZSBgZG9fbW1hcGAgdG8gcHJldmVudCBza2V3ZWQgZGlzdHJpYnV0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2U4ZGUyYmQxMTlkZTczZDk0NjhkYTRlZjdlMzlkOGU4NDc5NGNhZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDEyIDEwOjE0OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC92ZHNvLmMgYi9hcmNoL21pcHMva2VybmVsL3Zkc28uYwppbmRleCBiZDFmYzE3ZDM5NzVkYy4uOTQ4NzM3NzVmYzBmNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdmRzby5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWlwcy9rZXJuZWwvdmRzby5jCkBAIC05MSw4ICYjNDM7OTEsOCBAQCBpbnQgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIGludCB1c2VzX2ludGVycCkKIAogCQkvKiBNYXAgZGVsYXkgc2xvdCBlbXVsYXRpb24gcGFnZSAqLwogCQliYXNlID0gZG9fbW1hcChOVUxMLCBTVEFDS19UT1AsIFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9FWEVDLAotCQkJICAgICAgIE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSB8IE1BUF9GSVhFRCwgMCwgMCwgJmFtcDt1bnVzZWQsCi0JCQkgICAgICAgTlVMTCk7CiYjNDM7CQkJICAgICAgIE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSB8IE1BUF9GSVhFRCwKJiM0MzsJCQkgICAgICAgRU1QVFlfVk1BX0ZMQUdTLCAwLCAmYW1wO3VudXNlZCwgTlVMTCk7CiAJCWlmIChJU19FUlJfVkFMVUUoYmFzZSkpIHsKIAkJCXJldCA9IGJhc2U7CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jIGIvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmMKaW5kZXggMjhiZWM1YmM3ODc5NDkuLjgyMTI3ZTMxZGNhNmRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYwpAQCAtNjU5LDcgJiM0Mzs2NTksOCBAQCB1bnNpZ25lZCBsb25nIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsCiAJdW5zaWduZWQgaW50IHBzaXplOwogCiAJaWYgKHJhZGl4X2VuYWJsZWQoKSkKLQkJcmV0dXJuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTsKJiM0MzsJCXJldHVybiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLAomIzQzOwkJCQkJCSBsZWdhY3lfdG9fdm1hX2ZsYWdzKHZtX2ZsYWdzKSk7CiAKIAlpZiAoZmlscCAmYW1wOyZhbXA7IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKQogCQlwc2l6ZSA9IGZpbGVfdG9fcHNpemUoZmlscCk7CkBAIC02NzksNyAmIzQzOzY4MCw4IEBAIHVuc2lnbmVkIGxvbmcgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLAogCXVuc2lnbmVkIGludCBwc2l6ZTsKIAogCWlmIChyYWRpeF9lbmFibGVkKCkpCi0JCXJldHVybiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oZmlscCwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCB2bV9mbGFncyk7CiYjNDM7CQlyZXR1cm4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKGZpbHAsIGFkZHIwLCBsZW4sCiYjNDM7CQkJCXBnb2ZmLCBmbGFncywgbGVnYWN5X3RvX3ZtYV9mbGFncyh2bV9mbGFncykpOwogCiAJaWYgKGZpbHAgJmFtcDsmYW1wOyBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSkKIAkJcHNpemUgPSBmaWxlX3RvX3BzaXplKGZpbHApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKaW5kZXggZTNlZDY4NGRkY2YyOTEuLjMyYTA1ZDg4OWI5YTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKQEAgLTEyNTIsNyAmIzQzOzEyNTIsNyBAQCBpbnQgZHJtX2dlbV9tbWFwX29iaihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdW5zaWduZWQgbG9uZyBvYmpfc2l6ZSwKIAkJfQogCiAJCXZtX2ZsYWdzX3NldCh2bWEsIFZNX0lPIHwgVk1fUEZOTUFQIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QKTsKLQkJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLSZndDt2bV9mbGFncykpOwomIzQzOwkJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpOwogCQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLSZndDt2bV9wYWdlX3Byb3QpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZG1hX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZG1hX2hlbHBlci5jCmluZGV4IDFjMDBhNzFhYjNjOWQwLi43ZDk2MTIwNzVkMzEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZG1hX2hlbHBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2RtYV9oZWxwZXIuYwpAQCAtNTQwLDcgJiM0Mzs1NDAsNyBAQCBpbnQgZHJtX2dlbV9kbWFfbW1hcChzdHJ1Y3QgZHJtX2dlbV9kbWFfb2JqZWN0ICpkbWFfb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKgogCXZtX2ZsYWdzX21vZCh2bWEsIFZNX0RPTlREVU1QIHwgVk1fRE9OVEVYUEFORCwgVk1fUEZOTUFQKTsKIAogCWlmIChkbWFfb2JqLSZndDttYXBfbm9uY29oZXJlbnQpIHsKLQkJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpOwomIzQzOwkJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpOwogCiAJCXJldCA9IGRtYV9tbWFwX3BhZ2VzKGRybV9kZXZfZG1hX2RldihkbWFfb2JqLSZndDtiYXNlLmRldiksCiAJCQkJICAgICB2bWEsIHZtYS0mZ3Q7dm1fZW5kIC0gdm1hLSZndDt2bV9zdGFydCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMKaW5kZXggYzk4OTQ1OWViMjE1OTEuLjA2ZDAxOWQ1MWQzZTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYwpAQCAtNzY0LDcgJiM0Mzs3NjQsNyBAQCBpbnQgZHJtX2dlbV9zaG1lbV9tbWFwKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdAogCQlyZXR1cm4gcmV0OwogCiAJdm1fZmxhZ3Nfc2V0KHZtYSwgVk1fUEZOTUFQIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QKTsKLQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLSZndDt2bV9mbGFncyk7CiYjNDM7CXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTsKIAlpZiAoc2htZW0tJmd0O21hcF93YykKIAkJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYS0mZ3Q7dm1fcGFnZV9wcm90KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMKaW5kZXggMmU0ZDZkMTE3ZWUyZDguLmY5YzhiN2IyYmZjN2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMKQEAgLTEzMyw3ICYjNDM7MTMzLDcgQEAgc3RhdGljIGludCBldG5hdml2X2dlbV9tbWFwX29iaihzdHJ1Y3QgZXRuYXZpdl9nZW1fb2JqZWN0ICpldG5hdml2X29iaiwKIAogCXZtX2ZsYWdzX3NldCh2bWEsIFZNX1BGTk1BUCB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7CiAKLQl2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpOwomIzQzOwl2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpOwogCiAJaWYgKGV0bmF2aXZfb2JqLSZndDtmbGFncyAmYW1wOyBFVE5BX0JPX1dDKSB7CiAJCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bV9wYWdlX3Byb3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dlbS5jCmluZGV4IDlhNjI3MGYzZGNhNmJmLi4wMjA4YzkyNTk1NzI1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dlbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nZW0uYwpAQCAtMzc3LDEzICYjNDM7Mzc3LDEzIEBAIHN0YXRpYyBpbnQgZXh5bm9zX2RybV9nZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0CiAKIAkvKiBub24tY2FjaGFibGUgYXMgZGVmYXVsdC4gKi8KIAlpZiAoZXh5bm9zX2dlbS0mZ3Q7ZmxhZ3MgJmFtcDsgRVhZTk9TX0JPX0NBQ0hBQkxFKQotCQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLSZndDt2bV9mbGFncyk7CiYjNDM7CQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7CiAJZWxzZSBpZiAoZXh5bm9zX2dlbS0mZ3Q7ZmxhZ3MgJmFtcDsgRVhZTk9TX0JPX1dDKQogCQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9Ci0JCQlwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLSZndDt2bV9mbGFncykpOwomIzQzOwkJCXBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7CiAJZWxzZQogCQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9Ci0JCQlwZ3Byb3Rfbm9uY2FjaGVkKHZtX2dldF9wYWdlX3Byb3Qodm1hLSZndDt2bV9mbGFncykpOwomIzQzOwkJCXBncHJvdF9ub25jYWNoZWQodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7CiAKIAlyZXQgPSBleHlub3NfZHJtX2dlbV9tbWFwX2J1ZmZlcihleHlub3NfZ2VtLCB2bWEpOwogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uYwppbmRleCAwNjQ0Zjg1YzZjOGU1Mi4uOWNhOTBjMWJiNWI0MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9tbWFuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uYwpAQCAtMTEyLDcgJiM0MzsxMTIsNyBAQCBpOTE1X2dlbV9tbWFwX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKIAkJaWYgKHZtYSAmYW1wOyZhbXA7IF9fdm1hX21hdGNoZXModm1hLCBvYmotJmd0O2Jhc2UuZmlscCwgYWRkciwgYXJncy0mZ3Q7c2l6ZSkpCiAJCQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9Ci0JCQkJcGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpKTsKJiM0MzsJCQkJcGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTsKIAkJZWxzZQogCQkJYWRkciA9IC1FTk9NRU07CiAJCW1tYXBfd3JpdGVfdW5sb2NrKG1tKTsKQEAgLTEwMjQsNyAmIzQzOzEwMjQsNyBAQCBpOTE1X2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCWZwdXQoYW5vbik7CiAKIAlpZiAob2JqLSZndDtvcHMtJmd0O21tYXBfb3BzKSB7Ci0JCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpKTsKJiM0MzsJCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTsKIAkJdm1hLSZndDt2bV9vcHMgPSBvYmotJmd0O29wcy0mZ3Q7bW1hcF9vcHM7CiAJCXZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhID0gb2JqLSZndDtiYXNlLnZtYV9ub2RlLmRyaXZlcl9wcml2YXRlOwogCQlyZXR1cm4gMDsKQEAgLTEwMzUsNyAmIzQzOzEwMzUsNyBAQCBpOTE1X2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCXN3aXRjaCAobW1vLSZndDttbWFwX3R5cGUpIHsKIAljYXNlIEk5MTVfTU1BUF9UWVBFX1dDOgogCQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9Ci0JCQlwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLSZndDt2bV9mbGFncykpOwomIzQzOwkJCXBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7CiAJCXZtYS0mZ3Q7dm1fb3BzID0gJmFtcDt2bV9vcHNfY3B1OwogCQlicmVhazsKIApAQCAtMTA0MywxOSAmIzQzOzEwNDMsMTkgQEAgaTkxNV9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJR0VNX1dBUk5fT04oMSk7CiAJCWZhbGx0aHJvdWdoOwogCWNhc2UgSTkxNV9NTUFQX1RZUEVfV0I6Ci0JCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTsKIAkJdm1hLSZndDt2bV9vcHMgPSAmYW1wO3ZtX29wc19jcHU7CiAJCWJyZWFrOwogCiAJY2FzZSBJOTE1X01NQVBfVFlQRV9VQzoKIAkJdm1hLSZndDt2bV9wYWdlX3Byb3QgPQotCQkJcGdwcm90X25vbmNhY2hlZCh2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpKTsKJiM0MzsJCQlwZ3Byb3Rfbm9uY2FjaGVkKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpOwogCQl2bWEtJmd0O3ZtX29wcyA9ICZhbXA7dm1fb3BzX2NwdTsKIAkJYnJlYWs7CiAKIAljYXNlIEk5MTVfTU1BUF9UWVBFX0dUVDoKIAkJdm1hLSZndDt2bV9wYWdlX3Byb3QgPQotCQkJcGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpKTsKJiM0MzsJCQlwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpOwogCQl2bWEtJmd0O3ZtX29wcyA9ICZhbXA7dm1fb3BzX2d0dDsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYwppbmRleCBjYmY3MjNhNWQ4NmZhOS4uNmE3OGUyNDJkZTdjNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jCkBAIC0xMTI1LDcgJiM0MzsxMTI1LDcgQEAgc3RhdGljIGludCBtc21fZ2VtX29iamVjdF9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QKIAlzdHJ1Y3QgbXNtX2dlbV9vYmplY3QgKm1zbV9vYmogPSB0b19tc21fYm8ob2JqKTsKIAogCXZtX2ZsYWdzX3NldCh2bWEsIFZNX1BGTk1BUCB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7Ci0Jdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBtc21fZ2VtX3BncHJvdChtc21fb2JqLCB2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpKTsKJiM0MzsJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBtc21fZ2VtX3BncHJvdChtc21fb2JqLCB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKaW5kZXggMjBkYmEwMmQ2MTc1YmMuLjlhNmVlMmU4ODBjMGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKQEAgLTU1LDcgJiM0Mzs1NSw3IEBAIHN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfdHRtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQlnb3RvIGVycm9yX3VubG9jazsKIAogCW5vdXZlYXVfYm9fZGVsX2lvX3Jlc2VydmVfbHJ1KGJvKTsKLQlwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7CiAJcmV0ID0gdHRtX2JvX3ZtX2ZhdWx0X3Jlc2VydmVkKHZtZiwgcHJvdCwgVFRNX0JPX1ZNX05VTV9QUkVGQVVMVCk7CiAJbm91dmVhdV9ib19hZGRfaW9fcmVzZXJ2ZV9scnUoYm8pOwogCWlmIChyZXQgPT0gVk1fRkFVTFRfUkVUUlkgJmFtcDsmYW1wOyAhKHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYmRldi5jCmluZGV4IGNhM2ZiMTg2YmYxOTU0Li40ODgxNzc3NjQyZDI5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYmRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZmJkZXYuYwpAQCAtODQsNyAmIzQzOzg0LDcgQEAgc3RhdGljIGludCBvbWFwX2ZiZGV2X3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbwogCiBzdGF0aWMgaW50IG9tYXBfZmJkZXZfZmJfbW1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0Jdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLSZndDt2bV9mbGFncykpOwomIzQzOwl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7CiAKIAlyZXR1cm4gZmJfZGVmZXJyZWRfaW9fbW1hcChpbmZvLCB2bWEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZ2VtLmMKaW5kZXggMDA0MDRmYjZjMjlhYWUuLmZiMGU2ZjU1NmIzMTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2dlbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZ2VtLmMKQEAgLTUzOCw5ICYjNDM7NTM4LDkgQEAgc3RhdGljIGludCBvbWFwX2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWMKIAl2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVAgfCBWTV9JTyB8IFZNX01JWEVETUFQKTsKIAogCWlmIChvbWFwX29iai0mZ3Q7ZmxhZ3MgJmFtcDsgT01BUF9CT19XQykgewotCQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKSk7CiYjNDM7CQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7CiAJfSBlbHNlIGlmIChvbWFwX29iai0mZ3Q7ZmxhZ3MgJmFtcDsgT01BUF9CT19VTkNBQ0hFRCkgewotCQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKSk7CiYjNDM7CQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogV2UgZG8gaGF2ZSBzb21lIHByaXZhdGUgb2JqZWN0cywgYXQgbGVhc3QgZm9yIHNjYW5vdXQgYnVmZmVycwpAQCAtNTU4LDcgJiM0Mzs1NTgsNyBAQCBzdGF0aWMgaW50IG9tYXBfZ2VtX29iamVjdF9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1YwogCQl2bWEtJmd0O3ZtX3Bnb2ZmIC09IGRybV92bWFfbm9kZV9zdGFydCgmYW1wO29iai0mZ3Q7dm1hX25vZGUpOwogCQl2bWFfc2V0X2ZpbGUodm1hLCBvYmotJmd0O2ZpbHApOwogCi0JCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTsKIAl9CiAKIAl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLSZndDt2bV9wYWdlX3Byb3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMKaW5kZXggYTFlMmViMWNhN2JiZTYuLjc3MDU1NjM1Mzk2ODcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMKQEAgLTc3Niw3ICYjNDM7Nzc2LDcgQEAgc3RhdGljIGludCBwYW50aG9yX2dlbV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnYKIAl9CiAKIAl2bV9mbGFnc19zZXQodm1hLCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApOwotCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpOwogCWlmIChzaG91bGRfbWFwX3djKGJvKSkKIAkJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYS0mZ3Q7dm1fcGFnZV9wcm90KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmMKaW5kZXggYjE4ODUzOWRjYTBiMjUuLjlhMWRjOWYxMjA3MjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmMKQEAgLTI1NSw3ICYjNDM7MjU1LDcgQEAgc3RhdGljIGludCByb2NrY2hpcF9kcm1fZ2VtX29iamVjdF9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAogCSAqLwogCXZtX2ZsYWdzX21vZCh2bWEsIFZNX0lPIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QLCBWTV9QRk5NQVApOwogCi0Jdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLSZndDt2bV9mbGFncykpOwomIzQzOwl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7CiAJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtYS0mZ3Q7dm1fcGFnZV9wcm90KTsKIAogCWlmIChya19vYmotJmd0O3BhZ2VzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jCmluZGV4IDFkOGQyN2E1ZWE4OWI4Li5mNzZhZjczM2VhNzkzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uYwpAQCAtNjAyLDcgJiM0Mzs2MDIsNyBAQCBpbnQgX190ZWdyYV9nZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAKIAkJdm1hLSZndDt2bV9wZ29mZiA9IHZtX3Bnb2ZmOwogCX0gZWxzZSB7Ci0JCXBncHJvdF90IHByb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpOwomIzQzOwkJcGdwcm90X3QgcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7CiAKIAkJdm1fZmxhZ3NfbW9kKHZtYSwgVk1fTUlYRURNQVAsIFZNX1BGTk1BUCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV92cmFtLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdnJhbS5jCmluZGV4IDRhZTNjYmMzNWRkMzY0Li41NDRhNmFiZGRiYzhiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ZyYW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdnJhbS5jCkBAIC01NSw3ICYjNDM7NTUsNyBAQCBzdGF0aWMgaW50IHZpcnRpb19ncHVfdnJhbV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAogCiAJdm1hLSZndDt2bV9wZ29mZiAtPSBkcm1fdm1hX25vZGVfc3RhcnQoJmFtcDtvYmotJmd0O3ZtYV9ub2RlKTsKIAl2bV9mbGFnc19zZXQodm1hLCBWTV9NSVhFRE1BUCB8IFZNX0RPTlRFWFBBTkQpOwotCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpOwogCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtJmd0O3ZtX3BhZ2VfcHJvdCk7CiAJdm1hLSZndDt2bV9vcHMgPSAmYW1wO3ZpcnRpb19ncHVfdnJhbV92bV9vcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3BhZ2VfZGlydHkuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3BhZ2VfZGlydHkuYwppbmRleCA0NTU2MWJjMWM5ZWZmZS4uYTlmZDQwMTVhMGNhYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3BhZ2VfZGlydHkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9wYWdlX2RpcnR5LmMKQEAgLTQ4MSw3ICYjNDM7NDgxLDcgQEAgdm1fZmF1bHRfdCB2bXdfYm9fdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJaWYgKHZiby0mZ3Q7ZGlydHkgJmFtcDsmYW1wOyB2Ym8tJmd0O2RpcnR5LSZndDttZXRob2QgPT0gVk1XX0JPX0RJUlRZX01LV1JJVEUpCiAJCXByb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgflZNX1NIQVJFRCk7CiAJZWxzZQotCQlwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJCXByb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpOwogCiAJcmV0ID0gdHRtX2JvX3ZtX2ZhdWx0X3Jlc2VydmVkKHZtZiwgcHJvdCwgbnVtX3ByZWZhdWx0KTsKIAlpZiAocmV0ID09IFZNX0ZBVUxUX1JFVFJZICZhbXA7JmFtcDsgISh2bWYtJmd0O2ZsYWdzICZhbXA7IEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuYwppbmRleCBhYmUyNWFlZGVlYWRlZi4uODM4Nzk3Y2M2NWQ3OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmMKQEAgLTI4MSw3ICYjNDM7MjgxLDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgYmFycmllcl9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlwZ3Byb3RfdCBwcm90OwogCWludCBpZHg7CiAKLQlwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7CiAKIAlpZiAoZHJtX2Rldl9lbnRlcihkZXYsICZhbXA7aWR4KSkgewogCQl1bnNpZ25lZCBsb25nIHBmbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9tbWlvX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX21taW9fZ2VtLmMKaW5kZXggOGM4MDNlZjIzM2NjNGQuLjM3NDFhZTYwZjUzMmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfbW1pb19nZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfbW1pb19nZW0uYwpAQCAtMTQ5LDcgJiM0MzsxNDksNyBAQCBzdGF0aWMgaW50IHhlX21taW9fZ2VtX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpiYXNlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKgogCiAJLyogU2V0IHZtX3Bnb2ZmICh1c2VkIGFzIGEgZmFrZSBidWZmZXIgb2Zmc2V0IGJ5IERSTSkgdG8gMCAqLwogCXZtYS0mZ3Q7dm1fcGdvZmYgPSAwOwotCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpKTsKJiM0MzsJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpOwogCXZtX2ZsYWdzX3NldCh2bWEsIFZNX0lPIHwgVk1fUEZOTUFQIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QIHwKIAkJICAgICBWTV9ET05UQ09QWSB8IFZNX05PUkVTRVJWRSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYwppbmRleCBlZWM0YzFkYTNmOWUzMS4uZGQxNTg0NDNmNTVmMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmMKQEAgLTgwLDcgJiM0Mzs4MCw3IEBAIHN0YXRpYyBpbnQgeGVuX2RybV9mcm9udF9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqLAogCSAqIHdoaWNoIGlzIG1hcHBlZCBhcyBOb3JtYWwgSW5uZXIgV3JpdGUtQmFjayBPdXRlciBXcml0ZS1CYWNrCiAJICogSW5uZXItU2hhcmVhYmxlLgogCSAqLwotCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpOwogCiAJLyoKIAkgKiB2bV9vcGVyYXRpb25zX3N0cnVjdC5mYXVsdCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGlmIENQVSBhY2Nlc3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYl9pb19mb3BzLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfaW9fZm9wcy5jCmluZGV4IDZhYjYwZmNkMDA1MDE0Li42ZDBhOGM4ZTE0MWEyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiX2lvX2ZvcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfaW9fZm9wcy5jCkBAIC0xNjEsNyAmIzQzOzE2MSw3IEBAIGludCBmYl9pb19tbWFwKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAkJbGVuID0gaW5mby0mZ3Q7Zml4Lm1taW9fbGVuOwogCX0KIAotCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpOwogCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gcGdwcm90X2ZyYW1lYnVmZmVyKHZtYS0mZ3Q7dm1fcGFnZV9wcm90LCB2bWEtJmd0O3ZtX3N0YXJ0LAogCQkJCQkgICAgICAgdm1hLSZndDt2bV9lbmQsIHN0YXJ0KTsKIApkaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uYwppbmRleCBmNTdmYTIxYTI1MDM1My4uM2RlNTg2ZGExOTdiZDkgMTAwNjQ0Ci0tLSBhL2ZzL2Fpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fpby5jCkBAIC02MDQsNyAmIzQzOzYwNCw3IEBAIHN0YXRpYyBpbnQgYWlvX3NldHVwX3Jpbmcoc3RydWN0IGtpb2N0eCAqY3R4LCB1bnNpZ25lZCBpbnQgbnJfZXZlbnRzKQogCiAJY3R4LSZndDttbWFwX2Jhc2UgPSBkb19tbWFwKGN0eC0mZ3Q7YWlvX3JpbmdfZmlsZSwgMCwgY3R4LSZndDttbWFwX3NpemUsCiAJCQkJIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0JCQkJIE1BUF9TSEFSRUQsIDAsIDAsICZhbXA7dW51c2VkLCBOVUxMKTsKJiM0MzsJCQkJIE1BUF9TSEFSRUQsIEVNUFRZX1ZNQV9GTEFHUywgMCwgJmFtcDt1bnVzZWQsIE5VTEwpOwogCW1tYXBfd3JpdGVfdW5sb2NrKG1tKTsKIAlpZiAoSVNfRVJSKCh2b2lkICopY3R4LSZndDttbWFwX2Jhc2UpKSB7CiAJCWN0eC0mZ3Q7bW1hcF9zaXplID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKaW5kZXggOWZkZGQxZTBiODEzYWIuLjQzMDY2ZjlkZGY1MmQxIDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtMTg0LDcgJiM0MzsxODQsOCBAQCBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKGFkZHIpCiAJCWFkZHIwID0gQUxJR04oYWRkciwgaHVnZV9wYWdlX3NpemUoaCkpOwogCi0JcmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTsKJiM0MzsJcmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywKJiM0MzsJCQkJCSAgICAgRU1QVFlfVk1BX0ZMQUdTKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmgKaW5kZXggY2FlOTdjMzA3MjgwOTcuLjllNDNlMTM4YzBiNzc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaApAQCAtMzkxLDkgJiM0MzszOTEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGhwX2Rpc2FibGVkX2J5X2h3KHZvaWQpCiAKIHVuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLXVuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0Mzt1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQl1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJdm1fZmxhZ3NfdCB2bV9mbGFncyk7CiYjNDM7CQl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpOwogCiBlbnVtIHNwbGl0X3R5cGUgewogCVNQTElUX1RZUEVfVU5JRk9STSwKQEAgLTYxNyw5ICYjNDM7NjE3LDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKICNkZWZpbmUgdGhwX2dldF91bm1hcHBlZF9hcmVhCU5VTEwKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi10aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKQomIzQzO3RocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwKJiM0MzsJCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1mZC5oIGIvaW5jbHVkZS9saW51eC9tZW1mZC5oCmluZGV4IGI0ZmRhMDlkYWI5ZjYxLi5jMTU5ZTQwZTNmMzRhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1mZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtZmQuaApAQCAtMTQsOSAmIzQzOzE0LDkgQEAgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KTsKICAqIHRvIHNlYWxpbmcsIG9yIDAgb3RoZXJ3aXNlLgogICoKICAqIFdlIGFsc28gdXBkYXRlIFZNQSBmbGFncyBpZiBhcHByb3ByaWF0ZSBieSBtYW5pcHVsYXRpbmcgdGhlIFZNQSBmbGFncyBwb2ludGVkCi0gKiB0byBieSB2bV9mbGFnc19wdHIuCiYjNDM7ICogdG8gYnkgdm1hX2ZsYWdzX3B0ci4KICAqLwotaW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzX3B0cik7CiYjNDM7aW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKTsKIHN0cnVjdCBmaWxlICptZW1mZF9hbGxvY19maWxlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBmbGFncyk7CiBpbnQgbWVtZmRfZ2V0X3NlYWxzKHN0cnVjdCBmaWxlICpmaWxlKTsKIGludCBtZW1mZF9hZGRfc2VhbHMoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzZWFscyk7CkBAIC0zMCw3ICYjNDM7MzAsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeCkKIAlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KIHN0YXRpYyBpbmxpbmUgaW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCSB2bV9mbGFnc190ICp2bV9mbGFnc19wdHIpCiYjNDM7CQkJCQkgdm1hX2ZsYWdzX3QgKnZtYV9mbGFnc19wdHIpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggMzJiYjcyM2ZmYmI5MmQuLjU1MGZiOTI5NTdkMTg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC00NDIsOCAmIzQzOzQ0MiwxMCBAQCBlbnVtIHsKICNkZWZpbmUgVk1fU1RBQ0sJSU5JVF9WTV9GTEFHKFNUQUNLKQogI2lmZGVmIENPTkZJR19TVEFDS19HUk9XU1VQCiAjZGVmaW5lIFZNX1NUQUNLX0VBUkxZCUlOSVRfVk1fRkxBRyhTVEFDS19FQVJMWSkKJiM0MzsjZGVmaW5lIFZNQV9TVEFDS19FQVJMWSBta192bWFfZmxhZ3MoVk1BX1NUQUNLX0VBUkxZX0JJVCkKICNlbHNlCiAjZGVmaW5lIFZNX1NUQUNLX0VBUkxZCVZNX05PTkUKJiM0MzsjZGVmaW5lIFZNQV9TVEFDS19FQVJMWSBFTVBUWV9WTUFfRkxBR1MKICNlbmRpZgogI2lmZGVmIENPTkZJR19BUkNIX0hBU19QS0VZUwogI2RlZmluZSBWTV9QS0VZX1NISUZUICgoX19mb3JjZSBpbnQpVk1BX0hJR0hfQVJDSF8wX0JJVCkKQEAgLTQ2NSwxNSAmIzQzOzQ2NywxOCBAQCBlbnVtIHsKICNpZiBkZWZpbmVkKENPTkZJR19YODZfVVNFUl9TSEFET1dfU1RBQ0spIHx8IGRlZmluZWQoQ09ORklHX0FSTTY0X0dDUykgfHwgXAogCWRlZmluZWQoQ09ORklHX1JJU0NWX1VTRVJfQ0ZJKQogI2RlZmluZSBWTV9TSEFET1dfU1RBQ0sJSU5JVF9WTV9GTEFHKFNIQURPV19TVEFDSykKJiM0MzsjZGVmaW5lIFZNQV9TSEFET1dfU1RBQ0sgbWtfdm1hX2ZsYWdzKFZNQV9TSEFET1dfU1RBQ0tfQklUKQogI2RlZmluZSBWTUFfU1RBUlRHQVBfRkxBR1MgbWtfdm1hX2ZsYWdzKFZNQV9HUk9XU0RPV05fQklULCBWTUFfU0hBRE9XX1NUQUNLX0JJVCkKICNlbHNlCiAjZGVmaW5lIFZNX1NIQURPV19TVEFDSwlWTV9OT05FCiYjNDM7I2RlZmluZSBWTUFfU0hBRE9XX1NUQUNLIEVNUFRZX1ZNQV9GTEFHUwogI2RlZmluZSBWTUFfU1RBUlRHQVBfRkxBR1MgbWtfdm1hX2ZsYWdzKFZNQV9HUk9XU0RPV05fQklUKQogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpCiAjZGVmaW5lIFZNX1NBTwkJSU5JVF9WTV9GTEFHKFNBTykKICNlbGlmIGRlZmluZWQoQ09ORklHX1BBUklTQykKICNkZWZpbmUgVk1fR1JPV1NVUAlJTklUX1ZNX0ZMQUcoR1JPV1NVUCkKJiM0MzsjZGVmaW5lIFZNQV9HUk9XU1VQCW1rX3ZtYV9mbGFncyhWTUFfR1JPV1NVUF9CSVQpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TUEFSQzY0KQogI2RlZmluZSBWTV9TUEFSQ19BREkJSU5JVF9WTV9GTEFHKFNQQVJDX0FESSkKICNkZWZpbmUgVk1fQVJDSF9DTEVBUglJTklUX1ZNX0ZMQUcoQVJDSF9DTEVBUikKQEAgLTQ4NSw2ICYjNDM7NDkwLDcgQEAgZW51bSB7CiAjZW5kaWYKICNpZm5kZWYgVk1fR1JPV1NVUAogI2RlZmluZSBWTV9HUk9XU1VQCVZNX05PTkUKJiM0MzsjZGVmaW5lIFZNQV9HUk9XU1VQCUVNUFRZX1ZNQV9GTEFHUwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSTTY0X01URQogI2RlZmluZSBWTV9NVEUJCUlOSVRfVk1fRkxBRyhNVEUpCkBAIC01NDAsNiAmIzQzOzU0Niw4IEBAIGVudW0gewogCiAvKiBCaXRzIHNldCBpbiB0aGUgVk1BIHVudGlsIHRoZSBzdGFjayBpcyBpbiBpdHMgZmluYWwgbG9jYXRpb24gKi8KICNkZWZpbmUgVk1fU1RBQ0tfSU5DT01QTEVURV9TRVRVUCAoVk1fUkFORF9SRUFEIHwgVk1fU0VRX1JFQUQgfCBWTV9TVEFDS19FQVJMWSkKJiM0MzsjZGVmaW5lIFZNQV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQIGFwcGVuZF92bWFfZmxhZ3MoCQlcCiYjNDM7CVZNQV9TVEFDS19FQVJMWSwgVk1BX1JBTkRfUkVBRF9CSVQsIFZNQV9TRVFfUkVBRF9CSVQpCiAKICNkZWZpbmUgVEFTS19FWEVDX0JJVCAoKGN1cnJlbnQtJmd0O3BlcnNvbmFsaXR5ICZhbXA7IFJFQURfSU1QTElFU19FWEVDKSA/IFwKIAkJICAgICAgIFZNQV9FWEVDX0JJVCA6IFZNQV9SRUFEX0JJVCkKQEAgLTE1NzgsMTEgJiM0MzsxNTg2LDI0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfaW5pdGlhbF9zdGFjayhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAkJdm1hLSZndDt2bV9lbmQgJmd0Oz0gdm1hLSZndDt2bV9tbS0mZ3Q7c3RhcnRfc3RhY2s7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfdGVtcG9yYXJ5X3N0YWNrKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB2bWFfZmxhZ3NfY2FuX2dyb3coY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzKQogewotCWludCBtYXliZV9zdGFjayA9IHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgKFZNX0dST1dTRE9XTiB8IFZNX0dST1dTVVApOwomIzQzOwlpZiAodm1hX2ZsYWdzX3Rlc3Rfc2luZ2xlX21hc2soZmxhZ3MsIFZNQV9HUk9XU1VQKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAodm1hX2ZsYWdzX3Rlc3QoZmxhZ3MsIFZNQV9HUk9XU0RPV05fQklUKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB2bWFfY2FuX2dyb3coY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiYjNDM7ewomIzQzOwlyZXR1cm4gdm1hX2ZsYWdzX2Nhbl9ncm93KCZhbXA7dm1hLSZndDtmbGFncyk7CiYjNDM7fQogCi0JaWYgKCFtYXliZV9zdGFjaykKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX3RlbXBvcmFyeV9zdGFjayhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CWlmICghdm1hX2Nhbl9ncm93KHZtYSkpCiAJCXJldHVybiBmYWxzZTsKIAogCWlmICgodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQKSA9PQpAQCAtNDE3NCwxOCAmIzQzOzQxOTUsMjAgQEAgdW5zaWduZWQgbG9uZyByYW5kb21pemVfcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHJhbmdlKTsKIAogdW5zaWduZWQgbG9uZwogX19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKLQkJICAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpOwomIzQzOwkJICAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiYjNDM7CQkgICAgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCiBnZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXJldHVybiBfX2dldF91bm1hcHBlZF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTsKJiM0MzsJcmV0dXJuIF9fZ2V0X3VubWFwcGVkX2FyZWEoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsCiYjNDM7CQkJCSAgIEVNUFRZX1ZNQV9GTEFHUyk7CiB9CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0Mzt1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAl1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLAotCXZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgKnBvcHVsYXRlLAomIzQzOwl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgKnBvcHVsYXRlLAogCXN0cnVjdCBsaXN0X2hlYWQgKnVmKTsKIGV4dGVybiBpbnQgZG9fdm1pX211bm1hcChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sIHN0cnVjdCBsaXN0X2hlYWQgKnVmLApAQCAtNDU4NCwyNiAmIzQzOzQ2MDcsMzUgQEAgc3RhdGljIGlubGluZSBib29sIHJhbmdlX2luX3ZtYV9kZXNjKGNvbnN0IHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MsCiAjaWZkZWYgQ09ORklHX01NVQogcGdwcm90X3Qgdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFnc190IHZtX2ZsYWdzKTsKIAotc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiYjNDM7c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncykKIHsKIAljb25zdCB2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpOwogCiAJcmV0dXJuIHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3MpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CXJldHVybiB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYS0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKIHZvaWQgdm1hX3NldF9wYWdlX3Byb3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFnc190IHZtX2ZsYWdzKQogewogCXJldHVybiBfX3BncHJvdCgwKTsKIH0KLXN0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2dldF9wYWdlX3Byb3Qodm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKQomIzQzO3N0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19wZ3Byb3QoMCk7CiYjNDM7fQomIzQzO3N0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2dldF9wYWdlX3Byb3QoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJcmV0dXJuIF9fcGdwcm90KDApOwogfQogc3RhdGljIGlubGluZSB2b2lkIHZtYV9zZXRfcGFnZV9wcm90KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaAppbmRleCA5NWQwMDQwZGY1ODQxMy4uMTBiZThhNTRiNDE2ZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgKQEAgLTE5MywyMSAmIzQzOzE5MywxOCBAQCB1bnNpZ25lZCBsb25nIG1tX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAKLXVuc2lnbmVkIGxvbmcgbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIGxlbiwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBwZ29mZiwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJCQkJICAgdm1fZmxhZ3NfdCB2bV9mbGFncyk7CiYjNDM7dW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpOwogCiB1bnNpZ25lZCBsb25nCiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLAotCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKTsKJiM0MzsJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7CiB1bnNpZ25lZCBsb25nCiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLAotCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncyk7CiYjNDM7CQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9waWNrX21tYXBfbGF5b3V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkgY29uc3Qgc3RydWN0IHJsaW1pdCAqcmxpbV9zdGFjaykge30KZGlmZiAtLWdpdCBhL2lwYy9zaG0uYyBiL2lwYy9zaG0uYwppbmRleCBiM2U4YTU4ZTE3N2QzYi4uYmIxYTcyMWEzZTc0NmUgMTAwNjQ0Ci0tLSBhL2lwYy9zaG0uYwomIzQzOyYjNDM7JiM0MzsgYi9pcGMvc2htLmMKQEAgLTE2NjEsNyAmIzQzOzE2NjEsOCBAQCBsb25nIGRvX3NobWF0KGludCBzaG1pZCwgY2hhciBfX3VzZXIgKnNobWFkZHIsIGludCBzaG1mbGcsCiAJCQlnb3RvIGludmFsaWQ7CiAJfQogCi0JYWRkciA9IGRvX21tYXAoZmlsZSwgYWRkciwgc2l6ZSwgcHJvdCwgZmxhZ3MsIDAsIDAsICZhbXA7cG9wdWxhdGUsIE5VTEwpOwomIzQzOwlhZGRyID0gZG9fbW1hcChmaWxlLCBhZGRyLCBzaXplLCBwcm90LCBmbGFncywgRU1QVFlfVk1BX0ZMQUdTLCAwLAomIzQzOwkJICAgICAgICZhbXA7cG9wdWxhdGUsIE5VTEwpOwogCSpyYWRkciA9IGFkZHI7CiAJZXJyID0gMDsKIAlpZiAoSVNfRVJSX1ZBTFVFKGFkZHIpKQpkaWZmIC0tZ2l0IGEvbW0vZGVidWcuYyBiL21tL2RlYnVnLmMKaW5kZXggNDk3NjU0YjM2ZjFhYjUuLjlhMDI5N2IzOTg4ZDg5IDEwMDY0NAotLS0gYS9tbS9kZWJ1Zy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RlYnVnLmMKQEAgLTE5Nyw3ICYjNDM7MTk3LDcgQEAgdm9pZCBkdW1wX21tKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCQkmIzM0O251bWFfbmV4dF9zY2FuICVsdSBudW1hX3NjYW5fb2Zmc2V0ICVsdSBudW1hX3NjYW5fc2VxICVkXG4mIzM0OwogI2VuZGlmCiAJCSYjMzQ7dGxiX2ZsdXNoX3BlbmRpbmcgJWRcbiYjMzQ7Ci0JCSYjMzQ7ZGVmX2ZsYWdzOiAlI2x4KCVwR3YpXG4mIzM0OywKJiM0MzsJCSYjMzQ7ZGVmX2ZsYWdzOiAlKnBiKCVwR3YpXG4mIzM0OywKIAogCQltbSwgbW0tJmd0O3Rhc2tfc2l6ZSwKIAkJbW0tJmd0O21tYXBfYmFzZSwgbW0tJmd0O21tYXBfbGVnYWN5X2Jhc2UsCkBAIC0yMjYsNyAmIzQzOzIyNiw4IEBAIHZvaWQgZHVtcF9tbShjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAkJbW0tJmd0O251bWFfbmV4dF9zY2FuLCBtbS0mZ3Q7bnVtYV9zY2FuX29mZnNldCwgbW0tJmd0O251bWFfc2Nhbl9zZXEsCiAjZW5kaWYKIAkJYXRvbWljX3JlYWQoJmFtcDttbS0mZ3Q7dGxiX2ZsdXNoX3BlbmRpbmcpLAotCQltbS0mZ3Q7ZGVmX2ZsYWdzLCAmYW1wO21tLSZndDtkZWZfZmxhZ3MKJiM0MzsJCU5VTV9WTUFfRkxBR19CSVRTLCBtbS0mZ3Q7ZGVmX3ZtYV9mbGFncy5fX3ZtYV9mbGFncywKJiM0MzsJCSZhbXA7bW0tJmd0O2RlZl92bWFfZmxhZ3MKIAkpOwogfQogRVhQT1JUX1NZTUJPTChkdW1wX21tKTsKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDBkYzZkNjMwNTcwZmFmLi40MGQ2YjQwNzhlM2Q0MyAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0xMTk2LDcgJiM0MzsxMTk2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJbG9mZl90IG9mZiwgdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBzaXplLAotCQl2bV9mbGFnc190IHZtX2ZsYWdzKQomIzQzOwkJdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKQogewogCWxvZmZfdCBvZmZfZW5kID0gb2ZmICYjNDM7IGxlbjsKIAlsb2ZmX3Qgb2ZmX2FsaWduID0gcm91bmRfdXAob2ZmLCBzaXplKTsKQEAgLTEyMTIsOCAmIzQzOzEyMTIsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwKIAlpZiAobGVuX3BhZCAmbHQ7IGxlbiB8fCAob2ZmICYjNDM7IGxlbl9wYWQpICZsdDsgb2ZmKQogCQlyZXR1cm4gMDsKIAotCXJldCA9IG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlscCwgYWRkciwgbGVuX3BhZCwKLQkJCQkJICAgb2ZmICZndDsmZ3Q7IFBBR0VfU0hJRlQsIGZsYWdzLCB2bV9mbGFncyk7CiYjNDM7CXJldCA9IG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbHAsIGFkZHIsIGxlbl9wYWQsCiYjNDM7CQkJCQkgICAgb2ZmICZndDsmZ3Q7IFBBR0VfU0hJRlQsIGZsYWdzLAomIzQzOwkJCQkJICAgIHZtYV9mbGFncyk7CiAKIAkvKgogCSAqIFRoZSBmYWlsdXJlIG1pZ2h0IGJlIGR1ZSB0byBsZW5ndGggcGFkZGluZy4gVGhlIGNhbGxlciB3aWxsIHJldHJ5CkBAIC0xMjM4LDI1ICYjNDM7MTIzOSwyNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwKIAlyZXR1cm4gcmV0OwogfQogCi11bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7dW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0JCXZtX2ZsYWdzX3Qgdm1fZmxhZ3MpCiYjNDM7CQl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyByZXQ7CiAJbG9mZl90IG9mZiA9IChsb2ZmX3QpcGdvZmYgJmx0OyZsdDsgUEFHRV9TSElGVDsKIAotCXJldCA9IF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgb2ZmLCBmbGFncywgUE1EX1NJWkUsIHZtX2ZsYWdzKTsKJiM0MzsJcmV0ID0gX190aHBfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBvZmYsIGZsYWdzLCBQTURfU0laRSwKJiM0MzsJCQkJICAgICAgdm1hX2ZsYWdzKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsCi0JCQkJCSAgICB2bV9mbGFncyk7CiYjNDM7CXJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywKJiM0MzsJCQkJCSAgICAgdm1hX2ZsYWdzKTsKIH0KIAogdW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0JcmV0dXJuIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTsKJiM0MzsJcmV0dXJuIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywKJiM0MzsJCQkJCSAgICAgIEVNUFRZX1ZNQV9GTEFHUyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0aHBfZ2V0X3VubWFwcGVkX2FyZWEpOwogCmRpZmYgLS1naXQgYS9tbS9tZW1mZC5jIGIvbW0vbWVtZmQuYwppbmRleCA2YzcyZmU2Y2FlZjc1ZC4uYzcwOGQ5MjUzM2Y0YWIgMTAwNjQ0Ci0tLSBhL21tL21lbWZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtZmQuYwpAQCAtMzcwLDM5ICYjNDM7MzcwLDM2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc193cml0ZV9zZWFsZWQodW5zaWduZWQgaW50IHNlYWxzKQogCXJldHVybiBzZWFscyAmYW1wOyAoRl9TRUFMX1dSSVRFIHwgRl9TRUFMX0ZVVFVSRV9XUklURSk7CiB9CiAKLXN0YXRpYyBpbnQgY2hlY2tfd3JpdGVfc2VhbCh2bV9mbGFnc190ICp2bV9mbGFnc19wdHIpCiYjNDM7c3RhdGljIGludCBjaGVja193cml0ZV9zZWFsKHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKQogewotCXZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSAqdm1fZmxhZ3NfcHRyOwotCXZtX2ZsYWdzX3QgbWFzayA9IHZtX2ZsYWdzICZhbXA7IChWTV9TSEFSRUQgfCBWTV9XUklURSk7Ci0KIAkvKiBJZiBhIHByaXZhdGUgbWFwcGluZyB0aGVuIHdyaXRhYmlsaXR5IGlzIGlycmVsZXZhbnQuICovCi0JaWYgKCEobWFzayAmYW1wOyBWTV9TSEFSRUQpKQomIzQzOwlpZiAoIXZtYV9mbGFnc190ZXN0KHZtYV9mbGFnc19wdHIsIFZNQV9TSEFSRURfQklUKSkKIAkJcmV0dXJuIDA7CiAKIAkvKgogCSAqIE5ldyBQUk9UX1dSSVRFIGFuZCBNQVBfU0hBUkVEIG1tYXBzIGFyZSBub3QgYWxsb3dlZCB3aGVuCiAJICogd3JpdGUgc2VhbHMgYXJlIGFjdGl2ZS4KIAkgKi8KLQlpZiAobWFzayAmYW1wOyBWTV9XUklURSkKJiM0MzsJaWYgKHZtYV9mbGFnc190ZXN0KHZtYV9mbGFnc19wdHIsIFZNQV9XUklURV9CSVQpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJLyoKIAkgKiBUaGlzIGlzIGEgcmVhZC1vbmx5IG1hcHBpbmcsIGRpc2FsbG93IG1wcm90ZWN0KCkgZnJvbSBtYWtpbmcgYQogCSAqIHdyaXRlLXNlYWxlZCBtYXBwaW5nIHdyaXRhYmxlIGluIGZ1dHVyZS4KIAkgKi8KLQkqdm1fZmxhZ3NfcHRyICZhbXA7PSB+Vk1fTUFZV1JJVEU7CiYjNDM7CXZtYV9mbGFnc19jbGVhcih2bWFfZmxhZ3NfcHRyLCBWTUFfTUFZV1JJVEVfQklUKTsKIAogCXJldHVybiAwOwogfQogCi1pbnQgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3NfcHRyKQomIzQzO2ludCBtZW1mZF9jaGVja19zZWFsc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzX3B0cikKIHsKIAlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBpbnQgKnNlYWxzX3B0ciA9IG1lbWZkX2ZpbGVfc2VhbHNfcHRyKGZpbGUpOwogCXVuc2lnbmVkIGludCBzZWFscyA9IHNlYWxzX3B0ciA/ICpzZWFsc19wdHIgOiAwOwogCiAJaWYgKGlzX3dyaXRlX3NlYWxlZChzZWFscykpCi0JCWVyciA9IGNoZWNrX3dyaXRlX3NlYWwodm1fZmxhZ3NfcHRyKTsKJiM0MzsJCWVyciA9IGNoZWNrX3dyaXRlX3NlYWwodm1hX2ZsYWdzX3B0cik7CiAKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbW0vbWxvY2suYyBiL21tL21sb2NrLmMKaW5kZXggOTdlNDkwMzhkOGQzM2UuLmVmYTY3MTZlNGRmYmRmIDEwMDY0NAotLS0gYS9tbS9tbG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21sb2NrLmMKQEAgLTMyOSw3ICYjNDM7MzI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFsbG93X21sb2NrX211bmxvY2soc3RydWN0IGZvbGlvICpmb2xpbywKIAkgKiBiZSBzcGxpdC4gQW5kIHRoZSBwYWdlcyBhcmUgbm90IGluIFZNX0xPQ0tlZCBWTUEKIAkgKiBjYW4gYmUgcmVjbGFpbWVkLgogCSAqLwotCWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fTE9DS0VEKSkKJiM0MzsJaWYgKCF2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSkKIAkJcmV0dXJuIHRydWU7CiAKIAkvKiBmb2xpb193aXRoaW5fcmFuZ2UoKSBjYW5ub3QgdGFrZSBLU00sIGJ1dCBhbnkgc21hbGwgZm9saW8gaXMgT0sgKi8KQEAgLTM2OCw3ICYjNDM7MzY4LDcgQEAgc3RhdGljIGludCBtbG9ja19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlmb2xpbyA9IHBtZF9mb2xpbygqcG1kKTsKIAkJaWYgKGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSkKIAkJCWdvdG8gb3V0OwotCQlpZiAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9MT0NLRUQpCiYjNDM7CQlpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpCiAJCQltbG9ja19mb2xpbyhmb2xpbyk7CiAJCWVsc2UKIAkJCW11bmxvY2tfZm9saW8oZm9saW8pOwpAQCAtMzkzLDcgJiM0MzszOTMsNyBAQCBzdGF0aWMgaW50IG1sb2NrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCWlmICghYWxsb3dfbWxvY2tfbXVubG9jayhmb2xpbywgdm1hLCBzdGFydCwgZW5kLCBzdGVwKSkKIAkJCWdvdG8gbmV4dF9lbnRyeTsKIAotCQlpZiAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9MT0NLRUQpCiYjNDM7CQlpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpCiAJCQltbG9ja19mb2xpbyhmb2xpbyk7CiAJCWVsc2UKIAkJCW11bmxvY2tfZm9saW8oZm9saW8pOwpAQCAtNDE3LDggJiM0Mzs0MTcsOCBAQCBzdGF0aWMgaW50IG1sb2NrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAgKiBAZW5kIC0gZW5kIG9mIHJhbmdlIGluIEB2bWEKICAqIEBuZXdfdm1hX2ZsYWdzIC0gdGhlIG5ldyBzZXQgb2YgZmxhZ3MgZm9yIEB2bWEuCiAgKgotICogQ2FsbGVkIGZvciBtbG9jaygpLCBtbG9jazIoKSBhbmQgbWxvY2thbGwoKSwgdG8gc2V0IEB2bWEgVk1fTE9DS0VEOwotICogY2FsbGVkIGZvciBtdW5sb2NrKCkgYW5kIG11bmxvY2thbGwoKSwgdG8gY2xlYXIgVk1fTE9DS0VEIGZyb20gQHZtYS4KJiM0MzsgKiBDYWxsZWQgZm9yIG1sb2NrKCksIG1sb2NrMigpIGFuZCBtbG9ja2FsbCgpLCB0byBzZXQgQHZtYSBWTUFfTE9DS0VEX0JJVDsKJiM0MzsgKiBjYWxsZWQgZm9yIG11bmxvY2soKSBhbmQgbXVubG9ja2FsbCgpLCB0byBjbGVhciBWTUFfTE9DS0VEX0JJVCBmcm9tIEB2bWEuCiAgKi8KIHN0YXRpYyB2b2lkIG1sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKQEAgLTQzMSwxNCAmIzQzOzQzMSwxNCBAQCBzdGF0aWMgdm9pZCBtbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAKIAkvKgogCSAqIFRoZXJlIGlzIGEgc2xpZ2h0IGNoYW5jZSB0aGF0IGNvbmN1cnJlbnQgcGFnZSBtaWdyYXRpb24sCi0JICogb3IgcGFnZSByZWNsYWltIGZpbmRpbmcgYSBwYWdlIG9mIHRoaXMgbm93LVZNX0xPQ0tFRCB2bWEsCiYjNDM7CSAqIG9yIHBhZ2UgcmVjbGFpbSBmaW5kaW5nIGEgcGFnZSBvZiB0aGlzIG5vdy1WTUFfTE9DS0VEX0JJVCB2bWEsCiAJICogd2lsbCBjYWxsIG1sb2NrX3ZtYV9mb2xpbygpIGFuZCByYWlzZSBwYWdlJiMzOTtzIG1sb2NrX2NvdW50OgogCSAqIGRvdWJsZSBjb3VudGluZywgbGVhdmluZyB0aGUgcGFnZSB1bmV2aWN0YWJsZSBpbmRlZmluaXRlbHkuCi0JICogQ29tbXVuaWNhdGUgdGhpcyBkYW5nZXIgdG8gbWxvY2tfdm1hX2ZvbGlvKCkgd2l0aCBWTV9JTywKLQkgKiB3aGljaCBpcyBhIFZNX1NQRUNJQUwgZmxhZyBub3QgYWxsb3dlZCBvbiBWTV9MT0NLRUQgdm1hcy4KJiM0MzsJICogQ29tbXVuaWNhdGUgdGhpcyBkYW5nZXIgdG8gbWxvY2tfdm1hX2ZvbGlvKCkgd2l0aCBWTUFfSU9fQklULAomIzQzOwkgKiB3aGljaCBpcyBhIFZNQV9TUEVDSUFMX0ZMQUdTIGZsYWcgbm90IGFsbG93ZWQgb24gVk1BX0xPQ0tFRF9CSVQgdm1hcy4KIAkgKiBtbWFwX2xvY2sgaXMgaGVsZCBpbiB3cml0ZSBtb2RlIGhlcmUsIHNvIHRoaXMgd2VpcmQKIAkgKiBjb21iaW5hdGlvbiBzaG91bGQgbm90IGJlIHZpc2libGUgdG8gb3RoZXIgbW1hcF9sb2NrIHVzZXJzOwotCSAqIGJ1dCBXUklURV9PTkNFIHNvIHJtYXAgd2Fsa2VycyBtdXN0IHNlZSBWTV9JTyBpZiBWTV9MT0NLRUQuCiYjNDM7CSAqIGJ1dCBXUklURV9PTkNFIHNvIHJtYXAgd2Fsa2VycyBtdXN0IHNlZSBWTUFfSU9fQklUIGlmIFZNQV9MT0NLRURfQklULgogCSAqLwogCWlmICh2bWFfZmxhZ3NfdGVzdChuZXdfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpCiAJCXZtYV9mbGFnc19zZXQobmV3X3ZtYV9mbGFncywgVk1BX0lPX0JJVCk7CkBAIC00NTgsNyAmIzQzOzQ1OCw3IEBAIHN0YXRpYyB2b2lkIG1sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIC8qCiAgKiBtbG9ja19maXh1cCAgLSBoYW5kbGUgbWxvY2tbYWxsXS9tdW5sb2NrW2FsbF0gcmVxdWVzdHMuCiAgKgotICogRmlsdGVycyBvdXQgJiMzNDtzcGVjaWFsJiMzNDsgdm1hcyAtLSBWTV9MT0NLRUQgbmV2ZXIgZ2V0cyBzZXQgZm9yIHRoZXNlLCBhbmQKJiM0MzsgKiBGaWx0ZXJzIG91dCAmIzM0O3NwZWNpYWwmIzM0OyB2bWFzIC0tIFZNQV9MT0NLRURfQklUIG5ldmVyIGdldHMgc2V0IGZvciB0aGVzZSwgYW5kCiAgKiBtdW5sb2NrIGlzIGEgbm8tb3AuICBIb3dldmVyLCBmb3Igc29tZSBzcGVjaWFsIHZtYXMsIHdlIGdvIGFoZWFkIGFuZAogICogcG9wdWxhdGUgdGhlIHB0ZXMuCiAgKgpAQCAtNDY2LDI0ICYjNDM7NDY2LDIzIEBAIHN0YXRpYyB2b2lkIG1sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKICAqLwogc3RhdGljIGludCBtbG9ja19maXh1cChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCSAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKipwcmV2LCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgdm1fZmxhZ3NfdCBuZXdmbGFncykKJiM0MzsJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB2bWFfZmxhZ3NfdCAqbmV3X3ZtYV9mbGFncykKIHsKLQl2bWFfZmxhZ3NfdCBuZXdfdm1hX2ZsYWdzID0gbGVnYWN5X3RvX3ZtYV9mbGFncyhuZXdmbGFncyk7CiAJY29uc3Qgdm1hX2ZsYWdzX3Qgb2xkX3ZtYV9mbGFncyA9IHZtYS0mZ3Q7ZmxhZ3M7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtJmd0O3ZtX21tOwogCWludCBucl9wYWdlczsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICh2bWFfZmxhZ3Nfc2FtZV9wYWlyKCZhbXA7b2xkX3ZtYV9mbGFncywgJmFtcDtuZXdfdm1hX2ZsYWdzKSB8fAomIzQzOwlpZiAodm1hX2ZsYWdzX3NhbWVfcGFpcigmYW1wO29sZF92bWFfZmxhZ3MsIG5ld192bWFfZmxhZ3MpIHx8CiAJICAgIHZtYV9pc19zZWNyZXRtZW0odm1hKSB8fCAhdm1hX3N1cHBvcnRzX21sb2NrKHZtYSkpIHsKIAkJLyoKLQkJICogRG9uJiMzOTt0IHNldCBWTV9MT0NLRUQgb3IgVk1fTE9DS09ORkFVTFQgYW5kIGRvbiYjMzk7dCBjb3VudC4KLQkJICogRm9yIHNlY3JldG1lbSwgZG9uJiMzOTt0IGFsbG93IHRoZSBtZW1vcnkgdG8gYmUgdW5sb2NrZWQuCiYjNDM7CQkgKiBEb24mIzM5O3Qgc2V0IFZNQV9MT0NLRURfQklUIG9yIFZNQV9MT0NLT05GQVVMVF9CSVQgYW5kIGRvbiYjMzk7dAomIzQzOwkJICogY291bnQuICBGb3Igc2VjcmV0bWVtLCBkb24mIzM5O3QgYWxsb3cgdGhlIG1lbW9yeSB0byBiZSB1bmxvY2tlZC4KIAkJICovCiAJCWdvdG8gb3V0OwogCX0KIAotCXZtYSA9IHZtYV9tb2RpZnlfZmxhZ3Modm1pLCAqcHJldiwgdm1hLCBzdGFydCwgZW5kLCAmYW1wO25ld192bWFfZmxhZ3MpOwomIzQzOwl2bWEgPSB2bWFfbW9kaWZ5X2ZsYWdzKHZtaSwgKnByZXYsIHZtYSwgc3RhcnQsIGVuZCwgbmV3X3ZtYV9mbGFncyk7CiAJaWYgKElTX0VSUih2bWEpKSB7CiAJCXJldCA9IFBUUl9FUlIodm1hKTsKIAkJZ290byBvdXQ7CkBAIC00OTMsNyAmIzQzOzQ5Miw3IEBAIHN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkgKiBLZWVwIHRyYWNrIG9mIGFtb3VudCBvZiBsb2NrZWQgVk0uCiAJICovCiAJbnJfcGFnZXMgPSAoZW5kIC0gc3RhcnQpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7Ci0JaWYgKCF2bWFfZmxhZ3NfdGVzdCgmYW1wO25ld192bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSkKJiM0MzsJaWYgKCF2bWFfZmxhZ3NfdGVzdChuZXdfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpCiAJCW5yX3BhZ2VzID0gLW5yX3BhZ2VzOwogCWVsc2UgaWYgKHZtYV9mbGFnc190ZXN0KCZhbXA7b2xkX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKQogCQlucl9wYWdlcyA9IDA7CkBAIC01MDIsMTUgJiM0Mzs1MDEsMTUgQEAgc3RhdGljIGludCBtbG9ja19maXh1cChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCS8qCiAJICogdm1fZmxhZ3MgaXMgcHJvdGVjdGVkIGJ5IHRoZSBtbWFwX2xvY2sgaGVsZCBpbiB3cml0ZSBtb2RlLgogCSAqIEl0JiMzOTtzIG9rYXkgaWYgdHJ5X3RvX3VubWFwX29uZSB1bm1hcHMgYSBwYWdlIGp1c3QgYWZ0ZXIgd2UKLQkgKiBzZXQgVk1fTE9DS0VELCBwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suCiYjNDM7CSAqIHNldCBWTUFfTE9DS0VEX0JJVCwgcG9wdWxhdGVfdm1hX3BhZ2VfcmFuZ2Ugd2lsbCBicmluZyBpdCBiYWNrLgogCSAqLwotCWlmICh2bWFfZmxhZ3NfdGVzdCgmYW1wO25ld192bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSAmYW1wOyZhbXA7CiYjNDM7CWlmICh2bWFfZmxhZ3NfdGVzdChuZXdfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkgJmFtcDsmYW1wOwogCSAgICB2bWFfZmxhZ3NfdGVzdCgmYW1wO29sZF92bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSkgewogCQkvKiBObyB3b3JrIHRvIGRvLCBhbmQgbWxvY2tpbmcgdHdpY2Ugd291bGQgYmUgd3JvbmcgKi8KIAkJdm1hX3N0YXJ0X3dyaXRlKHZtYSk7Ci0JCXZtYS0mZ3Q7ZmxhZ3MgPSBuZXdfdm1hX2ZsYWdzOwomIzQzOwkJdm1hLSZndDtmbGFncyA9ICpuZXdfdm1hX2ZsYWdzOwogCX0gZWxzZSB7Ci0JCW1sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsICZhbXA7bmV3X3ZtYV9mbGFncyk7CiYjNDM7CQltbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCBuZXdfdm1hX2ZsYWdzKTsKIAl9CiBvdXQ6CiAJKnByZXYgPSB2bWE7CkBAIC01MTgsNyAmIzQzOzUxNyw3IEBAIHN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIH0KIAogc3RhdGljIGludCBhcHBseV92bWFfbG9ja19mbGFncyh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLAotCQkJCXZtX2ZsYWdzX3QgZmxhZ3MpCiYjNDM7CQkJCWNvbnN0IHZtYV9mbGFnc190ICpmbGFncykKIHsKIAl1bnNpZ25lZCBsb25nIG5zdGFydCwgZW5kLCB0bXA7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsICpwcmV2OwpAQCAtNTQzLDE4ICYjNDM7NTQyLDIwIEBAIHN0YXRpYyBpbnQgYXBwbHlfdm1hX2xvY2tfZmxhZ3ModW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbiwKIAl0bXAgPSB2bWEtJmd0O3ZtX3N0YXJ0OwogCWZvcl9lYWNoX3ZtYV9yYW5nZSh2bWksIHZtYSwgZW5kKSB7CiAJCWludCBlcnJvcjsKLQkJdm1fZmxhZ3NfdCBuZXdmbGFnczsKJiM0MzsJCXZtYV9mbGFnc190IG5ld2ZsYWdzOwogCiAJCWlmICh2bWEtJmd0O3ZtX3N0YXJ0ICE9IHRtcCkKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCW5ld2ZsYWdzID0gdm1hLSZndDt2bV9mbGFncyAmYW1wOyB+Vk1fTE9DS0VEX01BU0s7Ci0JCW5ld2ZsYWdzIHw9IGZsYWdzOwomIzQzOwkJbmV3ZmxhZ3MgPSB2bWEtJmd0O2ZsYWdzOwomIzQzOwkJdm1hX2ZsYWdzX2NsZWFyX21hc2soJmFtcDtuZXdmbGFncywgVk1BX0xPQ0tFRF9NQVNLKTsKJiM0MzsJCXZtYV9mbGFnc19zZXRfbWFzaygmYW1wO25ld2ZsYWdzLCAqZmxhZ3MpOwomIzQzOwogCQkvKiBIZXJlIHdlIGtub3cgdGhhdCAgdm1hLSZndDt2bV9zdGFydCAmbHQ7PSBuc3RhcnQgJmx0OyB2bWEtJmd0O3ZtX2VuZC4gKi8KIAkJdG1wID0gdm1hLSZndDt2bV9lbmQ7CiAJCWlmICh0bXAgJmd0OyBlbmQpCiAJCQl0bXAgPSBlbmQ7Ci0JCWVycm9yID0gbWxvY2tfZml4dXAoJmFtcDt2bWksIHZtYSwgJmFtcDtwcmV2LCBuc3RhcnQsIHRtcCwgbmV3ZmxhZ3MpOwomIzQzOwkJZXJyb3IgPSBtbG9ja19maXh1cCgmYW1wO3ZtaSwgdm1hLCAmYW1wO3ByZXYsIG5zdGFydCwgdG1wLCAmYW1wO25ld2ZsYWdzKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwogCQl0bXAgPSB2bWFfaXRlcl9lbmQoJmFtcDt2bWkpOwpAQCAtNTg5LDcgJiM0Mzs1OTAsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9tbV9tbG9ja2VkX3BhZ2VfbnIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCWVuZCA9IHN0YXJ0ICYjNDM7IGxlbjsKIAogCWZvcl9lYWNoX3ZtYV9yYW5nZSh2bWksIHZtYSwgZW5kKSB7Ci0JCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCkgewomIzQzOwkJaWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKSB7CiAJCQlpZiAoc3RhcnQgJmd0OyB2bWEtJmd0O3ZtX3N0YXJ0KQogCQkJCWNvdW50IC09IChzdGFydCAtIHZtYS0mZ3Q7dm1fc3RhcnQpOwogCQkJaWYgKGVuZCAmbHQ7IHZtYS0mZ3Q7dm1fZW5kKSB7CkBAIC02MTUsNyAmIzQzOzYxNiw4IEBAIHN0YXRpYyBpbnQgX19tbG9ja19wb3NpeF9lcnJvcl9yZXR1cm4obG9uZyByZXR2YWwpCiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIF9fbXVzdF9jaGVjayBpbnQgZG9fbWxvY2sodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbiwgdm1fZmxhZ3NfdCBmbGFncykKJiM0MztzdGF0aWMgX19tdXN0X2NoZWNrIGludCBkb19tbG9jayh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLAomIzQzOwkJCQkgdm1hX2ZsYWdzX3QgKmZsYWdzKQogewogCXVuc2lnbmVkIGxvbmcgbG9ja2VkOwogCXVuc2lnbmVkIGxvbmcgbG9ja19saW1pdDsKQEAgLTY2NCwyNCAmIzQzOzY2NiwyNyBAQCBzdGF0aWMgX19tdXN0X2NoZWNrIGludCBkb19tbG9jayh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLCB2bV9mbGFnc190IGZsYQogCiBTWVNDQUxMX0RFRklORTIobWxvY2ssIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbikKIHsKLQlyZXR1cm4gZG9fbWxvY2soc3RhcnQsIGxlbiwgVk1fTE9DS0VEKTsKJiM0MzsJdm1hX2ZsYWdzX3QgZmxhZ3MgPSBta192bWFfZmxhZ3MoVk1BX0xPQ0tFRF9CSVQpOwomIzQzOwomIzQzOwlyZXR1cm4gZG9fbWxvY2soc3RhcnQsIGxlbiwgJmFtcDtmbGFncyk7CiB9CiAKIFNZU0NBTExfREVGSU5FMyhtbG9jazIsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbiwgaW50LCBmbGFncykKIHsKLQl2bV9mbGFnc190IHZtX2ZsYWdzID0gVk1fTE9DS0VEOwomIzQzOwl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSBta192bWFfZmxhZ3MoVk1BX0xPQ0tFRF9CSVQpOwogCiAJaWYgKGZsYWdzICZhbXA7IH5NTE9DS19PTkZBVUxUKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChmbGFncyAmYW1wOyBNTE9DS19PTkZBVUxUKQotCQl2bV9mbGFncyB8PSBWTV9MT0NLT05GQVVMVDsKJiM0MzsJCXZtYV9mbGFnc19zZXQoJmFtcDt2bWFfZmxhZ3MsIFZNQV9MT0NLT05GQVVMVF9CSVQpOwogCi0JcmV0dXJuIGRvX21sb2NrKHN0YXJ0LCBsZW4sIHZtX2ZsYWdzKTsKJiM0MzsJcmV0dXJuIGRvX21sb2NrKHN0YXJ0LCBsZW4sICZhbXA7dm1hX2ZsYWdzKTsKIH0KIAogU1lTQ0FMTF9ERUZJTkUyKG11bmxvY2ssIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbikKIHsKJiM0MzsJdm1hX2ZsYWdzX3QgZmxhZ3MgPSBFTVBUWV9WTUFfRkxBR1M7CiAJaW50IHJldDsKIAogCXN0YXJ0ID0gdW50YWdnZWRfYWRkcihzdGFydCk7CkBAIC02OTEsNyAmIzQzOzY5Niw3IEBAIFNZU0NBTExfREVGSU5FMihtdW5sb2NrLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW4pCiAKIAlpZiAobW1hcF93cml0ZV9sb2NrX2tpbGxhYmxlKGN1cnJlbnQtJmd0O21tKSkKIAkJcmV0dXJuIC1FSU5UUjsKLQlyZXQgPSBhcHBseV92bWFfbG9ja19mbGFncyhzdGFydCwgbGVuLCAwKTsKJiM0MzsJcmV0ID0gYXBwbHlfdm1hX2xvY2tfZmxhZ3Moc3RhcnQsIGxlbiwgJmFtcDtmbGFncyk7CiAJbW1hcF93cml0ZV91bmxvY2soY3VycmVudC0mZ3Q7bW0pOwogCiAJcmV0dXJuIHJldDsKQEAgLTY5OSw0NiAmIzQzOzcwNCw0OCBAQCBTWVNDQUxMX0RFRklORTIobXVubG9jaywgdW5zaWduZWQgbG9uZywgc3RhcnQsIHNpemVfdCwgbGVuKQogCiAvKgogICogVGFrZSB0aGUgTUNMXyogZmxhZ3MgcGFzc2VkIGludG8gbWxvY2thbGwgKG9yIDAgaWYgY2FsbGVkIGZyb20gbXVubG9ja2FsbCkKLSAqIGFuZCB0cmFuc2xhdGUgaW50byB0aGUgYXBwcm9wcmlhdGUgbW9kaWZpY2F0aW9ucyB0byBtbS0mZ3Q7ZGVmX2ZsYWdzIGFuZC9vciB0aGUKLSAqIGZsYWdzIGZvciBhbGwgY3VycmVudCBWTUFzLgomIzQzOyAqIGFuZCB0cmFuc2xhdGUgaW50byB0aGUgYXBwcm9wcmlhdGUgbW9kaWZpY2F0aW9ucyB0byBtbS0mZ3Q7ZGVmX3ZtYV9mbGFncyBhbmQvb3IKJiM0MzsgKiB0aGUgZmxhZ3MgZm9yIGFsbCBjdXJyZW50IFZNQXMuCiAgKgogICogVGhlcmUgYXJlIGEgY291cGxlIG9mIHN1YnRsZXRpZXMgd2l0aCB0aGlzLiAgSWYgbWxvY2thbGwoKSBpcyBjYWxsZWQgbXVsdGlwbGUKICAqIHRpbWVzIHdpdGggZGlmZmVyZW50IGZsYWdzLCB0aGUgdmFsdWVzIGRvIG5vdCBuZWNlc3NhcmlseSBzdGFjay4gIElmIG1sb2NrYWxsCiAgKiBpcyBjYWxsZWQgb25jZSBpbmNsdWRpbmcgdGhlIE1DTF9GVVRVUkUgZmxhZyBhbmQgdGhlbiBhIHNlY29uZCB0aW1lIHdpdGhvdXQKLSAqIGl0LCBWTV9MT0NLRUQgYW5kIFZNX0xPQ0tPTkZBVUxUIHdpbGwgYmUgY2xlYXJlZCBmcm9tIG1tLSZndDtkZWZfZmxhZ3MuCiYjNDM7ICogaXQsIFZNQV9MT0NLRURfQklUIGFuZCBWTUFfTE9DS09ORkFVTFRfQklUIHdpbGwgYmUgY2xlYXJlZCBmcm9tCiYjNDM7ICogbW0tJmd0O2RlZl92bWFfZmxhZ3MuCiAgKi8KIHN0YXRpYyBpbnQgYXBwbHlfbWxvY2thbGxfZmxhZ3MoaW50IGZsYWdzKQogewogCVZNQV9JVEVSQVRPUih2bWksIGN1cnJlbnQtJmd0O21tLCAwKTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LSZndDttbTsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgKnByZXYgPSBOVUxMOwotCXZtX2ZsYWdzX3QgdG9fYWRkID0gMDsKJiM0MzsJdm1hX2ZsYWdzX3QgdG9fYWRkID0gRU1QVFlfVk1BX0ZMQUdTOwogCi0JY3VycmVudC0mZ3Q7bW0tJmd0O2RlZl9mbGFncyAmYW1wOz0gflZNX0xPQ0tFRF9NQVNLOwomIzQzOwl2bWFfZmxhZ3NfY2xlYXJfbWFzaygmYW1wO21tLSZndDtkZWZfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX01BU0spOwogCWlmIChmbGFncyAmYW1wOyBNQ0xfRlVUVVJFKSB7Ci0JCWN1cnJlbnQtJmd0O21tLSZndDtkZWZfZmxhZ3MgfD0gVk1fTE9DS0VEOwomIzQzOwkJdm1hX2ZsYWdzX3NldCgmYW1wO21tLSZndDtkZWZfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7CiAKIAkJaWYgKGZsYWdzICZhbXA7IE1DTF9PTkZBVUxUKQotCQkJY3VycmVudC0mZ3Q7bW0tJmd0O2RlZl9mbGFncyB8PSBWTV9MT0NLT05GQVVMVDsKJiM0MzsJCQl2bWFfZmxhZ3Nfc2V0KCZhbXA7bW0tJmd0O2RlZl92bWFfZmxhZ3MsIFZNQV9MT0NLT05GQVVMVF9CSVQpOwogCiAJCWlmICghKGZsYWdzICZhbXA7IE1DTF9DVVJSRU5UKSkKIAkJCWdvdG8gb3V0OwogCX0KIAogCWlmIChmbGFncyAmYW1wOyBNQ0xfQ1VSUkVOVCkgewotCQl0b19hZGQgfD0gVk1fTE9DS0VEOwomIzQzOwkJdm1hX2ZsYWdzX3NldCgmYW1wO3RvX2FkZCwgVk1BX0xPQ0tFRF9CSVQpOwogCQlpZiAoZmxhZ3MgJmFtcDsgTUNMX09ORkFVTFQpCi0JCQl0b19hZGQgfD0gVk1fTE9DS09ORkFVTFQ7CiYjNDM7CQkJdm1hX2ZsYWdzX3NldCgmYW1wO3RvX2FkZCwgVk1BX0xPQ0tPTkZBVUxUX0JJVCk7CiAJfQogCiAJZm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7CiAJCWludCBlcnJvcjsKLQkJdm1fZmxhZ3NfdCBuZXdmbGFnczsKJiM0MzsJCXZtYV9mbGFnc190IG5ld2ZsYWdzID0gdm1hLSZndDtmbGFnczsKIAotCQluZXdmbGFncyA9IHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgflZNX0xPQ0tFRF9NQVNLOwotCQluZXdmbGFncyB8PSB0b19hZGQ7CiYjNDM7CQl2bWFfZmxhZ3NfY2xlYXJfbWFzaygmYW1wO25ld2ZsYWdzLCBWTUFfTE9DS0VEX01BU0spOwomIzQzOwkJdm1hX2ZsYWdzX3NldF9tYXNrKCZhbXA7bmV3ZmxhZ3MsIHRvX2FkZCk7CiAKIAkJZXJyb3IgPSBtbG9ja19maXh1cCgmYW1wO3ZtaSwgdm1hLCAmYW1wO3ByZXYsIHZtYS0mZ3Q7dm1fc3RhcnQsIHZtYS0mZ3Q7dm1fZW5kLAotCQkJCSAgICBuZXdmbGFncyk7CiYjNDM7CQkJCSAgICAmYW1wO25ld2ZsYWdzKTsKIAkJLyogSWdub3JlIGVycm9ycywgYnV0IHByZXYgbmVlZHMgZml4aW5nIHVwLiAqLwogCQlpZiAoZXJyb3IpCiAJCQlwcmV2ID0gdm1hOwpkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IDMwOGE0M2VhYmQ4M2IxLi40YmYyNmIwZjFlNmUzNiAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tYXAuYwpAQCAtODAsMTMgJiM0Mzs4MCwxMyBAQCBjb3JlX3BhcmFtKGlnbm9yZV9ybGltaXRfZGF0YSwgaWdub3JlX3JsaW1pdF9kYXRhLCBib29sLCAwNjQ0KTsKIC8qIFVwZGF0ZSB2bWEtJmd0O3ZtX3BhZ2VfcHJvdCB0byByZWZsZWN0IHZtYS0mZ3Q7dm1fZmxhZ3MuICovCiB2b2lkIHZtYV9zZXRfcGFnZV9wcm90KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWEtJmd0O3ZtX2ZsYWdzOwomIzQzOwl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSB2bWEtJmd0O2ZsYWdzOwogCXBncHJvdF90IHZtX3BhZ2VfcHJvdDsKIAotCXZtX3BhZ2VfcHJvdCA9IHZtX3BncHJvdF9tb2RpZnkodm1hLSZndDt2bV9wYWdlX3Byb3QsIHZtX2ZsYWdzKTsKJiM0MzsJdm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1hLSZndDt2bV9wYWdlX3Byb3QsIHZtYV9mbGFncyk7CiAJaWYgKHZtYV93YW50c193cml0ZW5vdGlmeSh2bWEsIHZtX3BhZ2VfcHJvdCkpIHsKLQkJdm1fZmxhZ3MgJmFtcDs9IH5WTV9TSEFSRUQ7Ci0JCXZtX3BhZ2VfcHJvdCA9IHZtX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bV9mbGFncyk7CiYjNDM7CQl2bWFfZmxhZ3NfY2xlYXIoJmFtcDt2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKTsKJiM0MzsJCXZtX3BhZ2VfcHJvdCA9IHZtYV9wZ3Byb3RfbW9kaWZ5KHZtX3BhZ2VfcHJvdCwgdm1hX2ZsYWdzKTsKIAl9CiAJLyogcmVtb3ZlX3Byb3RlY3Rpb25fcHRlcyByZWFkcyB2bWEtJmd0O3ZtX3BhZ2VfcHJvdCB3aXRob3V0IG1tYXBfbG9jayAqLwogCVdSSVRFX09OQ0Uodm1hLSZndDt2bV9wYWdlX3Byb3QsIHZtX3BhZ2VfcHJvdCk7CkBAIC0xMDIsMTUgJiM0MzsxMDIsMTYgQEAgdm9pZCB2bWFfc2V0X3BhZ2VfcHJvdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKICAqLwogc3RhdGljIGludCBjaGVja19icmtfbGltaXRzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCiB7CiYjNDM7CWNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0mZ3Q7bW07CiYjNDM7CWNvbnN0IGJvb2wgaXNfZGVmX2xvY2tlZCA9CiYjNDM7CQl2bWFfZmxhZ3NfdGVzdCgmYW1wO21tLSZndDtkZWZfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7CiAJdW5zaWduZWQgbG9uZyBtYXBwZWRfYWRkcjsKIAogCW1hcHBlZF9hZGRyID0gZ2V0X3VubWFwcGVkX2FyZWEoTlVMTCwgYWRkciwgbGVuLCAwLCBNQVBfRklYRUQpOwogCWlmIChJU19FUlJfVkFMVUUobWFwcGVkX2FkZHIpKQogCQlyZXR1cm4gbWFwcGVkX2FkZHI7CiAKLQlyZXR1cm4gbWxvY2tfZnV0dXJlX29rKGN1cnJlbnQtJmd0O21tLAotCQkJICAgICAgY3VycmVudC0mZ3Q7bW0tJmd0O2RlZl9mbGFncyAmYW1wOyBWTV9MT0NLRUQsIGxlbikKLQkJPyAwIDogLUVBR0FJTjsKJiM0MzsJcmV0dXJuIG1sb2NrX2Z1dHVyZV9vayhtbSwgaXNfZGVmX2xvY2tlZCwgbGVuKSA/IDAgOiAtRUFHQUlOOwogfQogCiBTWVNDQUxMX0RFRklORTEoYnJrLCB1bnNpZ25lZCBsb25nLCBicmspCkBAIC0xOTcsNyAmIzQzOzE5OCw3IEBAIFNZU0NBTExfREVGSU5FMShicmssIHVuc2lnbmVkIGxvbmcsIGJyaykKIAkJZ290byBvdXQ7CiAKIAltbS0mZ3Q7YnJrID0gYnJrOwotCWlmIChtbS0mZ3Q7ZGVmX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCkKJiM0MzsJaWYgKHZtYV9mbGFnc190ZXN0KCZhbXA7bW0tJmd0O2RlZl92bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSkKIAkJcG9wdWxhdGUgPSB0cnVlOwogCiBzdWNjZXNzOgpAQCAtMjgwLDcgJiM0MzsyODEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9tbWFwX29rKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogICogZG9fbW1hcCgpIC0gUGVyZm9ybSBhIHVzZXJsYW5kIG1lbW9yeSBtYXBwaW5nIGludG8gdGhlIGN1cnJlbnQgcHJvY2VzcwogICogYWRkcmVzcyBzcGFjZSBvZiBsZW5ndGggQGxlbiB3aXRoIHByb3RlY3Rpb24gYml0cyBAcHJvdCwgbW1hcCBmbGFncyBAZmxhZ3MKICAqIChmcm9tIHdoaWNoIFZNQSBmbGFncyB3aWxsIGJlIGluZmVycmVkKSwgYW5kIGFueSBhZGRpdGlvbmFsIFZNQSBmbGFncyB0bwotICogYXBwbHkgQHZtX2ZsYWdzLiBJZiB0aGlzIGlzIGEgZmlsZS1iYWNrZWQgbWFwcGluZyB0aGVuIHRoZSBmaWxlIGlzIHNwZWNpZmllZAomIzQzOyAqIGFwcGx5IEB2bWFfZmxhZ3MuIElmIHRoaXMgaXMgYSBmaWxlLWJhY2tlZCBtYXBwaW5nIHRoZW4gdGhlIGZpbGUgaXMgc3BlY2lmaWVkCiAgKiBpbiBAZmlsZSBhbmQgcGFnZSBvZmZzZXQgaW50byB0aGUgZmlsZSB2aWEgQHBnb2ZmLgogICoKICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcGVyZm9ybSBzZWN1cml0eSBjaGVja3Mgb24gdGhlIGZpbGUgYW5kIGFzc3VtZXMsIGlmCkBAIC0zMjAsNyAmIzQzOzMyMSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX21tYXBfb2soc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAgKiAoMikgZm9yIGRldGFpbHMuCiAgKiBAZmxhZ3M6IEZsYWdzIHNwZWNpZnlpbmcgaG93IHRoZSBtYXBwaW5nIHNob3VsZCBiZSBwZXJmb3JtZWQsIHNlZSBtbWFwICgyKQogICogZm9yIGRldGFpbHMuCi0gKiBAdm1fZmxhZ3M6IFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgc2V0IGJ5IGRlZmF1bHQsIG9yIDAgb3RoZXJ3aXNlLgomIzQzOyAqIEB2bWFfZmxhZ3M6IFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgc2V0IGJ5IGRlZmF1bHQsIG9yIEVNUFRZX1ZNQV9GTEFHUwomIzQzOyAqIG90aGVyd2lzZS4KICAqIEBwZ29mZjogUGFnZSBvZmZzZXQgaW50byB0aGUgQGZpbGUgaWYgZmlsZS1iYWNrZWQsIHNob3VsZCBiZSAwIG90aGVyd2lzZS4KICAqIEBwb3B1bGF0ZTogQSBwb2ludGVyIHRvIGEgdmFsdWUgd2hpY2ggd2lsbCBiZSBzZXQgdG8gMCBpZiBubyBwb3B1bGF0aW9uIG9mCiAgKiB0aGUgcmFuZ2UgaXMgcmVxdWlyZWQsIG9yIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcG9wdWxhdGUgaWYgaXQgaXMuIE11c3QgYmUKQEAgLTMzNSw3ICYjNDM7MzM3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbGVfbW1hcF9vayhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlub2RlICppbm9kZSwKICAqLwogdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQl1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwcm90LAotCQkJdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncywKJiM0MzsJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MsCiAJCQl1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nICpwb3B1bGF0ZSwKIAkJCXN0cnVjdCBsaXN0X2hlYWQgKnVmKQogewpAQCAtMzk5LDEzICYjNDM7NDAxLDE4IEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCSAqIHRvLiB3ZSBhc3N1bWUgYWNjZXNzIHBlcm1pc3Npb25zIGhhdmUgYmVlbiBoYW5kbGVkIGJ5IHRoZSBvcGVuCiAJICogb2YgdGhlIG1lbW9yeSBvYmplY3QsIHNvIHdlIGRvbiYjMzk7dCBkbyBhbnkgaGVyZS4KIAkgKi8KLQl2bV9mbGFncyB8PSBjYWxjX3ZtX3Byb3RfYml0cyhwcm90LCBwa2V5KSB8IGNhbGNfdm1fZmxhZ19iaXRzKGZpbGUsIGZsYWdzKSB8Ci0JCQltbS0mZ3Q7ZGVmX2ZsYWdzIHwgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQzsKJiM0MzsJdm1hX2ZsYWdzX3NldF9tYXNrKCZhbXA7dm1hX2ZsYWdzLAomIzQzOwkJCSAgIGxlZ2FjeV90b192bWFfZmxhZ3MoY2FsY192bV9wcm90X2JpdHMocHJvdCwgcGtleSkpKTsKJiM0MzsJdm1hX2ZsYWdzX3NldF9tYXNrKCZhbXA7dm1hX2ZsYWdzLAomIzQzOwkJCSAgIGxlZ2FjeV90b192bWFfZmxhZ3MoY2FsY192bV9mbGFnX2JpdHMoZmlsZSwgZmxhZ3MpKSk7CiYjNDM7CXZtYV9mbGFnc19zZXRfbWFzaygmYW1wO3ZtYV9mbGFncywgbW0tJmd0O2RlZl92bWFfZmxhZ3MpOwomIzQzOwl2bWFfZmxhZ3Nfc2V0KCZhbXA7dm1hX2ZsYWdzLCBWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQsCiYjNDM7CQkgICAgICBWTUFfTUFZRVhFQ19CSVQpOwogCiAJLyogT2J0YWluIHRoZSBhZGRyZXNzIHRvIG1hcCB0by4gd2UgdmVyaWZ5IChvciBzZWxlY3QpIGl0IGFuZCBlbnN1cmUKIAkgKiB0aGF0IGl0IHJlcHJlc2VudHMgYSB2YWxpZCBzZWN0aW9uIG9mIHRoZSBhZGRyZXNzIHNwYWNlLgogCSAqLwotCWFkZHIgPSBfX2dldF91bm1hcHBlZF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLCB2bV9mbGFncyk7CiYjNDM7CWFkZHIgPSBfX2dldF91bm1hcHBlZF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLCB2bWFfZmxhZ3MpOwogCWlmIChJU19FUlJfVkFMVUUoYWRkcikpCiAJCXJldHVybiBhZGRyOwogCkBAIC00MTgsNyAmIzQzOzQyNSw3IEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlpZiAoIWNhbl9kb19tbG9jaygpKQogCQkJcmV0dXJuIC1FUEVSTTsKIAotCWlmICghbWxvY2tfZnV0dXJlX29rKG1tLCB2bV9mbGFncyAmYW1wOyBWTV9MT0NLRUQsIGxlbikpCiYjNDM7CWlmICghbWxvY2tfZnV0dXJlX29rKG1tLCB2bWFfZmxhZ3NfdGVzdCgmYW1wO3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpLCBsZW4pKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCWlmIChmaWxlKSB7CkBAIC00NjEsMjIgJiM0Mzs0NjgsMjMgQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQlpZiAoSVNfQVBQRU5EKGlub2RlKSAmYW1wOyZhbXA7IChmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfV1JJVEUpKQogCQkJCXJldHVybiAtRUFDQ0VTOwogCi0JCQl2bV9mbGFncyB8PSBWTV9TSEFSRUQgfCBWTV9NQVlTSEFSRTsKJiM0MzsJCQl2bWFfZmxhZ3Nfc2V0KCZhbXA7dm1hX2ZsYWdzLCBWTUFfU0hBUkVEX0JJVCwgVk1BX01BWVNIQVJFX0JJVCk7CiAJCQlpZiAoIShmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfV1JJVEUpKQotCQkJCXZtX2ZsYWdzICZhbXA7PSB+KFZNX01BWVdSSVRFIHwgVk1fU0hBUkVEKTsKJiM0MzsJCQkJdm1hX2ZsYWdzX2NsZWFyKCZhbXA7dm1hX2ZsYWdzLCBWTUFfTUFZV1JJVEVfQklULAomIzQzOwkJCQkJCVZNQV9TSEFSRURfQklUKTsKIAkJCWZhbGx0aHJvdWdoOwogCQljYXNlIE1BUF9QUklWQVRFOgogCQkJaWYgKCEoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX1JFQUQpKQogCQkJCXJldHVybiAtRUFDQ0VTOwogCQkJaWYgKHBhdGhfbm9leGVjKCZhbXA7ZmlsZS0mZ3Q7Zl9wYXRoKSkgewotCQkJCWlmICh2bV9mbGFncyAmYW1wOyBWTV9FWEVDKQomIzQzOwkJCQlpZiAodm1hX2ZsYWdzX3Rlc3QoJmFtcDt2bWFfZmxhZ3MsIFZNQV9FWEVDX0JJVCkpCiAJCQkJCXJldHVybiAtRVBFUk07Ci0JCQkJdm1fZmxhZ3MgJmFtcDs9IH5WTV9NQVlFWEVDOwomIzQzOwkJCQl2bWFfZmxhZ3NfY2xlYXIoJmFtcDt2bWFfZmxhZ3MsIFZNQV9NQVlFWEVDX0JJVCk7CiAJCQl9CiAKIAkJCWlmICghY2FuX21tYXBfZmlsZShmaWxlKSkKIAkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCWlmICh2bV9mbGFncyAmYW1wOyAoVk1fR1JPV1NET1dOfFZNX0dST1dTVVApKQomIzQzOwkJCWlmICh2bWFfZmxhZ3NfY2FuX2dyb3coJmFtcDt2bWFfZmxhZ3MpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJYnJlYWs7CiAKQEAgLTQ4OCwyMyAmIzQzOzQ5NiwyNyBAQCB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJICogQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSB2aW9sYXRpbmcgYW55IHNlYWxzIGFuZCB1cGRhdGUgVk1BCiAJCSAqIGZsYWdzIGlmIG5lY2Vzc2FyeSB0byBhdm9pZCBmdXR1cmUgc2VhbCB2aW9sYXRpb25zLgogCQkgKi8KLQkJZXJyID0gbWVtZmRfY2hlY2tfc2VhbHNfbW1hcChmaWxlLCAmYW1wO3ZtX2ZsYWdzKTsKJiM0MzsJCWVyciA9IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoZmlsZSwgJmFtcDt2bWFfZmxhZ3MpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuICh1bnNpZ25lZCBsb25nKWVycjsKIAl9IGVsc2UgewogCQlzd2l0Y2ggKGZsYWdzICZhbXA7IE1BUF9UWVBFKSB7CiAJCWNhc2UgTUFQX1NIQVJFRDoKLQkJCWlmICh2bV9mbGFncyAmYW1wOyAoVk1fR1JPV1NET1dOfFZNX0dST1dTVVApKQomIzQzOwkJCWlmICh2bWFfZmxhZ3NfY2FuX2dyb3coJmFtcDt2bWFfZmxhZ3MpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJLyoKIAkJCSAqIElnbm9yZSBwZ29mZi4KIAkJCSAqLwogCQkJcGdvZmYgPSAwOwotCQkJdm1fZmxhZ3MgfD0gVk1fU0hBUkVEIHwgVk1fTUFZU0hBUkU7CiYjNDM7CQkJdm1hX2ZsYWdzX3NldCgmYW1wO3ZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQsIFZNQV9NQVlTSEFSRV9CSVQpOwogCQkJYnJlYWs7Ci0JCWNhc2UgTUFQX0RST1BQQUJMRToKLQkJCWlmIChWTV9EUk9QUEFCTEUgPT0gVk1fTk9ORSkKJiM0MzsJCWNhc2UgTUFQX0RST1BQQUJMRTogewomIzQzOwkJCXZtYV9mbGFnc190IGRyb3BwYWJsZSA9IFZNQV9EUk9QUEFCTEU7CiYjNDM7CiYjNDM7CQkJaWYgKHZtYV9mbGFnc19lbXB0eSgmYW1wO2Ryb3BwYWJsZSkpCiAJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJCXZtYV9mbGFnc19zZXRfbWFzaygmYW1wO3ZtYV9mbGFncywgZHJvcHBhYmxlKTsKJiM0MzsKIAkJCS8qCiAJCQkgKiBBIGxvY2tlZCBvciBzdGFjayBhcmVhIG1ha2VzIG5vIHNlbnNlIHRvIGJlIGRyb3BwYWJsZS4KIAkJCSAqCkBAIC01MTUsMjMgJiM0Mzs1MjcsMjQgQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgKi8KIAkJCWlmIChmbGFncyAmYW1wOyAoTUFQX0xPQ0tFRCB8IE1BUF9IVUdFVExCKSkKIAkJCSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZiAodm1fZmxhZ3MgJmFtcDsgKFZNX0dST1dTRE9XTiB8IFZNX0dST1dTVVApKQomIzQzOwkJCWlmICh2bWFfZmxhZ3NfY2FuX2dyb3coJmFtcDt2bWFfZmxhZ3MpKQogCQkJICAgICAgICByZXR1cm4gLUVJTlZBTDsKIAotCQkJdm1fZmxhZ3MgfD0gVk1fRFJPUFBBQkxFOwotCiAJCQkvKgogCQkJICogSWYgdGhlIHBhZ2VzIGNhbiBiZSBkcm9wcGVkLCB0aGVuIGl0IGRvZXNuJiMzOTt0IG1ha2UKIAkJCSAqIHNlbnNlIHRvIHJlc2VydmUgdGhlbS4KIAkJCSAqLwotCQkJdm1fZmxhZ3MgfD0gVk1fTk9SRVNFUlZFOwomIzQzOwkJCXZtYV9mbGFnc19zZXQoJmFtcDt2bWFfZmxhZ3MsIFZNQV9OT1JFU0VSVkVfQklUKTsKIAogCQkJLyoKIAkJCSAqIExpa2V3aXNlLCB0aGV5JiMzOTtyZSB2b2xhdGlsZSBlbm91Z2ggdGhhdCB0aGV5CiAJCQkgKiBzaG91bGRuJiMzOTt0IHN1cnZpdmUgZm9ya3Mgb3IgY29yZWR1bXBzLgogCQkJICovCi0JCQl2bV9mbGFncyB8PSBWTV9XSVBFT05GT1JLIHwgVk1fRE9OVERVTVA7CiYjNDM7CQkJdm1hX2ZsYWdzX3NldCgmYW1wO3ZtYV9mbGFncywgVk1BX1dJUEVPTkZPUktfQklULAomIzQzOwkJCQkgICAgICBWTUFfRE9OVERVTVBfQklUKTsKJiM0MzsKIAkJCWZhbGx0aHJvdWdoOwomIzQzOwkJfQogCQljYXNlIE1BUF9QUklWQVRFOgogCQkJLyoKIAkJCSAqIFNldCBwZ29mZiBhY2NvcmRpbmcgdG8gYWRkciBmb3IgYW5vbl92bWEuCkBAIC01NDQsMjIgJiM0Mzs1NTcsMjIgQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJfQogCiAJLyoKLQkgKiBTZXQgJiMzOTtWTV9OT1JFU0VSVkUmIzM5OyBpZiB3ZSBzaG91bGQgbm90IGFjY291bnQgZm9yIHRoZQotCSAqIG1lbW9yeSB1c2Ugb2YgdGhpcyBtYXBwaW5nLgomIzQzOwkgKiBTZXQgVk1BX05PUkVTRVJWRV9CSVQgaWYgd2Ugc2hvdWxkIG5vdCBhY2NvdW50IGZvciB0aGUgbWVtb3J5IHVzZQomIzQzOwkgKiBvZiB0aGlzIG1hcHBpbmcuCiAJICovCiAJaWYgKGZsYWdzICZhbXA7IE1BUF9OT1JFU0VSVkUpIHsKIAkJLyogV2UgaG9ub3IgTUFQX05PUkVTRVJWRSBpZiBhbGxvd2VkIHRvIG92ZXJjb21taXQgKi8KIAkJaWYgKHN5c2N0bF9vdmVyY29tbWl0X21lbW9yeSAhPSBPVkVSQ09NTUlUX05FVkVSKQotCQkJdm1fZmxhZ3MgfD0gVk1fTk9SRVNFUlZFOwomIzQzOwkJCXZtYV9mbGFnc19zZXQoJmFtcDt2bWFfZmxhZ3MsIFZNQV9OT1JFU0VSVkVfQklUKTsKIAogCQkvKiBodWdldGxiIGFwcGxpZXMgc3RyaWN0IG92ZXJjb21taXQgdW5sZXNzIE1BUF9OT1JFU0VSVkUgKi8KIAkJaWYgKGZpbGUgJmFtcDsmYW1wOyBpc19maWxlX2h1Z2VwYWdlcyhmaWxlKSkKLQkJCXZtX2ZsYWdzIHw9IFZNX05PUkVTRVJWRTsKJiM0MzsJCQl2bWFfZmxhZ3Nfc2V0KCZhbXA7dm1hX2ZsYWdzLCBWTUFfTk9SRVNFUlZFX0JJVCk7CiAJfQogCi0JYWRkciA9IG1tYXBfcmVnaW9uKGZpbGUsIGFkZHIsIGxlbiwgdm1fZmxhZ3MsIHBnb2ZmLCB1Zik7CiYjNDM7CWFkZHIgPSBtbWFwX3JlZ2lvbihmaWxlLCBhZGRyLCBsZW4sIHZtYV9mbGFncywgcGdvZmYsIHVmKTsKIAlpZiAoIUlTX0VSUl9WQUxVRShhZGRyKSAmYW1wOyZhbXA7Ci0JICAgICgodm1fZmxhZ3MgJmFtcDsgVk1fTE9DS0VEKSB8fAomIzQzOwkgICAgKHZtYV9mbGFnc190ZXN0KCZhbXA7dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkgfHwKIAkgICAgIChmbGFncyAmYW1wOyAoTUFQX1BPUFVMQVRFIHwgTUFQX05PTkJMT0NLKSkgPT0gTUFQX1BPUFVMQVRFKSkKIAkJKnBvcHVsYXRlID0gbGVuOwogCXJldHVybiBhZGRyOwpAQCAtNjQ1LDkgJiM0Mzs2NTgsOSBAQCBTWVNDQUxMX0RFRklORTEob2xkX21tYXAsIHN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgX191c2VyICosIGFyZykKICAqIERldGVybWluZSBpZiB0aGUgYWxsb2NhdGlvbiBuZWVkcyB0byBlbnN1cmUgdGhhdCB0aGVyZSBpcyBubwogICogZXhpc3RpbmcgbWFwcGluZyB3aXRoaW4gaXQmIzM5O3MgZ3VhcmQgZ2FwcywgZm9yIHVzZSBhcyBzdGFydF9nYXAuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1fZmxhZ3NfdCB2bV9mbGFncykKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtYV9mbGFnc190IHZtYV9mbGFncykKIHsKLQlpZiAodm1fZmxhZ3MgJmFtcDsgVk1fU0hBRE9XX1NUQUNLKQomIzQzOwlpZiAodm1hX2ZsYWdzX3Rlc3Rfc2luZ2xlX21hc2soJmFtcDt2bWFfZmxhZ3MsIFZNQV9TSEFET1dfU1RBQ0spKQogCQlyZXR1cm4gUEFHRV9TSVpFOwogCiAJcmV0dXJuIDA7CkBAIC02ODksNyAmIzQzOzcwMiw3IEBAIHVuc2lnbmVkIGxvbmcgdm1fdW5tYXBwZWRfYXJlYShzdHJ1Y3Qgdm1fdW5tYXBwZWRfYXJlYV9pbmZvICppbmZvKQogdW5zaWduZWQgbG9uZwogZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwKLQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncykKJiM0MzsJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncykKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtJmd0O21tOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCAqcHJldjsKQEAgLTcxNCw3ICYjNDM7NzI3LDcgQEAgZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCWluZm8ubGVuZ3RoID0gbGVuOwogCWluZm8ubG93X2xpbWl0ID0gbW0tJmd0O21tYXBfYmFzZTsKIAlpbmZvLmhpZ2hfbGltaXQgPSBtbWFwX2VuZDsKLQlpbmZvLnN0YXJ0X2dhcCA9IHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bV9mbGFncyk7CiYjNDM7CWluZm8uc3RhcnRfZ2FwID0gc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtYV9mbGFncyk7CiAJaWYgKGZpbHAgJmFtcDsmYW1wOyBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSkKIAkJaW5mby5hbGlnbl9tYXNrID0gaHVnZV9wYWdlX21hc2tfYWxpZ24oZmlscCk7CiAJcmV0dXJuIHZtX3VubWFwcGVkX2FyZWEoJmFtcDtpbmZvKTsKQEAgLTcyNyw3ICYjNDM7NzQwLDcgQEAgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncykKIHsKIAlyZXR1cm4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywKLQkJCQkJIHZtX2ZsYWdzKTsKJiM0MzsJCQkJCSBsZWdhY3lfdG9fdm1hX2ZsYWdzKHZtX2ZsYWdzKSk7CiB9CiAjZW5kaWYKIApAQCAtNzM4LDcgJiM0Mzs3NTEsNyBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiB1bnNpZ25lZCBsb25nCiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLAotCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncykKJiM0MzsJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsICpwcmV2OwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0mZ3Q7bW07CkBAIC03NjYsNyAmIzQzOzc3OSw3IEBAIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCWluZm8ubGVuZ3RoID0gbGVuOwogCWluZm8ubG93X2xpbWl0ID0gUEFHRV9TSVpFOwogCWluZm8uaGlnaF9saW1pdCA9IGFyY2hfZ2V0X21tYXBfYmFzZShhZGRyLCBtbS0mZ3Q7bW1hcF9iYXNlKTsKLQlpbmZvLnN0YXJ0X2dhcCA9IHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bV9mbGFncyk7CiYjNDM7CWluZm8uc3RhcnRfZ2FwID0gc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtYV9mbGFncyk7CiAJaWYgKGZpbHAgJmFtcDsmYW1wOyBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSkKIAkJaW5mby5hbGlnbl9tYXNrID0gaHVnZV9wYWdlX21hc2tfYWxpZ24oZmlscCk7CiAJYWRkciA9IHZtX3VubWFwcGVkX2FyZWEoJmFtcDtpbmZvKTsKQEAgLTc5NSwyMyAmIzQzOzgwOCwyNCBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKQogewogCXJldHVybiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsCi0JCQkJCQkgdm1fZmxhZ3MpOwomIzQzOwkJCQkJCSBsZWdhY3lfdG9fdm1hX2ZsYWdzKHZtX2ZsYWdzKSk7CiB9CiAjZW5kaWYKIAotdW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKQomIzQzO3Vuc2lnbmVkIGxvbmcgbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLAomIzQzOwkJdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKQogewogCWlmIChtbV9mbGFnc190ZXN0KE1NRl9UT1BET1dOLCBjdXJyZW50LSZndDttbSkpCiAJCXJldHVybiBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oZmlscCwgYWRkciwgbGVuLCBwZ29mZiwKLQkJCQkJCSAgICAgIGZsYWdzLCB2bV9mbGFncyk7Ci0JcmV0dXJuIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTsKJiM0MzsJCQkJZmxhZ3MsIHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSk7CiYjNDM7CXJldHVybiBhcmNoX2dldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLAomIzQzOwkJCXZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSk7CiB9CiAKIHVuc2lnbmVkIGxvbmcKIF9fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCi0JCXVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyAoKmdldF9hcmVhKShzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLAogCQkJCSAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKQEAgLTg0NiwxMSAmIzQzOzg2MCwxMSBAQCBfX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQkgICAmYW1wOyZhbXA7ICFhZGRyIC8qIG5vIGhpbnQgKi8KIAkJICAgJmFtcDsmYW1wOyBJU19BTElHTkVEKGxlbiwgUE1EX1NJWkUpKSB7CiAJCS8qIEVuc3VyZXMgdGhhdCBsYXJnZXIgYW5vbnltb3VzIG1hcHBpbmdzIGFyZSBUSFAgYWxpZ25lZC4gKi8KLQkJYWRkciA9IHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIsIGxlbiwKLQkJCQkJCSAgICAgcGdvZmYsIGZsYWdzLCB2bV9mbGFncyk7CiYjNDM7CQlhZGRyID0gdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbGUsIGFkZHIsIGxlbiwKJiM0MzsJCQkJCQkgICAgICBwZ29mZiwgZmxhZ3MsIHZtYV9mbGFncyk7CiAJfSBlbHNlIHsKLQkJYWRkciA9IG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkciwgbGVuLAotCQkJCQkJICAgIHBnb2ZmLCBmbGFncywgdm1fZmxhZ3MpOwomIzQzOwkJYWRkciA9IG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbGUsIGFkZHIsIGxlbiwKJiM0MzsJCQkJCQkgICAgIHBnb2ZmLCBmbGFncywgdm1hX2ZsYWdzKTsKIAl9CiAJaWYgKElTX0VSUl9WQUxVRShhZGRyKSkKIAkJcmV0dXJuIGFkZHI7CkBAIC04NjgsNyAmIzQzOzg4Miw4IEBAIHVuc2lnbmVkIGxvbmcKIG1tX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQkgICAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0JcmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIDApOwomIzQzOwlyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsCiYjNDM7CQkJCQkgICAgIEVNUFRZX1ZNQV9GTEFHUyk7CiB9CiBFWFBPUlRfU1lNQk9MKG1tX2dldF91bm1hcHBlZF9hcmVhKTsKIApAQCAtOTcwLDcgJiM0Mzs5ODUsNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfZXh0ZW5kX3ZtYV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbgogCQlyZXR1cm4gTlVMTDsKIAlpZiAoZXhwYW5kX3N0YWNrX2xvY2tlZChwcmV2LCBhZGRyKSkKIAkJcmV0dXJuIE5VTEw7Ci0JaWYgKHByZXYtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCkKJiM0MzsJaWYgKHZtYV90ZXN0KHByZXYsIFZNQV9MT0NLRURfQklUKSkKIAkJcG9wdWxhdGVfdm1hX3BhZ2VfcmFuZ2UocHJldiwgYWRkciwgcHJldi0mZ3Q7dm1fZW5kLCBOVUxMKTsKIAlyZXR1cm4gcHJldjsKIH0KQEAgLTk5NCw3ICYjNDM7MTAwOSw3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9leHRlbmRfdm1hX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uCiAJc3RhcnQgPSB2bWEtJmd0O3ZtX3N0YXJ0OwogCWlmIChleHBhbmRfc3RhY2tfbG9ja2VkKHZtYSwgYWRkcikpCiAJCXJldHVybiBOVUxMOwotCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCkKJiM0MzsJaWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKQogCQlwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSh2bWEsIGFkZHIsIHN0YXJ0LCBOVUxMKTsKIAlyZXR1cm4gdm1hOwogfQpAQCAtMTExOSwxOCAmIzQzOzExMzQsMTggQEAgU1lTQ0FMTF9ERUZJTkU1KHJlbWFwX2ZpbGVfcGFnZXMsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBzaXplLAogCSAqLwogCXZtYSA9IHZtYV9sb29rdXAobW0sIHN0YXJ0KTsKIAotCWlmICghdm1hIHx8ICEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9TSEFSRUQpKSB7CiYjNDM7CWlmICghdm1hIHx8ICF2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKSkgewogCQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcHJvdCB8PSB2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1JFQUQgPyBQUk9UX1JFQUQgOiAwOwotCXByb3QgfD0gdm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9XUklURSA/IFBST1RfV1JJVEUgOiAwOwotCXByb3QgfD0gdm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9FWEVDID8gUFJPVF9FWEVDIDogMDsKJiM0MzsJcHJvdCB8PSB2bWFfdGVzdCh2bWEsIFZNQV9SRUFEX0JJVCkgPyBQUk9UX1JFQUQgOiAwOwomIzQzOwlwcm90IHw9IHZtYV90ZXN0KHZtYSwgVk1BX1dSSVRFX0JJVCkgPyBQUk9UX1dSSVRFIDogMDsKJiM0MzsJcHJvdCB8PSB2bWFfdGVzdCh2bWEsIFZNQV9FWEVDX0JJVCkgPyBQUk9UX0VYRUMgOiAwOwogCiAJZmxhZ3MgJmFtcDs9IE1BUF9OT05CTE9DSzsKIAlmbGFncyB8PSBNQVBfU0hBUkVEIHwgTUFQX0ZJWEVEIHwgTUFQX1BPUFVMQVRFOwotCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCkKJiM0MzsJaWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKQogCQlmbGFncyB8PSBNQVBfTE9DS0VEOwogCiAJLyogU2F2ZSB2bV9mbGFncyB1c2VkIHRvIGNhbGN1bGF0ZSBwcm90IGFuZCBmbGFncywgYW5kIHJlY2hlY2sgbGF0ZXIuICovCkBAIC0xMTkxLDcgJiM0MzsxMjA2LDcgQEAgU1lTQ0FMTF9ERUZJTkU1KHJlbWFwX2ZpbGVfcGFnZXMsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBzaXplLAogCX0KIAogCXJldCA9IGRvX21tYXAodm1hLSZndDt2bV9maWxlLCBzdGFydCwgc2l6ZSwKLQkJCXByb3QsIGZsYWdzLCAwLCBwZ29mZiwgJmFtcDtwb3B1bGF0ZSwgTlVMTCk7CiYjNDM7CQkJcHJvdCwgZmxhZ3MsIEVNUFRZX1ZNQV9GTEFHUywgcGdvZmYsICZhbXA7cG9wdWxhdGUsIE5VTEwpOwogb3V0OgogCW1tYXBfd3JpdGVfdW5sb2NrKG1tKTsKIAlmcHV0KGZpbGUpOwpAQCAtMTIzMyw3ICYjNDM7MTI0OCw3IEBAIGludCB2bV9icmtfZmxhZ3ModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHJlcXVlc3QsIGJvb2wgaXNfZXhlYykKIAogCXZtYSA9IHZtYV9wcmV2KCZhbXA7dm1pKTsKIAlyZXQgPSBkb19icmtfZmxhZ3MoJmFtcDt2bWksIHZtYSwgYWRkciwgbGVuLCB2bWFfZmxhZ3MpOwotCXBvcHVsYXRlID0gKChtbS0mZ3Q7ZGVmX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCkgIT0gMCk7CiYjNDM7CXBvcHVsYXRlID0gdm1hX2ZsYWdzX3Rlc3QoJmFtcDttbS0mZ3Q7ZGVmX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpOwogCW1tYXBfd3JpdGVfdW5sb2NrKG1tKTsKIAl1c2VyZmF1bHRmZF91bm1hcF9jb21wbGV0ZShtbSwgJmFtcDt1Zik7CiAJaWYgKHBvcHVsYXRlICZhbXA7JmFtcDsgIXJldCkKQEAgLTEyNTYsNyAmIzQzOzEyNzEsNyBAQCB1bnNpZ25lZCBsb25nIHRlYXJfZG93bl92bWFzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksCiAJbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTsKIAl2bWFfaXRlcl9zZXQodm1pLCB2bWEtJmd0O3ZtX2VuZCk7CiAJZG8gewotCQlpZiAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9BQ0NPVU5UKQomIzQzOwkJaWYgKHZtYV90ZXN0KHZtYSwgVk1BX0FDQ09VTlRfQklUKSkKIAkJCW5yX2FjY291bnRlZCAmIzQzOz0gdm1hX3BhZ2VzKHZtYSk7CiAJCXZtYV9tYXJrX2RldGFjaGVkKHZtYSk7CiAJCXJlbW92ZV92bWEodm1hKTsKQEAgLTE0MDUsNyAmIzQzOzE0MjAsNyBAQCBzdGF0aWMgaW50IHNwZWNpYWxfbWFwcGluZ19zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCS8qCiAJICogRm9yYmlkIHNwbGl0dGluZyBzcGVjaWFsIG1hcHBpbmdzIC0ga2VybmVsIGhhcyBleHBlY3RhdGlvbnMgb3ZlcgotCSAqIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gbWFwcGluZy4gVG9nZXRoZXIgd2l0aCBWTV9ET05URVhQQU5ECiYjNDM7CSAqIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gbWFwcGluZy4gVG9nZXRoZXIgd2l0aCBWTUFfRE9OVEVYUEFORF9CSVQKIAkgKiB0aGUgc2l6ZSBvZiB2bWEgc2hvdWxkIHN0YXkgdGhlIHNhbWUgb3ZlciB0aGUgc3BlY2lhbCBtYXBwaW5nJiMzOTtzCiAJICogbGlmZXRpbWUuCiAJICovCkBAIC0xNjc3LDcgJiM0MzsxNjkyLDcgQEAgYm9vbCBtbWFwX3JlYWRfbG9ja19tYXliZV9leHBhbmQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCXJldHVybiB0cnVlOwogCX0KIAotCWlmICghKG5ld192bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0dST1dTRE9XTikpCiYjNDM7CWlmICghdm1hX3Rlc3QobmV3X3ZtYSwgVk1BX0dST1dTRE9XTl9CSVQpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAltbWFwX3dyaXRlX2xvY2sobW0pOwpAQCAtMTcyNyw3ICYjNDM7MTc0Miw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSkKIAkJcmV0dmFsID0gdm1hX3N0YXJ0X3dyaXRlX2tpbGxhYmxlKG1wbnQpOwogCQlpZiAocmV0dmFsICZsdDsgMCkKIAkJCWdvdG8gbG9vcF9vdXQ7Ci0JCWlmIChtcG50LSZndDt2bV9mbGFncyAmYW1wOyBWTV9ET05UQ09QWSkgewomIzQzOwkJaWYgKHZtYV90ZXN0KG1wbnQsIFZNQV9ET05UQ09QWV9CSVQpKSB7CiAJCQlyZXR2YWwgPSB2bWFfaXRlcl9jbGVhcl9nZnAoJmFtcDt2bWksIG1wbnQtJmd0O3ZtX3N0YXJ0LAogCQkJCQkJICAgIG1wbnQtJmd0O3ZtX2VuZCwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAocmV0dmFsKQpAQCAtMTczNyw3ICYjNDM7MTc1Miw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSkKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWNoYXJnZSA9IDA7Ci0JCWlmIChtcG50LSZndDt2bV9mbGFncyAmYW1wOyBWTV9BQ0NPVU5UKSB7CiYjNDM7CQlpZiAodm1hX3Rlc3QobXBudCwgVk1BX0FDQ09VTlRfQklUKSkgewogCQkJdW5zaWduZWQgbG9uZyBsZW4gPSB2bWFfcGFnZXMobXBudCk7CiAKIAkJCWlmIChzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5X21tKG9sZG1tLCBsZW4pKSAvKiBzaWMgKi8KQEAgLTE3NTUsMTYgJiM0MzsxNzcwLDE5IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSkKIAkJcmV0dmFsID0gZHVwX3VzZXJmYXVsdGZkKHRtcCwgJmFtcDt1Zik7CiAJCWlmIChyZXR2YWwpCiAJCQlnb3RvIGZhaWxfbm9tZW1fYW5vbl92bWFfZm9yazsKLQkJaWYgKHRtcC0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fV0lQRU9ORk9SSykgewomIzQzOwomIzQzOwkJaWYgKHZtYV90ZXN0KHRtcCwgVk1BX1dJUEVPTkZPUktfQklUKSkgewogCQkJLyoKLQkJCSAqIFZNX1dJUEVPTkZPUksgZ2V0cyBhIGNsZWFuIHNsYXRlIGluIHRoZSBjaGlsZC4KJiM0MzsJCQkgKiBWTUFfV0lQRU9ORk9SS19CSVQgZ2V0cyBhIGNsZWFuIHNsYXRlIGluIHRoZSBjaGlsZC4KIAkJCSAqIERvbiYjMzk7dCBwcmVwYXJlIGFub25fdm1hIHVudGlsIGZhdWx0IHNpbmNlIHdlIGRvbiYjMzk7dAogCQkJICogY29weSBwYWdlIGZvciBjdXJyZW50IHZtYS4KIAkJCSAqLwogCQkJdG1wLSZndDthbm9uX3ZtYSA9IE5VTEw7CiAJCX0gZWxzZSBpZiAoYW5vbl92bWFfZm9yayh0bXAsIG1wbnQpKQogCQkJZ290byBmYWlsX25vbWVtX2Fub25fdm1hX2Zvcms7Ci0JCXZtX2ZsYWdzX2NsZWFyKHRtcCwgVk1fTE9DS0VEX01BU0spOwomIzQzOwomIzQzOwkJdm1hX3N0YXJ0X3dyaXRlKHRtcCk7CiYjNDM7CQl2bWFfY2xlYXJfZmxhZ3NfbWFzayh0bXAsIFZNQV9MT0NLRURfTUFTSyk7CiAJCS8qCiAJCSAqIENvcHkvdXBkYXRlIGh1Z2V0bGIgcHJpdmF0ZSB2bWEgaW5mb3JtYXRpb24uCiAJCSAqLwpAQCAtMTc5Nyw3ICYjNDM7MTgxNSw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSkKIAkJCWlfbW1hcF91bmxvY2tfd3JpdGUobWFwcGluZyk7CiAJCX0KIAotCQlpZiAoISh0bXAtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1dJUEVPTkZPUkspKQomIzQzOwkJaWYgKCF2bWFfdGVzdCh0bXAsIFZNQV9XSVBFT05GT1JLX0JJVCkpCiAJCQlyZXR2YWwgPSBjb3B5X3BhZ2VfcmFuZ2UodG1wLCBtcG50KTsKIAogCQlpZiAocmV0dmFsKSB7CmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5jIGIvbW0vbXByb3RlY3QuYwppbmRleCBkYzI3YmJjMTcxMmZkNS4uMjg4OGVlNjM4ZDg3MmEgMTAwNjQ0Ci0tLSBhL21tL21wcm90ZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbXByb3RlY3QuYwpAQCAtNDAsNyAmIzQzOzQwLDcgQEAKIAogc3RhdGljIGJvb2wgbWF5YmVfY2hhbmdlX3B0ZV93cml0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcHRlX3QgcHRlKQogewotCWlmIChXQVJOX09OX09OQ0UoISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1dSSVRFKSkpCiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIXZtYV90ZXN0KHZtYSwgVk1BX1dSSVRFX0JJVCkpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBEb24mIzM5O3QgdG91Y2ggZW50cmllcyB0aGF0IGFyZSBub3QgZXZlbiByZWFkYWJsZS4gKi8KQEAgLTk3LDcgJiM0Mzs5Nyw3IEBAIHN0YXRpYyBib29sIGNhbl9jaGFuZ2Vfc2hhcmVkX3B0ZV93cml0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIGJvb2wgY2FuX2NoYW5nZV9wdGVfd3JpdGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICAgcHRlX3QgcHRlKQogewotCWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fU0hBUkVEKSkKJiM0MzsJaWYgKCF2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKSkKIAkJcmV0dXJuIGNhbl9jaGFuZ2VfcHJpdmF0ZV9wdGVfd3JpdGFibGUodm1hLCBhZGRyLCBwdGUpOwogCiAJcmV0dXJuIGNhbl9jaGFuZ2Vfc2hhcmVkX3B0ZV93cml0YWJsZSh2bWEsIHB0ZSk7CkBAIC0xOTQsNyAmIzQzOzE5NCw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBzZXRfd3JpdGVfcHJvdF9jb21taXRfZmx1c2hfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1CiB7CiAJYm9vbCBzZXRfd3JpdGU7CiAKLQlpZiAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9TSEFSRUQpIHsKJiM0MzsJaWYgKHZtYV90ZXN0KHZtYSwgVk1BX1NIQVJFRF9CSVQpKSB7CiAJCXNldF93cml0ZSA9IGNhbl9jaGFuZ2Vfc2hhcmVkX3B0ZV93cml0YWJsZSh2bWEsIHB0ZW50KTsKIAkJcHJvdF9jb21taXRfZmx1c2hfcHRlcyh2bWEsIGFkZHIsIHB0ZXAsIG9sZHB0ZSwgcHRlbnQsIG5yX3B0ZXMsCiAJCQkJICAgICAgIC8qIGlkeCA9ICovIDAsIHNldF93cml0ZSwgdGxiKTsKQEAgLTg0Niw4ICYjNDM7ODQ2LDggQEAgbXByb3RlY3RfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLAogCQl2bV91bmFjY3RfbWVtb3J5KG5ycGFnZXMpOwogCiAJLyoKLQkgKiBQcml2YXRlIFZNX0xPQ0tFRCBWTUEgYmVjb21pbmcgd3JpdGFibGU6IHRyaWdnZXIgQ09XIHRvIGF2b2lkIG1ham9yCi0JICogZmF1bHQgb24gYWNjZXNzLgomIzQzOwkgKiBQcml2YXRlIFZNQV9MT0NLRURfQklUIFZNQSBiZWNvbWluZyB3cml0YWJsZTogdHJpZ2dlciBDT1cgdG8gYXZvaWQKJiM0MzsJICogbWFqb3IgZmF1bHQgb24gYWNjZXNzLgogCSAqLwogCWlmICh2bWFfZmxhZ3NfdGVzdCgmYW1wO25ld192bWFfZmxhZ3MsIFZNQV9XUklURV9CSVQpICZhbXA7JmFtcDsKIAkgICAgdm1hX2ZsYWdzX3Rlc3QoJmFtcDtvbGRfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkgJmFtcDsmYW1wOwpAQCAtOTIxLDcgJiM0Mzs5MjEsNyBAQCBzdGF0aWMgaW50IGRvX21wcm90ZWN0X3BrZXkodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbiwKIAkJCWdvdG8gb3V0OwogCQlzdGFydCA9IHZtYS0mZ3Q7dm1fc3RhcnQ7CiAJCWVycm9yID0gLUVJTlZBTDsKLQkJaWYgKCEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9HUk9XU0RPV04pKQomIzQzOwkJaWYgKCF2bWFfdGVzdCh2bWEsIFZNQV9HUk9XU0RPV05fQklUKSkKIAkJCWdvdG8gb3V0OwogCX0gZWxzZSB7CiAJCWlmICh2bWEtJmd0O3ZtX3N0YXJ0ICZndDsgc3RhcnQpCkBAIC05MjksNyAmIzQzOzkyOSw3IEBAIHN0YXRpYyBpbnQgZG9fbXByb3RlY3RfcGtleSh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLAogCQlpZiAodW5saWtlbHkoZ3Jvd3MgJmFtcDsgUFJPVF9HUk9XU1VQKSkgewogCQkJZW5kID0gdm1hLSZndDt2bV9lbmQ7CiAJCQllcnJvciA9IC1FSU5WQUw7Ci0JCQlpZiAoISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0dST1dTVVApKQomIzQzOwkJCWlmICghdm1hX3Rlc3Rfc2luZ2xlX21hc2sodm1hLCBWTUFfR1JPV1NVUCkpCiAJCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC05NTMsNyAmIzQzOzk1Myw3IEBAIHN0YXRpYyBpbnQgZG9fbXByb3RlY3RfcGtleSh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLAogCQl9CiAKIAkJLyogRG9lcyB0aGUgYXBwbGljYXRpb24gZXhwZWN0IFBST1RfUkVBRCB0byBpbXBseSBQUk9UX0VYRUMgKi8KLQkJaWYgKHJpZXIgJmFtcDsmYW1wOyAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9NQVlFWEVDKSkKJiM0MzsJCWlmIChyaWVyICZhbXA7JmFtcDsgdm1hX3Rlc3Qodm1hLCBWTUFfTUFZRVhFQ19CSVQpKQogCQkJcHJvdCB8PSBQUk9UX0VYRUM7CiAKIAkJLyoKZGlmZiAtLWdpdCBhL21tL21yZW1hcC5jIGIvbW0vbXJlbWFwLmMKaW5kZXggMzg0ZWY0Y2MyMTk1YmEuLmI2NGFhMWY2ZTA3ZWRlIDEwMDY0NAotLS0gYS9tbS9tcmVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tcmVtYXAuYwpAQCAtNjgsNyAmIzQzOzY4LDcgQEAgc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgewogCWJvb2wgcG9wdWxhdGVfZXhwYW5kOwkJLyogbWxvY2soKSYjMzk7ZCBleHBhbmRlZCwgbXVzdCBwb3B1bGF0ZS4gKi8KIAllbnVtIG1yZW1hcF90eXBlIHJlbWFwX3R5cGU7CS8qIGV4cGFuZCwgc2hyaW5rLCBldGMuICovCiAJYm9vbCBtbWFwX2xvY2tlZDsJCS8qIElzIG1tIGN1cnJlbnRseSB3cml0ZS1sb2NrZWQ/ICovCi0JdW5zaWduZWQgbG9uZyBjaGFyZ2VkOwkJLyogSWYgVk1fQUNDT1VOVCwgIyBwYWdlcyB0byBhY2NvdW50LiAqLwomIzQzOwl1bnNpZ25lZCBsb25nIGNoYXJnZWQ7CQkvKiBJZiBWTUFfQUNDT1VOVF9CSVQsICMgcGdzIHRvIGFjY291bnQgKi8KIAlib29sIHZtaV9uZWVkc19pbnZhbGlkYXRlOwkvKiBJcyB0aGUgVk1BIGl0ZXJhdG9yIGludmFsaWRhdGVkPyAqLwogfTsKIApAQCAtOTYzLDcgJiM0Mzs5NjMsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB2cm1fc2V0X25ld19hZGRyKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pCiAKIAlpZiAodnJtLSZndDtmbGFncyAmYW1wOyBNUkVNQVBfRklYRUQpCiAJCW1hcF9mbGFncyB8PSBNQVBfRklYRUQ7Ci0JaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fTUFZU0hBUkUpCiYjNDM7CWlmICh2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpKQogCQltYXBfZmxhZ3MgfD0gTUFQX1NIQVJFRDsKIAogCXJlcyA9IGdldF91bm1hcHBlZF9hcmVhKHZtYS0mZ3Q7dm1fZmlsZSwgbmV3X2FkZHIsIHZybS0mZ3Q7bmV3X2xlbiwgcGdvZmYsCkBAIC05ODUsNyAmIzQzOzk4NSw3IEBAIHN0YXRpYyBib29sIHZybV9jYWxjX2NoYXJnZShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKQogewogCXVuc2lnbmVkIGxvbmcgY2hhcmdlZDsKIAotCWlmICghKHZybS0mZ3Q7dm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9BQ0NPVU5UKSkKJiM0MzsJaWYgKCF2bWFfdGVzdCh2cm0tJmd0O3ZtYSwgVk1BX0FDQ09VTlRfQklUKSkKIAkJcmV0dXJuIHRydWU7CiAKIAkvKgpAQCAtMTAxMiw3ICYjNDM7MTAxMiw3IEBAIHN0YXRpYyBib29sIHZybV9jYWxjX2NoYXJnZShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKQogICovCiBzdGF0aWMgdm9pZCB2cm1fdW5jaGFyZ2Uoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSkKIHsKLQlpZiAoISh2cm0tJmd0O3ZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fQUNDT1VOVCkpCiYjNDM7CWlmICghdm1hX3Rlc3QodnJtLSZndDt2bWEsIFZNQV9BQ0NPVU5UX0JJVCkpCiAJCXJldHVybjsKIAogCXZtX3VuYWNjdF9tZW1vcnkodnJtLSZndDtjaGFyZ2VkKTsKQEAgLTEwMzIsNyAmIzQzOzEwMzIsNyBAQCBzdGF0aWMgdm9pZCB2cm1fc3RhdF9hY2NvdW50KHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0sCiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2cm0tJmd0O3ZtYTsKIAogCXZtX3N0YXRfYWNjb3VudChtbSwgdm1hLSZndDt2bV9mbGFncywgcGFnZXMpOwotCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCkKJiM0MzsJaWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKQogCQltbS0mZ3Q7bG9ja2VkX3ZtICYjNDM7PSBwYWdlczsKIH0KIApAQCAtMTE3Niw3ICYjNDM7MTE3Niw3IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSkKIAkgKiBhcm9zZSwgaW4gd2hpY2ggY2FzZSB3ZSBfZG9fIHdpc2ggdG8gdW5tYXAgdGhlIF9uZXdfIFZNQSwgd2hpY2ggbWVhbnMKIAkgKiB3ZSBhY3R1YWxseSBfZG9fIHdhbnQgaXQgYmUgdW5hY2NvdW50ZWQuCiAJICovCi0JYm9vbCBhY2NvdW50YWJsZV9tb3ZlID0gKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fQUNDT1VOVCkgJmFtcDsmYW1wOwomIzQzOwlib29sIGFjY291bnRhYmxlX21vdmUgPSB2bWFfdGVzdCh2bWEsIFZNQV9BQ0NPVU5UX0JJVCkgJmFtcDsmYW1wOwogCQkhKHZybS0mZ3Q7ZmxhZ3MgJmFtcDsgTVJFTUFQX0RPTlRVTk1BUCk7CiAKIAkvKgpAQCAtMTE5NSw3ICYjNDM7MTE5NSw3IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSkKIAkgKiBwb3J0aW9ucyBvZiB0aGUgb3JpZ2luYWwgVk1BIHRoYXQgcmVtYWluLgogCSAqLwogCWlmIChhY2NvdW50YWJsZV9tb3ZlKSB7Ci0JCXZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fQUNDT1VOVCk7CiYjNDM7CQl2bWFfY2xlYXJfZmxhZ3Modm1hLCBWTUFfQUNDT1VOVF9CSVQpOwogCQkvKiBXZSBhcmUgYWJvdXQgdG8gc3BsaXQgdm1hLCBzbyBzdG9yZSB0aGUgc3RhcnQvZW5kLiAqLwogCQl2bV9zdGFydCA9IHZtYS0mZ3Q7dm1fc3RhcnQ7CiAJCXZtX2VuZCA9IHZtYS0mZ3Q7dm1fZW5kOwpAQCAtMTIyMCw4ICYjNDM7MTIyMCw4IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSkKIAkgKiB8ICAgICAgICAgICAgIHwKIAkgKiB8LS0tLS0tLS0tLS0tLXwKIAkgKgotCSAqIEhhdmluZyBjbGVhcmVkIFZNX0FDQ09VTlQgZnJvbSB0aGUgd2hvbGUgVk1BLCBhZnRlciB3ZSB1bm1hcCBhYm92ZQotCSAqIHdlJiMzOTtsbCBlbmQgdXAgd2l0aDoKJiM0MzsJICogSGF2aW5nIGNsZWFyZWQgVk1BX0FDQ09VTlRfQklUIGZyb20gdGhlIHdob2xlIFZNQSwgYWZ0ZXIgd2UgdW5tYXAKJiM0MzsJICogYWJvdmUgd2UmIzM5O2xsIGVuZCB1cCB3aXRoOgogCSAqCiAJICogICAgYWRkciAgZW5kCiAJICogICAgIHwgICAgIHwKQEAgLTEyNDEsMTMgJiM0MzsxMjQxLDE1IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSkKIAkJaWYgKHZtX3N0YXJ0ICZsdDsgYWRkcikgewogCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2ID0gdm1hX3ByZXYoJmFtcDt2bWkpOwogCi0JCQl2bV9mbGFnc19zZXQocHJldiwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqLwomIzQzOwkJCXZtYV9zdGFydF93cml0ZShwcmV2KTsKJiM0MzsJCQl2bWFfc2V0X2ZsYWdzKHByZXYsIFZNQV9BQ0NPVU5UX0JJVCk7CiAJCX0KIAogCQlpZiAodm1fZW5kICZndDsgZW5kKSB7CiAJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQgPSB2bWFfbmV4dCgmYW1wO3ZtaSk7CiAKLQkJCXZtX2ZsYWdzX3NldChuZXh0LCBWTV9BQ0NPVU5UKTsgLyogQWNxdWlyZXMgVk1BIGxvY2suICovCiYjNDM7CQkJdm1hX3N0YXJ0X3dyaXRlKG5leHQpOwomIzQzOwkJCXZtYV9zZXRfZmxhZ3MobmV4dCwgVk1BX0FDQ09VTlRfQklUKTsKIAkJfQogCX0KIH0KQEAgLTEzMzAsOCAmIzQzOzEzMzIsOCBAQCBzdGF0aWMgdm9pZCBkb250dW5tYXBfY29tcGxldGUoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSwKIAl1bnNpZ25lZCBsb25nIG9sZF9zdGFydCA9IHZybS0mZ3Q7dm1hLSZndDt2bV9zdGFydDsKIAl1bnNpZ25lZCBsb25nIG9sZF9lbmQgPSB2cm0tJmd0O3ZtYS0mZ3Q7dm1fZW5kOwogCi0JLyogV2UgYWx3YXlzIGNsZWFyIFZNX0xPQ0tFRFtPTkZBVUxUXSBvbiB0aGUgb2xkIFZNQS4gKi8KLQl2bV9mbGFnc19jbGVhcih2cm0tJmd0O3ZtYSwgVk1fTE9DS0VEX01BU0spOwomIzQzOwkvKiBXZSBhbHdheXMgY2xlYXIgVk1BX0xPQ0tFRFtPTkZBVUxUXV9CSVQgb24gdGhlIG9sZCBWTUEuICovCiYjNDM7CXZtYV9jbGVhcl9mbGFnc19tYXNrKHZybS0mZ3Q7dm1hLCBWTUFfTE9DS0VEX01BU0spOwogCiAJLyoKIAkgKiBhbm9uX3ZtYSBsaW5rcyBvZiB0aGUgb2xkIHZtYSBpcyBubyBsb25nZXIgbmVlZGVkIGFmdGVyIGl0cyBwYWdlCkBAIC0xNzY3LDE0ICYjNDM7MTc2OSwxNCBAQCBzdGF0aWMgaW50IGNoZWNrX3ByZXBfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pCiAJICogYmFzZWQgb24gdGhlIG9yaWdpbmFsLiAgVGhlcmUgYXJlIG5vIGtub3duIHVzZSBjYXNlcyBmb3IgdGhpcwogCSAqIGJlaGF2aW9yLiAgQXMgYSByZXN1bHQsIGZhaWwgc3VjaCBhdHRlbXB0cy4KIAkgKi8KLQlpZiAoIW9sZF9sZW4gJmFtcDsmYW1wOyAhKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgKFZNX1NIQVJFRCB8IFZNX01BWVNIQVJFKSkpIHsKJiM0MzsJaWYgKCFvbGRfbGVuICZhbXA7JmFtcDsgIXZtYV90ZXN0X2FueSh2bWEsIFZNQV9TSEFSRURfQklULCBWTUFfTUFZU0hBUkVfQklUKSkgewogCQlwcl93YXJuX29uY2UoJiMzNDslcyAoJWQpOiBhdHRlbXB0ZWQgdG8gZHVwbGljYXRlIGEgcHJpdmF0ZSBtYXBwaW5nIHdpdGggbXJlbWFwLiAgVGhpcyBpcyBub3Qgc3VwcG9ydGVkLlxuJiMzNDssCiAJCQkgICAgIGN1cnJlbnQtJmd0O2NvbW0sIGN1cnJlbnQtJmd0O3BpZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICgodnJtLSZndDtmbGFncyAmYW1wOyBNUkVNQVBfRE9OVFVOTUFQKSAmYW1wOyZhbXA7Ci0JCQkodm1hLSZndDt2bV9mbGFncyAmYW1wOyAoVk1fRE9OVEVYUEFORCB8IFZNX1BGTk1BUCkpKQomIzQzOwkgICAgdm1hX3Rlc3RfYW55KHZtYSwgVk1BX0RPTlRFWFBBTkRfQklULCBWTUFfUEZOTUFQX0JJVCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyoKQEAgLTE4MDQsNyAmIzQzOzE4MDYsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3ByZXBfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pCiAJCXJldHVybiAwOwogCiAJLyogV2UgYXJlIGV4cGFuZGluZyBhbmQgdGhlIFZNQSBpcyBtbG9jaygpJiMzOTtkIHNvIHdlIG5lZWQgdG8gcG9wdWxhdGUuICovCi0JaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fTE9DS0VEKQomIzQzOwlpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpCiAJCXZybS0mZ3Q7cG9wdWxhdGVfZXhwYW5kID0gdHJ1ZTsKIAogCS8qIE5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBhIGdyb3dpbmcgbWFwcGluZyAqLwpAQCAtMTgxMiwxMCAmIzQzOzE4MTQsMTAgQEAgc3RhdGljIGludCBjaGVja19wcmVwX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKQogCWlmIChwZ29mZiAmIzQzOyAobmV3X2xlbiAmZ3Q7Jmd0OyBQQUdFX1NISUZUKSAmbHQ7IHBnb2ZmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IChWTV9ET05URVhQQU5EIHwgVk1fUEZOTUFQKSkKJiM0MzsJaWYgKHZtYV90ZXN0X2FueSh2bWEsIFZNQV9ET05URVhQQU5EX0JJVCwgVk1BX1BGTk1BUF9CSVQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmICghbWxvY2tfZnV0dXJlX29rKG1tLCB2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCwgdnJtLSZndDtkZWx0YSkpCiYjNDM7CWlmICghbWxvY2tfZnV0dXJlX29rKG1tLCB2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSwgdnJtLSZndDtkZWx0YSkpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJaWYgKCFtYXlfZXhwYW5kX3ZtKG1tLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MsIHZybS0mZ3Q7ZGVsdGEgJmd0OyZndDsgUEFHRV9TSElGVCkpCmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuYwppbmRleCBhZGMwYjBjYTkwNmJkZi4uNDk4ZTAxZWU0MGIwNTYgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbm9tbXUuYwpAQCAtMTAxNCwxMSAmIzQzOzEwMTQsMTIgQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJdW5zaWduZWQgbG9uZyBsZW4sCiAJCQl1bnNpZ25lZCBsb25nIHByb3QsCiAJCQl1bnNpZ25lZCBsb25nIGZsYWdzLAotCQkJdm1fZmxhZ3NfdCB2bV9mbGFncywKJiM0MzsJCQl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MsCiAJCQl1bnNpZ25lZCBsb25nIHBnb2ZmLAogCQkJdW5zaWduZWQgbG9uZyAqcG9wdWxhdGUsCiAJCQlzdHJ1Y3QgbGlzdF9oZWFkICp1ZikKIHsKJiM0MzsJdm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKTsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlzdHJ1Y3Qgdm1fcmVnaW9uICpyZWdpb247CiAJc3RydWN0IHJiX25vZGUgKnJiOwpkaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jCmluZGV4IDUwOTA0NTc1NDJjYTljLi5iZjA1MTNkMWQzZDA4NiAxMDA2NDQKLS0tIGEvbW0vdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3V0aWwuYwpAQCAtNTc4LDggJiM0Mzs1NzgsOCBAQCB1bnNpZ25lZCBsb25nIHZtX21tYXBfcGdvZmYoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlpZiAoIXJldCkgewogCQlpZiAobW1hcF93cml0ZV9sb2NrX2tpbGxhYmxlKG1tKSkKIAkJCXJldHVybiAtRUlOVFI7Ci0JCXJldCA9IGRvX21tYXAoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFnLCAwLCBwZ29mZiwgJmFtcDtwb3B1bGF0ZSwKLQkJCSAgICAgICZhbXA7dWYpOwomIzQzOwkJcmV0ID0gZG9fbW1hcChmaWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWcsIEVNUFRZX1ZNQV9GTEFHUywgcGdvZmYsCiYjNDM7CQkJICAgICAgJmFtcDtwb3B1bGF0ZSwgJmFtcDt1Zik7CiAJCW1tYXBfd3JpdGVfdW5sb2NrKG1tKTsKIAkJdXNlcmZhdWx0ZmRfdW5tYXBfY29tcGxldGUobW0sICZhbXA7dWYpOwogCQlpZiAocG9wdWxhdGUpCkBAIC02MjcsMjAgJiM0Mzs2MjcsMjAgQEAgRVhQT1JUX1NZTUJPTCh2bV9tbWFwKTsKIHVuc2lnbmVkIGxvbmcgdm1fbW1hcF9zaGFkb3dfc3RhY2sodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJdW5zaWduZWQgbG9uZyBmbGFncykKIHsKJiM0MzsJdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gVk1BX1NIQURPV19TVEFDSzsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtJmd0O21tOwogCXVuc2lnbmVkIGxvbmcgcmV0LCB1bnVzZWQ7Ci0Jdm1fZmxhZ3NfdCB2bV9mbGFncyA9IFZNX1NIQURPV19TVEFDSzsKIAogCWZsYWdzIHw9IE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURTsKIAlpZiAoYWRkcikKIAkJZmxhZ3MgfD0gTUFQX0ZJWEVEX05PUkVQTEFDRTsKIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpCi0JCXZtX2ZsYWdzIHw9IFZNX05PSFVHRVBBR0U7CiYjNDM7CQl2bWFfZmxhZ3Nfc2V0KCZhbXA7dm1hX2ZsYWdzLCBWTUFfTk9IVUdFUEFHRV9CSVQpOwogCiAJbW1hcF93cml0ZV9sb2NrKG1tKTsKIAlyZXQgPSBkb19tbWFwKE5VTEwsIGFkZHIsIGxlbiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsCi0JCSAgICAgIHZtX2ZsYWdzLCAwLCAmYW1wO3VudXNlZCwgTlVMTCk7CiYjNDM7CQkgICAgICB2bWFfZmxhZ3MsIDAsICZhbXA7dW51c2VkLCBOVUxMKTsKIAltbWFwX3dyaXRlX3VubG9jayhtbSk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuYwppbmRleCA5ZDU1NmQzM2IyNGJkMS4uYjViYzNlZWM5NjFjNzkgMTAwNjQ0Ci0tLSBhL21tL3ZtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5jCkBAIC01Niw3ICYjNDM7NTYsNyBAQCBzdHJ1Y3QgbW1hcF9zdGF0ZSB7CiAJCS5wZ2xlbiA9IFBIWVNfUEZOKGxlbl8pLAkJCQlcCiAJCS52bWFfZmxhZ3MgPSB2bWFfZmxhZ3NfLAkJCQlcCiAJCS5maWxlID0gZmlsZV8sCQkJCQkJXAotCQkucGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hX2ZsYWdzXyksCQlcCiYjNDM7CQkucGFnZV9wcm90ID0gdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3NfKSwJXAogCX0KIAogI2RlZmluZSBWTUdfTU1BUF9TVEFURShuYW1lLCBtYXBfLCB2bWFfKQkJCQlcCkBAIC0yMTc2LDcgJiM0MzsyMTc2LDcgQEAgYm9vbCB2bWFfd2FudHNfd3JpdGVub3RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBncHJvdF90IHZtX3BhZ2VfcHJvdCkKIAkvKiBUaGUgb3BlbiByb3V0aW5lIGRpZCBzb21ldGhpbmcgdG8gdGhlIHByb3RlY3Rpb25zIHRoYXQgcGdwcm90X21vZGlmeQogCSAqIHdvbiYjMzk7dCBwcmVzZXJ2ZT8gKi8KIAlpZiAocGdwcm90X3ZhbCh2bV9wYWdlX3Byb3QpICE9Ci0JICAgIHBncHJvdF92YWwodm1fcGdwcm90X21vZGlmeSh2bV9wYWdlX3Byb3QsIHZtYS0mZ3Q7dm1fZmxhZ3MpKSkKJiM0MzsJICAgIHBncHJvdF92YWwodm1hX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bWEtJmd0O2ZsYWdzKSkpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qCkBAIC0yODgzLDcgJiM0MzsyODgzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAogICogZmlsZSB0byBiZSBtYXBwZWQsIG90aGVyd2lzZSBOVUxMLgogICogQGFkZHI6IFRoZSBwYWdlLWFsaWduZWQgYWRkcmVzcyBhdCB3aGljaCB0byBwZXJmb3JtIHRoZSBtYXBwaW5nLgogICogQGxlbjogVGhlIHBhZ2UtYWxpZ25lZCwgbm9uLXplcm8sIGxlbmd0aCBvZiB0aGUgbWFwcGluZy4KLSAqIEB2bV9mbGFnczogVGhlIFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgbWFwcGluZy4KJiM0MzsgKiBAdm1hX2ZsYWdzOiBUaGUgVk1BIGZsYWdzIHdoaWNoIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZSBtYXBwaW5nLgogICogQHBnb2ZmOiBJZiBAZmlsZSBpcyBzcGVjaWZpZWQsIHRoZSBwYWdlIG9mZnNldCBpbnRvIHRoZSBmaWxlLCBpZiBub3QgdGhlbgogICogdGhlIHZpcnR1YWwgcGFnZSBvZmZzZXQgaW4gbWVtb3J5IG9mIHRoZSBhbm9ueW1vdXMgbWFwcGluZy4KICAqIEB1ZjogT3B0aW9uYWxseSwgYSBwb2ludGVyIHRvIGEgbGlzdCBoZWFkIHVzZWQgZm9yIHRyYWNraW5nIHVzZXJmYXVsdGZkIHVubWFwCkBAIC0yODkzLDEyICYjNDM7Mjg5MywxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX21tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAgKiBiZWVuIHBlcmZvcm1lZC4KICAqLwogdW5zaWduZWQgbG9uZyBtbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICB1bnNpZ25lZCBsb25nIGxlbiwgdm1fZmxhZ3NfdCB2bV9mbGFncywKJiM0MzsJCQkgIHVuc2lnbmVkIGxvbmcgbGVuLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MsCiAJCQkgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHN0cnVjdCBsaXN0X2hlYWQgKnVmKQogewogCXVuc2lnbmVkIGxvbmcgcmV0OwogCWJvb2wgd3JpdGFibGVfZmlsZV9tYXBwaW5nID0gZmFsc2U7Ci0JY29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbGVnYWN5X3RvX3ZtYV9mbGFncyh2bV9mbGFncyk7CiAKIAltbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoY3VycmVudC0mZ3Q7bW0pOwogCkBAIC0yOTA3LDcgJiM0MzsyOTA2LDcgQEAgdW5zaWduZWQgbG9uZyBtbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlyZXR1cm4gLUVBQ0NFUzsKIAogCS8qIEFsbG93IGFyY2hpdGVjdHVyZXMgdG8gc2FuaXR5LWNoZWNrIHRoZSB2bV9mbGFncy4gKi8KLQlpZiAoIWFyY2hfdmFsaWRhdGVfZmxhZ3Modm1fZmxhZ3MpKQomIzQzOwlpZiAoIWFyY2hfdmFsaWRhdGVfZmxhZ3Modm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBNYXAgd3JpdGFibGUgYW5kIGVuc3VyZSB0aGlzIGlzbiYjMzk7dCBhIHNlYWxlZCBtZW1mZC4gKi8KQEAgLTM0MjAsMTggJiM0MzszNDE5LDIxIEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqX19pbnN0YWxsX3NwZWNpYWxfbWFwcGluZygKIAl2bV9mbGFnc190IHZtX2ZsYWdzLCB2b2lkICpwcml2LAogCWNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqb3BzKQogewotCWludCByZXQ7CiYjNDM7CXZtYV9mbGFnc190IHZtYV9mbGFncyA9IGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3MpOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwomIzQzOwlpbnQgcmV0OwogCiAJdm1hID0gdm1fYXJlYV9hbGxvYyhtbSk7Ci0JaWYgKHVubGlrZWx5KHZtYSA9PSBOVUxMKSkKJiM0MzsJaWYgKHVubGlrZWx5KCF2bWEpKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCXZtX2ZsYWdzIHw9IG1tLSZndDtkZWZfZmxhZ3MgfCBWTV9ET05URVhQQU5EOwomIzQzOwl2bWFfZmxhZ3Nfc2V0X21hc2soJmFtcDt2bWFfZmxhZ3MsIG1tLSZndDtkZWZfdm1hX2ZsYWdzKTsKJiM0MzsJdm1hX2ZsYWdzX3NldCgmYW1wO3ZtYV9mbGFncywgVk1BX0RPTlRFWFBBTkRfQklUKTsKIAlpZiAocGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpCi0JCXZtX2ZsYWdzIHw9IFZNX1NPRlRESVJUWTsKLQl2bV9mbGFnc19pbml0KHZtYSwgdm1fZmxhZ3MgJmFtcDsgflZNX0xPQ0tFRF9NQVNLKTsKLQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLSZndDt2bV9mbGFncyk7CiYjNDM7CQl2bWFfZmxhZ3Nfc2V0KCZhbXA7dm1hX2ZsYWdzLCBWTUFfU09GVERJUlRZX0JJVCk7CiYjNDM7CXZtYV9mbGFnc19jbGVhcl9tYXNrKCZhbXA7dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX01BU0spOwomIzQzOwl2bWEtJmd0O2ZsYWdzID0gdm1hX2ZsYWdzOwomIzQzOwl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7CiAKIAl2bWEtJmd0O3ZtX29wcyA9IG9wczsKIAl2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSA9IHByaXY7CmRpZmYgLS1naXQgYS9tbS92bWEuaCBiL21tL3ZtYS5oCmluZGV4IGFkYjdhMGJhMTE5MjA4Li4wYmM3ZDUyMWU5NzY3NyAxMDA2NDQKLS0tIGEvbW0vdm1hLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hLmgKQEAgLTUxNyw3ICYjNDM7NTE3LDcgQEAgaW50IG1tX3Rha2VfYWxsX2xvY2tzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKIHZvaWQgbW1fZHJvcF9hbGxfbG9ja3Moc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogCiB1bnNpZ25lZCBsb25nIG1tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCXVuc2lnbmVkIGxvbmcgbGVuLCB2bV9mbGFnc190IHZtX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLAomIzQzOwkJdW5zaWduZWQgbG9uZyBsZW4sIHZtYV9mbGFnc190IHZtYV9mbGFncywgdW5zaWduZWQgbG9uZyBwZ29mZiwKIAkJc3RydWN0IGxpc3RfaGVhZCAqdWYpOwogCiBpbnQgZG9fYnJrX2ZsYWdzKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpicmt2bWEsCkBAIC01NDEsOSAmIzQzOzU0MSwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX3dhbnRzX21hbnVhbF9wdGVfd3JpdGVfdXBncmFkZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYQogfQogCiAjaWZkZWYgQ09ORklHX01NVQotc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bV9wZ3Byb3RfbW9kaWZ5KHBncHJvdF90IG9sZHByb3QsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpCiYjNDM7c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfcGdwcm90X21vZGlmeShwZ3Byb3RfdCBvbGRwcm90LCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiB7Ci0JcmV0dXJuIHBncHJvdF9tb2RpZnkob2xkcHJvdCwgdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFncykpOwomIzQzOwljb25zdCBwZ3Byb3RfdCBwcm90ID0gdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gcGdwcm90X21vZGlmeShvbGRwcm90LCBwcm90KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9tbS92bWFfZXhlYy5jIGIvbW0vdm1hX2V4ZWMuYwppbmRleCBlZjFmYTJiMTYxZjNiYS4uN2FmMTI2MDY4OWI5N2UgMTAwNjQ0Ci0tLSBhL21tL3ZtYV9leGVjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hX2V4ZWMuYwpAQCAtMTEyLDE1ICYjNDM7MTEyLDE3IEBAIGludCByZWxvY2F0ZV92bWFfZG93bihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzaGlmdCkKIGludCBjcmVhdGVfaW5pdF9zdGFja192bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsCiAJCQkgIHVuc2lnbmVkIGxvbmcgKnRvcF9tZW1fcCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gVk1fU1RBQ0tfRkxBR1MgfCBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQOwomIzQzOwl2bWFfZmxhZ3NfdCBmbGFncyA9IFZNQV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQOwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlpbnQgZXJyOwotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1fYXJlYV9hbGxvYyhtbSk7CiAKJiM0MzsJLyogVk1BX1NUQUNLX0ZMQUdTIGFuZCBWTUFfU1RBQ0tfSU5DT01QTEVURV9TRVRVUCBtdXN0IG5vdCBvdmVybGFwLiAqLwomIzQzOwlWTV9XQVJOX09OX09OQ0Uodm1hX2ZsYWdzX3Rlc3RfYW55X21hc2soJmFtcDtmbGFncywgVk1BX1NUQUNLX0ZMQUdTKSk7CiYjNDM7CiYjNDM7CXZtYSA9IHZtX2FyZWFfYWxsb2MobW0pOwogCWlmICghdm1hKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXZtYV9zZXRfYW5vbnltb3VzKHZtYSk7Ci0KIAlpZiAobW1hcF93cml0ZV9sb2NrX2tpbGxhYmxlKG1tKSkgewogCQllcnIgPSAtRUlOVFI7CiAJCWdvdG8gZXJyX2ZyZWU7CkBAIC0xMzQsMTkgJiM0MzsxMzYsMjEgQEAgaW50IGNyZWF0ZV9pbml0X3N0YWNrX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCwKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9rc207CiAKJiM0MzsJdm1hX2ZsYWdzX3NldF9tYXNrKCZhbXA7ZmxhZ3MsIFZNQV9TVEFDS19GTEFHUyk7CiYjNDM7CXZtYV9zZXRfYW5vbnltb3VzKHZtYSk7CiYjNDM7CiAJLyoKIAkgKiBQbGFjZSB0aGUgc3RhY2sgYXQgdGhlIGxhcmdlc3Qgc3RhY2sgYWRkcmVzcyB0aGUgYXJjaGl0ZWN0dXJlCiAJICogc3VwcG9ydHMuIExhdGVyLCB3ZSYjMzk7bGwgbW92ZSB0aGlzIHRvIGFuIGFwcHJvcHJpYXRlIHBsYWNlLiBXZSBkb24mIzM5O3QKIAkgKiB1c2UgU1RBQ0tfVE9QIGJlY2F1c2UgdGhhdCBjYW4gZGVwZW5kIG9uIGF0dHJpYnV0ZXMgd2hpY2ggYXJlbiYjMzk7dAogCSAqIGNvbmZpZ3VyZWQgeWV0LgogCSAqLwotCVZNX1dBUk5fT05fT05DRShWTV9TVEFDS19GTEFHUyAmYW1wOyBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQKTsKIAl2bWEtJmd0O3ZtX2VuZCA9IFNUQUNLX1RPUF9NQVg7CiAJdm1hLSZndDt2bV9zdGFydCA9IHZtYS0mZ3Q7dm1fZW5kIC0gUEFHRV9TSVpFOwogCWlmIChwZ3RhYmxlX3N1cHBvcnRzX3NvZnRfZGlydHkoKSkKLQkJZmxhZ3MgfD0gVk1fU09GVERJUlRZOwotCXZtX2ZsYWdzX2luaXQodm1hLCBmbGFncyk7Ci0Jdm1hLSZndDt2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpOwomIzQzOwkJdm1hX2ZsYWdzX3NldCgmYW1wO2ZsYWdzLCBWTUFfU09GVERJUlRZX0JJVCk7CiYjNDM7CXZtYS0mZ3Q7ZmxhZ3MgPSBmbGFnczsKJiM0MzsJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpOwogCiAJZXJyID0gaW5zZXJ0X3ZtX3N0cnVjdChtbSwgdm1hKTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9tZW1hbGxvYy5jIGIvc291bmQvY29yZS9tZW1hbGxvYy5jCmluZGV4IDkzMjA2NzFkZmNjOGIwLi41YmM3ZTU4NmI0MzBmNSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9tZW1hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NvdW5kL2NvcmUvbWVtYWxsb2MuYwpAQCAtODUxLDcgJiM0Mzs4NTEsNyBAQCBzdGF0aWMgdm9pZCBzbmRfZG1hX25vbmNvaGVyZW50X2ZyZWUoc3RydWN0IHNuZF9kbWFfYnVmZmVyICpkbWFiKQogc3RhdGljIGludCBzbmRfZG1hX25vbmNvaGVyZW50X21tYXAoc3RydWN0IHNuZF9kbWFfYnVmZmVyICpkbWFiLAogCQkJCSAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpCiB7Ci0JYXJlYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdChhcmVhLSZndDt2bV9mbGFncyk7CiYjNDM7CWFyZWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KGFyZWEpOwogCXJldHVybiBkbWFfbW1hcF9wYWdlcyhkbWFiLSZndDtkZXYuZGV2LCBhcmVhLAogCQkJICAgICAgYXJlYS0mZ3Q7dm1fZW5kIC0gYXJlYS0mZ3Q7dm1fc3RhcnQsCiAJCQkgICAgICB2aXJ0X3RvX3BhZ2UoZG1hYi0mZ3Q7YXJlYSkpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgKaW5kZXggNzczZTIzMzAzZTI2YWYuLjY0ZjM4YTgzNjEzZTU0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgKQEAgLTI0NSw4ICYjNDM7MjQ1LDEwIEBAIGVudW0gewogI2RlZmluZSBWTV9TVEFDSwlJTklUX1ZNX0ZMQUcoU1RBQ0spCiAjaWZkZWYgQ09ORklHX1NUQUNLX0dST1dTVVAKICNkZWZpbmUgVk1fU1RBQ0tfRUFSTFkJSU5JVF9WTV9GTEFHKFNUQUNLX0VBUkxZKQomIzQzOyNkZWZpbmUgVk1BX1NUQUNLX0VBUkxZIG1rX3ZtYV9mbGFncyhWTUFfU1RBQ0tfRUFSTFlfQklUKQogI2Vsc2UKICNkZWZpbmUgVk1fU1RBQ0tfRUFSTFkJVk1fTk9ORQomIzQzOyNkZWZpbmUgVk1BX1NUQUNLX0VBUkxZIEVNUFRZX1ZNQV9GTEFHUwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1BLRVlTCiAjZGVmaW5lIFZNX1BLRVlfU0hJRlQgKChfX2ZvcmNlIGludClWTUFfSElHSF9BUkNIXzBfQklUKQpAQCAtMzE1LDYgJiM0MzszMTcsOCBAQCBlbnVtIHsKIAogLyogQml0cyBzZXQgaW4gdGhlIFZNQSB1bnRpbCB0aGUgc3RhY2sgaXMgaW4gaXRzIGZpbmFsIGxvY2F0aW9uICovCiAjZGVmaW5lIFZNX1NUQUNLX0lOQ09NUExFVEVfU0VUVVAgKFZNX1JBTkRfUkVBRCB8IFZNX1NFUV9SRUFEIHwgVk1fU1RBQ0tfRUFSTFkpCiYjNDM7I2RlZmluZSBWTUFfU1RBQ0tfSU5DT01QTEVURV9TRVRVUCBhcHBlbmRfdm1hX2ZsYWdzKAkJXAomIzQzOwlWTUFfU1RBQ0tfRUFSTFksIFZNQV9SQU5EX1JFQURfQklULCBWTUFfU0VRX1JFQURfQklUKQogCiAjZGVmaW5lIFRBU0tfRVhFQ19CSVQgKChjdXJyZW50LSZndDtwZXJzb25hbGl0eSAmYW1wOyBSRUFEX0lNUExJRVNfRVhFQykgPyBcCiAJCSAgICAgICBWTV9FWEVDX0JJVCA6IFZNX1JFQURfQklUKQpAQCAtMTQyNCwyMCAmIzQzOzE0MjgsMTggQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfaXRlcl9uZXh0X3JhbmdlKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSkKIH0KIAogYm9vbCB2bWFfd2FudHNfd3JpdGVub3RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBncHJvdF90IHZtX3BhZ2VfcHJvdCk7CiYjNDM7c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfcGdwcm90X21vZGlmeShwZ3Byb3RfdCBvbGRwcm90LCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpOwogCiAvKiBVcGRhdGUgdm1hLSZndDt2bV9wYWdlX3Byb3QgdG8gcmVmbGVjdCB2bWEtJmd0O3ZtX2ZsYWdzLiAqLwogc3RhdGljIGlubGluZSB2b2lkIHZtYV9zZXRfcGFnZV9wcm90KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWEtJmd0O3ZtX2ZsYWdzOwomIzQzOwl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSB2bWEtJmd0O2ZsYWdzOwogCXBncHJvdF90IHZtX3BhZ2VfcHJvdDsKIAotCS8qIHRlc3Rpbmc6IHdlIGlubGluZSB2bV9wZ3Byb3RfbW9kaWZ5KCkgdG8gYXZvaWQgY2xhc2ggd2l0aCB2bWEuaC4gKi8KLQl2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfbW9kaWZ5KHZtYS0mZ3Q7dm1fcGFnZV9wcm90LCB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzKSk7Ci0KJiM0MzsJdm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1hLSZndDt2bV9wYWdlX3Byb3QsIHZtYV9mbGFncyk7CiAJaWYgKHZtYV93YW50c193cml0ZW5vdGlmeSh2bWEsIHZtX3BhZ2VfcHJvdCkpIHsKLQkJdm1fZmxhZ3MgJmFtcDs9IH5WTV9TSEFSRUQ7Ci0JCS8qIHRlc3Rpbmc6IHdlIGlubGluZSB2bV9wZ3Byb3RfbW9kaWZ5KCkgdG8gYXZvaWQgY2xhc2ggd2l0aCB2bWEuaC4gKi8KLQkJdm1fcGFnZV9wcm90ID0gcGdwcm90X21vZGlmeSh2bV9wYWdlX3Byb3QsIHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3MpKTsKJiM0MzsJCXZtYV9mbGFnc19jbGVhcigmYW1wO3ZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpOwomIzQzOwkJdm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bWFfZmxhZ3MpOwogCX0KIAkvKiByZW1vdmVfcHJvdGVjdGlvbl9wdGVzIHJlYWRzIHZtYS0mZ3Q7dm1fcGFnZV9wcm90IHdpdGhvdXQgbW1hcF9sb2NrICovCiAJV1JJVEVfT05DRSh2bWEtJmd0O3ZtX3BhZ2VfcHJvdCwgdm1fcGFnZV9wcm90KTsKQEAgLTE1NDcsNyAmIzQzOzE1NDksNyBAQCBzdGF0aWMgaW5saW5lIGludCBnZXRfc3lzY3RsX21heF9tYXBfY291bnQodm9pZCkKICNkZWZpbmUgcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkJSVNfRU5BQkxFRChDT05GSUdfTUVNX1NPRlRfRElSVFkpCiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiYjNDM7c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncykKIHsKIAljb25zdCB2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpOwogCkBAIC0xNTc1LDMgJiM0MzsxNTc3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfY2FuX21vZGlmeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAlpZiAodm1hX2lzX2F0dGFjaGVkKHZtYSkpCiAJCXZtYV9hc3NlcnRfd3JpdGVfbG9ja2VkKHZtYSk7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CXJldHVybiB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYS0mZ3Q7ZmxhZ3MpOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3NzQKCQkJCQkJCW91dHB1dDogMjM3CgkJCQkJCQl0aG91Z2h0czogMTc5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW46IHZtYV9mbGFnc190IFRyYW5zaXRpb24qKgoKT2theSwgc28gd2UgaGF2ZSBhIHN1YnN0YW50aWFsIHBhdGNoIGhlcmUsIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IFZNQSBmbGFncyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGtleSBzaGlmdCBpcyBmcm9tIHRoZSBzdGFuZGFyZCBgdm1fZmxhZ3NfdGAgdG8gYSBuZXcgYHZtYV9mbGFnc190YCB0eXBlLCB3aGljaCwgYmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIGhlbHBlciBmdW5jdGlvbnMgbGlrZSBgdm1hX2ZsYWdzX3Rlc3RgIGFuZCByZWxhdGVkIHN0cnVjdHMvdW5pb25zLCBzZWVtcyB0byBiZSBhIG1vcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZSB0aGFuIGEgc2ltcGxlIGB1bnNpZ25lZCBsb25nYC4gVGhpcyBjaGFuZ2UgdG91Y2hlcyBhIHZhc3QgbnVtYmVyIG9mIGZpbGVzLCBlc3NlbnRpYWxseSByZXBsYWNpbmcgYHZtYS0mZ3Q7dm1fZmxhZ3NgIHdpdGggYHZtYS0mZ3Q7ZmxhZ3NgIGFjcm9zcyB0aGUgYm9hcmQgYW5kIGludHJvZHVjaW5nIHNldmVyYWwgbmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIGZsYWcgbWFuaXB1bGF0aW9uLiBDcnVjaWFsbHksIHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5IGFjcm9zcyB0aGUgYm9hcmQsIHdoaWNoIG1ha2VzIGl0IGEgdmVyeSBoaWdoLXZhbHVlIHRhcmdldCBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgaGVyZSB3aWxsIGJlIG9uIHBpbnBvaW50aW5nIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgbW9zdCBpbXBhY3RlZCBieSB0aGUgcmVmYWN0b3JpbmcsIHBheWluZyBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0byB0aG9zZSByZWxhdGVkIHRvIGBkb19tbWFwYCwgYG1tYXBfcmVnaW9uYCwgYG1sb2NrYCwgYG1wcm90ZWN0YCwgYW5kIGBtcmVtYXBgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBmdXp6aW5nIHRhcmdldHMgYXJlIHJlcHJlc2VudGF0aXZlIGFuZCB0aGF0IEkgZG9uJiMzOTt0IG92ZXJsb29rIGNyaXRpY2FsIHBhdGhzLiBTaW5jZSBpdCYjMzk7cyBhIGhvdC1wYXRoIGZ1bmN0aW9uIGxpc3QsIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIHRvb2wgYXV0aG9yLiBUaGUgcHJvbXB0IHdhbnRzIG1lIHRvIGF2b2lkIGhvdCBwYXRoIGZ1bmN0aW9ucy4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBjaGFuZ2VzIHdpdGhpbiBzcGVjaWZpYyBmaWxlcyBhbmQgZnVuY3Rpb25zOgoKKiAgICoqYG1tL21tYXAuY2AqKjogV2UgbmVlZCB0byBleGFtaW5lIGBtbWFwX3JlZ2lvbmAuCiogICAqKmBtbS9tcHJvdGVjdC5jYCoqOiBJbnZlc3RpZ2F0ZSBgbXByb3RlY3RfZml4dXBgIGFuZCBgZG9fbXByb3RlY3RfcGtleWAuCiogICAqKmBtbS9tcmVtYXAuY2AqKjogTG9vayBhdCBgdnJtX2NhbGNfY2hhcmdlYCwgYHVubWFwX3NvdXJjZV92bWFgLCBgY2hlY2tfcHJlcF92bWFgLgoqICAgKipgbW0vbWxvY2suY2AqKjogQ2hlY2sgYG1sb2NrX2ZpeHVwYCwgYGFwcGx5X3ZtYV9sb2NrX2ZsYWdzYCwgYGFwcGx5X21sb2NrYWxsX2ZsYWdzYC4KKiAgICoqYG1tL3ZtYS5jYCoqOiBWZXJpZnkgdGhlIG1vZGlmaWNhdGlvbnMgaW4gYG1tYXBfcmVnaW9uYC4KKiAgICoqYG1tL3ZtYV9leGVjLmNgKio6IENvbmZpcm0gdGhlIGNoYW5nZXMgaW4gYGNyZWF0ZV9pbml0X3N0YWNrX3ZtYWAuCiogICAqKmBtbS9odWdlX21lbW9yeS5jYCoqOiBDaGVjayBgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzYC4KKiAgICoqYG1tL21lbWZkLmNgKio6IENoZWNrIGBtZW1mZF9jaGVja19zZWFsc19tbWFwYC4KCkdpdmVuIHRoYXQgYGRvX21tYXBgIGFuZCBgbW1hcF9yZWdpb25gIGFyZSBob3QgcGF0aHMsIEkgbmVlZCB0byBmb2N1cyBvbiBsZXNzIGdlbmVyaWMgZW50cnlwb2ludHMuIEZ1bmN0aW9ucyBsaWtlIGBtbG9ja19maXh1cGAsIGBhcHBseV92bWFfbG9ja19mbGFnc2AsIGBhcHBseV9tbG9ja2FsbF9mbGFnc2AsIGB1bm1hcF9zb3VyY2Vfdm1hYCwgYGNoZWNrX3ByZXBfdm1hYCwgYGNyZWF0ZV9pbml0X3N0YWNrX3ZtYWAsIGFuZCBgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcGAgc2hvdWxkIGJlIGxlc3MgZnJlcXVlbnQgYW5kIGNhbiBzdGlsbCBiZSBmdXp6ZWQgZWZmZWN0aXZlbHkuIEkgd2lsbCBhbHNvIGluY2x1ZGUgYGRvX21wcm90ZWN0X3BrZXlgIHNpbmNlIHRoZSBlbnRyeSBwb2ludCB3YXMgbW9kaWZpZWQuCgpUaGVyZSBkb24mIzM5O3Qgc2VlbSB0byBiZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgbmVlZGVkIHNpbmNlIHRoaXMgaXMgYSBjb3JlIE1NIGNoYW5nZS4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgZm9yIGB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3NgIGFuZCBgQ09ORklHX01FTUZEX0NSRUFURWAgZm9yIGBtZW1mZF9jaGVja19zZWFsc19tbWFwYCBhcmUgcmVsYXRlZCBidXQgbGlrZWx5IHRvIGFscmVhZHkgYmUgZW5hYmxlZCBieSBkZWZhdWx0LgoKVGh1cywgbXkgcHJvcG9zZWQgYHNldC1yZXN1bHRzYCBjYWxsIHdpbGwgaGF2ZToKCiogICBgV29ydGhGdXp6aW5nOiB0cnVlYAoqICAgYEZvY3VzU3ltYm9sc2A6CiAgICAqICAgYG1sb2NrX2ZpeHVwYAogICAgKiAgIGBhcHBseV92bWFfbG9ja19mbGFnc2AKICAgICogICBgYXBwbHlfbWxvY2thbGxfZmxhZ3NgCiAgICAqICAgYHVubWFwX3NvdXJjZV92bWFgCiAgICAqICAgYGNoZWNrX3ByZXBfdm1hYAogICAgKiAgIGBtZW1mZF9jaGVja19zZWFsc19tbWFwYAogICAgKiAgIGBjcmVhdGVfaW5pdF9zdGFja192bWFgCiAgICAqICAgYHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFnc2AKICAgICogICBgZG9fbXByb3RlY3RfcGtleWAKKiAgIGBFbmFibGVDb25maWdzYDogYFtdYAoKSSBoYXZlIGFsc28gdmVyaWZpZWQgdGhhdCBtb3N0IG9mIHRoZSBsaXN0ZWQgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIGJ1dCBTeXprYWxsZXIgY2FuIHN0aWxsIGZ1enogc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5IGFyZSBpbiB0aGUgc3ltYm9sIHRhYmxlICh3aGljaCB0aGV5IGFyZSkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21sb2NrX2ZpeHVwJiMzNDssCiAgICAmIzM0O2FwcGx5X3ZtYV9sb2NrX2ZsYWdzJiMzNDssCiAgICAmIzM0O2FwcGx5X21sb2NrYWxsX2ZsYWdzJiMzNDssCiAgICAmIzM0O3VubWFwX3NvdXJjZV92bWEmIzM0OywKICAgICYjMzQ7Y2hlY2tfcHJlcF92bWEmIzM0OywKICAgICYjMzQ7bWVtZmRfY2hlY2tfc2VhbHNfbW1hcCYjMzQ7LAogICAgJiMzNDtjcmVhdGVfaW5pdF9zdGFja192bWEmIzM0OywKICAgICYjMzQ7dGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtYWpvciByZWZhY3RvcmluZyBvZiBWTUEgZmxhZ3MgaGFuZGxpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCB0cmFuc2l0aW9uaW5nIGZyb20gYHZtX2ZsYWdzX3RgIHRvIGB2bWFfZmxhZ3NfdGAuIEl0IG1vZGlmaWVzIGNyaXRpY2FsIHBhdGhzIGluIG1tYXAsIG1yZW1hcCwgbWxvY2ssIGFuZCBtcHJvdGVjdC4gVGhlc2UgY2hhbmdlcyBmdW5jdGlvbmFsbHkgYWx0ZXIgaG93IFZNQSBmbGFncyBhcmUgc2V0LCBjbGVhcmVkLCBhbmQgdGVzdGVkLCB3aGljaCBjb3VsZCBpbnRyb2R1Y2UgYnVncyBsaWtlIGluY29ycmVjdCBtZW1vcnkgcHJvdGVjdGlvbnMsIGFjY291bnRpbmcgZXJyb3JzLCBvciBsb2NraW5nIGlzc3Vlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGVzZSBmbGFncywgYXZvaWRpbmcgdGhlIGFic29sdXRlIGhvdHRlc3QgcGF0aHMgbGlrZSBgZG9fbW1hcGAgdG8gcHJldmVudCBza2V3ZWQgZGlzdHJpYnV0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttbG9ja19maXh1cCYjMzQ7LAogICAgJiMzNDthcHBseV92bWFfbG9ja19mbGFncyYjMzQ7LAogICAgJiMzNDthcHBseV9tbG9ja2FsbF9mbGFncyYjMzQ7LAogICAgJiMzNDt1bm1hcF9zb3VyY2Vfdm1hJiMzNDssCiAgICAmIzM0O2NoZWNrX3ByZXBfdm1hJiMzNDssCiAgICAmIzM0O21lbWZkX2NoZWNrX3NlYWxzX21tYXAmIzM0OywKICAgICYjMzQ7Y3JlYXRlX2luaXRfc3RhY2tfdm1hJiMzNDssCiAgICAmIzM0O3RocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWFqb3IgcmVmYWN0b3Jpbmcgb2YgVk1BIGZsYWdzIGhhbmRsaW5nIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgdHJhbnNpdGlvbmluZyBmcm9tIGB2bV9mbGFnc190YCB0byBgdm1hX2ZsYWdzX3RgLiBJdCBtb2RpZmllcyBjcml0aWNhbCBwYXRocyBpbiBtbWFwLCBtcmVtYXAsIG1sb2NrLCBhbmQgbXByb3RlY3QuIFRoZXNlIGNoYW5nZXMgZnVuY3Rpb25hbGx5IGFsdGVyIGhvdyBWTUEgZmxhZ3MgYXJlIHNldCwgY2xlYXJlZCwgYW5kIHRlc3RlZCwgd2hpY2ggY291bGQgaW50cm9kdWNlIGJ1Z3MgbGlrZSBpbmNvcnJlY3QgbWVtb3J5IHByb3RlY3Rpb25zLCBhY2NvdW50aW5nIGVycm9ycywgb3IgbG9ja2luZyBpc3N1ZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlc2UgZmxhZ3MsIGF2b2lkaW5nIHRoZSBhYnNvbHV0ZSBob3R0ZXN0IHBhdGhzIGxpa2UgYGRvX21tYXBgIHRvIHByZXZlbnQgc2tld2VkIGRpc3RyaWJ1dGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMDoxNDozNy4xMzAwMzMyNDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc3NTA5MDI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtbG9ja19maXh1cFwiLFxuICAgIFwiYXBwbHlfdm1hX2xvY2tfZmxhZ3NcIixcbiAgICBcImFwcGx5X21sb2NrYWxsX2ZsYWdzXCIsXG4gICAgXCJ1bm1hcF9zb3VyY2Vfdm1hXCIsXG4gICAgXCJjaGVja19wcmVwX3ZtYVwiLFxuICAgIFwibWVtZmRfY2hlY2tfc2VhbHNfbW1hcFwiLFxuICAgIFwiY3JlYXRlX2luaXRfc3RhY2tfdm1hXCIsXG4gICAgXCJ0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWFqb3IgcmVmYWN0b3Jpbmcgb2YgVk1BIGZsYWdzIGhhbmRsaW5nIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgdHJhbnNpdGlvbmluZyBmcm9tIGB2bV9mbGFnc190YCB0byBgdm1hX2ZsYWdzX3RgLiBJdCBtb2RpZmllcyBjcml0aWNhbCBwYXRocyBpbiBtbWFwLCBtcmVtYXAsIG1sb2NrLCBhbmQgbXByb3RlY3QuIFRoZXNlIGNoYW5nZXMgZnVuY3Rpb25hbGx5IGFsdGVyIGhvdyBWTUEgZmxhZ3MgYXJlIHNldCwgY2xlYXJlZCwgYW5kIHRlc3RlZCwgd2hpY2ggY291bGQgaW50cm9kdWNlIGJ1Z3MgbGlrZSBpbmNvcnJlY3QgbWVtb3J5IHByb3RlY3Rpb25zLCBhY2NvdW50aW5nIGVycm9ycywgb3IgbG9ja2luZyBpc3N1ZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlc2UgZmxhZ3MsIGF2b2lkaW5nIHRoZSBhYnNvbHV0ZSBob3R0ZXN0IHBhdGhzIGxpa2UgYGRvX21tYXBgIHRvIHByZXZlbnQgc2tld2VkIGRpc3RyaWJ1dGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEwOjE0OjM3LjEzMDAzODM0OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4NjI4NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2U4ZGUyYmQxMTlkZTczZDk0NjhkYTRlZjdlMzlkOGU4NDc5NGNhZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAxMiAxMDoxNDozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3Zkc28uYyBiL2FyY2gvbWlwcy9rZXJuZWwvdmRzby5jXFxuaW5kZXggYmQxZmMxN2QzOTc1ZGMuLjk0ODczNzc1ZmMwZjQ1IDEwMDY0NFxcbi0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdmRzby5jXFxuKysrIGIvYXJjaC9taXBzL2tlcm5lbC92ZHNvLmNcXG5AQCAtOTEsOCArOTEsOCBAQCBpbnQgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIGludCB1c2VzX2ludGVycClcXG4gXFxuIFxcdFxcdC8qIE1hcCBkZWxheSBzbG90IGVtdWxhdGlvbiBwYWdlICovXFxuIFxcdFxcdGJhc2UgPSBkb19tbWFwKE5VTEwsIFNUQUNLX1RPUCwgUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX0VYRUMsXFxuLVxcdFxcdFxcdCAgICAgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUgfCBNQVBfRklYRUQsIDAsIDAsIFxcdTAwMjZ1bnVzZWQsXFxuLVxcdFxcdFxcdCAgICAgICBOVUxMKTtcXG4rXFx0XFx0XFx0ICAgICAgIE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSB8IE1BUF9GSVhFRCxcXG4rXFx0XFx0XFx0ICAgICAgIEVNUFRZX1ZNQV9GTEFHUywgMCwgXFx1MDAyNnVudXNlZCwgTlVMTCk7XFxuIFxcdFxcdGlmIChJU19FUlJfVkFMVUUoYmFzZSkpIHtcXG4gXFx0XFx0XFx0cmV0ID0gYmFzZTtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jIGIvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmNcXG5pbmRleCAyOGJlYzViYzc4Nzk0OS4uODIxMjdlMzFkY2E2ZGUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmNcXG4rKysgYi9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuY1xcbkBAIC02NTksNyArNjU5LDggQEAgdW5zaWduZWQgbG9uZyBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHR1bnNpZ25lZCBpbnQgcHNpemU7XFxuIFxcbiBcXHRpZiAocmFkaXhfZW5hYmxlZCgpKVxcbi1cXHRcXHRyZXR1cm4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywgdm1fZmxhZ3MpO1xcbitcXHRcXHRyZXR1cm4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3MpKTtcXG4gXFxuIFxcdGlmIChmaWxwIFxcdTAwMjZcXHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxcbiBcXHRcXHRwc2l6ZSA9IGZpbGVfdG9fcHNpemUoZmlscCk7XFxuQEAgLTY3OSw3ICs2ODAsOCBAQCB1bnNpZ25lZCBsb25nIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0dW5zaWduZWQgaW50IHBzaXplO1xcbiBcXG4gXFx0aWYgKHJhZGl4X2VuYWJsZWQoKSlcXG4tXFx0XFx0cmV0dXJuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihmaWxwLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcXG4rXFx0XFx0cmV0dXJuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihmaWxwLCBhZGRyMCwgbGVuLFxcbitcXHRcXHRcXHRcXHRwZ29mZiwgZmxhZ3MsIGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3MpKTtcXG4gXFxuIFxcdGlmIChmaWxwIFxcdTAwMjZcXHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxcbiBcXHRcXHRwc2l6ZSA9IGZpbGVfdG9fcHNpemUoZmlscCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jXFxuaW5kZXggZTNlZDY4NGRkY2YyOTEuLjMyYTA1ZDg4OWI5YTJiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jXFxuQEAgLTEyNTIsNyArMTI1Miw3IEBAIGludCBkcm1fZ2VtX21tYXBfb2JqKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1bnNpZ25lZCBsb25nIG9ial9zaXplLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHR2bV9mbGFnc19zZXQodm1hLCBWTV9JTyB8IFZNX1BGTk1BUCB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XFxuLVxcdFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS1cXHUwMDNldm1fZmxhZ3MpKTtcXG4rXFx0XFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xcbiBcXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QpO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9kbWFfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9kbWFfaGVscGVyLmNcXG5pbmRleCAxYzAwYTcxYWIzYzlkMC4uN2Q5NjEyMDc1ZDMxMGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZG1hX2hlbHBlci5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZG1hX2hlbHBlci5jXFxuQEAgLTU0MCw3ICs1NDAsNyBAQCBpbnQgZHJtX2dlbV9kbWFfbW1hcChzdHJ1Y3QgZHJtX2dlbV9kbWFfb2JqZWN0ICpkbWFfb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKlxcbiBcXHR2bV9mbGFnc19tb2Qodm1hLCBWTV9ET05URFVNUCB8IFZNX0RPTlRFWFBBTkQsIFZNX1BGTk1BUCk7XFxuIFxcbiBcXHRpZiAoZG1hX29iai1cXHUwMDNlbWFwX25vbmNvaGVyZW50KSB7XFxuLVxcdFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG4rXFx0XFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xcbiBcXG4gXFx0XFx0cmV0ID0gZG1hX21tYXBfcGFnZXMoZHJtX2Rldl9kbWFfZGV2KGRtYV9vYmotXFx1MDAzZWJhc2UuZGV2KSxcXG4gXFx0XFx0XFx0XFx0ICAgICB2bWEsIHZtYS1cXHUwMDNldm1fZW5kIC0gdm1hLVxcdTAwM2V2bV9zdGFydCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuY1xcbmluZGV4IGM5ODk0NTllYjIxNTkxLi4wNmQwMTlkNTFkM2U2YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jXFxuQEAgLTc2NCw3ICs3NjQsNyBAQCBpbnQgZHJtX2dlbV9zaG1lbV9tbWFwKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdFxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fUEZOTUFQIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QKTtcXG4tXFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cXHUwMDNldm1fZmxhZ3MpO1xcbitcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XFxuIFxcdGlmIChzaG1lbS1cXHUwMDNlbWFwX3djKVxcbiBcXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmNcXG5pbmRleCAyZTRkNmQxMTdlZTJkOC4uZjljOGI3YjJiZmM3YWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmNcXG5AQCAtMTMzLDcgKzEzMyw3IEBAIHN0YXRpYyBpbnQgZXRuYXZpdl9nZW1fbW1hcF9vYmooc3RydWN0IGV0bmF2aXZfZ2VtX29iamVjdCAqZXRuYXZpdl9vYmosXFxuIFxcbiBcXHR2bV9mbGFnc19zZXQodm1hLCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xcbiBcXG4tXFx0dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG4rXFx0dm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcXG4gXFxuIFxcdGlmIChldG5hdml2X29iai1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBFVE5BX0JPX1dDKSB7XFxuIFxcdFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bV9wYWdlX3Byb3QpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZ2VtLmNcXG5pbmRleCA5YTYyNzBmM2RjYTZiZi4uMDIwOGM5MjU5NTcyNWMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dlbS5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dlbS5jXFxuQEAgLTM3NywxMyArMzc3LDEzIEBAIHN0YXRpYyBpbnQgZXh5bm9zX2RybV9nZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0XFxuIFxcbiBcXHQvKiBub24tY2FjaGFibGUgYXMgZGVmYXVsdC4gKi9cXG4gXFx0aWYgKGV4eW5vc19nZW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgRVhZTk9TX0JPX0NBQ0hBQkxFKVxcbi1cXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncyk7XFxuK1xcdFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcXG4gXFx0ZWxzZSBpZiAoZXh5bm9zX2dlbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBFWFlOT1NfQk9fV0MpXFxuIFxcdFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID1cXG4tXFx0XFx0XFx0cGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS1cXHUwMDNldm1fZmxhZ3MpKTtcXG4rXFx0XFx0XFx0cGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9XFxuLVxcdFxcdFxcdHBncHJvdF9ub25jYWNoZWQodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKSk7XFxuK1xcdFxcdFxcdHBncHJvdF9ub25jYWNoZWQodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XFxuIFxcbiBcXHRyZXQgPSBleHlub3NfZHJtX2dlbV9tbWFwX2J1ZmZlcihleHlub3NfZ2VtLCB2bWEpO1xcbiBcXHRpZiAocmV0KVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uY1xcbmluZGV4IDA2NDRmODVjNmM4ZTUyLi45Y2E5MGMxYmI1YjQyMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uY1xcbkBAIC0xMTIsNyArMTEyLDcgQEAgaTkxNV9nZW1fbW1hcF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLFxcbiBcXHRcXHR2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7XFxuIFxcdFxcdGlmICh2bWEgXFx1MDAyNlxcdTAwMjYgX192bWFfbWF0Y2hlcyh2bWEsIG9iai1cXHUwMDNlYmFzZS5maWxwLCBhZGRyLCBhcmdzLVxcdTAwM2VzaXplKSlcXG4gXFx0XFx0XFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPVxcbi1cXHRcXHRcXHRcXHRwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncykpO1xcbitcXHRcXHRcXHRcXHRwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGFkZHIgPSAtRU5PTUVNO1xcbiBcXHRcXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XFxuQEAgLTEwMjQsNyArMTAyNCw3IEBAIGk5MTVfZ2VtX29iamVjdF9tbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosXFxuIFxcdGZwdXQoYW5vbik7XFxuIFxcbiBcXHRpZiAob2JqLVxcdTAwM2VvcHMtXFx1MDAzZW1tYXBfb3BzKSB7XFxuLVxcdFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bV9nZXRfcGFnZV9wcm90KHZtYS1cXHUwMDNldm1fZmxhZ3MpKTtcXG4rXFx0XFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xcbiBcXHRcXHR2bWEtXFx1MDAzZXZtX29wcyA9IG9iai1cXHUwMDNlb3BzLVxcdTAwM2VtbWFwX29wcztcXG4gXFx0XFx0dm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBvYmotXFx1MDAzZWJhc2Uudm1hX25vZGUuZHJpdmVyX3ByaXZhdGU7XFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xMDM1LDcgKzEwMzUsNyBAQCBpOTE1X2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLFxcbiBcXHRzd2l0Y2ggKG1tby1cXHUwMDNlbW1hcF90eXBlKSB7XFxuIFxcdGNhc2UgSTkxNV9NTUFQX1RZUEVfV0M6XFxuIFxcdFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID1cXG4tXFx0XFx0XFx0cGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS1cXHUwMDNldm1fZmxhZ3MpKTtcXG4rXFx0XFx0XFx0cGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcXG4gXFx0XFx0dm1hLVxcdTAwM2V2bV9vcHMgPSBcXHUwMDI2dm1fb3BzX2NwdTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbkBAIC0xMDQzLDE5ICsxMDQzLDE5IEBAIGk5MTVfZ2VtX29iamVjdF9tbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosXFxuIFxcdFxcdEdFTV9XQVJOX09OKDEpO1xcbiBcXHRcXHRmYWxsdGhyb3VnaDtcXG4gXFx0Y2FzZSBJOTE1X01NQVBfVFlQRV9XQjpcXG4tXFx0XFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cXHUwMDNldm1fZmxhZ3MpO1xcbitcXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XFxuIFxcdFxcdHZtYS1cXHUwMDNldm1fb3BzID0gXFx1MDAyNnZtX29wc19jcHU7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0Y2FzZSBJOTE1X01NQVBfVFlQRV9VQzpcXG4gXFx0XFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPVxcbi1cXHRcXHRcXHRwZ3Byb3Rfbm9uY2FjaGVkKHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncykpO1xcbitcXHRcXHRcXHRwZ3Byb3Rfbm9uY2FjaGVkKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xcbiBcXHRcXHR2bWEtXFx1MDAzZXZtX29wcyA9IFxcdTAwMjZ2bV9vcHNfY3B1O1xcbiBcXHRcXHRicmVhaztcXG4gXFxuIFxcdGNhc2UgSTkxNV9NTUFQX1RZUEVfR1RUOlxcbiBcXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9XFxuLVxcdFxcdFxcdHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKSk7XFxuK1xcdFxcdFxcdHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XFxuIFxcdFxcdHZtYS1cXHUwMDNldm1fb3BzID0gXFx1MDAyNnZtX29wc19ndHQ7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmNcXG5pbmRleCBjYmY3MjNhNWQ4NmZhOS4uNmE3OGUyNDJkZTdjNmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uY1xcbkBAIC0xMTI1LDcgKzExMjUsNyBAQCBzdGF0aWMgaW50IG1zbV9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdFxcbiBcXHRzdHJ1Y3QgbXNtX2dlbV9vYmplY3QgKm1zbV9vYmogPSB0b19tc21fYm8ob2JqKTtcXG4gXFxuIFxcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX1BGTk1BUCB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XFxuLVxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gbXNtX2dlbV9wZ3Byb3QobXNtX29iaiwgdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKSk7XFxuK1xcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gbXNtX2dlbV9wZ3Byb3QobXNtX29iaiwgdm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uY1xcbmluZGV4IDIwZGJhMDJkNjE3NWJjLi45YTZlZTJlODgwYzBhZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uY1xcbkBAIC01NSw3ICs1NSw3IEBAIHN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfdHRtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiBcXHRcXHRnb3RvIGVycm9yX3VubG9jaztcXG4gXFxuIFxcdG5vdXZlYXVfYm9fZGVsX2lvX3Jlc2VydmVfbHJ1KGJvKTtcXG4tXFx0cHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncyk7XFxuK1xcdHByb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xcbiBcXHRyZXQgPSB0dG1fYm9fdm1fZmF1bHRfcmVzZXJ2ZWQodm1mLCBwcm90LCBUVE1fQk9fVk1fTlVNX1BSRUZBVUxUKTtcXG4gXFx0bm91dmVhdV9ib19hZGRfaW9fcmVzZXJ2ZV9scnUoYm8pO1xcbiBcXHRpZiAocmV0ID09IFZNX0ZBVUxUX1JFVFJZIFxcdTAwMjZcXHUwMDI2ICEodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUKSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYmRldi5jXFxuaW5kZXggY2EzZmIxODZiZjE5NTQuLjQ4ODE3Nzc2NDJkMjk2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZmJkZXYuY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZmJkZXYuY1xcbkBAIC04NCw3ICs4NCw3IEBAIHN0YXRpYyBpbnQgb21hcF9mYmRldl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm9cXG4gXFxuIHN0YXRpYyBpbnQgb21hcF9mYmRldl9mYl9tbWFwKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4ge1xcbi1cXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKSk7XFxuK1xcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcXG4gXFxuIFxcdHJldHVybiBmYl9kZWZlcnJlZF9pb19tbWFwKGluZm8sIHZtYSk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZ2VtLmNcXG5pbmRleCAwMDQwNGZiNmMyOWFhZS4uZmIwZTZmNTU2YjMxNDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9nZW0uY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZ2VtLmNcXG5AQCAtNTM4LDkgKzUzOCw5IEBAIHN0YXRpYyBpbnQgb21hcF9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjXFxuIFxcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCB8IFZNX0lPIHwgVk1fTUlYRURNQVApO1xcbiBcXG4gXFx0aWYgKG9tYXBfb2JqLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9NQVBfQk9fV0MpIHtcXG4tXFx0XFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncykpO1xcbitcXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XFxuIFxcdH0gZWxzZSBpZiAob21hcF9vYmotXFx1MDAzZWZsYWdzIFxcdTAwMjYgT01BUF9CT19VTkNBQ0hFRCkge1xcbi1cXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKSk7XFxuK1xcdFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogV2UgZG8gaGF2ZSBzb21lIHByaXZhdGUgb2JqZWN0cywgYXQgbGVhc3QgZm9yIHNjYW5vdXQgYnVmZmVyc1xcbkBAIC01NTgsNyArNTU4LDcgQEAgc3RhdGljIGludCBvbWFwX2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWNcXG4gXFx0XFx0dm1hLVxcdTAwM2V2bV9wZ29mZiAtPSBkcm1fdm1hX25vZGVfc3RhcnQoXFx1MDAyNm9iai1cXHUwMDNldm1hX25vZGUpO1xcbiBcXHRcXHR2bWFfc2V0X2ZpbGUodm1hLCBvYmotXFx1MDAzZWZpbHApO1xcbiBcXG4tXFx0XFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cXHUwMDNldm1fZmxhZ3MpO1xcbitcXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XFxuIFxcdH1cXG4gXFxuIFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXFxuaW5kZXggYTFlMmViMWNhN2JiZTYuLjc3MDU1NjM1Mzk2ODcwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXFxuQEAgLTc3Niw3ICs3NzYsNyBAQCBzdGF0aWMgaW50IHBhbnRob3JfZ2VtX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdlxcbiBcXHR9XFxuIFxcbiBcXHR2bV9mbGFnc19zZXQodm1hLCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xcbi1cXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncyk7XFxuK1xcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcXG4gXFx0aWYgKHNob3VsZF9tYXBfd2MoYm8pKVxcbiBcXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmNcXG5pbmRleCBiMTg4NTM5ZGNhMGIyNS4uOWExZGM5ZjEyMDcyOWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmNcXG5AQCAtMjU1LDcgKzI1NSw3IEBAIHN0YXRpYyBpbnQgcm9ja2NoaXBfZHJtX2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaixcXG4gXFx0ICovXFxuIFxcdHZtX2ZsYWdzX21vZCh2bWEsIFZNX0lPIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QLCBWTV9QRk5NQVApO1xcbiBcXG4tXFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncykpO1xcbitcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XFxuIFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCk7XFxuIFxcbiBcXHRpZiAocmtfb2JqLVxcdTAwM2VwYWdlcylcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jXFxuaW5kZXggMWQ4ZDI3YTVlYTg5YjguLmY3NmFmNzMzZWE3OTM5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uY1xcbkBAIC02MDIsNyArNjAyLDcgQEAgaW50IF9fdGVncmFfZ2VtX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBcXG4gXFx0XFx0dm1hLVxcdTAwM2V2bV9wZ29mZiA9IHZtX3Bnb2ZmO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRwZ3Byb3RfdCBwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG4rXFx0XFx0cGdwcm90X3QgcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XFxuIFxcbiBcXHRcXHR2bV9mbGFnc19tb2Qodm1hLCBWTV9NSVhFRE1BUCwgVk1fUEZOTUFQKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV92cmFtLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdnJhbS5jXFxuaW5kZXggNGFlM2NiYzM1ZGQzNjQuLjU0NGE2YWJkZGJjOGI2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV92cmFtLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdnJhbS5jXFxuQEAgLTU1LDcgKzU1LDcgQEAgc3RhdGljIGludCB2aXJ0aW9fZ3B1X3ZyYW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaixcXG4gXFxuIFxcdHZtYS1cXHUwMDNldm1fcGdvZmYgLT0gZHJtX3ZtYV9ub2RlX3N0YXJ0KFxcdTAwMjZvYmotXFx1MDAzZXZtYV9ub2RlKTtcXG4gXFx0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fTUlYRURNQVAgfCBWTV9ET05URVhQQU5EKTtcXG4tXFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cXHUwMDNldm1fZmxhZ3MpO1xcbitcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XFxuIFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCk7XFxuIFxcdHZtYS1cXHUwMDNldm1fb3BzID0gXFx1MDAyNnZpcnRpb19ncHVfdnJhbV92bV9vcHM7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9wYWdlX2RpcnR5LmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9wYWdlX2RpcnR5LmNcXG5pbmRleCA0NTU2MWJjMWM5ZWZmZS4uYTlmZDQwMTVhMGNhYTcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcGFnZV9kaXJ0eS5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcGFnZV9kaXJ0eS5jXFxuQEAgLTQ4MSw3ICs0ODEsNyBAQCB2bV9mYXVsdF90IHZtd19ib192bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0aWYgKHZiby1cXHUwMDNlZGlydHkgXFx1MDAyNlxcdTAwMjYgdmJvLVxcdTAwM2VkaXJ0eS1cXHUwMDNlbWV0aG9kID09IFZNV19CT19ESVJUWV9NS1dSSVRFKVxcbiBcXHRcXHRwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgflZNX1NIQVJFRCk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0cHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncyk7XFxuK1xcdFxcdHByb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xcbiBcXG4gXFx0cmV0ID0gdHRtX2JvX3ZtX2ZhdWx0X3Jlc2VydmVkKHZtZiwgcHJvdCwgbnVtX3ByZWZhdWx0KTtcXG4gXFx0aWYgKHJldCA9PSBWTV9GQVVMVF9SRVRSWSBcXHUwMDI2XFx1MDAyNiAhKHZtZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVCkpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuY1xcbmluZGV4IGFiZTI1YWVkZWVhZGVmLi44Mzg3OTdjYzY1ZDc5MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmNcXG5AQCAtMjgxLDcgKzI4MSw3IEBAIHN0YXRpYyB2bV9mYXVsdF90IGJhcnJpZXJfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdHBncHJvdF90IHByb3Q7XFxuIFxcdGludCBpZHg7XFxuIFxcbi1cXHRwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG4rXFx0cHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XFxuIFxcbiBcXHRpZiAoZHJtX2Rldl9lbnRlcihkZXYsIFxcdTAwMjZpZHgpKSB7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfbW1pb19nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9tbWlvX2dlbS5jXFxuaW5kZXggOGM4MDNlZjIzM2NjNGQuLjM3NDFhZTYwZjUzMmJmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9tbWlvX2dlbS5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX21taW9fZ2VtLmNcXG5AQCAtMTQ5LDcgKzE0OSw3IEBAIHN0YXRpYyBpbnQgeGVfbW1pb19nZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJhc2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqXFxuIFxcbiBcXHQvKiBTZXQgdm1fcGdvZmYgKHVzZWQgYXMgYSBmYWtlIGJ1ZmZlciBvZmZzZXQgYnkgRFJNKSB0byAwICovXFxuIFxcdHZtYS1cXHUwMDNldm1fcGdvZmYgPSAwO1xcbi1cXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKSk7XFxuK1xcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcXG4gXFx0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fSU8gfCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVAgfFxcbiBcXHRcXHQgICAgIFZNX0RPTlRDT1BZIHwgVk1fTk9SRVNFUlZFKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uY1xcbmluZGV4IGVlYzRjMWRhM2Y5ZTMxLi5kZDE1ODQ0M2Y1NWYxMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmNcXG5AQCAtODAsNyArODAsNyBAQCBzdGF0aWMgaW50IHhlbl9kcm1fZnJvbnRfZ2VtX29iamVjdF9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaixcXG4gXFx0ICogd2hpY2ggaXMgbWFwcGVkIGFzIE5vcm1hbCBJbm5lciBXcml0ZS1CYWNrIE91dGVyIFdyaXRlLUJhY2tcXG4gXFx0ICogSW5uZXItU2hhcmVhYmxlLlxcbiBcXHQgKi9cXG4tXFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cXHUwMDNldm1fZmxhZ3MpO1xcbitcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiB2bV9vcGVyYXRpb25zX3N0cnVjdC5mYXVsdCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGlmIENQVSBhY2Nlc3NcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiX2lvX2ZvcHMuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYl9pb19mb3BzLmNcXG5pbmRleCA2YWI2MGZjZDAwNTAxNC4uNmQwYThjOGUxNDFhMjIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiX2lvX2ZvcHMuY1xcbisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYl9pb19mb3BzLmNcXG5AQCAtMTYxLDcgKzE2MSw3IEBAIGludCBmYl9pb19tbWFwKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0XFx0bGVuID0gaW5mby1cXHUwMDNlZml4Lm1taW9fbGVuO1xcbiBcXHR9XFxuIFxcbi1cXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncyk7XFxuK1xcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcXG4gXFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZnJhbWVidWZmZXIodm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QsIHZtYS1cXHUwMDNldm1fc3RhcnQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICB2bWEtXFx1MDAzZXZtX2VuZCwgc3RhcnQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uY1xcbmluZGV4IGY1N2ZhMjFhMjUwMzUzLi4zZGU1ODZkYTE5N2JkOSAxMDA2NDRcXG4tLS0gYS9mcy9haW8uY1xcbisrKyBiL2ZzL2Fpby5jXFxuQEAgLTYwNCw3ICs2MDQsNyBAQCBzdGF0aWMgaW50IGFpb19zZXR1cF9yaW5nKHN0cnVjdCBraW9jdHggKmN0eCwgdW5zaWduZWQgaW50IG5yX2V2ZW50cylcXG4gXFxuIFxcdGN0eC1cXHUwMDNlbW1hcF9iYXNlID0gZG9fbW1hcChjdHgtXFx1MDAzZWFpb19yaW5nX2ZpbGUsIDAsIGN0eC1cXHUwMDNlbW1hcF9zaXplLFxcbiBcXHRcXHRcXHRcXHQgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4tXFx0XFx0XFx0XFx0IE1BUF9TSEFSRUQsIDAsIDAsIFxcdTAwMjZ1bnVzZWQsIE5VTEwpO1xcbitcXHRcXHRcXHRcXHQgTUFQX1NIQVJFRCwgRU1QVFlfVk1BX0ZMQUdTLCAwLCBcXHUwMDI2dW51c2VkLCBOVUxMKTtcXG4gXFx0bW1hcF93cml0ZV91bmxvY2sobW0pO1xcbiBcXHRpZiAoSVNfRVJSKCh2b2lkICopY3R4LVxcdTAwM2VtbWFwX2Jhc2UpKSB7XFxuIFxcdFxcdGN0eC1cXHUwMDNlbW1hcF9zaXplID0gMDtcXG5kaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xcbmluZGV4IDlmZGRkMWUwYjgxM2FiLi40MzA2NmY5ZGRmNTJkMSAxMDA2NDRcXG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xcbisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXFxuQEAgLTE4NCw3ICsxODQsOCBAQCBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdGlmIChhZGRyKVxcbiBcXHRcXHRhZGRyMCA9IEFMSUdOKGFkZHIsIGh1Z2VfcGFnZV9zaXplKGgpKTtcXG4gXFxuLVxcdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XFxuK1xcdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhmaWxlLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgRU1QVFlfVk1BX0ZMQUdTKTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdlX21tLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxcbmluZGV4IGNhZTk3YzMwNzI4MDk3Li45ZTQzZTEzOGMwYjc3NyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXFxuQEAgLTM5MSw5ICszOTEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGhwX2Rpc2FibGVkX2J5X2h3KHZvaWQpXFxuIFxcbiB1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyk7XFxuLXVuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rdW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXFxuLVxcdFxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpO1xcbitcXHRcXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpO1xcbiBcXG4gZW51bSBzcGxpdF90eXBlIHtcXG4gXFx0U1BMSVRfVFlQRV9VTklGT1JNLFxcbkBAIC02MTcsOSArNjE3LDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gI2RlZmluZSB0aHBfZ2V0X3VubWFwcGVkX2FyZWFcXHROVUxMXFxuIFxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG4tdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuLVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuK3RocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuK1xcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1mZC5oIGIvaW5jbHVkZS9saW51eC9tZW1mZC5oXFxuaW5kZXggYjRmZGEwOWRhYjlmNjEuLmMxNTllNDBlM2YzNGEwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtZmQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtZmQuaFxcbkBAIC0xNCw5ICsxNCw5IEBAIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeCk7XFxuICAqIHRvIHNlYWxpbmcsIG9yIDAgb3RoZXJ3aXNlLlxcbiAgKlxcbiAgKiBXZSBhbHNvIHVwZGF0ZSBWTUEgZmxhZ3MgaWYgYXBwcm9wcmlhdGUgYnkgbWFuaXB1bGF0aW5nIHRoZSBWTUEgZmxhZ3MgcG9pbnRlZFxcbi0gKiB0byBieSB2bV9mbGFnc19wdHIuXFxuKyAqIHRvIGJ5IHZtYV9mbGFnc19wdHIuXFxuICAqL1xcbi1pbnQgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3NfcHRyKTtcXG4raW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKTtcXG4gc3RydWN0IGZpbGUgKm1lbWZkX2FsbG9jX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4gaW50IG1lbWZkX2dldF9zZWFscyhzdHJ1Y3QgZmlsZSAqZmlsZSk7XFxuIGludCBtZW1mZF9hZGRfc2VhbHMoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzZWFscyk7XFxuQEAgLTMwLDcgKzMwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXFxuIFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiB9XFxuIHN0YXRpYyBpbmxpbmUgaW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsXFxuLVxcdFxcdFxcdFxcdFxcdCB2bV9mbGFnc190ICp2bV9mbGFnc19wdHIpXFxuK1xcdFxcdFxcdFxcdFxcdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzX3B0cilcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCAzMmJiNzIzZmZiYjkyZC4uNTUwZmI5Mjk1N2QxODkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTQ0Miw4ICs0NDIsMTAgQEAgZW51bSB7XFxuICNkZWZpbmUgVk1fU1RBQ0tcXHRJTklUX1ZNX0ZMQUcoU1RBQ0spXFxuICNpZmRlZiBDT05GSUdfU1RBQ0tfR1JPV1NVUFxcbiAjZGVmaW5lIFZNX1NUQUNLX0VBUkxZXFx0SU5JVF9WTV9GTEFHKFNUQUNLX0VBUkxZKVxcbisjZGVmaW5lIFZNQV9TVEFDS19FQVJMWSBta192bWFfZmxhZ3MoVk1BX1NUQUNLX0VBUkxZX0JJVClcXG4gI2Vsc2VcXG4gI2RlZmluZSBWTV9TVEFDS19FQVJMWVxcdFZNX05PTkVcXG4rI2RlZmluZSBWTUFfU1RBQ0tfRUFSTFkgRU1QVFlfVk1BX0ZMQUdTXFxuICNlbmRpZlxcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1BLRVlTXFxuICNkZWZpbmUgVk1fUEtFWV9TSElGVCAoKF9fZm9yY2UgaW50KVZNQV9ISUdIX0FSQ0hfMF9CSVQpXFxuQEAgLTQ2NSwxNSArNDY3LDE4IEBAIGVudW0ge1xcbiAjaWYgZGVmaW5lZChDT05GSUdfWDg2X1VTRVJfU0hBRE9XX1NUQUNLKSB8fCBkZWZpbmVkKENPTkZJR19BUk02NF9HQ1MpIHx8IFxcXFxcXG4gXFx0ZGVmaW5lZChDT05GSUdfUklTQ1ZfVVNFUl9DRkkpXFxuICNkZWZpbmUgVk1fU0hBRE9XX1NUQUNLXFx0SU5JVF9WTV9GTEFHKFNIQURPV19TVEFDSylcXG4rI2RlZmluZSBWTUFfU0hBRE9XX1NUQUNLIG1rX3ZtYV9mbGFncyhWTUFfU0hBRE9XX1NUQUNLX0JJVClcXG4gI2RlZmluZSBWTUFfU1RBUlRHQVBfRkxBR1MgbWtfdm1hX2ZsYWdzKFZNQV9HUk9XU0RPV05fQklULCBWTUFfU0hBRE9XX1NUQUNLX0JJVClcXG4gI2Vsc2VcXG4gI2RlZmluZSBWTV9TSEFET1dfU1RBQ0tcXHRWTV9OT05FXFxuKyNkZWZpbmUgVk1BX1NIQURPV19TVEFDSyBFTVBUWV9WTUFfRkxBR1NcXG4gI2RlZmluZSBWTUFfU1RBUlRHQVBfRkxBR1MgbWtfdm1hX2ZsYWdzKFZNQV9HUk9XU0RPV05fQklUKVxcbiAjZW5kaWZcXG4gI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KVxcbiAjZGVmaW5lIFZNX1NBT1xcdFxcdElOSVRfVk1fRkxBRyhTQU8pXFxuICNlbGlmIGRlZmluZWQoQ09ORklHX1BBUklTQylcXG4gI2RlZmluZSBWTV9HUk9XU1VQXFx0SU5JVF9WTV9GTEFHKEdST1dTVVApXFxuKyNkZWZpbmUgVk1BX0dST1dTVVBcXHRta192bWFfZmxhZ3MoVk1BX0dST1dTVVBfQklUKVxcbiAjZWxpZiBkZWZpbmVkKENPTkZJR19TUEFSQzY0KVxcbiAjZGVmaW5lIFZNX1NQQVJDX0FESVxcdElOSVRfVk1fRkxBRyhTUEFSQ19BREkpXFxuICNkZWZpbmUgVk1fQVJDSF9DTEVBUlxcdElOSVRfVk1fRkxBRyhBUkNIX0NMRUFSKVxcbkBAIC00ODUsNiArNDkwLDcgQEAgZW51bSB7XFxuICNlbmRpZlxcbiAjaWZuZGVmIFZNX0dST1dTVVBcXG4gI2RlZmluZSBWTV9HUk9XU1VQXFx0Vk1fTk9ORVxcbisjZGVmaW5lIFZNQV9HUk9XU1VQXFx0RU1QVFlfVk1BX0ZMQUdTXFxuICNlbmRpZlxcbiAjaWZkZWYgQ09ORklHX0FSTTY0X01URVxcbiAjZGVmaW5lIFZNX01URVxcdFxcdElOSVRfVk1fRkxBRyhNVEUpXFxuQEAgLTU0MCw2ICs1NDYsOCBAQCBlbnVtIHtcXG4gXFxuIC8qIEJpdHMgc2V0IGluIHRoZSBWTUEgdW50aWwgdGhlIHN0YWNrIGlzIGluIGl0cyBmaW5hbCBsb2NhdGlvbiAqL1xcbiAjZGVmaW5lIFZNX1NUQUNLX0lOQ09NUExFVEVfU0VUVVAgKFZNX1JBTkRfUkVBRCB8IFZNX1NFUV9SRUFEIHwgVk1fU1RBQ0tfRUFSTFkpXFxuKyNkZWZpbmUgVk1BX1NUQUNLX0lOQ09NUExFVEVfU0VUVVAgYXBwZW5kX3ZtYV9mbGFncyhcXHRcXHRcXFxcXFxuK1xcdFZNQV9TVEFDS19FQVJMWSwgVk1BX1JBTkRfUkVBRF9CSVQsIFZNQV9TRVFfUkVBRF9CSVQpXFxuIFxcbiAjZGVmaW5lIFRBU0tfRVhFQ19CSVQgKChjdXJyZW50LVxcdTAwM2VwZXJzb25hbGl0eSBcXHUwMDI2IFJFQURfSU1QTElFU19FWEVDKSA/IFxcXFxcXG4gXFx0XFx0ICAgICAgIFZNQV9FWEVDX0JJVCA6IFZNQV9SRUFEX0JJVClcXG5AQCAtMTU3OCwxMSArMTU4NiwyNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2luaXRpYWxfc3RhY2soY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIFxcdFxcdHZtYS1cXHUwMDNldm1fZW5kIFxcdTAwM2U9IHZtYS1cXHUwMDNldm1fbW0tXFx1MDAzZXN0YXJ0X3N0YWNrO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX3RlbXBvcmFyeV9zdGFjayhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4rc3RhdGljIGlubGluZSBib29sIHZtYV9mbGFnc19jYW5fZ3Jvdyhjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MpXFxuIHtcXG4tXFx0aW50IG1heWJlX3N0YWNrID0gdm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IChWTV9HUk9XU0RPV04gfCBWTV9HUk9XU1VQKTtcXG4rXFx0aWYgKHZtYV9mbGFnc190ZXN0X3NpbmdsZV9tYXNrKGZsYWdzLCBWTUFfR1JPV1NVUCkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAodm1hX2ZsYWdzX3Rlc3QoZmxhZ3MsIFZNQV9HUk9XU0RPV05fQklUKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB2bWFfY2FuX2dyb3coY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuK3tcXG4rXFx0cmV0dXJuIHZtYV9mbGFnc19jYW5fZ3JvdyhcXHUwMDI2dm1hLVxcdTAwM2VmbGFncyk7XFxuK31cXG4gXFxuLVxcdGlmICghbWF5YmVfc3RhY2spXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfdGVtcG9yYXJ5X3N0YWNrKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbit7XFxuK1xcdGlmICghdm1hX2Nhbl9ncm93KHZtYSkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGlmICgodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1NUQUNLX0lOQ09NUExFVEVfU0VUVVApID09XFxuQEAgLTQxNzQsMTggKzQxOTUsMjAgQEAgdW5zaWduZWQgbG9uZyByYW5kb21pemVfcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHJhbmdlKTtcXG4gXFxuIHVuc2lnbmVkIGxvbmdcXG4gX19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcXG4tXFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpO1xcbitcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyxcXG4rXFx0XFx0ICAgIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG4gZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXFxuIFxcdFxcdCAgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4ge1xcbi1cXHRyZXR1cm4gX19nZXRfdW5tYXBwZWRfYXJlYShmaWxlLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XFxuK1xcdHJldHVybiBfX2dldF91bm1hcHBlZF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICBFTVBUWV9WTUFfRkxBR1MpO1xcbiB9XFxuIFxcbi1leHRlcm4gdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK3Vuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLFxcbi1cXHR2bV9mbGFnc190IHZtX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nICpwb3B1bGF0ZSxcXG4rXFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nICpwb3B1bGF0ZSxcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCAqdWYpO1xcbiBleHRlcm4gaW50IGRvX3ZtaV9tdW5tYXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sIHN0cnVjdCBsaXN0X2hlYWQgKnVmLFxcbkBAIC00NTg0LDI2ICs0NjA3LDM1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByYW5nZV9pbl92bWFfZGVzYyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxcbiAjaWZkZWYgQ09ORklHX01NVVxcbiBwZ3Byb3RfdCB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpO1xcbiBcXG4tc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXFxuK3N0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXFxuIHtcXG4gXFx0Y29uc3Qgdm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKTtcXG4gXFxuIFxcdHJldHVybiB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4re1xcbitcXHRyZXR1cm4gdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWEtXFx1MDAzZWZsYWdzKTtcXG4rfVxcbitcXG4gdm9pZCB2bWFfc2V0X3BhZ2VfcHJvdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFnc190IHZtX2ZsYWdzKVxcbiB7XFxuIFxcdHJldHVybiBfX3BncHJvdCgwKTtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9nZXRfcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcXG4rc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcXG4re1xcbitcXHRyZXR1cm4gX19wZ3Byb3QoMCk7XFxuK31cXG4rc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4ge1xcbiBcXHRyZXR1cm4gX19wZ3Byb3QoMCk7XFxuIH1cXG4gc3RhdGljIGlubGluZSB2b2lkIHZtYV9zZXRfcGFnZV9wcm90KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiB7XFxuLVxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG4rXFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xcbiB9XFxuICNlbmRpZlxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXFxuaW5kZXggOTVkMDA0MGRmNTg0MTMuLjEwYmU4YTU0YjQxNmY5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxcbkBAIC0xOTMsMjEgKzE5MywxOCBAQCB1bnNpZ25lZCBsb25nIG1tX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcbiBcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGZsYWdzKTtcXG4gXFxuLXVuc2lnbmVkIGxvbmcgbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGxlbixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBwZ29mZixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBmbGFncyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdm1fZmxhZ3NfdCB2bV9mbGFncyk7XFxuK3Vuc2lnbmVkIGxvbmcgbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuIFxcbiB1bnNpZ25lZCBsb25nXFxuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcXG4tXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKTtcXG4rXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpO1xcbiB1bnNpZ25lZCBsb25nXFxuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcbi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3BpY2tfbW1hcF9sYXlvdXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcmxpbWl0ICpybGltX3N0YWNrKSB7fVxcbmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmNcXG5pbmRleCBiM2U4YTU4ZTE3N2QzYi4uYmIxYTcyMWEzZTc0NmUgMTAwNjQ0XFxuLS0tIGEvaXBjL3NobS5jXFxuKysrIGIvaXBjL3NobS5jXFxuQEAgLTE2NjEsNyArMTY2MSw4IEBAIGxvbmcgZG9fc2htYXQoaW50IHNobWlkLCBjaGFyIF9fdXNlciAqc2htYWRkciwgaW50IHNobWZsZyxcXG4gXFx0XFx0XFx0Z290byBpbnZhbGlkO1xcbiBcXHR9XFxuIFxcbi1cXHRhZGRyID0gZG9fbW1hcChmaWxlLCBhZGRyLCBzaXplLCBwcm90LCBmbGFncywgMCwgMCwgXFx1MDAyNnBvcHVsYXRlLCBOVUxMKTtcXG4rXFx0YWRkciA9IGRvX21tYXAoZmlsZSwgYWRkciwgc2l6ZSwgcHJvdCwgZmxhZ3MsIEVNUFRZX1ZNQV9GTEFHUywgMCxcXG4rXFx0XFx0ICAgICAgIFxcdTAwMjZwb3B1bGF0ZSwgTlVMTCk7XFxuIFxcdCpyYWRkciA9IGFkZHI7XFxuIFxcdGVyciA9IDA7XFxuIFxcdGlmIChJU19FUlJfVkFMVUUoYWRkcikpXFxuZGlmZiAtLWdpdCBhL21tL2RlYnVnLmMgYi9tbS9kZWJ1Zy5jXFxuaW5kZXggNDk3NjU0YjM2ZjFhYjUuLjlhMDI5N2IzOTg4ZDg5IDEwMDY0NFxcbi0tLSBhL21tL2RlYnVnLmNcXG4rKysgYi9tbS9kZWJ1Zy5jXFxuQEAgLTE5Nyw3ICsxOTcsNyBAQCB2b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIFxcdFxcdFxcXCJudW1hX25leHRfc2NhbiAlbHUgbnVtYV9zY2FuX29mZnNldCAlbHUgbnVtYV9zY2FuX3NlcSAlZFxcXFxuXFxcIlxcbiAjZW5kaWZcXG4gXFx0XFx0XFxcInRsYl9mbHVzaF9wZW5kaW5nICVkXFxcXG5cXFwiXFxuLVxcdFxcdFxcXCJkZWZfZmxhZ3M6ICUjbHgoJXBHdilcXFxcblxcXCIsXFxuK1xcdFxcdFxcXCJkZWZfZmxhZ3M6ICUqcGIoJXBHdilcXFxcblxcXCIsXFxuIFxcbiBcXHRcXHRtbSwgbW0tXFx1MDAzZXRhc2tfc2l6ZSxcXG4gXFx0XFx0bW0tXFx1MDAzZW1tYXBfYmFzZSwgbW0tXFx1MDAzZW1tYXBfbGVnYWN5X2Jhc2UsXFxuQEAgLTIyNiw3ICsyMjYsOCBAQCB2b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIFxcdFxcdG1tLVxcdTAwM2VudW1hX25leHRfc2NhbiwgbW0tXFx1MDAzZW51bWFfc2Nhbl9vZmZzZXQsIG1tLVxcdTAwM2VudW1hX3NjYW5fc2VxLFxcbiAjZW5kaWZcXG4gXFx0XFx0YXRvbWljX3JlYWQoXFx1MDAyNm1tLVxcdTAwM2V0bGJfZmx1c2hfcGVuZGluZyksXFxuLVxcdFxcdG1tLVxcdTAwM2VkZWZfZmxhZ3MsIFxcdTAwMjZtbS1cXHUwMDNlZGVmX2ZsYWdzXFxuK1xcdFxcdE5VTV9WTUFfRkxBR19CSVRTLCBtbS1cXHUwMDNlZGVmX3ZtYV9mbGFncy5fX3ZtYV9mbGFncyxcXG4rXFx0XFx0XFx1MDAyNm1tLVxcdTAwM2VkZWZfdm1hX2ZsYWdzXFxuIFxcdCk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChkdW1wX21tKTtcXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCAwZGM2ZDYzMDU3MGZhZi4uNDBkNmI0MDc4ZTNkNDMgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMTE5Niw3ICsxMTk2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbiBcXHRcXHRsb2ZmX3Qgb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIHNpemUsXFxuLVxcdFxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuK1xcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncylcXG4ge1xcbiBcXHRsb2ZmX3Qgb2ZmX2VuZCA9IG9mZiArIGxlbjtcXG4gXFx0bG9mZl90IG9mZl9hbGlnbiA9IHJvdW5kX3VwKG9mZiwgc2l6ZSk7XFxuQEAgLTEyMTIsOCArMTIxMiw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHRpZiAobGVuX3BhZCBcXHUwMDNjIGxlbiB8fCAob2ZmICsgbGVuX3BhZCkgXFx1MDAzYyBvZmYpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmV0ID0gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxwLCBhZGRyLCBsZW5fcGFkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBvZmYgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCwgZmxhZ3MsIHZtX2ZsYWdzKTtcXG4rXFx0cmV0ID0gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MoZmlscCwgYWRkciwgbGVuX3BhZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIG9mZiBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHZtYV9mbGFncyk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBUaGUgZmFpbHVyZSBtaWdodCBiZSBkdWUgdG8gbGVuZ3RoIHBhZGRpbmcuIFRoZSBjYWxsZXIgd2lsbCByZXRyeVxcbkBAIC0xMjM4LDI1ICsxMjM5LDI3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi11bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK3Vuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxcbi1cXHRcXHR2bV9mbGFnc190IHZtX2ZsYWdzKVxcbitcXHRcXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyByZXQ7XFxuIFxcdGxvZmZfdCBvZmYgPSAobG9mZl90KXBnb2ZmIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuIFxcbi1cXHRyZXQgPSBfX3RocF9nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIG9mZiwgZmxhZ3MsIFBNRF9TSVpFLCB2bV9mbGFncyk7XFxuK1xcdHJldCA9IF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgb2ZmLCBmbGFncywgUE1EX1NJWkUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHZtYV9mbGFncyk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHZtX2ZsYWdzKTtcXG4rXFx0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHZtYV9mbGFncyk7XFxuIH1cXG4gXFxuIHVuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbiB7XFxuLVxcdHJldHVybiB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XFxuK1xcdHJldHVybiB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIEVNUFRZX1ZNQV9GTEFHUyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodGhwX2dldF91bm1hcHBlZF9hcmVhKTtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL21lbWZkLmMgYi9tbS9tZW1mZC5jXFxuaW5kZXggNmM3MmZlNmNhZWY3NWQuLmM3MDhkOTI1MzNmNGFiIDEwMDY0NFxcbi0tLSBhL21tL21lbWZkLmNcXG4rKysgYi9tbS9tZW1mZC5jXFxuQEAgLTM3MCwzOSArMzcwLDM2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc193cml0ZV9zZWFsZWQodW5zaWduZWQgaW50IHNlYWxzKVxcbiBcXHRyZXR1cm4gc2VhbHMgXFx1MDAyNiAoRl9TRUFMX1dSSVRFIHwgRl9TRUFMX0ZVVFVSRV9XUklURSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgY2hlY2tfd3JpdGVfc2VhbCh2bV9mbGFnc190ICp2bV9mbGFnc19wdHIpXFxuK3N0YXRpYyBpbnQgY2hlY2tfd3JpdGVfc2VhbCh2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzX3B0cilcXG4ge1xcbi1cXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gKnZtX2ZsYWdzX3B0cjtcXG4tXFx0dm1fZmxhZ3NfdCBtYXNrID0gdm1fZmxhZ3MgXFx1MDAyNiAoVk1fU0hBUkVEIHwgVk1fV1JJVEUpO1xcbi1cXG4gXFx0LyogSWYgYSBwcml2YXRlIG1hcHBpbmcgdGhlbiB3cml0YWJpbGl0eSBpcyBpcnJlbGV2YW50LiAqL1xcbi1cXHRpZiAoIShtYXNrIFxcdTAwMjYgVk1fU0hBUkVEKSlcXG4rXFx0aWYgKCF2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3NfcHRyLCBWTUFfU0hBUkVEX0JJVCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogTmV3IFBST1RfV1JJVEUgYW5kIE1BUF9TSEFSRUQgbW1hcHMgYXJlIG5vdCBhbGxvd2VkIHdoZW5cXG4gXFx0ICogd3JpdGUgc2VhbHMgYXJlIGFjdGl2ZS5cXG4gXFx0ICovXFxuLVxcdGlmIChtYXNrIFxcdTAwMjYgVk1fV1JJVEUpXFxuK1xcdGlmICh2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3NfcHRyLCBWTUFfV1JJVEVfQklUKSlcXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFRoaXMgaXMgYSByZWFkLW9ubHkgbWFwcGluZywgZGlzYWxsb3cgbXByb3RlY3QoKSBmcm9tIG1ha2luZyBhXFxuIFxcdCAqIHdyaXRlLXNlYWxlZCBtYXBwaW5nIHdyaXRhYmxlIGluIGZ1dHVyZS5cXG4gXFx0ICovXFxuLVxcdCp2bV9mbGFnc19wdHIgXFx1MDAyNj0gflZNX01BWVdSSVRFO1xcbitcXHR2bWFfZmxhZ3NfY2xlYXIodm1hX2ZsYWdzX3B0ciwgVk1BX01BWVdSSVRFX0JJVCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4taW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzX3B0cilcXG4raW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKVxcbiB7XFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXHR1bnNpZ25lZCBpbnQgKnNlYWxzX3B0ciA9IG1lbWZkX2ZpbGVfc2VhbHNfcHRyKGZpbGUpO1xcbiBcXHR1bnNpZ25lZCBpbnQgc2VhbHMgPSBzZWFsc19wdHIgPyAqc2VhbHNfcHRyIDogMDtcXG4gXFxuIFxcdGlmIChpc193cml0ZV9zZWFsZWQoc2VhbHMpKVxcbi1cXHRcXHRlcnIgPSBjaGVja193cml0ZV9zZWFsKHZtX2ZsYWdzX3B0cik7XFxuK1xcdFxcdGVyciA9IGNoZWNrX3dyaXRlX3NlYWwodm1hX2ZsYWdzX3B0cik7XFxuIFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuZGlmZiAtLWdpdCBhL21tL21sb2NrLmMgYi9tbS9tbG9jay5jXFxuaW5kZXggOTdlNDkwMzhkOGQzM2UuLmVmYTY3MTZlNGRmYmRmIDEwMDY0NFxcbi0tLSBhL21tL21sb2NrLmNcXG4rKysgYi9tbS9tbG9jay5jXFxuQEAgLTMyOSw3ICszMjksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWxsb3dfbWxvY2tfbXVubG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHQgKiBiZSBzcGxpdC4gQW5kIHRoZSBwYWdlcyBhcmUgbm90IGluIFZNX0xPQ0tlZCBWTUFcXG4gXFx0ICogY2FuIGJlIHJlY2xhaW1lZC5cXG4gXFx0ICovXFxuLVxcdGlmICghKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9MT0NLRUQpKVxcbitcXHRpZiAoIXZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdC8qIGZvbGlvX3dpdGhpbl9yYW5nZSgpIGNhbm5vdCB0YWtlIEtTTSwgYnV0IGFueSBzbWFsbCBmb2xpbyBpcyBPSyAqL1xcbkBAIC0zNjgsNyArMzY4LDcgQEAgc3RhdGljIGludCBtbG9ja19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRmb2xpbyA9IHBtZF9mb2xpbygqcG1kKTtcXG4gXFx0XFx0aWYgKGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSlcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTE9DS0VEKVxcbitcXHRcXHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpXFxuIFxcdFxcdFxcdG1sb2NrX2ZvbGlvKGZvbGlvKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRtdW5sb2NrX2ZvbGlvKGZvbGlvKTtcXG5AQCAtMzkzLDcgKzM5Myw3IEBAIHN0YXRpYyBpbnQgbWxvY2tfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0aWYgKCFhbGxvd19tbG9ja19tdW5sb2NrKGZvbGlvLCB2bWEsIHN0YXJ0LCBlbmQsIHN0ZXApKVxcbiBcXHRcXHRcXHRnb3RvIG5leHRfZW50cnk7XFxuIFxcbi1cXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX0xPQ0tFRClcXG4rXFx0XFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKVxcbiBcXHRcXHRcXHRtbG9ja19mb2xpbyhmb2xpbyk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0bXVubG9ja19mb2xpbyhmb2xpbyk7XFxuQEAgLTQxNyw4ICs0MTcsOCBAQCBzdGF0aWMgaW50IG1sb2NrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuICAqIEBlbmQgLSBlbmQgb2YgcmFuZ2UgaW4gQHZtYVxcbiAgKiBAbmV3X3ZtYV9mbGFncyAtIHRoZSBuZXcgc2V0IG9mIGZsYWdzIGZvciBAdm1hLlxcbiAgKlxcbi0gKiBDYWxsZWQgZm9yIG1sb2NrKCksIG1sb2NrMigpIGFuZCBtbG9ja2FsbCgpLCB0byBzZXQgQHZtYSBWTV9MT0NLRUQ7XFxuLSAqIGNhbGxlZCBmb3IgbXVubG9jaygpIGFuZCBtdW5sb2NrYWxsKCksIHRvIGNsZWFyIFZNX0xPQ0tFRCBmcm9tIEB2bWEuXFxuKyAqIENhbGxlZCBmb3IgbWxvY2soKSwgbWxvY2syKCkgYW5kIG1sb2NrYWxsKCksIHRvIHNldCBAdm1hIFZNQV9MT0NLRURfQklUO1xcbisgKiBjYWxsZWQgZm9yIG11bmxvY2soKSBhbmQgbXVubG9ja2FsbCgpLCB0byBjbGVhciBWTUFfTE9DS0VEX0JJVCBmcm9tIEB2bWEuXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBtbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbkBAIC00MzEsMTQgKzQzMSwxNCBAQCBzdGF0aWMgdm9pZCBtbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBUaGVyZSBpcyBhIHNsaWdodCBjaGFuY2UgdGhhdCBjb25jdXJyZW50IHBhZ2UgbWlncmF0aW9uLFxcbi1cXHQgKiBvciBwYWdlIHJlY2xhaW0gZmluZGluZyBhIHBhZ2Ugb2YgdGhpcyBub3ctVk1fTE9DS0VEIHZtYSxcXG4rXFx0ICogb3IgcGFnZSByZWNsYWltIGZpbmRpbmcgYSBwYWdlIG9mIHRoaXMgbm93LVZNQV9MT0NLRURfQklUIHZtYSxcXG4gXFx0ICogd2lsbCBjYWxsIG1sb2NrX3ZtYV9mb2xpbygpIGFuZCByYWlzZSBwYWdlJ3MgbWxvY2tfY291bnQ6XFxuIFxcdCAqIGRvdWJsZSBjb3VudGluZywgbGVhdmluZyB0aGUgcGFnZSB1bmV2aWN0YWJsZSBpbmRlZmluaXRlbHkuXFxuLVxcdCAqIENvbW11bmljYXRlIHRoaXMgZGFuZ2VyIHRvIG1sb2NrX3ZtYV9mb2xpbygpIHdpdGggVk1fSU8sXFxuLVxcdCAqIHdoaWNoIGlzIGEgVk1fU1BFQ0lBTCBmbGFnIG5vdCBhbGxvd2VkIG9uIFZNX0xPQ0tFRCB2bWFzLlxcbitcXHQgKiBDb21tdW5pY2F0ZSB0aGlzIGRhbmdlciB0byBtbG9ja192bWFfZm9saW8oKSB3aXRoIFZNQV9JT19CSVQsXFxuK1xcdCAqIHdoaWNoIGlzIGEgVk1BX1NQRUNJQUxfRkxBR1MgZmxhZyBub3QgYWxsb3dlZCBvbiBWTUFfTE9DS0VEX0JJVCB2bWFzLlxcbiBcXHQgKiBtbWFwX2xvY2sgaXMgaGVsZCBpbiB3cml0ZSBtb2RlIGhlcmUsIHNvIHRoaXMgd2VpcmRcXG4gXFx0ICogY29tYmluYXRpb24gc2hvdWxkIG5vdCBiZSB2aXNpYmxlIHRvIG90aGVyIG1tYXBfbG9jayB1c2VycztcXG4tXFx0ICogYnV0IFdSSVRFX09OQ0Ugc28gcm1hcCB3YWxrZXJzIG11c3Qgc2VlIFZNX0lPIGlmIFZNX0xPQ0tFRC5cXG4rXFx0ICogYnV0IFdSSVRFX09OQ0Ugc28gcm1hcCB3YWxrZXJzIG11c3Qgc2VlIFZNQV9JT19CSVQgaWYgVk1BX0xPQ0tFRF9CSVQuXFxuIFxcdCAqL1xcbiBcXHRpZiAodm1hX2ZsYWdzX3Rlc3QobmV3X3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKVxcbiBcXHRcXHR2bWFfZmxhZ3Nfc2V0KG5ld192bWFfZmxhZ3MsIFZNQV9JT19CSVQpO1xcbkBAIC00NTgsNyArNDU4LDcgQEAgc3RhdGljIHZvaWQgbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAvKlxcbiAgKiBtbG9ja19maXh1cCAgLSBoYW5kbGUgbWxvY2tbYWxsXS9tdW5sb2NrW2FsbF0gcmVxdWVzdHMuXFxuICAqXFxuLSAqIEZpbHRlcnMgb3V0IFxcXCJzcGVjaWFsXFxcIiB2bWFzIC0tIFZNX0xPQ0tFRCBuZXZlciBnZXRzIHNldCBmb3IgdGhlc2UsIGFuZFxcbisgKiBGaWx0ZXJzIG91dCBcXFwic3BlY2lhbFxcXCIgdm1hcyAtLSBWTUFfTE9DS0VEX0JJVCBuZXZlciBnZXRzIHNldCBmb3IgdGhlc2UsIGFuZFxcbiAgKiBtdW5sb2NrIGlzIGEgbm8tb3AuICBIb3dldmVyLCBmb3Igc29tZSBzcGVjaWFsIHZtYXMsIHdlIGdvIGFoZWFkIGFuZFxcbiAgKiBwb3B1bGF0ZSB0aGUgcHRlcy5cXG4gICpcXG5AQCAtNDY2LDI0ICs0NjYsMjMgQEAgc3RhdGljIHZvaWQgbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAgKi9cXG4gc3RhdGljIGludCBtbG9ja19maXh1cChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHQgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqcHJldiwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB2bV9mbGFnc190IG5ld2ZsYWdzKVxcbitcXHQgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHZtYV9mbGFnc190ICpuZXdfdm1hX2ZsYWdzKVxcbiB7XFxuLVxcdHZtYV9mbGFnc190IG5ld192bWFfZmxhZ3MgPSBsZWdhY3lfdG9fdm1hX2ZsYWdzKG5ld2ZsYWdzKTtcXG4gXFx0Y29uc3Qgdm1hX2ZsYWdzX3Qgb2xkX3ZtYV9mbGFncyA9IHZtYS1cXHUwMDNlZmxhZ3M7XFxuIFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVxcdTAwM2V2bV9tbTtcXG4gXFx0aW50IG5yX3BhZ2VzO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuLVxcdGlmICh2bWFfZmxhZ3Nfc2FtZV9wYWlyKFxcdTAwMjZvbGRfdm1hX2ZsYWdzLCBcXHUwMDI2bmV3X3ZtYV9mbGFncykgfHxcXG4rXFx0aWYgKHZtYV9mbGFnc19zYW1lX3BhaXIoXFx1MDAyNm9sZF92bWFfZmxhZ3MsIG5ld192bWFfZmxhZ3MpIHx8XFxuIFxcdCAgICB2bWFfaXNfc2VjcmV0bWVtKHZtYSkgfHwgIXZtYV9zdXBwb3J0c19tbG9jayh2bWEpKSB7XFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIERvbid0IHNldCBWTV9MT0NLRUQgb3IgVk1fTE9DS09ORkFVTFQgYW5kIGRvbid0IGNvdW50Llxcbi1cXHRcXHQgKiBGb3Igc2VjcmV0bWVtLCBkb24ndCBhbGxvdyB0aGUgbWVtb3J5IHRvIGJlIHVubG9ja2VkLlxcbitcXHRcXHQgKiBEb24ndCBzZXQgVk1BX0xPQ0tFRF9CSVQgb3IgVk1BX0xPQ0tPTkZBVUxUX0JJVCBhbmQgZG9uJ3RcXG4rXFx0XFx0ICogY291bnQuICBGb3Igc2VjcmV0bWVtLCBkb24ndCBhbGxvdyB0aGUgbWVtb3J5IHRvIGJlIHVubG9ja2VkLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3Modm1pLCAqcHJldiwgdm1hLCBzdGFydCwgZW5kLCBcXHUwMDI2bmV3X3ZtYV9mbGFncyk7XFxuK1xcdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3Modm1pLCAqcHJldiwgdm1hLCBzdGFydCwgZW5kLCBuZXdfdm1hX2ZsYWdzKTtcXG4gXFx0aWYgKElTX0VSUih2bWEpKSB7XFxuIFxcdFxcdHJldCA9IFBUUl9FUlIodm1hKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuQEAgLTQ5Myw3ICs0OTIsNyBAQCBzdGF0aWMgaW50IG1sb2NrX2ZpeHVwKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdCAqIEtlZXAgdHJhY2sgb2YgYW1vdW50IG9mIGxvY2tlZCBWTS5cXG4gXFx0ICovXFxuIFxcdG5yX3BhZ2VzID0gKGVuZCAtIHN0YXJ0KSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi1cXHRpZiAoIXZtYV9mbGFnc190ZXN0KFxcdTAwMjZuZXdfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpXFxuK1xcdGlmICghdm1hX2ZsYWdzX3Rlc3QobmV3X3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKVxcbiBcXHRcXHRucl9wYWdlcyA9IC1ucl9wYWdlcztcXG4gXFx0ZWxzZSBpZiAodm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNm9sZF92bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSlcXG4gXFx0XFx0bnJfcGFnZXMgPSAwO1xcbkBAIC01MDIsMTUgKzUwMSwxNSBAQCBzdGF0aWMgaW50IG1sb2NrX2ZpeHVwKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdC8qXFxuIFxcdCAqIHZtX2ZsYWdzIGlzIHByb3RlY3RlZCBieSB0aGUgbW1hcF9sb2NrIGhlbGQgaW4gd3JpdGUgbW9kZS5cXG4gXFx0ICogSXQncyBva2F5IGlmIHRyeV90b191bm1hcF9vbmUgdW5tYXBzIGEgcGFnZSBqdXN0IGFmdGVyIHdlXFxuLVxcdCAqIHNldCBWTV9MT0NLRUQsIHBvcHVsYXRlX3ZtYV9wYWdlX3JhbmdlIHdpbGwgYnJpbmcgaXQgYmFjay5cXG4rXFx0ICogc2V0IFZNQV9MT0NLRURfQklULCBwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suXFxuIFxcdCAqL1xcbi1cXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNm5ld192bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRpZiAodm1hX2ZsYWdzX3Rlc3QobmV3X3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICB2bWFfZmxhZ3NfdGVzdChcXHUwMDI2b2xkX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKSB7XFxuIFxcdFxcdC8qIE5vIHdvcmsgdG8gZG8sIGFuZCBtbG9ja2luZyB0d2ljZSB3b3VsZCBiZSB3cm9uZyAqL1xcbiBcXHRcXHR2bWFfc3RhcnRfd3JpdGUodm1hKTtcXG4tXFx0XFx0dm1hLVxcdTAwM2VmbGFncyA9IG5ld192bWFfZmxhZ3M7XFxuK1xcdFxcdHZtYS1cXHUwMDNlZmxhZ3MgPSAqbmV3X3ZtYV9mbGFncztcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0bWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCwgXFx1MDAyNm5ld192bWFfZmxhZ3MpO1xcbitcXHRcXHRtbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCBuZXdfdm1hX2ZsYWdzKTtcXG4gXFx0fVxcbiBvdXQ6XFxuIFxcdCpwcmV2ID0gdm1hO1xcbkBAIC01MTgsNyArNTE3LDcgQEAgc3RhdGljIGludCBtbG9ja19maXh1cChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGFwcGx5X3ZtYV9sb2NrX2ZsYWdzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sXFxuLVxcdFxcdFxcdFxcdHZtX2ZsYWdzX3QgZmxhZ3MpXFxuK1xcdFxcdFxcdFxcdGNvbnN0IHZtYV9mbGFnc190ICpmbGFncylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG5zdGFydCwgZW5kLCB0bXA7XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCAqcHJldjtcXG5AQCAtNTQzLDE4ICs1NDIsMjAgQEAgc3RhdGljIGludCBhcHBseV92bWFfbG9ja19mbGFncyh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLFxcbiBcXHR0bXAgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbiBcXHRmb3JfZWFjaF92bWFfcmFuZ2Uodm1pLCB2bWEsIGVuZCkge1xcbiBcXHRcXHRpbnQgZXJyb3I7XFxuLVxcdFxcdHZtX2ZsYWdzX3QgbmV3ZmxhZ3M7XFxuK1xcdFxcdHZtYV9mbGFnc190IG5ld2ZsYWdzO1xcbiBcXG4gXFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fc3RhcnQgIT0gdG1wKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdFxcdG5ld2ZsYWdzID0gdm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IH5WTV9MT0NLRURfTUFTSztcXG4tXFx0XFx0bmV3ZmxhZ3MgfD0gZmxhZ3M7XFxuK1xcdFxcdG5ld2ZsYWdzID0gdm1hLVxcdTAwM2VmbGFncztcXG4rXFx0XFx0dm1hX2ZsYWdzX2NsZWFyX21hc2soXFx1MDAyNm5ld2ZsYWdzLCBWTUFfTE9DS0VEX01BU0spO1xcbitcXHRcXHR2bWFfZmxhZ3Nfc2V0X21hc2soXFx1MDAyNm5ld2ZsYWdzLCAqZmxhZ3MpO1xcbitcXG4gXFx0XFx0LyogSGVyZSB3ZSBrbm93IHRoYXQgIHZtYS1cXHUwMDNldm1fc3RhcnQgXFx1MDAzYz0gbnN0YXJ0IFxcdTAwM2Mgdm1hLVxcdTAwM2V2bV9lbmQuICovXFxuIFxcdFxcdHRtcCA9IHZtYS1cXHUwMDNldm1fZW5kO1xcbiBcXHRcXHRpZiAodG1wIFxcdTAwM2UgZW5kKVxcbiBcXHRcXHRcXHR0bXAgPSBlbmQ7XFxuLVxcdFxcdGVycm9yID0gbWxvY2tfZml4dXAoXFx1MDAyNnZtaSwgdm1hLCBcXHUwMDI2cHJldiwgbnN0YXJ0LCB0bXAsIG5ld2ZsYWdzKTtcXG4rXFx0XFx0ZXJyb3IgPSBtbG9ja19maXh1cChcXHUwMDI2dm1pLCB2bWEsIFxcdTAwMjZwcmV2LCBuc3RhcnQsIHRtcCwgXFx1MDAyNm5ld2ZsYWdzKTtcXG4gXFx0XFx0aWYgKGVycm9yKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcdFxcdHRtcCA9IHZtYV9pdGVyX2VuZChcXHUwMDI2dm1pKTtcXG5AQCAtNTg5LDcgKzU5MCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X21tX21sb2NrZWRfcGFnZV9ucihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0ZW5kID0gc3RhcnQgKyBsZW47XFxuIFxcbiBcXHRmb3JfZWFjaF92bWFfcmFuZ2Uodm1pLCB2bWEsIGVuZCkge1xcbi1cXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX0xPQ0tFRCkge1xcbitcXHRcXHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpIHtcXG4gXFx0XFx0XFx0aWYgKHN0YXJ0IFxcdTAwM2Ugdm1hLVxcdTAwM2V2bV9zdGFydClcXG4gXFx0XFx0XFx0XFx0Y291bnQgLT0gKHN0YXJ0IC0gdm1hLVxcdTAwM2V2bV9zdGFydCk7XFxuIFxcdFxcdFxcdGlmIChlbmQgXFx1MDAzYyB2bWEtXFx1MDAzZXZtX2VuZCkge1xcbkBAIC02MTUsNyArNjE2LDggQEAgc3RhdGljIGludCBfX21sb2NrX3Bvc2l4X2Vycm9yX3JldHVybihsb25nIHJldHZhbClcXG4gXFx0cmV0dXJuIHJldHZhbDtcXG4gfVxcbiBcXG4tc3RhdGljIF9fbXVzdF9jaGVjayBpbnQgZG9fbWxvY2sodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbiwgdm1fZmxhZ3NfdCBmbGFncylcXG4rc3RhdGljIF9fbXVzdF9jaGVjayBpbnQgZG9fbWxvY2sodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbixcXG4rXFx0XFx0XFx0XFx0IHZtYV9mbGFnc190ICpmbGFncylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGxvY2tlZDtcXG4gXFx0dW5zaWduZWQgbG9uZyBsb2NrX2xpbWl0O1xcbkBAIC02NjQsMjQgKzY2NiwyNyBAQCBzdGF0aWMgX19tdXN0X2NoZWNrIGludCBkb19tbG9jayh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLCB2bV9mbGFnc190IGZsYVxcbiBcXG4gU1lTQ0FMTF9ERUZJTkUyKG1sb2NrLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW4pXFxuIHtcXG4tXFx0cmV0dXJuIGRvX21sb2NrKHN0YXJ0LCBsZW4sIFZNX0xPQ0tFRCk7XFxuK1xcdHZtYV9mbGFnc190IGZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9MT0NLRURfQklUKTtcXG4rXFxuK1xcdHJldHVybiBkb19tbG9jayhzdGFydCwgbGVuLCBcXHUwMDI2ZmxhZ3MpO1xcbiB9XFxuIFxcbiBTWVNDQUxMX0RFRklORTMobWxvY2syLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW4sIGludCwgZmxhZ3MpXFxuIHtcXG4tXFx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IFZNX0xPQ0tFRDtcXG4rXFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9MT0NLRURfQklUKTtcXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IH5NTE9DS19PTkZBVUxUKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IE1MT0NLX09ORkFVTFQpXFxuLVxcdFxcdHZtX2ZsYWdzIHw9IFZNX0xPQ0tPTkZBVUxUO1xcbitcXHRcXHR2bWFfZmxhZ3Nfc2V0KFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLT05GQVVMVF9CSVQpO1xcbiBcXG4tXFx0cmV0dXJuIGRvX21sb2NrKHN0YXJ0LCBsZW4sIHZtX2ZsYWdzKTtcXG4rXFx0cmV0dXJuIGRvX21sb2NrKHN0YXJ0LCBsZW4sIFxcdTAwMjZ2bWFfZmxhZ3MpO1xcbiB9XFxuIFxcbiBTWVNDQUxMX0RFRklORTIobXVubG9jaywgdW5zaWduZWQgbG9uZywgc3RhcnQsIHNpemVfdCwgbGVuKVxcbiB7XFxuK1xcdHZtYV9mbGFnc190IGZsYWdzID0gRU1QVFlfVk1BX0ZMQUdTO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0c3RhcnQgPSB1bnRhZ2dlZF9hZGRyKHN0YXJ0KTtcXG5AQCAtNjkxLDcgKzY5Niw3IEBAIFNZU0NBTExfREVGSU5FMihtdW5sb2NrLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW4pXFxuIFxcbiBcXHRpZiAobW1hcF93cml0ZV9sb2NrX2tpbGxhYmxlKGN1cnJlbnQtXFx1MDAzZW1tKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4tXFx0cmV0ID0gYXBwbHlfdm1hX2xvY2tfZmxhZ3Moc3RhcnQsIGxlbiwgMCk7XFxuK1xcdHJldCA9IGFwcGx5X3ZtYV9sb2NrX2ZsYWdzKHN0YXJ0LCBsZW4sIFxcdTAwMjZmbGFncyk7XFxuIFxcdG1tYXBfd3JpdGVfdW5sb2NrKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTY5OSw0NiArNzA0LDQ4IEBAIFNZU0NBTExfREVGSU5FMihtdW5sb2NrLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW4pXFxuIFxcbiAvKlxcbiAgKiBUYWtlIHRoZSBNQ0xfKiBmbGFncyBwYXNzZWQgaW50byBtbG9ja2FsbCAob3IgMCBpZiBjYWxsZWQgZnJvbSBtdW5sb2NrYWxsKVxcbi0gKiBhbmQgdHJhbnNsYXRlIGludG8gdGhlIGFwcHJvcHJpYXRlIG1vZGlmaWNhdGlvbnMgdG8gbW0tXFx1MDAzZWRlZl9mbGFncyBhbmQvb3IgdGhlXFxuLSAqIGZsYWdzIGZvciBhbGwgY3VycmVudCBWTUFzLlxcbisgKiBhbmQgdHJhbnNsYXRlIGludG8gdGhlIGFwcHJvcHJpYXRlIG1vZGlmaWNhdGlvbnMgdG8gbW0tXFx1MDAzZWRlZl92bWFfZmxhZ3MgYW5kL29yXFxuKyAqIHRoZSBmbGFncyBmb3IgYWxsIGN1cnJlbnQgVk1Bcy5cXG4gICpcXG4gICogVGhlcmUgYXJlIGEgY291cGxlIG9mIHN1YnRsZXRpZXMgd2l0aCB0aGlzLiAgSWYgbWxvY2thbGwoKSBpcyBjYWxsZWQgbXVsdGlwbGVcXG4gICogdGltZXMgd2l0aCBkaWZmZXJlbnQgZmxhZ3MsIHRoZSB2YWx1ZXMgZG8gbm90IG5lY2Vzc2FyaWx5IHN0YWNrLiAgSWYgbWxvY2thbGxcXG4gICogaXMgY2FsbGVkIG9uY2UgaW5jbHVkaW5nIHRoZSBNQ0xfRlVUVVJFIGZsYWcgYW5kIHRoZW4gYSBzZWNvbmQgdGltZSB3aXRob3V0XFxuLSAqIGl0LCBWTV9MT0NLRUQgYW5kIFZNX0xPQ0tPTkZBVUxUIHdpbGwgYmUgY2xlYXJlZCBmcm9tIG1tLVxcdTAwM2VkZWZfZmxhZ3MuXFxuKyAqIGl0LCBWTUFfTE9DS0VEX0JJVCBhbmQgVk1BX0xPQ0tPTkZBVUxUX0JJVCB3aWxsIGJlIGNsZWFyZWQgZnJvbVxcbisgKiBtbS1cXHUwMDNlZGVmX3ZtYV9mbGFncy5cXG4gICovXFxuIHN0YXRpYyBpbnQgYXBwbHlfbWxvY2thbGxfZmxhZ3MoaW50IGZsYWdzKVxcbiB7XFxuIFxcdFZNQV9JVEVSQVRPUih2bWksIGN1cnJlbnQtXFx1MDAzZW1tLCAwKTtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsICpwcmV2ID0gTlVMTDtcXG4tXFx0dm1fZmxhZ3NfdCB0b19hZGQgPSAwO1xcbitcXHR2bWFfZmxhZ3NfdCB0b19hZGQgPSBFTVBUWV9WTUFfRkxBR1M7XFxuIFxcbi1cXHRjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlZGVmX2ZsYWdzIFxcdTAwMjY9IH5WTV9MT0NLRURfTUFTSztcXG4rXFx0dm1hX2ZsYWdzX2NsZWFyX21hc2soXFx1MDAyNm1tLVxcdTAwM2VkZWZfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX01BU0spO1xcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNQ0xfRlVUVVJFKSB7XFxuLVxcdFxcdGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VkZWZfZmxhZ3MgfD0gVk1fTE9DS0VEO1xcbitcXHRcXHR2bWFfZmxhZ3Nfc2V0KFxcdTAwMjZtbS1cXHUwMDNlZGVmX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpO1xcbiBcXG4gXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTUNMX09ORkFVTFQpXFxuLVxcdFxcdFxcdGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VkZWZfZmxhZ3MgfD0gVk1fTE9DS09ORkFVTFQ7XFxuK1xcdFxcdFxcdHZtYV9mbGFnc19zZXQoXFx1MDAyNm1tLVxcdTAwM2VkZWZfdm1hX2ZsYWdzLCBWTUFfTE9DS09ORkFVTFRfQklUKTtcXG4gXFxuIFxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgTUNMX0NVUlJFTlQpKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgTUNMX0NVUlJFTlQpIHtcXG4tXFx0XFx0dG9fYWRkIHw9IFZNX0xPQ0tFRDtcXG4rXFx0XFx0dm1hX2ZsYWdzX3NldChcXHUwMDI2dG9fYWRkLCBWTUFfTE9DS0VEX0JJVCk7XFxuIFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE1DTF9PTkZBVUxUKVxcbi1cXHRcXHRcXHR0b19hZGQgfD0gVk1fTE9DS09ORkFVTFQ7XFxuK1xcdFxcdFxcdHZtYV9mbGFnc19zZXQoXFx1MDAyNnRvX2FkZCwgVk1BX0xPQ0tPTkZBVUxUX0JJVCk7XFxuIFxcdH1cXG4gXFxuIFxcdGZvcl9lYWNoX3ZtYSh2bWksIHZtYSkge1xcbiBcXHRcXHRpbnQgZXJyb3I7XFxuLVxcdFxcdHZtX2ZsYWdzX3QgbmV3ZmxhZ3M7XFxuK1xcdFxcdHZtYV9mbGFnc190IG5ld2ZsYWdzID0gdm1hLVxcdTAwM2VmbGFncztcXG4gXFxuLVxcdFxcdG5ld2ZsYWdzID0gdm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IH5WTV9MT0NLRURfTUFTSztcXG4tXFx0XFx0bmV3ZmxhZ3MgfD0gdG9fYWRkO1xcbitcXHRcXHR2bWFfZmxhZ3NfY2xlYXJfbWFzayhcXHUwMDI2bmV3ZmxhZ3MsIFZNQV9MT0NLRURfTUFTSyk7XFxuK1xcdFxcdHZtYV9mbGFnc19zZXRfbWFzayhcXHUwMDI2bmV3ZmxhZ3MsIHRvX2FkZCk7XFxuIFxcbiBcXHRcXHRlcnJvciA9IG1sb2NrX2ZpeHVwKFxcdTAwMjZ2bWksIHZtYSwgXFx1MDAyNnByZXYsIHZtYS1cXHUwMDNldm1fc3RhcnQsIHZtYS1cXHUwMDNldm1fZW5kLFxcbi1cXHRcXHRcXHRcXHQgICAgbmV3ZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm5ld2ZsYWdzKTtcXG4gXFx0XFx0LyogSWdub3JlIGVycm9ycywgYnV0IHByZXYgbmVlZHMgZml4aW5nIHVwLiAqL1xcbiBcXHRcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdFxcdHByZXYgPSB2bWE7XFxuZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuY1xcbmluZGV4IDMwOGE0M2VhYmQ4M2IxLi40YmYyNmIwZjFlNmUzNiAxMDA2NDRcXG4tLS0gYS9tbS9tbWFwLmNcXG4rKysgYi9tbS9tbWFwLmNcXG5AQCAtODAsMTMgKzgwLDEzIEBAIGNvcmVfcGFyYW0oaWdub3JlX3JsaW1pdF9kYXRhLCBpZ25vcmVfcmxpbWl0X2RhdGEsIGJvb2wsIDA2NDQpO1xcbiAvKiBVcGRhdGUgdm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgdG8gcmVmbGVjdCB2bWEtXFx1MDAzZXZtX2ZsYWdzLiAqL1xcbiB2b2lkIHZtYV9zZXRfcGFnZV9wcm90KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiB7XFxuLVxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWEtXFx1MDAzZXZtX2ZsYWdzO1xcbitcXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSB2bWEtXFx1MDAzZWZsYWdzO1xcbiBcXHRwZ3Byb3RfdCB2bV9wYWdlX3Byb3Q7XFxuIFxcbi1cXHR2bV9wYWdlX3Byb3QgPSB2bV9wZ3Byb3RfbW9kaWZ5KHZtYS1cXHUwMDNldm1fcGFnZV9wcm90LCB2bV9mbGFncyk7XFxuK1xcdHZtX3BhZ2VfcHJvdCA9IHZtYV9wZ3Byb3RfbW9kaWZ5KHZtYS1cXHUwMDNldm1fcGFnZV9wcm90LCB2bWFfZmxhZ3MpO1xcbiBcXHRpZiAodm1hX3dhbnRzX3dyaXRlbm90aWZ5KHZtYSwgdm1fcGFnZV9wcm90KSkge1xcbi1cXHRcXHR2bV9mbGFncyBcXHUwMDI2PSB+Vk1fU0hBUkVEO1xcbi1cXHRcXHR2bV9wYWdlX3Byb3QgPSB2bV9wZ3Byb3RfbW9kaWZ5KHZtX3BhZ2VfcHJvdCwgdm1fZmxhZ3MpO1xcbitcXHRcXHR2bWFfZmxhZ3NfY2xlYXIoXFx1MDAyNnZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpO1xcbitcXHRcXHR2bV9wYWdlX3Byb3QgPSB2bWFfcGdwcm90X21vZGlmeSh2bV9wYWdlX3Byb3QsIHZtYV9mbGFncyk7XFxuIFxcdH1cXG4gXFx0LyogcmVtb3ZlX3Byb3RlY3Rpb25fcHRlcyByZWFkcyB2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCB3aXRob3V0IG1tYXBfbG9jayAqL1xcbiBcXHRXUklURV9PTkNFKHZtYS1cXHUwMDNldm1fcGFnZV9wcm90LCB2bV9wYWdlX3Byb3QpO1xcbkBAIC0xMDIsMTUgKzEwMiwxNiBAQCB2b2lkIHZtYV9zZXRfcGFnZV9wcm90KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAgKi9cXG4gc3RhdGljIGludCBjaGVja19icmtfbGltaXRzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pXFxuIHtcXG4rXFx0Y29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4rXFx0Y29uc3QgYm9vbCBpc19kZWZfbG9ja2VkID1cXG4rXFx0XFx0dm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNm1tLVxcdTAwM2VkZWZfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbWFwcGVkX2FkZHI7XFxuIFxcbiBcXHRtYXBwZWRfYWRkciA9IGdldF91bm1hcHBlZF9hcmVhKE5VTEwsIGFkZHIsIGxlbiwgMCwgTUFQX0ZJWEVEKTtcXG4gXFx0aWYgKElTX0VSUl9WQUxVRShtYXBwZWRfYWRkcikpXFxuIFxcdFxcdHJldHVybiBtYXBwZWRfYWRkcjtcXG4gXFxuLVxcdHJldHVybiBtbG9ja19mdXR1cmVfb2soY3VycmVudC1cXHUwMDNlbW0sXFxuLVxcdFxcdFxcdCAgICAgIGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VkZWZfZmxhZ3MgXFx1MDAyNiBWTV9MT0NLRUQsIGxlbilcXG4tXFx0XFx0PyAwIDogLUVBR0FJTjtcXG4rXFx0cmV0dXJuIG1sb2NrX2Z1dHVyZV9vayhtbSwgaXNfZGVmX2xvY2tlZCwgbGVuKSA/IDAgOiAtRUFHQUlOO1xcbiB9XFxuIFxcbiBTWVNDQUxMX0RFRklORTEoYnJrLCB1bnNpZ25lZCBsb25nLCBicmspXFxuQEAgLTE5Nyw3ICsxOTgsNyBAQCBTWVNDQUxMX0RFRklORTEoYnJrLCB1bnNpZ25lZCBsb25nLCBicmspXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0bW0tXFx1MDAzZWJyayA9IGJyaztcXG4tXFx0aWYgKG1tLVxcdTAwM2VkZWZfZmxhZ3MgXFx1MDAyNiBWTV9MT0NLRUQpXFxuK1xcdGlmICh2bWFfZmxhZ3NfdGVzdChcXHUwMDI2bW0tXFx1MDAzZWRlZl92bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSlcXG4gXFx0XFx0cG9wdWxhdGUgPSB0cnVlO1xcbiBcXG4gc3VjY2VzczpcXG5AQCAtMjgwLDcgKzI4MSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX21tYXBfb2soc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuICAqIGRvX21tYXAoKSAtIFBlcmZvcm0gYSB1c2VybGFuZCBtZW1vcnkgbWFwcGluZyBpbnRvIHRoZSBjdXJyZW50IHByb2Nlc3NcXG4gICogYWRkcmVzcyBzcGFjZSBvZiBsZW5ndGggQGxlbiB3aXRoIHByb3RlY3Rpb24gYml0cyBAcHJvdCwgbW1hcCBmbGFncyBAZmxhZ3NcXG4gICogKGZyb20gd2hpY2ggVk1BIGZsYWdzIHdpbGwgYmUgaW5mZXJyZWQpLCBhbmQgYW55IGFkZGl0aW9uYWwgVk1BIGZsYWdzIHRvXFxuLSAqIGFwcGx5IEB2bV9mbGFncy4gSWYgdGhpcyBpcyBhIGZpbGUtYmFja2VkIG1hcHBpbmcgdGhlbiB0aGUgZmlsZSBpcyBzcGVjaWZpZWRcXG4rICogYXBwbHkgQHZtYV9mbGFncy4gSWYgdGhpcyBpcyBhIGZpbGUtYmFja2VkIG1hcHBpbmcgdGhlbiB0aGUgZmlsZSBpcyBzcGVjaWZpZWRcXG4gICogaW4gQGZpbGUgYW5kIHBhZ2Ugb2Zmc2V0IGludG8gdGhlIGZpbGUgdmlhIEBwZ29mZi5cXG4gICpcXG4gICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwZXJmb3JtIHNlY3VyaXR5IGNoZWNrcyBvbiB0aGUgZmlsZSBhbmQgYXNzdW1lcywgaWZcXG5AQCAtMzIwLDcgKzMyMSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX21tYXBfb2soc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuICAqICgyKSBmb3IgZGV0YWlscy5cXG4gICogQGZsYWdzOiBGbGFncyBzcGVjaWZ5aW5nIGhvdyB0aGUgbWFwcGluZyBzaG91bGQgYmUgcGVyZm9ybWVkLCBzZWUgbW1hcCAoMilcXG4gICogZm9yIGRldGFpbHMuXFxuLSAqIEB2bV9mbGFnczogVk1BIGZsYWdzIHdoaWNoIHNob3VsZCBiZSBzZXQgYnkgZGVmYXVsdCwgb3IgMCBvdGhlcndpc2UuXFxuKyAqIEB2bWFfZmxhZ3M6IFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgc2V0IGJ5IGRlZmF1bHQsIG9yIEVNUFRZX1ZNQV9GTEFHU1xcbisgKiBvdGhlcndpc2UuXFxuICAqIEBwZ29mZjogUGFnZSBvZmZzZXQgaW50byB0aGUgQGZpbGUgaWYgZmlsZS1iYWNrZWQsIHNob3VsZCBiZSAwIG90aGVyd2lzZS5cXG4gICogQHBvcHVsYXRlOiBBIHBvaW50ZXIgdG8gYSB2YWx1ZSB3aGljaCB3aWxsIGJlIHNldCB0byAwIGlmIG5vIHBvcHVsYXRpb24gb2ZcXG4gICogdGhlIHJhbmdlIGlzIHJlcXVpcmVkLCBvciB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHBvcHVsYXRlIGlmIGl0IGlzLiBNdXN0IGJlXFxuQEAgLTMzNSw3ICszMzcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9tbWFwX29rKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiAgKi9cXG4gdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHByb3QsXFxuLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyxcXG4gXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyAqcG9wdWxhdGUsXFxuIFxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnVmKVxcbiB7XFxuQEAgLTM5OSwxMyArNDAxLDE4IEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHQgKiB0by4gd2UgYXNzdW1lIGFjY2VzcyBwZXJtaXNzaW9ucyBoYXZlIGJlZW4gaGFuZGxlZCBieSB0aGUgb3BlblxcbiBcXHQgKiBvZiB0aGUgbWVtb3J5IG9iamVjdCwgc28gd2UgZG9uJ3QgZG8gYW55IGhlcmUuXFxuIFxcdCAqL1xcbi1cXHR2bV9mbGFncyB8PSBjYWxjX3ZtX3Byb3RfYml0cyhwcm90LCBwa2V5KSB8IGNhbGNfdm1fZmxhZ19iaXRzKGZpbGUsIGZsYWdzKSB8XFxuLVxcdFxcdFxcdG1tLVxcdTAwM2VkZWZfZmxhZ3MgfCBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDO1xcbitcXHR2bWFfZmxhZ3Nfc2V0X21hc2soXFx1MDAyNnZtYV9mbGFncyxcXG4rXFx0XFx0XFx0ICAgbGVnYWN5X3RvX3ZtYV9mbGFncyhjYWxjX3ZtX3Byb3RfYml0cyhwcm90LCBwa2V5KSkpO1xcbitcXHR2bWFfZmxhZ3Nfc2V0X21hc2soXFx1MDAyNnZtYV9mbGFncyxcXG4rXFx0XFx0XFx0ICAgbGVnYWN5X3RvX3ZtYV9mbGFncyhjYWxjX3ZtX2ZsYWdfYml0cyhmaWxlLCBmbGFncykpKTtcXG4rXFx0dm1hX2ZsYWdzX3NldF9tYXNrKFxcdTAwMjZ2bWFfZmxhZ3MsIG1tLVxcdTAwM2VkZWZfdm1hX2ZsYWdzKTtcXG4rXFx0dm1hX2ZsYWdzX3NldChcXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQsXFxuK1xcdFxcdCAgICAgIFZNQV9NQVlFWEVDX0JJVCk7XFxuIFxcbiBcXHQvKiBPYnRhaW4gdGhlIGFkZHJlc3MgdG8gbWFwIHRvLiB3ZSB2ZXJpZnkgKG9yIHNlbGVjdCkgaXQgYW5kIGVuc3VyZVxcbiBcXHQgKiB0aGF0IGl0IHJlcHJlc2VudHMgYSB2YWxpZCBzZWN0aW9uIG9mIHRoZSBhZGRyZXNzIHNwYWNlLlxcbiBcXHQgKi9cXG4tXFx0YWRkciA9IF9fZ2V0X3VubWFwcGVkX2FyZWEoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcXG4rXFx0YWRkciA9IF9fZ2V0X3VubWFwcGVkX2FyZWEoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtYV9mbGFncyk7XFxuIFxcdGlmIChJU19FUlJfVkFMVUUoYWRkcikpXFxuIFxcdFxcdHJldHVybiBhZGRyO1xcbiBcXG5AQCAtNDE4LDcgKzQyNSw3IEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRpZiAoIWNhbl9kb19tbG9jaygpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiBcXG4tXFx0aWYgKCFtbG9ja19mdXR1cmVfb2sobW0sIHZtX2ZsYWdzIFxcdTAwMjYgVk1fTE9DS0VELCBsZW4pKVxcbitcXHRpZiAoIW1sb2NrX2Z1dHVyZV9vayhtbSwgdm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNnZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpLCBsZW4pKVxcbiBcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gXFxuIFxcdGlmIChmaWxlKSB7XFxuQEAgLTQ2MSwyMiArNDY4LDIzIEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRpZiAoSVNfQVBQRU5EKGlub2RlKSBcXHUwMDI2XFx1MDAyNiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfV1JJVEUpKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFxuLVxcdFxcdFxcdHZtX2ZsYWdzIHw9IFZNX1NIQVJFRCB8IFZNX01BWVNIQVJFO1xcbitcXHRcXHRcXHR2bWFfZmxhZ3Nfc2V0KFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklULCBWTUFfTUFZU0hBUkVfQklUKTtcXG4gXFx0XFx0XFx0aWYgKCEoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfV1JJVEUpKVxcbi1cXHRcXHRcXHRcXHR2bV9mbGFncyBcXHUwMDI2PSB+KFZNX01BWVdSSVRFIHwgVk1fU0hBUkVEKTtcXG4rXFx0XFx0XFx0XFx0dm1hX2ZsYWdzX2NsZWFyKFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9NQVlXUklURV9CSVQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFZNQV9TSEFSRURfQklUKTtcXG4gXFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuIFxcdFxcdGNhc2UgTUFQX1BSSVZBVEU6XFxuIFxcdFxcdFxcdGlmICghKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX1JFQUQpKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0XFx0XFx0aWYgKHBhdGhfbm9leGVjKFxcdTAwMjZmaWxlLVxcdTAwM2VmX3BhdGgpKSB7XFxuLVxcdFxcdFxcdFxcdGlmICh2bV9mbGFncyBcXHUwMDI2IFZNX0VYRUMpXFxuK1xcdFxcdFxcdFxcdGlmICh2bWFfZmxhZ3NfdGVzdChcXHUwMDI2dm1hX2ZsYWdzLCBWTUFfRVhFQ19CSVQpKVxcbiBcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi1cXHRcXHRcXHRcXHR2bV9mbGFncyBcXHUwMDI2PSB+Vk1fTUFZRVhFQztcXG4rXFx0XFx0XFx0XFx0dm1hX2ZsYWdzX2NsZWFyKFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9NQVlFWEVDX0JJVCk7XFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdGlmICghY2FuX21tYXBfZmlsZShmaWxlKSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLVxcdFxcdFxcdGlmICh2bV9mbGFncyBcXHUwMDI2IChWTV9HUk9XU0RPV058Vk1fR1JPV1NVUCkpXFxuK1xcdFxcdFxcdGlmICh2bWFfZmxhZ3NfY2FuX2dyb3coXFx1MDAyNnZtYV9mbGFncykpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuQEAgLTQ4OCwyMyArNDk2LDI3IEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHQgKiBDaGVjayB0byBzZWUgaWYgd2UgYXJlIHZpb2xhdGluZyBhbnkgc2VhbHMgYW5kIHVwZGF0ZSBWTUFcXG4gXFx0XFx0ICogZmxhZ3MgaWYgbmVjZXNzYXJ5IHRvIGF2b2lkIGZ1dHVyZSBzZWFsIHZpb2xhdGlvbnMuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRlcnIgPSBtZW1mZF9jaGVja19zZWFsc19tbWFwKGZpbGUsIFxcdTAwMjZ2bV9mbGFncyk7XFxuK1xcdFxcdGVyciA9IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoZmlsZSwgXFx1MDAyNnZtYV9mbGFncyk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZyllcnI7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHN3aXRjaCAoZmxhZ3MgXFx1MDAyNiBNQVBfVFlQRSkge1xcbiBcXHRcXHRjYXNlIE1BUF9TSEFSRUQ6XFxuLVxcdFxcdFxcdGlmICh2bV9mbGFncyBcXHUwMDI2IChWTV9HUk9XU0RPV058Vk1fR1JPV1NVUCkpXFxuK1xcdFxcdFxcdGlmICh2bWFfZmxhZ3NfY2FuX2dyb3coXFx1MDAyNnZtYV9mbGFncykpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBJZ25vcmUgcGdvZmYuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRwZ29mZiA9IDA7XFxuLVxcdFxcdFxcdHZtX2ZsYWdzIHw9IFZNX1NIQVJFRCB8IFZNX01BWVNIQVJFO1xcbitcXHRcXHRcXHR2bWFfZmxhZ3Nfc2V0KFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklULCBWTUFfTUFZU0hBUkVfQklUKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgTUFQX0RST1BQQUJMRTpcXG4tXFx0XFx0XFx0aWYgKFZNX0RST1BQQUJMRSA9PSBWTV9OT05FKVxcbitcXHRcXHRjYXNlIE1BUF9EUk9QUEFCTEU6IHtcXG4rXFx0XFx0XFx0dm1hX2ZsYWdzX3QgZHJvcHBhYmxlID0gVk1BX0RST1BQQUJMRTtcXG4rXFxuK1xcdFxcdFxcdGlmICh2bWFfZmxhZ3NfZW1wdHkoXFx1MDAyNmRyb3BwYWJsZSkpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0XFx0dm1hX2ZsYWdzX3NldF9tYXNrKFxcdTAwMjZ2bWFfZmxhZ3MsIGRyb3BwYWJsZSk7XFxuK1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBBIGxvY2tlZCBvciBzdGFjayBhcmVhIG1ha2VzIG5vIHNlbnNlIHRvIGJlIGRyb3BwYWJsZS5cXG4gXFx0XFx0XFx0ICpcXG5AQCAtNTE1LDIzICs1MjcsMjQgQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiAoTUFQX0xPQ0tFRCB8IE1BUF9IVUdFVExCKSlcXG4gXFx0XFx0XFx0ICAgICAgICByZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0XFx0aWYgKHZtX2ZsYWdzIFxcdTAwMjYgKFZNX0dST1dTRE9XTiB8IFZNX0dST1dTVVApKVxcbitcXHRcXHRcXHRpZiAodm1hX2ZsYWdzX2Nhbl9ncm93KFxcdTAwMjZ2bWFfZmxhZ3MpKVxcbiBcXHRcXHRcXHQgICAgICAgIHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0XFx0XFx0dm1fZmxhZ3MgfD0gVk1fRFJPUFBBQkxFO1xcbi1cXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogSWYgdGhlIHBhZ2VzIGNhbiBiZSBkcm9wcGVkLCB0aGVuIGl0IGRvZXNuJ3QgbWFrZVxcbiBcXHRcXHRcXHQgKiBzZW5zZSB0byByZXNlcnZlIHRoZW0uXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHR2bV9mbGFncyB8PSBWTV9OT1JFU0VSVkU7XFxuK1xcdFxcdFxcdHZtYV9mbGFnc19zZXQoXFx1MDAyNnZtYV9mbGFncywgVk1BX05PUkVTRVJWRV9CSVQpO1xcbiBcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogTGlrZXdpc2UsIHRoZXkncmUgdm9sYXRpbGUgZW5vdWdoIHRoYXQgdGhleVxcbiBcXHRcXHRcXHQgKiBzaG91bGRuJ3Qgc3Vydml2ZSBmb3JrcyBvciBjb3JlZHVtcHMuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHR2bV9mbGFncyB8PSBWTV9XSVBFT05GT1JLIHwgVk1fRE9OVERVTVA7XFxuK1xcdFxcdFxcdHZtYV9mbGFnc19zZXQoXFx1MDAyNnZtYV9mbGFncywgVk1BX1dJUEVPTkZPUktfQklULFxcbitcXHRcXHRcXHRcXHQgICAgICBWTUFfRE9OVERVTVBfQklUKTtcXG4rXFxuIFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbitcXHRcXHR9XFxuIFxcdFxcdGNhc2UgTUFQX1BSSVZBVEU6XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIFNldCBwZ29mZiBhY2NvcmRpbmcgdG8gYWRkciBmb3IgYW5vbl92bWEuXFxuQEAgLTU0NCwyMiArNTU3LDIyIEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHR9XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBTZXQgJ1ZNX05PUkVTRVJWRScgaWYgd2Ugc2hvdWxkIG5vdCBhY2NvdW50IGZvciB0aGVcXG4tXFx0ICogbWVtb3J5IHVzZSBvZiB0aGlzIG1hcHBpbmcuXFxuK1xcdCAqIFNldCBWTUFfTk9SRVNFUlZFX0JJVCBpZiB3ZSBzaG91bGQgbm90IGFjY291bnQgZm9yIHRoZSBtZW1vcnkgdXNlXFxuK1xcdCAqIG9mIHRoaXMgbWFwcGluZy5cXG4gXFx0ICovXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IE1BUF9OT1JFU0VSVkUpIHtcXG4gXFx0XFx0LyogV2UgaG9ub3IgTUFQX05PUkVTRVJWRSBpZiBhbGxvd2VkIHRvIG92ZXJjb21taXQgKi9cXG4gXFx0XFx0aWYgKHN5c2N0bF9vdmVyY29tbWl0X21lbW9yeSAhPSBPVkVSQ09NTUlUX05FVkVSKVxcbi1cXHRcXHRcXHR2bV9mbGFncyB8PSBWTV9OT1JFU0VSVkU7XFxuK1xcdFxcdFxcdHZtYV9mbGFnc19zZXQoXFx1MDAyNnZtYV9mbGFncywgVk1BX05PUkVTRVJWRV9CSVQpO1xcbiBcXG4gXFx0XFx0LyogaHVnZXRsYiBhcHBsaWVzIHN0cmljdCBvdmVyY29tbWl0IHVubGVzcyBNQVBfTk9SRVNFUlZFICovXFxuIFxcdFxcdGlmIChmaWxlIFxcdTAwMjZcXHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbGUpKVxcbi1cXHRcXHRcXHR2bV9mbGFncyB8PSBWTV9OT1JFU0VSVkU7XFxuK1xcdFxcdFxcdHZtYV9mbGFnc19zZXQoXFx1MDAyNnZtYV9mbGFncywgVk1BX05PUkVTRVJWRV9CSVQpO1xcbiBcXHR9XFxuIFxcbi1cXHRhZGRyID0gbW1hcF9yZWdpb24oZmlsZSwgYWRkciwgbGVuLCB2bV9mbGFncywgcGdvZmYsIHVmKTtcXG4rXFx0YWRkciA9IG1tYXBfcmVnaW9uKGZpbGUsIGFkZHIsIGxlbiwgdm1hX2ZsYWdzLCBwZ29mZiwgdWYpO1xcbiBcXHRpZiAoIUlTX0VSUl9WQUxVRShhZGRyKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKCh2bV9mbGFncyBcXHUwMDI2IFZNX0xPQ0tFRCkgfHxcXG4rXFx0ICAgICh2bWFfZmxhZ3NfdGVzdChcXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkgfHxcXG4gXFx0ICAgICAoZmxhZ3MgXFx1MDAyNiAoTUFQX1BPUFVMQVRFIHwgTUFQX05PTkJMT0NLKSkgPT0gTUFQX1BPUFVMQVRFKSlcXG4gXFx0XFx0KnBvcHVsYXRlID0gbGVuO1xcbiBcXHRyZXR1cm4gYWRkcjtcXG5AQCAtNjQ1LDkgKzY1OCw5IEBAIFNZU0NBTExfREVGSU5FMShvbGRfbW1hcCwgc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBfX3VzZXIgKiwgYXJnKVxcbiAgKiBEZXRlcm1pbmUgaWYgdGhlIGFsbG9jYXRpb24gbmVlZHMgdG8gZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm9cXG4gICogZXhpc3RpbmcgbWFwcGluZyB3aXRoaW4gaXQncyBndWFyZCBnYXBzLCBmb3IgdXNlIGFzIHN0YXJ0X2dhcC5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1fZmxhZ3NfdCB2bV9mbGFncylcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXFxuIHtcXG4tXFx0aWYgKHZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBRE9XX1NUQUNLKVxcbitcXHRpZiAodm1hX2ZsYWdzX3Rlc3Rfc2luZ2xlX21hc2soXFx1MDAyNnZtYV9mbGFncywgVk1BX1NIQURPV19TVEFDSykpXFxuIFxcdFxcdHJldHVybiBQQUdFX1NJWkU7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNjg5LDcgKzcwMiw3IEBAIHVuc2lnbmVkIGxvbmcgdm1fdW5tYXBwZWRfYXJlYShzdHJ1Y3Qgdm1fdW5tYXBwZWRfYXJlYV9pbmZvICppbmZvKVxcbiB1bnNpZ25lZCBsb25nXFxuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcXG4tXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxcbitcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgKnByZXY7XFxuQEAgLTcxNCw3ICs3MjcsNyBAQCBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdGluZm8ubGVuZ3RoID0gbGVuO1xcbiBcXHRpbmZvLmxvd19saW1pdCA9IG1tLVxcdTAwM2VtbWFwX2Jhc2U7XFxuIFxcdGluZm8uaGlnaF9saW1pdCA9IG1tYXBfZW5kO1xcbi1cXHRpbmZvLnN0YXJ0X2dhcCA9IHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bV9mbGFncyk7XFxuK1xcdGluZm8uc3RhcnRfZ2FwID0gc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtYV9mbGFncyk7XFxuIFxcdGlmIChmaWxwIFxcdTAwMjZcXHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxcbiBcXHRcXHRpbmZvLmFsaWduX21hc2sgPSBodWdlX3BhZ2VfbWFza19hbGlnbihmaWxwKTtcXG4gXFx0cmV0dXJuIHZtX3VubWFwcGVkX2FyZWEoXFx1MDAyNmluZm8pO1xcbkBAIC03MjcsNyArNzQwLDcgQEAgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcXG4ge1xcbiBcXHRyZXR1cm4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyxcXG4tXFx0XFx0XFx0XFx0XFx0IHZtX2ZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0XFx0IGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3MpKTtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuQEAgLTczOCw3ICs3NTEsNyBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIHVuc2lnbmVkIGxvbmdcXG4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsICpwcmV2O1xcbiBcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbkBAIC03NjYsNyArNzc5LDcgQEAgZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdGluZm8ubGVuZ3RoID0gbGVuO1xcbiBcXHRpbmZvLmxvd19saW1pdCA9IFBBR0VfU0laRTtcXG4gXFx0aW5mby5oaWdoX2xpbWl0ID0gYXJjaF9nZXRfbW1hcF9iYXNlKGFkZHIsIG1tLVxcdTAwM2VtbWFwX2Jhc2UpO1xcbi1cXHRpbmZvLnN0YXJ0X2dhcCA9IHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bV9mbGFncyk7XFxuK1xcdGluZm8uc3RhcnRfZ2FwID0gc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtYV9mbGFncyk7XFxuIFxcdGlmIChmaWxwIFxcdTAwMjZcXHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxcbiBcXHRcXHRpbmZvLmFsaWduX21hc2sgPSBodWdlX3BhZ2VfbWFza19hbGlnbihmaWxwKTtcXG4gXFx0YWRkciA9IHZtX3VubWFwcGVkX2FyZWEoXFx1MDAyNmluZm8pO1xcbkBAIC03OTUsMjMgKzgwOCwyNCBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuIHtcXG4gXFx0cmV0dXJuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHZtX2ZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3MpKTtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuLXVuc2lnbmVkIGxvbmcgbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcXG4rdW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyxcXG4rXFx0XFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxcbiB7XFxuIFxcdGlmIChtbV9mbGFnc190ZXN0KE1NRl9UT1BET1dOLCBjdXJyZW50LVxcdTAwM2VtbSkpXFxuIFxcdFxcdHJldHVybiBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oZmlscCwgYWRkciwgbGVuLCBwZ29mZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZmxhZ3MsIHZtX2ZsYWdzKTtcXG4tXFx0cmV0dXJuIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0ZmxhZ3MsIHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSk7XFxuK1xcdHJldHVybiBhcmNoX2dldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxcbitcXHRcXHRcXHR2bWFfZmxhZ3NfdG9fbGVnYWN5KHZtYV9mbGFncykpO1xcbiB9XFxuIFxcbiB1bnNpZ25lZCBsb25nXFxuIF9fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nICgqZ2V0X2FyZWEpKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsXFxuIFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZylcXG5AQCAtODQ2LDExICs4NjAsMTEgQEAgX19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcXG4gXFx0XFx0ICAgXFx1MDAyNlxcdTAwMjYgIWFkZHIgLyogbm8gaGludCAqL1xcbiBcXHRcXHQgICBcXHUwMDI2XFx1MDAyNiBJU19BTElHTkVEKGxlbiwgUE1EX1NJWkUpKSB7XFxuIFxcdFxcdC8qIEVuc3VyZXMgdGhhdCBsYXJnZXIgYW5vbnltb3VzIG1hcHBpbmdzIGFyZSBUSFAgYWxpZ25lZC4gKi9cXG4tXFx0XFx0YWRkciA9IHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIsIGxlbixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcXG4rXFx0XFx0YWRkciA9IHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhmaWxlLCBhZGRyLCBsZW4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHBnb2ZmLCBmbGFncywgdm1hX2ZsYWdzKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0YWRkciA9IG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkciwgbGVuLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgcGdvZmYsIGZsYWdzLCB2bV9mbGFncyk7XFxuK1xcdFxcdGFkZHIgPSBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhmaWxlLCBhZGRyLCBsZW4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgcGdvZmYsIGZsYWdzLCB2bWFfZmxhZ3MpO1xcbiBcXHR9XFxuIFxcdGlmIChJU19FUlJfVkFMVUUoYWRkcikpXFxuIFxcdFxcdHJldHVybiBhZGRyO1xcbkBAIC04NjgsNyArODgyLDggQEAgdW5zaWduZWQgbG9uZ1xcbiBtbV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcXG4gXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbiB7XFxuLVxcdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTtcXG4rXFx0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEVNUFRZX1ZNQV9GTEFHUyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChtbV9nZXRfdW5tYXBwZWRfYXJlYSk7XFxuIFxcbkBAIC05NzAsNyArOTg1LDcgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX2V4dGVuZF92bWFfbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25cXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdGlmIChleHBhbmRfc3RhY2tfbG9ja2VkKHByZXYsIGFkZHIpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0aWYgKHByZXYtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTE9DS0VEKVxcbitcXHRpZiAodm1hX3Rlc3QocHJldiwgVk1BX0xPQ0tFRF9CSVQpKVxcbiBcXHRcXHRwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZShwcmV2LCBhZGRyLCBwcmV2LVxcdTAwM2V2bV9lbmQsIE5VTEwpO1xcbiBcXHRyZXR1cm4gcHJldjtcXG4gfVxcbkBAIC05OTQsNyArMTAwOSw3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9leHRlbmRfdm1hX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uXFxuIFxcdHN0YXJ0ID0gdm1hLVxcdTAwM2V2bV9zdGFydDtcXG4gXFx0aWYgKGV4cGFuZF9zdGFja19sb2NrZWQodm1hLCBhZGRyKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTE9DS0VEKVxcbitcXHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpXFxuIFxcdFxcdHBvcHVsYXRlX3ZtYV9wYWdlX3JhbmdlKHZtYSwgYWRkciwgc3RhcnQsIE5VTEwpO1xcbiBcXHRyZXR1cm4gdm1hO1xcbiB9XFxuQEAgLTExMTksMTggKzExMzQsMTggQEAgU1lTQ0FMTF9ERUZJTkU1KHJlbWFwX2ZpbGVfcGFnZXMsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBzaXplLFxcbiBcXHQgKi9cXG4gXFx0dm1hID0gdm1hX2xvb2t1cChtbSwgc3RhcnQpO1xcbiBcXG4tXFx0aWYgKCF2bWEgfHwgISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKSkge1xcbitcXHRpZiAoIXZtYSB8fCAhdm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCkpIHtcXG4gXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbi1cXHRwcm90IHw9IHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9SRUFEID8gUFJPVF9SRUFEIDogMDtcXG4tXFx0cHJvdCB8PSB2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fV1JJVEUgPyBQUk9UX1dSSVRFIDogMDtcXG4tXFx0cHJvdCB8PSB2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fRVhFQyA/IFBST1RfRVhFQyA6IDA7XFxuK1xcdHByb3QgfD0gdm1hX3Rlc3Qodm1hLCBWTUFfUkVBRF9CSVQpID8gUFJPVF9SRUFEIDogMDtcXG4rXFx0cHJvdCB8PSB2bWFfdGVzdCh2bWEsIFZNQV9XUklURV9CSVQpID8gUFJPVF9XUklURSA6IDA7XFxuK1xcdHByb3QgfD0gdm1hX3Rlc3Qodm1hLCBWTUFfRVhFQ19CSVQpID8gUFJPVF9FWEVDIDogMDtcXG4gXFxuIFxcdGZsYWdzIFxcdTAwMjY9IE1BUF9OT05CTE9DSztcXG4gXFx0ZmxhZ3MgfD0gTUFQX1NIQVJFRCB8IE1BUF9GSVhFRCB8IE1BUF9QT1BVTEFURTtcXG4tXFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9MT0NLRUQpXFxuK1xcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSlcXG4gXFx0XFx0ZmxhZ3MgfD0gTUFQX0xPQ0tFRDtcXG4gXFxuIFxcdC8qIFNhdmUgdm1fZmxhZ3MgdXNlZCB0byBjYWxjdWxhdGUgcHJvdCBhbmQgZmxhZ3MsIGFuZCByZWNoZWNrIGxhdGVyLiAqL1xcbkBAIC0xMTkxLDcgKzEyMDYsNyBAQCBTWVNDQUxMX0RFRklORTUocmVtYXBfZmlsZV9wYWdlcywgdW5zaWduZWQgbG9uZywgc3RhcnQsIHVuc2lnbmVkIGxvbmcsIHNpemUsXFxuIFxcdH1cXG4gXFxuIFxcdHJldCA9IGRvX21tYXAodm1hLVxcdTAwM2V2bV9maWxlLCBzdGFydCwgc2l6ZSxcXG4tXFx0XFx0XFx0cHJvdCwgZmxhZ3MsIDAsIHBnb2ZmLCBcXHUwMDI2cG9wdWxhdGUsIE5VTEwpO1xcbitcXHRcXHRcXHRwcm90LCBmbGFncywgRU1QVFlfVk1BX0ZMQUdTLCBwZ29mZiwgXFx1MDAyNnBvcHVsYXRlLCBOVUxMKTtcXG4gb3V0OlxcbiBcXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XFxuIFxcdGZwdXQoZmlsZSk7XFxuQEAgLTEyMzMsNyArMTI0OCw3IEBAIGludCB2bV9icmtfZmxhZ3ModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHJlcXVlc3QsIGJvb2wgaXNfZXhlYylcXG4gXFxuIFxcdHZtYSA9IHZtYV9wcmV2KFxcdTAwMjZ2bWkpO1xcbiBcXHRyZXQgPSBkb19icmtfZmxhZ3MoXFx1MDAyNnZtaSwgdm1hLCBhZGRyLCBsZW4sIHZtYV9mbGFncyk7XFxuLVxcdHBvcHVsYXRlID0gKChtbS1cXHUwMDNlZGVmX2ZsYWdzIFxcdTAwMjYgVk1fTE9DS0VEKSAhPSAwKTtcXG4rXFx0cG9wdWxhdGUgPSB2bWFfZmxhZ3NfdGVzdChcXHUwMDI2bW0tXFx1MDAzZWRlZl92bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTtcXG4gXFx0bW1hcF93cml0ZV91bmxvY2sobW0pO1xcbiBcXHR1c2VyZmF1bHRmZF91bm1hcF9jb21wbGV0ZShtbSwgXFx1MDAyNnVmKTtcXG4gXFx0aWYgKHBvcHVsYXRlIFxcdTAwMjZcXHUwMDI2ICFyZXQpXFxuQEAgLTEyNTYsNyArMTI3MSw3IEBAIHVuc2lnbmVkIGxvbmcgdGVhcl9kb3duX3ZtYXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG4gXFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTtcXG4gXFx0dm1hX2l0ZXJfc2V0KHZtaSwgdm1hLVxcdTAwM2V2bV9lbmQpO1xcbiBcXHRkbyB7XFxuLVxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fQUNDT1VOVClcXG4rXFx0XFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0FDQ09VTlRfQklUKSlcXG4gXFx0XFx0XFx0bnJfYWNjb3VudGVkICs9IHZtYV9wYWdlcyh2bWEpO1xcbiBcXHRcXHR2bWFfbWFya19kZXRhY2hlZCh2bWEpO1xcbiBcXHRcXHRyZW1vdmVfdm1hKHZtYSk7XFxuQEAgLTE0MDUsNyArMTQyMCw3IEBAIHN0YXRpYyBpbnQgc3BlY2lhbF9tYXBwaW5nX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIHtcXG4gXFx0LypcXG4gXFx0ICogRm9yYmlkIHNwbGl0dGluZyBzcGVjaWFsIG1hcHBpbmdzIC0ga2VybmVsIGhhcyBleHBlY3RhdGlvbnMgb3Zlclxcbi1cXHQgKiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIG1hcHBpbmcuIFRvZ2V0aGVyIHdpdGggVk1fRE9OVEVYUEFORFxcbitcXHQgKiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIG1hcHBpbmcuIFRvZ2V0aGVyIHdpdGggVk1BX0RPTlRFWFBBTkRfQklUXFxuIFxcdCAqIHRoZSBzaXplIG9mIHZtYSBzaG91bGQgc3RheSB0aGUgc2FtZSBvdmVyIHRoZSBzcGVjaWFsIG1hcHBpbmcnc1xcbiBcXHQgKiBsaWZldGltZS5cXG4gXFx0ICovXFxuQEAgLTE2NzcsNyArMTY5Miw3IEBAIGJvb2wgbW1hcF9yZWFkX2xvY2tfbWF5YmVfZXhwYW5kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCEobmV3X3ZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9HUk9XU0RPV04pKVxcbitcXHRpZiAoIXZtYV90ZXN0KG5ld192bWEsIFZNQV9HUk9XU0RPV05fQklUKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0bW1hcF93cml0ZV9sb2NrKG1tKTtcXG5AQCAtMTcyNyw3ICsxNzQyLDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxcbiBcXHRcXHRyZXR2YWwgPSB2bWFfc3RhcnRfd3JpdGVfa2lsbGFibGUobXBudCk7XFxuIFxcdFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRnb3RvIGxvb3Bfb3V0O1xcbi1cXHRcXHRpZiAobXBudC1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9ET05UQ09QWSkge1xcbitcXHRcXHRpZiAodm1hX3Rlc3QobXBudCwgVk1BX0RPTlRDT1BZX0JJVCkpIHtcXG4gXFx0XFx0XFx0cmV0dmFsID0gdm1hX2l0ZXJfY2xlYXJfZ2ZwKFxcdTAwMjZ2bWksIG1wbnQtXFx1MDAzZXZtX3N0YXJ0LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgbXBudC1cXHUwMDNldm1fZW5kLCBHRlBfS0VSTkVMKTtcXG4gXFx0XFx0XFx0aWYgKHJldHZhbClcXG5AQCAtMTczNyw3ICsxNzUyLDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRjaGFyZ2UgPSAwO1xcbi1cXHRcXHRpZiAobXBudC1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9BQ0NPVU5UKSB7XFxuK1xcdFxcdGlmICh2bWFfdGVzdChtcG50LCBWTUFfQUNDT1VOVF9CSVQpKSB7XFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbGVuID0gdm1hX3BhZ2VzKG1wbnQpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKHNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnlfbW0ob2xkbW0sIGxlbikpIC8qIHNpYyAqL1xcbkBAIC0xNzU1LDE2ICsxNzcwLDE5IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcXG4gXFx0XFx0cmV0dmFsID0gZHVwX3VzZXJmYXVsdGZkKHRtcCwgXFx1MDAyNnVmKTtcXG4gXFx0XFx0aWYgKHJldHZhbClcXG4gXFx0XFx0XFx0Z290byBmYWlsX25vbWVtX2Fub25fdm1hX2Zvcms7XFxuLVxcdFxcdGlmICh0bXAtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fV0lQRU9ORk9SSykge1xcbitcXG4rXFx0XFx0aWYgKHZtYV90ZXN0KHRtcCwgVk1BX1dJUEVPTkZPUktfQklUKSkge1xcbiBcXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBWTV9XSVBFT05GT1JLIGdldHMgYSBjbGVhbiBzbGF0ZSBpbiB0aGUgY2hpbGQuXFxuK1xcdFxcdFxcdCAqIFZNQV9XSVBFT05GT1JLX0JJVCBnZXRzIGEgY2xlYW4gc2xhdGUgaW4gdGhlIGNoaWxkLlxcbiBcXHRcXHRcXHQgKiBEb24ndCBwcmVwYXJlIGFub25fdm1hIHVudGlsIGZhdWx0IHNpbmNlIHdlIGRvbid0XFxuIFxcdFxcdFxcdCAqIGNvcHkgcGFnZSBmb3IgY3VycmVudCB2bWEuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHR0bXAtXFx1MDAzZWFub25fdm1hID0gTlVMTDtcXG4gXFx0XFx0fSBlbHNlIGlmIChhbm9uX3ZtYV9mb3JrKHRtcCwgbXBudCkpXFxuIFxcdFxcdFxcdGdvdG8gZmFpbF9ub21lbV9hbm9uX3ZtYV9mb3JrO1xcbi1cXHRcXHR2bV9mbGFnc19jbGVhcih0bXAsIFZNX0xPQ0tFRF9NQVNLKTtcXG4rXFxuK1xcdFxcdHZtYV9zdGFydF93cml0ZSh0bXApO1xcbitcXHRcXHR2bWFfY2xlYXJfZmxhZ3NfbWFzayh0bXAsIFZNQV9MT0NLRURfTUFTSyk7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIENvcHkvdXBkYXRlIGh1Z2V0bGIgcHJpdmF0ZSB2bWEgaW5mb3JtYXRpb24uXFxuIFxcdFxcdCAqL1xcbkBAIC0xNzk3LDcgKzE4MTUsNyBAQCBfX2xhdGVudF9lbnRyb3B5IGludCBkdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pXFxuIFxcdFxcdFxcdGlfbW1hcF91bmxvY2tfd3JpdGUobWFwcGluZyk7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmICghKHRtcC1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9XSVBFT05GT1JLKSlcXG4rXFx0XFx0aWYgKCF2bWFfdGVzdCh0bXAsIFZNQV9XSVBFT05GT1JLX0JJVCkpXFxuIFxcdFxcdFxcdHJldHZhbCA9IGNvcHlfcGFnZV9yYW5nZSh0bXAsIG1wbnQpO1xcbiBcXG4gXFx0XFx0aWYgKHJldHZhbCkge1xcbmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5jIGIvbW0vbXByb3RlY3QuY1xcbmluZGV4IGRjMjdiYmMxNzEyZmQ1Li4yODg4ZWU2MzhkODcyYSAxMDA2NDRcXG4tLS0gYS9tbS9tcHJvdGVjdC5jXFxuKysrIGIvbW0vbXByb3RlY3QuY1xcbkBAIC00MCw3ICs0MCw3IEBAXFxuIFxcbiBzdGF0aWMgYm9vbCBtYXliZV9jaGFuZ2VfcHRlX3dyaXRhYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCBwdGUpXFxuIHtcXG4tXFx0aWYgKFdBUk5fT05fT05DRSghKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9XUklURSkpKVxcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCF2bWFfdGVzdCh2bWEsIFZNQV9XUklURV9CSVQpKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0LyogRG9uJ3QgdG91Y2ggZW50cmllcyB0aGF0IGFyZSBub3QgZXZlbiByZWFkYWJsZS4gKi9cXG5AQCAtOTcsNyArOTcsNyBAQCBzdGF0aWMgYm9vbCBjYW5fY2hhbmdlX3NoYXJlZF9wdGVfd3JpdGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIGJvb2wgY2FuX2NoYW5nZV9wdGVfd3JpdGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0ICAgICBwdGVfdCBwdGUpXFxuIHtcXG4tXFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1NIQVJFRCkpXFxuK1xcdGlmICghdm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCkpXFxuIFxcdFxcdHJldHVybiBjYW5fY2hhbmdlX3ByaXZhdGVfcHRlX3dyaXRhYmxlKHZtYSwgYWRkciwgcHRlKTtcXG4gXFxuIFxcdHJldHVybiBjYW5fY2hhbmdlX3NoYXJlZF9wdGVfd3JpdGFibGUodm1hLCBwdGUpO1xcbkBAIC0xOTQsNyArMTk0LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHNldF93cml0ZV9wcm90X2NvbW1pdF9mbHVzaF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVcXG4ge1xcbiBcXHRib29sIHNldF93cml0ZTtcXG4gXFxuLVxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKSB7XFxuK1xcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKSkge1xcbiBcXHRcXHRzZXRfd3JpdGUgPSBjYW5fY2hhbmdlX3NoYXJlZF9wdGVfd3JpdGFibGUodm1hLCBwdGVudCk7XFxuIFxcdFxcdHByb3RfY29tbWl0X2ZsdXNoX3B0ZXModm1hLCBhZGRyLCBwdGVwLCBvbGRwdGUsIHB0ZW50LCBucl9wdGVzLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgLyogaWR4ID0gKi8gMCwgc2V0X3dyaXRlLCB0bGIpO1xcbkBAIC04NDYsOCArODQ2LDggQEAgbXByb3RlY3RfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbiBcXHRcXHR2bV91bmFjY3RfbWVtb3J5KG5ycGFnZXMpO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogUHJpdmF0ZSBWTV9MT0NLRUQgVk1BIGJlY29taW5nIHdyaXRhYmxlOiB0cmlnZ2VyIENPVyB0byBhdm9pZCBtYWpvclxcbi1cXHQgKiBmYXVsdCBvbiBhY2Nlc3MuXFxuK1xcdCAqIFByaXZhdGUgVk1BX0xPQ0tFRF9CSVQgVk1BIGJlY29taW5nIHdyaXRhYmxlOiB0cmlnZ2VyIENPVyB0byBhdm9pZFxcbitcXHQgKiBtYWpvciBmYXVsdCBvbiBhY2Nlc3MuXFxuIFxcdCAqL1xcbiBcXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNm5ld192bWFfZmxhZ3MsIFZNQV9XUklURV9CSVQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICB2bWFfZmxhZ3NfdGVzdChcXHUwMDI2b2xkX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTkyMSw3ICs5MjEsNyBAQCBzdGF0aWMgaW50IGRvX21wcm90ZWN0X3BrZXkodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbixcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdHN0YXJ0ID0gdm1hLVxcdTAwM2V2bV9zdGFydDtcXG4gXFx0XFx0ZXJyb3IgPSAtRUlOVkFMO1xcbi1cXHRcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fR1JPV1NET1dOKSlcXG4rXFx0XFx0aWYgKCF2bWFfdGVzdCh2bWEsIFZNQV9HUk9XU0RPV05fQklUKSlcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX3N0YXJ0IFxcdTAwM2Ugc3RhcnQpXFxuQEAgLTkyOSw3ICs5MjksNyBAQCBzdGF0aWMgaW50IGRvX21wcm90ZWN0X3BrZXkodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbixcXG4gXFx0XFx0aWYgKHVubGlrZWx5KGdyb3dzIFxcdTAwMjYgUFJPVF9HUk9XU1VQKSkge1xcbiBcXHRcXHRcXHRlbmQgPSB2bWEtXFx1MDAzZXZtX2VuZDtcXG4gXFx0XFx0XFx0ZXJyb3IgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fR1JPV1NVUCkpXFxuK1xcdFxcdFxcdGlmICghdm1hX3Rlc3Rfc2luZ2xlX21hc2sodm1hLCBWTUFfR1JPV1NVUCkpXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtOTUzLDcgKzk1Myw3IEBAIHN0YXRpYyBpbnQgZG9fbXByb3RlY3RfcGtleSh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBEb2VzIHRoZSBhcHBsaWNhdGlvbiBleHBlY3QgUFJPVF9SRUFEIHRvIGltcGx5IFBST1RfRVhFQyAqL1xcbi1cXHRcXHRpZiAocmllciBcXHUwMDI2XFx1MDAyNiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01BWUVYRUMpKVxcbitcXHRcXHRpZiAocmllciBcXHUwMDI2XFx1MDAyNiB2bWFfdGVzdCh2bWEsIFZNQV9NQVlFWEVDX0JJVCkpXFxuIFxcdFxcdFxcdHByb3QgfD0gUFJPVF9FWEVDO1xcbiBcXG4gXFx0XFx0LypcXG5kaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuY1xcbmluZGV4IDM4NGVmNGNjMjE5NWJhLi5iNjRhYTFmNmUwN2VkZSAxMDA2NDRcXG4tLS0gYS9tbS9tcmVtYXAuY1xcbisrKyBiL21tL21yZW1hcC5jXFxuQEAgLTY4LDcgKzY4LDcgQEAgc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3Qge1xcbiBcXHRib29sIHBvcHVsYXRlX2V4cGFuZDtcXHRcXHQvKiBtbG9jaygpJ2QgZXhwYW5kZWQsIG11c3QgcG9wdWxhdGUuICovXFxuIFxcdGVudW0gbXJlbWFwX3R5cGUgcmVtYXBfdHlwZTtcXHQvKiBleHBhbmQsIHNocmluaywgZXRjLiAqL1xcbiBcXHRib29sIG1tYXBfbG9ja2VkO1xcdFxcdC8qIElzIG1tIGN1cnJlbnRseSB3cml0ZS1sb2NrZWQ/ICovXFxuLVxcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZDtcXHRcXHQvKiBJZiBWTV9BQ0NPVU5ULCAjIHBhZ2VzIHRvIGFjY291bnQuICovXFxuK1xcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZDtcXHRcXHQvKiBJZiBWTUFfQUNDT1VOVF9CSVQsICMgcGdzIHRvIGFjY291bnQgKi9cXG4gXFx0Ym9vbCB2bWlfbmVlZHNfaW52YWxpZGF0ZTtcXHQvKiBJcyB0aGUgVk1BIGl0ZXJhdG9yIGludmFsaWRhdGVkPyAqL1xcbiB9O1xcbiBcXG5AQCAtOTYzLDcgKzk2Myw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZybV9zZXRfbmV3X2FkZHIoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcXG4gXFxuIFxcdGlmICh2cm0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTVJFTUFQX0ZJWEVEKVxcbiBcXHRcXHRtYXBfZmxhZ3MgfD0gTUFQX0ZJWEVEO1xcbi1cXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01BWVNIQVJFKVxcbitcXHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTUFZU0hBUkVfQklUKSlcXG4gXFx0XFx0bWFwX2ZsYWdzIHw9IE1BUF9TSEFSRUQ7XFxuIFxcbiBcXHRyZXMgPSBnZXRfdW5tYXBwZWRfYXJlYSh2bWEtXFx1MDAzZXZtX2ZpbGUsIG5ld19hZGRyLCB2cm0tXFx1MDAzZW5ld19sZW4sIHBnb2ZmLFxcbkBAIC05ODUsNyArOTg1LDcgQEAgc3RhdGljIGJvb2wgdnJtX2NhbGNfY2hhcmdlKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBjaGFyZ2VkO1xcbiBcXG4tXFx0aWYgKCEodnJtLVxcdTAwM2V2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fQUNDT1VOVCkpXFxuK1xcdGlmICghdm1hX3Rlc3QodnJtLVxcdTAwM2V2bWEsIFZNQV9BQ0NPVU5UX0JJVCkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0LypcXG5AQCAtMTAxMiw3ICsxMDEyLDcgQEAgc3RhdGljIGJvb2wgdnJtX2NhbGNfY2hhcmdlKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuICAqL1xcbiBzdGF0aWMgdm9pZCB2cm1fdW5jaGFyZ2Uoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcXG4ge1xcbi1cXHRpZiAoISh2cm0tXFx1MDAzZXZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9BQ0NPVU5UKSlcXG4rXFx0aWYgKCF2bWFfdGVzdCh2cm0tXFx1MDAzZXZtYSwgVk1BX0FDQ09VTlRfQklUKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0dm1fdW5hY2N0X21lbW9yeSh2cm0tXFx1MDAzZWNoYXJnZWQpO1xcbkBAIC0xMDMyLDcgKzEwMzIsNyBAQCBzdGF0aWMgdm9pZCB2cm1fc3RhdF9hY2NvdW50KHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0sXFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdnJtLVxcdTAwM2V2bWE7XFxuIFxcbiBcXHR2bV9zdGF0X2FjY291bnQobW0sIHZtYS1cXHUwMDNldm1fZmxhZ3MsIHBhZ2VzKTtcXG4tXFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9MT0NLRUQpXFxuK1xcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSlcXG4gXFx0XFx0bW0tXFx1MDAzZWxvY2tlZF92bSArPSBwYWdlcztcXG4gfVxcbiBcXG5AQCAtMTE3Niw3ICsxMTc2LDcgQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxcbiBcXHQgKiBhcm9zZSwgaW4gd2hpY2ggY2FzZSB3ZSBfZG9fIHdpc2ggdG8gdW5tYXAgdGhlIF9uZXdfIFZNQSwgd2hpY2ggbWVhbnNcXG4gXFx0ICogd2UgYWN0dWFsbHkgX2RvXyB3YW50IGl0IGJlIHVuYWNjb3VudGVkLlxcbiBcXHQgKi9cXG4tXFx0Ym9vbCBhY2NvdW50YWJsZV9tb3ZlID0gKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9BQ0NPVU5UKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRib29sIGFjY291bnRhYmxlX21vdmUgPSB2bWFfdGVzdCh2bWEsIFZNQV9BQ0NPVU5UX0JJVCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ISh2cm0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUCk7XFxuIFxcbiBcXHQvKlxcbkBAIC0xMTk1LDcgKzExOTUsNyBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuIFxcdCAqIHBvcnRpb25zIG9mIHRoZSBvcmlnaW5hbCBWTUEgdGhhdCByZW1haW4uXFxuIFxcdCAqL1xcbiBcXHRpZiAoYWNjb3VudGFibGVfbW92ZSkge1xcbi1cXHRcXHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX0FDQ09VTlQpO1xcbitcXHRcXHR2bWFfY2xlYXJfZmxhZ3Modm1hLCBWTUFfQUNDT1VOVF9CSVQpO1xcbiBcXHRcXHQvKiBXZSBhcmUgYWJvdXQgdG8gc3BsaXQgdm1hLCBzbyBzdG9yZSB0aGUgc3RhcnQvZW5kLiAqL1xcbiBcXHRcXHR2bV9zdGFydCA9IHZtYS1cXHUwMDNldm1fc3RhcnQ7XFxuIFxcdFxcdHZtX2VuZCA9IHZtYS1cXHUwMDNldm1fZW5kO1xcbkBAIC0xMjIwLDggKzEyMjAsOCBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuIFxcdCAqIHwgICAgICAgICAgICAgfFxcbiBcXHQgKiB8LS0tLS0tLS0tLS0tLXxcXG4gXFx0ICpcXG4tXFx0ICogSGF2aW5nIGNsZWFyZWQgVk1fQUNDT1VOVCBmcm9tIHRoZSB3aG9sZSBWTUEsIGFmdGVyIHdlIHVubWFwIGFib3ZlXFxuLVxcdCAqIHdlJ2xsIGVuZCB1cCB3aXRoOlxcbitcXHQgKiBIYXZpbmcgY2xlYXJlZCBWTUFfQUNDT1VOVF9CSVQgZnJvbSB0aGUgd2hvbGUgVk1BLCBhZnRlciB3ZSB1bm1hcFxcbitcXHQgKiBhYm92ZSB3ZSdsbCBlbmQgdXAgd2l0aDpcXG4gXFx0ICpcXG4gXFx0ICogICAgYWRkciAgZW5kXFxuIFxcdCAqICAgICB8ICAgICB8XFxuQEAgLTEyNDEsMTMgKzEyNDEsMTUgQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxcbiBcXHRcXHRpZiAodm1fc3RhcnQgXFx1MDAzYyBhZGRyKSB7XFxuIFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiA9IHZtYV9wcmV2KFxcdTAwMjZ2bWkpO1xcbiBcXG4tXFx0XFx0XFx0dm1fZmxhZ3Nfc2V0KHByZXYsIFZNX0FDQ09VTlQpOyAvKiBBY3F1aXJlcyBWTUEgbG9jay4gKi9cXG4rXFx0XFx0XFx0dm1hX3N0YXJ0X3dyaXRlKHByZXYpO1xcbitcXHRcXHRcXHR2bWFfc2V0X2ZsYWdzKHByZXYsIFZNQV9BQ0NPVU5UX0JJVCk7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmICh2bV9lbmQgXFx1MDAzZSBlbmQpIHtcXG4gXFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpuZXh0ID0gdm1hX25leHQoXFx1MDAyNnZtaSk7XFxuIFxcbi1cXHRcXHRcXHR2bV9mbGFnc19zZXQobmV4dCwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqL1xcbitcXHRcXHRcXHR2bWFfc3RhcnRfd3JpdGUobmV4dCk7XFxuK1xcdFxcdFxcdHZtYV9zZXRfZmxhZ3MobmV4dCwgVk1BX0FDQ09VTlRfQklUKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG5AQCAtMTMzMCw4ICsxMzMyLDggQEAgc3RhdGljIHZvaWQgZG9udHVubWFwX2NvbXBsZXRlKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0sXFxuIFxcdHVuc2lnbmVkIGxvbmcgb2xkX3N0YXJ0ID0gdnJtLVxcdTAwM2V2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbiBcXHR1bnNpZ25lZCBsb25nIG9sZF9lbmQgPSB2cm0tXFx1MDAzZXZtYS1cXHUwMDNldm1fZW5kO1xcbiBcXG4tXFx0LyogV2UgYWx3YXlzIGNsZWFyIFZNX0xPQ0tFRFtPTkZBVUxUXSBvbiB0aGUgb2xkIFZNQS4gKi9cXG4tXFx0dm1fZmxhZ3NfY2xlYXIodnJtLVxcdTAwM2V2bWEsIFZNX0xPQ0tFRF9NQVNLKTtcXG4rXFx0LyogV2UgYWx3YXlzIGNsZWFyIFZNQV9MT0NLRURbT05GQVVMVF1fQklUIG9uIHRoZSBvbGQgVk1BLiAqL1xcbitcXHR2bWFfY2xlYXJfZmxhZ3NfbWFzayh2cm0tXFx1MDAzZXZtYSwgVk1BX0xPQ0tFRF9NQVNLKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIGFub25fdm1hIGxpbmtzIG9mIHRoZSBvbGQgdm1hIGlzIG5vIGxvbmdlciBuZWVkZWQgYWZ0ZXIgaXRzIHBhZ2VcXG5AQCAtMTc2NywxNCArMTc2OSwxNCBAQCBzdGF0aWMgaW50IGNoZWNrX3ByZXBfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuIFxcdCAqIGJhc2VkIG9uIHRoZSBvcmlnaW5hbC4gIFRoZXJlIGFyZSBubyBrbm93biB1c2UgY2FzZXMgZm9yIHRoaXNcXG4gXFx0ICogYmVoYXZpb3IuICBBcyBhIHJlc3VsdCwgZmFpbCBzdWNoIGF0dGVtcHRzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFvbGRfbGVuIFxcdTAwMjZcXHUwMDI2ICEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IChWTV9TSEFSRUQgfCBWTV9NQVlTSEFSRSkpKSB7XFxuK1xcdGlmICghb2xkX2xlbiBcXHUwMDI2XFx1MDAyNiAhdm1hX3Rlc3RfYW55KHZtYSwgVk1BX1NIQVJFRF9CSVQsIFZNQV9NQVlTSEFSRV9CSVQpKSB7XFxuIFxcdFxcdHByX3dhcm5fb25jZShcXFwiJXMgKCVkKTogYXR0ZW1wdGVkIHRvIGR1cGxpY2F0ZSBhIHByaXZhdGUgbWFwcGluZyB3aXRoIG1yZW1hcC4gIFRoaXMgaXMgbm90IHN1cHBvcnRlZC5cXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgICAgY3VycmVudC1cXHUwMDNlY29tbSwgY3VycmVudC1cXHUwMDNlcGlkKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICgodnJtLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1SRU1BUF9ET05UVU5NQVApIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgKFZNX0RPTlRFWFBBTkQgfCBWTV9QRk5NQVApKSlcXG4rXFx0ICAgIHZtYV90ZXN0X2FueSh2bWEsIFZNQV9ET05URVhQQU5EX0JJVCwgVk1BX1BGTk1BUF9CSVQpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdC8qXFxuQEAgLTE4MDQsNyArMTgwNiw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHJlcF92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHQvKiBXZSBhcmUgZXhwYW5kaW5nIGFuZCB0aGUgVk1BIGlzIG1sb2NrKCknZCBzbyB3ZSBuZWVkIHRvIHBvcHVsYXRlLiAqL1xcbi1cXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX0xPQ0tFRClcXG4rXFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKVxcbiBcXHRcXHR2cm0tXFx1MDAzZXBvcHVsYXRlX2V4cGFuZCA9IHRydWU7XFxuIFxcbiBcXHQvKiBOZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgYSBncm93aW5nIG1hcHBpbmcgKi9cXG5AQCAtMTgxMiwxMCArMTgxNCwxMCBAQCBzdGF0aWMgaW50IGNoZWNrX3ByZXBfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuIFxcdGlmIChwZ29mZiArIChuZXdfbGVuIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpIFxcdTAwM2MgcGdvZmYpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fRE9OVEVYUEFORCB8IFZNX1BGTk1BUCkpXFxuK1xcdGlmICh2bWFfdGVzdF9hbnkodm1hLCBWTUFfRE9OVEVYUEFORF9CSVQsIFZNQV9QRk5NQVBfQklUKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbi1cXHRpZiAoIW1sb2NrX2Z1dHVyZV9vayhtbSwgdm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX0xPQ0tFRCwgdnJtLVxcdTAwM2VkZWx0YSkpXFxuK1xcdGlmICghbWxvY2tfZnV0dXJlX29rKG1tLCB2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSwgdnJtLVxcdTAwM2VkZWx0YSkpXFxuIFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiBcXG4gXFx0aWYgKCFtYXlfZXhwYW5kX3ZtKG1tLCBcXHUwMDI2dm1hLVxcdTAwM2VmbGFncywgdnJtLVxcdTAwM2VkZWx0YSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKSlcXG5kaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmNcXG5pbmRleCBhZGMwYjBjYTkwNmJkZi4uNDk4ZTAxZWU0MGIwNTYgMTAwNjQ0XFxuLS0tIGEvbW0vbm9tbXUuY1xcbisrKyBiL21tL25vbW11LmNcXG5AQCAtMTAxNCwxMSArMTAxNCwxMiBAQCB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbGVuLFxcbiBcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHByb3QsXFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsXFxuLVxcdFxcdFxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuK1xcdFxcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncyxcXG4gXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwZ29mZixcXG4gXFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqcG9wdWxhdGUsXFxuIFxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnVmKVxcbiB7XFxuK1xcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWFfZmxhZ3NfdG9fbGVnYWN5KHZtYV9mbGFncyk7XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbiBcXHRzdHJ1Y3Qgdm1fcmVnaW9uICpyZWdpb247XFxuIFxcdHN0cnVjdCByYl9ub2RlICpyYjtcXG5kaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jXFxuaW5kZXggNTA5MDQ1NzU0MmNhOWMuLmJmMDUxM2QxZDNkMDg2IDEwMDY0NFxcbi0tLSBhL21tL3V0aWwuY1xcbisrKyBiL21tL3V0aWwuY1xcbkBAIC01NzgsOCArNTc4LDggQEAgdW5zaWduZWQgbG9uZyB2bV9tbWFwX3Bnb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdGlmICghcmV0KSB7XFxuIFxcdFxcdGlmIChtbWFwX3dyaXRlX2xvY2tfa2lsbGFibGUobW0pKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbi1cXHRcXHRyZXQgPSBkb19tbWFwKGZpbGUsIGFkZHIsIGxlbiwgcHJvdCwgZmxhZywgMCwgcGdvZmYsIFxcdTAwMjZwb3B1bGF0ZSxcXG4tXFx0XFx0XFx0ICAgICAgXFx1MDAyNnVmKTtcXG4rXFx0XFx0cmV0ID0gZG9fbW1hcChmaWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWcsIEVNUFRZX1ZNQV9GTEFHUywgcGdvZmYsXFxuK1xcdFxcdFxcdCAgICAgIFxcdTAwMjZwb3B1bGF0ZSwgXFx1MDAyNnVmKTtcXG4gXFx0XFx0bW1hcF93cml0ZV91bmxvY2sobW0pO1xcbiBcXHRcXHR1c2VyZmF1bHRmZF91bm1hcF9jb21wbGV0ZShtbSwgXFx1MDAyNnVmKTtcXG4gXFx0XFx0aWYgKHBvcHVsYXRlKVxcbkBAIC02MjcsMjAgKzYyNywyMCBAQCBFWFBPUlRfU1lNQk9MKHZtX21tYXApO1xcbiB1bnNpZ25lZCBsb25nIHZtX21tYXBfc2hhZG93X3N0YWNrKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuIHtcXG4rXFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gVk1BX1NIQURPV19TVEFDSztcXG4gXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4gXFx0dW5zaWduZWQgbG9uZyByZXQsIHVudXNlZDtcXG4tXFx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IFZNX1NIQURPV19TVEFDSztcXG4gXFxuIFxcdGZsYWdzIHw9IE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURTtcXG4gXFx0aWYgKGFkZHIpXFxuIFxcdFxcdGZsYWdzIHw9IE1BUF9GSVhFRF9OT1JFUExBQ0U7XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxcbi1cXHRcXHR2bV9mbGFncyB8PSBWTV9OT0hVR0VQQUdFO1xcbitcXHRcXHR2bWFfZmxhZ3Nfc2V0KFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9OT0hVR0VQQUdFX0JJVCk7XFxuIFxcbiBcXHRtbWFwX3dyaXRlX2xvY2sobW0pO1xcbiBcXHRyZXQgPSBkb19tbWFwKE5VTEwsIGFkZHIsIGxlbiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsXFxuLVxcdFxcdCAgICAgIHZtX2ZsYWdzLCAwLCBcXHUwMDI2dW51c2VkLCBOVUxMKTtcXG4rXFx0XFx0ICAgICAgdm1hX2ZsYWdzLCAwLCBcXHUwMDI2dW51c2VkLCBOVUxMKTtcXG4gXFx0bW1hcF93cml0ZV91bmxvY2sobW0pO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuY1xcbmluZGV4IDlkNTU2ZDMzYjI0YmQxLi5iNWJjM2VlYzk2MWM3OSAxMDA2NDRcXG4tLS0gYS9tbS92bWEuY1xcbisrKyBiL21tL3ZtYS5jXFxuQEAgLTU2LDcgKzU2LDcgQEAgc3RydWN0IG1tYXBfc3RhdGUge1xcbiBcXHRcXHQucGdsZW4gPSBQSFlTX1BGTihsZW5fKSxcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdC52bWFfZmxhZ3MgPSB2bWFfZmxhZ3NfLFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0LmZpbGUgPSBmaWxlXyxcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdC5wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWFfZmxhZ3NfKSxcXHRcXHRcXFxcXFxuK1xcdFxcdC5wYWdlX3Byb3QgPSB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYV9mbGFnc18pLFxcdFxcXFxcXG4gXFx0fVxcbiBcXG4gI2RlZmluZSBWTUdfTU1BUF9TVEFURShuYW1lLCBtYXBfLCB2bWFfKVxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtMjE3Niw3ICsyMTc2LDcgQEAgYm9vbCB2bWFfd2FudHNfd3JpdGVub3RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBncHJvdF90IHZtX3BhZ2VfcHJvdClcXG4gXFx0LyogVGhlIG9wZW4gcm91dGluZSBkaWQgc29tZXRoaW5nIHRvIHRoZSBwcm90ZWN0aW9ucyB0aGF0IHBncHJvdF9tb2RpZnlcXG4gXFx0ICogd29uJ3QgcHJlc2VydmU/ICovXFxuIFxcdGlmIChwZ3Byb3RfdmFsKHZtX3BhZ2VfcHJvdCkgIT1cXG4tXFx0ICAgIHBncHJvdF92YWwodm1fcGdwcm90X21vZGlmeSh2bV9wYWdlX3Byb3QsIHZtYS1cXHUwMDNldm1fZmxhZ3MpKSlcXG4rXFx0ICAgIHBncHJvdF92YWwodm1hX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bWEtXFx1MDAzZWZsYWdzKSkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdC8qXFxuQEAgLTI4ODMsNyArMjg4Myw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gICogZmlsZSB0byBiZSBtYXBwZWQsIG90aGVyd2lzZSBOVUxMLlxcbiAgKiBAYWRkcjogVGhlIHBhZ2UtYWxpZ25lZCBhZGRyZXNzIGF0IHdoaWNoIHRvIHBlcmZvcm0gdGhlIG1hcHBpbmcuXFxuICAqIEBsZW46IFRoZSBwYWdlLWFsaWduZWQsIG5vbi16ZXJvLCBsZW5ndGggb2YgdGhlIG1hcHBpbmcuXFxuLSAqIEB2bV9mbGFnczogVGhlIFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgbWFwcGluZy5cXG4rICogQHZtYV9mbGFnczogVGhlIFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgbWFwcGluZy5cXG4gICogQHBnb2ZmOiBJZiBAZmlsZSBpcyBzcGVjaWZpZWQsIHRoZSBwYWdlIG9mZnNldCBpbnRvIHRoZSBmaWxlLCBpZiBub3QgdGhlblxcbiAgKiB0aGUgdmlydHVhbCBwYWdlIG9mZnNldCBpbiBtZW1vcnkgb2YgdGhlIGFub255bW91cyBtYXBwaW5nLlxcbiAgKiBAdWY6IE9wdGlvbmFsbHksIGEgcG9pbnRlciB0byBhIGxpc3QgaGVhZCB1c2VkIGZvciB0cmFja2luZyB1c2VyZmF1bHRmZCB1bm1hcFxcbkBAIC0yODkzLDEyICsyODkzLDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gICogYmVlbiBwZXJmb3JtZWQuXFxuICAqL1xcbiB1bnNpZ25lZCBsb25nIG1tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuK1xcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHZtYV9mbGFnc190IHZtYV9mbGFncyxcXG4gXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHBnb2ZmLCBzdHJ1Y3QgbGlzdF9oZWFkICp1ZilcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHJldDtcXG4gXFx0Ym9vbCB3cml0YWJsZV9maWxlX21hcHBpbmcgPSBmYWxzZTtcXG4tXFx0Y29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbGVnYWN5X3RvX3ZtYV9mbGFncyh2bV9mbGFncyk7XFxuIFxcbiBcXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoY3VycmVudC1cXHUwMDNlbW0pO1xcbiBcXG5AQCAtMjkwNyw3ICsyOTA2LDcgQEAgdW5zaWduZWQgbG9uZyBtbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFxuIFxcdC8qIEFsbG93IGFyY2hpdGVjdHVyZXMgdG8gc2FuaXR5LWNoZWNrIHRoZSB2bV9mbGFncy4gKi9cXG4tXFx0aWYgKCFhcmNoX3ZhbGlkYXRlX2ZsYWdzKHZtX2ZsYWdzKSlcXG4rXFx0aWYgKCFhcmNoX3ZhbGlkYXRlX2ZsYWdzKHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0LyogTWFwIHdyaXRhYmxlIGFuZCBlbnN1cmUgdGhpcyBpc24ndCBhIHNlYWxlZCBtZW1mZC4gKi9cXG5AQCAtMzQyMCwxOCArMzQxOSwyMSBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKl9faW5zdGFsbF9zcGVjaWFsX21hcHBpbmcoXFxuIFxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIHZvaWQgKnByaXYsXFxuIFxcdGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqb3BzKVxcbiB7XFxuLVxcdGludCByZXQ7XFxuK1xcdHZtYV9mbGFnc190IHZtYV9mbGFncyA9IGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3MpO1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdHZtYSA9IHZtX2FyZWFfYWxsb2MobW0pO1xcbi1cXHRpZiAodW5saWtlbHkodm1hID09IE5VTEwpKVxcbitcXHRpZiAodW5saWtlbHkoIXZtYSkpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiBcXG4tXFx0dm1fZmxhZ3MgfD0gbW0tXFx1MDAzZWRlZl9mbGFncyB8IFZNX0RPTlRFWFBBTkQ7XFxuK1xcdHZtYV9mbGFnc19zZXRfbWFzayhcXHUwMDI2dm1hX2ZsYWdzLCBtbS1cXHUwMDNlZGVmX3ZtYV9mbGFncyk7XFxuK1xcdHZtYV9mbGFnc19zZXQoXFx1MDAyNnZtYV9mbGFncywgVk1BX0RPTlRFWFBBTkRfQklUKTtcXG4gXFx0aWYgKHBndGFibGVfc3VwcG9ydHNfc29mdF9kaXJ0eSgpKVxcbi1cXHRcXHR2bV9mbGFncyB8PSBWTV9TT0ZURElSVFk7XFxuLVxcdHZtX2ZsYWdzX2luaXQodm1hLCB2bV9mbGFncyBcXHUwMDI2IH5WTV9MT0NLRURfTUFTSyk7XFxuLVxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG4rXFx0XFx0dm1hX2ZsYWdzX3NldChcXHUwMDI2dm1hX2ZsYWdzLCBWTUFfU09GVERJUlRZX0JJVCk7XFxuK1xcdHZtYV9mbGFnc19jbGVhcl9tYXNrKFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfTUFTSyk7XFxuK1xcdHZtYS1cXHUwMDNlZmxhZ3MgPSB2bWFfZmxhZ3M7XFxuK1xcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcXG4gXFxuIFxcdHZtYS1cXHUwMDNldm1fb3BzID0gb3BzO1xcbiBcXHR2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHByaXY7XFxuZGlmZiAtLWdpdCBhL21tL3ZtYS5oIGIvbW0vdm1hLmhcXG5pbmRleCBhZGI3YTBiYTExOTIwOC4uMGJjN2Q1MjFlOTc2NzcgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hLmhcXG4rKysgYi9tbS92bWEuaFxcbkBAIC01MTcsNyArNTE3LDcgQEAgaW50IG1tX3Rha2VfYWxsX2xvY2tzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG4gdm9pZCBtbV9kcm9wX2FsbF9sb2NrcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuIFxcbiB1bnNpZ25lZCBsb25nIG1tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgbGVuLCB2bV9mbGFnc190IHZtX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGxlbiwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICp1Zik7XFxuIFxcbiBpbnQgZG9fYnJrX2ZsYWdzKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpicmt2bWEsXFxuQEAgLTU0MSw5ICs1NDEsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV93YW50c19tYW51YWxfcHRlX3dyaXRlX3VwZ3JhZGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR19NTVVcXG4tc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bV9wZ3Byb3RfbW9kaWZ5KHBncHJvdF90IG9sZHByb3QsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuK3N0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX3BncHJvdF9tb2RpZnkocGdwcm90X3Qgb2xkcHJvdCwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxcbiB7XFxuLVxcdHJldHVybiBwZ3Byb3RfbW9kaWZ5KG9sZHByb3QsIHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3MpKTtcXG4rXFx0Y29uc3QgcGdwcm90X3QgcHJvdCA9IHZtYV9mbGFnc190b19wYWdlX3Byb3Qodm1hX2ZsYWdzKTtcXG4rXFxuK1xcdHJldHVybiBwZ3Byb3RfbW9kaWZ5KG9sZHByb3QsIHByb3QpO1xcbiB9XFxuICNlbmRpZlxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hX2V4ZWMuYyBiL21tL3ZtYV9leGVjLmNcXG5pbmRleCBlZjFmYTJiMTYxZjNiYS4uN2FmMTI2MDY4OWI5N2UgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hX2V4ZWMuY1xcbisrKyBiL21tL3ZtYV9leGVjLmNcXG5AQCAtMTEyLDE1ICsxMTIsMTcgQEAgaW50IHJlbG9jYXRlX3ZtYV9kb3duKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHNoaWZ0KVxcbiBpbnQgY3JlYXRlX2luaXRfc3RhY2tfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxcbiBcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgKnRvcF9tZW1fcClcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gVk1fU1RBQ0tfRkxBR1MgfCBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQO1xcbitcXHR2bWFfZmxhZ3NfdCBmbGFncyA9IFZNQV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQO1xcbitcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4gXFx0aW50IGVycjtcXG4tXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bV9hcmVhX2FsbG9jKG1tKTtcXG4gXFxuK1xcdC8qIFZNQV9TVEFDS19GTEFHUyBhbmQgVk1BX1NUQUNLX0lOQ09NUExFVEVfU0VUVVAgbXVzdCBub3Qgb3ZlcmxhcC4gKi9cXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKHZtYV9mbGFnc190ZXN0X2FueV9tYXNrKFxcdTAwMjZmbGFncywgVk1BX1NUQUNLX0ZMQUdTKSk7XFxuK1xcbitcXHR2bWEgPSB2bV9hcmVhX2FsbG9jKG1tKTtcXG4gXFx0aWYgKCF2bWEpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0dm1hX3NldF9hbm9ueW1vdXModm1hKTtcXG4tXFxuIFxcdGlmIChtbWFwX3dyaXRlX2xvY2tfa2lsbGFibGUobW0pKSB7XFxuIFxcdFxcdGVyciA9IC1FSU5UUjtcXG4gXFx0XFx0Z290byBlcnJfZnJlZTtcXG5AQCAtMTM0LDE5ICsxMzYsMjEgQEAgaW50IGNyZWF0ZV9pbml0X3N0YWNrX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfa3NtO1xcbiBcXG4rXFx0dm1hX2ZsYWdzX3NldF9tYXNrKFxcdTAwMjZmbGFncywgVk1BX1NUQUNLX0ZMQUdTKTtcXG4rXFx0dm1hX3NldF9hbm9ueW1vdXModm1hKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFBsYWNlIHRoZSBzdGFjayBhdCB0aGUgbGFyZ2VzdCBzdGFjayBhZGRyZXNzIHRoZSBhcmNoaXRlY3R1cmVcXG4gXFx0ICogc3VwcG9ydHMuIExhdGVyLCB3ZSdsbCBtb3ZlIHRoaXMgdG8gYW4gYXBwcm9wcmlhdGUgcGxhY2UuIFdlIGRvbid0XFxuIFxcdCAqIHVzZSBTVEFDS19UT1AgYmVjYXVzZSB0aGF0IGNhbiBkZXBlbmQgb24gYXR0cmlidXRlcyB3aGljaCBhcmVuJ3RcXG4gXFx0ICogY29uZmlndXJlZCB5ZXQuXFxuIFxcdCAqL1xcbi1cXHRWTV9XQVJOX09OX09OQ0UoVk1fU1RBQ0tfRkxBR1MgXFx1MDAyNiBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQKTtcXG4gXFx0dm1hLVxcdTAwM2V2bV9lbmQgPSBTVEFDS19UT1BfTUFYO1xcbiBcXHR2bWEtXFx1MDAzZXZtX3N0YXJ0ID0gdm1hLVxcdTAwM2V2bV9lbmQgLSBQQUdFX1NJWkU7XFxuIFxcdGlmIChwZ3RhYmxlX3N1cHBvcnRzX3NvZnRfZGlydHkoKSlcXG4tXFx0XFx0ZmxhZ3MgfD0gVk1fU09GVERJUlRZO1xcbi1cXHR2bV9mbGFnc19pbml0KHZtYSwgZmxhZ3MpO1xcbi1cXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncyk7XFxuK1xcdFxcdHZtYV9mbGFnc19zZXQoXFx1MDAyNmZsYWdzLCBWTUFfU09GVERJUlRZX0JJVCk7XFxuK1xcdHZtYS1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4rXFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xcbiBcXG4gXFx0ZXJyID0gaW5zZXJ0X3ZtX3N0cnVjdChtbSwgdm1hKTtcXG4gXFx0aWYgKGVycilcXG5kaWZmIC0tZ2l0IGEvc291bmQvY29yZS9tZW1hbGxvYy5jIGIvc291bmQvY29yZS9tZW1hbGxvYy5jXFxuaW5kZXggOTMyMDY3MWRmY2M4YjAuLjViYzdlNTg2YjQzMGY1IDEwMDY0NFxcbi0tLSBhL3NvdW5kL2NvcmUvbWVtYWxsb2MuY1xcbisrKyBiL3NvdW5kL2NvcmUvbWVtYWxsb2MuY1xcbkBAIC04NTEsNyArODUxLDcgQEAgc3RhdGljIHZvaWQgc25kX2RtYV9ub25jb2hlcmVudF9mcmVlKHN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqZG1hYilcXG4gc3RhdGljIGludCBzbmRfZG1hX25vbmNvaGVyZW50X21tYXAoc3RydWN0IHNuZF9kbWFfYnVmZmVyICpkbWFiLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhKVxcbiB7XFxuLVxcdGFyZWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3QoYXJlYS1cXHUwMDNldm1fZmxhZ3MpO1xcbitcXHRhcmVhLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdChhcmVhKTtcXG4gXFx0cmV0dXJuIGRtYV9tbWFwX3BhZ2VzKGRtYWItXFx1MDAzZWRldi5kZXYsIGFyZWEsXFxuIFxcdFxcdFxcdCAgICAgIGFyZWEtXFx1MDAzZXZtX2VuZCAtIGFyZWEtXFx1MDAzZXZtX3N0YXJ0LFxcbiBcXHRcXHRcXHQgICAgICB2aXJ0X3RvX3BhZ2UoZG1hYi1cXHUwMDNlYXJlYSkpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oIGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxcbmluZGV4IDc3M2UyMzMwM2UyNmFmLi42NGYzOGE4MzYxM2U1NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxcbkBAIC0yNDUsOCArMjQ1LDEwIEBAIGVudW0ge1xcbiAjZGVmaW5lIFZNX1NUQUNLXFx0SU5JVF9WTV9GTEFHKFNUQUNLKVxcbiAjaWZkZWYgQ09ORklHX1NUQUNLX0dST1dTVVBcXG4gI2RlZmluZSBWTV9TVEFDS19FQVJMWVxcdElOSVRfVk1fRkxBRyhTVEFDS19FQVJMWSlcXG4rI2RlZmluZSBWTUFfU1RBQ0tfRUFSTFkgbWtfdm1hX2ZsYWdzKFZNQV9TVEFDS19FQVJMWV9CSVQpXFxuICNlbHNlXFxuICNkZWZpbmUgVk1fU1RBQ0tfRUFSTFlcXHRWTV9OT05FXFxuKyNkZWZpbmUgVk1BX1NUQUNLX0VBUkxZIEVNUFRZX1ZNQV9GTEFHU1xcbiAjZW5kaWZcXG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19QS0VZU1xcbiAjZGVmaW5lIFZNX1BLRVlfU0hJRlQgKChfX2ZvcmNlIGludClWTUFfSElHSF9BUkNIXzBfQklUKVxcbkBAIC0zMTUsNiArMzE3LDggQEAgZW51bSB7XFxuIFxcbiAvKiBCaXRzIHNldCBpbiB0aGUgVk1BIHVudGlsIHRoZSBzdGFjayBpcyBpbiBpdHMgZmluYWwgbG9jYXRpb24gKi9cXG4gI2RlZmluZSBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQIChWTV9SQU5EX1JFQUQgfCBWTV9TRVFfUkVBRCB8IFZNX1NUQUNLX0VBUkxZKVxcbisjZGVmaW5lIFZNQV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQIGFwcGVuZF92bWFfZmxhZ3MoXFx0XFx0XFxcXFxcbitcXHRWTUFfU1RBQ0tfRUFSTFksIFZNQV9SQU5EX1JFQURfQklULCBWTUFfU0VRX1JFQURfQklUKVxcbiBcXG4gI2RlZmluZSBUQVNLX0VYRUNfQklUICgoY3VycmVudC1cXHUwMDNlcGVyc29uYWxpdHkgXFx1MDAyNiBSRUFEX0lNUExJRVNfRVhFQykgPyBcXFxcXFxuIFxcdFxcdCAgICAgICBWTV9FWEVDX0JJVCA6IFZNX1JFQURfQklUKVxcbkBAIC0xNDI0LDIwICsxNDI4LDE4IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX2l0ZXJfbmV4dF9yYW5nZShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkpXFxuIH1cXG4gXFxuIGJvb2wgdm1hX3dhbnRzX3dyaXRlbm90aWZ5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ3Byb3RfdCB2bV9wYWdlX3Byb3QpO1xcbitzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9wZ3Byb3RfbW9kaWZ5KHBncHJvdF90IG9sZHByb3QsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuIFxcbiAvKiBVcGRhdGUgdm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgdG8gcmVmbGVjdCB2bWEtXFx1MDAzZXZtX2ZsYWdzLiAqL1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX3NldF9wYWdlX3Byb3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIHtcXG4tXFx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYS1cXHUwMDNldm1fZmxhZ3M7XFxuK1xcdHZtYV9mbGFnc190IHZtYV9mbGFncyA9IHZtYS1cXHUwMDNlZmxhZ3M7XFxuIFxcdHBncHJvdF90IHZtX3BhZ2VfcHJvdDtcXG4gXFxuLVxcdC8qIHRlc3Rpbmc6IHdlIGlubGluZSB2bV9wZ3Byb3RfbW9kaWZ5KCkgdG8gYXZvaWQgY2xhc2ggd2l0aCB2bWEuaC4gKi9cXG4tXFx0dm1fcGFnZV9wcm90ID0gcGdwcm90X21vZGlmeSh2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCwgdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFncykpO1xcbi1cXG4rXFx0dm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QsIHZtYV9mbGFncyk7XFxuIFxcdGlmICh2bWFfd2FudHNfd3JpdGVub3RpZnkodm1hLCB2bV9wYWdlX3Byb3QpKSB7XFxuLVxcdFxcdHZtX2ZsYWdzIFxcdTAwMjY9IH5WTV9TSEFSRUQ7XFxuLVxcdFxcdC8qIHRlc3Rpbmc6IHdlIGlubGluZSB2bV9wZ3Byb3RfbW9kaWZ5KCkgdG8gYXZvaWQgY2xhc2ggd2l0aCB2bWEuaC4gKi9cXG4tXFx0XFx0dm1fcGFnZV9wcm90ID0gcGdwcm90X21vZGlmeSh2bV9wYWdlX3Byb3QsIHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3MpKTtcXG4rXFx0XFx0dm1hX2ZsYWdzX2NsZWFyKFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKTtcXG4rXFx0XFx0dm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bWFfZmxhZ3MpO1xcbiBcXHR9XFxuIFxcdC8qIHJlbW92ZV9wcm90ZWN0aW9uX3B0ZXMgcmVhZHMgdm1hLVxcdTAwM2V2bV9wYWdlX3Byb3Qgd2l0aG91dCBtbWFwX2xvY2sgKi9cXG4gXFx0V1JJVEVfT05DRSh2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCwgdm1fcGFnZV9wcm90KTtcXG5AQCAtMTU0Nyw3ICsxNTQ5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZ2V0X3N5c2N0bF9tYXhfbWFwX2NvdW50KHZvaWQpXFxuICNkZWZpbmUgcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KClcXHRJU19FTkFCTEVEKENPTkZJR19NRU1fU09GVF9ESVJUWSlcXG4gI2VuZGlmXFxuIFxcbi1zdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9nZXRfcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcXG4rc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcXG4ge1xcbiBcXHRjb25zdCB2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpO1xcbiBcXG5AQCAtMTU3NSwzICsxNTc3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfY2FuX21vZGlmeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0aWYgKHZtYV9pc19hdHRhY2hlZCh2bWEpKVxcbiBcXHRcXHR2bWFfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEpO1xcbiB9XFxuK1xcbitzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9nZXRfcGFnZV9wcm90KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbit7XFxuK1xcdHJldHVybiB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYS1cXHUwMDNlZmxhZ3MpO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEwOjE0OjM3Ljc5OTY5MTIxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjAxMDU0MjU4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWxvY2tfZml4dXBcIixcbiAgICBcImFwcGx5X3ZtYV9sb2NrX2ZsYWdzXCIsXG4gICAgXCJhcHBseV9tbG9ja2FsbF9mbGFnc1wiLFxuICAgIFwidW5tYXBfc291cmNlX3ZtYVwiLFxuICAgIFwiY2hlY2tfcHJlcF92bWFcIixcbiAgICBcIm1lbWZkX2NoZWNrX3NlYWxzX21tYXBcIixcbiAgICBcImNyZWF0ZV9pbml0X3N0YWNrX3ZtYVwiLFxuICAgIFwidGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1ham9yIHJlZmFjdG9yaW5nIG9mIFZNQSBmbGFncyBoYW5kbGluZyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHRyYW5zaXRpb25pbmcgZnJvbSBgdm1fZmxhZ3NfdGAgdG8gYHZtYV9mbGFnc190YC4gSXQgbW9kaWZpZXMgY3JpdGljYWwgcGF0aHMgaW4gbW1hcCwgbXJlbWFwLCBtbG9jaywgYW5kIG1wcm90ZWN0LiBUaGVzZSBjaGFuZ2VzIGZ1bmN0aW9uYWxseSBhbHRlciBob3cgVk1BIGZsYWdzIGFyZSBzZXQsIGNsZWFyZWQsIGFuZCB0ZXN0ZWQsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2UgaW5jb3JyZWN0IG1lbW9yeSBwcm90ZWN0aW9ucywgYWNjb3VudGluZyBlcnJvcnMsIG9yIGxvY2tpbmcgaXNzdWVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZXNlIGZsYWdzLCBhdm9pZGluZyB0aGUgYWJzb2x1dGUgaG90dGVzdCBwYXRocyBsaWtlIGBkb19tbWFwYCB0byBwcmV2ZW50IHNrZXdlZCBkaXN0cmlidXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdlOGRlMmJkMTE5ZGU3M2Q5NDY4ZGE0ZWY3ZTM5ZDhlODQ3OTRjYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAxMDoxNDozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdmRzby5jIGIvYXJjaC9taXBzL2tlcm5lbC92ZHNvLmNcbmluZGV4IGJkMWZjMTdkMzk3NWRjLi45NDg3Mzc3NWZjMGY0NSAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdmRzby5jXG4rKysgYi9hcmNoL21pcHMva2VybmVsL3Zkc28uY1xuQEAgLTkxLDggKzkxLDggQEAgaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBpbnQgdXNlc19pbnRlcnApXG4gXG4gXHRcdC8qIE1hcCBkZWxheSBzbG90IGVtdWxhdGlvbiBwYWdlICovXG4gXHRcdGJhc2UgPSBkb19tbWFwKE5VTEwsIFNUQUNLX1RPUCwgUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX0VYRUMsXG4tXHRcdFx0ICAgICAgIE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSB8IE1BUF9GSVhFRCwgMCwgMCwgXHUwMDI2dW51c2VkLFxuLVx0XHRcdCAgICAgICBOVUxMKTtcbitcdFx0XHQgICAgICAgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFIHwgTUFQX0ZJWEVELFxuK1x0XHRcdCAgICAgICBFTVBUWV9WTUFfRkxBR1MsIDAsIFx1MDAyNnVudXNlZCwgTlVMTCk7XG4gXHRcdGlmIChJU19FUlJfVkFMVUUoYmFzZSkpIHtcbiBcdFx0XHRyZXQgPSBiYXNlO1xuIFx0XHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jIGIvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmNcbmluZGV4IDI4YmVjNWJjNzg3OTQ5Li44MjEyN2UzMWRjYTZkZSAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jXG4rKysgYi9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuY1xuQEAgLTY1OSw3ICs2NTksOCBAQCB1bnNpZ25lZCBsb25nIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHR1bnNpZ25lZCBpbnQgcHNpemU7XG4gXG4gXHRpZiAocmFkaXhfZW5hYmxlZCgpKVxuLVx0XHRyZXR1cm4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywgdm1fZmxhZ3MpO1xuK1x0XHRyZXR1cm4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyxcbitcdFx0XHRcdFx0XHQgbGVnYWN5X3RvX3ZtYV9mbGFncyh2bV9mbGFncykpO1xuIFxuIFx0aWYgKGZpbHAgXHUwMDI2XHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxuIFx0XHRwc2l6ZSA9IGZpbGVfdG9fcHNpemUoZmlscCk7XG5AQCAtNjc5LDcgKzY4MCw4IEBAIHVuc2lnbmVkIGxvbmcgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0dW5zaWduZWQgaW50IHBzaXplO1xuIFxuIFx0aWYgKHJhZGl4X2VuYWJsZWQoKSlcbi1cdFx0cmV0dXJuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihmaWxwLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcbitcdFx0cmV0dXJuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihmaWxwLCBhZGRyMCwgbGVuLFxuK1x0XHRcdFx0cGdvZmYsIGZsYWdzLCBsZWdhY3lfdG9fdm1hX2ZsYWdzKHZtX2ZsYWdzKSk7XG4gXG4gXHRpZiAoZmlscCBcdTAwMjZcdTAwMjYgaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXG4gXHRcdHBzaXplID0gZmlsZV90b19wc2l6ZShmaWxwKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uY1xuaW5kZXggZTNlZDY4NGRkY2YyOTEuLjMyYTA1ZDg4OWI5YTJiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uY1xuQEAgLTEyNTIsNyArMTI1Miw3IEBAIGludCBkcm1fZ2VtX21tYXBfb2JqKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1bnNpZ25lZCBsb25nIG9ial9zaXplLFxuIFx0XHR9XG4gXG4gXHRcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0lPIHwgVk1fUEZOTUFQIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QKTtcbi1cdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpKTtcbitcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XG4gXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2RtYV9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2RtYV9oZWxwZXIuY1xuaW5kZXggMWMwMGE3MWFiM2M5ZDAuLjdkOTYxMjA3NWQzMTBiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZG1hX2hlbHBlci5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9kbWFfaGVscGVyLmNcbkBAIC01NDAsNyArNTQwLDcgQEAgaW50IGRybV9nZW1fZG1hX21tYXAoc3RydWN0IGRybV9nZW1fZG1hX29iamVjdCAqZG1hX29iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpcbiBcdHZtX2ZsYWdzX21vZCh2bWEsIFZNX0RPTlREVU1QIHwgVk1fRE9OVEVYUEFORCwgVk1fUEZOTUFQKTtcbiBcbiBcdGlmIChkbWFfb2JqLVx1MDAzZW1hcF9ub25jb2hlcmVudCkge1xuLVx0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuK1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcbiBcdFx0cmV0ID0gZG1hX21tYXBfcGFnZXMoZHJtX2Rldl9kbWFfZGV2KGRtYV9vYmotXHUwMDNlYmFzZS5kZXYpLFxuIFx0XHRcdFx0ICAgICB2bWEsIHZtYS1cdTAwM2V2bV9lbmQgLSB2bWEtXHUwMDNldm1fc3RhcnQsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuY1xuaW5kZXggYzk4OTQ1OWViMjE1OTEuLjA2ZDAxOWQ1MWQzZTZiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jXG5AQCAtNzY0LDcgKzc2NCw3IEBAIGludCBkcm1fZ2VtX3NobWVtX21tYXAoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0XG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHR2bV9mbGFnc19zZXQodm1hLCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xuLVx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKTtcbitcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFx0aWYgKHNobWVtLVx1MDAzZW1hcF93YylcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmNcbmluZGV4IDJlNGQ2ZDExN2VlMmQ4Li5mOWM4YjdiMmJmYzdhZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmNcbkBAIC0xMzMsNyArMTMzLDcgQEAgc3RhdGljIGludCBldG5hdml2X2dlbV9tbWFwX29iaihzdHJ1Y3QgZXRuYXZpdl9nZW1fb2JqZWN0ICpldG5hdml2X29iaixcbiBcbiBcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX1BGTk1BUCB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XG4gXG4tXHR2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4rXHR2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFxuIFx0aWYgKGV0bmF2aXZfb2JqLVx1MDAzZWZsYWdzIFx1MDAyNiBFVE5BX0JPX1dDKSB7XG4gXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX3BhZ2VfcHJvdCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dlbS5jXG5pbmRleCA5YTYyNzBmM2RjYTZiZi4uMDIwOGM5MjU5NTcyNWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZ2VtLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nZW0uY1xuQEAgLTM3NywxMyArMzc3LDEzIEBAIHN0YXRpYyBpbnQgZXh5bm9zX2RybV9nZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0XG4gXG4gXHQvKiBub24tY2FjaGFibGUgYXMgZGVmYXVsdC4gKi9cbiBcdGlmIChleHlub3NfZ2VtLVx1MDAzZWZsYWdzIFx1MDAyNiBFWFlOT1NfQk9fQ0FDSEFCTEUpXG4tXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4rXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFx0ZWxzZSBpZiAoZXh5bm9zX2dlbS1cdTAwM2VmbGFncyBcdTAwMjYgRVhZTk9TX0JPX1dDKVxuIFx0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID1cbi1cdFx0XHRwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4rXHRcdFx0cGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcdGVsc2VcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9XG4tXHRcdFx0cGdwcm90X25vbmNhY2hlZCh2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncykpO1xuK1x0XHRcdHBncHJvdF9ub25jYWNoZWQodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XG4gXG4gXHRyZXQgPSBleHlub3NfZHJtX2dlbV9tbWFwX2J1ZmZlcihleHlub3NfZ2VtLCB2bWEpO1xuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uY1xuaW5kZXggMDY0NGY4NWM2YzhlNTIuLjljYTkwYzFiYjViNDIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uY1xuQEAgLTExMiw3ICsxMTIsNyBAQCBpOTE1X2dlbV9tbWFwX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsXG4gXHRcdHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTtcbiBcdFx0aWYgKHZtYSBcdTAwMjZcdTAwMjYgX192bWFfbWF0Y2hlcyh2bWEsIG9iai1cdTAwM2ViYXNlLmZpbHAsIGFkZHIsIGFyZ3MtXHUwMDNlc2l6ZSkpXG4gXHRcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9XG4tXHRcdFx0XHRwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4rXHRcdFx0XHRwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xuIFx0XHRlbHNlXG4gXHRcdFx0YWRkciA9IC1FTk9NRU07XG4gXHRcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcbkBAIC0xMDI0LDcgKzEwMjQsNyBAQCBpOTE1X2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLFxuIFx0ZnB1dChhbm9uKTtcbiBcbiBcdGlmIChvYmotXHUwMDNlb3BzLVx1MDAzZW1tYXBfb3BzKSB7XG4tXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4rXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xuIFx0XHR2bWEtXHUwMDNldm1fb3BzID0gb2JqLVx1MDAzZW9wcy1cdTAwM2VtbWFwX29wcztcbiBcdFx0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IG9iai1cdTAwM2ViYXNlLnZtYV9ub2RlLmRyaXZlcl9wcml2YXRlO1xuIFx0XHRyZXR1cm4gMDtcbkBAIC0xMDM1LDcgKzEwMzUsNyBAQCBpOTE1X2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLFxuIFx0c3dpdGNoIChtbW8tXHUwMDNlbW1hcF90eXBlKSB7XG4gXHRjYXNlIEk5MTVfTU1BUF9UWVBFX1dDOlxuIFx0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID1cbi1cdFx0XHRwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4rXHRcdFx0cGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcdFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnZtX29wc19jcHU7XG4gXHRcdGJyZWFrO1xuIFxuQEAgLTEwNDMsMTkgKzEwNDMsMTkgQEAgaTkxNV9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaixcbiBcdFx0R0VNX1dBUk5fT04oMSk7XG4gXHRcdGZhbGx0aHJvdWdoO1xuIFx0Y2FzZSBJOTE1X01NQVBfVFlQRV9XQjpcbi1cdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKTtcbitcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gXHRcdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZ2bV9vcHNfY3B1O1xuIFx0XHRicmVhaztcbiBcbiBcdGNhc2UgSTkxNV9NTUFQX1RZUEVfVUM6XG4gXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPVxuLVx0XHRcdHBncHJvdF9ub25jYWNoZWQodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpKTtcbitcdFx0XHRwZ3Byb3Rfbm9uY2FjaGVkKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xuIFx0XHR2bWEtXHUwMDNldm1fb3BzID0gXHUwMDI2dm1fb3BzX2NwdTtcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIEk5MTVfTU1BUF9UWVBFX0dUVDpcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9XG4tXHRcdFx0cGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncykpO1xuK1x0XHRcdHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XG4gXHRcdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZ2bV9vcHNfZ3R0O1xuIFx0XHRicmVhaztcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jXG5pbmRleCBjYmY3MjNhNWQ4NmZhOS4uNmE3OGUyNDJkZTdjNmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmNcbkBAIC0xMTI1LDcgKzExMjUsNyBAQCBzdGF0aWMgaW50IG1zbV9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdFxuIFx0c3RydWN0IG1zbV9nZW1fb2JqZWN0ICptc21fb2JqID0gdG9fbXNtX2JvKG9iaik7XG4gXG4gXHR2bV9mbGFnc19zZXQodm1hLCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xuLVx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IG1zbV9nZW1fcGdwcm90KG1zbV9vYmosIHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4rXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gbXNtX2dlbV9wZ3Byb3QobXNtX29iaiwgdm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmNcbmluZGV4IDIwZGJhMDJkNjE3NWJjLi45YTZlZTJlODgwYzBhZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmNcbkBAIC01NSw3ICs1NSw3IEBAIHN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfdHRtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0XHRnb3RvIGVycm9yX3VubG9jaztcbiBcbiBcdG5vdXZlYXVfYm9fZGVsX2lvX3Jlc2VydmVfbHJ1KGJvKTtcbi1cdHByb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4rXHRwcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcdHJldCA9IHR0bV9ib192bV9mYXVsdF9yZXNlcnZlZCh2bWYsIHByb3QsIFRUTV9CT19WTV9OVU1fUFJFRkFVTFQpO1xuIFx0bm91dmVhdV9ib19hZGRfaW9fcmVzZXJ2ZV9scnUoYm8pO1xuIFx0aWYgKHJldCA9PSBWTV9GQVVMVF9SRVRSWSBcdTAwMjZcdTAwMjYgISh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUKSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2ZiZGV2LmMgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2ZiZGV2LmNcbmluZGV4IGNhM2ZiMTg2YmYxOTU0Li40ODgxNzc3NjQyZDI5NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZmJkZXYuY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYmRldi5jXG5AQCAtODQsNyArODQsNyBAQCBzdGF0aWMgaW50IG9tYXBfZmJkZXZfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvXG4gXG4gc3RhdGljIGludCBvbWFwX2ZiZGV2X2ZiX21tYXAoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbi1cdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4rXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcbiBcdHJldHVybiBmYl9kZWZlcnJlZF9pb19tbWFwKGluZm8sIHZtYSk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2dlbS5jXG5pbmRleCAwMDQwNGZiNmMyOWFhZS4uZmIwZTZmNTU2YjMxNDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2dlbS5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2dlbS5jXG5AQCAtNTM4LDkgKzUzOCw5IEBAIHN0YXRpYyBpbnQgb21hcF9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjXG4gXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVAgfCBWTV9JTyB8IFZNX01JWEVETUFQKTtcbiBcbiBcdGlmIChvbWFwX29iai1cdTAwM2VmbGFncyBcdTAwMjYgT01BUF9CT19XQykge1xuLVx0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncykpO1xuK1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcdH0gZWxzZSBpZiAob21hcF9vYmotXHUwMDNlZmxhZ3MgXHUwMDI2IE9NQVBfQk9fVU5DQUNIRUQpIHtcbi1cdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpKTtcbitcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuIFx0XHQgKiBXZSBkbyBoYXZlIHNvbWUgcHJpdmF0ZSBvYmplY3RzLCBhdCBsZWFzdCBmb3Igc2Nhbm91dCBidWZmZXJzXG5AQCAtNTU4LDcgKzU1OCw3IEBAIHN0YXRpYyBpbnQgb21hcF9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjXG4gXHRcdHZtYS1cdTAwM2V2bV9wZ29mZiAtPSBkcm1fdm1hX25vZGVfc3RhcnQoXHUwMDI2b2JqLVx1MDAzZXZtYV9ub2RlKTtcbiBcdFx0dm1hX3NldF9maWxlKHZtYSwgb2JqLVx1MDAzZWZpbHApO1xuIFxuLVx0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuK1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcdH1cbiBcbiBcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXG5pbmRleCBhMWUyZWIxY2E3YmJlNi4uNzcwNTU2MzUzOTY4NzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXG5AQCAtNzc2LDcgKzc3Niw3IEBAIHN0YXRpYyBpbnQgcGFudGhvcl9nZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2XG4gXHR9XG4gXG4gXHR2bV9mbGFnc19zZXQodm1hLCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xuLVx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKTtcbitcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFx0aWYgKHNob3VsZF9tYXBfd2MoYm8pKVxuIFx0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWEtXHUwMDNldm1fcGFnZV9wcm90KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uY1xuaW5kZXggYjE4ODUzOWRjYTBiMjUuLjlhMWRjOWYxMjA3MjlmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uY1xuQEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0aWMgaW50IHJvY2tjaGlwX2RybV9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosXG4gXHQgKi9cbiBcdHZtX2ZsYWdzX21vZCh2bWEsIFZNX0lPIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QLCBWTV9QRk5NQVApO1xuIFxuLVx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpKTtcbitcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xuIFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4gXG4gXHRpZiAocmtfb2JqLVx1MDAzZXBhZ2VzKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uY1xuaW5kZXggMWQ4ZDI3YTVlYTg5YjguLmY3NmFmNzMzZWE3OTM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmNcbkBAIC02MDIsNyArNjAyLDcgQEAgaW50IF9fdGVncmFfZ2VtX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFxuIFx0XHR2bWEtXHUwMDNldm1fcGdvZmYgPSB2bV9wZ29mZjtcbiBcdH0gZWxzZSB7XG4tXHRcdHBncHJvdF90IHByb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4rXHRcdHBncHJvdF90IHByb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFxuIFx0XHR2bV9mbGFnc19tb2Qodm1hLCBWTV9NSVhFRE1BUCwgVk1fUEZOTUFQKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdnJhbS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ZyYW0uY1xuaW5kZXggNGFlM2NiYzM1ZGQzNjQuLjU0NGE2YWJkZGJjOGI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ZyYW0uY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ZyYW0uY1xuQEAgLTU1LDcgKzU1LDcgQEAgc3RhdGljIGludCB2aXJ0aW9fZ3B1X3ZyYW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaixcbiBcbiBcdHZtYS1cdTAwM2V2bV9wZ29mZiAtPSBkcm1fdm1hX25vZGVfc3RhcnQoXHUwMDI2b2JqLVx1MDAzZXZtYV9ub2RlKTtcbiBcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX01JWEVETUFQIHwgVk1fRE9OVEVYUEFORCk7XG4tXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuK1x0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtXHUwMDNldm1fcGFnZV9wcm90KTtcbiBcdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZ2aXJ0aW9fZ3B1X3ZyYW1fdm1fb3BzO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3BhZ2VfZGlydHkuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3BhZ2VfZGlydHkuY1xuaW5kZXggNDU1NjFiYzFjOWVmZmUuLmE5ZmQ0MDE1YTBjYWE3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcGFnZV9kaXJ0eS5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9wYWdlX2RpcnR5LmNcbkBAIC00ODEsNyArNDgxLDcgQEAgdm1fZmF1bHRfdCB2bXdfYm9fdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRpZiAodmJvLVx1MDAzZWRpcnR5IFx1MDAyNlx1MDAyNiB2Ym8tXHUwMDNlZGlydHktXHUwMDNlbWV0aG9kID09IFZNV19CT19ESVJUWV9NS1dSSVRFKVxuIFx0XHRwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IH5WTV9TSEFSRUQpO1xuIFx0ZWxzZVxuLVx0XHRwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuK1x0XHRwcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcbiBcdHJldCA9IHR0bV9ib192bV9mYXVsdF9yZXNlcnZlZCh2bWYsIHByb3QsIG51bV9wcmVmYXVsdCk7XG4gXHRpZiAocmV0ID09IFZNX0ZBVUxUX1JFVFJZIFx1MDAyNlx1MDAyNiAhKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuY1xuaW5kZXggYWJlMjVhZWRlZWFkZWYuLjgzODc5N2NjNjVkNzkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmNcbkBAIC0yODEsNyArMjgxLDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgYmFycmllcl9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdHBncHJvdF90IHByb3Q7XG4gXHRpbnQgaWR4O1xuIFxuLVx0cHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKTtcbitcdHByb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFxuIFx0aWYgKGRybV9kZXZfZW50ZXIoZGV2LCBcdTAwMjZpZHgpKSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgcGZuO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9tbWlvX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX21taW9fZ2VtLmNcbmluZGV4IDhjODAzZWYyMzNjYzRkLi4zNzQxYWU2MGY1MzJiZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9tbWlvX2dlbS5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfbW1pb19nZW0uY1xuQEAgLTE0OSw3ICsxNDksNyBAQCBzdGF0aWMgaW50IHhlX21taW9fZ2VtX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpiYXNlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKlxuIFxuIFx0LyogU2V0IHZtX3Bnb2ZmICh1c2VkIGFzIGEgZmFrZSBidWZmZXIgb2Zmc2V0IGJ5IERSTSkgdG8gMCAqL1xuIFx0dm1hLVx1MDAzZXZtX3Bnb2ZmID0gMDtcbi1cdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4rXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0lPIHwgVk1fUEZOTUFQIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QIHxcbiBcdFx0ICAgICBWTV9ET05UQ09QWSB8IFZNX05PUkVTRVJWRSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jXG5pbmRleCBlZWM0YzFkYTNmOWUzMS4uZGQxNTg0NDNmNTVmMTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uY1xuQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIGludCB4ZW5fZHJtX2Zyb250X2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmosXG4gXHQgKiB3aGljaCBpcyBtYXBwZWQgYXMgTm9ybWFsIElubmVyIFdyaXRlLUJhY2sgT3V0ZXIgV3JpdGUtQmFja1xuIFx0ICogSW5uZXItU2hhcmVhYmxlLlxuIFx0ICovXG4tXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuK1x0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gXG4gXHQvKlxuIFx0ICogdm1fb3BlcmF0aW9uc19zdHJ1Y3QuZmF1bHQgaGFuZGxlciB3aWxsIGJlIGNhbGxlZCBpZiBDUFUgYWNjZXNzXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiX2lvX2ZvcHMuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYl9pb19mb3BzLmNcbmluZGV4IDZhYjYwZmNkMDA1MDE0Li42ZDBhOGM4ZTE0MWEyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYl9pb19mb3BzLmNcbisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYl9pb19mb3BzLmNcbkBAIC0xNjEsNyArMTYxLDcgQEAgaW50IGZiX2lvX21tYXAoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0XHRsZW4gPSBpbmZvLVx1MDAzZWZpeC5tbWlvX2xlbjtcbiBcdH1cbiBcbi1cdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4rXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZnJhbWVidWZmZXIodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCwgdm1hLVx1MDAzZXZtX3N0YXJ0LFxuIFx0XHRcdFx0XHQgICAgICAgdm1hLVx1MDAzZXZtX2VuZCwgc3RhcnQpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmNcbmluZGV4IGY1N2ZhMjFhMjUwMzUzLi4zZGU1ODZkYTE5N2JkOSAxMDA2NDRcbi0tLSBhL2ZzL2Fpby5jXG4rKysgYi9mcy9haW8uY1xuQEAgLTYwNCw3ICs2MDQsNyBAQCBzdGF0aWMgaW50IGFpb19zZXR1cF9yaW5nKHN0cnVjdCBraW9jdHggKmN0eCwgdW5zaWduZWQgaW50IG5yX2V2ZW50cylcbiBcbiBcdGN0eC1cdTAwM2VtbWFwX2Jhc2UgPSBkb19tbWFwKGN0eC1cdTAwM2VhaW9fcmluZ19maWxlLCAwLCBjdHgtXHUwMDNlbW1hcF9zaXplLFxuIFx0XHRcdFx0IFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4tXHRcdFx0XHQgTUFQX1NIQVJFRCwgMCwgMCwgXHUwMDI2dW51c2VkLCBOVUxMKTtcbitcdFx0XHRcdCBNQVBfU0hBUkVELCBFTVBUWV9WTUFfRkxBR1MsIDAsIFx1MDAyNnVudXNlZCwgTlVMTCk7XG4gXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XG4gXHRpZiAoSVNfRVJSKCh2b2lkICopY3R4LVx1MDAzZW1tYXBfYmFzZSkpIHtcbiBcdFx0Y3R4LVx1MDAzZW1tYXBfc2l6ZSA9IDA7XG5kaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xuaW5kZXggOWZkZGQxZTBiODEzYWIuLjQzMDY2ZjlkZGY1MmQxIDEwMDY0NFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcbisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5AQCAtMTg0LDcgKzE4NCw4IEBAIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmIChhZGRyKVxuIFx0XHRhZGRyMCA9IEFMSUdOKGFkZHIsIGh1Z2VfcGFnZV9zaXplKGgpKTtcbiBcbi1cdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XG4rXHRyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MoZmlsZSwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLFxuK1x0XHRcdFx0XHQgICAgIEVNUFRZX1ZNQV9GTEFHUyk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdlX21tLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuaW5kZXggY2FlOTdjMzA3MjgwOTcuLjllNDNlMTM4YzBiNzc3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG5AQCAtMzkxLDkgKzM5MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfZGlzYWJsZWRfYnlfaHcodm9pZClcbiBcbiB1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyk7XG4tdW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK3Vuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxuLVx0XHR2bV9mbGFnc190IHZtX2ZsYWdzKTtcbitcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKTtcbiBcbiBlbnVtIHNwbGl0X3R5cGUge1xuIFx0U1BMSVRfVFlQRV9VTklGT1JNLFxuQEAgLTYxNyw5ICs2MTcsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuICNkZWZpbmUgdGhwX2dldF91bm1hcHBlZF9hcmVhXHROVUxMXG4gXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nXG4tdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbi1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxuK3RocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbitcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWZkLmggYi9pbmNsdWRlL2xpbnV4L21lbWZkLmhcbmluZGV4IGI0ZmRhMDlkYWI5ZjYxLi5jMTU5ZTQwZTNmMzRhMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtZmQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1mZC5oXG5AQCAtMTQsOSArMTQsOSBAQCBzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpO1xuICAqIHRvIHNlYWxpbmcsIG9yIDAgb3RoZXJ3aXNlLlxuICAqXG4gICogV2UgYWxzbyB1cGRhdGUgVk1BIGZsYWdzIGlmIGFwcHJvcHJpYXRlIGJ5IG1hbmlwdWxhdGluZyB0aGUgVk1BIGZsYWdzIHBvaW50ZWRcbi0gKiB0byBieSB2bV9mbGFnc19wdHIuXG4rICogdG8gYnkgdm1hX2ZsYWdzX3B0ci5cbiAgKi9cbi1pbnQgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3NfcHRyKTtcbitpbnQgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm1hX2ZsYWdzX3QgKnZtYV9mbGFnc19wdHIpO1xuIHN0cnVjdCBmaWxlICptZW1mZF9hbGxvY19maWxlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IG1lbWZkX2dldF9zZWFscyhzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4gaW50IG1lbWZkX2FkZF9zZWFscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IHNlYWxzKTtcbkBAIC0zMCw3ICszMCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuIFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gfVxuIHN0YXRpYyBpbmxpbmUgaW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsXG4tXHRcdFx0XHRcdCB2bV9mbGFnc190ICp2bV9mbGFnc19wdHIpXG4rXHRcdFx0XHRcdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzX3B0cilcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCAzMmJiNzIzZmZiYjkyZC4uNTUwZmI5Mjk1N2QxODkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTQ0Miw4ICs0NDIsMTAgQEAgZW51bSB7XG4gI2RlZmluZSBWTV9TVEFDS1x0SU5JVF9WTV9GTEFHKFNUQUNLKVxuICNpZmRlZiBDT05GSUdfU1RBQ0tfR1JPV1NVUFxuICNkZWZpbmUgVk1fU1RBQ0tfRUFSTFlcdElOSVRfVk1fRkxBRyhTVEFDS19FQVJMWSlcbisjZGVmaW5lIFZNQV9TVEFDS19FQVJMWSBta192bWFfZmxhZ3MoVk1BX1NUQUNLX0VBUkxZX0JJVClcbiAjZWxzZVxuICNkZWZpbmUgVk1fU1RBQ0tfRUFSTFlcdFZNX05PTkVcbisjZGVmaW5lIFZNQV9TVEFDS19FQVJMWSBFTVBUWV9WTUFfRkxBR1NcbiAjZW5kaWZcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1BLRVlTXG4gI2RlZmluZSBWTV9QS0VZX1NISUZUICgoX19mb3JjZSBpbnQpVk1BX0hJR0hfQVJDSF8wX0JJVClcbkBAIC00NjUsMTUgKzQ2NywxOCBAQCBlbnVtIHtcbiAjaWYgZGVmaW5lZChDT05GSUdfWDg2X1VTRVJfU0hBRE9XX1NUQUNLKSB8fCBkZWZpbmVkKENPTkZJR19BUk02NF9HQ1MpIHx8IFxcXG4gXHRkZWZpbmVkKENPTkZJR19SSVNDVl9VU0VSX0NGSSlcbiAjZGVmaW5lIFZNX1NIQURPV19TVEFDS1x0SU5JVF9WTV9GTEFHKFNIQURPV19TVEFDSylcbisjZGVmaW5lIFZNQV9TSEFET1dfU1RBQ0sgbWtfdm1hX2ZsYWdzKFZNQV9TSEFET1dfU1RBQ0tfQklUKVxuICNkZWZpbmUgVk1BX1NUQVJUR0FQX0ZMQUdTIG1rX3ZtYV9mbGFncyhWTUFfR1JPV1NET1dOX0JJVCwgVk1BX1NIQURPV19TVEFDS19CSVQpXG4gI2Vsc2VcbiAjZGVmaW5lIFZNX1NIQURPV19TVEFDS1x0Vk1fTk9ORVxuKyNkZWZpbmUgVk1BX1NIQURPV19TVEFDSyBFTVBUWV9WTUFfRkxBR1NcbiAjZGVmaW5lIFZNQV9TVEFSVEdBUF9GTEFHUyBta192bWFfZmxhZ3MoVk1BX0dST1dTRE9XTl9CSVQpXG4gI2VuZGlmXG4gI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KVxuICNkZWZpbmUgVk1fU0FPXHRcdElOSVRfVk1fRkxBRyhTQU8pXG4gI2VsaWYgZGVmaW5lZChDT05GSUdfUEFSSVNDKVxuICNkZWZpbmUgVk1fR1JPV1NVUFx0SU5JVF9WTV9GTEFHKEdST1dTVVApXG4rI2RlZmluZSBWTUFfR1JPV1NVUFx0bWtfdm1hX2ZsYWdzKFZNQV9HUk9XU1VQX0JJVClcbiAjZWxpZiBkZWZpbmVkKENPTkZJR19TUEFSQzY0KVxuICNkZWZpbmUgVk1fU1BBUkNfQURJXHRJTklUX1ZNX0ZMQUcoU1BBUkNfQURJKVxuICNkZWZpbmUgVk1fQVJDSF9DTEVBUlx0SU5JVF9WTV9GTEFHKEFSQ0hfQ0xFQVIpXG5AQCAtNDg1LDYgKzQ5MCw3IEBAIGVudW0ge1xuICNlbmRpZlxuICNpZm5kZWYgVk1fR1JPV1NVUFxuICNkZWZpbmUgVk1fR1JPV1NVUFx0Vk1fTk9ORVxuKyNkZWZpbmUgVk1BX0dST1dTVVBcdEVNUFRZX1ZNQV9GTEFHU1xuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfQVJNNjRfTVRFXG4gI2RlZmluZSBWTV9NVEVcdFx0SU5JVF9WTV9GTEFHKE1URSlcbkBAIC01NDAsNiArNTQ2LDggQEAgZW51bSB7XG4gXG4gLyogQml0cyBzZXQgaW4gdGhlIFZNQSB1bnRpbCB0aGUgc3RhY2sgaXMgaW4gaXRzIGZpbmFsIGxvY2F0aW9uICovXG4gI2RlZmluZSBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQIChWTV9SQU5EX1JFQUQgfCBWTV9TRVFfUkVBRCB8IFZNX1NUQUNLX0VBUkxZKVxuKyNkZWZpbmUgVk1BX1NUQUNLX0lOQ09NUExFVEVfU0VUVVAgYXBwZW5kX3ZtYV9mbGFncyhcdFx0XFxcbitcdFZNQV9TVEFDS19FQVJMWSwgVk1BX1JBTkRfUkVBRF9CSVQsIFZNQV9TRVFfUkVBRF9CSVQpXG4gXG4gI2RlZmluZSBUQVNLX0VYRUNfQklUICgoY3VycmVudC1cdTAwM2VwZXJzb25hbGl0eSBcdTAwMjYgUkVBRF9JTVBMSUVTX0VYRUMpID8gXFxcbiBcdFx0ICAgICAgIFZNQV9FWEVDX0JJVCA6IFZNQV9SRUFEX0JJVClcbkBAIC0xNTc4LDExICsxNTg2LDI0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfaW5pdGlhbF9zdGFjayhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdFx0dm1hLVx1MDAzZXZtX2VuZCBcdTAwM2U9IHZtYS1cdTAwM2V2bV9tbS1cdTAwM2VzdGFydF9zdGFjaztcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIHZtYV9pc190ZW1wb3Jhcnlfc3RhY2soY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4rc3RhdGljIGlubGluZSBib29sIHZtYV9mbGFnc19jYW5fZ3Jvdyhjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MpXG4ge1xuLVx0aW50IG1heWJlX3N0YWNrID0gdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fR1JPV1NET1dOIHwgVk1fR1JPV1NVUCk7XG4rXHRpZiAodm1hX2ZsYWdzX3Rlc3Rfc2luZ2xlX21hc2soZmxhZ3MsIFZNQV9HUk9XU1VQKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAodm1hX2ZsYWdzX3Rlc3QoZmxhZ3MsIFZNQV9HUk9XU0RPV05fQklUKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCB2bWFfY2FuX2dyb3coY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4re1xuK1x0cmV0dXJuIHZtYV9mbGFnc19jYW5fZ3JvdyhcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuK31cbiBcbi1cdGlmICghbWF5YmVfc3RhY2spXG4rc3RhdGljIGlubGluZSBib29sIHZtYV9pc190ZW1wb3Jhcnlfc3RhY2soY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4re1xuK1x0aWYgKCF2bWFfY2FuX2dyb3codm1hKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKCh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NUQUNLX0lOQ09NUExFVEVfU0VUVVApID09XG5AQCAtNDE3NCwxOCArNDE5NSwyMCBAQCB1bnNpZ25lZCBsb25nIHJhbmRvbWl6ZV9wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgcmFuZ2UpO1xuIFxuIHVuc2lnbmVkIGxvbmdcbiBfX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxuLVx0XHQgICAgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncyk7XG4rXHRcdCAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxuK1x0XHQgICAgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKTtcbiBcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbiBnZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcbiBcdFx0ICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIHtcbi1cdHJldHVybiBfX2dldF91bm1hcHBlZF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTtcbitcdHJldHVybiBfX2dldF91bm1hcHBlZF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxuK1x0XHRcdFx0ICAgRU1QVFlfVk1BX0ZMQUdTKTtcbiB9XG4gXG4tZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK3Vuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0dW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncyxcbi1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgKnBvcHVsYXRlLFxuK1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nICpwb3B1bGF0ZSxcbiBcdHN0cnVjdCBsaXN0X2hlYWQgKnVmKTtcbiBleHRlcm4gaW50IGRvX3ZtaV9tdW5tYXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHQgdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbiwgc3RydWN0IGxpc3RfaGVhZCAqdWYsXG5AQCAtNDU4NCwyNiArNDYwNywzNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmFuZ2VfaW5fdm1hX2Rlc2MoY29uc3Qgc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYyxcbiAjaWZkZWYgQ09ORklHX01NVVxuIHBncHJvdF90IHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3NfdCB2bV9mbGFncyk7XG4gXG4tc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4rc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcbiB7XG4gXHRjb25zdCB2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpO1xuIFxuIFx0cmV0dXJuIHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3MpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9nZXRfcGFnZV9wcm90KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuK3tcbitcdHJldHVybiB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYS1cdTAwM2VmbGFncyk7XG4rfVxuK1xuIHZvaWQgdm1hX3NldF9wYWdlX3Byb3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4ge1xuIFx0cmV0dXJuIF9fcGdwcm90KDApO1xuIH1cbi1zdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9nZXRfcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcbitzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9mbGFnc190b19wYWdlX3Byb3Qodm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuK3tcbitcdHJldHVybiBfX3BncHJvdCgwKTtcbit9XG4rc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4gXHRyZXR1cm4gX19wZ3Byb3QoMCk7XG4gfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfc2V0X3BhZ2VfcHJvdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4tXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuK1x0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gfVxuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxuaW5kZXggOTVkMDA0MGRmNTg0MTMuLjEwYmU4YTU0YjQxNmY5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcbkBAIC0xOTMsMjEgKzE5MywxOCBAQCB1bnNpZ25lZCBsb25nIG1tX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbiBcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xuIFxuLXVuc2lnbmVkIGxvbmcgbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCxcbi1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGxlbixcbi1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBwZ29mZixcbi1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBmbGFncyxcbi1cdFx0XHRcdFx0ICAgdm1fZmxhZ3NfdCB2bV9mbGFncyk7XG4rdW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbitcdFx0dW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKTtcbiBcbiB1bnNpZ25lZCBsb25nXG4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXG4tXHRcdFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKTtcbitcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG4gdW5zaWduZWQgbG9uZ1xuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbi1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncyk7XG4rXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9waWNrX21tYXBfbGF5b3V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IHJsaW1pdCAqcmxpbV9zdGFjaykge31cbmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmNcbmluZGV4IGIzZThhNThlMTc3ZDNiLi5iYjFhNzIxYTNlNzQ2ZSAxMDA2NDRcbi0tLSBhL2lwYy9zaG0uY1xuKysrIGIvaXBjL3NobS5jXG5AQCAtMTY2MSw3ICsxNjYxLDggQEAgbG9uZyBkb19zaG1hdChpbnQgc2htaWQsIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxnLFxuIFx0XHRcdGdvdG8gaW52YWxpZDtcbiBcdH1cbiBcbi1cdGFkZHIgPSBkb19tbWFwKGZpbGUsIGFkZHIsIHNpemUsIHByb3QsIGZsYWdzLCAwLCAwLCBcdTAwMjZwb3B1bGF0ZSwgTlVMTCk7XG4rXHRhZGRyID0gZG9fbW1hcChmaWxlLCBhZGRyLCBzaXplLCBwcm90LCBmbGFncywgRU1QVFlfVk1BX0ZMQUdTLCAwLFxuK1x0XHQgICAgICAgXHUwMDI2cG9wdWxhdGUsIE5VTEwpO1xuIFx0KnJhZGRyID0gYWRkcjtcbiBcdGVyciA9IDA7XG4gXHRpZiAoSVNfRVJSX1ZBTFVFKGFkZHIpKVxuZGlmZiAtLWdpdCBhL21tL2RlYnVnLmMgYi9tbS9kZWJ1Zy5jXG5pbmRleCA0OTc2NTRiMzZmMWFiNS4uOWEwMjk3YjM5ODhkODkgMTAwNjQ0XG4tLS0gYS9tbS9kZWJ1Zy5jXG4rKysgYi9tbS9kZWJ1Zy5jXG5AQCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQgZHVtcF9tbShjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdFx0XCJudW1hX25leHRfc2NhbiAlbHUgbnVtYV9zY2FuX29mZnNldCAlbHUgbnVtYV9zY2FuX3NlcSAlZFxcblwiXG4gI2VuZGlmXG4gXHRcdFwidGxiX2ZsdXNoX3BlbmRpbmcgJWRcXG5cIlxuLVx0XHRcImRlZl9mbGFnczogJSNseCglcEd2KVxcblwiLFxuK1x0XHRcImRlZl9mbGFnczogJSpwYiglcEd2KVxcblwiLFxuIFxuIFx0XHRtbSwgbW0tXHUwMDNldGFza19zaXplLFxuIFx0XHRtbS1cdTAwM2VtbWFwX2Jhc2UsIG1tLVx1MDAzZW1tYXBfbGVnYWN5X2Jhc2UsXG5AQCAtMjI2LDcgKzIyNiw4IEBAIHZvaWQgZHVtcF9tbShjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdFx0bW0tXHUwMDNlbnVtYV9uZXh0X3NjYW4sIG1tLVx1MDAzZW51bWFfc2Nhbl9vZmZzZXQsIG1tLVx1MDAzZW51bWFfc2Nhbl9zZXEsXG4gI2VuZGlmXG4gXHRcdGF0b21pY19yZWFkKFx1MDAyNm1tLVx1MDAzZXRsYl9mbHVzaF9wZW5kaW5nKSxcbi1cdFx0bW0tXHUwMDNlZGVmX2ZsYWdzLCBcdTAwMjZtbS1cdTAwM2VkZWZfZmxhZ3NcbitcdFx0TlVNX1ZNQV9GTEFHX0JJVFMsIG1tLVx1MDAzZWRlZl92bWFfZmxhZ3MuX192bWFfZmxhZ3MsXG4rXHRcdFx1MDAyNm1tLVx1MDAzZWRlZl92bWFfZmxhZ3NcbiBcdCk7XG4gfVxuIEVYUE9SVF9TWU1CT0woZHVtcF9tbSk7XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDBkYzZkNjMwNTcwZmFmLi40MGQ2YjQwNzhlM2Q0MyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0xMTk2LDcgKzExOTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcbiBcdFx0bG9mZl90IG9mZiwgdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBzaXplLFxuLVx0XHR2bV9mbGFnc190IHZtX2ZsYWdzKVxuK1x0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuIFx0bG9mZl90IG9mZl9lbmQgPSBvZmYgKyBsZW47XG4gXHRsb2ZmX3Qgb2ZmX2FsaWduID0gcm91bmRfdXAob2ZmLCBzaXplKTtcbkBAIC0xMjEyLDggKzEyMTIsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdGlmIChsZW5fcGFkIFx1MDAzYyBsZW4gfHwgKG9mZiArIGxlbl9wYWQpIFx1MDAzYyBvZmYpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0ID0gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxwLCBhZGRyLCBsZW5fcGFkLFxuLVx0XHRcdFx0XHQgICBvZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsIGZsYWdzLCB2bV9mbGFncyk7XG4rXHRyZXQgPSBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhmaWxwLCBhZGRyLCBsZW5fcGFkLFxuK1x0XHRcdFx0XHQgICAgb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBmbGFncyxcbitcdFx0XHRcdFx0ICAgIHZtYV9mbGFncyk7XG4gXG4gXHQvKlxuIFx0ICogVGhlIGZhaWx1cmUgbWlnaHQgYmUgZHVlIHRvIGxlbmd0aCBwYWRkaW5nLiBUaGUgY2FsbGVyIHdpbGwgcmV0cnlcbkBAIC0xMjM4LDI1ICsxMjM5LDI3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tdW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK3Vuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxuLVx0XHR2bV9mbGFnc190IHZtX2ZsYWdzKVxuK1x0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyByZXQ7XG4gXHRsb2ZmX3Qgb2ZmID0gKGxvZmZfdClwZ29mZiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiBcbi1cdHJldCA9IF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgb2ZmLCBmbGFncywgUE1EX1NJWkUsIHZtX2ZsYWdzKTtcbitcdHJldCA9IF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgb2ZmLCBmbGFncywgUE1EX1NJWkUsXG4rXHRcdFx0XHQgICAgICB2bWFfZmxhZ3MpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxuLVx0XHRcdFx0XHQgICAgdm1fZmxhZ3MpO1xuK1x0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxuK1x0XHRcdFx0XHQgICAgIHZtYV9mbGFncyk7XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIHtcbi1cdHJldHVybiB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XG4rXHRyZXR1cm4gdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxuK1x0XHRcdFx0XHQgICAgICBFTVBUWV9WTUFfRkxBR1MpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh0aHBfZ2V0X3VubWFwcGVkX2FyZWEpO1xuIFxuZGlmZiAtLWdpdCBhL21tL21lbWZkLmMgYi9tbS9tZW1mZC5jXG5pbmRleCA2YzcyZmU2Y2FlZjc1ZC4uYzcwOGQ5MjUzM2Y0YWIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1mZC5jXG4rKysgYi9tbS9tZW1mZC5jXG5AQCAtMzcwLDM5ICszNzAsMzYgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3dyaXRlX3NlYWxlZCh1bnNpZ25lZCBpbnQgc2VhbHMpXG4gXHRyZXR1cm4gc2VhbHMgXHUwMDI2IChGX1NFQUxfV1JJVEUgfCBGX1NFQUxfRlVUVVJFX1dSSVRFKTtcbiB9XG4gXG4tc3RhdGljIGludCBjaGVja193cml0ZV9zZWFsKHZtX2ZsYWdzX3QgKnZtX2ZsYWdzX3B0cilcbitzdGF0aWMgaW50IGNoZWNrX3dyaXRlX3NlYWwodm1hX2ZsYWdzX3QgKnZtYV9mbGFnc19wdHIpXG4ge1xuLVx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9ICp2bV9mbGFnc19wdHI7XG4tXHR2bV9mbGFnc190IG1hc2sgPSB2bV9mbGFncyBcdTAwMjYgKFZNX1NIQVJFRCB8IFZNX1dSSVRFKTtcbi1cbiBcdC8qIElmIGEgcHJpdmF0ZSBtYXBwaW5nIHRoZW4gd3JpdGFiaWxpdHkgaXMgaXJyZWxldmFudC4gKi9cbi1cdGlmICghKG1hc2sgXHUwMDI2IFZNX1NIQVJFRCkpXG4rXHRpZiAoIXZtYV9mbGFnc190ZXN0KHZtYV9mbGFnc19wdHIsIFZNQV9TSEFSRURfQklUKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKlxuIFx0ICogTmV3IFBST1RfV1JJVEUgYW5kIE1BUF9TSEFSRUQgbW1hcHMgYXJlIG5vdCBhbGxvd2VkIHdoZW5cbiBcdCAqIHdyaXRlIHNlYWxzIGFyZSBhY3RpdmUuXG4gXHQgKi9cbi1cdGlmIChtYXNrIFx1MDAyNiBWTV9XUklURSlcbitcdGlmICh2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3NfcHRyLCBWTUFfV1JJVEVfQklUKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbiBcdC8qXG4gXHQgKiBUaGlzIGlzIGEgcmVhZC1vbmx5IG1hcHBpbmcsIGRpc2FsbG93IG1wcm90ZWN0KCkgZnJvbSBtYWtpbmcgYVxuIFx0ICogd3JpdGUtc2VhbGVkIG1hcHBpbmcgd3JpdGFibGUgaW4gZnV0dXJlLlxuIFx0ICovXG4tXHQqdm1fZmxhZ3NfcHRyIFx1MDAyNj0gflZNX01BWVdSSVRFO1xuK1x0dm1hX2ZsYWdzX2NsZWFyKHZtYV9mbGFnc19wdHIsIFZNQV9NQVlXUklURV9CSVQpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBtZW1mZF9jaGVja19zZWFsc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB2bV9mbGFnc190ICp2bV9mbGFnc19wdHIpXG4raW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKVxuIHtcbiBcdGludCBlcnIgPSAwO1xuIFx0dW5zaWduZWQgaW50ICpzZWFsc19wdHIgPSBtZW1mZF9maWxlX3NlYWxzX3B0cihmaWxlKTtcbiBcdHVuc2lnbmVkIGludCBzZWFscyA9IHNlYWxzX3B0ciA/ICpzZWFsc19wdHIgOiAwO1xuIFxuIFx0aWYgKGlzX3dyaXRlX3NlYWxlZChzZWFscykpXG4tXHRcdGVyciA9IGNoZWNrX3dyaXRlX3NlYWwodm1fZmxhZ3NfcHRyKTtcbitcdFx0ZXJyID0gY2hlY2tfd3JpdGVfc2VhbCh2bWFfZmxhZ3NfcHRyKTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuZGlmZiAtLWdpdCBhL21tL21sb2NrLmMgYi9tbS9tbG9jay5jXG5pbmRleCA5N2U0OTAzOGQ4ZDMzZS4uZWZhNjcxNmU0ZGZiZGYgMTAwNjQ0XG4tLS0gYS9tbS9tbG9jay5jXG4rKysgYi9tbS9tbG9jay5jXG5AQCAtMzI5LDcgKzMyOSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvd19tbG9ja19tdW5sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHQgKiBiZSBzcGxpdC4gQW5kIHRoZSBwYWdlcyBhcmUgbm90IGluIFZNX0xPQ0tlZCBWTUFcbiBcdCAqIGNhbiBiZSByZWNsYWltZWQuXG4gXHQgKi9cbi1cdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKSlcbitcdGlmICghdm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LyogZm9saW9fd2l0aGluX3JhbmdlKCkgY2Fubm90IHRha2UgS1NNLCBidXQgYW55IHNtYWxsIGZvbGlvIGlzIE9LICovXG5AQCAtMzY4LDcgKzM2OCw3IEBAIHN0YXRpYyBpbnQgbWxvY2tfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0Zm9saW8gPSBwbWRfZm9saW8oKnBtZCk7XG4gXHRcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbitcdFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHRcdG1sb2NrX2ZvbGlvKGZvbGlvKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdG11bmxvY2tfZm9saW8oZm9saW8pO1xuQEAgLTM5Myw3ICszOTMsNyBAQCBzdGF0aWMgaW50IG1sb2NrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGlmICghYWxsb3dfbWxvY2tfbXVubG9jayhmb2xpbywgdm1hLCBzdGFydCwgZW5kLCBzdGVwKSlcbiBcdFx0XHRnb3RvIG5leHRfZW50cnk7XG4gXG4tXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbitcdFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHRcdG1sb2NrX2ZvbGlvKGZvbGlvKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdG11bmxvY2tfZm9saW8oZm9saW8pO1xuQEAgLTQxNyw4ICs0MTcsOCBAQCBzdGF0aWMgaW50IG1sb2NrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gICogQGVuZCAtIGVuZCBvZiByYW5nZSBpbiBAdm1hXG4gICogQG5ld192bWFfZmxhZ3MgLSB0aGUgbmV3IHNldCBvZiBmbGFncyBmb3IgQHZtYS5cbiAgKlxuLSAqIENhbGxlZCBmb3IgbWxvY2soKSwgbWxvY2syKCkgYW5kIG1sb2NrYWxsKCksIHRvIHNldCBAdm1hIFZNX0xPQ0tFRDtcbi0gKiBjYWxsZWQgZm9yIG11bmxvY2soKSBhbmQgbXVubG9ja2FsbCgpLCB0byBjbGVhciBWTV9MT0NLRUQgZnJvbSBAdm1hLlxuKyAqIENhbGxlZCBmb3IgbWxvY2soKSwgbWxvY2syKCkgYW5kIG1sb2NrYWxsKCksIHRvIHNldCBAdm1hIFZNQV9MT0NLRURfQklUO1xuKyAqIGNhbGxlZCBmb3IgbXVubG9jaygpIGFuZCBtdW5sb2NrYWxsKCksIHRvIGNsZWFyIFZNQV9MT0NLRURfQklUIGZyb20gQHZtYS5cbiAgKi9cbiBzdGF0aWMgdm9pZCBtbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbkBAIC00MzEsMTQgKzQzMSwxNCBAQCBzdGF0aWMgdm9pZCBtbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXG4gXHQvKlxuIFx0ICogVGhlcmUgaXMgYSBzbGlnaHQgY2hhbmNlIHRoYXQgY29uY3VycmVudCBwYWdlIG1pZ3JhdGlvbixcbi1cdCAqIG9yIHBhZ2UgcmVjbGFpbSBmaW5kaW5nIGEgcGFnZSBvZiB0aGlzIG5vdy1WTV9MT0NLRUQgdm1hLFxuK1x0ICogb3IgcGFnZSByZWNsYWltIGZpbmRpbmcgYSBwYWdlIG9mIHRoaXMgbm93LVZNQV9MT0NLRURfQklUIHZtYSxcbiBcdCAqIHdpbGwgY2FsbCBtbG9ja192bWFfZm9saW8oKSBhbmQgcmFpc2UgcGFnZSdzIG1sb2NrX2NvdW50OlxuIFx0ICogZG91YmxlIGNvdW50aW5nLCBsZWF2aW5nIHRoZSBwYWdlIHVuZXZpY3RhYmxlIGluZGVmaW5pdGVseS5cbi1cdCAqIENvbW11bmljYXRlIHRoaXMgZGFuZ2VyIHRvIG1sb2NrX3ZtYV9mb2xpbygpIHdpdGggVk1fSU8sXG4tXHQgKiB3aGljaCBpcyBhIFZNX1NQRUNJQUwgZmxhZyBub3QgYWxsb3dlZCBvbiBWTV9MT0NLRUQgdm1hcy5cbitcdCAqIENvbW11bmljYXRlIHRoaXMgZGFuZ2VyIHRvIG1sb2NrX3ZtYV9mb2xpbygpIHdpdGggVk1BX0lPX0JJVCxcbitcdCAqIHdoaWNoIGlzIGEgVk1BX1NQRUNJQUxfRkxBR1MgZmxhZyBub3QgYWxsb3dlZCBvbiBWTUFfTE9DS0VEX0JJVCB2bWFzLlxuIFx0ICogbW1hcF9sb2NrIGlzIGhlbGQgaW4gd3JpdGUgbW9kZSBoZXJlLCBzbyB0aGlzIHdlaXJkXG4gXHQgKiBjb21iaW5hdGlvbiBzaG91bGQgbm90IGJlIHZpc2libGUgdG8gb3RoZXIgbW1hcF9sb2NrIHVzZXJzO1xuLVx0ICogYnV0IFdSSVRFX09OQ0Ugc28gcm1hcCB3YWxrZXJzIG11c3Qgc2VlIFZNX0lPIGlmIFZNX0xPQ0tFRC5cbitcdCAqIGJ1dCBXUklURV9PTkNFIHNvIHJtYXAgd2Fsa2VycyBtdXN0IHNlZSBWTUFfSU9fQklUIGlmIFZNQV9MT0NLRURfQklULlxuIFx0ICovXG4gXHRpZiAodm1hX2ZsYWdzX3Rlc3QobmV3X3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHR2bWFfZmxhZ3Nfc2V0KG5ld192bWFfZmxhZ3MsIFZNQV9JT19CSVQpO1xuQEAgLTQ1OCw3ICs0NTgsNyBAQCBzdGF0aWMgdm9pZCBtbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gLypcbiAgKiBtbG9ja19maXh1cCAgLSBoYW5kbGUgbWxvY2tbYWxsXS9tdW5sb2NrW2FsbF0gcmVxdWVzdHMuXG4gICpcbi0gKiBGaWx0ZXJzIG91dCBcInNwZWNpYWxcIiB2bWFzIC0tIFZNX0xPQ0tFRCBuZXZlciBnZXRzIHNldCBmb3IgdGhlc2UsIGFuZFxuKyAqIEZpbHRlcnMgb3V0IFwic3BlY2lhbFwiIHZtYXMgLS0gVk1BX0xPQ0tFRF9CSVQgbmV2ZXIgZ2V0cyBzZXQgZm9yIHRoZXNlLCBhbmRcbiAgKiBtdW5sb2NrIGlzIGEgbm8tb3AuICBIb3dldmVyLCBmb3Igc29tZSBzcGVjaWFsIHZtYXMsIHdlIGdvIGFoZWFkIGFuZFxuICAqIHBvcHVsYXRlIHRoZSBwdGVzLlxuICAqXG5AQCAtNDY2LDI0ICs0NjYsMjMgQEAgc3RhdGljIHZvaWQgbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuICAqL1xuIHN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdCAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKipwcmV2LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLVx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB2bV9mbGFnc190IG5ld2ZsYWdzKVxuK1x0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB2bWFfZmxhZ3NfdCAqbmV3X3ZtYV9mbGFncylcbiB7XG4tXHR2bWFfZmxhZ3NfdCBuZXdfdm1hX2ZsYWdzID0gbGVnYWN5X3RvX3ZtYV9mbGFncyhuZXdmbGFncyk7XG4gXHRjb25zdCB2bWFfZmxhZ3NfdCBvbGRfdm1hX2ZsYWdzID0gdm1hLVx1MDAzZWZsYWdzO1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4gXHRpbnQgbnJfcGFnZXM7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbi1cdGlmICh2bWFfZmxhZ3Nfc2FtZV9wYWlyKFx1MDAyNm9sZF92bWFfZmxhZ3MsIFx1MDAyNm5ld192bWFfZmxhZ3MpIHx8XG4rXHRpZiAodm1hX2ZsYWdzX3NhbWVfcGFpcihcdTAwMjZvbGRfdm1hX2ZsYWdzLCBuZXdfdm1hX2ZsYWdzKSB8fFxuIFx0ICAgIHZtYV9pc19zZWNyZXRtZW0odm1hKSB8fCAhdm1hX3N1cHBvcnRzX21sb2NrKHZtYSkpIHtcbiBcdFx0Lypcbi1cdFx0ICogRG9uJ3Qgc2V0IFZNX0xPQ0tFRCBvciBWTV9MT0NLT05GQVVMVCBhbmQgZG9uJ3QgY291bnQuXG4tXHRcdCAqIEZvciBzZWNyZXRtZW0sIGRvbid0IGFsbG93IHRoZSBtZW1vcnkgdG8gYmUgdW5sb2NrZWQuXG4rXHRcdCAqIERvbid0IHNldCBWTUFfTE9DS0VEX0JJVCBvciBWTUFfTE9DS09ORkFVTFRfQklUIGFuZCBkb24ndFxuK1x0XHQgKiBjb3VudC4gIEZvciBzZWNyZXRtZW0sIGRvbid0IGFsbG93IHRoZSBtZW1vcnkgdG8gYmUgdW5sb2NrZWQuXG4gXHRcdCAqL1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3Modm1pLCAqcHJldiwgdm1hLCBzdGFydCwgZW5kLCBcdTAwMjZuZXdfdm1hX2ZsYWdzKTtcbitcdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3Modm1pLCAqcHJldiwgdm1hLCBzdGFydCwgZW5kLCBuZXdfdm1hX2ZsYWdzKTtcbiBcdGlmIChJU19FUlIodm1hKSkge1xuIFx0XHRyZXQgPSBQVFJfRVJSKHZtYSk7XG4gXHRcdGdvdG8gb3V0O1xuQEAgLTQ5Myw3ICs0OTIsNyBAQCBzdGF0aWMgaW50IG1sb2NrX2ZpeHVwKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHQgKiBLZWVwIHRyYWNrIG9mIGFtb3VudCBvZiBsb2NrZWQgVk0uXG4gXHQgKi9cbiBcdG5yX3BhZ2VzID0gKGVuZCAtIHN0YXJ0KSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdGlmICghdm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bmV3X3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKVxuK1x0aWYgKCF2bWFfZmxhZ3NfdGVzdChuZXdfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdG5yX3BhZ2VzID0gLW5yX3BhZ2VzO1xuIFx0ZWxzZSBpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2b2xkX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHRucl9wYWdlcyA9IDA7XG5AQCAtNTAyLDE1ICs1MDEsMTUgQEAgc3RhdGljIGludCBtbG9ja19maXh1cChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0LypcbiBcdCAqIHZtX2ZsYWdzIGlzIHByb3RlY3RlZCBieSB0aGUgbW1hcF9sb2NrIGhlbGQgaW4gd3JpdGUgbW9kZS5cbiBcdCAqIEl0J3Mgb2theSBpZiB0cnlfdG9fdW5tYXBfb25lIHVubWFwcyBhIHBhZ2UganVzdCBhZnRlciB3ZVxuLVx0ICogc2V0IFZNX0xPQ0tFRCwgcG9wdWxhdGVfdm1hX3BhZ2VfcmFuZ2Ugd2lsbCBicmluZyBpdCBiYWNrLlxuK1x0ICogc2V0IFZNQV9MT0NLRURfQklULCBwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suXG4gXHQgKi9cbi1cdGlmICh2bWFfZmxhZ3NfdGVzdChcdTAwMjZuZXdfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkgXHUwMDI2XHUwMDI2XG4rXHRpZiAodm1hX2ZsYWdzX3Rlc3QobmV3X3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHZtYV9mbGFnc190ZXN0KFx1MDAyNm9sZF92bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSkge1xuIFx0XHQvKiBObyB3b3JrIHRvIGRvLCBhbmQgbWxvY2tpbmcgdHdpY2Ugd291bGQgYmUgd3JvbmcgKi9cbiBcdFx0dm1hX3N0YXJ0X3dyaXRlKHZtYSk7XG4tXHRcdHZtYS1cdTAwM2VmbGFncyA9IG5ld192bWFfZmxhZ3M7XG4rXHRcdHZtYS1cdTAwM2VmbGFncyA9ICpuZXdfdm1hX2ZsYWdzO1xuIFx0fSBlbHNlIHtcbi1cdFx0bWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCwgXHUwMDI2bmV3X3ZtYV9mbGFncyk7XG4rXHRcdG1sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIG5ld192bWFfZmxhZ3MpO1xuIFx0fVxuIG91dDpcbiBcdCpwcmV2ID0gdm1hO1xuQEAgLTUxOCw3ICs1MTcsNyBAQCBzdGF0aWMgaW50IG1sb2NrX2ZpeHVwKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gfVxuIFxuIHN0YXRpYyBpbnQgYXBwbHlfdm1hX2xvY2tfZmxhZ3ModW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbixcbi1cdFx0XHRcdHZtX2ZsYWdzX3QgZmxhZ3MpXG4rXHRcdFx0XHRjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuc3RhcnQsIGVuZCwgdG1wO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsICpwcmV2O1xuQEAgLTU0MywxOCArNTQyLDIwIEBAIHN0YXRpYyBpbnQgYXBwbHlfdm1hX2xvY2tfZmxhZ3ModW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbixcbiBcdHRtcCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbiBcdGZvcl9lYWNoX3ZtYV9yYW5nZSh2bWksIHZtYSwgZW5kKSB7XG4gXHRcdGludCBlcnJvcjtcbi1cdFx0dm1fZmxhZ3NfdCBuZXdmbGFncztcbitcdFx0dm1hX2ZsYWdzX3QgbmV3ZmxhZ3M7XG4gXG4gXHRcdGlmICh2bWEtXHUwMDNldm1fc3RhcnQgIT0gdG1wKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0XHRuZXdmbGFncyA9IHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgflZNX0xPQ0tFRF9NQVNLO1xuLVx0XHRuZXdmbGFncyB8PSBmbGFncztcbitcdFx0bmV3ZmxhZ3MgPSB2bWEtXHUwMDNlZmxhZ3M7XG4rXHRcdHZtYV9mbGFnc19jbGVhcl9tYXNrKFx1MDAyNm5ld2ZsYWdzLCBWTUFfTE9DS0VEX01BU0spO1xuK1x0XHR2bWFfZmxhZ3Nfc2V0X21hc2soXHUwMDI2bmV3ZmxhZ3MsICpmbGFncyk7XG4rXG4gXHRcdC8qIEhlcmUgd2Uga25vdyB0aGF0ICB2bWEtXHUwMDNldm1fc3RhcnQgXHUwMDNjPSBuc3RhcnQgXHUwMDNjIHZtYS1cdTAwM2V2bV9lbmQuICovXG4gXHRcdHRtcCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4gXHRcdGlmICh0bXAgXHUwMDNlIGVuZClcbiBcdFx0XHR0bXAgPSBlbmQ7XG4tXHRcdGVycm9yID0gbWxvY2tfZml4dXAoXHUwMDI2dm1pLCB2bWEsIFx1MDAyNnByZXYsIG5zdGFydCwgdG1wLCBuZXdmbGFncyk7XG4rXHRcdGVycm9yID0gbWxvY2tfZml4dXAoXHUwMDI2dm1pLCB2bWEsIFx1MDAyNnByZXYsIG5zdGFydCwgdG1wLCBcdTAwMjZuZXdmbGFncyk7XG4gXHRcdGlmIChlcnJvcilcbiBcdFx0XHRyZXR1cm4gZXJyb3I7XG4gXHRcdHRtcCA9IHZtYV9pdGVyX2VuZChcdTAwMjZ2bWkpO1xuQEAgLTU4OSw3ICs1OTAsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9tbV9tbG9ja2VkX3BhZ2VfbnIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdGVuZCA9IHN0YXJ0ICsgbGVuO1xuIFxuIFx0Zm9yX2VhY2hfdm1hX3JhbmdlKHZtaSwgdm1hLCBlbmQpIHtcbi1cdFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKSB7XG4rXHRcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSkge1xuIFx0XHRcdGlmIChzdGFydCBcdTAwM2Ugdm1hLVx1MDAzZXZtX3N0YXJ0KVxuIFx0XHRcdFx0Y291bnQgLT0gKHN0YXJ0IC0gdm1hLVx1MDAzZXZtX3N0YXJ0KTtcbiBcdFx0XHRpZiAoZW5kIFx1MDAzYyB2bWEtXHUwMDNldm1fZW5kKSB7XG5AQCAtNjE1LDcgKzYxNiw4IEBAIHN0YXRpYyBpbnQgX19tbG9ja19wb3NpeF9lcnJvcl9yZXR1cm4obG9uZyByZXR2YWwpXG4gXHRyZXR1cm4gcmV0dmFsO1xuIH1cbiBcbi1zdGF0aWMgX19tdXN0X2NoZWNrIGludCBkb19tbG9jayh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLCB2bV9mbGFnc190IGZsYWdzKVxuK3N0YXRpYyBfX211c3RfY2hlY2sgaW50IGRvX21sb2NrKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sXG4rXHRcdFx0XHQgdm1hX2ZsYWdzX3QgKmZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbG9ja2VkO1xuIFx0dW5zaWduZWQgbG9uZyBsb2NrX2xpbWl0O1xuQEAgLTY2NCwyNCArNjY2LDI3IEBAIHN0YXRpYyBfX211c3RfY2hlY2sgaW50IGRvX21sb2NrKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sIHZtX2ZsYWdzX3QgZmxhXG4gXG4gU1lTQ0FMTF9ERUZJTkUyKG1sb2NrLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW4pXG4ge1xuLVx0cmV0dXJuIGRvX21sb2NrKHN0YXJ0LCBsZW4sIFZNX0xPQ0tFRCk7XG4rXHR2bWFfZmxhZ3NfdCBmbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfTE9DS0VEX0JJVCk7XG4rXG4rXHRyZXR1cm4gZG9fbWxvY2soc3RhcnQsIGxlbiwgXHUwMDI2ZmxhZ3MpO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTMobWxvY2syLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW4sIGludCwgZmxhZ3MpXG4ge1xuLVx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IFZNX0xPQ0tFRDtcbitcdHZtYV9mbGFnc190IHZtYV9mbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfTE9DS0VEX0JJVCk7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IH5NTE9DS19PTkZBVUxUKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgTUxPQ0tfT05GQVVMVClcbi1cdFx0dm1fZmxhZ3MgfD0gVk1fTE9DS09ORkFVTFQ7XG4rXHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTE9DS09ORkFVTFRfQklUKTtcbiBcbi1cdHJldHVybiBkb19tbG9jayhzdGFydCwgbGVuLCB2bV9mbGFncyk7XG4rXHRyZXR1cm4gZG9fbWxvY2soc3RhcnQsIGxlbiwgXHUwMDI2dm1hX2ZsYWdzKTtcbiB9XG4gXG4gU1lTQ0FMTF9ERUZJTkUyKG11bmxvY2ssIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbilcbiB7XG4rXHR2bWFfZmxhZ3NfdCBmbGFncyA9IEVNUFRZX1ZNQV9GTEFHUztcbiBcdGludCByZXQ7XG4gXG4gXHRzdGFydCA9IHVudGFnZ2VkX2FkZHIoc3RhcnQpO1xuQEAgLTY5MSw3ICs2OTYsNyBAQCBTWVNDQUxMX0RFRklORTIobXVubG9jaywgdW5zaWduZWQgbG9uZywgc3RhcnQsIHNpemVfdCwgbGVuKVxuIFxuIFx0aWYgKG1tYXBfd3JpdGVfbG9ja19raWxsYWJsZShjdXJyZW50LVx1MDAzZW1tKSlcbiBcdFx0cmV0dXJuIC1FSU5UUjtcbi1cdHJldCA9IGFwcGx5X3ZtYV9sb2NrX2ZsYWdzKHN0YXJ0LCBsZW4sIDApO1xuK1x0cmV0ID0gYXBwbHlfdm1hX2xvY2tfZmxhZ3Moc3RhcnQsIGxlbiwgXHUwMDI2ZmxhZ3MpO1xuIFx0bW1hcF93cml0ZV91bmxvY2soY3VycmVudC1cdTAwM2VtbSk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTY5OSw0NiArNzA0LDQ4IEBAIFNZU0NBTExfREVGSU5FMihtdW5sb2NrLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW4pXG4gXG4gLypcbiAgKiBUYWtlIHRoZSBNQ0xfKiBmbGFncyBwYXNzZWQgaW50byBtbG9ja2FsbCAob3IgMCBpZiBjYWxsZWQgZnJvbSBtdW5sb2NrYWxsKVxuLSAqIGFuZCB0cmFuc2xhdGUgaW50byB0aGUgYXBwcm9wcmlhdGUgbW9kaWZpY2F0aW9ucyB0byBtbS1cdTAwM2VkZWZfZmxhZ3MgYW5kL29yIHRoZVxuLSAqIGZsYWdzIGZvciBhbGwgY3VycmVudCBWTUFzLlxuKyAqIGFuZCB0cmFuc2xhdGUgaW50byB0aGUgYXBwcm9wcmlhdGUgbW9kaWZpY2F0aW9ucyB0byBtbS1cdTAwM2VkZWZfdm1hX2ZsYWdzIGFuZC9vclxuKyAqIHRoZSBmbGFncyBmb3IgYWxsIGN1cnJlbnQgVk1Bcy5cbiAgKlxuICAqIFRoZXJlIGFyZSBhIGNvdXBsZSBvZiBzdWJ0bGV0aWVzIHdpdGggdGhpcy4gIElmIG1sb2NrYWxsKCkgaXMgY2FsbGVkIG11bHRpcGxlXG4gICogdGltZXMgd2l0aCBkaWZmZXJlbnQgZmxhZ3MsIHRoZSB2YWx1ZXMgZG8gbm90IG5lY2Vzc2FyaWx5IHN0YWNrLiAgSWYgbWxvY2thbGxcbiAgKiBpcyBjYWxsZWQgb25jZSBpbmNsdWRpbmcgdGhlIE1DTF9GVVRVUkUgZmxhZyBhbmQgdGhlbiBhIHNlY29uZCB0aW1lIHdpdGhvdXRcbi0gKiBpdCwgVk1fTE9DS0VEIGFuZCBWTV9MT0NLT05GQVVMVCB3aWxsIGJlIGNsZWFyZWQgZnJvbSBtbS1cdTAwM2VkZWZfZmxhZ3MuXG4rICogaXQsIFZNQV9MT0NLRURfQklUIGFuZCBWTUFfTE9DS09ORkFVTFRfQklUIHdpbGwgYmUgY2xlYXJlZCBmcm9tXG4rICogbW0tXHUwMDNlZGVmX3ZtYV9mbGFncy5cbiAgKi9cbiBzdGF0aWMgaW50IGFwcGx5X21sb2NrYWxsX2ZsYWdzKGludCBmbGFncylcbiB7XG4gXHRWTUFfSVRFUkFUT1Iodm1pLCBjdXJyZW50LVx1MDAzZW1tLCAwKTtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCAqcHJldiA9IE5VTEw7XG4tXHR2bV9mbGFnc190IHRvX2FkZCA9IDA7XG4rXHR2bWFfZmxhZ3NfdCB0b19hZGQgPSBFTVBUWV9WTUFfRkxBR1M7XG4gXG4tXHRjdXJyZW50LVx1MDAzZW1tLVx1MDAzZWRlZl9mbGFncyBcdTAwMjY9IH5WTV9MT0NLRURfTUFTSztcbitcdHZtYV9mbGFnc19jbGVhcl9tYXNrKFx1MDAyNm1tLVx1MDAzZWRlZl92bWFfZmxhZ3MsIFZNQV9MT0NLRURfTUFTSyk7XG4gXHRpZiAoZmxhZ3MgXHUwMDI2IE1DTF9GVVRVUkUpIHtcbi1cdFx0Y3VycmVudC1cdTAwM2VtbS1cdTAwM2VkZWZfZmxhZ3MgfD0gVk1fTE9DS0VEO1xuK1x0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNm1tLVx1MDAzZWRlZl92bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTtcbiBcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBNQ0xfT05GQVVMVClcbi1cdFx0XHRjdXJyZW50LVx1MDAzZW1tLVx1MDAzZWRlZl9mbGFncyB8PSBWTV9MT0NLT05GQVVMVDtcbitcdFx0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNm1tLVx1MDAzZWRlZl92bWFfZmxhZ3MsIFZNQV9MT0NLT05GQVVMVF9CSVQpO1xuIFxuIFx0XHRpZiAoIShmbGFncyBcdTAwMjYgTUNMX0NVUlJFTlQpKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBNQ0xfQ1VSUkVOVCkge1xuLVx0XHR0b19hZGQgfD0gVk1fTE9DS0VEO1xuK1x0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnRvX2FkZCwgVk1BX0xPQ0tFRF9CSVQpO1xuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1DTF9PTkZBVUxUKVxuLVx0XHRcdHRvX2FkZCB8PSBWTV9MT0NLT05GQVVMVDtcbitcdFx0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnRvX2FkZCwgVk1BX0xPQ0tPTkZBVUxUX0JJVCk7XG4gXHR9XG4gXG4gXHRmb3JfZWFjaF92bWEodm1pLCB2bWEpIHtcbiBcdFx0aW50IGVycm9yO1xuLVx0XHR2bV9mbGFnc190IG5ld2ZsYWdzO1xuK1x0XHR2bWFfZmxhZ3NfdCBuZXdmbGFncyA9IHZtYS1cdTAwM2VmbGFncztcbiBcbi1cdFx0bmV3ZmxhZ3MgPSB2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IH5WTV9MT0NLRURfTUFTSztcbi1cdFx0bmV3ZmxhZ3MgfD0gdG9fYWRkO1xuK1x0XHR2bWFfZmxhZ3NfY2xlYXJfbWFzayhcdTAwMjZuZXdmbGFncywgVk1BX0xPQ0tFRF9NQVNLKTtcbitcdFx0dm1hX2ZsYWdzX3NldF9tYXNrKFx1MDAyNm5ld2ZsYWdzLCB0b19hZGQpO1xuIFxuIFx0XHRlcnJvciA9IG1sb2NrX2ZpeHVwKFx1MDAyNnZtaSwgdm1hLCBcdTAwMjZwcmV2LCB2bWEtXHUwMDNldm1fc3RhcnQsIHZtYS1cdTAwM2V2bV9lbmQsXG4tXHRcdFx0XHQgICAgbmV3ZmxhZ3MpO1xuK1x0XHRcdFx0ICAgIFx1MDAyNm5ld2ZsYWdzKTtcbiBcdFx0LyogSWdub3JlIGVycm9ycywgYnV0IHByZXYgbmVlZHMgZml4aW5nIHVwLiAqL1xuIFx0XHRpZiAoZXJyb3IpXG4gXHRcdFx0cHJldiA9IHZtYTtcbmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmNcbmluZGV4IDMwOGE0M2VhYmQ4M2IxLi40YmYyNmIwZjFlNmUzNiAxMDA2NDRcbi0tLSBhL21tL21tYXAuY1xuKysrIGIvbW0vbW1hcC5jXG5AQCAtODAsMTMgKzgwLDEzIEBAIGNvcmVfcGFyYW0oaWdub3JlX3JsaW1pdF9kYXRhLCBpZ25vcmVfcmxpbWl0X2RhdGEsIGJvb2wsIDA2NDQpO1xuIC8qIFVwZGF0ZSB2bWEtXHUwMDNldm1fcGFnZV9wcm90IHRvIHJlZmxlY3Qgdm1hLVx1MDAzZXZtX2ZsYWdzLiAqL1xuIHZvaWQgdm1hX3NldF9wYWdlX3Byb3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuLVx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYS1cdTAwM2V2bV9mbGFncztcbitcdHZtYV9mbGFnc190IHZtYV9mbGFncyA9IHZtYS1cdTAwM2VmbGFncztcbiBcdHBncHJvdF90IHZtX3BhZ2VfcHJvdDtcbiBcbi1cdHZtX3BhZ2VfcHJvdCA9IHZtX3BncHJvdF9tb2RpZnkodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCwgdm1fZmxhZ3MpO1xuK1x0dm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCwgdm1hX2ZsYWdzKTtcbiBcdGlmICh2bWFfd2FudHNfd3JpdGVub3RpZnkodm1hLCB2bV9wYWdlX3Byb3QpKSB7XG4tXHRcdHZtX2ZsYWdzIFx1MDAyNj0gflZNX1NIQVJFRDtcbi1cdFx0dm1fcGFnZV9wcm90ID0gdm1fcGdwcm90X21vZGlmeSh2bV9wYWdlX3Byb3QsIHZtX2ZsYWdzKTtcbitcdFx0dm1hX2ZsYWdzX2NsZWFyKFx1MDAyNnZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpO1xuK1x0XHR2bV9wYWdlX3Byb3QgPSB2bWFfcGdwcm90X21vZGlmeSh2bV9wYWdlX3Byb3QsIHZtYV9mbGFncyk7XG4gXHR9XG4gXHQvKiByZW1vdmVfcHJvdGVjdGlvbl9wdGVzIHJlYWRzIHZtYS1cdTAwM2V2bV9wYWdlX3Byb3Qgd2l0aG91dCBtbWFwX2xvY2sgKi9cbiBcdFdSSVRFX09OQ0Uodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCwgdm1fcGFnZV9wcm90KTtcbkBAIC0xMDIsMTUgKzEwMiwxNiBAQCB2b2lkIHZtYV9zZXRfcGFnZV9wcm90KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuICAqL1xuIHN0YXRpYyBpbnQgY2hlY2tfYnJrX2xpbWl0cyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKVxuIHtcbitcdGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbitcdGNvbnN0IGJvb2wgaXNfZGVmX2xvY2tlZCA9XG4rXHRcdHZtYV9mbGFnc190ZXN0KFx1MDAyNm1tLVx1MDAzZWRlZl92bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTtcbiBcdHVuc2lnbmVkIGxvbmcgbWFwcGVkX2FkZHI7XG4gXG4gXHRtYXBwZWRfYWRkciA9IGdldF91bm1hcHBlZF9hcmVhKE5VTEwsIGFkZHIsIGxlbiwgMCwgTUFQX0ZJWEVEKTtcbiBcdGlmIChJU19FUlJfVkFMVUUobWFwcGVkX2FkZHIpKVxuIFx0XHRyZXR1cm4gbWFwcGVkX2FkZHI7XG4gXG4tXHRyZXR1cm4gbWxvY2tfZnV0dXJlX29rKGN1cnJlbnQtXHUwMDNlbW0sXG4tXHRcdFx0ICAgICAgY3VycmVudC1cdTAwM2VtbS1cdTAwM2VkZWZfZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRCwgbGVuKVxuLVx0XHQ/IDAgOiAtRUFHQUlOO1xuK1x0cmV0dXJuIG1sb2NrX2Z1dHVyZV9vayhtbSwgaXNfZGVmX2xvY2tlZCwgbGVuKSA/IDAgOiAtRUFHQUlOO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTEoYnJrLCB1bnNpZ25lZCBsb25nLCBicmspXG5AQCAtMTk3LDcgKzE5OCw3IEBAIFNZU0NBTExfREVGSU5FMShicmssIHVuc2lnbmVkIGxvbmcsIGJyaylcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRtbS1cdTAwM2VicmsgPSBicms7XG4tXHRpZiAobW0tXHUwMDNlZGVmX2ZsYWdzIFx1MDAyNiBWTV9MT0NLRUQpXG4rXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bW0tXHUwMDNlZGVmX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHRwb3B1bGF0ZSA9IHRydWU7XG4gXG4gc3VjY2VzczpcbkBAIC0yODAsNyArMjgxLDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbGVfbW1hcF9vayhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgKiBkb19tbWFwKCkgLSBQZXJmb3JtIGEgdXNlcmxhbmQgbWVtb3J5IG1hcHBpbmcgaW50byB0aGUgY3VycmVudCBwcm9jZXNzXG4gICogYWRkcmVzcyBzcGFjZSBvZiBsZW5ndGggQGxlbiB3aXRoIHByb3RlY3Rpb24gYml0cyBAcHJvdCwgbW1hcCBmbGFncyBAZmxhZ3NcbiAgKiAoZnJvbSB3aGljaCBWTUEgZmxhZ3Mgd2lsbCBiZSBpbmZlcnJlZCksIGFuZCBhbnkgYWRkaXRpb25hbCBWTUEgZmxhZ3MgdG9cbi0gKiBhcHBseSBAdm1fZmxhZ3MuIElmIHRoaXMgaXMgYSBmaWxlLWJhY2tlZCBtYXBwaW5nIHRoZW4gdGhlIGZpbGUgaXMgc3BlY2lmaWVkXG4rICogYXBwbHkgQHZtYV9mbGFncy4gSWYgdGhpcyBpcyBhIGZpbGUtYmFja2VkIG1hcHBpbmcgdGhlbiB0aGUgZmlsZSBpcyBzcGVjaWZpZWRcbiAgKiBpbiBAZmlsZSBhbmQgcGFnZSBvZmZzZXQgaW50byB0aGUgZmlsZSB2aWEgQHBnb2ZmLlxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwZXJmb3JtIHNlY3VyaXR5IGNoZWNrcyBvbiB0aGUgZmlsZSBhbmQgYXNzdW1lcywgaWZcbkBAIC0zMjAsNyArMzIxLDggQEAgc3RhdGljIGlubGluZSBib29sIGZpbGVfbW1hcF9vayhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgKiAoMikgZm9yIGRldGFpbHMuXG4gICogQGZsYWdzOiBGbGFncyBzcGVjaWZ5aW5nIGhvdyB0aGUgbWFwcGluZyBzaG91bGQgYmUgcGVyZm9ybWVkLCBzZWUgbW1hcCAoMilcbiAgKiBmb3IgZGV0YWlscy5cbi0gKiBAdm1fZmxhZ3M6IFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgc2V0IGJ5IGRlZmF1bHQsIG9yIDAgb3RoZXJ3aXNlLlxuKyAqIEB2bWFfZmxhZ3M6IFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgc2V0IGJ5IGRlZmF1bHQsIG9yIEVNUFRZX1ZNQV9GTEFHU1xuKyAqIG90aGVyd2lzZS5cbiAgKiBAcGdvZmY6IFBhZ2Ugb2Zmc2V0IGludG8gdGhlIEBmaWxlIGlmIGZpbGUtYmFja2VkLCBzaG91bGQgYmUgMCBvdGhlcndpc2UuXG4gICogQHBvcHVsYXRlOiBBIHBvaW50ZXIgdG8gYSB2YWx1ZSB3aGljaCB3aWxsIGJlIHNldCB0byAwIGlmIG5vIHBvcHVsYXRpb24gb2ZcbiAgKiB0aGUgcmFuZ2UgaXMgcmVxdWlyZWQsIG9yIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcG9wdWxhdGUgaWYgaXQgaXMuIE11c3QgYmVcbkBAIC0zMzUsNyArMzM3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbGVfbW1hcF9vayhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgKi9cbiB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwcm90LFxuLVx0XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzLFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgKnBvcHVsYXRlLFxuIFx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnVmKVxuIHtcbkBAIC0zOTksMTMgKzQwMSwxOCBAQCB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdCAqIHRvLiB3ZSBhc3N1bWUgYWNjZXNzIHBlcm1pc3Npb25zIGhhdmUgYmVlbiBoYW5kbGVkIGJ5IHRoZSBvcGVuXG4gXHQgKiBvZiB0aGUgbWVtb3J5IG9iamVjdCwgc28gd2UgZG9uJ3QgZG8gYW55IGhlcmUuXG4gXHQgKi9cbi1cdHZtX2ZsYWdzIHw9IGNhbGNfdm1fcHJvdF9iaXRzKHByb3QsIHBrZXkpIHwgY2FsY192bV9mbGFnX2JpdHMoZmlsZSwgZmxhZ3MpIHxcbi1cdFx0XHRtbS1cdTAwM2VkZWZfZmxhZ3MgfCBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDO1xuK1x0dm1hX2ZsYWdzX3NldF9tYXNrKFx1MDAyNnZtYV9mbGFncyxcbitcdFx0XHQgICBsZWdhY3lfdG9fdm1hX2ZsYWdzKGNhbGNfdm1fcHJvdF9iaXRzKHByb3QsIHBrZXkpKSk7XG4rXHR2bWFfZmxhZ3Nfc2V0X21hc2soXHUwMDI2dm1hX2ZsYWdzLFxuK1x0XHRcdCAgIGxlZ2FjeV90b192bWFfZmxhZ3MoY2FsY192bV9mbGFnX2JpdHMoZmlsZSwgZmxhZ3MpKSk7XG4rXHR2bWFfZmxhZ3Nfc2V0X21hc2soXHUwMDI2dm1hX2ZsYWdzLCBtbS1cdTAwM2VkZWZfdm1hX2ZsYWdzKTtcbitcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQsXG4rXHRcdCAgICAgIFZNQV9NQVlFWEVDX0JJVCk7XG4gXG4gXHQvKiBPYnRhaW4gdGhlIGFkZHJlc3MgdG8gbWFwIHRvLiB3ZSB2ZXJpZnkgKG9yIHNlbGVjdCkgaXQgYW5kIGVuc3VyZVxuIFx0ICogdGhhdCBpdCByZXByZXNlbnRzIGEgdmFsaWQgc2VjdGlvbiBvZiB0aGUgYWRkcmVzcyBzcGFjZS5cbiBcdCAqL1xuLVx0YWRkciA9IF9fZ2V0X3VubWFwcGVkX2FyZWEoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcbitcdGFkZHIgPSBfX2dldF91bm1hcHBlZF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLCB2bWFfZmxhZ3MpO1xuIFx0aWYgKElTX0VSUl9WQUxVRShhZGRyKSlcbiBcdFx0cmV0dXJuIGFkZHI7XG4gXG5AQCAtNDE4LDcgKzQyNSw3IEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRpZiAoIWNhbl9kb19tbG9jaygpKVxuIFx0XHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHRpZiAoIW1sb2NrX2Z1dHVyZV9vayhtbSwgdm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRCwgbGVuKSlcbitcdGlmICghbWxvY2tfZnV0dXJlX29rKG1tLCB2bWFfZmxhZ3NfdGVzdChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSwgbGVuKSlcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG4gXG4gXHRpZiAoZmlsZSkge1xuQEAgLTQ2MSwyMiArNDY4LDIzIEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdGlmIChJU19BUFBFTkQoaW5vZGUpIFx1MDAyNlx1MDAyNiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1dSSVRFKSlcbiBcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIFxuLVx0XHRcdHZtX2ZsYWdzIHw9IFZNX1NIQVJFRCB8IFZNX01BWVNIQVJFO1xuK1x0XHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfU0hBUkVEX0JJVCwgVk1BX01BWVNIQVJFX0JJVCk7XG4gXHRcdFx0aWYgKCEoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1dSSVRFKSlcbi1cdFx0XHRcdHZtX2ZsYWdzIFx1MDAyNj0gfihWTV9NQVlXUklURSB8IFZNX1NIQVJFRCk7XG4rXHRcdFx0XHR2bWFfZmxhZ3NfY2xlYXIoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTUFZV1JJVEVfQklULFxuK1x0XHRcdFx0XHRcdFZNQV9TSEFSRURfQklUKTtcbiBcdFx0XHRmYWxsdGhyb3VnaDtcbiBcdFx0Y2FzZSBNQVBfUFJJVkFURTpcbiBcdFx0XHRpZiAoIShmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfUkVBRCkpXG4gXHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0XHRpZiAocGF0aF9ub2V4ZWMoXHUwMDI2ZmlsZS1cdTAwM2VmX3BhdGgpKSB7XG4tXHRcdFx0XHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX0VYRUMpXG4rXHRcdFx0XHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfRVhFQ19CSVQpKVxuIFx0XHRcdFx0XHRyZXR1cm4gLUVQRVJNO1xuLVx0XHRcdFx0dm1fZmxhZ3MgXHUwMDI2PSB+Vk1fTUFZRVhFQztcbitcdFx0XHRcdHZtYV9mbGFnc19jbGVhcihcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9NQVlFWEVDX0JJVCk7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdGlmICghY2FuX21tYXBfZmlsZShmaWxlKSlcbiBcdFx0XHRcdHJldHVybiAtRU5PREVWO1xuLVx0XHRcdGlmICh2bV9mbGFncyBcdTAwMjYgKFZNX0dST1dTRE9XTnxWTV9HUk9XU1VQKSlcbitcdFx0XHRpZiAodm1hX2ZsYWdzX2Nhbl9ncm93KFx1MDAyNnZtYV9mbGFncykpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHRicmVhaztcbiBcbkBAIC00ODgsMjMgKzQ5NiwyNyBAQCB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0ICogQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSB2aW9sYXRpbmcgYW55IHNlYWxzIGFuZCB1cGRhdGUgVk1BXG4gXHRcdCAqIGZsYWdzIGlmIG5lY2Vzc2FyeSB0byBhdm9pZCBmdXR1cmUgc2VhbCB2aW9sYXRpb25zLlxuIFx0XHQgKi9cbi1cdFx0ZXJyID0gbWVtZmRfY2hlY2tfc2VhbHNfbW1hcChmaWxlLCBcdTAwMjZ2bV9mbGFncyk7XG4rXHRcdGVyciA9IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoZmlsZSwgXHUwMDI2dm1hX2ZsYWdzKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZXJyO1xuIFx0fSBlbHNlIHtcbiBcdFx0c3dpdGNoIChmbGFncyBcdTAwMjYgTUFQX1RZUEUpIHtcbiBcdFx0Y2FzZSBNQVBfU0hBUkVEOlxuLVx0XHRcdGlmICh2bV9mbGFncyBcdTAwMjYgKFZNX0dST1dTRE9XTnxWTV9HUk9XU1VQKSlcbitcdFx0XHRpZiAodm1hX2ZsYWdzX2Nhbl9ncm93KFx1MDAyNnZtYV9mbGFncykpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIElnbm9yZSBwZ29mZi5cbiBcdFx0XHQgKi9cbiBcdFx0XHRwZ29mZiA9IDA7XG4tXHRcdFx0dm1fZmxhZ3MgfD0gVk1fU0hBUkVEIHwgVk1fTUFZU0hBUkU7XG4rXHRcdFx0dm1hX2ZsYWdzX3NldChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklULCBWTUFfTUFZU0hBUkVfQklUKTtcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBNQVBfRFJPUFBBQkxFOlxuLVx0XHRcdGlmIChWTV9EUk9QUEFCTEUgPT0gVk1fTk9ORSlcbitcdFx0Y2FzZSBNQVBfRFJPUFBBQkxFOiB7XG4rXHRcdFx0dm1hX2ZsYWdzX3QgZHJvcHBhYmxlID0gVk1BX0RST1BQQUJMRTtcbitcbitcdFx0XHRpZiAodm1hX2ZsYWdzX2VtcHR5KFx1MDAyNmRyb3BwYWJsZSkpXG4gXHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdFx0dm1hX2ZsYWdzX3NldF9tYXNrKFx1MDAyNnZtYV9mbGFncywgZHJvcHBhYmxlKTtcbitcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIEEgbG9ja2VkIG9yIHN0YWNrIGFyZWEgbWFrZXMgbm8gc2Vuc2UgdG8gYmUgZHJvcHBhYmxlLlxuIFx0XHRcdCAqXG5AQCAtNTE1LDIzICs1MjcsMjQgQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGZsYWdzIFx1MDAyNiAoTUFQX0xPQ0tFRCB8IE1BUF9IVUdFVExCKSlcbiBcdFx0XHQgICAgICAgIHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdGlmICh2bV9mbGFncyBcdTAwMjYgKFZNX0dST1dTRE9XTiB8IFZNX0dST1dTVVApKVxuK1x0XHRcdGlmICh2bWFfZmxhZ3NfY2FuX2dyb3coXHUwMDI2dm1hX2ZsYWdzKSlcbiBcdFx0XHQgICAgICAgIHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRcdHZtX2ZsYWdzIHw9IFZNX0RST1BQQUJMRTtcbi1cbiBcdFx0XHQvKlxuIFx0XHRcdCAqIElmIHRoZSBwYWdlcyBjYW4gYmUgZHJvcHBlZCwgdGhlbiBpdCBkb2Vzbid0IG1ha2VcbiBcdFx0XHQgKiBzZW5zZSB0byByZXNlcnZlIHRoZW0uXG4gXHRcdFx0ICovXG4tXHRcdFx0dm1fZmxhZ3MgfD0gVk1fTk9SRVNFUlZFO1xuK1x0XHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTk9SRVNFUlZFX0JJVCk7XG4gXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBMaWtld2lzZSwgdGhleSdyZSB2b2xhdGlsZSBlbm91Z2ggdGhhdCB0aGV5XG4gXHRcdFx0ICogc2hvdWxkbid0IHN1cnZpdmUgZm9ya3Mgb3IgY29yZWR1bXBzLlxuIFx0XHRcdCAqL1xuLVx0XHRcdHZtX2ZsYWdzIHw9IFZNX1dJUEVPTkZPUksgfCBWTV9ET05URFVNUDtcbitcdFx0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnZtYV9mbGFncywgVk1BX1dJUEVPTkZPUktfQklULFxuK1x0XHRcdFx0ICAgICAgVk1BX0RPTlREVU1QX0JJVCk7XG4rXG4gXHRcdFx0ZmFsbHRocm91Z2g7XG4rXHRcdH1cbiBcdFx0Y2FzZSBNQVBfUFJJVkFURTpcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIFNldCBwZ29mZiBhY2NvcmRpbmcgdG8gYWRkciBmb3IgYW5vbl92bWEuXG5AQCAtNTQ0LDIyICs1NTcsMjIgQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogU2V0ICdWTV9OT1JFU0VSVkUnIGlmIHdlIHNob3VsZCBub3QgYWNjb3VudCBmb3IgdGhlXG4tXHQgKiBtZW1vcnkgdXNlIG9mIHRoaXMgbWFwcGluZy5cbitcdCAqIFNldCBWTUFfTk9SRVNFUlZFX0JJVCBpZiB3ZSBzaG91bGQgbm90IGFjY291bnQgZm9yIHRoZSBtZW1vcnkgdXNlXG4rXHQgKiBvZiB0aGlzIG1hcHBpbmcuXG4gXHQgKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgTUFQX05PUkVTRVJWRSkge1xuIFx0XHQvKiBXZSBob25vciBNQVBfTk9SRVNFUlZFIGlmIGFsbG93ZWQgdG8gb3ZlcmNvbW1pdCAqL1xuIFx0XHRpZiAoc3lzY3RsX292ZXJjb21taXRfbWVtb3J5ICE9IE9WRVJDT01NSVRfTkVWRVIpXG4tXHRcdFx0dm1fZmxhZ3MgfD0gVk1fTk9SRVNFUlZFO1xuK1x0XHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTk9SRVNFUlZFX0JJVCk7XG4gXG4gXHRcdC8qIGh1Z2V0bGIgYXBwbGllcyBzdHJpY3Qgb3ZlcmNvbW1pdCB1bmxlc3MgTUFQX05PUkVTRVJWRSAqL1xuIFx0XHRpZiAoZmlsZSBcdTAwMjZcdTAwMjYgaXNfZmlsZV9odWdlcGFnZXMoZmlsZSkpXG4tXHRcdFx0dm1fZmxhZ3MgfD0gVk1fTk9SRVNFUlZFO1xuK1x0XHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTk9SRVNFUlZFX0JJVCk7XG4gXHR9XG4gXG4tXHRhZGRyID0gbW1hcF9yZWdpb24oZmlsZSwgYWRkciwgbGVuLCB2bV9mbGFncywgcGdvZmYsIHVmKTtcbitcdGFkZHIgPSBtbWFwX3JlZ2lvbihmaWxlLCBhZGRyLCBsZW4sIHZtYV9mbGFncywgcGdvZmYsIHVmKTtcbiBcdGlmICghSVNfRVJSX1ZBTFVFKGFkZHIpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICgodm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRCkgfHxcbitcdCAgICAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkgfHxcbiBcdCAgICAgKGZsYWdzIFx1MDAyNiAoTUFQX1BPUFVMQVRFIHwgTUFQX05PTkJMT0NLKSkgPT0gTUFQX1BPUFVMQVRFKSlcbiBcdFx0KnBvcHVsYXRlID0gbGVuO1xuIFx0cmV0dXJuIGFkZHI7XG5AQCAtNjQ1LDkgKzY1OCw5IEBAIFNZU0NBTExfREVGSU5FMShvbGRfbW1hcCwgc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBfX3VzZXIgKiwgYXJnKVxuICAqIERldGVybWluZSBpZiB0aGUgYWxsb2NhdGlvbiBuZWVkcyB0byBlbnN1cmUgdGhhdCB0aGVyZSBpcyBub1xuICAqIGV4aXN0aW5nIG1hcHBpbmcgd2l0aGluIGl0J3MgZ3VhcmQgZ2FwcywgZm9yIHVzZSBhcyBzdGFydF9nYXAuXG4gICovXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bV9mbGFnc190IHZtX2ZsYWdzKVxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbi1cdGlmICh2bV9mbGFncyBcdTAwMjYgVk1fU0hBRE9XX1NUQUNLKVxuK1x0aWYgKHZtYV9mbGFnc190ZXN0X3NpbmdsZV9tYXNrKFx1MDAyNnZtYV9mbGFncywgVk1BX1NIQURPV19TVEFDSykpXG4gXHRcdHJldHVybiBQQUdFX1NJWkU7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC02ODksNyArNzAyLDcgQEAgdW5zaWduZWQgbG9uZyB2bV91bm1hcHBlZF9hcmVhKHN0cnVjdCB2bV91bm1hcHBlZF9hcmVhX2luZm8gKmluZm8pXG4gdW5zaWduZWQgbG9uZ1xuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcbitcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXHUwMDNlbW07XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgKnByZXY7XG5AQCAtNzE0LDcgKzcyNyw3IEBAIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGluZm8ubGVuZ3RoID0gbGVuO1xuIFx0aW5mby5sb3dfbGltaXQgPSBtbS1cdTAwM2VtbWFwX2Jhc2U7XG4gXHRpbmZvLmhpZ2hfbGltaXQgPSBtbWFwX2VuZDtcbi1cdGluZm8uc3RhcnRfZ2FwID0gc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtX2ZsYWdzKTtcbitcdGluZm8uc3RhcnRfZ2FwID0gc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtYV9mbGFncyk7XG4gXHRpZiAoZmlscCBcdTAwMjZcdTAwMjYgaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXG4gXHRcdGluZm8uYWxpZ25fbWFzayA9IGh1Z2VfcGFnZV9tYXNrX2FsaWduKGZpbHApO1xuIFx0cmV0dXJuIHZtX3VubWFwcGVkX2FyZWEoXHUwMDI2aW5mbyk7XG5AQCAtNzI3LDcgKzc0MCw3IEBAIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4ge1xuIFx0cmV0dXJuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4tXHRcdFx0XHRcdCB2bV9mbGFncyk7XG4rXHRcdFx0XHRcdCBsZWdhY3lfdG9fdm1hX2ZsYWdzKHZtX2ZsYWdzKSk7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTczOCw3ICs3NTEsNyBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gdW5zaWduZWQgbG9uZ1xuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbi1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcbitcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCAqcHJldjtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbkBAIC03NjYsNyArNzc5LDcgQEAgZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpbmZvLmxlbmd0aCA9IGxlbjtcbiBcdGluZm8ubG93X2xpbWl0ID0gUEFHRV9TSVpFO1xuIFx0aW5mby5oaWdoX2xpbWl0ID0gYXJjaF9nZXRfbW1hcF9iYXNlKGFkZHIsIG1tLVx1MDAzZW1tYXBfYmFzZSk7XG4tXHRpbmZvLnN0YXJ0X2dhcCA9IHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bV9mbGFncyk7XG4rXHRpbmZvLnN0YXJ0X2dhcCA9IHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bWFfZmxhZ3MpO1xuIFx0aWYgKGZpbHAgXHUwMDI2XHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxuIFx0XHRpbmZvLmFsaWduX21hc2sgPSBodWdlX3BhZ2VfbWFza19hbGlnbihmaWxwKTtcbiBcdGFkZHIgPSB2bV91bm1hcHBlZF9hcmVhKFx1MDAyNmluZm8pO1xuQEAgLTc5NSwyMyArODA4LDI0IEBAIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxuIHtcbiBcdHJldHVybiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4tXHRcdFx0XHRcdFx0IHZtX2ZsYWdzKTtcbitcdFx0XHRcdFx0XHQgbGVnYWN5X3RvX3ZtYV9mbGFncyh2bV9mbGFncykpO1xuIH1cbiAjZW5kaWZcbiBcbi11bnNpZ25lZCBsb25nIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXG4tXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4rdW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyxcbitcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbiBcdGlmIChtbV9mbGFnc190ZXN0KE1NRl9UT1BET1dOLCBjdXJyZW50LVx1MDAzZW1tKSlcbiBcdFx0cmV0dXJuIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLFxuLVx0XHRcdFx0XHRcdCAgICAgIGZsYWdzLCB2bV9mbGFncyk7XG4tXHRyZXR1cm4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywgdm1fZmxhZ3MpO1xuK1x0XHRcdFx0ZmxhZ3MsIHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSk7XG4rXHRyZXR1cm4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyxcbitcdFx0XHR2bWFfZmxhZ3NfdG9fbGVnYWN5KHZtYV9mbGFncykpO1xuIH1cbiBcbiB1bnNpZ25lZCBsb25nXG4gX19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcbi1cdFx0dW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcbitcdFx0dW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgKCpnZXRfYXJlYSkoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgbG9uZyxcbiBcdFx0XHRcdCAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZylcbkBAIC04NDYsMTEgKzg2MCwxMSBAQCBfX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxuIFx0XHQgICBcdTAwMjZcdTAwMjYgIWFkZHIgLyogbm8gaGludCAqL1xuIFx0XHQgICBcdTAwMjZcdTAwMjYgSVNfQUxJR05FRChsZW4sIFBNRF9TSVpFKSkge1xuIFx0XHQvKiBFbnN1cmVzIHRoYXQgbGFyZ2VyIGFub255bW91cyBtYXBwaW5ncyBhcmUgVEhQIGFsaWduZWQuICovXG4tXHRcdGFkZHIgPSB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxlLCBhZGRyLCBsZW4sXG4tXHRcdFx0XHRcdFx0ICAgICBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcbitcdFx0YWRkciA9IHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhmaWxlLCBhZGRyLCBsZW4sXG4rXHRcdFx0XHRcdFx0ICAgICAgcGdvZmYsIGZsYWdzLCB2bWFfZmxhZ3MpO1xuIFx0fSBlbHNlIHtcbi1cdFx0YWRkciA9IG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkciwgbGVuLFxuLVx0XHRcdFx0XHRcdCAgICBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcbitcdFx0YWRkciA9IG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbGUsIGFkZHIsIGxlbixcbitcdFx0XHRcdFx0XHQgICAgIHBnb2ZmLCBmbGFncywgdm1hX2ZsYWdzKTtcbiBcdH1cbiBcdGlmIChJU19FUlJfVkFMVUUoYWRkcikpXG4gXHRcdHJldHVybiBhZGRyO1xuQEAgLTg2OCw3ICs4ODIsOCBAQCB1bnNpZ25lZCBsb25nXG4gbW1fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXG4gXHRcdCAgICAgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncylcbiB7XG4tXHRyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxlLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XG4rXHRyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgICAgRU1QVFlfVk1BX0ZMQUdTKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChtbV9nZXRfdW5tYXBwZWRfYXJlYSk7XG4gXG5AQCAtOTcwLDcgKzk4NSw3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9leHRlbmRfdm1hX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0aWYgKGV4cGFuZF9zdGFja19sb2NrZWQocHJldiwgYWRkcikpXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHByZXYtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbitcdGlmICh2bWFfdGVzdChwcmV2LCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdHBvcHVsYXRlX3ZtYV9wYWdlX3JhbmdlKHByZXYsIGFkZHIsIHByZXYtXHUwMDNldm1fZW5kLCBOVUxMKTtcbiBcdHJldHVybiBwcmV2O1xuIH1cbkBAIC05OTQsNyArMTAwOSw3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9leHRlbmRfdm1hX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uXG4gXHRzdGFydCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbiBcdGlmIChleHBhbmRfc3RhY2tfbG9ja2VkKHZtYSwgYWRkcikpXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKVxuK1x0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHRwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSh2bWEsIGFkZHIsIHN0YXJ0LCBOVUxMKTtcbiBcdHJldHVybiB2bWE7XG4gfVxuQEAgLTExMTksMTggKzExMzQsMTggQEAgU1lTQ0FMTF9ERUZJTkU1KHJlbWFwX2ZpbGVfcGFnZXMsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBzaXplLFxuIFx0ICovXG4gXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBzdGFydCk7XG4gXG4tXHRpZiAoIXZtYSB8fCAhKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fU0hBUkVEKSkge1xuK1x0aWYgKCF2bWEgfHwgIXZtYV90ZXN0KHZtYSwgVk1BX1NIQVJFRF9CSVQpKSB7XG4gXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdHByb3QgfD0gdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRUFEID8gUFJPVF9SRUFEIDogMDtcbi1cdHByb3QgfD0gdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XUklURSA/IFBST1RfV1JJVEUgOiAwO1xuLVx0cHJvdCB8PSB2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0VYRUMgPyBQUk9UX0VYRUMgOiAwO1xuK1x0cHJvdCB8PSB2bWFfdGVzdCh2bWEsIFZNQV9SRUFEX0JJVCkgPyBQUk9UX1JFQUQgOiAwO1xuK1x0cHJvdCB8PSB2bWFfdGVzdCh2bWEsIFZNQV9XUklURV9CSVQpID8gUFJPVF9XUklURSA6IDA7XG4rXHRwcm90IHw9IHZtYV90ZXN0KHZtYSwgVk1BX0VYRUNfQklUKSA/IFBST1RfRVhFQyA6IDA7XG4gXG4gXHRmbGFncyBcdTAwMjY9IE1BUF9OT05CTE9DSztcbiBcdGZsYWdzIHw9IE1BUF9TSEFSRUQgfCBNQVBfRklYRUQgfCBNQVBfUE9QVUxBVEU7XG4tXHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9MT0NLRUQpXG4rXHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdGZsYWdzIHw9IE1BUF9MT0NLRUQ7XG4gXG4gXHQvKiBTYXZlIHZtX2ZsYWdzIHVzZWQgdG8gY2FsY3VsYXRlIHByb3QgYW5kIGZsYWdzLCBhbmQgcmVjaGVjayBsYXRlci4gKi9cbkBAIC0xMTkxLDcgKzEyMDYsNyBAQCBTWVNDQUxMX0RFRklORTUocmVtYXBfZmlsZV9wYWdlcywgdW5zaWduZWQgbG9uZywgc3RhcnQsIHVuc2lnbmVkIGxvbmcsIHNpemUsXG4gXHR9XG4gXG4gXHRyZXQgPSBkb19tbWFwKHZtYS1cdTAwM2V2bV9maWxlLCBzdGFydCwgc2l6ZSxcbi1cdFx0XHRwcm90LCBmbGFncywgMCwgcGdvZmYsIFx1MDAyNnBvcHVsYXRlLCBOVUxMKTtcbitcdFx0XHRwcm90LCBmbGFncywgRU1QVFlfVk1BX0ZMQUdTLCBwZ29mZiwgXHUwMDI2cG9wdWxhdGUsIE5VTEwpO1xuIG91dDpcbiBcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcbiBcdGZwdXQoZmlsZSk7XG5AQCAtMTIzMyw3ICsxMjQ4LDcgQEAgaW50IHZtX2Jya19mbGFncyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdCwgYm9vbCBpc19leGVjKVxuIFxuIFx0dm1hID0gdm1hX3ByZXYoXHUwMDI2dm1pKTtcbiBcdHJldCA9IGRvX2Jya19mbGFncyhcdTAwMjZ2bWksIHZtYSwgYWRkciwgbGVuLCB2bWFfZmxhZ3MpO1xuLVx0cG9wdWxhdGUgPSAoKG1tLVx1MDAzZWRlZl9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKSAhPSAwKTtcbitcdHBvcHVsYXRlID0gdm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bW0tXHUwMDNlZGVmX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpO1xuIFx0bW1hcF93cml0ZV91bmxvY2sobW0pO1xuIFx0dXNlcmZhdWx0ZmRfdW5tYXBfY29tcGxldGUobW0sIFx1MDAyNnVmKTtcbiBcdGlmIChwb3B1bGF0ZSBcdTAwMjZcdTAwMjYgIXJldClcbkBAIC0xMjU2LDcgKzEyNzEsNyBAQCB1bnNpZ25lZCBsb25nIHRlYXJfZG93bl92bWFzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXG4gXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xuIFx0dm1hX2l0ZXJfc2V0KHZtaSwgdm1hLVx1MDAzZXZtX2VuZCk7XG4gXHRkbyB7XG4tXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0FDQ09VTlQpXG4rXHRcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9BQ0NPVU5UX0JJVCkpXG4gXHRcdFx0bnJfYWNjb3VudGVkICs9IHZtYV9wYWdlcyh2bWEpO1xuIFx0XHR2bWFfbWFya19kZXRhY2hlZCh2bWEpO1xuIFx0XHRyZW1vdmVfdm1hKHZtYSk7XG5AQCAtMTQwNSw3ICsxNDIwLDcgQEAgc3RhdGljIGludCBzcGVjaWFsX21hcHBpbmdfc3BsaXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHQvKlxuIFx0ICogRm9yYmlkIHNwbGl0dGluZyBzcGVjaWFsIG1hcHBpbmdzIC0ga2VybmVsIGhhcyBleHBlY3RhdGlvbnMgb3ZlclxuLVx0ICogdGhlIG51bWJlciBvZiBwYWdlcyBpbiBtYXBwaW5nLiBUb2dldGhlciB3aXRoIFZNX0RPTlRFWFBBTkRcbitcdCAqIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gbWFwcGluZy4gVG9nZXRoZXIgd2l0aCBWTUFfRE9OVEVYUEFORF9CSVRcbiBcdCAqIHRoZSBzaXplIG9mIHZtYSBzaG91bGQgc3RheSB0aGUgc2FtZSBvdmVyIHRoZSBzcGVjaWFsIG1hcHBpbmcnc1xuIFx0ICogbGlmZXRpbWUuXG4gXHQgKi9cbkBAIC0xNjc3LDcgKzE2OTIsNyBAQCBib29sIG1tYXBfcmVhZF9sb2NrX21heWJlX2V4cGFuZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRpZiAoIShuZXdfdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9HUk9XU0RPV04pKVxuK1x0aWYgKCF2bWFfdGVzdChuZXdfdm1hLCBWTUFfR1JPV1NET1dOX0JJVCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdG1tYXBfd3JpdGVfbG9jayhtbSk7XG5AQCAtMTcyNyw3ICsxNzQyLDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxuIFx0XHRyZXR2YWwgPSB2bWFfc3RhcnRfd3JpdGVfa2lsbGFibGUobXBudCk7XG4gXHRcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gXHRcdFx0Z290byBsb29wX291dDtcbi1cdFx0aWYgKG1wbnQtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0RPTlRDT1BZKSB7XG4rXHRcdGlmICh2bWFfdGVzdChtcG50LCBWTUFfRE9OVENPUFlfQklUKSkge1xuIFx0XHRcdHJldHZhbCA9IHZtYV9pdGVyX2NsZWFyX2dmcChcdTAwMjZ2bWksIG1wbnQtXHUwMDNldm1fc3RhcnQsXG4gXHRcdFx0XHRcdFx0ICAgIG1wbnQtXHUwMDNldm1fZW5kLCBHRlBfS0VSTkVMKTtcbiBcdFx0XHRpZiAocmV0dmFsKVxuQEAgLTE3MzcsNyArMTc1Miw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFx0XHRjaGFyZ2UgPSAwO1xuLVx0XHRpZiAobXBudC1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fQUNDT1VOVCkge1xuK1x0XHRpZiAodm1hX3Rlc3QobXBudCwgVk1BX0FDQ09VTlRfQklUKSkge1xuIFx0XHRcdHVuc2lnbmVkIGxvbmcgbGVuID0gdm1hX3BhZ2VzKG1wbnQpO1xuIFxuIFx0XHRcdGlmIChzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5X21tKG9sZG1tLCBsZW4pKSAvKiBzaWMgKi9cbkBAIC0xNzU1LDE2ICsxNzcwLDE5IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcbiBcdFx0cmV0dmFsID0gZHVwX3VzZXJmYXVsdGZkKHRtcCwgXHUwMDI2dWYpO1xuIFx0XHRpZiAocmV0dmFsKVxuIFx0XHRcdGdvdG8gZmFpbF9ub21lbV9hbm9uX3ZtYV9mb3JrO1xuLVx0XHRpZiAodG1wLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XSVBFT05GT1JLKSB7XG4rXG4rXHRcdGlmICh2bWFfdGVzdCh0bXAsIFZNQV9XSVBFT05GT1JLX0JJVCkpIHtcbiBcdFx0XHQvKlxuLVx0XHRcdCAqIFZNX1dJUEVPTkZPUksgZ2V0cyBhIGNsZWFuIHNsYXRlIGluIHRoZSBjaGlsZC5cbitcdFx0XHQgKiBWTUFfV0lQRU9ORk9SS19CSVQgZ2V0cyBhIGNsZWFuIHNsYXRlIGluIHRoZSBjaGlsZC5cbiBcdFx0XHQgKiBEb24ndCBwcmVwYXJlIGFub25fdm1hIHVudGlsIGZhdWx0IHNpbmNlIHdlIGRvbid0XG4gXHRcdFx0ICogY29weSBwYWdlIGZvciBjdXJyZW50IHZtYS5cbiBcdFx0XHQgKi9cbiBcdFx0XHR0bXAtXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xuIFx0XHR9IGVsc2UgaWYgKGFub25fdm1hX2ZvcmsodG1wLCBtcG50KSlcbiBcdFx0XHRnb3RvIGZhaWxfbm9tZW1fYW5vbl92bWFfZm9yaztcbi1cdFx0dm1fZmxhZ3NfY2xlYXIodG1wLCBWTV9MT0NLRURfTUFTSyk7XG4rXG4rXHRcdHZtYV9zdGFydF93cml0ZSh0bXApO1xuK1x0XHR2bWFfY2xlYXJfZmxhZ3NfbWFzayh0bXAsIFZNQV9MT0NLRURfTUFTSyk7XG4gXHRcdC8qXG4gXHRcdCAqIENvcHkvdXBkYXRlIGh1Z2V0bGIgcHJpdmF0ZSB2bWEgaW5mb3JtYXRpb24uXG4gXHRcdCAqL1xuQEAgLTE3OTcsNyArMTgxNSw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcbiBcdFx0XHRpX21tYXBfdW5sb2NrX3dyaXRlKG1hcHBpbmcpO1xuIFx0XHR9XG4gXG4tXHRcdGlmICghKHRtcC1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fV0lQRU9ORk9SSykpXG4rXHRcdGlmICghdm1hX3Rlc3QodG1wLCBWTUFfV0lQRU9ORk9SS19CSVQpKVxuIFx0XHRcdHJldHZhbCA9IGNvcHlfcGFnZV9yYW5nZSh0bXAsIG1wbnQpO1xuIFxuIFx0XHRpZiAocmV0dmFsKSB7XG5kaWZmIC0tZ2l0IGEvbW0vbXByb3RlY3QuYyBiL21tL21wcm90ZWN0LmNcbmluZGV4IGRjMjdiYmMxNzEyZmQ1Li4yODg4ZWU2MzhkODcyYSAxMDA2NDRcbi0tLSBhL21tL21wcm90ZWN0LmNcbisrKyBiL21tL21wcm90ZWN0LmNcbkBAIC00MCw3ICs0MCw3IEBAXG4gXG4gc3RhdGljIGJvb2wgbWF5YmVfY2hhbmdlX3B0ZV93cml0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcHRlX3QgcHRlKVxuIHtcbi1cdGlmIChXQVJOX09OX09OQ0UoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1dSSVRFKSkpXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCF2bWFfdGVzdCh2bWEsIFZNQV9XUklURV9CSVQpKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LyogRG9uJ3QgdG91Y2ggZW50cmllcyB0aGF0IGFyZSBub3QgZXZlbiByZWFkYWJsZS4gKi9cbkBAIC05Nyw3ICs5Nyw3IEBAIHN0YXRpYyBib29sIGNhbl9jaGFuZ2Vfc2hhcmVkX3B0ZV93cml0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBib29sIGNhbl9jaGFuZ2VfcHRlX3dyaXRhYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgICBwdGVfdCBwdGUpXG4ge1xuLVx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpKVxuK1x0aWYgKCF2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKSlcbiBcdFx0cmV0dXJuIGNhbl9jaGFuZ2VfcHJpdmF0ZV9wdGVfd3JpdGFibGUodm1hLCBhZGRyLCBwdGUpO1xuIFxuIFx0cmV0dXJuIGNhbl9jaGFuZ2Vfc2hhcmVkX3B0ZV93cml0YWJsZSh2bWEsIHB0ZSk7XG5AQCAtMTk0LDcgKzE5NCw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBzZXRfd3JpdGVfcHJvdF9jb21taXRfZmx1c2hfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1XG4ge1xuIFx0Ym9vbCBzZXRfd3JpdGU7XG4gXG4tXHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpIHtcbitcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKSkge1xuIFx0XHRzZXRfd3JpdGUgPSBjYW5fY2hhbmdlX3NoYXJlZF9wdGVfd3JpdGFibGUodm1hLCBwdGVudCk7XG4gXHRcdHByb3RfY29tbWl0X2ZsdXNoX3B0ZXModm1hLCBhZGRyLCBwdGVwLCBvbGRwdGUsIHB0ZW50LCBucl9wdGVzLFxuIFx0XHRcdFx0ICAgICAgIC8qIGlkeCA9ICovIDAsIHNldF93cml0ZSwgdGxiKTtcbkBAIC04NDYsOCArODQ2LDggQEAgbXByb3RlY3RfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuIFx0XHR2bV91bmFjY3RfbWVtb3J5KG5ycGFnZXMpO1xuIFxuIFx0Lypcbi1cdCAqIFByaXZhdGUgVk1fTE9DS0VEIFZNQSBiZWNvbWluZyB3cml0YWJsZTogdHJpZ2dlciBDT1cgdG8gYXZvaWQgbWFqb3Jcbi1cdCAqIGZhdWx0IG9uIGFjY2Vzcy5cbitcdCAqIFByaXZhdGUgVk1BX0xPQ0tFRF9CSVQgVk1BIGJlY29taW5nIHdyaXRhYmxlOiB0cmlnZ2VyIENPVyB0byBhdm9pZFxuK1x0ICogbWFqb3IgZmF1bHQgb24gYWNjZXNzLlxuIFx0ICovXG4gXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bmV3X3ZtYV9mbGFncywgVk1BX1dSSVRFX0JJVCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgdm1hX2ZsYWdzX3Rlc3QoXHUwMDI2b2xkX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpIFx1MDAyNlx1MDAyNlxuQEAgLTkyMSw3ICs5MjEsNyBAQCBzdGF0aWMgaW50IGRvX21wcm90ZWN0X3BrZXkodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbixcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0c3RhcnQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4gXHRcdGVycm9yID0gLUVJTlZBTDtcbi1cdFx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9HUk9XU0RPV04pKVxuK1x0XHRpZiAoIXZtYV90ZXN0KHZtYSwgVk1BX0dST1dTRE9XTl9CSVQpKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKHZtYS1cdTAwM2V2bV9zdGFydCBcdTAwM2Ugc3RhcnQpXG5AQCAtOTI5LDcgKzkyOSw3IEBAIHN0YXRpYyBpbnQgZG9fbXByb3RlY3RfcGtleSh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLFxuIFx0XHRpZiAodW5saWtlbHkoZ3Jvd3MgXHUwMDI2IFBST1RfR1JPV1NVUCkpIHtcbiBcdFx0XHRlbmQgPSB2bWEtXHUwMDNldm1fZW5kO1xuIFx0XHRcdGVycm9yID0gLUVJTlZBTDtcbi1cdFx0XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0dST1dTVVApKVxuK1x0XHRcdGlmICghdm1hX3Rlc3Rfc2luZ2xlX21hc2sodm1hLCBWTUFfR1JPV1NVUCkpXG4gXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFx0fVxuQEAgLTk1Myw3ICs5NTMsNyBAQCBzdGF0aWMgaW50IGRvX21wcm90ZWN0X3BrZXkodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbixcbiBcdFx0fVxuIFxuIFx0XHQvKiBEb2VzIHRoZSBhcHBsaWNhdGlvbiBleHBlY3QgUFJPVF9SRUFEIHRvIGltcGx5IFBST1RfRVhFQyAqL1xuLVx0XHRpZiAocmllciBcdTAwMjZcdTAwMjYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUFZRVhFQykpXG4rXHRcdGlmIChyaWVyIFx1MDAyNlx1MDAyNiB2bWFfdGVzdCh2bWEsIFZNQV9NQVlFWEVDX0JJVCkpXG4gXHRcdFx0cHJvdCB8PSBQUk9UX0VYRUM7XG4gXG4gXHRcdC8qXG5kaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuY1xuaW5kZXggMzg0ZWY0Y2MyMTk1YmEuLmI2NGFhMWY2ZTA3ZWRlIDEwMDY0NFxuLS0tIGEvbW0vbXJlbWFwLmNcbisrKyBiL21tL21yZW1hcC5jXG5AQCAtNjgsNyArNjgsNyBAQCBzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCB7XG4gXHRib29sIHBvcHVsYXRlX2V4cGFuZDtcdFx0LyogbWxvY2soKSdkIGV4cGFuZGVkLCBtdXN0IHBvcHVsYXRlLiAqL1xuIFx0ZW51bSBtcmVtYXBfdHlwZSByZW1hcF90eXBlO1x0LyogZXhwYW5kLCBzaHJpbmssIGV0Yy4gKi9cbiBcdGJvb2wgbW1hcF9sb2NrZWQ7XHRcdC8qIElzIG1tIGN1cnJlbnRseSB3cml0ZS1sb2NrZWQ/ICovXG4tXHR1bnNpZ25lZCBsb25nIGNoYXJnZWQ7XHRcdC8qIElmIFZNX0FDQ09VTlQsICMgcGFnZXMgdG8gYWNjb3VudC4gKi9cbitcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZDtcdFx0LyogSWYgVk1BX0FDQ09VTlRfQklULCAjIHBncyB0byBhY2NvdW50ICovXG4gXHRib29sIHZtaV9uZWVkc19pbnZhbGlkYXRlO1x0LyogSXMgdGhlIFZNQSBpdGVyYXRvciBpbnZhbGlkYXRlZD8gKi9cbiB9O1xuIFxuQEAgLTk2Myw3ICs5NjMsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB2cm1fc2V0X25ld19hZGRyKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXG4gXHRpZiAodnJtLVx1MDAzZWZsYWdzIFx1MDAyNiBNUkVNQVBfRklYRUQpXG4gXHRcdG1hcF9mbGFncyB8PSBNQVBfRklYRUQ7XG4tXHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NQVlTSEFSRSlcbitcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpKVxuIFx0XHRtYXBfZmxhZ3MgfD0gTUFQX1NIQVJFRDtcbiBcbiBcdHJlcyA9IGdldF91bm1hcHBlZF9hcmVhKHZtYS1cdTAwM2V2bV9maWxlLCBuZXdfYWRkciwgdnJtLVx1MDAzZW5ld19sZW4sIHBnb2ZmLFxuQEAgLTk4NSw3ICs5ODUsNyBAQCBzdGF0aWMgYm9vbCB2cm1fY2FsY19jaGFyZ2Uoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGNoYXJnZWQ7XG4gXG4tXHRpZiAoISh2cm0tXHUwMDNldm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKSlcbitcdGlmICghdm1hX3Rlc3QodnJtLVx1MDAzZXZtYSwgVk1BX0FDQ09VTlRfQklUKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHQvKlxuQEAgLTEwMTIsNyArMTAxMiw3IEBAIHN0YXRpYyBib29sIHZybV9jYWxjX2NoYXJnZShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuICAqL1xuIHN0YXRpYyB2b2lkIHZybV91bmNoYXJnZShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIHtcbi1cdGlmICghKHZybS1cdTAwM2V2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0FDQ09VTlQpKVxuK1x0aWYgKCF2bWFfdGVzdCh2cm0tXHUwMDNldm1hLCBWTUFfQUNDT1VOVF9CSVQpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHR2bV91bmFjY3RfbWVtb3J5KHZybS1cdTAwM2VjaGFyZ2VkKTtcbkBAIC0xMDMyLDcgKzEwMzIsNyBAQCBzdGF0aWMgdm9pZCB2cm1fc3RhdF9hY2NvdW50KHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0sXG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZybS1cdTAwM2V2bWE7XG4gXG4gXHR2bV9zdGF0X2FjY291bnQobW0sIHZtYS1cdTAwM2V2bV9mbGFncywgcGFnZXMpO1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKVxuK1x0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHRtbS1cdTAwM2Vsb2NrZWRfdm0gKz0gcGFnZXM7XG4gfVxuIFxuQEAgLTExNzYsNyArMTE3Niw3IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiBcdCAqIGFyb3NlLCBpbiB3aGljaCBjYXNlIHdlIF9kb18gd2lzaCB0byB1bm1hcCB0aGUgX25ld18gVk1BLCB3aGljaCBtZWFuc1xuIFx0ICogd2UgYWN0dWFsbHkgX2RvXyB3YW50IGl0IGJlIHVuYWNjb3VudGVkLlxuIFx0ICovXG4tXHRib29sIGFjY291bnRhYmxlX21vdmUgPSAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKSBcdTAwMjZcdTAwMjZcbitcdGJvb2wgYWNjb3VudGFibGVfbW92ZSA9IHZtYV90ZXN0KHZtYSwgVk1BX0FDQ09VTlRfQklUKSBcdTAwMjZcdTAwMjZcbiBcdFx0ISh2cm0tXHUwMDNlZmxhZ3MgXHUwMDI2IE1SRU1BUF9ET05UVU5NQVApO1xuIFxuIFx0LypcbkBAIC0xMTk1LDcgKzExOTUsNyBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHQgKiBwb3J0aW9ucyBvZiB0aGUgb3JpZ2luYWwgVk1BIHRoYXQgcmVtYWluLlxuIFx0ICovXG4gXHRpZiAoYWNjb3VudGFibGVfbW92ZSkge1xuLVx0XHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX0FDQ09VTlQpO1xuK1x0XHR2bWFfY2xlYXJfZmxhZ3Modm1hLCBWTUFfQUNDT1VOVF9CSVQpO1xuIFx0XHQvKiBXZSBhcmUgYWJvdXQgdG8gc3BsaXQgdm1hLCBzbyBzdG9yZSB0aGUgc3RhcnQvZW5kLiAqL1xuIFx0XHR2bV9zdGFydCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbiBcdFx0dm1fZW5kID0gdm1hLVx1MDAzZXZtX2VuZDtcbkBAIC0xMjIwLDggKzEyMjAsOCBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHQgKiB8ICAgICAgICAgICAgIHxcbiBcdCAqIHwtLS0tLS0tLS0tLS0tfFxuIFx0ICpcbi1cdCAqIEhhdmluZyBjbGVhcmVkIFZNX0FDQ09VTlQgZnJvbSB0aGUgd2hvbGUgVk1BLCBhZnRlciB3ZSB1bm1hcCBhYm92ZVxuLVx0ICogd2UnbGwgZW5kIHVwIHdpdGg6XG4rXHQgKiBIYXZpbmcgY2xlYXJlZCBWTUFfQUNDT1VOVF9CSVQgZnJvbSB0aGUgd2hvbGUgVk1BLCBhZnRlciB3ZSB1bm1hcFxuK1x0ICogYWJvdmUgd2UnbGwgZW5kIHVwIHdpdGg6XG4gXHQgKlxuIFx0ICogICAgYWRkciAgZW5kXG4gXHQgKiAgICAgfCAgICAgfFxuQEAgLTEyNDEsMTMgKzEyNDEsMTUgQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFx0XHRpZiAodm1fc3RhcnQgXHUwMDNjIGFkZHIpIHtcbiBcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYgPSB2bWFfcHJldihcdTAwMjZ2bWkpO1xuIFxuLVx0XHRcdHZtX2ZsYWdzX3NldChwcmV2LCBWTV9BQ0NPVU5UKTsgLyogQWNxdWlyZXMgVk1BIGxvY2suICovXG4rXHRcdFx0dm1hX3N0YXJ0X3dyaXRlKHByZXYpO1xuK1x0XHRcdHZtYV9zZXRfZmxhZ3MocHJldiwgVk1BX0FDQ09VTlRfQklUKTtcbiBcdFx0fVxuIFxuIFx0XHRpZiAodm1fZW5kIFx1MDAzZSBlbmQpIHtcbiBcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQgPSB2bWFfbmV4dChcdTAwMjZ2bWkpO1xuIFxuLVx0XHRcdHZtX2ZsYWdzX3NldChuZXh0LCBWTV9BQ0NPVU5UKTsgLyogQWNxdWlyZXMgVk1BIGxvY2suICovXG4rXHRcdFx0dm1hX3N0YXJ0X3dyaXRlKG5leHQpO1xuK1x0XHRcdHZtYV9zZXRfZmxhZ3MobmV4dCwgVk1BX0FDQ09VTlRfQklUKTtcbiBcdFx0fVxuIFx0fVxuIH1cbkBAIC0xMzMwLDggKzEzMzIsOCBAQCBzdGF0aWMgdm9pZCBkb250dW5tYXBfY29tcGxldGUoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSxcbiBcdHVuc2lnbmVkIGxvbmcgb2xkX3N0YXJ0ID0gdnJtLVx1MDAzZXZtYS1cdTAwM2V2bV9zdGFydDtcbiBcdHVuc2lnbmVkIGxvbmcgb2xkX2VuZCA9IHZybS1cdTAwM2V2bWEtXHUwMDNldm1fZW5kO1xuIFxuLVx0LyogV2UgYWx3YXlzIGNsZWFyIFZNX0xPQ0tFRFtPTkZBVUxUXSBvbiB0aGUgb2xkIFZNQS4gKi9cbi1cdHZtX2ZsYWdzX2NsZWFyKHZybS1cdTAwM2V2bWEsIFZNX0xPQ0tFRF9NQVNLKTtcbitcdC8qIFdlIGFsd2F5cyBjbGVhciBWTUFfTE9DS0VEW09ORkFVTFRdX0JJVCBvbiB0aGUgb2xkIFZNQS4gKi9cbitcdHZtYV9jbGVhcl9mbGFnc19tYXNrKHZybS1cdTAwM2V2bWEsIFZNQV9MT0NLRURfTUFTSyk7XG4gXG4gXHQvKlxuIFx0ICogYW5vbl92bWEgbGlua3Mgb2YgdGhlIG9sZCB2bWEgaXMgbm8gbG9uZ2VyIG5lZWRlZCBhZnRlciBpdHMgcGFnZVxuQEAgLTE3NjcsMTQgKzE3NjksMTQgQEAgc3RhdGljIGludCBjaGVja19wcmVwX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFx0ICogYmFzZWQgb24gdGhlIG9yaWdpbmFsLiAgVGhlcmUgYXJlIG5vIGtub3duIHVzZSBjYXNlcyBmb3IgdGhpc1xuIFx0ICogYmVoYXZpb3IuICBBcyBhIHJlc3VsdCwgZmFpbCBzdWNoIGF0dGVtcHRzLlxuIFx0ICovXG4tXHRpZiAoIW9sZF9sZW4gXHUwMDI2XHUwMDI2ICEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fU0hBUkVEIHwgVk1fTUFZU0hBUkUpKSkge1xuK1x0aWYgKCFvbGRfbGVuIFx1MDAyNlx1MDAyNiAhdm1hX3Rlc3RfYW55KHZtYSwgVk1BX1NIQVJFRF9CSVQsIFZNQV9NQVlTSEFSRV9CSVQpKSB7XG4gXHRcdHByX3dhcm5fb25jZShcIiVzICglZCk6IGF0dGVtcHRlZCB0byBkdXBsaWNhdGUgYSBwcml2YXRlIG1hcHBpbmcgd2l0aCBtcmVtYXAuICBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuXFxuXCIsXG4gXHRcdFx0ICAgICBjdXJyZW50LVx1MDAzZWNvbW0sIGN1cnJlbnQtXHUwMDNlcGlkKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRpZiAoKHZybS1cdTAwM2VmbGFncyBcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0KHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0RPTlRFWFBBTkQgfCBWTV9QRk5NQVApKSlcbitcdCAgICB2bWFfdGVzdF9hbnkodm1hLCBWTUFfRE9OVEVYUEFORF9CSVQsIFZNQV9QRk5NQVBfQklUKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHQvKlxuQEAgLTE4MDQsNyArMTgwNiw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHJlcF92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKiBXZSBhcmUgZXhwYW5kaW5nIGFuZCB0aGUgVk1BIGlzIG1sb2NrKCknZCBzbyB3ZSBuZWVkIHRvIHBvcHVsYXRlLiAqL1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKVxuK1x0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHR2cm0tXHUwMDNlcG9wdWxhdGVfZXhwYW5kID0gdHJ1ZTtcbiBcbiBcdC8qIE5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBhIGdyb3dpbmcgbWFwcGluZyAqL1xuQEAgLTE4MTIsMTAgKzE4MTQsMTAgQEAgc3RhdGljIGludCBjaGVja19wcmVwX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFx0aWYgKHBnb2ZmICsgKG5ld19sZW4gXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpIFx1MDAzYyBwZ29mZilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fRE9OVEVYUEFORCB8IFZNX1BGTk1BUCkpXG4rXHRpZiAodm1hX3Rlc3RfYW55KHZtYSwgVk1BX0RPTlRFWFBBTkRfQklULCBWTUFfUEZOTUFQX0JJVCkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFxuLVx0aWYgKCFtbG9ja19mdXR1cmVfb2sobW0sIHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VELCB2cm0tXHUwMDNlZGVsdGEpKVxuK1x0aWYgKCFtbG9ja19mdXR1cmVfb2sobW0sIHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpLCB2cm0tXHUwMDNlZGVsdGEpKVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcbiBcdGlmICghbWF5X2V4cGFuZF92bShtbSwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzLCB2cm0tXHUwMDNlZGVsdGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpKVxuZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jXG5pbmRleCBhZGMwYjBjYTkwNmJkZi4uNDk4ZTAxZWU0MGIwNTYgMTAwNjQ0XG4tLS0gYS9tbS9ub21tdS5jXG4rKysgYi9tbS9ub21tdS5jXG5AQCAtMTAxNCwxMSArMTAxNCwxMiBAQCB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBsZW4sXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBwcm90LFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG4tXHRcdFx0dm1fZmxhZ3NfdCB2bV9mbGFncyxcbitcdFx0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBwZ29mZixcbiBcdFx0XHR1bnNpZ25lZCBsb25nICpwb3B1bGF0ZSxcbiBcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp1ZilcbiB7XG4rXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRzdHJ1Y3Qgdm1fcmVnaW9uICpyZWdpb247XG4gXHRzdHJ1Y3QgcmJfbm9kZSAqcmI7XG5kaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jXG5pbmRleCA1MDkwNDU3NTQyY2E5Yy4uYmYwNTEzZDFkM2QwODYgMTAwNjQ0XG4tLS0gYS9tbS91dGlsLmNcbisrKyBiL21tL3V0aWwuY1xuQEAgLTU3OCw4ICs1NzgsOCBAQCB1bnNpZ25lZCBsb25nIHZtX21tYXBfcGdvZmYoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmICghcmV0KSB7XG4gXHRcdGlmIChtbWFwX3dyaXRlX2xvY2tfa2lsbGFibGUobW0pKVxuIFx0XHRcdHJldHVybiAtRUlOVFI7XG4tXHRcdHJldCA9IGRvX21tYXAoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFnLCAwLCBwZ29mZiwgXHUwMDI2cG9wdWxhdGUsXG4tXHRcdFx0ICAgICAgXHUwMDI2dWYpO1xuK1x0XHRyZXQgPSBkb19tbWFwKGZpbGUsIGFkZHIsIGxlbiwgcHJvdCwgZmxhZywgRU1QVFlfVk1BX0ZMQUdTLCBwZ29mZixcbitcdFx0XHQgICAgICBcdTAwMjZwb3B1bGF0ZSwgXHUwMDI2dWYpO1xuIFx0XHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XG4gXHRcdHVzZXJmYXVsdGZkX3VubWFwX2NvbXBsZXRlKG1tLCBcdTAwMjZ1Zik7XG4gXHRcdGlmIChwb3B1bGF0ZSlcbkBAIC02MjcsMjAgKzYyNywyMCBAQCBFWFBPUlRfU1lNQk9MKHZtX21tYXApO1xuIHVuc2lnbmVkIGxvbmcgdm1fbW1hcF9zaGFkb3dfc3RhY2sodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncylcbiB7XG4rXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSBWTUFfU0hBRE9XX1NUQUNLO1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuIFx0dW5zaWduZWQgbG9uZyByZXQsIHVudXNlZDtcbi1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSBWTV9TSEFET1dfU1RBQ0s7XG4gXG4gXHRmbGFncyB8PSBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEU7XG4gXHRpZiAoYWRkcilcbiBcdFx0ZmxhZ3MgfD0gTUFQX0ZJWEVEX05PUkVQTEFDRTtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4tXHRcdHZtX2ZsYWdzIHw9IFZNX05PSFVHRVBBR0U7XG4rXHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTk9IVUdFUEFHRV9CSVQpO1xuIFxuIFx0bW1hcF93cml0ZV9sb2NrKG1tKTtcbiBcdHJldCA9IGRvX21tYXAoTlVMTCwgYWRkciwgbGVuLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBmbGFncyxcbi1cdFx0ICAgICAgdm1fZmxhZ3MsIDAsIFx1MDAyNnVudXNlZCwgTlVMTCk7XG4rXHRcdCAgICAgIHZtYV9mbGFncywgMCwgXHUwMDI2dW51c2VkLCBOVUxMKTtcbiBcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcbiBcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuY1xuaW5kZXggOWQ1NTZkMzNiMjRiZDEuLmI1YmMzZWVjOTYxYzc5IDEwMDY0NFxuLS0tIGEvbW0vdm1hLmNcbisrKyBiL21tL3ZtYS5jXG5AQCAtNTYsNyArNTYsNyBAQCBzdHJ1Y3QgbW1hcF9zdGF0ZSB7XG4gXHRcdC5wZ2xlbiA9IFBIWVNfUEZOKGxlbl8pLFx0XHRcdFx0XFxcbiBcdFx0LnZtYV9mbGFncyA9IHZtYV9mbGFnc18sXHRcdFx0XHRcXFxuIFx0XHQuZmlsZSA9IGZpbGVfLFx0XHRcdFx0XHRcdFxcXG4tXHRcdC5wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWFfZmxhZ3NfKSxcdFx0XFxcbitcdFx0LnBhZ2VfcHJvdCA9IHZtYV9mbGFnc190b19wYWdlX3Byb3Qodm1hX2ZsYWdzXyksXHRcXFxuIFx0fVxuIFxuICNkZWZpbmUgVk1HX01NQVBfU1RBVEUobmFtZSwgbWFwXywgdm1hXylcdFx0XHRcdFxcXG5AQCAtMjE3Niw3ICsyMTc2LDcgQEAgYm9vbCB2bWFfd2FudHNfd3JpdGVub3RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBncHJvdF90IHZtX3BhZ2VfcHJvdClcbiBcdC8qIFRoZSBvcGVuIHJvdXRpbmUgZGlkIHNvbWV0aGluZyB0byB0aGUgcHJvdGVjdGlvbnMgdGhhdCBwZ3Byb3RfbW9kaWZ5XG4gXHQgKiB3b24ndCBwcmVzZXJ2ZT8gKi9cbiBcdGlmIChwZ3Byb3RfdmFsKHZtX3BhZ2VfcHJvdCkgIT1cbi1cdCAgICBwZ3Byb3RfdmFsKHZtX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bWEtXHUwMDNldm1fZmxhZ3MpKSlcbitcdCAgICBwZ3Byb3RfdmFsKHZtYV9wZ3Byb3RfbW9kaWZ5KHZtX3BhZ2VfcHJvdCwgdm1hLVx1MDAzZWZsYWdzKSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qXG5AQCAtMjg4Myw3ICsyODgzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuICAqIGZpbGUgdG8gYmUgbWFwcGVkLCBvdGhlcndpc2UgTlVMTC5cbiAgKiBAYWRkcjogVGhlIHBhZ2UtYWxpZ25lZCBhZGRyZXNzIGF0IHdoaWNoIHRvIHBlcmZvcm0gdGhlIG1hcHBpbmcuXG4gICogQGxlbjogVGhlIHBhZ2UtYWxpZ25lZCwgbm9uLXplcm8sIGxlbmd0aCBvZiB0aGUgbWFwcGluZy5cbi0gKiBAdm1fZmxhZ3M6IFRoZSBWTUEgZmxhZ3Mgd2hpY2ggc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIG1hcHBpbmcuXG4rICogQHZtYV9mbGFnczogVGhlIFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgbWFwcGluZy5cbiAgKiBAcGdvZmY6IElmIEBmaWxlIGlzIHNwZWNpZmllZCwgdGhlIHBhZ2Ugb2Zmc2V0IGludG8gdGhlIGZpbGUsIGlmIG5vdCB0aGVuXG4gICogdGhlIHZpcnR1YWwgcGFnZSBvZmZzZXQgaW4gbWVtb3J5IG9mIHRoZSBhbm9ueW1vdXMgbWFwcGluZy5cbiAgKiBAdWY6IE9wdGlvbmFsbHksIGEgcG9pbnRlciB0byBhIGxpc3QgaGVhZCB1c2VkIGZvciB0cmFja2luZyB1c2VyZmF1bHRmZCB1bm1hcFxuQEAgLTI4OTMsMTIgKzI4OTMsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuICAqIGJlZW4gcGVyZm9ybWVkLlxuICAqL1xuIHVuc2lnbmVkIGxvbmcgbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuK1x0XHRcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHZtYV9mbGFnc190IHZtYV9mbGFncyxcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHN0cnVjdCBsaXN0X2hlYWQgKnVmKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcmV0O1xuIFx0Ym9vbCB3cml0YWJsZV9maWxlX21hcHBpbmcgPSBmYWxzZTtcbi1cdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3MpO1xuIFxuIFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKGN1cnJlbnQtXHUwMDNlbW0pO1xuIFxuQEAgLTI5MDcsNyArMjkwNiw3IEBAIHVuc2lnbmVkIGxvbmcgbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXG4gXHQvKiBBbGxvdyBhcmNoaXRlY3R1cmVzIHRvIHNhbml0eS1jaGVjayB0aGUgdm1fZmxhZ3MuICovXG4tXHRpZiAoIWFyY2hfdmFsaWRhdGVfZmxhZ3Modm1fZmxhZ3MpKVxuK1x0aWYgKCFhcmNoX3ZhbGlkYXRlX2ZsYWdzKHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LyogTWFwIHdyaXRhYmxlIGFuZCBlbnN1cmUgdGhpcyBpc24ndCBhIHNlYWxlZCBtZW1mZC4gKi9cbkBAIC0zNDIwLDE4ICszNDE5LDIxIEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqX19pbnN0YWxsX3NwZWNpYWxfbWFwcGluZyhcbiBcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIHZvaWQgKnByaXYsXG4gXHRjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKm9wcylcbiB7XG4tXHRpbnQgcmV0O1xuK1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbGVnYWN5X3RvX3ZtYV9mbGFncyh2bV9mbGFncyk7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbitcdGludCByZXQ7XG4gXG4gXHR2bWEgPSB2bV9hcmVhX2FsbG9jKG1tKTtcbi1cdGlmICh1bmxpa2VseSh2bWEgPT0gTlVMTCkpXG4rXHRpZiAodW5saWtlbHkoIXZtYSkpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuLVx0dm1fZmxhZ3MgfD0gbW0tXHUwMDNlZGVmX2ZsYWdzIHwgVk1fRE9OVEVYUEFORDtcbitcdHZtYV9mbGFnc19zZXRfbWFzayhcdTAwMjZ2bWFfZmxhZ3MsIG1tLVx1MDAzZWRlZl92bWFfZmxhZ3MpO1xuK1x0dm1hX2ZsYWdzX3NldChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9ET05URVhQQU5EX0JJVCk7XG4gXHRpZiAocGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpXG4tXHRcdHZtX2ZsYWdzIHw9IFZNX1NPRlRESVJUWTtcbi1cdHZtX2ZsYWdzX2luaXQodm1hLCB2bV9mbGFncyBcdTAwMjYgflZNX0xPQ0tFRF9NQVNLKTtcbi1cdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4rXHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfU09GVERJUlRZX0JJVCk7XG4rXHR2bWFfZmxhZ3NfY2xlYXJfbWFzayhcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfTUFTSyk7XG4rXHR2bWEtXHUwMDNlZmxhZ3MgPSB2bWFfZmxhZ3M7XG4rXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcbiBcdHZtYS1cdTAwM2V2bV9vcHMgPSBvcHM7XG4gXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gcHJpdjtcbmRpZmYgLS1naXQgYS9tbS92bWEuaCBiL21tL3ZtYS5oXG5pbmRleCBhZGI3YTBiYTExOTIwOC4uMGJjN2Q1MjFlOTc2NzcgMTAwNjQ0XG4tLS0gYS9tbS92bWEuaFxuKysrIGIvbW0vdm1hLmhcbkBAIC01MTcsNyArNTE3LDcgQEAgaW50IG1tX3Rha2VfYWxsX2xvY2tzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbiB2b2lkIG1tX2Ryb3BfYWxsX2xvY2tzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbiBcbiB1bnNpZ25lZCBsb25nIG1tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdHVuc2lnbmVkIGxvbmcgbGVuLCB2bV9mbGFnc190IHZtX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuK1x0XHR1bnNpZ25lZCBsb25nIGxlbiwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp1Zik7XG4gXG4gaW50IGRvX2Jya19mbGFncyhzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYnJrdm1hLFxuQEAgLTU0MSw5ICs1NDEsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV93YW50c19tYW51YWxfcHRlX3dyaXRlX3VwZ3JhZGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19NTVVcbi1zdGF0aWMgaW5saW5lIHBncHJvdF90IHZtX3BncHJvdF9tb2RpZnkocGdwcm90X3Qgb2xkcHJvdCwgdm1fZmxhZ3NfdCB2bV9mbGFncylcbitzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9wZ3Byb3RfbW9kaWZ5KHBncHJvdF90IG9sZHByb3QsIHZtYV9mbGFnc190IHZtYV9mbGFncylcbiB7XG4tXHRyZXR1cm4gcGdwcm90X21vZGlmeShvbGRwcm90LCB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzKSk7XG4rXHRjb25zdCBwZ3Byb3RfdCBwcm90ID0gdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3MpO1xuK1xuK1x0cmV0dXJuIHBncHJvdF9tb2RpZnkob2xkcHJvdCwgcHJvdCk7XG4gfVxuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL21tL3ZtYV9leGVjLmMgYi9tbS92bWFfZXhlYy5jXG5pbmRleCBlZjFmYTJiMTYxZjNiYS4uN2FmMTI2MDY4OWI5N2UgMTAwNjQ0XG4tLS0gYS9tbS92bWFfZXhlYy5jXG4rKysgYi9tbS92bWFfZXhlYy5jXG5AQCAtMTEyLDE1ICsxMTIsMTcgQEAgaW50IHJlbG9jYXRlX3ZtYV9kb3duKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHNoaWZ0KVxuIGludCBjcmVhdGVfaW5pdF9zdGFja192bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXG4gXHRcdFx0ICB1bnNpZ25lZCBsb25nICp0b3BfbWVtX3ApXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFZNX1NUQUNLX0ZMQUdTIHwgVk1fU1RBQ0tfSU5DT01QTEVURV9TRVRVUDtcbitcdHZtYV9mbGFnc190IGZsYWdzID0gVk1BX1NUQUNLX0lOQ09NUExFVEVfU0VUVVA7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdGludCBlcnI7XG4tXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtX2FyZWFfYWxsb2MobW0pO1xuIFxuK1x0LyogVk1BX1NUQUNLX0ZMQUdTIGFuZCBWTUFfU1RBQ0tfSU5DT01QTEVURV9TRVRVUCBtdXN0IG5vdCBvdmVybGFwLiAqL1xuK1x0Vk1fV0FSTl9PTl9PTkNFKHZtYV9mbGFnc190ZXN0X2FueV9tYXNrKFx1MDAyNmZsYWdzLCBWTUFfU1RBQ0tfRkxBR1MpKTtcbitcbitcdHZtYSA9IHZtX2FyZWFfYWxsb2MobW0pO1xuIFx0aWYgKCF2bWEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0dm1hX3NldF9hbm9ueW1vdXModm1hKTtcbi1cbiBcdGlmIChtbWFwX3dyaXRlX2xvY2tfa2lsbGFibGUobW0pKSB7XG4gXHRcdGVyciA9IC1FSU5UUjtcbiBcdFx0Z290byBlcnJfZnJlZTtcbkBAIC0xMzQsMTkgKzEzNiwyMSBAQCBpbnQgY3JlYXRlX2luaXRfc3RhY2tfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfa3NtO1xuIFxuK1x0dm1hX2ZsYWdzX3NldF9tYXNrKFx1MDAyNmZsYWdzLCBWTUFfU1RBQ0tfRkxBR1MpO1xuK1x0dm1hX3NldF9hbm9ueW1vdXModm1hKTtcbitcbiBcdC8qXG4gXHQgKiBQbGFjZSB0aGUgc3RhY2sgYXQgdGhlIGxhcmdlc3Qgc3RhY2sgYWRkcmVzcyB0aGUgYXJjaGl0ZWN0dXJlXG4gXHQgKiBzdXBwb3J0cy4gTGF0ZXIsIHdlJ2xsIG1vdmUgdGhpcyB0byBhbiBhcHByb3ByaWF0ZSBwbGFjZS4gV2UgZG9uJ3RcbiBcdCAqIHVzZSBTVEFDS19UT1AgYmVjYXVzZSB0aGF0IGNhbiBkZXBlbmQgb24gYXR0cmlidXRlcyB3aGljaCBhcmVuJ3RcbiBcdCAqIGNvbmZpZ3VyZWQgeWV0LlxuIFx0ICovXG4tXHRWTV9XQVJOX09OX09OQ0UoVk1fU1RBQ0tfRkxBR1MgXHUwMDI2IFZNX1NUQUNLX0lOQ09NUExFVEVfU0VUVVApO1xuIFx0dm1hLVx1MDAzZXZtX2VuZCA9IFNUQUNLX1RPUF9NQVg7XG4gXHR2bWEtXHUwMDNldm1fc3RhcnQgPSB2bWEtXHUwMDNldm1fZW5kIC0gUEFHRV9TSVpFO1xuIFx0aWYgKHBndGFibGVfc3VwcG9ydHNfc29mdF9kaXJ0eSgpKVxuLVx0XHRmbGFncyB8PSBWTV9TT0ZURElSVFk7XG4tXHR2bV9mbGFnc19pbml0KHZtYSwgZmxhZ3MpO1xuLVx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKTtcbitcdFx0dm1hX2ZsYWdzX3NldChcdTAwMjZmbGFncywgVk1BX1NPRlRESVJUWV9CSVQpO1xuK1x0dm1hLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4rXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcbiBcdGVyciA9IGluc2VydF92bV9zdHJ1Y3QobW0sIHZtYSk7XG4gXHRpZiAoZXJyKVxuZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvbWVtYWxsb2MuYyBiL3NvdW5kL2NvcmUvbWVtYWxsb2MuY1xuaW5kZXggOTMyMDY3MWRmY2M4YjAuLjViYzdlNTg2YjQzMGY1IDEwMDY0NFxuLS0tIGEvc291bmQvY29yZS9tZW1hbGxvYy5jXG4rKysgYi9zb3VuZC9jb3JlL21lbWFsbG9jLmNcbkBAIC04NTEsNyArODUxLDcgQEAgc3RhdGljIHZvaWQgc25kX2RtYV9ub25jb2hlcmVudF9mcmVlKHN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqZG1hYilcbiBzdGF0aWMgaW50IHNuZF9kbWFfbm9uY29oZXJlbnRfbW1hcChzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmRtYWIsXG4gXHRcdFx0XHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhKVxuIHtcbi1cdGFyZWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdChhcmVhLVx1MDAzZXZtX2ZsYWdzKTtcbitcdGFyZWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3QoYXJlYSk7XG4gXHRyZXR1cm4gZG1hX21tYXBfcGFnZXMoZG1hYi1cdTAwM2VkZXYuZGV2LCBhcmVhLFxuIFx0XHRcdCAgICAgIGFyZWEtXHUwMDNldm1fZW5kIC0gYXJlYS1cdTAwM2V2bV9zdGFydCxcbiBcdFx0XHQgICAgICB2aXJ0X3RvX3BhZ2UoZG1hYi1cdTAwM2VhcmVhKSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcbmluZGV4IDc3M2UyMzMwM2UyNmFmLi42NGYzOGE4MzYxM2U1NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcbkBAIC0yNDUsOCArMjQ1LDEwIEBAIGVudW0ge1xuICNkZWZpbmUgVk1fU1RBQ0tcdElOSVRfVk1fRkxBRyhTVEFDSylcbiAjaWZkZWYgQ09ORklHX1NUQUNLX0dST1dTVVBcbiAjZGVmaW5lIFZNX1NUQUNLX0VBUkxZXHRJTklUX1ZNX0ZMQUcoU1RBQ0tfRUFSTFkpXG4rI2RlZmluZSBWTUFfU1RBQ0tfRUFSTFkgbWtfdm1hX2ZsYWdzKFZNQV9TVEFDS19FQVJMWV9CSVQpXG4gI2Vsc2VcbiAjZGVmaW5lIFZNX1NUQUNLX0VBUkxZXHRWTV9OT05FXG4rI2RlZmluZSBWTUFfU1RBQ0tfRUFSTFkgRU1QVFlfVk1BX0ZMQUdTXG4gI2VuZGlmXG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19QS0VZU1xuICNkZWZpbmUgVk1fUEtFWV9TSElGVCAoKF9fZm9yY2UgaW50KVZNQV9ISUdIX0FSQ0hfMF9CSVQpXG5AQCAtMzE1LDYgKzMxNyw4IEBAIGVudW0ge1xuIFxuIC8qIEJpdHMgc2V0IGluIHRoZSBWTUEgdW50aWwgdGhlIHN0YWNrIGlzIGluIGl0cyBmaW5hbCBsb2NhdGlvbiAqL1xuICNkZWZpbmUgVk1fU1RBQ0tfSU5DT01QTEVURV9TRVRVUCAoVk1fUkFORF9SRUFEIHwgVk1fU0VRX1JFQUQgfCBWTV9TVEFDS19FQVJMWSlcbisjZGVmaW5lIFZNQV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQIGFwcGVuZF92bWFfZmxhZ3MoXHRcdFxcXG4rXHRWTUFfU1RBQ0tfRUFSTFksIFZNQV9SQU5EX1JFQURfQklULCBWTUFfU0VRX1JFQURfQklUKVxuIFxuICNkZWZpbmUgVEFTS19FWEVDX0JJVCAoKGN1cnJlbnQtXHUwMDNlcGVyc29uYWxpdHkgXHUwMDI2IFJFQURfSU1QTElFU19FWEVDKSA/IFxcXG4gXHRcdCAgICAgICBWTV9FWEVDX0JJVCA6IFZNX1JFQURfQklUKVxuQEAgLTE0MjQsMjAgKzE0MjgsMTggQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfaXRlcl9uZXh0X3JhbmdlKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSlcbiB9XG4gXG4gYm9vbCB2bWFfd2FudHNfd3JpdGVub3RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBncHJvdF90IHZtX3BhZ2VfcHJvdCk7XG4rc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfcGdwcm90X21vZGlmeShwZ3Byb3RfdCBvbGRwcm90LCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpO1xuIFxuIC8qIFVwZGF0ZSB2bWEtXHUwMDNldm1fcGFnZV9wcm90IHRvIHJlZmxlY3Qgdm1hLVx1MDAzZXZtX2ZsYWdzLiAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfc2V0X3BhZ2VfcHJvdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hLVx1MDAzZXZtX2ZsYWdzO1xuK1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gdm1hLVx1MDAzZWZsYWdzO1xuIFx0cGdwcm90X3Qgdm1fcGFnZV9wcm90O1xuIFxuLVx0LyogdGVzdGluZzogd2UgaW5saW5lIHZtX3BncHJvdF9tb2RpZnkoKSB0byBhdm9pZCBjbGFzaCB3aXRoIHZtYS5oLiAqL1xuLVx0dm1fcGFnZV9wcm90ID0gcGdwcm90X21vZGlmeSh2bWEtXHUwMDNldm1fcGFnZV9wcm90LCB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzKSk7XG4tXG4rXHR2bV9wYWdlX3Byb3QgPSB2bWFfcGdwcm90X21vZGlmeSh2bWEtXHUwMDNldm1fcGFnZV9wcm90LCB2bWFfZmxhZ3MpO1xuIFx0aWYgKHZtYV93YW50c193cml0ZW5vdGlmeSh2bWEsIHZtX3BhZ2VfcHJvdCkpIHtcbi1cdFx0dm1fZmxhZ3MgXHUwMDI2PSB+Vk1fU0hBUkVEO1xuLVx0XHQvKiB0ZXN0aW5nOiB3ZSBpbmxpbmUgdm1fcGdwcm90X21vZGlmeSgpIHRvIGF2b2lkIGNsYXNoIHdpdGggdm1hLmguICovXG4tXHRcdHZtX3BhZ2VfcHJvdCA9IHBncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzKSk7XG4rXHRcdHZtYV9mbGFnc19jbGVhcihcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKTtcbitcdFx0dm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bWFfZmxhZ3MpO1xuIFx0fVxuIFx0LyogcmVtb3ZlX3Byb3RlY3Rpb25fcHRlcyByZWFkcyB2bWEtXHUwMDNldm1fcGFnZV9wcm90IHdpdGhvdXQgbW1hcF9sb2NrICovXG4gXHRXUklURV9PTkNFKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QsIHZtX3BhZ2VfcHJvdCk7XG5AQCAtMTU0Nyw3ICsxNTQ5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZ2V0X3N5c2N0bF9tYXhfbWFwX2NvdW50KHZvaWQpXG4gI2RlZmluZSBwZ3RhYmxlX3N1cHBvcnRzX3NvZnRfZGlydHkoKVx0SVNfRU5BQkxFRChDT05GSUdfTUVNX1NPRlRfRElSVFkpXG4gI2VuZGlmXG4gXG4tc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4rc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcbiB7XG4gXHRjb25zdCB2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpO1xuIFxuQEAgLTE1NzUsMyArMTU3Nyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X2Nhbl9tb2RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRpZiAodm1hX2lzX2F0dGFjaGVkKHZtYSkpXG4gXHRcdHZtYV9hc3NlcnRfd3JpdGVfbG9ja2VkKHZtYSk7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2dldF9wYWdlX3Byb3QoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4re1xuK1x0cmV0dXJuIHZtYV9mbGFnc190b19wYWdlX3Byb3Qodm1hLVx1MDAzZWZsYWdzKTtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMDoxNDozNy43OTk2OTQ5MDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDEwNTM5NjYwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBsYW46IHZtYV9mbGFnc190IFRyYW5zaXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgc3Vic3RhbnRpYWwgcGF0Y2ggaGVyZSwgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgVk1BIGZsYWdzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsLiBUaGUga2V5IHNoaWZ0IGlzIGZyb20gdGhlIHN0YW5kYXJkIGB2bV9mbGFnc190YCB0byBhIG5ldyBgdm1hX2ZsYWdzX3RgIHR5cGUsIHdoaWNoLCBiYXNlZCBvbiB0aGUgcHJlc2VuY2Ugb2YgaGVscGVyIGZ1bmN0aW9ucyBsaWtlIGB2bWFfZmxhZ3NfdGVzdGAgYW5kIHJlbGF0ZWQgc3RydWN0cy91bmlvbnMsIHNlZW1zIHRvIGJlIGEgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlIHRoYW4gYSBzaW1wbGUgYHVuc2lnbmVkIGxvbmdgLiBUaGlzIGNoYW5nZSB0b3VjaGVzIGEgdmFzdCBudW1iZXIgb2YgZmlsZXMsIGVzc2VudGlhbGx5IHJlcGxhY2luZyBgdm1hLVx1MDAzZXZtX2ZsYWdzYCB3aXRoIGB2bWEtXHUwMDNlZmxhZ3NgIGFjcm9zcyB0aGUgYm9hcmQgYW5kIGludHJvZHVjaW5nIHNldmVyYWwgbmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIGZsYWcgbWFuaXB1bGF0aW9uLiBDcnVjaWFsbHksIHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5IGFjcm9zcyB0aGUgYm9hcmQsIHdoaWNoIG1ha2VzIGl0IGEgdmVyeSBoaWdoLXZhbHVlIHRhcmdldCBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBoZXJlIHdpbGwgYmUgb24gcGlucG9pbnRpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBtb3N0IGltcGFjdGVkIGJ5IHRoZSByZWZhY3RvcmluZywgcGF5aW5nIHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIHRob3NlIHJlbGF0ZWQgdG8gYGRvX21tYXBgLCBgbW1hcF9yZWdpb25gLCBgbWxvY2tgLCBgbXByb3RlY3RgLCBhbmQgYG1yZW1hcGAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGZ1enppbmcgdGFyZ2V0cyBhcmUgcmVwcmVzZW50YXRpdmUgYW5kIHRoYXQgSSBkb24ndCBvdmVybG9vayBjcml0aWNhbCBwYXRocy4gU2luY2UgaXQncyBhIGhvdC1wYXRoIGZ1bmN0aW9uIGxpc3QsIEknbGwgcGF5IGF0dGVudGlvbiB0byBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgdG9vbCBhdXRob3IuIFRoZSBwcm9tcHQgd2FudHMgbWUgdG8gYXZvaWQgaG90IHBhdGggZnVuY3Rpb25zLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgY2hhbmdlcyB3aXRoaW4gc3BlY2lmaWMgZmlsZXMgYW5kIGZ1bmN0aW9uczpcblxuKiAgICoqYG1tL21tYXAuY2AqKjogV2UgbmVlZCB0byBleGFtaW5lIGBtbWFwX3JlZ2lvbmAuXG4qICAgKipgbW0vbXByb3RlY3QuY2AqKjogSW52ZXN0aWdhdGUgYG1wcm90ZWN0X2ZpeHVwYCBhbmQgYGRvX21wcm90ZWN0X3BrZXlgLlxuKiAgICoqYG1tL21yZW1hcC5jYCoqOiBMb29rIGF0IGB2cm1fY2FsY19jaGFyZ2VgLCBgdW5tYXBfc291cmNlX3ZtYWAsIGBjaGVja19wcmVwX3ZtYWAuXG4qICAgKipgbW0vbWxvY2suY2AqKjogQ2hlY2sgYG1sb2NrX2ZpeHVwYCwgYGFwcGx5X3ZtYV9sb2NrX2ZsYWdzYCwgYGFwcGx5X21sb2NrYWxsX2ZsYWdzYC5cbiogICAqKmBtbS92bWEuY2AqKjogVmVyaWZ5IHRoZSBtb2RpZmljYXRpb25zIGluIGBtbWFwX3JlZ2lvbmAuXG4qICAgKipgbW0vdm1hX2V4ZWMuY2AqKjogQ29uZmlybSB0aGUgY2hhbmdlcyBpbiBgY3JlYXRlX2luaXRfc3RhY2tfdm1hYC5cbiogICAqKmBtbS9odWdlX21lbW9yeS5jYCoqOiBDaGVjayBgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzYC5cbiogICAqKmBtbS9tZW1mZC5jYCoqOiBDaGVjayBgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcGAuXG5cbkdpdmVuIHRoYXQgYGRvX21tYXBgIGFuZCBgbW1hcF9yZWdpb25gIGFyZSBob3QgcGF0aHMsIEkgbmVlZCB0byBmb2N1cyBvbiBsZXNzIGdlbmVyaWMgZW50cnlwb2ludHMuIEZ1bmN0aW9ucyBsaWtlIGBtbG9ja19maXh1cGAsIGBhcHBseV92bWFfbG9ja19mbGFnc2AsIGBhcHBseV9tbG9ja2FsbF9mbGFnc2AsIGB1bm1hcF9zb3VyY2Vfdm1hYCwgYGNoZWNrX3ByZXBfdm1hYCwgYGNyZWF0ZV9pbml0X3N0YWNrX3ZtYWAsIGFuZCBgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcGAgc2hvdWxkIGJlIGxlc3MgZnJlcXVlbnQgYW5kIGNhbiBzdGlsbCBiZSBmdXp6ZWQgZWZmZWN0aXZlbHkuIEkgd2lsbCBhbHNvIGluY2x1ZGUgYGRvX21wcm90ZWN0X3BrZXlgIHNpbmNlIHRoZSBlbnRyeSBwb2ludCB3YXMgbW9kaWZpZWQuXG5cblRoZXJlIGRvbid0IHNlZW0gdG8gYmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCBzaW5jZSB0aGlzIGlzIGEgY29yZSBNTSBjaGFuZ2UuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGZvciBgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzYCBhbmQgYENPTkZJR19NRU1GRF9DUkVBVEVgIGZvciBgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcGAgYXJlIHJlbGF0ZWQgYnV0IGxpa2VseSB0byBhbHJlYWR5IGJlIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxuVGh1cywgbXkgcHJvcG9zZWQgYHNldC1yZXN1bHRzYCBjYWxsIHdpbGwgaGF2ZTpcblxuKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgXG4qICAgYEZvY3VzU3ltYm9sc2A6XG4gICAgKiAgIGBtbG9ja19maXh1cGBcbiAgICAqICAgYGFwcGx5X3ZtYV9sb2NrX2ZsYWdzYFxuICAgICogICBgYXBwbHlfbWxvY2thbGxfZmxhZ3NgXG4gICAgKiAgIGB1bm1hcF9zb3VyY2Vfdm1hYFxuICAgICogICBgY2hlY2tfcHJlcF92bWFgXG4gICAgKiAgIGBtZW1mZF9jaGVja19zZWFsc19tbWFwYFxuICAgICogICBgY3JlYXRlX2luaXRfc3RhY2tfdm1hYFxuICAgICogICBgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzYFxuICAgICogICBgZG9fbXByb3RlY3RfcGtleWBcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWBcblxuSSBoYXZlIGFsc28gdmVyaWZpZWQgdGhhdCBtb3N0IG9mIHRoZSBsaXN0ZWQgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIGJ1dCBTeXprYWxsZXIgY2FuIHN0aWxsIGZ1enogc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5IGFyZSBpbiB0aGUgc3ltYm9sIHRhYmxlICh3aGljaCB0aGV5IGFyZSkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0Nzc0LCJPdXRwdXRUb2tlbnMiOjIzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMDoxNDo1Ny45MDUwOTM1NzFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWxvY2tfZml4dXBcIixcbiAgICBcImFwcGx5X3ZtYV9sb2NrX2ZsYWdzXCIsXG4gICAgXCJhcHBseV9tbG9ja2FsbF9mbGFnc1wiLFxuICAgIFwidW5tYXBfc291cmNlX3ZtYVwiLFxuICAgIFwiY2hlY2tfcHJlcF92bWFcIixcbiAgICBcIm1lbWZkX2NoZWNrX3NlYWxzX21tYXBcIixcbiAgICBcImNyZWF0ZV9pbml0X3N0YWNrX3ZtYVwiLFxuICAgIFwidGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1ham9yIHJlZmFjdG9yaW5nIG9mIFZNQSBmbGFncyBoYW5kbGluZyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHRyYW5zaXRpb25pbmcgZnJvbSBgdm1fZmxhZ3NfdGAgdG8gYHZtYV9mbGFnc190YC4gSXQgbW9kaWZpZXMgY3JpdGljYWwgcGF0aHMgaW4gbW1hcCwgbXJlbWFwLCBtbG9jaywgYW5kIG1wcm90ZWN0LiBUaGVzZSBjaGFuZ2VzIGZ1bmN0aW9uYWxseSBhbHRlciBob3cgVk1BIGZsYWdzIGFyZSBzZXQsIGNsZWFyZWQsIGFuZCB0ZXN0ZWQsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2UgaW5jb3JyZWN0IG1lbW9yeSBwcm90ZWN0aW9ucywgYWNjb3VudGluZyBlcnJvcnMsIG9yIGxvY2tpbmcgaXNzdWVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZXNlIGZsYWdzLCBhdm9pZGluZyB0aGUgYWJzb2x1dGUgaG90dGVzdCBwYXRocyBsaWtlIGBkb19tbWFwYCB0byBwcmV2ZW50IHNrZXdlZCBkaXN0cmlidXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1sb2NrX2ZpeHVwXCIsXG4gICAgXCJhcHBseV92bWFfbG9ja19mbGFnc1wiLFxuICAgIFwiYXBwbHlfbWxvY2thbGxfZmxhZ3NcIixcbiAgICBcInVubWFwX3NvdXJjZV92bWFcIixcbiAgICBcImNoZWNrX3ByZXBfdm1hXCIsXG4gICAgXCJtZW1mZF9jaGVja19zZWFsc19tbWFwXCIsXG4gICAgXCJjcmVhdGVfaW5pdF9zdGFja192bWFcIixcbiAgICBcInRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtYWpvciByZWZhY3RvcmluZyBvZiBWTUEgZmxhZ3MgaGFuZGxpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCB0cmFuc2l0aW9uaW5nIGZyb20gYHZtX2ZsYWdzX3RgIHRvIGB2bWFfZmxhZ3NfdGAuIEl0IG1vZGlmaWVzIGNyaXRpY2FsIHBhdGhzIGluIG1tYXAsIG1yZW1hcCwgbWxvY2ssIGFuZCBtcHJvdGVjdC4gVGhlc2UgY2hhbmdlcyBmdW5jdGlvbmFsbHkgYWx0ZXIgaG93IFZNQSBmbGFncyBhcmUgc2V0LCBjbGVhcmVkLCBhbmQgdGVzdGVkLCB3aGljaCBjb3VsZCBpbnRyb2R1Y2UgYnVncyBsaWtlIGluY29ycmVjdCBtZW1vcnkgcHJvdGVjdGlvbnMsIGFjY291bnRpbmcgZXJyb3JzLCBvciBsb2NraW5nIGlzc3Vlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGVzZSBmbGFncywgYXZvaWRpbmcgdGhlIGFic29sdXRlIGhvdHRlc3QgcGF0aHMgbGlrZSBgZG9fbW1hcGAgdG8gcHJldmVudCBza2V3ZWQgZGlzdHJpYnV0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmd5j2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-12 09:55:51 +0000 UTC FinishedAt: 2026-07-12 10:15:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "61cccb8363fcc282d4ae0555b8739dd227f5ad0b", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "61cccb8363fcc282d4ae0555b8739dd227f5ad0b", "config_name": "upstream-apparmor-kasan.config", "series_id": "849f86aa-76b3-4682-ab99-bed8cf748297" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "mlock_fixup", "apply_vma_lock_flags", "apply_mlockall_flags", "unmap_source_vma", "check_prep_vma", "memfd_check_seals_mmap", "create_init_stack_vma", "thp_get_unmapped_area_vmaflags" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEwOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWxvY2tfZml4dXAmIzM0OywKICAgICYjMzQ7YXBwbHlfdm1hX2xvY2tfZmxhZ3MmIzM0OywKICAgICYjMzQ7YXBwbHlfbWxvY2thbGxfZmxhZ3MmIzM0OywKICAgICYjMzQ7dW5tYXBfc291cmNlX3ZtYSYjMzQ7LAogICAgJiMzNDtjaGVja19wcmVwX3ZtYSYjMzQ7LAogICAgJiMzNDttZW1mZF9jaGVja19zZWFsc19tbWFwJiMzNDssCiAgICAmIzM0O2NyZWF0ZV9pbml0X3N0YWNrX3ZtYSYjMzQ7LAogICAgJiMzNDt0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1ham9yIHJlZmFjdG9yaW5nIG9mIFZNQSBmbGFncyBoYW5kbGluZyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHRyYW5zaXRpb25pbmcgZnJvbSBgdm1fZmxhZ3NfdGAgdG8gYHZtYV9mbGFnc190YC4gSXQgbW9kaWZpZXMgY3JpdGljYWwgcGF0aHMgaW4gbW1hcCwgbXJlbWFwLCBtbG9jaywgYW5kIG1wcm90ZWN0LiBUaGVzZSBjaGFuZ2VzIGZ1bmN0aW9uYWxseSBhbHRlciBob3cgVk1BIGZsYWdzIGFyZSBzZXQsIGNsZWFyZWQsIGFuZCB0ZXN0ZWQsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2UgaW5jb3JyZWN0IG1lbW9yeSBwcm90ZWN0aW9ucywgYWNjb3VudGluZyBlcnJvcnMsIG9yIGxvY2tpbmcgaXNzdWVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZXNlIGZsYWdzLCBhdm9pZGluZyB0aGUgYWJzb2x1dGUgaG90dGVzdCBwYXRocyBsaWtlIGBkb19tbWFwYCB0byBwcmV2ZW50IHNrZXdlZCBkaXN0cmlidXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEwOjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2U4ZGUyYmQxMTlkZTczZDk0NjhkYTRlZjdlMzlkOGU4NDc5NGNhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDEyIDEwOjE0OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdmRzby5jIGIvYXJjaC9taXBzL2tlcm5lbC92ZHNvLmNcbmluZGV4IGJkMWZjMTdkMzk3NWRjLi45NDg3Mzc3NWZjMGY0NSAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdmRzby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMva2VybmVsL3Zkc28uY1xuQEAgLTkxLDggJiM0Mzs5MSw4IEBAIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgaW50IHVzZXNfaW50ZXJwKVxuIFxuIFx0XHQvKiBNYXAgZGVsYXkgc2xvdCBlbXVsYXRpb24gcGFnZSAqL1xuIFx0XHRiYXNlID0gZG9fbW1hcChOVUxMLCBTVEFDS19UT1AsIFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9FWEVDLFxuLVx0XHRcdCAgICAgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUgfCBNQVBfRklYRUQsIDAsIDAsIFx1MDAyNnVudXNlZCxcbi1cdFx0XHQgICAgICAgTlVMTCk7XG4mIzQzO1x0XHRcdCAgICAgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUgfCBNQVBfRklYRUQsXG4mIzQzO1x0XHRcdCAgICAgICBFTVBUWV9WTUFfRkxBR1MsIDAsIFx1MDAyNnVudXNlZCwgTlVMTCk7XG4gXHRcdGlmIChJU19FUlJfVkFMVUUoYmFzZSkpIHtcbiBcdFx0XHRyZXQgPSBiYXNlO1xuIFx0XHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jIGIvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmNcbmluZGV4IDI4YmVjNWJjNzg3OTQ5Li44MjEyN2UzMWRjYTZkZSAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuY1xuQEAgLTY1OSw3ICYjNDM7NjU5LDggQEAgdW5zaWduZWQgbG9uZyBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0dW5zaWduZWQgaW50IHBzaXplO1xuIFxuIFx0aWYgKHJhZGl4X2VuYWJsZWQoKSlcbi1cdFx0cmV0dXJuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcbiYjNDM7XHRcdHJldHVybiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0XHQgbGVnYWN5X3RvX3ZtYV9mbGFncyh2bV9mbGFncykpO1xuIFxuIFx0aWYgKGZpbHAgXHUwMDI2XHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxuIFx0XHRwc2l6ZSA9IGZpbGVfdG9fcHNpemUoZmlscCk7XG5AQCAtNjc5LDcgJiM0Mzs2ODAsOCBAQCB1bnNpZ25lZCBsb25nIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdHVuc2lnbmVkIGludCBwc2l6ZTtcbiBcbiBcdGlmIChyYWRpeF9lbmFibGVkKCkpXG4tXHRcdHJldHVybiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oZmlscCwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCB2bV9mbGFncyk7XG4mIzQzO1x0XHRyZXR1cm4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKGZpbHAsIGFkZHIwLCBsZW4sXG4mIzQzO1x0XHRcdFx0cGdvZmYsIGZsYWdzLCBsZWdhY3lfdG9fdm1hX2ZsYWdzKHZtX2ZsYWdzKSk7XG4gXG4gXHRpZiAoZmlscCBcdTAwMjZcdTAwMjYgaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXG4gXHRcdHBzaXplID0gZmlsZV90b19wc2l6ZShmaWxwKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uY1xuaW5kZXggZTNlZDY4NGRkY2YyOTEuLjMyYTA1ZDg4OWI5YTJiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uY1xuQEAgLTEyNTIsNyAmIzQzOzEyNTIsNyBAQCBpbnQgZHJtX2dlbV9tbWFwX29iaihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdW5zaWduZWQgbG9uZyBvYmpfc2l6ZSxcbiBcdFx0fVxuIFxuIFx0XHR2bV9mbGFnc19zZXQodm1hLCBWTV9JTyB8IFZNX1BGTk1BUCB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XG4tXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZG1hX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZG1hX2hlbHBlci5jXG5pbmRleCAxYzAwYTcxYWIzYzlkMC4uN2Q5NjEyMDc1ZDMxMGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9kbWFfaGVscGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2RtYV9oZWxwZXIuY1xuQEAgLTU0MCw3ICYjNDM7NTQwLDcgQEAgaW50IGRybV9nZW1fZG1hX21tYXAoc3RydWN0IGRybV9nZW1fZG1hX29iamVjdCAqZG1hX29iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpcbiBcdHZtX2ZsYWdzX21vZCh2bWEsIFZNX0RPTlREVU1QIHwgVk1fRE9OVEVYUEFORCwgVk1fUEZOTUFQKTtcbiBcbiBcdGlmIChkbWFfb2JqLVx1MDAzZW1hcF9ub25jb2hlcmVudCkge1xuLVx0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuJiM0MztcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gXG4gXHRcdHJldCA9IGRtYV9tbWFwX3BhZ2VzKGRybV9kZXZfZG1hX2RldihkbWFfb2JqLVx1MDAzZWJhc2UuZGV2KSxcbiBcdFx0XHRcdCAgICAgdm1hLCB2bWEtXHUwMDNldm1fZW5kIC0gdm1hLVx1MDAzZXZtX3N0YXJ0LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmNcbmluZGV4IGM5ODk0NTllYjIxNTkxLi4wNmQwMTlkNTFkM2U2YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuY1xuQEAgLTc2NCw3ICYjNDM7NzY0LDcgQEAgaW50IGRybV9nZW1fc2htZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX1BGTk1BUCB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XG4tXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuJiM0MztcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFx0aWYgKHNobWVtLVx1MDAzZW1hcF93YylcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmNcbmluZGV4IDJlNGQ2ZDExN2VlMmQ4Li5mOWM4YjdiMmJmYzdhZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmNcbkBAIC0xMzMsNyAmIzQzOzEzMyw3IEBAIHN0YXRpYyBpbnQgZXRuYXZpdl9nZW1fbW1hcF9vYmooc3RydWN0IGV0bmF2aXZfZ2VtX29iamVjdCAqZXRuYXZpdl9vYmosXG4gXG4gXHR2bV9mbGFnc19zZXQodm1hLCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xuIFxuLVx0dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuJiM0MztcdHZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gXG4gXHRpZiAoZXRuYXZpdl9vYmotXHUwMDNlZmxhZ3MgXHUwMDI2IEVUTkFfQk9fV0MpIHtcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1fcGFnZV9wcm90KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZ2VtLmNcbmluZGV4IDlhNjI3MGYzZGNhNmJmLi4wMjA4YzkyNTk1NzI1YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dlbS5jXG5AQCAtMzc3LDEzICYjNDM7Mzc3LDEzIEBAIHN0YXRpYyBpbnQgZXh5bm9zX2RybV9nZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0XG4gXG4gXHQvKiBub24tY2FjaGFibGUgYXMgZGVmYXVsdC4gKi9cbiBcdGlmIChleHlub3NfZ2VtLVx1MDAzZWZsYWdzIFx1MDAyNiBFWFlOT1NfQk9fQ0FDSEFCTEUpXG4tXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcdGVsc2UgaWYgKGV4eW5vc19nZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEVYWU5PU19CT19XQylcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9XG4tXHRcdFx0cGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncykpO1xuJiM0MztcdFx0XHRwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xuIFx0ZWxzZVxuIFx0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID1cbi1cdFx0XHRwZ3Byb3Rfbm9uY2FjaGVkKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4mIzQzO1x0XHRcdHBncHJvdF9ub25jYWNoZWQodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XG4gXG4gXHRyZXQgPSBleHlub3NfZHJtX2dlbV9tbWFwX2J1ZmZlcihleHlub3NfZ2VtLCB2bWEpO1xuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uY1xuaW5kZXggMDY0NGY4NWM2YzhlNTIuLjljYTkwYzFiYjViNDIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uY1xuQEAgLTExMiw3ICYjNDM7MTEyLDcgQEAgaTkxNV9nZW1fbW1hcF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLFxuIFx0XHR2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7XG4gXHRcdGlmICh2bWEgXHUwMDI2XHUwMDI2IF9fdm1hX21hdGNoZXModm1hLCBvYmotXHUwMDNlYmFzZS5maWxwLCBhZGRyLCBhcmdzLVx1MDAzZXNpemUpKVxuIFx0XHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPVxuLVx0XHRcdFx0cGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncykpO1xuJiM0MztcdFx0XHRcdHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XG4gXHRcdGVsc2VcbiBcdFx0XHRhZGRyID0gLUVOT01FTTtcbiBcdFx0bW1hcF93cml0ZV91bmxvY2sobW0pO1xuQEAgLTEwMjQsNyAmIzQzOzEwMjQsNyBAQCBpOTE1X2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLFxuIFx0ZnB1dChhbm9uKTtcbiBcbiBcdGlmIChvYmotXHUwMDNlb3BzLVx1MDAzZW1tYXBfb3BzKSB7XG4tXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcdFx0dm1hLVx1MDAzZXZtX29wcyA9IG9iai1cdTAwM2VvcHMtXHUwMDNlbW1hcF9vcHM7XG4gXHRcdHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBvYmotXHUwMDNlYmFzZS52bWFfbm9kZS5kcml2ZXJfcHJpdmF0ZTtcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTAzNSw3ICYjNDM7MTAzNSw3IEBAIGk5MTVfZ2VtX29iamVjdF9tbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosXG4gXHRzd2l0Y2ggKG1tby1cdTAwM2VtbWFwX3R5cGUpIHtcbiBcdGNhc2UgSTkxNV9NTUFQX1RZUEVfV0M6XG4gXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPVxuLVx0XHRcdHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpKTtcbiYjNDM7XHRcdFx0cGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcdFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnZtX29wc19jcHU7XG4gXHRcdGJyZWFrO1xuIFxuQEAgLTEwNDMsMTkgJiM0MzsxMDQzLDE5IEBAIGk5MTVfZ2VtX29iamVjdF9tbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosXG4gXHRcdEdFTV9XQVJOX09OKDEpO1xuIFx0XHRmYWxsdGhyb3VnaDtcbiBcdGNhc2UgSTkxNV9NTUFQX1RZUEVfV0I6XG4tXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcdFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnZtX29wc19jcHU7XG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBJOTE1X01NQVBfVFlQRV9VQzpcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9XG4tXHRcdFx0cGdwcm90X25vbmNhY2hlZCh2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncykpO1xuJiM0MztcdFx0XHRwZ3Byb3Rfbm9uY2FjaGVkKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xuIFx0XHR2bWEtXHUwMDNldm1fb3BzID0gXHUwMDI2dm1fb3BzX2NwdTtcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIEk5MTVfTU1BUF9UWVBFX0dUVDpcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9XG4tXHRcdFx0cGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncykpO1xuJiM0MztcdFx0XHRwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xuIFx0XHR2bWEtXHUwMDNldm1fb3BzID0gXHUwMDI2dm1fb3BzX2d0dDtcbiBcdFx0YnJlYWs7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uY1xuaW5kZXggY2JmNzIzYTVkODZmYTkuLjZhNzhlMjQyZGU3YzZiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jXG5AQCAtMTEyNSw3ICYjNDM7MTEyNSw3IEBAIHN0YXRpYyBpbnQgbXNtX2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0XG4gXHRzdHJ1Y3QgbXNtX2dlbV9vYmplY3QgKm1zbV9vYmogPSB0b19tc21fYm8ob2JqKTtcbiBcbiBcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX1BGTk1BUCB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XG4tXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gbXNtX2dlbV9wZ3Byb3QobXNtX29iaiwgdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpKTtcbiYjNDM7XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gbXNtX2dlbV9wZ3Byb3QobXNtX29iaiwgdm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmNcbmluZGV4IDIwZGJhMDJkNjE3NWJjLi45YTZlZTJlODgwYzBhZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmNcbkBAIC01NSw3ICYjNDM7NTUsNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBub3V2ZWF1X3R0bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0Z290byBlcnJvcl91bmxvY2s7XG4gXG4gXHRub3V2ZWF1X2JvX2RlbF9pb19yZXNlcnZlX2xydShibyk7XG4tXHRwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuJiM0MztcdHByb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFx0cmV0ID0gdHRtX2JvX3ZtX2ZhdWx0X3Jlc2VydmVkKHZtZiwgcHJvdCwgVFRNX0JPX1ZNX05VTV9QUkVGQVVMVCk7XG4gXHRub3V2ZWF1X2JvX2FkZF9pb19yZXNlcnZlX2xydShibyk7XG4gXHRpZiAocmV0ID09IFZNX0ZBVUxUX1JFVFJZIFx1MDAyNlx1MDAyNiAhKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZmJkZXYuYyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZmJkZXYuY1xuaW5kZXggY2EzZmIxODZiZjE5NTQuLjQ4ODE3Nzc2NDJkMjk2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYmRldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2ZiZGV2LmNcbkBAIC04NCw3ICYjNDM7ODQsNyBAQCBzdGF0aWMgaW50IG9tYXBfZmJkZXZfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvXG4gXG4gc3RhdGljIGludCBvbWFwX2ZiZGV2X2ZiX21tYXAoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbi1cdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4mIzQzO1x0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XG4gXG4gXHRyZXR1cm4gZmJfZGVmZXJyZWRfaW9fbW1hcChpbmZvLCB2bWEpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9nZW0uY1xuaW5kZXggMDA0MDRmYjZjMjlhYWUuLmZiMGU2ZjU1NmIzMTQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9nZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9nZW0uY1xuQEAgLTUzOCw5ICYjNDM7NTM4LDkgQEAgc3RhdGljIGludCBvbWFwX2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWNcbiBcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCB8IFZNX0lPIHwgVk1fTUlYRURNQVApO1xuIFxuIFx0aWYgKG9tYXBfb2JqLVx1MDAzZWZsYWdzIFx1MDAyNiBPTUFQX0JPX1dDKSB7XG4tXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcdH0gZWxzZSBpZiAob21hcF9vYmotXHUwMDNlZmxhZ3MgXHUwMDI2IE9NQVBfQk9fVU5DQUNIRUQpIHtcbi1cdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpKTtcbiYjNDM7XHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xuIFx0fSBlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogV2UgZG8gaGF2ZSBzb21lIHByaXZhdGUgb2JqZWN0cywgYXQgbGVhc3QgZm9yIHNjYW5vdXQgYnVmZmVyc1xuQEAgLTU1OCw3ICYjNDM7NTU4LDcgQEAgc3RhdGljIGludCBvbWFwX2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWNcbiBcdFx0dm1hLVx1MDAzZXZtX3Bnb2ZmIC09IGRybV92bWFfbm9kZV9zdGFydChcdTAwMjZvYmotXHUwMDNldm1hX25vZGUpO1xuIFx0XHR2bWFfc2V0X2ZpbGUodm1hLCBvYmotXHUwMDNlZmlscCk7XG4gXG4tXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcdH1cbiBcbiBcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXG5pbmRleCBhMWUyZWIxY2E3YmJlNi4uNzcwNTU2MzUzOTY4NzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXG5AQCAtNzc2LDcgJiM0Mzs3NzYsNyBAQCBzdGF0aWMgaW50IHBhbnRob3JfZ2VtX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdlxuIFx0fVxuIFxuIFx0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fUEZOTUFQIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QKTtcbi1cdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4mIzQzO1x0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gXHRpZiAoc2hvdWxkX21hcF93YyhibykpXG4gXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5jXG5pbmRleCBiMTg4NTM5ZGNhMGIyNS4uOWExZGM5ZjEyMDcyOWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5jXG5AQCAtMjU1LDcgJiM0MzsyNTUsNyBAQCBzdGF0aWMgaW50IHJvY2tjaGlwX2RybV9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosXG4gXHQgKi9cbiBcdHZtX2ZsYWdzX21vZCh2bWEsIFZNX0lPIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QLCBWTV9QRk5NQVApO1xuIFxuLVx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpKTtcbiYjNDM7XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuIFxuIFx0aWYgKHJrX29iai1cdTAwM2VwYWdlcylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmNcbmluZGV4IDFkOGQyN2E1ZWE4OWI4Li5mNzZhZjczM2VhNzkzOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jXG5AQCAtNjAyLDcgJiM0Mzs2MDIsNyBAQCBpbnQgX190ZWdyYV9nZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXG4gXHRcdHZtYS1cdTAwM2V2bV9wZ29mZiA9IHZtX3Bnb2ZmO1xuIFx0fSBlbHNlIHtcbi1cdFx0cGdwcm90X3QgcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKTtcbiYjNDM7XHRcdHBncHJvdF90IHByb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFxuIFx0XHR2bV9mbGFnc19tb2Qodm1hLCBWTV9NSVhFRE1BUCwgVk1fUEZOTUFQKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdnJhbS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ZyYW0uY1xuaW5kZXggNGFlM2NiYzM1ZGQzNjQuLjU0NGE2YWJkZGJjOGI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ZyYW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ZyYW0uY1xuQEAgLTU1LDcgJiM0Mzs1NSw3IEBAIHN0YXRpYyBpbnQgdmlydGlvX2dwdV92cmFtX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosXG4gXG4gXHR2bWEtXHUwMDNldm1fcGdvZmYgLT0gZHJtX3ZtYV9ub2RlX3N0YXJ0KFx1MDAyNm9iai1cdTAwM2V2bWFfbm9kZSk7XG4gXHR2bV9mbGFnc19zZXQodm1hLCBWTV9NSVhFRE1BUCB8IFZNX0RPTlRFWFBBTkQpO1xuLVx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKTtcbiYjNDM7XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuIFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnZpcnRpb19ncHVfdnJhbV92bV9vcHM7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcGFnZV9kaXJ0eS5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcGFnZV9kaXJ0eS5jXG5pbmRleCA0NTU2MWJjMWM5ZWZmZS4uYTlmZDQwMTVhMGNhYTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9wYWdlX2RpcnR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3BhZ2VfZGlydHkuY1xuQEAgLTQ4MSw3ICYjNDM7NDgxLDcgQEAgdm1fZmF1bHRfdCB2bXdfYm9fdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRpZiAodmJvLVx1MDAzZWRpcnR5IFx1MDAyNlx1MDAyNiB2Ym8tXHUwMDNlZGlydHktXHUwMDNlbWV0aG9kID09IFZNV19CT19ESVJUWV9NS1dSSVRFKVxuIFx0XHRwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IH5WTV9TSEFSRUQpO1xuIFx0ZWxzZVxuLVx0XHRwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuJiM0MztcdFx0cHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gXG4gXHRyZXQgPSB0dG1fYm9fdm1fZmF1bHRfcmVzZXJ2ZWQodm1mLCBwcm90LCBudW1fcHJlZmF1bHQpO1xuIFx0aWYgKHJldCA9PSBWTV9GQVVMVF9SRVRSWSBcdTAwMjZcdTAwMjYgISh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUKSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmNcbmluZGV4IGFiZTI1YWVkZWVhZGVmLi44Mzg3OTdjYzY1ZDc5MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5jXG5AQCAtMjgxLDcgJiM0MzsyODEsNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBiYXJyaWVyX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0cGdwcm90X3QgcHJvdDtcbiBcdGludCBpZHg7XG4gXG4tXHRwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuJiM0MztcdHByb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFxuIFx0aWYgKGRybV9kZXZfZW50ZXIoZGV2LCBcdTAwMjZpZHgpKSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgcGZuO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9tbWlvX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX21taW9fZ2VtLmNcbmluZGV4IDhjODAzZWYyMzNjYzRkLi4zNzQxYWU2MGY1MzJiZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9tbWlvX2dlbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfbW1pb19nZW0uY1xuQEAgLTE0OSw3ICYjNDM7MTQ5LDcgQEAgc3RhdGljIGludCB4ZV9tbWlvX2dlbV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqYmFzZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpcbiBcbiBcdC8qIFNldCB2bV9wZ29mZiAodXNlZCBhcyBhIGZha2UgYnVmZmVyIG9mZnNldCBieSBEUk0pIHRvIDAgKi9cbiBcdHZtYS1cdTAwM2V2bV9wZ29mZiA9IDA7XG4tXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncykpO1xuJiM0MztcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xuIFx0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fSU8gfCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVAgfFxuIFx0XHQgICAgIFZNX0RPTlRDT1BZIHwgVk1fTk9SRVNFUlZFKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmNcbmluZGV4IGVlYzRjMWRhM2Y5ZTMxLi5kZDE1ODQ0M2Y1NWYxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jXG5AQCAtODAsNyAmIzQzOzgwLDcgQEAgc3RhdGljIGludCB4ZW5fZHJtX2Zyb250X2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmosXG4gXHQgKiB3aGljaCBpcyBtYXBwZWQgYXMgTm9ybWFsIElubmVyIFdyaXRlLUJhY2sgT3V0ZXIgV3JpdGUtQmFja1xuIFx0ICogSW5uZXItU2hhcmVhYmxlLlxuIFx0ICovXG4tXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuJiM0MztcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFxuIFx0LypcbiBcdCAqIHZtX29wZXJhdGlvbnNfc3RydWN0LmZhdWx0IGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgaWYgQ1BVIGFjY2Vzc1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYl9pb19mb3BzLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfaW9fZm9wcy5jXG5pbmRleCA2YWI2MGZjZDAwNTAxNC4uNmQwYThjOGUxNDFhMjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfaW9fZm9wcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfaW9fZm9wcy5jXG5AQCAtMTYxLDcgJiM0MzsxNjEsNyBAQCBpbnQgZmJfaW9fbW1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRcdGxlbiA9IGluZm8tXHUwMDNlZml4Lm1taW9fbGVuO1xuIFx0fVxuIFxuLVx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKTtcbiYjNDM7XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZnJhbWVidWZmZXIodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCwgdm1hLVx1MDAzZXZtX3N0YXJ0LFxuIFx0XHRcdFx0XHQgICAgICAgdm1hLVx1MDAzZXZtX2VuZCwgc3RhcnQpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmNcbmluZGV4IGY1N2ZhMjFhMjUwMzUzLi4zZGU1ODZkYTE5N2JkOSAxMDA2NDRcbi0tLSBhL2ZzL2Fpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9haW8uY1xuQEAgLTYwNCw3ICYjNDM7NjA0LDcgQEAgc3RhdGljIGludCBhaW9fc2V0dXBfcmluZyhzdHJ1Y3Qga2lvY3R4ICpjdHgsIHVuc2lnbmVkIGludCBucl9ldmVudHMpXG4gXG4gXHRjdHgtXHUwMDNlbW1hcF9iYXNlID0gZG9fbW1hcChjdHgtXHUwMDNlYWlvX3JpbmdfZmlsZSwgMCwgY3R4LVx1MDAzZW1tYXBfc2l6ZSxcbiBcdFx0XHRcdCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuLVx0XHRcdFx0IE1BUF9TSEFSRUQsIDAsIDAsIFx1MDAyNnVudXNlZCwgTlVMTCk7XG4mIzQzO1x0XHRcdFx0IE1BUF9TSEFSRUQsIEVNUFRZX1ZNQV9GTEFHUywgMCwgXHUwMDI2dW51c2VkLCBOVUxMKTtcbiBcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcbiBcdGlmIChJU19FUlIoKHZvaWQgKiljdHgtXHUwMDNlbW1hcF9iYXNlKSkge1xuIFx0XHRjdHgtXHUwMDNlbW1hcF9zaXplID0gMDtcbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCA5ZmRkZDFlMGI4MTNhYi4uNDMwNjZmOWRkZjUyZDEgMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC0xODQsNyAmIzQzOzE4NCw4IEBAIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmIChhZGRyKVxuIFx0XHRhZGRyMCA9IEFMSUdOKGFkZHIsIGh1Z2VfcGFnZV9zaXplKGgpKTtcbiBcbi1cdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XG4mIzQzO1x0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgRU1QVFlfVk1BX0ZMQUdTKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG5pbmRleCBjYWU5N2MzMDcyODA5Ny4uOWU0M2UxMzhjMGI3NzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbkBAIC0zOTEsOSAmIzQzOzM5MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfZGlzYWJsZWRfYnlfaHcodm9pZClcbiBcbiB1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyk7XG4tdW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0Mzt1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyxcbi1cdFx0dm1fZmxhZ3NfdCB2bV9mbGFncyk7XG4mIzQzO1x0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpO1xuIFxuIGVudW0gc3BsaXRfdHlwZSB7XG4gXHRTUExJVF9UWVBFX1VOSUZPUk0sXG5AQCAtNjE3LDkgJiM0Mzs2MTcsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuICNkZWZpbmUgdGhwX2dldF91bm1hcHBlZF9hcmVhXHROVUxMXG4gXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nXG4tdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbi1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxuJiM0Mzt0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuJiM0MztcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWZkLmggYi9pbmNsdWRlL2xpbnV4L21lbWZkLmhcbmluZGV4IGI0ZmRhMDlkYWI5ZjYxLi5jMTU5ZTQwZTNmMzRhMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtZmQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1mZC5oXG5AQCAtMTQsOSAmIzQzOzE0LDkgQEAgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KTtcbiAgKiB0byBzZWFsaW5nLCBvciAwIG90aGVyd2lzZS5cbiAgKlxuICAqIFdlIGFsc28gdXBkYXRlIFZNQSBmbGFncyBpZiBhcHByb3ByaWF0ZSBieSBtYW5pcHVsYXRpbmcgdGhlIFZNQSBmbGFncyBwb2ludGVkXG4tICogdG8gYnkgdm1fZmxhZ3NfcHRyLlxuJiM0MzsgKiB0byBieSB2bWFfZmxhZ3NfcHRyLlxuICAqL1xuLWludCBtZW1mZF9jaGVja19zZWFsc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB2bV9mbGFnc190ICp2bV9mbGFnc19wdHIpO1xuJiM0MztpbnQgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm1hX2ZsYWdzX3QgKnZtYV9mbGFnc19wdHIpO1xuIHN0cnVjdCBmaWxlICptZW1mZF9hbGxvY19maWxlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IG1lbWZkX2dldF9zZWFscyhzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4gaW50IG1lbWZkX2FkZF9zZWFscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IHNlYWxzKTtcbkBAIC0zMCw3ICYjNDM7MzAsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbiBcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIH1cbiBzdGF0aWMgaW5saW5lIGludCBtZW1mZF9jaGVja19zZWFsc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLFxuLVx0XHRcdFx0XHQgdm1fZmxhZ3NfdCAqdm1fZmxhZ3NfcHRyKVxuJiM0MztcdFx0XHRcdFx0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDMyYmI3MjNmZmJiOTJkLi41NTBmYjkyOTU3ZDE4OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtNDQyLDggJiM0Mzs0NDIsMTAgQEAgZW51bSB7XG4gI2RlZmluZSBWTV9TVEFDS1x0SU5JVF9WTV9GTEFHKFNUQUNLKVxuICNpZmRlZiBDT05GSUdfU1RBQ0tfR1JPV1NVUFxuICNkZWZpbmUgVk1fU1RBQ0tfRUFSTFlcdElOSVRfVk1fRkxBRyhTVEFDS19FQVJMWSlcbiYjNDM7I2RlZmluZSBWTUFfU1RBQ0tfRUFSTFkgbWtfdm1hX2ZsYWdzKFZNQV9TVEFDS19FQVJMWV9CSVQpXG4gI2Vsc2VcbiAjZGVmaW5lIFZNX1NUQUNLX0VBUkxZXHRWTV9OT05FXG4mIzQzOyNkZWZpbmUgVk1BX1NUQUNLX0VBUkxZIEVNUFRZX1ZNQV9GTEFHU1xuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfUEtFWVNcbiAjZGVmaW5lIFZNX1BLRVlfU0hJRlQgKChfX2ZvcmNlIGludClWTUFfSElHSF9BUkNIXzBfQklUKVxuQEAgLTQ2NSwxNSAmIzQzOzQ2NywxOCBAQCBlbnVtIHtcbiAjaWYgZGVmaW5lZChDT05GSUdfWDg2X1VTRVJfU0hBRE9XX1NUQUNLKSB8fCBkZWZpbmVkKENPTkZJR19BUk02NF9HQ1MpIHx8IFxcXG4gXHRkZWZpbmVkKENPTkZJR19SSVNDVl9VU0VSX0NGSSlcbiAjZGVmaW5lIFZNX1NIQURPV19TVEFDS1x0SU5JVF9WTV9GTEFHKFNIQURPV19TVEFDSylcbiYjNDM7I2RlZmluZSBWTUFfU0hBRE9XX1NUQUNLIG1rX3ZtYV9mbGFncyhWTUFfU0hBRE9XX1NUQUNLX0JJVClcbiAjZGVmaW5lIFZNQV9TVEFSVEdBUF9GTEFHUyBta192bWFfZmxhZ3MoVk1BX0dST1dTRE9XTl9CSVQsIFZNQV9TSEFET1dfU1RBQ0tfQklUKVxuICNlbHNlXG4gI2RlZmluZSBWTV9TSEFET1dfU1RBQ0tcdFZNX05PTkVcbiYjNDM7I2RlZmluZSBWTUFfU0hBRE9XX1NUQUNLIEVNUFRZX1ZNQV9GTEFHU1xuICNkZWZpbmUgVk1BX1NUQVJUR0FQX0ZMQUdTIG1rX3ZtYV9mbGFncyhWTUFfR1JPV1NET1dOX0JJVClcbiAjZW5kaWZcbiAjaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpXG4gI2RlZmluZSBWTV9TQU9cdFx0SU5JVF9WTV9GTEFHKFNBTylcbiAjZWxpZiBkZWZpbmVkKENPTkZJR19QQVJJU0MpXG4gI2RlZmluZSBWTV9HUk9XU1VQXHRJTklUX1ZNX0ZMQUcoR1JPV1NVUClcbiYjNDM7I2RlZmluZSBWTUFfR1JPV1NVUFx0bWtfdm1hX2ZsYWdzKFZNQV9HUk9XU1VQX0JJVClcbiAjZWxpZiBkZWZpbmVkKENPTkZJR19TUEFSQzY0KVxuICNkZWZpbmUgVk1fU1BBUkNfQURJXHRJTklUX1ZNX0ZMQUcoU1BBUkNfQURJKVxuICNkZWZpbmUgVk1fQVJDSF9DTEVBUlx0SU5JVF9WTV9GTEFHKEFSQ0hfQ0xFQVIpXG5AQCAtNDg1LDYgJiM0Mzs0OTAsNyBAQCBlbnVtIHtcbiAjZW5kaWZcbiAjaWZuZGVmIFZNX0dST1dTVVBcbiAjZGVmaW5lIFZNX0dST1dTVVBcdFZNX05PTkVcbiYjNDM7I2RlZmluZSBWTUFfR1JPV1NVUFx0RU1QVFlfVk1BX0ZMQUdTXG4gI2VuZGlmXG4gI2lmZGVmIENPTkZJR19BUk02NF9NVEVcbiAjZGVmaW5lIFZNX01URVx0XHRJTklUX1ZNX0ZMQUcoTVRFKVxuQEAgLTU0MCw2ICYjNDM7NTQ2LDggQEAgZW51bSB7XG4gXG4gLyogQml0cyBzZXQgaW4gdGhlIFZNQSB1bnRpbCB0aGUgc3RhY2sgaXMgaW4gaXRzIGZpbmFsIGxvY2F0aW9uICovXG4gI2RlZmluZSBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQIChWTV9SQU5EX1JFQUQgfCBWTV9TRVFfUkVBRCB8IFZNX1NUQUNLX0VBUkxZKVxuJiM0MzsjZGVmaW5lIFZNQV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQIGFwcGVuZF92bWFfZmxhZ3MoXHRcdFxcXG4mIzQzO1x0Vk1BX1NUQUNLX0VBUkxZLCBWTUFfUkFORF9SRUFEX0JJVCwgVk1BX1NFUV9SRUFEX0JJVClcbiBcbiAjZGVmaW5lIFRBU0tfRVhFQ19CSVQgKChjdXJyZW50LVx1MDAzZXBlcnNvbmFsaXR5IFx1MDAyNiBSRUFEX0lNUExJRVNfRVhFQykgPyBcXFxuIFx0XHQgICAgICAgVk1BX0VYRUNfQklUIDogVk1BX1JFQURfQklUKVxuQEAgLTE1NzgsMTEgJiM0MzsxNTg2LDI0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfaW5pdGlhbF9zdGFjayhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdFx0dm1hLVx1MDAzZXZtX2VuZCBcdTAwM2U9IHZtYS1cdTAwM2V2bV9tbS1cdTAwM2VzdGFydF9zdGFjaztcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIHZtYV9pc190ZW1wb3Jhcnlfc3RhY2soY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB2bWFfZmxhZ3NfY2FuX2dyb3coY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzKVxuIHtcbi1cdGludCBtYXliZV9zdGFjayA9IHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0dST1dTRE9XTiB8IFZNX0dST1dTVVApO1xuJiM0MztcdGlmICh2bWFfZmxhZ3NfdGVzdF9zaW5nbGVfbWFzayhmbGFncywgVk1BX0dST1dTVVApKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0aWYgKHZtYV9mbGFnc190ZXN0KGZsYWdzLCBWTUFfR1JPV1NET1dOX0JJVCkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2Nhbl9ncm93KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHZtYV9mbGFnc19jYW5fZ3JvdyhcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuJiM0Mzt9XG4gXG4tXHRpZiAoIW1heWJlX3N0YWNrKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX3RlbXBvcmFyeV9zdGFjayhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiYjNDM7e1xuJiM0MztcdGlmICghdm1hX2Nhbl9ncm93KHZtYSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGlmICgodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQKSA9PVxuQEAgLTQxNzQsMTggJiM0Mzs0MTk1LDIwIEBAIHVuc2lnbmVkIGxvbmcgcmFuZG9taXplX3BhZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyByYW5nZSk7XG4gXG4gdW5zaWduZWQgbG9uZ1xuIF9fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXG4tXHRcdCAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKTtcbiYjNDM7XHRcdCAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxuJiM0MztcdFx0ICAgIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG4gXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nXG4gZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXG4gXHRcdCAgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncylcbiB7XG4tXHRyZXR1cm4gX19nZXRfdW5tYXBwZWRfYXJlYShmaWxlLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XG4mIzQzO1x0cmV0dXJuIF9fZ2V0X3VubWFwcGVkX2FyZWEoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICAgRU1QVFlfVk1BX0ZMQUdTKTtcbiB9XG4gXG4tZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0Mzt1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nICpwb3B1bGF0ZSxcbiYjNDM7XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgKnBvcHVsYXRlLFxuIFx0c3RydWN0IGxpc3RfaGVhZCAqdWYpO1xuIGV4dGVybiBpbnQgZG9fdm1pX211bm1hcChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdCB1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLCBzdHJ1Y3QgbGlzdF9oZWFkICp1ZixcbkBAIC00NTg0LDI2ICYjNDM7NDYwNywzNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmFuZ2VfaW5fdm1hX2Rlc2MoY29uc3Qgc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYyxcbiAjaWZkZWYgQ09ORklHX01NVVxuIHBncHJvdF90IHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3NfdCB2bV9mbGFncyk7XG4gXG4tc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4mIzQzO3N0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuIFx0Y29uc3Qgdm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKTtcbiBcbiBcdHJldHVybiB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2dldF9wYWdlX3Byb3QoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWEtXHUwMDNlZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgdm1hX3NldF9wYWdlX3Byb3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4ge1xuIFx0cmV0dXJuIF9fcGdwcm90KDApO1xuIH1cbi1zdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9nZXRfcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcbiYjNDM7c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX3BncHJvdCgwKTtcbiYjNDM7fVxuJiM0MztzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9nZXRfcGFnZV9wcm90KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiBcdHJldHVybiBfX3BncHJvdCgwKTtcbiB9XG4gc3RhdGljIGlubGluZSB2b2lkIHZtYV9zZXRfcGFnZV9wcm90KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbi1cdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4mIzQzO1x0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gfVxuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxuaW5kZXggOTVkMDA0MGRmNTg0MTMuLjEwYmU4YTU0YjQxNmY5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcbkBAIC0xOTMsMjEgJiM0MzsxOTMsMTggQEAgdW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGZsYWdzKTtcbiBcbi11bnNpZ25lZCBsb25nIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsXG4tXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBsZW4sXG4tXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsXG4tXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG4tXHRcdFx0XHRcdCAgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpO1xuJiM0Mzt1bnNpZ25lZCBsb25nIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG4gXG4gdW5zaWduZWQgbG9uZ1xuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncyk7XG4mIzQzO1x0XHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKTtcbiB1bnNpZ25lZCBsb25nXG4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKTtcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9waWNrX21tYXBfbGF5b3V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IHJsaW1pdCAqcmxpbV9zdGFjaykge31cbmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmNcbmluZGV4IGIzZThhNThlMTc3ZDNiLi5iYjFhNzIxYTNlNzQ2ZSAxMDA2NDRcbi0tLSBhL2lwYy9zaG0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvaXBjL3NobS5jXG5AQCAtMTY2MSw3ICYjNDM7MTY2MSw4IEBAIGxvbmcgZG9fc2htYXQoaW50IHNobWlkLCBjaGFyIF9fdXNlciAqc2htYWRkciwgaW50IHNobWZsZyxcbiBcdFx0XHRnb3RvIGludmFsaWQ7XG4gXHR9XG4gXG4tXHRhZGRyID0gZG9fbW1hcChmaWxlLCBhZGRyLCBzaXplLCBwcm90LCBmbGFncywgMCwgMCwgXHUwMDI2cG9wdWxhdGUsIE5VTEwpO1xuJiM0MztcdGFkZHIgPSBkb19tbWFwKGZpbGUsIGFkZHIsIHNpemUsIHByb3QsIGZsYWdzLCBFTVBUWV9WTUFfRkxBR1MsIDAsXG4mIzQzO1x0XHQgICAgICAgXHUwMDI2cG9wdWxhdGUsIE5VTEwpO1xuIFx0KnJhZGRyID0gYWRkcjtcbiBcdGVyciA9IDA7XG4gXHRpZiAoSVNfRVJSX1ZBTFVFKGFkZHIpKVxuZGlmZiAtLWdpdCBhL21tL2RlYnVnLmMgYi9tbS9kZWJ1Zy5jXG5pbmRleCA0OTc2NTRiMzZmMWFiNS4uOWEwMjk3YjM5ODhkODkgMTAwNjQ0XG4tLS0gYS9tbS9kZWJ1Zy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kZWJ1Zy5jXG5AQCAtMTk3LDcgJiM0MzsxOTcsNyBAQCB2b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRcdFwmIzM0O251bWFfbmV4dF9zY2FuICVsdSBudW1hX3NjYW5fb2Zmc2V0ICVsdSBudW1hX3NjYW5fc2VxICVkXFxuXCYjMzQ7XG4gI2VuZGlmXG4gXHRcdFwmIzM0O3RsYl9mbHVzaF9wZW5kaW5nICVkXFxuXCYjMzQ7XG4tXHRcdFwmIzM0O2RlZl9mbGFnczogJSNseCglcEd2KVxcblwmIzM0OyxcbiYjNDM7XHRcdFwmIzM0O2RlZl9mbGFnczogJSpwYiglcEd2KVxcblwmIzM0OyxcbiBcbiBcdFx0bW0sIG1tLVx1MDAzZXRhc2tfc2l6ZSxcbiBcdFx0bW0tXHUwMDNlbW1hcF9iYXNlLCBtbS1cdTAwM2VtbWFwX2xlZ2FjeV9iYXNlLFxuQEAgLTIyNiw3ICYjNDM7MjI2LDggQEAgdm9pZCBkdW1wX21tKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0XHRtbS1cdTAwM2VudW1hX25leHRfc2NhbiwgbW0tXHUwMDNlbnVtYV9zY2FuX29mZnNldCwgbW0tXHUwMDNlbnVtYV9zY2FuX3NlcSxcbiAjZW5kaWZcbiBcdFx0YXRvbWljX3JlYWQoXHUwMDI2bW0tXHUwMDNldGxiX2ZsdXNoX3BlbmRpbmcpLFxuLVx0XHRtbS1cdTAwM2VkZWZfZmxhZ3MsIFx1MDAyNm1tLVx1MDAzZWRlZl9mbGFnc1xuJiM0MztcdFx0TlVNX1ZNQV9GTEFHX0JJVFMsIG1tLVx1MDAzZWRlZl92bWFfZmxhZ3MuX192bWFfZmxhZ3MsXG4mIzQzO1x0XHRcdTAwMjZtbS1cdTAwM2VkZWZfdm1hX2ZsYWdzXG4gXHQpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGR1bXBfbW0pO1xuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAwZGM2ZDYzMDU3MGZhZi4uNDBkNmI0MDc4ZTNkNDMgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTE5Niw3ICYjNDM7MTE5Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc190cmFuc3BhcmVudF9odWdlcGFnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxuIFx0XHRsb2ZmX3Qgb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIHNpemUsXG4tXHRcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4mIzQzO1x0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuIFx0bG9mZl90IG9mZl9lbmQgPSBvZmYgJiM0MzsgbGVuO1xuIFx0bG9mZl90IG9mZl9hbGlnbiA9IHJvdW5kX3VwKG9mZiwgc2l6ZSk7XG5AQCAtMTIxMiw4ICYjNDM7MTIxMiw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0aWYgKGxlbl9wYWQgXHUwMDNjIGxlbiB8fCAob2ZmICYjNDM7IGxlbl9wYWQpIFx1MDAzYyBvZmYpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0ID0gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxwLCBhZGRyLCBsZW5fcGFkLFxuLVx0XHRcdFx0XHQgICBvZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsIGZsYWdzLCB2bV9mbGFncyk7XG4mIzQzO1x0cmV0ID0gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MoZmlscCwgYWRkciwgbGVuX3BhZCxcbiYjNDM7XHRcdFx0XHRcdCAgICBvZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICAgIHZtYV9mbGFncyk7XG4gXG4gXHQvKlxuIFx0ICogVGhlIGZhaWx1cmUgbWlnaHQgYmUgZHVlIHRvIGxlbmd0aCBwYWRkaW5nLiBUaGUgY2FsbGVyIHdpbGwgcmV0cnlcbkBAIC0xMjM4LDI1ICYjNDM7MTIzOSwyNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXVuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7dW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0dW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG4tXHRcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4mIzQzO1x0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyByZXQ7XG4gXHRsb2ZmX3Qgb2ZmID0gKGxvZmZfdClwZ29mZiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiBcbi1cdHJldCA9IF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgb2ZmLCBmbGFncywgUE1EX1NJWkUsIHZtX2ZsYWdzKTtcbiYjNDM7XHRyZXQgPSBfX3RocF9nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIG9mZiwgZmxhZ3MsIFBNRF9TSVpFLFxuJiM0MztcdFx0XHRcdCAgICAgIHZtYV9mbGFncyk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4tXHRcdFx0XHRcdCAgICB2bV9mbGFncyk7XG4mIzQzO1x0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICAgICB2bWFfZmxhZ3MpO1xuIH1cbiBcbiB1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncylcbiB7XG4tXHRyZXR1cm4gdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIDApO1xuJiM0MztcdHJldHVybiB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBFTVBUWV9WTUFfRkxBR1MpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh0aHBfZ2V0X3VubWFwcGVkX2FyZWEpO1xuIFxuZGlmZiAtLWdpdCBhL21tL21lbWZkLmMgYi9tbS9tZW1mZC5jXG5pbmRleCA2YzcyZmU2Y2FlZjc1ZC4uYzcwOGQ5MjUzM2Y0YWIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1mZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1mZC5jXG5AQCAtMzcwLDM5ICYjNDM7MzcwLDM2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc193cml0ZV9zZWFsZWQodW5zaWduZWQgaW50IHNlYWxzKVxuIFx0cmV0dXJuIHNlYWxzIFx1MDAyNiAoRl9TRUFMX1dSSVRFIHwgRl9TRUFMX0ZVVFVSRV9XUklURSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgY2hlY2tfd3JpdGVfc2VhbCh2bV9mbGFnc190ICp2bV9mbGFnc19wdHIpXG4mIzQzO3N0YXRpYyBpbnQgY2hlY2tfd3JpdGVfc2VhbCh2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzX3B0cilcbiB7XG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gKnZtX2ZsYWdzX3B0cjtcbi1cdHZtX2ZsYWdzX3QgbWFzayA9IHZtX2ZsYWdzIFx1MDAyNiAoVk1fU0hBUkVEIHwgVk1fV1JJVEUpO1xuLVxuIFx0LyogSWYgYSBwcml2YXRlIG1hcHBpbmcgdGhlbiB3cml0YWJpbGl0eSBpcyBpcnJlbGV2YW50LiAqL1xuLVx0aWYgKCEobWFzayBcdTAwMjYgVk1fU0hBUkVEKSlcbiYjNDM7XHRpZiAoIXZtYV9mbGFnc190ZXN0KHZtYV9mbGFnc19wdHIsIFZNQV9TSEFSRURfQklUKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKlxuIFx0ICogTmV3IFBST1RfV1JJVEUgYW5kIE1BUF9TSEFSRUQgbW1hcHMgYXJlIG5vdCBhbGxvd2VkIHdoZW5cbiBcdCAqIHdyaXRlIHNlYWxzIGFyZSBhY3RpdmUuXG4gXHQgKi9cbi1cdGlmIChtYXNrIFx1MDAyNiBWTV9XUklURSlcbiYjNDM7XHRpZiAodm1hX2ZsYWdzX3Rlc3Qodm1hX2ZsYWdzX3B0ciwgVk1BX1dSSVRFX0JJVCkpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4gXHQvKlxuIFx0ICogVGhpcyBpcyBhIHJlYWQtb25seSBtYXBwaW5nLCBkaXNhbGxvdyBtcHJvdGVjdCgpIGZyb20gbWFraW5nIGFcbiBcdCAqIHdyaXRlLXNlYWxlZCBtYXBwaW5nIHdyaXRhYmxlIGluIGZ1dHVyZS5cbiBcdCAqL1xuLVx0KnZtX2ZsYWdzX3B0ciBcdTAwMjY9IH5WTV9NQVlXUklURTtcbiYjNDM7XHR2bWFfZmxhZ3NfY2xlYXIodm1hX2ZsYWdzX3B0ciwgVk1BX01BWVdSSVRFX0JJVCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzX3B0cilcbiYjNDM7aW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKVxuIHtcbiBcdGludCBlcnIgPSAwO1xuIFx0dW5zaWduZWQgaW50ICpzZWFsc19wdHIgPSBtZW1mZF9maWxlX3NlYWxzX3B0cihmaWxlKTtcbiBcdHVuc2lnbmVkIGludCBzZWFscyA9IHNlYWxzX3B0ciA/ICpzZWFsc19wdHIgOiAwO1xuIFxuIFx0aWYgKGlzX3dyaXRlX3NlYWxlZChzZWFscykpXG4tXHRcdGVyciA9IGNoZWNrX3dyaXRlX3NlYWwodm1fZmxhZ3NfcHRyKTtcbiYjNDM7XHRcdGVyciA9IGNoZWNrX3dyaXRlX3NlYWwodm1hX2ZsYWdzX3B0cik7XG4gXG4gXHRyZXR1cm4gZXJyO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9tbG9jay5jIGIvbW0vbWxvY2suY1xuaW5kZXggOTdlNDkwMzhkOGQzM2UuLmVmYTY3MTZlNGRmYmRmIDEwMDY0NFxuLS0tIGEvbW0vbWxvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWxvY2suY1xuQEAgLTMyOSw3ICYjNDM7MzI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFsbG93X21sb2NrX211bmxvY2soc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdCAqIGJlIHNwbGl0LiBBbmQgdGhlIHBhZ2VzIGFyZSBub3QgaW4gVk1fTE9DS2VkIFZNQVxuIFx0ICogY2FuIGJlIHJlY2xhaW1lZC5cbiBcdCAqL1xuLVx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9MT0NLRUQpKVxuJiM0MztcdGlmICghdm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LyogZm9saW9fd2l0aGluX3JhbmdlKCkgY2Fubm90IHRha2UgS1NNLCBidXQgYW55IHNtYWxsIGZvbGlvIGlzIE9LICovXG5AQCAtMzY4LDcgJiM0MzszNjgsNyBAQCBzdGF0aWMgaW50IG1sb2NrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGZvbGlvID0gcG1kX2ZvbGlvKCpwbWQpO1xuIFx0XHRpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKVxuIFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9MT0NLRUQpXG4mIzQzO1x0XHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdFx0bWxvY2tfZm9saW8oZm9saW8pO1xuIFx0XHRlbHNlXG4gXHRcdFx0bXVubG9ja19mb2xpbyhmb2xpbyk7XG5AQCAtMzkzLDcgJiM0MzszOTMsNyBAQCBzdGF0aWMgaW50IG1sb2NrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGlmICghYWxsb3dfbWxvY2tfbXVubG9jayhmb2xpbywgdm1hLCBzdGFydCwgZW5kLCBzdGVwKSlcbiBcdFx0XHRnb3RvIG5leHRfZW50cnk7XG4gXG4tXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbiYjNDM7XHRcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSlcbiBcdFx0XHRtbG9ja19mb2xpbyhmb2xpbyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRtdW5sb2NrX2ZvbGlvKGZvbGlvKTtcbkBAIC00MTcsOCAmIzQzOzQxNyw4IEBAIHN0YXRpYyBpbnQgbWxvY2tfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiAgKiBAZW5kIC0gZW5kIG9mIHJhbmdlIGluIEB2bWFcbiAgKiBAbmV3X3ZtYV9mbGFncyAtIHRoZSBuZXcgc2V0IG9mIGZsYWdzIGZvciBAdm1hLlxuICAqXG4tICogQ2FsbGVkIGZvciBtbG9jaygpLCBtbG9jazIoKSBhbmQgbWxvY2thbGwoKSwgdG8gc2V0IEB2bWEgVk1fTE9DS0VEO1xuLSAqIGNhbGxlZCBmb3IgbXVubG9jaygpIGFuZCBtdW5sb2NrYWxsKCksIHRvIGNsZWFyIFZNX0xPQ0tFRCBmcm9tIEB2bWEuXG4mIzQzOyAqIENhbGxlZCBmb3IgbWxvY2soKSwgbWxvY2syKCkgYW5kIG1sb2NrYWxsKCksIHRvIHNldCBAdm1hIFZNQV9MT0NLRURfQklUO1xuJiM0MzsgKiBjYWxsZWQgZm9yIG11bmxvY2soKSBhbmQgbXVubG9ja2FsbCgpLCB0byBjbGVhciBWTUFfTE9DS0VEX0JJVCBmcm9tIEB2bWEuXG4gICovXG4gc3RhdGljIHZvaWQgbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG5AQCAtNDMxLDE0ICYjNDM7NDMxLDE0IEBAIHN0YXRpYyB2b2lkIG1sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcbiBcdC8qXG4gXHQgKiBUaGVyZSBpcyBhIHNsaWdodCBjaGFuY2UgdGhhdCBjb25jdXJyZW50IHBhZ2UgbWlncmF0aW9uLFxuLVx0ICogb3IgcGFnZSByZWNsYWltIGZpbmRpbmcgYSBwYWdlIG9mIHRoaXMgbm93LVZNX0xPQ0tFRCB2bWEsXG4mIzQzO1x0ICogb3IgcGFnZSByZWNsYWltIGZpbmRpbmcgYSBwYWdlIG9mIHRoaXMgbm93LVZNQV9MT0NLRURfQklUIHZtYSxcbiBcdCAqIHdpbGwgY2FsbCBtbG9ja192bWFfZm9saW8oKSBhbmQgcmFpc2UgcGFnZSYjMzk7cyBtbG9ja19jb3VudDpcbiBcdCAqIGRvdWJsZSBjb3VudGluZywgbGVhdmluZyB0aGUgcGFnZSB1bmV2aWN0YWJsZSBpbmRlZmluaXRlbHkuXG4tXHQgKiBDb21tdW5pY2F0ZSB0aGlzIGRhbmdlciB0byBtbG9ja192bWFfZm9saW8oKSB3aXRoIFZNX0lPLFxuLVx0ICogd2hpY2ggaXMgYSBWTV9TUEVDSUFMIGZsYWcgbm90IGFsbG93ZWQgb24gVk1fTE9DS0VEIHZtYXMuXG4mIzQzO1x0ICogQ29tbXVuaWNhdGUgdGhpcyBkYW5nZXIgdG8gbWxvY2tfdm1hX2ZvbGlvKCkgd2l0aCBWTUFfSU9fQklULFxuJiM0MztcdCAqIHdoaWNoIGlzIGEgVk1BX1NQRUNJQUxfRkxBR1MgZmxhZyBub3QgYWxsb3dlZCBvbiBWTUFfTE9DS0VEX0JJVCB2bWFzLlxuIFx0ICogbW1hcF9sb2NrIGlzIGhlbGQgaW4gd3JpdGUgbW9kZSBoZXJlLCBzbyB0aGlzIHdlaXJkXG4gXHQgKiBjb21iaW5hdGlvbiBzaG91bGQgbm90IGJlIHZpc2libGUgdG8gb3RoZXIgbW1hcF9sb2NrIHVzZXJzO1xuLVx0ICogYnV0IFdSSVRFX09OQ0Ugc28gcm1hcCB3YWxrZXJzIG11c3Qgc2VlIFZNX0lPIGlmIFZNX0xPQ0tFRC5cbiYjNDM7XHQgKiBidXQgV1JJVEVfT05DRSBzbyBybWFwIHdhbGtlcnMgbXVzdCBzZWUgVk1BX0lPX0JJVCBpZiBWTUFfTE9DS0VEX0JJVC5cbiBcdCAqL1xuIFx0aWYgKHZtYV9mbGFnc190ZXN0KG5ld192bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSlcbiBcdFx0dm1hX2ZsYWdzX3NldChuZXdfdm1hX2ZsYWdzLCBWTUFfSU9fQklUKTtcbkBAIC00NTgsNyAmIzQzOzQ1OCw3IEBAIHN0YXRpYyB2b2lkIG1sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiAvKlxuICAqIG1sb2NrX2ZpeHVwICAtIGhhbmRsZSBtbG9ja1thbGxdL211bmxvY2tbYWxsXSByZXF1ZXN0cy5cbiAgKlxuLSAqIEZpbHRlcnMgb3V0IFwmIzM0O3NwZWNpYWxcJiMzNDsgdm1hcyAtLSBWTV9MT0NLRUQgbmV2ZXIgZ2V0cyBzZXQgZm9yIHRoZXNlLCBhbmRcbiYjNDM7ICogRmlsdGVycyBvdXQgXCYjMzQ7c3BlY2lhbFwmIzM0OyB2bWFzIC0tIFZNQV9MT0NLRURfQklUIG5ldmVyIGdldHMgc2V0IGZvciB0aGVzZSwgYW5kXG4gICogbXVubG9jayBpcyBhIG5vLW9wLiAgSG93ZXZlciwgZm9yIHNvbWUgc3BlY2lhbCB2bWFzLCB3ZSBnbyBhaGVhZCBhbmRcbiAgKiBwb3B1bGF0ZSB0aGUgcHRlcy5cbiAgKlxuQEAgLTQ2NiwyNCAmIzQzOzQ2NiwyMyBAQCBzdGF0aWMgdm9pZCBtbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gICovXG4gc3RhdGljIGludCBtbG9ja19maXh1cChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0ICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnByZXYsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tXHQgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHZtX2ZsYWdzX3QgbmV3ZmxhZ3MpXG4mIzQzO1x0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB2bWFfZmxhZ3NfdCAqbmV3X3ZtYV9mbGFncylcbiB7XG4tXHR2bWFfZmxhZ3NfdCBuZXdfdm1hX2ZsYWdzID0gbGVnYWN5X3RvX3ZtYV9mbGFncyhuZXdmbGFncyk7XG4gXHRjb25zdCB2bWFfZmxhZ3NfdCBvbGRfdm1hX2ZsYWdzID0gdm1hLVx1MDAzZWZsYWdzO1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4gXHRpbnQgbnJfcGFnZXM7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbi1cdGlmICh2bWFfZmxhZ3Nfc2FtZV9wYWlyKFx1MDAyNm9sZF92bWFfZmxhZ3MsIFx1MDAyNm5ld192bWFfZmxhZ3MpIHx8XG4mIzQzO1x0aWYgKHZtYV9mbGFnc19zYW1lX3BhaXIoXHUwMDI2b2xkX3ZtYV9mbGFncywgbmV3X3ZtYV9mbGFncykgfHxcbiBcdCAgICB2bWFfaXNfc2VjcmV0bWVtKHZtYSkgfHwgIXZtYV9zdXBwb3J0c19tbG9jayh2bWEpKSB7XG4gXHRcdC8qXG4tXHRcdCAqIERvbiYjMzk7dCBzZXQgVk1fTE9DS0VEIG9yIFZNX0xPQ0tPTkZBVUxUIGFuZCBkb24mIzM5O3QgY291bnQuXG4tXHRcdCAqIEZvciBzZWNyZXRtZW0sIGRvbiYjMzk7dCBhbGxvdyB0aGUgbWVtb3J5IHRvIGJlIHVubG9ja2VkLlxuJiM0MztcdFx0ICogRG9uJiMzOTt0IHNldCBWTUFfTE9DS0VEX0JJVCBvciBWTUFfTE9DS09ORkFVTFRfQklUIGFuZCBkb24mIzM5O3RcbiYjNDM7XHRcdCAqIGNvdW50LiAgRm9yIHNlY3JldG1lbSwgZG9uJiMzOTt0IGFsbG93IHRoZSBtZW1vcnkgdG8gYmUgdW5sb2NrZWQuXG4gXHRcdCAqL1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3Modm1pLCAqcHJldiwgdm1hLCBzdGFydCwgZW5kLCBcdTAwMjZuZXdfdm1hX2ZsYWdzKTtcbiYjNDM7XHR2bWEgPSB2bWFfbW9kaWZ5X2ZsYWdzKHZtaSwgKnByZXYsIHZtYSwgc3RhcnQsIGVuZCwgbmV3X3ZtYV9mbGFncyk7XG4gXHRpZiAoSVNfRVJSKHZtYSkpIHtcbiBcdFx0cmV0ID0gUFRSX0VSUih2bWEpO1xuIFx0XHRnb3RvIG91dDtcbkBAIC00OTMsNyAmIzQzOzQ5Miw3IEBAIHN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdCAqIEtlZXAgdHJhY2sgb2YgYW1vdW50IG9mIGxvY2tlZCBWTS5cbiBcdCAqL1xuIFx0bnJfcGFnZXMgPSAoZW5kIC0gc3RhcnQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVx0aWYgKCF2bWFfZmxhZ3NfdGVzdChcdTAwMjZuZXdfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpXG4mIzQzO1x0aWYgKCF2bWFfZmxhZ3NfdGVzdChuZXdfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdG5yX3BhZ2VzID0gLW5yX3BhZ2VzO1xuIFx0ZWxzZSBpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2b2xkX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHRucl9wYWdlcyA9IDA7XG5AQCAtNTAyLDE1ICYjNDM7NTAxLDE1IEBAIHN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdC8qXG4gXHQgKiB2bV9mbGFncyBpcyBwcm90ZWN0ZWQgYnkgdGhlIG1tYXBfbG9jayBoZWxkIGluIHdyaXRlIG1vZGUuXG4gXHQgKiBJdCYjMzk7cyBva2F5IGlmIHRyeV90b191bm1hcF9vbmUgdW5tYXBzIGEgcGFnZSBqdXN0IGFmdGVyIHdlXG4tXHQgKiBzZXQgVk1fTE9DS0VELCBwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suXG4mIzQzO1x0ICogc2V0IFZNQV9MT0NLRURfQklULCBwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suXG4gXHQgKi9cbi1cdGlmICh2bWFfZmxhZ3NfdGVzdChcdTAwMjZuZXdfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0aWYgKHZtYV9mbGFnc190ZXN0KG5ld192bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSBcdTAwMjZcdTAwMjZcbiBcdCAgICB2bWFfZmxhZ3NfdGVzdChcdTAwMjZvbGRfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpIHtcbiBcdFx0LyogTm8gd29yayB0byBkbywgYW5kIG1sb2NraW5nIHR3aWNlIHdvdWxkIGJlIHdyb25nICovXG4gXHRcdHZtYV9zdGFydF93cml0ZSh2bWEpO1xuLVx0XHR2bWEtXHUwMDNlZmxhZ3MgPSBuZXdfdm1hX2ZsYWdzO1xuJiM0MztcdFx0dm1hLVx1MDAzZWZsYWdzID0gKm5ld192bWFfZmxhZ3M7XG4gXHR9IGVsc2Uge1xuLVx0XHRtbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCBcdTAwMjZuZXdfdm1hX2ZsYWdzKTtcbiYjNDM7XHRcdG1sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIG5ld192bWFfZmxhZ3MpO1xuIFx0fVxuIG91dDpcbiBcdCpwcmV2ID0gdm1hO1xuQEAgLTUxOCw3ICYjNDM7NTE3LDcgQEAgc3RhdGljIGludCBtbG9ja19maXh1cChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIH1cbiBcbiBzdGF0aWMgaW50IGFwcGx5X3ZtYV9sb2NrX2ZsYWdzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sXG4tXHRcdFx0XHR2bV9mbGFnc190IGZsYWdzKVxuJiM0MztcdFx0XHRcdGNvbnN0IHZtYV9mbGFnc190ICpmbGFncylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5zdGFydCwgZW5kLCB0bXA7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgKnByZXY7XG5AQCAtNTQzLDE4ICYjNDM7NTQyLDIwIEBAIHN0YXRpYyBpbnQgYXBwbHlfdm1hX2xvY2tfZmxhZ3ModW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbixcbiBcdHRtcCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbiBcdGZvcl9lYWNoX3ZtYV9yYW5nZSh2bWksIHZtYSwgZW5kKSB7XG4gXHRcdGludCBlcnJvcjtcbi1cdFx0dm1fZmxhZ3NfdCBuZXdmbGFncztcbiYjNDM7XHRcdHZtYV9mbGFnc190IG5ld2ZsYWdzO1xuIFxuIFx0XHRpZiAodm1hLVx1MDAzZXZtX3N0YXJ0ICE9IHRtcClcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdFx0bmV3ZmxhZ3MgPSB2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IH5WTV9MT0NLRURfTUFTSztcbi1cdFx0bmV3ZmxhZ3MgfD0gZmxhZ3M7XG4mIzQzO1x0XHRuZXdmbGFncyA9IHZtYS1cdTAwM2VmbGFncztcbiYjNDM7XHRcdHZtYV9mbGFnc19jbGVhcl9tYXNrKFx1MDAyNm5ld2ZsYWdzLCBWTUFfTE9DS0VEX01BU0spO1xuJiM0MztcdFx0dm1hX2ZsYWdzX3NldF9tYXNrKFx1MDAyNm5ld2ZsYWdzLCAqZmxhZ3MpO1xuJiM0MztcbiBcdFx0LyogSGVyZSB3ZSBrbm93IHRoYXQgIHZtYS1cdTAwM2V2bV9zdGFydCBcdTAwM2M9IG5zdGFydCBcdTAwM2Mgdm1hLVx1MDAzZXZtX2VuZC4gKi9cbiBcdFx0dG1wID0gdm1hLVx1MDAzZXZtX2VuZDtcbiBcdFx0aWYgKHRtcCBcdTAwM2UgZW5kKVxuIFx0XHRcdHRtcCA9IGVuZDtcbi1cdFx0ZXJyb3IgPSBtbG9ja19maXh1cChcdTAwMjZ2bWksIHZtYSwgXHUwMDI2cHJldiwgbnN0YXJ0LCB0bXAsIG5ld2ZsYWdzKTtcbiYjNDM7XHRcdGVycm9yID0gbWxvY2tfZml4dXAoXHUwMDI2dm1pLCB2bWEsIFx1MDAyNnByZXYsIG5zdGFydCwgdG1wLCBcdTAwMjZuZXdmbGFncyk7XG4gXHRcdGlmIChlcnJvcilcbiBcdFx0XHRyZXR1cm4gZXJyb3I7XG4gXHRcdHRtcCA9IHZtYV9pdGVyX2VuZChcdTAwMjZ2bWkpO1xuQEAgLTU4OSw3ICYjNDM7NTkwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfbW1fbWxvY2tlZF9wYWdlX25yKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRlbmQgPSBzdGFydCAmIzQzOyBsZW47XG4gXG4gXHRmb3JfZWFjaF92bWFfcmFuZ2Uodm1pLCB2bWEsIGVuZCkge1xuLVx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9MT0NLRUQpIHtcbiYjNDM7XHRcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSkge1xuIFx0XHRcdGlmIChzdGFydCBcdTAwM2Ugdm1hLVx1MDAzZXZtX3N0YXJ0KVxuIFx0XHRcdFx0Y291bnQgLT0gKHN0YXJ0IC0gdm1hLVx1MDAzZXZtX3N0YXJ0KTtcbiBcdFx0XHRpZiAoZW5kIFx1MDAzYyB2bWEtXHUwMDNldm1fZW5kKSB7XG5AQCAtNjE1LDcgJiM0Mzs2MTYsOCBAQCBzdGF0aWMgaW50IF9fbWxvY2tfcG9zaXhfZXJyb3JfcmV0dXJuKGxvbmcgcmV0dmFsKVxuIFx0cmV0dXJuIHJldHZhbDtcbiB9XG4gXG4tc3RhdGljIF9fbXVzdF9jaGVjayBpbnQgZG9fbWxvY2sodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbiwgdm1fZmxhZ3NfdCBmbGFncylcbiYjNDM7c3RhdGljIF9fbXVzdF9jaGVjayBpbnQgZG9fbWxvY2sodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdFx0XHQgdm1hX2ZsYWdzX3QgKmZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbG9ja2VkO1xuIFx0dW5zaWduZWQgbG9uZyBsb2NrX2xpbWl0O1xuQEAgLTY2NCwyNCAmIzQzOzY2NiwyNyBAQCBzdGF0aWMgX19tdXN0X2NoZWNrIGludCBkb19tbG9jayh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLCB2bV9mbGFnc190IGZsYVxuIFxuIFNZU0NBTExfREVGSU5FMihtbG9jaywgdW5zaWduZWQgbG9uZywgc3RhcnQsIHNpemVfdCwgbGVuKVxuIHtcbi1cdHJldHVybiBkb19tbG9jayhzdGFydCwgbGVuLCBWTV9MT0NLRUQpO1xuJiM0MztcdHZtYV9mbGFnc190IGZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9MT0NLRURfQklUKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRvX21sb2NrKHN0YXJ0LCBsZW4sIFx1MDAyNmZsYWdzKTtcbiB9XG4gXG4gU1lTQ0FMTF9ERUZJTkUzKG1sb2NrMiwgdW5zaWduZWQgbG9uZywgc3RhcnQsIHNpemVfdCwgbGVuLCBpbnQsIGZsYWdzKVxuIHtcbi1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSBWTV9MT0NLRUQ7XG4mIzQzO1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9MT0NLRURfQklUKTtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgfk1MT0NLX09ORkFVTFQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBNTE9DS19PTkZBVUxUKVxuLVx0XHR2bV9mbGFncyB8PSBWTV9MT0NLT05GQVVMVDtcbiYjNDM7XHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTE9DS09ORkFVTFRfQklUKTtcbiBcbi1cdHJldHVybiBkb19tbG9jayhzdGFydCwgbGVuLCB2bV9mbGFncyk7XG4mIzQzO1x0cmV0dXJuIGRvX21sb2NrKHN0YXJ0LCBsZW4sIFx1MDAyNnZtYV9mbGFncyk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FMihtdW5sb2NrLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW4pXG4ge1xuJiM0MztcdHZtYV9mbGFnc190IGZsYWdzID0gRU1QVFlfVk1BX0ZMQUdTO1xuIFx0aW50IHJldDtcbiBcbiBcdHN0YXJ0ID0gdW50YWdnZWRfYWRkcihzdGFydCk7XG5AQCAtNjkxLDcgJiM0Mzs2OTYsNyBAQCBTWVNDQUxMX0RFRklORTIobXVubG9jaywgdW5zaWduZWQgbG9uZywgc3RhcnQsIHNpemVfdCwgbGVuKVxuIFxuIFx0aWYgKG1tYXBfd3JpdGVfbG9ja19raWxsYWJsZShjdXJyZW50LVx1MDAzZW1tKSlcbiBcdFx0cmV0dXJuIC1FSU5UUjtcbi1cdHJldCA9IGFwcGx5X3ZtYV9sb2NrX2ZsYWdzKHN0YXJ0LCBsZW4sIDApO1xuJiM0MztcdHJldCA9IGFwcGx5X3ZtYV9sb2NrX2ZsYWdzKHN0YXJ0LCBsZW4sIFx1MDAyNmZsYWdzKTtcbiBcdG1tYXBfd3JpdGVfdW5sb2NrKGN1cnJlbnQtXHUwMDNlbW0pO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC02OTksNDYgJiM0Mzs3MDQsNDggQEAgU1lTQ0FMTF9ERUZJTkUyKG11bmxvY2ssIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbilcbiBcbiAvKlxuICAqIFRha2UgdGhlIE1DTF8qIGZsYWdzIHBhc3NlZCBpbnRvIG1sb2NrYWxsIChvciAwIGlmIGNhbGxlZCBmcm9tIG11bmxvY2thbGwpXG4tICogYW5kIHRyYW5zbGF0ZSBpbnRvIHRoZSBhcHByb3ByaWF0ZSBtb2RpZmljYXRpb25zIHRvIG1tLVx1MDAzZWRlZl9mbGFncyBhbmQvb3IgdGhlXG4tICogZmxhZ3MgZm9yIGFsbCBjdXJyZW50IFZNQXMuXG4mIzQzOyAqIGFuZCB0cmFuc2xhdGUgaW50byB0aGUgYXBwcm9wcmlhdGUgbW9kaWZpY2F0aW9ucyB0byBtbS1cdTAwM2VkZWZfdm1hX2ZsYWdzIGFuZC9vclxuJiM0MzsgKiB0aGUgZmxhZ3MgZm9yIGFsbCBjdXJyZW50IFZNQXMuXG4gICpcbiAgKiBUaGVyZSBhcmUgYSBjb3VwbGUgb2Ygc3VidGxldGllcyB3aXRoIHRoaXMuICBJZiBtbG9ja2FsbCgpIGlzIGNhbGxlZCBtdWx0aXBsZVxuICAqIHRpbWVzIHdpdGggZGlmZmVyZW50IGZsYWdzLCB0aGUgdmFsdWVzIGRvIG5vdCBuZWNlc3NhcmlseSBzdGFjay4gIElmIG1sb2NrYWxsXG4gICogaXMgY2FsbGVkIG9uY2UgaW5jbHVkaW5nIHRoZSBNQ0xfRlVUVVJFIGZsYWcgYW5kIHRoZW4gYSBzZWNvbmQgdGltZSB3aXRob3V0XG4tICogaXQsIFZNX0xPQ0tFRCBhbmQgVk1fTE9DS09ORkFVTFQgd2lsbCBiZSBjbGVhcmVkIGZyb20gbW0tXHUwMDNlZGVmX2ZsYWdzLlxuJiM0MzsgKiBpdCwgVk1BX0xPQ0tFRF9CSVQgYW5kIFZNQV9MT0NLT05GQVVMVF9CSVQgd2lsbCBiZSBjbGVhcmVkIGZyb21cbiYjNDM7ICogbW0tXHUwMDNlZGVmX3ZtYV9mbGFncy5cbiAgKi9cbiBzdGF0aWMgaW50IGFwcGx5X21sb2NrYWxsX2ZsYWdzKGludCBmbGFncylcbiB7XG4gXHRWTUFfSVRFUkFUT1Iodm1pLCBjdXJyZW50LVx1MDAzZW1tLCAwKTtcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXHUwMDNlbW07XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgKnByZXYgPSBOVUxMO1xuLVx0dm1fZmxhZ3NfdCB0b19hZGQgPSAwO1xuJiM0MztcdHZtYV9mbGFnc190IHRvX2FkZCA9IEVNUFRZX1ZNQV9GTEFHUztcbiBcbi1cdGN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlZGVmX2ZsYWdzIFx1MDAyNj0gflZNX0xPQ0tFRF9NQVNLO1xuJiM0MztcdHZtYV9mbGFnc19jbGVhcl9tYXNrKFx1MDAyNm1tLVx1MDAzZWRlZl92bWFfZmxhZ3MsIFZNQV9MT0NLRURfTUFTSyk7XG4gXHRpZiAoZmxhZ3MgXHUwMDI2IE1DTF9GVVRVUkUpIHtcbi1cdFx0Y3VycmVudC1cdTAwM2VtbS1cdTAwM2VkZWZfZmxhZ3MgfD0gVk1fTE9DS0VEO1xuJiM0MztcdFx0dm1hX2ZsYWdzX3NldChcdTAwMjZtbS1cdTAwM2VkZWZfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7XG4gXG4gXHRcdGlmIChmbGFncyBcdTAwMjYgTUNMX09ORkFVTFQpXG4tXHRcdFx0Y3VycmVudC1cdTAwM2VtbS1cdTAwM2VkZWZfZmxhZ3MgfD0gVk1fTE9DS09ORkFVTFQ7XG4mIzQzO1x0XHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2bW0tXHUwMDNlZGVmX3ZtYV9mbGFncywgVk1BX0xPQ0tPTkZBVUxUX0JJVCk7XG4gXG4gXHRcdGlmICghKGZsYWdzIFx1MDAyNiBNQ0xfQ1VSUkVOVCkpXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IE1DTF9DVVJSRU5UKSB7XG4tXHRcdHRvX2FkZCB8PSBWTV9MT0NLRUQ7XG4mIzQzO1x0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnRvX2FkZCwgVk1BX0xPQ0tFRF9CSVQpO1xuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1DTF9PTkZBVUxUKVxuLVx0XHRcdHRvX2FkZCB8PSBWTV9MT0NLT05GQVVMVDtcbiYjNDM7XHRcdFx0dm1hX2ZsYWdzX3NldChcdTAwMjZ0b19hZGQsIFZNQV9MT0NLT05GQVVMVF9CSVQpO1xuIFx0fVxuIFxuIFx0Zm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7XG4gXHRcdGludCBlcnJvcjtcbi1cdFx0dm1fZmxhZ3NfdCBuZXdmbGFncztcbiYjNDM7XHRcdHZtYV9mbGFnc190IG5ld2ZsYWdzID0gdm1hLVx1MDAzZWZsYWdzO1xuIFxuLVx0XHRuZXdmbGFncyA9IHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgflZNX0xPQ0tFRF9NQVNLO1xuLVx0XHRuZXdmbGFncyB8PSB0b19hZGQ7XG4mIzQzO1x0XHR2bWFfZmxhZ3NfY2xlYXJfbWFzayhcdTAwMjZuZXdmbGFncywgVk1BX0xPQ0tFRF9NQVNLKTtcbiYjNDM7XHRcdHZtYV9mbGFnc19zZXRfbWFzayhcdTAwMjZuZXdmbGFncywgdG9fYWRkKTtcbiBcbiBcdFx0ZXJyb3IgPSBtbG9ja19maXh1cChcdTAwMjZ2bWksIHZtYSwgXHUwMDI2cHJldiwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLFxuLVx0XHRcdFx0ICAgIG5ld2ZsYWdzKTtcbiYjNDM7XHRcdFx0XHQgICAgXHUwMDI2bmV3ZmxhZ3MpO1xuIFx0XHQvKiBJZ25vcmUgZXJyb3JzLCBidXQgcHJldiBuZWVkcyBmaXhpbmcgdXAuICovXG4gXHRcdGlmIChlcnJvcilcbiBcdFx0XHRwcmV2ID0gdm1hO1xuZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuY1xuaW5kZXggMzA4YTQzZWFiZDgzYjEuLjRiZjI2YjBmMWU2ZTM2IDEwMDY0NFxuLS0tIGEvbW0vbW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tbWFwLmNcbkBAIC04MCwxMyAmIzQzOzgwLDEzIEBAIGNvcmVfcGFyYW0oaWdub3JlX3JsaW1pdF9kYXRhLCBpZ25vcmVfcmxpbWl0X2RhdGEsIGJvb2wsIDA2NDQpO1xuIC8qIFVwZGF0ZSB2bWEtXHUwMDNldm1fcGFnZV9wcm90IHRvIHJlZmxlY3Qgdm1hLVx1MDAzZXZtX2ZsYWdzLiAqL1xuIHZvaWQgdm1hX3NldF9wYWdlX3Byb3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuLVx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYS1cdTAwM2V2bV9mbGFncztcbiYjNDM7XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSB2bWEtXHUwMDNlZmxhZ3M7XG4gXHRwZ3Byb3RfdCB2bV9wYWdlX3Byb3Q7XG4gXG4tXHR2bV9wYWdlX3Byb3QgPSB2bV9wZ3Byb3RfbW9kaWZ5KHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QsIHZtX2ZsYWdzKTtcbiYjNDM7XHR2bV9wYWdlX3Byb3QgPSB2bWFfcGdwcm90X21vZGlmeSh2bWEtXHUwMDNldm1fcGFnZV9wcm90LCB2bWFfZmxhZ3MpO1xuIFx0aWYgKHZtYV93YW50c193cml0ZW5vdGlmeSh2bWEsIHZtX3BhZ2VfcHJvdCkpIHtcbi1cdFx0dm1fZmxhZ3MgXHUwMDI2PSB+Vk1fU0hBUkVEO1xuLVx0XHR2bV9wYWdlX3Byb3QgPSB2bV9wZ3Byb3RfbW9kaWZ5KHZtX3BhZ2VfcHJvdCwgdm1fZmxhZ3MpO1xuJiM0MztcdFx0dm1hX2ZsYWdzX2NsZWFyKFx1MDAyNnZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpO1xuJiM0MztcdFx0dm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bWFfZmxhZ3MpO1xuIFx0fVxuIFx0LyogcmVtb3ZlX3Byb3RlY3Rpb25fcHRlcyByZWFkcyB2bWEtXHUwMDNldm1fcGFnZV9wcm90IHdpdGhvdXQgbW1hcF9sb2NrICovXG4gXHRXUklURV9PTkNFKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QsIHZtX3BhZ2VfcHJvdCk7XG5AQCAtMTAyLDE1ICYjNDM7MTAyLDE2IEBAIHZvaWQgdm1hX3NldF9wYWdlX3Byb3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gICovXG4gc3RhdGljIGludCBjaGVja19icmtfbGltaXRzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pXG4ge1xuJiM0MztcdGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbiYjNDM7XHRjb25zdCBib29sIGlzX2RlZl9sb2NrZWQgPVxuJiM0MztcdFx0dm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bW0tXHUwMDNlZGVmX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpO1xuIFx0dW5zaWduZWQgbG9uZyBtYXBwZWRfYWRkcjtcbiBcbiBcdG1hcHBlZF9hZGRyID0gZ2V0X3VubWFwcGVkX2FyZWEoTlVMTCwgYWRkciwgbGVuLCAwLCBNQVBfRklYRUQpO1xuIFx0aWYgKElTX0VSUl9WQUxVRShtYXBwZWRfYWRkcikpXG4gXHRcdHJldHVybiBtYXBwZWRfYWRkcjtcbiBcbi1cdHJldHVybiBtbG9ja19mdXR1cmVfb2soY3VycmVudC1cdTAwM2VtbSxcbi1cdFx0XHQgICAgICBjdXJyZW50LVx1MDAzZW1tLVx1MDAzZWRlZl9mbGFncyBcdTAwMjYgVk1fTE9DS0VELCBsZW4pXG4tXHRcdD8gMCA6IC1FQUdBSU47XG4mIzQzO1x0cmV0dXJuIG1sb2NrX2Z1dHVyZV9vayhtbSwgaXNfZGVmX2xvY2tlZCwgbGVuKSA/IDAgOiAtRUFHQUlOO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTEoYnJrLCB1bnNpZ25lZCBsb25nLCBicmspXG5AQCAtMTk3LDcgJiM0MzsxOTgsNyBAQCBTWVNDQUxMX0RFRklORTEoYnJrLCB1bnNpZ25lZCBsb25nLCBicmspXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0bW0tXHUwMDNlYnJrID0gYnJrO1xuLVx0aWYgKG1tLVx1MDAzZWRlZl9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKVxuJiM0MztcdGlmICh2bWFfZmxhZ3NfdGVzdChcdTAwMjZtbS1cdTAwM2VkZWZfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdHBvcHVsYXRlID0gdHJ1ZTtcbiBcbiBzdWNjZXNzOlxuQEAgLTI4MCw3ICYjNDM7MjgxLDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbGVfbW1hcF9vayhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgKiBkb19tbWFwKCkgLSBQZXJmb3JtIGEgdXNlcmxhbmQgbWVtb3J5IG1hcHBpbmcgaW50byB0aGUgY3VycmVudCBwcm9jZXNzXG4gICogYWRkcmVzcyBzcGFjZSBvZiBsZW5ndGggQGxlbiB3aXRoIHByb3RlY3Rpb24gYml0cyBAcHJvdCwgbW1hcCBmbGFncyBAZmxhZ3NcbiAgKiAoZnJvbSB3aGljaCBWTUEgZmxhZ3Mgd2lsbCBiZSBpbmZlcnJlZCksIGFuZCBhbnkgYWRkaXRpb25hbCBWTUEgZmxhZ3MgdG9cbi0gKiBhcHBseSBAdm1fZmxhZ3MuIElmIHRoaXMgaXMgYSBmaWxlLWJhY2tlZCBtYXBwaW5nIHRoZW4gdGhlIGZpbGUgaXMgc3BlY2lmaWVkXG4mIzQzOyAqIGFwcGx5IEB2bWFfZmxhZ3MuIElmIHRoaXMgaXMgYSBmaWxlLWJhY2tlZCBtYXBwaW5nIHRoZW4gdGhlIGZpbGUgaXMgc3BlY2lmaWVkXG4gICogaW4gQGZpbGUgYW5kIHBhZ2Ugb2Zmc2V0IGludG8gdGhlIGZpbGUgdmlhIEBwZ29mZi5cbiAgKlxuICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcGVyZm9ybSBzZWN1cml0eSBjaGVja3Mgb24gdGhlIGZpbGUgYW5kIGFzc3VtZXMsIGlmXG5AQCAtMzIwLDcgJiM0MzszMjEsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9tbWFwX29rKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuICAqICgyKSBmb3IgZGV0YWlscy5cbiAgKiBAZmxhZ3M6IEZsYWdzIHNwZWNpZnlpbmcgaG93IHRoZSBtYXBwaW5nIHNob3VsZCBiZSBwZXJmb3JtZWQsIHNlZSBtbWFwICgyKVxuICAqIGZvciBkZXRhaWxzLlxuLSAqIEB2bV9mbGFnczogVk1BIGZsYWdzIHdoaWNoIHNob3VsZCBiZSBzZXQgYnkgZGVmYXVsdCwgb3IgMCBvdGhlcndpc2UuXG4mIzQzOyAqIEB2bWFfZmxhZ3M6IFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgc2V0IGJ5IGRlZmF1bHQsIG9yIEVNUFRZX1ZNQV9GTEFHU1xuJiM0MzsgKiBvdGhlcndpc2UuXG4gICogQHBnb2ZmOiBQYWdlIG9mZnNldCBpbnRvIHRoZSBAZmlsZSBpZiBmaWxlLWJhY2tlZCwgc2hvdWxkIGJlIDAgb3RoZXJ3aXNlLlxuICAqIEBwb3B1bGF0ZTogQSBwb2ludGVyIHRvIGEgdmFsdWUgd2hpY2ggd2lsbCBiZSBzZXQgdG8gMCBpZiBubyBwb3B1bGF0aW9uIG9mXG4gICogdGhlIHJhbmdlIGlzIHJlcXVpcmVkLCBvciB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHBvcHVsYXRlIGlmIGl0IGlzLiBNdXN0IGJlXG5AQCAtMzM1LDcgJiM0MzszMzcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9tbWFwX29rKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuICAqL1xuIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHByb3QsXG4tXHRcdFx0dW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncyxcbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzLFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgKnBvcHVsYXRlLFxuIFx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnVmKVxuIHtcbkBAIC0zOTksMTMgJiM0Mzs0MDEsMTggQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHQgKiB0by4gd2UgYXNzdW1lIGFjY2VzcyBwZXJtaXNzaW9ucyBoYXZlIGJlZW4gaGFuZGxlZCBieSB0aGUgb3BlblxuIFx0ICogb2YgdGhlIG1lbW9yeSBvYmplY3QsIHNvIHdlIGRvbiYjMzk7dCBkbyBhbnkgaGVyZS5cbiBcdCAqL1xuLVx0dm1fZmxhZ3MgfD0gY2FsY192bV9wcm90X2JpdHMocHJvdCwgcGtleSkgfCBjYWxjX3ZtX2ZsYWdfYml0cyhmaWxlLCBmbGFncykgfFxuLVx0XHRcdG1tLVx1MDAzZWRlZl9mbGFncyB8IFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUM7XG4mIzQzO1x0dm1hX2ZsYWdzX3NldF9tYXNrKFx1MDAyNnZtYV9mbGFncyxcbiYjNDM7XHRcdFx0ICAgbGVnYWN5X3RvX3ZtYV9mbGFncyhjYWxjX3ZtX3Byb3RfYml0cyhwcm90LCBwa2V5KSkpO1xuJiM0MztcdHZtYV9mbGFnc19zZXRfbWFzayhcdTAwMjZ2bWFfZmxhZ3MsXG4mIzQzO1x0XHRcdCAgIGxlZ2FjeV90b192bWFfZmxhZ3MoY2FsY192bV9mbGFnX2JpdHMoZmlsZSwgZmxhZ3MpKSk7XG4mIzQzO1x0dm1hX2ZsYWdzX3NldF9tYXNrKFx1MDAyNnZtYV9mbGFncywgbW0tXHUwMDNlZGVmX3ZtYV9mbGFncyk7XG4mIzQzO1x0dm1hX2ZsYWdzX3NldChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9NQVlSRUFEX0JJVCwgVk1BX01BWVdSSVRFX0JJVCxcbiYjNDM7XHRcdCAgICAgIFZNQV9NQVlFWEVDX0JJVCk7XG4gXG4gXHQvKiBPYnRhaW4gdGhlIGFkZHJlc3MgdG8gbWFwIHRvLiB3ZSB2ZXJpZnkgKG9yIHNlbGVjdCkgaXQgYW5kIGVuc3VyZVxuIFx0ICogdGhhdCBpdCByZXByZXNlbnRzIGEgdmFsaWQgc2VjdGlvbiBvZiB0aGUgYWRkcmVzcyBzcGFjZS5cbiBcdCAqL1xuLVx0YWRkciA9IF9fZ2V0X3VubWFwcGVkX2FyZWEoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcbiYjNDM7XHRhZGRyID0gX19nZXRfdW5tYXBwZWRfYXJlYShmaWxlLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywgdm1hX2ZsYWdzKTtcbiBcdGlmIChJU19FUlJfVkFMVUUoYWRkcikpXG4gXHRcdHJldHVybiBhZGRyO1xuIFxuQEAgLTQxOCw3ICYjNDM7NDI1LDcgQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGlmICghY2FuX2RvX21sb2NrKCkpXG4gXHRcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGlmICghbWxvY2tfZnV0dXJlX29rKG1tLCB2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VELCBsZW4pKVxuJiM0MztcdGlmICghbWxvY2tfZnV0dXJlX29rKG1tLCB2bWFfZmxhZ3NfdGVzdChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSwgbGVuKSlcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG4gXG4gXHRpZiAoZmlsZSkge1xuQEAgLTQ2MSwyMiAmIzQzOzQ2OCwyMyBAQCB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRpZiAoSVNfQVBQRU5EKGlub2RlKSBcdTAwMjZcdTAwMjYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURSkpXG4gXHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcbi1cdFx0XHR2bV9mbGFncyB8PSBWTV9TSEFSRUQgfCBWTV9NQVlTSEFSRTtcbiYjNDM7XHRcdFx0dm1hX2ZsYWdzX3NldChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklULCBWTUFfTUFZU0hBUkVfQklUKTtcbiBcdFx0XHRpZiAoIShmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfV1JJVEUpKVxuLVx0XHRcdFx0dm1fZmxhZ3MgXHUwMDI2PSB+KFZNX01BWVdSSVRFIHwgVk1fU0hBUkVEKTtcbiYjNDM7XHRcdFx0XHR2bWFfZmxhZ3NfY2xlYXIoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTUFZV1JJVEVfQklULFxuJiM0MztcdFx0XHRcdFx0XHRWTUFfU0hBUkVEX0JJVCk7XG4gXHRcdFx0ZmFsbHRocm91Z2g7XG4gXHRcdGNhc2UgTUFQX1BSSVZBVEU6XG4gXHRcdFx0aWYgKCEoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1JFQUQpKVxuIFx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHRcdFx0aWYgKHBhdGhfbm9leGVjKFx1MDAyNmZpbGUtXHUwMDNlZl9wYXRoKSkge1xuLVx0XHRcdFx0aWYgKHZtX2ZsYWdzIFx1MDAyNiBWTV9FWEVDKVxuJiM0MztcdFx0XHRcdGlmICh2bWFfZmxhZ3NfdGVzdChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9FWEVDX0JJVCkpXG4gXHRcdFx0XHRcdHJldHVybiAtRVBFUk07XG4tXHRcdFx0XHR2bV9mbGFncyBcdTAwMjY9IH5WTV9NQVlFWEVDO1xuJiM0MztcdFx0XHRcdHZtYV9mbGFnc19jbGVhcihcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9NQVlFWEVDX0JJVCk7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdGlmICghY2FuX21tYXBfZmlsZShmaWxlKSlcbiBcdFx0XHRcdHJldHVybiAtRU5PREVWO1xuLVx0XHRcdGlmICh2bV9mbGFncyBcdTAwMjYgKFZNX0dST1dTRE9XTnxWTV9HUk9XU1VQKSlcbiYjNDM7XHRcdFx0aWYgKHZtYV9mbGFnc19jYW5fZ3JvdyhcdTAwMjZ2bWFfZmxhZ3MpKVxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtNDg4LDIzICYjNDM7NDk2LDI3IEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHQgKiBDaGVjayB0byBzZWUgaWYgd2UgYXJlIHZpb2xhdGluZyBhbnkgc2VhbHMgYW5kIHVwZGF0ZSBWTUFcbiBcdFx0ICogZmxhZ3MgaWYgbmVjZXNzYXJ5IHRvIGF2b2lkIGZ1dHVyZSBzZWFsIHZpb2xhdGlvbnMuXG4gXHRcdCAqL1xuLVx0XHRlcnIgPSBtZW1mZF9jaGVja19zZWFsc19tbWFwKGZpbGUsIFx1MDAyNnZtX2ZsYWdzKTtcbiYjNDM7XHRcdGVyciA9IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoZmlsZSwgXHUwMDI2dm1hX2ZsYWdzKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZXJyO1xuIFx0fSBlbHNlIHtcbiBcdFx0c3dpdGNoIChmbGFncyBcdTAwMjYgTUFQX1RZUEUpIHtcbiBcdFx0Y2FzZSBNQVBfU0hBUkVEOlxuLVx0XHRcdGlmICh2bV9mbGFncyBcdTAwMjYgKFZNX0dST1dTRE9XTnxWTV9HUk9XU1VQKSlcbiYjNDM7XHRcdFx0aWYgKHZtYV9mbGFnc19jYW5fZ3JvdyhcdTAwMjZ2bWFfZmxhZ3MpKVxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZ25vcmUgcGdvZmYuXG4gXHRcdFx0ICovXG4gXHRcdFx0cGdvZmYgPSAwO1xuLVx0XHRcdHZtX2ZsYWdzIHw9IFZNX1NIQVJFRCB8IFZNX01BWVNIQVJFO1xuJiM0MztcdFx0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQsIFZNQV9NQVlTSEFSRV9CSVQpO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIE1BUF9EUk9QUEFCTEU6XG4tXHRcdFx0aWYgKFZNX0RST1BQQUJMRSA9PSBWTV9OT05FKVxuJiM0MztcdFx0Y2FzZSBNQVBfRFJPUFBBQkxFOiB7XG4mIzQzO1x0XHRcdHZtYV9mbGFnc190IGRyb3BwYWJsZSA9IFZNQV9EUk9QUEFCTEU7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAodm1hX2ZsYWdzX2VtcHR5KFx1MDAyNmRyb3BwYWJsZSkpXG4gXHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRcdHZtYV9mbGFnc19zZXRfbWFzayhcdTAwMjZ2bWFfZmxhZ3MsIGRyb3BwYWJsZSk7XG4mIzQzO1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogQSBsb2NrZWQgb3Igc3RhY2sgYXJlYSBtYWtlcyBubyBzZW5zZSB0byBiZSBkcm9wcGFibGUuXG4gXHRcdFx0ICpcbkBAIC01MTUsMjMgJiM0Mzs1MjcsMjQgQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGZsYWdzIFx1MDAyNiAoTUFQX0xPQ0tFRCB8IE1BUF9IVUdFVExCKSlcbiBcdFx0XHQgICAgICAgIHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdGlmICh2bV9mbGFncyBcdTAwMjYgKFZNX0dST1dTRE9XTiB8IFZNX0dST1dTVVApKVxuJiM0MztcdFx0XHRpZiAodm1hX2ZsYWdzX2Nhbl9ncm93KFx1MDAyNnZtYV9mbGFncykpXG4gXHRcdFx0ICAgICAgICByZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0XHR2bV9mbGFncyB8PSBWTV9EUk9QUEFCTEU7XG4tXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZiB0aGUgcGFnZXMgY2FuIGJlIGRyb3BwZWQsIHRoZW4gaXQgZG9lc24mIzM5O3QgbWFrZVxuIFx0XHRcdCAqIHNlbnNlIHRvIHJlc2VydmUgdGhlbS5cbiBcdFx0XHQgKi9cbi1cdFx0XHR2bV9mbGFncyB8PSBWTV9OT1JFU0VSVkU7XG4mIzQzO1x0XHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTk9SRVNFUlZFX0JJVCk7XG4gXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBMaWtld2lzZSwgdGhleSYjMzk7cmUgdm9sYXRpbGUgZW5vdWdoIHRoYXQgdGhleVxuIFx0XHRcdCAqIHNob3VsZG4mIzM5O3Qgc3Vydml2ZSBmb3JrcyBvciBjb3JlZHVtcHMuXG4gXHRcdFx0ICovXG4tXHRcdFx0dm1fZmxhZ3MgfD0gVk1fV0lQRU9ORk9SSyB8IFZNX0RPTlREVU1QO1xuJiM0MztcdFx0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnZtYV9mbGFncywgVk1BX1dJUEVPTkZPUktfQklULFxuJiM0MztcdFx0XHRcdCAgICAgIFZNQV9ET05URFVNUF9CSVQpO1xuJiM0MztcbiBcdFx0XHRmYWxsdGhyb3VnaDtcbiYjNDM7XHRcdH1cbiBcdFx0Y2FzZSBNQVBfUFJJVkFURTpcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIFNldCBwZ29mZiBhY2NvcmRpbmcgdG8gYWRkciBmb3IgYW5vbl92bWEuXG5AQCAtNTQ0LDIyICYjNDM7NTU3LDIyIEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0fVxuIFxuIFx0Lypcbi1cdCAqIFNldCAmIzM5O1ZNX05PUkVTRVJWRSYjMzk7IGlmIHdlIHNob3VsZCBub3QgYWNjb3VudCBmb3IgdGhlXG4tXHQgKiBtZW1vcnkgdXNlIG9mIHRoaXMgbWFwcGluZy5cbiYjNDM7XHQgKiBTZXQgVk1BX05PUkVTRVJWRV9CSVQgaWYgd2Ugc2hvdWxkIG5vdCBhY2NvdW50IGZvciB0aGUgbWVtb3J5IHVzZVxuJiM0MztcdCAqIG9mIHRoaXMgbWFwcGluZy5cbiBcdCAqL1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBNQVBfTk9SRVNFUlZFKSB7XG4gXHRcdC8qIFdlIGhvbm9yIE1BUF9OT1JFU0VSVkUgaWYgYWxsb3dlZCB0byBvdmVyY29tbWl0ICovXG4gXHRcdGlmIChzeXNjdGxfb3ZlcmNvbW1pdF9tZW1vcnkgIT0gT1ZFUkNPTU1JVF9ORVZFUilcbi1cdFx0XHR2bV9mbGFncyB8PSBWTV9OT1JFU0VSVkU7XG4mIzQzO1x0XHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTk9SRVNFUlZFX0JJVCk7XG4gXG4gXHRcdC8qIGh1Z2V0bGIgYXBwbGllcyBzdHJpY3Qgb3ZlcmNvbW1pdCB1bmxlc3MgTUFQX05PUkVTRVJWRSAqL1xuIFx0XHRpZiAoZmlsZSBcdTAwMjZcdTAwMjYgaXNfZmlsZV9odWdlcGFnZXMoZmlsZSkpXG4tXHRcdFx0dm1fZmxhZ3MgfD0gVk1fTk9SRVNFUlZFO1xuJiM0MztcdFx0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnZtYV9mbGFncywgVk1BX05PUkVTRVJWRV9CSVQpO1xuIFx0fVxuIFxuLVx0YWRkciA9IG1tYXBfcmVnaW9uKGZpbGUsIGFkZHIsIGxlbiwgdm1fZmxhZ3MsIHBnb2ZmLCB1Zik7XG4mIzQzO1x0YWRkciA9IG1tYXBfcmVnaW9uKGZpbGUsIGFkZHIsIGxlbiwgdm1hX2ZsYWdzLCBwZ29mZiwgdWYpO1xuIFx0aWYgKCFJU19FUlJfVkFMVUUoYWRkcikgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCh2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKSB8fFxuJiM0MztcdCAgICAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkgfHxcbiBcdCAgICAgKGZsYWdzIFx1MDAyNiAoTUFQX1BPUFVMQVRFIHwgTUFQX05PTkJMT0NLKSkgPT0gTUFQX1BPUFVMQVRFKSlcbiBcdFx0KnBvcHVsYXRlID0gbGVuO1xuIFx0cmV0dXJuIGFkZHI7XG5AQCAtNjQ1LDkgJiM0Mzs2NTgsOSBAQCBTWVNDQUxMX0RFRklORTEob2xkX21tYXAsIHN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgX191c2VyICosIGFyZylcbiAgKiBEZXRlcm1pbmUgaWYgdGhlIGFsbG9jYXRpb24gbmVlZHMgdG8gZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm9cbiAgKiBleGlzdGluZyBtYXBwaW5nIHdpdGhpbiBpdCYjMzk7cyBndWFyZCBnYXBzLCBmb3IgdXNlIGFzIHN0YXJ0X2dhcC5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbi1cdGlmICh2bV9mbGFncyBcdTAwMjYgVk1fU0hBRE9XX1NUQUNLKVxuJiM0MztcdGlmICh2bWFfZmxhZ3NfdGVzdF9zaW5nbGVfbWFzayhcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9TSEFET1dfU1RBQ0spKVxuIFx0XHRyZXR1cm4gUEFHRV9TSVpFO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNjg5LDcgJiM0Mzs3MDIsNyBAQCB1bnNpZ25lZCBsb25nIHZtX3VubWFwcGVkX2FyZWEoc3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyAqaW5mbylcbiB1bnNpZ25lZCBsb25nXG4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXG4tXHRcdFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxuJiM0MztcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXHUwMDNlbW07XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgKnByZXY7XG5AQCAtNzE0LDcgJiM0Mzs3MjcsNyBAQCBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpbmZvLmxlbmd0aCA9IGxlbjtcbiBcdGluZm8ubG93X2xpbWl0ID0gbW0tXHUwMDNlbW1hcF9iYXNlO1xuIFx0aW5mby5oaWdoX2xpbWl0ID0gbW1hcF9lbmQ7XG4tXHRpbmZvLnN0YXJ0X2dhcCA9IHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bV9mbGFncyk7XG4mIzQzO1x0aW5mby5zdGFydF9nYXAgPSBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1hX2ZsYWdzKTtcbiBcdGlmIChmaWxwIFx1MDAyNlx1MDAyNiBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcbiBcdFx0aW5mby5hbGlnbl9tYXNrID0gaHVnZV9wYWdlX21hc2tfYWxpZ24oZmlscCk7XG4gXHRyZXR1cm4gdm1fdW5tYXBwZWRfYXJlYShcdTAwMjZpbmZvKTtcbkBAIC03MjcsNyAmIzQzOzc0MCw3IEBAIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4ge1xuIFx0cmV0dXJuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4tXHRcdFx0XHRcdCB2bV9mbGFncyk7XG4mIzQzO1x0XHRcdFx0XHQgbGVnYWN5X3RvX3ZtYV9mbGFncyh2bV9mbGFncykpO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC03MzgsNyAmIzQzOzc1MSw3IEBAIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiB1bnNpZ25lZCBsb25nXG4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxuJiM0MztcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCAqcHJldjtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbkBAIC03NjYsNyAmIzQzOzc3OSw3IEBAIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0aW5mby5sZW5ndGggPSBsZW47XG4gXHRpbmZvLmxvd19saW1pdCA9IFBBR0VfU0laRTtcbiBcdGluZm8uaGlnaF9saW1pdCA9IGFyY2hfZ2V0X21tYXBfYmFzZShhZGRyLCBtbS1cdTAwM2VtbWFwX2Jhc2UpO1xuLVx0aW5mby5zdGFydF9nYXAgPSBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1fZmxhZ3MpO1xuJiM0MztcdGluZm8uc3RhcnRfZ2FwID0gc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtYV9mbGFncyk7XG4gXHRpZiAoZmlscCBcdTAwMjZcdTAwMjYgaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXG4gXHRcdGluZm8uYWxpZ25fbWFzayA9IGh1Z2VfcGFnZV9tYXNrX2FsaWduKGZpbHApO1xuIFx0YWRkciA9IHZtX3VubWFwcGVkX2FyZWEoXHUwMDI2aW5mbyk7XG5AQCAtNzk1LDIzICYjNDM7ODA4LDI0IEBAIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxuIHtcbiBcdHJldHVybiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4tXHRcdFx0XHRcdFx0IHZtX2ZsYWdzKTtcbiYjNDM7XHRcdFx0XHRcdFx0IGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3MpKTtcbiB9XG4gI2VuZGlmXG4gXG4tdW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuLVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxuJiM0Mzt1bnNpZ25lZCBsb25nIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyxcbiYjNDM7XHRcdHZtYV9mbGFnc190IHZtYV9mbGFncylcbiB7XG4gXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfVE9QRE9XTiwgY3VycmVudC1cdTAwM2VtbSkpXG4gXHRcdHJldHVybiBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oZmlscCwgYWRkciwgbGVuLCBwZ29mZixcbi1cdFx0XHRcdFx0XHQgICAgICBmbGFncywgdm1fZmxhZ3MpO1xuLVx0cmV0dXJuIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcbiYjNDM7XHRcdFx0XHRmbGFncywgdm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpKTtcbiYjNDM7XHRyZXR1cm4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyxcbiYjNDM7XHRcdFx0dm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpKTtcbiB9XG4gXG4gdW5zaWduZWQgbG9uZ1xuIF9fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXG4tXHRcdHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyAoKmdldF9hcmVhKShzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKVxuQEAgLTg0NiwxMSAmIzQzOzg2MCwxMSBAQCBfX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxuIFx0XHQgICBcdTAwMjZcdTAwMjYgIWFkZHIgLyogbm8gaGludCAqL1xuIFx0XHQgICBcdTAwMjZcdTAwMjYgSVNfQUxJR05FRChsZW4sIFBNRF9TSVpFKSkge1xuIFx0XHQvKiBFbnN1cmVzIHRoYXQgbGFyZ2VyIGFub255bW91cyBtYXBwaW5ncyBhcmUgVEhQIGFsaWduZWQuICovXG4tXHRcdGFkZHIgPSB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxlLCBhZGRyLCBsZW4sXG4tXHRcdFx0XHRcdFx0ICAgICBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcbiYjNDM7XHRcdGFkZHIgPSB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MoZmlsZSwgYWRkciwgbGVuLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICBwZ29mZiwgZmxhZ3MsIHZtYV9mbGFncyk7XG4gXHR9IGVsc2Uge1xuLVx0XHRhZGRyID0gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxlLCBhZGRyLCBsZW4sXG4tXHRcdFx0XHRcdFx0ICAgIHBnb2ZmLCBmbGFncywgdm1fZmxhZ3MpO1xuJiM0MztcdFx0YWRkciA9IG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbGUsIGFkZHIsIGxlbixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBwZ29mZiwgZmxhZ3MsIHZtYV9mbGFncyk7XG4gXHR9XG4gXHRpZiAoSVNfRVJSX1ZBTFVFKGFkZHIpKVxuIFx0XHRyZXR1cm4gYWRkcjtcbkBAIC04NjgsNyAmIzQzOzg4Miw4IEBAIHVuc2lnbmVkIGxvbmdcbiBtbV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcbiBcdFx0ICAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIHtcbi1cdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTtcbiYjNDM7XHRyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHQgICAgIEVNUFRZX1ZNQV9GTEFHUyk7XG4gfVxuIEVYUE9SVF9TWU1CT0wobW1fZ2V0X3VubWFwcGVkX2FyZWEpO1xuIFxuQEAgLTk3MCw3ICYjNDM7OTg1LDcgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX2V4dGVuZF92bWFfbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25cbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHRpZiAoZXhwYW5kX3N0YWNrX2xvY2tlZChwcmV2LCBhZGRyKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHRpZiAocHJldi1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKVxuJiM0MztcdGlmICh2bWFfdGVzdChwcmV2LCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdHBvcHVsYXRlX3ZtYV9wYWdlX3JhbmdlKHByZXYsIGFkZHIsIHByZXYtXHUwMDNldm1fZW5kLCBOVUxMKTtcbiBcdHJldHVybiBwcmV2O1xuIH1cbkBAIC05OTQsNyAmIzQzOzEwMDksNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfZXh0ZW5kX3ZtYV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvblxuIFx0c3RhcnQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4gXHRpZiAoZXhwYW5kX3N0YWNrX2xvY2tlZCh2bWEsIGFkZHIpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbiYjNDM7XHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdHBvcHVsYXRlX3ZtYV9wYWdlX3JhbmdlKHZtYSwgYWRkciwgc3RhcnQsIE5VTEwpO1xuIFx0cmV0dXJuIHZtYTtcbiB9XG5AQCAtMTExOSwxOCAmIzQzOzExMzQsMTggQEAgU1lTQ0FMTF9ERUZJTkU1KHJlbWFwX2ZpbGVfcGFnZXMsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBzaXplLFxuIFx0ICovXG4gXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBzdGFydCk7XG4gXG4tXHRpZiAoIXZtYSB8fCAhKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fU0hBUkVEKSkge1xuJiM0MztcdGlmICghdm1hIHx8ICF2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKSkge1xuIFx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRwcm90IHw9IHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVBRCA/IFBST1RfUkVBRCA6IDA7XG4tXHRwcm90IHw9IHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fV1JJVEUgPyBQUk9UX1dSSVRFIDogMDtcbi1cdHByb3QgfD0gdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9FWEVDID8gUFJPVF9FWEVDIDogMDtcbiYjNDM7XHRwcm90IHw9IHZtYV90ZXN0KHZtYSwgVk1BX1JFQURfQklUKSA/IFBST1RfUkVBRCA6IDA7XG4mIzQzO1x0cHJvdCB8PSB2bWFfdGVzdCh2bWEsIFZNQV9XUklURV9CSVQpID8gUFJPVF9XUklURSA6IDA7XG4mIzQzO1x0cHJvdCB8PSB2bWFfdGVzdCh2bWEsIFZNQV9FWEVDX0JJVCkgPyBQUk9UX0VYRUMgOiAwO1xuIFxuIFx0ZmxhZ3MgXHUwMDI2PSBNQVBfTk9OQkxPQ0s7XG4gXHRmbGFncyB8PSBNQVBfU0hBUkVEIHwgTUFQX0ZJWEVEIHwgTUFQX1BPUFVMQVRFO1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKVxuJiM0MztcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSlcbiBcdFx0ZmxhZ3MgfD0gTUFQX0xPQ0tFRDtcbiBcbiBcdC8qIFNhdmUgdm1fZmxhZ3MgdXNlZCB0byBjYWxjdWxhdGUgcHJvdCBhbmQgZmxhZ3MsIGFuZCByZWNoZWNrIGxhdGVyLiAqL1xuQEAgLTExOTEsNyAmIzQzOzEyMDYsNyBAQCBTWVNDQUxMX0RFRklORTUocmVtYXBfZmlsZV9wYWdlcywgdW5zaWduZWQgbG9uZywgc3RhcnQsIHVuc2lnbmVkIGxvbmcsIHNpemUsXG4gXHR9XG4gXG4gXHRyZXQgPSBkb19tbWFwKHZtYS1cdTAwM2V2bV9maWxlLCBzdGFydCwgc2l6ZSxcbi1cdFx0XHRwcm90LCBmbGFncywgMCwgcGdvZmYsIFx1MDAyNnBvcHVsYXRlLCBOVUxMKTtcbiYjNDM7XHRcdFx0cHJvdCwgZmxhZ3MsIEVNUFRZX1ZNQV9GTEFHUywgcGdvZmYsIFx1MDAyNnBvcHVsYXRlLCBOVUxMKTtcbiBvdXQ6XG4gXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XG4gXHRmcHV0KGZpbGUpO1xuQEAgLTEyMzMsNyAmIzQzOzEyNDgsNyBAQCBpbnQgdm1fYnJrX2ZsYWdzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0LCBib29sIGlzX2V4ZWMpXG4gXG4gXHR2bWEgPSB2bWFfcHJldihcdTAwMjZ2bWkpO1xuIFx0cmV0ID0gZG9fYnJrX2ZsYWdzKFx1MDAyNnZtaSwgdm1hLCBhZGRyLCBsZW4sIHZtYV9mbGFncyk7XG4tXHRwb3B1bGF0ZSA9ICgobW0tXHUwMDNlZGVmX2ZsYWdzIFx1MDAyNiBWTV9MT0NLRUQpICE9IDApO1xuJiM0MztcdHBvcHVsYXRlID0gdm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bW0tXHUwMDNlZGVmX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpO1xuIFx0bW1hcF93cml0ZV91bmxvY2sobW0pO1xuIFx0dXNlcmZhdWx0ZmRfdW5tYXBfY29tcGxldGUobW0sIFx1MDAyNnVmKTtcbiBcdGlmIChwb3B1bGF0ZSBcdTAwMjZcdTAwMjYgIXJldClcbkBAIC0xMjU2LDcgJiM0MzsxMjcxLDcgQEAgdW5zaWduZWQgbG9uZyB0ZWFyX2Rvd25fdm1hcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxuIFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTtcbiBcdHZtYV9pdGVyX3NldCh2bWksIHZtYS1cdTAwM2V2bV9lbmQpO1xuIFx0ZG8ge1xuLVx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKVxuJiM0MztcdFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0FDQ09VTlRfQklUKSlcbiBcdFx0XHRucl9hY2NvdW50ZWQgJiM0Mzs9IHZtYV9wYWdlcyh2bWEpO1xuIFx0XHR2bWFfbWFya19kZXRhY2hlZCh2bWEpO1xuIFx0XHRyZW1vdmVfdm1hKHZtYSk7XG5AQCAtMTQwNSw3ICYjNDM7MTQyMCw3IEBAIHN0YXRpYyBpbnQgc3BlY2lhbF9tYXBwaW5nX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4ge1xuIFx0LypcbiBcdCAqIEZvcmJpZCBzcGxpdHRpbmcgc3BlY2lhbCBtYXBwaW5ncyAtIGtlcm5lbCBoYXMgZXhwZWN0YXRpb25zIG92ZXJcbi1cdCAqIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gbWFwcGluZy4gVG9nZXRoZXIgd2l0aCBWTV9ET05URVhQQU5EXG4mIzQzO1x0ICogdGhlIG51bWJlciBvZiBwYWdlcyBpbiBtYXBwaW5nLiBUb2dldGhlciB3aXRoIFZNQV9ET05URVhQQU5EX0JJVFxuIFx0ICogdGhlIHNpemUgb2Ygdm1hIHNob3VsZCBzdGF5IHRoZSBzYW1lIG92ZXIgdGhlIHNwZWNpYWwgbWFwcGluZyYjMzk7c1xuIFx0ICogbGlmZXRpbWUuXG4gXHQgKi9cbkBAIC0xNjc3LDcgJiM0MzsxNjkyLDcgQEAgYm9vbCBtbWFwX3JlYWRfbG9ja19tYXliZV9leHBhbmQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKCEobmV3X3ZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fR1JPV1NET1dOKSlcbiYjNDM7XHRpZiAoIXZtYV90ZXN0KG5ld192bWEsIFZNQV9HUk9XU0RPV05fQklUKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0bW1hcF93cml0ZV9sb2NrKG1tKTtcbkBAIC0xNzI3LDcgJiM0MzsxNzQyLDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxuIFx0XHRyZXR2YWwgPSB2bWFfc3RhcnRfd3JpdGVfa2lsbGFibGUobXBudCk7XG4gXHRcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gXHRcdFx0Z290byBsb29wX291dDtcbi1cdFx0aWYgKG1wbnQtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0RPTlRDT1BZKSB7XG4mIzQzO1x0XHRpZiAodm1hX3Rlc3QobXBudCwgVk1BX0RPTlRDT1BZX0JJVCkpIHtcbiBcdFx0XHRyZXR2YWwgPSB2bWFfaXRlcl9jbGVhcl9nZnAoXHUwMDI2dm1pLCBtcG50LVx1MDAzZXZtX3N0YXJ0LFxuIFx0XHRcdFx0XHRcdCAgICBtcG50LVx1MDAzZXZtX2VuZCwgR0ZQX0tFUk5FTCk7XG4gXHRcdFx0aWYgKHJldHZhbClcbkBAIC0xNzM3LDcgJiM0MzsxNzUyLDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGNoYXJnZSA9IDA7XG4tXHRcdGlmIChtcG50LVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKSB7XG4mIzQzO1x0XHRpZiAodm1hX3Rlc3QobXBudCwgVk1BX0FDQ09VTlRfQklUKSkge1xuIFx0XHRcdHVuc2lnbmVkIGxvbmcgbGVuID0gdm1hX3BhZ2VzKG1wbnQpO1xuIFxuIFx0XHRcdGlmIChzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5X21tKG9sZG1tLCBsZW4pKSAvKiBzaWMgKi9cbkBAIC0xNzU1LDE2ICYjNDM7MTc3MCwxOSBAQCBfX2xhdGVudF9lbnRyb3B5IGludCBkdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pXG4gXHRcdHJldHZhbCA9IGR1cF91c2VyZmF1bHRmZCh0bXAsIFx1MDAyNnVmKTtcbiBcdFx0aWYgKHJldHZhbClcbiBcdFx0XHRnb3RvIGZhaWxfbm9tZW1fYW5vbl92bWFfZm9yaztcbi1cdFx0aWYgKHRtcC1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fV0lQRU9ORk9SSykge1xuJiM0MztcbiYjNDM7XHRcdGlmICh2bWFfdGVzdCh0bXAsIFZNQV9XSVBFT05GT1JLX0JJVCkpIHtcbiBcdFx0XHQvKlxuLVx0XHRcdCAqIFZNX1dJUEVPTkZPUksgZ2V0cyBhIGNsZWFuIHNsYXRlIGluIHRoZSBjaGlsZC5cbiYjNDM7XHRcdFx0ICogVk1BX1dJUEVPTkZPUktfQklUIGdldHMgYSBjbGVhbiBzbGF0ZSBpbiB0aGUgY2hpbGQuXG4gXHRcdFx0ICogRG9uJiMzOTt0IHByZXBhcmUgYW5vbl92bWEgdW50aWwgZmF1bHQgc2luY2Ugd2UgZG9uJiMzOTt0XG4gXHRcdFx0ICogY29weSBwYWdlIGZvciBjdXJyZW50IHZtYS5cbiBcdFx0XHQgKi9cbiBcdFx0XHR0bXAtXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xuIFx0XHR9IGVsc2UgaWYgKGFub25fdm1hX2ZvcmsodG1wLCBtcG50KSlcbiBcdFx0XHRnb3RvIGZhaWxfbm9tZW1fYW5vbl92bWFfZm9yaztcbi1cdFx0dm1fZmxhZ3NfY2xlYXIodG1wLCBWTV9MT0NLRURfTUFTSyk7XG4mIzQzO1xuJiM0MztcdFx0dm1hX3N0YXJ0X3dyaXRlKHRtcCk7XG4mIzQzO1x0XHR2bWFfY2xlYXJfZmxhZ3NfbWFzayh0bXAsIFZNQV9MT0NLRURfTUFTSyk7XG4gXHRcdC8qXG4gXHRcdCAqIENvcHkvdXBkYXRlIGh1Z2V0bGIgcHJpdmF0ZSB2bWEgaW5mb3JtYXRpb24uXG4gXHRcdCAqL1xuQEAgLTE3OTcsNyAmIzQzOzE4MTUsNyBAQCBfX2xhdGVudF9lbnRyb3B5IGludCBkdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pXG4gXHRcdFx0aV9tbWFwX3VubG9ja193cml0ZShtYXBwaW5nKTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoISh0bXAtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1dJUEVPTkZPUkspKVxuJiM0MztcdFx0aWYgKCF2bWFfdGVzdCh0bXAsIFZNQV9XSVBFT05GT1JLX0JJVCkpXG4gXHRcdFx0cmV0dmFsID0gY29weV9wYWdlX3JhbmdlKHRtcCwgbXBudCk7XG4gXG4gXHRcdGlmIChyZXR2YWwpIHtcbmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5jIGIvbW0vbXByb3RlY3QuY1xuaW5kZXggZGMyN2JiYzE3MTJmZDUuLjI4ODhlZTYzOGQ4NzJhIDEwMDY0NFxuLS0tIGEvbW0vbXByb3RlY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbXByb3RlY3QuY1xuQEAgLTQwLDcgJiM0Mzs0MCw3IEBAXG4gXG4gc3RhdGljIGJvb2wgbWF5YmVfY2hhbmdlX3B0ZV93cml0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcHRlX3QgcHRlKVxuIHtcbi1cdGlmIChXQVJOX09OX09OQ0UoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1dSSVRFKSkpXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghdm1hX3Rlc3Qodm1hLCBWTUFfV1JJVEVfQklUKSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIERvbiYjMzk7dCB0b3VjaCBlbnRyaWVzIHRoYXQgYXJlIG5vdCBldmVuIHJlYWRhYmxlLiAqL1xuQEAgLTk3LDcgJiM0Mzs5Nyw3IEBAIHN0YXRpYyBib29sIGNhbl9jaGFuZ2Vfc2hhcmVkX3B0ZV93cml0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBib29sIGNhbl9jaGFuZ2VfcHRlX3dyaXRhYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgICBwdGVfdCBwdGUpXG4ge1xuLVx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpKVxuJiM0MztcdGlmICghdm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCkpXG4gXHRcdHJldHVybiBjYW5fY2hhbmdlX3ByaXZhdGVfcHRlX3dyaXRhYmxlKHZtYSwgYWRkciwgcHRlKTtcbiBcbiBcdHJldHVybiBjYW5fY2hhbmdlX3NoYXJlZF9wdGVfd3JpdGFibGUodm1hLCBwdGUpO1xuQEAgLTE5NCw3ICYjNDM7MTk0LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHNldF93cml0ZV9wcm90X2NvbW1pdF9mbHVzaF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVcbiB7XG4gXHRib29sIHNldF93cml0ZTtcbiBcbi1cdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRCkge1xuJiM0MztcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKSkge1xuIFx0XHRzZXRfd3JpdGUgPSBjYW5fY2hhbmdlX3NoYXJlZF9wdGVfd3JpdGFibGUodm1hLCBwdGVudCk7XG4gXHRcdHByb3RfY29tbWl0X2ZsdXNoX3B0ZXModm1hLCBhZGRyLCBwdGVwLCBvbGRwdGUsIHB0ZW50LCBucl9wdGVzLFxuIFx0XHRcdFx0ICAgICAgIC8qIGlkeCA9ICovIDAsIHNldF93cml0ZSwgdGxiKTtcbkBAIC04NDYsOCAmIzQzOzg0Niw4IEBAIG1wcm90ZWN0X2ZpeHVwKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbiBcdFx0dm1fdW5hY2N0X21lbW9yeShucnBhZ2VzKTtcbiBcbiBcdC8qXG4tXHQgKiBQcml2YXRlIFZNX0xPQ0tFRCBWTUEgYmVjb21pbmcgd3JpdGFibGU6IHRyaWdnZXIgQ09XIHRvIGF2b2lkIG1ham9yXG4tXHQgKiBmYXVsdCBvbiBhY2Nlc3MuXG4mIzQzO1x0ICogUHJpdmF0ZSBWTUFfTE9DS0VEX0JJVCBWTUEgYmVjb21pbmcgd3JpdGFibGU6IHRyaWdnZXIgQ09XIHRvIGF2b2lkXG4mIzQzO1x0ICogbWFqb3IgZmF1bHQgb24gYWNjZXNzLlxuIFx0ICovXG4gXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bmV3X3ZtYV9mbGFncywgVk1BX1dSSVRFX0JJVCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgdm1hX2ZsYWdzX3Rlc3QoXHUwMDI2b2xkX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpIFx1MDAyNlx1MDAyNlxuQEAgLTkyMSw3ICYjNDM7OTIxLDcgQEAgc3RhdGljIGludCBkb19tcHJvdGVjdF9wa2V5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdHN0YXJ0ID0gdm1hLVx1MDAzZXZtX3N0YXJ0O1xuIFx0XHRlcnJvciA9IC1FSU5WQUw7XG4tXHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fR1JPV1NET1dOKSlcbiYjNDM7XHRcdGlmICghdm1hX3Rlc3Qodm1hLCBWTUFfR1JPV1NET1dOX0JJVCkpXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAodm1hLVx1MDAzZXZtX3N0YXJ0IFx1MDAzZSBzdGFydClcbkBAIC05MjksNyAmIzQzOzkyOSw3IEBAIHN0YXRpYyBpbnQgZG9fbXByb3RlY3RfcGtleSh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLFxuIFx0XHRpZiAodW5saWtlbHkoZ3Jvd3MgXHUwMDI2IFBST1RfR1JPV1NVUCkpIHtcbiBcdFx0XHRlbmQgPSB2bWEtXHUwMDNldm1fZW5kO1xuIFx0XHRcdGVycm9yID0gLUVJTlZBTDtcbi1cdFx0XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0dST1dTVVApKVxuJiM0MztcdFx0XHRpZiAoIXZtYV90ZXN0X3NpbmdsZV9tYXNrKHZtYSwgVk1BX0dST1dTVVApKVxuIFx0XHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcdH1cbkBAIC05NTMsNyAmIzQzOzk1Myw3IEBAIHN0YXRpYyBpbnQgZG9fbXByb3RlY3RfcGtleSh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLFxuIFx0XHR9XG4gXG4gXHRcdC8qIERvZXMgdGhlIGFwcGxpY2F0aW9uIGV4cGVjdCBQUk9UX1JFQUQgdG8gaW1wbHkgUFJPVF9FWEVDICovXG4tXHRcdGlmIChyaWVyIFx1MDAyNlx1MDAyNiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NQVlFWEVDKSlcbiYjNDM7XHRcdGlmIChyaWVyIFx1MDAyNlx1MDAyNiB2bWFfdGVzdCh2bWEsIFZNQV9NQVlFWEVDX0JJVCkpXG4gXHRcdFx0cHJvdCB8PSBQUk9UX0VYRUM7XG4gXG4gXHRcdC8qXG5kaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuY1xuaW5kZXggMzg0ZWY0Y2MyMTk1YmEuLmI2NGFhMWY2ZTA3ZWRlIDEwMDY0NFxuLS0tIGEvbW0vbXJlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21yZW1hcC5jXG5AQCAtNjgsNyAmIzQzOzY4LDcgQEAgc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3Qge1xuIFx0Ym9vbCBwb3B1bGF0ZV9leHBhbmQ7XHRcdC8qIG1sb2NrKCkmIzM5O2QgZXhwYW5kZWQsIG11c3QgcG9wdWxhdGUuICovXG4gXHRlbnVtIG1yZW1hcF90eXBlIHJlbWFwX3R5cGU7XHQvKiBleHBhbmQsIHNocmluaywgZXRjLiAqL1xuIFx0Ym9vbCBtbWFwX2xvY2tlZDtcdFx0LyogSXMgbW0gY3VycmVudGx5IHdyaXRlLWxvY2tlZD8gKi9cbi1cdHVuc2lnbmVkIGxvbmcgY2hhcmdlZDtcdFx0LyogSWYgVk1fQUNDT1VOVCwgIyBwYWdlcyB0byBhY2NvdW50LiAqL1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZDtcdFx0LyogSWYgVk1BX0FDQ09VTlRfQklULCAjIHBncyB0byBhY2NvdW50ICovXG4gXHRib29sIHZtaV9uZWVkc19pbnZhbGlkYXRlO1x0LyogSXMgdGhlIFZNQSBpdGVyYXRvciBpbnZhbGlkYXRlZD8gKi9cbiB9O1xuIFxuQEAgLTk2Myw3ICYjNDM7OTYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdnJtX3NldF9uZXdfYWRkcihzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFxuIFx0aWYgKHZybS1cdTAwM2VmbGFncyBcdTAwMjYgTVJFTUFQX0ZJWEVEKVxuIFx0XHRtYXBfZmxhZ3MgfD0gTUFQX0ZJWEVEO1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUFZU0hBUkUpXG4mIzQzO1x0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX01BWVNIQVJFX0JJVCkpXG4gXHRcdG1hcF9mbGFncyB8PSBNQVBfU0hBUkVEO1xuIFxuIFx0cmVzID0gZ2V0X3VubWFwcGVkX2FyZWEodm1hLVx1MDAzZXZtX2ZpbGUsIG5ld19hZGRyLCB2cm0tXHUwMDNlbmV3X2xlbiwgcGdvZmYsXG5AQCAtOTg1LDcgJiM0Mzs5ODUsNyBAQCBzdGF0aWMgYm9vbCB2cm1fY2FsY19jaGFyZ2Uoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGNoYXJnZWQ7XG4gXG4tXHRpZiAoISh2cm0tXHUwMDNldm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKSlcbiYjNDM7XHRpZiAoIXZtYV90ZXN0KHZybS1cdTAwM2V2bWEsIFZNQV9BQ0NPVU5UX0JJVCkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LypcbkBAIC0xMDEyLDcgJiM0MzsxMDEyLDcgQEAgc3RhdGljIGJvb2wgdnJtX2NhbGNfY2hhcmdlKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gICovXG4gc3RhdGljIHZvaWQgdnJtX3VuY2hhcmdlKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4ge1xuLVx0aWYgKCEodnJtLVx1MDAzZXZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fQUNDT1VOVCkpXG4mIzQzO1x0aWYgKCF2bWFfdGVzdCh2cm0tXHUwMDNldm1hLCBWTUFfQUNDT1VOVF9CSVQpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHR2bV91bmFjY3RfbWVtb3J5KHZybS1cdTAwM2VjaGFyZ2VkKTtcbkBAIC0xMDMyLDcgJiM0MzsxMDMyLDcgQEAgc3RhdGljIHZvaWQgdnJtX3N0YXRfYWNjb3VudChzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2cm0tXHUwMDNldm1hO1xuIFxuIFx0dm1fc3RhdF9hY2NvdW50KG1tLCB2bWEtXHUwMDNldm1fZmxhZ3MsIHBhZ2VzKTtcbi1cdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbiYjNDM7XHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdG1tLVx1MDAzZWxvY2tlZF92bSAmIzQzOz0gcGFnZXM7XG4gfVxuIFxuQEAgLTExNzYsNyAmIzQzOzExNzYsNyBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHQgKiBhcm9zZSwgaW4gd2hpY2ggY2FzZSB3ZSBfZG9fIHdpc2ggdG8gdW5tYXAgdGhlIF9uZXdfIFZNQSwgd2hpY2ggbWVhbnNcbiBcdCAqIHdlIGFjdHVhbGx5IF9kb18gd2FudCBpdCBiZSB1bmFjY291bnRlZC5cbiBcdCAqL1xuLVx0Ym9vbCBhY2NvdW50YWJsZV9tb3ZlID0gKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fQUNDT1VOVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0Ym9vbCBhY2NvdW50YWJsZV9tb3ZlID0gdm1hX3Rlc3Qodm1hLCBWTUFfQUNDT1VOVF9CSVQpIFx1MDAyNlx1MDAyNlxuIFx0XHQhKHZybS1cdTAwM2VmbGFncyBcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUCk7XG4gXG4gXHQvKlxuQEAgLTExOTUsNyAmIzQzOzExOTUsNyBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHQgKiBwb3J0aW9ucyBvZiB0aGUgb3JpZ2luYWwgVk1BIHRoYXQgcmVtYWluLlxuIFx0ICovXG4gXHRpZiAoYWNjb3VudGFibGVfbW92ZSkge1xuLVx0XHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX0FDQ09VTlQpO1xuJiM0MztcdFx0dm1hX2NsZWFyX2ZsYWdzKHZtYSwgVk1BX0FDQ09VTlRfQklUKTtcbiBcdFx0LyogV2UgYXJlIGFib3V0IHRvIHNwbGl0IHZtYSwgc28gc3RvcmUgdGhlIHN0YXJ0L2VuZC4gKi9cbiBcdFx0dm1fc3RhcnQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4gXHRcdHZtX2VuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG5AQCAtMTIyMCw4ICYjNDM7MTIyMCw4IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiBcdCAqIHwgICAgICAgICAgICAgfFxuIFx0ICogfC0tLS0tLS0tLS0tLS18XG4gXHQgKlxuLVx0ICogSGF2aW5nIGNsZWFyZWQgVk1fQUNDT1VOVCBmcm9tIHRoZSB3aG9sZSBWTUEsIGFmdGVyIHdlIHVubWFwIGFib3ZlXG4tXHQgKiB3ZSYjMzk7bGwgZW5kIHVwIHdpdGg6XG4mIzQzO1x0ICogSGF2aW5nIGNsZWFyZWQgVk1BX0FDQ09VTlRfQklUIGZyb20gdGhlIHdob2xlIFZNQSwgYWZ0ZXIgd2UgdW5tYXBcbiYjNDM7XHQgKiBhYm92ZSB3ZSYjMzk7bGwgZW5kIHVwIHdpdGg6XG4gXHQgKlxuIFx0ICogICAgYWRkciAgZW5kXG4gXHQgKiAgICAgfCAgICAgfFxuQEAgLTEyNDEsMTMgJiM0MzsxMjQxLDE1IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiBcdFx0aWYgKHZtX3N0YXJ0IFx1MDAzYyBhZGRyKSB7XG4gXHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2ID0gdm1hX3ByZXYoXHUwMDI2dm1pKTtcbiBcbi1cdFx0XHR2bV9mbGFnc19zZXQocHJldiwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqL1xuJiM0MztcdFx0XHR2bWFfc3RhcnRfd3JpdGUocHJldik7XG4mIzQzO1x0XHRcdHZtYV9zZXRfZmxhZ3MocHJldiwgVk1BX0FDQ09VTlRfQklUKTtcbiBcdFx0fVxuIFxuIFx0XHRpZiAodm1fZW5kIFx1MDAzZSBlbmQpIHtcbiBcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQgPSB2bWFfbmV4dChcdTAwMjZ2bWkpO1xuIFxuLVx0XHRcdHZtX2ZsYWdzX3NldChuZXh0LCBWTV9BQ0NPVU5UKTsgLyogQWNxdWlyZXMgVk1BIGxvY2suICovXG4mIzQzO1x0XHRcdHZtYV9zdGFydF93cml0ZShuZXh0KTtcbiYjNDM7XHRcdFx0dm1hX3NldF9mbGFncyhuZXh0LCBWTUFfQUNDT1VOVF9CSVQpO1xuIFx0XHR9XG4gXHR9XG4gfVxuQEAgLTEzMzAsOCAmIzQzOzEzMzIsOCBAQCBzdGF0aWMgdm9pZCBkb250dW5tYXBfY29tcGxldGUoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSxcbiBcdHVuc2lnbmVkIGxvbmcgb2xkX3N0YXJ0ID0gdnJtLVx1MDAzZXZtYS1cdTAwM2V2bV9zdGFydDtcbiBcdHVuc2lnbmVkIGxvbmcgb2xkX2VuZCA9IHZybS1cdTAwM2V2bWEtXHUwMDNldm1fZW5kO1xuIFxuLVx0LyogV2UgYWx3YXlzIGNsZWFyIFZNX0xPQ0tFRFtPTkZBVUxUXSBvbiB0aGUgb2xkIFZNQS4gKi9cbi1cdHZtX2ZsYWdzX2NsZWFyKHZybS1cdTAwM2V2bWEsIFZNX0xPQ0tFRF9NQVNLKTtcbiYjNDM7XHQvKiBXZSBhbHdheXMgY2xlYXIgVk1BX0xPQ0tFRFtPTkZBVUxUXV9CSVQgb24gdGhlIG9sZCBWTUEuICovXG4mIzQzO1x0dm1hX2NsZWFyX2ZsYWdzX21hc2sodnJtLVx1MDAzZXZtYSwgVk1BX0xPQ0tFRF9NQVNLKTtcbiBcbiBcdC8qXG4gXHQgKiBhbm9uX3ZtYSBsaW5rcyBvZiB0aGUgb2xkIHZtYSBpcyBubyBsb25nZXIgbmVlZGVkIGFmdGVyIGl0cyBwYWdlXG5AQCAtMTc2NywxNCAmIzQzOzE3NjksMTQgQEAgc3RhdGljIGludCBjaGVja19wcmVwX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFx0ICogYmFzZWQgb24gdGhlIG9yaWdpbmFsLiAgVGhlcmUgYXJlIG5vIGtub3duIHVzZSBjYXNlcyBmb3IgdGhpc1xuIFx0ICogYmVoYXZpb3IuICBBcyBhIHJlc3VsdCwgZmFpbCBzdWNoIGF0dGVtcHRzLlxuIFx0ICovXG4tXHRpZiAoIW9sZF9sZW4gXHUwMDI2XHUwMDI2ICEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fU0hBUkVEIHwgVk1fTUFZU0hBUkUpKSkge1xuJiM0MztcdGlmICghb2xkX2xlbiBcdTAwMjZcdTAwMjYgIXZtYV90ZXN0X2FueSh2bWEsIFZNQV9TSEFSRURfQklULCBWTUFfTUFZU0hBUkVfQklUKSkge1xuIFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7JXMgKCVkKTogYXR0ZW1wdGVkIHRvIGR1cGxpY2F0ZSBhIHByaXZhdGUgbWFwcGluZyB3aXRoIG1yZW1hcC4gIFRoaXMgaXMgbm90IHN1cHBvcnRlZC5cXG5cJiMzNDssXG4gXHRcdFx0ICAgICBjdXJyZW50LVx1MDAzZWNvbW0sIGN1cnJlbnQtXHUwMDNlcGlkKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRpZiAoKHZybS1cdTAwM2VmbGFncyBcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0KHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0RPTlRFWFBBTkQgfCBWTV9QRk5NQVApKSlcbiYjNDM7XHQgICAgdm1hX3Rlc3RfYW55KHZtYSwgVk1BX0RPTlRFWFBBTkRfQklULCBWTUFfUEZOTUFQX0JJVCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LypcbkBAIC0xODA0LDcgJiM0MzsxODA2LDcgQEAgc3RhdGljIGludCBjaGVja19wcmVwX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qIFdlIGFyZSBleHBhbmRpbmcgYW5kIHRoZSBWTUEgaXMgbWxvY2soKSYjMzk7ZCBzbyB3ZSBuZWVkIHRvIHBvcHVsYXRlLiAqL1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKVxuJiM0MztcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSlcbiBcdFx0dnJtLVx1MDAzZXBvcHVsYXRlX2V4cGFuZCA9IHRydWU7XG4gXG4gXHQvKiBOZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgYSBncm93aW5nIG1hcHBpbmcgKi9cbkBAIC0xODEyLDEwICYjNDM7MTgxNCwxMCBAQCBzdGF0aWMgaW50IGNoZWNrX3ByZXBfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHRpZiAocGdvZmYgJiM0MzsgKG5ld19sZW4gXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpIFx1MDAzYyBwZ29mZilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fRE9OVEVYUEFORCB8IFZNX1BGTk1BUCkpXG4mIzQzO1x0aWYgKHZtYV90ZXN0X2FueSh2bWEsIFZNQV9ET05URVhQQU5EX0JJVCwgVk1BX1BGTk1BUF9CSVQpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbi1cdGlmICghbWxvY2tfZnV0dXJlX29rKG1tLCB2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRCwgdnJtLVx1MDAzZWRlbHRhKSlcbiYjNDM7XHRpZiAoIW1sb2NrX2Z1dHVyZV9vayhtbSwgdm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCksIHZybS1cdTAwM2VkZWx0YSkpXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuIFxuIFx0aWYgKCFtYXlfZXhwYW5kX3ZtKG1tLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MsIHZybS1cdTAwM2VkZWx0YSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkpXG5kaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmNcbmluZGV4IGFkYzBiMGNhOTA2YmRmLi40OThlMDFlZTQwYjA1NiAxMDA2NDRcbi0tLSBhL21tL25vbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL25vbW11LmNcbkBAIC0xMDE0LDExICYjNDM7MTAxNCwxMiBAQCB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBsZW4sXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBwcm90LFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG4tXHRcdFx0dm1fZmxhZ3NfdCB2bV9mbGFncyxcbiYjNDM7XHRcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzLFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgcGdvZmYsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyAqcG9wdWxhdGUsXG4gXHRcdFx0c3RydWN0IGxpc3RfaGVhZCAqdWYpXG4ge1xuJiM0MztcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWFfZmxhZ3NfdG9fbGVnYWN5KHZtYV9mbGFncyk7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdHN0cnVjdCB2bV9yZWdpb24gKnJlZ2lvbjtcbiBcdHN0cnVjdCByYl9ub2RlICpyYjtcbmRpZmYgLS1naXQgYS9tbS91dGlsLmMgYi9tbS91dGlsLmNcbmluZGV4IDUwOTA0NTc1NDJjYTljLi5iZjA1MTNkMWQzZDA4NiAxMDA2NDRcbi0tLSBhL21tL3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXRpbC5jXG5AQCAtNTc4LDggJiM0Mzs1NzgsOCBAQCB1bnNpZ25lZCBsb25nIHZtX21tYXBfcGdvZmYoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmICghcmV0KSB7XG4gXHRcdGlmIChtbWFwX3dyaXRlX2xvY2tfa2lsbGFibGUobW0pKVxuIFx0XHRcdHJldHVybiAtRUlOVFI7XG4tXHRcdHJldCA9IGRvX21tYXAoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFnLCAwLCBwZ29mZiwgXHUwMDI2cG9wdWxhdGUsXG4tXHRcdFx0ICAgICAgXHUwMDI2dWYpO1xuJiM0MztcdFx0cmV0ID0gZG9fbW1hcChmaWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWcsIEVNUFRZX1ZNQV9GTEFHUywgcGdvZmYsXG4mIzQzO1x0XHRcdCAgICAgIFx1MDAyNnBvcHVsYXRlLCBcdTAwMjZ1Zik7XG4gXHRcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcbiBcdFx0dXNlcmZhdWx0ZmRfdW5tYXBfY29tcGxldGUobW0sIFx1MDAyNnVmKTtcbiBcdFx0aWYgKHBvcHVsYXRlKVxuQEAgLTYyNywyMCAmIzQzOzYyNywyMCBAQCBFWFBPUlRfU1lNQk9MKHZtX21tYXApO1xuIHVuc2lnbmVkIGxvbmcgdm1fbW1hcF9zaGFkb3dfc3RhY2sodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncylcbiB7XG4mIzQzO1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gVk1BX1NIQURPV19TVEFDSztcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbiBcdHVuc2lnbmVkIGxvbmcgcmV0LCB1bnVzZWQ7XG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gVk1fU0hBRE9XX1NUQUNLO1xuIFxuIFx0ZmxhZ3MgfD0gTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFO1xuIFx0aWYgKGFkZHIpXG4gXHRcdGZsYWdzIHw9IE1BUF9GSVhFRF9OT1JFUExBQ0U7XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuLVx0XHR2bV9mbGFncyB8PSBWTV9OT0hVR0VQQUdFO1xuJiM0MztcdFx0dm1hX2ZsYWdzX3NldChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9OT0hVR0VQQUdFX0JJVCk7XG4gXG4gXHRtbWFwX3dyaXRlX2xvY2sobW0pO1xuIFx0cmV0ID0gZG9fbW1hcChOVUxMLCBhZGRyLCBsZW4sIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLFxuLVx0XHQgICAgICB2bV9mbGFncywgMCwgXHUwMDI2dW51c2VkLCBOVUxMKTtcbiYjNDM7XHRcdCAgICAgIHZtYV9mbGFncywgMCwgXHUwMDI2dW51c2VkLCBOVUxMKTtcbiBcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcbiBcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuY1xuaW5kZXggOWQ1NTZkMzNiMjRiZDEuLmI1YmMzZWVjOTYxYzc5IDEwMDY0NFxuLS0tIGEvbW0vdm1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5jXG5AQCAtNTYsNyAmIzQzOzU2LDcgQEAgc3RydWN0IG1tYXBfc3RhdGUge1xuIFx0XHQucGdsZW4gPSBQSFlTX1BGTihsZW5fKSxcdFx0XHRcdFxcXG4gXHRcdC52bWFfZmxhZ3MgPSB2bWFfZmxhZ3NfLFx0XHRcdFx0XFxcbiBcdFx0LmZpbGUgPSBmaWxlXyxcdFx0XHRcdFx0XHRcXFxuLVx0XHQucGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hX2ZsYWdzXyksXHRcdFxcXG4mIzQzO1x0XHQucGFnZV9wcm90ID0gdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3NfKSxcdFxcXG4gXHR9XG4gXG4gI2RlZmluZSBWTUdfTU1BUF9TVEFURShuYW1lLCBtYXBfLCB2bWFfKVx0XHRcdFx0XFxcbkBAIC0yMTc2LDcgJiM0MzsyMTc2LDcgQEAgYm9vbCB2bWFfd2FudHNfd3JpdGVub3RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBncHJvdF90IHZtX3BhZ2VfcHJvdClcbiBcdC8qIFRoZSBvcGVuIHJvdXRpbmUgZGlkIHNvbWV0aGluZyB0byB0aGUgcHJvdGVjdGlvbnMgdGhhdCBwZ3Byb3RfbW9kaWZ5XG4gXHQgKiB3b24mIzM5O3QgcHJlc2VydmU/ICovXG4gXHRpZiAocGdwcm90X3ZhbCh2bV9wYWdlX3Byb3QpICE9XG4tXHQgICAgcGdwcm90X3ZhbCh2bV9wZ3Byb3RfbW9kaWZ5KHZtX3BhZ2VfcHJvdCwgdm1hLVx1MDAzZXZtX2ZsYWdzKSkpXG4mIzQzO1x0ICAgIHBncHJvdF92YWwodm1hX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bWEtXHUwMDNlZmxhZ3MpKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LypcbkBAIC0yODgzLDcgJiM0MzsyODgzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuICAqIGZpbGUgdG8gYmUgbWFwcGVkLCBvdGhlcndpc2UgTlVMTC5cbiAgKiBAYWRkcjogVGhlIHBhZ2UtYWxpZ25lZCBhZGRyZXNzIGF0IHdoaWNoIHRvIHBlcmZvcm0gdGhlIG1hcHBpbmcuXG4gICogQGxlbjogVGhlIHBhZ2UtYWxpZ25lZCwgbm9uLXplcm8sIGxlbmd0aCBvZiB0aGUgbWFwcGluZy5cbi0gKiBAdm1fZmxhZ3M6IFRoZSBWTUEgZmxhZ3Mgd2hpY2ggc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIG1hcHBpbmcuXG4mIzQzOyAqIEB2bWFfZmxhZ3M6IFRoZSBWTUEgZmxhZ3Mgd2hpY2ggc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIG1hcHBpbmcuXG4gICogQHBnb2ZmOiBJZiBAZmlsZSBpcyBzcGVjaWZpZWQsIHRoZSBwYWdlIG9mZnNldCBpbnRvIHRoZSBmaWxlLCBpZiBub3QgdGhlblxuICAqIHRoZSB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IGluIG1lbW9yeSBvZiB0aGUgYW5vbnltb3VzIG1hcHBpbmcuXG4gICogQHVmOiBPcHRpb25hbGx5LCBhIHBvaW50ZXIgdG8gYSBsaXN0IGhlYWQgdXNlZCBmb3IgdHJhY2tpbmcgdXNlcmZhdWx0ZmQgdW5tYXBcbkBAIC0yODkzLDEyICYjNDM7Mjg5MywxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX21tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gICogYmVlbiBwZXJmb3JtZWQuXG4gICovXG4gdW5zaWduZWQgbG9uZyBtbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4mIzQzO1x0XHRcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHZtYV9mbGFnc190IHZtYV9mbGFncyxcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHN0cnVjdCBsaXN0X2hlYWQgKnVmKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcmV0O1xuIFx0Ym9vbCB3cml0YWJsZV9maWxlX21hcHBpbmcgPSBmYWxzZTtcbi1cdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3MpO1xuIFxuIFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKGN1cnJlbnQtXHUwMDNlbW0pO1xuIFxuQEAgLTI5MDcsNyAmIzQzOzI5MDYsNyBAQCB1bnNpZ25lZCBsb25nIG1tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFxuIFx0LyogQWxsb3cgYXJjaGl0ZWN0dXJlcyB0byBzYW5pdHktY2hlY2sgdGhlIHZtX2ZsYWdzLiAqL1xuLVx0aWYgKCFhcmNoX3ZhbGlkYXRlX2ZsYWdzKHZtX2ZsYWdzKSlcbiYjNDM7XHRpZiAoIWFyY2hfdmFsaWRhdGVfZmxhZ3Modm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHQvKiBNYXAgd3JpdGFibGUgYW5kIGVuc3VyZSB0aGlzIGlzbiYjMzk7dCBhIHNlYWxlZCBtZW1mZC4gKi9cbkBAIC0zNDIwLDE4ICYjNDM7MzQxOSwyMSBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKl9faW5zdGFsbF9zcGVjaWFsX21hcHBpbmcoXG4gXHR2bV9mbGFnc190IHZtX2ZsYWdzLCB2b2lkICpwcml2LFxuIFx0Y29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICpvcHMpXG4ge1xuLVx0aW50IHJldDtcbiYjNDM7XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSBsZWdhY3lfdG9fdm1hX2ZsYWdzKHZtX2ZsYWdzKTtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHR2bWEgPSB2bV9hcmVhX2FsbG9jKG1tKTtcbi1cdGlmICh1bmxpa2VseSh2bWEgPT0gTlVMTCkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KCF2bWEpKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbi1cdHZtX2ZsYWdzIHw9IG1tLVx1MDAzZWRlZl9mbGFncyB8IFZNX0RPTlRFWFBBTkQ7XG4mIzQzO1x0dm1hX2ZsYWdzX3NldF9tYXNrKFx1MDAyNnZtYV9mbGFncywgbW0tXHUwMDNlZGVmX3ZtYV9mbGFncyk7XG4mIzQzO1x0dm1hX2ZsYWdzX3NldChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9ET05URVhQQU5EX0JJVCk7XG4gXHRpZiAocGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpXG4tXHRcdHZtX2ZsYWdzIHw9IFZNX1NPRlRESVJUWTtcbi1cdHZtX2ZsYWdzX2luaXQodm1hLCB2bV9mbGFncyBcdTAwMjYgflZNX0xPQ0tFRF9NQVNLKTtcbi1cdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4mIzQzO1x0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnZtYV9mbGFncywgVk1BX1NPRlRESVJUWV9CSVQpO1xuJiM0MztcdHZtYV9mbGFnc19jbGVhcl9tYXNrKFx1MDAyNnZtYV9mbGFncywgVk1BX0xPQ0tFRF9NQVNLKTtcbiYjNDM7XHR2bWEtXHUwMDNlZmxhZ3MgPSB2bWFfZmxhZ3M7XG4mIzQzO1x0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gXG4gXHR2bWEtXHUwMDNldm1fb3BzID0gb3BzO1xuIFx0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHByaXY7XG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmggYi9tbS92bWEuaFxuaW5kZXggYWRiN2EwYmExMTkyMDguLjBiYzdkNTIxZTk3Njc3IDEwMDY0NFxuLS0tIGEvbW0vdm1hLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5oXG5AQCAtNTE3LDcgJiM0Mzs1MTcsNyBAQCBpbnQgbW1fdGFrZV9hbGxfbG9ja3Moc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuIHZvaWQgbW1fZHJvcF9hbGxfbG9ja3Moc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuIFxuIHVuc2lnbmVkIGxvbmcgbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0dW5zaWduZWQgbG9uZyBsZW4sIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIHVuc2lnbmVkIGxvbmcgcGdvZmYsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGxlbiwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp1Zik7XG4gXG4gaW50IGRvX2Jya19mbGFncyhzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYnJrdm1hLFxuQEAgLTU0MSw5ICYjNDM7NTQxLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfd2FudHNfbWFudWFsX3B0ZV93cml0ZV91cGdyYWRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfTU1VXG4tc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bV9wZ3Byb3RfbW9kaWZ5KHBncHJvdF90IG9sZHByb3QsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4mIzQzO3N0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX3BncHJvdF9tb2RpZnkocGdwcm90X3Qgb2xkcHJvdCwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbi1cdHJldHVybiBwZ3Byb3RfbW9kaWZ5KG9sZHByb3QsIHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3MpKTtcbiYjNDM7XHRjb25zdCBwZ3Byb3RfdCBwcm90ID0gdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGdwcm90X21vZGlmeShvbGRwcm90LCBwcm90KTtcbiB9XG4gI2VuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvbW0vdm1hX2V4ZWMuYyBiL21tL3ZtYV9leGVjLmNcbmluZGV4IGVmMWZhMmIxNjFmM2JhLi43YWYxMjYwNjg5Yjk3ZSAxMDA2NDRcbi0tLSBhL21tL3ZtYV9leGVjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYV9leGVjLmNcbkBAIC0xMTIsMTUgJiM0MzsxMTIsMTcgQEAgaW50IHJlbG9jYXRlX3ZtYV9kb3duKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHNoaWZ0KVxuIGludCBjcmVhdGVfaW5pdF9zdGFja192bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXG4gXHRcdFx0ICB1bnNpZ25lZCBsb25nICp0b3BfbWVtX3ApXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFZNX1NUQUNLX0ZMQUdTIHwgVk1fU1RBQ0tfSU5DT01QTEVURV9TRVRVUDtcbiYjNDM7XHR2bWFfZmxhZ3NfdCBmbGFncyA9IFZNQV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQO1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIFx0aW50IGVycjtcbi1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1fYXJlYV9hbGxvYyhtbSk7XG4gXG4mIzQzO1x0LyogVk1BX1NUQUNLX0ZMQUdTIGFuZCBWTUFfU1RBQ0tfSU5DT01QTEVURV9TRVRVUCBtdXN0IG5vdCBvdmVybGFwLiAqL1xuJiM0MztcdFZNX1dBUk5fT05fT05DRSh2bWFfZmxhZ3NfdGVzdF9hbnlfbWFzayhcdTAwMjZmbGFncywgVk1BX1NUQUNLX0ZMQUdTKSk7XG4mIzQzO1xuJiM0MztcdHZtYSA9IHZtX2FyZWFfYWxsb2MobW0pO1xuIFx0aWYgKCF2bWEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0dm1hX3NldF9hbm9ueW1vdXModm1hKTtcbi1cbiBcdGlmIChtbWFwX3dyaXRlX2xvY2tfa2lsbGFibGUobW0pKSB7XG4gXHRcdGVyciA9IC1FSU5UUjtcbiBcdFx0Z290byBlcnJfZnJlZTtcbkBAIC0xMzQsMTkgJiM0MzsxMzYsMjEgQEAgaW50IGNyZWF0ZV9pbml0X3N0YWNrX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2tzbTtcbiBcbiYjNDM7XHR2bWFfZmxhZ3Nfc2V0X21hc2soXHUwMDI2ZmxhZ3MsIFZNQV9TVEFDS19GTEFHUyk7XG4mIzQzO1x0dm1hX3NldF9hbm9ueW1vdXModm1hKTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogUGxhY2UgdGhlIHN0YWNrIGF0IHRoZSBsYXJnZXN0IHN0YWNrIGFkZHJlc3MgdGhlIGFyY2hpdGVjdHVyZVxuIFx0ICogc3VwcG9ydHMuIExhdGVyLCB3ZSYjMzk7bGwgbW92ZSB0aGlzIHRvIGFuIGFwcHJvcHJpYXRlIHBsYWNlLiBXZSBkb24mIzM5O3RcbiBcdCAqIHVzZSBTVEFDS19UT1AgYmVjYXVzZSB0aGF0IGNhbiBkZXBlbmQgb24gYXR0cmlidXRlcyB3aGljaCBhcmVuJiMzOTt0XG4gXHQgKiBjb25maWd1cmVkIHlldC5cbiBcdCAqL1xuLVx0Vk1fV0FSTl9PTl9PTkNFKFZNX1NUQUNLX0ZMQUdTIFx1MDAyNiBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQKTtcbiBcdHZtYS1cdTAwM2V2bV9lbmQgPSBTVEFDS19UT1BfTUFYO1xuIFx0dm1hLVx1MDAzZXZtX3N0YXJ0ID0gdm1hLVx1MDAzZXZtX2VuZCAtIFBBR0VfU0laRTtcbiBcdGlmIChwZ3RhYmxlX3N1cHBvcnRzX3NvZnRfZGlydHkoKSlcbi1cdFx0ZmxhZ3MgfD0gVk1fU09GVERJUlRZO1xuLVx0dm1fZmxhZ3NfaW5pdCh2bWEsIGZsYWdzKTtcbi1cdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4mIzQzO1x0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNmZsYWdzLCBWTUFfU09GVERJUlRZX0JJVCk7XG4mIzQzO1x0dm1hLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4mIzQzO1x0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gXG4gXHRlcnIgPSBpbnNlcnRfdm1fc3RydWN0KG1tLCB2bWEpO1xuIFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL21lbWFsbG9jLmMgYi9zb3VuZC9jb3JlL21lbWFsbG9jLmNcbmluZGV4IDkzMjA2NzFkZmNjOGIwLi41YmM3ZTU4NmI0MzBmNSAxMDA2NDRcbi0tLSBhL3NvdW5kL2NvcmUvbWVtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc291bmQvY29yZS9tZW1hbGxvYy5jXG5AQCAtODUxLDcgJiM0Mzs4NTEsNyBAQCBzdGF0aWMgdm9pZCBzbmRfZG1hX25vbmNvaGVyZW50X2ZyZWUoc3RydWN0IHNuZF9kbWFfYnVmZmVyICpkbWFiKVxuIHN0YXRpYyBpbnQgc25kX2RtYV9ub25jb2hlcmVudF9tbWFwKHN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqZG1hYixcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpXG4ge1xuLVx0YXJlYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KGFyZWEtXHUwMDNldm1fZmxhZ3MpO1xuJiM0MztcdGFyZWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3QoYXJlYSk7XG4gXHRyZXR1cm4gZG1hX21tYXBfcGFnZXMoZG1hYi1cdTAwM2VkZXYuZGV2LCBhcmVhLFxuIFx0XHRcdCAgICAgIGFyZWEtXHUwMDNldm1fZW5kIC0gYXJlYS1cdTAwM2V2bV9zdGFydCxcbiBcdFx0XHQgICAgICB2aXJ0X3RvX3BhZ2UoZG1hYi1cdTAwM2VhcmVhKSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcbmluZGV4IDc3M2UyMzMwM2UyNmFmLi42NGYzOGE4MzYxM2U1NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcbkBAIC0yNDUsOCAmIzQzOzI0NSwxMCBAQCBlbnVtIHtcbiAjZGVmaW5lIFZNX1NUQUNLXHRJTklUX1ZNX0ZMQUcoU1RBQ0spXG4gI2lmZGVmIENPTkZJR19TVEFDS19HUk9XU1VQXG4gI2RlZmluZSBWTV9TVEFDS19FQVJMWVx0SU5JVF9WTV9GTEFHKFNUQUNLX0VBUkxZKVxuJiM0MzsjZGVmaW5lIFZNQV9TVEFDS19FQVJMWSBta192bWFfZmxhZ3MoVk1BX1NUQUNLX0VBUkxZX0JJVClcbiAjZWxzZVxuICNkZWZpbmUgVk1fU1RBQ0tfRUFSTFlcdFZNX05PTkVcbiYjNDM7I2RlZmluZSBWTUFfU1RBQ0tfRUFSTFkgRU1QVFlfVk1BX0ZMQUdTXG4gI2VuZGlmXG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19QS0VZU1xuICNkZWZpbmUgVk1fUEtFWV9TSElGVCAoKF9fZm9yY2UgaW50KVZNQV9ISUdIX0FSQ0hfMF9CSVQpXG5AQCAtMzE1LDYgJiM0MzszMTcsOCBAQCBlbnVtIHtcbiBcbiAvKiBCaXRzIHNldCBpbiB0aGUgVk1BIHVudGlsIHRoZSBzdGFjayBpcyBpbiBpdHMgZmluYWwgbG9jYXRpb24gKi9cbiAjZGVmaW5lIFZNX1NUQUNLX0lOQ09NUExFVEVfU0VUVVAgKFZNX1JBTkRfUkVBRCB8IFZNX1NFUV9SRUFEIHwgVk1fU1RBQ0tfRUFSTFkpXG4mIzQzOyNkZWZpbmUgVk1BX1NUQUNLX0lOQ09NUExFVEVfU0VUVVAgYXBwZW5kX3ZtYV9mbGFncyhcdFx0XFxcbiYjNDM7XHRWTUFfU1RBQ0tfRUFSTFksIFZNQV9SQU5EX1JFQURfQklULCBWTUFfU0VRX1JFQURfQklUKVxuIFxuICNkZWZpbmUgVEFTS19FWEVDX0JJVCAoKGN1cnJlbnQtXHUwMDNlcGVyc29uYWxpdHkgXHUwMDI2IFJFQURfSU1QTElFU19FWEVDKSA/IFxcXG4gXHRcdCAgICAgICBWTV9FWEVDX0JJVCA6IFZNX1JFQURfQklUKVxuQEAgLTE0MjQsMjAgJiM0MzsxNDI4LDE4IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX2l0ZXJfbmV4dF9yYW5nZShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkpXG4gfVxuIFxuIGJvb2wgdm1hX3dhbnRzX3dyaXRlbm90aWZ5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ3Byb3RfdCB2bV9wYWdlX3Byb3QpO1xuJiM0MztzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9wZ3Byb3RfbW9kaWZ5KHBncHJvdF90IG9sZHByb3QsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG4gXG4gLyogVXBkYXRlIHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgdG8gcmVmbGVjdCB2bWEtXHUwMDNldm1fZmxhZ3MuICovXG4gc3RhdGljIGlubGluZSB2b2lkIHZtYV9zZXRfcGFnZV9wcm90KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbi1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWEtXHUwMDNldm1fZmxhZ3M7XG4mIzQzO1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gdm1hLVx1MDAzZWZsYWdzO1xuIFx0cGdwcm90X3Qgdm1fcGFnZV9wcm90O1xuIFxuLVx0LyogdGVzdGluZzogd2UgaW5saW5lIHZtX3BncHJvdF9tb2RpZnkoKSB0byBhdm9pZCBjbGFzaCB3aXRoIHZtYS5oLiAqL1xuLVx0dm1fcGFnZV9wcm90ID0gcGdwcm90X21vZGlmeSh2bWEtXHUwMDNldm1fcGFnZV9wcm90LCB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzKSk7XG4tXG4mIzQzO1x0dm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCwgdm1hX2ZsYWdzKTtcbiBcdGlmICh2bWFfd2FudHNfd3JpdGVub3RpZnkodm1hLCB2bV9wYWdlX3Byb3QpKSB7XG4tXHRcdHZtX2ZsYWdzIFx1MDAyNj0gflZNX1NIQVJFRDtcbi1cdFx0LyogdGVzdGluZzogd2UgaW5saW5lIHZtX3BncHJvdF9tb2RpZnkoKSB0byBhdm9pZCBjbGFzaCB3aXRoIHZtYS5oLiAqL1xuLVx0XHR2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfbW9kaWZ5KHZtX3BhZ2VfcHJvdCwgdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFncykpO1xuJiM0MztcdFx0dm1hX2ZsYWdzX2NsZWFyKFx1MDAyNnZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpO1xuJiM0MztcdFx0dm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bWFfZmxhZ3MpO1xuIFx0fVxuIFx0LyogcmVtb3ZlX3Byb3RlY3Rpb25fcHRlcyByZWFkcyB2bWEtXHUwMDNldm1fcGFnZV9wcm90IHdpdGhvdXQgbW1hcF9sb2NrICovXG4gXHRXUklURV9PTkNFKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QsIHZtX3BhZ2VfcHJvdCk7XG5AQCAtMTU0Nyw3ICYjNDM7MTU0OSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGdldF9zeXNjdGxfbWF4X21hcF9jb3VudCh2b2lkKVxuICNkZWZpbmUgcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KClcdElTX0VOQUJMRUQoQ09ORklHX01FTV9TT0ZUX0RJUlRZKVxuICNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2dldF9wYWdlX3Byb3Qodm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuJiM0MztzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9mbGFnc190b19wYWdlX3Byb3Qodm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbiBcdGNvbnN0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWFfZmxhZ3NfdG9fbGVnYWN5KHZtYV9mbGFncyk7XG4gXG5AQCAtMTU3NSwzICYjNDM7MTU3Nyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X2Nhbl9tb2RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRpZiAodm1hX2lzX2F0dGFjaGVkKHZtYSkpXG4gXHRcdHZtYV9hc3NlcnRfd3JpdGVfbG9ja2VkKHZtYSk7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYS1cdTAwM2VmbGFncyk7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMDoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21sb2NrX2ZpeHVwJiMzNDssCiAgICAmIzM0O2FwcGx5X3ZtYV9sb2NrX2ZsYWdzJiMzNDssCiAgICAmIzM0O2FwcGx5X21sb2NrYWxsX2ZsYWdzJiMzNDssCiAgICAmIzM0O3VubWFwX3NvdXJjZV92bWEmIzM0OywKICAgICYjMzQ7Y2hlY2tfcHJlcF92bWEmIzM0OywKICAgICYjMzQ7bWVtZmRfY2hlY2tfc2VhbHNfbW1hcCYjMzQ7LAogICAgJiMzNDtjcmVhdGVfaW5pdF9zdGFja192bWEmIzM0OywKICAgICYjMzQ7dGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtYWpvciByZWZhY3RvcmluZyBvZiBWTUEgZmxhZ3MgaGFuZGxpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCB0cmFuc2l0aW9uaW5nIGZyb20gYHZtX2ZsYWdzX3RgIHRvIGB2bWFfZmxhZ3NfdGAuIEl0IG1vZGlmaWVzIGNyaXRpY2FsIHBhdGhzIGluIG1tYXAsIG1yZW1hcCwgbWxvY2ssIGFuZCBtcHJvdGVjdC4gVGhlc2UgY2hhbmdlcyBmdW5jdGlvbmFsbHkgYWx0ZXIgaG93IFZNQSBmbGFncyBhcmUgc2V0LCBjbGVhcmVkLCBhbmQgdGVzdGVkLCB3aGljaCBjb3VsZCBpbnRyb2R1Y2UgYnVncyBsaWtlIGluY29ycmVjdCBtZW1vcnkgcHJvdGVjdGlvbnMsIGFjY291bnRpbmcgZXJyb3JzLCBvciBsb2NraW5nIGlzc3Vlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGVzZSBmbGFncywgYXZvaWRpbmcgdGhlIGFic29sdXRlIGhvdHRlc3QgcGF0aHMgbGlrZSBgZG9fbW1hcGAgdG8gcHJldmVudCBza2V3ZWQgZGlzdHJpYnV0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2U4ZGUyYmQxMTlkZTczZDk0NjhkYTRlZjdlMzlkOGU4NDc5NGNhZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDEyIDEwOjE0OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC92ZHNvLmMgYi9hcmNoL21pcHMva2VybmVsL3Zkc28uYwppbmRleCBiZDFmYzE3ZDM5NzVkYy4uOTQ4NzM3NzVmYzBmNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdmRzby5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWlwcy9rZXJuZWwvdmRzby5jCkBAIC05MSw4ICYjNDM7OTEsOCBAQCBpbnQgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIGludCB1c2VzX2ludGVycCkKIAogCQkvKiBNYXAgZGVsYXkgc2xvdCBlbXVsYXRpb24gcGFnZSAqLwogCQliYXNlID0gZG9fbW1hcChOVUxMLCBTVEFDS19UT1AsIFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9FWEVDLAotCQkJICAgICAgIE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSB8IE1BUF9GSVhFRCwgMCwgMCwgJmFtcDt1bnVzZWQsCi0JCQkgICAgICAgTlVMTCk7CiYjNDM7CQkJICAgICAgIE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSB8IE1BUF9GSVhFRCwKJiM0MzsJCQkgICAgICAgRU1QVFlfVk1BX0ZMQUdTLCAwLCAmYW1wO3VudXNlZCwgTlVMTCk7CiAJCWlmIChJU19FUlJfVkFMVUUoYmFzZSkpIHsKIAkJCXJldCA9IGJhc2U7CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jIGIvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmMKaW5kZXggMjhiZWM1YmM3ODc5NDkuLjgyMTI3ZTMxZGNhNmRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYwpAQCAtNjU5LDcgJiM0Mzs2NTksOCBAQCB1bnNpZ25lZCBsb25nIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsCiAJdW5zaWduZWQgaW50IHBzaXplOwogCiAJaWYgKHJhZGl4X2VuYWJsZWQoKSkKLQkJcmV0dXJuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTsKJiM0MzsJCXJldHVybiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLAomIzQzOwkJCQkJCSBsZWdhY3lfdG9fdm1hX2ZsYWdzKHZtX2ZsYWdzKSk7CiAKIAlpZiAoZmlscCAmYW1wOyZhbXA7IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKQogCQlwc2l6ZSA9IGZpbGVfdG9fcHNpemUoZmlscCk7CkBAIC02NzksNyAmIzQzOzY4MCw4IEBAIHVuc2lnbmVkIGxvbmcgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLAogCXVuc2lnbmVkIGludCBwc2l6ZTsKIAogCWlmIChyYWRpeF9lbmFibGVkKCkpCi0JCXJldHVybiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oZmlscCwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCB2bV9mbGFncyk7CiYjNDM7CQlyZXR1cm4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKGZpbHAsIGFkZHIwLCBsZW4sCiYjNDM7CQkJCXBnb2ZmLCBmbGFncywgbGVnYWN5X3RvX3ZtYV9mbGFncyh2bV9mbGFncykpOwogCiAJaWYgKGZpbHAgJmFtcDsmYW1wOyBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSkKIAkJcHNpemUgPSBmaWxlX3RvX3BzaXplKGZpbHApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKaW5kZXggZTNlZDY4NGRkY2YyOTEuLjMyYTA1ZDg4OWI5YTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKQEAgLTEyNTIsNyAmIzQzOzEyNTIsNyBAQCBpbnQgZHJtX2dlbV9tbWFwX29iaihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdW5zaWduZWQgbG9uZyBvYmpfc2l6ZSwKIAkJfQogCiAJCXZtX2ZsYWdzX3NldCh2bWEsIFZNX0lPIHwgVk1fUEZOTUFQIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QKTsKLQkJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLSZndDt2bV9mbGFncykpOwomIzQzOwkJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpOwogCQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLSZndDt2bV9wYWdlX3Byb3QpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZG1hX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZG1hX2hlbHBlci5jCmluZGV4IDFjMDBhNzFhYjNjOWQwLi43ZDk2MTIwNzVkMzEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZG1hX2hlbHBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2RtYV9oZWxwZXIuYwpAQCAtNTQwLDcgJiM0Mzs1NDAsNyBAQCBpbnQgZHJtX2dlbV9kbWFfbW1hcChzdHJ1Y3QgZHJtX2dlbV9kbWFfb2JqZWN0ICpkbWFfb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKgogCXZtX2ZsYWdzX21vZCh2bWEsIFZNX0RPTlREVU1QIHwgVk1fRE9OVEVYUEFORCwgVk1fUEZOTUFQKTsKIAogCWlmIChkbWFfb2JqLSZndDttYXBfbm9uY29oZXJlbnQpIHsKLQkJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpOwomIzQzOwkJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpOwogCiAJCXJldCA9IGRtYV9tbWFwX3BhZ2VzKGRybV9kZXZfZG1hX2RldihkbWFfb2JqLSZndDtiYXNlLmRldiksCiAJCQkJICAgICB2bWEsIHZtYS0mZ3Q7dm1fZW5kIC0gdm1hLSZndDt2bV9zdGFydCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMKaW5kZXggYzk4OTQ1OWViMjE1OTEuLjA2ZDAxOWQ1MWQzZTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYwpAQCAtNzY0LDcgJiM0Mzs3NjQsNyBAQCBpbnQgZHJtX2dlbV9zaG1lbV9tbWFwKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdAogCQlyZXR1cm4gcmV0OwogCiAJdm1fZmxhZ3Nfc2V0KHZtYSwgVk1fUEZOTUFQIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QKTsKLQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLSZndDt2bV9mbGFncyk7CiYjNDM7CXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTsKIAlpZiAoc2htZW0tJmd0O21hcF93YykKIAkJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYS0mZ3Q7dm1fcGFnZV9wcm90KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMKaW5kZXggMmU0ZDZkMTE3ZWUyZDguLmY5YzhiN2IyYmZjN2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMKQEAgLTEzMyw3ICYjNDM7MTMzLDcgQEAgc3RhdGljIGludCBldG5hdml2X2dlbV9tbWFwX29iaihzdHJ1Y3QgZXRuYXZpdl9nZW1fb2JqZWN0ICpldG5hdml2X29iaiwKIAogCXZtX2ZsYWdzX3NldCh2bWEsIFZNX1BGTk1BUCB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7CiAKLQl2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpOwomIzQzOwl2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpOwogCiAJaWYgKGV0bmF2aXZfb2JqLSZndDtmbGFncyAmYW1wOyBFVE5BX0JPX1dDKSB7CiAJCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bV9wYWdlX3Byb3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dlbS5jCmluZGV4IDlhNjI3MGYzZGNhNmJmLi4wMjA4YzkyNTk1NzI1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dlbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nZW0uYwpAQCAtMzc3LDEzICYjNDM7Mzc3LDEzIEBAIHN0YXRpYyBpbnQgZXh5bm9zX2RybV9nZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0CiAKIAkvKiBub24tY2FjaGFibGUgYXMgZGVmYXVsdC4gKi8KIAlpZiAoZXh5bm9zX2dlbS0mZ3Q7ZmxhZ3MgJmFtcDsgRVhZTk9TX0JPX0NBQ0hBQkxFKQotCQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLSZndDt2bV9mbGFncyk7CiYjNDM7CQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7CiAJZWxzZSBpZiAoZXh5bm9zX2dlbS0mZ3Q7ZmxhZ3MgJmFtcDsgRVhZTk9TX0JPX1dDKQogCQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9Ci0JCQlwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLSZndDt2bV9mbGFncykpOwomIzQzOwkJCXBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7CiAJZWxzZQogCQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9Ci0JCQlwZ3Byb3Rfbm9uY2FjaGVkKHZtX2dldF9wYWdlX3Byb3Qodm1hLSZndDt2bV9mbGFncykpOwomIzQzOwkJCXBncHJvdF9ub25jYWNoZWQodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7CiAKIAlyZXQgPSBleHlub3NfZHJtX2dlbV9tbWFwX2J1ZmZlcihleHlub3NfZ2VtLCB2bWEpOwogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uYwppbmRleCAwNjQ0Zjg1YzZjOGU1Mi4uOWNhOTBjMWJiNWI0MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9tbWFuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uYwpAQCAtMTEyLDcgJiM0MzsxMTIsNyBAQCBpOTE1X2dlbV9tbWFwX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKIAkJaWYgKHZtYSAmYW1wOyZhbXA7IF9fdm1hX21hdGNoZXModm1hLCBvYmotJmd0O2Jhc2UuZmlscCwgYWRkciwgYXJncy0mZ3Q7c2l6ZSkpCiAJCQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9Ci0JCQkJcGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpKTsKJiM0MzsJCQkJcGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTsKIAkJZWxzZQogCQkJYWRkciA9IC1FTk9NRU07CiAJCW1tYXBfd3JpdGVfdW5sb2NrKG1tKTsKQEAgLTEwMjQsNyAmIzQzOzEwMjQsNyBAQCBpOTE1X2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCWZwdXQoYW5vbik7CiAKIAlpZiAob2JqLSZndDtvcHMtJmd0O21tYXBfb3BzKSB7Ci0JCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpKTsKJiM0MzsJCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTsKIAkJdm1hLSZndDt2bV9vcHMgPSBvYmotJmd0O29wcy0mZ3Q7bW1hcF9vcHM7CiAJCXZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhID0gb2JqLSZndDtiYXNlLnZtYV9ub2RlLmRyaXZlcl9wcml2YXRlOwogCQlyZXR1cm4gMDsKQEAgLTEwMzUsNyAmIzQzOzEwMzUsNyBAQCBpOTE1X2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCXN3aXRjaCAobW1vLSZndDttbWFwX3R5cGUpIHsKIAljYXNlIEk5MTVfTU1BUF9UWVBFX1dDOgogCQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9Ci0JCQlwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLSZndDt2bV9mbGFncykpOwomIzQzOwkJCXBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7CiAJCXZtYS0mZ3Q7dm1fb3BzID0gJmFtcDt2bV9vcHNfY3B1OwogCQlicmVhazsKIApAQCAtMTA0MywxOSAmIzQzOzEwNDMsMTkgQEAgaTkxNV9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJR0VNX1dBUk5fT04oMSk7CiAJCWZhbGx0aHJvdWdoOwogCWNhc2UgSTkxNV9NTUFQX1RZUEVfV0I6Ci0JCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTsKIAkJdm1hLSZndDt2bV9vcHMgPSAmYW1wO3ZtX29wc19jcHU7CiAJCWJyZWFrOwogCiAJY2FzZSBJOTE1X01NQVBfVFlQRV9VQzoKIAkJdm1hLSZndDt2bV9wYWdlX3Byb3QgPQotCQkJcGdwcm90X25vbmNhY2hlZCh2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpKTsKJiM0MzsJCQlwZ3Byb3Rfbm9uY2FjaGVkKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpOwogCQl2bWEtJmd0O3ZtX29wcyA9ICZhbXA7dm1fb3BzX2NwdTsKIAkJYnJlYWs7CiAKIAljYXNlIEk5MTVfTU1BUF9UWVBFX0dUVDoKIAkJdm1hLSZndDt2bV9wYWdlX3Byb3QgPQotCQkJcGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpKTsKJiM0MzsJCQlwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpOwogCQl2bWEtJmd0O3ZtX29wcyA9ICZhbXA7dm1fb3BzX2d0dDsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYwppbmRleCBjYmY3MjNhNWQ4NmZhOS4uNmE3OGUyNDJkZTdjNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jCkBAIC0xMTI1LDcgJiM0MzsxMTI1LDcgQEAgc3RhdGljIGludCBtc21fZ2VtX29iamVjdF9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QKIAlzdHJ1Y3QgbXNtX2dlbV9vYmplY3QgKm1zbV9vYmogPSB0b19tc21fYm8ob2JqKTsKIAogCXZtX2ZsYWdzX3NldCh2bWEsIFZNX1BGTk1BUCB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7Ci0Jdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBtc21fZ2VtX3BncHJvdChtc21fb2JqLCB2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpKTsKJiM0MzsJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBtc21fZ2VtX3BncHJvdChtc21fb2JqLCB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKaW5kZXggMjBkYmEwMmQ2MTc1YmMuLjlhNmVlMmU4ODBjMGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKQEAgLTU1LDcgJiM0Mzs1NSw3IEBAIHN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfdHRtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQlnb3RvIGVycm9yX3VubG9jazsKIAogCW5vdXZlYXVfYm9fZGVsX2lvX3Jlc2VydmVfbHJ1KGJvKTsKLQlwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7CiAJcmV0ID0gdHRtX2JvX3ZtX2ZhdWx0X3Jlc2VydmVkKHZtZiwgcHJvdCwgVFRNX0JPX1ZNX05VTV9QUkVGQVVMVCk7CiAJbm91dmVhdV9ib19hZGRfaW9fcmVzZXJ2ZV9scnUoYm8pOwogCWlmIChyZXQgPT0gVk1fRkFVTFRfUkVUUlkgJmFtcDsmYW1wOyAhKHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYmRldi5jCmluZGV4IGNhM2ZiMTg2YmYxOTU0Li40ODgxNzc3NjQyZDI5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYmRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZmJkZXYuYwpAQCAtODQsNyAmIzQzOzg0LDcgQEAgc3RhdGljIGludCBvbWFwX2ZiZGV2X3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbwogCiBzdGF0aWMgaW50IG9tYXBfZmJkZXZfZmJfbW1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0Jdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLSZndDt2bV9mbGFncykpOwomIzQzOwl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7CiAKIAlyZXR1cm4gZmJfZGVmZXJyZWRfaW9fbW1hcChpbmZvLCB2bWEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZ2VtLmMKaW5kZXggMDA0MDRmYjZjMjlhYWUuLmZiMGU2ZjU1NmIzMTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2dlbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZ2VtLmMKQEAgLTUzOCw5ICYjNDM7NTM4LDkgQEAgc3RhdGljIGludCBvbWFwX2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWMKIAl2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVAgfCBWTV9JTyB8IFZNX01JWEVETUFQKTsKIAogCWlmIChvbWFwX29iai0mZ3Q7ZmxhZ3MgJmFtcDsgT01BUF9CT19XQykgewotCQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKSk7CiYjNDM7CQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7CiAJfSBlbHNlIGlmIChvbWFwX29iai0mZ3Q7ZmxhZ3MgJmFtcDsgT01BUF9CT19VTkNBQ0hFRCkgewotCQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKSk7CiYjNDM7CQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogV2UgZG8gaGF2ZSBzb21lIHByaXZhdGUgb2JqZWN0cywgYXQgbGVhc3QgZm9yIHNjYW5vdXQgYnVmZmVycwpAQCAtNTU4LDcgJiM0Mzs1NTgsNyBAQCBzdGF0aWMgaW50IG9tYXBfZ2VtX29iamVjdF9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1YwogCQl2bWEtJmd0O3ZtX3Bnb2ZmIC09IGRybV92bWFfbm9kZV9zdGFydCgmYW1wO29iai0mZ3Q7dm1hX25vZGUpOwogCQl2bWFfc2V0X2ZpbGUodm1hLCBvYmotJmd0O2ZpbHApOwogCi0JCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTsKIAl9CiAKIAl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLSZndDt2bV9wYWdlX3Byb3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMKaW5kZXggYTFlMmViMWNhN2JiZTYuLjc3MDU1NjM1Mzk2ODcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMKQEAgLTc3Niw3ICYjNDM7Nzc2LDcgQEAgc3RhdGljIGludCBwYW50aG9yX2dlbV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnYKIAl9CiAKIAl2bV9mbGFnc19zZXQodm1hLCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApOwotCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpOwogCWlmIChzaG91bGRfbWFwX3djKGJvKSkKIAkJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYS0mZ3Q7dm1fcGFnZV9wcm90KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmMKaW5kZXggYjE4ODUzOWRjYTBiMjUuLjlhMWRjOWYxMjA3MjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmMKQEAgLTI1NSw3ICYjNDM7MjU1LDcgQEAgc3RhdGljIGludCByb2NrY2hpcF9kcm1fZ2VtX29iamVjdF9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAogCSAqLwogCXZtX2ZsYWdzX21vZCh2bWEsIFZNX0lPIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QLCBWTV9QRk5NQVApOwogCi0Jdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLSZndDt2bV9mbGFncykpOwomIzQzOwl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7CiAJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtYS0mZ3Q7dm1fcGFnZV9wcm90KTsKIAogCWlmIChya19vYmotJmd0O3BhZ2VzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jCmluZGV4IDFkOGQyN2E1ZWE4OWI4Li5mNzZhZjczM2VhNzkzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uYwpAQCAtNjAyLDcgJiM0Mzs2MDIsNyBAQCBpbnQgX190ZWdyYV9nZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAKIAkJdm1hLSZndDt2bV9wZ29mZiA9IHZtX3Bnb2ZmOwogCX0gZWxzZSB7Ci0JCXBncHJvdF90IHByb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpOwomIzQzOwkJcGdwcm90X3QgcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7CiAKIAkJdm1fZmxhZ3NfbW9kKHZtYSwgVk1fTUlYRURNQVAsIFZNX1BGTk1BUCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV92cmFtLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdnJhbS5jCmluZGV4IDRhZTNjYmMzNWRkMzY0Li41NDRhNmFiZGRiYzhiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ZyYW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdnJhbS5jCkBAIC01NSw3ICYjNDM7NTUsNyBAQCBzdGF0aWMgaW50IHZpcnRpb19ncHVfdnJhbV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAogCiAJdm1hLSZndDt2bV9wZ29mZiAtPSBkcm1fdm1hX25vZGVfc3RhcnQoJmFtcDtvYmotJmd0O3ZtYV9ub2RlKTsKIAl2bV9mbGFnc19zZXQodm1hLCBWTV9NSVhFRE1BUCB8IFZNX0RPTlRFWFBBTkQpOwotCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpOwogCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtJmd0O3ZtX3BhZ2VfcHJvdCk7CiAJdm1hLSZndDt2bV9vcHMgPSAmYW1wO3ZpcnRpb19ncHVfdnJhbV92bV9vcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3BhZ2VfZGlydHkuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3BhZ2VfZGlydHkuYwppbmRleCA0NTU2MWJjMWM5ZWZmZS4uYTlmZDQwMTVhMGNhYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3BhZ2VfZGlydHkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9wYWdlX2RpcnR5LmMKQEAgLTQ4MSw3ICYjNDM7NDgxLDcgQEAgdm1fZmF1bHRfdCB2bXdfYm9fdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJaWYgKHZiby0mZ3Q7ZGlydHkgJmFtcDsmYW1wOyB2Ym8tJmd0O2RpcnR5LSZndDttZXRob2QgPT0gVk1XX0JPX0RJUlRZX01LV1JJVEUpCiAJCXByb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgflZNX1NIQVJFRCk7CiAJZWxzZQotCQlwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJCXByb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpOwogCiAJcmV0ID0gdHRtX2JvX3ZtX2ZhdWx0X3Jlc2VydmVkKHZtZiwgcHJvdCwgbnVtX3ByZWZhdWx0KTsKIAlpZiAocmV0ID09IFZNX0ZBVUxUX1JFVFJZICZhbXA7JmFtcDsgISh2bWYtJmd0O2ZsYWdzICZhbXA7IEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuYwppbmRleCBhYmUyNWFlZGVlYWRlZi4uODM4Nzk3Y2M2NWQ3OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmMKQEAgLTI4MSw3ICYjNDM7MjgxLDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgYmFycmllcl9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlwZ3Byb3RfdCBwcm90OwogCWludCBpZHg7CiAKLQlwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7CiAKIAlpZiAoZHJtX2Rldl9lbnRlcihkZXYsICZhbXA7aWR4KSkgewogCQl1bnNpZ25lZCBsb25nIHBmbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9tbWlvX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX21taW9fZ2VtLmMKaW5kZXggOGM4MDNlZjIzM2NjNGQuLjM3NDFhZTYwZjUzMmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfbW1pb19nZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfbW1pb19nZW0uYwpAQCAtMTQ5LDcgJiM0MzsxNDksNyBAQCBzdGF0aWMgaW50IHhlX21taW9fZ2VtX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpiYXNlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKgogCiAJLyogU2V0IHZtX3Bnb2ZmICh1c2VkIGFzIGEgZmFrZSBidWZmZXIgb2Zmc2V0IGJ5IERSTSkgdG8gMCAqLwogCXZtYS0mZ3Q7dm1fcGdvZmYgPSAwOwotCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpKTsKJiM0MzsJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpOwogCXZtX2ZsYWdzX3NldCh2bWEsIFZNX0lPIHwgVk1fUEZOTUFQIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QIHwKIAkJICAgICBWTV9ET05UQ09QWSB8IFZNX05PUkVTRVJWRSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYwppbmRleCBlZWM0YzFkYTNmOWUzMS4uZGQxNTg0NDNmNTVmMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmMKQEAgLTgwLDcgJiM0Mzs4MCw3IEBAIHN0YXRpYyBpbnQgeGVuX2RybV9mcm9udF9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqLAogCSAqIHdoaWNoIGlzIG1hcHBlZCBhcyBOb3JtYWwgSW5uZXIgV3JpdGUtQmFjayBPdXRlciBXcml0ZS1CYWNrCiAJICogSW5uZXItU2hhcmVhYmxlLgogCSAqLwotCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpOwogCiAJLyoKIAkgKiB2bV9vcGVyYXRpb25zX3N0cnVjdC5mYXVsdCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGlmIENQVSBhY2Nlc3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYl9pb19mb3BzLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfaW9fZm9wcy5jCmluZGV4IDZhYjYwZmNkMDA1MDE0Li42ZDBhOGM4ZTE0MWEyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiX2lvX2ZvcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfaW9fZm9wcy5jCkBAIC0xNjEsNyAmIzQzOzE2MSw3IEBAIGludCBmYl9pb19tbWFwKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAkJbGVuID0gaW5mby0mZ3Q7Zml4Lm1taW9fbGVuOwogCX0KIAotCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpOwogCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gcGdwcm90X2ZyYW1lYnVmZmVyKHZtYS0mZ3Q7dm1fcGFnZV9wcm90LCB2bWEtJmd0O3ZtX3N0YXJ0LAogCQkJCQkgICAgICAgdm1hLSZndDt2bV9lbmQsIHN0YXJ0KTsKIApkaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uYwppbmRleCBmNTdmYTIxYTI1MDM1My4uM2RlNTg2ZGExOTdiZDkgMTAwNjQ0Ci0tLSBhL2ZzL2Fpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fpby5jCkBAIC02MDQsNyAmIzQzOzYwNCw3IEBAIHN0YXRpYyBpbnQgYWlvX3NldHVwX3Jpbmcoc3RydWN0IGtpb2N0eCAqY3R4LCB1bnNpZ25lZCBpbnQgbnJfZXZlbnRzKQogCiAJY3R4LSZndDttbWFwX2Jhc2UgPSBkb19tbWFwKGN0eC0mZ3Q7YWlvX3JpbmdfZmlsZSwgMCwgY3R4LSZndDttbWFwX3NpemUsCiAJCQkJIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0JCQkJIE1BUF9TSEFSRUQsIDAsIDAsICZhbXA7dW51c2VkLCBOVUxMKTsKJiM0MzsJCQkJIE1BUF9TSEFSRUQsIEVNUFRZX1ZNQV9GTEFHUywgMCwgJmFtcDt1bnVzZWQsIE5VTEwpOwogCW1tYXBfd3JpdGVfdW5sb2NrKG1tKTsKIAlpZiAoSVNfRVJSKCh2b2lkICopY3R4LSZndDttbWFwX2Jhc2UpKSB7CiAJCWN0eC0mZ3Q7bW1hcF9zaXplID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKaW5kZXggOWZkZGQxZTBiODEzYWIuLjQzMDY2ZjlkZGY1MmQxIDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtMTg0LDcgJiM0MzsxODQsOCBAQCBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKGFkZHIpCiAJCWFkZHIwID0gQUxJR04oYWRkciwgaHVnZV9wYWdlX3NpemUoaCkpOwogCi0JcmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTsKJiM0MzsJcmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywKJiM0MzsJCQkJCSAgICAgRU1QVFlfVk1BX0ZMQUdTKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmgKaW5kZXggY2FlOTdjMzA3MjgwOTcuLjllNDNlMTM4YzBiNzc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaApAQCAtMzkxLDkgJiM0MzszOTEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGhwX2Rpc2FibGVkX2J5X2h3KHZvaWQpCiAKIHVuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLXVuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0Mzt1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQl1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJdm1fZmxhZ3NfdCB2bV9mbGFncyk7CiYjNDM7CQl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpOwogCiBlbnVtIHNwbGl0X3R5cGUgewogCVNQTElUX1RZUEVfVU5JRk9STSwKQEAgLTYxNyw5ICYjNDM7NjE3LDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKICNkZWZpbmUgdGhwX2dldF91bm1hcHBlZF9hcmVhCU5VTEwKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi10aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKQomIzQzO3RocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwKJiM0MzsJCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1mZC5oIGIvaW5jbHVkZS9saW51eC9tZW1mZC5oCmluZGV4IGI0ZmRhMDlkYWI5ZjYxLi5jMTU5ZTQwZTNmMzRhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1mZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtZmQuaApAQCAtMTQsOSAmIzQzOzE0LDkgQEAgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KTsKICAqIHRvIHNlYWxpbmcsIG9yIDAgb3RoZXJ3aXNlLgogICoKICAqIFdlIGFsc28gdXBkYXRlIFZNQSBmbGFncyBpZiBhcHByb3ByaWF0ZSBieSBtYW5pcHVsYXRpbmcgdGhlIFZNQSBmbGFncyBwb2ludGVkCi0gKiB0byBieSB2bV9mbGFnc19wdHIuCiYjNDM7ICogdG8gYnkgdm1hX2ZsYWdzX3B0ci4KICAqLwotaW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzX3B0cik7CiYjNDM7aW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKTsKIHN0cnVjdCBmaWxlICptZW1mZF9hbGxvY19maWxlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBmbGFncyk7CiBpbnQgbWVtZmRfZ2V0X3NlYWxzKHN0cnVjdCBmaWxlICpmaWxlKTsKIGludCBtZW1mZF9hZGRfc2VhbHMoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzZWFscyk7CkBAIC0zMCw3ICYjNDM7MzAsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeCkKIAlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KIHN0YXRpYyBpbmxpbmUgaW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCSB2bV9mbGFnc190ICp2bV9mbGFnc19wdHIpCiYjNDM7CQkJCQkgdm1hX2ZsYWdzX3QgKnZtYV9mbGFnc19wdHIpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggMzJiYjcyM2ZmYmI5MmQuLjU1MGZiOTI5NTdkMTg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC00NDIsOCAmIzQzOzQ0MiwxMCBAQCBlbnVtIHsKICNkZWZpbmUgVk1fU1RBQ0sJSU5JVF9WTV9GTEFHKFNUQUNLKQogI2lmZGVmIENPTkZJR19TVEFDS19HUk9XU1VQCiAjZGVmaW5lIFZNX1NUQUNLX0VBUkxZCUlOSVRfVk1fRkxBRyhTVEFDS19FQVJMWSkKJiM0MzsjZGVmaW5lIFZNQV9TVEFDS19FQVJMWSBta192bWFfZmxhZ3MoVk1BX1NUQUNLX0VBUkxZX0JJVCkKICNlbHNlCiAjZGVmaW5lIFZNX1NUQUNLX0VBUkxZCVZNX05PTkUKJiM0MzsjZGVmaW5lIFZNQV9TVEFDS19FQVJMWSBFTVBUWV9WTUFfRkxBR1MKICNlbmRpZgogI2lmZGVmIENPTkZJR19BUkNIX0hBU19QS0VZUwogI2RlZmluZSBWTV9QS0VZX1NISUZUICgoX19mb3JjZSBpbnQpVk1BX0hJR0hfQVJDSF8wX0JJVCkKQEAgLTQ2NSwxNSAmIzQzOzQ2NywxOCBAQCBlbnVtIHsKICNpZiBkZWZpbmVkKENPTkZJR19YODZfVVNFUl9TSEFET1dfU1RBQ0spIHx8IGRlZmluZWQoQ09ORklHX0FSTTY0X0dDUykgfHwgXAogCWRlZmluZWQoQ09ORklHX1JJU0NWX1VTRVJfQ0ZJKQogI2RlZmluZSBWTV9TSEFET1dfU1RBQ0sJSU5JVF9WTV9GTEFHKFNIQURPV19TVEFDSykKJiM0MzsjZGVmaW5lIFZNQV9TSEFET1dfU1RBQ0sgbWtfdm1hX2ZsYWdzKFZNQV9TSEFET1dfU1RBQ0tfQklUKQogI2RlZmluZSBWTUFfU1RBUlRHQVBfRkxBR1MgbWtfdm1hX2ZsYWdzKFZNQV9HUk9XU0RPV05fQklULCBWTUFfU0hBRE9XX1NUQUNLX0JJVCkKICNlbHNlCiAjZGVmaW5lIFZNX1NIQURPV19TVEFDSwlWTV9OT05FCiYjNDM7I2RlZmluZSBWTUFfU0hBRE9XX1NUQUNLIEVNUFRZX1ZNQV9GTEFHUwogI2RlZmluZSBWTUFfU1RBUlRHQVBfRkxBR1MgbWtfdm1hX2ZsYWdzKFZNQV9HUk9XU0RPV05fQklUKQogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpCiAjZGVmaW5lIFZNX1NBTwkJSU5JVF9WTV9GTEFHKFNBTykKICNlbGlmIGRlZmluZWQoQ09ORklHX1BBUklTQykKICNkZWZpbmUgVk1fR1JPV1NVUAlJTklUX1ZNX0ZMQUcoR1JPV1NVUCkKJiM0MzsjZGVmaW5lIFZNQV9HUk9XU1VQCW1rX3ZtYV9mbGFncyhWTUFfR1JPV1NVUF9CSVQpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TUEFSQzY0KQogI2RlZmluZSBWTV9TUEFSQ19BREkJSU5JVF9WTV9GTEFHKFNQQVJDX0FESSkKICNkZWZpbmUgVk1fQVJDSF9DTEVBUglJTklUX1ZNX0ZMQUcoQVJDSF9DTEVBUikKQEAgLTQ4NSw2ICYjNDM7NDkwLDcgQEAgZW51bSB7CiAjZW5kaWYKICNpZm5kZWYgVk1fR1JPV1NVUAogI2RlZmluZSBWTV9HUk9XU1VQCVZNX05PTkUKJiM0MzsjZGVmaW5lIFZNQV9HUk9XU1VQCUVNUFRZX1ZNQV9GTEFHUwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSTTY0X01URQogI2RlZmluZSBWTV9NVEUJCUlOSVRfVk1fRkxBRyhNVEUpCkBAIC01NDAsNiAmIzQzOzU0Niw4IEBAIGVudW0gewogCiAvKiBCaXRzIHNldCBpbiB0aGUgVk1BIHVudGlsIHRoZSBzdGFjayBpcyBpbiBpdHMgZmluYWwgbG9jYXRpb24gKi8KICNkZWZpbmUgVk1fU1RBQ0tfSU5DT01QTEVURV9TRVRVUCAoVk1fUkFORF9SRUFEIHwgVk1fU0VRX1JFQUQgfCBWTV9TVEFDS19FQVJMWSkKJiM0MzsjZGVmaW5lIFZNQV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQIGFwcGVuZF92bWFfZmxhZ3MoCQlcCiYjNDM7CVZNQV9TVEFDS19FQVJMWSwgVk1BX1JBTkRfUkVBRF9CSVQsIFZNQV9TRVFfUkVBRF9CSVQpCiAKICNkZWZpbmUgVEFTS19FWEVDX0JJVCAoKGN1cnJlbnQtJmd0O3BlcnNvbmFsaXR5ICZhbXA7IFJFQURfSU1QTElFU19FWEVDKSA/IFwKIAkJICAgICAgIFZNQV9FWEVDX0JJVCA6IFZNQV9SRUFEX0JJVCkKQEAgLTE1NzgsMTEgJiM0MzsxNTg2LDI0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfaW5pdGlhbF9zdGFjayhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAkJdm1hLSZndDt2bV9lbmQgJmd0Oz0gdm1hLSZndDt2bV9tbS0mZ3Q7c3RhcnRfc3RhY2s7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfdGVtcG9yYXJ5X3N0YWNrKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB2bWFfZmxhZ3NfY2FuX2dyb3coY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzKQogewotCWludCBtYXliZV9zdGFjayA9IHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgKFZNX0dST1dTRE9XTiB8IFZNX0dST1dTVVApOwomIzQzOwlpZiAodm1hX2ZsYWdzX3Rlc3Rfc2luZ2xlX21hc2soZmxhZ3MsIFZNQV9HUk9XU1VQKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAodm1hX2ZsYWdzX3Rlc3QoZmxhZ3MsIFZNQV9HUk9XU0RPV05fQklUKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB2bWFfY2FuX2dyb3coY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiYjNDM7ewomIzQzOwlyZXR1cm4gdm1hX2ZsYWdzX2Nhbl9ncm93KCZhbXA7dm1hLSZndDtmbGFncyk7CiYjNDM7fQogCi0JaWYgKCFtYXliZV9zdGFjaykKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX3RlbXBvcmFyeV9zdGFjayhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CWlmICghdm1hX2Nhbl9ncm93KHZtYSkpCiAJCXJldHVybiBmYWxzZTsKIAogCWlmICgodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQKSA9PQpAQCAtNDE3NCwxOCAmIzQzOzQxOTUsMjAgQEAgdW5zaWduZWQgbG9uZyByYW5kb21pemVfcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHJhbmdlKTsKIAogdW5zaWduZWQgbG9uZwogX19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKLQkJICAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpOwomIzQzOwkJICAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiYjNDM7CQkgICAgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCiBnZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXJldHVybiBfX2dldF91bm1hcHBlZF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTsKJiM0MzsJcmV0dXJuIF9fZ2V0X3VubWFwcGVkX2FyZWEoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsCiYjNDM7CQkJCSAgIEVNUFRZX1ZNQV9GTEFHUyk7CiB9CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0Mzt1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAl1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLAotCXZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgKnBvcHVsYXRlLAomIzQzOwl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgKnBvcHVsYXRlLAogCXN0cnVjdCBsaXN0X2hlYWQgKnVmKTsKIGV4dGVybiBpbnQgZG9fdm1pX211bm1hcChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sIHN0cnVjdCBsaXN0X2hlYWQgKnVmLApAQCAtNDU4NCwyNiAmIzQzOzQ2MDcsMzUgQEAgc3RhdGljIGlubGluZSBib29sIHJhbmdlX2luX3ZtYV9kZXNjKGNvbnN0IHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MsCiAjaWZkZWYgQ09ORklHX01NVQogcGdwcm90X3Qgdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFnc190IHZtX2ZsYWdzKTsKIAotc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiYjNDM7c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncykKIHsKIAljb25zdCB2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpOwogCiAJcmV0dXJuIHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3MpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CXJldHVybiB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYS0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKIHZvaWQgdm1hX3NldF9wYWdlX3Byb3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFnc190IHZtX2ZsYWdzKQogewogCXJldHVybiBfX3BncHJvdCgwKTsKIH0KLXN0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2dldF9wYWdlX3Byb3Qodm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKQomIzQzO3N0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19wZ3Byb3QoMCk7CiYjNDM7fQomIzQzO3N0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2dldF9wYWdlX3Byb3QoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJcmV0dXJuIF9fcGdwcm90KDApOwogfQogc3RhdGljIGlubGluZSB2b2lkIHZtYV9zZXRfcGFnZV9wcm90KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtJmd0O3ZtX2ZsYWdzKTsKJiM0MzsJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaAppbmRleCA5NWQwMDQwZGY1ODQxMy4uMTBiZThhNTRiNDE2ZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgKQEAgLTE5MywyMSAmIzQzOzE5MywxOCBAQCB1bnNpZ25lZCBsb25nIG1tX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAKLXVuc2lnbmVkIGxvbmcgbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIGxlbiwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBwZ29mZiwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJCQkJICAgdm1fZmxhZ3NfdCB2bV9mbGFncyk7CiYjNDM7dW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpOwogCiB1bnNpZ25lZCBsb25nCiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLAotCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKTsKJiM0MzsJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7CiB1bnNpZ25lZCBsb25nCiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLAotCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncyk7CiYjNDM7CQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9waWNrX21tYXBfbGF5b3V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkgY29uc3Qgc3RydWN0IHJsaW1pdCAqcmxpbV9zdGFjaykge30KZGlmZiAtLWdpdCBhL2lwYy9zaG0uYyBiL2lwYy9zaG0uYwppbmRleCBiM2U4YTU4ZTE3N2QzYi4uYmIxYTcyMWEzZTc0NmUgMTAwNjQ0Ci0tLSBhL2lwYy9zaG0uYwomIzQzOyYjNDM7JiM0MzsgYi9pcGMvc2htLmMKQEAgLTE2NjEsNyAmIzQzOzE2NjEsOCBAQCBsb25nIGRvX3NobWF0KGludCBzaG1pZCwgY2hhciBfX3VzZXIgKnNobWFkZHIsIGludCBzaG1mbGcsCiAJCQlnb3RvIGludmFsaWQ7CiAJfQogCi0JYWRkciA9IGRvX21tYXAoZmlsZSwgYWRkciwgc2l6ZSwgcHJvdCwgZmxhZ3MsIDAsIDAsICZhbXA7cG9wdWxhdGUsIE5VTEwpOwomIzQzOwlhZGRyID0gZG9fbW1hcChmaWxlLCBhZGRyLCBzaXplLCBwcm90LCBmbGFncywgRU1QVFlfVk1BX0ZMQUdTLCAwLAomIzQzOwkJICAgICAgICZhbXA7cG9wdWxhdGUsIE5VTEwpOwogCSpyYWRkciA9IGFkZHI7CiAJZXJyID0gMDsKIAlpZiAoSVNfRVJSX1ZBTFVFKGFkZHIpKQpkaWZmIC0tZ2l0IGEvbW0vZGVidWcuYyBiL21tL2RlYnVnLmMKaW5kZXggNDk3NjU0YjM2ZjFhYjUuLjlhMDI5N2IzOTg4ZDg5IDEwMDY0NAotLS0gYS9tbS9kZWJ1Zy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RlYnVnLmMKQEAgLTE5Nyw3ICYjNDM7MTk3LDcgQEAgdm9pZCBkdW1wX21tKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCQkmIzM0O251bWFfbmV4dF9zY2FuICVsdSBudW1hX3NjYW5fb2Zmc2V0ICVsdSBudW1hX3NjYW5fc2VxICVkXG4mIzM0OwogI2VuZGlmCiAJCSYjMzQ7dGxiX2ZsdXNoX3BlbmRpbmcgJWRcbiYjMzQ7Ci0JCSYjMzQ7ZGVmX2ZsYWdzOiAlI2x4KCVwR3YpXG4mIzM0OywKJiM0MzsJCSYjMzQ7ZGVmX2ZsYWdzOiAlKnBiKCVwR3YpXG4mIzM0OywKIAogCQltbSwgbW0tJmd0O3Rhc2tfc2l6ZSwKIAkJbW0tJmd0O21tYXBfYmFzZSwgbW0tJmd0O21tYXBfbGVnYWN5X2Jhc2UsCkBAIC0yMjYsNyAmIzQzOzIyNiw4IEBAIHZvaWQgZHVtcF9tbShjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAkJbW0tJmd0O251bWFfbmV4dF9zY2FuLCBtbS0mZ3Q7bnVtYV9zY2FuX29mZnNldCwgbW0tJmd0O251bWFfc2Nhbl9zZXEsCiAjZW5kaWYKIAkJYXRvbWljX3JlYWQoJmFtcDttbS0mZ3Q7dGxiX2ZsdXNoX3BlbmRpbmcpLAotCQltbS0mZ3Q7ZGVmX2ZsYWdzLCAmYW1wO21tLSZndDtkZWZfZmxhZ3MKJiM0MzsJCU5VTV9WTUFfRkxBR19CSVRTLCBtbS0mZ3Q7ZGVmX3ZtYV9mbGFncy5fX3ZtYV9mbGFncywKJiM0MzsJCSZhbXA7bW0tJmd0O2RlZl92bWFfZmxhZ3MKIAkpOwogfQogRVhQT1JUX1NZTUJPTChkdW1wX21tKTsKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDBkYzZkNjMwNTcwZmFmLi40MGQ2YjQwNzhlM2Q0MyAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0xMTk2LDcgJiM0MzsxMTk2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJbG9mZl90IG9mZiwgdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBzaXplLAotCQl2bV9mbGFnc190IHZtX2ZsYWdzKQomIzQzOwkJdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKQogewogCWxvZmZfdCBvZmZfZW5kID0gb2ZmICYjNDM7IGxlbjsKIAlsb2ZmX3Qgb2ZmX2FsaWduID0gcm91bmRfdXAob2ZmLCBzaXplKTsKQEAgLTEyMTIsOCAmIzQzOzEyMTIsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwKIAlpZiAobGVuX3BhZCAmbHQ7IGxlbiB8fCAob2ZmICYjNDM7IGxlbl9wYWQpICZsdDsgb2ZmKQogCQlyZXR1cm4gMDsKIAotCXJldCA9IG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlscCwgYWRkciwgbGVuX3BhZCwKLQkJCQkJICAgb2ZmICZndDsmZ3Q7IFBBR0VfU0hJRlQsIGZsYWdzLCB2bV9mbGFncyk7CiYjNDM7CXJldCA9IG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbHAsIGFkZHIsIGxlbl9wYWQsCiYjNDM7CQkJCQkgICAgb2ZmICZndDsmZ3Q7IFBBR0VfU0hJRlQsIGZsYWdzLAomIzQzOwkJCQkJICAgIHZtYV9mbGFncyk7CiAKIAkvKgogCSAqIFRoZSBmYWlsdXJlIG1pZ2h0IGJlIGR1ZSB0byBsZW5ndGggcGFkZGluZy4gVGhlIGNhbGxlciB3aWxsIHJldHJ5CkBAIC0xMjM4LDI1ICYjNDM7MTIzOSwyNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwKIAlyZXR1cm4gcmV0OwogfQogCi11bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7dW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0JCXZtX2ZsYWdzX3Qgdm1fZmxhZ3MpCiYjNDM7CQl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyByZXQ7CiAJbG9mZl90IG9mZiA9IChsb2ZmX3QpcGdvZmYgJmx0OyZsdDsgUEFHRV9TSElGVDsKIAotCXJldCA9IF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgb2ZmLCBmbGFncywgUE1EX1NJWkUsIHZtX2ZsYWdzKTsKJiM0MzsJcmV0ID0gX190aHBfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBvZmYsIGZsYWdzLCBQTURfU0laRSwKJiM0MzsJCQkJICAgICAgdm1hX2ZsYWdzKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsCi0JCQkJCSAgICB2bV9mbGFncyk7CiYjNDM7CXJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywKJiM0MzsJCQkJCSAgICAgdm1hX2ZsYWdzKTsKIH0KIAogdW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0JcmV0dXJuIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTsKJiM0MzsJcmV0dXJuIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywKJiM0MzsJCQkJCSAgICAgIEVNUFRZX1ZNQV9GTEFHUyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0aHBfZ2V0X3VubWFwcGVkX2FyZWEpOwogCmRpZmYgLS1naXQgYS9tbS9tZW1mZC5jIGIvbW0vbWVtZmQuYwppbmRleCA2YzcyZmU2Y2FlZjc1ZC4uYzcwOGQ5MjUzM2Y0YWIgMTAwNjQ0Ci0tLSBhL21tL21lbWZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtZmQuYwpAQCAtMzcwLDM5ICYjNDM7MzcwLDM2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc193cml0ZV9zZWFsZWQodW5zaWduZWQgaW50IHNlYWxzKQogCXJldHVybiBzZWFscyAmYW1wOyAoRl9TRUFMX1dSSVRFIHwgRl9TRUFMX0ZVVFVSRV9XUklURSk7CiB9CiAKLXN0YXRpYyBpbnQgY2hlY2tfd3JpdGVfc2VhbCh2bV9mbGFnc190ICp2bV9mbGFnc19wdHIpCiYjNDM7c3RhdGljIGludCBjaGVja193cml0ZV9zZWFsKHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKQogewotCXZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSAqdm1fZmxhZ3NfcHRyOwotCXZtX2ZsYWdzX3QgbWFzayA9IHZtX2ZsYWdzICZhbXA7IChWTV9TSEFSRUQgfCBWTV9XUklURSk7Ci0KIAkvKiBJZiBhIHByaXZhdGUgbWFwcGluZyB0aGVuIHdyaXRhYmlsaXR5IGlzIGlycmVsZXZhbnQuICovCi0JaWYgKCEobWFzayAmYW1wOyBWTV9TSEFSRUQpKQomIzQzOwlpZiAoIXZtYV9mbGFnc190ZXN0KHZtYV9mbGFnc19wdHIsIFZNQV9TSEFSRURfQklUKSkKIAkJcmV0dXJuIDA7CiAKIAkvKgogCSAqIE5ldyBQUk9UX1dSSVRFIGFuZCBNQVBfU0hBUkVEIG1tYXBzIGFyZSBub3QgYWxsb3dlZCB3aGVuCiAJICogd3JpdGUgc2VhbHMgYXJlIGFjdGl2ZS4KIAkgKi8KLQlpZiAobWFzayAmYW1wOyBWTV9XUklURSkKJiM0MzsJaWYgKHZtYV9mbGFnc190ZXN0KHZtYV9mbGFnc19wdHIsIFZNQV9XUklURV9CSVQpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJLyoKIAkgKiBUaGlzIGlzIGEgcmVhZC1vbmx5IG1hcHBpbmcsIGRpc2FsbG93IG1wcm90ZWN0KCkgZnJvbSBtYWtpbmcgYQogCSAqIHdyaXRlLXNlYWxlZCBtYXBwaW5nIHdyaXRhYmxlIGluIGZ1dHVyZS4KIAkgKi8KLQkqdm1fZmxhZ3NfcHRyICZhbXA7PSB+Vk1fTUFZV1JJVEU7CiYjNDM7CXZtYV9mbGFnc19jbGVhcih2bWFfZmxhZ3NfcHRyLCBWTUFfTUFZV1JJVEVfQklUKTsKIAogCXJldHVybiAwOwogfQogCi1pbnQgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3NfcHRyKQomIzQzO2ludCBtZW1mZF9jaGVja19zZWFsc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzX3B0cikKIHsKIAlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBpbnQgKnNlYWxzX3B0ciA9IG1lbWZkX2ZpbGVfc2VhbHNfcHRyKGZpbGUpOwogCXVuc2lnbmVkIGludCBzZWFscyA9IHNlYWxzX3B0ciA/ICpzZWFsc19wdHIgOiAwOwogCiAJaWYgKGlzX3dyaXRlX3NlYWxlZChzZWFscykpCi0JCWVyciA9IGNoZWNrX3dyaXRlX3NlYWwodm1fZmxhZ3NfcHRyKTsKJiM0MzsJCWVyciA9IGNoZWNrX3dyaXRlX3NlYWwodm1hX2ZsYWdzX3B0cik7CiAKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbW0vbWxvY2suYyBiL21tL21sb2NrLmMKaW5kZXggOTdlNDkwMzhkOGQzM2UuLmVmYTY3MTZlNGRmYmRmIDEwMDY0NAotLS0gYS9tbS9tbG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21sb2NrLmMKQEAgLTMyOSw3ICYjNDM7MzI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFsbG93X21sb2NrX211bmxvY2soc3RydWN0IGZvbGlvICpmb2xpbywKIAkgKiBiZSBzcGxpdC4gQW5kIHRoZSBwYWdlcyBhcmUgbm90IGluIFZNX0xPQ0tlZCBWTUEKIAkgKiBjYW4gYmUgcmVjbGFpbWVkLgogCSAqLwotCWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fTE9DS0VEKSkKJiM0MzsJaWYgKCF2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSkKIAkJcmV0dXJuIHRydWU7CiAKIAkvKiBmb2xpb193aXRoaW5fcmFuZ2UoKSBjYW5ub3QgdGFrZSBLU00sIGJ1dCBhbnkgc21hbGwgZm9saW8gaXMgT0sgKi8KQEAgLTM2OCw3ICYjNDM7MzY4LDcgQEAgc3RhdGljIGludCBtbG9ja19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlmb2xpbyA9IHBtZF9mb2xpbygqcG1kKTsKIAkJaWYgKGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSkKIAkJCWdvdG8gb3V0OwotCQlpZiAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9MT0NLRUQpCiYjNDM7CQlpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpCiAJCQltbG9ja19mb2xpbyhmb2xpbyk7CiAJCWVsc2UKIAkJCW11bmxvY2tfZm9saW8oZm9saW8pOwpAQCAtMzkzLDcgJiM0MzszOTMsNyBAQCBzdGF0aWMgaW50IG1sb2NrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCWlmICghYWxsb3dfbWxvY2tfbXVubG9jayhmb2xpbywgdm1hLCBzdGFydCwgZW5kLCBzdGVwKSkKIAkJCWdvdG8gbmV4dF9lbnRyeTsKIAotCQlpZiAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9MT0NLRUQpCiYjNDM7CQlpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpCiAJCQltbG9ja19mb2xpbyhmb2xpbyk7CiAJCWVsc2UKIAkJCW11bmxvY2tfZm9saW8oZm9saW8pOwpAQCAtNDE3LDggJiM0Mzs0MTcsOCBAQCBzdGF0aWMgaW50IG1sb2NrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAgKiBAZW5kIC0gZW5kIG9mIHJhbmdlIGluIEB2bWEKICAqIEBuZXdfdm1hX2ZsYWdzIC0gdGhlIG5ldyBzZXQgb2YgZmxhZ3MgZm9yIEB2bWEuCiAgKgotICogQ2FsbGVkIGZvciBtbG9jaygpLCBtbG9jazIoKSBhbmQgbWxvY2thbGwoKSwgdG8gc2V0IEB2bWEgVk1fTE9DS0VEOwotICogY2FsbGVkIGZvciBtdW5sb2NrKCkgYW5kIG11bmxvY2thbGwoKSwgdG8gY2xlYXIgVk1fTE9DS0VEIGZyb20gQHZtYS4KJiM0MzsgKiBDYWxsZWQgZm9yIG1sb2NrKCksIG1sb2NrMigpIGFuZCBtbG9ja2FsbCgpLCB0byBzZXQgQHZtYSBWTUFfTE9DS0VEX0JJVDsKJiM0MzsgKiBjYWxsZWQgZm9yIG11bmxvY2soKSBhbmQgbXVubG9ja2FsbCgpLCB0byBjbGVhciBWTUFfTE9DS0VEX0JJVCBmcm9tIEB2bWEuCiAgKi8KIHN0YXRpYyB2b2lkIG1sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKQEAgLTQzMSwxNCAmIzQzOzQzMSwxNCBAQCBzdGF0aWMgdm9pZCBtbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAKIAkvKgogCSAqIFRoZXJlIGlzIGEgc2xpZ2h0IGNoYW5jZSB0aGF0IGNvbmN1cnJlbnQgcGFnZSBtaWdyYXRpb24sCi0JICogb3IgcGFnZSByZWNsYWltIGZpbmRpbmcgYSBwYWdlIG9mIHRoaXMgbm93LVZNX0xPQ0tFRCB2bWEsCiYjNDM7CSAqIG9yIHBhZ2UgcmVjbGFpbSBmaW5kaW5nIGEgcGFnZSBvZiB0aGlzIG5vdy1WTUFfTE9DS0VEX0JJVCB2bWEsCiAJICogd2lsbCBjYWxsIG1sb2NrX3ZtYV9mb2xpbygpIGFuZCByYWlzZSBwYWdlJiMzOTtzIG1sb2NrX2NvdW50OgogCSAqIGRvdWJsZSBjb3VudGluZywgbGVhdmluZyB0aGUgcGFnZSB1bmV2aWN0YWJsZSBpbmRlZmluaXRlbHkuCi0JICogQ29tbXVuaWNhdGUgdGhpcyBkYW5nZXIgdG8gbWxvY2tfdm1hX2ZvbGlvKCkgd2l0aCBWTV9JTywKLQkgKiB3aGljaCBpcyBhIFZNX1NQRUNJQUwgZmxhZyBub3QgYWxsb3dlZCBvbiBWTV9MT0NLRUQgdm1hcy4KJiM0MzsJICogQ29tbXVuaWNhdGUgdGhpcyBkYW5nZXIgdG8gbWxvY2tfdm1hX2ZvbGlvKCkgd2l0aCBWTUFfSU9fQklULAomIzQzOwkgKiB3aGljaCBpcyBhIFZNQV9TUEVDSUFMX0ZMQUdTIGZsYWcgbm90IGFsbG93ZWQgb24gVk1BX0xPQ0tFRF9CSVQgdm1hcy4KIAkgKiBtbWFwX2xvY2sgaXMgaGVsZCBpbiB3cml0ZSBtb2RlIGhlcmUsIHNvIHRoaXMgd2VpcmQKIAkgKiBjb21iaW5hdGlvbiBzaG91bGQgbm90IGJlIHZpc2libGUgdG8gb3RoZXIgbW1hcF9sb2NrIHVzZXJzOwotCSAqIGJ1dCBXUklURV9PTkNFIHNvIHJtYXAgd2Fsa2VycyBtdXN0IHNlZSBWTV9JTyBpZiBWTV9MT0NLRUQuCiYjNDM7CSAqIGJ1dCBXUklURV9PTkNFIHNvIHJtYXAgd2Fsa2VycyBtdXN0IHNlZSBWTUFfSU9fQklUIGlmIFZNQV9MT0NLRURfQklULgogCSAqLwogCWlmICh2bWFfZmxhZ3NfdGVzdChuZXdfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpCiAJCXZtYV9mbGFnc19zZXQobmV3X3ZtYV9mbGFncywgVk1BX0lPX0JJVCk7CkBAIC00NTgsNyAmIzQzOzQ1OCw3IEBAIHN0YXRpYyB2b2lkIG1sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIC8qCiAgKiBtbG9ja19maXh1cCAgLSBoYW5kbGUgbWxvY2tbYWxsXS9tdW5sb2NrW2FsbF0gcmVxdWVzdHMuCiAgKgotICogRmlsdGVycyBvdXQgJiMzNDtzcGVjaWFsJiMzNDsgdm1hcyAtLSBWTV9MT0NLRUQgbmV2ZXIgZ2V0cyBzZXQgZm9yIHRoZXNlLCBhbmQKJiM0MzsgKiBGaWx0ZXJzIG91dCAmIzM0O3NwZWNpYWwmIzM0OyB2bWFzIC0tIFZNQV9MT0NLRURfQklUIG5ldmVyIGdldHMgc2V0IGZvciB0aGVzZSwgYW5kCiAgKiBtdW5sb2NrIGlzIGEgbm8tb3AuICBIb3dldmVyLCBmb3Igc29tZSBzcGVjaWFsIHZtYXMsIHdlIGdvIGFoZWFkIGFuZAogICogcG9wdWxhdGUgdGhlIHB0ZXMuCiAgKgpAQCAtNDY2LDI0ICYjNDM7NDY2LDIzIEBAIHN0YXRpYyB2b2lkIG1sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKICAqLwogc3RhdGljIGludCBtbG9ja19maXh1cChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCSAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKipwcmV2LCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgdm1fZmxhZ3NfdCBuZXdmbGFncykKJiM0MzsJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB2bWFfZmxhZ3NfdCAqbmV3X3ZtYV9mbGFncykKIHsKLQl2bWFfZmxhZ3NfdCBuZXdfdm1hX2ZsYWdzID0gbGVnYWN5X3RvX3ZtYV9mbGFncyhuZXdmbGFncyk7CiAJY29uc3Qgdm1hX2ZsYWdzX3Qgb2xkX3ZtYV9mbGFncyA9IHZtYS0mZ3Q7ZmxhZ3M7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtJmd0O3ZtX21tOwogCWludCBucl9wYWdlczsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICh2bWFfZmxhZ3Nfc2FtZV9wYWlyKCZhbXA7b2xkX3ZtYV9mbGFncywgJmFtcDtuZXdfdm1hX2ZsYWdzKSB8fAomIzQzOwlpZiAodm1hX2ZsYWdzX3NhbWVfcGFpcigmYW1wO29sZF92bWFfZmxhZ3MsIG5ld192bWFfZmxhZ3MpIHx8CiAJICAgIHZtYV9pc19zZWNyZXRtZW0odm1hKSB8fCAhdm1hX3N1cHBvcnRzX21sb2NrKHZtYSkpIHsKIAkJLyoKLQkJICogRG9uJiMzOTt0IHNldCBWTV9MT0NLRUQgb3IgVk1fTE9DS09ORkFVTFQgYW5kIGRvbiYjMzk7dCBjb3VudC4KLQkJICogRm9yIHNlY3JldG1lbSwgZG9uJiMzOTt0IGFsbG93IHRoZSBtZW1vcnkgdG8gYmUgdW5sb2NrZWQuCiYjNDM7CQkgKiBEb24mIzM5O3Qgc2V0IFZNQV9MT0NLRURfQklUIG9yIFZNQV9MT0NLT05GQVVMVF9CSVQgYW5kIGRvbiYjMzk7dAomIzQzOwkJICogY291bnQuICBGb3Igc2VjcmV0bWVtLCBkb24mIzM5O3QgYWxsb3cgdGhlIG1lbW9yeSB0byBiZSB1bmxvY2tlZC4KIAkJICovCiAJCWdvdG8gb3V0OwogCX0KIAotCXZtYSA9IHZtYV9tb2RpZnlfZmxhZ3Modm1pLCAqcHJldiwgdm1hLCBzdGFydCwgZW5kLCAmYW1wO25ld192bWFfZmxhZ3MpOwomIzQzOwl2bWEgPSB2bWFfbW9kaWZ5X2ZsYWdzKHZtaSwgKnByZXYsIHZtYSwgc3RhcnQsIGVuZCwgbmV3X3ZtYV9mbGFncyk7CiAJaWYgKElTX0VSUih2bWEpKSB7CiAJCXJldCA9IFBUUl9FUlIodm1hKTsKIAkJZ290byBvdXQ7CkBAIC00OTMsNyAmIzQzOzQ5Miw3IEBAIHN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkgKiBLZWVwIHRyYWNrIG9mIGFtb3VudCBvZiBsb2NrZWQgVk0uCiAJICovCiAJbnJfcGFnZXMgPSAoZW5kIC0gc3RhcnQpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7Ci0JaWYgKCF2bWFfZmxhZ3NfdGVzdCgmYW1wO25ld192bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSkKJiM0MzsJaWYgKCF2bWFfZmxhZ3NfdGVzdChuZXdfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpCiAJCW5yX3BhZ2VzID0gLW5yX3BhZ2VzOwogCWVsc2UgaWYgKHZtYV9mbGFnc190ZXN0KCZhbXA7b2xkX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKQogCQlucl9wYWdlcyA9IDA7CkBAIC01MDIsMTUgJiM0Mzs1MDEsMTUgQEAgc3RhdGljIGludCBtbG9ja19maXh1cChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCS8qCiAJICogdm1fZmxhZ3MgaXMgcHJvdGVjdGVkIGJ5IHRoZSBtbWFwX2xvY2sgaGVsZCBpbiB3cml0ZSBtb2RlLgogCSAqIEl0JiMzOTtzIG9rYXkgaWYgdHJ5X3RvX3VubWFwX29uZSB1bm1hcHMgYSBwYWdlIGp1c3QgYWZ0ZXIgd2UKLQkgKiBzZXQgVk1fTE9DS0VELCBwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suCiYjNDM7CSAqIHNldCBWTUFfTE9DS0VEX0JJVCwgcG9wdWxhdGVfdm1hX3BhZ2VfcmFuZ2Ugd2lsbCBicmluZyBpdCBiYWNrLgogCSAqLwotCWlmICh2bWFfZmxhZ3NfdGVzdCgmYW1wO25ld192bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSAmYW1wOyZhbXA7CiYjNDM7CWlmICh2bWFfZmxhZ3NfdGVzdChuZXdfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkgJmFtcDsmYW1wOwogCSAgICB2bWFfZmxhZ3NfdGVzdCgmYW1wO29sZF92bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSkgewogCQkvKiBObyB3b3JrIHRvIGRvLCBhbmQgbWxvY2tpbmcgdHdpY2Ugd291bGQgYmUgd3JvbmcgKi8KIAkJdm1hX3N0YXJ0X3dyaXRlKHZtYSk7Ci0JCXZtYS0mZ3Q7ZmxhZ3MgPSBuZXdfdm1hX2ZsYWdzOwomIzQzOwkJdm1hLSZndDtmbGFncyA9ICpuZXdfdm1hX2ZsYWdzOwogCX0gZWxzZSB7Ci0JCW1sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsICZhbXA7bmV3X3ZtYV9mbGFncyk7CiYjNDM7CQltbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCBuZXdfdm1hX2ZsYWdzKTsKIAl9CiBvdXQ6CiAJKnByZXYgPSB2bWE7CkBAIC01MTgsNyAmIzQzOzUxNyw3IEBAIHN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIH0KIAogc3RhdGljIGludCBhcHBseV92bWFfbG9ja19mbGFncyh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLAotCQkJCXZtX2ZsYWdzX3QgZmxhZ3MpCiYjNDM7CQkJCWNvbnN0IHZtYV9mbGFnc190ICpmbGFncykKIHsKIAl1bnNpZ25lZCBsb25nIG5zdGFydCwgZW5kLCB0bXA7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsICpwcmV2OwpAQCAtNTQzLDE4ICYjNDM7NTQyLDIwIEBAIHN0YXRpYyBpbnQgYXBwbHlfdm1hX2xvY2tfZmxhZ3ModW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbiwKIAl0bXAgPSB2bWEtJmd0O3ZtX3N0YXJ0OwogCWZvcl9lYWNoX3ZtYV9yYW5nZSh2bWksIHZtYSwgZW5kKSB7CiAJCWludCBlcnJvcjsKLQkJdm1fZmxhZ3NfdCBuZXdmbGFnczsKJiM0MzsJCXZtYV9mbGFnc190IG5ld2ZsYWdzOwogCiAJCWlmICh2bWEtJmd0O3ZtX3N0YXJ0ICE9IHRtcCkKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCW5ld2ZsYWdzID0gdm1hLSZndDt2bV9mbGFncyAmYW1wOyB+Vk1fTE9DS0VEX01BU0s7Ci0JCW5ld2ZsYWdzIHw9IGZsYWdzOwomIzQzOwkJbmV3ZmxhZ3MgPSB2bWEtJmd0O2ZsYWdzOwomIzQzOwkJdm1hX2ZsYWdzX2NsZWFyX21hc2soJmFtcDtuZXdmbGFncywgVk1BX0xPQ0tFRF9NQVNLKTsKJiM0MzsJCXZtYV9mbGFnc19zZXRfbWFzaygmYW1wO25ld2ZsYWdzLCAqZmxhZ3MpOwomIzQzOwogCQkvKiBIZXJlIHdlIGtub3cgdGhhdCAgdm1hLSZndDt2bV9zdGFydCAmbHQ7PSBuc3RhcnQgJmx0OyB2bWEtJmd0O3ZtX2VuZC4gKi8KIAkJdG1wID0gdm1hLSZndDt2bV9lbmQ7CiAJCWlmICh0bXAgJmd0OyBlbmQpCiAJCQl0bXAgPSBlbmQ7Ci0JCWVycm9yID0gbWxvY2tfZml4dXAoJmFtcDt2bWksIHZtYSwgJmFtcDtwcmV2LCBuc3RhcnQsIHRtcCwgbmV3ZmxhZ3MpOwomIzQzOwkJZXJyb3IgPSBtbG9ja19maXh1cCgmYW1wO3ZtaSwgdm1hLCAmYW1wO3ByZXYsIG5zdGFydCwgdG1wLCAmYW1wO25ld2ZsYWdzKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwogCQl0bXAgPSB2bWFfaXRlcl9lbmQoJmFtcDt2bWkpOwpAQCAtNTg5LDcgJiM0Mzs1OTAsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9tbV9tbG9ja2VkX3BhZ2VfbnIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCWVuZCA9IHN0YXJ0ICYjNDM7IGxlbjsKIAogCWZvcl9lYWNoX3ZtYV9yYW5nZSh2bWksIHZtYSwgZW5kKSB7Ci0JCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCkgewomIzQzOwkJaWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKSB7CiAJCQlpZiAoc3RhcnQgJmd0OyB2bWEtJmd0O3ZtX3N0YXJ0KQogCQkJCWNvdW50IC09IChzdGFydCAtIHZtYS0mZ3Q7dm1fc3RhcnQpOwogCQkJaWYgKGVuZCAmbHQ7IHZtYS0mZ3Q7dm1fZW5kKSB7CkBAIC02MTUsNyAmIzQzOzYxNiw4IEBAIHN0YXRpYyBpbnQgX19tbG9ja19wb3NpeF9lcnJvcl9yZXR1cm4obG9uZyByZXR2YWwpCiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIF9fbXVzdF9jaGVjayBpbnQgZG9fbWxvY2sodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbiwgdm1fZmxhZ3NfdCBmbGFncykKJiM0MztzdGF0aWMgX19tdXN0X2NoZWNrIGludCBkb19tbG9jayh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLAomIzQzOwkJCQkgdm1hX2ZsYWdzX3QgKmZsYWdzKQogewogCXVuc2lnbmVkIGxvbmcgbG9ja2VkOwogCXVuc2lnbmVkIGxvbmcgbG9ja19saW1pdDsKQEAgLTY2NCwyNCAmIzQzOzY2NiwyNyBAQCBzdGF0aWMgX19tdXN0X2NoZWNrIGludCBkb19tbG9jayh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLCB2bV9mbGFnc190IGZsYQogCiBTWVNDQUxMX0RFRklORTIobWxvY2ssIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbikKIHsKLQlyZXR1cm4gZG9fbWxvY2soc3RhcnQsIGxlbiwgVk1fTE9DS0VEKTsKJiM0MzsJdm1hX2ZsYWdzX3QgZmxhZ3MgPSBta192bWFfZmxhZ3MoVk1BX0xPQ0tFRF9CSVQpOwomIzQzOwomIzQzOwlyZXR1cm4gZG9fbWxvY2soc3RhcnQsIGxlbiwgJmFtcDtmbGFncyk7CiB9CiAKIFNZU0NBTExfREVGSU5FMyhtbG9jazIsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbiwgaW50LCBmbGFncykKIHsKLQl2bV9mbGFnc190IHZtX2ZsYWdzID0gVk1fTE9DS0VEOwomIzQzOwl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSBta192bWFfZmxhZ3MoVk1BX0xPQ0tFRF9CSVQpOwogCiAJaWYgKGZsYWdzICZhbXA7IH5NTE9DS19PTkZBVUxUKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChmbGFncyAmYW1wOyBNTE9DS19PTkZBVUxUKQotCQl2bV9mbGFncyB8PSBWTV9MT0NLT05GQVVMVDsKJiM0MzsJCXZtYV9mbGFnc19zZXQoJmFtcDt2bWFfZmxhZ3MsIFZNQV9MT0NLT05GQVVMVF9CSVQpOwogCi0JcmV0dXJuIGRvX21sb2NrKHN0YXJ0LCBsZW4sIHZtX2ZsYWdzKTsKJiM0MzsJcmV0dXJuIGRvX21sb2NrKHN0YXJ0LCBsZW4sICZhbXA7dm1hX2ZsYWdzKTsKIH0KIAogU1lTQ0FMTF9ERUZJTkUyKG11bmxvY2ssIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbikKIHsKJiM0MzsJdm1hX2ZsYWdzX3QgZmxhZ3MgPSBFTVBUWV9WTUFfRkxBR1M7CiAJaW50IHJldDsKIAogCXN0YXJ0ID0gdW50YWdnZWRfYWRkcihzdGFydCk7CkBAIC02OTEsNyAmIzQzOzY5Niw3IEBAIFNZU0NBTExfREVGSU5FMihtdW5sb2NrLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW4pCiAKIAlpZiAobW1hcF93cml0ZV9sb2NrX2tpbGxhYmxlKGN1cnJlbnQtJmd0O21tKSkKIAkJcmV0dXJuIC1FSU5UUjsKLQlyZXQgPSBhcHBseV92bWFfbG9ja19mbGFncyhzdGFydCwgbGVuLCAwKTsKJiM0MzsJcmV0ID0gYXBwbHlfdm1hX2xvY2tfZmxhZ3Moc3RhcnQsIGxlbiwgJmFtcDtmbGFncyk7CiAJbW1hcF93cml0ZV91bmxvY2soY3VycmVudC0mZ3Q7bW0pOwogCiAJcmV0dXJuIHJldDsKQEAgLTY5OSw0NiAmIzQzOzcwNCw0OCBAQCBTWVNDQUxMX0RFRklORTIobXVubG9jaywgdW5zaWduZWQgbG9uZywgc3RhcnQsIHNpemVfdCwgbGVuKQogCiAvKgogICogVGFrZSB0aGUgTUNMXyogZmxhZ3MgcGFzc2VkIGludG8gbWxvY2thbGwgKG9yIDAgaWYgY2FsbGVkIGZyb20gbXVubG9ja2FsbCkKLSAqIGFuZCB0cmFuc2xhdGUgaW50byB0aGUgYXBwcm9wcmlhdGUgbW9kaWZpY2F0aW9ucyB0byBtbS0mZ3Q7ZGVmX2ZsYWdzIGFuZC9vciB0aGUKLSAqIGZsYWdzIGZvciBhbGwgY3VycmVudCBWTUFzLgomIzQzOyAqIGFuZCB0cmFuc2xhdGUgaW50byB0aGUgYXBwcm9wcmlhdGUgbW9kaWZpY2F0aW9ucyB0byBtbS0mZ3Q7ZGVmX3ZtYV9mbGFncyBhbmQvb3IKJiM0MzsgKiB0aGUgZmxhZ3MgZm9yIGFsbCBjdXJyZW50IFZNQXMuCiAgKgogICogVGhlcmUgYXJlIGEgY291cGxlIG9mIHN1YnRsZXRpZXMgd2l0aCB0aGlzLiAgSWYgbWxvY2thbGwoKSBpcyBjYWxsZWQgbXVsdGlwbGUKICAqIHRpbWVzIHdpdGggZGlmZmVyZW50IGZsYWdzLCB0aGUgdmFsdWVzIGRvIG5vdCBuZWNlc3NhcmlseSBzdGFjay4gIElmIG1sb2NrYWxsCiAgKiBpcyBjYWxsZWQgb25jZSBpbmNsdWRpbmcgdGhlIE1DTF9GVVRVUkUgZmxhZyBhbmQgdGhlbiBhIHNlY29uZCB0aW1lIHdpdGhvdXQKLSAqIGl0LCBWTV9MT0NLRUQgYW5kIFZNX0xPQ0tPTkZBVUxUIHdpbGwgYmUgY2xlYXJlZCBmcm9tIG1tLSZndDtkZWZfZmxhZ3MuCiYjNDM7ICogaXQsIFZNQV9MT0NLRURfQklUIGFuZCBWTUFfTE9DS09ORkFVTFRfQklUIHdpbGwgYmUgY2xlYXJlZCBmcm9tCiYjNDM7ICogbW0tJmd0O2RlZl92bWFfZmxhZ3MuCiAgKi8KIHN0YXRpYyBpbnQgYXBwbHlfbWxvY2thbGxfZmxhZ3MoaW50IGZsYWdzKQogewogCVZNQV9JVEVSQVRPUih2bWksIGN1cnJlbnQtJmd0O21tLCAwKTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LSZndDttbTsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgKnByZXYgPSBOVUxMOwotCXZtX2ZsYWdzX3QgdG9fYWRkID0gMDsKJiM0MzsJdm1hX2ZsYWdzX3QgdG9fYWRkID0gRU1QVFlfVk1BX0ZMQUdTOwogCi0JY3VycmVudC0mZ3Q7bW0tJmd0O2RlZl9mbGFncyAmYW1wOz0gflZNX0xPQ0tFRF9NQVNLOwomIzQzOwl2bWFfZmxhZ3NfY2xlYXJfbWFzaygmYW1wO21tLSZndDtkZWZfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX01BU0spOwogCWlmIChmbGFncyAmYW1wOyBNQ0xfRlVUVVJFKSB7Ci0JCWN1cnJlbnQtJmd0O21tLSZndDtkZWZfZmxhZ3MgfD0gVk1fTE9DS0VEOwomIzQzOwkJdm1hX2ZsYWdzX3NldCgmYW1wO21tLSZndDtkZWZfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7CiAKIAkJaWYgKGZsYWdzICZhbXA7IE1DTF9PTkZBVUxUKQotCQkJY3VycmVudC0mZ3Q7bW0tJmd0O2RlZl9mbGFncyB8PSBWTV9MT0NLT05GQVVMVDsKJiM0MzsJCQl2bWFfZmxhZ3Nfc2V0KCZhbXA7bW0tJmd0O2RlZl92bWFfZmxhZ3MsIFZNQV9MT0NLT05GQVVMVF9CSVQpOwogCiAJCWlmICghKGZsYWdzICZhbXA7IE1DTF9DVVJSRU5UKSkKIAkJCWdvdG8gb3V0OwogCX0KIAogCWlmIChmbGFncyAmYW1wOyBNQ0xfQ1VSUkVOVCkgewotCQl0b19hZGQgfD0gVk1fTE9DS0VEOwomIzQzOwkJdm1hX2ZsYWdzX3NldCgmYW1wO3RvX2FkZCwgVk1BX0xPQ0tFRF9CSVQpOwogCQlpZiAoZmxhZ3MgJmFtcDsgTUNMX09ORkFVTFQpCi0JCQl0b19hZGQgfD0gVk1fTE9DS09ORkFVTFQ7CiYjNDM7CQkJdm1hX2ZsYWdzX3NldCgmYW1wO3RvX2FkZCwgVk1BX0xPQ0tPTkZBVUxUX0JJVCk7CiAJfQogCiAJZm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7CiAJCWludCBlcnJvcjsKLQkJdm1fZmxhZ3NfdCBuZXdmbGFnczsKJiM0MzsJCXZtYV9mbGFnc190IG5ld2ZsYWdzID0gdm1hLSZndDtmbGFnczsKIAotCQluZXdmbGFncyA9IHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgflZNX0xPQ0tFRF9NQVNLOwotCQluZXdmbGFncyB8PSB0b19hZGQ7CiYjNDM7CQl2bWFfZmxhZ3NfY2xlYXJfbWFzaygmYW1wO25ld2ZsYWdzLCBWTUFfTE9DS0VEX01BU0spOwomIzQzOwkJdm1hX2ZsYWdzX3NldF9tYXNrKCZhbXA7bmV3ZmxhZ3MsIHRvX2FkZCk7CiAKIAkJZXJyb3IgPSBtbG9ja19maXh1cCgmYW1wO3ZtaSwgdm1hLCAmYW1wO3ByZXYsIHZtYS0mZ3Q7dm1fc3RhcnQsIHZtYS0mZ3Q7dm1fZW5kLAotCQkJCSAgICBuZXdmbGFncyk7CiYjNDM7CQkJCSAgICAmYW1wO25ld2ZsYWdzKTsKIAkJLyogSWdub3JlIGVycm9ycywgYnV0IHByZXYgbmVlZHMgZml4aW5nIHVwLiAqLwogCQlpZiAoZXJyb3IpCiAJCQlwcmV2ID0gdm1hOwpkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IDMwOGE0M2VhYmQ4M2IxLi40YmYyNmIwZjFlNmUzNiAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tYXAuYwpAQCAtODAsMTMgJiM0Mzs4MCwxMyBAQCBjb3JlX3BhcmFtKGlnbm9yZV9ybGltaXRfZGF0YSwgaWdub3JlX3JsaW1pdF9kYXRhLCBib29sLCAwNjQ0KTsKIC8qIFVwZGF0ZSB2bWEtJmd0O3ZtX3BhZ2VfcHJvdCB0byByZWZsZWN0IHZtYS0mZ3Q7dm1fZmxhZ3MuICovCiB2b2lkIHZtYV9zZXRfcGFnZV9wcm90KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWEtJmd0O3ZtX2ZsYWdzOwomIzQzOwl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSB2bWEtJmd0O2ZsYWdzOwogCXBncHJvdF90IHZtX3BhZ2VfcHJvdDsKIAotCXZtX3BhZ2VfcHJvdCA9IHZtX3BncHJvdF9tb2RpZnkodm1hLSZndDt2bV9wYWdlX3Byb3QsIHZtX2ZsYWdzKTsKJiM0MzsJdm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1hLSZndDt2bV9wYWdlX3Byb3QsIHZtYV9mbGFncyk7CiAJaWYgKHZtYV93YW50c193cml0ZW5vdGlmeSh2bWEsIHZtX3BhZ2VfcHJvdCkpIHsKLQkJdm1fZmxhZ3MgJmFtcDs9IH5WTV9TSEFSRUQ7Ci0JCXZtX3BhZ2VfcHJvdCA9IHZtX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bV9mbGFncyk7CiYjNDM7CQl2bWFfZmxhZ3NfY2xlYXIoJmFtcDt2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKTsKJiM0MzsJCXZtX3BhZ2VfcHJvdCA9IHZtYV9wZ3Byb3RfbW9kaWZ5KHZtX3BhZ2VfcHJvdCwgdm1hX2ZsYWdzKTsKIAl9CiAJLyogcmVtb3ZlX3Byb3RlY3Rpb25fcHRlcyByZWFkcyB2bWEtJmd0O3ZtX3BhZ2VfcHJvdCB3aXRob3V0IG1tYXBfbG9jayAqLwogCVdSSVRFX09OQ0Uodm1hLSZndDt2bV9wYWdlX3Byb3QsIHZtX3BhZ2VfcHJvdCk7CkBAIC0xMDIsMTUgJiM0MzsxMDIsMTYgQEAgdm9pZCB2bWFfc2V0X3BhZ2VfcHJvdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKICAqLwogc3RhdGljIGludCBjaGVja19icmtfbGltaXRzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCiB7CiYjNDM7CWNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0mZ3Q7bW07CiYjNDM7CWNvbnN0IGJvb2wgaXNfZGVmX2xvY2tlZCA9CiYjNDM7CQl2bWFfZmxhZ3NfdGVzdCgmYW1wO21tLSZndDtkZWZfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7CiAJdW5zaWduZWQgbG9uZyBtYXBwZWRfYWRkcjsKIAogCW1hcHBlZF9hZGRyID0gZ2V0X3VubWFwcGVkX2FyZWEoTlVMTCwgYWRkciwgbGVuLCAwLCBNQVBfRklYRUQpOwogCWlmIChJU19FUlJfVkFMVUUobWFwcGVkX2FkZHIpKQogCQlyZXR1cm4gbWFwcGVkX2FkZHI7CiAKLQlyZXR1cm4gbWxvY2tfZnV0dXJlX29rKGN1cnJlbnQtJmd0O21tLAotCQkJICAgICAgY3VycmVudC0mZ3Q7bW0tJmd0O2RlZl9mbGFncyAmYW1wOyBWTV9MT0NLRUQsIGxlbikKLQkJPyAwIDogLUVBR0FJTjsKJiM0MzsJcmV0dXJuIG1sb2NrX2Z1dHVyZV9vayhtbSwgaXNfZGVmX2xvY2tlZCwgbGVuKSA/IDAgOiAtRUFHQUlOOwogfQogCiBTWVNDQUxMX0RFRklORTEoYnJrLCB1bnNpZ25lZCBsb25nLCBicmspCkBAIC0xOTcsNyAmIzQzOzE5OCw3IEBAIFNZU0NBTExfREVGSU5FMShicmssIHVuc2lnbmVkIGxvbmcsIGJyaykKIAkJZ290byBvdXQ7CiAKIAltbS0mZ3Q7YnJrID0gYnJrOwotCWlmIChtbS0mZ3Q7ZGVmX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCkKJiM0MzsJaWYgKHZtYV9mbGFnc190ZXN0KCZhbXA7bW0tJmd0O2RlZl92bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSkKIAkJcG9wdWxhdGUgPSB0cnVlOwogCiBzdWNjZXNzOgpAQCAtMjgwLDcgJiM0MzsyODEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9tbWFwX29rKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogICogZG9fbW1hcCgpIC0gUGVyZm9ybSBhIHVzZXJsYW5kIG1lbW9yeSBtYXBwaW5nIGludG8gdGhlIGN1cnJlbnQgcHJvY2VzcwogICogYWRkcmVzcyBzcGFjZSBvZiBsZW5ndGggQGxlbiB3aXRoIHByb3RlY3Rpb24gYml0cyBAcHJvdCwgbW1hcCBmbGFncyBAZmxhZ3MKICAqIChmcm9tIHdoaWNoIFZNQSBmbGFncyB3aWxsIGJlIGluZmVycmVkKSwgYW5kIGFueSBhZGRpdGlvbmFsIFZNQSBmbGFncyB0bwotICogYXBwbHkgQHZtX2ZsYWdzLiBJZiB0aGlzIGlzIGEgZmlsZS1iYWNrZWQgbWFwcGluZyB0aGVuIHRoZSBmaWxlIGlzIHNwZWNpZmllZAomIzQzOyAqIGFwcGx5IEB2bWFfZmxhZ3MuIElmIHRoaXMgaXMgYSBmaWxlLWJhY2tlZCBtYXBwaW5nIHRoZW4gdGhlIGZpbGUgaXMgc3BlY2lmaWVkCiAgKiBpbiBAZmlsZSBhbmQgcGFnZSBvZmZzZXQgaW50byB0aGUgZmlsZSB2aWEgQHBnb2ZmLgogICoKICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcGVyZm9ybSBzZWN1cml0eSBjaGVja3Mgb24gdGhlIGZpbGUgYW5kIGFzc3VtZXMsIGlmCkBAIC0zMjAsNyAmIzQzOzMyMSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX21tYXBfb2soc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAgKiAoMikgZm9yIGRldGFpbHMuCiAgKiBAZmxhZ3M6IEZsYWdzIHNwZWNpZnlpbmcgaG93IHRoZSBtYXBwaW5nIHNob3VsZCBiZSBwZXJmb3JtZWQsIHNlZSBtbWFwICgyKQogICogZm9yIGRldGFpbHMuCi0gKiBAdm1fZmxhZ3M6IFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgc2V0IGJ5IGRlZmF1bHQsIG9yIDAgb3RoZXJ3aXNlLgomIzQzOyAqIEB2bWFfZmxhZ3M6IFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgc2V0IGJ5IGRlZmF1bHQsIG9yIEVNUFRZX1ZNQV9GTEFHUwomIzQzOyAqIG90aGVyd2lzZS4KICAqIEBwZ29mZjogUGFnZSBvZmZzZXQgaW50byB0aGUgQGZpbGUgaWYgZmlsZS1iYWNrZWQsIHNob3VsZCBiZSAwIG90aGVyd2lzZS4KICAqIEBwb3B1bGF0ZTogQSBwb2ludGVyIHRvIGEgdmFsdWUgd2hpY2ggd2lsbCBiZSBzZXQgdG8gMCBpZiBubyBwb3B1bGF0aW9uIG9mCiAgKiB0aGUgcmFuZ2UgaXMgcmVxdWlyZWQsIG9yIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcG9wdWxhdGUgaWYgaXQgaXMuIE11c3QgYmUKQEAgLTMzNSw3ICYjNDM7MzM3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbGVfbW1hcF9vayhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlub2RlICppbm9kZSwKICAqLwogdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQl1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwcm90LAotCQkJdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncywKJiM0MzsJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MsCiAJCQl1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nICpwb3B1bGF0ZSwKIAkJCXN0cnVjdCBsaXN0X2hlYWQgKnVmKQogewpAQCAtMzk5LDEzICYjNDM7NDAxLDE4IEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCSAqIHRvLiB3ZSBhc3N1bWUgYWNjZXNzIHBlcm1pc3Npb25zIGhhdmUgYmVlbiBoYW5kbGVkIGJ5IHRoZSBvcGVuCiAJICogb2YgdGhlIG1lbW9yeSBvYmplY3QsIHNvIHdlIGRvbiYjMzk7dCBkbyBhbnkgaGVyZS4KIAkgKi8KLQl2bV9mbGFncyB8PSBjYWxjX3ZtX3Byb3RfYml0cyhwcm90LCBwa2V5KSB8IGNhbGNfdm1fZmxhZ19iaXRzKGZpbGUsIGZsYWdzKSB8Ci0JCQltbS0mZ3Q7ZGVmX2ZsYWdzIHwgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQzsKJiM0MzsJdm1hX2ZsYWdzX3NldF9tYXNrKCZhbXA7dm1hX2ZsYWdzLAomIzQzOwkJCSAgIGxlZ2FjeV90b192bWFfZmxhZ3MoY2FsY192bV9wcm90X2JpdHMocHJvdCwgcGtleSkpKTsKJiM0MzsJdm1hX2ZsYWdzX3NldF9tYXNrKCZhbXA7dm1hX2ZsYWdzLAomIzQzOwkJCSAgIGxlZ2FjeV90b192bWFfZmxhZ3MoY2FsY192bV9mbGFnX2JpdHMoZmlsZSwgZmxhZ3MpKSk7CiYjNDM7CXZtYV9mbGFnc19zZXRfbWFzaygmYW1wO3ZtYV9mbGFncywgbW0tJmd0O2RlZl92bWFfZmxhZ3MpOwomIzQzOwl2bWFfZmxhZ3Nfc2V0KCZhbXA7dm1hX2ZsYWdzLCBWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQsCiYjNDM7CQkgICAgICBWTUFfTUFZRVhFQ19CSVQpOwogCiAJLyogT2J0YWluIHRoZSBhZGRyZXNzIHRvIG1hcCB0by4gd2UgdmVyaWZ5IChvciBzZWxlY3QpIGl0IGFuZCBlbnN1cmUKIAkgKiB0aGF0IGl0IHJlcHJlc2VudHMgYSB2YWxpZCBzZWN0aW9uIG9mIHRoZSBhZGRyZXNzIHNwYWNlLgogCSAqLwotCWFkZHIgPSBfX2dldF91bm1hcHBlZF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLCB2bV9mbGFncyk7CiYjNDM7CWFkZHIgPSBfX2dldF91bm1hcHBlZF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLCB2bWFfZmxhZ3MpOwogCWlmIChJU19FUlJfVkFMVUUoYWRkcikpCiAJCXJldHVybiBhZGRyOwogCkBAIC00MTgsNyAmIzQzOzQyNSw3IEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlpZiAoIWNhbl9kb19tbG9jaygpKQogCQkJcmV0dXJuIC1FUEVSTTsKIAotCWlmICghbWxvY2tfZnV0dXJlX29rKG1tLCB2bV9mbGFncyAmYW1wOyBWTV9MT0NLRUQsIGxlbikpCiYjNDM7CWlmICghbWxvY2tfZnV0dXJlX29rKG1tLCB2bWFfZmxhZ3NfdGVzdCgmYW1wO3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpLCBsZW4pKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCWlmIChmaWxlKSB7CkBAIC00NjEsMjIgJiM0Mzs0NjgsMjMgQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQlpZiAoSVNfQVBQRU5EKGlub2RlKSAmYW1wOyZhbXA7IChmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfV1JJVEUpKQogCQkJCXJldHVybiAtRUFDQ0VTOwogCi0JCQl2bV9mbGFncyB8PSBWTV9TSEFSRUQgfCBWTV9NQVlTSEFSRTsKJiM0MzsJCQl2bWFfZmxhZ3Nfc2V0KCZhbXA7dm1hX2ZsYWdzLCBWTUFfU0hBUkVEX0JJVCwgVk1BX01BWVNIQVJFX0JJVCk7CiAJCQlpZiAoIShmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfV1JJVEUpKQotCQkJCXZtX2ZsYWdzICZhbXA7PSB+KFZNX01BWVdSSVRFIHwgVk1fU0hBUkVEKTsKJiM0MzsJCQkJdm1hX2ZsYWdzX2NsZWFyKCZhbXA7dm1hX2ZsYWdzLCBWTUFfTUFZV1JJVEVfQklULAomIzQzOwkJCQkJCVZNQV9TSEFSRURfQklUKTsKIAkJCWZhbGx0aHJvdWdoOwogCQljYXNlIE1BUF9QUklWQVRFOgogCQkJaWYgKCEoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX1JFQUQpKQogCQkJCXJldHVybiAtRUFDQ0VTOwogCQkJaWYgKHBhdGhfbm9leGVjKCZhbXA7ZmlsZS0mZ3Q7Zl9wYXRoKSkgewotCQkJCWlmICh2bV9mbGFncyAmYW1wOyBWTV9FWEVDKQomIzQzOwkJCQlpZiAodm1hX2ZsYWdzX3Rlc3QoJmFtcDt2bWFfZmxhZ3MsIFZNQV9FWEVDX0JJVCkpCiAJCQkJCXJldHVybiAtRVBFUk07Ci0JCQkJdm1fZmxhZ3MgJmFtcDs9IH5WTV9NQVlFWEVDOwomIzQzOwkJCQl2bWFfZmxhZ3NfY2xlYXIoJmFtcDt2bWFfZmxhZ3MsIFZNQV9NQVlFWEVDX0JJVCk7CiAJCQl9CiAKIAkJCWlmICghY2FuX21tYXBfZmlsZShmaWxlKSkKIAkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCWlmICh2bV9mbGFncyAmYW1wOyAoVk1fR1JPV1NET1dOfFZNX0dST1dTVVApKQomIzQzOwkJCWlmICh2bWFfZmxhZ3NfY2FuX2dyb3coJmFtcDt2bWFfZmxhZ3MpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJYnJlYWs7CiAKQEAgLTQ4OCwyMyAmIzQzOzQ5NiwyNyBAQCB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJICogQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSB2aW9sYXRpbmcgYW55IHNlYWxzIGFuZCB1cGRhdGUgVk1BCiAJCSAqIGZsYWdzIGlmIG5lY2Vzc2FyeSB0byBhdm9pZCBmdXR1cmUgc2VhbCB2aW9sYXRpb25zLgogCQkgKi8KLQkJZXJyID0gbWVtZmRfY2hlY2tfc2VhbHNfbW1hcChmaWxlLCAmYW1wO3ZtX2ZsYWdzKTsKJiM0MzsJCWVyciA9IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoZmlsZSwgJmFtcDt2bWFfZmxhZ3MpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuICh1bnNpZ25lZCBsb25nKWVycjsKIAl9IGVsc2UgewogCQlzd2l0Y2ggKGZsYWdzICZhbXA7IE1BUF9UWVBFKSB7CiAJCWNhc2UgTUFQX1NIQVJFRDoKLQkJCWlmICh2bV9mbGFncyAmYW1wOyAoVk1fR1JPV1NET1dOfFZNX0dST1dTVVApKQomIzQzOwkJCWlmICh2bWFfZmxhZ3NfY2FuX2dyb3coJmFtcDt2bWFfZmxhZ3MpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJLyoKIAkJCSAqIElnbm9yZSBwZ29mZi4KIAkJCSAqLwogCQkJcGdvZmYgPSAwOwotCQkJdm1fZmxhZ3MgfD0gVk1fU0hBUkVEIHwgVk1fTUFZU0hBUkU7CiYjNDM7CQkJdm1hX2ZsYWdzX3NldCgmYW1wO3ZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQsIFZNQV9NQVlTSEFSRV9CSVQpOwogCQkJYnJlYWs7Ci0JCWNhc2UgTUFQX0RST1BQQUJMRToKLQkJCWlmIChWTV9EUk9QUEFCTEUgPT0gVk1fTk9ORSkKJiM0MzsJCWNhc2UgTUFQX0RST1BQQUJMRTogewomIzQzOwkJCXZtYV9mbGFnc190IGRyb3BwYWJsZSA9IFZNQV9EUk9QUEFCTEU7CiYjNDM7CiYjNDM7CQkJaWYgKHZtYV9mbGFnc19lbXB0eSgmYW1wO2Ryb3BwYWJsZSkpCiAJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJCXZtYV9mbGFnc19zZXRfbWFzaygmYW1wO3ZtYV9mbGFncywgZHJvcHBhYmxlKTsKJiM0MzsKIAkJCS8qCiAJCQkgKiBBIGxvY2tlZCBvciBzdGFjayBhcmVhIG1ha2VzIG5vIHNlbnNlIHRvIGJlIGRyb3BwYWJsZS4KIAkJCSAqCkBAIC01MTUsMjMgJiM0Mzs1MjcsMjQgQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgKi8KIAkJCWlmIChmbGFncyAmYW1wOyAoTUFQX0xPQ0tFRCB8IE1BUF9IVUdFVExCKSkKIAkJCSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZiAodm1fZmxhZ3MgJmFtcDsgKFZNX0dST1dTRE9XTiB8IFZNX0dST1dTVVApKQomIzQzOwkJCWlmICh2bWFfZmxhZ3NfY2FuX2dyb3coJmFtcDt2bWFfZmxhZ3MpKQogCQkJICAgICAgICByZXR1cm4gLUVJTlZBTDsKIAotCQkJdm1fZmxhZ3MgfD0gVk1fRFJPUFBBQkxFOwotCiAJCQkvKgogCQkJICogSWYgdGhlIHBhZ2VzIGNhbiBiZSBkcm9wcGVkLCB0aGVuIGl0IGRvZXNuJiMzOTt0IG1ha2UKIAkJCSAqIHNlbnNlIHRvIHJlc2VydmUgdGhlbS4KIAkJCSAqLwotCQkJdm1fZmxhZ3MgfD0gVk1fTk9SRVNFUlZFOwomIzQzOwkJCXZtYV9mbGFnc19zZXQoJmFtcDt2bWFfZmxhZ3MsIFZNQV9OT1JFU0VSVkVfQklUKTsKIAogCQkJLyoKIAkJCSAqIExpa2V3aXNlLCB0aGV5JiMzOTtyZSB2b2xhdGlsZSBlbm91Z2ggdGhhdCB0aGV5CiAJCQkgKiBzaG91bGRuJiMzOTt0IHN1cnZpdmUgZm9ya3Mgb3IgY29yZWR1bXBzLgogCQkJICovCi0JCQl2bV9mbGFncyB8PSBWTV9XSVBFT05GT1JLIHwgVk1fRE9OVERVTVA7CiYjNDM7CQkJdm1hX2ZsYWdzX3NldCgmYW1wO3ZtYV9mbGFncywgVk1BX1dJUEVPTkZPUktfQklULAomIzQzOwkJCQkgICAgICBWTUFfRE9OVERVTVBfQklUKTsKJiM0MzsKIAkJCWZhbGx0aHJvdWdoOwomIzQzOwkJfQogCQljYXNlIE1BUF9QUklWQVRFOgogCQkJLyoKIAkJCSAqIFNldCBwZ29mZiBhY2NvcmRpbmcgdG8gYWRkciBmb3IgYW5vbl92bWEuCkBAIC01NDQsMjIgJiM0Mzs1NTcsMjIgQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJfQogCiAJLyoKLQkgKiBTZXQgJiMzOTtWTV9OT1JFU0VSVkUmIzM5OyBpZiB3ZSBzaG91bGQgbm90IGFjY291bnQgZm9yIHRoZQotCSAqIG1lbW9yeSB1c2Ugb2YgdGhpcyBtYXBwaW5nLgomIzQzOwkgKiBTZXQgVk1BX05PUkVTRVJWRV9CSVQgaWYgd2Ugc2hvdWxkIG5vdCBhY2NvdW50IGZvciB0aGUgbWVtb3J5IHVzZQomIzQzOwkgKiBvZiB0aGlzIG1hcHBpbmcuCiAJICovCiAJaWYgKGZsYWdzICZhbXA7IE1BUF9OT1JFU0VSVkUpIHsKIAkJLyogV2UgaG9ub3IgTUFQX05PUkVTRVJWRSBpZiBhbGxvd2VkIHRvIG92ZXJjb21taXQgKi8KIAkJaWYgKHN5c2N0bF9vdmVyY29tbWl0X21lbW9yeSAhPSBPVkVSQ09NTUlUX05FVkVSKQotCQkJdm1fZmxhZ3MgfD0gVk1fTk9SRVNFUlZFOwomIzQzOwkJCXZtYV9mbGFnc19zZXQoJmFtcDt2bWFfZmxhZ3MsIFZNQV9OT1JFU0VSVkVfQklUKTsKIAogCQkvKiBodWdldGxiIGFwcGxpZXMgc3RyaWN0IG92ZXJjb21taXQgdW5sZXNzIE1BUF9OT1JFU0VSVkUgKi8KIAkJaWYgKGZpbGUgJmFtcDsmYW1wOyBpc19maWxlX2h1Z2VwYWdlcyhmaWxlKSkKLQkJCXZtX2ZsYWdzIHw9IFZNX05PUkVTRVJWRTsKJiM0MzsJCQl2bWFfZmxhZ3Nfc2V0KCZhbXA7dm1hX2ZsYWdzLCBWTUFfTk9SRVNFUlZFX0JJVCk7CiAJfQogCi0JYWRkciA9IG1tYXBfcmVnaW9uKGZpbGUsIGFkZHIsIGxlbiwgdm1fZmxhZ3MsIHBnb2ZmLCB1Zik7CiYjNDM7CWFkZHIgPSBtbWFwX3JlZ2lvbihmaWxlLCBhZGRyLCBsZW4sIHZtYV9mbGFncywgcGdvZmYsIHVmKTsKIAlpZiAoIUlTX0VSUl9WQUxVRShhZGRyKSAmYW1wOyZhbXA7Ci0JICAgICgodm1fZmxhZ3MgJmFtcDsgVk1fTE9DS0VEKSB8fAomIzQzOwkgICAgKHZtYV9mbGFnc190ZXN0KCZhbXA7dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkgfHwKIAkgICAgIChmbGFncyAmYW1wOyAoTUFQX1BPUFVMQVRFIHwgTUFQX05PTkJMT0NLKSkgPT0gTUFQX1BPUFVMQVRFKSkKIAkJKnBvcHVsYXRlID0gbGVuOwogCXJldHVybiBhZGRyOwpAQCAtNjQ1LDkgJiM0Mzs2NTgsOSBAQCBTWVNDQUxMX0RFRklORTEob2xkX21tYXAsIHN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgX191c2VyICosIGFyZykKICAqIERldGVybWluZSBpZiB0aGUgYWxsb2NhdGlvbiBuZWVkcyB0byBlbnN1cmUgdGhhdCB0aGVyZSBpcyBubwogICogZXhpc3RpbmcgbWFwcGluZyB3aXRoaW4gaXQmIzM5O3MgZ3VhcmQgZ2FwcywgZm9yIHVzZSBhcyBzdGFydF9nYXAuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1fZmxhZ3NfdCB2bV9mbGFncykKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtYV9mbGFnc190IHZtYV9mbGFncykKIHsKLQlpZiAodm1fZmxhZ3MgJmFtcDsgVk1fU0hBRE9XX1NUQUNLKQomIzQzOwlpZiAodm1hX2ZsYWdzX3Rlc3Rfc2luZ2xlX21hc2soJmFtcDt2bWFfZmxhZ3MsIFZNQV9TSEFET1dfU1RBQ0spKQogCQlyZXR1cm4gUEFHRV9TSVpFOwogCiAJcmV0dXJuIDA7CkBAIC02ODksNyAmIzQzOzcwMiw3IEBAIHVuc2lnbmVkIGxvbmcgdm1fdW5tYXBwZWRfYXJlYShzdHJ1Y3Qgdm1fdW5tYXBwZWRfYXJlYV9pbmZvICppbmZvKQogdW5zaWduZWQgbG9uZwogZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwKLQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncykKJiM0MzsJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncykKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtJmd0O21tOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCAqcHJldjsKQEAgLTcxNCw3ICYjNDM7NzI3LDcgQEAgZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCWluZm8ubGVuZ3RoID0gbGVuOwogCWluZm8ubG93X2xpbWl0ID0gbW0tJmd0O21tYXBfYmFzZTsKIAlpbmZvLmhpZ2hfbGltaXQgPSBtbWFwX2VuZDsKLQlpbmZvLnN0YXJ0X2dhcCA9IHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bV9mbGFncyk7CiYjNDM7CWluZm8uc3RhcnRfZ2FwID0gc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtYV9mbGFncyk7CiAJaWYgKGZpbHAgJmFtcDsmYW1wOyBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSkKIAkJaW5mby5hbGlnbl9tYXNrID0gaHVnZV9wYWdlX21hc2tfYWxpZ24oZmlscCk7CiAJcmV0dXJuIHZtX3VubWFwcGVkX2FyZWEoJmFtcDtpbmZvKTsKQEAgLTcyNyw3ICYjNDM7NzQwLDcgQEAgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncykKIHsKIAlyZXR1cm4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywKLQkJCQkJIHZtX2ZsYWdzKTsKJiM0MzsJCQkJCSBsZWdhY3lfdG9fdm1hX2ZsYWdzKHZtX2ZsYWdzKSk7CiB9CiAjZW5kaWYKIApAQCAtNzM4LDcgJiM0Mzs3NTEsNyBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiB1bnNpZ25lZCBsb25nCiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLAotCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncykKJiM0MzsJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsICpwcmV2OwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0mZ3Q7bW07CkBAIC03NjYsNyAmIzQzOzc3OSw3IEBAIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCWluZm8ubGVuZ3RoID0gbGVuOwogCWluZm8ubG93X2xpbWl0ID0gUEFHRV9TSVpFOwogCWluZm8uaGlnaF9saW1pdCA9IGFyY2hfZ2V0X21tYXBfYmFzZShhZGRyLCBtbS0mZ3Q7bW1hcF9iYXNlKTsKLQlpbmZvLnN0YXJ0X2dhcCA9IHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bV9mbGFncyk7CiYjNDM7CWluZm8uc3RhcnRfZ2FwID0gc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtYV9mbGFncyk7CiAJaWYgKGZpbHAgJmFtcDsmYW1wOyBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSkKIAkJaW5mby5hbGlnbl9tYXNrID0gaHVnZV9wYWdlX21hc2tfYWxpZ24oZmlscCk7CiAJYWRkciA9IHZtX3VubWFwcGVkX2FyZWEoJmFtcDtpbmZvKTsKQEAgLTc5NSwyMyAmIzQzOzgwOCwyNCBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKQogewogCXJldHVybiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsCi0JCQkJCQkgdm1fZmxhZ3MpOwomIzQzOwkJCQkJCSBsZWdhY3lfdG9fdm1hX2ZsYWdzKHZtX2ZsYWdzKSk7CiB9CiAjZW5kaWYKIAotdW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKQomIzQzO3Vuc2lnbmVkIGxvbmcgbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLAomIzQzOwkJdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKQogewogCWlmIChtbV9mbGFnc190ZXN0KE1NRl9UT1BET1dOLCBjdXJyZW50LSZndDttbSkpCiAJCXJldHVybiBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oZmlscCwgYWRkciwgbGVuLCBwZ29mZiwKLQkJCQkJCSAgICAgIGZsYWdzLCB2bV9mbGFncyk7Ci0JcmV0dXJuIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTsKJiM0MzsJCQkJZmxhZ3MsIHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSk7CiYjNDM7CXJldHVybiBhcmNoX2dldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLAomIzQzOwkJCXZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSk7CiB9CiAKIHVuc2lnbmVkIGxvbmcKIF9fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCi0JCXVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyAoKmdldF9hcmVhKShzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLAogCQkJCSAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKQEAgLTg0NiwxMSAmIzQzOzg2MCwxMSBAQCBfX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQkgICAmYW1wOyZhbXA7ICFhZGRyIC8qIG5vIGhpbnQgKi8KIAkJICAgJmFtcDsmYW1wOyBJU19BTElHTkVEKGxlbiwgUE1EX1NJWkUpKSB7CiAJCS8qIEVuc3VyZXMgdGhhdCBsYXJnZXIgYW5vbnltb3VzIG1hcHBpbmdzIGFyZSBUSFAgYWxpZ25lZC4gKi8KLQkJYWRkciA9IHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIsIGxlbiwKLQkJCQkJCSAgICAgcGdvZmYsIGZsYWdzLCB2bV9mbGFncyk7CiYjNDM7CQlhZGRyID0gdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbGUsIGFkZHIsIGxlbiwKJiM0MzsJCQkJCQkgICAgICBwZ29mZiwgZmxhZ3MsIHZtYV9mbGFncyk7CiAJfSBlbHNlIHsKLQkJYWRkciA9IG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkciwgbGVuLAotCQkJCQkJICAgIHBnb2ZmLCBmbGFncywgdm1fZmxhZ3MpOwomIzQzOwkJYWRkciA9IG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbGUsIGFkZHIsIGxlbiwKJiM0MzsJCQkJCQkgICAgIHBnb2ZmLCBmbGFncywgdm1hX2ZsYWdzKTsKIAl9CiAJaWYgKElTX0VSUl9WQUxVRShhZGRyKSkKIAkJcmV0dXJuIGFkZHI7CkBAIC04NjgsNyAmIzQzOzg4Miw4IEBAIHVuc2lnbmVkIGxvbmcKIG1tX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQkgICAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0JcmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIDApOwomIzQzOwlyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsCiYjNDM7CQkJCQkgICAgIEVNUFRZX1ZNQV9GTEFHUyk7CiB9CiBFWFBPUlRfU1lNQk9MKG1tX2dldF91bm1hcHBlZF9hcmVhKTsKIApAQCAtOTcwLDcgJiM0Mzs5ODUsNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfZXh0ZW5kX3ZtYV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbgogCQlyZXR1cm4gTlVMTDsKIAlpZiAoZXhwYW5kX3N0YWNrX2xvY2tlZChwcmV2LCBhZGRyKSkKIAkJcmV0dXJuIE5VTEw7Ci0JaWYgKHByZXYtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCkKJiM0MzsJaWYgKHZtYV90ZXN0KHByZXYsIFZNQV9MT0NLRURfQklUKSkKIAkJcG9wdWxhdGVfdm1hX3BhZ2VfcmFuZ2UocHJldiwgYWRkciwgcHJldi0mZ3Q7dm1fZW5kLCBOVUxMKTsKIAlyZXR1cm4gcHJldjsKIH0KQEAgLTk5NCw3ICYjNDM7MTAwOSw3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9leHRlbmRfdm1hX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uCiAJc3RhcnQgPSB2bWEtJmd0O3ZtX3N0YXJ0OwogCWlmIChleHBhbmRfc3RhY2tfbG9ja2VkKHZtYSwgYWRkcikpCiAJCXJldHVybiBOVUxMOwotCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCkKJiM0MzsJaWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKQogCQlwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSh2bWEsIGFkZHIsIHN0YXJ0LCBOVUxMKTsKIAlyZXR1cm4gdm1hOwogfQpAQCAtMTExOSwxOCAmIzQzOzExMzQsMTggQEAgU1lTQ0FMTF9ERUZJTkU1KHJlbWFwX2ZpbGVfcGFnZXMsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBzaXplLAogCSAqLwogCXZtYSA9IHZtYV9sb29rdXAobW0sIHN0YXJ0KTsKIAotCWlmICghdm1hIHx8ICEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9TSEFSRUQpKSB7CiYjNDM7CWlmICghdm1hIHx8ICF2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKSkgewogCQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcHJvdCB8PSB2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1JFQUQgPyBQUk9UX1JFQUQgOiAwOwotCXByb3QgfD0gdm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9XUklURSA/IFBST1RfV1JJVEUgOiAwOwotCXByb3QgfD0gdm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9FWEVDID8gUFJPVF9FWEVDIDogMDsKJiM0MzsJcHJvdCB8PSB2bWFfdGVzdCh2bWEsIFZNQV9SRUFEX0JJVCkgPyBQUk9UX1JFQUQgOiAwOwomIzQzOwlwcm90IHw9IHZtYV90ZXN0KHZtYSwgVk1BX1dSSVRFX0JJVCkgPyBQUk9UX1dSSVRFIDogMDsKJiM0MzsJcHJvdCB8PSB2bWFfdGVzdCh2bWEsIFZNQV9FWEVDX0JJVCkgPyBQUk9UX0VYRUMgOiAwOwogCiAJZmxhZ3MgJmFtcDs9IE1BUF9OT05CTE9DSzsKIAlmbGFncyB8PSBNQVBfU0hBUkVEIHwgTUFQX0ZJWEVEIHwgTUFQX1BPUFVMQVRFOwotCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCkKJiM0MzsJaWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKQogCQlmbGFncyB8PSBNQVBfTE9DS0VEOwogCiAJLyogU2F2ZSB2bV9mbGFncyB1c2VkIHRvIGNhbGN1bGF0ZSBwcm90IGFuZCBmbGFncywgYW5kIHJlY2hlY2sgbGF0ZXIuICovCkBAIC0xMTkxLDcgJiM0MzsxMjA2LDcgQEAgU1lTQ0FMTF9ERUZJTkU1KHJlbWFwX2ZpbGVfcGFnZXMsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBzaXplLAogCX0KIAogCXJldCA9IGRvX21tYXAodm1hLSZndDt2bV9maWxlLCBzdGFydCwgc2l6ZSwKLQkJCXByb3QsIGZsYWdzLCAwLCBwZ29mZiwgJmFtcDtwb3B1bGF0ZSwgTlVMTCk7CiYjNDM7CQkJcHJvdCwgZmxhZ3MsIEVNUFRZX1ZNQV9GTEFHUywgcGdvZmYsICZhbXA7cG9wdWxhdGUsIE5VTEwpOwogb3V0OgogCW1tYXBfd3JpdGVfdW5sb2NrKG1tKTsKIAlmcHV0KGZpbGUpOwpAQCAtMTIzMyw3ICYjNDM7MTI0OCw3IEBAIGludCB2bV9icmtfZmxhZ3ModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHJlcXVlc3QsIGJvb2wgaXNfZXhlYykKIAogCXZtYSA9IHZtYV9wcmV2KCZhbXA7dm1pKTsKIAlyZXQgPSBkb19icmtfZmxhZ3MoJmFtcDt2bWksIHZtYSwgYWRkciwgbGVuLCB2bWFfZmxhZ3MpOwotCXBvcHVsYXRlID0gKChtbS0mZ3Q7ZGVmX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCkgIT0gMCk7CiYjNDM7CXBvcHVsYXRlID0gdm1hX2ZsYWdzX3Rlc3QoJmFtcDttbS0mZ3Q7ZGVmX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpOwogCW1tYXBfd3JpdGVfdW5sb2NrKG1tKTsKIAl1c2VyZmF1bHRmZF91bm1hcF9jb21wbGV0ZShtbSwgJmFtcDt1Zik7CiAJaWYgKHBvcHVsYXRlICZhbXA7JmFtcDsgIXJldCkKQEAgLTEyNTYsNyAmIzQzOzEyNzEsNyBAQCB1bnNpZ25lZCBsb25nIHRlYXJfZG93bl92bWFzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksCiAJbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTsKIAl2bWFfaXRlcl9zZXQodm1pLCB2bWEtJmd0O3ZtX2VuZCk7CiAJZG8gewotCQlpZiAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9BQ0NPVU5UKQomIzQzOwkJaWYgKHZtYV90ZXN0KHZtYSwgVk1BX0FDQ09VTlRfQklUKSkKIAkJCW5yX2FjY291bnRlZCAmIzQzOz0gdm1hX3BhZ2VzKHZtYSk7CiAJCXZtYV9tYXJrX2RldGFjaGVkKHZtYSk7CiAJCXJlbW92ZV92bWEodm1hKTsKQEAgLTE0MDUsNyAmIzQzOzE0MjAsNyBAQCBzdGF0aWMgaW50IHNwZWNpYWxfbWFwcGluZ19zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCS8qCiAJICogRm9yYmlkIHNwbGl0dGluZyBzcGVjaWFsIG1hcHBpbmdzIC0ga2VybmVsIGhhcyBleHBlY3RhdGlvbnMgb3ZlcgotCSAqIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gbWFwcGluZy4gVG9nZXRoZXIgd2l0aCBWTV9ET05URVhQQU5ECiYjNDM7CSAqIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gbWFwcGluZy4gVG9nZXRoZXIgd2l0aCBWTUFfRE9OVEVYUEFORF9CSVQKIAkgKiB0aGUgc2l6ZSBvZiB2bWEgc2hvdWxkIHN0YXkgdGhlIHNhbWUgb3ZlciB0aGUgc3BlY2lhbCBtYXBwaW5nJiMzOTtzCiAJICogbGlmZXRpbWUuCiAJICovCkBAIC0xNjc3LDcgJiM0MzsxNjkyLDcgQEAgYm9vbCBtbWFwX3JlYWRfbG9ja19tYXliZV9leHBhbmQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCXJldHVybiB0cnVlOwogCX0KIAotCWlmICghKG5ld192bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0dST1dTRE9XTikpCiYjNDM7CWlmICghdm1hX3Rlc3QobmV3X3ZtYSwgVk1BX0dST1dTRE9XTl9CSVQpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAltbWFwX3dyaXRlX2xvY2sobW0pOwpAQCAtMTcyNyw3ICYjNDM7MTc0Miw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSkKIAkJcmV0dmFsID0gdm1hX3N0YXJ0X3dyaXRlX2tpbGxhYmxlKG1wbnQpOwogCQlpZiAocmV0dmFsICZsdDsgMCkKIAkJCWdvdG8gbG9vcF9vdXQ7Ci0JCWlmIChtcG50LSZndDt2bV9mbGFncyAmYW1wOyBWTV9ET05UQ09QWSkgewomIzQzOwkJaWYgKHZtYV90ZXN0KG1wbnQsIFZNQV9ET05UQ09QWV9CSVQpKSB7CiAJCQlyZXR2YWwgPSB2bWFfaXRlcl9jbGVhcl9nZnAoJmFtcDt2bWksIG1wbnQtJmd0O3ZtX3N0YXJ0LAogCQkJCQkJICAgIG1wbnQtJmd0O3ZtX2VuZCwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAocmV0dmFsKQpAQCAtMTczNyw3ICYjNDM7MTc1Miw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSkKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWNoYXJnZSA9IDA7Ci0JCWlmIChtcG50LSZndDt2bV9mbGFncyAmYW1wOyBWTV9BQ0NPVU5UKSB7CiYjNDM7CQlpZiAodm1hX3Rlc3QobXBudCwgVk1BX0FDQ09VTlRfQklUKSkgewogCQkJdW5zaWduZWQgbG9uZyBsZW4gPSB2bWFfcGFnZXMobXBudCk7CiAKIAkJCWlmIChzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5X21tKG9sZG1tLCBsZW4pKSAvKiBzaWMgKi8KQEAgLTE3NTUsMTYgJiM0MzsxNzcwLDE5IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSkKIAkJcmV0dmFsID0gZHVwX3VzZXJmYXVsdGZkKHRtcCwgJmFtcDt1Zik7CiAJCWlmIChyZXR2YWwpCiAJCQlnb3RvIGZhaWxfbm9tZW1fYW5vbl92bWFfZm9yazsKLQkJaWYgKHRtcC0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fV0lQRU9ORk9SSykgewomIzQzOwomIzQzOwkJaWYgKHZtYV90ZXN0KHRtcCwgVk1BX1dJUEVPTkZPUktfQklUKSkgewogCQkJLyoKLQkJCSAqIFZNX1dJUEVPTkZPUksgZ2V0cyBhIGNsZWFuIHNsYXRlIGluIHRoZSBjaGlsZC4KJiM0MzsJCQkgKiBWTUFfV0lQRU9ORk9SS19CSVQgZ2V0cyBhIGNsZWFuIHNsYXRlIGluIHRoZSBjaGlsZC4KIAkJCSAqIERvbiYjMzk7dCBwcmVwYXJlIGFub25fdm1hIHVudGlsIGZhdWx0IHNpbmNlIHdlIGRvbiYjMzk7dAogCQkJICogY29weSBwYWdlIGZvciBjdXJyZW50IHZtYS4KIAkJCSAqLwogCQkJdG1wLSZndDthbm9uX3ZtYSA9IE5VTEw7CiAJCX0gZWxzZSBpZiAoYW5vbl92bWFfZm9yayh0bXAsIG1wbnQpKQogCQkJZ290byBmYWlsX25vbWVtX2Fub25fdm1hX2Zvcms7Ci0JCXZtX2ZsYWdzX2NsZWFyKHRtcCwgVk1fTE9DS0VEX01BU0spOwomIzQzOwomIzQzOwkJdm1hX3N0YXJ0X3dyaXRlKHRtcCk7CiYjNDM7CQl2bWFfY2xlYXJfZmxhZ3NfbWFzayh0bXAsIFZNQV9MT0NLRURfTUFTSyk7CiAJCS8qCiAJCSAqIENvcHkvdXBkYXRlIGh1Z2V0bGIgcHJpdmF0ZSB2bWEgaW5mb3JtYXRpb24uCiAJCSAqLwpAQCAtMTc5Nyw3ICYjNDM7MTgxNSw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSkKIAkJCWlfbW1hcF91bmxvY2tfd3JpdGUobWFwcGluZyk7CiAJCX0KIAotCQlpZiAoISh0bXAtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1dJUEVPTkZPUkspKQomIzQzOwkJaWYgKCF2bWFfdGVzdCh0bXAsIFZNQV9XSVBFT05GT1JLX0JJVCkpCiAJCQlyZXR2YWwgPSBjb3B5X3BhZ2VfcmFuZ2UodG1wLCBtcG50KTsKIAogCQlpZiAocmV0dmFsKSB7CmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5jIGIvbW0vbXByb3RlY3QuYwppbmRleCBkYzI3YmJjMTcxMmZkNS4uMjg4OGVlNjM4ZDg3MmEgMTAwNjQ0Ci0tLSBhL21tL21wcm90ZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbXByb3RlY3QuYwpAQCAtNDAsNyAmIzQzOzQwLDcgQEAKIAogc3RhdGljIGJvb2wgbWF5YmVfY2hhbmdlX3B0ZV93cml0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcHRlX3QgcHRlKQogewotCWlmIChXQVJOX09OX09OQ0UoISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1dSSVRFKSkpCiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIXZtYV90ZXN0KHZtYSwgVk1BX1dSSVRFX0JJVCkpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBEb24mIzM5O3QgdG91Y2ggZW50cmllcyB0aGF0IGFyZSBub3QgZXZlbiByZWFkYWJsZS4gKi8KQEAgLTk3LDcgJiM0Mzs5Nyw3IEBAIHN0YXRpYyBib29sIGNhbl9jaGFuZ2Vfc2hhcmVkX3B0ZV93cml0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIGJvb2wgY2FuX2NoYW5nZV9wdGVfd3JpdGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICAgcHRlX3QgcHRlKQogewotCWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fU0hBUkVEKSkKJiM0MzsJaWYgKCF2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKSkKIAkJcmV0dXJuIGNhbl9jaGFuZ2VfcHJpdmF0ZV9wdGVfd3JpdGFibGUodm1hLCBhZGRyLCBwdGUpOwogCiAJcmV0dXJuIGNhbl9jaGFuZ2Vfc2hhcmVkX3B0ZV93cml0YWJsZSh2bWEsIHB0ZSk7CkBAIC0xOTQsNyAmIzQzOzE5NCw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBzZXRfd3JpdGVfcHJvdF9jb21taXRfZmx1c2hfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1CiB7CiAJYm9vbCBzZXRfd3JpdGU7CiAKLQlpZiAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9TSEFSRUQpIHsKJiM0MzsJaWYgKHZtYV90ZXN0KHZtYSwgVk1BX1NIQVJFRF9CSVQpKSB7CiAJCXNldF93cml0ZSA9IGNhbl9jaGFuZ2Vfc2hhcmVkX3B0ZV93cml0YWJsZSh2bWEsIHB0ZW50KTsKIAkJcHJvdF9jb21taXRfZmx1c2hfcHRlcyh2bWEsIGFkZHIsIHB0ZXAsIG9sZHB0ZSwgcHRlbnQsIG5yX3B0ZXMsCiAJCQkJICAgICAgIC8qIGlkeCA9ICovIDAsIHNldF93cml0ZSwgdGxiKTsKQEAgLTg0Niw4ICYjNDM7ODQ2LDggQEAgbXByb3RlY3RfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLAogCQl2bV91bmFjY3RfbWVtb3J5KG5ycGFnZXMpOwogCiAJLyoKLQkgKiBQcml2YXRlIFZNX0xPQ0tFRCBWTUEgYmVjb21pbmcgd3JpdGFibGU6IHRyaWdnZXIgQ09XIHRvIGF2b2lkIG1ham9yCi0JICogZmF1bHQgb24gYWNjZXNzLgomIzQzOwkgKiBQcml2YXRlIFZNQV9MT0NLRURfQklUIFZNQSBiZWNvbWluZyB3cml0YWJsZTogdHJpZ2dlciBDT1cgdG8gYXZvaWQKJiM0MzsJICogbWFqb3IgZmF1bHQgb24gYWNjZXNzLgogCSAqLwogCWlmICh2bWFfZmxhZ3NfdGVzdCgmYW1wO25ld192bWFfZmxhZ3MsIFZNQV9XUklURV9CSVQpICZhbXA7JmFtcDsKIAkgICAgdm1hX2ZsYWdzX3Rlc3QoJmFtcDtvbGRfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkgJmFtcDsmYW1wOwpAQCAtOTIxLDcgJiM0Mzs5MjEsNyBAQCBzdGF0aWMgaW50IGRvX21wcm90ZWN0X3BrZXkodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbiwKIAkJCWdvdG8gb3V0OwogCQlzdGFydCA9IHZtYS0mZ3Q7dm1fc3RhcnQ7CiAJCWVycm9yID0gLUVJTlZBTDsKLQkJaWYgKCEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9HUk9XU0RPV04pKQomIzQzOwkJaWYgKCF2bWFfdGVzdCh2bWEsIFZNQV9HUk9XU0RPV05fQklUKSkKIAkJCWdvdG8gb3V0OwogCX0gZWxzZSB7CiAJCWlmICh2bWEtJmd0O3ZtX3N0YXJ0ICZndDsgc3RhcnQpCkBAIC05MjksNyAmIzQzOzkyOSw3IEBAIHN0YXRpYyBpbnQgZG9fbXByb3RlY3RfcGtleSh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLAogCQlpZiAodW5saWtlbHkoZ3Jvd3MgJmFtcDsgUFJPVF9HUk9XU1VQKSkgewogCQkJZW5kID0gdm1hLSZndDt2bV9lbmQ7CiAJCQllcnJvciA9IC1FSU5WQUw7Ci0JCQlpZiAoISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0dST1dTVVApKQomIzQzOwkJCWlmICghdm1hX3Rlc3Rfc2luZ2xlX21hc2sodm1hLCBWTUFfR1JPV1NVUCkpCiAJCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC05NTMsNyAmIzQzOzk1Myw3IEBAIHN0YXRpYyBpbnQgZG9fbXByb3RlY3RfcGtleSh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLAogCQl9CiAKIAkJLyogRG9lcyB0aGUgYXBwbGljYXRpb24gZXhwZWN0IFBST1RfUkVBRCB0byBpbXBseSBQUk9UX0VYRUMgKi8KLQkJaWYgKHJpZXIgJmFtcDsmYW1wOyAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9NQVlFWEVDKSkKJiM0MzsJCWlmIChyaWVyICZhbXA7JmFtcDsgdm1hX3Rlc3Qodm1hLCBWTUFfTUFZRVhFQ19CSVQpKQogCQkJcHJvdCB8PSBQUk9UX0VYRUM7CiAKIAkJLyoKZGlmZiAtLWdpdCBhL21tL21yZW1hcC5jIGIvbW0vbXJlbWFwLmMKaW5kZXggMzg0ZWY0Y2MyMTk1YmEuLmI2NGFhMWY2ZTA3ZWRlIDEwMDY0NAotLS0gYS9tbS9tcmVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tcmVtYXAuYwpAQCAtNjgsNyAmIzQzOzY4LDcgQEAgc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgewogCWJvb2wgcG9wdWxhdGVfZXhwYW5kOwkJLyogbWxvY2soKSYjMzk7ZCBleHBhbmRlZCwgbXVzdCBwb3B1bGF0ZS4gKi8KIAllbnVtIG1yZW1hcF90eXBlIHJlbWFwX3R5cGU7CS8qIGV4cGFuZCwgc2hyaW5rLCBldGMuICovCiAJYm9vbCBtbWFwX2xvY2tlZDsJCS8qIElzIG1tIGN1cnJlbnRseSB3cml0ZS1sb2NrZWQ/ICovCi0JdW5zaWduZWQgbG9uZyBjaGFyZ2VkOwkJLyogSWYgVk1fQUNDT1VOVCwgIyBwYWdlcyB0byBhY2NvdW50LiAqLwomIzQzOwl1bnNpZ25lZCBsb25nIGNoYXJnZWQ7CQkvKiBJZiBWTUFfQUNDT1VOVF9CSVQsICMgcGdzIHRvIGFjY291bnQgKi8KIAlib29sIHZtaV9uZWVkc19pbnZhbGlkYXRlOwkvKiBJcyB0aGUgVk1BIGl0ZXJhdG9yIGludmFsaWRhdGVkPyAqLwogfTsKIApAQCAtOTYzLDcgJiM0Mzs5NjMsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB2cm1fc2V0X25ld19hZGRyKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pCiAKIAlpZiAodnJtLSZndDtmbGFncyAmYW1wOyBNUkVNQVBfRklYRUQpCiAJCW1hcF9mbGFncyB8PSBNQVBfRklYRUQ7Ci0JaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fTUFZU0hBUkUpCiYjNDM7CWlmICh2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpKQogCQltYXBfZmxhZ3MgfD0gTUFQX1NIQVJFRDsKIAogCXJlcyA9IGdldF91bm1hcHBlZF9hcmVhKHZtYS0mZ3Q7dm1fZmlsZSwgbmV3X2FkZHIsIHZybS0mZ3Q7bmV3X2xlbiwgcGdvZmYsCkBAIC05ODUsNyAmIzQzOzk4NSw3IEBAIHN0YXRpYyBib29sIHZybV9jYWxjX2NoYXJnZShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKQogewogCXVuc2lnbmVkIGxvbmcgY2hhcmdlZDsKIAotCWlmICghKHZybS0mZ3Q7dm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9BQ0NPVU5UKSkKJiM0MzsJaWYgKCF2bWFfdGVzdCh2cm0tJmd0O3ZtYSwgVk1BX0FDQ09VTlRfQklUKSkKIAkJcmV0dXJuIHRydWU7CiAKIAkvKgpAQCAtMTAxMiw3ICYjNDM7MTAxMiw3IEBAIHN0YXRpYyBib29sIHZybV9jYWxjX2NoYXJnZShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKQogICovCiBzdGF0aWMgdm9pZCB2cm1fdW5jaGFyZ2Uoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSkKIHsKLQlpZiAoISh2cm0tJmd0O3ZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fQUNDT1VOVCkpCiYjNDM7CWlmICghdm1hX3Rlc3QodnJtLSZndDt2bWEsIFZNQV9BQ0NPVU5UX0JJVCkpCiAJCXJldHVybjsKIAogCXZtX3VuYWNjdF9tZW1vcnkodnJtLSZndDtjaGFyZ2VkKTsKQEAgLTEwMzIsNyAmIzQzOzEwMzIsNyBAQCBzdGF0aWMgdm9pZCB2cm1fc3RhdF9hY2NvdW50KHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0sCiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2cm0tJmd0O3ZtYTsKIAogCXZtX3N0YXRfYWNjb3VudChtbSwgdm1hLSZndDt2bV9mbGFncywgcGFnZXMpOwotCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCkKJiM0MzsJaWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKQogCQltbS0mZ3Q7bG9ja2VkX3ZtICYjNDM7PSBwYWdlczsKIH0KIApAQCAtMTE3Niw3ICYjNDM7MTE3Niw3IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSkKIAkgKiBhcm9zZSwgaW4gd2hpY2ggY2FzZSB3ZSBfZG9fIHdpc2ggdG8gdW5tYXAgdGhlIF9uZXdfIFZNQSwgd2hpY2ggbWVhbnMKIAkgKiB3ZSBhY3R1YWxseSBfZG9fIHdhbnQgaXQgYmUgdW5hY2NvdW50ZWQuCiAJICovCi0JYm9vbCBhY2NvdW50YWJsZV9tb3ZlID0gKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fQUNDT1VOVCkgJmFtcDsmYW1wOwomIzQzOwlib29sIGFjY291bnRhYmxlX21vdmUgPSB2bWFfdGVzdCh2bWEsIFZNQV9BQ0NPVU5UX0JJVCkgJmFtcDsmYW1wOwogCQkhKHZybS0mZ3Q7ZmxhZ3MgJmFtcDsgTVJFTUFQX0RPTlRVTk1BUCk7CiAKIAkvKgpAQCAtMTE5NSw3ICYjNDM7MTE5NSw3IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSkKIAkgKiBwb3J0aW9ucyBvZiB0aGUgb3JpZ2luYWwgVk1BIHRoYXQgcmVtYWluLgogCSAqLwogCWlmIChhY2NvdW50YWJsZV9tb3ZlKSB7Ci0JCXZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fQUNDT1VOVCk7CiYjNDM7CQl2bWFfY2xlYXJfZmxhZ3Modm1hLCBWTUFfQUNDT1VOVF9CSVQpOwogCQkvKiBXZSBhcmUgYWJvdXQgdG8gc3BsaXQgdm1hLCBzbyBzdG9yZSB0aGUgc3RhcnQvZW5kLiAqLwogCQl2bV9zdGFydCA9IHZtYS0mZ3Q7dm1fc3RhcnQ7CiAJCXZtX2VuZCA9IHZtYS0mZ3Q7dm1fZW5kOwpAQCAtMTIyMCw4ICYjNDM7MTIyMCw4IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSkKIAkgKiB8ICAgICAgICAgICAgIHwKIAkgKiB8LS0tLS0tLS0tLS0tLXwKIAkgKgotCSAqIEhhdmluZyBjbGVhcmVkIFZNX0FDQ09VTlQgZnJvbSB0aGUgd2hvbGUgVk1BLCBhZnRlciB3ZSB1bm1hcCBhYm92ZQotCSAqIHdlJiMzOTtsbCBlbmQgdXAgd2l0aDoKJiM0MzsJICogSGF2aW5nIGNsZWFyZWQgVk1BX0FDQ09VTlRfQklUIGZyb20gdGhlIHdob2xlIFZNQSwgYWZ0ZXIgd2UgdW5tYXAKJiM0MzsJICogYWJvdmUgd2UmIzM5O2xsIGVuZCB1cCB3aXRoOgogCSAqCiAJICogICAgYWRkciAgZW5kCiAJICogICAgIHwgICAgIHwKQEAgLTEyNDEsMTMgJiM0MzsxMjQxLDE1IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSkKIAkJaWYgKHZtX3N0YXJ0ICZsdDsgYWRkcikgewogCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2ID0gdm1hX3ByZXYoJmFtcDt2bWkpOwogCi0JCQl2bV9mbGFnc19zZXQocHJldiwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqLwomIzQzOwkJCXZtYV9zdGFydF93cml0ZShwcmV2KTsKJiM0MzsJCQl2bWFfc2V0X2ZsYWdzKHByZXYsIFZNQV9BQ0NPVU5UX0JJVCk7CiAJCX0KIAogCQlpZiAodm1fZW5kICZndDsgZW5kKSB7CiAJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQgPSB2bWFfbmV4dCgmYW1wO3ZtaSk7CiAKLQkJCXZtX2ZsYWdzX3NldChuZXh0LCBWTV9BQ0NPVU5UKTsgLyogQWNxdWlyZXMgVk1BIGxvY2suICovCiYjNDM7CQkJdm1hX3N0YXJ0X3dyaXRlKG5leHQpOwomIzQzOwkJCXZtYV9zZXRfZmxhZ3MobmV4dCwgVk1BX0FDQ09VTlRfQklUKTsKIAkJfQogCX0KIH0KQEAgLTEzMzAsOCAmIzQzOzEzMzIsOCBAQCBzdGF0aWMgdm9pZCBkb250dW5tYXBfY29tcGxldGUoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSwKIAl1bnNpZ25lZCBsb25nIG9sZF9zdGFydCA9IHZybS0mZ3Q7dm1hLSZndDt2bV9zdGFydDsKIAl1bnNpZ25lZCBsb25nIG9sZF9lbmQgPSB2cm0tJmd0O3ZtYS0mZ3Q7dm1fZW5kOwogCi0JLyogV2UgYWx3YXlzIGNsZWFyIFZNX0xPQ0tFRFtPTkZBVUxUXSBvbiB0aGUgb2xkIFZNQS4gKi8KLQl2bV9mbGFnc19jbGVhcih2cm0tJmd0O3ZtYSwgVk1fTE9DS0VEX01BU0spOwomIzQzOwkvKiBXZSBhbHdheXMgY2xlYXIgVk1BX0xPQ0tFRFtPTkZBVUxUXV9CSVQgb24gdGhlIG9sZCBWTUEuICovCiYjNDM7CXZtYV9jbGVhcl9mbGFnc19tYXNrKHZybS0mZ3Q7dm1hLCBWTUFfTE9DS0VEX01BU0spOwogCiAJLyoKIAkgKiBhbm9uX3ZtYSBsaW5rcyBvZiB0aGUgb2xkIHZtYSBpcyBubyBsb25nZXIgbmVlZGVkIGFmdGVyIGl0cyBwYWdlCkBAIC0xNzY3LDE0ICYjNDM7MTc2OSwxNCBAQCBzdGF0aWMgaW50IGNoZWNrX3ByZXBfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pCiAJICogYmFzZWQgb24gdGhlIG9yaWdpbmFsLiAgVGhlcmUgYXJlIG5vIGtub3duIHVzZSBjYXNlcyBmb3IgdGhpcwogCSAqIGJlaGF2aW9yLiAgQXMgYSByZXN1bHQsIGZhaWwgc3VjaCBhdHRlbXB0cy4KIAkgKi8KLQlpZiAoIW9sZF9sZW4gJmFtcDsmYW1wOyAhKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgKFZNX1NIQVJFRCB8IFZNX01BWVNIQVJFKSkpIHsKJiM0MzsJaWYgKCFvbGRfbGVuICZhbXA7JmFtcDsgIXZtYV90ZXN0X2FueSh2bWEsIFZNQV9TSEFSRURfQklULCBWTUFfTUFZU0hBUkVfQklUKSkgewogCQlwcl93YXJuX29uY2UoJiMzNDslcyAoJWQpOiBhdHRlbXB0ZWQgdG8gZHVwbGljYXRlIGEgcHJpdmF0ZSBtYXBwaW5nIHdpdGggbXJlbWFwLiAgVGhpcyBpcyBub3Qgc3VwcG9ydGVkLlxuJiMzNDssCiAJCQkgICAgIGN1cnJlbnQtJmd0O2NvbW0sIGN1cnJlbnQtJmd0O3BpZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICgodnJtLSZndDtmbGFncyAmYW1wOyBNUkVNQVBfRE9OVFVOTUFQKSAmYW1wOyZhbXA7Ci0JCQkodm1hLSZndDt2bV9mbGFncyAmYW1wOyAoVk1fRE9OVEVYUEFORCB8IFZNX1BGTk1BUCkpKQomIzQzOwkgICAgdm1hX3Rlc3RfYW55KHZtYSwgVk1BX0RPTlRFWFBBTkRfQklULCBWTUFfUEZOTUFQX0JJVCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyoKQEAgLTE4MDQsNyAmIzQzOzE4MDYsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3ByZXBfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pCiAJCXJldHVybiAwOwogCiAJLyogV2UgYXJlIGV4cGFuZGluZyBhbmQgdGhlIFZNQSBpcyBtbG9jaygpJiMzOTtkIHNvIHdlIG5lZWQgdG8gcG9wdWxhdGUuICovCi0JaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fTE9DS0VEKQomIzQzOwlpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpCiAJCXZybS0mZ3Q7cG9wdWxhdGVfZXhwYW5kID0gdHJ1ZTsKIAogCS8qIE5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBhIGdyb3dpbmcgbWFwcGluZyAqLwpAQCAtMTgxMiwxMCAmIzQzOzE4MTQsMTAgQEAgc3RhdGljIGludCBjaGVja19wcmVwX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKQogCWlmIChwZ29mZiAmIzQzOyAobmV3X2xlbiAmZ3Q7Jmd0OyBQQUdFX1NISUZUKSAmbHQ7IHBnb2ZmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IChWTV9ET05URVhQQU5EIHwgVk1fUEZOTUFQKSkKJiM0MzsJaWYgKHZtYV90ZXN0X2FueSh2bWEsIFZNQV9ET05URVhQQU5EX0JJVCwgVk1BX1BGTk1BUF9CSVQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmICghbWxvY2tfZnV0dXJlX29rKG1tLCB2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCwgdnJtLSZndDtkZWx0YSkpCiYjNDM7CWlmICghbWxvY2tfZnV0dXJlX29rKG1tLCB2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSwgdnJtLSZndDtkZWx0YSkpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJaWYgKCFtYXlfZXhwYW5kX3ZtKG1tLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MsIHZybS0mZ3Q7ZGVsdGEgJmd0OyZndDsgUEFHRV9TSElGVCkpCmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuYwppbmRleCBhZGMwYjBjYTkwNmJkZi4uNDk4ZTAxZWU0MGIwNTYgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbm9tbXUuYwpAQCAtMTAxNCwxMSAmIzQzOzEwMTQsMTIgQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJdW5zaWduZWQgbG9uZyBsZW4sCiAJCQl1bnNpZ25lZCBsb25nIHByb3QsCiAJCQl1bnNpZ25lZCBsb25nIGZsYWdzLAotCQkJdm1fZmxhZ3NfdCB2bV9mbGFncywKJiM0MzsJCQl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MsCiAJCQl1bnNpZ25lZCBsb25nIHBnb2ZmLAogCQkJdW5zaWduZWQgbG9uZyAqcG9wdWxhdGUsCiAJCQlzdHJ1Y3QgbGlzdF9oZWFkICp1ZikKIHsKJiM0MzsJdm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKTsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlzdHJ1Y3Qgdm1fcmVnaW9uICpyZWdpb247CiAJc3RydWN0IHJiX25vZGUgKnJiOwpkaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jCmluZGV4IDUwOTA0NTc1NDJjYTljLi5iZjA1MTNkMWQzZDA4NiAxMDA2NDQKLS0tIGEvbW0vdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3V0aWwuYwpAQCAtNTc4LDggJiM0Mzs1NzgsOCBAQCB1bnNpZ25lZCBsb25nIHZtX21tYXBfcGdvZmYoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlpZiAoIXJldCkgewogCQlpZiAobW1hcF93cml0ZV9sb2NrX2tpbGxhYmxlKG1tKSkKIAkJCXJldHVybiAtRUlOVFI7Ci0JCXJldCA9IGRvX21tYXAoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFnLCAwLCBwZ29mZiwgJmFtcDtwb3B1bGF0ZSwKLQkJCSAgICAgICZhbXA7dWYpOwomIzQzOwkJcmV0ID0gZG9fbW1hcChmaWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWcsIEVNUFRZX1ZNQV9GTEFHUywgcGdvZmYsCiYjNDM7CQkJICAgICAgJmFtcDtwb3B1bGF0ZSwgJmFtcDt1Zik7CiAJCW1tYXBfd3JpdGVfdW5sb2NrKG1tKTsKIAkJdXNlcmZhdWx0ZmRfdW5tYXBfY29tcGxldGUobW0sICZhbXA7dWYpOwogCQlpZiAocG9wdWxhdGUpCkBAIC02MjcsMjAgJiM0Mzs2MjcsMjAgQEAgRVhQT1JUX1NZTUJPTCh2bV9tbWFwKTsKIHVuc2lnbmVkIGxvbmcgdm1fbW1hcF9zaGFkb3dfc3RhY2sodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJdW5zaWduZWQgbG9uZyBmbGFncykKIHsKJiM0MzsJdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gVk1BX1NIQURPV19TVEFDSzsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtJmd0O21tOwogCXVuc2lnbmVkIGxvbmcgcmV0LCB1bnVzZWQ7Ci0Jdm1fZmxhZ3NfdCB2bV9mbGFncyA9IFZNX1NIQURPV19TVEFDSzsKIAogCWZsYWdzIHw9IE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURTsKIAlpZiAoYWRkcikKIAkJZmxhZ3MgfD0gTUFQX0ZJWEVEX05PUkVQTEFDRTsKIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpCi0JCXZtX2ZsYWdzIHw9IFZNX05PSFVHRVBBR0U7CiYjNDM7CQl2bWFfZmxhZ3Nfc2V0KCZhbXA7dm1hX2ZsYWdzLCBWTUFfTk9IVUdFUEFHRV9CSVQpOwogCiAJbW1hcF93cml0ZV9sb2NrKG1tKTsKIAlyZXQgPSBkb19tbWFwKE5VTEwsIGFkZHIsIGxlbiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsCi0JCSAgICAgIHZtX2ZsYWdzLCAwLCAmYW1wO3VudXNlZCwgTlVMTCk7CiYjNDM7CQkgICAgICB2bWFfZmxhZ3MsIDAsICZhbXA7dW51c2VkLCBOVUxMKTsKIAltbWFwX3dyaXRlX3VubG9jayhtbSk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuYwppbmRleCA5ZDU1NmQzM2IyNGJkMS4uYjViYzNlZWM5NjFjNzkgMTAwNjQ0Ci0tLSBhL21tL3ZtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5jCkBAIC01Niw3ICYjNDM7NTYsNyBAQCBzdHJ1Y3QgbW1hcF9zdGF0ZSB7CiAJCS5wZ2xlbiA9IFBIWVNfUEZOKGxlbl8pLAkJCQlcCiAJCS52bWFfZmxhZ3MgPSB2bWFfZmxhZ3NfLAkJCQlcCiAJCS5maWxlID0gZmlsZV8sCQkJCQkJXAotCQkucGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hX2ZsYWdzXyksCQlcCiYjNDM7CQkucGFnZV9wcm90ID0gdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3NfKSwJXAogCX0KIAogI2RlZmluZSBWTUdfTU1BUF9TVEFURShuYW1lLCBtYXBfLCB2bWFfKQkJCQlcCkBAIC0yMTc2LDcgJiM0MzsyMTc2LDcgQEAgYm9vbCB2bWFfd2FudHNfd3JpdGVub3RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBncHJvdF90IHZtX3BhZ2VfcHJvdCkKIAkvKiBUaGUgb3BlbiByb3V0aW5lIGRpZCBzb21ldGhpbmcgdG8gdGhlIHByb3RlY3Rpb25zIHRoYXQgcGdwcm90X21vZGlmeQogCSAqIHdvbiYjMzk7dCBwcmVzZXJ2ZT8gKi8KIAlpZiAocGdwcm90X3ZhbCh2bV9wYWdlX3Byb3QpICE9Ci0JICAgIHBncHJvdF92YWwodm1fcGdwcm90X21vZGlmeSh2bV9wYWdlX3Byb3QsIHZtYS0mZ3Q7dm1fZmxhZ3MpKSkKJiM0MzsJICAgIHBncHJvdF92YWwodm1hX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bWEtJmd0O2ZsYWdzKSkpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qCkBAIC0yODgzLDcgJiM0MzsyODgzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAogICogZmlsZSB0byBiZSBtYXBwZWQsIG90aGVyd2lzZSBOVUxMLgogICogQGFkZHI6IFRoZSBwYWdlLWFsaWduZWQgYWRkcmVzcyBhdCB3aGljaCB0byBwZXJmb3JtIHRoZSBtYXBwaW5nLgogICogQGxlbjogVGhlIHBhZ2UtYWxpZ25lZCwgbm9uLXplcm8sIGxlbmd0aCBvZiB0aGUgbWFwcGluZy4KLSAqIEB2bV9mbGFnczogVGhlIFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgbWFwcGluZy4KJiM0MzsgKiBAdm1hX2ZsYWdzOiBUaGUgVk1BIGZsYWdzIHdoaWNoIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZSBtYXBwaW5nLgogICogQHBnb2ZmOiBJZiBAZmlsZSBpcyBzcGVjaWZpZWQsIHRoZSBwYWdlIG9mZnNldCBpbnRvIHRoZSBmaWxlLCBpZiBub3QgdGhlbgogICogdGhlIHZpcnR1YWwgcGFnZSBvZmZzZXQgaW4gbWVtb3J5IG9mIHRoZSBhbm9ueW1vdXMgbWFwcGluZy4KICAqIEB1ZjogT3B0aW9uYWxseSwgYSBwb2ludGVyIHRvIGEgbGlzdCBoZWFkIHVzZWQgZm9yIHRyYWNraW5nIHVzZXJmYXVsdGZkIHVubWFwCkBAIC0yODkzLDEyICYjNDM7Mjg5MywxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX21tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAgKiBiZWVuIHBlcmZvcm1lZC4KICAqLwogdW5zaWduZWQgbG9uZyBtbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICB1bnNpZ25lZCBsb25nIGxlbiwgdm1fZmxhZ3NfdCB2bV9mbGFncywKJiM0MzsJCQkgIHVuc2lnbmVkIGxvbmcgbGVuLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MsCiAJCQkgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHN0cnVjdCBsaXN0X2hlYWQgKnVmKQogewogCXVuc2lnbmVkIGxvbmcgcmV0OwogCWJvb2wgd3JpdGFibGVfZmlsZV9tYXBwaW5nID0gZmFsc2U7Ci0JY29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbGVnYWN5X3RvX3ZtYV9mbGFncyh2bV9mbGFncyk7CiAKIAltbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoY3VycmVudC0mZ3Q7bW0pOwogCkBAIC0yOTA3LDcgJiM0MzsyOTA2LDcgQEAgdW5zaWduZWQgbG9uZyBtbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlyZXR1cm4gLUVBQ0NFUzsKIAogCS8qIEFsbG93IGFyY2hpdGVjdHVyZXMgdG8gc2FuaXR5LWNoZWNrIHRoZSB2bV9mbGFncy4gKi8KLQlpZiAoIWFyY2hfdmFsaWRhdGVfZmxhZ3Modm1fZmxhZ3MpKQomIzQzOwlpZiAoIWFyY2hfdmFsaWRhdGVfZmxhZ3Modm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBNYXAgd3JpdGFibGUgYW5kIGVuc3VyZSB0aGlzIGlzbiYjMzk7dCBhIHNlYWxlZCBtZW1mZC4gKi8KQEAgLTM0MjAsMTggJiM0MzszNDE5LDIxIEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqX19pbnN0YWxsX3NwZWNpYWxfbWFwcGluZygKIAl2bV9mbGFnc190IHZtX2ZsYWdzLCB2b2lkICpwcml2LAogCWNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqb3BzKQogewotCWludCByZXQ7CiYjNDM7CXZtYV9mbGFnc190IHZtYV9mbGFncyA9IGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3MpOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwomIzQzOwlpbnQgcmV0OwogCiAJdm1hID0gdm1fYXJlYV9hbGxvYyhtbSk7Ci0JaWYgKHVubGlrZWx5KHZtYSA9PSBOVUxMKSkKJiM0MzsJaWYgKHVubGlrZWx5KCF2bWEpKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCXZtX2ZsYWdzIHw9IG1tLSZndDtkZWZfZmxhZ3MgfCBWTV9ET05URVhQQU5EOwomIzQzOwl2bWFfZmxhZ3Nfc2V0X21hc2soJmFtcDt2bWFfZmxhZ3MsIG1tLSZndDtkZWZfdm1hX2ZsYWdzKTsKJiM0MzsJdm1hX2ZsYWdzX3NldCgmYW1wO3ZtYV9mbGFncywgVk1BX0RPTlRFWFBBTkRfQklUKTsKIAlpZiAocGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpCi0JCXZtX2ZsYWdzIHw9IFZNX1NPRlRESVJUWTsKLQl2bV9mbGFnc19pbml0KHZtYSwgdm1fZmxhZ3MgJmFtcDsgflZNX0xPQ0tFRF9NQVNLKTsKLQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLSZndDt2bV9mbGFncyk7CiYjNDM7CQl2bWFfZmxhZ3Nfc2V0KCZhbXA7dm1hX2ZsYWdzLCBWTUFfU09GVERJUlRZX0JJVCk7CiYjNDM7CXZtYV9mbGFnc19jbGVhcl9tYXNrKCZhbXA7dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX01BU0spOwomIzQzOwl2bWEtJmd0O2ZsYWdzID0gdm1hX2ZsYWdzOwomIzQzOwl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7CiAKIAl2bWEtJmd0O3ZtX29wcyA9IG9wczsKIAl2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSA9IHByaXY7CmRpZmYgLS1naXQgYS9tbS92bWEuaCBiL21tL3ZtYS5oCmluZGV4IGFkYjdhMGJhMTE5MjA4Li4wYmM3ZDUyMWU5NzY3NyAxMDA2NDQKLS0tIGEvbW0vdm1hLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hLmgKQEAgLTUxNyw3ICYjNDM7NTE3LDcgQEAgaW50IG1tX3Rha2VfYWxsX2xvY2tzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKIHZvaWQgbW1fZHJvcF9hbGxfbG9ja3Moc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogCiB1bnNpZ25lZCBsb25nIG1tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCXVuc2lnbmVkIGxvbmcgbGVuLCB2bV9mbGFnc190IHZtX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLAomIzQzOwkJdW5zaWduZWQgbG9uZyBsZW4sIHZtYV9mbGFnc190IHZtYV9mbGFncywgdW5zaWduZWQgbG9uZyBwZ29mZiwKIAkJc3RydWN0IGxpc3RfaGVhZCAqdWYpOwogCiBpbnQgZG9fYnJrX2ZsYWdzKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpicmt2bWEsCkBAIC01NDEsOSAmIzQzOzU0MSwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX3dhbnRzX21hbnVhbF9wdGVfd3JpdGVfdXBncmFkZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYQogfQogCiAjaWZkZWYgQ09ORklHX01NVQotc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bV9wZ3Byb3RfbW9kaWZ5KHBncHJvdF90IG9sZHByb3QsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpCiYjNDM7c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfcGdwcm90X21vZGlmeShwZ3Byb3RfdCBvbGRwcm90LCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiB7Ci0JcmV0dXJuIHBncHJvdF9tb2RpZnkob2xkcHJvdCwgdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFncykpOwomIzQzOwljb25zdCBwZ3Byb3RfdCBwcm90ID0gdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gcGdwcm90X21vZGlmeShvbGRwcm90LCBwcm90KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9tbS92bWFfZXhlYy5jIGIvbW0vdm1hX2V4ZWMuYwppbmRleCBlZjFmYTJiMTYxZjNiYS4uN2FmMTI2MDY4OWI5N2UgMTAwNjQ0Ci0tLSBhL21tL3ZtYV9leGVjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hX2V4ZWMuYwpAQCAtMTEyLDE1ICYjNDM7MTEyLDE3IEBAIGludCByZWxvY2F0ZV92bWFfZG93bihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzaGlmdCkKIGludCBjcmVhdGVfaW5pdF9zdGFja192bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsCiAJCQkgIHVuc2lnbmVkIGxvbmcgKnRvcF9tZW1fcCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gVk1fU1RBQ0tfRkxBR1MgfCBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQOwomIzQzOwl2bWFfZmxhZ3NfdCBmbGFncyA9IFZNQV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQOwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlpbnQgZXJyOwotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1fYXJlYV9hbGxvYyhtbSk7CiAKJiM0MzsJLyogVk1BX1NUQUNLX0ZMQUdTIGFuZCBWTUFfU1RBQ0tfSU5DT01QTEVURV9TRVRVUCBtdXN0IG5vdCBvdmVybGFwLiAqLwomIzQzOwlWTV9XQVJOX09OX09OQ0Uodm1hX2ZsYWdzX3Rlc3RfYW55X21hc2soJmFtcDtmbGFncywgVk1BX1NUQUNLX0ZMQUdTKSk7CiYjNDM7CiYjNDM7CXZtYSA9IHZtX2FyZWFfYWxsb2MobW0pOwogCWlmICghdm1hKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXZtYV9zZXRfYW5vbnltb3VzKHZtYSk7Ci0KIAlpZiAobW1hcF93cml0ZV9sb2NrX2tpbGxhYmxlKG1tKSkgewogCQllcnIgPSAtRUlOVFI7CiAJCWdvdG8gZXJyX2ZyZWU7CkBAIC0xMzQsMTkgJiM0MzsxMzYsMjEgQEAgaW50IGNyZWF0ZV9pbml0X3N0YWNrX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCwKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9rc207CiAKJiM0MzsJdm1hX2ZsYWdzX3NldF9tYXNrKCZhbXA7ZmxhZ3MsIFZNQV9TVEFDS19GTEFHUyk7CiYjNDM7CXZtYV9zZXRfYW5vbnltb3VzKHZtYSk7CiYjNDM7CiAJLyoKIAkgKiBQbGFjZSB0aGUgc3RhY2sgYXQgdGhlIGxhcmdlc3Qgc3RhY2sgYWRkcmVzcyB0aGUgYXJjaGl0ZWN0dXJlCiAJICogc3VwcG9ydHMuIExhdGVyLCB3ZSYjMzk7bGwgbW92ZSB0aGlzIHRvIGFuIGFwcHJvcHJpYXRlIHBsYWNlLiBXZSBkb24mIzM5O3QKIAkgKiB1c2UgU1RBQ0tfVE9QIGJlY2F1c2UgdGhhdCBjYW4gZGVwZW5kIG9uIGF0dHJpYnV0ZXMgd2hpY2ggYXJlbiYjMzk7dAogCSAqIGNvbmZpZ3VyZWQgeWV0LgogCSAqLwotCVZNX1dBUk5fT05fT05DRShWTV9TVEFDS19GTEFHUyAmYW1wOyBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQKTsKIAl2bWEtJmd0O3ZtX2VuZCA9IFNUQUNLX1RPUF9NQVg7CiAJdm1hLSZndDt2bV9zdGFydCA9IHZtYS0mZ3Q7dm1fZW5kIC0gUEFHRV9TSVpFOwogCWlmIChwZ3RhYmxlX3N1cHBvcnRzX3NvZnRfZGlydHkoKSkKLQkJZmxhZ3MgfD0gVk1fU09GVERJUlRZOwotCXZtX2ZsYWdzX2luaXQodm1hLCBmbGFncyk7Ci0Jdm1hLSZndDt2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0mZ3Q7dm1fZmxhZ3MpOwomIzQzOwkJdm1hX2ZsYWdzX3NldCgmYW1wO2ZsYWdzLCBWTUFfU09GVERJUlRZX0JJVCk7CiYjNDM7CXZtYS0mZ3Q7ZmxhZ3MgPSBmbGFnczsKJiM0MzsJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpOwogCiAJZXJyID0gaW5zZXJ0X3ZtX3N0cnVjdChtbSwgdm1hKTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9tZW1hbGxvYy5jIGIvc291bmQvY29yZS9tZW1hbGxvYy5jCmluZGV4IDkzMjA2NzFkZmNjOGIwLi41YmM3ZTU4NmI0MzBmNSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9tZW1hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NvdW5kL2NvcmUvbWVtYWxsb2MuYwpAQCAtODUxLDcgJiM0Mzs4NTEsNyBAQCBzdGF0aWMgdm9pZCBzbmRfZG1hX25vbmNvaGVyZW50X2ZyZWUoc3RydWN0IHNuZF9kbWFfYnVmZmVyICpkbWFiKQogc3RhdGljIGludCBzbmRfZG1hX25vbmNvaGVyZW50X21tYXAoc3RydWN0IHNuZF9kbWFfYnVmZmVyICpkbWFiLAogCQkJCSAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpCiB7Ci0JYXJlYS0mZ3Q7dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdChhcmVhLSZndDt2bV9mbGFncyk7CiYjNDM7CWFyZWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KGFyZWEpOwogCXJldHVybiBkbWFfbW1hcF9wYWdlcyhkbWFiLSZndDtkZXYuZGV2LCBhcmVhLAogCQkJICAgICAgYXJlYS0mZ3Q7dm1fZW5kIC0gYXJlYS0mZ3Q7dm1fc3RhcnQsCiAJCQkgICAgICB2aXJ0X3RvX3BhZ2UoZG1hYi0mZ3Q7YXJlYSkpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgKaW5kZXggNzczZTIzMzAzZTI2YWYuLjY0ZjM4YTgzNjEzZTU0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgKQEAgLTI0NSw4ICYjNDM7MjQ1LDEwIEBAIGVudW0gewogI2RlZmluZSBWTV9TVEFDSwlJTklUX1ZNX0ZMQUcoU1RBQ0spCiAjaWZkZWYgQ09ORklHX1NUQUNLX0dST1dTVVAKICNkZWZpbmUgVk1fU1RBQ0tfRUFSTFkJSU5JVF9WTV9GTEFHKFNUQUNLX0VBUkxZKQomIzQzOyNkZWZpbmUgVk1BX1NUQUNLX0VBUkxZIG1rX3ZtYV9mbGFncyhWTUFfU1RBQ0tfRUFSTFlfQklUKQogI2Vsc2UKICNkZWZpbmUgVk1fU1RBQ0tfRUFSTFkJVk1fTk9ORQomIzQzOyNkZWZpbmUgVk1BX1NUQUNLX0VBUkxZIEVNUFRZX1ZNQV9GTEFHUwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1BLRVlTCiAjZGVmaW5lIFZNX1BLRVlfU0hJRlQgKChfX2ZvcmNlIGludClWTUFfSElHSF9BUkNIXzBfQklUKQpAQCAtMzE1LDYgJiM0MzszMTcsOCBAQCBlbnVtIHsKIAogLyogQml0cyBzZXQgaW4gdGhlIFZNQSB1bnRpbCB0aGUgc3RhY2sgaXMgaW4gaXRzIGZpbmFsIGxvY2F0aW9uICovCiAjZGVmaW5lIFZNX1NUQUNLX0lOQ09NUExFVEVfU0VUVVAgKFZNX1JBTkRfUkVBRCB8IFZNX1NFUV9SRUFEIHwgVk1fU1RBQ0tfRUFSTFkpCiYjNDM7I2RlZmluZSBWTUFfU1RBQ0tfSU5DT01QTEVURV9TRVRVUCBhcHBlbmRfdm1hX2ZsYWdzKAkJXAomIzQzOwlWTUFfU1RBQ0tfRUFSTFksIFZNQV9SQU5EX1JFQURfQklULCBWTUFfU0VRX1JFQURfQklUKQogCiAjZGVmaW5lIFRBU0tfRVhFQ19CSVQgKChjdXJyZW50LSZndDtwZXJzb25hbGl0eSAmYW1wOyBSRUFEX0lNUExJRVNfRVhFQykgPyBcCiAJCSAgICAgICBWTV9FWEVDX0JJVCA6IFZNX1JFQURfQklUKQpAQCAtMTQyNCwyMCAmIzQzOzE0MjgsMTggQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfaXRlcl9uZXh0X3JhbmdlKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSkKIH0KIAogYm9vbCB2bWFfd2FudHNfd3JpdGVub3RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBncHJvdF90IHZtX3BhZ2VfcHJvdCk7CiYjNDM7c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfcGdwcm90X21vZGlmeShwZ3Byb3RfdCBvbGRwcm90LCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpOwogCiAvKiBVcGRhdGUgdm1hLSZndDt2bV9wYWdlX3Byb3QgdG8gcmVmbGVjdCB2bWEtJmd0O3ZtX2ZsYWdzLiAqLwogc3RhdGljIGlubGluZSB2b2lkIHZtYV9zZXRfcGFnZV9wcm90KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWEtJmd0O3ZtX2ZsYWdzOwomIzQzOwl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSB2bWEtJmd0O2ZsYWdzOwogCXBncHJvdF90IHZtX3BhZ2VfcHJvdDsKIAotCS8qIHRlc3Rpbmc6IHdlIGlubGluZSB2bV9wZ3Byb3RfbW9kaWZ5KCkgdG8gYXZvaWQgY2xhc2ggd2l0aCB2bWEuaC4gKi8KLQl2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfbW9kaWZ5KHZtYS0mZ3Q7dm1fcGFnZV9wcm90LCB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzKSk7Ci0KJiM0MzsJdm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1hLSZndDt2bV9wYWdlX3Byb3QsIHZtYV9mbGFncyk7CiAJaWYgKHZtYV93YW50c193cml0ZW5vdGlmeSh2bWEsIHZtX3BhZ2VfcHJvdCkpIHsKLQkJdm1fZmxhZ3MgJmFtcDs9IH5WTV9TSEFSRUQ7Ci0JCS8qIHRlc3Rpbmc6IHdlIGlubGluZSB2bV9wZ3Byb3RfbW9kaWZ5KCkgdG8gYXZvaWQgY2xhc2ggd2l0aCB2bWEuaC4gKi8KLQkJdm1fcGFnZV9wcm90ID0gcGdwcm90X21vZGlmeSh2bV9wYWdlX3Byb3QsIHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3MpKTsKJiM0MzsJCXZtYV9mbGFnc19jbGVhcigmYW1wO3ZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpOwomIzQzOwkJdm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bWFfZmxhZ3MpOwogCX0KIAkvKiByZW1vdmVfcHJvdGVjdGlvbl9wdGVzIHJlYWRzIHZtYS0mZ3Q7dm1fcGFnZV9wcm90IHdpdGhvdXQgbW1hcF9sb2NrICovCiAJV1JJVEVfT05DRSh2bWEtJmd0O3ZtX3BhZ2VfcHJvdCwgdm1fcGFnZV9wcm90KTsKQEAgLTE1NDcsNyAmIzQzOzE1NDksNyBAQCBzdGF0aWMgaW5saW5lIGludCBnZXRfc3lzY3RsX21heF9tYXBfY291bnQodm9pZCkKICNkZWZpbmUgcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkJSVNfRU5BQkxFRChDT05GSUdfTUVNX1NPRlRfRElSVFkpCiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiYjNDM7c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncykKIHsKIAljb25zdCB2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpOwogCkBAIC0xNTc1LDMgJiM0MzsxNTc3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfY2FuX21vZGlmeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAlpZiAodm1hX2lzX2F0dGFjaGVkKHZtYSkpCiAJCXZtYV9hc3NlcnRfd3JpdGVfbG9ja2VkKHZtYSk7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CXJldHVybiB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYS0mZ3Q7ZmxhZ3MpOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3NzQKCQkJCQkJCW91dHB1dDogMjM3CgkJCQkJCQl0aG91Z2h0czogMTc5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW46IHZtYV9mbGFnc190IFRyYW5zaXRpb24qKgoKT2theSwgc28gd2UgaGF2ZSBhIHN1YnN0YW50aWFsIHBhdGNoIGhlcmUsIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IFZNQSBmbGFncyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGtleSBzaGlmdCBpcyBmcm9tIHRoZSBzdGFuZGFyZCBgdm1fZmxhZ3NfdGAgdG8gYSBuZXcgYHZtYV9mbGFnc190YCB0eXBlLCB3aGljaCwgYmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIGhlbHBlciBmdW5jdGlvbnMgbGlrZSBgdm1hX2ZsYWdzX3Rlc3RgIGFuZCByZWxhdGVkIHN0cnVjdHMvdW5pb25zLCBzZWVtcyB0byBiZSBhIG1vcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZSB0aGFuIGEgc2ltcGxlIGB1bnNpZ25lZCBsb25nYC4gVGhpcyBjaGFuZ2UgdG91Y2hlcyBhIHZhc3QgbnVtYmVyIG9mIGZpbGVzLCBlc3NlbnRpYWxseSByZXBsYWNpbmcgYHZtYS0mZ3Q7dm1fZmxhZ3NgIHdpdGggYHZtYS0mZ3Q7ZmxhZ3NgIGFjcm9zcyB0aGUgYm9hcmQgYW5kIGludHJvZHVjaW5nIHNldmVyYWwgbmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIGZsYWcgbWFuaXB1bGF0aW9uLiBDcnVjaWFsbHksIHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5IGFjcm9zcyB0aGUgYm9hcmQsIHdoaWNoIG1ha2VzIGl0IGEgdmVyeSBoaWdoLXZhbHVlIHRhcmdldCBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgaGVyZSB3aWxsIGJlIG9uIHBpbnBvaW50aW5nIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgbW9zdCBpbXBhY3RlZCBieSB0aGUgcmVmYWN0b3JpbmcsIHBheWluZyBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0byB0aG9zZSByZWxhdGVkIHRvIGBkb19tbWFwYCwgYG1tYXBfcmVnaW9uYCwgYG1sb2NrYCwgYG1wcm90ZWN0YCwgYW5kIGBtcmVtYXBgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBmdXp6aW5nIHRhcmdldHMgYXJlIHJlcHJlc2VudGF0aXZlIGFuZCB0aGF0IEkgZG9uJiMzOTt0IG92ZXJsb29rIGNyaXRpY2FsIHBhdGhzLiBTaW5jZSBpdCYjMzk7cyBhIGhvdC1wYXRoIGZ1bmN0aW9uIGxpc3QsIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIHRvb2wgYXV0aG9yLiBUaGUgcHJvbXB0IHdhbnRzIG1lIHRvIGF2b2lkIGhvdCBwYXRoIGZ1bmN0aW9ucy4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBjaGFuZ2VzIHdpdGhpbiBzcGVjaWZpYyBmaWxlcyBhbmQgZnVuY3Rpb25zOgoKKiAgICoqYG1tL21tYXAuY2AqKjogV2UgbmVlZCB0byBleGFtaW5lIGBtbWFwX3JlZ2lvbmAuCiogICAqKmBtbS9tcHJvdGVjdC5jYCoqOiBJbnZlc3RpZ2F0ZSBgbXByb3RlY3RfZml4dXBgIGFuZCBgZG9fbXByb3RlY3RfcGtleWAuCiogICAqKmBtbS9tcmVtYXAuY2AqKjogTG9vayBhdCBgdnJtX2NhbGNfY2hhcmdlYCwgYHVubWFwX3NvdXJjZV92bWFgLCBgY2hlY2tfcHJlcF92bWFgLgoqICAgKipgbW0vbWxvY2suY2AqKjogQ2hlY2sgYG1sb2NrX2ZpeHVwYCwgYGFwcGx5X3ZtYV9sb2NrX2ZsYWdzYCwgYGFwcGx5X21sb2NrYWxsX2ZsYWdzYC4KKiAgICoqYG1tL3ZtYS5jYCoqOiBWZXJpZnkgdGhlIG1vZGlmaWNhdGlvbnMgaW4gYG1tYXBfcmVnaW9uYC4KKiAgICoqYG1tL3ZtYV9leGVjLmNgKio6IENvbmZpcm0gdGhlIGNoYW5nZXMgaW4gYGNyZWF0ZV9pbml0X3N0YWNrX3ZtYWAuCiogICAqKmBtbS9odWdlX21lbW9yeS5jYCoqOiBDaGVjayBgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzYC4KKiAgICoqYG1tL21lbWZkLmNgKio6IENoZWNrIGBtZW1mZF9jaGVja19zZWFsc19tbWFwYC4KCkdpdmVuIHRoYXQgYGRvX21tYXBgIGFuZCBgbW1hcF9yZWdpb25gIGFyZSBob3QgcGF0aHMsIEkgbmVlZCB0byBmb2N1cyBvbiBsZXNzIGdlbmVyaWMgZW50cnlwb2ludHMuIEZ1bmN0aW9ucyBsaWtlIGBtbG9ja19maXh1cGAsIGBhcHBseV92bWFfbG9ja19mbGFnc2AsIGBhcHBseV9tbG9ja2FsbF9mbGFnc2AsIGB1bm1hcF9zb3VyY2Vfdm1hYCwgYGNoZWNrX3ByZXBfdm1hYCwgYGNyZWF0ZV9pbml0X3N0YWNrX3ZtYWAsIGFuZCBgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcGAgc2hvdWxkIGJlIGxlc3MgZnJlcXVlbnQgYW5kIGNhbiBzdGlsbCBiZSBmdXp6ZWQgZWZmZWN0aXZlbHkuIEkgd2lsbCBhbHNvIGluY2x1ZGUgYGRvX21wcm90ZWN0X3BrZXlgIHNpbmNlIHRoZSBlbnRyeSBwb2ludCB3YXMgbW9kaWZpZWQuCgpUaGVyZSBkb24mIzM5O3Qgc2VlbSB0byBiZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgbmVlZGVkIHNpbmNlIHRoaXMgaXMgYSBjb3JlIE1NIGNoYW5nZS4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgZm9yIGB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3NgIGFuZCBgQ09ORklHX01FTUZEX0NSRUFURWAgZm9yIGBtZW1mZF9jaGVja19zZWFsc19tbWFwYCBhcmUgcmVsYXRlZCBidXQgbGlrZWx5IHRvIGFscmVhZHkgYmUgZW5hYmxlZCBieSBkZWZhdWx0LgoKVGh1cywgbXkgcHJvcG9zZWQgYHNldC1yZXN1bHRzYCBjYWxsIHdpbGwgaGF2ZToKCiogICBgV29ydGhGdXp6aW5nOiB0cnVlYAoqICAgYEZvY3VzU3ltYm9sc2A6CiAgICAqICAgYG1sb2NrX2ZpeHVwYAogICAgKiAgIGBhcHBseV92bWFfbG9ja19mbGFnc2AKICAgICogICBgYXBwbHlfbWxvY2thbGxfZmxhZ3NgCiAgICAqICAgYHVubWFwX3NvdXJjZV92bWFgCiAgICAqICAgYGNoZWNrX3ByZXBfdm1hYAogICAgKiAgIGBtZW1mZF9jaGVja19zZWFsc19tbWFwYAogICAgKiAgIGBjcmVhdGVfaW5pdF9zdGFja192bWFgCiAgICAqICAgYHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFnc2AKICAgICogICBgZG9fbXByb3RlY3RfcGtleWAKKiAgIGBFbmFibGVDb25maWdzYDogYFtdYAoKSSBoYXZlIGFsc28gdmVyaWZpZWQgdGhhdCBtb3N0IG9mIHRoZSBsaXN0ZWQgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIGJ1dCBTeXprYWxsZXIgY2FuIHN0aWxsIGZ1enogc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5IGFyZSBpbiB0aGUgc3ltYm9sIHRhYmxlICh3aGljaCB0aGV5IGFyZSkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21sb2NrX2ZpeHVwJiMzNDssCiAgICAmIzM0O2FwcGx5X3ZtYV9sb2NrX2ZsYWdzJiMzNDssCiAgICAmIzM0O2FwcGx5X21sb2NrYWxsX2ZsYWdzJiMzNDssCiAgICAmIzM0O3VubWFwX3NvdXJjZV92bWEmIzM0OywKICAgICYjMzQ7Y2hlY2tfcHJlcF92bWEmIzM0OywKICAgICYjMzQ7bWVtZmRfY2hlY2tfc2VhbHNfbW1hcCYjMzQ7LAogICAgJiMzNDtjcmVhdGVfaW5pdF9zdGFja192bWEmIzM0OywKICAgICYjMzQ7dGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtYWpvciByZWZhY3RvcmluZyBvZiBWTUEgZmxhZ3MgaGFuZGxpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCB0cmFuc2l0aW9uaW5nIGZyb20gYHZtX2ZsYWdzX3RgIHRvIGB2bWFfZmxhZ3NfdGAuIEl0IG1vZGlmaWVzIGNyaXRpY2FsIHBhdGhzIGluIG1tYXAsIG1yZW1hcCwgbWxvY2ssIGFuZCBtcHJvdGVjdC4gVGhlc2UgY2hhbmdlcyBmdW5jdGlvbmFsbHkgYWx0ZXIgaG93IFZNQSBmbGFncyBhcmUgc2V0LCBjbGVhcmVkLCBhbmQgdGVzdGVkLCB3aGljaCBjb3VsZCBpbnRyb2R1Y2UgYnVncyBsaWtlIGluY29ycmVjdCBtZW1vcnkgcHJvdGVjdGlvbnMsIGFjY291bnRpbmcgZXJyb3JzLCBvciBsb2NraW5nIGlzc3Vlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGVzZSBmbGFncywgYXZvaWRpbmcgdGhlIGFic29sdXRlIGhvdHRlc3QgcGF0aHMgbGlrZSBgZG9fbW1hcGAgdG8gcHJldmVudCBza2V3ZWQgZGlzdHJpYnV0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttbG9ja19maXh1cCYjMzQ7LAogICAgJiMzNDthcHBseV92bWFfbG9ja19mbGFncyYjMzQ7LAogICAgJiMzNDthcHBseV9tbG9ja2FsbF9mbGFncyYjMzQ7LAogICAgJiMzNDt1bm1hcF9zb3VyY2Vfdm1hJiMzNDssCiAgICAmIzM0O2NoZWNrX3ByZXBfdm1hJiMzNDssCiAgICAmIzM0O21lbWZkX2NoZWNrX3NlYWxzX21tYXAmIzM0OywKICAgICYjMzQ7Y3JlYXRlX2luaXRfc3RhY2tfdm1hJiMzNDssCiAgICAmIzM0O3RocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWFqb3IgcmVmYWN0b3Jpbmcgb2YgVk1BIGZsYWdzIGhhbmRsaW5nIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgdHJhbnNpdGlvbmluZyBmcm9tIGB2bV9mbGFnc190YCB0byBgdm1hX2ZsYWdzX3RgLiBJdCBtb2RpZmllcyBjcml0aWNhbCBwYXRocyBpbiBtbWFwLCBtcmVtYXAsIG1sb2NrLCBhbmQgbXByb3RlY3QuIFRoZXNlIGNoYW5nZXMgZnVuY3Rpb25hbGx5IGFsdGVyIGhvdyBWTUEgZmxhZ3MgYXJlIHNldCwgY2xlYXJlZCwgYW5kIHRlc3RlZCwgd2hpY2ggY291bGQgaW50cm9kdWNlIGJ1Z3MgbGlrZSBpbmNvcnJlY3QgbWVtb3J5IHByb3RlY3Rpb25zLCBhY2NvdW50aW5nIGVycm9ycywgb3IgbG9ja2luZyBpc3N1ZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlc2UgZmxhZ3MsIGF2b2lkaW5nIHRoZSBhYnNvbHV0ZSBob3R0ZXN0IHBhdGhzIGxpa2UgYGRvX21tYXBgIHRvIHByZXZlbnQgc2tld2VkIGRpc3RyaWJ1dGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMDoxNDozNy4xMzAwMzMyNDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc3NTA5MDI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtbG9ja19maXh1cFwiLFxuICAgIFwiYXBwbHlfdm1hX2xvY2tfZmxhZ3NcIixcbiAgICBcImFwcGx5X21sb2NrYWxsX2ZsYWdzXCIsXG4gICAgXCJ1bm1hcF9zb3VyY2Vfdm1hXCIsXG4gICAgXCJjaGVja19wcmVwX3ZtYVwiLFxuICAgIFwibWVtZmRfY2hlY2tfc2VhbHNfbW1hcFwiLFxuICAgIFwiY3JlYXRlX2luaXRfc3RhY2tfdm1hXCIsXG4gICAgXCJ0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWFqb3IgcmVmYWN0b3Jpbmcgb2YgVk1BIGZsYWdzIGhhbmRsaW5nIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgdHJhbnNpdGlvbmluZyBmcm9tIGB2bV9mbGFnc190YCB0byBgdm1hX2ZsYWdzX3RgLiBJdCBtb2RpZmllcyBjcml0aWNhbCBwYXRocyBpbiBtbWFwLCBtcmVtYXAsIG1sb2NrLCBhbmQgbXByb3RlY3QuIFRoZXNlIGNoYW5nZXMgZnVuY3Rpb25hbGx5IGFsdGVyIGhvdyBWTUEgZmxhZ3MgYXJlIHNldCwgY2xlYXJlZCwgYW5kIHRlc3RlZCwgd2hpY2ggY291bGQgaW50cm9kdWNlIGJ1Z3MgbGlrZSBpbmNvcnJlY3QgbWVtb3J5IHByb3RlY3Rpb25zLCBhY2NvdW50aW5nIGVycm9ycywgb3IgbG9ja2luZyBpc3N1ZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlc2UgZmxhZ3MsIGF2b2lkaW5nIHRoZSBhYnNvbHV0ZSBob3R0ZXN0IHBhdGhzIGxpa2UgYGRvX21tYXBgIHRvIHByZXZlbnQgc2tld2VkIGRpc3RyaWJ1dGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEwOjE0OjM3LjEzMDAzODM0OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4NjI4NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2U4ZGUyYmQxMTlkZTczZDk0NjhkYTRlZjdlMzlkOGU4NDc5NGNhZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAxMiAxMDoxNDozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3Zkc28uYyBiL2FyY2gvbWlwcy9rZXJuZWwvdmRzby5jXFxuaW5kZXggYmQxZmMxN2QzOTc1ZGMuLjk0ODczNzc1ZmMwZjQ1IDEwMDY0NFxcbi0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdmRzby5jXFxuKysrIGIvYXJjaC9taXBzL2tlcm5lbC92ZHNvLmNcXG5AQCAtOTEsOCArOTEsOCBAQCBpbnQgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIGludCB1c2VzX2ludGVycClcXG4gXFxuIFxcdFxcdC8qIE1hcCBkZWxheSBzbG90IGVtdWxhdGlvbiBwYWdlICovXFxuIFxcdFxcdGJhc2UgPSBkb19tbWFwKE5VTEwsIFNUQUNLX1RPUCwgUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX0VYRUMsXFxuLVxcdFxcdFxcdCAgICAgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUgfCBNQVBfRklYRUQsIDAsIDAsIFxcdTAwMjZ1bnVzZWQsXFxuLVxcdFxcdFxcdCAgICAgICBOVUxMKTtcXG4rXFx0XFx0XFx0ICAgICAgIE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSB8IE1BUF9GSVhFRCxcXG4rXFx0XFx0XFx0ICAgICAgIEVNUFRZX1ZNQV9GTEFHUywgMCwgXFx1MDAyNnVudXNlZCwgTlVMTCk7XFxuIFxcdFxcdGlmIChJU19FUlJfVkFMVUUoYmFzZSkpIHtcXG4gXFx0XFx0XFx0cmV0ID0gYmFzZTtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jIGIvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmNcXG5pbmRleCAyOGJlYzViYzc4Nzk0OS4uODIxMjdlMzFkY2E2ZGUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmNcXG4rKysgYi9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuY1xcbkBAIC02NTksNyArNjU5LDggQEAgdW5zaWduZWQgbG9uZyBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHR1bnNpZ25lZCBpbnQgcHNpemU7XFxuIFxcbiBcXHRpZiAocmFkaXhfZW5hYmxlZCgpKVxcbi1cXHRcXHRyZXR1cm4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywgdm1fZmxhZ3MpO1xcbitcXHRcXHRyZXR1cm4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3MpKTtcXG4gXFxuIFxcdGlmIChmaWxwIFxcdTAwMjZcXHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxcbiBcXHRcXHRwc2l6ZSA9IGZpbGVfdG9fcHNpemUoZmlscCk7XFxuQEAgLTY3OSw3ICs2ODAsOCBAQCB1bnNpZ25lZCBsb25nIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0dW5zaWduZWQgaW50IHBzaXplO1xcbiBcXG4gXFx0aWYgKHJhZGl4X2VuYWJsZWQoKSlcXG4tXFx0XFx0cmV0dXJuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihmaWxwLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcXG4rXFx0XFx0cmV0dXJuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihmaWxwLCBhZGRyMCwgbGVuLFxcbitcXHRcXHRcXHRcXHRwZ29mZiwgZmxhZ3MsIGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3MpKTtcXG4gXFxuIFxcdGlmIChmaWxwIFxcdTAwMjZcXHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxcbiBcXHRcXHRwc2l6ZSA9IGZpbGVfdG9fcHNpemUoZmlscCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jXFxuaW5kZXggZTNlZDY4NGRkY2YyOTEuLjMyYTA1ZDg4OWI5YTJiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jXFxuQEAgLTEyNTIsNyArMTI1Miw3IEBAIGludCBkcm1fZ2VtX21tYXBfb2JqKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1bnNpZ25lZCBsb25nIG9ial9zaXplLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHR2bV9mbGFnc19zZXQodm1hLCBWTV9JTyB8IFZNX1BGTk1BUCB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XFxuLVxcdFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS1cXHUwMDNldm1fZmxhZ3MpKTtcXG4rXFx0XFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xcbiBcXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QpO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9kbWFfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9kbWFfaGVscGVyLmNcXG5pbmRleCAxYzAwYTcxYWIzYzlkMC4uN2Q5NjEyMDc1ZDMxMGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZG1hX2hlbHBlci5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZG1hX2hlbHBlci5jXFxuQEAgLTU0MCw3ICs1NDAsNyBAQCBpbnQgZHJtX2dlbV9kbWFfbW1hcChzdHJ1Y3QgZHJtX2dlbV9kbWFfb2JqZWN0ICpkbWFfb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKlxcbiBcXHR2bV9mbGFnc19tb2Qodm1hLCBWTV9ET05URFVNUCB8IFZNX0RPTlRFWFBBTkQsIFZNX1BGTk1BUCk7XFxuIFxcbiBcXHRpZiAoZG1hX29iai1cXHUwMDNlbWFwX25vbmNvaGVyZW50KSB7XFxuLVxcdFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG4rXFx0XFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xcbiBcXG4gXFx0XFx0cmV0ID0gZG1hX21tYXBfcGFnZXMoZHJtX2Rldl9kbWFfZGV2KGRtYV9vYmotXFx1MDAzZWJhc2UuZGV2KSxcXG4gXFx0XFx0XFx0XFx0ICAgICB2bWEsIHZtYS1cXHUwMDNldm1fZW5kIC0gdm1hLVxcdTAwM2V2bV9zdGFydCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuY1xcbmluZGV4IGM5ODk0NTllYjIxNTkxLi4wNmQwMTlkNTFkM2U2YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jXFxuQEAgLTc2NCw3ICs3NjQsNyBAQCBpbnQgZHJtX2dlbV9zaG1lbV9tbWFwKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdFxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fUEZOTUFQIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QKTtcXG4tXFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cXHUwMDNldm1fZmxhZ3MpO1xcbitcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XFxuIFxcdGlmIChzaG1lbS1cXHUwMDNlbWFwX3djKVxcbiBcXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmNcXG5pbmRleCAyZTRkNmQxMTdlZTJkOC4uZjljOGI3YjJiZmM3YWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmNcXG5AQCAtMTMzLDcgKzEzMyw3IEBAIHN0YXRpYyBpbnQgZXRuYXZpdl9nZW1fbW1hcF9vYmooc3RydWN0IGV0bmF2aXZfZ2VtX29iamVjdCAqZXRuYXZpdl9vYmosXFxuIFxcbiBcXHR2bV9mbGFnc19zZXQodm1hLCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xcbiBcXG4tXFx0dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG4rXFx0dm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcXG4gXFxuIFxcdGlmIChldG5hdml2X29iai1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBFVE5BX0JPX1dDKSB7XFxuIFxcdFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bV9wYWdlX3Byb3QpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZ2VtLmNcXG5pbmRleCA5YTYyNzBmM2RjYTZiZi4uMDIwOGM5MjU5NTcyNWMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dlbS5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dlbS5jXFxuQEAgLTM3NywxMyArMzc3LDEzIEBAIHN0YXRpYyBpbnQgZXh5bm9zX2RybV9nZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0XFxuIFxcbiBcXHQvKiBub24tY2FjaGFibGUgYXMgZGVmYXVsdC4gKi9cXG4gXFx0aWYgKGV4eW5vc19nZW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgRVhZTk9TX0JPX0NBQ0hBQkxFKVxcbi1cXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncyk7XFxuK1xcdFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcXG4gXFx0ZWxzZSBpZiAoZXh5bm9zX2dlbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBFWFlOT1NfQk9fV0MpXFxuIFxcdFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID1cXG4tXFx0XFx0XFx0cGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS1cXHUwMDNldm1fZmxhZ3MpKTtcXG4rXFx0XFx0XFx0cGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9XFxuLVxcdFxcdFxcdHBncHJvdF9ub25jYWNoZWQodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKSk7XFxuK1xcdFxcdFxcdHBncHJvdF9ub25jYWNoZWQodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XFxuIFxcbiBcXHRyZXQgPSBleHlub3NfZHJtX2dlbV9tbWFwX2J1ZmZlcihleHlub3NfZ2VtLCB2bWEpO1xcbiBcXHRpZiAocmV0KVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uY1xcbmluZGV4IDA2NDRmODVjNmM4ZTUyLi45Y2E5MGMxYmI1YjQyMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uY1xcbkBAIC0xMTIsNyArMTEyLDcgQEAgaTkxNV9nZW1fbW1hcF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLFxcbiBcXHRcXHR2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7XFxuIFxcdFxcdGlmICh2bWEgXFx1MDAyNlxcdTAwMjYgX192bWFfbWF0Y2hlcyh2bWEsIG9iai1cXHUwMDNlYmFzZS5maWxwLCBhZGRyLCBhcmdzLVxcdTAwM2VzaXplKSlcXG4gXFx0XFx0XFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPVxcbi1cXHRcXHRcXHRcXHRwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncykpO1xcbitcXHRcXHRcXHRcXHRwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGFkZHIgPSAtRU5PTUVNO1xcbiBcXHRcXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XFxuQEAgLTEwMjQsNyArMTAyNCw3IEBAIGk5MTVfZ2VtX29iamVjdF9tbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosXFxuIFxcdGZwdXQoYW5vbik7XFxuIFxcbiBcXHRpZiAob2JqLVxcdTAwM2VvcHMtXFx1MDAzZW1tYXBfb3BzKSB7XFxuLVxcdFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bV9nZXRfcGFnZV9wcm90KHZtYS1cXHUwMDNldm1fZmxhZ3MpKTtcXG4rXFx0XFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xcbiBcXHRcXHR2bWEtXFx1MDAzZXZtX29wcyA9IG9iai1cXHUwMDNlb3BzLVxcdTAwM2VtbWFwX29wcztcXG4gXFx0XFx0dm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBvYmotXFx1MDAzZWJhc2Uudm1hX25vZGUuZHJpdmVyX3ByaXZhdGU7XFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xMDM1LDcgKzEwMzUsNyBAQCBpOTE1X2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLFxcbiBcXHRzd2l0Y2ggKG1tby1cXHUwMDNlbW1hcF90eXBlKSB7XFxuIFxcdGNhc2UgSTkxNV9NTUFQX1RZUEVfV0M6XFxuIFxcdFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID1cXG4tXFx0XFx0XFx0cGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS1cXHUwMDNldm1fZmxhZ3MpKTtcXG4rXFx0XFx0XFx0cGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcXG4gXFx0XFx0dm1hLVxcdTAwM2V2bV9vcHMgPSBcXHUwMDI2dm1fb3BzX2NwdTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbkBAIC0xMDQzLDE5ICsxMDQzLDE5IEBAIGk5MTVfZ2VtX29iamVjdF9tbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosXFxuIFxcdFxcdEdFTV9XQVJOX09OKDEpO1xcbiBcXHRcXHRmYWxsdGhyb3VnaDtcXG4gXFx0Y2FzZSBJOTE1X01NQVBfVFlQRV9XQjpcXG4tXFx0XFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cXHUwMDNldm1fZmxhZ3MpO1xcbitcXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XFxuIFxcdFxcdHZtYS1cXHUwMDNldm1fb3BzID0gXFx1MDAyNnZtX29wc19jcHU7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0Y2FzZSBJOTE1X01NQVBfVFlQRV9VQzpcXG4gXFx0XFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPVxcbi1cXHRcXHRcXHRwZ3Byb3Rfbm9uY2FjaGVkKHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncykpO1xcbitcXHRcXHRcXHRwZ3Byb3Rfbm9uY2FjaGVkKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xcbiBcXHRcXHR2bWEtXFx1MDAzZXZtX29wcyA9IFxcdTAwMjZ2bV9vcHNfY3B1O1xcbiBcXHRcXHRicmVhaztcXG4gXFxuIFxcdGNhc2UgSTkxNV9NTUFQX1RZUEVfR1RUOlxcbiBcXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9XFxuLVxcdFxcdFxcdHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKSk7XFxuK1xcdFxcdFxcdHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XFxuIFxcdFxcdHZtYS1cXHUwMDNldm1fb3BzID0gXFx1MDAyNnZtX29wc19ndHQ7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmNcXG5pbmRleCBjYmY3MjNhNWQ4NmZhOS4uNmE3OGUyNDJkZTdjNmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uY1xcbkBAIC0xMTI1LDcgKzExMjUsNyBAQCBzdGF0aWMgaW50IG1zbV9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdFxcbiBcXHRzdHJ1Y3QgbXNtX2dlbV9vYmplY3QgKm1zbV9vYmogPSB0b19tc21fYm8ob2JqKTtcXG4gXFxuIFxcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX1BGTk1BUCB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XFxuLVxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gbXNtX2dlbV9wZ3Byb3QobXNtX29iaiwgdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKSk7XFxuK1xcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gbXNtX2dlbV9wZ3Byb3QobXNtX29iaiwgdm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uY1xcbmluZGV4IDIwZGJhMDJkNjE3NWJjLi45YTZlZTJlODgwYzBhZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uY1xcbkBAIC01NSw3ICs1NSw3IEBAIHN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfdHRtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiBcXHRcXHRnb3RvIGVycm9yX3VubG9jaztcXG4gXFxuIFxcdG5vdXZlYXVfYm9fZGVsX2lvX3Jlc2VydmVfbHJ1KGJvKTtcXG4tXFx0cHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncyk7XFxuK1xcdHByb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xcbiBcXHRyZXQgPSB0dG1fYm9fdm1fZmF1bHRfcmVzZXJ2ZWQodm1mLCBwcm90LCBUVE1fQk9fVk1fTlVNX1BSRUZBVUxUKTtcXG4gXFx0bm91dmVhdV9ib19hZGRfaW9fcmVzZXJ2ZV9scnUoYm8pO1xcbiBcXHRpZiAocmV0ID09IFZNX0ZBVUxUX1JFVFJZIFxcdTAwMjZcXHUwMDI2ICEodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUKSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYmRldi5jXFxuaW5kZXggY2EzZmIxODZiZjE5NTQuLjQ4ODE3Nzc2NDJkMjk2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZmJkZXYuY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZmJkZXYuY1xcbkBAIC04NCw3ICs4NCw3IEBAIHN0YXRpYyBpbnQgb21hcF9mYmRldl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm9cXG4gXFxuIHN0YXRpYyBpbnQgb21hcF9mYmRldl9mYl9tbWFwKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4ge1xcbi1cXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKSk7XFxuK1xcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcXG4gXFxuIFxcdHJldHVybiBmYl9kZWZlcnJlZF9pb19tbWFwKGluZm8sIHZtYSk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZ2VtLmNcXG5pbmRleCAwMDQwNGZiNmMyOWFhZS4uZmIwZTZmNTU2YjMxNDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9nZW0uY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZ2VtLmNcXG5AQCAtNTM4LDkgKzUzOCw5IEBAIHN0YXRpYyBpbnQgb21hcF9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjXFxuIFxcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCB8IFZNX0lPIHwgVk1fTUlYRURNQVApO1xcbiBcXG4gXFx0aWYgKG9tYXBfb2JqLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9NQVBfQk9fV0MpIHtcXG4tXFx0XFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncykpO1xcbitcXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XFxuIFxcdH0gZWxzZSBpZiAob21hcF9vYmotXFx1MDAzZWZsYWdzIFxcdTAwMjYgT01BUF9CT19VTkNBQ0hFRCkge1xcbi1cXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKSk7XFxuK1xcdFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogV2UgZG8gaGF2ZSBzb21lIHByaXZhdGUgb2JqZWN0cywgYXQgbGVhc3QgZm9yIHNjYW5vdXQgYnVmZmVyc1xcbkBAIC01NTgsNyArNTU4LDcgQEAgc3RhdGljIGludCBvbWFwX2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWNcXG4gXFx0XFx0dm1hLVxcdTAwM2V2bV9wZ29mZiAtPSBkcm1fdm1hX25vZGVfc3RhcnQoXFx1MDAyNm9iai1cXHUwMDNldm1hX25vZGUpO1xcbiBcXHRcXHR2bWFfc2V0X2ZpbGUodm1hLCBvYmotXFx1MDAzZWZpbHApO1xcbiBcXG4tXFx0XFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cXHUwMDNldm1fZmxhZ3MpO1xcbitcXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XFxuIFxcdH1cXG4gXFxuIFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXFxuaW5kZXggYTFlMmViMWNhN2JiZTYuLjc3MDU1NjM1Mzk2ODcwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXFxuQEAgLTc3Niw3ICs3NzYsNyBAQCBzdGF0aWMgaW50IHBhbnRob3JfZ2VtX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdlxcbiBcXHR9XFxuIFxcbiBcXHR2bV9mbGFnc19zZXQodm1hLCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xcbi1cXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncyk7XFxuK1xcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcXG4gXFx0aWYgKHNob3VsZF9tYXBfd2MoYm8pKVxcbiBcXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmNcXG5pbmRleCBiMTg4NTM5ZGNhMGIyNS4uOWExZGM5ZjEyMDcyOWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmNcXG5AQCAtMjU1LDcgKzI1NSw3IEBAIHN0YXRpYyBpbnQgcm9ja2NoaXBfZHJtX2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaixcXG4gXFx0ICovXFxuIFxcdHZtX2ZsYWdzX21vZCh2bWEsIFZNX0lPIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QLCBWTV9QRk5NQVApO1xcbiBcXG4tXFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncykpO1xcbitcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XFxuIFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCk7XFxuIFxcbiBcXHRpZiAocmtfb2JqLVxcdTAwM2VwYWdlcylcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jXFxuaW5kZXggMWQ4ZDI3YTVlYTg5YjguLmY3NmFmNzMzZWE3OTM5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uY1xcbkBAIC02MDIsNyArNjAyLDcgQEAgaW50IF9fdGVncmFfZ2VtX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBcXG4gXFx0XFx0dm1hLVxcdTAwM2V2bV9wZ29mZiA9IHZtX3Bnb2ZmO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRwZ3Byb3RfdCBwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG4rXFx0XFx0cGdwcm90X3QgcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XFxuIFxcbiBcXHRcXHR2bV9mbGFnc19tb2Qodm1hLCBWTV9NSVhFRE1BUCwgVk1fUEZOTUFQKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV92cmFtLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdnJhbS5jXFxuaW5kZXggNGFlM2NiYzM1ZGQzNjQuLjU0NGE2YWJkZGJjOGI2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV92cmFtLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdnJhbS5jXFxuQEAgLTU1LDcgKzU1LDcgQEAgc3RhdGljIGludCB2aXJ0aW9fZ3B1X3ZyYW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaixcXG4gXFxuIFxcdHZtYS1cXHUwMDNldm1fcGdvZmYgLT0gZHJtX3ZtYV9ub2RlX3N0YXJ0KFxcdTAwMjZvYmotXFx1MDAzZXZtYV9ub2RlKTtcXG4gXFx0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fTUlYRURNQVAgfCBWTV9ET05URVhQQU5EKTtcXG4tXFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cXHUwMDNldm1fZmxhZ3MpO1xcbitcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XFxuIFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCk7XFxuIFxcdHZtYS1cXHUwMDNldm1fb3BzID0gXFx1MDAyNnZpcnRpb19ncHVfdnJhbV92bV9vcHM7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9wYWdlX2RpcnR5LmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9wYWdlX2RpcnR5LmNcXG5pbmRleCA0NTU2MWJjMWM5ZWZmZS4uYTlmZDQwMTVhMGNhYTcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcGFnZV9kaXJ0eS5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcGFnZV9kaXJ0eS5jXFxuQEAgLTQ4MSw3ICs0ODEsNyBAQCB2bV9mYXVsdF90IHZtd19ib192bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0aWYgKHZiby1cXHUwMDNlZGlydHkgXFx1MDAyNlxcdTAwMjYgdmJvLVxcdTAwM2VkaXJ0eS1cXHUwMDNlbWV0aG9kID09IFZNV19CT19ESVJUWV9NS1dSSVRFKVxcbiBcXHRcXHRwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgflZNX1NIQVJFRCk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0cHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncyk7XFxuK1xcdFxcdHByb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xcbiBcXG4gXFx0cmV0ID0gdHRtX2JvX3ZtX2ZhdWx0X3Jlc2VydmVkKHZtZiwgcHJvdCwgbnVtX3ByZWZhdWx0KTtcXG4gXFx0aWYgKHJldCA9PSBWTV9GQVVMVF9SRVRSWSBcXHUwMDI2XFx1MDAyNiAhKHZtZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVCkpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuY1xcbmluZGV4IGFiZTI1YWVkZWVhZGVmLi44Mzg3OTdjYzY1ZDc5MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmNcXG5AQCAtMjgxLDcgKzI4MSw3IEBAIHN0YXRpYyB2bV9mYXVsdF90IGJhcnJpZXJfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdHBncHJvdF90IHByb3Q7XFxuIFxcdGludCBpZHg7XFxuIFxcbi1cXHRwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG4rXFx0cHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XFxuIFxcbiBcXHRpZiAoZHJtX2Rldl9lbnRlcihkZXYsIFxcdTAwMjZpZHgpKSB7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfbW1pb19nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9tbWlvX2dlbS5jXFxuaW5kZXggOGM4MDNlZjIzM2NjNGQuLjM3NDFhZTYwZjUzMmJmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9tbWlvX2dlbS5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX21taW9fZ2VtLmNcXG5AQCAtMTQ5LDcgKzE0OSw3IEBAIHN0YXRpYyBpbnQgeGVfbW1pb19nZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJhc2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqXFxuIFxcbiBcXHQvKiBTZXQgdm1fcGdvZmYgKHVzZWQgYXMgYSBmYWtlIGJ1ZmZlciBvZmZzZXQgYnkgRFJNKSB0byAwICovXFxuIFxcdHZtYS1cXHUwMDNldm1fcGdvZmYgPSAwO1xcbi1cXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKSk7XFxuK1xcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcXG4gXFx0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fSU8gfCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVAgfFxcbiBcXHRcXHQgICAgIFZNX0RPTlRDT1BZIHwgVk1fTk9SRVNFUlZFKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uY1xcbmluZGV4IGVlYzRjMWRhM2Y5ZTMxLi5kZDE1ODQ0M2Y1NWYxMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmNcXG5AQCAtODAsNyArODAsNyBAQCBzdGF0aWMgaW50IHhlbl9kcm1fZnJvbnRfZ2VtX29iamVjdF9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaixcXG4gXFx0ICogd2hpY2ggaXMgbWFwcGVkIGFzIE5vcm1hbCBJbm5lciBXcml0ZS1CYWNrIE91dGVyIFdyaXRlLUJhY2tcXG4gXFx0ICogSW5uZXItU2hhcmVhYmxlLlxcbiBcXHQgKi9cXG4tXFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cXHUwMDNldm1fZmxhZ3MpO1xcbitcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiB2bV9vcGVyYXRpb25zX3N0cnVjdC5mYXVsdCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGlmIENQVSBhY2Nlc3NcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiX2lvX2ZvcHMuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYl9pb19mb3BzLmNcXG5pbmRleCA2YWI2MGZjZDAwNTAxNC4uNmQwYThjOGUxNDFhMjIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiX2lvX2ZvcHMuY1xcbisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYl9pb19mb3BzLmNcXG5AQCAtMTYxLDcgKzE2MSw3IEBAIGludCBmYl9pb19tbWFwKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0XFx0bGVuID0gaW5mby1cXHUwMDNlZml4Lm1taW9fbGVuO1xcbiBcXHR9XFxuIFxcbi1cXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncyk7XFxuK1xcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcXG4gXFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZnJhbWVidWZmZXIodm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QsIHZtYS1cXHUwMDNldm1fc3RhcnQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICB2bWEtXFx1MDAzZXZtX2VuZCwgc3RhcnQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uY1xcbmluZGV4IGY1N2ZhMjFhMjUwMzUzLi4zZGU1ODZkYTE5N2JkOSAxMDA2NDRcXG4tLS0gYS9mcy9haW8uY1xcbisrKyBiL2ZzL2Fpby5jXFxuQEAgLTYwNCw3ICs2MDQsNyBAQCBzdGF0aWMgaW50IGFpb19zZXR1cF9yaW5nKHN0cnVjdCBraW9jdHggKmN0eCwgdW5zaWduZWQgaW50IG5yX2V2ZW50cylcXG4gXFxuIFxcdGN0eC1cXHUwMDNlbW1hcF9iYXNlID0gZG9fbW1hcChjdHgtXFx1MDAzZWFpb19yaW5nX2ZpbGUsIDAsIGN0eC1cXHUwMDNlbW1hcF9zaXplLFxcbiBcXHRcXHRcXHRcXHQgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4tXFx0XFx0XFx0XFx0IE1BUF9TSEFSRUQsIDAsIDAsIFxcdTAwMjZ1bnVzZWQsIE5VTEwpO1xcbitcXHRcXHRcXHRcXHQgTUFQX1NIQVJFRCwgRU1QVFlfVk1BX0ZMQUdTLCAwLCBcXHUwMDI2dW51c2VkLCBOVUxMKTtcXG4gXFx0bW1hcF93cml0ZV91bmxvY2sobW0pO1xcbiBcXHRpZiAoSVNfRVJSKCh2b2lkICopY3R4LVxcdTAwM2VtbWFwX2Jhc2UpKSB7XFxuIFxcdFxcdGN0eC1cXHUwMDNlbW1hcF9zaXplID0gMDtcXG5kaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xcbmluZGV4IDlmZGRkMWUwYjgxM2FiLi40MzA2NmY5ZGRmNTJkMSAxMDA2NDRcXG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xcbisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXFxuQEAgLTE4NCw3ICsxODQsOCBAQCBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdGlmIChhZGRyKVxcbiBcXHRcXHRhZGRyMCA9IEFMSUdOKGFkZHIsIGh1Z2VfcGFnZV9zaXplKGgpKTtcXG4gXFxuLVxcdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XFxuK1xcdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhmaWxlLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgRU1QVFlfVk1BX0ZMQUdTKTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdlX21tLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxcbmluZGV4IGNhZTk3YzMwNzI4MDk3Li45ZTQzZTEzOGMwYjc3NyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXFxuQEAgLTM5MSw5ICszOTEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGhwX2Rpc2FibGVkX2J5X2h3KHZvaWQpXFxuIFxcbiB1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyk7XFxuLXVuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rdW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXFxuLVxcdFxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpO1xcbitcXHRcXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpO1xcbiBcXG4gZW51bSBzcGxpdF90eXBlIHtcXG4gXFx0U1BMSVRfVFlQRV9VTklGT1JNLFxcbkBAIC02MTcsOSArNjE3LDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gI2RlZmluZSB0aHBfZ2V0X3VubWFwcGVkX2FyZWFcXHROVUxMXFxuIFxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG4tdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuLVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuK3RocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuK1xcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1mZC5oIGIvaW5jbHVkZS9saW51eC9tZW1mZC5oXFxuaW5kZXggYjRmZGEwOWRhYjlmNjEuLmMxNTllNDBlM2YzNGEwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtZmQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtZmQuaFxcbkBAIC0xNCw5ICsxNCw5IEBAIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeCk7XFxuICAqIHRvIHNlYWxpbmcsIG9yIDAgb3RoZXJ3aXNlLlxcbiAgKlxcbiAgKiBXZSBhbHNvIHVwZGF0ZSBWTUEgZmxhZ3MgaWYgYXBwcm9wcmlhdGUgYnkgbWFuaXB1bGF0aW5nIHRoZSBWTUEgZmxhZ3MgcG9pbnRlZFxcbi0gKiB0byBieSB2bV9mbGFnc19wdHIuXFxuKyAqIHRvIGJ5IHZtYV9mbGFnc19wdHIuXFxuICAqL1xcbi1pbnQgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3NfcHRyKTtcXG4raW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKTtcXG4gc3RydWN0IGZpbGUgKm1lbWZkX2FsbG9jX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4gaW50IG1lbWZkX2dldF9zZWFscyhzdHJ1Y3QgZmlsZSAqZmlsZSk7XFxuIGludCBtZW1mZF9hZGRfc2VhbHMoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzZWFscyk7XFxuQEAgLTMwLDcgKzMwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXFxuIFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiB9XFxuIHN0YXRpYyBpbmxpbmUgaW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsXFxuLVxcdFxcdFxcdFxcdFxcdCB2bV9mbGFnc190ICp2bV9mbGFnc19wdHIpXFxuK1xcdFxcdFxcdFxcdFxcdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzX3B0cilcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCAzMmJiNzIzZmZiYjkyZC4uNTUwZmI5Mjk1N2QxODkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTQ0Miw4ICs0NDIsMTAgQEAgZW51bSB7XFxuICNkZWZpbmUgVk1fU1RBQ0tcXHRJTklUX1ZNX0ZMQUcoU1RBQ0spXFxuICNpZmRlZiBDT05GSUdfU1RBQ0tfR1JPV1NVUFxcbiAjZGVmaW5lIFZNX1NUQUNLX0VBUkxZXFx0SU5JVF9WTV9GTEFHKFNUQUNLX0VBUkxZKVxcbisjZGVmaW5lIFZNQV9TVEFDS19FQVJMWSBta192bWFfZmxhZ3MoVk1BX1NUQUNLX0VBUkxZX0JJVClcXG4gI2Vsc2VcXG4gI2RlZmluZSBWTV9TVEFDS19FQVJMWVxcdFZNX05PTkVcXG4rI2RlZmluZSBWTUFfU1RBQ0tfRUFSTFkgRU1QVFlfVk1BX0ZMQUdTXFxuICNlbmRpZlxcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1BLRVlTXFxuICNkZWZpbmUgVk1fUEtFWV9TSElGVCAoKF9fZm9yY2UgaW50KVZNQV9ISUdIX0FSQ0hfMF9CSVQpXFxuQEAgLTQ2NSwxNSArNDY3LDE4IEBAIGVudW0ge1xcbiAjaWYgZGVmaW5lZChDT05GSUdfWDg2X1VTRVJfU0hBRE9XX1NUQUNLKSB8fCBkZWZpbmVkKENPTkZJR19BUk02NF9HQ1MpIHx8IFxcXFxcXG4gXFx0ZGVmaW5lZChDT05GSUdfUklTQ1ZfVVNFUl9DRkkpXFxuICNkZWZpbmUgVk1fU0hBRE9XX1NUQUNLXFx0SU5JVF9WTV9GTEFHKFNIQURPV19TVEFDSylcXG4rI2RlZmluZSBWTUFfU0hBRE9XX1NUQUNLIG1rX3ZtYV9mbGFncyhWTUFfU0hBRE9XX1NUQUNLX0JJVClcXG4gI2RlZmluZSBWTUFfU1RBUlRHQVBfRkxBR1MgbWtfdm1hX2ZsYWdzKFZNQV9HUk9XU0RPV05fQklULCBWTUFfU0hBRE9XX1NUQUNLX0JJVClcXG4gI2Vsc2VcXG4gI2RlZmluZSBWTV9TSEFET1dfU1RBQ0tcXHRWTV9OT05FXFxuKyNkZWZpbmUgVk1BX1NIQURPV19TVEFDSyBFTVBUWV9WTUFfRkxBR1NcXG4gI2RlZmluZSBWTUFfU1RBUlRHQVBfRkxBR1MgbWtfdm1hX2ZsYWdzKFZNQV9HUk9XU0RPV05fQklUKVxcbiAjZW5kaWZcXG4gI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KVxcbiAjZGVmaW5lIFZNX1NBT1xcdFxcdElOSVRfVk1fRkxBRyhTQU8pXFxuICNlbGlmIGRlZmluZWQoQ09ORklHX1BBUklTQylcXG4gI2RlZmluZSBWTV9HUk9XU1VQXFx0SU5JVF9WTV9GTEFHKEdST1dTVVApXFxuKyNkZWZpbmUgVk1BX0dST1dTVVBcXHRta192bWFfZmxhZ3MoVk1BX0dST1dTVVBfQklUKVxcbiAjZWxpZiBkZWZpbmVkKENPTkZJR19TUEFSQzY0KVxcbiAjZGVmaW5lIFZNX1NQQVJDX0FESVxcdElOSVRfVk1fRkxBRyhTUEFSQ19BREkpXFxuICNkZWZpbmUgVk1fQVJDSF9DTEVBUlxcdElOSVRfVk1fRkxBRyhBUkNIX0NMRUFSKVxcbkBAIC00ODUsNiArNDkwLDcgQEAgZW51bSB7XFxuICNlbmRpZlxcbiAjaWZuZGVmIFZNX0dST1dTVVBcXG4gI2RlZmluZSBWTV9HUk9XU1VQXFx0Vk1fTk9ORVxcbisjZGVmaW5lIFZNQV9HUk9XU1VQXFx0RU1QVFlfVk1BX0ZMQUdTXFxuICNlbmRpZlxcbiAjaWZkZWYgQ09ORklHX0FSTTY0X01URVxcbiAjZGVmaW5lIFZNX01URVxcdFxcdElOSVRfVk1fRkxBRyhNVEUpXFxuQEAgLTU0MCw2ICs1NDYsOCBAQCBlbnVtIHtcXG4gXFxuIC8qIEJpdHMgc2V0IGluIHRoZSBWTUEgdW50aWwgdGhlIHN0YWNrIGlzIGluIGl0cyBmaW5hbCBsb2NhdGlvbiAqL1xcbiAjZGVmaW5lIFZNX1NUQUNLX0lOQ09NUExFVEVfU0VUVVAgKFZNX1JBTkRfUkVBRCB8IFZNX1NFUV9SRUFEIHwgVk1fU1RBQ0tfRUFSTFkpXFxuKyNkZWZpbmUgVk1BX1NUQUNLX0lOQ09NUExFVEVfU0VUVVAgYXBwZW5kX3ZtYV9mbGFncyhcXHRcXHRcXFxcXFxuK1xcdFZNQV9TVEFDS19FQVJMWSwgVk1BX1JBTkRfUkVBRF9CSVQsIFZNQV9TRVFfUkVBRF9CSVQpXFxuIFxcbiAjZGVmaW5lIFRBU0tfRVhFQ19CSVQgKChjdXJyZW50LVxcdTAwM2VwZXJzb25hbGl0eSBcXHUwMDI2IFJFQURfSU1QTElFU19FWEVDKSA/IFxcXFxcXG4gXFx0XFx0ICAgICAgIFZNQV9FWEVDX0JJVCA6IFZNQV9SRUFEX0JJVClcXG5AQCAtMTU3OCwxMSArMTU4NiwyNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2luaXRpYWxfc3RhY2soY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIFxcdFxcdHZtYS1cXHUwMDNldm1fZW5kIFxcdTAwM2U9IHZtYS1cXHUwMDNldm1fbW0tXFx1MDAzZXN0YXJ0X3N0YWNrO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX3RlbXBvcmFyeV9zdGFjayhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4rc3RhdGljIGlubGluZSBib29sIHZtYV9mbGFnc19jYW5fZ3Jvdyhjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MpXFxuIHtcXG4tXFx0aW50IG1heWJlX3N0YWNrID0gdm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IChWTV9HUk9XU0RPV04gfCBWTV9HUk9XU1VQKTtcXG4rXFx0aWYgKHZtYV9mbGFnc190ZXN0X3NpbmdsZV9tYXNrKGZsYWdzLCBWTUFfR1JPV1NVUCkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAodm1hX2ZsYWdzX3Rlc3QoZmxhZ3MsIFZNQV9HUk9XU0RPV05fQklUKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB2bWFfY2FuX2dyb3coY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuK3tcXG4rXFx0cmV0dXJuIHZtYV9mbGFnc19jYW5fZ3JvdyhcXHUwMDI2dm1hLVxcdTAwM2VmbGFncyk7XFxuK31cXG4gXFxuLVxcdGlmICghbWF5YmVfc3RhY2spXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfdGVtcG9yYXJ5X3N0YWNrKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbit7XFxuK1xcdGlmICghdm1hX2Nhbl9ncm93KHZtYSkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGlmICgodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1NUQUNLX0lOQ09NUExFVEVfU0VUVVApID09XFxuQEAgLTQxNzQsMTggKzQxOTUsMjAgQEAgdW5zaWduZWQgbG9uZyByYW5kb21pemVfcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHJhbmdlKTtcXG4gXFxuIHVuc2lnbmVkIGxvbmdcXG4gX19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcXG4tXFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpO1xcbitcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyxcXG4rXFx0XFx0ICAgIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG4gZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXFxuIFxcdFxcdCAgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4ge1xcbi1cXHRyZXR1cm4gX19nZXRfdW5tYXBwZWRfYXJlYShmaWxlLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XFxuK1xcdHJldHVybiBfX2dldF91bm1hcHBlZF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICBFTVBUWV9WTUFfRkxBR1MpO1xcbiB9XFxuIFxcbi1leHRlcm4gdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK3Vuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLFxcbi1cXHR2bV9mbGFnc190IHZtX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nICpwb3B1bGF0ZSxcXG4rXFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nICpwb3B1bGF0ZSxcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCAqdWYpO1xcbiBleHRlcm4gaW50IGRvX3ZtaV9tdW5tYXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sIHN0cnVjdCBsaXN0X2hlYWQgKnVmLFxcbkBAIC00NTg0LDI2ICs0NjA3LDM1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByYW5nZV9pbl92bWFfZGVzYyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxcbiAjaWZkZWYgQ09ORklHX01NVVxcbiBwZ3Byb3RfdCB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpO1xcbiBcXG4tc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXFxuK3N0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXFxuIHtcXG4gXFx0Y29uc3Qgdm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKTtcXG4gXFxuIFxcdHJldHVybiB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4re1xcbitcXHRyZXR1cm4gdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWEtXFx1MDAzZWZsYWdzKTtcXG4rfVxcbitcXG4gdm9pZCB2bWFfc2V0X3BhZ2VfcHJvdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFnc190IHZtX2ZsYWdzKVxcbiB7XFxuIFxcdHJldHVybiBfX3BncHJvdCgwKTtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9nZXRfcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcXG4rc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcXG4re1xcbitcXHRyZXR1cm4gX19wZ3Byb3QoMCk7XFxuK31cXG4rc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4ge1xcbiBcXHRyZXR1cm4gX19wZ3Byb3QoMCk7XFxuIH1cXG4gc3RhdGljIGlubGluZSB2b2lkIHZtYV9zZXRfcGFnZV9wcm90KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiB7XFxuLVxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG4rXFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xcbiB9XFxuICNlbmRpZlxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXFxuaW5kZXggOTVkMDA0MGRmNTg0MTMuLjEwYmU4YTU0YjQxNmY5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxcbkBAIC0xOTMsMjEgKzE5MywxOCBAQCB1bnNpZ25lZCBsb25nIG1tX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcbiBcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGZsYWdzKTtcXG4gXFxuLXVuc2lnbmVkIGxvbmcgbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGxlbixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBwZ29mZixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBmbGFncyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdm1fZmxhZ3NfdCB2bV9mbGFncyk7XFxuK3Vuc2lnbmVkIGxvbmcgbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuIFxcbiB1bnNpZ25lZCBsb25nXFxuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcXG4tXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKTtcXG4rXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpO1xcbiB1bnNpZ25lZCBsb25nXFxuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcbi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3BpY2tfbW1hcF9sYXlvdXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcmxpbWl0ICpybGltX3N0YWNrKSB7fVxcbmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmNcXG5pbmRleCBiM2U4YTU4ZTE3N2QzYi4uYmIxYTcyMWEzZTc0NmUgMTAwNjQ0XFxuLS0tIGEvaXBjL3NobS5jXFxuKysrIGIvaXBjL3NobS5jXFxuQEAgLTE2NjEsNyArMTY2MSw4IEBAIGxvbmcgZG9fc2htYXQoaW50IHNobWlkLCBjaGFyIF9fdXNlciAqc2htYWRkciwgaW50IHNobWZsZyxcXG4gXFx0XFx0XFx0Z290byBpbnZhbGlkO1xcbiBcXHR9XFxuIFxcbi1cXHRhZGRyID0gZG9fbW1hcChmaWxlLCBhZGRyLCBzaXplLCBwcm90LCBmbGFncywgMCwgMCwgXFx1MDAyNnBvcHVsYXRlLCBOVUxMKTtcXG4rXFx0YWRkciA9IGRvX21tYXAoZmlsZSwgYWRkciwgc2l6ZSwgcHJvdCwgZmxhZ3MsIEVNUFRZX1ZNQV9GTEFHUywgMCxcXG4rXFx0XFx0ICAgICAgIFxcdTAwMjZwb3B1bGF0ZSwgTlVMTCk7XFxuIFxcdCpyYWRkciA9IGFkZHI7XFxuIFxcdGVyciA9IDA7XFxuIFxcdGlmIChJU19FUlJfVkFMVUUoYWRkcikpXFxuZGlmZiAtLWdpdCBhL21tL2RlYnVnLmMgYi9tbS9kZWJ1Zy5jXFxuaW5kZXggNDk3NjU0YjM2ZjFhYjUuLjlhMDI5N2IzOTg4ZDg5IDEwMDY0NFxcbi0tLSBhL21tL2RlYnVnLmNcXG4rKysgYi9tbS9kZWJ1Zy5jXFxuQEAgLTE5Nyw3ICsxOTcsNyBAQCB2b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIFxcdFxcdFxcXCJudW1hX25leHRfc2NhbiAlbHUgbnVtYV9zY2FuX29mZnNldCAlbHUgbnVtYV9zY2FuX3NlcSAlZFxcXFxuXFxcIlxcbiAjZW5kaWZcXG4gXFx0XFx0XFxcInRsYl9mbHVzaF9wZW5kaW5nICVkXFxcXG5cXFwiXFxuLVxcdFxcdFxcXCJkZWZfZmxhZ3M6ICUjbHgoJXBHdilcXFxcblxcXCIsXFxuK1xcdFxcdFxcXCJkZWZfZmxhZ3M6ICUqcGIoJXBHdilcXFxcblxcXCIsXFxuIFxcbiBcXHRcXHRtbSwgbW0tXFx1MDAzZXRhc2tfc2l6ZSxcXG4gXFx0XFx0bW0tXFx1MDAzZW1tYXBfYmFzZSwgbW0tXFx1MDAzZW1tYXBfbGVnYWN5X2Jhc2UsXFxuQEAgLTIyNiw3ICsyMjYsOCBAQCB2b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIFxcdFxcdG1tLVxcdTAwM2VudW1hX25leHRfc2NhbiwgbW0tXFx1MDAzZW51bWFfc2Nhbl9vZmZzZXQsIG1tLVxcdTAwM2VudW1hX3NjYW5fc2VxLFxcbiAjZW5kaWZcXG4gXFx0XFx0YXRvbWljX3JlYWQoXFx1MDAyNm1tLVxcdTAwM2V0bGJfZmx1c2hfcGVuZGluZyksXFxuLVxcdFxcdG1tLVxcdTAwM2VkZWZfZmxhZ3MsIFxcdTAwMjZtbS1cXHUwMDNlZGVmX2ZsYWdzXFxuK1xcdFxcdE5VTV9WTUFfRkxBR19CSVRTLCBtbS1cXHUwMDNlZGVmX3ZtYV9mbGFncy5fX3ZtYV9mbGFncyxcXG4rXFx0XFx0XFx1MDAyNm1tLVxcdTAwM2VkZWZfdm1hX2ZsYWdzXFxuIFxcdCk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChkdW1wX21tKTtcXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCAwZGM2ZDYzMDU3MGZhZi4uNDBkNmI0MDc4ZTNkNDMgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMTE5Niw3ICsxMTk2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbiBcXHRcXHRsb2ZmX3Qgb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIHNpemUsXFxuLVxcdFxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuK1xcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncylcXG4ge1xcbiBcXHRsb2ZmX3Qgb2ZmX2VuZCA9IG9mZiArIGxlbjtcXG4gXFx0bG9mZl90IG9mZl9hbGlnbiA9IHJvdW5kX3VwKG9mZiwgc2l6ZSk7XFxuQEAgLTEyMTIsOCArMTIxMiw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHRpZiAobGVuX3BhZCBcXHUwMDNjIGxlbiB8fCAob2ZmICsgbGVuX3BhZCkgXFx1MDAzYyBvZmYpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmV0ID0gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxwLCBhZGRyLCBsZW5fcGFkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBvZmYgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCwgZmxhZ3MsIHZtX2ZsYWdzKTtcXG4rXFx0cmV0ID0gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MoZmlscCwgYWRkciwgbGVuX3BhZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIG9mZiBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHZtYV9mbGFncyk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBUaGUgZmFpbHVyZSBtaWdodCBiZSBkdWUgdG8gbGVuZ3RoIHBhZGRpbmcuIFRoZSBjYWxsZXIgd2lsbCByZXRyeVxcbkBAIC0xMjM4LDI1ICsxMjM5LDI3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi11bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK3Vuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxcbi1cXHRcXHR2bV9mbGFnc190IHZtX2ZsYWdzKVxcbitcXHRcXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyByZXQ7XFxuIFxcdGxvZmZfdCBvZmYgPSAobG9mZl90KXBnb2ZmIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuIFxcbi1cXHRyZXQgPSBfX3RocF9nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIG9mZiwgZmxhZ3MsIFBNRF9TSVpFLCB2bV9mbGFncyk7XFxuK1xcdHJldCA9IF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgb2ZmLCBmbGFncywgUE1EX1NJWkUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHZtYV9mbGFncyk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHZtX2ZsYWdzKTtcXG4rXFx0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHZtYV9mbGFncyk7XFxuIH1cXG4gXFxuIHVuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbiB7XFxuLVxcdHJldHVybiB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XFxuK1xcdHJldHVybiB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIEVNUFRZX1ZNQV9GTEFHUyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodGhwX2dldF91bm1hcHBlZF9hcmVhKTtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL21lbWZkLmMgYi9tbS9tZW1mZC5jXFxuaW5kZXggNmM3MmZlNmNhZWY3NWQuLmM3MDhkOTI1MzNmNGFiIDEwMDY0NFxcbi0tLSBhL21tL21lbWZkLmNcXG4rKysgYi9tbS9tZW1mZC5jXFxuQEAgLTM3MCwzOSArMzcwLDM2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc193cml0ZV9zZWFsZWQodW5zaWduZWQgaW50IHNlYWxzKVxcbiBcXHRyZXR1cm4gc2VhbHMgXFx1MDAyNiAoRl9TRUFMX1dSSVRFIHwgRl9TRUFMX0ZVVFVSRV9XUklURSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgY2hlY2tfd3JpdGVfc2VhbCh2bV9mbGFnc190ICp2bV9mbGFnc19wdHIpXFxuK3N0YXRpYyBpbnQgY2hlY2tfd3JpdGVfc2VhbCh2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzX3B0cilcXG4ge1xcbi1cXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gKnZtX2ZsYWdzX3B0cjtcXG4tXFx0dm1fZmxhZ3NfdCBtYXNrID0gdm1fZmxhZ3MgXFx1MDAyNiAoVk1fU0hBUkVEIHwgVk1fV1JJVEUpO1xcbi1cXG4gXFx0LyogSWYgYSBwcml2YXRlIG1hcHBpbmcgdGhlbiB3cml0YWJpbGl0eSBpcyBpcnJlbGV2YW50LiAqL1xcbi1cXHRpZiAoIShtYXNrIFxcdTAwMjYgVk1fU0hBUkVEKSlcXG4rXFx0aWYgKCF2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3NfcHRyLCBWTUFfU0hBUkVEX0JJVCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogTmV3IFBST1RfV1JJVEUgYW5kIE1BUF9TSEFSRUQgbW1hcHMgYXJlIG5vdCBhbGxvd2VkIHdoZW5cXG4gXFx0ICogd3JpdGUgc2VhbHMgYXJlIGFjdGl2ZS5cXG4gXFx0ICovXFxuLVxcdGlmIChtYXNrIFxcdTAwMjYgVk1fV1JJVEUpXFxuK1xcdGlmICh2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3NfcHRyLCBWTUFfV1JJVEVfQklUKSlcXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFRoaXMgaXMgYSByZWFkLW9ubHkgbWFwcGluZywgZGlzYWxsb3cgbXByb3RlY3QoKSBmcm9tIG1ha2luZyBhXFxuIFxcdCAqIHdyaXRlLXNlYWxlZCBtYXBwaW5nIHdyaXRhYmxlIGluIGZ1dHVyZS5cXG4gXFx0ICovXFxuLVxcdCp2bV9mbGFnc19wdHIgXFx1MDAyNj0gflZNX01BWVdSSVRFO1xcbitcXHR2bWFfZmxhZ3NfY2xlYXIodm1hX2ZsYWdzX3B0ciwgVk1BX01BWVdSSVRFX0JJVCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4taW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzX3B0cilcXG4raW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKVxcbiB7XFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXHR1bnNpZ25lZCBpbnQgKnNlYWxzX3B0ciA9IG1lbWZkX2ZpbGVfc2VhbHNfcHRyKGZpbGUpO1xcbiBcXHR1bnNpZ25lZCBpbnQgc2VhbHMgPSBzZWFsc19wdHIgPyAqc2VhbHNfcHRyIDogMDtcXG4gXFxuIFxcdGlmIChpc193cml0ZV9zZWFsZWQoc2VhbHMpKVxcbi1cXHRcXHRlcnIgPSBjaGVja193cml0ZV9zZWFsKHZtX2ZsYWdzX3B0cik7XFxuK1xcdFxcdGVyciA9IGNoZWNrX3dyaXRlX3NlYWwodm1hX2ZsYWdzX3B0cik7XFxuIFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuZGlmZiAtLWdpdCBhL21tL21sb2NrLmMgYi9tbS9tbG9jay5jXFxuaW5kZXggOTdlNDkwMzhkOGQzM2UuLmVmYTY3MTZlNGRmYmRmIDEwMDY0NFxcbi0tLSBhL21tL21sb2NrLmNcXG4rKysgYi9tbS9tbG9jay5jXFxuQEAgLTMyOSw3ICszMjksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWxsb3dfbWxvY2tfbXVubG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHQgKiBiZSBzcGxpdC4gQW5kIHRoZSBwYWdlcyBhcmUgbm90IGluIFZNX0xPQ0tlZCBWTUFcXG4gXFx0ICogY2FuIGJlIHJlY2xhaW1lZC5cXG4gXFx0ICovXFxuLVxcdGlmICghKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9MT0NLRUQpKVxcbitcXHRpZiAoIXZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdC8qIGZvbGlvX3dpdGhpbl9yYW5nZSgpIGNhbm5vdCB0YWtlIEtTTSwgYnV0IGFueSBzbWFsbCBmb2xpbyBpcyBPSyAqL1xcbkBAIC0zNjgsNyArMzY4LDcgQEAgc3RhdGljIGludCBtbG9ja19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRmb2xpbyA9IHBtZF9mb2xpbygqcG1kKTtcXG4gXFx0XFx0aWYgKGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSlcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTE9DS0VEKVxcbitcXHRcXHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpXFxuIFxcdFxcdFxcdG1sb2NrX2ZvbGlvKGZvbGlvKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRtdW5sb2NrX2ZvbGlvKGZvbGlvKTtcXG5AQCAtMzkzLDcgKzM5Myw3IEBAIHN0YXRpYyBpbnQgbWxvY2tfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0aWYgKCFhbGxvd19tbG9ja19tdW5sb2NrKGZvbGlvLCB2bWEsIHN0YXJ0LCBlbmQsIHN0ZXApKVxcbiBcXHRcXHRcXHRnb3RvIG5leHRfZW50cnk7XFxuIFxcbi1cXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX0xPQ0tFRClcXG4rXFx0XFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKVxcbiBcXHRcXHRcXHRtbG9ja19mb2xpbyhmb2xpbyk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0bXVubG9ja19mb2xpbyhmb2xpbyk7XFxuQEAgLTQxNyw4ICs0MTcsOCBAQCBzdGF0aWMgaW50IG1sb2NrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuICAqIEBlbmQgLSBlbmQgb2YgcmFuZ2UgaW4gQHZtYVxcbiAgKiBAbmV3X3ZtYV9mbGFncyAtIHRoZSBuZXcgc2V0IG9mIGZsYWdzIGZvciBAdm1hLlxcbiAgKlxcbi0gKiBDYWxsZWQgZm9yIG1sb2NrKCksIG1sb2NrMigpIGFuZCBtbG9ja2FsbCgpLCB0byBzZXQgQHZtYSBWTV9MT0NLRUQ7XFxuLSAqIGNhbGxlZCBmb3IgbXVubG9jaygpIGFuZCBtdW5sb2NrYWxsKCksIHRvIGNsZWFyIFZNX0xPQ0tFRCBmcm9tIEB2bWEuXFxuKyAqIENhbGxlZCBmb3IgbWxvY2soKSwgbWxvY2syKCkgYW5kIG1sb2NrYWxsKCksIHRvIHNldCBAdm1hIFZNQV9MT0NLRURfQklUO1xcbisgKiBjYWxsZWQgZm9yIG11bmxvY2soKSBhbmQgbXVubG9ja2FsbCgpLCB0byBjbGVhciBWTUFfTE9DS0VEX0JJVCBmcm9tIEB2bWEuXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBtbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbkBAIC00MzEsMTQgKzQzMSwxNCBAQCBzdGF0aWMgdm9pZCBtbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBUaGVyZSBpcyBhIHNsaWdodCBjaGFuY2UgdGhhdCBjb25jdXJyZW50IHBhZ2UgbWlncmF0aW9uLFxcbi1cXHQgKiBvciBwYWdlIHJlY2xhaW0gZmluZGluZyBhIHBhZ2Ugb2YgdGhpcyBub3ctVk1fTE9DS0VEIHZtYSxcXG4rXFx0ICogb3IgcGFnZSByZWNsYWltIGZpbmRpbmcgYSBwYWdlIG9mIHRoaXMgbm93LVZNQV9MT0NLRURfQklUIHZtYSxcXG4gXFx0ICogd2lsbCBjYWxsIG1sb2NrX3ZtYV9mb2xpbygpIGFuZCByYWlzZSBwYWdlJ3MgbWxvY2tfY291bnQ6XFxuIFxcdCAqIGRvdWJsZSBjb3VudGluZywgbGVhdmluZyB0aGUgcGFnZSB1bmV2aWN0YWJsZSBpbmRlZmluaXRlbHkuXFxuLVxcdCAqIENvbW11bmljYXRlIHRoaXMgZGFuZ2VyIHRvIG1sb2NrX3ZtYV9mb2xpbygpIHdpdGggVk1fSU8sXFxuLVxcdCAqIHdoaWNoIGlzIGEgVk1fU1BFQ0lBTCBmbGFnIG5vdCBhbGxvd2VkIG9uIFZNX0xPQ0tFRCB2bWFzLlxcbitcXHQgKiBDb21tdW5pY2F0ZSB0aGlzIGRhbmdlciB0byBtbG9ja192bWFfZm9saW8oKSB3aXRoIFZNQV9JT19CSVQsXFxuK1xcdCAqIHdoaWNoIGlzIGEgVk1BX1NQRUNJQUxfRkxBR1MgZmxhZyBub3QgYWxsb3dlZCBvbiBWTUFfTE9DS0VEX0JJVCB2bWFzLlxcbiBcXHQgKiBtbWFwX2xvY2sgaXMgaGVsZCBpbiB3cml0ZSBtb2RlIGhlcmUsIHNvIHRoaXMgd2VpcmRcXG4gXFx0ICogY29tYmluYXRpb24gc2hvdWxkIG5vdCBiZSB2aXNpYmxlIHRvIG90aGVyIG1tYXBfbG9jayB1c2VycztcXG4tXFx0ICogYnV0IFdSSVRFX09OQ0Ugc28gcm1hcCB3YWxrZXJzIG11c3Qgc2VlIFZNX0lPIGlmIFZNX0xPQ0tFRC5cXG4rXFx0ICogYnV0IFdSSVRFX09OQ0Ugc28gcm1hcCB3YWxrZXJzIG11c3Qgc2VlIFZNQV9JT19CSVQgaWYgVk1BX0xPQ0tFRF9CSVQuXFxuIFxcdCAqL1xcbiBcXHRpZiAodm1hX2ZsYWdzX3Rlc3QobmV3X3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKVxcbiBcXHRcXHR2bWFfZmxhZ3Nfc2V0KG5ld192bWFfZmxhZ3MsIFZNQV9JT19CSVQpO1xcbkBAIC00NTgsNyArNDU4LDcgQEAgc3RhdGljIHZvaWQgbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAvKlxcbiAgKiBtbG9ja19maXh1cCAgLSBoYW5kbGUgbWxvY2tbYWxsXS9tdW5sb2NrW2FsbF0gcmVxdWVzdHMuXFxuICAqXFxuLSAqIEZpbHRlcnMgb3V0IFxcXCJzcGVjaWFsXFxcIiB2bWFzIC0tIFZNX0xPQ0tFRCBuZXZlciBnZXRzIHNldCBmb3IgdGhlc2UsIGFuZFxcbisgKiBGaWx0ZXJzIG91dCBcXFwic3BlY2lhbFxcXCIgdm1hcyAtLSBWTUFfTE9DS0VEX0JJVCBuZXZlciBnZXRzIHNldCBmb3IgdGhlc2UsIGFuZFxcbiAgKiBtdW5sb2NrIGlzIGEgbm8tb3AuICBIb3dldmVyLCBmb3Igc29tZSBzcGVjaWFsIHZtYXMsIHdlIGdvIGFoZWFkIGFuZFxcbiAgKiBwb3B1bGF0ZSB0aGUgcHRlcy5cXG4gICpcXG5AQCAtNDY2LDI0ICs0NjYsMjMgQEAgc3RhdGljIHZvaWQgbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAgKi9cXG4gc3RhdGljIGludCBtbG9ja19maXh1cChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHQgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqcHJldiwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB2bV9mbGFnc190IG5ld2ZsYWdzKVxcbitcXHQgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHZtYV9mbGFnc190ICpuZXdfdm1hX2ZsYWdzKVxcbiB7XFxuLVxcdHZtYV9mbGFnc190IG5ld192bWFfZmxhZ3MgPSBsZWdhY3lfdG9fdm1hX2ZsYWdzKG5ld2ZsYWdzKTtcXG4gXFx0Y29uc3Qgdm1hX2ZsYWdzX3Qgb2xkX3ZtYV9mbGFncyA9IHZtYS1cXHUwMDNlZmxhZ3M7XFxuIFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVxcdTAwM2V2bV9tbTtcXG4gXFx0aW50IG5yX3BhZ2VzO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuLVxcdGlmICh2bWFfZmxhZ3Nfc2FtZV9wYWlyKFxcdTAwMjZvbGRfdm1hX2ZsYWdzLCBcXHUwMDI2bmV3X3ZtYV9mbGFncykgfHxcXG4rXFx0aWYgKHZtYV9mbGFnc19zYW1lX3BhaXIoXFx1MDAyNm9sZF92bWFfZmxhZ3MsIG5ld192bWFfZmxhZ3MpIHx8XFxuIFxcdCAgICB2bWFfaXNfc2VjcmV0bWVtKHZtYSkgfHwgIXZtYV9zdXBwb3J0c19tbG9jayh2bWEpKSB7XFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIERvbid0IHNldCBWTV9MT0NLRUQgb3IgVk1fTE9DS09ORkFVTFQgYW5kIGRvbid0IGNvdW50Llxcbi1cXHRcXHQgKiBGb3Igc2VjcmV0bWVtLCBkb24ndCBhbGxvdyB0aGUgbWVtb3J5IHRvIGJlIHVubG9ja2VkLlxcbitcXHRcXHQgKiBEb24ndCBzZXQgVk1BX0xPQ0tFRF9CSVQgb3IgVk1BX0xPQ0tPTkZBVUxUX0JJVCBhbmQgZG9uJ3RcXG4rXFx0XFx0ICogY291bnQuICBGb3Igc2VjcmV0bWVtLCBkb24ndCBhbGxvdyB0aGUgbWVtb3J5IHRvIGJlIHVubG9ja2VkLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3Modm1pLCAqcHJldiwgdm1hLCBzdGFydCwgZW5kLCBcXHUwMDI2bmV3X3ZtYV9mbGFncyk7XFxuK1xcdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3Modm1pLCAqcHJldiwgdm1hLCBzdGFydCwgZW5kLCBuZXdfdm1hX2ZsYWdzKTtcXG4gXFx0aWYgKElTX0VSUih2bWEpKSB7XFxuIFxcdFxcdHJldCA9IFBUUl9FUlIodm1hKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuQEAgLTQ5Myw3ICs0OTIsNyBAQCBzdGF0aWMgaW50IG1sb2NrX2ZpeHVwKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdCAqIEtlZXAgdHJhY2sgb2YgYW1vdW50IG9mIGxvY2tlZCBWTS5cXG4gXFx0ICovXFxuIFxcdG5yX3BhZ2VzID0gKGVuZCAtIHN0YXJ0KSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi1cXHRpZiAoIXZtYV9mbGFnc190ZXN0KFxcdTAwMjZuZXdfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpXFxuK1xcdGlmICghdm1hX2ZsYWdzX3Rlc3QobmV3X3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKVxcbiBcXHRcXHRucl9wYWdlcyA9IC1ucl9wYWdlcztcXG4gXFx0ZWxzZSBpZiAodm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNm9sZF92bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSlcXG4gXFx0XFx0bnJfcGFnZXMgPSAwO1xcbkBAIC01MDIsMTUgKzUwMSwxNSBAQCBzdGF0aWMgaW50IG1sb2NrX2ZpeHVwKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdC8qXFxuIFxcdCAqIHZtX2ZsYWdzIGlzIHByb3RlY3RlZCBieSB0aGUgbW1hcF9sb2NrIGhlbGQgaW4gd3JpdGUgbW9kZS5cXG4gXFx0ICogSXQncyBva2F5IGlmIHRyeV90b191bm1hcF9vbmUgdW5tYXBzIGEgcGFnZSBqdXN0IGFmdGVyIHdlXFxuLVxcdCAqIHNldCBWTV9MT0NLRUQsIHBvcHVsYXRlX3ZtYV9wYWdlX3JhbmdlIHdpbGwgYnJpbmcgaXQgYmFjay5cXG4rXFx0ICogc2V0IFZNQV9MT0NLRURfQklULCBwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suXFxuIFxcdCAqL1xcbi1cXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNm5ld192bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRpZiAodm1hX2ZsYWdzX3Rlc3QobmV3X3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICB2bWFfZmxhZ3NfdGVzdChcXHUwMDI2b2xkX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKSB7XFxuIFxcdFxcdC8qIE5vIHdvcmsgdG8gZG8sIGFuZCBtbG9ja2luZyB0d2ljZSB3b3VsZCBiZSB3cm9uZyAqL1xcbiBcXHRcXHR2bWFfc3RhcnRfd3JpdGUodm1hKTtcXG4tXFx0XFx0dm1hLVxcdTAwM2VmbGFncyA9IG5ld192bWFfZmxhZ3M7XFxuK1xcdFxcdHZtYS1cXHUwMDNlZmxhZ3MgPSAqbmV3X3ZtYV9mbGFncztcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0bWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCwgXFx1MDAyNm5ld192bWFfZmxhZ3MpO1xcbitcXHRcXHRtbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCBuZXdfdm1hX2ZsYWdzKTtcXG4gXFx0fVxcbiBvdXQ6XFxuIFxcdCpwcmV2ID0gdm1hO1xcbkBAIC01MTgsNyArNTE3LDcgQEAgc3RhdGljIGludCBtbG9ja19maXh1cChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGFwcGx5X3ZtYV9sb2NrX2ZsYWdzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sXFxuLVxcdFxcdFxcdFxcdHZtX2ZsYWdzX3QgZmxhZ3MpXFxuK1xcdFxcdFxcdFxcdGNvbnN0IHZtYV9mbGFnc190ICpmbGFncylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG5zdGFydCwgZW5kLCB0bXA7XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCAqcHJldjtcXG5AQCAtNTQzLDE4ICs1NDIsMjAgQEAgc3RhdGljIGludCBhcHBseV92bWFfbG9ja19mbGFncyh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLFxcbiBcXHR0bXAgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbiBcXHRmb3JfZWFjaF92bWFfcmFuZ2Uodm1pLCB2bWEsIGVuZCkge1xcbiBcXHRcXHRpbnQgZXJyb3I7XFxuLVxcdFxcdHZtX2ZsYWdzX3QgbmV3ZmxhZ3M7XFxuK1xcdFxcdHZtYV9mbGFnc190IG5ld2ZsYWdzO1xcbiBcXG4gXFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fc3RhcnQgIT0gdG1wKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdFxcdG5ld2ZsYWdzID0gdm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IH5WTV9MT0NLRURfTUFTSztcXG4tXFx0XFx0bmV3ZmxhZ3MgfD0gZmxhZ3M7XFxuK1xcdFxcdG5ld2ZsYWdzID0gdm1hLVxcdTAwM2VmbGFncztcXG4rXFx0XFx0dm1hX2ZsYWdzX2NsZWFyX21hc2soXFx1MDAyNm5ld2ZsYWdzLCBWTUFfTE9DS0VEX01BU0spO1xcbitcXHRcXHR2bWFfZmxhZ3Nfc2V0X21hc2soXFx1MDAyNm5ld2ZsYWdzLCAqZmxhZ3MpO1xcbitcXG4gXFx0XFx0LyogSGVyZSB3ZSBrbm93IHRoYXQgIHZtYS1cXHUwMDNldm1fc3RhcnQgXFx1MDAzYz0gbnN0YXJ0IFxcdTAwM2Mgdm1hLVxcdTAwM2V2bV9lbmQuICovXFxuIFxcdFxcdHRtcCA9IHZtYS1cXHUwMDNldm1fZW5kO1xcbiBcXHRcXHRpZiAodG1wIFxcdTAwM2UgZW5kKVxcbiBcXHRcXHRcXHR0bXAgPSBlbmQ7XFxuLVxcdFxcdGVycm9yID0gbWxvY2tfZml4dXAoXFx1MDAyNnZtaSwgdm1hLCBcXHUwMDI2cHJldiwgbnN0YXJ0LCB0bXAsIG5ld2ZsYWdzKTtcXG4rXFx0XFx0ZXJyb3IgPSBtbG9ja19maXh1cChcXHUwMDI2dm1pLCB2bWEsIFxcdTAwMjZwcmV2LCBuc3RhcnQsIHRtcCwgXFx1MDAyNm5ld2ZsYWdzKTtcXG4gXFx0XFx0aWYgKGVycm9yKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcdFxcdHRtcCA9IHZtYV9pdGVyX2VuZChcXHUwMDI2dm1pKTtcXG5AQCAtNTg5LDcgKzU5MCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X21tX21sb2NrZWRfcGFnZV9ucihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0ZW5kID0gc3RhcnQgKyBsZW47XFxuIFxcbiBcXHRmb3JfZWFjaF92bWFfcmFuZ2Uodm1pLCB2bWEsIGVuZCkge1xcbi1cXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX0xPQ0tFRCkge1xcbitcXHRcXHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpIHtcXG4gXFx0XFx0XFx0aWYgKHN0YXJ0IFxcdTAwM2Ugdm1hLVxcdTAwM2V2bV9zdGFydClcXG4gXFx0XFx0XFx0XFx0Y291bnQgLT0gKHN0YXJ0IC0gdm1hLVxcdTAwM2V2bV9zdGFydCk7XFxuIFxcdFxcdFxcdGlmIChlbmQgXFx1MDAzYyB2bWEtXFx1MDAzZXZtX2VuZCkge1xcbkBAIC02MTUsNyArNjE2LDggQEAgc3RhdGljIGludCBfX21sb2NrX3Bvc2l4X2Vycm9yX3JldHVybihsb25nIHJldHZhbClcXG4gXFx0cmV0dXJuIHJldHZhbDtcXG4gfVxcbiBcXG4tc3RhdGljIF9fbXVzdF9jaGVjayBpbnQgZG9fbWxvY2sodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbiwgdm1fZmxhZ3NfdCBmbGFncylcXG4rc3RhdGljIF9fbXVzdF9jaGVjayBpbnQgZG9fbWxvY2sodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbixcXG4rXFx0XFx0XFx0XFx0IHZtYV9mbGFnc190ICpmbGFncylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGxvY2tlZDtcXG4gXFx0dW5zaWduZWQgbG9uZyBsb2NrX2xpbWl0O1xcbkBAIC02NjQsMjQgKzY2NiwyNyBAQCBzdGF0aWMgX19tdXN0X2NoZWNrIGludCBkb19tbG9jayh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLCB2bV9mbGFnc190IGZsYVxcbiBcXG4gU1lTQ0FMTF9ERUZJTkUyKG1sb2NrLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW4pXFxuIHtcXG4tXFx0cmV0dXJuIGRvX21sb2NrKHN0YXJ0LCBsZW4sIFZNX0xPQ0tFRCk7XFxuK1xcdHZtYV9mbGFnc190IGZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9MT0NLRURfQklUKTtcXG4rXFxuK1xcdHJldHVybiBkb19tbG9jayhzdGFydCwgbGVuLCBcXHUwMDI2ZmxhZ3MpO1xcbiB9XFxuIFxcbiBTWVNDQUxMX0RFRklORTMobWxvY2syLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW4sIGludCwgZmxhZ3MpXFxuIHtcXG4tXFx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IFZNX0xPQ0tFRDtcXG4rXFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9MT0NLRURfQklUKTtcXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IH5NTE9DS19PTkZBVUxUKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IE1MT0NLX09ORkFVTFQpXFxuLVxcdFxcdHZtX2ZsYWdzIHw9IFZNX0xPQ0tPTkZBVUxUO1xcbitcXHRcXHR2bWFfZmxhZ3Nfc2V0KFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLT05GQVVMVF9CSVQpO1xcbiBcXG4tXFx0cmV0dXJuIGRvX21sb2NrKHN0YXJ0LCBsZW4sIHZtX2ZsYWdzKTtcXG4rXFx0cmV0dXJuIGRvX21sb2NrKHN0YXJ0LCBsZW4sIFxcdTAwMjZ2bWFfZmxhZ3MpO1xcbiB9XFxuIFxcbiBTWVNDQUxMX0RFRklORTIobXVubG9jaywgdW5zaWduZWQgbG9uZywgc3RhcnQsIHNpemVfdCwgbGVuKVxcbiB7XFxuK1xcdHZtYV9mbGFnc190IGZsYWdzID0gRU1QVFlfVk1BX0ZMQUdTO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0c3RhcnQgPSB1bnRhZ2dlZF9hZGRyKHN0YXJ0KTtcXG5AQCAtNjkxLDcgKzY5Niw3IEBAIFNZU0NBTExfREVGSU5FMihtdW5sb2NrLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW4pXFxuIFxcbiBcXHRpZiAobW1hcF93cml0ZV9sb2NrX2tpbGxhYmxlKGN1cnJlbnQtXFx1MDAzZW1tKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4tXFx0cmV0ID0gYXBwbHlfdm1hX2xvY2tfZmxhZ3Moc3RhcnQsIGxlbiwgMCk7XFxuK1xcdHJldCA9IGFwcGx5X3ZtYV9sb2NrX2ZsYWdzKHN0YXJ0LCBsZW4sIFxcdTAwMjZmbGFncyk7XFxuIFxcdG1tYXBfd3JpdGVfdW5sb2NrKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTY5OSw0NiArNzA0LDQ4IEBAIFNZU0NBTExfREVGSU5FMihtdW5sb2NrLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW4pXFxuIFxcbiAvKlxcbiAgKiBUYWtlIHRoZSBNQ0xfKiBmbGFncyBwYXNzZWQgaW50byBtbG9ja2FsbCAob3IgMCBpZiBjYWxsZWQgZnJvbSBtdW5sb2NrYWxsKVxcbi0gKiBhbmQgdHJhbnNsYXRlIGludG8gdGhlIGFwcHJvcHJpYXRlIG1vZGlmaWNhdGlvbnMgdG8gbW0tXFx1MDAzZWRlZl9mbGFncyBhbmQvb3IgdGhlXFxuLSAqIGZsYWdzIGZvciBhbGwgY3VycmVudCBWTUFzLlxcbisgKiBhbmQgdHJhbnNsYXRlIGludG8gdGhlIGFwcHJvcHJpYXRlIG1vZGlmaWNhdGlvbnMgdG8gbW0tXFx1MDAzZWRlZl92bWFfZmxhZ3MgYW5kL29yXFxuKyAqIHRoZSBmbGFncyBmb3IgYWxsIGN1cnJlbnQgVk1Bcy5cXG4gICpcXG4gICogVGhlcmUgYXJlIGEgY291cGxlIG9mIHN1YnRsZXRpZXMgd2l0aCB0aGlzLiAgSWYgbWxvY2thbGwoKSBpcyBjYWxsZWQgbXVsdGlwbGVcXG4gICogdGltZXMgd2l0aCBkaWZmZXJlbnQgZmxhZ3MsIHRoZSB2YWx1ZXMgZG8gbm90IG5lY2Vzc2FyaWx5IHN0YWNrLiAgSWYgbWxvY2thbGxcXG4gICogaXMgY2FsbGVkIG9uY2UgaW5jbHVkaW5nIHRoZSBNQ0xfRlVUVVJFIGZsYWcgYW5kIHRoZW4gYSBzZWNvbmQgdGltZSB3aXRob3V0XFxuLSAqIGl0LCBWTV9MT0NLRUQgYW5kIFZNX0xPQ0tPTkZBVUxUIHdpbGwgYmUgY2xlYXJlZCBmcm9tIG1tLVxcdTAwM2VkZWZfZmxhZ3MuXFxuKyAqIGl0LCBWTUFfTE9DS0VEX0JJVCBhbmQgVk1BX0xPQ0tPTkZBVUxUX0JJVCB3aWxsIGJlIGNsZWFyZWQgZnJvbVxcbisgKiBtbS1cXHUwMDNlZGVmX3ZtYV9mbGFncy5cXG4gICovXFxuIHN0YXRpYyBpbnQgYXBwbHlfbWxvY2thbGxfZmxhZ3MoaW50IGZsYWdzKVxcbiB7XFxuIFxcdFZNQV9JVEVSQVRPUih2bWksIGN1cnJlbnQtXFx1MDAzZW1tLCAwKTtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsICpwcmV2ID0gTlVMTDtcXG4tXFx0dm1fZmxhZ3NfdCB0b19hZGQgPSAwO1xcbitcXHR2bWFfZmxhZ3NfdCB0b19hZGQgPSBFTVBUWV9WTUFfRkxBR1M7XFxuIFxcbi1cXHRjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlZGVmX2ZsYWdzIFxcdTAwMjY9IH5WTV9MT0NLRURfTUFTSztcXG4rXFx0dm1hX2ZsYWdzX2NsZWFyX21hc2soXFx1MDAyNm1tLVxcdTAwM2VkZWZfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX01BU0spO1xcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNQ0xfRlVUVVJFKSB7XFxuLVxcdFxcdGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VkZWZfZmxhZ3MgfD0gVk1fTE9DS0VEO1xcbitcXHRcXHR2bWFfZmxhZ3Nfc2V0KFxcdTAwMjZtbS1cXHUwMDNlZGVmX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpO1xcbiBcXG4gXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTUNMX09ORkFVTFQpXFxuLVxcdFxcdFxcdGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VkZWZfZmxhZ3MgfD0gVk1fTE9DS09ORkFVTFQ7XFxuK1xcdFxcdFxcdHZtYV9mbGFnc19zZXQoXFx1MDAyNm1tLVxcdTAwM2VkZWZfdm1hX2ZsYWdzLCBWTUFfTE9DS09ORkFVTFRfQklUKTtcXG4gXFxuIFxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgTUNMX0NVUlJFTlQpKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgTUNMX0NVUlJFTlQpIHtcXG4tXFx0XFx0dG9fYWRkIHw9IFZNX0xPQ0tFRDtcXG4rXFx0XFx0dm1hX2ZsYWdzX3NldChcXHUwMDI2dG9fYWRkLCBWTUFfTE9DS0VEX0JJVCk7XFxuIFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE1DTF9PTkZBVUxUKVxcbi1cXHRcXHRcXHR0b19hZGQgfD0gVk1fTE9DS09ORkFVTFQ7XFxuK1xcdFxcdFxcdHZtYV9mbGFnc19zZXQoXFx1MDAyNnRvX2FkZCwgVk1BX0xPQ0tPTkZBVUxUX0JJVCk7XFxuIFxcdH1cXG4gXFxuIFxcdGZvcl9lYWNoX3ZtYSh2bWksIHZtYSkge1xcbiBcXHRcXHRpbnQgZXJyb3I7XFxuLVxcdFxcdHZtX2ZsYWdzX3QgbmV3ZmxhZ3M7XFxuK1xcdFxcdHZtYV9mbGFnc190IG5ld2ZsYWdzID0gdm1hLVxcdTAwM2VmbGFncztcXG4gXFxuLVxcdFxcdG5ld2ZsYWdzID0gdm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IH5WTV9MT0NLRURfTUFTSztcXG4tXFx0XFx0bmV3ZmxhZ3MgfD0gdG9fYWRkO1xcbitcXHRcXHR2bWFfZmxhZ3NfY2xlYXJfbWFzayhcXHUwMDI2bmV3ZmxhZ3MsIFZNQV9MT0NLRURfTUFTSyk7XFxuK1xcdFxcdHZtYV9mbGFnc19zZXRfbWFzayhcXHUwMDI2bmV3ZmxhZ3MsIHRvX2FkZCk7XFxuIFxcbiBcXHRcXHRlcnJvciA9IG1sb2NrX2ZpeHVwKFxcdTAwMjZ2bWksIHZtYSwgXFx1MDAyNnByZXYsIHZtYS1cXHUwMDNldm1fc3RhcnQsIHZtYS1cXHUwMDNldm1fZW5kLFxcbi1cXHRcXHRcXHRcXHQgICAgbmV3ZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm5ld2ZsYWdzKTtcXG4gXFx0XFx0LyogSWdub3JlIGVycm9ycywgYnV0IHByZXYgbmVlZHMgZml4aW5nIHVwLiAqL1xcbiBcXHRcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdFxcdHByZXYgPSB2bWE7XFxuZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuY1xcbmluZGV4IDMwOGE0M2VhYmQ4M2IxLi40YmYyNmIwZjFlNmUzNiAxMDA2NDRcXG4tLS0gYS9tbS9tbWFwLmNcXG4rKysgYi9tbS9tbWFwLmNcXG5AQCAtODAsMTMgKzgwLDEzIEBAIGNvcmVfcGFyYW0oaWdub3JlX3JsaW1pdF9kYXRhLCBpZ25vcmVfcmxpbWl0X2RhdGEsIGJvb2wsIDA2NDQpO1xcbiAvKiBVcGRhdGUgdm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgdG8gcmVmbGVjdCB2bWEtXFx1MDAzZXZtX2ZsYWdzLiAqL1xcbiB2b2lkIHZtYV9zZXRfcGFnZV9wcm90KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiB7XFxuLVxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWEtXFx1MDAzZXZtX2ZsYWdzO1xcbitcXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSB2bWEtXFx1MDAzZWZsYWdzO1xcbiBcXHRwZ3Byb3RfdCB2bV9wYWdlX3Byb3Q7XFxuIFxcbi1cXHR2bV9wYWdlX3Byb3QgPSB2bV9wZ3Byb3RfbW9kaWZ5KHZtYS1cXHUwMDNldm1fcGFnZV9wcm90LCB2bV9mbGFncyk7XFxuK1xcdHZtX3BhZ2VfcHJvdCA9IHZtYV9wZ3Byb3RfbW9kaWZ5KHZtYS1cXHUwMDNldm1fcGFnZV9wcm90LCB2bWFfZmxhZ3MpO1xcbiBcXHRpZiAodm1hX3dhbnRzX3dyaXRlbm90aWZ5KHZtYSwgdm1fcGFnZV9wcm90KSkge1xcbi1cXHRcXHR2bV9mbGFncyBcXHUwMDI2PSB+Vk1fU0hBUkVEO1xcbi1cXHRcXHR2bV9wYWdlX3Byb3QgPSB2bV9wZ3Byb3RfbW9kaWZ5KHZtX3BhZ2VfcHJvdCwgdm1fZmxhZ3MpO1xcbitcXHRcXHR2bWFfZmxhZ3NfY2xlYXIoXFx1MDAyNnZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpO1xcbitcXHRcXHR2bV9wYWdlX3Byb3QgPSB2bWFfcGdwcm90X21vZGlmeSh2bV9wYWdlX3Byb3QsIHZtYV9mbGFncyk7XFxuIFxcdH1cXG4gXFx0LyogcmVtb3ZlX3Byb3RlY3Rpb25fcHRlcyByZWFkcyB2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCB3aXRob3V0IG1tYXBfbG9jayAqL1xcbiBcXHRXUklURV9PTkNFKHZtYS1cXHUwMDNldm1fcGFnZV9wcm90LCB2bV9wYWdlX3Byb3QpO1xcbkBAIC0xMDIsMTUgKzEwMiwxNiBAQCB2b2lkIHZtYV9zZXRfcGFnZV9wcm90KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAgKi9cXG4gc3RhdGljIGludCBjaGVja19icmtfbGltaXRzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pXFxuIHtcXG4rXFx0Y29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4rXFx0Y29uc3QgYm9vbCBpc19kZWZfbG9ja2VkID1cXG4rXFx0XFx0dm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNm1tLVxcdTAwM2VkZWZfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbWFwcGVkX2FkZHI7XFxuIFxcbiBcXHRtYXBwZWRfYWRkciA9IGdldF91bm1hcHBlZF9hcmVhKE5VTEwsIGFkZHIsIGxlbiwgMCwgTUFQX0ZJWEVEKTtcXG4gXFx0aWYgKElTX0VSUl9WQUxVRShtYXBwZWRfYWRkcikpXFxuIFxcdFxcdHJldHVybiBtYXBwZWRfYWRkcjtcXG4gXFxuLVxcdHJldHVybiBtbG9ja19mdXR1cmVfb2soY3VycmVudC1cXHUwMDNlbW0sXFxuLVxcdFxcdFxcdCAgICAgIGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VkZWZfZmxhZ3MgXFx1MDAyNiBWTV9MT0NLRUQsIGxlbilcXG4tXFx0XFx0PyAwIDogLUVBR0FJTjtcXG4rXFx0cmV0dXJuIG1sb2NrX2Z1dHVyZV9vayhtbSwgaXNfZGVmX2xvY2tlZCwgbGVuKSA/IDAgOiAtRUFHQUlOO1xcbiB9XFxuIFxcbiBTWVNDQUxMX0RFRklORTEoYnJrLCB1bnNpZ25lZCBsb25nLCBicmspXFxuQEAgLTE5Nyw3ICsxOTgsNyBAQCBTWVNDQUxMX0RFRklORTEoYnJrLCB1bnNpZ25lZCBsb25nLCBicmspXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0bW0tXFx1MDAzZWJyayA9IGJyaztcXG4tXFx0aWYgKG1tLVxcdTAwM2VkZWZfZmxhZ3MgXFx1MDAyNiBWTV9MT0NLRUQpXFxuK1xcdGlmICh2bWFfZmxhZ3NfdGVzdChcXHUwMDI2bW0tXFx1MDAzZWRlZl92bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSlcXG4gXFx0XFx0cG9wdWxhdGUgPSB0cnVlO1xcbiBcXG4gc3VjY2VzczpcXG5AQCAtMjgwLDcgKzI4MSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX21tYXBfb2soc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuICAqIGRvX21tYXAoKSAtIFBlcmZvcm0gYSB1c2VybGFuZCBtZW1vcnkgbWFwcGluZyBpbnRvIHRoZSBjdXJyZW50IHByb2Nlc3NcXG4gICogYWRkcmVzcyBzcGFjZSBvZiBsZW5ndGggQGxlbiB3aXRoIHByb3RlY3Rpb24gYml0cyBAcHJvdCwgbW1hcCBmbGFncyBAZmxhZ3NcXG4gICogKGZyb20gd2hpY2ggVk1BIGZsYWdzIHdpbGwgYmUgaW5mZXJyZWQpLCBhbmQgYW55IGFkZGl0aW9uYWwgVk1BIGZsYWdzIHRvXFxuLSAqIGFwcGx5IEB2bV9mbGFncy4gSWYgdGhpcyBpcyBhIGZpbGUtYmFja2VkIG1hcHBpbmcgdGhlbiB0aGUgZmlsZSBpcyBzcGVjaWZpZWRcXG4rICogYXBwbHkgQHZtYV9mbGFncy4gSWYgdGhpcyBpcyBhIGZpbGUtYmFja2VkIG1hcHBpbmcgdGhlbiB0aGUgZmlsZSBpcyBzcGVjaWZpZWRcXG4gICogaW4gQGZpbGUgYW5kIHBhZ2Ugb2Zmc2V0IGludG8gdGhlIGZpbGUgdmlhIEBwZ29mZi5cXG4gICpcXG4gICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwZXJmb3JtIHNlY3VyaXR5IGNoZWNrcyBvbiB0aGUgZmlsZSBhbmQgYXNzdW1lcywgaWZcXG5AQCAtMzIwLDcgKzMyMSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX21tYXBfb2soc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuICAqICgyKSBmb3IgZGV0YWlscy5cXG4gICogQGZsYWdzOiBGbGFncyBzcGVjaWZ5aW5nIGhvdyB0aGUgbWFwcGluZyBzaG91bGQgYmUgcGVyZm9ybWVkLCBzZWUgbW1hcCAoMilcXG4gICogZm9yIGRldGFpbHMuXFxuLSAqIEB2bV9mbGFnczogVk1BIGZsYWdzIHdoaWNoIHNob3VsZCBiZSBzZXQgYnkgZGVmYXVsdCwgb3IgMCBvdGhlcndpc2UuXFxuKyAqIEB2bWFfZmxhZ3M6IFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgc2V0IGJ5IGRlZmF1bHQsIG9yIEVNUFRZX1ZNQV9GTEFHU1xcbisgKiBvdGhlcndpc2UuXFxuICAqIEBwZ29mZjogUGFnZSBvZmZzZXQgaW50byB0aGUgQGZpbGUgaWYgZmlsZS1iYWNrZWQsIHNob3VsZCBiZSAwIG90aGVyd2lzZS5cXG4gICogQHBvcHVsYXRlOiBBIHBvaW50ZXIgdG8gYSB2YWx1ZSB3aGljaCB3aWxsIGJlIHNldCB0byAwIGlmIG5vIHBvcHVsYXRpb24gb2ZcXG4gICogdGhlIHJhbmdlIGlzIHJlcXVpcmVkLCBvciB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHBvcHVsYXRlIGlmIGl0IGlzLiBNdXN0IGJlXFxuQEAgLTMzNSw3ICszMzcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9tbWFwX29rKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiAgKi9cXG4gdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHByb3QsXFxuLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyxcXG4gXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyAqcG9wdWxhdGUsXFxuIFxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnVmKVxcbiB7XFxuQEAgLTM5OSwxMyArNDAxLDE4IEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHQgKiB0by4gd2UgYXNzdW1lIGFjY2VzcyBwZXJtaXNzaW9ucyBoYXZlIGJlZW4gaGFuZGxlZCBieSB0aGUgb3BlblxcbiBcXHQgKiBvZiB0aGUgbWVtb3J5IG9iamVjdCwgc28gd2UgZG9uJ3QgZG8gYW55IGhlcmUuXFxuIFxcdCAqL1xcbi1cXHR2bV9mbGFncyB8PSBjYWxjX3ZtX3Byb3RfYml0cyhwcm90LCBwa2V5KSB8IGNhbGNfdm1fZmxhZ19iaXRzKGZpbGUsIGZsYWdzKSB8XFxuLVxcdFxcdFxcdG1tLVxcdTAwM2VkZWZfZmxhZ3MgfCBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDO1xcbitcXHR2bWFfZmxhZ3Nfc2V0X21hc2soXFx1MDAyNnZtYV9mbGFncyxcXG4rXFx0XFx0XFx0ICAgbGVnYWN5X3RvX3ZtYV9mbGFncyhjYWxjX3ZtX3Byb3RfYml0cyhwcm90LCBwa2V5KSkpO1xcbitcXHR2bWFfZmxhZ3Nfc2V0X21hc2soXFx1MDAyNnZtYV9mbGFncyxcXG4rXFx0XFx0XFx0ICAgbGVnYWN5X3RvX3ZtYV9mbGFncyhjYWxjX3ZtX2ZsYWdfYml0cyhmaWxlLCBmbGFncykpKTtcXG4rXFx0dm1hX2ZsYWdzX3NldF9tYXNrKFxcdTAwMjZ2bWFfZmxhZ3MsIG1tLVxcdTAwM2VkZWZfdm1hX2ZsYWdzKTtcXG4rXFx0dm1hX2ZsYWdzX3NldChcXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQsXFxuK1xcdFxcdCAgICAgIFZNQV9NQVlFWEVDX0JJVCk7XFxuIFxcbiBcXHQvKiBPYnRhaW4gdGhlIGFkZHJlc3MgdG8gbWFwIHRvLiB3ZSB2ZXJpZnkgKG9yIHNlbGVjdCkgaXQgYW5kIGVuc3VyZVxcbiBcXHQgKiB0aGF0IGl0IHJlcHJlc2VudHMgYSB2YWxpZCBzZWN0aW9uIG9mIHRoZSBhZGRyZXNzIHNwYWNlLlxcbiBcXHQgKi9cXG4tXFx0YWRkciA9IF9fZ2V0X3VubWFwcGVkX2FyZWEoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcXG4rXFx0YWRkciA9IF9fZ2V0X3VubWFwcGVkX2FyZWEoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtYV9mbGFncyk7XFxuIFxcdGlmIChJU19FUlJfVkFMVUUoYWRkcikpXFxuIFxcdFxcdHJldHVybiBhZGRyO1xcbiBcXG5AQCAtNDE4LDcgKzQyNSw3IEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRpZiAoIWNhbl9kb19tbG9jaygpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiBcXG4tXFx0aWYgKCFtbG9ja19mdXR1cmVfb2sobW0sIHZtX2ZsYWdzIFxcdTAwMjYgVk1fTE9DS0VELCBsZW4pKVxcbitcXHRpZiAoIW1sb2NrX2Z1dHVyZV9vayhtbSwgdm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNnZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpLCBsZW4pKVxcbiBcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gXFxuIFxcdGlmIChmaWxlKSB7XFxuQEAgLTQ2MSwyMiArNDY4LDIzIEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRpZiAoSVNfQVBQRU5EKGlub2RlKSBcXHUwMDI2XFx1MDAyNiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfV1JJVEUpKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFxuLVxcdFxcdFxcdHZtX2ZsYWdzIHw9IFZNX1NIQVJFRCB8IFZNX01BWVNIQVJFO1xcbitcXHRcXHRcXHR2bWFfZmxhZ3Nfc2V0KFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklULCBWTUFfTUFZU0hBUkVfQklUKTtcXG4gXFx0XFx0XFx0aWYgKCEoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfV1JJVEUpKVxcbi1cXHRcXHRcXHRcXHR2bV9mbGFncyBcXHUwMDI2PSB+KFZNX01BWVdSSVRFIHwgVk1fU0hBUkVEKTtcXG4rXFx0XFx0XFx0XFx0dm1hX2ZsYWdzX2NsZWFyKFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9NQVlXUklURV9CSVQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFZNQV9TSEFSRURfQklUKTtcXG4gXFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuIFxcdFxcdGNhc2UgTUFQX1BSSVZBVEU6XFxuIFxcdFxcdFxcdGlmICghKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX1JFQUQpKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0XFx0XFx0aWYgKHBhdGhfbm9leGVjKFxcdTAwMjZmaWxlLVxcdTAwM2VmX3BhdGgpKSB7XFxuLVxcdFxcdFxcdFxcdGlmICh2bV9mbGFncyBcXHUwMDI2IFZNX0VYRUMpXFxuK1xcdFxcdFxcdFxcdGlmICh2bWFfZmxhZ3NfdGVzdChcXHUwMDI2dm1hX2ZsYWdzLCBWTUFfRVhFQ19CSVQpKVxcbiBcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi1cXHRcXHRcXHRcXHR2bV9mbGFncyBcXHUwMDI2PSB+Vk1fTUFZRVhFQztcXG4rXFx0XFx0XFx0XFx0dm1hX2ZsYWdzX2NsZWFyKFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9NQVlFWEVDX0JJVCk7XFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdGlmICghY2FuX21tYXBfZmlsZShmaWxlKSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLVxcdFxcdFxcdGlmICh2bV9mbGFncyBcXHUwMDI2IChWTV9HUk9XU0RPV058Vk1fR1JPV1NVUCkpXFxuK1xcdFxcdFxcdGlmICh2bWFfZmxhZ3NfY2FuX2dyb3coXFx1MDAyNnZtYV9mbGFncykpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuQEAgLTQ4OCwyMyArNDk2LDI3IEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHQgKiBDaGVjayB0byBzZWUgaWYgd2UgYXJlIHZpb2xhdGluZyBhbnkgc2VhbHMgYW5kIHVwZGF0ZSBWTUFcXG4gXFx0XFx0ICogZmxhZ3MgaWYgbmVjZXNzYXJ5IHRvIGF2b2lkIGZ1dHVyZSBzZWFsIHZpb2xhdGlvbnMuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRlcnIgPSBtZW1mZF9jaGVja19zZWFsc19tbWFwKGZpbGUsIFxcdTAwMjZ2bV9mbGFncyk7XFxuK1xcdFxcdGVyciA9IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoZmlsZSwgXFx1MDAyNnZtYV9mbGFncyk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZyllcnI7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHN3aXRjaCAoZmxhZ3MgXFx1MDAyNiBNQVBfVFlQRSkge1xcbiBcXHRcXHRjYXNlIE1BUF9TSEFSRUQ6XFxuLVxcdFxcdFxcdGlmICh2bV9mbGFncyBcXHUwMDI2IChWTV9HUk9XU0RPV058Vk1fR1JPV1NVUCkpXFxuK1xcdFxcdFxcdGlmICh2bWFfZmxhZ3NfY2FuX2dyb3coXFx1MDAyNnZtYV9mbGFncykpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBJZ25vcmUgcGdvZmYuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRwZ29mZiA9IDA7XFxuLVxcdFxcdFxcdHZtX2ZsYWdzIHw9IFZNX1NIQVJFRCB8IFZNX01BWVNIQVJFO1xcbitcXHRcXHRcXHR2bWFfZmxhZ3Nfc2V0KFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklULCBWTUFfTUFZU0hBUkVfQklUKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgTUFQX0RST1BQQUJMRTpcXG4tXFx0XFx0XFx0aWYgKFZNX0RST1BQQUJMRSA9PSBWTV9OT05FKVxcbitcXHRcXHRjYXNlIE1BUF9EUk9QUEFCTEU6IHtcXG4rXFx0XFx0XFx0dm1hX2ZsYWdzX3QgZHJvcHBhYmxlID0gVk1BX0RST1BQQUJMRTtcXG4rXFxuK1xcdFxcdFxcdGlmICh2bWFfZmxhZ3NfZW1wdHkoXFx1MDAyNmRyb3BwYWJsZSkpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0XFx0dm1hX2ZsYWdzX3NldF9tYXNrKFxcdTAwMjZ2bWFfZmxhZ3MsIGRyb3BwYWJsZSk7XFxuK1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBBIGxvY2tlZCBvciBzdGFjayBhcmVhIG1ha2VzIG5vIHNlbnNlIHRvIGJlIGRyb3BwYWJsZS5cXG4gXFx0XFx0XFx0ICpcXG5AQCAtNTE1LDIzICs1MjcsMjQgQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiAoTUFQX0xPQ0tFRCB8IE1BUF9IVUdFVExCKSlcXG4gXFx0XFx0XFx0ICAgICAgICByZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0XFx0aWYgKHZtX2ZsYWdzIFxcdTAwMjYgKFZNX0dST1dTRE9XTiB8IFZNX0dST1dTVVApKVxcbitcXHRcXHRcXHRpZiAodm1hX2ZsYWdzX2Nhbl9ncm93KFxcdTAwMjZ2bWFfZmxhZ3MpKVxcbiBcXHRcXHRcXHQgICAgICAgIHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0XFx0XFx0dm1fZmxhZ3MgfD0gVk1fRFJPUFBBQkxFO1xcbi1cXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogSWYgdGhlIHBhZ2VzIGNhbiBiZSBkcm9wcGVkLCB0aGVuIGl0IGRvZXNuJ3QgbWFrZVxcbiBcXHRcXHRcXHQgKiBzZW5zZSB0byByZXNlcnZlIHRoZW0uXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHR2bV9mbGFncyB8PSBWTV9OT1JFU0VSVkU7XFxuK1xcdFxcdFxcdHZtYV9mbGFnc19zZXQoXFx1MDAyNnZtYV9mbGFncywgVk1BX05PUkVTRVJWRV9CSVQpO1xcbiBcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogTGlrZXdpc2UsIHRoZXkncmUgdm9sYXRpbGUgZW5vdWdoIHRoYXQgdGhleVxcbiBcXHRcXHRcXHQgKiBzaG91bGRuJ3Qgc3Vydml2ZSBmb3JrcyBvciBjb3JlZHVtcHMuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHR2bV9mbGFncyB8PSBWTV9XSVBFT05GT1JLIHwgVk1fRE9OVERVTVA7XFxuK1xcdFxcdFxcdHZtYV9mbGFnc19zZXQoXFx1MDAyNnZtYV9mbGFncywgVk1BX1dJUEVPTkZPUktfQklULFxcbitcXHRcXHRcXHRcXHQgICAgICBWTUFfRE9OVERVTVBfQklUKTtcXG4rXFxuIFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbitcXHRcXHR9XFxuIFxcdFxcdGNhc2UgTUFQX1BSSVZBVEU6XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIFNldCBwZ29mZiBhY2NvcmRpbmcgdG8gYWRkciBmb3IgYW5vbl92bWEuXFxuQEAgLTU0NCwyMiArNTU3LDIyIEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHR9XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBTZXQgJ1ZNX05PUkVTRVJWRScgaWYgd2Ugc2hvdWxkIG5vdCBhY2NvdW50IGZvciB0aGVcXG4tXFx0ICogbWVtb3J5IHVzZSBvZiB0aGlzIG1hcHBpbmcuXFxuK1xcdCAqIFNldCBWTUFfTk9SRVNFUlZFX0JJVCBpZiB3ZSBzaG91bGQgbm90IGFjY291bnQgZm9yIHRoZSBtZW1vcnkgdXNlXFxuK1xcdCAqIG9mIHRoaXMgbWFwcGluZy5cXG4gXFx0ICovXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IE1BUF9OT1JFU0VSVkUpIHtcXG4gXFx0XFx0LyogV2UgaG9ub3IgTUFQX05PUkVTRVJWRSBpZiBhbGxvd2VkIHRvIG92ZXJjb21taXQgKi9cXG4gXFx0XFx0aWYgKHN5c2N0bF9vdmVyY29tbWl0X21lbW9yeSAhPSBPVkVSQ09NTUlUX05FVkVSKVxcbi1cXHRcXHRcXHR2bV9mbGFncyB8PSBWTV9OT1JFU0VSVkU7XFxuK1xcdFxcdFxcdHZtYV9mbGFnc19zZXQoXFx1MDAyNnZtYV9mbGFncywgVk1BX05PUkVTRVJWRV9CSVQpO1xcbiBcXG4gXFx0XFx0LyogaHVnZXRsYiBhcHBsaWVzIHN0cmljdCBvdmVyY29tbWl0IHVubGVzcyBNQVBfTk9SRVNFUlZFICovXFxuIFxcdFxcdGlmIChmaWxlIFxcdTAwMjZcXHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbGUpKVxcbi1cXHRcXHRcXHR2bV9mbGFncyB8PSBWTV9OT1JFU0VSVkU7XFxuK1xcdFxcdFxcdHZtYV9mbGFnc19zZXQoXFx1MDAyNnZtYV9mbGFncywgVk1BX05PUkVTRVJWRV9CSVQpO1xcbiBcXHR9XFxuIFxcbi1cXHRhZGRyID0gbW1hcF9yZWdpb24oZmlsZSwgYWRkciwgbGVuLCB2bV9mbGFncywgcGdvZmYsIHVmKTtcXG4rXFx0YWRkciA9IG1tYXBfcmVnaW9uKGZpbGUsIGFkZHIsIGxlbiwgdm1hX2ZsYWdzLCBwZ29mZiwgdWYpO1xcbiBcXHRpZiAoIUlTX0VSUl9WQUxVRShhZGRyKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKCh2bV9mbGFncyBcXHUwMDI2IFZNX0xPQ0tFRCkgfHxcXG4rXFx0ICAgICh2bWFfZmxhZ3NfdGVzdChcXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkgfHxcXG4gXFx0ICAgICAoZmxhZ3MgXFx1MDAyNiAoTUFQX1BPUFVMQVRFIHwgTUFQX05PTkJMT0NLKSkgPT0gTUFQX1BPUFVMQVRFKSlcXG4gXFx0XFx0KnBvcHVsYXRlID0gbGVuO1xcbiBcXHRyZXR1cm4gYWRkcjtcXG5AQCAtNjQ1LDkgKzY1OCw5IEBAIFNZU0NBTExfREVGSU5FMShvbGRfbW1hcCwgc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBfX3VzZXIgKiwgYXJnKVxcbiAgKiBEZXRlcm1pbmUgaWYgdGhlIGFsbG9jYXRpb24gbmVlZHMgdG8gZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm9cXG4gICogZXhpc3RpbmcgbWFwcGluZyB3aXRoaW4gaXQncyBndWFyZCBnYXBzLCBmb3IgdXNlIGFzIHN0YXJ0X2dhcC5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1fZmxhZ3NfdCB2bV9mbGFncylcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXFxuIHtcXG4tXFx0aWYgKHZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBRE9XX1NUQUNLKVxcbitcXHRpZiAodm1hX2ZsYWdzX3Rlc3Rfc2luZ2xlX21hc2soXFx1MDAyNnZtYV9mbGFncywgVk1BX1NIQURPV19TVEFDSykpXFxuIFxcdFxcdHJldHVybiBQQUdFX1NJWkU7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNjg5LDcgKzcwMiw3IEBAIHVuc2lnbmVkIGxvbmcgdm1fdW5tYXBwZWRfYXJlYShzdHJ1Y3Qgdm1fdW5tYXBwZWRfYXJlYV9pbmZvICppbmZvKVxcbiB1bnNpZ25lZCBsb25nXFxuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcXG4tXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxcbitcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgKnByZXY7XFxuQEAgLTcxNCw3ICs3MjcsNyBAQCBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdGluZm8ubGVuZ3RoID0gbGVuO1xcbiBcXHRpbmZvLmxvd19saW1pdCA9IG1tLVxcdTAwM2VtbWFwX2Jhc2U7XFxuIFxcdGluZm8uaGlnaF9saW1pdCA9IG1tYXBfZW5kO1xcbi1cXHRpbmZvLnN0YXJ0X2dhcCA9IHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bV9mbGFncyk7XFxuK1xcdGluZm8uc3RhcnRfZ2FwID0gc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtYV9mbGFncyk7XFxuIFxcdGlmIChmaWxwIFxcdTAwMjZcXHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxcbiBcXHRcXHRpbmZvLmFsaWduX21hc2sgPSBodWdlX3BhZ2VfbWFza19hbGlnbihmaWxwKTtcXG4gXFx0cmV0dXJuIHZtX3VubWFwcGVkX2FyZWEoXFx1MDAyNmluZm8pO1xcbkBAIC03MjcsNyArNzQwLDcgQEAgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcXG4ge1xcbiBcXHRyZXR1cm4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyxcXG4tXFx0XFx0XFx0XFx0XFx0IHZtX2ZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0XFx0IGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3MpKTtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuQEAgLTczOCw3ICs3NTEsNyBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIHVuc2lnbmVkIGxvbmdcXG4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsICpwcmV2O1xcbiBcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbkBAIC03NjYsNyArNzc5LDcgQEAgZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdGluZm8ubGVuZ3RoID0gbGVuO1xcbiBcXHRpbmZvLmxvd19saW1pdCA9IFBBR0VfU0laRTtcXG4gXFx0aW5mby5oaWdoX2xpbWl0ID0gYXJjaF9nZXRfbW1hcF9iYXNlKGFkZHIsIG1tLVxcdTAwM2VtbWFwX2Jhc2UpO1xcbi1cXHRpbmZvLnN0YXJ0X2dhcCA9IHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bV9mbGFncyk7XFxuK1xcdGluZm8uc3RhcnRfZ2FwID0gc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtYV9mbGFncyk7XFxuIFxcdGlmIChmaWxwIFxcdTAwMjZcXHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxcbiBcXHRcXHRpbmZvLmFsaWduX21hc2sgPSBodWdlX3BhZ2VfbWFza19hbGlnbihmaWxwKTtcXG4gXFx0YWRkciA9IHZtX3VubWFwcGVkX2FyZWEoXFx1MDAyNmluZm8pO1xcbkBAIC03OTUsMjMgKzgwOCwyNCBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuIHtcXG4gXFx0cmV0dXJuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHZtX2ZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3MpKTtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuLXVuc2lnbmVkIGxvbmcgbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcXG4rdW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyxcXG4rXFx0XFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxcbiB7XFxuIFxcdGlmIChtbV9mbGFnc190ZXN0KE1NRl9UT1BET1dOLCBjdXJyZW50LVxcdTAwM2VtbSkpXFxuIFxcdFxcdHJldHVybiBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oZmlscCwgYWRkciwgbGVuLCBwZ29mZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZmxhZ3MsIHZtX2ZsYWdzKTtcXG4tXFx0cmV0dXJuIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0ZmxhZ3MsIHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSk7XFxuK1xcdHJldHVybiBhcmNoX2dldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxcbitcXHRcXHRcXHR2bWFfZmxhZ3NfdG9fbGVnYWN5KHZtYV9mbGFncykpO1xcbiB9XFxuIFxcbiB1bnNpZ25lZCBsb25nXFxuIF9fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nICgqZ2V0X2FyZWEpKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsXFxuIFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZylcXG5AQCAtODQ2LDExICs4NjAsMTEgQEAgX19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcXG4gXFx0XFx0ICAgXFx1MDAyNlxcdTAwMjYgIWFkZHIgLyogbm8gaGludCAqL1xcbiBcXHRcXHQgICBcXHUwMDI2XFx1MDAyNiBJU19BTElHTkVEKGxlbiwgUE1EX1NJWkUpKSB7XFxuIFxcdFxcdC8qIEVuc3VyZXMgdGhhdCBsYXJnZXIgYW5vbnltb3VzIG1hcHBpbmdzIGFyZSBUSFAgYWxpZ25lZC4gKi9cXG4tXFx0XFx0YWRkciA9IHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIsIGxlbixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcXG4rXFx0XFx0YWRkciA9IHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhmaWxlLCBhZGRyLCBsZW4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHBnb2ZmLCBmbGFncywgdm1hX2ZsYWdzKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0YWRkciA9IG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkciwgbGVuLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgcGdvZmYsIGZsYWdzLCB2bV9mbGFncyk7XFxuK1xcdFxcdGFkZHIgPSBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhmaWxlLCBhZGRyLCBsZW4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgcGdvZmYsIGZsYWdzLCB2bWFfZmxhZ3MpO1xcbiBcXHR9XFxuIFxcdGlmIChJU19FUlJfVkFMVUUoYWRkcikpXFxuIFxcdFxcdHJldHVybiBhZGRyO1xcbkBAIC04NjgsNyArODgyLDggQEAgdW5zaWduZWQgbG9uZ1xcbiBtbV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcXG4gXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbiB7XFxuLVxcdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTtcXG4rXFx0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEVNUFRZX1ZNQV9GTEFHUyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChtbV9nZXRfdW5tYXBwZWRfYXJlYSk7XFxuIFxcbkBAIC05NzAsNyArOTg1LDcgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX2V4dGVuZF92bWFfbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25cXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdGlmIChleHBhbmRfc3RhY2tfbG9ja2VkKHByZXYsIGFkZHIpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0aWYgKHByZXYtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTE9DS0VEKVxcbitcXHRpZiAodm1hX3Rlc3QocHJldiwgVk1BX0xPQ0tFRF9CSVQpKVxcbiBcXHRcXHRwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZShwcmV2LCBhZGRyLCBwcmV2LVxcdTAwM2V2bV9lbmQsIE5VTEwpO1xcbiBcXHRyZXR1cm4gcHJldjtcXG4gfVxcbkBAIC05OTQsNyArMTAwOSw3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9leHRlbmRfdm1hX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uXFxuIFxcdHN0YXJ0ID0gdm1hLVxcdTAwM2V2bV9zdGFydDtcXG4gXFx0aWYgKGV4cGFuZF9zdGFja19sb2NrZWQodm1hLCBhZGRyKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTE9DS0VEKVxcbitcXHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpXFxuIFxcdFxcdHBvcHVsYXRlX3ZtYV9wYWdlX3JhbmdlKHZtYSwgYWRkciwgc3RhcnQsIE5VTEwpO1xcbiBcXHRyZXR1cm4gdm1hO1xcbiB9XFxuQEAgLTExMTksMTggKzExMzQsMTggQEAgU1lTQ0FMTF9ERUZJTkU1KHJlbWFwX2ZpbGVfcGFnZXMsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBzaXplLFxcbiBcXHQgKi9cXG4gXFx0dm1hID0gdm1hX2xvb2t1cChtbSwgc3RhcnQpO1xcbiBcXG4tXFx0aWYgKCF2bWEgfHwgISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKSkge1xcbitcXHRpZiAoIXZtYSB8fCAhdm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCkpIHtcXG4gXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbi1cXHRwcm90IHw9IHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9SRUFEID8gUFJPVF9SRUFEIDogMDtcXG4tXFx0cHJvdCB8PSB2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fV1JJVEUgPyBQUk9UX1dSSVRFIDogMDtcXG4tXFx0cHJvdCB8PSB2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fRVhFQyA/IFBST1RfRVhFQyA6IDA7XFxuK1xcdHByb3QgfD0gdm1hX3Rlc3Qodm1hLCBWTUFfUkVBRF9CSVQpID8gUFJPVF9SRUFEIDogMDtcXG4rXFx0cHJvdCB8PSB2bWFfdGVzdCh2bWEsIFZNQV9XUklURV9CSVQpID8gUFJPVF9XUklURSA6IDA7XFxuK1xcdHByb3QgfD0gdm1hX3Rlc3Qodm1hLCBWTUFfRVhFQ19CSVQpID8gUFJPVF9FWEVDIDogMDtcXG4gXFxuIFxcdGZsYWdzIFxcdTAwMjY9IE1BUF9OT05CTE9DSztcXG4gXFx0ZmxhZ3MgfD0gTUFQX1NIQVJFRCB8IE1BUF9GSVhFRCB8IE1BUF9QT1BVTEFURTtcXG4tXFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9MT0NLRUQpXFxuK1xcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSlcXG4gXFx0XFx0ZmxhZ3MgfD0gTUFQX0xPQ0tFRDtcXG4gXFxuIFxcdC8qIFNhdmUgdm1fZmxhZ3MgdXNlZCB0byBjYWxjdWxhdGUgcHJvdCBhbmQgZmxhZ3MsIGFuZCByZWNoZWNrIGxhdGVyLiAqL1xcbkBAIC0xMTkxLDcgKzEyMDYsNyBAQCBTWVNDQUxMX0RFRklORTUocmVtYXBfZmlsZV9wYWdlcywgdW5zaWduZWQgbG9uZywgc3RhcnQsIHVuc2lnbmVkIGxvbmcsIHNpemUsXFxuIFxcdH1cXG4gXFxuIFxcdHJldCA9IGRvX21tYXAodm1hLVxcdTAwM2V2bV9maWxlLCBzdGFydCwgc2l6ZSxcXG4tXFx0XFx0XFx0cHJvdCwgZmxhZ3MsIDAsIHBnb2ZmLCBcXHUwMDI2cG9wdWxhdGUsIE5VTEwpO1xcbitcXHRcXHRcXHRwcm90LCBmbGFncywgRU1QVFlfVk1BX0ZMQUdTLCBwZ29mZiwgXFx1MDAyNnBvcHVsYXRlLCBOVUxMKTtcXG4gb3V0OlxcbiBcXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XFxuIFxcdGZwdXQoZmlsZSk7XFxuQEAgLTEyMzMsNyArMTI0OCw3IEBAIGludCB2bV9icmtfZmxhZ3ModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHJlcXVlc3QsIGJvb2wgaXNfZXhlYylcXG4gXFxuIFxcdHZtYSA9IHZtYV9wcmV2KFxcdTAwMjZ2bWkpO1xcbiBcXHRyZXQgPSBkb19icmtfZmxhZ3MoXFx1MDAyNnZtaSwgdm1hLCBhZGRyLCBsZW4sIHZtYV9mbGFncyk7XFxuLVxcdHBvcHVsYXRlID0gKChtbS1cXHUwMDNlZGVmX2ZsYWdzIFxcdTAwMjYgVk1fTE9DS0VEKSAhPSAwKTtcXG4rXFx0cG9wdWxhdGUgPSB2bWFfZmxhZ3NfdGVzdChcXHUwMDI2bW0tXFx1MDAzZWRlZl92bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTtcXG4gXFx0bW1hcF93cml0ZV91bmxvY2sobW0pO1xcbiBcXHR1c2VyZmF1bHRmZF91bm1hcF9jb21wbGV0ZShtbSwgXFx1MDAyNnVmKTtcXG4gXFx0aWYgKHBvcHVsYXRlIFxcdTAwMjZcXHUwMDI2ICFyZXQpXFxuQEAgLTEyNTYsNyArMTI3MSw3IEBAIHVuc2lnbmVkIGxvbmcgdGVhcl9kb3duX3ZtYXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG4gXFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTtcXG4gXFx0dm1hX2l0ZXJfc2V0KHZtaSwgdm1hLVxcdTAwM2V2bV9lbmQpO1xcbiBcXHRkbyB7XFxuLVxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fQUNDT1VOVClcXG4rXFx0XFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0FDQ09VTlRfQklUKSlcXG4gXFx0XFx0XFx0bnJfYWNjb3VudGVkICs9IHZtYV9wYWdlcyh2bWEpO1xcbiBcXHRcXHR2bWFfbWFya19kZXRhY2hlZCh2bWEpO1xcbiBcXHRcXHRyZW1vdmVfdm1hKHZtYSk7XFxuQEAgLTE0MDUsNyArMTQyMCw3IEBAIHN0YXRpYyBpbnQgc3BlY2lhbF9tYXBwaW5nX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIHtcXG4gXFx0LypcXG4gXFx0ICogRm9yYmlkIHNwbGl0dGluZyBzcGVjaWFsIG1hcHBpbmdzIC0ga2VybmVsIGhhcyBleHBlY3RhdGlvbnMgb3Zlclxcbi1cXHQgKiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIG1hcHBpbmcuIFRvZ2V0aGVyIHdpdGggVk1fRE9OVEVYUEFORFxcbitcXHQgKiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIG1hcHBpbmcuIFRvZ2V0aGVyIHdpdGggVk1BX0RPTlRFWFBBTkRfQklUXFxuIFxcdCAqIHRoZSBzaXplIG9mIHZtYSBzaG91bGQgc3RheSB0aGUgc2FtZSBvdmVyIHRoZSBzcGVjaWFsIG1hcHBpbmcnc1xcbiBcXHQgKiBsaWZldGltZS5cXG4gXFx0ICovXFxuQEAgLTE2NzcsNyArMTY5Miw3IEBAIGJvb2wgbW1hcF9yZWFkX2xvY2tfbWF5YmVfZXhwYW5kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCEobmV3X3ZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9HUk9XU0RPV04pKVxcbitcXHRpZiAoIXZtYV90ZXN0KG5ld192bWEsIFZNQV9HUk9XU0RPV05fQklUKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0bW1hcF93cml0ZV9sb2NrKG1tKTtcXG5AQCAtMTcyNyw3ICsxNzQyLDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxcbiBcXHRcXHRyZXR2YWwgPSB2bWFfc3RhcnRfd3JpdGVfa2lsbGFibGUobXBudCk7XFxuIFxcdFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRnb3RvIGxvb3Bfb3V0O1xcbi1cXHRcXHRpZiAobXBudC1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9ET05UQ09QWSkge1xcbitcXHRcXHRpZiAodm1hX3Rlc3QobXBudCwgVk1BX0RPTlRDT1BZX0JJVCkpIHtcXG4gXFx0XFx0XFx0cmV0dmFsID0gdm1hX2l0ZXJfY2xlYXJfZ2ZwKFxcdTAwMjZ2bWksIG1wbnQtXFx1MDAzZXZtX3N0YXJ0LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgbXBudC1cXHUwMDNldm1fZW5kLCBHRlBfS0VSTkVMKTtcXG4gXFx0XFx0XFx0aWYgKHJldHZhbClcXG5AQCAtMTczNyw3ICsxNzUyLDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRjaGFyZ2UgPSAwO1xcbi1cXHRcXHRpZiAobXBudC1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9BQ0NPVU5UKSB7XFxuK1xcdFxcdGlmICh2bWFfdGVzdChtcG50LCBWTUFfQUNDT1VOVF9CSVQpKSB7XFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbGVuID0gdm1hX3BhZ2VzKG1wbnQpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKHNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnlfbW0ob2xkbW0sIGxlbikpIC8qIHNpYyAqL1xcbkBAIC0xNzU1LDE2ICsxNzcwLDE5IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcXG4gXFx0XFx0cmV0dmFsID0gZHVwX3VzZXJmYXVsdGZkKHRtcCwgXFx1MDAyNnVmKTtcXG4gXFx0XFx0aWYgKHJldHZhbClcXG4gXFx0XFx0XFx0Z290byBmYWlsX25vbWVtX2Fub25fdm1hX2Zvcms7XFxuLVxcdFxcdGlmICh0bXAtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fV0lQRU9ORk9SSykge1xcbitcXG4rXFx0XFx0aWYgKHZtYV90ZXN0KHRtcCwgVk1BX1dJUEVPTkZPUktfQklUKSkge1xcbiBcXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBWTV9XSVBFT05GT1JLIGdldHMgYSBjbGVhbiBzbGF0ZSBpbiB0aGUgY2hpbGQuXFxuK1xcdFxcdFxcdCAqIFZNQV9XSVBFT05GT1JLX0JJVCBnZXRzIGEgY2xlYW4gc2xhdGUgaW4gdGhlIGNoaWxkLlxcbiBcXHRcXHRcXHQgKiBEb24ndCBwcmVwYXJlIGFub25fdm1hIHVudGlsIGZhdWx0IHNpbmNlIHdlIGRvbid0XFxuIFxcdFxcdFxcdCAqIGNvcHkgcGFnZSBmb3IgY3VycmVudCB2bWEuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHR0bXAtXFx1MDAzZWFub25fdm1hID0gTlVMTDtcXG4gXFx0XFx0fSBlbHNlIGlmIChhbm9uX3ZtYV9mb3JrKHRtcCwgbXBudCkpXFxuIFxcdFxcdFxcdGdvdG8gZmFpbF9ub21lbV9hbm9uX3ZtYV9mb3JrO1xcbi1cXHRcXHR2bV9mbGFnc19jbGVhcih0bXAsIFZNX0xPQ0tFRF9NQVNLKTtcXG4rXFxuK1xcdFxcdHZtYV9zdGFydF93cml0ZSh0bXApO1xcbitcXHRcXHR2bWFfY2xlYXJfZmxhZ3NfbWFzayh0bXAsIFZNQV9MT0NLRURfTUFTSyk7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIENvcHkvdXBkYXRlIGh1Z2V0bGIgcHJpdmF0ZSB2bWEgaW5mb3JtYXRpb24uXFxuIFxcdFxcdCAqL1xcbkBAIC0xNzk3LDcgKzE4MTUsNyBAQCBfX2xhdGVudF9lbnRyb3B5IGludCBkdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pXFxuIFxcdFxcdFxcdGlfbW1hcF91bmxvY2tfd3JpdGUobWFwcGluZyk7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmICghKHRtcC1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9XSVBFT05GT1JLKSlcXG4rXFx0XFx0aWYgKCF2bWFfdGVzdCh0bXAsIFZNQV9XSVBFT05GT1JLX0JJVCkpXFxuIFxcdFxcdFxcdHJldHZhbCA9IGNvcHlfcGFnZV9yYW5nZSh0bXAsIG1wbnQpO1xcbiBcXG4gXFx0XFx0aWYgKHJldHZhbCkge1xcbmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5jIGIvbW0vbXByb3RlY3QuY1xcbmluZGV4IGRjMjdiYmMxNzEyZmQ1Li4yODg4ZWU2MzhkODcyYSAxMDA2NDRcXG4tLS0gYS9tbS9tcHJvdGVjdC5jXFxuKysrIGIvbW0vbXByb3RlY3QuY1xcbkBAIC00MCw3ICs0MCw3IEBAXFxuIFxcbiBzdGF0aWMgYm9vbCBtYXliZV9jaGFuZ2VfcHRlX3dyaXRhYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCBwdGUpXFxuIHtcXG4tXFx0aWYgKFdBUk5fT05fT05DRSghKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9XUklURSkpKVxcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCF2bWFfdGVzdCh2bWEsIFZNQV9XUklURV9CSVQpKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0LyogRG9uJ3QgdG91Y2ggZW50cmllcyB0aGF0IGFyZSBub3QgZXZlbiByZWFkYWJsZS4gKi9cXG5AQCAtOTcsNyArOTcsNyBAQCBzdGF0aWMgYm9vbCBjYW5fY2hhbmdlX3NoYXJlZF9wdGVfd3JpdGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIGJvb2wgY2FuX2NoYW5nZV9wdGVfd3JpdGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0ICAgICBwdGVfdCBwdGUpXFxuIHtcXG4tXFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1NIQVJFRCkpXFxuK1xcdGlmICghdm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCkpXFxuIFxcdFxcdHJldHVybiBjYW5fY2hhbmdlX3ByaXZhdGVfcHRlX3dyaXRhYmxlKHZtYSwgYWRkciwgcHRlKTtcXG4gXFxuIFxcdHJldHVybiBjYW5fY2hhbmdlX3NoYXJlZF9wdGVfd3JpdGFibGUodm1hLCBwdGUpO1xcbkBAIC0xOTQsNyArMTk0LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHNldF93cml0ZV9wcm90X2NvbW1pdF9mbHVzaF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVcXG4ge1xcbiBcXHRib29sIHNldF93cml0ZTtcXG4gXFxuLVxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKSB7XFxuK1xcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKSkge1xcbiBcXHRcXHRzZXRfd3JpdGUgPSBjYW5fY2hhbmdlX3NoYXJlZF9wdGVfd3JpdGFibGUodm1hLCBwdGVudCk7XFxuIFxcdFxcdHByb3RfY29tbWl0X2ZsdXNoX3B0ZXModm1hLCBhZGRyLCBwdGVwLCBvbGRwdGUsIHB0ZW50LCBucl9wdGVzLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgLyogaWR4ID0gKi8gMCwgc2V0X3dyaXRlLCB0bGIpO1xcbkBAIC04NDYsOCArODQ2LDggQEAgbXByb3RlY3RfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbiBcXHRcXHR2bV91bmFjY3RfbWVtb3J5KG5ycGFnZXMpO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogUHJpdmF0ZSBWTV9MT0NLRUQgVk1BIGJlY29taW5nIHdyaXRhYmxlOiB0cmlnZ2VyIENPVyB0byBhdm9pZCBtYWpvclxcbi1cXHQgKiBmYXVsdCBvbiBhY2Nlc3MuXFxuK1xcdCAqIFByaXZhdGUgVk1BX0xPQ0tFRF9CSVQgVk1BIGJlY29taW5nIHdyaXRhYmxlOiB0cmlnZ2VyIENPVyB0byBhdm9pZFxcbitcXHQgKiBtYWpvciBmYXVsdCBvbiBhY2Nlc3MuXFxuIFxcdCAqL1xcbiBcXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNm5ld192bWFfZmxhZ3MsIFZNQV9XUklURV9CSVQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICB2bWFfZmxhZ3NfdGVzdChcXHUwMDI2b2xkX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTkyMSw3ICs5MjEsNyBAQCBzdGF0aWMgaW50IGRvX21wcm90ZWN0X3BrZXkodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbixcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdHN0YXJ0ID0gdm1hLVxcdTAwM2V2bV9zdGFydDtcXG4gXFx0XFx0ZXJyb3IgPSAtRUlOVkFMO1xcbi1cXHRcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fR1JPV1NET1dOKSlcXG4rXFx0XFx0aWYgKCF2bWFfdGVzdCh2bWEsIFZNQV9HUk9XU0RPV05fQklUKSlcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX3N0YXJ0IFxcdTAwM2Ugc3RhcnQpXFxuQEAgLTkyOSw3ICs5MjksNyBAQCBzdGF0aWMgaW50IGRvX21wcm90ZWN0X3BrZXkodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbixcXG4gXFx0XFx0aWYgKHVubGlrZWx5KGdyb3dzIFxcdTAwMjYgUFJPVF9HUk9XU1VQKSkge1xcbiBcXHRcXHRcXHRlbmQgPSB2bWEtXFx1MDAzZXZtX2VuZDtcXG4gXFx0XFx0XFx0ZXJyb3IgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fR1JPV1NVUCkpXFxuK1xcdFxcdFxcdGlmICghdm1hX3Rlc3Rfc2luZ2xlX21hc2sodm1hLCBWTUFfR1JPV1NVUCkpXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtOTUzLDcgKzk1Myw3IEBAIHN0YXRpYyBpbnQgZG9fbXByb3RlY3RfcGtleSh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBEb2VzIHRoZSBhcHBsaWNhdGlvbiBleHBlY3QgUFJPVF9SRUFEIHRvIGltcGx5IFBST1RfRVhFQyAqL1xcbi1cXHRcXHRpZiAocmllciBcXHUwMDI2XFx1MDAyNiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01BWUVYRUMpKVxcbitcXHRcXHRpZiAocmllciBcXHUwMDI2XFx1MDAyNiB2bWFfdGVzdCh2bWEsIFZNQV9NQVlFWEVDX0JJVCkpXFxuIFxcdFxcdFxcdHByb3QgfD0gUFJPVF9FWEVDO1xcbiBcXG4gXFx0XFx0LypcXG5kaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuY1xcbmluZGV4IDM4NGVmNGNjMjE5NWJhLi5iNjRhYTFmNmUwN2VkZSAxMDA2NDRcXG4tLS0gYS9tbS9tcmVtYXAuY1xcbisrKyBiL21tL21yZW1hcC5jXFxuQEAgLTY4LDcgKzY4LDcgQEAgc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3Qge1xcbiBcXHRib29sIHBvcHVsYXRlX2V4cGFuZDtcXHRcXHQvKiBtbG9jaygpJ2QgZXhwYW5kZWQsIG11c3QgcG9wdWxhdGUuICovXFxuIFxcdGVudW0gbXJlbWFwX3R5cGUgcmVtYXBfdHlwZTtcXHQvKiBleHBhbmQsIHNocmluaywgZXRjLiAqL1xcbiBcXHRib29sIG1tYXBfbG9ja2VkO1xcdFxcdC8qIElzIG1tIGN1cnJlbnRseSB3cml0ZS1sb2NrZWQ/ICovXFxuLVxcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZDtcXHRcXHQvKiBJZiBWTV9BQ0NPVU5ULCAjIHBhZ2VzIHRvIGFjY291bnQuICovXFxuK1xcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZDtcXHRcXHQvKiBJZiBWTUFfQUNDT1VOVF9CSVQsICMgcGdzIHRvIGFjY291bnQgKi9cXG4gXFx0Ym9vbCB2bWlfbmVlZHNfaW52YWxpZGF0ZTtcXHQvKiBJcyB0aGUgVk1BIGl0ZXJhdG9yIGludmFsaWRhdGVkPyAqL1xcbiB9O1xcbiBcXG5AQCAtOTYzLDcgKzk2Myw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZybV9zZXRfbmV3X2FkZHIoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcXG4gXFxuIFxcdGlmICh2cm0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTVJFTUFQX0ZJWEVEKVxcbiBcXHRcXHRtYXBfZmxhZ3MgfD0gTUFQX0ZJWEVEO1xcbi1cXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01BWVNIQVJFKVxcbitcXHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTUFZU0hBUkVfQklUKSlcXG4gXFx0XFx0bWFwX2ZsYWdzIHw9IE1BUF9TSEFSRUQ7XFxuIFxcbiBcXHRyZXMgPSBnZXRfdW5tYXBwZWRfYXJlYSh2bWEtXFx1MDAzZXZtX2ZpbGUsIG5ld19hZGRyLCB2cm0tXFx1MDAzZW5ld19sZW4sIHBnb2ZmLFxcbkBAIC05ODUsNyArOTg1LDcgQEAgc3RhdGljIGJvb2wgdnJtX2NhbGNfY2hhcmdlKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBjaGFyZ2VkO1xcbiBcXG4tXFx0aWYgKCEodnJtLVxcdTAwM2V2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fQUNDT1VOVCkpXFxuK1xcdGlmICghdm1hX3Rlc3QodnJtLVxcdTAwM2V2bWEsIFZNQV9BQ0NPVU5UX0JJVCkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0LypcXG5AQCAtMTAxMiw3ICsxMDEyLDcgQEAgc3RhdGljIGJvb2wgdnJtX2NhbGNfY2hhcmdlKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuICAqL1xcbiBzdGF0aWMgdm9pZCB2cm1fdW5jaGFyZ2Uoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcXG4ge1xcbi1cXHRpZiAoISh2cm0tXFx1MDAzZXZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9BQ0NPVU5UKSlcXG4rXFx0aWYgKCF2bWFfdGVzdCh2cm0tXFx1MDAzZXZtYSwgVk1BX0FDQ09VTlRfQklUKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0dm1fdW5hY2N0X21lbW9yeSh2cm0tXFx1MDAzZWNoYXJnZWQpO1xcbkBAIC0xMDMyLDcgKzEwMzIsNyBAQCBzdGF0aWMgdm9pZCB2cm1fc3RhdF9hY2NvdW50KHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0sXFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdnJtLVxcdTAwM2V2bWE7XFxuIFxcbiBcXHR2bV9zdGF0X2FjY291bnQobW0sIHZtYS1cXHUwMDNldm1fZmxhZ3MsIHBhZ2VzKTtcXG4tXFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9MT0NLRUQpXFxuK1xcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSlcXG4gXFx0XFx0bW0tXFx1MDAzZWxvY2tlZF92bSArPSBwYWdlcztcXG4gfVxcbiBcXG5AQCAtMTE3Niw3ICsxMTc2LDcgQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxcbiBcXHQgKiBhcm9zZSwgaW4gd2hpY2ggY2FzZSB3ZSBfZG9fIHdpc2ggdG8gdW5tYXAgdGhlIF9uZXdfIFZNQSwgd2hpY2ggbWVhbnNcXG4gXFx0ICogd2UgYWN0dWFsbHkgX2RvXyB3YW50IGl0IGJlIHVuYWNjb3VudGVkLlxcbiBcXHQgKi9cXG4tXFx0Ym9vbCBhY2NvdW50YWJsZV9tb3ZlID0gKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9BQ0NPVU5UKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRib29sIGFjY291bnRhYmxlX21vdmUgPSB2bWFfdGVzdCh2bWEsIFZNQV9BQ0NPVU5UX0JJVCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ISh2cm0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUCk7XFxuIFxcbiBcXHQvKlxcbkBAIC0xMTk1LDcgKzExOTUsNyBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuIFxcdCAqIHBvcnRpb25zIG9mIHRoZSBvcmlnaW5hbCBWTUEgdGhhdCByZW1haW4uXFxuIFxcdCAqL1xcbiBcXHRpZiAoYWNjb3VudGFibGVfbW92ZSkge1xcbi1cXHRcXHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX0FDQ09VTlQpO1xcbitcXHRcXHR2bWFfY2xlYXJfZmxhZ3Modm1hLCBWTUFfQUNDT1VOVF9CSVQpO1xcbiBcXHRcXHQvKiBXZSBhcmUgYWJvdXQgdG8gc3BsaXQgdm1hLCBzbyBzdG9yZSB0aGUgc3RhcnQvZW5kLiAqL1xcbiBcXHRcXHR2bV9zdGFydCA9IHZtYS1cXHUwMDNldm1fc3RhcnQ7XFxuIFxcdFxcdHZtX2VuZCA9IHZtYS1cXHUwMDNldm1fZW5kO1xcbkBAIC0xMjIwLDggKzEyMjAsOCBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuIFxcdCAqIHwgICAgICAgICAgICAgfFxcbiBcXHQgKiB8LS0tLS0tLS0tLS0tLXxcXG4gXFx0ICpcXG4tXFx0ICogSGF2aW5nIGNsZWFyZWQgVk1fQUNDT1VOVCBmcm9tIHRoZSB3aG9sZSBWTUEsIGFmdGVyIHdlIHVubWFwIGFib3ZlXFxuLVxcdCAqIHdlJ2xsIGVuZCB1cCB3aXRoOlxcbitcXHQgKiBIYXZpbmcgY2xlYXJlZCBWTUFfQUNDT1VOVF9CSVQgZnJvbSB0aGUgd2hvbGUgVk1BLCBhZnRlciB3ZSB1bm1hcFxcbitcXHQgKiBhYm92ZSB3ZSdsbCBlbmQgdXAgd2l0aDpcXG4gXFx0ICpcXG4gXFx0ICogICAgYWRkciAgZW5kXFxuIFxcdCAqICAgICB8ICAgICB8XFxuQEAgLTEyNDEsMTMgKzEyNDEsMTUgQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxcbiBcXHRcXHRpZiAodm1fc3RhcnQgXFx1MDAzYyBhZGRyKSB7XFxuIFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiA9IHZtYV9wcmV2KFxcdTAwMjZ2bWkpO1xcbiBcXG4tXFx0XFx0XFx0dm1fZmxhZ3Nfc2V0KHByZXYsIFZNX0FDQ09VTlQpOyAvKiBBY3F1aXJlcyBWTUEgbG9jay4gKi9cXG4rXFx0XFx0XFx0dm1hX3N0YXJ0X3dyaXRlKHByZXYpO1xcbitcXHRcXHRcXHR2bWFfc2V0X2ZsYWdzKHByZXYsIFZNQV9BQ0NPVU5UX0JJVCk7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmICh2bV9lbmQgXFx1MDAzZSBlbmQpIHtcXG4gXFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpuZXh0ID0gdm1hX25leHQoXFx1MDAyNnZtaSk7XFxuIFxcbi1cXHRcXHRcXHR2bV9mbGFnc19zZXQobmV4dCwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqL1xcbitcXHRcXHRcXHR2bWFfc3RhcnRfd3JpdGUobmV4dCk7XFxuK1xcdFxcdFxcdHZtYV9zZXRfZmxhZ3MobmV4dCwgVk1BX0FDQ09VTlRfQklUKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG5AQCAtMTMzMCw4ICsxMzMyLDggQEAgc3RhdGljIHZvaWQgZG9udHVubWFwX2NvbXBsZXRlKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0sXFxuIFxcdHVuc2lnbmVkIGxvbmcgb2xkX3N0YXJ0ID0gdnJtLVxcdTAwM2V2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbiBcXHR1bnNpZ25lZCBsb25nIG9sZF9lbmQgPSB2cm0tXFx1MDAzZXZtYS1cXHUwMDNldm1fZW5kO1xcbiBcXG4tXFx0LyogV2UgYWx3YXlzIGNsZWFyIFZNX0xPQ0tFRFtPTkZBVUxUXSBvbiB0aGUgb2xkIFZNQS4gKi9cXG4tXFx0dm1fZmxhZ3NfY2xlYXIodnJtLVxcdTAwM2V2bWEsIFZNX0xPQ0tFRF9NQVNLKTtcXG4rXFx0LyogV2UgYWx3YXlzIGNsZWFyIFZNQV9MT0NLRURbT05GQVVMVF1fQklUIG9uIHRoZSBvbGQgVk1BLiAqL1xcbitcXHR2bWFfY2xlYXJfZmxhZ3NfbWFzayh2cm0tXFx1MDAzZXZtYSwgVk1BX0xPQ0tFRF9NQVNLKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIGFub25fdm1hIGxpbmtzIG9mIHRoZSBvbGQgdm1hIGlzIG5vIGxvbmdlciBuZWVkZWQgYWZ0ZXIgaXRzIHBhZ2VcXG5AQCAtMTc2NywxNCArMTc2OSwxNCBAQCBzdGF0aWMgaW50IGNoZWNrX3ByZXBfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuIFxcdCAqIGJhc2VkIG9uIHRoZSBvcmlnaW5hbC4gIFRoZXJlIGFyZSBubyBrbm93biB1c2UgY2FzZXMgZm9yIHRoaXNcXG4gXFx0ICogYmVoYXZpb3IuICBBcyBhIHJlc3VsdCwgZmFpbCBzdWNoIGF0dGVtcHRzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFvbGRfbGVuIFxcdTAwMjZcXHUwMDI2ICEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IChWTV9TSEFSRUQgfCBWTV9NQVlTSEFSRSkpKSB7XFxuK1xcdGlmICghb2xkX2xlbiBcXHUwMDI2XFx1MDAyNiAhdm1hX3Rlc3RfYW55KHZtYSwgVk1BX1NIQVJFRF9CSVQsIFZNQV9NQVlTSEFSRV9CSVQpKSB7XFxuIFxcdFxcdHByX3dhcm5fb25jZShcXFwiJXMgKCVkKTogYXR0ZW1wdGVkIHRvIGR1cGxpY2F0ZSBhIHByaXZhdGUgbWFwcGluZyB3aXRoIG1yZW1hcC4gIFRoaXMgaXMgbm90IHN1cHBvcnRlZC5cXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgICAgY3VycmVudC1cXHUwMDNlY29tbSwgY3VycmVudC1cXHUwMDNlcGlkKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICgodnJtLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1SRU1BUF9ET05UVU5NQVApIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgKFZNX0RPTlRFWFBBTkQgfCBWTV9QRk5NQVApKSlcXG4rXFx0ICAgIHZtYV90ZXN0X2FueSh2bWEsIFZNQV9ET05URVhQQU5EX0JJVCwgVk1BX1BGTk1BUF9CSVQpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdC8qXFxuQEAgLTE4MDQsNyArMTgwNiw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHJlcF92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHQvKiBXZSBhcmUgZXhwYW5kaW5nIGFuZCB0aGUgVk1BIGlzIG1sb2NrKCknZCBzbyB3ZSBuZWVkIHRvIHBvcHVsYXRlLiAqL1xcbi1cXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX0xPQ0tFRClcXG4rXFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKVxcbiBcXHRcXHR2cm0tXFx1MDAzZXBvcHVsYXRlX2V4cGFuZCA9IHRydWU7XFxuIFxcbiBcXHQvKiBOZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgYSBncm93aW5nIG1hcHBpbmcgKi9cXG5AQCAtMTgxMiwxMCArMTgxNCwxMCBAQCBzdGF0aWMgaW50IGNoZWNrX3ByZXBfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuIFxcdGlmIChwZ29mZiArIChuZXdfbGVuIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpIFxcdTAwM2MgcGdvZmYpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fRE9OVEVYUEFORCB8IFZNX1BGTk1BUCkpXFxuK1xcdGlmICh2bWFfdGVzdF9hbnkodm1hLCBWTUFfRE9OVEVYUEFORF9CSVQsIFZNQV9QRk5NQVBfQklUKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbi1cXHRpZiAoIW1sb2NrX2Z1dHVyZV9vayhtbSwgdm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX0xPQ0tFRCwgdnJtLVxcdTAwM2VkZWx0YSkpXFxuK1xcdGlmICghbWxvY2tfZnV0dXJlX29rKG1tLCB2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSwgdnJtLVxcdTAwM2VkZWx0YSkpXFxuIFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiBcXG4gXFx0aWYgKCFtYXlfZXhwYW5kX3ZtKG1tLCBcXHUwMDI2dm1hLVxcdTAwM2VmbGFncywgdnJtLVxcdTAwM2VkZWx0YSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKSlcXG5kaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmNcXG5pbmRleCBhZGMwYjBjYTkwNmJkZi4uNDk4ZTAxZWU0MGIwNTYgMTAwNjQ0XFxuLS0tIGEvbW0vbm9tbXUuY1xcbisrKyBiL21tL25vbW11LmNcXG5AQCAtMTAxNCwxMSArMTAxNCwxMiBAQCB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbGVuLFxcbiBcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHByb3QsXFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsXFxuLVxcdFxcdFxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuK1xcdFxcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncyxcXG4gXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwZ29mZixcXG4gXFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqcG9wdWxhdGUsXFxuIFxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnVmKVxcbiB7XFxuK1xcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWFfZmxhZ3NfdG9fbGVnYWN5KHZtYV9mbGFncyk7XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbiBcXHRzdHJ1Y3Qgdm1fcmVnaW9uICpyZWdpb247XFxuIFxcdHN0cnVjdCByYl9ub2RlICpyYjtcXG5kaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jXFxuaW5kZXggNTA5MDQ1NzU0MmNhOWMuLmJmMDUxM2QxZDNkMDg2IDEwMDY0NFxcbi0tLSBhL21tL3V0aWwuY1xcbisrKyBiL21tL3V0aWwuY1xcbkBAIC01NzgsOCArNTc4LDggQEAgdW5zaWduZWQgbG9uZyB2bV9tbWFwX3Bnb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdGlmICghcmV0KSB7XFxuIFxcdFxcdGlmIChtbWFwX3dyaXRlX2xvY2tfa2lsbGFibGUobW0pKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbi1cXHRcXHRyZXQgPSBkb19tbWFwKGZpbGUsIGFkZHIsIGxlbiwgcHJvdCwgZmxhZywgMCwgcGdvZmYsIFxcdTAwMjZwb3B1bGF0ZSxcXG4tXFx0XFx0XFx0ICAgICAgXFx1MDAyNnVmKTtcXG4rXFx0XFx0cmV0ID0gZG9fbW1hcChmaWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWcsIEVNUFRZX1ZNQV9GTEFHUywgcGdvZmYsXFxuK1xcdFxcdFxcdCAgICAgIFxcdTAwMjZwb3B1bGF0ZSwgXFx1MDAyNnVmKTtcXG4gXFx0XFx0bW1hcF93cml0ZV91bmxvY2sobW0pO1xcbiBcXHRcXHR1c2VyZmF1bHRmZF91bm1hcF9jb21wbGV0ZShtbSwgXFx1MDAyNnVmKTtcXG4gXFx0XFx0aWYgKHBvcHVsYXRlKVxcbkBAIC02MjcsMjAgKzYyNywyMCBAQCBFWFBPUlRfU1lNQk9MKHZtX21tYXApO1xcbiB1bnNpZ25lZCBsb25nIHZtX21tYXBfc2hhZG93X3N0YWNrKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuIHtcXG4rXFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gVk1BX1NIQURPV19TVEFDSztcXG4gXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4gXFx0dW5zaWduZWQgbG9uZyByZXQsIHVudXNlZDtcXG4tXFx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IFZNX1NIQURPV19TVEFDSztcXG4gXFxuIFxcdGZsYWdzIHw9IE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURTtcXG4gXFx0aWYgKGFkZHIpXFxuIFxcdFxcdGZsYWdzIHw9IE1BUF9GSVhFRF9OT1JFUExBQ0U7XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxcbi1cXHRcXHR2bV9mbGFncyB8PSBWTV9OT0hVR0VQQUdFO1xcbitcXHRcXHR2bWFfZmxhZ3Nfc2V0KFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9OT0hVR0VQQUdFX0JJVCk7XFxuIFxcbiBcXHRtbWFwX3dyaXRlX2xvY2sobW0pO1xcbiBcXHRyZXQgPSBkb19tbWFwKE5VTEwsIGFkZHIsIGxlbiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsXFxuLVxcdFxcdCAgICAgIHZtX2ZsYWdzLCAwLCBcXHUwMDI2dW51c2VkLCBOVUxMKTtcXG4rXFx0XFx0ICAgICAgdm1hX2ZsYWdzLCAwLCBcXHUwMDI2dW51c2VkLCBOVUxMKTtcXG4gXFx0bW1hcF93cml0ZV91bmxvY2sobW0pO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuY1xcbmluZGV4IDlkNTU2ZDMzYjI0YmQxLi5iNWJjM2VlYzk2MWM3OSAxMDA2NDRcXG4tLS0gYS9tbS92bWEuY1xcbisrKyBiL21tL3ZtYS5jXFxuQEAgLTU2LDcgKzU2LDcgQEAgc3RydWN0IG1tYXBfc3RhdGUge1xcbiBcXHRcXHQucGdsZW4gPSBQSFlTX1BGTihsZW5fKSxcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdC52bWFfZmxhZ3MgPSB2bWFfZmxhZ3NfLFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0LmZpbGUgPSBmaWxlXyxcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdC5wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWFfZmxhZ3NfKSxcXHRcXHRcXFxcXFxuK1xcdFxcdC5wYWdlX3Byb3QgPSB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYV9mbGFnc18pLFxcdFxcXFxcXG4gXFx0fVxcbiBcXG4gI2RlZmluZSBWTUdfTU1BUF9TVEFURShuYW1lLCBtYXBfLCB2bWFfKVxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtMjE3Niw3ICsyMTc2LDcgQEAgYm9vbCB2bWFfd2FudHNfd3JpdGVub3RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBncHJvdF90IHZtX3BhZ2VfcHJvdClcXG4gXFx0LyogVGhlIG9wZW4gcm91dGluZSBkaWQgc29tZXRoaW5nIHRvIHRoZSBwcm90ZWN0aW9ucyB0aGF0IHBncHJvdF9tb2RpZnlcXG4gXFx0ICogd29uJ3QgcHJlc2VydmU/ICovXFxuIFxcdGlmIChwZ3Byb3RfdmFsKHZtX3BhZ2VfcHJvdCkgIT1cXG4tXFx0ICAgIHBncHJvdF92YWwodm1fcGdwcm90X21vZGlmeSh2bV9wYWdlX3Byb3QsIHZtYS1cXHUwMDNldm1fZmxhZ3MpKSlcXG4rXFx0ICAgIHBncHJvdF92YWwodm1hX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bWEtXFx1MDAzZWZsYWdzKSkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdC8qXFxuQEAgLTI4ODMsNyArMjg4Myw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gICogZmlsZSB0byBiZSBtYXBwZWQsIG90aGVyd2lzZSBOVUxMLlxcbiAgKiBAYWRkcjogVGhlIHBhZ2UtYWxpZ25lZCBhZGRyZXNzIGF0IHdoaWNoIHRvIHBlcmZvcm0gdGhlIG1hcHBpbmcuXFxuICAqIEBsZW46IFRoZSBwYWdlLWFsaWduZWQsIG5vbi16ZXJvLCBsZW5ndGggb2YgdGhlIG1hcHBpbmcuXFxuLSAqIEB2bV9mbGFnczogVGhlIFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgbWFwcGluZy5cXG4rICogQHZtYV9mbGFnczogVGhlIFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgbWFwcGluZy5cXG4gICogQHBnb2ZmOiBJZiBAZmlsZSBpcyBzcGVjaWZpZWQsIHRoZSBwYWdlIG9mZnNldCBpbnRvIHRoZSBmaWxlLCBpZiBub3QgdGhlblxcbiAgKiB0aGUgdmlydHVhbCBwYWdlIG9mZnNldCBpbiBtZW1vcnkgb2YgdGhlIGFub255bW91cyBtYXBwaW5nLlxcbiAgKiBAdWY6IE9wdGlvbmFsbHksIGEgcG9pbnRlciB0byBhIGxpc3QgaGVhZCB1c2VkIGZvciB0cmFja2luZyB1c2VyZmF1bHRmZCB1bm1hcFxcbkBAIC0yODkzLDEyICsyODkzLDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gICogYmVlbiBwZXJmb3JtZWQuXFxuICAqL1xcbiB1bnNpZ25lZCBsb25nIG1tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuK1xcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHZtYV9mbGFnc190IHZtYV9mbGFncyxcXG4gXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHBnb2ZmLCBzdHJ1Y3QgbGlzdF9oZWFkICp1ZilcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHJldDtcXG4gXFx0Ym9vbCB3cml0YWJsZV9maWxlX21hcHBpbmcgPSBmYWxzZTtcXG4tXFx0Y29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbGVnYWN5X3RvX3ZtYV9mbGFncyh2bV9mbGFncyk7XFxuIFxcbiBcXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoY3VycmVudC1cXHUwMDNlbW0pO1xcbiBcXG5AQCAtMjkwNyw3ICsyOTA2LDcgQEAgdW5zaWduZWQgbG9uZyBtbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFxuIFxcdC8qIEFsbG93IGFyY2hpdGVjdHVyZXMgdG8gc2FuaXR5LWNoZWNrIHRoZSB2bV9mbGFncy4gKi9cXG4tXFx0aWYgKCFhcmNoX3ZhbGlkYXRlX2ZsYWdzKHZtX2ZsYWdzKSlcXG4rXFx0aWYgKCFhcmNoX3ZhbGlkYXRlX2ZsYWdzKHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0LyogTWFwIHdyaXRhYmxlIGFuZCBlbnN1cmUgdGhpcyBpc24ndCBhIHNlYWxlZCBtZW1mZC4gKi9cXG5AQCAtMzQyMCwxOCArMzQxOSwyMSBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKl9faW5zdGFsbF9zcGVjaWFsX21hcHBpbmcoXFxuIFxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIHZvaWQgKnByaXYsXFxuIFxcdGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqb3BzKVxcbiB7XFxuLVxcdGludCByZXQ7XFxuK1xcdHZtYV9mbGFnc190IHZtYV9mbGFncyA9IGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3MpO1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdHZtYSA9IHZtX2FyZWFfYWxsb2MobW0pO1xcbi1cXHRpZiAodW5saWtlbHkodm1hID09IE5VTEwpKVxcbitcXHRpZiAodW5saWtlbHkoIXZtYSkpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiBcXG4tXFx0dm1fZmxhZ3MgfD0gbW0tXFx1MDAzZWRlZl9mbGFncyB8IFZNX0RPTlRFWFBBTkQ7XFxuK1xcdHZtYV9mbGFnc19zZXRfbWFzayhcXHUwMDI2dm1hX2ZsYWdzLCBtbS1cXHUwMDNlZGVmX3ZtYV9mbGFncyk7XFxuK1xcdHZtYV9mbGFnc19zZXQoXFx1MDAyNnZtYV9mbGFncywgVk1BX0RPTlRFWFBBTkRfQklUKTtcXG4gXFx0aWYgKHBndGFibGVfc3VwcG9ydHNfc29mdF9kaXJ0eSgpKVxcbi1cXHRcXHR2bV9mbGFncyB8PSBWTV9TT0ZURElSVFk7XFxuLVxcdHZtX2ZsYWdzX2luaXQodm1hLCB2bV9mbGFncyBcXHUwMDI2IH5WTV9MT0NLRURfTUFTSyk7XFxuLVxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG4rXFx0XFx0dm1hX2ZsYWdzX3NldChcXHUwMDI2dm1hX2ZsYWdzLCBWTUFfU09GVERJUlRZX0JJVCk7XFxuK1xcdHZtYV9mbGFnc19jbGVhcl9tYXNrKFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfTUFTSyk7XFxuK1xcdHZtYS1cXHUwMDNlZmxhZ3MgPSB2bWFfZmxhZ3M7XFxuK1xcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcXG4gXFxuIFxcdHZtYS1cXHUwMDNldm1fb3BzID0gb3BzO1xcbiBcXHR2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHByaXY7XFxuZGlmZiAtLWdpdCBhL21tL3ZtYS5oIGIvbW0vdm1hLmhcXG5pbmRleCBhZGI3YTBiYTExOTIwOC4uMGJjN2Q1MjFlOTc2NzcgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hLmhcXG4rKysgYi9tbS92bWEuaFxcbkBAIC01MTcsNyArNTE3LDcgQEAgaW50IG1tX3Rha2VfYWxsX2xvY2tzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG4gdm9pZCBtbV9kcm9wX2FsbF9sb2NrcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuIFxcbiB1bnNpZ25lZCBsb25nIG1tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgbGVuLCB2bV9mbGFnc190IHZtX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGxlbiwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICp1Zik7XFxuIFxcbiBpbnQgZG9fYnJrX2ZsYWdzKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpicmt2bWEsXFxuQEAgLTU0MSw5ICs1NDEsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV93YW50c19tYW51YWxfcHRlX3dyaXRlX3VwZ3JhZGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR19NTVVcXG4tc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bV9wZ3Byb3RfbW9kaWZ5KHBncHJvdF90IG9sZHByb3QsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuK3N0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX3BncHJvdF9tb2RpZnkocGdwcm90X3Qgb2xkcHJvdCwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxcbiB7XFxuLVxcdHJldHVybiBwZ3Byb3RfbW9kaWZ5KG9sZHByb3QsIHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3MpKTtcXG4rXFx0Y29uc3QgcGdwcm90X3QgcHJvdCA9IHZtYV9mbGFnc190b19wYWdlX3Byb3Qodm1hX2ZsYWdzKTtcXG4rXFxuK1xcdHJldHVybiBwZ3Byb3RfbW9kaWZ5KG9sZHByb3QsIHByb3QpO1xcbiB9XFxuICNlbmRpZlxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hX2V4ZWMuYyBiL21tL3ZtYV9leGVjLmNcXG5pbmRleCBlZjFmYTJiMTYxZjNiYS4uN2FmMTI2MDY4OWI5N2UgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hX2V4ZWMuY1xcbisrKyBiL21tL3ZtYV9leGVjLmNcXG5AQCAtMTEyLDE1ICsxMTIsMTcgQEAgaW50IHJlbG9jYXRlX3ZtYV9kb3duKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHNoaWZ0KVxcbiBpbnQgY3JlYXRlX2luaXRfc3RhY2tfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxcbiBcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgKnRvcF9tZW1fcClcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gVk1fU1RBQ0tfRkxBR1MgfCBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQO1xcbitcXHR2bWFfZmxhZ3NfdCBmbGFncyA9IFZNQV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQO1xcbitcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4gXFx0aW50IGVycjtcXG4tXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bV9hcmVhX2FsbG9jKG1tKTtcXG4gXFxuK1xcdC8qIFZNQV9TVEFDS19GTEFHUyBhbmQgVk1BX1NUQUNLX0lOQ09NUExFVEVfU0VUVVAgbXVzdCBub3Qgb3ZlcmxhcC4gKi9cXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKHZtYV9mbGFnc190ZXN0X2FueV9tYXNrKFxcdTAwMjZmbGFncywgVk1BX1NUQUNLX0ZMQUdTKSk7XFxuK1xcbitcXHR2bWEgPSB2bV9hcmVhX2FsbG9jKG1tKTtcXG4gXFx0aWYgKCF2bWEpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0dm1hX3NldF9hbm9ueW1vdXModm1hKTtcXG4tXFxuIFxcdGlmIChtbWFwX3dyaXRlX2xvY2tfa2lsbGFibGUobW0pKSB7XFxuIFxcdFxcdGVyciA9IC1FSU5UUjtcXG4gXFx0XFx0Z290byBlcnJfZnJlZTtcXG5AQCAtMTM0LDE5ICsxMzYsMjEgQEAgaW50IGNyZWF0ZV9pbml0X3N0YWNrX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfa3NtO1xcbiBcXG4rXFx0dm1hX2ZsYWdzX3NldF9tYXNrKFxcdTAwMjZmbGFncywgVk1BX1NUQUNLX0ZMQUdTKTtcXG4rXFx0dm1hX3NldF9hbm9ueW1vdXModm1hKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFBsYWNlIHRoZSBzdGFjayBhdCB0aGUgbGFyZ2VzdCBzdGFjayBhZGRyZXNzIHRoZSBhcmNoaXRlY3R1cmVcXG4gXFx0ICogc3VwcG9ydHMuIExhdGVyLCB3ZSdsbCBtb3ZlIHRoaXMgdG8gYW4gYXBwcm9wcmlhdGUgcGxhY2UuIFdlIGRvbid0XFxuIFxcdCAqIHVzZSBTVEFDS19UT1AgYmVjYXVzZSB0aGF0IGNhbiBkZXBlbmQgb24gYXR0cmlidXRlcyB3aGljaCBhcmVuJ3RcXG4gXFx0ICogY29uZmlndXJlZCB5ZXQuXFxuIFxcdCAqL1xcbi1cXHRWTV9XQVJOX09OX09OQ0UoVk1fU1RBQ0tfRkxBR1MgXFx1MDAyNiBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQKTtcXG4gXFx0dm1hLVxcdTAwM2V2bV9lbmQgPSBTVEFDS19UT1BfTUFYO1xcbiBcXHR2bWEtXFx1MDAzZXZtX3N0YXJ0ID0gdm1hLVxcdTAwM2V2bV9lbmQgLSBQQUdFX1NJWkU7XFxuIFxcdGlmIChwZ3RhYmxlX3N1cHBvcnRzX3NvZnRfZGlydHkoKSlcXG4tXFx0XFx0ZmxhZ3MgfD0gVk1fU09GVERJUlRZO1xcbi1cXHR2bV9mbGFnc19pbml0KHZtYSwgZmxhZ3MpO1xcbi1cXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVxcdTAwM2V2bV9mbGFncyk7XFxuK1xcdFxcdHZtYV9mbGFnc19zZXQoXFx1MDAyNmZsYWdzLCBWTUFfU09GVERJUlRZX0JJVCk7XFxuK1xcdHZtYS1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4rXFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xcbiBcXG4gXFx0ZXJyID0gaW5zZXJ0X3ZtX3N0cnVjdChtbSwgdm1hKTtcXG4gXFx0aWYgKGVycilcXG5kaWZmIC0tZ2l0IGEvc291bmQvY29yZS9tZW1hbGxvYy5jIGIvc291bmQvY29yZS9tZW1hbGxvYy5jXFxuaW5kZXggOTMyMDY3MWRmY2M4YjAuLjViYzdlNTg2YjQzMGY1IDEwMDY0NFxcbi0tLSBhL3NvdW5kL2NvcmUvbWVtYWxsb2MuY1xcbisrKyBiL3NvdW5kL2NvcmUvbWVtYWxsb2MuY1xcbkBAIC04NTEsNyArODUxLDcgQEAgc3RhdGljIHZvaWQgc25kX2RtYV9ub25jb2hlcmVudF9mcmVlKHN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqZG1hYilcXG4gc3RhdGljIGludCBzbmRfZG1hX25vbmNvaGVyZW50X21tYXAoc3RydWN0IHNuZF9kbWFfYnVmZmVyICpkbWFiLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhKVxcbiB7XFxuLVxcdGFyZWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3QoYXJlYS1cXHUwMDNldm1fZmxhZ3MpO1xcbitcXHRhcmVhLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdChhcmVhKTtcXG4gXFx0cmV0dXJuIGRtYV9tbWFwX3BhZ2VzKGRtYWItXFx1MDAzZWRldi5kZXYsIGFyZWEsXFxuIFxcdFxcdFxcdCAgICAgIGFyZWEtXFx1MDAzZXZtX2VuZCAtIGFyZWEtXFx1MDAzZXZtX3N0YXJ0LFxcbiBcXHRcXHRcXHQgICAgICB2aXJ0X3RvX3BhZ2UoZG1hYi1cXHUwMDNlYXJlYSkpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oIGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxcbmluZGV4IDc3M2UyMzMwM2UyNmFmLi42NGYzOGE4MzYxM2U1NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxcbkBAIC0yNDUsOCArMjQ1LDEwIEBAIGVudW0ge1xcbiAjZGVmaW5lIFZNX1NUQUNLXFx0SU5JVF9WTV9GTEFHKFNUQUNLKVxcbiAjaWZkZWYgQ09ORklHX1NUQUNLX0dST1dTVVBcXG4gI2RlZmluZSBWTV9TVEFDS19FQVJMWVxcdElOSVRfVk1fRkxBRyhTVEFDS19FQVJMWSlcXG4rI2RlZmluZSBWTUFfU1RBQ0tfRUFSTFkgbWtfdm1hX2ZsYWdzKFZNQV9TVEFDS19FQVJMWV9CSVQpXFxuICNlbHNlXFxuICNkZWZpbmUgVk1fU1RBQ0tfRUFSTFlcXHRWTV9OT05FXFxuKyNkZWZpbmUgVk1BX1NUQUNLX0VBUkxZIEVNUFRZX1ZNQV9GTEFHU1xcbiAjZW5kaWZcXG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19QS0VZU1xcbiAjZGVmaW5lIFZNX1BLRVlfU0hJRlQgKChfX2ZvcmNlIGludClWTUFfSElHSF9BUkNIXzBfQklUKVxcbkBAIC0zMTUsNiArMzE3LDggQEAgZW51bSB7XFxuIFxcbiAvKiBCaXRzIHNldCBpbiB0aGUgVk1BIHVudGlsIHRoZSBzdGFjayBpcyBpbiBpdHMgZmluYWwgbG9jYXRpb24gKi9cXG4gI2RlZmluZSBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQIChWTV9SQU5EX1JFQUQgfCBWTV9TRVFfUkVBRCB8IFZNX1NUQUNLX0VBUkxZKVxcbisjZGVmaW5lIFZNQV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQIGFwcGVuZF92bWFfZmxhZ3MoXFx0XFx0XFxcXFxcbitcXHRWTUFfU1RBQ0tfRUFSTFksIFZNQV9SQU5EX1JFQURfQklULCBWTUFfU0VRX1JFQURfQklUKVxcbiBcXG4gI2RlZmluZSBUQVNLX0VYRUNfQklUICgoY3VycmVudC1cXHUwMDNlcGVyc29uYWxpdHkgXFx1MDAyNiBSRUFEX0lNUExJRVNfRVhFQykgPyBcXFxcXFxuIFxcdFxcdCAgICAgICBWTV9FWEVDX0JJVCA6IFZNX1JFQURfQklUKVxcbkBAIC0xNDI0LDIwICsxNDI4LDE4IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX2l0ZXJfbmV4dF9yYW5nZShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkpXFxuIH1cXG4gXFxuIGJvb2wgdm1hX3dhbnRzX3dyaXRlbm90aWZ5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ3Byb3RfdCB2bV9wYWdlX3Byb3QpO1xcbitzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9wZ3Byb3RfbW9kaWZ5KHBncHJvdF90IG9sZHByb3QsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuIFxcbiAvKiBVcGRhdGUgdm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgdG8gcmVmbGVjdCB2bWEtXFx1MDAzZXZtX2ZsYWdzLiAqL1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX3NldF9wYWdlX3Byb3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIHtcXG4tXFx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYS1cXHUwMDNldm1fZmxhZ3M7XFxuK1xcdHZtYV9mbGFnc190IHZtYV9mbGFncyA9IHZtYS1cXHUwMDNlZmxhZ3M7XFxuIFxcdHBncHJvdF90IHZtX3BhZ2VfcHJvdDtcXG4gXFxuLVxcdC8qIHRlc3Rpbmc6IHdlIGlubGluZSB2bV9wZ3Byb3RfbW9kaWZ5KCkgdG8gYXZvaWQgY2xhc2ggd2l0aCB2bWEuaC4gKi9cXG4tXFx0dm1fcGFnZV9wcm90ID0gcGdwcm90X21vZGlmeSh2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCwgdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFncykpO1xcbi1cXG4rXFx0dm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QsIHZtYV9mbGFncyk7XFxuIFxcdGlmICh2bWFfd2FudHNfd3JpdGVub3RpZnkodm1hLCB2bV9wYWdlX3Byb3QpKSB7XFxuLVxcdFxcdHZtX2ZsYWdzIFxcdTAwMjY9IH5WTV9TSEFSRUQ7XFxuLVxcdFxcdC8qIHRlc3Rpbmc6IHdlIGlubGluZSB2bV9wZ3Byb3RfbW9kaWZ5KCkgdG8gYXZvaWQgY2xhc2ggd2l0aCB2bWEuaC4gKi9cXG4tXFx0XFx0dm1fcGFnZV9wcm90ID0gcGdwcm90X21vZGlmeSh2bV9wYWdlX3Byb3QsIHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3MpKTtcXG4rXFx0XFx0dm1hX2ZsYWdzX2NsZWFyKFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKTtcXG4rXFx0XFx0dm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bWFfZmxhZ3MpO1xcbiBcXHR9XFxuIFxcdC8qIHJlbW92ZV9wcm90ZWN0aW9uX3B0ZXMgcmVhZHMgdm1hLVxcdTAwM2V2bV9wYWdlX3Byb3Qgd2l0aG91dCBtbWFwX2xvY2sgKi9cXG4gXFx0V1JJVEVfT05DRSh2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCwgdm1fcGFnZV9wcm90KTtcXG5AQCAtMTU0Nyw3ICsxNTQ5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZ2V0X3N5c2N0bF9tYXhfbWFwX2NvdW50KHZvaWQpXFxuICNkZWZpbmUgcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KClcXHRJU19FTkFCTEVEKENPTkZJR19NRU1fU09GVF9ESVJUWSlcXG4gI2VuZGlmXFxuIFxcbi1zdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9nZXRfcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcXG4rc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcXG4ge1xcbiBcXHRjb25zdCB2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpO1xcbiBcXG5AQCAtMTU3NSwzICsxNTc3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfY2FuX21vZGlmeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0aWYgKHZtYV9pc19hdHRhY2hlZCh2bWEpKVxcbiBcXHRcXHR2bWFfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEpO1xcbiB9XFxuK1xcbitzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9nZXRfcGFnZV9wcm90KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbit7XFxuK1xcdHJldHVybiB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYS1cXHUwMDNlZmxhZ3MpO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEwOjE0OjM3Ljc5OTY5MTIxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjAxMDU0MjU4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWxvY2tfZml4dXBcIixcbiAgICBcImFwcGx5X3ZtYV9sb2NrX2ZsYWdzXCIsXG4gICAgXCJhcHBseV9tbG9ja2FsbF9mbGFnc1wiLFxuICAgIFwidW5tYXBfc291cmNlX3ZtYVwiLFxuICAgIFwiY2hlY2tfcHJlcF92bWFcIixcbiAgICBcIm1lbWZkX2NoZWNrX3NlYWxzX21tYXBcIixcbiAgICBcImNyZWF0ZV9pbml0X3N0YWNrX3ZtYVwiLFxuICAgIFwidGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1ham9yIHJlZmFjdG9yaW5nIG9mIFZNQSBmbGFncyBoYW5kbGluZyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHRyYW5zaXRpb25pbmcgZnJvbSBgdm1fZmxhZ3NfdGAgdG8gYHZtYV9mbGFnc190YC4gSXQgbW9kaWZpZXMgY3JpdGljYWwgcGF0aHMgaW4gbW1hcCwgbXJlbWFwLCBtbG9jaywgYW5kIG1wcm90ZWN0LiBUaGVzZSBjaGFuZ2VzIGZ1bmN0aW9uYWxseSBhbHRlciBob3cgVk1BIGZsYWdzIGFyZSBzZXQsIGNsZWFyZWQsIGFuZCB0ZXN0ZWQsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2UgaW5jb3JyZWN0IG1lbW9yeSBwcm90ZWN0aW9ucywgYWNjb3VudGluZyBlcnJvcnMsIG9yIGxvY2tpbmcgaXNzdWVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZXNlIGZsYWdzLCBhdm9pZGluZyB0aGUgYWJzb2x1dGUgaG90dGVzdCBwYXRocyBsaWtlIGBkb19tbWFwYCB0byBwcmV2ZW50IHNrZXdlZCBkaXN0cmlidXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdlOGRlMmJkMTE5ZGU3M2Q5NDY4ZGE0ZWY3ZTM5ZDhlODQ3OTRjYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAxMDoxNDozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdmRzby5jIGIvYXJjaC9taXBzL2tlcm5lbC92ZHNvLmNcbmluZGV4IGJkMWZjMTdkMzk3NWRjLi45NDg3Mzc3NWZjMGY0NSAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdmRzby5jXG4rKysgYi9hcmNoL21pcHMva2VybmVsL3Zkc28uY1xuQEAgLTkxLDggKzkxLDggQEAgaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBpbnQgdXNlc19pbnRlcnApXG4gXG4gXHRcdC8qIE1hcCBkZWxheSBzbG90IGVtdWxhdGlvbiBwYWdlICovXG4gXHRcdGJhc2UgPSBkb19tbWFwKE5VTEwsIFNUQUNLX1RPUCwgUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX0VYRUMsXG4tXHRcdFx0ICAgICAgIE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSB8IE1BUF9GSVhFRCwgMCwgMCwgXHUwMDI2dW51c2VkLFxuLVx0XHRcdCAgICAgICBOVUxMKTtcbitcdFx0XHQgICAgICAgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFIHwgTUFQX0ZJWEVELFxuK1x0XHRcdCAgICAgICBFTVBUWV9WTUFfRkxBR1MsIDAsIFx1MDAyNnVudXNlZCwgTlVMTCk7XG4gXHRcdGlmIChJU19FUlJfVkFMVUUoYmFzZSkpIHtcbiBcdFx0XHRyZXQgPSBiYXNlO1xuIFx0XHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jIGIvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmNcbmluZGV4IDI4YmVjNWJjNzg3OTQ5Li44MjEyN2UzMWRjYTZkZSAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jXG4rKysgYi9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuY1xuQEAgLTY1OSw3ICs2NTksOCBAQCB1bnNpZ25lZCBsb25nIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHR1bnNpZ25lZCBpbnQgcHNpemU7XG4gXG4gXHRpZiAocmFkaXhfZW5hYmxlZCgpKVxuLVx0XHRyZXR1cm4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywgdm1fZmxhZ3MpO1xuK1x0XHRyZXR1cm4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyxcbitcdFx0XHRcdFx0XHQgbGVnYWN5X3RvX3ZtYV9mbGFncyh2bV9mbGFncykpO1xuIFxuIFx0aWYgKGZpbHAgXHUwMDI2XHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxuIFx0XHRwc2l6ZSA9IGZpbGVfdG9fcHNpemUoZmlscCk7XG5AQCAtNjc5LDcgKzY4MCw4IEBAIHVuc2lnbmVkIGxvbmcgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0dW5zaWduZWQgaW50IHBzaXplO1xuIFxuIFx0aWYgKHJhZGl4X2VuYWJsZWQoKSlcbi1cdFx0cmV0dXJuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihmaWxwLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcbitcdFx0cmV0dXJuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihmaWxwLCBhZGRyMCwgbGVuLFxuK1x0XHRcdFx0cGdvZmYsIGZsYWdzLCBsZWdhY3lfdG9fdm1hX2ZsYWdzKHZtX2ZsYWdzKSk7XG4gXG4gXHRpZiAoZmlscCBcdTAwMjZcdTAwMjYgaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXG4gXHRcdHBzaXplID0gZmlsZV90b19wc2l6ZShmaWxwKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uY1xuaW5kZXggZTNlZDY4NGRkY2YyOTEuLjMyYTA1ZDg4OWI5YTJiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uY1xuQEAgLTEyNTIsNyArMTI1Miw3IEBAIGludCBkcm1fZ2VtX21tYXBfb2JqKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1bnNpZ25lZCBsb25nIG9ial9zaXplLFxuIFx0XHR9XG4gXG4gXHRcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0lPIHwgVk1fUEZOTUFQIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QKTtcbi1cdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpKTtcbitcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XG4gXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2RtYV9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2RtYV9oZWxwZXIuY1xuaW5kZXggMWMwMGE3MWFiM2M5ZDAuLjdkOTYxMjA3NWQzMTBiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZG1hX2hlbHBlci5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9kbWFfaGVscGVyLmNcbkBAIC01NDAsNyArNTQwLDcgQEAgaW50IGRybV9nZW1fZG1hX21tYXAoc3RydWN0IGRybV9nZW1fZG1hX29iamVjdCAqZG1hX29iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpcbiBcdHZtX2ZsYWdzX21vZCh2bWEsIFZNX0RPTlREVU1QIHwgVk1fRE9OVEVYUEFORCwgVk1fUEZOTUFQKTtcbiBcbiBcdGlmIChkbWFfb2JqLVx1MDAzZW1hcF9ub25jb2hlcmVudCkge1xuLVx0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuK1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcbiBcdFx0cmV0ID0gZG1hX21tYXBfcGFnZXMoZHJtX2Rldl9kbWFfZGV2KGRtYV9vYmotXHUwMDNlYmFzZS5kZXYpLFxuIFx0XHRcdFx0ICAgICB2bWEsIHZtYS1cdTAwM2V2bV9lbmQgLSB2bWEtXHUwMDNldm1fc3RhcnQsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuY1xuaW5kZXggYzk4OTQ1OWViMjE1OTEuLjA2ZDAxOWQ1MWQzZTZiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jXG5AQCAtNzY0LDcgKzc2NCw3IEBAIGludCBkcm1fZ2VtX3NobWVtX21tYXAoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0XG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHR2bV9mbGFnc19zZXQodm1hLCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xuLVx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKTtcbitcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFx0aWYgKHNobWVtLVx1MDAzZW1hcF93YylcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmNcbmluZGV4IDJlNGQ2ZDExN2VlMmQ4Li5mOWM4YjdiMmJmYzdhZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmNcbkBAIC0xMzMsNyArMTMzLDcgQEAgc3RhdGljIGludCBldG5hdml2X2dlbV9tbWFwX29iaihzdHJ1Y3QgZXRuYXZpdl9nZW1fb2JqZWN0ICpldG5hdml2X29iaixcbiBcbiBcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX1BGTk1BUCB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XG4gXG4tXHR2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4rXHR2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFxuIFx0aWYgKGV0bmF2aXZfb2JqLVx1MDAzZWZsYWdzIFx1MDAyNiBFVE5BX0JPX1dDKSB7XG4gXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX3BhZ2VfcHJvdCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dlbS5jXG5pbmRleCA5YTYyNzBmM2RjYTZiZi4uMDIwOGM5MjU5NTcyNWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZ2VtLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nZW0uY1xuQEAgLTM3NywxMyArMzc3LDEzIEBAIHN0YXRpYyBpbnQgZXh5bm9zX2RybV9nZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0XG4gXG4gXHQvKiBub24tY2FjaGFibGUgYXMgZGVmYXVsdC4gKi9cbiBcdGlmIChleHlub3NfZ2VtLVx1MDAzZWZsYWdzIFx1MDAyNiBFWFlOT1NfQk9fQ0FDSEFCTEUpXG4tXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4rXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFx0ZWxzZSBpZiAoZXh5bm9zX2dlbS1cdTAwM2VmbGFncyBcdTAwMjYgRVhZTk9TX0JPX1dDKVxuIFx0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID1cbi1cdFx0XHRwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4rXHRcdFx0cGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcdGVsc2VcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9XG4tXHRcdFx0cGdwcm90X25vbmNhY2hlZCh2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncykpO1xuK1x0XHRcdHBncHJvdF9ub25jYWNoZWQodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XG4gXG4gXHRyZXQgPSBleHlub3NfZHJtX2dlbV9tbWFwX2J1ZmZlcihleHlub3NfZ2VtLCB2bWEpO1xuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uY1xuaW5kZXggMDY0NGY4NWM2YzhlNTIuLjljYTkwYzFiYjViNDIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uY1xuQEAgLTExMiw3ICsxMTIsNyBAQCBpOTE1X2dlbV9tbWFwX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsXG4gXHRcdHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTtcbiBcdFx0aWYgKHZtYSBcdTAwMjZcdTAwMjYgX192bWFfbWF0Y2hlcyh2bWEsIG9iai1cdTAwM2ViYXNlLmZpbHAsIGFkZHIsIGFyZ3MtXHUwMDNlc2l6ZSkpXG4gXHRcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9XG4tXHRcdFx0XHRwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4rXHRcdFx0XHRwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xuIFx0XHRlbHNlXG4gXHRcdFx0YWRkciA9IC1FTk9NRU07XG4gXHRcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcbkBAIC0xMDI0LDcgKzEwMjQsNyBAQCBpOTE1X2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLFxuIFx0ZnB1dChhbm9uKTtcbiBcbiBcdGlmIChvYmotXHUwMDNlb3BzLVx1MDAzZW1tYXBfb3BzKSB7XG4tXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4rXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xuIFx0XHR2bWEtXHUwMDNldm1fb3BzID0gb2JqLVx1MDAzZW9wcy1cdTAwM2VtbWFwX29wcztcbiBcdFx0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IG9iai1cdTAwM2ViYXNlLnZtYV9ub2RlLmRyaXZlcl9wcml2YXRlO1xuIFx0XHRyZXR1cm4gMDtcbkBAIC0xMDM1LDcgKzEwMzUsNyBAQCBpOTE1X2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLFxuIFx0c3dpdGNoIChtbW8tXHUwMDNlbW1hcF90eXBlKSB7XG4gXHRjYXNlIEk5MTVfTU1BUF9UWVBFX1dDOlxuIFx0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID1cbi1cdFx0XHRwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4rXHRcdFx0cGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcdFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnZtX29wc19jcHU7XG4gXHRcdGJyZWFrO1xuIFxuQEAgLTEwNDMsMTkgKzEwNDMsMTkgQEAgaTkxNV9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaixcbiBcdFx0R0VNX1dBUk5fT04oMSk7XG4gXHRcdGZhbGx0aHJvdWdoO1xuIFx0Y2FzZSBJOTE1X01NQVBfVFlQRV9XQjpcbi1cdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKTtcbitcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gXHRcdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZ2bV9vcHNfY3B1O1xuIFx0XHRicmVhaztcbiBcbiBcdGNhc2UgSTkxNV9NTUFQX1RZUEVfVUM6XG4gXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPVxuLVx0XHRcdHBncHJvdF9ub25jYWNoZWQodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpKTtcbitcdFx0XHRwZ3Byb3Rfbm9uY2FjaGVkKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xuIFx0XHR2bWEtXHUwMDNldm1fb3BzID0gXHUwMDI2dm1fb3BzX2NwdTtcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIEk5MTVfTU1BUF9UWVBFX0dUVDpcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9XG4tXHRcdFx0cGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncykpO1xuK1x0XHRcdHBncHJvdF93cml0ZWNvbWJpbmUodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XG4gXHRcdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZ2bV9vcHNfZ3R0O1xuIFx0XHRicmVhaztcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jXG5pbmRleCBjYmY3MjNhNWQ4NmZhOS4uNmE3OGUyNDJkZTdjNmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmNcbkBAIC0xMTI1LDcgKzExMjUsNyBAQCBzdGF0aWMgaW50IG1zbV9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdFxuIFx0c3RydWN0IG1zbV9nZW1fb2JqZWN0ICptc21fb2JqID0gdG9fbXNtX2JvKG9iaik7XG4gXG4gXHR2bV9mbGFnc19zZXQodm1hLCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xuLVx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IG1zbV9nZW1fcGdwcm90KG1zbV9vYmosIHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4rXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gbXNtX2dlbV9wZ3Byb3QobXNtX29iaiwgdm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmNcbmluZGV4IDIwZGJhMDJkNjE3NWJjLi45YTZlZTJlODgwYzBhZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmNcbkBAIC01NSw3ICs1NSw3IEBAIHN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfdHRtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0XHRnb3RvIGVycm9yX3VubG9jaztcbiBcbiBcdG5vdXZlYXVfYm9fZGVsX2lvX3Jlc2VydmVfbHJ1KGJvKTtcbi1cdHByb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4rXHRwcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcdHJldCA9IHR0bV9ib192bV9mYXVsdF9yZXNlcnZlZCh2bWYsIHByb3QsIFRUTV9CT19WTV9OVU1fUFJFRkFVTFQpO1xuIFx0bm91dmVhdV9ib19hZGRfaW9fcmVzZXJ2ZV9scnUoYm8pO1xuIFx0aWYgKHJldCA9PSBWTV9GQVVMVF9SRVRSWSBcdTAwMjZcdTAwMjYgISh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUKSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2ZiZGV2LmMgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2ZiZGV2LmNcbmluZGV4IGNhM2ZiMTg2YmYxOTU0Li40ODgxNzc3NjQyZDI5NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZmJkZXYuY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYmRldi5jXG5AQCAtODQsNyArODQsNyBAQCBzdGF0aWMgaW50IG9tYXBfZmJkZXZfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvXG4gXG4gc3RhdGljIGludCBvbWFwX2ZiZGV2X2ZiX21tYXAoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbi1cdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4rXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcbiBcdHJldHVybiBmYl9kZWZlcnJlZF9pb19tbWFwKGluZm8sIHZtYSk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2dlbS5jXG5pbmRleCAwMDQwNGZiNmMyOWFhZS4uZmIwZTZmNTU2YjMxNDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2dlbS5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2dlbS5jXG5AQCAtNTM4LDkgKzUzOCw5IEBAIHN0YXRpYyBpbnQgb21hcF9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjXG4gXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVAgfCBWTV9JTyB8IFZNX01JWEVETUFQKTtcbiBcbiBcdGlmIChvbWFwX29iai1cdTAwM2VmbGFncyBcdTAwMjYgT01BUF9CT19XQykge1xuLVx0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncykpO1xuK1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcdH0gZWxzZSBpZiAob21hcF9vYmotXHUwMDNlZmxhZ3MgXHUwMDI2IE9NQVBfQk9fVU5DQUNIRUQpIHtcbi1cdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpKTtcbitcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hX2dldF9wYWdlX3Byb3Qodm1hKSk7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuIFx0XHQgKiBXZSBkbyBoYXZlIHNvbWUgcHJpdmF0ZSBvYmplY3RzLCBhdCBsZWFzdCBmb3Igc2Nhbm91dCBidWZmZXJzXG5AQCAtNTU4LDcgKzU1OCw3IEBAIHN0YXRpYyBpbnQgb21hcF9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjXG4gXHRcdHZtYS1cdTAwM2V2bV9wZ29mZiAtPSBkcm1fdm1hX25vZGVfc3RhcnQoXHUwMDI2b2JqLVx1MDAzZXZtYV9ub2RlKTtcbiBcdFx0dm1hX3NldF9maWxlKHZtYSwgb2JqLVx1MDAzZWZpbHApO1xuIFxuLVx0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuK1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcdH1cbiBcbiBcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXG5pbmRleCBhMWUyZWIxY2E3YmJlNi4uNzcwNTU2MzUzOTY4NzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXG5AQCAtNzc2LDcgKzc3Niw3IEBAIHN0YXRpYyBpbnQgcGFudGhvcl9nZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2XG4gXHR9XG4gXG4gXHR2bV9mbGFnc19zZXQodm1hLCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xuLVx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKTtcbitcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFx0aWYgKHNob3VsZF9tYXBfd2MoYm8pKVxuIFx0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWEtXHUwMDNldm1fcGFnZV9wcm90KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uY1xuaW5kZXggYjE4ODUzOWRjYTBiMjUuLjlhMWRjOWYxMjA3MjlmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uY1xuQEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0aWMgaW50IHJvY2tjaGlwX2RybV9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosXG4gXHQgKi9cbiBcdHZtX2ZsYWdzX21vZCh2bWEsIFZNX0lPIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QLCBWTV9QRk5NQVApO1xuIFxuLVx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpKTtcbitcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYV9nZXRfcGFnZV9wcm90KHZtYSkpO1xuIFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4gXG4gXHRpZiAocmtfb2JqLVx1MDAzZXBhZ2VzKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uY1xuaW5kZXggMWQ4ZDI3YTVlYTg5YjguLmY3NmFmNzMzZWE3OTM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmNcbkBAIC02MDIsNyArNjAyLDcgQEAgaW50IF9fdGVncmFfZ2VtX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFxuIFx0XHR2bWEtXHUwMDNldm1fcGdvZmYgPSB2bV9wZ29mZjtcbiBcdH0gZWxzZSB7XG4tXHRcdHBncHJvdF90IHByb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4rXHRcdHBncHJvdF90IHByb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFxuIFx0XHR2bV9mbGFnc19tb2Qodm1hLCBWTV9NSVhFRE1BUCwgVk1fUEZOTUFQKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdnJhbS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ZyYW0uY1xuaW5kZXggNGFlM2NiYzM1ZGQzNjQuLjU0NGE2YWJkZGJjOGI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ZyYW0uY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ZyYW0uY1xuQEAgLTU1LDcgKzU1LDcgQEAgc3RhdGljIGludCB2aXJ0aW9fZ3B1X3ZyYW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaixcbiBcbiBcdHZtYS1cdTAwM2V2bV9wZ29mZiAtPSBkcm1fdm1hX25vZGVfc3RhcnQoXHUwMDI2b2JqLVx1MDAzZXZtYV9ub2RlKTtcbiBcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX01JWEVETUFQIHwgVk1fRE9OVEVYUEFORCk7XG4tXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuK1x0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtXHUwMDNldm1fcGFnZV9wcm90KTtcbiBcdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZ2aXJ0aW9fZ3B1X3ZyYW1fdm1fb3BzO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3BhZ2VfZGlydHkuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3BhZ2VfZGlydHkuY1xuaW5kZXggNDU1NjFiYzFjOWVmZmUuLmE5ZmQ0MDE1YTBjYWE3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcGFnZV9kaXJ0eS5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9wYWdlX2RpcnR5LmNcbkBAIC00ODEsNyArNDgxLDcgQEAgdm1fZmF1bHRfdCB2bXdfYm9fdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRpZiAodmJvLVx1MDAzZWRpcnR5IFx1MDAyNlx1MDAyNiB2Ym8tXHUwMDNlZGlydHktXHUwMDNlbWV0aG9kID09IFZNV19CT19ESVJUWV9NS1dSSVRFKVxuIFx0XHRwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IH5WTV9TSEFSRUQpO1xuIFx0ZWxzZVxuLVx0XHRwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuK1x0XHRwcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcbiBcdHJldCA9IHR0bV9ib192bV9mYXVsdF9yZXNlcnZlZCh2bWYsIHByb3QsIG51bV9wcmVmYXVsdCk7XG4gXHRpZiAocmV0ID09IFZNX0ZBVUxUX1JFVFJZIFx1MDAyNlx1MDAyNiAhKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2UuY1xuaW5kZXggYWJlMjVhZWRlZWFkZWYuLjgzODc5N2NjNjVkNzkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmljZS5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2aWNlLmNcbkBAIC0yODEsNyArMjgxLDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgYmFycmllcl9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdHBncHJvdF90IHByb3Q7XG4gXHRpbnQgaWR4O1xuIFxuLVx0cHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKTtcbitcdHByb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpO1xuIFxuIFx0aWYgKGRybV9kZXZfZW50ZXIoZGV2LCBcdTAwMjZpZHgpKSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgcGZuO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9tbWlvX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX21taW9fZ2VtLmNcbmluZGV4IDhjODAzZWYyMzNjYzRkLi4zNzQxYWU2MGY1MzJiZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9tbWlvX2dlbS5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfbW1pb19nZW0uY1xuQEAgLTE0OSw3ICsxNDksNyBAQCBzdGF0aWMgaW50IHhlX21taW9fZ2VtX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpiYXNlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKlxuIFxuIFx0LyogU2V0IHZtX3Bnb2ZmICh1c2VkIGFzIGEgZmFrZSBidWZmZXIgb2Zmc2V0IGJ5IERSTSkgdG8gMCAqL1xuIFx0dm1hLVx1MDAzZXZtX3Bnb2ZmID0gMDtcbi1cdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKSk7XG4rXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWFfZ2V0X3BhZ2VfcHJvdCh2bWEpKTtcbiBcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0lPIHwgVk1fUEZOTUFQIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QIHxcbiBcdFx0ICAgICBWTV9ET05UQ09QWSB8IFZNX05PUkVTRVJWRSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jXG5pbmRleCBlZWM0YzFkYTNmOWUzMS4uZGQxNTg0NDNmNTVmMTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uY1xuQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIGludCB4ZW5fZHJtX2Zyb250X2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmosXG4gXHQgKiB3aGljaCBpcyBtYXBwZWQgYXMgTm9ybWFsIElubmVyIFdyaXRlLUJhY2sgT3V0ZXIgV3JpdGUtQmFja1xuIFx0ICogSW5uZXItU2hhcmVhYmxlLlxuIFx0ICovXG4tXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuK1x0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gXG4gXHQvKlxuIFx0ICogdm1fb3BlcmF0aW9uc19zdHJ1Y3QuZmF1bHQgaGFuZGxlciB3aWxsIGJlIGNhbGxlZCBpZiBDUFUgYWNjZXNzXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiX2lvX2ZvcHMuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYl9pb19mb3BzLmNcbmluZGV4IDZhYjYwZmNkMDA1MDE0Li42ZDBhOGM4ZTE0MWEyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYl9pb19mb3BzLmNcbisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYl9pb19mb3BzLmNcbkBAIC0xNjEsNyArMTYxLDcgQEAgaW50IGZiX2lvX21tYXAoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0XHRsZW4gPSBpbmZvLVx1MDAzZWZpeC5tbWlvX2xlbjtcbiBcdH1cbiBcbi1cdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4rXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZnJhbWVidWZmZXIodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCwgdm1hLVx1MDAzZXZtX3N0YXJ0LFxuIFx0XHRcdFx0XHQgICAgICAgdm1hLVx1MDAzZXZtX2VuZCwgc3RhcnQpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmNcbmluZGV4IGY1N2ZhMjFhMjUwMzUzLi4zZGU1ODZkYTE5N2JkOSAxMDA2NDRcbi0tLSBhL2ZzL2Fpby5jXG4rKysgYi9mcy9haW8uY1xuQEAgLTYwNCw3ICs2MDQsNyBAQCBzdGF0aWMgaW50IGFpb19zZXR1cF9yaW5nKHN0cnVjdCBraW9jdHggKmN0eCwgdW5zaWduZWQgaW50IG5yX2V2ZW50cylcbiBcbiBcdGN0eC1cdTAwM2VtbWFwX2Jhc2UgPSBkb19tbWFwKGN0eC1cdTAwM2VhaW9fcmluZ19maWxlLCAwLCBjdHgtXHUwMDNlbW1hcF9zaXplLFxuIFx0XHRcdFx0IFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4tXHRcdFx0XHQgTUFQX1NIQVJFRCwgMCwgMCwgXHUwMDI2dW51c2VkLCBOVUxMKTtcbitcdFx0XHRcdCBNQVBfU0hBUkVELCBFTVBUWV9WTUFfRkxBR1MsIDAsIFx1MDAyNnVudXNlZCwgTlVMTCk7XG4gXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XG4gXHRpZiAoSVNfRVJSKCh2b2lkICopY3R4LVx1MDAzZW1tYXBfYmFzZSkpIHtcbiBcdFx0Y3R4LVx1MDAzZW1tYXBfc2l6ZSA9IDA7XG5kaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xuaW5kZXggOWZkZGQxZTBiODEzYWIuLjQzMDY2ZjlkZGY1MmQxIDEwMDY0NFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcbisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5AQCAtMTg0LDcgKzE4NCw4IEBAIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmIChhZGRyKVxuIFx0XHRhZGRyMCA9IEFMSUdOKGFkZHIsIGh1Z2VfcGFnZV9zaXplKGgpKTtcbiBcbi1cdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XG4rXHRyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MoZmlsZSwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLFxuK1x0XHRcdFx0XHQgICAgIEVNUFRZX1ZNQV9GTEFHUyk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdlX21tLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuaW5kZXggY2FlOTdjMzA3MjgwOTcuLjllNDNlMTM4YzBiNzc3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG5AQCAtMzkxLDkgKzM5MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfZGlzYWJsZWRfYnlfaHcodm9pZClcbiBcbiB1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyk7XG4tdW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK3Vuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxuLVx0XHR2bV9mbGFnc190IHZtX2ZsYWdzKTtcbitcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKTtcbiBcbiBlbnVtIHNwbGl0X3R5cGUge1xuIFx0U1BMSVRfVFlQRV9VTklGT1JNLFxuQEAgLTYxNyw5ICs2MTcsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuICNkZWZpbmUgdGhwX2dldF91bm1hcHBlZF9hcmVhXHROVUxMXG4gXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nXG4tdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbi1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxuK3RocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbitcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWZkLmggYi9pbmNsdWRlL2xpbnV4L21lbWZkLmhcbmluZGV4IGI0ZmRhMDlkYWI5ZjYxLi5jMTU5ZTQwZTNmMzRhMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtZmQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1mZC5oXG5AQCAtMTQsOSArMTQsOSBAQCBzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpO1xuICAqIHRvIHNlYWxpbmcsIG9yIDAgb3RoZXJ3aXNlLlxuICAqXG4gICogV2UgYWxzbyB1cGRhdGUgVk1BIGZsYWdzIGlmIGFwcHJvcHJpYXRlIGJ5IG1hbmlwdWxhdGluZyB0aGUgVk1BIGZsYWdzIHBvaW50ZWRcbi0gKiB0byBieSB2bV9mbGFnc19wdHIuXG4rICogdG8gYnkgdm1hX2ZsYWdzX3B0ci5cbiAgKi9cbi1pbnQgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3NfcHRyKTtcbitpbnQgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm1hX2ZsYWdzX3QgKnZtYV9mbGFnc19wdHIpO1xuIHN0cnVjdCBmaWxlICptZW1mZF9hbGxvY19maWxlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IG1lbWZkX2dldF9zZWFscyhzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4gaW50IG1lbWZkX2FkZF9zZWFscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IHNlYWxzKTtcbkBAIC0zMCw3ICszMCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuIFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gfVxuIHN0YXRpYyBpbmxpbmUgaW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsXG4tXHRcdFx0XHRcdCB2bV9mbGFnc190ICp2bV9mbGFnc19wdHIpXG4rXHRcdFx0XHRcdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzX3B0cilcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCAzMmJiNzIzZmZiYjkyZC4uNTUwZmI5Mjk1N2QxODkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTQ0Miw4ICs0NDIsMTAgQEAgZW51bSB7XG4gI2RlZmluZSBWTV9TVEFDS1x0SU5JVF9WTV9GTEFHKFNUQUNLKVxuICNpZmRlZiBDT05GSUdfU1RBQ0tfR1JPV1NVUFxuICNkZWZpbmUgVk1fU1RBQ0tfRUFSTFlcdElOSVRfVk1fRkxBRyhTVEFDS19FQVJMWSlcbisjZGVmaW5lIFZNQV9TVEFDS19FQVJMWSBta192bWFfZmxhZ3MoVk1BX1NUQUNLX0VBUkxZX0JJVClcbiAjZWxzZVxuICNkZWZpbmUgVk1fU1RBQ0tfRUFSTFlcdFZNX05PTkVcbisjZGVmaW5lIFZNQV9TVEFDS19FQVJMWSBFTVBUWV9WTUFfRkxBR1NcbiAjZW5kaWZcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1BLRVlTXG4gI2RlZmluZSBWTV9QS0VZX1NISUZUICgoX19mb3JjZSBpbnQpVk1BX0hJR0hfQVJDSF8wX0JJVClcbkBAIC00NjUsMTUgKzQ2NywxOCBAQCBlbnVtIHtcbiAjaWYgZGVmaW5lZChDT05GSUdfWDg2X1VTRVJfU0hBRE9XX1NUQUNLKSB8fCBkZWZpbmVkKENPTkZJR19BUk02NF9HQ1MpIHx8IFxcXG4gXHRkZWZpbmVkKENPTkZJR19SSVNDVl9VU0VSX0NGSSlcbiAjZGVmaW5lIFZNX1NIQURPV19TVEFDS1x0SU5JVF9WTV9GTEFHKFNIQURPV19TVEFDSylcbisjZGVmaW5lIFZNQV9TSEFET1dfU1RBQ0sgbWtfdm1hX2ZsYWdzKFZNQV9TSEFET1dfU1RBQ0tfQklUKVxuICNkZWZpbmUgVk1BX1NUQVJUR0FQX0ZMQUdTIG1rX3ZtYV9mbGFncyhWTUFfR1JPV1NET1dOX0JJVCwgVk1BX1NIQURPV19TVEFDS19CSVQpXG4gI2Vsc2VcbiAjZGVmaW5lIFZNX1NIQURPV19TVEFDS1x0Vk1fTk9ORVxuKyNkZWZpbmUgVk1BX1NIQURPV19TVEFDSyBFTVBUWV9WTUFfRkxBR1NcbiAjZGVmaW5lIFZNQV9TVEFSVEdBUF9GTEFHUyBta192bWFfZmxhZ3MoVk1BX0dST1dTRE9XTl9CSVQpXG4gI2VuZGlmXG4gI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KVxuICNkZWZpbmUgVk1fU0FPXHRcdElOSVRfVk1fRkxBRyhTQU8pXG4gI2VsaWYgZGVmaW5lZChDT05GSUdfUEFSSVNDKVxuICNkZWZpbmUgVk1fR1JPV1NVUFx0SU5JVF9WTV9GTEFHKEdST1dTVVApXG4rI2RlZmluZSBWTUFfR1JPV1NVUFx0bWtfdm1hX2ZsYWdzKFZNQV9HUk9XU1VQX0JJVClcbiAjZWxpZiBkZWZpbmVkKENPTkZJR19TUEFSQzY0KVxuICNkZWZpbmUgVk1fU1BBUkNfQURJXHRJTklUX1ZNX0ZMQUcoU1BBUkNfQURJKVxuICNkZWZpbmUgVk1fQVJDSF9DTEVBUlx0SU5JVF9WTV9GTEFHKEFSQ0hfQ0xFQVIpXG5AQCAtNDg1LDYgKzQ5MCw3IEBAIGVudW0ge1xuICNlbmRpZlxuICNpZm5kZWYgVk1fR1JPV1NVUFxuICNkZWZpbmUgVk1fR1JPV1NVUFx0Vk1fTk9ORVxuKyNkZWZpbmUgVk1BX0dST1dTVVBcdEVNUFRZX1ZNQV9GTEFHU1xuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfQVJNNjRfTVRFXG4gI2RlZmluZSBWTV9NVEVcdFx0SU5JVF9WTV9GTEFHKE1URSlcbkBAIC01NDAsNiArNTQ2LDggQEAgZW51bSB7XG4gXG4gLyogQml0cyBzZXQgaW4gdGhlIFZNQSB1bnRpbCB0aGUgc3RhY2sgaXMgaW4gaXRzIGZpbmFsIGxvY2F0aW9uICovXG4gI2RlZmluZSBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQIChWTV9SQU5EX1JFQUQgfCBWTV9TRVFfUkVBRCB8IFZNX1NUQUNLX0VBUkxZKVxuKyNkZWZpbmUgVk1BX1NUQUNLX0lOQ09NUExFVEVfU0VUVVAgYXBwZW5kX3ZtYV9mbGFncyhcdFx0XFxcbitcdFZNQV9TVEFDS19FQVJMWSwgVk1BX1JBTkRfUkVBRF9CSVQsIFZNQV9TRVFfUkVBRF9CSVQpXG4gXG4gI2RlZmluZSBUQVNLX0VYRUNfQklUICgoY3VycmVudC1cdTAwM2VwZXJzb25hbGl0eSBcdTAwMjYgUkVBRF9JTVBMSUVTX0VYRUMpID8gXFxcbiBcdFx0ICAgICAgIFZNQV9FWEVDX0JJVCA6IFZNQV9SRUFEX0JJVClcbkBAIC0xNTc4LDExICsxNTg2LDI0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfaW5pdGlhbF9zdGFjayhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdFx0dm1hLVx1MDAzZXZtX2VuZCBcdTAwM2U9IHZtYS1cdTAwM2V2bV9tbS1cdTAwM2VzdGFydF9zdGFjaztcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIHZtYV9pc190ZW1wb3Jhcnlfc3RhY2soY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4rc3RhdGljIGlubGluZSBib29sIHZtYV9mbGFnc19jYW5fZ3Jvdyhjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MpXG4ge1xuLVx0aW50IG1heWJlX3N0YWNrID0gdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fR1JPV1NET1dOIHwgVk1fR1JPV1NVUCk7XG4rXHRpZiAodm1hX2ZsYWdzX3Rlc3Rfc2luZ2xlX21hc2soZmxhZ3MsIFZNQV9HUk9XU1VQKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAodm1hX2ZsYWdzX3Rlc3QoZmxhZ3MsIFZNQV9HUk9XU0RPV05fQklUKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCB2bWFfY2FuX2dyb3coY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4re1xuK1x0cmV0dXJuIHZtYV9mbGFnc19jYW5fZ3JvdyhcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuK31cbiBcbi1cdGlmICghbWF5YmVfc3RhY2spXG4rc3RhdGljIGlubGluZSBib29sIHZtYV9pc190ZW1wb3Jhcnlfc3RhY2soY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4re1xuK1x0aWYgKCF2bWFfY2FuX2dyb3codm1hKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKCh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NUQUNLX0lOQ09NUExFVEVfU0VUVVApID09XG5AQCAtNDE3NCwxOCArNDE5NSwyMCBAQCB1bnNpZ25lZCBsb25nIHJhbmRvbWl6ZV9wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgcmFuZ2UpO1xuIFxuIHVuc2lnbmVkIGxvbmdcbiBfX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxuLVx0XHQgICAgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncyk7XG4rXHRcdCAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxuK1x0XHQgICAgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKTtcbiBcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbiBnZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcbiBcdFx0ICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIHtcbi1cdHJldHVybiBfX2dldF91bm1hcHBlZF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTtcbitcdHJldHVybiBfX2dldF91bm1hcHBlZF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxuK1x0XHRcdFx0ICAgRU1QVFlfVk1BX0ZMQUdTKTtcbiB9XG4gXG4tZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK3Vuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0dW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncyxcbi1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgKnBvcHVsYXRlLFxuK1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nICpwb3B1bGF0ZSxcbiBcdHN0cnVjdCBsaXN0X2hlYWQgKnVmKTtcbiBleHRlcm4gaW50IGRvX3ZtaV9tdW5tYXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHQgdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbiwgc3RydWN0IGxpc3RfaGVhZCAqdWYsXG5AQCAtNDU4NCwyNiArNDYwNywzNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmFuZ2VfaW5fdm1hX2Rlc2MoY29uc3Qgc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYyxcbiAjaWZkZWYgQ09ORklHX01NVVxuIHBncHJvdF90IHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3NfdCB2bV9mbGFncyk7XG4gXG4tc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4rc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcbiB7XG4gXHRjb25zdCB2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpO1xuIFxuIFx0cmV0dXJuIHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3MpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9nZXRfcGFnZV9wcm90KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuK3tcbitcdHJldHVybiB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYS1cdTAwM2VmbGFncyk7XG4rfVxuK1xuIHZvaWQgdm1hX3NldF9wYWdlX3Byb3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4ge1xuIFx0cmV0dXJuIF9fcGdwcm90KDApO1xuIH1cbi1zdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9nZXRfcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcbitzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9mbGFnc190b19wYWdlX3Byb3Qodm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuK3tcbitcdHJldHVybiBfX3BncHJvdCgwKTtcbit9XG4rc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4gXHRyZXR1cm4gX19wZ3Byb3QoMCk7XG4gfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfc2V0X3BhZ2VfcHJvdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4tXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtXHUwMDNldm1fZmxhZ3MpO1xuK1x0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtYV9nZXRfcGFnZV9wcm90KHZtYSk7XG4gfVxuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxuaW5kZXggOTVkMDA0MGRmNTg0MTMuLjEwYmU4YTU0YjQxNmY5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcbkBAIC0xOTMsMjEgKzE5MywxOCBAQCB1bnNpZ25lZCBsb25nIG1tX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbiBcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xuIFxuLXVuc2lnbmVkIGxvbmcgbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCxcbi1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGxlbixcbi1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBwZ29mZixcbi1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBmbGFncyxcbi1cdFx0XHRcdFx0ICAgdm1fZmxhZ3NfdCB2bV9mbGFncyk7XG4rdW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbitcdFx0dW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKTtcbiBcbiB1bnNpZ25lZCBsb25nXG4gZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXG4tXHRcdFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKTtcbitcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG4gdW5zaWduZWQgbG9uZ1xuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbi1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncyk7XG4rXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9waWNrX21tYXBfbGF5b3V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IHJsaW1pdCAqcmxpbV9zdGFjaykge31cbmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmNcbmluZGV4IGIzZThhNThlMTc3ZDNiLi5iYjFhNzIxYTNlNzQ2ZSAxMDA2NDRcbi0tLSBhL2lwYy9zaG0uY1xuKysrIGIvaXBjL3NobS5jXG5AQCAtMTY2MSw3ICsxNjYxLDggQEAgbG9uZyBkb19zaG1hdChpbnQgc2htaWQsIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxnLFxuIFx0XHRcdGdvdG8gaW52YWxpZDtcbiBcdH1cbiBcbi1cdGFkZHIgPSBkb19tbWFwKGZpbGUsIGFkZHIsIHNpemUsIHByb3QsIGZsYWdzLCAwLCAwLCBcdTAwMjZwb3B1bGF0ZSwgTlVMTCk7XG4rXHRhZGRyID0gZG9fbW1hcChmaWxlLCBhZGRyLCBzaXplLCBwcm90LCBmbGFncywgRU1QVFlfVk1BX0ZMQUdTLCAwLFxuK1x0XHQgICAgICAgXHUwMDI2cG9wdWxhdGUsIE5VTEwpO1xuIFx0KnJhZGRyID0gYWRkcjtcbiBcdGVyciA9IDA7XG4gXHRpZiAoSVNfRVJSX1ZBTFVFKGFkZHIpKVxuZGlmZiAtLWdpdCBhL21tL2RlYnVnLmMgYi9tbS9kZWJ1Zy5jXG5pbmRleCA0OTc2NTRiMzZmMWFiNS4uOWEwMjk3YjM5ODhkODkgMTAwNjQ0XG4tLS0gYS9tbS9kZWJ1Zy5jXG4rKysgYi9tbS9kZWJ1Zy5jXG5AQCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQgZHVtcF9tbShjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdFx0XCJudW1hX25leHRfc2NhbiAlbHUgbnVtYV9zY2FuX29mZnNldCAlbHUgbnVtYV9zY2FuX3NlcSAlZFxcblwiXG4gI2VuZGlmXG4gXHRcdFwidGxiX2ZsdXNoX3BlbmRpbmcgJWRcXG5cIlxuLVx0XHRcImRlZl9mbGFnczogJSNseCglcEd2KVxcblwiLFxuK1x0XHRcImRlZl9mbGFnczogJSpwYiglcEd2KVxcblwiLFxuIFxuIFx0XHRtbSwgbW0tXHUwMDNldGFza19zaXplLFxuIFx0XHRtbS1cdTAwM2VtbWFwX2Jhc2UsIG1tLVx1MDAzZW1tYXBfbGVnYWN5X2Jhc2UsXG5AQCAtMjI2LDcgKzIyNiw4IEBAIHZvaWQgZHVtcF9tbShjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdFx0bW0tXHUwMDNlbnVtYV9uZXh0X3NjYW4sIG1tLVx1MDAzZW51bWFfc2Nhbl9vZmZzZXQsIG1tLVx1MDAzZW51bWFfc2Nhbl9zZXEsXG4gI2VuZGlmXG4gXHRcdGF0b21pY19yZWFkKFx1MDAyNm1tLVx1MDAzZXRsYl9mbHVzaF9wZW5kaW5nKSxcbi1cdFx0bW0tXHUwMDNlZGVmX2ZsYWdzLCBcdTAwMjZtbS1cdTAwM2VkZWZfZmxhZ3NcbitcdFx0TlVNX1ZNQV9GTEFHX0JJVFMsIG1tLVx1MDAzZWRlZl92bWFfZmxhZ3MuX192bWFfZmxhZ3MsXG4rXHRcdFx1MDAyNm1tLVx1MDAzZWRlZl92bWFfZmxhZ3NcbiBcdCk7XG4gfVxuIEVYUE9SVF9TWU1CT0woZHVtcF9tbSk7XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDBkYzZkNjMwNTcwZmFmLi40MGQ2YjQwNzhlM2Q0MyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0xMTk2LDcgKzExOTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcbiBcdFx0bG9mZl90IG9mZiwgdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBzaXplLFxuLVx0XHR2bV9mbGFnc190IHZtX2ZsYWdzKVxuK1x0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuIFx0bG9mZl90IG9mZl9lbmQgPSBvZmYgKyBsZW47XG4gXHRsb2ZmX3Qgb2ZmX2FsaWduID0gcm91bmRfdXAob2ZmLCBzaXplKTtcbkBAIC0xMjEyLDggKzEyMTIsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdGlmIChsZW5fcGFkIFx1MDAzYyBsZW4gfHwgKG9mZiArIGxlbl9wYWQpIFx1MDAzYyBvZmYpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0ID0gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxwLCBhZGRyLCBsZW5fcGFkLFxuLVx0XHRcdFx0XHQgICBvZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsIGZsYWdzLCB2bV9mbGFncyk7XG4rXHRyZXQgPSBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhmaWxwLCBhZGRyLCBsZW5fcGFkLFxuK1x0XHRcdFx0XHQgICAgb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBmbGFncyxcbitcdFx0XHRcdFx0ICAgIHZtYV9mbGFncyk7XG4gXG4gXHQvKlxuIFx0ICogVGhlIGZhaWx1cmUgbWlnaHQgYmUgZHVlIHRvIGxlbmd0aCBwYWRkaW5nLiBUaGUgY2FsbGVyIHdpbGwgcmV0cnlcbkBAIC0xMjM4LDI1ICsxMjM5LDI3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tdW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK3Vuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxuLVx0XHR2bV9mbGFnc190IHZtX2ZsYWdzKVxuK1x0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyByZXQ7XG4gXHRsb2ZmX3Qgb2ZmID0gKGxvZmZfdClwZ29mZiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiBcbi1cdHJldCA9IF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgb2ZmLCBmbGFncywgUE1EX1NJWkUsIHZtX2ZsYWdzKTtcbitcdHJldCA9IF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgb2ZmLCBmbGFncywgUE1EX1NJWkUsXG4rXHRcdFx0XHQgICAgICB2bWFfZmxhZ3MpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxuLVx0XHRcdFx0XHQgICAgdm1fZmxhZ3MpO1xuK1x0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxuK1x0XHRcdFx0XHQgICAgIHZtYV9mbGFncyk7XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIHtcbi1cdHJldHVybiB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XG4rXHRyZXR1cm4gdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLFxuK1x0XHRcdFx0XHQgICAgICBFTVBUWV9WTUFfRkxBR1MpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh0aHBfZ2V0X3VubWFwcGVkX2FyZWEpO1xuIFxuZGlmZiAtLWdpdCBhL21tL21lbWZkLmMgYi9tbS9tZW1mZC5jXG5pbmRleCA2YzcyZmU2Y2FlZjc1ZC4uYzcwOGQ5MjUzM2Y0YWIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1mZC5jXG4rKysgYi9tbS9tZW1mZC5jXG5AQCAtMzcwLDM5ICszNzAsMzYgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3dyaXRlX3NlYWxlZCh1bnNpZ25lZCBpbnQgc2VhbHMpXG4gXHRyZXR1cm4gc2VhbHMgXHUwMDI2IChGX1NFQUxfV1JJVEUgfCBGX1NFQUxfRlVUVVJFX1dSSVRFKTtcbiB9XG4gXG4tc3RhdGljIGludCBjaGVja193cml0ZV9zZWFsKHZtX2ZsYWdzX3QgKnZtX2ZsYWdzX3B0cilcbitzdGF0aWMgaW50IGNoZWNrX3dyaXRlX3NlYWwodm1hX2ZsYWdzX3QgKnZtYV9mbGFnc19wdHIpXG4ge1xuLVx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9ICp2bV9mbGFnc19wdHI7XG4tXHR2bV9mbGFnc190IG1hc2sgPSB2bV9mbGFncyBcdTAwMjYgKFZNX1NIQVJFRCB8IFZNX1dSSVRFKTtcbi1cbiBcdC8qIElmIGEgcHJpdmF0ZSBtYXBwaW5nIHRoZW4gd3JpdGFiaWxpdHkgaXMgaXJyZWxldmFudC4gKi9cbi1cdGlmICghKG1hc2sgXHUwMDI2IFZNX1NIQVJFRCkpXG4rXHRpZiAoIXZtYV9mbGFnc190ZXN0KHZtYV9mbGFnc19wdHIsIFZNQV9TSEFSRURfQklUKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKlxuIFx0ICogTmV3IFBST1RfV1JJVEUgYW5kIE1BUF9TSEFSRUQgbW1hcHMgYXJlIG5vdCBhbGxvd2VkIHdoZW5cbiBcdCAqIHdyaXRlIHNlYWxzIGFyZSBhY3RpdmUuXG4gXHQgKi9cbi1cdGlmIChtYXNrIFx1MDAyNiBWTV9XUklURSlcbitcdGlmICh2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3NfcHRyLCBWTUFfV1JJVEVfQklUKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbiBcdC8qXG4gXHQgKiBUaGlzIGlzIGEgcmVhZC1vbmx5IG1hcHBpbmcsIGRpc2FsbG93IG1wcm90ZWN0KCkgZnJvbSBtYWtpbmcgYVxuIFx0ICogd3JpdGUtc2VhbGVkIG1hcHBpbmcgd3JpdGFibGUgaW4gZnV0dXJlLlxuIFx0ICovXG4tXHQqdm1fZmxhZ3NfcHRyIFx1MDAyNj0gflZNX01BWVdSSVRFO1xuK1x0dm1hX2ZsYWdzX2NsZWFyKHZtYV9mbGFnc19wdHIsIFZNQV9NQVlXUklURV9CSVQpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBtZW1mZF9jaGVja19zZWFsc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB2bV9mbGFnc190ICp2bV9mbGFnc19wdHIpXG4raW50IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKVxuIHtcbiBcdGludCBlcnIgPSAwO1xuIFx0dW5zaWduZWQgaW50ICpzZWFsc19wdHIgPSBtZW1mZF9maWxlX3NlYWxzX3B0cihmaWxlKTtcbiBcdHVuc2lnbmVkIGludCBzZWFscyA9IHNlYWxzX3B0ciA/ICpzZWFsc19wdHIgOiAwO1xuIFxuIFx0aWYgKGlzX3dyaXRlX3NlYWxlZChzZWFscykpXG4tXHRcdGVyciA9IGNoZWNrX3dyaXRlX3NlYWwodm1fZmxhZ3NfcHRyKTtcbitcdFx0ZXJyID0gY2hlY2tfd3JpdGVfc2VhbCh2bWFfZmxhZ3NfcHRyKTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuZGlmZiAtLWdpdCBhL21tL21sb2NrLmMgYi9tbS9tbG9jay5jXG5pbmRleCA5N2U0OTAzOGQ4ZDMzZS4uZWZhNjcxNmU0ZGZiZGYgMTAwNjQ0XG4tLS0gYS9tbS9tbG9jay5jXG4rKysgYi9tbS9tbG9jay5jXG5AQCAtMzI5LDcgKzMyOSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvd19tbG9ja19tdW5sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHQgKiBiZSBzcGxpdC4gQW5kIHRoZSBwYWdlcyBhcmUgbm90IGluIFZNX0xPQ0tlZCBWTUFcbiBcdCAqIGNhbiBiZSByZWNsYWltZWQuXG4gXHQgKi9cbi1cdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKSlcbitcdGlmICghdm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LyogZm9saW9fd2l0aGluX3JhbmdlKCkgY2Fubm90IHRha2UgS1NNLCBidXQgYW55IHNtYWxsIGZvbGlvIGlzIE9LICovXG5AQCAtMzY4LDcgKzM2OCw3IEBAIHN0YXRpYyBpbnQgbWxvY2tfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0Zm9saW8gPSBwbWRfZm9saW8oKnBtZCk7XG4gXHRcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbitcdFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHRcdG1sb2NrX2ZvbGlvKGZvbGlvKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdG11bmxvY2tfZm9saW8oZm9saW8pO1xuQEAgLTM5Myw3ICszOTMsNyBAQCBzdGF0aWMgaW50IG1sb2NrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGlmICghYWxsb3dfbWxvY2tfbXVubG9jayhmb2xpbywgdm1hLCBzdGFydCwgZW5kLCBzdGVwKSlcbiBcdFx0XHRnb3RvIG5leHRfZW50cnk7XG4gXG4tXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbitcdFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHRcdG1sb2NrX2ZvbGlvKGZvbGlvKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdG11bmxvY2tfZm9saW8oZm9saW8pO1xuQEAgLTQxNyw4ICs0MTcsOCBAQCBzdGF0aWMgaW50IG1sb2NrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gICogQGVuZCAtIGVuZCBvZiByYW5nZSBpbiBAdm1hXG4gICogQG5ld192bWFfZmxhZ3MgLSB0aGUgbmV3IHNldCBvZiBmbGFncyBmb3IgQHZtYS5cbiAgKlxuLSAqIENhbGxlZCBmb3IgbWxvY2soKSwgbWxvY2syKCkgYW5kIG1sb2NrYWxsKCksIHRvIHNldCBAdm1hIFZNX0xPQ0tFRDtcbi0gKiBjYWxsZWQgZm9yIG11bmxvY2soKSBhbmQgbXVubG9ja2FsbCgpLCB0byBjbGVhciBWTV9MT0NLRUQgZnJvbSBAdm1hLlxuKyAqIENhbGxlZCBmb3IgbWxvY2soKSwgbWxvY2syKCkgYW5kIG1sb2NrYWxsKCksIHRvIHNldCBAdm1hIFZNQV9MT0NLRURfQklUO1xuKyAqIGNhbGxlZCBmb3IgbXVubG9jaygpIGFuZCBtdW5sb2NrYWxsKCksIHRvIGNsZWFyIFZNQV9MT0NLRURfQklUIGZyb20gQHZtYS5cbiAgKi9cbiBzdGF0aWMgdm9pZCBtbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbkBAIC00MzEsMTQgKzQzMSwxNCBAQCBzdGF0aWMgdm9pZCBtbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXG4gXHQvKlxuIFx0ICogVGhlcmUgaXMgYSBzbGlnaHQgY2hhbmNlIHRoYXQgY29uY3VycmVudCBwYWdlIG1pZ3JhdGlvbixcbi1cdCAqIG9yIHBhZ2UgcmVjbGFpbSBmaW5kaW5nIGEgcGFnZSBvZiB0aGlzIG5vdy1WTV9MT0NLRUQgdm1hLFxuK1x0ICogb3IgcGFnZSByZWNsYWltIGZpbmRpbmcgYSBwYWdlIG9mIHRoaXMgbm93LVZNQV9MT0NLRURfQklUIHZtYSxcbiBcdCAqIHdpbGwgY2FsbCBtbG9ja192bWFfZm9saW8oKSBhbmQgcmFpc2UgcGFnZSdzIG1sb2NrX2NvdW50OlxuIFx0ICogZG91YmxlIGNvdW50aW5nLCBsZWF2aW5nIHRoZSBwYWdlIHVuZXZpY3RhYmxlIGluZGVmaW5pdGVseS5cbi1cdCAqIENvbW11bmljYXRlIHRoaXMgZGFuZ2VyIHRvIG1sb2NrX3ZtYV9mb2xpbygpIHdpdGggVk1fSU8sXG4tXHQgKiB3aGljaCBpcyBhIFZNX1NQRUNJQUwgZmxhZyBub3QgYWxsb3dlZCBvbiBWTV9MT0NLRUQgdm1hcy5cbitcdCAqIENvbW11bmljYXRlIHRoaXMgZGFuZ2VyIHRvIG1sb2NrX3ZtYV9mb2xpbygpIHdpdGggVk1BX0lPX0JJVCxcbitcdCAqIHdoaWNoIGlzIGEgVk1BX1NQRUNJQUxfRkxBR1MgZmxhZyBub3QgYWxsb3dlZCBvbiBWTUFfTE9DS0VEX0JJVCB2bWFzLlxuIFx0ICogbW1hcF9sb2NrIGlzIGhlbGQgaW4gd3JpdGUgbW9kZSBoZXJlLCBzbyB0aGlzIHdlaXJkXG4gXHQgKiBjb21iaW5hdGlvbiBzaG91bGQgbm90IGJlIHZpc2libGUgdG8gb3RoZXIgbW1hcF9sb2NrIHVzZXJzO1xuLVx0ICogYnV0IFdSSVRFX09OQ0Ugc28gcm1hcCB3YWxrZXJzIG11c3Qgc2VlIFZNX0lPIGlmIFZNX0xPQ0tFRC5cbitcdCAqIGJ1dCBXUklURV9PTkNFIHNvIHJtYXAgd2Fsa2VycyBtdXN0IHNlZSBWTUFfSU9fQklUIGlmIFZNQV9MT0NLRURfQklULlxuIFx0ICovXG4gXHRpZiAodm1hX2ZsYWdzX3Rlc3QobmV3X3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHR2bWFfZmxhZ3Nfc2V0KG5ld192bWFfZmxhZ3MsIFZNQV9JT19CSVQpO1xuQEAgLTQ1OCw3ICs0NTgsNyBAQCBzdGF0aWMgdm9pZCBtbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gLypcbiAgKiBtbG9ja19maXh1cCAgLSBoYW5kbGUgbWxvY2tbYWxsXS9tdW5sb2NrW2FsbF0gcmVxdWVzdHMuXG4gICpcbi0gKiBGaWx0ZXJzIG91dCBcInNwZWNpYWxcIiB2bWFzIC0tIFZNX0xPQ0tFRCBuZXZlciBnZXRzIHNldCBmb3IgdGhlc2UsIGFuZFxuKyAqIEZpbHRlcnMgb3V0IFwic3BlY2lhbFwiIHZtYXMgLS0gVk1BX0xPQ0tFRF9CSVQgbmV2ZXIgZ2V0cyBzZXQgZm9yIHRoZXNlLCBhbmRcbiAgKiBtdW5sb2NrIGlzIGEgbm8tb3AuICBIb3dldmVyLCBmb3Igc29tZSBzcGVjaWFsIHZtYXMsIHdlIGdvIGFoZWFkIGFuZFxuICAqIHBvcHVsYXRlIHRoZSBwdGVzLlxuICAqXG5AQCAtNDY2LDI0ICs0NjYsMjMgQEAgc3RhdGljIHZvaWQgbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuICAqL1xuIHN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdCAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKipwcmV2LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLVx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB2bV9mbGFnc190IG5ld2ZsYWdzKVxuK1x0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB2bWFfZmxhZ3NfdCAqbmV3X3ZtYV9mbGFncylcbiB7XG4tXHR2bWFfZmxhZ3NfdCBuZXdfdm1hX2ZsYWdzID0gbGVnYWN5X3RvX3ZtYV9mbGFncyhuZXdmbGFncyk7XG4gXHRjb25zdCB2bWFfZmxhZ3NfdCBvbGRfdm1hX2ZsYWdzID0gdm1hLVx1MDAzZWZsYWdzO1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4gXHRpbnQgbnJfcGFnZXM7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbi1cdGlmICh2bWFfZmxhZ3Nfc2FtZV9wYWlyKFx1MDAyNm9sZF92bWFfZmxhZ3MsIFx1MDAyNm5ld192bWFfZmxhZ3MpIHx8XG4rXHRpZiAodm1hX2ZsYWdzX3NhbWVfcGFpcihcdTAwMjZvbGRfdm1hX2ZsYWdzLCBuZXdfdm1hX2ZsYWdzKSB8fFxuIFx0ICAgIHZtYV9pc19zZWNyZXRtZW0odm1hKSB8fCAhdm1hX3N1cHBvcnRzX21sb2NrKHZtYSkpIHtcbiBcdFx0Lypcbi1cdFx0ICogRG9uJ3Qgc2V0IFZNX0xPQ0tFRCBvciBWTV9MT0NLT05GQVVMVCBhbmQgZG9uJ3QgY291bnQuXG4tXHRcdCAqIEZvciBzZWNyZXRtZW0sIGRvbid0IGFsbG93IHRoZSBtZW1vcnkgdG8gYmUgdW5sb2NrZWQuXG4rXHRcdCAqIERvbid0IHNldCBWTUFfTE9DS0VEX0JJVCBvciBWTUFfTE9DS09ORkFVTFRfQklUIGFuZCBkb24ndFxuK1x0XHQgKiBjb3VudC4gIEZvciBzZWNyZXRtZW0sIGRvbid0IGFsbG93IHRoZSBtZW1vcnkgdG8gYmUgdW5sb2NrZWQuXG4gXHRcdCAqL1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3Modm1pLCAqcHJldiwgdm1hLCBzdGFydCwgZW5kLCBcdTAwMjZuZXdfdm1hX2ZsYWdzKTtcbitcdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3Modm1pLCAqcHJldiwgdm1hLCBzdGFydCwgZW5kLCBuZXdfdm1hX2ZsYWdzKTtcbiBcdGlmIChJU19FUlIodm1hKSkge1xuIFx0XHRyZXQgPSBQVFJfRVJSKHZtYSk7XG4gXHRcdGdvdG8gb3V0O1xuQEAgLTQ5Myw3ICs0OTIsNyBAQCBzdGF0aWMgaW50IG1sb2NrX2ZpeHVwKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHQgKiBLZWVwIHRyYWNrIG9mIGFtb3VudCBvZiBsb2NrZWQgVk0uXG4gXHQgKi9cbiBcdG5yX3BhZ2VzID0gKGVuZCAtIHN0YXJ0KSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdGlmICghdm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bmV3X3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKVxuK1x0aWYgKCF2bWFfZmxhZ3NfdGVzdChuZXdfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdG5yX3BhZ2VzID0gLW5yX3BhZ2VzO1xuIFx0ZWxzZSBpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2b2xkX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHRucl9wYWdlcyA9IDA7XG5AQCAtNTAyLDE1ICs1MDEsMTUgQEAgc3RhdGljIGludCBtbG9ja19maXh1cChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0LypcbiBcdCAqIHZtX2ZsYWdzIGlzIHByb3RlY3RlZCBieSB0aGUgbW1hcF9sb2NrIGhlbGQgaW4gd3JpdGUgbW9kZS5cbiBcdCAqIEl0J3Mgb2theSBpZiB0cnlfdG9fdW5tYXBfb25lIHVubWFwcyBhIHBhZ2UganVzdCBhZnRlciB3ZVxuLVx0ICogc2V0IFZNX0xPQ0tFRCwgcG9wdWxhdGVfdm1hX3BhZ2VfcmFuZ2Ugd2lsbCBicmluZyBpdCBiYWNrLlxuK1x0ICogc2V0IFZNQV9MT0NLRURfQklULCBwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suXG4gXHQgKi9cbi1cdGlmICh2bWFfZmxhZ3NfdGVzdChcdTAwMjZuZXdfdm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkgXHUwMDI2XHUwMDI2XG4rXHRpZiAodm1hX2ZsYWdzX3Rlc3QobmV3X3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHZtYV9mbGFnc190ZXN0KFx1MDAyNm9sZF92bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSkge1xuIFx0XHQvKiBObyB3b3JrIHRvIGRvLCBhbmQgbWxvY2tpbmcgdHdpY2Ugd291bGQgYmUgd3JvbmcgKi9cbiBcdFx0dm1hX3N0YXJ0X3dyaXRlKHZtYSk7XG4tXHRcdHZtYS1cdTAwM2VmbGFncyA9IG5ld192bWFfZmxhZ3M7XG4rXHRcdHZtYS1cdTAwM2VmbGFncyA9ICpuZXdfdm1hX2ZsYWdzO1xuIFx0fSBlbHNlIHtcbi1cdFx0bWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCwgXHUwMDI2bmV3X3ZtYV9mbGFncyk7XG4rXHRcdG1sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIG5ld192bWFfZmxhZ3MpO1xuIFx0fVxuIG91dDpcbiBcdCpwcmV2ID0gdm1hO1xuQEAgLTUxOCw3ICs1MTcsNyBAQCBzdGF0aWMgaW50IG1sb2NrX2ZpeHVwKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gfVxuIFxuIHN0YXRpYyBpbnQgYXBwbHlfdm1hX2xvY2tfZmxhZ3ModW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbixcbi1cdFx0XHRcdHZtX2ZsYWdzX3QgZmxhZ3MpXG4rXHRcdFx0XHRjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuc3RhcnQsIGVuZCwgdG1wO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsICpwcmV2O1xuQEAgLTU0MywxOCArNTQyLDIwIEBAIHN0YXRpYyBpbnQgYXBwbHlfdm1hX2xvY2tfZmxhZ3ModW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbixcbiBcdHRtcCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbiBcdGZvcl9lYWNoX3ZtYV9yYW5nZSh2bWksIHZtYSwgZW5kKSB7XG4gXHRcdGludCBlcnJvcjtcbi1cdFx0dm1fZmxhZ3NfdCBuZXdmbGFncztcbitcdFx0dm1hX2ZsYWdzX3QgbmV3ZmxhZ3M7XG4gXG4gXHRcdGlmICh2bWEtXHUwMDNldm1fc3RhcnQgIT0gdG1wKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0XHRuZXdmbGFncyA9IHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgflZNX0xPQ0tFRF9NQVNLO1xuLVx0XHRuZXdmbGFncyB8PSBmbGFncztcbitcdFx0bmV3ZmxhZ3MgPSB2bWEtXHUwMDNlZmxhZ3M7XG4rXHRcdHZtYV9mbGFnc19jbGVhcl9tYXNrKFx1MDAyNm5ld2ZsYWdzLCBWTUFfTE9DS0VEX01BU0spO1xuK1x0XHR2bWFfZmxhZ3Nfc2V0X21hc2soXHUwMDI2bmV3ZmxhZ3MsICpmbGFncyk7XG4rXG4gXHRcdC8qIEhlcmUgd2Uga25vdyB0aGF0ICB2bWEtXHUwMDNldm1fc3RhcnQgXHUwMDNjPSBuc3RhcnQgXHUwMDNjIHZtYS1cdTAwM2V2bV9lbmQuICovXG4gXHRcdHRtcCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4gXHRcdGlmICh0bXAgXHUwMDNlIGVuZClcbiBcdFx0XHR0bXAgPSBlbmQ7XG4tXHRcdGVycm9yID0gbWxvY2tfZml4dXAoXHUwMDI2dm1pLCB2bWEsIFx1MDAyNnByZXYsIG5zdGFydCwgdG1wLCBuZXdmbGFncyk7XG4rXHRcdGVycm9yID0gbWxvY2tfZml4dXAoXHUwMDI2dm1pLCB2bWEsIFx1MDAyNnByZXYsIG5zdGFydCwgdG1wLCBcdTAwMjZuZXdmbGFncyk7XG4gXHRcdGlmIChlcnJvcilcbiBcdFx0XHRyZXR1cm4gZXJyb3I7XG4gXHRcdHRtcCA9IHZtYV9pdGVyX2VuZChcdTAwMjZ2bWkpO1xuQEAgLTU4OSw3ICs1OTAsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9tbV9tbG9ja2VkX3BhZ2VfbnIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdGVuZCA9IHN0YXJ0ICsgbGVuO1xuIFxuIFx0Zm9yX2VhY2hfdm1hX3JhbmdlKHZtaSwgdm1hLCBlbmQpIHtcbi1cdFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKSB7XG4rXHRcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSkge1xuIFx0XHRcdGlmIChzdGFydCBcdTAwM2Ugdm1hLVx1MDAzZXZtX3N0YXJ0KVxuIFx0XHRcdFx0Y291bnQgLT0gKHN0YXJ0IC0gdm1hLVx1MDAzZXZtX3N0YXJ0KTtcbiBcdFx0XHRpZiAoZW5kIFx1MDAzYyB2bWEtXHUwMDNldm1fZW5kKSB7XG5AQCAtNjE1LDcgKzYxNiw4IEBAIHN0YXRpYyBpbnQgX19tbG9ja19wb3NpeF9lcnJvcl9yZXR1cm4obG9uZyByZXR2YWwpXG4gXHRyZXR1cm4gcmV0dmFsO1xuIH1cbiBcbi1zdGF0aWMgX19tdXN0X2NoZWNrIGludCBkb19tbG9jayh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLCB2bV9mbGFnc190IGZsYWdzKVxuK3N0YXRpYyBfX211c3RfY2hlY2sgaW50IGRvX21sb2NrKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sXG4rXHRcdFx0XHQgdm1hX2ZsYWdzX3QgKmZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbG9ja2VkO1xuIFx0dW5zaWduZWQgbG9uZyBsb2NrX2xpbWl0O1xuQEAgLTY2NCwyNCArNjY2LDI3IEBAIHN0YXRpYyBfX211c3RfY2hlY2sgaW50IGRvX21sb2NrKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sIHZtX2ZsYWdzX3QgZmxhXG4gXG4gU1lTQ0FMTF9ERUZJTkUyKG1sb2NrLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW4pXG4ge1xuLVx0cmV0dXJuIGRvX21sb2NrKHN0YXJ0LCBsZW4sIFZNX0xPQ0tFRCk7XG4rXHR2bWFfZmxhZ3NfdCBmbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfTE9DS0VEX0JJVCk7XG4rXG4rXHRyZXR1cm4gZG9fbWxvY2soc3RhcnQsIGxlbiwgXHUwMDI2ZmxhZ3MpO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTMobWxvY2syLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW4sIGludCwgZmxhZ3MpXG4ge1xuLVx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IFZNX0xPQ0tFRDtcbitcdHZtYV9mbGFnc190IHZtYV9mbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfTE9DS0VEX0JJVCk7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IH5NTE9DS19PTkZBVUxUKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgTUxPQ0tfT05GQVVMVClcbi1cdFx0dm1fZmxhZ3MgfD0gVk1fTE9DS09ORkFVTFQ7XG4rXHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTE9DS09ORkFVTFRfQklUKTtcbiBcbi1cdHJldHVybiBkb19tbG9jayhzdGFydCwgbGVuLCB2bV9mbGFncyk7XG4rXHRyZXR1cm4gZG9fbWxvY2soc3RhcnQsIGxlbiwgXHUwMDI2dm1hX2ZsYWdzKTtcbiB9XG4gXG4gU1lTQ0FMTF9ERUZJTkUyKG11bmxvY2ssIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbilcbiB7XG4rXHR2bWFfZmxhZ3NfdCBmbGFncyA9IEVNUFRZX1ZNQV9GTEFHUztcbiBcdGludCByZXQ7XG4gXG4gXHRzdGFydCA9IHVudGFnZ2VkX2FkZHIoc3RhcnQpO1xuQEAgLTY5MSw3ICs2OTYsNyBAQCBTWVNDQUxMX0RFRklORTIobXVubG9jaywgdW5zaWduZWQgbG9uZywgc3RhcnQsIHNpemVfdCwgbGVuKVxuIFxuIFx0aWYgKG1tYXBfd3JpdGVfbG9ja19raWxsYWJsZShjdXJyZW50LVx1MDAzZW1tKSlcbiBcdFx0cmV0dXJuIC1FSU5UUjtcbi1cdHJldCA9IGFwcGx5X3ZtYV9sb2NrX2ZsYWdzKHN0YXJ0LCBsZW4sIDApO1xuK1x0cmV0ID0gYXBwbHlfdm1hX2xvY2tfZmxhZ3Moc3RhcnQsIGxlbiwgXHUwMDI2ZmxhZ3MpO1xuIFx0bW1hcF93cml0ZV91bmxvY2soY3VycmVudC1cdTAwM2VtbSk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTY5OSw0NiArNzA0LDQ4IEBAIFNZU0NBTExfREVGSU5FMihtdW5sb2NrLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW4pXG4gXG4gLypcbiAgKiBUYWtlIHRoZSBNQ0xfKiBmbGFncyBwYXNzZWQgaW50byBtbG9ja2FsbCAob3IgMCBpZiBjYWxsZWQgZnJvbSBtdW5sb2NrYWxsKVxuLSAqIGFuZCB0cmFuc2xhdGUgaW50byB0aGUgYXBwcm9wcmlhdGUgbW9kaWZpY2F0aW9ucyB0byBtbS1cdTAwM2VkZWZfZmxhZ3MgYW5kL29yIHRoZVxuLSAqIGZsYWdzIGZvciBhbGwgY3VycmVudCBWTUFzLlxuKyAqIGFuZCB0cmFuc2xhdGUgaW50byB0aGUgYXBwcm9wcmlhdGUgbW9kaWZpY2F0aW9ucyB0byBtbS1cdTAwM2VkZWZfdm1hX2ZsYWdzIGFuZC9vclxuKyAqIHRoZSBmbGFncyBmb3IgYWxsIGN1cnJlbnQgVk1Bcy5cbiAgKlxuICAqIFRoZXJlIGFyZSBhIGNvdXBsZSBvZiBzdWJ0bGV0aWVzIHdpdGggdGhpcy4gIElmIG1sb2NrYWxsKCkgaXMgY2FsbGVkIG11bHRpcGxlXG4gICogdGltZXMgd2l0aCBkaWZmZXJlbnQgZmxhZ3MsIHRoZSB2YWx1ZXMgZG8gbm90IG5lY2Vzc2FyaWx5IHN0YWNrLiAgSWYgbWxvY2thbGxcbiAgKiBpcyBjYWxsZWQgb25jZSBpbmNsdWRpbmcgdGhlIE1DTF9GVVRVUkUgZmxhZyBhbmQgdGhlbiBhIHNlY29uZCB0aW1lIHdpdGhvdXRcbi0gKiBpdCwgVk1fTE9DS0VEIGFuZCBWTV9MT0NLT05GQVVMVCB3aWxsIGJlIGNsZWFyZWQgZnJvbSBtbS1cdTAwM2VkZWZfZmxhZ3MuXG4rICogaXQsIFZNQV9MT0NLRURfQklUIGFuZCBWTUFfTE9DS09ORkFVTFRfQklUIHdpbGwgYmUgY2xlYXJlZCBmcm9tXG4rICogbW0tXHUwMDNlZGVmX3ZtYV9mbGFncy5cbiAgKi9cbiBzdGF0aWMgaW50IGFwcGx5X21sb2NrYWxsX2ZsYWdzKGludCBmbGFncylcbiB7XG4gXHRWTUFfSVRFUkFUT1Iodm1pLCBjdXJyZW50LVx1MDAzZW1tLCAwKTtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCAqcHJldiA9IE5VTEw7XG4tXHR2bV9mbGFnc190IHRvX2FkZCA9IDA7XG4rXHR2bWFfZmxhZ3NfdCB0b19hZGQgPSBFTVBUWV9WTUFfRkxBR1M7XG4gXG4tXHRjdXJyZW50LVx1MDAzZW1tLVx1MDAzZWRlZl9mbGFncyBcdTAwMjY9IH5WTV9MT0NLRURfTUFTSztcbitcdHZtYV9mbGFnc19jbGVhcl9tYXNrKFx1MDAyNm1tLVx1MDAzZWRlZl92bWFfZmxhZ3MsIFZNQV9MT0NLRURfTUFTSyk7XG4gXHRpZiAoZmxhZ3MgXHUwMDI2IE1DTF9GVVRVUkUpIHtcbi1cdFx0Y3VycmVudC1cdTAwM2VtbS1cdTAwM2VkZWZfZmxhZ3MgfD0gVk1fTE9DS0VEO1xuK1x0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNm1tLVx1MDAzZWRlZl92bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTtcbiBcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBNQ0xfT05GQVVMVClcbi1cdFx0XHRjdXJyZW50LVx1MDAzZW1tLVx1MDAzZWRlZl9mbGFncyB8PSBWTV9MT0NLT05GQVVMVDtcbitcdFx0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNm1tLVx1MDAzZWRlZl92bWFfZmxhZ3MsIFZNQV9MT0NLT05GQVVMVF9CSVQpO1xuIFxuIFx0XHRpZiAoIShmbGFncyBcdTAwMjYgTUNMX0NVUlJFTlQpKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBNQ0xfQ1VSUkVOVCkge1xuLVx0XHR0b19hZGQgfD0gVk1fTE9DS0VEO1xuK1x0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnRvX2FkZCwgVk1BX0xPQ0tFRF9CSVQpO1xuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1DTF9PTkZBVUxUKVxuLVx0XHRcdHRvX2FkZCB8PSBWTV9MT0NLT05GQVVMVDtcbitcdFx0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnRvX2FkZCwgVk1BX0xPQ0tPTkZBVUxUX0JJVCk7XG4gXHR9XG4gXG4gXHRmb3JfZWFjaF92bWEodm1pLCB2bWEpIHtcbiBcdFx0aW50IGVycm9yO1xuLVx0XHR2bV9mbGFnc190IG5ld2ZsYWdzO1xuK1x0XHR2bWFfZmxhZ3NfdCBuZXdmbGFncyA9IHZtYS1cdTAwM2VmbGFncztcbiBcbi1cdFx0bmV3ZmxhZ3MgPSB2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IH5WTV9MT0NLRURfTUFTSztcbi1cdFx0bmV3ZmxhZ3MgfD0gdG9fYWRkO1xuK1x0XHR2bWFfZmxhZ3NfY2xlYXJfbWFzayhcdTAwMjZuZXdmbGFncywgVk1BX0xPQ0tFRF9NQVNLKTtcbitcdFx0dm1hX2ZsYWdzX3NldF9tYXNrKFx1MDAyNm5ld2ZsYWdzLCB0b19hZGQpO1xuIFxuIFx0XHRlcnJvciA9IG1sb2NrX2ZpeHVwKFx1MDAyNnZtaSwgdm1hLCBcdTAwMjZwcmV2LCB2bWEtXHUwMDNldm1fc3RhcnQsIHZtYS1cdTAwM2V2bV9lbmQsXG4tXHRcdFx0XHQgICAgbmV3ZmxhZ3MpO1xuK1x0XHRcdFx0ICAgIFx1MDAyNm5ld2ZsYWdzKTtcbiBcdFx0LyogSWdub3JlIGVycm9ycywgYnV0IHByZXYgbmVlZHMgZml4aW5nIHVwLiAqL1xuIFx0XHRpZiAoZXJyb3IpXG4gXHRcdFx0cHJldiA9IHZtYTtcbmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmNcbmluZGV4IDMwOGE0M2VhYmQ4M2IxLi40YmYyNmIwZjFlNmUzNiAxMDA2NDRcbi0tLSBhL21tL21tYXAuY1xuKysrIGIvbW0vbW1hcC5jXG5AQCAtODAsMTMgKzgwLDEzIEBAIGNvcmVfcGFyYW0oaWdub3JlX3JsaW1pdF9kYXRhLCBpZ25vcmVfcmxpbWl0X2RhdGEsIGJvb2wsIDA2NDQpO1xuIC8qIFVwZGF0ZSB2bWEtXHUwMDNldm1fcGFnZV9wcm90IHRvIHJlZmxlY3Qgdm1hLVx1MDAzZXZtX2ZsYWdzLiAqL1xuIHZvaWQgdm1hX3NldF9wYWdlX3Byb3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuLVx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYS1cdTAwM2V2bV9mbGFncztcbitcdHZtYV9mbGFnc190IHZtYV9mbGFncyA9IHZtYS1cdTAwM2VmbGFncztcbiBcdHBncHJvdF90IHZtX3BhZ2VfcHJvdDtcbiBcbi1cdHZtX3BhZ2VfcHJvdCA9IHZtX3BncHJvdF9tb2RpZnkodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCwgdm1fZmxhZ3MpO1xuK1x0dm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCwgdm1hX2ZsYWdzKTtcbiBcdGlmICh2bWFfd2FudHNfd3JpdGVub3RpZnkodm1hLCB2bV9wYWdlX3Byb3QpKSB7XG4tXHRcdHZtX2ZsYWdzIFx1MDAyNj0gflZNX1NIQVJFRDtcbi1cdFx0dm1fcGFnZV9wcm90ID0gdm1fcGdwcm90X21vZGlmeSh2bV9wYWdlX3Byb3QsIHZtX2ZsYWdzKTtcbitcdFx0dm1hX2ZsYWdzX2NsZWFyKFx1MDAyNnZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpO1xuK1x0XHR2bV9wYWdlX3Byb3QgPSB2bWFfcGdwcm90X21vZGlmeSh2bV9wYWdlX3Byb3QsIHZtYV9mbGFncyk7XG4gXHR9XG4gXHQvKiByZW1vdmVfcHJvdGVjdGlvbl9wdGVzIHJlYWRzIHZtYS1cdTAwM2V2bV9wYWdlX3Byb3Qgd2l0aG91dCBtbWFwX2xvY2sgKi9cbiBcdFdSSVRFX09OQ0Uodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCwgdm1fcGFnZV9wcm90KTtcbkBAIC0xMDIsMTUgKzEwMiwxNiBAQCB2b2lkIHZtYV9zZXRfcGFnZV9wcm90KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuICAqL1xuIHN0YXRpYyBpbnQgY2hlY2tfYnJrX2xpbWl0cyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKVxuIHtcbitcdGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbitcdGNvbnN0IGJvb2wgaXNfZGVmX2xvY2tlZCA9XG4rXHRcdHZtYV9mbGFnc190ZXN0KFx1MDAyNm1tLVx1MDAzZWRlZl92bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTtcbiBcdHVuc2lnbmVkIGxvbmcgbWFwcGVkX2FkZHI7XG4gXG4gXHRtYXBwZWRfYWRkciA9IGdldF91bm1hcHBlZF9hcmVhKE5VTEwsIGFkZHIsIGxlbiwgMCwgTUFQX0ZJWEVEKTtcbiBcdGlmIChJU19FUlJfVkFMVUUobWFwcGVkX2FkZHIpKVxuIFx0XHRyZXR1cm4gbWFwcGVkX2FkZHI7XG4gXG4tXHRyZXR1cm4gbWxvY2tfZnV0dXJlX29rKGN1cnJlbnQtXHUwMDNlbW0sXG4tXHRcdFx0ICAgICAgY3VycmVudC1cdTAwM2VtbS1cdTAwM2VkZWZfZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRCwgbGVuKVxuLVx0XHQ/IDAgOiAtRUFHQUlOO1xuK1x0cmV0dXJuIG1sb2NrX2Z1dHVyZV9vayhtbSwgaXNfZGVmX2xvY2tlZCwgbGVuKSA/IDAgOiAtRUFHQUlOO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTEoYnJrLCB1bnNpZ25lZCBsb25nLCBicmspXG5AQCAtMTk3LDcgKzE5OCw3IEBAIFNZU0NBTExfREVGSU5FMShicmssIHVuc2lnbmVkIGxvbmcsIGJyaylcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRtbS1cdTAwM2VicmsgPSBicms7XG4tXHRpZiAobW0tXHUwMDNlZGVmX2ZsYWdzIFx1MDAyNiBWTV9MT0NLRUQpXG4rXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bW0tXHUwMDNlZGVmX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHRwb3B1bGF0ZSA9IHRydWU7XG4gXG4gc3VjY2VzczpcbkBAIC0yODAsNyArMjgxLDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbGVfbW1hcF9vayhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgKiBkb19tbWFwKCkgLSBQZXJmb3JtIGEgdXNlcmxhbmQgbWVtb3J5IG1hcHBpbmcgaW50byB0aGUgY3VycmVudCBwcm9jZXNzXG4gICogYWRkcmVzcyBzcGFjZSBvZiBsZW5ndGggQGxlbiB3aXRoIHByb3RlY3Rpb24gYml0cyBAcHJvdCwgbW1hcCBmbGFncyBAZmxhZ3NcbiAgKiAoZnJvbSB3aGljaCBWTUEgZmxhZ3Mgd2lsbCBiZSBpbmZlcnJlZCksIGFuZCBhbnkgYWRkaXRpb25hbCBWTUEgZmxhZ3MgdG9cbi0gKiBhcHBseSBAdm1fZmxhZ3MuIElmIHRoaXMgaXMgYSBmaWxlLWJhY2tlZCBtYXBwaW5nIHRoZW4gdGhlIGZpbGUgaXMgc3BlY2lmaWVkXG4rICogYXBwbHkgQHZtYV9mbGFncy4gSWYgdGhpcyBpcyBhIGZpbGUtYmFja2VkIG1hcHBpbmcgdGhlbiB0aGUgZmlsZSBpcyBzcGVjaWZpZWRcbiAgKiBpbiBAZmlsZSBhbmQgcGFnZSBvZmZzZXQgaW50byB0aGUgZmlsZSB2aWEgQHBnb2ZmLlxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwZXJmb3JtIHNlY3VyaXR5IGNoZWNrcyBvbiB0aGUgZmlsZSBhbmQgYXNzdW1lcywgaWZcbkBAIC0zMjAsNyArMzIxLDggQEAgc3RhdGljIGlubGluZSBib29sIGZpbGVfbW1hcF9vayhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgKiAoMikgZm9yIGRldGFpbHMuXG4gICogQGZsYWdzOiBGbGFncyBzcGVjaWZ5aW5nIGhvdyB0aGUgbWFwcGluZyBzaG91bGQgYmUgcGVyZm9ybWVkLCBzZWUgbW1hcCAoMilcbiAgKiBmb3IgZGV0YWlscy5cbi0gKiBAdm1fZmxhZ3M6IFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgc2V0IGJ5IGRlZmF1bHQsIG9yIDAgb3RoZXJ3aXNlLlxuKyAqIEB2bWFfZmxhZ3M6IFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgc2V0IGJ5IGRlZmF1bHQsIG9yIEVNUFRZX1ZNQV9GTEFHU1xuKyAqIG90aGVyd2lzZS5cbiAgKiBAcGdvZmY6IFBhZ2Ugb2Zmc2V0IGludG8gdGhlIEBmaWxlIGlmIGZpbGUtYmFja2VkLCBzaG91bGQgYmUgMCBvdGhlcndpc2UuXG4gICogQHBvcHVsYXRlOiBBIHBvaW50ZXIgdG8gYSB2YWx1ZSB3aGljaCB3aWxsIGJlIHNldCB0byAwIGlmIG5vIHBvcHVsYXRpb24gb2ZcbiAgKiB0aGUgcmFuZ2UgaXMgcmVxdWlyZWQsIG9yIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcG9wdWxhdGUgaWYgaXQgaXMuIE11c3QgYmVcbkBAIC0zMzUsNyArMzM3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbGVfbW1hcF9vayhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgKi9cbiB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwcm90LFxuLVx0XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzLFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgKnBvcHVsYXRlLFxuIFx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnVmKVxuIHtcbkBAIC0zOTksMTMgKzQwMSwxOCBAQCB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdCAqIHRvLiB3ZSBhc3N1bWUgYWNjZXNzIHBlcm1pc3Npb25zIGhhdmUgYmVlbiBoYW5kbGVkIGJ5IHRoZSBvcGVuXG4gXHQgKiBvZiB0aGUgbWVtb3J5IG9iamVjdCwgc28gd2UgZG9uJ3QgZG8gYW55IGhlcmUuXG4gXHQgKi9cbi1cdHZtX2ZsYWdzIHw9IGNhbGNfdm1fcHJvdF9iaXRzKHByb3QsIHBrZXkpIHwgY2FsY192bV9mbGFnX2JpdHMoZmlsZSwgZmxhZ3MpIHxcbi1cdFx0XHRtbS1cdTAwM2VkZWZfZmxhZ3MgfCBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDO1xuK1x0dm1hX2ZsYWdzX3NldF9tYXNrKFx1MDAyNnZtYV9mbGFncyxcbitcdFx0XHQgICBsZWdhY3lfdG9fdm1hX2ZsYWdzKGNhbGNfdm1fcHJvdF9iaXRzKHByb3QsIHBrZXkpKSk7XG4rXHR2bWFfZmxhZ3Nfc2V0X21hc2soXHUwMDI2dm1hX2ZsYWdzLFxuK1x0XHRcdCAgIGxlZ2FjeV90b192bWFfZmxhZ3MoY2FsY192bV9mbGFnX2JpdHMoZmlsZSwgZmxhZ3MpKSk7XG4rXHR2bWFfZmxhZ3Nfc2V0X21hc2soXHUwMDI2dm1hX2ZsYWdzLCBtbS1cdTAwM2VkZWZfdm1hX2ZsYWdzKTtcbitcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQsXG4rXHRcdCAgICAgIFZNQV9NQVlFWEVDX0JJVCk7XG4gXG4gXHQvKiBPYnRhaW4gdGhlIGFkZHJlc3MgdG8gbWFwIHRvLiB3ZSB2ZXJpZnkgKG9yIHNlbGVjdCkgaXQgYW5kIGVuc3VyZVxuIFx0ICogdGhhdCBpdCByZXByZXNlbnRzIGEgdmFsaWQgc2VjdGlvbiBvZiB0aGUgYWRkcmVzcyBzcGFjZS5cbiBcdCAqL1xuLVx0YWRkciA9IF9fZ2V0X3VubWFwcGVkX2FyZWEoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcbitcdGFkZHIgPSBfX2dldF91bm1hcHBlZF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzLCB2bWFfZmxhZ3MpO1xuIFx0aWYgKElTX0VSUl9WQUxVRShhZGRyKSlcbiBcdFx0cmV0dXJuIGFkZHI7XG4gXG5AQCAtNDE4LDcgKzQyNSw3IEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRpZiAoIWNhbl9kb19tbG9jaygpKVxuIFx0XHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHRpZiAoIW1sb2NrX2Z1dHVyZV9vayhtbSwgdm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRCwgbGVuKSlcbitcdGlmICghbWxvY2tfZnV0dXJlX29rKG1tLCB2bWFfZmxhZ3NfdGVzdChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSwgbGVuKSlcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG4gXG4gXHRpZiAoZmlsZSkge1xuQEAgLTQ2MSwyMiArNDY4LDIzIEBAIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdGlmIChJU19BUFBFTkQoaW5vZGUpIFx1MDAyNlx1MDAyNiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1dSSVRFKSlcbiBcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIFxuLVx0XHRcdHZtX2ZsYWdzIHw9IFZNX1NIQVJFRCB8IFZNX01BWVNIQVJFO1xuK1x0XHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfU0hBUkVEX0JJVCwgVk1BX01BWVNIQVJFX0JJVCk7XG4gXHRcdFx0aWYgKCEoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1dSSVRFKSlcbi1cdFx0XHRcdHZtX2ZsYWdzIFx1MDAyNj0gfihWTV9NQVlXUklURSB8IFZNX1NIQVJFRCk7XG4rXHRcdFx0XHR2bWFfZmxhZ3NfY2xlYXIoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTUFZV1JJVEVfQklULFxuK1x0XHRcdFx0XHRcdFZNQV9TSEFSRURfQklUKTtcbiBcdFx0XHRmYWxsdGhyb3VnaDtcbiBcdFx0Y2FzZSBNQVBfUFJJVkFURTpcbiBcdFx0XHRpZiAoIShmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfUkVBRCkpXG4gXHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0XHRpZiAocGF0aF9ub2V4ZWMoXHUwMDI2ZmlsZS1cdTAwM2VmX3BhdGgpKSB7XG4tXHRcdFx0XHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX0VYRUMpXG4rXHRcdFx0XHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfRVhFQ19CSVQpKVxuIFx0XHRcdFx0XHRyZXR1cm4gLUVQRVJNO1xuLVx0XHRcdFx0dm1fZmxhZ3MgXHUwMDI2PSB+Vk1fTUFZRVhFQztcbitcdFx0XHRcdHZtYV9mbGFnc19jbGVhcihcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9NQVlFWEVDX0JJVCk7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdGlmICghY2FuX21tYXBfZmlsZShmaWxlKSlcbiBcdFx0XHRcdHJldHVybiAtRU5PREVWO1xuLVx0XHRcdGlmICh2bV9mbGFncyBcdTAwMjYgKFZNX0dST1dTRE9XTnxWTV9HUk9XU1VQKSlcbitcdFx0XHRpZiAodm1hX2ZsYWdzX2Nhbl9ncm93KFx1MDAyNnZtYV9mbGFncykpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHRicmVhaztcbiBcbkBAIC00ODgsMjMgKzQ5NiwyNyBAQCB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0ICogQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSB2aW9sYXRpbmcgYW55IHNlYWxzIGFuZCB1cGRhdGUgVk1BXG4gXHRcdCAqIGZsYWdzIGlmIG5lY2Vzc2FyeSB0byBhdm9pZCBmdXR1cmUgc2VhbCB2aW9sYXRpb25zLlxuIFx0XHQgKi9cbi1cdFx0ZXJyID0gbWVtZmRfY2hlY2tfc2VhbHNfbW1hcChmaWxlLCBcdTAwMjZ2bV9mbGFncyk7XG4rXHRcdGVyciA9IG1lbWZkX2NoZWNrX3NlYWxzX21tYXAoZmlsZSwgXHUwMDI2dm1hX2ZsYWdzKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZXJyO1xuIFx0fSBlbHNlIHtcbiBcdFx0c3dpdGNoIChmbGFncyBcdTAwMjYgTUFQX1RZUEUpIHtcbiBcdFx0Y2FzZSBNQVBfU0hBUkVEOlxuLVx0XHRcdGlmICh2bV9mbGFncyBcdTAwMjYgKFZNX0dST1dTRE9XTnxWTV9HUk9XU1VQKSlcbitcdFx0XHRpZiAodm1hX2ZsYWdzX2Nhbl9ncm93KFx1MDAyNnZtYV9mbGFncykpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIElnbm9yZSBwZ29mZi5cbiBcdFx0XHQgKi9cbiBcdFx0XHRwZ29mZiA9IDA7XG4tXHRcdFx0dm1fZmxhZ3MgfD0gVk1fU0hBUkVEIHwgVk1fTUFZU0hBUkU7XG4rXHRcdFx0dm1hX2ZsYWdzX3NldChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklULCBWTUFfTUFZU0hBUkVfQklUKTtcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBNQVBfRFJPUFBBQkxFOlxuLVx0XHRcdGlmIChWTV9EUk9QUEFCTEUgPT0gVk1fTk9ORSlcbitcdFx0Y2FzZSBNQVBfRFJPUFBBQkxFOiB7XG4rXHRcdFx0dm1hX2ZsYWdzX3QgZHJvcHBhYmxlID0gVk1BX0RST1BQQUJMRTtcbitcbitcdFx0XHRpZiAodm1hX2ZsYWdzX2VtcHR5KFx1MDAyNmRyb3BwYWJsZSkpXG4gXHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdFx0dm1hX2ZsYWdzX3NldF9tYXNrKFx1MDAyNnZtYV9mbGFncywgZHJvcHBhYmxlKTtcbitcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIEEgbG9ja2VkIG9yIHN0YWNrIGFyZWEgbWFrZXMgbm8gc2Vuc2UgdG8gYmUgZHJvcHBhYmxlLlxuIFx0XHRcdCAqXG5AQCAtNTE1LDIzICs1MjcsMjQgQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGZsYWdzIFx1MDAyNiAoTUFQX0xPQ0tFRCB8IE1BUF9IVUdFVExCKSlcbiBcdFx0XHQgICAgICAgIHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdGlmICh2bV9mbGFncyBcdTAwMjYgKFZNX0dST1dTRE9XTiB8IFZNX0dST1dTVVApKVxuK1x0XHRcdGlmICh2bWFfZmxhZ3NfY2FuX2dyb3coXHUwMDI2dm1hX2ZsYWdzKSlcbiBcdFx0XHQgICAgICAgIHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRcdHZtX2ZsYWdzIHw9IFZNX0RST1BQQUJMRTtcbi1cbiBcdFx0XHQvKlxuIFx0XHRcdCAqIElmIHRoZSBwYWdlcyBjYW4gYmUgZHJvcHBlZCwgdGhlbiBpdCBkb2Vzbid0IG1ha2VcbiBcdFx0XHQgKiBzZW5zZSB0byByZXNlcnZlIHRoZW0uXG4gXHRcdFx0ICovXG4tXHRcdFx0dm1fZmxhZ3MgfD0gVk1fTk9SRVNFUlZFO1xuK1x0XHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTk9SRVNFUlZFX0JJVCk7XG4gXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBMaWtld2lzZSwgdGhleSdyZSB2b2xhdGlsZSBlbm91Z2ggdGhhdCB0aGV5XG4gXHRcdFx0ICogc2hvdWxkbid0IHN1cnZpdmUgZm9ya3Mgb3IgY29yZWR1bXBzLlxuIFx0XHRcdCAqL1xuLVx0XHRcdHZtX2ZsYWdzIHw9IFZNX1dJUEVPTkZPUksgfCBWTV9ET05URFVNUDtcbitcdFx0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnZtYV9mbGFncywgVk1BX1dJUEVPTkZPUktfQklULFxuK1x0XHRcdFx0ICAgICAgVk1BX0RPTlREVU1QX0JJVCk7XG4rXG4gXHRcdFx0ZmFsbHRocm91Z2g7XG4rXHRcdH1cbiBcdFx0Y2FzZSBNQVBfUFJJVkFURTpcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIFNldCBwZ29mZiBhY2NvcmRpbmcgdG8gYWRkciBmb3IgYW5vbl92bWEuXG5AQCAtNTQ0LDIyICs1NTcsMjIgQEAgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogU2V0ICdWTV9OT1JFU0VSVkUnIGlmIHdlIHNob3VsZCBub3QgYWNjb3VudCBmb3IgdGhlXG4tXHQgKiBtZW1vcnkgdXNlIG9mIHRoaXMgbWFwcGluZy5cbitcdCAqIFNldCBWTUFfTk9SRVNFUlZFX0JJVCBpZiB3ZSBzaG91bGQgbm90IGFjY291bnQgZm9yIHRoZSBtZW1vcnkgdXNlXG4rXHQgKiBvZiB0aGlzIG1hcHBpbmcuXG4gXHQgKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgTUFQX05PUkVTRVJWRSkge1xuIFx0XHQvKiBXZSBob25vciBNQVBfTk9SRVNFUlZFIGlmIGFsbG93ZWQgdG8gb3ZlcmNvbW1pdCAqL1xuIFx0XHRpZiAoc3lzY3RsX292ZXJjb21taXRfbWVtb3J5ICE9IE9WRVJDT01NSVRfTkVWRVIpXG4tXHRcdFx0dm1fZmxhZ3MgfD0gVk1fTk9SRVNFUlZFO1xuK1x0XHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTk9SRVNFUlZFX0JJVCk7XG4gXG4gXHRcdC8qIGh1Z2V0bGIgYXBwbGllcyBzdHJpY3Qgb3ZlcmNvbW1pdCB1bmxlc3MgTUFQX05PUkVTRVJWRSAqL1xuIFx0XHRpZiAoZmlsZSBcdTAwMjZcdTAwMjYgaXNfZmlsZV9odWdlcGFnZXMoZmlsZSkpXG4tXHRcdFx0dm1fZmxhZ3MgfD0gVk1fTk9SRVNFUlZFO1xuK1x0XHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTk9SRVNFUlZFX0JJVCk7XG4gXHR9XG4gXG4tXHRhZGRyID0gbW1hcF9yZWdpb24oZmlsZSwgYWRkciwgbGVuLCB2bV9mbGFncywgcGdvZmYsIHVmKTtcbitcdGFkZHIgPSBtbWFwX3JlZ2lvbihmaWxlLCBhZGRyLCBsZW4sIHZtYV9mbGFncywgcGdvZmYsIHVmKTtcbiBcdGlmICghSVNfRVJSX1ZBTFVFKGFkZHIpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICgodm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRCkgfHxcbitcdCAgICAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkgfHxcbiBcdCAgICAgKGZsYWdzIFx1MDAyNiAoTUFQX1BPUFVMQVRFIHwgTUFQX05PTkJMT0NLKSkgPT0gTUFQX1BPUFVMQVRFKSlcbiBcdFx0KnBvcHVsYXRlID0gbGVuO1xuIFx0cmV0dXJuIGFkZHI7XG5AQCAtNjQ1LDkgKzY1OCw5IEBAIFNZU0NBTExfREVGSU5FMShvbGRfbW1hcCwgc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBfX3VzZXIgKiwgYXJnKVxuICAqIERldGVybWluZSBpZiB0aGUgYWxsb2NhdGlvbiBuZWVkcyB0byBlbnN1cmUgdGhhdCB0aGVyZSBpcyBub1xuICAqIGV4aXN0aW5nIG1hcHBpbmcgd2l0aGluIGl0J3MgZ3VhcmQgZ2FwcywgZm9yIHVzZSBhcyBzdGFydF9nYXAuXG4gICovXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bV9mbGFnc190IHZtX2ZsYWdzKVxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbi1cdGlmICh2bV9mbGFncyBcdTAwMjYgVk1fU0hBRE9XX1NUQUNLKVxuK1x0aWYgKHZtYV9mbGFnc190ZXN0X3NpbmdsZV9tYXNrKFx1MDAyNnZtYV9mbGFncywgVk1BX1NIQURPV19TVEFDSykpXG4gXHRcdHJldHVybiBQQUdFX1NJWkU7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC02ODksNyArNzAyLDcgQEAgdW5zaWduZWQgbG9uZyB2bV91bm1hcHBlZF9hcmVhKHN0cnVjdCB2bV91bm1hcHBlZF9hcmVhX2luZm8gKmluZm8pXG4gdW5zaWduZWQgbG9uZ1xuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcbitcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXHUwMDNlbW07XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgKnByZXY7XG5AQCAtNzE0LDcgKzcyNyw3IEBAIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGluZm8ubGVuZ3RoID0gbGVuO1xuIFx0aW5mby5sb3dfbGltaXQgPSBtbS1cdTAwM2VtbWFwX2Jhc2U7XG4gXHRpbmZvLmhpZ2hfbGltaXQgPSBtbWFwX2VuZDtcbi1cdGluZm8uc3RhcnRfZ2FwID0gc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtX2ZsYWdzKTtcbitcdGluZm8uc3RhcnRfZ2FwID0gc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtYV9mbGFncyk7XG4gXHRpZiAoZmlscCBcdTAwMjZcdTAwMjYgaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXG4gXHRcdGluZm8uYWxpZ25fbWFzayA9IGh1Z2VfcGFnZV9tYXNrX2FsaWduKGZpbHApO1xuIFx0cmV0dXJuIHZtX3VubWFwcGVkX2FyZWEoXHUwMDI2aW5mbyk7XG5AQCAtNzI3LDcgKzc0MCw3IEBAIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4ge1xuIFx0cmV0dXJuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4tXHRcdFx0XHRcdCB2bV9mbGFncyk7XG4rXHRcdFx0XHRcdCBsZWdhY3lfdG9fdm1hX2ZsYWdzKHZtX2ZsYWdzKSk7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTczOCw3ICs3NTEsNyBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gdW5zaWduZWQgbG9uZ1xuIGdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbi1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcbitcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCAqcHJldjtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbkBAIC03NjYsNyArNzc5LDcgQEAgZ2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpbmZvLmxlbmd0aCA9IGxlbjtcbiBcdGluZm8ubG93X2xpbWl0ID0gUEFHRV9TSVpFO1xuIFx0aW5mby5oaWdoX2xpbWl0ID0gYXJjaF9nZXRfbW1hcF9iYXNlKGFkZHIsIG1tLVx1MDAzZW1tYXBfYmFzZSk7XG4tXHRpbmZvLnN0YXJ0X2dhcCA9IHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bV9mbGFncyk7XG4rXHRpbmZvLnN0YXJ0X2dhcCA9IHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bWFfZmxhZ3MpO1xuIFx0aWYgKGZpbHAgXHUwMDI2XHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxuIFx0XHRpbmZvLmFsaWduX21hc2sgPSBodWdlX3BhZ2VfbWFza19hbGlnbihmaWxwKTtcbiBcdGFkZHIgPSB2bV91bm1hcHBlZF9hcmVhKFx1MDAyNmluZm8pO1xuQEAgLTc5NSwyMyArODA4LDI0IEBAIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxuIHtcbiBcdHJldHVybiBnZW5lcmljX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4tXHRcdFx0XHRcdFx0IHZtX2ZsYWdzKTtcbitcdFx0XHRcdFx0XHQgbGVnYWN5X3RvX3ZtYV9mbGFncyh2bV9mbGFncykpO1xuIH1cbiAjZW5kaWZcbiBcbi11bnNpZ25lZCBsb25nIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXG4tXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4rdW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyxcbitcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbiBcdGlmIChtbV9mbGFnc190ZXN0KE1NRl9UT1BET1dOLCBjdXJyZW50LVx1MDAzZW1tKSlcbiBcdFx0cmV0dXJuIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLFxuLVx0XHRcdFx0XHRcdCAgICAgIGZsYWdzLCB2bV9mbGFncyk7XG4tXHRyZXR1cm4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywgdm1fZmxhZ3MpO1xuK1x0XHRcdFx0ZmxhZ3MsIHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSk7XG4rXHRyZXR1cm4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyxcbitcdFx0XHR2bWFfZmxhZ3NfdG9fbGVnYWN5KHZtYV9mbGFncykpO1xuIH1cbiBcbiB1bnNpZ25lZCBsb25nXG4gX19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcbi1cdFx0dW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcbitcdFx0dW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgKCpnZXRfYXJlYSkoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgbG9uZyxcbiBcdFx0XHRcdCAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZylcbkBAIC04NDYsMTEgKzg2MCwxMSBAQCBfX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxuIFx0XHQgICBcdTAwMjZcdTAwMjYgIWFkZHIgLyogbm8gaGludCAqL1xuIFx0XHQgICBcdTAwMjZcdTAwMjYgSVNfQUxJR05FRChsZW4sIFBNRF9TSVpFKSkge1xuIFx0XHQvKiBFbnN1cmVzIHRoYXQgbGFyZ2VyIGFub255bW91cyBtYXBwaW5ncyBhcmUgVEhQIGFsaWduZWQuICovXG4tXHRcdGFkZHIgPSB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxlLCBhZGRyLCBsZW4sXG4tXHRcdFx0XHRcdFx0ICAgICBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcbitcdFx0YWRkciA9IHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhmaWxlLCBhZGRyLCBsZW4sXG4rXHRcdFx0XHRcdFx0ICAgICAgcGdvZmYsIGZsYWdzLCB2bWFfZmxhZ3MpO1xuIFx0fSBlbHNlIHtcbi1cdFx0YWRkciA9IG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkciwgbGVuLFxuLVx0XHRcdFx0XHRcdCAgICBwZ29mZiwgZmxhZ3MsIHZtX2ZsYWdzKTtcbitcdFx0YWRkciA9IG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKGZpbGUsIGFkZHIsIGxlbixcbitcdFx0XHRcdFx0XHQgICAgIHBnb2ZmLCBmbGFncywgdm1hX2ZsYWdzKTtcbiBcdH1cbiBcdGlmIChJU19FUlJfVkFMVUUoYWRkcikpXG4gXHRcdHJldHVybiBhZGRyO1xuQEAgLTg2OCw3ICs4ODIsOCBAQCB1bnNpZ25lZCBsb25nXG4gbW1fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXG4gXHRcdCAgICAgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncylcbiB7XG4tXHRyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxlLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XG4rXHRyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3MoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgICAgRU1QVFlfVk1BX0ZMQUdTKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChtbV9nZXRfdW5tYXBwZWRfYXJlYSk7XG4gXG5AQCAtOTcwLDcgKzk4NSw3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9leHRlbmRfdm1hX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0aWYgKGV4cGFuZF9zdGFja19sb2NrZWQocHJldiwgYWRkcikpXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHByZXYtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbitcdGlmICh2bWFfdGVzdChwcmV2LCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdHBvcHVsYXRlX3ZtYV9wYWdlX3JhbmdlKHByZXYsIGFkZHIsIHByZXYtXHUwMDNldm1fZW5kLCBOVUxMKTtcbiBcdHJldHVybiBwcmV2O1xuIH1cbkBAIC05OTQsNyArMTAwOSw3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9leHRlbmRfdm1hX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uXG4gXHRzdGFydCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbiBcdGlmIChleHBhbmRfc3RhY2tfbG9ja2VkKHZtYSwgYWRkcikpXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKVxuK1x0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHRwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSh2bWEsIGFkZHIsIHN0YXJ0LCBOVUxMKTtcbiBcdHJldHVybiB2bWE7XG4gfVxuQEAgLTExMTksMTggKzExMzQsMTggQEAgU1lTQ0FMTF9ERUZJTkU1KHJlbWFwX2ZpbGVfcGFnZXMsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBzaXplLFxuIFx0ICovXG4gXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBzdGFydCk7XG4gXG4tXHRpZiAoIXZtYSB8fCAhKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fU0hBUkVEKSkge1xuK1x0aWYgKCF2bWEgfHwgIXZtYV90ZXN0KHZtYSwgVk1BX1NIQVJFRF9CSVQpKSB7XG4gXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdHByb3QgfD0gdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRUFEID8gUFJPVF9SRUFEIDogMDtcbi1cdHByb3QgfD0gdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XUklURSA/IFBST1RfV1JJVEUgOiAwO1xuLVx0cHJvdCB8PSB2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0VYRUMgPyBQUk9UX0VYRUMgOiAwO1xuK1x0cHJvdCB8PSB2bWFfdGVzdCh2bWEsIFZNQV9SRUFEX0JJVCkgPyBQUk9UX1JFQUQgOiAwO1xuK1x0cHJvdCB8PSB2bWFfdGVzdCh2bWEsIFZNQV9XUklURV9CSVQpID8gUFJPVF9XUklURSA6IDA7XG4rXHRwcm90IHw9IHZtYV90ZXN0KHZtYSwgVk1BX0VYRUNfQklUKSA/IFBST1RfRVhFQyA6IDA7XG4gXG4gXHRmbGFncyBcdTAwMjY9IE1BUF9OT05CTE9DSztcbiBcdGZsYWdzIHw9IE1BUF9TSEFSRUQgfCBNQVBfRklYRUQgfCBNQVBfUE9QVUxBVEU7XG4tXHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9MT0NLRUQpXG4rXHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdGZsYWdzIHw9IE1BUF9MT0NLRUQ7XG4gXG4gXHQvKiBTYXZlIHZtX2ZsYWdzIHVzZWQgdG8gY2FsY3VsYXRlIHByb3QgYW5kIGZsYWdzLCBhbmQgcmVjaGVjayBsYXRlci4gKi9cbkBAIC0xMTkxLDcgKzEyMDYsNyBAQCBTWVNDQUxMX0RFRklORTUocmVtYXBfZmlsZV9wYWdlcywgdW5zaWduZWQgbG9uZywgc3RhcnQsIHVuc2lnbmVkIGxvbmcsIHNpemUsXG4gXHR9XG4gXG4gXHRyZXQgPSBkb19tbWFwKHZtYS1cdTAwM2V2bV9maWxlLCBzdGFydCwgc2l6ZSxcbi1cdFx0XHRwcm90LCBmbGFncywgMCwgcGdvZmYsIFx1MDAyNnBvcHVsYXRlLCBOVUxMKTtcbitcdFx0XHRwcm90LCBmbGFncywgRU1QVFlfVk1BX0ZMQUdTLCBwZ29mZiwgXHUwMDI2cG9wdWxhdGUsIE5VTEwpO1xuIG91dDpcbiBcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcbiBcdGZwdXQoZmlsZSk7XG5AQCAtMTIzMyw3ICsxMjQ4LDcgQEAgaW50IHZtX2Jya19mbGFncyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdCwgYm9vbCBpc19leGVjKVxuIFxuIFx0dm1hID0gdm1hX3ByZXYoXHUwMDI2dm1pKTtcbiBcdHJldCA9IGRvX2Jya19mbGFncyhcdTAwMjZ2bWksIHZtYSwgYWRkciwgbGVuLCB2bWFfZmxhZ3MpO1xuLVx0cG9wdWxhdGUgPSAoKG1tLVx1MDAzZWRlZl9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKSAhPSAwKTtcbitcdHBvcHVsYXRlID0gdm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bW0tXHUwMDNlZGVmX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpO1xuIFx0bW1hcF93cml0ZV91bmxvY2sobW0pO1xuIFx0dXNlcmZhdWx0ZmRfdW5tYXBfY29tcGxldGUobW0sIFx1MDAyNnVmKTtcbiBcdGlmIChwb3B1bGF0ZSBcdTAwMjZcdTAwMjYgIXJldClcbkBAIC0xMjU2LDcgKzEyNzEsNyBAQCB1bnNpZ25lZCBsb25nIHRlYXJfZG93bl92bWFzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXG4gXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xuIFx0dm1hX2l0ZXJfc2V0KHZtaSwgdm1hLVx1MDAzZXZtX2VuZCk7XG4gXHRkbyB7XG4tXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0FDQ09VTlQpXG4rXHRcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9BQ0NPVU5UX0JJVCkpXG4gXHRcdFx0bnJfYWNjb3VudGVkICs9IHZtYV9wYWdlcyh2bWEpO1xuIFx0XHR2bWFfbWFya19kZXRhY2hlZCh2bWEpO1xuIFx0XHRyZW1vdmVfdm1hKHZtYSk7XG5AQCAtMTQwNSw3ICsxNDIwLDcgQEAgc3RhdGljIGludCBzcGVjaWFsX21hcHBpbmdfc3BsaXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHQvKlxuIFx0ICogRm9yYmlkIHNwbGl0dGluZyBzcGVjaWFsIG1hcHBpbmdzIC0ga2VybmVsIGhhcyBleHBlY3RhdGlvbnMgb3ZlclxuLVx0ICogdGhlIG51bWJlciBvZiBwYWdlcyBpbiBtYXBwaW5nLiBUb2dldGhlciB3aXRoIFZNX0RPTlRFWFBBTkRcbitcdCAqIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gbWFwcGluZy4gVG9nZXRoZXIgd2l0aCBWTUFfRE9OVEVYUEFORF9CSVRcbiBcdCAqIHRoZSBzaXplIG9mIHZtYSBzaG91bGQgc3RheSB0aGUgc2FtZSBvdmVyIHRoZSBzcGVjaWFsIG1hcHBpbmcnc1xuIFx0ICogbGlmZXRpbWUuXG4gXHQgKi9cbkBAIC0xNjc3LDcgKzE2OTIsNyBAQCBib29sIG1tYXBfcmVhZF9sb2NrX21heWJlX2V4cGFuZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRpZiAoIShuZXdfdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9HUk9XU0RPV04pKVxuK1x0aWYgKCF2bWFfdGVzdChuZXdfdm1hLCBWTUFfR1JPV1NET1dOX0JJVCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdG1tYXBfd3JpdGVfbG9jayhtbSk7XG5AQCAtMTcyNyw3ICsxNzQyLDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxuIFx0XHRyZXR2YWwgPSB2bWFfc3RhcnRfd3JpdGVfa2lsbGFibGUobXBudCk7XG4gXHRcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gXHRcdFx0Z290byBsb29wX291dDtcbi1cdFx0aWYgKG1wbnQtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0RPTlRDT1BZKSB7XG4rXHRcdGlmICh2bWFfdGVzdChtcG50LCBWTUFfRE9OVENPUFlfQklUKSkge1xuIFx0XHRcdHJldHZhbCA9IHZtYV9pdGVyX2NsZWFyX2dmcChcdTAwMjZ2bWksIG1wbnQtXHUwMDNldm1fc3RhcnQsXG4gXHRcdFx0XHRcdFx0ICAgIG1wbnQtXHUwMDNldm1fZW5kLCBHRlBfS0VSTkVMKTtcbiBcdFx0XHRpZiAocmV0dmFsKVxuQEAgLTE3MzcsNyArMTc1Miw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFx0XHRjaGFyZ2UgPSAwO1xuLVx0XHRpZiAobXBudC1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fQUNDT1VOVCkge1xuK1x0XHRpZiAodm1hX3Rlc3QobXBudCwgVk1BX0FDQ09VTlRfQklUKSkge1xuIFx0XHRcdHVuc2lnbmVkIGxvbmcgbGVuID0gdm1hX3BhZ2VzKG1wbnQpO1xuIFxuIFx0XHRcdGlmIChzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5X21tKG9sZG1tLCBsZW4pKSAvKiBzaWMgKi9cbkBAIC0xNzU1LDE2ICsxNzcwLDE5IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcbiBcdFx0cmV0dmFsID0gZHVwX3VzZXJmYXVsdGZkKHRtcCwgXHUwMDI2dWYpO1xuIFx0XHRpZiAocmV0dmFsKVxuIFx0XHRcdGdvdG8gZmFpbF9ub21lbV9hbm9uX3ZtYV9mb3JrO1xuLVx0XHRpZiAodG1wLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XSVBFT05GT1JLKSB7XG4rXG4rXHRcdGlmICh2bWFfdGVzdCh0bXAsIFZNQV9XSVBFT05GT1JLX0JJVCkpIHtcbiBcdFx0XHQvKlxuLVx0XHRcdCAqIFZNX1dJUEVPTkZPUksgZ2V0cyBhIGNsZWFuIHNsYXRlIGluIHRoZSBjaGlsZC5cbitcdFx0XHQgKiBWTUFfV0lQRU9ORk9SS19CSVQgZ2V0cyBhIGNsZWFuIHNsYXRlIGluIHRoZSBjaGlsZC5cbiBcdFx0XHQgKiBEb24ndCBwcmVwYXJlIGFub25fdm1hIHVudGlsIGZhdWx0IHNpbmNlIHdlIGRvbid0XG4gXHRcdFx0ICogY29weSBwYWdlIGZvciBjdXJyZW50IHZtYS5cbiBcdFx0XHQgKi9cbiBcdFx0XHR0bXAtXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xuIFx0XHR9IGVsc2UgaWYgKGFub25fdm1hX2ZvcmsodG1wLCBtcG50KSlcbiBcdFx0XHRnb3RvIGZhaWxfbm9tZW1fYW5vbl92bWFfZm9yaztcbi1cdFx0dm1fZmxhZ3NfY2xlYXIodG1wLCBWTV9MT0NLRURfTUFTSyk7XG4rXG4rXHRcdHZtYV9zdGFydF93cml0ZSh0bXApO1xuK1x0XHR2bWFfY2xlYXJfZmxhZ3NfbWFzayh0bXAsIFZNQV9MT0NLRURfTUFTSyk7XG4gXHRcdC8qXG4gXHRcdCAqIENvcHkvdXBkYXRlIGh1Z2V0bGIgcHJpdmF0ZSB2bWEgaW5mb3JtYXRpb24uXG4gXHRcdCAqL1xuQEAgLTE3OTcsNyArMTgxNSw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcbiBcdFx0XHRpX21tYXBfdW5sb2NrX3dyaXRlKG1hcHBpbmcpO1xuIFx0XHR9XG4gXG4tXHRcdGlmICghKHRtcC1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fV0lQRU9ORk9SSykpXG4rXHRcdGlmICghdm1hX3Rlc3QodG1wLCBWTUFfV0lQRU9ORk9SS19CSVQpKVxuIFx0XHRcdHJldHZhbCA9IGNvcHlfcGFnZV9yYW5nZSh0bXAsIG1wbnQpO1xuIFxuIFx0XHRpZiAocmV0dmFsKSB7XG5kaWZmIC0tZ2l0IGEvbW0vbXByb3RlY3QuYyBiL21tL21wcm90ZWN0LmNcbmluZGV4IGRjMjdiYmMxNzEyZmQ1Li4yODg4ZWU2MzhkODcyYSAxMDA2NDRcbi0tLSBhL21tL21wcm90ZWN0LmNcbisrKyBiL21tL21wcm90ZWN0LmNcbkBAIC00MCw3ICs0MCw3IEBAXG4gXG4gc3RhdGljIGJvb2wgbWF5YmVfY2hhbmdlX3B0ZV93cml0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcHRlX3QgcHRlKVxuIHtcbi1cdGlmIChXQVJOX09OX09OQ0UoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1dSSVRFKSkpXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCF2bWFfdGVzdCh2bWEsIFZNQV9XUklURV9CSVQpKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LyogRG9uJ3QgdG91Y2ggZW50cmllcyB0aGF0IGFyZSBub3QgZXZlbiByZWFkYWJsZS4gKi9cbkBAIC05Nyw3ICs5Nyw3IEBAIHN0YXRpYyBib29sIGNhbl9jaGFuZ2Vfc2hhcmVkX3B0ZV93cml0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBib29sIGNhbl9jaGFuZ2VfcHRlX3dyaXRhYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgICBwdGVfdCBwdGUpXG4ge1xuLVx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpKVxuK1x0aWYgKCF2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKSlcbiBcdFx0cmV0dXJuIGNhbl9jaGFuZ2VfcHJpdmF0ZV9wdGVfd3JpdGFibGUodm1hLCBhZGRyLCBwdGUpO1xuIFxuIFx0cmV0dXJuIGNhbl9jaGFuZ2Vfc2hhcmVkX3B0ZV93cml0YWJsZSh2bWEsIHB0ZSk7XG5AQCAtMTk0LDcgKzE5NCw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBzZXRfd3JpdGVfcHJvdF9jb21taXRfZmx1c2hfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1XG4ge1xuIFx0Ym9vbCBzZXRfd3JpdGU7XG4gXG4tXHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpIHtcbitcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKSkge1xuIFx0XHRzZXRfd3JpdGUgPSBjYW5fY2hhbmdlX3NoYXJlZF9wdGVfd3JpdGFibGUodm1hLCBwdGVudCk7XG4gXHRcdHByb3RfY29tbWl0X2ZsdXNoX3B0ZXModm1hLCBhZGRyLCBwdGVwLCBvbGRwdGUsIHB0ZW50LCBucl9wdGVzLFxuIFx0XHRcdFx0ICAgICAgIC8qIGlkeCA9ICovIDAsIHNldF93cml0ZSwgdGxiKTtcbkBAIC04NDYsOCArODQ2LDggQEAgbXByb3RlY3RfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuIFx0XHR2bV91bmFjY3RfbWVtb3J5KG5ycGFnZXMpO1xuIFxuIFx0Lypcbi1cdCAqIFByaXZhdGUgVk1fTE9DS0VEIFZNQSBiZWNvbWluZyB3cml0YWJsZTogdHJpZ2dlciBDT1cgdG8gYXZvaWQgbWFqb3Jcbi1cdCAqIGZhdWx0IG9uIGFjY2Vzcy5cbitcdCAqIFByaXZhdGUgVk1BX0xPQ0tFRF9CSVQgVk1BIGJlY29taW5nIHdyaXRhYmxlOiB0cmlnZ2VyIENPVyB0byBhdm9pZFxuK1x0ICogbWFqb3IgZmF1bHQgb24gYWNjZXNzLlxuIFx0ICovXG4gXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bmV3X3ZtYV9mbGFncywgVk1BX1dSSVRFX0JJVCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgdm1hX2ZsYWdzX3Rlc3QoXHUwMDI2b2xkX3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpIFx1MDAyNlx1MDAyNlxuQEAgLTkyMSw3ICs5MjEsNyBAQCBzdGF0aWMgaW50IGRvX21wcm90ZWN0X3BrZXkodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbixcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0c3RhcnQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4gXHRcdGVycm9yID0gLUVJTlZBTDtcbi1cdFx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9HUk9XU0RPV04pKVxuK1x0XHRpZiAoIXZtYV90ZXN0KHZtYSwgVk1BX0dST1dTRE9XTl9CSVQpKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKHZtYS1cdTAwM2V2bV9zdGFydCBcdTAwM2Ugc3RhcnQpXG5AQCAtOTI5LDcgKzkyOSw3IEBAIHN0YXRpYyBpbnQgZG9fbXByb3RlY3RfcGtleSh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLFxuIFx0XHRpZiAodW5saWtlbHkoZ3Jvd3MgXHUwMDI2IFBST1RfR1JPV1NVUCkpIHtcbiBcdFx0XHRlbmQgPSB2bWEtXHUwMDNldm1fZW5kO1xuIFx0XHRcdGVycm9yID0gLUVJTlZBTDtcbi1cdFx0XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0dST1dTVVApKVxuK1x0XHRcdGlmICghdm1hX3Rlc3Rfc2luZ2xlX21hc2sodm1hLCBWTUFfR1JPV1NVUCkpXG4gXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFx0fVxuQEAgLTk1Myw3ICs5NTMsNyBAQCBzdGF0aWMgaW50IGRvX21wcm90ZWN0X3BrZXkodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbixcbiBcdFx0fVxuIFxuIFx0XHQvKiBEb2VzIHRoZSBhcHBsaWNhdGlvbiBleHBlY3QgUFJPVF9SRUFEIHRvIGltcGx5IFBST1RfRVhFQyAqL1xuLVx0XHRpZiAocmllciBcdTAwMjZcdTAwMjYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUFZRVhFQykpXG4rXHRcdGlmIChyaWVyIFx1MDAyNlx1MDAyNiB2bWFfdGVzdCh2bWEsIFZNQV9NQVlFWEVDX0JJVCkpXG4gXHRcdFx0cHJvdCB8PSBQUk9UX0VYRUM7XG4gXG4gXHRcdC8qXG5kaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuY1xuaW5kZXggMzg0ZWY0Y2MyMTk1YmEuLmI2NGFhMWY2ZTA3ZWRlIDEwMDY0NFxuLS0tIGEvbW0vbXJlbWFwLmNcbisrKyBiL21tL21yZW1hcC5jXG5AQCAtNjgsNyArNjgsNyBAQCBzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCB7XG4gXHRib29sIHBvcHVsYXRlX2V4cGFuZDtcdFx0LyogbWxvY2soKSdkIGV4cGFuZGVkLCBtdXN0IHBvcHVsYXRlLiAqL1xuIFx0ZW51bSBtcmVtYXBfdHlwZSByZW1hcF90eXBlO1x0LyogZXhwYW5kLCBzaHJpbmssIGV0Yy4gKi9cbiBcdGJvb2wgbW1hcF9sb2NrZWQ7XHRcdC8qIElzIG1tIGN1cnJlbnRseSB3cml0ZS1sb2NrZWQ/ICovXG4tXHR1bnNpZ25lZCBsb25nIGNoYXJnZWQ7XHRcdC8qIElmIFZNX0FDQ09VTlQsICMgcGFnZXMgdG8gYWNjb3VudC4gKi9cbitcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZDtcdFx0LyogSWYgVk1BX0FDQ09VTlRfQklULCAjIHBncyB0byBhY2NvdW50ICovXG4gXHRib29sIHZtaV9uZWVkc19pbnZhbGlkYXRlO1x0LyogSXMgdGhlIFZNQSBpdGVyYXRvciBpbnZhbGlkYXRlZD8gKi9cbiB9O1xuIFxuQEAgLTk2Myw3ICs5NjMsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB2cm1fc2V0X25ld19hZGRyKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXG4gXHRpZiAodnJtLVx1MDAzZWZsYWdzIFx1MDAyNiBNUkVNQVBfRklYRUQpXG4gXHRcdG1hcF9mbGFncyB8PSBNQVBfRklYRUQ7XG4tXHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NQVlTSEFSRSlcbitcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpKVxuIFx0XHRtYXBfZmxhZ3MgfD0gTUFQX1NIQVJFRDtcbiBcbiBcdHJlcyA9IGdldF91bm1hcHBlZF9hcmVhKHZtYS1cdTAwM2V2bV9maWxlLCBuZXdfYWRkciwgdnJtLVx1MDAzZW5ld19sZW4sIHBnb2ZmLFxuQEAgLTk4NSw3ICs5ODUsNyBAQCBzdGF0aWMgYm9vbCB2cm1fY2FsY19jaGFyZ2Uoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGNoYXJnZWQ7XG4gXG4tXHRpZiAoISh2cm0tXHUwMDNldm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKSlcbitcdGlmICghdm1hX3Rlc3QodnJtLVx1MDAzZXZtYSwgVk1BX0FDQ09VTlRfQklUKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHQvKlxuQEAgLTEwMTIsNyArMTAxMiw3IEBAIHN0YXRpYyBib29sIHZybV9jYWxjX2NoYXJnZShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuICAqL1xuIHN0YXRpYyB2b2lkIHZybV91bmNoYXJnZShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIHtcbi1cdGlmICghKHZybS1cdTAwM2V2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0FDQ09VTlQpKVxuK1x0aWYgKCF2bWFfdGVzdCh2cm0tXHUwMDNldm1hLCBWTUFfQUNDT1VOVF9CSVQpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHR2bV91bmFjY3RfbWVtb3J5KHZybS1cdTAwM2VjaGFyZ2VkKTtcbkBAIC0xMDMyLDcgKzEwMzIsNyBAQCBzdGF0aWMgdm9pZCB2cm1fc3RhdF9hY2NvdW50KHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0sXG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZybS1cdTAwM2V2bWE7XG4gXG4gXHR2bV9zdGF0X2FjY291bnQobW0sIHZtYS1cdTAwM2V2bV9mbGFncywgcGFnZXMpO1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKVxuK1x0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHRtbS1cdTAwM2Vsb2NrZWRfdm0gKz0gcGFnZXM7XG4gfVxuIFxuQEAgLTExNzYsNyArMTE3Niw3IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiBcdCAqIGFyb3NlLCBpbiB3aGljaCBjYXNlIHdlIF9kb18gd2lzaCB0byB1bm1hcCB0aGUgX25ld18gVk1BLCB3aGljaCBtZWFuc1xuIFx0ICogd2UgYWN0dWFsbHkgX2RvXyB3YW50IGl0IGJlIHVuYWNjb3VudGVkLlxuIFx0ICovXG4tXHRib29sIGFjY291bnRhYmxlX21vdmUgPSAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKSBcdTAwMjZcdTAwMjZcbitcdGJvb2wgYWNjb3VudGFibGVfbW92ZSA9IHZtYV90ZXN0KHZtYSwgVk1BX0FDQ09VTlRfQklUKSBcdTAwMjZcdTAwMjZcbiBcdFx0ISh2cm0tXHUwMDNlZmxhZ3MgXHUwMDI2IE1SRU1BUF9ET05UVU5NQVApO1xuIFxuIFx0LypcbkBAIC0xMTk1LDcgKzExOTUsNyBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHQgKiBwb3J0aW9ucyBvZiB0aGUgb3JpZ2luYWwgVk1BIHRoYXQgcmVtYWluLlxuIFx0ICovXG4gXHRpZiAoYWNjb3VudGFibGVfbW92ZSkge1xuLVx0XHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX0FDQ09VTlQpO1xuK1x0XHR2bWFfY2xlYXJfZmxhZ3Modm1hLCBWTUFfQUNDT1VOVF9CSVQpO1xuIFx0XHQvKiBXZSBhcmUgYWJvdXQgdG8gc3BsaXQgdm1hLCBzbyBzdG9yZSB0aGUgc3RhcnQvZW5kLiAqL1xuIFx0XHR2bV9zdGFydCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbiBcdFx0dm1fZW5kID0gdm1hLVx1MDAzZXZtX2VuZDtcbkBAIC0xMjIwLDggKzEyMjAsOCBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHQgKiB8ICAgICAgICAgICAgIHxcbiBcdCAqIHwtLS0tLS0tLS0tLS0tfFxuIFx0ICpcbi1cdCAqIEhhdmluZyBjbGVhcmVkIFZNX0FDQ09VTlQgZnJvbSB0aGUgd2hvbGUgVk1BLCBhZnRlciB3ZSB1bm1hcCBhYm92ZVxuLVx0ICogd2UnbGwgZW5kIHVwIHdpdGg6XG4rXHQgKiBIYXZpbmcgY2xlYXJlZCBWTUFfQUNDT1VOVF9CSVQgZnJvbSB0aGUgd2hvbGUgVk1BLCBhZnRlciB3ZSB1bm1hcFxuK1x0ICogYWJvdmUgd2UnbGwgZW5kIHVwIHdpdGg6XG4gXHQgKlxuIFx0ICogICAgYWRkciAgZW5kXG4gXHQgKiAgICAgfCAgICAgfFxuQEAgLTEyNDEsMTMgKzEyNDEsMTUgQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFx0XHRpZiAodm1fc3RhcnQgXHUwMDNjIGFkZHIpIHtcbiBcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYgPSB2bWFfcHJldihcdTAwMjZ2bWkpO1xuIFxuLVx0XHRcdHZtX2ZsYWdzX3NldChwcmV2LCBWTV9BQ0NPVU5UKTsgLyogQWNxdWlyZXMgVk1BIGxvY2suICovXG4rXHRcdFx0dm1hX3N0YXJ0X3dyaXRlKHByZXYpO1xuK1x0XHRcdHZtYV9zZXRfZmxhZ3MocHJldiwgVk1BX0FDQ09VTlRfQklUKTtcbiBcdFx0fVxuIFxuIFx0XHRpZiAodm1fZW5kIFx1MDAzZSBlbmQpIHtcbiBcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQgPSB2bWFfbmV4dChcdTAwMjZ2bWkpO1xuIFxuLVx0XHRcdHZtX2ZsYWdzX3NldChuZXh0LCBWTV9BQ0NPVU5UKTsgLyogQWNxdWlyZXMgVk1BIGxvY2suICovXG4rXHRcdFx0dm1hX3N0YXJ0X3dyaXRlKG5leHQpO1xuK1x0XHRcdHZtYV9zZXRfZmxhZ3MobmV4dCwgVk1BX0FDQ09VTlRfQklUKTtcbiBcdFx0fVxuIFx0fVxuIH1cbkBAIC0xMzMwLDggKzEzMzIsOCBAQCBzdGF0aWMgdm9pZCBkb250dW5tYXBfY29tcGxldGUoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSxcbiBcdHVuc2lnbmVkIGxvbmcgb2xkX3N0YXJ0ID0gdnJtLVx1MDAzZXZtYS1cdTAwM2V2bV9zdGFydDtcbiBcdHVuc2lnbmVkIGxvbmcgb2xkX2VuZCA9IHZybS1cdTAwM2V2bWEtXHUwMDNldm1fZW5kO1xuIFxuLVx0LyogV2UgYWx3YXlzIGNsZWFyIFZNX0xPQ0tFRFtPTkZBVUxUXSBvbiB0aGUgb2xkIFZNQS4gKi9cbi1cdHZtX2ZsYWdzX2NsZWFyKHZybS1cdTAwM2V2bWEsIFZNX0xPQ0tFRF9NQVNLKTtcbitcdC8qIFdlIGFsd2F5cyBjbGVhciBWTUFfTE9DS0VEW09ORkFVTFRdX0JJVCBvbiB0aGUgb2xkIFZNQS4gKi9cbitcdHZtYV9jbGVhcl9mbGFnc19tYXNrKHZybS1cdTAwM2V2bWEsIFZNQV9MT0NLRURfTUFTSyk7XG4gXG4gXHQvKlxuIFx0ICogYW5vbl92bWEgbGlua3Mgb2YgdGhlIG9sZCB2bWEgaXMgbm8gbG9uZ2VyIG5lZWRlZCBhZnRlciBpdHMgcGFnZVxuQEAgLTE3NjcsMTQgKzE3NjksMTQgQEAgc3RhdGljIGludCBjaGVja19wcmVwX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFx0ICogYmFzZWQgb24gdGhlIG9yaWdpbmFsLiAgVGhlcmUgYXJlIG5vIGtub3duIHVzZSBjYXNlcyBmb3IgdGhpc1xuIFx0ICogYmVoYXZpb3IuICBBcyBhIHJlc3VsdCwgZmFpbCBzdWNoIGF0dGVtcHRzLlxuIFx0ICovXG4tXHRpZiAoIW9sZF9sZW4gXHUwMDI2XHUwMDI2ICEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fU0hBUkVEIHwgVk1fTUFZU0hBUkUpKSkge1xuK1x0aWYgKCFvbGRfbGVuIFx1MDAyNlx1MDAyNiAhdm1hX3Rlc3RfYW55KHZtYSwgVk1BX1NIQVJFRF9CSVQsIFZNQV9NQVlTSEFSRV9CSVQpKSB7XG4gXHRcdHByX3dhcm5fb25jZShcIiVzICglZCk6IGF0dGVtcHRlZCB0byBkdXBsaWNhdGUgYSBwcml2YXRlIG1hcHBpbmcgd2l0aCBtcmVtYXAuICBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuXFxuXCIsXG4gXHRcdFx0ICAgICBjdXJyZW50LVx1MDAzZWNvbW0sIGN1cnJlbnQtXHUwMDNlcGlkKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRpZiAoKHZybS1cdTAwM2VmbGFncyBcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0KHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0RPTlRFWFBBTkQgfCBWTV9QRk5NQVApKSlcbitcdCAgICB2bWFfdGVzdF9hbnkodm1hLCBWTUFfRE9OVEVYUEFORF9CSVQsIFZNQV9QRk5NQVBfQklUKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHQvKlxuQEAgLTE4MDQsNyArMTgwNiw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHJlcF92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKiBXZSBhcmUgZXhwYW5kaW5nIGFuZCB0aGUgVk1BIGlzIG1sb2NrKCknZCBzbyB3ZSBuZWVkIHRvIHBvcHVsYXRlLiAqL1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKVxuK1x0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHR2cm0tXHUwMDNlcG9wdWxhdGVfZXhwYW5kID0gdHJ1ZTtcbiBcbiBcdC8qIE5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBhIGdyb3dpbmcgbWFwcGluZyAqL1xuQEAgLTE4MTIsMTAgKzE4MTQsMTAgQEAgc3RhdGljIGludCBjaGVja19wcmVwX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFx0aWYgKHBnb2ZmICsgKG5ld19sZW4gXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpIFx1MDAzYyBwZ29mZilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fRE9OVEVYUEFORCB8IFZNX1BGTk1BUCkpXG4rXHRpZiAodm1hX3Rlc3RfYW55KHZtYSwgVk1BX0RPTlRFWFBBTkRfQklULCBWTUFfUEZOTUFQX0JJVCkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFxuLVx0aWYgKCFtbG9ja19mdXR1cmVfb2sobW0sIHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VELCB2cm0tXHUwMDNlZGVsdGEpKVxuK1x0aWYgKCFtbG9ja19mdXR1cmVfb2sobW0sIHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpLCB2cm0tXHUwMDNlZGVsdGEpKVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcbiBcdGlmICghbWF5X2V4cGFuZF92bShtbSwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzLCB2cm0tXHUwMDNlZGVsdGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpKVxuZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jXG5pbmRleCBhZGMwYjBjYTkwNmJkZi4uNDk4ZTAxZWU0MGIwNTYgMTAwNjQ0XG4tLS0gYS9tbS9ub21tdS5jXG4rKysgYi9tbS9ub21tdS5jXG5AQCAtMTAxNCwxMSArMTAxNCwxMiBAQCB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBsZW4sXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBwcm90LFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG4tXHRcdFx0dm1fZmxhZ3NfdCB2bV9mbGFncyxcbitcdFx0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBwZ29mZixcbiBcdFx0XHR1bnNpZ25lZCBsb25nICpwb3B1bGF0ZSxcbiBcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp1ZilcbiB7XG4rXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRzdHJ1Y3Qgdm1fcmVnaW9uICpyZWdpb247XG4gXHRzdHJ1Y3QgcmJfbm9kZSAqcmI7XG5kaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jXG5pbmRleCA1MDkwNDU3NTQyY2E5Yy4uYmYwNTEzZDFkM2QwODYgMTAwNjQ0XG4tLS0gYS9tbS91dGlsLmNcbisrKyBiL21tL3V0aWwuY1xuQEAgLTU3OCw4ICs1NzgsOCBAQCB1bnNpZ25lZCBsb25nIHZtX21tYXBfcGdvZmYoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmICghcmV0KSB7XG4gXHRcdGlmIChtbWFwX3dyaXRlX2xvY2tfa2lsbGFibGUobW0pKVxuIFx0XHRcdHJldHVybiAtRUlOVFI7XG4tXHRcdHJldCA9IGRvX21tYXAoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFnLCAwLCBwZ29mZiwgXHUwMDI2cG9wdWxhdGUsXG4tXHRcdFx0ICAgICAgXHUwMDI2dWYpO1xuK1x0XHRyZXQgPSBkb19tbWFwKGZpbGUsIGFkZHIsIGxlbiwgcHJvdCwgZmxhZywgRU1QVFlfVk1BX0ZMQUdTLCBwZ29mZixcbitcdFx0XHQgICAgICBcdTAwMjZwb3B1bGF0ZSwgXHUwMDI2dWYpO1xuIFx0XHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XG4gXHRcdHVzZXJmYXVsdGZkX3VubWFwX2NvbXBsZXRlKG1tLCBcdTAwMjZ1Zik7XG4gXHRcdGlmIChwb3B1bGF0ZSlcbkBAIC02MjcsMjAgKzYyNywyMCBAQCBFWFBPUlRfU1lNQk9MKHZtX21tYXApO1xuIHVuc2lnbmVkIGxvbmcgdm1fbW1hcF9zaGFkb3dfc3RhY2sodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncylcbiB7XG4rXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSBWTUFfU0hBRE9XX1NUQUNLO1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuIFx0dW5zaWduZWQgbG9uZyByZXQsIHVudXNlZDtcbi1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSBWTV9TSEFET1dfU1RBQ0s7XG4gXG4gXHRmbGFncyB8PSBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEU7XG4gXHRpZiAoYWRkcilcbiBcdFx0ZmxhZ3MgfD0gTUFQX0ZJWEVEX05PUkVQTEFDRTtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4tXHRcdHZtX2ZsYWdzIHw9IFZNX05PSFVHRVBBR0U7XG4rXHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTk9IVUdFUEFHRV9CSVQpO1xuIFxuIFx0bW1hcF93cml0ZV9sb2NrKG1tKTtcbiBcdHJldCA9IGRvX21tYXAoTlVMTCwgYWRkciwgbGVuLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBmbGFncyxcbi1cdFx0ICAgICAgdm1fZmxhZ3MsIDAsIFx1MDAyNnVudXNlZCwgTlVMTCk7XG4rXHRcdCAgICAgIHZtYV9mbGFncywgMCwgXHUwMDI2dW51c2VkLCBOVUxMKTtcbiBcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcbiBcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuY1xuaW5kZXggOWQ1NTZkMzNiMjRiZDEuLmI1YmMzZWVjOTYxYzc5IDEwMDY0NFxuLS0tIGEvbW0vdm1hLmNcbisrKyBiL21tL3ZtYS5jXG5AQCAtNTYsNyArNTYsNyBAQCBzdHJ1Y3QgbW1hcF9zdGF0ZSB7XG4gXHRcdC5wZ2xlbiA9IFBIWVNfUEZOKGxlbl8pLFx0XHRcdFx0XFxcbiBcdFx0LnZtYV9mbGFncyA9IHZtYV9mbGFnc18sXHRcdFx0XHRcXFxuIFx0XHQuZmlsZSA9IGZpbGVfLFx0XHRcdFx0XHRcdFxcXG4tXHRcdC5wYWdlX3Byb3QgPSB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWFfZmxhZ3NfKSxcdFx0XFxcbitcdFx0LnBhZ2VfcHJvdCA9IHZtYV9mbGFnc190b19wYWdlX3Byb3Qodm1hX2ZsYWdzXyksXHRcXFxuIFx0fVxuIFxuICNkZWZpbmUgVk1HX01NQVBfU1RBVEUobmFtZSwgbWFwXywgdm1hXylcdFx0XHRcdFxcXG5AQCAtMjE3Niw3ICsyMTc2LDcgQEAgYm9vbCB2bWFfd2FudHNfd3JpdGVub3RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBncHJvdF90IHZtX3BhZ2VfcHJvdClcbiBcdC8qIFRoZSBvcGVuIHJvdXRpbmUgZGlkIHNvbWV0aGluZyB0byB0aGUgcHJvdGVjdGlvbnMgdGhhdCBwZ3Byb3RfbW9kaWZ5XG4gXHQgKiB3b24ndCBwcmVzZXJ2ZT8gKi9cbiBcdGlmIChwZ3Byb3RfdmFsKHZtX3BhZ2VfcHJvdCkgIT1cbi1cdCAgICBwZ3Byb3RfdmFsKHZtX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bWEtXHUwMDNldm1fZmxhZ3MpKSlcbitcdCAgICBwZ3Byb3RfdmFsKHZtYV9wZ3Byb3RfbW9kaWZ5KHZtX3BhZ2VfcHJvdCwgdm1hLVx1MDAzZWZsYWdzKSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qXG5AQCAtMjg4Myw3ICsyODgzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuICAqIGZpbGUgdG8gYmUgbWFwcGVkLCBvdGhlcndpc2UgTlVMTC5cbiAgKiBAYWRkcjogVGhlIHBhZ2UtYWxpZ25lZCBhZGRyZXNzIGF0IHdoaWNoIHRvIHBlcmZvcm0gdGhlIG1hcHBpbmcuXG4gICogQGxlbjogVGhlIHBhZ2UtYWxpZ25lZCwgbm9uLXplcm8sIGxlbmd0aCBvZiB0aGUgbWFwcGluZy5cbi0gKiBAdm1fZmxhZ3M6IFRoZSBWTUEgZmxhZ3Mgd2hpY2ggc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIG1hcHBpbmcuXG4rICogQHZtYV9mbGFnczogVGhlIFZNQSBmbGFncyB3aGljaCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgbWFwcGluZy5cbiAgKiBAcGdvZmY6IElmIEBmaWxlIGlzIHNwZWNpZmllZCwgdGhlIHBhZ2Ugb2Zmc2V0IGludG8gdGhlIGZpbGUsIGlmIG5vdCB0aGVuXG4gICogdGhlIHZpcnR1YWwgcGFnZSBvZmZzZXQgaW4gbWVtb3J5IG9mIHRoZSBhbm9ueW1vdXMgbWFwcGluZy5cbiAgKiBAdWY6IE9wdGlvbmFsbHksIGEgcG9pbnRlciB0byBhIGxpc3QgaGVhZCB1c2VkIGZvciB0cmFja2luZyB1c2VyZmF1bHRmZCB1bm1hcFxuQEAgLTI4OTMsMTIgKzI4OTMsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuICAqIGJlZW4gcGVyZm9ybWVkLlxuICAqL1xuIHVuc2lnbmVkIGxvbmcgbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuK1x0XHRcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHZtYV9mbGFnc190IHZtYV9mbGFncyxcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHN0cnVjdCBsaXN0X2hlYWQgKnVmKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcmV0O1xuIFx0Ym9vbCB3cml0YWJsZV9maWxlX21hcHBpbmcgPSBmYWxzZTtcbi1cdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3MpO1xuIFxuIFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKGN1cnJlbnQtXHUwMDNlbW0pO1xuIFxuQEAgLTI5MDcsNyArMjkwNiw3IEBAIHVuc2lnbmVkIGxvbmcgbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXG4gXHQvKiBBbGxvdyBhcmNoaXRlY3R1cmVzIHRvIHNhbml0eS1jaGVjayB0aGUgdm1fZmxhZ3MuICovXG4tXHRpZiAoIWFyY2hfdmFsaWRhdGVfZmxhZ3Modm1fZmxhZ3MpKVxuK1x0aWYgKCFhcmNoX3ZhbGlkYXRlX2ZsYWdzKHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LyogTWFwIHdyaXRhYmxlIGFuZCBlbnN1cmUgdGhpcyBpc24ndCBhIHNlYWxlZCBtZW1mZC4gKi9cbkBAIC0zNDIwLDE4ICszNDE5LDIxIEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqX19pbnN0YWxsX3NwZWNpYWxfbWFwcGluZyhcbiBcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIHZvaWQgKnByaXYsXG4gXHRjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKm9wcylcbiB7XG4tXHRpbnQgcmV0O1xuK1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbGVnYWN5X3RvX3ZtYV9mbGFncyh2bV9mbGFncyk7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbitcdGludCByZXQ7XG4gXG4gXHR2bWEgPSB2bV9hcmVhX2FsbG9jKG1tKTtcbi1cdGlmICh1bmxpa2VseSh2bWEgPT0gTlVMTCkpXG4rXHRpZiAodW5saWtlbHkoIXZtYSkpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuLVx0dm1fZmxhZ3MgfD0gbW0tXHUwMDNlZGVmX2ZsYWdzIHwgVk1fRE9OVEVYUEFORDtcbitcdHZtYV9mbGFnc19zZXRfbWFzayhcdTAwMjZ2bWFfZmxhZ3MsIG1tLVx1MDAzZWRlZl92bWFfZmxhZ3MpO1xuK1x0dm1hX2ZsYWdzX3NldChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9ET05URVhQQU5EX0JJVCk7XG4gXHRpZiAocGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpXG4tXHRcdHZtX2ZsYWdzIHw9IFZNX1NPRlRESVJUWTtcbi1cdHZtX2ZsYWdzX2luaXQodm1hLCB2bV9mbGFncyBcdTAwMjYgflZNX0xPQ0tFRF9NQVNLKTtcbi1cdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS1cdTAwM2V2bV9mbGFncyk7XG4rXHRcdHZtYV9mbGFnc19zZXQoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfU09GVERJUlRZX0JJVCk7XG4rXHR2bWFfZmxhZ3NfY2xlYXJfbWFzayhcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfTUFTSyk7XG4rXHR2bWEtXHUwMDNlZmxhZ3MgPSB2bWFfZmxhZ3M7XG4rXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcbiBcdHZtYS1cdTAwM2V2bV9vcHMgPSBvcHM7XG4gXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gcHJpdjtcbmRpZmYgLS1naXQgYS9tbS92bWEuaCBiL21tL3ZtYS5oXG5pbmRleCBhZGI3YTBiYTExOTIwOC4uMGJjN2Q1MjFlOTc2NzcgMTAwNjQ0XG4tLS0gYS9tbS92bWEuaFxuKysrIGIvbW0vdm1hLmhcbkBAIC01MTcsNyArNTE3LDcgQEAgaW50IG1tX3Rha2VfYWxsX2xvY2tzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbiB2b2lkIG1tX2Ryb3BfYWxsX2xvY2tzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbiBcbiB1bnNpZ25lZCBsb25nIG1tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdHVuc2lnbmVkIGxvbmcgbGVuLCB2bV9mbGFnc190IHZtX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuK1x0XHR1bnNpZ25lZCBsb25nIGxlbiwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp1Zik7XG4gXG4gaW50IGRvX2Jya19mbGFncyhzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYnJrdm1hLFxuQEAgLTU0MSw5ICs1NDEsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV93YW50c19tYW51YWxfcHRlX3dyaXRlX3VwZ3JhZGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19NTVVcbi1zdGF0aWMgaW5saW5lIHBncHJvdF90IHZtX3BncHJvdF9tb2RpZnkocGdwcm90X3Qgb2xkcHJvdCwgdm1fZmxhZ3NfdCB2bV9mbGFncylcbitzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9wZ3Byb3RfbW9kaWZ5KHBncHJvdF90IG9sZHByb3QsIHZtYV9mbGFnc190IHZtYV9mbGFncylcbiB7XG4tXHRyZXR1cm4gcGdwcm90X21vZGlmeShvbGRwcm90LCB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzKSk7XG4rXHRjb25zdCBwZ3Byb3RfdCBwcm90ID0gdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3MpO1xuK1xuK1x0cmV0dXJuIHBncHJvdF9tb2RpZnkob2xkcHJvdCwgcHJvdCk7XG4gfVxuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL21tL3ZtYV9leGVjLmMgYi9tbS92bWFfZXhlYy5jXG5pbmRleCBlZjFmYTJiMTYxZjNiYS4uN2FmMTI2MDY4OWI5N2UgMTAwNjQ0XG4tLS0gYS9tbS92bWFfZXhlYy5jXG4rKysgYi9tbS92bWFfZXhlYy5jXG5AQCAtMTEyLDE1ICsxMTIsMTcgQEAgaW50IHJlbG9jYXRlX3ZtYV9kb3duKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHNoaWZ0KVxuIGludCBjcmVhdGVfaW5pdF9zdGFja192bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXG4gXHRcdFx0ICB1bnNpZ25lZCBsb25nICp0b3BfbWVtX3ApXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFZNX1NUQUNLX0ZMQUdTIHwgVk1fU1RBQ0tfSU5DT01QTEVURV9TRVRVUDtcbitcdHZtYV9mbGFnc190IGZsYWdzID0gVk1BX1NUQUNLX0lOQ09NUExFVEVfU0VUVVA7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdGludCBlcnI7XG4tXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtX2FyZWFfYWxsb2MobW0pO1xuIFxuK1x0LyogVk1BX1NUQUNLX0ZMQUdTIGFuZCBWTUFfU1RBQ0tfSU5DT01QTEVURV9TRVRVUCBtdXN0IG5vdCBvdmVybGFwLiAqL1xuK1x0Vk1fV0FSTl9PTl9PTkNFKHZtYV9mbGFnc190ZXN0X2FueV9tYXNrKFx1MDAyNmZsYWdzLCBWTUFfU1RBQ0tfRkxBR1MpKTtcbitcbitcdHZtYSA9IHZtX2FyZWFfYWxsb2MobW0pO1xuIFx0aWYgKCF2bWEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0dm1hX3NldF9hbm9ueW1vdXModm1hKTtcbi1cbiBcdGlmIChtbWFwX3dyaXRlX2xvY2tfa2lsbGFibGUobW0pKSB7XG4gXHRcdGVyciA9IC1FSU5UUjtcbiBcdFx0Z290byBlcnJfZnJlZTtcbkBAIC0xMzQsMTkgKzEzNiwyMSBAQCBpbnQgY3JlYXRlX2luaXRfc3RhY2tfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfa3NtO1xuIFxuK1x0dm1hX2ZsYWdzX3NldF9tYXNrKFx1MDAyNmZsYWdzLCBWTUFfU1RBQ0tfRkxBR1MpO1xuK1x0dm1hX3NldF9hbm9ueW1vdXModm1hKTtcbitcbiBcdC8qXG4gXHQgKiBQbGFjZSB0aGUgc3RhY2sgYXQgdGhlIGxhcmdlc3Qgc3RhY2sgYWRkcmVzcyB0aGUgYXJjaGl0ZWN0dXJlXG4gXHQgKiBzdXBwb3J0cy4gTGF0ZXIsIHdlJ2xsIG1vdmUgdGhpcyB0byBhbiBhcHByb3ByaWF0ZSBwbGFjZS4gV2UgZG9uJ3RcbiBcdCAqIHVzZSBTVEFDS19UT1AgYmVjYXVzZSB0aGF0IGNhbiBkZXBlbmQgb24gYXR0cmlidXRlcyB3aGljaCBhcmVuJ3RcbiBcdCAqIGNvbmZpZ3VyZWQgeWV0LlxuIFx0ICovXG4tXHRWTV9XQVJOX09OX09OQ0UoVk1fU1RBQ0tfRkxBR1MgXHUwMDI2IFZNX1NUQUNLX0lOQ09NUExFVEVfU0VUVVApO1xuIFx0dm1hLVx1MDAzZXZtX2VuZCA9IFNUQUNLX1RPUF9NQVg7XG4gXHR2bWEtXHUwMDNldm1fc3RhcnQgPSB2bWEtXHUwMDNldm1fZW5kIC0gUEFHRV9TSVpFO1xuIFx0aWYgKHBndGFibGVfc3VwcG9ydHNfc29mdF9kaXJ0eSgpKVxuLVx0XHRmbGFncyB8PSBWTV9TT0ZURElSVFk7XG4tXHR2bV9mbGFnc19pbml0KHZtYSwgZmxhZ3MpO1xuLVx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLVx1MDAzZXZtX2ZsYWdzKTtcbitcdFx0dm1hX2ZsYWdzX3NldChcdTAwMjZmbGFncywgVk1BX1NPRlRESVJUWV9CSVQpO1xuK1x0dm1hLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4rXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3Qodm1hKTtcbiBcbiBcdGVyciA9IGluc2VydF92bV9zdHJ1Y3QobW0sIHZtYSk7XG4gXHRpZiAoZXJyKVxuZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvbWVtYWxsb2MuYyBiL3NvdW5kL2NvcmUvbWVtYWxsb2MuY1xuaW5kZXggOTMyMDY3MWRmY2M4YjAuLjViYzdlNTg2YjQzMGY1IDEwMDY0NFxuLS0tIGEvc291bmQvY29yZS9tZW1hbGxvYy5jXG4rKysgYi9zb3VuZC9jb3JlL21lbWFsbG9jLmNcbkBAIC04NTEsNyArODUxLDcgQEAgc3RhdGljIHZvaWQgc25kX2RtYV9ub25jb2hlcmVudF9mcmVlKHN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqZG1hYilcbiBzdGF0aWMgaW50IHNuZF9kbWFfbm9uY29oZXJlbnRfbW1hcChzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmRtYWIsXG4gXHRcdFx0XHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhKVxuIHtcbi1cdGFyZWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdChhcmVhLVx1MDAzZXZtX2ZsYWdzKTtcbitcdGFyZWEtXHUwMDNldm1fcGFnZV9wcm90ID0gdm1hX2dldF9wYWdlX3Byb3QoYXJlYSk7XG4gXHRyZXR1cm4gZG1hX21tYXBfcGFnZXMoZG1hYi1cdTAwM2VkZXYuZGV2LCBhcmVhLFxuIFx0XHRcdCAgICAgIGFyZWEtXHUwMDNldm1fZW5kIC0gYXJlYS1cdTAwM2V2bV9zdGFydCxcbiBcdFx0XHQgICAgICB2aXJ0X3RvX3BhZ2UoZG1hYi1cdTAwM2VhcmVhKSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcbmluZGV4IDc3M2UyMzMwM2UyNmFmLi42NGYzOGE4MzYxM2U1NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcbkBAIC0yNDUsOCArMjQ1LDEwIEBAIGVudW0ge1xuICNkZWZpbmUgVk1fU1RBQ0tcdElOSVRfVk1fRkxBRyhTVEFDSylcbiAjaWZkZWYgQ09ORklHX1NUQUNLX0dST1dTVVBcbiAjZGVmaW5lIFZNX1NUQUNLX0VBUkxZXHRJTklUX1ZNX0ZMQUcoU1RBQ0tfRUFSTFkpXG4rI2RlZmluZSBWTUFfU1RBQ0tfRUFSTFkgbWtfdm1hX2ZsYWdzKFZNQV9TVEFDS19FQVJMWV9CSVQpXG4gI2Vsc2VcbiAjZGVmaW5lIFZNX1NUQUNLX0VBUkxZXHRWTV9OT05FXG4rI2RlZmluZSBWTUFfU1RBQ0tfRUFSTFkgRU1QVFlfVk1BX0ZMQUdTXG4gI2VuZGlmXG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19QS0VZU1xuICNkZWZpbmUgVk1fUEtFWV9TSElGVCAoKF9fZm9yY2UgaW50KVZNQV9ISUdIX0FSQ0hfMF9CSVQpXG5AQCAtMzE1LDYgKzMxNyw4IEBAIGVudW0ge1xuIFxuIC8qIEJpdHMgc2V0IGluIHRoZSBWTUEgdW50aWwgdGhlIHN0YWNrIGlzIGluIGl0cyBmaW5hbCBsb2NhdGlvbiAqL1xuICNkZWZpbmUgVk1fU1RBQ0tfSU5DT01QTEVURV9TRVRVUCAoVk1fUkFORF9SRUFEIHwgVk1fU0VRX1JFQUQgfCBWTV9TVEFDS19FQVJMWSlcbisjZGVmaW5lIFZNQV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQIGFwcGVuZF92bWFfZmxhZ3MoXHRcdFxcXG4rXHRWTUFfU1RBQ0tfRUFSTFksIFZNQV9SQU5EX1JFQURfQklULCBWTUFfU0VRX1JFQURfQklUKVxuIFxuICNkZWZpbmUgVEFTS19FWEVDX0JJVCAoKGN1cnJlbnQtXHUwMDNlcGVyc29uYWxpdHkgXHUwMDI2IFJFQURfSU1QTElFU19FWEVDKSA/IFxcXG4gXHRcdCAgICAgICBWTV9FWEVDX0JJVCA6IFZNX1JFQURfQklUKVxuQEAgLTE0MjQsMjAgKzE0MjgsMTggQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfaXRlcl9uZXh0X3JhbmdlKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSlcbiB9XG4gXG4gYm9vbCB2bWFfd2FudHNfd3JpdGVub3RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBncHJvdF90IHZtX3BhZ2VfcHJvdCk7XG4rc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfcGdwcm90X21vZGlmeShwZ3Byb3RfdCBvbGRwcm90LCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpO1xuIFxuIC8qIFVwZGF0ZSB2bWEtXHUwMDNldm1fcGFnZV9wcm90IHRvIHJlZmxlY3Qgdm1hLVx1MDAzZXZtX2ZsYWdzLiAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfc2V0X3BhZ2VfcHJvdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hLVx1MDAzZXZtX2ZsYWdzO1xuK1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gdm1hLVx1MDAzZWZsYWdzO1xuIFx0cGdwcm90X3Qgdm1fcGFnZV9wcm90O1xuIFxuLVx0LyogdGVzdGluZzogd2UgaW5saW5lIHZtX3BncHJvdF9tb2RpZnkoKSB0byBhdm9pZCBjbGFzaCB3aXRoIHZtYS5oLiAqL1xuLVx0dm1fcGFnZV9wcm90ID0gcGdwcm90X21vZGlmeSh2bWEtXHUwMDNldm1fcGFnZV9wcm90LCB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzKSk7XG4tXG4rXHR2bV9wYWdlX3Byb3QgPSB2bWFfcGdwcm90X21vZGlmeSh2bWEtXHUwMDNldm1fcGFnZV9wcm90LCB2bWFfZmxhZ3MpO1xuIFx0aWYgKHZtYV93YW50c193cml0ZW5vdGlmeSh2bWEsIHZtX3BhZ2VfcHJvdCkpIHtcbi1cdFx0dm1fZmxhZ3MgXHUwMDI2PSB+Vk1fU0hBUkVEO1xuLVx0XHQvKiB0ZXN0aW5nOiB3ZSBpbmxpbmUgdm1fcGdwcm90X21vZGlmeSgpIHRvIGF2b2lkIGNsYXNoIHdpdGggdm1hLmguICovXG4tXHRcdHZtX3BhZ2VfcHJvdCA9IHBncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzKSk7XG4rXHRcdHZtYV9mbGFnc19jbGVhcihcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKTtcbitcdFx0dm1fcGFnZV9wcm90ID0gdm1hX3BncHJvdF9tb2RpZnkodm1fcGFnZV9wcm90LCB2bWFfZmxhZ3MpO1xuIFx0fVxuIFx0LyogcmVtb3ZlX3Byb3RlY3Rpb25fcHRlcyByZWFkcyB2bWEtXHUwMDNldm1fcGFnZV9wcm90IHdpdGhvdXQgbW1hcF9sb2NrICovXG4gXHRXUklURV9PTkNFKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QsIHZtX3BhZ2VfcHJvdCk7XG5AQCAtMTU0Nyw3ICsxNTQ5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZ2V0X3N5c2N0bF9tYXhfbWFwX2NvdW50KHZvaWQpXG4gI2RlZmluZSBwZ3RhYmxlX3N1cHBvcnRzX3NvZnRfZGlydHkoKVx0SVNfRU5BQkxFRChDT05GSUdfTUVNX1NPRlRfRElSVFkpXG4gI2VuZGlmXG4gXG4tc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4rc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcbiB7XG4gXHRjb25zdCB2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpO1xuIFxuQEAgLTE1NzUsMyArMTU3Nyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X2Nhbl9tb2RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRpZiAodm1hX2lzX2F0dGFjaGVkKHZtYSkpXG4gXHRcdHZtYV9hc3NlcnRfd3JpdGVfbG9ja2VkKHZtYSk7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2dldF9wYWdlX3Byb3QoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4re1xuK1x0cmV0dXJuIHZtYV9mbGFnc190b19wYWdlX3Byb3Qodm1hLVx1MDAzZWZsYWdzKTtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMDoxNDozNy43OTk2OTQ5MDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDEwNTM5NjYwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBsYW46IHZtYV9mbGFnc190IFRyYW5zaXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgc3Vic3RhbnRpYWwgcGF0Y2ggaGVyZSwgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgVk1BIGZsYWdzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsLiBUaGUga2V5IHNoaWZ0IGlzIGZyb20gdGhlIHN0YW5kYXJkIGB2bV9mbGFnc190YCB0byBhIG5ldyBgdm1hX2ZsYWdzX3RgIHR5cGUsIHdoaWNoLCBiYXNlZCBvbiB0aGUgcHJlc2VuY2Ugb2YgaGVscGVyIGZ1bmN0aW9ucyBsaWtlIGB2bWFfZmxhZ3NfdGVzdGAgYW5kIHJlbGF0ZWQgc3RydWN0cy91bmlvbnMsIHNlZW1zIHRvIGJlIGEgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlIHRoYW4gYSBzaW1wbGUgYHVuc2lnbmVkIGxvbmdgLiBUaGlzIGNoYW5nZSB0b3VjaGVzIGEgdmFzdCBudW1iZXIgb2YgZmlsZXMsIGVzc2VudGlhbGx5IHJlcGxhY2luZyBgdm1hLVx1MDAzZXZtX2ZsYWdzYCB3aXRoIGB2bWEtXHUwMDNlZmxhZ3NgIGFjcm9zcyB0aGUgYm9hcmQgYW5kIGludHJvZHVjaW5nIHNldmVyYWwgbmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIGZsYWcgbWFuaXB1bGF0aW9uLiBDcnVjaWFsbHksIHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5IGFjcm9zcyB0aGUgYm9hcmQsIHdoaWNoIG1ha2VzIGl0IGEgdmVyeSBoaWdoLXZhbHVlIHRhcmdldCBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBoZXJlIHdpbGwgYmUgb24gcGlucG9pbnRpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBtb3N0IGltcGFjdGVkIGJ5IHRoZSByZWZhY3RvcmluZywgcGF5aW5nIHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIHRob3NlIHJlbGF0ZWQgdG8gYGRvX21tYXBgLCBgbW1hcF9yZWdpb25gLCBgbWxvY2tgLCBgbXByb3RlY3RgLCBhbmQgYG1yZW1hcGAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGZ1enppbmcgdGFyZ2V0cyBhcmUgcmVwcmVzZW50YXRpdmUgYW5kIHRoYXQgSSBkb24ndCBvdmVybG9vayBjcml0aWNhbCBwYXRocy4gU2luY2UgaXQncyBhIGhvdC1wYXRoIGZ1bmN0aW9uIGxpc3QsIEknbGwgcGF5IGF0dGVudGlvbiB0byBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgdG9vbCBhdXRob3IuIFRoZSBwcm9tcHQgd2FudHMgbWUgdG8gYXZvaWQgaG90IHBhdGggZnVuY3Rpb25zLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgY2hhbmdlcyB3aXRoaW4gc3BlY2lmaWMgZmlsZXMgYW5kIGZ1bmN0aW9uczpcblxuKiAgICoqYG1tL21tYXAuY2AqKjogV2UgbmVlZCB0byBleGFtaW5lIGBtbWFwX3JlZ2lvbmAuXG4qICAgKipgbW0vbXByb3RlY3QuY2AqKjogSW52ZXN0aWdhdGUgYG1wcm90ZWN0X2ZpeHVwYCBhbmQgYGRvX21wcm90ZWN0X3BrZXlgLlxuKiAgICoqYG1tL21yZW1hcC5jYCoqOiBMb29rIGF0IGB2cm1fY2FsY19jaGFyZ2VgLCBgdW5tYXBfc291cmNlX3ZtYWAsIGBjaGVja19wcmVwX3ZtYWAuXG4qICAgKipgbW0vbWxvY2suY2AqKjogQ2hlY2sgYG1sb2NrX2ZpeHVwYCwgYGFwcGx5X3ZtYV9sb2NrX2ZsYWdzYCwgYGFwcGx5X21sb2NrYWxsX2ZsYWdzYC5cbiogICAqKmBtbS92bWEuY2AqKjogVmVyaWZ5IHRoZSBtb2RpZmljYXRpb25zIGluIGBtbWFwX3JlZ2lvbmAuXG4qICAgKipgbW0vdm1hX2V4ZWMuY2AqKjogQ29uZmlybSB0aGUgY2hhbmdlcyBpbiBgY3JlYXRlX2luaXRfc3RhY2tfdm1hYC5cbiogICAqKmBtbS9odWdlX21lbW9yeS5jYCoqOiBDaGVjayBgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzYC5cbiogICAqKmBtbS9tZW1mZC5jYCoqOiBDaGVjayBgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcGAuXG5cbkdpdmVuIHRoYXQgYGRvX21tYXBgIGFuZCBgbW1hcF9yZWdpb25gIGFyZSBob3QgcGF0aHMsIEkgbmVlZCB0byBmb2N1cyBvbiBsZXNzIGdlbmVyaWMgZW50cnlwb2ludHMuIEZ1bmN0aW9ucyBsaWtlIGBtbG9ja19maXh1cGAsIGBhcHBseV92bWFfbG9ja19mbGFnc2AsIGBhcHBseV9tbG9ja2FsbF9mbGFnc2AsIGB1bm1hcF9zb3VyY2Vfdm1hYCwgYGNoZWNrX3ByZXBfdm1hYCwgYGNyZWF0ZV9pbml0X3N0YWNrX3ZtYWAsIGFuZCBgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcGAgc2hvdWxkIGJlIGxlc3MgZnJlcXVlbnQgYW5kIGNhbiBzdGlsbCBiZSBmdXp6ZWQgZWZmZWN0aXZlbHkuIEkgd2lsbCBhbHNvIGluY2x1ZGUgYGRvX21wcm90ZWN0X3BrZXlgIHNpbmNlIHRoZSBlbnRyeSBwb2ludCB3YXMgbW9kaWZpZWQuXG5cblRoZXJlIGRvbid0IHNlZW0gdG8gYmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCBzaW5jZSB0aGlzIGlzIGEgY29yZSBNTSBjaGFuZ2UuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGZvciBgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzYCBhbmQgYENPTkZJR19NRU1GRF9DUkVBVEVgIGZvciBgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcGAgYXJlIHJlbGF0ZWQgYnV0IGxpa2VseSB0byBhbHJlYWR5IGJlIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxuVGh1cywgbXkgcHJvcG9zZWQgYHNldC1yZXN1bHRzYCBjYWxsIHdpbGwgaGF2ZTpcblxuKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgXG4qICAgYEZvY3VzU3ltYm9sc2A6XG4gICAgKiAgIGBtbG9ja19maXh1cGBcbiAgICAqICAgYGFwcGx5X3ZtYV9sb2NrX2ZsYWdzYFxuICAgICogICBgYXBwbHlfbWxvY2thbGxfZmxhZ3NgXG4gICAgKiAgIGB1bm1hcF9zb3VyY2Vfdm1hYFxuICAgICogICBgY2hlY2tfcHJlcF92bWFgXG4gICAgKiAgIGBtZW1mZF9jaGVja19zZWFsc19tbWFwYFxuICAgICogICBgY3JlYXRlX2luaXRfc3RhY2tfdm1hYFxuICAgICogICBgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzYFxuICAgICogICBgZG9fbXByb3RlY3RfcGtleWBcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWBcblxuSSBoYXZlIGFsc28gdmVyaWZpZWQgdGhhdCBtb3N0IG9mIHRoZSBsaXN0ZWQgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIGJ1dCBTeXprYWxsZXIgY2FuIHN0aWxsIGZ1enogc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5IGFyZSBpbiB0aGUgc3ltYm9sIHRhYmxlICh3aGljaCB0aGV5IGFyZSkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0Nzc0LCJPdXRwdXRUb2tlbnMiOjIzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMDoxNDo1Ny45MDUwOTM1NzFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWxvY2tfZml4dXBcIixcbiAgICBcImFwcGx5X3ZtYV9sb2NrX2ZsYWdzXCIsXG4gICAgXCJhcHBseV9tbG9ja2FsbF9mbGFnc1wiLFxuICAgIFwidW5tYXBfc291cmNlX3ZtYVwiLFxuICAgIFwiY2hlY2tfcHJlcF92bWFcIixcbiAgICBcIm1lbWZkX2NoZWNrX3NlYWxzX21tYXBcIixcbiAgICBcImNyZWF0ZV9pbml0X3N0YWNrX3ZtYVwiLFxuICAgIFwidGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1ham9yIHJlZmFjdG9yaW5nIG9mIFZNQSBmbGFncyBoYW5kbGluZyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHRyYW5zaXRpb25pbmcgZnJvbSBgdm1fZmxhZ3NfdGAgdG8gYHZtYV9mbGFnc190YC4gSXQgbW9kaWZpZXMgY3JpdGljYWwgcGF0aHMgaW4gbW1hcCwgbXJlbWFwLCBtbG9jaywgYW5kIG1wcm90ZWN0LiBUaGVzZSBjaGFuZ2VzIGZ1bmN0aW9uYWxseSBhbHRlciBob3cgVk1BIGZsYWdzIGFyZSBzZXQsIGNsZWFyZWQsIGFuZCB0ZXN0ZWQsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2UgaW5jb3JyZWN0IG1lbW9yeSBwcm90ZWN0aW9ucywgYWNjb3VudGluZyBlcnJvcnMsIG9yIGxvY2tpbmcgaXNzdWVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZXNlIGZsYWdzLCBhdm9pZGluZyB0aGUgYWJzb2x1dGUgaG90dGVzdCBwYXRocyBsaWtlIGBkb19tbWFwYCB0byBwcmV2ZW50IHNrZXdlZCBkaXN0cmlidXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1sb2NrX2ZpeHVwXCIsXG4gICAgXCJhcHBseV92bWFfbG9ja19mbGFnc1wiLFxuICAgIFwiYXBwbHlfbWxvY2thbGxfZmxhZ3NcIixcbiAgICBcInVubWFwX3NvdXJjZV92bWFcIixcbiAgICBcImNoZWNrX3ByZXBfdm1hXCIsXG4gICAgXCJtZW1mZF9jaGVja19zZWFsc19tbWFwXCIsXG4gICAgXCJjcmVhdGVfaW5pdF9zdGFja192bWFcIixcbiAgICBcInRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtYWpvciByZWZhY3RvcmluZyBvZiBWTUEgZmxhZ3MgaGFuZGxpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCB0cmFuc2l0aW9uaW5nIGZyb20gYHZtX2ZsYWdzX3RgIHRvIGB2bWFfZmxhZ3NfdGAuIEl0IG1vZGlmaWVzIGNyaXRpY2FsIHBhdGhzIGluIG1tYXAsIG1yZW1hcCwgbWxvY2ssIGFuZCBtcHJvdGVjdC4gVGhlc2UgY2hhbmdlcyBmdW5jdGlvbmFsbHkgYWx0ZXIgaG93IFZNQSBmbGFncyBhcmUgc2V0LCBjbGVhcmVkLCBhbmQgdGVzdGVkLCB3aGljaCBjb3VsZCBpbnRyb2R1Y2UgYnVncyBsaWtlIGluY29ycmVjdCBtZW1vcnkgcHJvdGVjdGlvbnMsIGFjY291bnRpbmcgZXJyb3JzLCBvciBsb2NraW5nIGlzc3Vlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGVzZSBmbGFncywgYXZvaWRpbmcgdGhlIGFic29sdXRlIGhvdHRlc3QgcGF0aHMgbGlrZSBgZG9fbW1hcGAgdG8gcHJldmVudCBza2V3ZWQgZGlzdHJpYnV0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmd5j2[1] Phase: Succeeded StartedAt: 2026-07-12 10:15:10 +0000 UTC FinishedAt: 2026-07-12 10:15:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd5j2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-12 10:15:10 +0000 UTC FinishedAt: 2026-07-12 10:15:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd5j2[2] Phase: Running StartedAt: 2026-07-12 10:15:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd5j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mlock_fixup","apply_vma_lock_flags","apply_mlockall_flags","unmap_source_vma","check_prep_vma","memfd_check_seals_mmap","create_init_stack_vma","thp_get_unmapped_area_vmaflags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-07-12 10:15:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mlock_fixup","apply_vma_lock_flags","apply_mlockall_flags","unmap_source_vma","check_prep_vma","memfd_check_seals_mmap","create_init_stack_vma","thp_get_unmapped_area_vmaflags"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmd5j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mlock_fixup","apply_vma_lock_flags","apply_mlockall_flags","unmap_source_vma","check_prep_vma","memfd_check_seals_mmap","create_init_stack_vma","thp_get_unmapped_area_vmaflags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-12 10:15:10 +0000 UTC FinishedAt: 2026-07-12 10:15:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd5j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mlock_fixup","apply_vma_lock_flags","apply_mlockall_flags","unmap_source_vma","check_prep_vma","memfd_check_seals_mmap","create_init_stack_vma","thp_get_unmapped_area_vmaflags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-12 10:15:10 +0000 UTC FinishedAt: 2026-07-12 10:15:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmd5j2/series-workflowmd5j2-convert-artifact-2506497383/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmd5j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mlock_fixup","apply_vma_lock_flags","apply_mlockall_flags","unmap_source_vma","check_prep_vma","memfd_check_seals_mmap","create_init_stack_vma","thp_get_unmapped_area_vmaflags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-12 10:15:20 +0000 UTC FinishedAt: 2026-07-12 10:52:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd5j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mlock_fixup","apply_vma_lock_flags","apply_mlockall_flags","unmap_source_vma","check_prep_vma","memfd_check_seals_mmap","create_init_stack_vma","thp_get_unmapped_area_vmaflags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-12 10:15:20 +0000 UTC FinishedAt: 2026-07-12 10:52:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cc29085f-25f5-41e5-ae28-1eca86f4db7e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmd5j2/series-workflowmd5j2-convert-artifact-2506497383/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "07c17bb9-8532-4815-88c5-8e4e1987334c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmd5j2/series-workflowmd5j2-build-action-2485195773/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmd5j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mlock_fixup","apply_vma_lock_flags","apply_mlockall_flags","unmap_source_vma","check_prep_vma","memfd_check_seals_mmap","create_init_stack_vma","thp_get_unmapped_area_vmaflags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-12 10:15:20 +0000 UTC FinishedAt: 2026-07-12 10:52:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cc29085f-25f5-41e5-ae28-1eca86f4db7e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmd5j2/series-workflowmd5j2-convert-artifact-2506497383/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "07c17bb9-8532-4815-88c5-8e4e1987334c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmd5j2/series-workflowmd5j2-build-action-2485195773/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmd5j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mlock_fixup","apply_vma_lock_flags","apply_mlockall_flags","unmap_source_vma","check_prep_vma","memfd_check_seals_mmap","create_init_stack_vma","thp_get_unmapped_area_vmaflags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-12 10:52:15 +0000 UTC FinishedAt: 2026-07-12 10:52:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd5j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mlock_fixup","apply_vma_lock_flags","apply_mlockall_flags","unmap_source_vma","check_prep_vma","memfd_check_seals_mmap","create_init_stack_vma","thp_get_unmapped_area_vmaflags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-12 10:52:15 +0000 UTC FinishedAt: 2026-07-12 10:52:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd5j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mlock_fixup","apply_vma_lock_flags","apply_mlockall_flags","unmap_source_vma","check_prep_vma","memfd_check_seals_mmap","create_init_stack_vma","thp_get_unmapped_area_vmaflags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-12 10:52:15 +0000 UTC FinishedAt: 2026-07-12 10:52:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd5j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mlock_fixup","apply_vma_lock_flags","apply_mlockall_flags","unmap_source_vma","check_prep_vma","memfd_check_seals_mmap","create_init_stack_vma","thp_get_unmapped_area_vmaflags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-12 10:52:15 +0000 UTC FinishedAt: 2026-07-12 10:52:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmd5j2/series-workflowmd5j2-convert-artifact-1514663190/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmd5j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mlock_fixup","apply_vma_lock_flags","apply_mlockall_flags","unmap_source_vma","check_prep_vma","memfd_check_seals_mmap","create_init_stack_vma","thp_get_unmapped_area_vmaflags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-12 10:52:25 +0000 UTC FinishedAt: 2026-07-12 10:54:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd5j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mlock_fixup","apply_vma_lock_flags","apply_mlockall_flags","unmap_source_vma","check_prep_vma","memfd_check_seals_mmap","create_init_stack_vma","thp_get_unmapped_area_vmaflags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-12 10:52:25 +0000 UTC FinishedAt: 2026-07-12 10:54:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*07c17bb9-8532-4815-88c5-8e4e1987334c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmd5j2/series-workflowmd5j2-build-action-2485195773/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmd5j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mlock_fixup","apply_vma_lock_flags","apply_mlockall_flags","unmap_source_vma","check_prep_vma","memfd_check_seals_mmap","create_init_stack_vma","thp_get_unmapped_area_vmaflags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-12 10:54:38 +0000 UTC FinishedAt: 2026-07-12 10:54:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd5j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mlock_fixup","apply_vma_lock_flags","apply_mlockall_flags","unmap_source_vma","check_prep_vma","memfd_check_seals_mmap","create_init_stack_vma","thp_get_unmapped_area_vmaflags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-12 10:54:38 +0000 UTC FinishedAt: 2026-07-12 10:54:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd5j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mlock_fixup","apply_vma_lock_flags","apply_mlockall_flags","unmap_source_vma","check_prep_vma","memfd_check_seals_mmap","create_init_stack_vma","thp_get_unmapped_area_vmaflags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Running StartedAt: 2026-07-12 10:54:38 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd5j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mlock_fixup","apply_vma_lock_flags","apply_mlockall_flags","unmap_source_vma","check_prep_vma","memfd_check_seals_mmap","create_init_stack_vma","thp_get_unmapped_area_vmaflags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Running StartedAt: 2026-07-12 10:54:38 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cc29085f-25f5-41e5-ae28-1eca86f4db7e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmd5j2/series-workflowmd5j2-convert-artifact-1514663190/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmd5j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mlock_fixup","apply_vma_lock_flags","apply_mlockall_flags","unmap_source_vma","check_prep_vma","memfd_check_seals_mmap","create_init_stack_vma","thp_get_unmapped_area_vmaflags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"61cccb8363fcc282d4ae0555b8739dd227f5ad0b","config_name":"upstream-apparmor-kasan.config","series_id":"849f86aa-76b3-4682-ab99-bed8cf748297","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Running StartedAt: 2026-07-12 10:54:38 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cc29085f-25f5-41e5-ae28-1eca86f4db7e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmd5j2/series-workflowmd5j2-convert-artifact-1514663190/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}