Name: series-workflowjcb7n Phase: Succeeded StartedAt: 2026-07-06 08:49:41 +0000 UTC FinishedAt: 2026-07-06 13:27:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[0] Phase: Succeeded StartedAt: 2026-07-06 08:49:41 +0000 UTC FinishedAt: 2026-07-06 09:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[0].run-triage Phase: Succeeded StartedAt: 2026-07-06 08:49:41 +0000 UTC FinishedAt: 2026-07-06 09:10:03 +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": "c6b0b9701fcef71ed7cabc0358bb18e15e8e8329", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLB_PAGE" ], "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": "c6b0b9701fcef71ed7cabc0358bb18e15e8e8329", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLB_PAGE" ], "series_id": "295c283a-461d-4d2f-b4dd-121fc94c8a92" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vmap", "vmap_pages_range_batched", "vmap_get_aligned_vm_area", "vmap_pages_range_noflush_walk", "__vmap_pages_range_noflush" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA5OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXAmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkJiMzNDssCiAgICAmIzM0O3ZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayYjMzQ7LAogICAgJiMzNDtfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGJhdGNoZWQgY29udGlndW91cyBtYXBwaW5ncyBhdCB0aGUgUFRFIGxldmVsIGZvciB2bWFwLCBtb2RpZnlpbmcgY29yZSB2aXJ0dWFsIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA5OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjM0Nzk4MjEwYzQyMDk4NzFkMjIxMWUyMTUxNjA2ZTljMWVmM2RiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMDk6MDk6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaFxuaW5kZXggNGVjMWFjZDNjMWIzNDguLjdkOWM3ZGM3OTVjNDJjIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oXG5AQCAtMjMsNiAmIzQzOzIzLDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUodW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kLCB1NjQgcGZuLFxuIFx0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdClcbiB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzaXplO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBJZiB0aGUgYmxvY2sgaXMgYXQgbGVhc3QgQ09OVF9QVEVfU0laRSBpbiBzaXplLCBhbmQgaXMgbmF0dXJhbGx5XG4gXHQgKiBhbGlnbmVkIGluIGJvdGggdmlydHVhbCBhbmQgcGh5c2ljYWwgc3BhY2UsIHRoZW4gd2UgY2FuIHB0ZS1tYXAgdGhlXG5AQCAtNDAsNyAmIzQzOzQyLDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUodW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0aWYgKCFJU19BTElHTkVEKFBGTl9QSFlTKHBmbiksIENPTlRfUFRFX1NJWkUpKVxuIFx0XHRyZXR1cm4gUEFHRV9TSVpFO1xuIFxuLVx0cmV0dXJuIENPTlRfUFRFX1NJWkU7XG4mIzQzO1x0c2l6ZSA9IG1pbjMoZW5kIC0gYWRkciwgMVVMIFx1MDAzY1x1MDAzYyBtYXhfcGFnZV9zaGlmdCwgUE1EX1NJWkUgXHUwMDNlXHUwMDNlIDEpO1xuJiM0MztcdHNpemUgPSByb3VuZGRvd25fcG93X29mX3R3byhzaXplKTtcbiYjNDM7XHRyZXR1cm4gc2l6ZTtcbiB9XG4gXG4gI2RlZmluZSBhcmNoX3ZtYXBfcHRlX3JhbmdlX3VubWFwX3NpemUgYXJjaF92bWFwX3B0ZV9yYW5nZV91bm1hcF9zaXplXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jXG5pbmRleCAzMDc3MmE5MDlhZWEzZS4uZDYwMGE2ZDc1MWUyOTUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xuQEAgLTExMCw2ICYjNDM7MTEwLDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IG51bV9jb250aWdfcHRlcyh1bnNpZ25lZCBsb25nIHNpemUsIHNpemVfdCAqcGdzaXplKVxuIFx0XHRjb250aWdfcHRlcyA9IENPTlRfUFRFUztcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuJiM0MztcdFx0aWYgKHNpemUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDNjIFBNRF9TSVpFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdElTX0FMSUdORUQoc2l6ZSwgQ09OVF9QVEVfU0laRSkpIHtcbiYjNDM7XHRcdFx0KnBnc2l6ZSA9IFBBR0VfU0laRTtcbiYjNDM7XHRcdFx0Y29udGlnX3B0ZXMgPSBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiBcdFx0V0FSTl9PTighX19odWdldGxiX3ZhbGlkX3NpemUoc2l6ZSkpO1xuIFx0fVxuIFxuQEAgLTM1OSw2ICYjNDM7MzY1LDEwIEBAIHB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKVxuIFx0Y2FzZSBDT05UX1BURV9TSVpFOlxuIFx0XHRyZXR1cm4gcHRlX21rY29udChlbnRyeSk7XG4gXHRkZWZhdWx0OlxuJiM0MztcdFx0aWYgKHBhZ2VzaXplIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBwYWdlc2l6ZSBcdTAwM2MgUE1EX1NJWkUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0SVNfQUxJR05FRChwYWdlc2l6ZSwgQ09OVF9QVEVfU0laRSkpXG4mIzQzO1x0XHRcdHJldHVybiBwdGVfbWtjb250KGVudHJ5KTtcbiYjNDM7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFx0cHJfd2FybihcJiMzNDslczogdW5yZWNvZ25pemVkIGh1Z2UgcGFnZSBzaXplIDB4JWx4XFxuXCYjMzQ7LFxuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xuaW5kZXggMTJmNGEzOWZkZDBiM2UuLmEwODg2ODBjMzlmYzEyIDEwMDY0NFxuLS0tIGEvbW0vdm1hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmNcbkBAIC05MSw2ICYjNDM7OTEsMzMgQEAgc3RydWN0IHZmcmVlX2RlZmVycmVkIHtcbiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHZmcmVlX2RlZmVycmVkLCB2ZnJlZV9kZWZlcnJlZCk7XG4gXG4gLyoqKiBQYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgKioqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVHJ5IGNvbnRpZ3VvdXMgbWFwcGluZ3MgYXQgdGhlIFBURSBsZXZlbCBmb3IgYXJjaGVzIHdoaWNoIHN1cHBvcnQgdGhlbSwgYW5kIGlmXG4mIzQzOyAqIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyLiBGYWxsIGJhY2sgdG8gUEFHRV9TSVpFIG1hcHBpbmdzIG90aGVyd2lzZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBtYXBwaW5nIHNpemUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hcF9zZXRfcHRlcyhwdGVfdCAqcHRlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgdTY0IHBmbixcbiYjNDM7XHRcdHBncHJvdF90IHByb3QsIHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdClcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbiYjNDM7XG4mIzQzO1x0c2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUoYWRkciwgZW5kLCBwZm4sIG1heF9wYWdlX3NoaWZ0KTtcbiYjNDM7XHRpZiAoc2l6ZSAhPSBQQUdFX1NJWkUpIHtcbiYjNDM7XHRcdHB0ZV90IGVudHJ5ID0gcGZuX3B0ZShwZm4sIHByb3QpO1xuJiM0MztcbiYjNDM7XHRcdGVudHJ5ID0gYXJjaF9tYWtlX2h1Z2VfcHRlKGVudHJ5LCBpbG9nMihzaXplKSwgMCk7XG4mIzQzO1x0XHRzZXRfaHVnZV9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSwgc2l6ZSk7XG4mIzQzO1x0XHRyZXR1cm4gc2l6ZTtcbiYjNDM7XHR9XG4mIzQzOyNlbmRpZlxuJiM0MztcdHNldF9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBwZm5fcHRlKHBmbiwgcHJvdCkpO1xuJiM0MztcdHJldHVybiBQQUdFX1NJWkU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCxcbiBcdFx0XHR1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQsIHBndGJsX21vZF9tYXNrICptYXNrKVxuQEAgLTk4LDcgJiM0MzsxMjUsOCBAQCBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRwdGVfdCAqcHRlO1xuIFx0dTY0IHBmbjtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0dW5zaWduZWQgbG9uZyBzaXplID0gUEFHRV9TSVpFO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3RlcHM7XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFQQUdFX0FMSUdORUQoZW5kIC0gYWRkcikpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xMTksMjAgJiM0MzsxNDcsOSBAQCBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0QlVHKCk7XG4gXHRcdH1cbiBcbi0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuLVx0XHRzaXplID0gYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZShhZGRyLCBlbmQsIHBmbiwgbWF4X3BhZ2Vfc2hpZnQpO1xuLVx0XHRpZiAoc2l6ZSAhPSBQQUdFX1NJWkUpIHtcbi1cdFx0XHRwdGVfdCBlbnRyeSA9IHBmbl9wdGUocGZuLCBwcm90KTtcbi1cbi1cdFx0XHRlbnRyeSA9IGFyY2hfbWFrZV9odWdlX3B0ZShlbnRyeSwgaWxvZzIoc2l6ZSksIDApO1xuLVx0XHRcdHNldF9odWdlX3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5LCBzaXplKTtcbi1cdFx0XHRwZm4gJiM0Mzs9IFBGTl9ET1dOKHNpemUpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tI2VuZGlmXG4tXHRcdHNldF9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBwZm5fcHRlKHBmbiwgcHJvdCkpO1xuLVx0XHRwZm4mIzQzOyYjNDM7O1xuLVx0fSB3aGlsZSAocHRlICYjNDM7PSBQRk5fRE9XTihzaXplKSwgYWRkciAmIzQzOz0gc2l6ZSwgYWRkciAhPSBlbmQpO1xuJiM0MztcdFx0c2l6ZSA9IHZtYXBfc2V0X3B0ZXMocHRlLCBhZGRyLCBlbmQsIHBmbiwgcHJvdCwgbWF4X3BhZ2Vfc2hpZnQpO1xuJiM0MztcdFx0c3RlcHMgPSBQRk5fRE9XTihzaXplKTtcbiYjNDM7XHR9IHdoaWxlIChwdGUgJiM0Mzs9IHN0ZXBzLCBwZm4gJiM0Mzs9IHN0ZXBzLCBhZGRyICYjNDM7PSBzaXplLCBhZGRyICE9IGVuZCk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcdCptYXNrIHw9IFBHVEJMX1BURV9NT0RJRklFRDtcbkBAIC01MjQsOCAmIzQzOzU0MSwxMCBAQCB2b2lkIHZ1bm1hcF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucixcbi1cdFx0cGd0YmxfbW9kX21hc2sgKm1hc2spXG4mIzQzO1x0XHRwZ3RibF9tb2RfbWFzayAqbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0KVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBmbiwgc2l6ZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3RlcHM7XG4gXHRpbnQgZXJyID0gMDtcbiBcdHB0ZV90ICpwdGU7XG4gXG5AQCAtNTU2LDkgJiM0Mzs1NzUsMTAgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0c2V0X3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIG1rX3B0ZShwYWdlLCBwcm90KSk7XG4tXHRcdCgqbnIpJiM0MzsmIzQzOztcbi1cdH0gd2hpbGUgKHB0ZSYjNDM7JiM0MzssIGFkZHIgJiM0Mzs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpO1xuJiM0MztcdFx0cGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4mIzQzO1x0XHRzaXplID0gdm1hcF9zZXRfcHRlcyhwdGUsIGFkZHIsIGVuZCwgcGZuLCBwcm90LCBzaGlmdCk7XG4mIzQzO1x0XHRzdGVwcyA9IFBGTl9ET1dOKHNpemUpO1xuJiM0MztcdH0gd2hpbGUgKHB0ZSAmIzQzOz0gc3RlcHMsICpuciAmIzQzOz0gc3RlcHMsIGFkZHIgJiM0Mzs9IHNpemUsIGFkZHIgIT0gZW5kKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0Km1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEO1xuQEAgLTU2OCw3ICYjNDM7NTg4LDcgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXG4gc3RhdGljIGludCB2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLFxuLVx0XHRwZ3RibF9tb2RfbWFzayAqbWFzaylcbiYjNDM7XHRcdHBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpXG4ge1xuIFx0cG1kX3QgKnBtZDtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbkBAIC01NzgsNyAmIzQzOzU5OCwyNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbi1cdFx0aWYgKHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrKSlcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2hpZnQgXHUwMDNlPSBQTURfU0hJRlQpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1sqbnJdO1xuJiM0MztcdFx0XHRwaHlzX2FkZHJfdCBwaHlzX2FkZHI7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoV0FSTl9PTighcGFnZSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRcdGlmIChXQVJOX09OKCFwZm5fdmFsaWQocGFnZV90b19wZm4ocGFnZSkpKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRcdHBoeXNfYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh2bWFwX3RyeV9odWdlX3BtZChwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgcHJvdCxcbiYjNDM7XHRcdFx0XHRcdFx0c2hpZnQpKSB7XG4mIzQzO1x0XHRcdFx0Km1hc2sgfD0gUEdUQkxfUE1EX01PRElGSUVEO1xuJiM0MztcdFx0XHRcdCpuciAmIzQzOz0gMSBcdTAwM2NcdTAwM2MgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpO1xuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrLCBzaGlmdCkpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9IHdoaWxlIChwbWQmIzQzOyYjNDM7LCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNTg2LDcgJiM0Mzs2MjYsNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcbiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0dW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsXG4tXHRcdHBndGJsX21vZF9tYXNrICptYXNrKVxuJiM0MztcdFx0cGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdClcbiB7XG4gXHRwdWRfdCAqcHVkO1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuQEAgLTU5Niw3ICYjNDM7NjM2LDcgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4tXHRcdGlmICh2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaykpXG4mIzQzO1x0XHRpZiAodm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KSlcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH0gd2hpbGUgKHB1ZCYjNDM7JiM0MzssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XG4gXHRyZXR1cm4gMDtcbkBAIC02MDQsNyAmIzQzOzY0NCw3IEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucixcbi1cdFx0cGd0YmxfbW9kX21hc2sgKm1hc2spXG4mIzQzO1x0XHRwZ3RibF9tb2RfbWFzayAqbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0KVxuIHtcbiBcdHA0ZF90ICpwNGQ7XG4gXHR1bnNpZ25lZCBsb25nIG5leHQ7XG5AQCAtNjE0LDE0ICYjNDM7NjU0LDE4IEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGRvIHtcbiBcdFx0bmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuLVx0XHRpZiAodm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2spKVxuJiM0MztcdFx0aWYgKHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrLCBzaGlmdCkpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9IHdoaWxlIChwNGQmIzQzOyYjNDM7LCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tXHRcdHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMpXG4mIzQzOy8qXG4mIzQzOyAqIEl0IGNhbiB0YWtlIGFuIGFycmF5IG9mIHBhZ2VzIHdoaWNoIGFyZSBub3QgYWxsIGNvbnRpZ3VvdXMsIGJ1dCBpdFxuJiM0MzsgKiBtYXkgaGF2ZSBjb250aWd1b3VzIGNodW5rcywgYXMgaGludGVkIGJ5IEBzaGlmdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiYjNDM7XHRcdHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBzaGlmdClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcjtcbiBcdHBnZF90ICpwZ2Q7XG5AQCAtNjM2LDcgJiM0Mzs2ODAsNyBAQCBzdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRuZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4gXHRcdGlmIChwZ2RfYmFkKCpwZ2QpKVxuIFx0XHRcdG1hc2sgfD0gUEdUQkxfUEdEX01PRElGSUVEO1xuLVx0XHRlcnIgPSB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2QsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBcdTAwMjZuciwgXHUwMDI2bWFzayk7XG4mIzQzO1x0XHRlcnIgPSB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2QsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBcdTAwMjZuciwgXHUwMDI2bWFzaywgc2hpZnQpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGJyZWFrO1xuIFx0fSB3aGlsZSAocGdkJiM0MzsmIzQzOywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTtcbkBAIC02NTksMjcgJiM0Mzs3MDMsMTIgQEAgc3RhdGljIGludCB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBpbnQgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0cGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IHBhZ2Vfc2hpZnQpXG4ge1xuLVx0dW5zaWduZWQgaW50IGksIG5yID0gKGVuZCAtIGFkZHIpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVxuIFx0V0FSTl9PTihwYWdlX3NoaWZ0IFx1MDAzYyBQQUdFX1NISUZUKTtcbiBcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQykgfHxcbi1cdFx0XHRwYWdlX3NoaWZ0ID09IFBBR0VfU0hJRlQpXG4tXHRcdHJldHVybiB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2goYWRkciwgZW5kLCBwcm90LCBwYWdlcyk7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucjsgaSAmIzQzOz0gMVUgXHUwMDNjXHUwMDNjIChwYWdlX3NoaWZ0IC0gUEFHRV9TSElGVCkpIHtcbi1cdFx0aW50IGVycjtcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MpKVxuJiM0MztcdFx0cGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7XG4gXG4tXHRcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICYjNDM7ICgxVUwgXHUwMDNjXHUwMDNjIHBhZ2Vfc2hpZnQpLFxuLVx0XHRcdFx0XHRwYWdlX3RvX3BoeXMocGFnZXNbaV0pLCBwcm90LFxuLVx0XHRcdFx0XHRwYWdlX3NoaWZ0KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0XHRhZGRyICYjNDM7PSAxVUwgXHUwMDNjXHUwMDNjIHBhZ2Vfc2hpZnQ7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsoYWRkciwgZW5kLCBwcm90LCBwYWdlcywgcGFnZV9zaGlmdCk7XG4gfVxuIFxuIGludCB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbkBAIC0zMjc5LDYgJiM0MzszMzA4LDE0IEBAIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF92bV9hcmVhX2NhbGxlcih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG4gXHRcdFx0XHQgIE5VTUFfTk9fTk9ERSwgR0ZQX0tFUk5FTCwgY2FsbGVyKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIodW5zaWduZWQgbG9uZyBzaXplLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3Qgdm9pZCAqY2FsbGVyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBhbGlnbiwgUEFHRV9TSElGVCwgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcbiYjNDM7XHRcdFx0XHQgIE5VTUFfTk9fTk9ERSwgR0ZQX0tFUk5FTCwgY2FsbGVyKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBmaW5kX3ZtX2FyZWEgLSBmaW5kIGEgY29udGludW91cyBrZXJuZWwgdmlydHVhbCBhcmVhXG4gICogQGFkZHI6XHQgIGJhc2UgYWRkcmVzc1xuQEAgLTM1MTksNiAmIzQzOzM1NTYsMTEzIEBAIHZvaWQgdnVubWFwKGNvbnN0IHZvaWQgKmFkZHIpXG4gfVxuIEVYUE9SVF9TWU1CT0wodnVubWFwKTtcbiBcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdm1fc2hpZnQocGdwcm90X3QgcHJvdCwgdW5zaWduZWQgbG9uZyBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKHByb3QpIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gUE1EX1NJWkUpXG4mIzQzO1x0XHRyZXR1cm4gUE1EX1NISUZUO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYXJjaF92bWFwX3B0ZV9zdXBwb3J0ZWRfc2hpZnQoc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGdldF92bWFwX2JhdGNoX29yZGVyKHN0cnVjdCBwYWdlICoqcGFnZXMsXG4mIzQzO1x0XHRwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3N0ZXBzLCB1bnNpZ25lZCBpbnQgaWR4KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5yX2NvbnRpZztcbiYjNDM7XHRpbnQgb3JkZXI7XG4mIzQzO1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bnJfY29udGlnID0gbnVtX3BhZ2VzX2NvbnRpZ3VvdXMoXHUwMDI2cGFnZXNbaWR4XSwgbWF4X3N0ZXBzKTtcbiYjNDM7XHRpZiAobnJfY29udGlnIFx1MDAzYyAyKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG9yZGVyID0gaWxvZzIobnJfY29udGlnKTtcbiYjNDM7XG4mIzQzO1x0LyogTGltaXQgb3JkZXIgYnkgcGZuIGFsaWdubWVudCAqL1xuJiM0MztcdG9yZGVyID0gbWluX3QoaW50LCBvcmRlciwgX19mZnMocGFnZV90b19wZm4ocGFnZXNbaWR4XSkpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZtX3NoaWZ0KHByb3QsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpID09IFBBR0VfU0hJRlQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG9yZGVyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuJiM0MztcdFx0cGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBjb3VudCA9IChlbmQgLSBhZGRyKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcHJldl9zaGlmdCA9IDAsIGlkeCA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBtYXBfYWRkciA9IGFkZHIsIGJhdGNoX2VuZCA9IGFkZHI7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0ga21zYW5fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMsXG4mIzQzO1x0XHRcdFx0XHRcdFBBR0VfU0hJRlQsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIGNvdW50OyApIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBzaGlmdCA9IFBBR0VfU0hJRlQgJiM0MztcbiYjNDM7XHRcdFx0Z2V0X3ZtYXBfYmF0Y2hfb3JkZXIocGFnZXMsIHByb3QsIGNvdW50IC0gaSwgaSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFpKVxuJiM0MztcdFx0XHRwcmV2X3NoaWZ0ID0gc2hpZnQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNoaWZ0ICE9IHByZXZfc2hpZnQpIHtcbiYjNDM7XHRcdFx0ZXJyID0gdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsobWFwX2FkZHIsIGJhdGNoX2VuZCxcbiYjNDM7XHRcdFx0XHRcdHByb3QsIHBhZ2VzICYjNDM7IGlkeCwgcHJldl9zaGlmdCk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdHByZXZfc2hpZnQgPSBzaGlmdDtcbiYjNDM7XHRcdFx0bWFwX2FkZHIgPSBiYXRjaF9lbmQ7XG4mIzQzO1x0XHRcdGlkeCA9IGk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE9uY2Ugc21hbGwgcGFnZXMgYXJlIGVuY291bnRlcmVkLCB0aGUgcmVtYWluaW5nIHBhZ2VzXG4mIzQzO1x0XHQgKiBhcmUgbGlrZWx5IHNtYWxsIGFzIHdlbGwuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChzaGlmdCA9PSBQQUdFX1NISUZUKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRiYXRjaF9lbmQgJiM0Mzs9IDFVTCBcdTAwM2NcdTAwM2Mgc2hpZnQ7XG4mIzQzO1x0XHRpICYjNDM7PSAxVSBcdTAwM2NcdTAwM2MgKHNoaWZ0IC0gUEFHRV9TSElGVCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBSZW1haW5pbmcgKi9cbiYjNDM7XHRpZiAobWFwX2FkZHIgXHUwMDNjIGVuZClcbiYjNDM7XHRcdGVyciA9IHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKG1hcF9hZGRyLCBlbmQsXG4mIzQzO1x0XHRcdFx0cHJvdCwgcGFnZXMgJiM0MzsgaWR4LCBwcmV2X3NoaWZ0KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRmbHVzaF9jYWNoZV92bWFwKGFkZHIsIGVuZCk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKnZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGZsYWdzLCBwZ3Byb3RfdCBwcm90LCBjb25zdCB2b2lkICpjYWxsZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhO1xuJiM0MztcdHVuc2lnbmVkIGludCBzaGlmdDtcbiYjNDM7XG4mIzQzO1x0aWYgKGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKHByb3QpIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gUE1EX1NJWkUpIHtcbiYjNDM7XHRcdHZtX2FyZWEgPSBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgUE1EX1NJWkUsXG4mIzQzO1x0XHRcdFx0ZmxhZ3MsIGNhbGxlcik7XG4mIzQzO1x0XHRpZiAodm1fYXJlYSlcbiYjNDM7XHRcdFx0cmV0dXJuIHZtX2FyZWE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzaGlmdCA9IGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpO1xuJiM0MztcdGlmIChzaGlmdCBcdTAwM2UgUEFHRV9TSElGVCkge1xuJiM0MztcdFx0dm1fYXJlYSA9IF9fZ2V0X3ZtX2FyZWFfbm9kZV9hbGlnbmVkX2NhbGxlcihzaXplLCAxVUwgXHUwMDNjXHUwMDNjIHNoaWZ0LFxuJiM0MztcdFx0XHRcdGZsYWdzLCBjYWxsZXIpO1xuJiM0MztcdFx0aWYgKHZtX2FyZWEpXG4mIzQzO1x0XHRcdHJldHVybiB2bV9hcmVhO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZV9hbGlnbmVkX2NhbGxlcihzaXplLCBQQUdFX1NJWkUsIGZsYWdzLCBjYWxsZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHZtYXAgLSBtYXAgYW4gYXJyYXkgb2YgcGFnZXMgaW50byB2aXJ0dWFsbHkgY29udGlndW91cyBzcGFjZVxuICAqIEBwYWdlczogYXJyYXkgb2YgcGFnZSBwb2ludGVyc1xuQEAgLTM1NTcsMTMgJiM0MzszNzAxLDE0IEBAIHZvaWQgKnZtYXAoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGNvdW50LFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdHNpemUgPSAodW5zaWduZWQgbG9uZyljb3VudCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbi1cdGFyZWEgPSBnZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4mIzQzO1x0YXJlYSA9IHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYShzaXplLCBmbGFncywgcHJvdCxcbiYjNDM7XHRcdFx0XHRfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuIFx0aWYgKCFhcmVhKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLVx1MDAzZWFkZHI7XG4tXHRpZiAodm1hcF9wYWdlc19yYW5nZShhZGRyLCBhZGRyICYjNDM7IHNpemUsIHBncHJvdF9ueChwcm90KSxcbi1cdFx0XHRcdHBhZ2VzLCBQQUdFX1NISUZUKSBcdTAwM2MgMCkge1xuJiM0MztcdGlmICh2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWQoYWRkciwgYWRkciAmIzQzOyBzaXplLCBwZ3Byb3RfbngocHJvdCksXG4mIzQzO1x0XHRcdFx0cGFnZXMpIFx1MDAzYyAwKSB7XG4gXHRcdHZ1bm1hcChhcmVhLVx1MDAzZWFkZHIpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwOTowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWFwJiMzNDssCiAgICAmIzM0O3ZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZCYjMzQ7LAogICAgJiMzNDt2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWEmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsmIzM0OywKICAgICYjMzQ7X192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBiYXRjaGVkIGNvbnRpZ3VvdXMgbWFwcGluZ3MgYXQgdGhlIFBURSBsZXZlbCBmb3Igdm1hcCwgbW9kaWZ5aW5nIGNvcmUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYy4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjM0Nzk4MjEwYzQyMDk4NzFkMjIxMWUyMTUxNjA2ZTljMWVmM2RiNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDYgMDk6MDk6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oCmluZGV4IDRlYzFhY2QzYzFiMzQ4Li43ZDljN2RjNzk1YzQyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmgKQEAgLTIzLDYgJiM0MzsyMyw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplKHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkJCXVuc2lnbmVkIGxvbmcgZW5kLCB1NjQgcGZuLAogCQkJCQkJdW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0KQogewomIzQzOwl1bnNpZ25lZCBsb25nIHNpemU7CiYjNDM7CiAJLyoKIAkgKiBJZiB0aGUgYmxvY2sgaXMgYXQgbGVhc3QgQ09OVF9QVEVfU0laRSBpbiBzaXplLCBhbmQgaXMgbmF0dXJhbGx5CiAJICogYWxpZ25lZCBpbiBib3RoIHZpcnR1YWwgYW5kIHBoeXNpY2FsIHNwYWNlLCB0aGVuIHdlIGNhbiBwdGUtbWFwIHRoZQpAQCAtNDAsNyAmIzQzOzQyLDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUodW5zaWduZWQgbG9uZyBhZGRyLAogCWlmICghSVNfQUxJR05FRChQRk5fUEhZUyhwZm4pLCBDT05UX1BURV9TSVpFKSkKIAkJcmV0dXJuIFBBR0VfU0laRTsKIAotCXJldHVybiBDT05UX1BURV9TSVpFOwomIzQzOwlzaXplID0gbWluMyhlbmQgLSBhZGRyLCAxVUwgJmx0OyZsdDsgbWF4X3BhZ2Vfc2hpZnQsIFBNRF9TSVpFICZndDsmZ3Q7IDEpOwomIzQzOwlzaXplID0gcm91bmRkb3duX3Bvd19vZl90d28oc2l6ZSk7CiYjNDM7CXJldHVybiBzaXplOwogfQogCiAjZGVmaW5lIGFyY2hfdm1hcF9wdGVfcmFuZ2VfdW5tYXBfc2l6ZSBhcmNoX3ZtYXBfcHRlX3JhbmdlX3VubWFwX3NpemUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCAzMDc3MmE5MDlhZWEzZS4uZDYwMGE2ZDc1MWUyOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMKQEAgLTExMCw2ICYjNDM7MTEwLDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IG51bV9jb250aWdfcHRlcyh1bnNpZ25lZCBsb25nIHNpemUsIHNpemVfdCAqcGdzaXplKQogCQljb250aWdfcHRlcyA9IENPTlRfUFRFUzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKJiM0MzsJCWlmIChzaXplICZndDsgMCAmYW1wOyZhbXA7IHNpemUgJmx0OyBQTURfU0laRSAmYW1wOyZhbXA7CiYjNDM7CQkJCUlTX0FMSUdORUQoc2l6ZSwgQ09OVF9QVEVfU0laRSkpIHsKJiM0MzsJCQkqcGdzaXplID0gUEFHRV9TSVpFOwomIzQzOwkJCWNvbnRpZ19wdGVzID0gc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQogCQlXQVJOX09OKCFfX2h1Z2V0bGJfdmFsaWRfc2l6ZShzaXplKSk7CiAJfQogCkBAIC0zNTksNiAmIzQzOzM2NSwxMCBAQCBwdGVfdCBhcmNoX21ha2VfaHVnZV9wdGUocHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBzaGlmdCwgdm1fZmxhZ3NfdCBmbGFncykKIAljYXNlIENPTlRfUFRFX1NJWkU6CiAJCXJldHVybiBwdGVfbWtjb250KGVudHJ5KTsKIAlkZWZhdWx0OgomIzQzOwkJaWYgKHBhZ2VzaXplICZndDsgMCAmYW1wOyZhbXA7IHBhZ2VzaXplICZsdDsgUE1EX1NJWkUgJmFtcDsmYW1wOwomIzQzOwkJCQlJU19BTElHTkVEKHBhZ2VzaXplLCBDT05UX1BURV9TSVpFKSkKJiM0MzsJCQlyZXR1cm4gcHRlX21rY29udChlbnRyeSk7CiYjNDM7CiAJCWJyZWFrOwogCX0KIAlwcl93YXJuKCYjMzQ7JXM6IHVucmVjb2duaXplZCBodWdlIHBhZ2Ugc2l6ZSAweCVseFxuJiMzNDssCmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggMTJmNGEzOWZkZDBiM2UuLmEwODg2ODBjMzlmYzEyIDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jCkBAIC05MSw2ICYjNDM7OTEsMzMgQEAgc3RydWN0IHZmcmVlX2RlZmVycmVkIHsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdmZyZWVfZGVmZXJyZWQsIHZmcmVlX2RlZmVycmVkKTsKIAogLyoqKiBQYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgKioqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogVHJ5IGNvbnRpZ3VvdXMgbWFwcGluZ3MgYXQgdGhlIFBURSBsZXZlbCBmb3IgYXJjaGVzIHdoaWNoIHN1cHBvcnQgdGhlbSwgYW5kIGlmCiYjNDM7ICogcmVxdWVzdGVkIGJ5IHRoZSBjYWxsZXIuIEZhbGwgYmFjayB0byBQQUdFX1NJWkUgbWFwcGluZ3Mgb3RoZXJ3aXNlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBtYXBwaW5nIHNpemUuCiYjNDM7ICovCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZtYXBfc2V0X3B0ZXMocHRlX3QgKnB0ZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHU2NCBwZm4sCiYjNDM7CQlwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZTsKJiM0MzsKJiM0MzsJc2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUoYWRkciwgZW5kLCBwZm4sIG1heF9wYWdlX3NoaWZ0KTsKJiM0MzsJaWYgKHNpemUgIT0gUEFHRV9TSVpFKSB7CiYjNDM7CQlwdGVfdCBlbnRyeSA9IHBmbl9wdGUocGZuLCBwcm90KTsKJiM0MzsKJiM0MzsJCWVudHJ5ID0gYXJjaF9tYWtlX2h1Z2VfcHRlKGVudHJ5LCBpbG9nMihzaXplKSwgMCk7CiYjNDM7CQlzZXRfaHVnZV9wdGVfYXQoJmFtcDtpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5LCBzaXplKTsKJiM0MzsJCXJldHVybiBzaXplOwomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CXNldF9wdGVfYXQoJmFtcDtpbml0X21tLCBhZGRyLCBwdGUsIHBmbl9wdGUocGZuLCBwcm90KSk7CiYjNDM7CXJldHVybiBQQUdFX1NJWkU7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJcGh5c19hZGRyX3QgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90LAogCQkJdW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0LCBwZ3RibF9tb2RfbWFzayAqbWFzaykKQEAgLTk4LDcgJiM0MzsxMjUsOCBAQCBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJcHRlX3QgKnB0ZTsKIAl1NjQgcGZuOwogCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBBR0VfU0laRTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplOwomIzQzOwl1bnNpZ25lZCBpbnQgc3RlcHM7CiAKIAlpZiAoV0FSTl9PTl9PTkNFKCFQQUdFX0FMSUdORUQoZW5kIC0gYWRkcikpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExOSwyMCAmIzQzOzE0Nyw5IEBAIHN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCUJVRygpOwogCQl9CiAKLSNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCi0JCXNpemUgPSBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplKGFkZHIsIGVuZCwgcGZuLCBtYXhfcGFnZV9zaGlmdCk7Ci0JCWlmIChzaXplICE9IFBBR0VfU0laRSkgewotCQkJcHRlX3QgZW50cnkgPSBwZm5fcHRlKHBmbiwgcHJvdCk7Ci0KLQkJCWVudHJ5ID0gYXJjaF9tYWtlX2h1Z2VfcHRlKGVudHJ5LCBpbG9nMihzaXplKSwgMCk7Ci0JCQlzZXRfaHVnZV9wdGVfYXQoJmFtcDtpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5LCBzaXplKTsKLQkJCXBmbiAmIzQzOz0gUEZOX0RPV04oc2l6ZSk7Ci0JCQljb250aW51ZTsKLQkJfQotI2VuZGlmCi0JCXNldF9wdGVfYXQoJmFtcDtpbml0X21tLCBhZGRyLCBwdGUsIHBmbl9wdGUocGZuLCBwcm90KSk7Ci0JCXBmbiYjNDM7JiM0Mzs7Ci0JfSB3aGlsZSAocHRlICYjNDM7PSBQRk5fRE9XTihzaXplKSwgYWRkciAmIzQzOz0gc2l6ZSwgYWRkciAhPSBlbmQpOwomIzQzOwkJc2l6ZSA9IHZtYXBfc2V0X3B0ZXMocHRlLCBhZGRyLCBlbmQsIHBmbiwgcHJvdCwgbWF4X3BhZ2Vfc2hpZnQpOwomIzQzOwkJc3RlcHMgPSBQRk5fRE9XTihzaXplKTsKJiM0MzsJfSB3aGlsZSAocHRlICYjNDM7PSBzdGVwcywgcGZuICYjNDM7PSBzdGVwcywgYWRkciAmIzQzOz0gc2l6ZSwgYWRkciAhPSBlbmQpOwogCiAJbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7CiAJKm1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEOwpAQCAtNTI0LDggJiM0Mzs1NDEsMTAgQEAgdm9pZCB2dW5tYXBfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKIAogc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLAotCQlwZ3RibF9tb2RfbWFzayAqbWFzaykKJiM0MzsJCXBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcGZuLCBzaXplOwomIzQzOwl1bnNpZ25lZCBpbnQgc3RlcHM7CiAJaW50IGVyciA9IDA7CiAJcHRlX3QgKnB0ZTsKIApAQCAtNTU2LDkgJiM0Mzs1NzUsMTAgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQlicmVhazsKIAkJfQogCi0JCXNldF9wdGVfYXQoJmFtcDtpbml0X21tLCBhZGRyLCBwdGUsIG1rX3B0ZShwYWdlLCBwcm90KSk7Ci0JCSgqbnIpJiM0MzsmIzQzOzsKLQl9IHdoaWxlIChwdGUmIzQzOyYjNDM7LCBhZGRyICYjNDM7PSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKJiM0MzsJCXBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOwomIzQzOwkJc2l6ZSA9IHZtYXBfc2V0X3B0ZXMocHRlLCBhZGRyLCBlbmQsIHBmbiwgcHJvdCwgc2hpZnQpOwomIzQzOwkJc3RlcHMgPSBQRk5fRE9XTihzaXplKTsKJiM0MzsJfSB3aGlsZSAocHRlICYjNDM7PSBzdGVwcywgKm5yICYjNDM7PSBzdGVwcywgYWRkciAmIzQzOz0gc2l6ZSwgYWRkciAhPSBlbmQpOwogCiAJbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7CiAJKm1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEOwpAQCAtNTY4LDcgJiM0Mzs1ODgsNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAogc3RhdGljIGludCB2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLAotCQlwZ3RibF9tb2RfbWFzayAqbWFzaykKJiM0MzsJCXBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpCiB7CiAJcG1kX3QgKnBtZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CkBAIC01NzgsNyAmIzQzOzU5OCwyNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJcmV0dXJuIC1FTk9NRU07CiAJZG8gewogCQluZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCWlmICh2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaykpCiYjNDM7CiYjNDM7CQlpZiAoc2hpZnQgJmd0Oz0gUE1EX1NISUZUKSB7CiYjNDM7CQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1sqbnJdOwomIzQzOwkJCXBoeXNfYWRkcl90IHBoeXNfYWRkcjsKJiM0MzsKJiM0MzsJCQlpZiAoV0FSTl9PTighcGFnZSkpCiYjNDM7CQkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJCWlmIChXQVJOX09OKCFwZm5fdmFsaWQocGFnZV90b19wZm4ocGFnZSkpKSkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQkJcGh5c19hZGRyID0gcGFnZV90b19waHlzKHBhZ2UpOwomIzQzOwomIzQzOwkJCWlmICh2bWFwX3RyeV9odWdlX3BtZChwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgcHJvdCwKJiM0MzsJCQkJCQlzaGlmdCkpIHsKJiM0MzsJCQkJKm1hc2sgfD0gUEdUQkxfUE1EX01PRElGSUVEOwomIzQzOwkJCQkqbnIgJiM0Mzs9IDEgJmx0OyZsdDsgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOwomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAodm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KSkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0gd2hpbGUgKHBtZCYjNDM7JiM0MzssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiAJcmV0dXJuIDA7CkBAIC01ODYsNyAmIzQzOzYyNiw3IEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsCi0JCXBndGJsX21vZF9tYXNrICptYXNrKQomIzQzOwkJcGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdCkKIHsKIAlwdWRfdCAqcHVkOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKQEAgLTU5Niw3ICYjNDM7NjM2LDcgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXJldHVybiAtRU5PTUVNOwogCWRvIHsKIAkJbmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQlpZiAodm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2spKQomIzQzOwkJaWYgKHZtYXBfcGFnZXNfcG1kX3JhbmdlKHB1ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrLCBzaGlmdCkpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9IHdoaWxlIChwdWQmIzQzOyYjNDM7LCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogCXJldHVybiAwOwpAQCAtNjA0LDcgJiM0Mzs2NDQsNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAogc3RhdGljIGludCB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLAotCQlwZ3RibF9tb2RfbWFzayAqbWFzaykKJiM0MzsJCXBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpCiB7CiAJcDRkX3QgKnA0ZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CkBAIC02MTQsMTQgJiM0Mzs2NTQsMTggQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXJldHVybiAtRU5PTUVNOwogCWRvIHsKIAkJbmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQlpZiAodm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2spKQomIzQzOwkJaWYgKHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrLCBzaGlmdCkpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9IHdoaWxlIChwNGQmIzQzOyYjNDM7LCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAotCQlwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQomIzQzOy8qCiYjNDM7ICogSXQgY2FuIHRha2UgYW4gYXJyYXkgb2YgcGFnZXMgd2hpY2ggYXJlIG5vdCBhbGwgY29udGlndW91cywgYnV0IGl0CiYjNDM7ICogbWF5IGhhdmUgY29udGlndW91cyBjaHVua3MsIGFzIGhpbnRlZCBieSBAc2hpZnQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsayh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAomIzQzOwkJcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IHNoaWZ0KQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBhZGRyOwogCXBnZF90ICpwZ2Q7CkBAIC02MzYsNyAmIzQzOzY4MCw3IEBAIHN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKIAkJaWYgKHBnZF9iYWQoKnBnZCkpCiAJCQltYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDsKLQkJZXJyID0gdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgJmFtcDtuciwgJmFtcDttYXNrKTsKJiM0MzsJCWVyciA9IHZtYXBfcGFnZXNfcDRkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsICZhbXA7bnIsICZhbXA7bWFzaywgc2hpZnQpOwogCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAJfSB3aGlsZSAocGdkJiM0MzsmIzQzOywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKQEAgLTY1OSwyNyAmIzQzOzcwMywxMiBAQCBzdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogaW50IF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCXBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBwYWdlX3NoaWZ0KQogewotCXVuc2lnbmVkIGludCBpLCBuciA9IChlbmQgLSBhZGRyKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwotCiAJV0FSTl9PTihwYWdlX3NoaWZ0ICZsdDsgUEFHRV9TSElGVCk7CiAKLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MpIHx8Ci0JCQlwYWdlX3NoaWZ0ID09IFBBR0VfU0hJRlQpCi0JCXJldHVybiB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2goYWRkciwgZW5kLCBwcm90LCBwYWdlcyk7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgbnI7IGkgJiM0Mzs9IDFVICZsdDsmbHQ7IChwYWdlX3NoaWZ0IC0gUEFHRV9TSElGVCkpIHsKLQkJaW50IGVycjsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DKSkKJiM0MzsJCXBhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUOwogCi0JCWVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICYjNDM7ICgxVUwgJmx0OyZsdDsgcGFnZV9zaGlmdCksCi0JCQkJCXBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIHByb3QsCi0JCQkJCXBhZ2Vfc2hpZnQpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQlhZGRyICYjNDM7PSAxVUwgJmx0OyZsdDsgcGFnZV9zaGlmdDsKLQl9Ci0KLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMsIHBhZ2Vfc2hpZnQpOwogfQogCiBpbnQgdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCkBAIC0zMjc5LDYgJiM0MzszMzA4LDE0IEBAIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF92bV9hcmVhX2NhbGxlcih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkJICBOVU1BX05PX05PREUsIEdGUF9LRVJORUwsIGNhbGxlcik7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqX19nZXRfdm1fYXJlYV9ub2RlX2FsaWduZWRfY2FsbGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IHZvaWQgKmNhbGxlcikKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgYWxpZ24sIFBBR0VfU0hJRlQsIGZsYWdzLAomIzQzOwkJCQkgIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELAomIzQzOwkJCQkgIE5VTUFfTk9fTk9ERSwgR0ZQX0tFUk5FTCwgY2FsbGVyKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGZpbmRfdm1fYXJlYSAtIGZpbmQgYSBjb250aW51b3VzIGtlcm5lbCB2aXJ0dWFsIGFyZWEKICAqIEBhZGRyOgkgIGJhc2UgYWRkcmVzcwpAQCAtMzUxOSw2ICYjNDM7MzU1NiwxMTMgQEAgdm9pZCB2dW5tYXAoY29uc3Qgdm9pZCAqYWRkcikKIH0KIEVYUE9SVF9TWU1CT0wodnVubWFwKTsKIAomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHZtX3NoaWZ0KHBncHJvdF90IHByb3QsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt7CiYjNDM7CWlmIChhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSAmYW1wOyZhbXA7IHNpemUgJmd0Oz0gUE1EX1NJWkUpCiYjNDM7CQlyZXR1cm4gUE1EX1NISUZUOwomIzQzOwomIzQzOwlyZXR1cm4gYXJjaF92bWFwX3B0ZV9zdXBwb3J0ZWRfc2hpZnQoc2l6ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGdldF92bWFwX2JhdGNoX29yZGVyKHN0cnVjdCBwYWdlICoqcGFnZXMsCiYjNDM7CQlwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3N0ZXBzLCB1bnNpZ25lZCBpbnQgaWR4KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IG5yX2NvbnRpZzsKJiM0MzsJaW50IG9yZGVyOwomIzQzOwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW5yX2NvbnRpZyA9IG51bV9wYWdlc19jb250aWd1b3VzKCZhbXA7cGFnZXNbaWR4XSwgbWF4X3N0ZXBzKTsKJiM0MzsJaWYgKG5yX2NvbnRpZyAmbHQ7IDIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJb3JkZXIgPSBpbG9nMihucl9jb250aWcpOwomIzQzOwomIzQzOwkvKiBMaW1pdCBvcmRlciBieSBwZm4gYWxpZ25tZW50ICovCiYjNDM7CW9yZGVyID0gbWluX3QoaW50LCBvcmRlciwgX19mZnMocGFnZV90b19wZm4ocGFnZXNbaWR4XSkpKTsKJiM0MzsKJiM0MzsJaWYgKHZtX3NoaWZ0KHByb3QsIFBBR0VfU0laRSAmbHQ7Jmx0OyBvcmRlcikgPT0gUEFHRV9TSElGVCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gb3JkZXI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiYjNDM7CQlwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGNvdW50ID0gKGVuZCAtIGFkZHIpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CXVuc2lnbmVkIGludCBwcmV2X3NoaWZ0ID0gMCwgaWR4ID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBtYXBfYWRkciA9IGFkZHIsIGJhdGNoX2VuZCA9IGFkZHI7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IGttc2FuX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaChhZGRyLCBlbmQsIHByb3QsIHBhZ2VzLAomIzQzOwkJCQkJCVBBR0VfU0hJRlQsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgY291bnQ7ICkgewomIzQzOwkJdW5zaWduZWQgaW50IHNoaWZ0ID0gUEFHRV9TSElGVCAmIzQzOwomIzQzOwkJCWdldF92bWFwX2JhdGNoX29yZGVyKHBhZ2VzLCBwcm90LCBjb3VudCAtIGksIGkpOwomIzQzOwomIzQzOwkJaWYgKCFpKQomIzQzOwkJCXByZXZfc2hpZnQgPSBzaGlmdDsKJiM0MzsKJiM0MzsJCWlmIChzaGlmdCAhPSBwcmV2X3NoaWZ0KSB7CiYjNDM7CQkJZXJyID0gdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsobWFwX2FkZHIsIGJhdGNoX2VuZCwKJiM0MzsJCQkJCXByb3QsIHBhZ2VzICYjNDM7IGlkeCwgcHJldl9zaGlmdCk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJZ290byBvdXQ7CiYjNDM7CQkJcHJldl9zaGlmdCA9IHNoaWZ0OwomIzQzOwkJCW1hcF9hZGRyID0gYmF0Y2hfZW5kOwomIzQzOwkJCWlkeCA9IGk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogT25jZSBzbWFsbCBwYWdlcyBhcmUgZW5jb3VudGVyZWQsIHRoZSByZW1haW5pbmcgcGFnZXMKJiM0MzsJCSAqIGFyZSBsaWtlbHkgc21hbGwgYXMgd2VsbC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHNoaWZ0ID09IFBBR0VfU0hJRlQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQliYXRjaF9lbmQgJiM0Mzs9IDFVTCAmbHQ7Jmx0OyBzaGlmdDsKJiM0MzsJCWkgJiM0Mzs9IDFVICZsdDsmbHQ7IChzaGlmdCAtIFBBR0VfU0hJRlQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFJlbWFpbmluZyAqLwomIzQzOwlpZiAobWFwX2FkZHIgJmx0OyBlbmQpCiYjNDM7CQllcnIgPSB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhtYXBfYWRkciwgZW5kLAomIzQzOwkJCQlwcm90LCBwYWdlcyAmIzQzOyBpZHgsIHByZXZfc2hpZnQpOwomIzQzOwomIzQzO291dDoKJiM0MzsJZmx1c2hfY2FjaGVfdm1hcChhZGRyLCBlbmQpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHBncHJvdF90IHByb3QsIGNvbnN0IHZvaWQgKmNhbGxlcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2bV9zdHJ1Y3QgKnZtX2FyZWE7CiYjNDM7CXVuc2lnbmVkIGludCBzaGlmdDsKJiM0MzsKJiM0MzsJaWYgKGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKHByb3QpICZhbXA7JmFtcDsgc2l6ZSAmZ3Q7PSBQTURfU0laRSkgewomIzQzOwkJdm1fYXJlYSA9IF9fZ2V0X3ZtX2FyZWFfbm9kZV9hbGlnbmVkX2NhbGxlcihzaXplLCBQTURfU0laRSwKJiM0MzsJCQkJZmxhZ3MsIGNhbGxlcik7CiYjNDM7CQlpZiAodm1fYXJlYSkKJiM0MzsJCQlyZXR1cm4gdm1fYXJlYTsKJiM0MzsJfQomIzQzOwomIzQzOwlzaGlmdCA9IGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpOwomIzQzOwlpZiAoc2hpZnQgJmd0OyBQQUdFX1NISUZUKSB7CiYjNDM7CQl2bV9hcmVhID0gX19nZXRfdm1fYXJlYV9ub2RlX2FsaWduZWRfY2FsbGVyKHNpemUsIDFVTCAmbHQ7Jmx0OyBzaGlmdCwKJiM0MzsJCQkJZmxhZ3MsIGNhbGxlcik7CiYjNDM7CQlpZiAodm1fYXJlYSkKJiM0MzsJCQlyZXR1cm4gdm1fYXJlYTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlX2FsaWduZWRfY2FsbGVyKHNpemUsIFBBR0VfU0laRSwgZmxhZ3MsIGNhbGxlcik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB2bWFwIC0gbWFwIGFuIGFycmF5IG9mIHBhZ2VzIGludG8gdmlydHVhbGx5IGNvbnRpZ3VvdXMgc3BhY2UKICAqIEBwYWdlczogYXJyYXkgb2YgcGFnZSBwb2ludGVycwpAQCAtMzU1NywxMyAmIzQzOzM3MDEsMTQgQEAgdm9pZCAqdm1hcChzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgY291bnQsCiAJCXJldHVybiBOVUxMOwogCiAJc2l6ZSA9ICh1bnNpZ25lZCBsb25nKWNvdW50ICZsdDsmbHQ7IFBBR0VfU0hJRlQ7Ci0JYXJlYSA9IGdldF92bV9hcmVhX2NhbGxlcihzaXplLCBmbGFncywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKJiM0MzsJYXJlYSA9IHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYShzaXplLCBmbGFncywgcHJvdCwKJiM0MzsJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAlpZiAoIWFyZWEpCiAJCXJldHVybiBOVUxMOwogCiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtJmd0O2FkZHI7Ci0JaWYgKHZtYXBfcGFnZXNfcmFuZ2UoYWRkciwgYWRkciAmIzQzOyBzaXplLCBwZ3Byb3RfbngocHJvdCksCi0JCQkJcGFnZXMsIFBBR0VfU0hJRlQpICZsdDsgMCkgewomIzQzOwlpZiAodm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkKGFkZHIsIGFkZHIgJiM0Mzsgc2l6ZSwgcGdwcm90X254KHByb3QpLAomIzQzOwkJCQlwYWdlcykgJmx0OyAwKSB7CiAJCXZ1bm1hcChhcmVhLSZndDthZGRyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwOTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTE5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHZtYXBgIFBhdGNoIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlIGhhdmUgYSBwYXRjaCB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IGB2bWFwYCBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zIGluIGBtbS92bWFsbG9jLmNgIGFuZCBhIGZldyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZXMgaGFuZGxlIG1lbW9yeSBtYXBwaW5nLiBJdCBzZWVtcyB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBzb21lIGJhdGNoZWQgY29udGlndW91cyBtYXBwaW5ncyBhdCB0aGUgUFRFIGxldmVsLCBzcGVjaWZpY2FsbHkgZm9yIGFyY2hpdGVjdHVyZXMgbGlrZSBBUk02NCB3aXRoIGBDT05UX1BURV9TSVpFYC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGB2bWFwYCBpcyBhIGNvcmUsIGNyaXRpY2FsIGtlcm5lbCBBUEksIGhlYXZpbHkgcmVsaWVkIHVwb24gYnkgbnVtZXJvdXMgZHJpdmVycyBhbmQgc3Vic3lzdGVtcyB0byBtYXAgYXJyYXlzIG9mIHBhZ2VzIGNvbnRpZ3VvdXNseS4gU28sIHRoZSBwYXRjaCBpcyBhaW1pbmcgZm9yIG9wdGltaXphdGlvbiBoZXJlLCB1c2luZyBodWdlIHBhZ2VzIG9yIGNvbnRpZ3VvdXMgUFRFcyB3aGVuIGZlYXNpYmxlIHdpdGhpbiBgdm1hcGAuCgpNeSBpbml0aWFsIHRob3VnaHQ/IFRoaXMgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCByaXBlIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc28gaXQmIzM5O3MgYSBoaWdoLXZhbHVlIHRhcmdldC4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIHRoZSBmdXp6aW5nIGVmZm9ydHMuIENsZWFybHksIGB2bWFwYCBpdHNlbGYgaXMgYSBwcmltZSBjYW5kaWRhdGUsIGdpdmVuIGl0cyB3aWRlc3ByZWFkIHVzZSwgYnV0IGl0JiMzOTtzICpldmVyeXdoZXJlKi4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgdm1hcGAsIGl0IGNhbGxzIGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgLCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCwgYW5kIGB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa2AgKGZvcm1lcmx5IGB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2hgKSwgYW5kIG9mIGNvdXJzZSwgYHZtYXBfc2V0X3B0ZXNgLCB3aGljaCBpcyBwcm9iYWJseSB0aGUgaGVhcnQgb2YgdGhpcyBiYXRjaGVkIFBURSBsb2dpYy4gVGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBtbS92bWFsbG9jLmNgLCBzbyB3aGlsZSB0aGV5JiMzOTtyZSBub3QgZGlyZWN0bHkgZXhwb3J0ZWQsIHRoZXkmIzM5O3JlIGNyaXRpY2FsIHRvIHRoZSBvdmVyYWxsIGB2bWFwYCBmbG93LiBTbywgd2UmIzM5O2xsIGhpdCBgdm1hcGAsIHRoZSBgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkYCwgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrYCwgYW5kIGB2bWFwX3NldF9wdGVzYCBmdW5jdGlvbnMuIEJlY2F1c2Ugb2YgdGhlIG1haW4gY2hhbmdlcywgd2Ugc2hvdWxkIGFsc28gaW5jbHVkZSB0aGUgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaGAsIGBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaGAuCgpGaW5hbGx5LCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gV2UmIzM5O3JlIHNlZWluZyByZWZlcmVuY2VzIHRvIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AsIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAsIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gcXVpY2tseSB0cmFjayBkb3duIHdoZXJlIHRoZXNlIGFyZSBkZWZpbmVkLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBpcyBrZXkgdG8gc2V0dGluZyB1cCBlZmZlY3RpdmUgZnV6emluZyBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9BUkNIX0hVR0VfVk1BTExPQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9MTA5Mj1jb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BUFxuLS1cbmFyY2gvS2NvbmZpZy0xMDk5LSNcbmFyY2gvS2NvbmZpZzoxMTAwOmNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXG5hcmNoL0tjb25maWctMTEwMS1cdGRlcGVuZHMgb24gSEFWRV9BUkNIX0hVR0VfVk1BUFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0xNTMtXHRzZWxlY3QgSEFWRV9BUkNIX0NPTVBJTEVSX0hcbmFyY2gvYXJtNjQvS2NvbmZpZzoxNTQ6XHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xuYXJjaC9hcm02NC9LY29uZmlnLTE1NS1cdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFQXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0yMTgtXHRzZWxlY3QgSEFWRV9BUkNIX0FVRElUU1lTQ0FMTFxuYXJjaC9wb3dlcnBjL0tjb25maWc6MjE5Olx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcdFx0aWYgSEFWRV9BUkNIX0hVR0VfVk1BUFxuYXJjaC9wb3dlcnBjL0tjb25maWctMjIwLVx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcdFx0aWYgUFBDX1JBRElYX01NVSB8fCBQUENfOHh4XG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0xMzEtXHRzZWxlY3QgSEFWRV9BUkNIX0JJVFJFVkVSU0UgaWYgUklTQ1ZfSVNBX1pCS0IgXHUwMDI2XHUwMDI2IEJJVFJFVkVSU0VcbmFyY2gvcmlzY3YvS2NvbmZpZzoxMzI6XHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQyBpZiBIQVZFX0FSQ0hfSFVHRV9WTUFQXG5hcmNoL3Jpc2N2L0tjb25maWctMTMzLVx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVAgaWYgTU1VIFx1MDAyNlx1MDAyNiA2NEJJVFxuLS1cbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMTkyLVx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcdFx0aWYgWDg2XzY0IHx8IFg4Nl9QQUVcbmFyY2gveDg2L0tjb25maWc6MTkzOlx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcdFx0aWYgWDg2XzY0XG5hcmNoL3g4Ni9LY29uZmlnLTE5NC1cdHNlbGVjdCBIQVZFX0FSQ0hfSlVNUF9MQUJFTFxuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTE5PXN0cnVjdCBpb3ZfaXRlcjtcdFx0LyogaW4gdWlvLmggKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0zMS0jZGVmaW5lIFZNX01BUF9QVVRfUEFHRVNcdDB4MDAwMDAyMDBcdC8qIHB1dCBwYWdlcyBhbmQgZnJlZSBhcnJheSBpbiB2ZnJlZSAqL1xuaW5jbHVkZS9saW51eC92bWFsbG9jLmg6MzI6I2RlZmluZSBWTV9BTExPV19IVUdFX1ZNQVBcdDB4MDAwMDA0MDAgICAgICAvKiBBbGxvdyBmb3IgaHVnZSBwYWdlcyBvbiBhcmNocyB3aXRoIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0MgKi9cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTMzLVxuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTUyPXN0cnVjdCB2bV9zdHJ1Y3Qge1xuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTYxLVx0c3RydWN0IHBhZ2VcdFx0KipwYWdlcztcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjYyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtNjMtXHR1bnNpZ25lZCBpbnRcdFx0cGFnZV9vcmRlcjtcbi0tXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD0yNTg9c3RhdGljIGlubGluZSBib29sIGlzX3ZtX2FyZWFfaHVnZXBhZ2VzKGNvbnN0IHZvaWQgKmFkZHIpXG4tLVxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMjY2LVx0ICovXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDoyNjc6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0yNjgtXHRzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhID0gZmluZF92bV9hcmVhKGFkZHIpO1xuLS1cbm1tL3ZtYWxsb2MuYz02Mz1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGlvcmVtYXBfbWF4X3BhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUO1xuLS1cbm1tL3ZtYWxsb2MuYy02NS1cbm1tL3ZtYWxsb2MuYzo2NjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0Ncbm1tL3ZtYWxsb2MuYy02Ny1zdGF0aWMgYm9vbCBfX3JvX2FmdGVyX2luaXQgdm1hcF9hbGxvd19odWdlID0gdHJ1ZTtcbi0tXG5tbS92bWFsbG9jLmM9NzQ9ZWFybHlfcGFyYW0oXCYjMzQ7bm9odWdldm1hbGxvY1wmIzM0Oywgc2V0X25vaHVnZXZtYWxsb2MpO1xubW0vdm1hbGxvYy5jOjc1OiNlbHNlIC8qIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DICovXG5tbS92bWFsbG9jLmMtNzYtc3RhdGljIGNvbnN0IGJvb2wgdm1hcF9hbGxvd19odWdlID0gZmFsc2U7XG5tbS92bWFsbG9jLmM6Nzc6I2VuZGlmXHQvKiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQyAqL1xubW0vdm1hbGxvYy5jLTc4LVxuLS1cbm1tL3ZtYWxsb2MuYz03MDM9aW50IF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTcwNy1cbm1tL3ZtYWxsb2MuYzo3MDg6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MpKVxubW0vdm1hbGxvYy5jLTcwOS1cdFx0cGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7XG4tLVxubW0vdm1hbGxvYy5jPTMxMzQ9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdm1fYXJlYV9wYWdlX29yZGVyKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtKVxubW0vdm1hbGxvYy5jLTMxMzUte1xubW0vdm1hbGxvYy5jOjMxMzY6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXG5tbS92bWFsbG9jLmMtMzEzNy1cdHJldHVybiB2bS1cdTAwM2VwYWdlX29yZGVyO1xuLS1cbm1tL3ZtYWxsb2MuYz0zMTQ4PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdm1fYXJlYV9wYWdlX29yZGVyKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5tbS92bWFsbG9jLmMtMzE0OS17XG5tbS92bWFsbG9jLmM6MzE1MDojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0Ncbm1tL3ZtYWxsb2MuYy0zMTUxLVx0dm0tXHUwMDNlcGFnZV9vcmRlciA9IG9yZGVyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NjgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIE5ldyBDb2RlJiMzOTtzIEh1Z1RMQiBEZXBlbmRlbmN5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgdm1hcF9zZXRfcHRlc2AsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgdGhhdCBgI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VgLiBSaWdodCBhd2F5LCB0aGlzIHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSHVnZVRMQiBwYWdlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgdmlydHVhbCBtZW1vcnkgbWFwcGluZyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBjb25uZWN0ZWQgdG8gSHVnZVRMQnMuIFRoaXMgYWxzbyB0b3VjaGVzIG9uIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAgYW5kIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFzIGl0IGluZGljYXRlcyB0aGUgYXJjaGl0ZWN0dXJlIG1pZ2h0IGhhdmUgc29tZSBzcGVjaWZpYyBzdXBwb3J0IG9yIHJlcXVpcmVtZW50cyBmb3IgaGFuZGxpbmcgaHVnZSB2aXJ0dWFsIG1lbW9yeSBtYXBwaW5ncy4gU2VlbXMgbGlrZSB0aGlzIGlzIGdvaW5nIHRvIGJlIHJlbGV2YW50IHRvIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmcgd2l0aCBodWdlIHBhZ2VzLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBgQ09ORklHX0hVR0VUTEJfUEFHRWAgZGVmaW5pdGlvbiB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIGlzIGFsbCBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSFVHRVRMQl9QQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMDE3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dD05NT1LZXJuZWwgcGFyYW1ldGVyc1xuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwODUtXHRodWdldGxiX2ZyZWVfdm1lbW1hcD1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjIwODY6XHRcdFx0W0tOTF0gUmVxdWlyZXMgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDg3LVx0XHRcdGVuYWJsZWQuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA5NS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjIwOTY6XHRcdFx0QnVpbHQgd2l0aCBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTj15LFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA5Ny1cdFx0XHR0aGUgZGVmYXVsdCBpcyBvbi5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdD0yMj1GaXJzdCB0aGUgTGludXgga2VybmVsIG5lZWRzIHRvIGJlIGJ1aWx0IHdpdGggdGhlIENPTkZJR19IVUdFVExCRlNcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0OjIzOihwcmVzZW50IHVuZGVyIFwmIzM0O0ZpbGUgc3lzdGVtc1wmIzM0OykgYW5kIENPTkZJR19IVUdFVExCX1BBR0UgKHNlbGVjdGVkXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdC0yNC1hdXRvbWF0aWNhbGx5IHdoZW4gQ09ORklHX0hVR0VUTEJGUyBpcyBzZWxlY3RlZCkgY29uZmlndXJhdGlvblxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0PTE3ND1odWdldGxiX2ZyZWVfdm1lbW1hcFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q6MTc1Olx0V2hlbiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVAgaXMgc2V0LCB0aGlzIGVuYWJsZXMgSHVnZVRMQlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3QtMTc2LVx0Vm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykuXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tdGUuaD0xNTc9c3RhdGljIGlubGluZSBpbnQgbXRlX3B0cmFjZV9jb3B5X3RhZ3Moc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCxcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL210ZS5oLTE2NS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbXRlLmg6MTY2OiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19BUk02NF9NVEUpXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL210ZS5oLTE2Ny1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2h1Z2V0bGJfbXRlX3RhZ2dlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQVJNNjRfQ09OVFBURSlcdCYjNDM7PSBjb250cHRlLm9cbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGU6NzpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKVx0JiM0Mzs9IGh1Z2V0bGJwYWdlLm9cbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGUtOC1vYmotJChDT05GSUdfUFREVU1QKVx0XHQmIzQzOz0gcHRkdW1wLm9cbi0tXG5hcmNoL2hleGFnb24vaW5jbHVkZS9hc20vcGFnZS5oLTM5LSAqL1xuYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL3BhZ2UuaDo0MDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL3BhZ2UuaC00MS0jZGVmaW5lIEhQQUdFX1NISUZUIDIyXG4tLVxuYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL3BndGFibGUuaD0xMjk9ZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07ICAvKiBsb2NhdGVkIGluIGhlYWQuUyAqL1xuLS1cbmFyY2gvaGV4YWdvbi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTMxLS8qICBIVUdFVExCIG5vdCB3b3JraW5nIGN1cnJlbnRseSAgKi9cbmFyY2gvaGV4YWdvbi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTMyOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL2hleGFnb24vaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEzMy0jZGVmaW5lIHB0ZV9ta2h1Z2UocHRlKSBfX3B0ZSgocHRlX3ZhbChwdGUpIFx1MDAyNiB+MHgzKSB8IEhWTV9IVUdFUEFHRV9TSVpFKVxuLS1cbmFyY2gvbG9vbmdhcmNoL21tL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19ISUdITUVNKVx0XHQmIzQzOz0gaGlnaG1lbS5vXG5hcmNoL2xvb25nYXJjaC9tbS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKVx0JiM0Mzs9IGh1Z2V0bGJwYWdlLm9cbmFyY2gvbG9vbmdhcmNoL21tL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19LQVNBTilcdFx0JiM0Mzs9IGthc2FuX2luaXQub1xuLS1cbmFyY2gvbG9vbmdhcmNoL21tL3RsYi5jPTEzOD1zdGF0aWMgdm9pZCBfX3VwZGF0ZV9odWdldGxiKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKVxuYXJjaC9sb29uZ2FyY2gvbW0vdGxiLmMtMTM5LXtcbmFyY2gvbG9vbmdhcmNoL21tL3RsYi5jOjE0MDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9sb29uZ2FyY2gvbW0vdGxiLmMtMTQxLVx0aW50IGlkeDtcbi0tXG5hcmNoL21pcHMvbW0vTWFrZWZpbGU9MzE9b2JqLSQoQ09ORklHX0hJR0hNRU0pXHRcdCYjNDM7PSBoaWdobWVtLm9cbmFyY2gvbWlwcy9tbS9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKVx0JiM0Mzs9IGh1Z2V0bGJwYWdlLm9cbmFyY2gvbWlwcy9tbS9NYWtlZmlsZS0zMy1vYmotJChDT05GSUdfRE1BX05PTkNPSEVSRU5UKVx0JiM0Mzs9IGRtYS1ub25jb2hlcmVudC5vXG4tLVxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFnZS5oPTkzPWV4dGVybiBpbnQgbnBtZW1fcmFuZ2VzO1xuLS1cbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhZ2UuaC0xNDctXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYWdlLmg6MTQ4OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYWdlLmgtMTQ5LSNkZWZpbmUgSFBBR0VfU0hJRlRcdFx0UE1EX1NISUZUIC8qIGZpeGVkIGZvciB0cmFuc3BhcmVudCBodWdlIHBhZ2VzICovXG4tLVxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFnZS5oLTE2My0jZW5kaWZcbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhZ2UuaDoxNjQ6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhZ2UuaC0xNjUtXG4tLVxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTY0PWV4dGVybiB2b2lkIF9fdXBkYXRlX2NhY2hlKHB0ZV90IHB0ZSk7XG4tLVxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3MC0jZGVmaW5lIF9QQUdFX1VTRVJfQklUICAgICAyMCAgIC8qICgweDgwMCkgU29mdHdhcmU6IFVzZXIgYWNjZXNzaWJsZSBwYWdlICovXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTcxOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTcyLSNkZWZpbmUgX1BBR0VfU1BFQ0lBTF9CSVQgIF9QQUdFX0RNQl9CSVQgIC8qIERNQiBmZWF0dXJlIGlzIGN1cnJlbnRseSB1bnVzZWQgKi9cbi0tXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MzE1PXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpXHR7IHB0ZV92YWwocHRlKSB8PSBfUEFHRV9TUEVDSUFMOyByZXR1cm4gcHRlOyB9XG4tLVxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMxOS0gKi9cbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaDozMjA6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaC0zMjEtI2RlZmluZSBwdGVfaHVnZShwdGUpICAgICAgICAgICAocHRlX3ZhbChwdGUpIFx1MDAyNiBfUEFHRV9IVUdFKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jPTQxPWludCBtYWluKHZvaWQpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMtMjc4LVx0ICogYW5kIGtlcm5lbCBkYXRhIG9uIHBoeXNpY2FsIGh1Z2UgcGFnZXMgKi9cbmFyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jOjI3OTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMtMjgwLVx0REVGSU5FKEhVR0VQQUdFX1NJWkUsIDFVTCBcdTAwM2NcdTAwM2MgUkVBTF9IUEFHRV9TSElGVCk7XG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMtNDgxLVx0Lm1hY3JvXHRcdGNvbnZlcnRfZm9yX3RsYl9pbnNlcnQyMCBwdGUsdG1wXG5hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUzo0ODI6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmFyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TLTQ4My1cdGNvcHlcdFx0XFxwdGUsXFx0bXBcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvc2V0dXAuYz0xMDE9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9zZXR1cC5jLTExNC1cdFx0KGludCkoUEFHRV9TSVpFIC8gMTAyNCkpO1xuYXJjaC9wYXJpc2Mva2VybmVsL3NldHVwLmM6MTE1OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3BhcmlzYy9rZXJuZWwvc2V0dXAuYy0xMTYtXHRwcmludGsoS0VSTl9DT05UIFwmIzM0O2VuYWJsZWQgd2l0aCAlZCBNQiBwaHlzaWNhbCBhbmQgJWQgTUIgdmlydHVhbCBzaXplXCYjMzQ7LFxuLS1cbmFyY2gvcGFyaXNjL21tL01ha2VmaWxlPTY9b2JqLXlcdCA6PSBpbml0Lm8gZmF1bHQubyBpb3JlbWFwLm8gZml4bWFwLm9cbmFyY2gvcGFyaXNjL21tL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkgJiM0Mzs9IGh1Z2V0bGJwYWdlLm9cbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmgtNzQtXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmg6NzU6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSB8fCBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmgtNzYtI2RlZmluZSBIX1BNRF9GUkFHX1NJWkVfU0hJRlQgIChIX1BNRF9JTkRFWF9TSVpFICYjNDM7IDMgJiM0MzsgMSlcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmg9MTc1PXN0YXRpYyBpbmxpbmUgaW50IGhhc2hfX3JlbWFwXzRrX3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaC0xODYtI2RlZmluZSBIX1BURV9UQUJMRV9TSVpFXHRQVEVfRlJBR19TSVpFXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmg6MTg3OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHwgZGVmaW5lZCAoQ09ORklHX0hVR0VUTEJfUEFHRSlcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaC0xODgtI2RlZmluZSBIX1BNRF9UQUJMRV9TSVpFXHQoKHNpemVvZihwbWRfdCkgXHUwMDNjXHUwMDNjIFBNRF9JTkRFWF9TSVpFKSAmIzQzOyBcXFxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaC0xOTItI2VuZGlmXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmg6MTkzOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmgtMTk0LSNkZWZpbmUgSF9QVURfVEFCTEVfU0laRVx0KChzaXplb2YocHVkX3QpIFx1MDAzY1x1MDAzYyBQVURfSU5ERVhfU0laRSkgJiM0MztcdFxcXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLmgtNDYtICovXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2guaDo0NzojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSBcdTAwMjZcdTAwMjYgIGRlZmluZWQoQ09ORklHX1BQQ182NEtfUEFHRVMpXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2guaC00OC0jZGVmaW5lIEhfUFVEX0NBQ0hFX0lOREVYXHQoSF9QVURfSU5ERVhfU0laRSAmIzQzOyAxKVxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvbW11LWhhc2guaD03MTI9c3RydWN0IGhhc2hfbW1fY29udGV4dCB7XG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9tbXUtaGFzaC5oLTcyMi1cdHN0cnVjdCBzbGljZV9tYXNrIG1hc2tfNGs7XG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L21tdS1oYXNoLmg6NzIzOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L21tdS1oYXNoLmgtNzI0LVx0c3RydWN0IHNsaWNlX21hc2sgbWFza18xNm07XG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9tbXUuaD0xNjk9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xpY2VfbWFzayAqc2xpY2VfbWFza19mb3Jfc2l6ZShtbV9jb250ZXh0X3QgKmN0eCwgaW50IHBzaXplKVxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvbW11LmgtMTc0LSNlbmRpZlxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9tbXUuaDoxNzU6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvbW11LmgtMTc2LVx0aWYgKHBzaXplID09IE1NVV9QQUdFXzE2TSlcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BnYWxsb2MuaD00OD1zdGF0aWMgaW5saW5lIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ2FsbG9jLmgtNzMtXHQgKi9cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGdhbGxvYy5oOjc0OiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19QUENfNjRLX1BBR0VTKSBcdTAwMjZcdTAwMjYgXFxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGdhbGxvYy5oLTc1LVx0KEhfUEdEX0lOREVYX1NJWkUgPT0gSF9QVURfQ0FDSEVfSU5ERVgpXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLTY0ay5oLTUtI2lmbmRlZiBfX0FTU0VNQkxFUl9fXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUtNjRrLmg6NjojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLTY0ay5oLTctXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUtNjRrLmg6ODojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLTY0ay5oLTktXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9zbGljZS5oLTctI2lmZGVmIENPTkZJR19QUENfNjRTX0hBU0hfTU1VXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3NsaWNlLmg6ODojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9zbGljZS5oLTktI2RlZmluZSBIQVZFX0FSQ0hfSFVHRVRMQl9VTk1BUFBFRF9BUkVBXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC00LVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDo1OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTYtI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg9Njc9aW50IGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtNzItXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjczOiNlbHNlIC8qICEgQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC03NC1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfaHVnZXRsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg9Nzk9c3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBodWdldGxicGFnZV9pbml0X2RlZmF1bHRzaXplKHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC04MS19XG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjgyOiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTgzLVxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgtMjYtI2lmbmRlZiBfX0FTU0VNQkxFUl9fXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oOjI3OiNpZm5kZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaC0yOC0jZGVmaW5lIEhQQUdFX1NISUZUIFBBR0VfU0hJRlRcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTE0ND1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE0OC1cdGlmICgobW11X2hhc19mZWF0dXJlKE1NVV9GVFJfSFBURV9UQUJMRSkgXHUwMDI2XHUwMDI2ICFyYWRpeF9lbmFibGVkKCkpIHx8XG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjE0OTpcdCAgICAoSVNfRU5BQkxFRChDT05GSUdfUFBDX0U1MDApIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0UpKSlcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTUwLVx0XHRfX3VwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGVwKTtcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLXdhbGsuaD0xMD1zdGF0aWMgaW5saW5lIHB0ZV90ICpmaW5kX2xpbnV4X3B0ZShwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgZWEsXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS13YWxrLmgtMTgtI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1ZNKSBcdTAwMjZcdTAwMjZcdFx0XHRcdFx0XHRcXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS13YWxrLmg6MTk6XHQhKGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS13YWxrLmgtMjAtXHQvKlxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM9NTQ5PWludCBfX2luaXQgZmFkdW1wX3Jlc2VydmVfbWVtKHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy01OTQtXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjU5NTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy01OTYtXHRcdC8qXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUz0xNjY9c2V0X2l2b3I6XG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUy0zMDctICovXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TOjMwODojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUy0zMDktI2RlZmluZSBGSU5EX1BURVx0XFxcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TPTY2Nj1maW5pc2hfdGxiX2xvYWQ6XG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TOjY2NzojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUy02NjgtXHRjbXB3aVx0NiwgcjEwLCAwXHRcdFx0LyogY2hlY2sgZm9yIGh1Z2UgcGFnZSAqL1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlMtNzE4LVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUzo3MTk6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlMtNzIwLVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlM9NzM5PUVORF9NTVVfRlRSX1NFQ1RJT05fSUZTRVQoTU1VX0ZUUl9CSUdfUEhZUylcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TLTc0Mi1cdHJsd2ltaVx0cjEyLCByMTEsIDMyLTE5LCAyNywgMzFcdC8qIGV4dHJhY3QgV0lNR0UgZnJvbSBwdGUgKi9cbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlM6NzQzOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TLTc0NC1cdGJlcVx0NiwgM2ZcdFx0XHQvKiBkb24mIzM5O3QgbWFzayBpZiBwYWdlIGlzbiYjMzk7dCBodWdlICovXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUz03NTM9dGxiX3dyaXRlX2VudHJ5OlxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlMtNzU3LVx0bWZzcHJcdHIxMCwgU1BSTl9TUFJHX1RIUkVBRFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUzo3NTg6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlMtNzU5LVx0YmVxXHQ2LCA4ZiAvKiBza2lwIHJlc3RvcmUgZm9yIDRrIHBhZ2UgZmF1bHRzICovXG4tLVxuYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19OVU1BKSAmIzQzOz0gbnVtYS5vXG5hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSlcdCYjNDM7PSBodWdldGxicGFnZS5vXG5hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGUtMTYtb2JqLSQoQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSkgJiM0Mzs9IGRtYS1ub25jb2hlcmVudC5vXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L01ha2VmaWxlPTEyPWVuZGlmXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvTWFrZWZpbGUtMTMtXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSlcdCYjNDM7PSBodWdldGxicGFnZS5vXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvTWFrZWZpbGUtMTUtXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX1BQQ19SQURJWF9NTVUpXHQmIzQzOz0gcmFkaXhfcGd0YWJsZS5vIHJhZGl4X3RsYi5vXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvTWFrZWZpbGU6MTc6aWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19QUENfUkFESVhfTU1VKVx0JiM0Mzs9IHJhZGl4X2h1Z2V0bGJwYWdlLm9cbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF90bGIuYz00MT12b2lkIGhwdGVfbmVlZF9mbHVzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3RsYi5jLTYyLVx0aWYgKGh1Z2UpIHtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3RsYi5jOjYzOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF90bGIuYy02NC1cdFx0cHNpemUgPSBnZXRfc2xpY2VfcHNpemUobW0sIGFkZHIpO1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmM9ODQ2PXN0YXRpYyBpbnQgX19pbml0IGh0YWJfZHRfc2Nhbl9wYWdlX3NpemVzKHVuc2lnbmVkIGxvbmcgbm9kZSxcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTkyMy1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmM6OTI0OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTkyNS0vKlxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmM9OTI5PXN0YXRpYyBpbnQgX19pbml0IGh0YWJfZHRfc2Nhbl9odWdlcGFnZV9ibG9ja3ModW5zaWduZWQgbG9uZyBub2RlLFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmMtOTY2LX1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmM6OTY3OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTk2OC1cbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jPTk5Nj1zdGF0aWMgdm9pZCBfX2luaXQgaHRhYl9zY2FuX3BhZ2Vfc2l6ZXModm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTEwMTktXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jOjEwMjA6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmMtMTAyMS1cdGlmICghaHVnZXRsYl9kaXNhYmxlZCBcdTAwMjZcdTAwMjYgIWVhcmx5X3JhZGl4X2VuYWJsZWQoKSApIHtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTEwMjQtXHR9XG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jOjEwMjU6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmMtMTAyNi19XG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdXRpbHMuYz0xNzE4PWludCBoYXNoX3BhZ2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgZWEsXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdXRpbHMuYy0xODM4LVx0XHRcdFx0XHQgICAgIHRyYXAsIGZsYWdzLCBzc2l6ZSwgcHNpemUpO1xuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdXRpbHMuYzoxODM5OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTE4NDAtXHRcdGVsc2Vcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfdGxiLmM9NjI2PXZvaWQgcmFkaXhfX2xvY2FsX2ZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHZtYWRkcilcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYy02Mjcte1xuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3RsYi5jOjYyODojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3RsYi5jLTYyOS1cdC8qIG5lZWQgdGhlIHJldHVybiBmaXggZm9yIG5vaGFzaC5jICovXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3RsYi5jPTk0NT12b2lkIHJhZGl4X19mbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfdGxiLmMtOTQ2LXtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYzo5NDc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYy05NDgtXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3RsYi5jPTExMTE9dm9pZCByYWRpeF9fZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYy0xMTE0LXtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYzoxMTE1OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfdGxiLmMtMTExNi1cdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYz02MzY9RVhQT1JUX1NZTUJPTF9HUEwoc2xpY2VfZ2V0X3VubWFwcGVkX2FyZWEpO1xuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmMtNjM3LVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmM6NjM4OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYy02Mzktc3RhdGljIGludCBmaWxlX3RvX3BzaXplKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jPTc1Nz12b2lkIHNsaWNlX3NldF9yYW5nZV9wc2l6ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYy03NjctXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYzo3Njg6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jLTc2OS0vKlxuLS1cbmFyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmM9NjE3PXZvaWQgX19pbml0IG1tdV9lYXJseV9pbml0X2RldnRyZWUodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jLTY2NC1cbmFyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmM6NjY1Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFKSlcbmFyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMtNjY2LVx0XHRodWdldGxicGFnZV9pbml0X2RlZmF1bHRzaXplKCk7XG4tLVxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9NYWtlZmlsZT04PW9iai0kKENPTkZJR19SQU5ET01JWkVfQkFTRSlcdCYjNDM7PSBrYXNscl9ib29rZS5vXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL01ha2VmaWxlOjk6aWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfUFBDX0U1MDApXHQmIzQzOz0gZTUwMF9odWdldGxicGFnZS5vXG4tLVxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC90bGIuYz0yNzg9dm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL3RsYi5jLTI3OS17XG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL3RsYi5jOjI4MDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC90bGIuYy0yODEtXHRpZiAodm1hIFx1MDAyNlx1MDAyNiBpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcbi0tXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jPTI1NT1pbnQgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYy0yNjgtXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jOjI2OTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYy0yNzAtaW50IGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmM9MzUzPXZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMtMzgzLSNlbmRpZlxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYzozODQ6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMtMzg1LVxuLS1cbmFyY2gvcmlzY3YvbW0vTWFrZWZpbGU9MTk9b2JqLXkgJiM0Mzs9IHBtZW0ub1xuYXJjaC9yaXNjdi9tbS9NYWtlZmlsZS0yMC1cbmFyY2gvcmlzY3YvbW0vTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkgJiM0Mzs9IGh1Z2V0bGJwYWdlLm9cbmFyY2gvcmlzY3YvbW0vTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX1BURFVNUCkgJiM0Mzs9IHB0ZHVtcC5vXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaD0xMTExPXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMTE1LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMTE2OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTExMTctc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtodWdlKHB0ZV90IHB0ZSlcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTE1NjA9c3RhdGljIGlubGluZSBwdWRfdCBwdWRfbWtkaXJ0eShwdWRfdCBwdWQpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNTY3LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNTY4OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNTY5LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtYXNzYWdlX3BncHJvdF9wbWQocGdwcm90X3QgcGdwcm90KVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTYxOD1zdGF0aWMgaW5saW5lIHBtZF90IG1rX3BtZF9waHlzKHVuc2lnbmVkIGxvbmcgcGh5c3BhZ2UsIHBncHJvdF90IHBncHJvdClcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE2MjItXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjE2MjM6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSB8fCBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE2MjQtXG4tLVxuYXJjaC9zMzkwL21tL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19ERUJVR19WSVJUVUFMKVx0JiM0Mzs9IHBoeXNhZGRyLm9cbmFyY2gvczM5MC9tbS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKVx0JiM0Mzs9IGh1Z2V0bGJwYWdlLm9cbmFyY2gvczM5MC9tbS9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfUFREVU1QKVx0XHQmIzQzOz0gZHVtcF9wYWdldGFibGVzLm9cbi0tXG5hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZz0yNT1DT05GSUdfTUVNT1JZX1NJWkU9MHgxMDAwMDAwMFxuYXJjaC9zaC9jb25maWdzL2Fwc2g0YWQwYV9kZWZjb25maWc6MjY6Q09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQj15XG5hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZy0yNy1DT05GSUdfS1NNPXlcbi0tXG5hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWc9MTY9Q09ORklHX01FTU9SWV9TSVpFPTB4MDgwMDAwMDBcbmFyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZzoxNzpDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMU1CPXlcbmFyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZy0xOC1DT05GSUdfU0hfU1RPUkVfUVVFVUVTPXlcbi0tXG5hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4Nl9kZWZjb25maWc9NDQ9Q09ORklHX05VTUE9eVxuYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnOjQ1OkNPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NE1CPXlcbmFyY2gvc2gvY29uZmlncy9zZGs3Nzg2X2RlZmNvbmZpZy00Ni1DT05GSUdfS1NNPXlcbi0tXG5hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZz0xNz1DT05GSUdfUE1CPXlcbmFyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnOjE4OkNPTkZJR19IVUdFVExCX1BBR0VfU0laRV8xTUI9eVxuYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWctMTktQ09ORklHX1NIX1NUT1JFX1FVRVVFUz15XG4tLVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgtMTQtXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaDoxNTojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRLKVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgtMTYtI2RlZmluZSBIUEFHRV9TSElGVFx0MTZcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oOjE3OiNlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzI1NkspXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaC0xOC0jZGVmaW5lIEhQQUdFX1NISUZUXHQxOFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmg6MTk6I2VsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMU1CKVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgtMjAtI2RlZmluZSBIUEFHRV9TSElGVFx0MjBcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oOjIxOiNlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzRNQilcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oLTIyLSNkZWZpbmUgSFBBR0VfU0hJRlRcdDIyXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaDoyMzojZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NE1CKVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgtMjQtI2RlZmluZSBIUEFHRV9TSElGVFx0MjZcbi0tXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaC0yNi1cbmFyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oOjI3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaC0yOC0jZGVmaW5lIEhQQUdFX1NJWkVcdFx0KDFVTCBcdTAwM2NcdTAwM2MgSFBBR0VfU0hJRlQpXG4tLVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmg9OTc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvcHlfcHRlYV9hdHRyaWJ1dGVzKHVuc2lnbmVkIGxvbmcgeClcbi0tXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaC0xMzYtI2lmIGRlZmluZWQoQ09ORklHX1gyVExCKVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmg6MTM3OiMgaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRLKVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgtMTM4LSMgIGRlZmluZSBfUEFHRV9TWkhVR0VcdChfUEFHRV9FWFRfRVNaMilcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oOjEzOTojIGVsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMjU2SylcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oLTE0MC0jICBkZWZpbmUgX1BBR0VfU1pIVUdFXHQoX1BBR0VfRVhUX0VTWjAgfCBfUEFHRV9FWFRfRVNaMilcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oOjE0MTojIGVsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMU1CKVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgtMTQyLSMgIGRlZmluZSBfUEFHRV9TWkhVR0VcdChfUEFHRV9FWFRfRVNaMCB8IF9QQUdFX0VYVF9FU1oxIHwgX1BBR0VfRVhUX0VTWjIpXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaDoxNDM6IyBlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzRNQilcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oLTE0NC0jICBkZWZpbmUgX1BBR0VfU1pIVUdFXHQoX1BBR0VfRVhUX0VTWjMpXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaDoxNDU6IyBlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0TUIpXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaC0xNDYtIyAgZGVmaW5lIF9QQUdFX1NaSFVHRVx0KF9QQUdFX0VYVF9FU1oyIHwgX1BBR0VfRVhUX0VTWjMpXG4tLVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgtMTQ5LSNlbHNlXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaDoxNTA6IyBpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEspXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaC0xNTEtIyAgZGVmaW5lIF9QQUdFX1NaSFVHRVx0KF9QQUdFX1NaMSlcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oOjE1MjojIGVsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMU1CKVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgtMTUzLSMgIGRlZmluZSBfUEFHRV9TWkhVR0VcdChfUEFHRV9TWjAgfCBfUEFHRV9TWjEpXG4tLVxuYXJjaC9zaC9tbS9NYWtlZmlsZT0zNz1vYmotJChDT05GSUdfREVCVUdfRlMpXHRcdCYjNDM7PSAkKGRlYnVnZnMteSlcbmFyY2gvc2gvbW0vTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSlcdCYjNDM7PSBodWdldGxicGFnZS5vXG5hcmNoL3NoL21tL01ha2VmaWxlLTM5LW9iai0kKENPTkZJR19QTUIpXHRcdCYjNDM7PSBwbWIub1xuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTYtXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDo3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC04LXN0cnVjdCBwdWRfaHVnZV9wYXRjaF9lbnRyeSB7XG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfNjQuaD03NT1zdHJ1Y3QgdHNiX2NvbmZpZyB7XG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfNjQuaC04NS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vbW11XzY0Lmg6ODY6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tdV82NC5oLTg3LSNkZWZpbmUgTU1fVFNCX0hVR0VcdDFcbi0tXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzY0Lmg9Mzc9c3RhdGljIGlubGluZSB2b2lkIHRzYl9jb250ZXh0X3N3aXRjaF9jdHgoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF82NC5oLTQxLVx0XHRcdCAgICAgXHUwMDI2bW0tXHUwMDNlY29udGV4dC50c2JfYmxvY2tbTU1fVFNCX0JBU0VdLFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF82NC5oOjQyOiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIHx8IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF82NC5oLTQzLVx0XHRcdCAgICAgKG1tLVx1MDAzZWNvbnRleHQudHNiX2Jsb2NrW01NX1RTQl9IVUdFXS50c2IgP1xuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGFnZV82NC5oLTIzLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wYWdlXzY0Lmg6MjQ6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BhZ2VfNjQuaC0yNS0jZGVmaW5lIEhQQUdFX1NJWkVcdFx0KF9BQygxLFVMKSBcdTAwM2NcdTAwM2MgSFBBR0VfU0hJRlQpXG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wYWdlXzY0LmgtMzQtXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BhZ2VfNjQuaDozNTojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGFnZV82NC5oLTM2LXN0cnVjdCBwdF9yZWdzO1xuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oPTM3ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3dyaXRlKHB0ZV90IHB0ZSlcbi0tXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaC0zOTEtXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaDozOTI6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaC0zOTMtcHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsIHZtX2ZsYWdzX3QgZmxhZ3MpO1xuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oPTExNTY9YXNtbGlua2FnZSB2b2lkIGRvX3NwYXJjNjRfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oLTExNTktXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaDoxMTYwOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaC0xMTYxLVxuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oPTExNjk9ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHRlX2xlYWZfc2l6ZShwdGVfdCBwdGUpO1xuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgtMTE3MC1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oOjExNzE6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oLTExNzItXG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90c2IuaD03NT1leHRlcm4gc3RydWN0IHRzYl9waHlzX3BhdGNoX2VudHJ5IF9fdHNiX3BoeXNfcGF0Y2gsIF9fdHNiX3BoeXNfcGF0Y2hfZW5kO1xuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vdHNiLmgtMjA2LVx0ICovXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RzYi5oOjIwNzojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vdHNiLmgtMjA4LSNkZWZpbmUgVVNFUl9QR1RBQkxFX0NIRUNLX1BVRF9IVUdFKFZBRERSLCBSRUcxLCBSRUcyLCBGQUlMX0xBQkVMLCBQVEVfTEFCRUwpIFxcXG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90c2IuaC0yNDEtXHQgKi9cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vdHNiLmg6MjQyOiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIHx8IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90c2IuaC0yNDMtI2RlZmluZSBVU0VSX1BHVEFCTEVfQ0hFQ0tfUE1EX0hVR0UoVkFERFIsIFJFRzEsIFJFRzIsIEZBSUxfTEFCRUwsIFBURV9MQUJFTCkgXFxcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9zdW40dl90bGJfbWlzcy5TPTE3NT1zdW40dl90c2JfbWlzc19jb21tb246XG4tLVxuYXJjaC9zcGFyYy9rZXJuZWwvc3VuNHZfdGxiX21pc3MuUy0xNzktXG5hcmNoL3NwYXJjL2tlcm5lbC9zdW40dl90bGJfbWlzcy5TOjE4MDojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbmFyY2gvc3BhcmMva2VybmVsL3N1bjR2X3RsYl9taXNzLlMtMTgxLVx0bW92XHRTQ1JBVENIUEFEX1VUU0JSRUcyLCAlZzVcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC90c2IuUz01MT10c2JfbWlzc19wYWdlX3RhYmxlX3dhbGs6XG4tLVxuYXJjaC9zcGFyYy9rZXJuZWwvdHNiLlMtNTYtXHQgKi9cbmFyY2gvc3BhcmMva2VybmVsL3RzYi5TOjU3OiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIHx8IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxuYXJjaC9zcGFyYy9rZXJuZWwvdHNiLlMtNTgtXG4tLVxuYXJjaC9zcGFyYy9rZXJuZWwvdHNiLlM9MTE1PXRzYl9taXNzX3BhZ2VfdGFibGVfd2Fsa19zdW40dl9mYXN0cGF0aDpcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC90c2IuUy0xMTktXG5hcmNoL3NwYXJjL2tlcm5lbC90c2IuUzoxMjA6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG5hcmNoL3NwYXJjL2tlcm5lbC90c2IuUy0xMjEtXHRzZXRoaVx0XHQldWhpKF9QQUdFX1BNRF9IVUdFIHwgX1BBR0VfUFVEX0hVR0UpLCAlZzdcbi0tXG5hcmNoL3NwYXJjL21tL01ha2VmaWxlPTExPW9iai0kKENPTkZJR19TUEFSQzMyKSAgICYjNDM7PSBsZW9uX21tLm9cbi0tXG5hcmNoL3NwYXJjL21tL01ha2VmaWxlLTEzLSMgT25seSB1c2VkIGJ5IHNwYXJjNjRcbmFyY2gvc3BhcmMvbW0vTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkgJiM0Mzs9IGh1Z2V0bGJwYWdlLm9cbmFyY2gvc3BhcmMvbW0vTWFrZWZpbGUtMTUtXG4tLVxuYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jPTc5PXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VzZXJfaW5zbih1bnNpZ25lZCBsb25nIHRwYylcbi0tXG5hcmNoL3NwYXJjL21tL2ZhdWx0XzY0LmMtMTA1LVxuYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jOjEwNjojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbmFyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYy0xMDctXHRpZiAoaXNfaHVnZXRsYl9wbWQoKnBtZHApKSB7XG4tLVxuYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jPTI2Nz1hc21saW5rYWdlIHZvaWQgX19rcHJvYmVzIGRvX3NwYXJjNjRfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jLTQ3Mi1cdFx0dHNiX2dyb3cobW0sIE1NX1RTQl9CQVNFLCBtbV9yc3MpO1xuYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jOjQ3MzojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbmFyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYy00NzQtXHRtbV9yc3MgPSBtbS1cdTAwM2Vjb250ZXh0Lmh1Z2V0bGJfcHRlX2NvdW50ICYjNDM7IG1tLVx1MDAzZWNvbnRleHQudGhwX3B0ZV9jb3VudDtcbi0tXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYz0zMTM9c3RhdGljIHZvaWQgX191cGRhdGVfbW11X3RzYl9pbnNlcnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdHNiX2luZGV4LFxuLS1cbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jLTMyOC1cbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jOjMyOTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMzMwLXN0YXRpYyBpbnQgX19pbml0IGh1Z2V0bGJwYWdlX2luaXQodm9pZClcbi0tXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYz0zNTQ9Ym9vbCBfX2luaXQgYXJjaF9odWdldGxiX3ZhbGlkX3NpemUodW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jLTM4NC19XG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYzozODU6I2VuZGlmXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYy0zODYtXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYz0zODc9dm9pZCB1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYy00MTEtXHRpc19odWdlX3RzYiA9IGZhbHNlO1xuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmM6NDEyOiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIHx8IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtNDEzLVx0aWYgKG1tLVx1MDAzZWNvbnRleHQuaHVnZXRsYl9wdGVfY291bnQgfHwgbW0tXHUwMDNlY29udGV4dC50aHBfcHRlX2NvdW50KSB7XG4tLVxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmM9Mjg4Mj12b2lkIHVwZGF0ZV9tbXVfY2FjaGVfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMjkxMi1cbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jOjI5MTM6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYy0yOTE0LXN0YXRpYyB2b2lkIGNvbnRleHRfcmVsb2FkKHZvaWQgKl9fZGF0YSlcbi0tXG5hcmNoL3NwYXJjL21tL3RzYi5jPTgzPXN0YXRpYyB2b2lkIF9fZmx1c2hfdHNiX29uZShzdHJ1Y3QgdGxiX2JhdGNoICp0YiwgdW5zaWduZWQgbG9uZyBoYXNoX3NoaWZ0LFxuLS1cbmFyY2gvc3BhcmMvbW0vdHNiLmMtOTEtXG5hcmNoL3NwYXJjL21tL3RzYi5jOjkyOiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIHx8IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxuYXJjaC9zcGFyYy9tbS90c2IuYy05My1zdGF0aWMgdm9pZCBfX2ZsdXNoX2h1Z2VfdHNiX29uZV9lbnRyeSh1bnNpZ25lZCBsb25nIHRzYiwgdW5zaWduZWQgbG9uZyB2LFxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5OTgKCQkJCQkJCW91dHB1dDogMTIzCgkJCQkJCQl0aG91Z2h0czogMTY1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZpcnR1YWwgTWFwcGluZyBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19IVUdFVExCX1BBR0VgIGp1bXBzIG91dC4gSXQmIzM5O3MgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiB0aGF0IGNvbnRyb2xzIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBoZXJlLiBUaGUgY2hhbmdlcyB0b3VjaCBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmhgLCBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYCwgYW5kIGBtbS92bWFsbG9jLmNgLgoKSW4gYG1tL3ZtYWxsb2MuY2AsIEkgc2VlIGNvZGUgZ3VhcmRlZCBieSBgQ09ORklHX0hVR0VUTEJfUEFHRWAgdGhhdCYjMzk7cyBjbGVhcmx5IHJlbGF0ZWQgdG8gaGFuZGxpbmcgaHVnZSBwYWdlIG1hcHBpbmdzIHdpdGhpbiB0aGUgdm1hbGxvYyBhcmVuYS4gVGhlIGNvZGUgY2hlY2tzIGZvciBgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AgYW5kIGBIQVZFX0FSQ0hfSFVHRV9WTUFQYCwgd2hpY2ggYXBwZWFyIHRvIGJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmZWF0dXJlcy4gT24gQVJNNjQsIHRoZXNlIGFyZSBpbXBsaWNpdGx5IGVuYWJsZWQgYnkgYENPTkZJR19BUk02NGAsIHdoaWNoIG1lYW5zIHRoZXkmIzM5O3JlIGFsd2F5cyBhY3RpdmUuIFRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gYG51bV9jb250aWdfcHRlc2AgdG8gaGFuZGxlIHRoZSBzaXplIG9mIGEgcGFnZSBiZWluZyBtYXBwZWQuCgpTcGVjaWZpY2FsbHksIGluIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaGAsIGBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplYCBoYXMgYmVlbiBtb2RpZmllZCwgbGlrZWx5IHRvIHN1cHBvcnQgY29udGlndW91cyBQVEUgbWFwcGluZ3MuIEl0IGRldGVybWluZXMgdGhlIG9wdGltYWwgc2l6ZSBmb3IgYSBjb250aWd1b3VzIG1hcHBpbmcgYmFzZWQgb24gYWxpZ25tZW50IGFuZCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSYjMzk7cyBjYXBhYmlsaXRpZXMuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB3aGljaCBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhpcyBjaGFuZ2UuIGB2bWFwX3NldF9wdGVzYCBpcyBgX19hbHdheXNfaW5saW5lYCwgc28gdGhhdCYjMzk7cyBub3QgYSBzdGFuZGFsb25lIGZ1bmN0aW9uIGluIHRoZSBiaW5hcnkuIGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgLCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCwgYW5kIGB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa2AgYXJlIGFsbCBzdGF0aWMsIG1lYW5pbmcgdGhleSBhcmUgbGlrZWx5IGludGVybmFsbHkgY2FsbGVkLiBIb3dldmVyLCB0aGVzZSBjYW4gc3RpbGwgYmUgZnV6emVkLCBkZXBlbmRpbmcgb24gdGhlIGZ1enppbmcgdG9vbC4gRmluYWxseSwgYHZtYXBgLCBgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hgLCBhbmQgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaGAgYXJlIGFsbCBleHBvcnRlZCBhbmQgcmVwcmVzZW50IHRoZSBlbnRyeSBwb2ludHMuCgpDaGVja2luZyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIGBIVUdFVExCX1BBR0VgIGlzIHRoZSBjcml0aWNhbCBvbmUuIGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCBhbmQgYEhBVkVfQVJDSF9IVUdFX1ZNQVBgIGFyZSBhcmNoaXRlY3R1cmFsbHktc2VsZWN0ZWQgYW5kIHNvIHdlIHdvbiYjMzk7dCBuZWVkIHRvIHNwZWNpZnkgdGhlc2UuIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyB0eXBpY2FsbHkgZW5hYmxlZCBpZiBgQ09ORklHX0hVR0VUTEJGU2AgaXMgZW5hYmxlZC4gVGhlcmVmb3JlLCBvdXIgJiMzNDtFbmFibGVDb25maWdzJiMzNDsgbGlzdCB3aWxsIGluY2x1ZGUgJiMzNDtIVUdFVExCX1BBR0UmIzM0Oy4KCkkgdGhpbmsgd2Ugc2hvdWxkIGNvbmNlbnRyYXRlIG9uIHRoZXNlIGZ1bmN0aW9uczogYHZtYXBgLCBgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkYCwgYHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYWAsIGB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa2AsIGFuZCBgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZWxlbWVudHMgb2YgdGhlIGJhdGNoZWQgbWFwcGluZyBsb2dpYywgZXNwZWNpYWxseSBgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkYCwgd2hpY2ggYXBwZWFycyB0byBiZSB0aGUgbW9zdCBub3ZlbCBwYXJ0IG9mIHRoZSBjaGFuZ2UuCgpGaW5hbGx5LCByZWdhcmRpbmcgcG90ZW50aWFsIGZ1enppbmcsIHRoaXMgY2hhbmdlIHRvIHZpcnR1YWwgbWFwcGluZyBpcyBkZWZpbml0ZWx5IHdvcnRoIHRhcmdldGluZy4gSXQgaW50cm9kdWNlcyBuZXcgY29udGlndW91cyBtYXBwaW5ncyBhdCB0aGUgUFRFIGxldmVsIHdoaWNoIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSBjb3JlIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMuIFRoZSBmdW5jdGlvbnMgaW52b2x2ZWQgYXJlbiYjMzk7dCBvbiBhbnkgaG90IHBhdGhzIHNvIHRoZXNlIGFyZSBsaWtlbHkgc2FmZSB0byB0YXJnZXQgaW4gZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hcCYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWQmIzM0OywKICAgICYjMzQ7dm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhJiMzNDssCiAgICAmIzM0O3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrJiMzNDssCiAgICAmIzM0O19fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYmF0Y2hlZCBjb250aWd1b3VzIG1hcHBpbmdzIGF0IHRoZSBQVEUgbGV2ZWwgZm9yIHZtYXAsIG1vZGlmeWluZyBjb3JlIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXAmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkJiMzNDssCiAgICAmIzM0O3ZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayYjMzQ7LAogICAgJiMzNDtfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGJhdGNoZWQgY29udGlndW91cyBtYXBwaW5ncyBhdCB0aGUgUFRFIGxldmVsIGZvciB2bWFwLCBtb2RpZnlpbmcgY29yZSB2aXJ0dWFsIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDZUMDk6MDk6MTkuMjQ3MDQ2OTUzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI1MDAzODg3MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQl9QQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1hcFwiLFxuICAgIFwidm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkXCIsXG4gICAgXCJ2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWFcIixcbiAgICBcInZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrXCIsXG4gICAgXCJfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYmF0Y2hlZCBjb250aWd1b3VzIG1hcHBpbmdzIGF0IHRoZSBQVEUgbGV2ZWwgZm9yIHZtYXAsIG1vZGlmeWluZyBjb3JlIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA5OjA5OjE5LjI0NzA1NTQ5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4OTAxMzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjM0Nzk4MjEwYzQyMDk4NzFkMjIxMWUyMTUxNjA2ZTljMWVmM2RiNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCA2IDA5OjA5OjE4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmhcXG5pbmRleCA0ZWMxYWNkM2MxYjM0OC4uN2Q5YzdkYzc5NWM0MmMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaFxcbkBAIC0yMyw2ICsyMyw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplKHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHU2NCBwZm4sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdClcXG4ge1xcbitcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBJZiB0aGUgYmxvY2sgaXMgYXQgbGVhc3QgQ09OVF9QVEVfU0laRSBpbiBzaXplLCBhbmQgaXMgbmF0dXJhbGx5XFxuIFxcdCAqIGFsaWduZWQgaW4gYm90aCB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBzcGFjZSwgdGhlbiB3ZSBjYW4gcHRlLW1hcCB0aGVcXG5AQCAtNDAsNyArNDIsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZSh1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdGlmICghSVNfQUxJR05FRChQRk5fUEhZUyhwZm4pLCBDT05UX1BURV9TSVpFKSlcXG4gXFx0XFx0cmV0dXJuIFBBR0VfU0laRTtcXG4gXFxuLVxcdHJldHVybiBDT05UX1BURV9TSVpFO1xcbitcXHRzaXplID0gbWluMyhlbmQgLSBhZGRyLCAxVUwgXFx1MDAzY1xcdTAwM2MgbWF4X3BhZ2Vfc2hpZnQsIFBNRF9TSVpFIFxcdTAwM2VcXHUwMDNlIDEpO1xcbitcXHRzaXplID0gcm91bmRkb3duX3Bvd19vZl90d28oc2l6ZSk7XFxuK1xcdHJldHVybiBzaXplO1xcbiB9XFxuIFxcbiAjZGVmaW5lIGFyY2hfdm1hcF9wdGVfcmFuZ2VfdW5tYXBfc2l6ZSBhcmNoX3ZtYXBfcHRlX3JhbmdlX3VubWFwX3NpemVcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jXFxuaW5kZXggMzA3NzJhOTA5YWVhM2UuLmQ2MDBhNmQ3NTFlMjk1IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xcbisrKyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xcbkBAIC0xMTAsNiArMTEwLDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IG51bV9jb250aWdfcHRlcyh1bnNpZ25lZCBsb25nIHNpemUsIHNpemVfdCAqcGdzaXplKVxcbiBcXHRcXHRjb250aWdfcHRlcyA9IENPTlRfUFRFUztcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuK1xcdFxcdGlmIChzaXplIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBzaXplIFxcdTAwM2MgUE1EX1NJWkUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0SVNfQUxJR05FRChzaXplLCBDT05UX1BURV9TSVpFKSkge1xcbitcXHRcXHRcXHQqcGdzaXplID0gUEFHRV9TSVpFO1xcbitcXHRcXHRcXHRjb250aWdfcHRlcyA9IHNpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4gXFx0XFx0V0FSTl9PTighX19odWdldGxiX3ZhbGlkX3NpemUoc2l6ZSkpO1xcbiBcXHR9XFxuIFxcbkBAIC0zNTksNiArMzY1LDEwIEBAIHB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKVxcbiBcXHRjYXNlIENPTlRfUFRFX1NJWkU6XFxuIFxcdFxcdHJldHVybiBwdGVfbWtjb250KGVudHJ5KTtcXG4gXFx0ZGVmYXVsdDpcXG4rXFx0XFx0aWYgKHBhZ2VzaXplIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBwYWdlc2l6ZSBcXHUwMDNjIFBNRF9TSVpFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdElTX0FMSUdORUQocGFnZXNpemUsIENPTlRfUFRFX1NJWkUpKVxcbitcXHRcXHRcXHRyZXR1cm4gcHRlX21rY29udChlbnRyeSk7XFxuK1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXHRwcl93YXJuKFxcXCIlczogdW5yZWNvZ25pemVkIGh1Z2UgcGFnZSBzaXplIDB4JWx4XFxcXG5cXFwiLFxcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcXG5pbmRleCAxMmY0YTM5ZmRkMGIzZS4uYTA4ODY4MGMzOWZjMTIgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hbGxvYy5jXFxuKysrIGIvbW0vdm1hbGxvYy5jXFxuQEAgLTkxLDYgKzkxLDMzIEBAIHN0cnVjdCB2ZnJlZV9kZWZlcnJlZCB7XFxuIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdmZyZWVfZGVmZXJyZWQsIHZmcmVlX2RlZmVycmVkKTtcXG4gXFxuIC8qKiogUGFnZSB0YWJsZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zICoqKi9cXG4rXFxuKy8qXFxuKyAqIFRyeSBjb250aWd1b3VzIG1hcHBpbmdzIGF0IHRoZSBQVEUgbGV2ZWwgZm9yIGFyY2hlcyB3aGljaCBzdXBwb3J0IHRoZW0sIGFuZCBpZlxcbisgKiByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4gRmFsbCBiYWNrIHRvIFBBR0VfU0laRSBtYXBwaW5ncyBvdGhlcndpc2UuXFxuKyAqXFxuKyAqIFJldHVybjogbWFwcGluZyBzaXplLlxcbisgKi9cXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZtYXBfc2V0X3B0ZXMocHRlX3QgKnB0ZSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgdTY0IHBmbixcXG4rXFx0XFx0cGdwcm90X3QgcHJvdCwgdW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0KVxcbit7XFxuKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcXG4rXFxuK1xcdHNpemUgPSBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplKGFkZHIsIGVuZCwgcGZuLCBtYXhfcGFnZV9zaGlmdCk7XFxuK1xcdGlmIChzaXplICE9IFBBR0VfU0laRSkge1xcbitcXHRcXHRwdGVfdCBlbnRyeSA9IHBmbl9wdGUocGZuLCBwcm90KTtcXG4rXFxuK1xcdFxcdGVudHJ5ID0gYXJjaF9tYWtlX2h1Z2VfcHRlKGVudHJ5LCBpbG9nMihzaXplKSwgMCk7XFxuK1xcdFxcdHNldF9odWdlX3B0ZV9hdChcXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSwgc2l6ZSk7XFxuK1xcdFxcdHJldHVybiBzaXplO1xcbitcXHR9XFxuKyNlbmRpZlxcbitcXHRzZXRfcHRlX2F0KFxcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIHBmbl9wdGUocGZuLCBwcm90KSk7XFxuK1xcdHJldHVybiBQQUdFX1NJWkU7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0XFx0cGh5c19hZGRyX3QgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90LFxcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQsIHBndGJsX21vZF9tYXNrICptYXNrKVxcbkBAIC05OCw3ICsxMjUsOCBAQCBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdHB0ZV90ICpwdGU7XFxuIFxcdHU2NCBwZm47XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbi1cXHR1bnNpZ25lZCBsb25nIHNpemUgPSBQQUdFX1NJWkU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcXG4rXFx0dW5zaWduZWQgaW50IHN0ZXBzO1xcbiBcXG4gXFx0aWYgKFdBUk5fT05fT05DRSghUEFHRV9BTElHTkVEKGVuZCAtIGFkZHIpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTExOSwyMCArMTQ3LDkgQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRCVUcoKTtcXG4gXFx0XFx0fVxcbiBcXG4tI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4tXFx0XFx0c2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUoYWRkciwgZW5kLCBwZm4sIG1heF9wYWdlX3NoaWZ0KTtcXG4tXFx0XFx0aWYgKHNpemUgIT0gUEFHRV9TSVpFKSB7XFxuLVxcdFxcdFxcdHB0ZV90IGVudHJ5ID0gcGZuX3B0ZShwZm4sIHByb3QpO1xcbi1cXG4tXFx0XFx0XFx0ZW50cnkgPSBhcmNoX21ha2VfaHVnZV9wdGUoZW50cnksIGlsb2cyKHNpemUpLCAwKTtcXG4tXFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KFxcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5LCBzaXplKTtcXG4tXFx0XFx0XFx0cGZuICs9IFBGTl9ET1dOKHNpemUpO1xcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fVxcbi0jZW5kaWZcXG4tXFx0XFx0c2V0X3B0ZV9hdChcXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBwZm5fcHRlKHBmbiwgcHJvdCkpO1xcbi1cXHRcXHRwZm4rKztcXG4tXFx0fSB3aGlsZSAocHRlICs9IFBGTl9ET1dOKHNpemUpLCBhZGRyICs9IHNpemUsIGFkZHIgIT0gZW5kKTtcXG4rXFx0XFx0c2l6ZSA9IHZtYXBfc2V0X3B0ZXMocHRlLCBhZGRyLCBlbmQsIHBmbiwgcHJvdCwgbWF4X3BhZ2Vfc2hpZnQpO1xcbitcXHRcXHRzdGVwcyA9IFBGTl9ET1dOKHNpemUpO1xcbitcXHR9IHdoaWxlIChwdGUgKz0gc3RlcHMsIHBmbiArPSBzdGVwcywgYWRkciArPSBzaXplLCBhZGRyICE9IGVuZCk7XFxuIFxcbiBcXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcXG4gXFx0Km1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEO1xcbkBAIC01MjQsOCArNTQxLDEwIEBAIHZvaWQgdnVubWFwX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIFxcbiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsXFxuLVxcdFxcdHBndGJsX21vZF9tYXNrICptYXNrKVxcbitcXHRcXHRwZ3RibF9tb2RfbWFzayAqbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0KVxcbiB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcGZuLCBzaXplO1xcbitcXHR1bnNpZ25lZCBpbnQgc3RlcHM7XFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXHRwdGVfdCAqcHRlO1xcbiBcXG5AQCAtNTU2LDkgKzU3NSwxMCBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHNldF9wdGVfYXQoXFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgbWtfcHRlKHBhZ2UsIHByb3QpKTtcXG4tXFx0XFx0KCpucikrKztcXG4tXFx0fSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7XFxuK1xcdFxcdHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbitcXHRcXHRzaXplID0gdm1hcF9zZXRfcHRlcyhwdGUsIGFkZHIsIGVuZCwgcGZuLCBwcm90LCBzaGlmdCk7XFxuK1xcdFxcdHN0ZXBzID0gUEZOX0RPV04oc2l6ZSk7XFxuK1xcdH0gd2hpbGUgKHB0ZSArPSBzdGVwcywgKm5yICs9IHN0ZXBzLCBhZGRyICs9IHNpemUsIGFkZHIgIT0gZW5kKTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXHQqbWFzayB8PSBQR1RCTF9QVEVfTU9ESUZJRUQ7XFxuQEAgLTU2OCw3ICs1ODgsNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFxuIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucixcXG4tXFx0XFx0cGd0YmxfbW9kX21hc2sgKm1hc2spXFxuK1xcdFxcdHBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpXFxuIHtcXG4gXFx0cG1kX3QgKnBtZDtcXG4gXFx0dW5zaWduZWQgbG9uZyBuZXh0O1xcbkBAIC01NzgsNyArNTk4LDI3IEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0ZG8ge1xcbiBcXHRcXHRuZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7XFxuLVxcdFxcdGlmICh2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaykpXFxuK1xcbitcXHRcXHRpZiAoc2hpZnQgXFx1MDAzZT0gUE1EX1NISUZUKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gcGFnZXNbKm5yXTtcXG4rXFx0XFx0XFx0cGh5c19hZGRyX3QgcGh5c19hZGRyO1xcbitcXG4rXFx0XFx0XFx0aWYgKFdBUk5fT04oIXBhZ2UpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0XFx0aWYgKFdBUk5fT04oIXBmbl92YWxpZChwYWdlX3RvX3BmbihwYWdlKSkpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdFxcdHBoeXNfYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKTtcXG4rXFxuK1xcdFxcdFxcdGlmICh2bWFwX3RyeV9odWdlX3BtZChwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgcHJvdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c2hpZnQpKSB7XFxuK1xcdFxcdFxcdFxcdCptYXNrIHw9IFBHVEJMX1BNRF9NT0RJRklFRDtcXG4rXFx0XFx0XFx0XFx0Km5yICs9IDEgXFx1MDAzY1xcdTAwM2MgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpO1xcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAodm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH0gd2hpbGUgKHBtZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNTg2LDcgKzYyNiw3IEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXG4gc3RhdGljIGludCB2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLFxcbi1cXHRcXHRwZ3RibF9tb2RfbWFzayAqbWFzaylcXG4rXFx0XFx0cGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdClcXG4ge1xcbiBcXHRwdWRfdCAqcHVkO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5leHQ7XFxuQEAgLTU5Niw3ICs2MzYsNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdGRvIHtcXG4gXFx0XFx0bmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xcbi1cXHRcXHRpZiAodm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2spKVxcbitcXHRcXHRpZiAodm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNjA0LDcgKzY0NCw3IEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXG4gc3RhdGljIGludCB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLFxcbi1cXHRcXHRwZ3RibF9tb2RfbWFzayAqbWFzaylcXG4rXFx0XFx0cGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdClcXG4ge1xcbiBcXHRwNGRfdCAqcDRkO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5leHQ7XFxuQEAgLTYxNCwxNCArNjU0LDE4IEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0ZG8ge1xcbiBcXHRcXHRuZXh0ID0gcDRkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XFxuLVxcdFxcdGlmICh2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaykpXFxuK1xcdFxcdGlmICh2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaywgc2hpZnQpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fSB3aGlsZSAocDRkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi1cXHRcXHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxcbisvKlxcbisgKiBJdCBjYW4gdGFrZSBhbiBhcnJheSBvZiBwYWdlcyB3aGljaCBhcmUgbm90IGFsbCBjb250aWd1b3VzLCBidXQgaXRcXG4rICogbWF5IGhhdmUgY29udGlndW91cyBjaHVua3MsIGFzIGhpbnRlZCBieSBAc2hpZnQuXFxuKyAqL1xcbitzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuK1xcdFxcdHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBzaGlmdClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcjtcXG4gXFx0cGdkX3QgKnBnZDtcXG5AQCAtNjM2LDcgKzY4MCw3IEBAIHN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcXG4gXFx0XFx0aWYgKHBnZF9iYWQoKnBnZCkpXFxuIFxcdFxcdFxcdG1hc2sgfD0gUEdUQkxfUEdEX01PRElGSUVEO1xcbi1cXHRcXHRlcnIgPSB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2QsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBcXHUwMDI2bnIsIFxcdTAwMjZtYXNrKTtcXG4rXFx0XFx0ZXJyID0gdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgXFx1MDAyNm5yLCBcXHUwMDI2bWFzaywgc2hpZnQpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fSB3aGlsZSAocGdkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XFxuQEAgLTY1OSwyNyArNzAzLDEyIEBAIHN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIGludCBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgcGFnZV9zaGlmdClcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgaSwgbnIgPSAoZW5kIC0gYWRkcikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4tXFxuIFxcdFdBUk5fT04ocGFnZV9zaGlmdCBcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbiBcXG4tXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DKSB8fFxcbi1cXHRcXHRcXHRwYWdlX3NoaWZ0ID09IFBBR0VfU0hJRlQpXFxuLVxcdFxcdHJldHVybiB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2goYWRkciwgZW5kLCBwcm90LCBwYWdlcyk7XFxuLVxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnI7IGkgKz0gMVUgXFx1MDAzY1xcdTAwM2MgKHBhZ2Vfc2hpZnQgLSBQQUdFX1NISUZUKSkge1xcbi1cXHRcXHRpbnQgZXJyO1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MpKVxcbitcXHRcXHRwYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDtcXG4gXFxuLVxcdFxcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICsgKDFVTCBcXHUwMDNjXFx1MDAzYyBwYWdlX3NoaWZ0KSxcXG4tXFx0XFx0XFx0XFx0XFx0cGFnZV90b19waHlzKHBhZ2VzW2ldKSwgcHJvdCxcXG4tXFx0XFx0XFx0XFx0XFx0cGFnZV9zaGlmdCk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuLVxcbi1cXHRcXHRhZGRyICs9IDFVTCBcXHUwMDNjXFx1MDAzYyBwYWdlX3NoaWZ0O1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMsIHBhZ2Vfc2hpZnQpO1xcbiB9XFxuIFxcbiBpbnQgdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuQEAgLTMyNzksNiArMzMwOCwxNCBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfdm1fYXJlYV9jYWxsZXIodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxcbiBcXHRcXHRcXHRcXHQgIE5VTUFfTk9fTk9ERSwgR0ZQX0tFUk5FTCwgY2FsbGVyKTtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKl9fZ2V0X3ZtX2FyZWFfbm9kZV9hbGlnbmVkX2NhbGxlcih1bnNpZ25lZCBsb25nIHNpemUsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IHZvaWQgKmNhbGxlcilcXG4re1xcbitcXHRyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIGFsaWduLCBQQUdFX1NISUZULCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0ICBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcXG4rXFx0XFx0XFx0XFx0ICBOVU1BX05PX05PREUsIEdGUF9LRVJORUwsIGNhbGxlcik7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBmaW5kX3ZtX2FyZWEgLSBmaW5kIGEgY29udGludW91cyBrZXJuZWwgdmlydHVhbCBhcmVhXFxuICAqIEBhZGRyOlxcdCAgYmFzZSBhZGRyZXNzXFxuQEAgLTM1MTksNiArMzU1NiwxMTMgQEAgdm9pZCB2dW5tYXAoY29uc3Qgdm9pZCAqYWRkcilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHZ1bm1hcCk7XFxuIFxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB2bV9zaGlmdChwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBsb25nIHNpemUpXFxuK3tcXG4rXFx0aWYgKGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKHByb3QpIFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzZT0gUE1EX1NJWkUpXFxuK1xcdFxcdHJldHVybiBQTURfU0hJRlQ7XFxuK1xcbitcXHRyZXR1cm4gYXJjaF92bWFwX3B0ZV9zdXBwb3J0ZWRfc2hpZnQoc2l6ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGdldF92bWFwX2JhdGNoX29yZGVyKHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuK1xcdFxcdHBncHJvdF90IHByb3QsIHVuc2lnbmVkIGludCBtYXhfc3RlcHMsIHVuc2lnbmVkIGludCBpZHgpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IG5yX2NvbnRpZztcXG4rXFx0aW50IG9yZGVyO1xcbitcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFQKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRucl9jb250aWcgPSBudW1fcGFnZXNfY29udGlndW91cyhcXHUwMDI2cGFnZXNbaWR4XSwgbWF4X3N0ZXBzKTtcXG4rXFx0aWYgKG5yX2NvbnRpZyBcXHUwMDNjIDIpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0b3JkZXIgPSBpbG9nMihucl9jb250aWcpO1xcbitcXG4rXFx0LyogTGltaXQgb3JkZXIgYnkgcGZuIGFsaWdubWVudCAqL1xcbitcXHRvcmRlciA9IG1pbl90KGludCwgb3JkZXIsIF9fZmZzKHBhZ2VfdG9fcGZuKHBhZ2VzW2lkeF0pKSk7XFxuK1xcbitcXHRpZiAodm1fc2hpZnQocHJvdCwgUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSA9PSBQQUdFX1NISUZUKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiBvcmRlcjtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4rXFx0XFx0cGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgY291bnQgPSAoZW5kIC0gYWRkcikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4rXFx0dW5zaWduZWQgaW50IHByZXZfc2hpZnQgPSAwLCBpZHggPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIG1hcF9hZGRyID0gYWRkciwgYmF0Y2hfZW5kID0gYWRkcjtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IGttc2FuX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaChhZGRyLCBlbmQsIHByb3QsIHBhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRQQUdFX1NISUZULCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIGNvdW50OyApIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHNoaWZ0ID0gUEFHRV9TSElGVCArXFxuK1xcdFxcdFxcdGdldF92bWFwX2JhdGNoX29yZGVyKHBhZ2VzLCBwcm90LCBjb3VudCAtIGksIGkpO1xcbitcXG4rXFx0XFx0aWYgKCFpKVxcbitcXHRcXHRcXHRwcmV2X3NoaWZ0ID0gc2hpZnQ7XFxuK1xcbitcXHRcXHRpZiAoc2hpZnQgIT0gcHJldl9zaGlmdCkge1xcbitcXHRcXHRcXHRlcnIgPSB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhtYXBfYWRkciwgYmF0Y2hfZW5kLFxcbitcXHRcXHRcXHRcXHRcXHRwcm90LCBwYWdlcyArIGlkeCwgcHJldl9zaGlmdCk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRwcmV2X3NoaWZ0ID0gc2hpZnQ7XFxuK1xcdFxcdFxcdG1hcF9hZGRyID0gYmF0Y2hfZW5kO1xcbitcXHRcXHRcXHRpZHggPSBpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBPbmNlIHNtYWxsIHBhZ2VzIGFyZSBlbmNvdW50ZXJlZCwgdGhlIHJlbWFpbmluZyBwYWdlc1xcbitcXHRcXHQgKiBhcmUgbGlrZWx5IHNtYWxsIGFzIHdlbGwuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoc2hpZnQgPT0gUEFHRV9TSElGVClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRiYXRjaF9lbmQgKz0gMVVMIFxcdTAwM2NcXHUwMDNjIHNoaWZ0O1xcbitcXHRcXHRpICs9IDFVIFxcdTAwM2NcXHUwMDNjIChzaGlmdCAtIFBBR0VfU0hJRlQpO1xcbitcXHR9XFxuK1xcbitcXHQvKiBSZW1haW5pbmcgKi9cXG4rXFx0aWYgKG1hcF9hZGRyIFxcdTAwM2MgZW5kKVxcbitcXHRcXHRlcnIgPSB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhtYXBfYWRkciwgZW5kLFxcbitcXHRcXHRcXHRcXHRwcm90LCBwYWdlcyArIGlkeCwgcHJldl9zaGlmdCk7XFxuK1xcbitvdXQ6XFxuK1xcdGZsdXNoX2NhY2hlX3ZtYXAoYWRkciwgZW5kKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKnZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHBncHJvdF90IHByb3QsIGNvbnN0IHZvaWQgKmNhbGxlcilcXG4re1xcbitcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhO1xcbitcXHR1bnNpZ25lZCBpbnQgc2hpZnQ7XFxuK1xcbitcXHRpZiAoYXJjaF92bWFwX3BtZF9zdXBwb3J0ZWQocHJvdCkgXFx1MDAyNlxcdTAwMjYgc2l6ZSBcXHUwMDNlPSBQTURfU0laRSkge1xcbitcXHRcXHR2bV9hcmVhID0gX19nZXRfdm1fYXJlYV9ub2RlX2FsaWduZWRfY2FsbGVyKHNpemUsIFBNRF9TSVpFLFxcbitcXHRcXHRcXHRcXHRmbGFncywgY2FsbGVyKTtcXG4rXFx0XFx0aWYgKHZtX2FyZWEpXFxuK1xcdFxcdFxcdHJldHVybiB2bV9hcmVhO1xcbitcXHR9XFxuK1xcbitcXHRzaGlmdCA9IGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpO1xcbitcXHRpZiAoc2hpZnQgXFx1MDAzZSBQQUdFX1NISUZUKSB7XFxuK1xcdFxcdHZtX2FyZWEgPSBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgMVVMIFxcdTAwM2NcXHUwMDNjIHNoaWZ0LFxcbitcXHRcXHRcXHRcXHRmbGFncywgY2FsbGVyKTtcXG4rXFx0XFx0aWYgKHZtX2FyZWEpXFxuK1xcdFxcdFxcdHJldHVybiB2bV9hcmVhO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlX2FsaWduZWRfY2FsbGVyKHNpemUsIFBBR0VfU0laRSwgZmxhZ3MsIGNhbGxlcik7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB2bWFwIC0gbWFwIGFuIGFycmF5IG9mIHBhZ2VzIGludG8gdmlydHVhbGx5IGNvbnRpZ3VvdXMgc3BhY2VcXG4gICogQHBhZ2VzOiBhcnJheSBvZiBwYWdlIHBvaW50ZXJzXFxuQEAgLTM1NTcsMTMgKzM3MDEsMTQgQEAgdm9pZCAqdm1hcChzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgY291bnQsXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0c2l6ZSA9ICh1bnNpZ25lZCBsb25nKWNvdW50IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuLVxcdGFyZWEgPSBnZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XFxuK1xcdGFyZWEgPSB2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWEoc2l6ZSwgZmxhZ3MsIHByb3QsXFxuK1xcdFxcdFxcdFxcdF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XFxuIFxcdGlmICghYXJlYSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbiBcXHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS1cXHUwMDNlYWRkcjtcXG4tXFx0aWYgKHZtYXBfcGFnZXNfcmFuZ2UoYWRkciwgYWRkciArIHNpemUsIHBncHJvdF9ueChwcm90KSxcXG4tXFx0XFx0XFx0XFx0cGFnZXMsIFBBR0VfU0hJRlQpIFxcdTAwM2MgMCkge1xcbitcXHRpZiAodm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkKGFkZHIsIGFkZHIgKyBzaXplLCBwZ3Byb3RfbngocHJvdCksXFxuK1xcdFxcdFxcdFxcdHBhZ2VzKSBcXHUwMDNjIDApIHtcXG4gXFx0XFx0dnVubWFwKGFyZWEtXFx1MDAzZWFkZHIpO1xcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwOTowOToxOS43MTcwMzA1MTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDMwMzk0MTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJfUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBcIixcbiAgICBcInZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZFwiLFxuICAgIFwidm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa1wiLFxuICAgIFwiX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGJhdGNoZWQgY29udGlndW91cyBtYXBwaW5ncyBhdCB0aGUgUFRFIGxldmVsIGZvciB2bWFwLCBtb2RpZnlpbmcgY29yZSB2aXJ0dWFsIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIzNDc5ODIxMGM0MjA5ODcxZDIyMTFlMjE1MTYwNmU5YzFlZjNkYjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCA2IDA5OjA5OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaFxuaW5kZXggNGVjMWFjZDNjMWIzNDguLjdkOWM3ZGM3OTVjNDJjIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oXG5AQCAtMjMsNiArMjMsOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZSh1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBlbmQsIHU2NCBwZm4sXG4gXHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0KVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbitcbiBcdC8qXG4gXHQgKiBJZiB0aGUgYmxvY2sgaXMgYXQgbGVhc3QgQ09OVF9QVEVfU0laRSBpbiBzaXplLCBhbmQgaXMgbmF0dXJhbGx5XG4gXHQgKiBhbGlnbmVkIGluIGJvdGggdmlydHVhbCBhbmQgcGh5c2ljYWwgc3BhY2UsIHRoZW4gd2UgY2FuIHB0ZS1tYXAgdGhlXG5AQCAtNDAsNyArNDIsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZSh1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoIUlTX0FMSUdORUQoUEZOX1BIWVMocGZuKSwgQ09OVF9QVEVfU0laRSkpXG4gXHRcdHJldHVybiBQQUdFX1NJWkU7XG4gXG4tXHRyZXR1cm4gQ09OVF9QVEVfU0laRTtcbitcdHNpemUgPSBtaW4zKGVuZCAtIGFkZHIsIDFVTCBcdTAwM2NcdTAwM2MgbWF4X3BhZ2Vfc2hpZnQsIFBNRF9TSVpFIFx1MDAzZVx1MDAzZSAxKTtcbitcdHNpemUgPSByb3VuZGRvd25fcG93X29mX3R3byhzaXplKTtcbitcdHJldHVybiBzaXplO1xuIH1cbiBcbiAjZGVmaW5lIGFyY2hfdm1hcF9wdGVfcmFuZ2VfdW5tYXBfc2l6ZSBhcmNoX3ZtYXBfcHRlX3JhbmdlX3VubWFwX3NpemVcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcbmluZGV4IDMwNzcyYTkwOWFlYTNlLi5kNjAwYTZkNzUxZTI5NSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jXG5AQCAtMTEwLDYgKzExMCwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBudW1fY29udGlnX3B0ZXModW5zaWduZWQgbG9uZyBzaXplLCBzaXplX3QgKnBnc2l6ZSlcbiBcdFx0Y29udGlnX3B0ZXMgPSBDT05UX1BURVM7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbitcdFx0aWYgKHNpemUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDNjIFBNRF9TSVpFIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0SVNfQUxJR05FRChzaXplLCBDT05UX1BURV9TSVpFKSkge1xuK1x0XHRcdCpwZ3NpemUgPSBQQUdFX1NJWkU7XG4rXHRcdFx0Y29udGlnX3B0ZXMgPSBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4gXHRcdFdBUk5fT04oIV9faHVnZXRsYl92YWxpZF9zaXplKHNpemUpKTtcbiBcdH1cbiBcbkBAIC0zNTksNiArMzY1LDEwIEBAIHB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKVxuIFx0Y2FzZSBDT05UX1BURV9TSVpFOlxuIFx0XHRyZXR1cm4gcHRlX21rY29udChlbnRyeSk7XG4gXHRkZWZhdWx0OlxuK1x0XHRpZiAocGFnZXNpemUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHBhZ2VzaXplIFx1MDAzYyBQTURfU0laRSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdElTX0FMSUdORUQocGFnZXNpemUsIENPTlRfUFRFX1NJWkUpKVxuK1x0XHRcdHJldHVybiBwdGVfbWtjb250KGVudHJ5KTtcbitcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRwcl93YXJuKFwiJXM6IHVucmVjb2duaXplZCBodWdlIHBhZ2Ugc2l6ZSAweCVseFxcblwiLFxuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xuaW5kZXggMTJmNGEzOWZkZDBiM2UuLmEwODg2ODBjMzlmYzEyIDEwMDY0NFxuLS0tIGEvbW0vdm1hbGxvYy5jXG4rKysgYi9tbS92bWFsbG9jLmNcbkBAIC05MSw2ICs5MSwzMyBAQCBzdHJ1Y3QgdmZyZWVfZGVmZXJyZWQge1xuIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdmZyZWVfZGVmZXJyZWQsIHZmcmVlX2RlZmVycmVkKTtcbiBcbiAvKioqIFBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyAqKiovXG4rXG4rLypcbisgKiBUcnkgY29udGlndW91cyBtYXBwaW5ncyBhdCB0aGUgUFRFIGxldmVsIGZvciBhcmNoZXMgd2hpY2ggc3VwcG9ydCB0aGVtLCBhbmQgaWZcbisgKiByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4gRmFsbCBiYWNrIHRvIFBBR0VfU0laRSBtYXBwaW5ncyBvdGhlcndpc2UuXG4rICpcbisgKiBSZXR1cm46IG1hcHBpbmcgc2l6ZS5cbisgKi9cbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hcF9zZXRfcHRlcyhwdGVfdCAqcHRlLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCB1NjQgcGZuLFxuK1x0XHRwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXG4re1xuKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4rXHR1bnNpZ25lZCBsb25nIHNpemU7XG4rXG4rXHRzaXplID0gYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZShhZGRyLCBlbmQsIHBmbiwgbWF4X3BhZ2Vfc2hpZnQpO1xuK1x0aWYgKHNpemUgIT0gUEFHRV9TSVpFKSB7XG4rXHRcdHB0ZV90IGVudHJ5ID0gcGZuX3B0ZShwZm4sIHByb3QpO1xuK1xuK1x0XHRlbnRyeSA9IGFyY2hfbWFrZV9odWdlX3B0ZShlbnRyeSwgaWxvZzIoc2l6ZSksIDApO1xuK1x0XHRzZXRfaHVnZV9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSwgc2l6ZSk7XG4rXHRcdHJldHVybiBzaXplO1xuK1x0fVxuKyNlbmRpZlxuK1x0c2V0X3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIHBmbl9wdGUocGZuLCBwcm90KSk7XG4rXHRyZXR1cm4gUEFHRV9TSVpFO1xuK31cbitcbiBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0cGh5c19hZGRyX3QgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90LFxuIFx0XHRcdHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdCwgcGd0YmxfbW9kX21hc2sgKm1hc2spXG5AQCAtOTgsNyArMTI1LDggQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0cHRlX3QgKnB0ZTtcbiBcdHU2NCBwZm47XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbi1cdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBBR0VfU0laRTtcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbitcdHVuc2lnbmVkIGludCBzdGVwcztcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIVBBR0VfQUxJR05FRChlbmQgLSBhZGRyKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTExOSwyMCArMTQ3LDkgQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdEJVRygpO1xuIFx0XHR9XG4gXG4tI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbi1cdFx0c2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUoYWRkciwgZW5kLCBwZm4sIG1heF9wYWdlX3NoaWZ0KTtcbi1cdFx0aWYgKHNpemUgIT0gUEFHRV9TSVpFKSB7XG4tXHRcdFx0cHRlX3QgZW50cnkgPSBwZm5fcHRlKHBmbiwgcHJvdCk7XG4tXG4tXHRcdFx0ZW50cnkgPSBhcmNoX21ha2VfaHVnZV9wdGUoZW50cnksIGlsb2cyKHNpemUpLCAwKTtcbi1cdFx0XHRzZXRfaHVnZV9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSwgc2l6ZSk7XG4tXHRcdFx0cGZuICs9IFBGTl9ET1dOKHNpemUpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tI2VuZGlmXG4tXHRcdHNldF9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBwZm5fcHRlKHBmbiwgcHJvdCkpO1xuLVx0XHRwZm4rKztcbi1cdH0gd2hpbGUgKHB0ZSArPSBQRk5fRE9XTihzaXplKSwgYWRkciArPSBzaXplLCBhZGRyICE9IGVuZCk7XG4rXHRcdHNpemUgPSB2bWFwX3NldF9wdGVzKHB0ZSwgYWRkciwgZW5kLCBwZm4sIHByb3QsIG1heF9wYWdlX3NoaWZ0KTtcbitcdFx0c3RlcHMgPSBQRk5fRE9XTihzaXplKTtcbitcdH0gd2hpbGUgKHB0ZSArPSBzdGVwcywgcGZuICs9IHN0ZXBzLCBhZGRyICs9IHNpemUsIGFkZHIgIT0gZW5kKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0Km1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEO1xuQEAgLTUyNCw4ICs1NDEsMTAgQEAgdm9pZCB2dW5tYXBfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZClcbiBcbiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0dW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsXG4tXHRcdHBndGJsX21vZF9tYXNrICptYXNrKVxuK1x0XHRwZ3RibF9tb2RfbWFzayAqbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0KVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgcGZuLCBzaXplO1xuK1x0dW5zaWduZWQgaW50IHN0ZXBzO1xuIFx0aW50IGVyciA9IDA7XG4gXHRwdGVfdCAqcHRlO1xuIFxuQEAgLTU1Niw5ICs1NzUsMTAgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0c2V0X3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIG1rX3B0ZShwYWdlLCBwcm90KSk7XG4tXHRcdCgqbnIpKys7XG4tXHR9IHdoaWxlIChwdGUrKywgYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTtcbitcdFx0cGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4rXHRcdHNpemUgPSB2bWFwX3NldF9wdGVzKHB0ZSwgYWRkciwgZW5kLCBwZm4sIHByb3QsIHNoaWZ0KTtcbitcdFx0c3RlcHMgPSBQRk5fRE9XTihzaXplKTtcbitcdH0gd2hpbGUgKHB0ZSArPSBzdGVwcywgKm5yICs9IHN0ZXBzLCBhZGRyICs9IHNpemUsIGFkZHIgIT0gZW5kKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0Km1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEO1xuQEAgLTU2OCw3ICs1ODgsNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcbiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0dW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsXG4tXHRcdHBndGJsX21vZF9tYXNrICptYXNrKVxuK1x0XHRwZ3RibF9tb2RfbWFzayAqbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0KVxuIHtcbiBcdHBtZF90ICpwbWQ7XG4gXHR1bnNpZ25lZCBsb25nIG5leHQ7XG5AQCAtNTc4LDcgKzU5OCwyNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbi1cdFx0aWYgKHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrKSlcbitcbitcdFx0aWYgKHNoaWZ0IFx1MDAzZT0gUE1EX1NISUZUKSB7XG4rXHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1sqbnJdO1xuK1x0XHRcdHBoeXNfYWRkcl90IHBoeXNfYWRkcjtcbitcbitcdFx0XHRpZiAoV0FSTl9PTighcGFnZSkpXG4rXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0XHRpZiAoV0FSTl9PTighcGZuX3ZhbGlkKHBhZ2VfdG9fcGZuKHBhZ2UpKSkpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0XHRwaHlzX2FkZHIgPSBwYWdlX3RvX3BoeXMocGFnZSk7XG4rXG4rXHRcdFx0aWYgKHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZCwgYWRkciwgbmV4dCwgcGh5c19hZGRyLCBwcm90LFxuK1x0XHRcdFx0XHRcdHNoaWZ0KSkge1xuK1x0XHRcdFx0Km1hc2sgfD0gUEdUQkxfUE1EX01PRElGSUVEO1xuK1x0XHRcdFx0Km5yICs9IDEgXHUwMDNjXHUwMDNjIChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTtcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbitcdFx0fVxuK1xuK1x0XHRpZiAodm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KSlcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH0gd2hpbGUgKHBtZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNTg2LDcgKzYyNiw3IEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucixcbi1cdFx0cGd0YmxfbW9kX21hc2sgKm1hc2spXG4rXHRcdHBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpXG4ge1xuIFx0cHVkX3QgKnB1ZDtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbkBAIC01OTYsNyArNjM2LDcgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4tXHRcdGlmICh2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaykpXG4rXHRcdGlmICh2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaywgc2hpZnQpKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fSB3aGlsZSAocHVkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XG4gXHRyZXR1cm4gMDtcbkBAIC02MDQsNyArNjQ0LDcgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXG4gc3RhdGljIGludCB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLFxuLVx0XHRwZ3RibF9tb2RfbWFzayAqbWFzaylcbitcdFx0cGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdClcbiB7XG4gXHRwNGRfdCAqcDRkO1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuQEAgLTYxNCwxNCArNjU0LDE4IEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGRvIHtcbiBcdFx0bmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuLVx0XHRpZiAodm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2spKVxuK1x0XHRpZiAodm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KSlcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH0gd2hpbGUgKHA0ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tXHRcdHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMpXG4rLypcbisgKiBJdCBjYW4gdGFrZSBhbiBhcnJheSBvZiBwYWdlcyB3aGljaCBhcmUgbm90IGFsbCBjb250aWd1b3VzLCBidXQgaXRcbisgKiBtYXkgaGF2ZSBjb250aWd1b3VzIGNodW5rcywgYXMgaGludGVkIGJ5IEBzaGlmdC5cbisgKi9cbitzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4rXHRcdHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBzaGlmdClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcjtcbiBcdHBnZF90ICpwZ2Q7XG5AQCAtNjM2LDcgKzY4MCw3IEBAIHN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcbiBcdFx0aWYgKHBnZF9iYWQoKnBnZCkpXG4gXHRcdFx0bWFzayB8PSBQR1RCTF9QR0RfTU9ESUZJRUQ7XG4tXHRcdGVyciA9IHZtYXBfcGFnZXNfcDRkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIFx1MDAyNm5yLCBcdTAwMjZtYXNrKTtcbitcdFx0ZXJyID0gdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgXHUwMDI2bnIsIFx1MDAyNm1hc2ssIHNoaWZ0KTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRicmVhaztcbiBcdH0gd2hpbGUgKHBnZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xuQEAgLTY1OSwyNyArNzAzLDEyIEBAIHN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gaW50IF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBwYWdlX3NoaWZ0KVxuIHtcbi1cdHVuc2lnbmVkIGludCBpLCBuciA9IChlbmQgLSBhZGRyKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cbiBcdFdBUk5fT04ocGFnZV9zaGlmdCBcdTAwM2MgUEFHRV9TSElGVCk7XG4gXG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MpIHx8XG4tXHRcdFx0cGFnZV9zaGlmdCA9PSBQQUdFX1NISUZUKVxuLVx0XHRyZXR1cm4gdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMpO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnI7IGkgKz0gMVUgXHUwMDNjXHUwMDNjIChwYWdlX3NoaWZ0IC0gUEFHRV9TSElGVCkpIHtcbi1cdFx0aW50IGVycjtcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQykpXG4rXHRcdHBhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUO1xuIFxuLVx0XHRlcnIgPSB2bWFwX3JhbmdlX25vZmx1c2goYWRkciwgYWRkciArICgxVUwgXHUwMDNjXHUwMDNjIHBhZ2Vfc2hpZnQpLFxuLVx0XHRcdFx0XHRwYWdlX3RvX3BoeXMocGFnZXNbaV0pLCBwcm90LFxuLVx0XHRcdFx0XHRwYWdlX3NoaWZ0KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0XHRhZGRyICs9IDFVTCBcdTAwM2NcdTAwM2MgcGFnZV9zaGlmdDtcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMsIHBhZ2Vfc2hpZnQpO1xuIH1cbiBcbiBpbnQgdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5AQCAtMzI3OSw2ICszMzA4LDE0IEBAIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF92bV9hcmVhX2NhbGxlcih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG4gXHRcdFx0XHQgIE5VTUFfTk9fTk9ERSwgR0ZQX0tFUk5FTCwgY2FsbGVyKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKl9fZ2V0X3ZtX2FyZWFfbm9kZV9hbGlnbmVkX2NhbGxlcih1bnNpZ25lZCBsb25nIHNpemUsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IHZvaWQgKmNhbGxlcilcbit7XG4rXHRyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIGFsaWduLCBQQUdFX1NISUZULCBmbGFncyxcbitcdFx0XHRcdCAgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXG4rXHRcdFx0XHQgIE5VTUFfTk9fTk9ERSwgR0ZQX0tFUk5FTCwgY2FsbGVyKTtcbit9XG4rXG4gLyoqXG4gICogZmluZF92bV9hcmVhIC0gZmluZCBhIGNvbnRpbnVvdXMga2VybmVsIHZpcnR1YWwgYXJlYVxuICAqIEBhZGRyOlx0ICBiYXNlIGFkZHJlc3NcbkBAIC0zNTE5LDYgKzM1NTYsMTEzIEBAIHZvaWQgdnVubWFwKGNvbnN0IHZvaWQgKmFkZHIpXG4gfVxuIEVYUE9SVF9TWU1CT0wodnVubWFwKTtcbiBcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB2bV9zaGlmdChwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0aWYgKGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKHByb3QpIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gUE1EX1NJWkUpXG4rXHRcdHJldHVybiBQTURfU0hJRlQ7XG4rXG4rXHRyZXR1cm4gYXJjaF92bWFwX3B0ZV9zdXBwb3J0ZWRfc2hpZnQoc2l6ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGdldF92bWFwX2JhdGNoX29yZGVyKHN0cnVjdCBwYWdlICoqcGFnZXMsXG4rXHRcdHBncHJvdF90IHByb3QsIHVuc2lnbmVkIGludCBtYXhfc3RlcHMsIHVuc2lnbmVkIGludCBpZHgpXG4re1xuK1x0dW5zaWduZWQgaW50IG5yX2NvbnRpZztcbitcdGludCBvcmRlcjtcbitcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bnJfY29udGlnID0gbnVtX3BhZ2VzX2NvbnRpZ3VvdXMoXHUwMDI2cGFnZXNbaWR4XSwgbWF4X3N0ZXBzKTtcbitcdGlmIChucl9jb250aWcgXHUwMDNjIDIpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0b3JkZXIgPSBpbG9nMihucl9jb250aWcpO1xuK1xuK1x0LyogTGltaXQgb3JkZXIgYnkgcGZuIGFsaWdubWVudCAqL1xuK1x0b3JkZXIgPSBtaW5fdChpbnQsIG9yZGVyLCBfX2ZmcyhwYWdlX3RvX3BmbihwYWdlc1tpZHhdKSkpO1xuK1xuK1x0aWYgKHZtX3NoaWZ0KHByb3QsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpID09IFBBR0VfU0hJRlQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIG9yZGVyO1xuK31cbitcbitzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuK1x0XHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuK3tcbitcdHVuc2lnbmVkIGludCBjb3VudCA9IChlbmQgLSBhZGRyKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdHVuc2lnbmVkIGludCBwcmV2X3NoaWZ0ID0gMCwgaWR4ID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgbWFwX2FkZHIgPSBhZGRyLCBiYXRjaF9lbmQgPSBhZGRyO1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IGttc2FuX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaChhZGRyLCBlbmQsIHByb3QsIHBhZ2VzLFxuK1x0XHRcdFx0XHRcdFBBR0VfU0hJRlQsIEdGUF9LRVJORUwpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgY291bnQ7ICkge1xuK1x0XHR1bnNpZ25lZCBpbnQgc2hpZnQgPSBQQUdFX1NISUZUICtcbitcdFx0XHRnZXRfdm1hcF9iYXRjaF9vcmRlcihwYWdlcywgcHJvdCwgY291bnQgLSBpLCBpKTtcbitcbitcdFx0aWYgKCFpKVxuK1x0XHRcdHByZXZfc2hpZnQgPSBzaGlmdDtcbitcbitcdFx0aWYgKHNoaWZ0ICE9IHByZXZfc2hpZnQpIHtcbitcdFx0XHRlcnIgPSB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhtYXBfYWRkciwgYmF0Y2hfZW5kLFxuK1x0XHRcdFx0XHRwcm90LCBwYWdlcyArIGlkeCwgcHJldl9zaGlmdCk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdHByZXZfc2hpZnQgPSBzaGlmdDtcbitcdFx0XHRtYXBfYWRkciA9IGJhdGNoX2VuZDtcbitcdFx0XHRpZHggPSBpO1xuK1x0XHR9XG4rXG4rXHRcdC8qXG4rXHRcdCAqIE9uY2Ugc21hbGwgcGFnZXMgYXJlIGVuY291bnRlcmVkLCB0aGUgcmVtYWluaW5nIHBhZ2VzXG4rXHRcdCAqIGFyZSBsaWtlbHkgc21hbGwgYXMgd2VsbC5cbitcdFx0ICovXG4rXHRcdGlmIChzaGlmdCA9PSBQQUdFX1NISUZUKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRiYXRjaF9lbmQgKz0gMVVMIFx1MDAzY1x1MDAzYyBzaGlmdDtcbitcdFx0aSArPSAxVSBcdTAwM2NcdTAwM2MgKHNoaWZ0IC0gUEFHRV9TSElGVCk7XG4rXHR9XG4rXG4rXHQvKiBSZW1haW5pbmcgKi9cbitcdGlmIChtYXBfYWRkciBcdTAwM2MgZW5kKVxuK1x0XHRlcnIgPSB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhtYXBfYWRkciwgZW5kLFxuK1x0XHRcdFx0cHJvdCwgcGFnZXMgKyBpZHgsIHByZXZfc2hpZnQpO1xuK1xuK291dDpcbitcdGZsdXNoX2NhY2hlX3ZtYXAoYWRkciwgZW5kKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICp2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWEodW5zaWduZWQgbG9uZyBzaXplLFxuK1x0XHR1bnNpZ25lZCBsb25nIGZsYWdzLCBwZ3Byb3RfdCBwcm90LCBjb25zdCB2b2lkICpjYWxsZXIpXG4re1xuK1x0c3RydWN0IHZtX3N0cnVjdCAqdm1fYXJlYTtcbitcdHVuc2lnbmVkIGludCBzaGlmdDtcbitcbitcdGlmIChhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IFBNRF9TSVpFKSB7XG4rXHRcdHZtX2FyZWEgPSBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgUE1EX1NJWkUsXG4rXHRcdFx0XHRmbGFncywgY2FsbGVyKTtcbitcdFx0aWYgKHZtX2FyZWEpXG4rXHRcdFx0cmV0dXJuIHZtX2FyZWE7XG4rXHR9XG4rXG4rXHRzaGlmdCA9IGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpO1xuK1x0aWYgKHNoaWZ0IFx1MDAzZSBQQUdFX1NISUZUKSB7XG4rXHRcdHZtX2FyZWEgPSBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgMVVMIFx1MDAzY1x1MDAzYyBzaGlmdCxcbitcdFx0XHRcdGZsYWdzLCBjYWxsZXIpO1xuK1x0XHRpZiAodm1fYXJlYSlcbitcdFx0XHRyZXR1cm4gdm1fYXJlYTtcbitcdH1cbitcbitcdHJldHVybiBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgUEFHRV9TSVpFLCBmbGFncywgY2FsbGVyKTtcbit9XG4rXG4gLyoqXG4gICogdm1hcCAtIG1hcCBhbiBhcnJheSBvZiBwYWdlcyBpbnRvIHZpcnR1YWxseSBjb250aWd1b3VzIHNwYWNlXG4gICogQHBhZ2VzOiBhcnJheSBvZiBwYWdlIHBvaW50ZXJzXG5AQCAtMzU1NywxMyArMzcwMSwxNCBAQCB2b2lkICp2bWFwKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCxcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRzaXplID0gKHVuc2lnbmVkIGxvbmcpY291bnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4tXHRhcmVhID0gZ2V0X3ZtX2FyZWFfY2FsbGVyKHNpemUsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuK1x0YXJlYSA9IHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYShzaXplLCBmbGFncywgcHJvdCxcbitcdFx0XHRcdF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4gXHRpZiAoIWFyZWEpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXHUwMDNlYWRkcjtcbi1cdGlmICh2bWFwX3BhZ2VzX3JhbmdlKGFkZHIsIGFkZHIgKyBzaXplLCBwZ3Byb3RfbngocHJvdCksXG4tXHRcdFx0XHRwYWdlcywgUEFHRV9TSElGVCkgXHUwMDNjIDApIHtcbitcdGlmICh2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWQoYWRkciwgYWRkciArIHNpemUsIHBncHJvdF9ueChwcm90KSxcbitcdFx0XHRcdHBhZ2VzKSBcdTAwM2MgMCkge1xuIFx0XHR2dW5tYXAoYXJlYS1cdTAwM2VhZGRyKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwOTowOToxOS43MTcwMzMwNjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODQ1MTI0OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHZtYXBgIFBhdGNoIGZvciBGdXp6aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdGhhdCdzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IGB2bWFwYCBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zIGluIGBtbS92bWFsbG9jLmNgIGFuZCBhIGZldyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZXMgaGFuZGxlIG1lbW9yeSBtYXBwaW5nLiBJdCBzZWVtcyB0aGV5J3JlIGludHJvZHVjaW5nIHNvbWUgYmF0Y2hlZCBjb250aWd1b3VzIG1hcHBpbmdzIGF0IHRoZSBQVEUgbGV2ZWwsIHNwZWNpZmljYWxseSBmb3IgYXJjaGl0ZWN0dXJlcyBsaWtlIEFSTTY0IHdpdGggYENPTlRfUFRFX1NJWkVgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgYHZtYXBgIGlzIGEgY29yZSwgY3JpdGljYWwga2VybmVsIEFQSSwgaGVhdmlseSByZWxpZWQgdXBvbiBieSBudW1lcm91cyBkcml2ZXJzIGFuZCBzdWJzeXN0ZW1zIHRvIG1hcCBhcnJheXMgb2YgcGFnZXMgY29udGlndW91c2x5LiBTbywgdGhlIHBhdGNoIGlzIGFpbWluZyBmb3Igb3B0aW1pemF0aW9uIGhlcmUsIHVzaW5nIGh1Z2UgcGFnZXMgb3IgY29udGlndW91cyBQVEVzIHdoZW4gZmVhc2libGUgd2l0aGluIGB2bWFwYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0PyBUaGlzIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgcmlwZSBmb3IgZnV6emluZy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGl0J3MgYSBoaWdoLXZhbHVlIHRhcmdldC5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyB0aGUgZnV6emluZyBlZmZvcnRzLiBDbGVhcmx5LCBgdm1hcGAgaXRzZWxmIGlzIGEgcHJpbWUgY2FuZGlkYXRlLCBnaXZlbiBpdHMgd2lkZXNwcmVhZCB1c2UsIGJ1dCBpdCdzICpldmVyeXdoZXJlKi4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgdm1hcGAsIGl0IGNhbGxzIGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgLCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCwgYW5kIGB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa2AgKGZvcm1lcmx5IGB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2hgKSwgYW5kIG9mIGNvdXJzZSwgYHZtYXBfc2V0X3B0ZXNgLCB3aGljaCBpcyBwcm9iYWJseSB0aGUgaGVhcnQgb2YgdGhpcyBiYXRjaGVkIFBURSBsb2dpYy4gVGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBtbS92bWFsbG9jLmNgLCBzbyB3aGlsZSB0aGV5J3JlIG5vdCBkaXJlY3RseSBleHBvcnRlZCwgdGhleSdyZSBjcml0aWNhbCB0byB0aGUgb3ZlcmFsbCBgdm1hcGAgZmxvdy4gU28sIHdlJ2xsIGhpdCBgdm1hcGAsIHRoZSBgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkYCwgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrYCwgYW5kIGB2bWFwX3NldF9wdGVzYCBmdW5jdGlvbnMuIEJlY2F1c2Ugb2YgdGhlIG1haW4gY2hhbmdlcywgd2Ugc2hvdWxkIGFsc28gaW5jbHVkZSB0aGUgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaGAsIGBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaGAuXG5cbkZpbmFsbHksIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBjb250ZXh0LiBXZSdyZSBzZWVpbmcgcmVmZXJlbmNlcyB0byBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgLCBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVBgLCBhbmQgYENPTkZJR19IVUdFVExCX1BBR0VgLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gcXVpY2tseSB0cmFjayBkb3duIHdoZXJlIHRoZXNlIGFyZSBkZWZpbmVkLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBpcyBrZXkgdG8gc2V0dGluZyB1cCBlZmZlY3RpdmUgZnV6emluZyBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMTksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwOTowOToyNy41NjIxNjA0NjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxODQwMTcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvS2NvbmZpZz0xMDkyPWNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuLS1cXG5hcmNoL0tjb25maWctMTA5OS0jXFxuYXJjaC9LY29uZmlnOjExMDA6Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5hcmNoL0tjb25maWctMTEwMS1cXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9IVUdFX1ZNQVBcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE1My1cXHRzZWxlY3QgSEFWRV9BUkNIX0NPTVBJTEVSX0hcXG5hcmNoL2FybTY0L0tjb25maWc6MTU0OlxcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFxuYXJjaC9hcm02NC9LY29uZmlnLTE1NS1cXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BUFxcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTIxOC1cXHRzZWxlY3QgSEFWRV9BUkNIX0FVRElUU1lTQ0FMTFxcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjIxOTpcXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcdFxcdGlmIEhBVkVfQVJDSF9IVUdFX1ZNQVBcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0yMjAtXFx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcXHRcXHRpZiBQUENfUkFESVhfTU1VIHx8IFBQQ184eHhcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMzEtXFx0c2VsZWN0IEhBVkVfQVJDSF9CSVRSRVZFUlNFIGlmIFJJU0NWX0lTQV9aQktCIFxcdTAwMjZcXHUwMDI2IEJJVFJFVkVSU0VcXG5hcmNoL3Jpc2N2L0tjb25maWc6MTMyOlxcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DIGlmIEhBVkVfQVJDSF9IVUdFX1ZNQVBcXG5hcmNoL3Jpc2N2L0tjb25maWctMTMzLVxcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFQIGlmIE1NVSBcXHUwMDI2XFx1MDAyNiA2NEJJVFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTE5Mi1cXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BUFxcdFxcdGlmIFg4Nl82NCB8fCBYODZfUEFFXFxuYXJjaC94ODYvS2NvbmZpZzoxOTM6XFx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXHRcXHRpZiBYODZfNjRcXG5hcmNoL3g4Ni9LY29uZmlnLTE5NC1cXHRzZWxlY3QgSEFWRV9BUkNIX0pVTVBfTEFCRUxcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTE5PXN0cnVjdCBpb3ZfaXRlcjtcXHRcXHQvKiBpbiB1aW8uaCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMzEtI2RlZmluZSBWTV9NQVBfUFVUX1BBR0VTXFx0MHgwMDAwMDIwMFxcdC8qIHB1dCBwYWdlcyBhbmQgZnJlZSBhcnJheSBpbiB2ZnJlZSAqL1xcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjMyOiNkZWZpbmUgVk1fQUxMT1dfSFVHRV9WTUFQXFx0MHgwMDAwMDQwMCAgICAgIC8qIEFsbG93IGZvciBodWdlIHBhZ2VzIG9uIGFyY2hzIHdpdGggSEFWRV9BUkNIX0hVR0VfVk1BTExPQyAqL1xcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTMzLVxcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg9NTI9c3RydWN0IHZtX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC02MS1cXHRzdHJ1Y3QgcGFnZVxcdFxcdCoqcGFnZXM7XFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg6NjI6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtNjMtXFx0dW5zaWduZWQgaW50XFx0XFx0cGFnZV9vcmRlcjtcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTI1OD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdm1fYXJlYV9odWdlcGFnZXMoY29uc3Qgdm9pZCAqYWRkcilcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTI2Ni1cXHQgKi9cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDoyNjc6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMjY4LVxcdHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEgPSBmaW5kX3ZtX2FyZWEoYWRkcik7XFxuLS1cXG5tbS92bWFsbG9jLmM9NjM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpb3JlbWFwX21heF9wYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDtcXG4tLVxcbm1tL3ZtYWxsb2MuYy02NS1cXG5tbS92bWFsbG9jLmM6NjY6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFxubW0vdm1hbGxvYy5jLTY3LXN0YXRpYyBib29sIF9fcm9fYWZ0ZXJfaW5pdCB2bWFwX2FsbG93X2h1Z2UgPSB0cnVlO1xcbi0tXFxubW0vdm1hbGxvYy5jPTc0PWVhcmx5X3BhcmFtKFxcXCJub2h1Z2V2bWFsbG9jXFxcIiwgc2V0X25vaHVnZXZtYWxsb2MpO1xcbm1tL3ZtYWxsb2MuYzo3NTojZWxzZSAvKiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQyAqL1xcbm1tL3ZtYWxsb2MuYy03Ni1zdGF0aWMgY29uc3QgYm9vbCB2bWFwX2FsbG93X2h1Z2UgPSBmYWxzZTtcXG5tbS92bWFsbG9jLmM6Nzc6I2VuZGlmXFx0LyogQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MgKi9cXG5tbS92bWFsbG9jLmMtNzgtXFxuLS1cXG5tbS92bWFsbG9jLmM9NzAzPWludCBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTcwNy1cXG5tbS92bWFsbG9jLmM6NzA4OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQykpXFxubW0vdm1hbGxvYy5jLTcwOS1cXHRcXHRwYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zMTM0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHZtX2FyZWFfcGFnZV9vcmRlcihzdHJ1Y3Qgdm1fc3RydWN0ICp2bSlcXG5tbS92bWFsbG9jLmMtMzEzNS17XFxubW0vdm1hbGxvYy5jOjMxMzY6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFxubW0vdm1hbGxvYy5jLTMxMzctXFx0cmV0dXJuIHZtLVxcdTAwM2VwYWdlX29yZGVyO1xcbi0tXFxubW0vdm1hbGxvYy5jPTMxNDg9c3RhdGljIGlubGluZSB2b2lkIHNldF92bV9hcmVhX3BhZ2Vfb3JkZXIoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS92bWFsbG9jLmMtMzE0OS17XFxubW0vdm1hbGxvYy5jOjMxNTA6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFxubW0vdm1hbGxvYy5jLTMxNTEtXFx0dm0tXFx1MDAzZXBhZ2Vfb3JkZXIgPSBvcmRlcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDk6MDk6MjkuNzgwNTY2NDc1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyMDc5NzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIE5ldyBDb2RlJ3MgSHVnVExCIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYHZtYXBfc2V0X3B0ZXNgLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGF0IG1lIGlzIHRoYXQgYCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFYC4gUmlnaHQgYXdheSwgdGhpcyB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggSHVnZVRMQiBwYWdlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgdmlydHVhbCBtZW1vcnkgbWFwcGluZyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBjb25uZWN0ZWQgdG8gSHVnZVRMQnMuIFRoaXMgYWxzbyB0b3VjaGVzIG9uIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAgYW5kIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AuIFRoYXQncyBpbnRlcmVzdGluZywgYXMgaXQgaW5kaWNhdGVzIHRoZSBhcmNoaXRlY3R1cmUgbWlnaHQgaGF2ZSBzb21lIHNwZWNpZmljIHN1cHBvcnQgb3IgcmVxdWlyZW1lbnRzIGZvciBoYW5kbGluZyBodWdlIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmdzLiBTZWVtcyBsaWtlIHRoaXMgaXMgZ29pbmcgdG8gYmUgcmVsZXZhbnQgdG8gdmlydHVhbCBtZW1vcnkgbWFwcGluZyB3aXRoIGh1Z2UgcGFnZXMuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBkZWZpbml0aW9uIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB3aGF0IHRoaXMgaXMgYWxsIGFib3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTY4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDk6MDk6MzIuOTAxMzY1NDM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDY5ODc2OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0hVR0VUTEJfUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEwMTcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0PTk1PUtlcm5lbCBwYXJhbWV0ZXJzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDg1LVxcdGh1Z2V0bGJfZnJlZV92bWVtbWFwPVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjIwODY6XFx0XFx0XFx0W0tOTF0gUmVxdWlyZXMgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA4Ny1cXHRcXHRcXHRlbmFibGVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA5NS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDk2OlxcdFxcdFxcdEJ1aWx0IHdpdGggQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT049eSxcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDk3LVxcdFxcdFxcdHRoZSBkZWZhdWx0IGlzIG9uLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q9MjI9Rmlyc3QgdGhlIExpbnV4IGtlcm5lbCBuZWVkcyB0byBiZSBidWlsdCB3aXRoIHRoZSBDT05GSUdfSFVHRVRMQkZTXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q6MjM6KHByZXNlbnQgdW5kZXIgXFxcIkZpbGUgc3lzdGVtc1xcXCIpIGFuZCBDT05GSUdfSFVHRVRMQl9QQUdFIChzZWxlY3RlZFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0LTI0LWF1dG9tYXRpY2FsbHkgd2hlbiBDT05GSUdfSFVHRVRMQkZTIGlzIHNlbGVjdGVkKSBjb25maWd1cmF0aW9uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdD0xNzQ9aHVnZXRsYl9mcmVlX3ZtZW1tYXBcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdDoxNzU6XFx0V2hlbiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVAgaXMgc2V0LCB0aGlzIGVuYWJsZXMgSHVnZVRMQlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0LTE3Ni1cXHRWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKS5cXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbXRlLmg9MTU3PXN0YXRpYyBpbmxpbmUgaW50IG10ZV9wdHJhY2VfY29weV90YWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL210ZS5oLTE2NS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL210ZS5oOjE2NjojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19BUk02NF9NVEUpXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tdGUuaC0xNjctc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9odWdldGxiX210ZV90YWdnZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQVJNNjRfQ09OVFBURSlcXHQrPSBjb250cHRlLm9cXG5hcmNoL2FybTY0L21tL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSlcXHQrPSBodWdldGxicGFnZS5vXFxuYXJjaC9hcm02NC9tbS9NYWtlZmlsZS04LW9iai0kKENPTkZJR19QVERVTVApXFx0XFx0Kz0gcHRkdW1wLm9cXG4tLVxcbmFyY2gvaGV4YWdvbi9pbmNsdWRlL2FzbS9wYWdlLmgtMzktICovXFxuYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL3BhZ2UuaDo0MDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvaGV4YWdvbi9pbmNsdWRlL2FzbS9wYWdlLmgtNDEtI2RlZmluZSBIUEFHRV9TSElGVCAyMlxcbi0tXFxuYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL3BndGFibGUuaD0xMjk9ZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07ICAvKiBsb2NhdGVkIGluIGhlYWQuUyAqL1xcbi0tXFxuYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMzEtLyogIEhVR0VUTEIgbm90IHdvcmtpbmcgY3VycmVudGx5ICAqL1xcbmFyY2gvaGV4YWdvbi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTMyOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMzMtI2RlZmluZSBwdGVfbWtodWdlKHB0ZSkgX19wdGUoKHB0ZV92YWwocHRlKSBcXHUwMDI2IH4weDMpIHwgSFZNX0hVR0VQQUdFX1NJWkUpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9tbS9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfSElHSE1FTSlcXHRcXHQrPSBoaWdobWVtLm9cXG5hcmNoL2xvb25nYXJjaC9tbS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKVxcdCs9IGh1Z2V0bGJwYWdlLm9cXG5hcmNoL2xvb25nYXJjaC9tbS9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfS0FTQU4pXFx0XFx0Kz0ga2FzYW5faW5pdC5vXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9tbS90bGIuYz0xMzg9c3RhdGljIHZvaWQgX191cGRhdGVfaHVnZXRsYihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcClcXG5hcmNoL2xvb25nYXJjaC9tbS90bGIuYy0xMzkte1xcbmFyY2gvbG9vbmdhcmNoL21tL3RsYi5jOjE0MDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvbG9vbmdhcmNoL21tL3RsYi5jLTE0MS1cXHRpbnQgaWR4O1xcbi0tXFxuYXJjaC9taXBzL21tL01ha2VmaWxlPTMxPW9iai0kKENPTkZJR19ISUdITUVNKVxcdFxcdCs9IGhpZ2htZW0ub1xcbmFyY2gvbWlwcy9tbS9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKVxcdCs9IGh1Z2V0bGJwYWdlLm9cXG5hcmNoL21pcHMvbW0vTWFrZWZpbGUtMzMtb2JqLSQoQ09ORklHX0RNQV9OT05DT0hFUkVOVClcXHQrPSBkbWEtbm9uY29oZXJlbnQub1xcbi0tXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFnZS5oPTkzPWV4dGVybiBpbnQgbnBtZW1fcmFuZ2VzO1xcbi0tXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFnZS5oLTE0Ny1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYWdlLmg6MTQ4OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFnZS5oLTE0OS0jZGVmaW5lIEhQQUdFX1NISUZUXFx0XFx0UE1EX1NISUZUIC8qIGZpeGVkIGZvciB0cmFuc3BhcmVudCBodWdlIHBhZ2VzICovXFxuLS1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYWdlLmgtMTYzLSNlbmRpZlxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhZ2UuaDoxNjQ6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYWdlLmgtMTY1LVxcbi0tXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTY0PWV4dGVybiB2b2lkIF9fdXBkYXRlX2NhY2hlKHB0ZV90IHB0ZSk7XFxuLS1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTcwLSNkZWZpbmUgX1BBR0VfVVNFUl9CSVQgICAgIDIwICAgLyogKDB4ODAwKSBTb2Z0d2FyZTogVXNlciBhY2Nlc3NpYmxlIHBhZ2UgKi9cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTcxOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3Mi0jZGVmaW5lIF9QQUdFX1NQRUNJQUxfQklUICBfUEFHRV9ETUJfQklUICAvKiBETUIgZmVhdHVyZSBpcyBjdXJyZW50bHkgdW51c2VkICovXFxuLS1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MzE1PXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpXFx0eyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfU1BFQ0lBTDsgcmV0dXJuIHB0ZTsgfVxcbi0tXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMxOS0gKi9cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MzIwOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMyMS0jZGVmaW5lIHB0ZV9odWdlKHB0ZSkgICAgICAgICAgIChwdGVfdmFsKHB0ZSkgXFx1MDAyNiBfUEFHRV9IVUdFKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmM9NDE9aW50IG1haW4odm9pZClcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jLTI3OC1cXHQgKiBhbmQga2VybmVsIGRhdGEgb24gcGh5c2ljYWwgaHVnZSBwYWdlcyAqL1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jOjI3OTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jLTI4MC1cXHRERUZJTkUoSFVHRVBBR0VfU0laRSwgMVVMIFxcdTAwM2NcXHUwMDNjIFJFQUxfSFBBR0VfU0hJRlQpO1xcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMtNDgxLVxcdC5tYWNyb1xcdFxcdGNvbnZlcnRfZm9yX3RsYl9pbnNlcnQyMCBwdGUsdG1wXFxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlM6NDgyOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMtNDgzLVxcdGNvcHlcXHRcXHRcXFxccHRlLFxcXFx0bXBcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zZXR1cC5jPTEwMT12b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvc2V0dXAuYy0xMTQtXFx0XFx0KGludCkoUEFHRV9TSVpFIC8gMTAyNCkpO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9zZXR1cC5jOjExNTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zZXR1cC5jLTExNi1cXHRwcmludGsoS0VSTl9DT05UIFxcXCJlbmFibGVkIHdpdGggJWQgTUIgcGh5c2ljYWwgYW5kICVkIE1CIHZpcnR1YWwgc2l6ZVxcXCIsXFxuLS1cXG5hcmNoL3BhcmlzYy9tbS9NYWtlZmlsZT02PW9iai15XFx0IDo9IGluaXQubyBmYXVsdC5vIGlvcmVtYXAubyBmaXhtYXAub1xcbmFyY2gvcGFyaXNjL21tL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkgKz0gaHVnZXRsYnBhZ2Uub1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oLTc0LVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaDo3NTojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8IGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSlcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmgtNzYtI2RlZmluZSBIX1BNRF9GUkFHX1NJWkVfU0hJRlQgIChIX1BNRF9JTkRFWF9TSVpFICsgMyArIDEpXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmg9MTc1PXN0YXRpYyBpbmxpbmUgaW50IGhhc2hfX3JlbWFwXzRrX3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oLTE4Ni0jZGVmaW5lIEhfUFRFX1RBQkxFX1NJWkVcXHRQVEVfRlJBR19TSVpFXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oOjE4NzojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8IGRlZmluZWQgKENPTkZJR19IVUdFVExCX1BBR0UpXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oLTE4OC0jZGVmaW5lIEhfUE1EX1RBQkxFX1NJWkVcXHQoKHNpemVvZihwbWRfdCkgXFx1MDAzY1xcdTAwM2MgUE1EX0lOREVYX1NJWkUpICsgXFxcXFxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oLTE5Mi0jZW5kaWZcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmg6MTkzOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oLTE5NC0jZGVmaW5lIEhfUFVEX1RBQkxFX1NJWkVcXHQoKHNpemVvZihwdWRfdCkgXFx1MDAzY1xcdTAwM2MgUFVEX0lOREVYX1NJWkUpICtcXHRcXFxcXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2guaC00Ni0gKi9cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2guaDo0NzojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSBcXHUwMDI2XFx1MDAyNiAgZGVmaW5lZChDT05GSUdfUFBDXzY0S19QQUdFUylcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2guaC00OC0jZGVmaW5lIEhfUFVEX0NBQ0hFX0lOREVYXFx0KEhfUFVEX0lOREVYX1NJWkUgKyAxKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9tbXUtaGFzaC5oPTcxMj1zdHJ1Y3QgaGFzaF9tbV9jb250ZXh0IHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvbW11LWhhc2guaC03MjItXFx0c3RydWN0IHNsaWNlX21hc2sgbWFza180aztcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L21tdS1oYXNoLmg6NzIzOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9tbXUtaGFzaC5oLTcyNC1cXHRzdHJ1Y3Qgc2xpY2VfbWFzayBtYXNrXzE2bTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvbW11Lmg9MTY5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsaWNlX21hc2sgKnNsaWNlX21hc2tfZm9yX3NpemUobW1fY29udGV4dF90ICpjdHgsIGludCBwc2l6ZSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvbW11LmgtMTc0LSNlbmRpZlxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvbW11Lmg6MTc1OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9tbXUuaC0xNzYtXFx0aWYgKHBzaXplID09IE1NVV9QQUdFXzE2TSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGdhbGxvYy5oPTQ4PXN0YXRpYyBpbmxpbmUgcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGdhbGxvYy5oLTczLVxcdCAqL1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGdhbGxvYy5oOjc0OiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1BQQ182NEtfUEFHRVMpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BnYWxsb2MuaC03NS1cXHQoSF9QR0RfSU5ERVhfU0laRSA9PSBIX1BVRF9DQUNIRV9JTkRFWClcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS02NGsuaC01LSNpZm5kZWYgX19BU1NFTUJMRVJfX1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS02NGsuaDo2OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLTY0ay5oLTctXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLTY0ay5oOjg6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUtNjRrLmgtOS1cXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvc2xpY2UuaC03LSNpZmRlZiBDT05GSUdfUFBDXzY0U19IQVNIX01NVVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvc2xpY2UuaDo4OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9zbGljZS5oLTktI2RlZmluZSBIQVZFX0FSQ0hfSFVHRVRMQl9VTk1BUFBFRF9BUkVBXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTQtXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDo1OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC02LSNpbmNsdWRlIFxcdTAwM2Nhc20vcGFnZS5oXFx1MDAzZVxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD02Nz1pbnQgaHVnZV9wdGVwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTcyLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg6NzM6I2Vsc2UgLyogISBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC03NC1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfaHVnZXRsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD03OT1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGh1Z2V0bGJwYWdlX2luaXRfZGVmYXVsdHNpemUodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtODEtfVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg6ODI6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTgzLVxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaC0yNi0jaWZuZGVmIF9fQVNTRU1CTEVSX19cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oOjI3OiNpZm5kZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgtMjgtI2RlZmluZSBIUEFHRV9TSElGVCBQQUdFX1NISUZUXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTE0ND1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTQ4LVxcdGlmICgobW11X2hhc19mZWF0dXJlKE1NVV9GVFJfSFBURV9UQUJMRSkgXFx1MDAyNlxcdTAwMjYgIXJhZGl4X2VuYWJsZWQoKSkgfHxcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjE0OTpcXHQgICAgKElTX0VOQUJMRUQoQ09ORklHX1BQQ19FNTAwKSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0UpKSlcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE1MC1cXHRcXHRfX3VwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGVwKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtd2Fsay5oPTEwPXN0YXRpYyBpbmxpbmUgcHRlX3QgKmZpbmRfbGludXhfcHRlKHBnZF90ICpwZ2RpciwgdW5zaWduZWQgbG9uZyBlYSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtd2Fsay5oLTE4LSNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19WTSkgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS13YWxrLmg6MTk6XFx0IShkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIHx8IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLXdhbGsuaC0yMC1cXHQvKlxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYz01NDk9aW50IF9faW5pdCBmYWR1bXBfcmVzZXJ2ZV9tZW0odm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMtNTk0LVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM6NTk1OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy01OTYtXFx0XFx0LypcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlM9MTY2PXNldF9pdm9yOlxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUy0zMDctICovXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUzozMDg6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TLTMwOS0jZGVmaW5lIEZJTkRfUFRFXFx0XFxcXFxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUz02NjY9ZmluaXNoX3RsYl9sb2FkOlxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlM6NjY3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUy02NjgtXFx0Y21wd2lcXHQ2LCByMTAsIDBcXHRcXHRcXHQvKiBjaGVjayBmb3IgaHVnZSBwYWdlICovXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TLTcxOC1cXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TOjcxOTojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlMtNzIwLVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUz03Mzk9RU5EX01NVV9GVFJfU0VDVElPTl9JRlNFVChNTVVfRlRSX0JJR19QSFlTKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUy03NDItXFx0cmx3aW1pXFx0cjEyLCByMTEsIDMyLTE5LCAyNywgMzFcXHQvKiBleHRyYWN0IFdJTUdFIGZyb20gcHRlICovXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUzo3NDM6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TLTc0NC1cXHRiZXFcXHQ2LCAzZlxcdFxcdFxcdC8qIGRvbid0IG1hc2sgaWYgcGFnZSBpc24ndCBodWdlICovXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TPTc1Mz10bGJfd3JpdGVfZW50cnk6XFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TLTc1Ny1cXHRtZnNwclxcdHIxMCwgU1BSTl9TUFJHX1RIUkVBRFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlM6NzU4OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUy03NTktXFx0YmVxXFx0NiwgOGYgLyogc2tpcCByZXN0b3JlIGZvciA0ayBwYWdlIGZhdWx0cyAqL1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19OVU1BKSArPSBudW1hLm9cXG5hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSlcXHQrPSBodWdldGxicGFnZS5vXFxuYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlLTE2LW9iai0kKENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUpICs9IGRtYS1ub25jb2hlcmVudC5vXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvTWFrZWZpbGU9MTI9ZW5kaWZcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvTWFrZWZpbGUtMTMtXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19IVUdFVExCX1BBR0UpXFx0Kz0gaHVnZXRsYnBhZ2Uub1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9NYWtlZmlsZS0xNS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX1BQQ19SQURJWF9NTVUpXFx0Kz0gcmFkaXhfcGd0YWJsZS5vIHJhZGl4X3RsYi5vXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L01ha2VmaWxlOjE3OmlmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1BQQ19SQURJWF9NTVUpXFx0Kz0gcmFkaXhfaHVnZXRsYnBhZ2Uub1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdGxiLmM9NDE9dm9pZCBocHRlX25lZWRfZmx1c2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3RsYi5jLTYyLVxcdGlmIChodWdlKSB7XFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdGxiLmM6NjM6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF90bGIuYy02NC1cXHRcXHRwc2l6ZSA9IGdldF9zbGljZV9wc2l6ZShtbSwgYWRkcik7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jPTg0Nj1zdGF0aWMgaW50IF9faW5pdCBodGFiX2R0X3NjYW5fcGFnZV9zaXplcyh1bnNpZ25lZCBsb25nIG5vZGUsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTkyMy1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jOjkyNDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmMtOTI1LS8qXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jPTkyOT1zdGF0aWMgaW50IF9faW5pdCBodGFiX2R0X3NjYW5faHVnZXBhZ2VfYmxvY2tzKHVuc2lnbmVkIGxvbmcgbm9kZSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmMtOTY2LX1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jOjk2NzojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmMtOTY4LVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdXRpbHMuYz05OTY9c3RhdGljIHZvaWQgX19pbml0IGh0YWJfc2Nhbl9wYWdlX3NpemVzKHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTEwMTktXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdXRpbHMuYzoxMDIwOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdXRpbHMuYy0xMDIxLVxcdGlmICghaHVnZXRsYl9kaXNhYmxlZCBcXHUwMDI2XFx1MDAyNiAhZWFybHlfcmFkaXhfZW5hYmxlZCgpICkge1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdXRpbHMuYy0xMDI0LVxcdH1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jOjEwMjU6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTEwMjYtfVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdXRpbHMuYz0xNzE4PWludCBoYXNoX3BhZ2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgZWEsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTE4MzgtXFx0XFx0XFx0XFx0XFx0ICAgICB0cmFwLCBmbGFncywgc3NpemUsIHBzaXplKTtcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jOjE4Mzk6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTE4NDAtXFx0XFx0ZWxzZVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3RsYi5jPTYyNj12b2lkIHJhZGl4X19sb2NhbF9mbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3RsYi5jLTYyNy17XFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3RsYi5jOjYyODojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYy02MjktXFx0LyogbmVlZCB0aGUgcmV0dXJuIGZpeCBmb3Igbm9oYXNoLmMgKi9cXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYz05NDU9dm9pZCByYWRpeF9fZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdm1hZGRyKVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYy05NDYte1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYzo5NDc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfdGxiLmMtOTQ4LVxcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYz0xMTExPXZvaWQgcmFkaXhfX2ZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYy0xMTE0LXtcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfdGxiLmM6MTExNTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYy0xMTE2LVxcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jPTYzNj1FWFBPUlRfU1lNQk9MX0dQTChzbGljZV9nZXRfdW5tYXBwZWRfYXJlYSk7XFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmMtNjM3LVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jOjYzODojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jLTYzOS1zdGF0aWMgaW50IGZpbGVfdG9fcHNpemUoc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYz03NTc9dm9pZCBzbGljZV9zZXRfcmFuZ2VfcHNpemUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYy03NjctXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmM6NzY4OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmMtNzY5LS8qXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jPTYxNz12b2lkIF9faW5pdCBtbXVfZWFybHlfaW5pdF9kZXZ0cmVlKHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jLTY2NC1cXG5hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jOjY2NTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEUpKVxcbmFyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMtNjY2LVxcdFxcdGh1Z2V0bGJwYWdlX2luaXRfZGVmYXVsdHNpemUoKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfUkFORE9NSVpFX0JBU0UpXFx0Kz0ga2FzbHJfYm9va2Uub1xcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvTWFrZWZpbGU6OTppZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfUFBDX0U1MDApXFx0Kz0gZTUwMF9odWdldGxicGFnZS5vXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL3RsYi5jPTI3OD12b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHZtYWRkcilcXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL3RsYi5jLTI3OS17XFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC90bGIuYzoyODA6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL3RsYi5jLTI4MS1cXHRpZiAodm1hIFxcdTAwMjZcXHUwMDI2IGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYz0yNTU9aW50IHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYy0yNjgtXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYzoyNjk6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jLTI3MC1pbnQgaHVnZV9wdGVwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jPTM1Mz12b2lkIHNldF9odWdlX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMtMzgzLSNlbmRpZlxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmM6Mzg0OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYy0zODUtXFxuLS1cXG5hcmNoL3Jpc2N2L21tL01ha2VmaWxlPTE5PW9iai15ICs9IHBtZW0ub1xcbmFyY2gvcmlzY3YvbW0vTWFrZWZpbGUtMjAtXFxuYXJjaC9yaXNjdi9tbS9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKSArPSBodWdldGxicGFnZS5vXFxuYXJjaC9yaXNjdi9tbS9NYWtlZmlsZS0yMi1vYmotJChDT05GSUdfUFREVU1QKSArPSBwdGR1bXAub1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaD0xMTExPXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTExMTUtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMTE2OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMTE3LXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21raHVnZShwdGVfdCBwdGUpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTE1NjA9c3RhdGljIGlubGluZSBwdWRfdCBwdWRfbWtkaXJ0eShwdWRfdCBwdWQpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE1NjctXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNTY4OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTU2OS1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWFzc2FnZV9wZ3Byb3RfcG1kKHBncHJvdF90IHBncHJvdClcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTYxOD1zdGF0aWMgaW5saW5lIHBtZF90IG1rX3BtZF9waHlzKHVuc2lnbmVkIGxvbmcgcGh5c3BhZ2UsIHBncHJvdF90IHBncHJvdClcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTYyMi1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjE2MjM6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSB8fCBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNjI0LVxcbi0tXFxuYXJjaC9zMzkwL21tL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19ERUJVR19WSVJUVUFMKVxcdCs9IHBoeXNhZGRyLm9cXG5hcmNoL3MzOTAvbW0vTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSlcXHQrPSBodWdldGxicGFnZS5vXFxuYXJjaC9zMzkwL21tL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19QVERVTVApXFx0XFx0Kz0gZHVtcF9wYWdldGFibGVzLm9cXG4tLVxcbmFyY2gvc2gvY29uZmlncy9hcHNoNGFkMGFfZGVmY29uZmlnPTI1PUNPTkZJR19NRU1PUllfU0laRT0weDEwMDAwMDAwXFxuYXJjaC9zaC9jb25maWdzL2Fwc2g0YWQwYV9kZWZjb25maWc6MjY6Q09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQj15XFxuYXJjaC9zaC9jb25maWdzL2Fwc2g0YWQwYV9kZWZjb25maWctMjctQ09ORklHX0tTTT15XFxuLS1cXG5hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWc9MTY9Q09ORklHX01FTU9SWV9TSVpFPTB4MDgwMDAwMDBcXG5hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWc6MTc6Q09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQj15XFxuYXJjaC9zaC9jb25maWdzL3I3Nzg1cnBfZGVmY29uZmlnLTE4LUNPTkZJR19TSF9TVE9SRV9RVUVVRVM9eVxcbi0tXFxuYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnPTQ0PUNPTkZJR19OVU1BPXlcXG5hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4Nl9kZWZjb25maWc6NDU6Q09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0TUI9eVxcbmFyY2gvc2gvY29uZmlncy9zZGs3Nzg2X2RlZmNvbmZpZy00Ni1DT05GSUdfS1NNPXlcXG4tLVxcbmFyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnPTE3PUNPTkZJR19QTUI9eVxcbmFyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnOjE4OkNPTkZJR19IVUdFVExCX1BBR0VfU0laRV8xTUI9eVxcbmFyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnLTE5LUNPTkZJR19TSF9TVE9SRV9RVUVVRVM9eVxcbi0tXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgtMTQtXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmg6MTU6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0SylcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaC0xNi0jZGVmaW5lIEhQQUdFX1NISUZUXFx0MTZcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaDoxNzojZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV8yNTZLKVxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oLTE4LSNkZWZpbmUgSFBBR0VfU0hJRlRcXHQxOFxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oOjE5OiNlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQilcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaC0yMC0jZGVmaW5lIEhQQUdFX1NISUZUXFx0MjBcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaDoyMTojZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV80TUIpXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgtMjItI2RlZmluZSBIUEFHRV9TSElGVFxcdDIyXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmg6MjM6I2VsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRNQilcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaC0yNC0jZGVmaW5lIEhQQUdFX1NISUZUXFx0MjZcXG4tLVxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oLTI2LVxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oOjI3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgtMjgtI2RlZmluZSBIUEFHRV9TSVpFXFx0XFx0KDFVTCBcXHUwMDNjXFx1MDAzYyBIUEFHRV9TSElGVClcXG4tLVxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oPTk3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb3B5X3B0ZWFfYXR0cmlidXRlcyh1bnNpZ25lZCBsb25nIHgpXFxuLS1cXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaC0xMzYtI2lmIGRlZmluZWQoQ09ORklHX1gyVExCKVxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oOjEzNzojIGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0SylcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaC0xMzgtIyAgZGVmaW5lIF9QQUdFX1NaSFVHRVxcdChfUEFHRV9FWFRfRVNaMilcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaDoxMzk6IyBlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzI1NkspXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgtMTQwLSMgIGRlZmluZSBfUEFHRV9TWkhVR0VcXHQoX1BBR0VfRVhUX0VTWjAgfCBfUEFHRV9FWFRfRVNaMilcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaDoxNDE6IyBlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQilcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaC0xNDItIyAgZGVmaW5lIF9QQUdFX1NaSFVHRVxcdChfUEFHRV9FWFRfRVNaMCB8IF9QQUdFX0VYVF9FU1oxIHwgX1BBR0VfRVhUX0VTWjIpXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmg6MTQzOiMgZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV80TUIpXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgtMTQ0LSMgIGRlZmluZSBfUEFHRV9TWkhVR0VcXHQoX1BBR0VfRVhUX0VTWjMpXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmg6MTQ1OiMgZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NE1CKVxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oLTE0Ni0jICBkZWZpbmUgX1BBR0VfU1pIVUdFXFx0KF9QQUdFX0VYVF9FU1oyIHwgX1BBR0VfRVhUX0VTWjMpXFxuLS1cXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaC0xNDktI2Vsc2VcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaDoxNTA6IyBpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEspXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgtMTUxLSMgIGRlZmluZSBfUEFHRV9TWkhVR0VcXHQoX1BBR0VfU1oxKVxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oOjE1MjojIGVsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMU1CKVxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oLTE1My0jICBkZWZpbmUgX1BBR0VfU1pIVUdFXFx0KF9QQUdFX1NaMCB8IF9QQUdFX1NaMSlcXG4tLVxcbmFyY2gvc2gvbW0vTWFrZWZpbGU9Mzc9b2JqLSQoQ09ORklHX0RFQlVHX0ZTKVxcdFxcdCs9ICQoZGVidWdmcy15KVxcbmFyY2gvc2gvbW0vTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSlcXHQrPSBodWdldGxicGFnZS5vXFxuYXJjaC9zaC9tbS9NYWtlZmlsZS0zOS1vYmotJChDT05GSUdfUE1CKVxcdFxcdCs9IHBtYi5vXFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC02LVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC04LXN0cnVjdCBwdWRfaHVnZV9wYXRjaF9lbnRyeSB7XFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tdV82NC5oPTc1PXN0cnVjdCB0c2JfY29uZmlnIHtcXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vbW11XzY0LmgtODUtXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfNjQuaDo4NjojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tdV82NC5oLTg3LSNkZWZpbmUgTU1fVFNCX0hVR0VcXHQxXFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzY0Lmg9Mzc9c3RhdGljIGlubGluZSB2b2lkIHRzYl9jb250ZXh0X3N3aXRjaF9jdHgoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzY0LmgtNDEtXFx0XFx0XFx0ICAgICBcXHUwMDI2bW0tXFx1MDAzZWNvbnRleHQudHNiX2Jsb2NrW01NX1RTQl9CQVNFXSxcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzY0Lmg6NDI6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF82NC5oLTQzLVxcdFxcdFxcdCAgICAgKG1tLVxcdTAwM2Vjb250ZXh0LnRzYl9ibG9ja1tNTV9UU0JfSFVHRV0udHNiID9cXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGFnZV82NC5oLTIzLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGFnZV82NC5oOjI0OiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIHx8IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGFnZV82NC5oLTI1LSNkZWZpbmUgSFBBR0VfU0laRVxcdFxcdChfQUMoMSxVTCkgXFx1MDAzY1xcdTAwM2MgSFBBR0VfU0hJRlQpXFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BhZ2VfNjQuaC0zNC1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BhZ2VfNjQuaDozNTojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BhZ2VfNjQuaC0zNi1zdHJ1Y3QgcHRfcmVncztcXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oPTM3ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3dyaXRlKHB0ZV90IHB0ZSlcXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oLTM5MS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaDozOTI6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgtMzkzLXB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKTtcXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oPTExNTY9YXNtbGlua2FnZSB2b2lkIGRvX3NwYXJjNjRfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbi0tXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgtMTE1OS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaDoxMTYwOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgtMTE2MS1cXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oPTExNjk9ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHRlX2xlYWZfc2l6ZShwdGVfdCBwdGUpO1xcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oLTExNzAtXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0Lmg6MTE3MTojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oLTExNzItXFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RzYi5oPTc1PWV4dGVybiBzdHJ1Y3QgdHNiX3BoeXNfcGF0Y2hfZW50cnkgX190c2JfcGh5c19wYXRjaCwgX190c2JfcGh5c19wYXRjaF9lbmQ7XFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RzYi5oLTIwNi1cXHQgKi9cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RzYi5oOjIwNzojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RzYi5oLTIwOC0jZGVmaW5lIFVTRVJfUEdUQUJMRV9DSEVDS19QVURfSFVHRShWQUREUiwgUkVHMSwgUkVHMiwgRkFJTF9MQUJFTCwgUFRFX0xBQkVMKSBcXFxcXFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RzYi5oLTI0MS1cXHQgKi9cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RzYi5oOjI0MjojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RzYi5oLTI0My0jZGVmaW5lIFVTRVJfUEdUQUJMRV9DSEVDS19QTURfSFVHRShWQUREUiwgUkVHMSwgUkVHMiwgRkFJTF9MQUJFTCwgUFRFX0xBQkVMKSBcXFxcXFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9zdW40dl90bGJfbWlzcy5TPTE3NT1zdW40dl90c2JfbWlzc19jb21tb246XFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9zdW40dl90bGJfbWlzcy5TLTE3OS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9zdW40dl90bGJfbWlzcy5TOjE4MDojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG5hcmNoL3NwYXJjL2tlcm5lbC9zdW40dl90bGJfbWlzcy5TLTE4MS1cXHRtb3ZcXHRTQ1JBVENIUEFEX1VUU0JSRUcyLCAlZzVcXG4tLVxcbmFyY2gvc3BhcmMva2VybmVsL3RzYi5TPTUxPXRzYl9taXNzX3BhZ2VfdGFibGVfd2FsazpcXG4tLVxcbmFyY2gvc3BhcmMva2VybmVsL3RzYi5TLTU2LVxcdCAqL1xcbmFyY2gvc3BhcmMva2VybmVsL3RzYi5TOjU3OiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIHx8IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxcbmFyY2gvc3BhcmMva2VybmVsL3RzYi5TLTU4LVxcbi0tXFxuYXJjaC9zcGFyYy9rZXJuZWwvdHNiLlM9MTE1PXRzYl9taXNzX3BhZ2VfdGFibGVfd2Fsa19zdW40dl9mYXN0cGF0aDpcXG4tLVxcbmFyY2gvc3BhcmMva2VybmVsL3RzYi5TLTExOS1cXG5hcmNoL3NwYXJjL2tlcm5lbC90c2IuUzoxMjA6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXFxuYXJjaC9zcGFyYy9rZXJuZWwvdHNiLlMtMTIxLVxcdHNldGhpXFx0XFx0JXVoaShfUEFHRV9QTURfSFVHRSB8IF9QQUdFX1BVRF9IVUdFKSwgJWc3XFxuLS1cXG5hcmNoL3NwYXJjL21tL01ha2VmaWxlPTExPW9iai0kKENPTkZJR19TUEFSQzMyKSAgICs9IGxlb25fbW0ub1xcbi0tXFxuYXJjaC9zcGFyYy9tbS9NYWtlZmlsZS0xMy0jIE9ubHkgdXNlZCBieSBzcGFyYzY0XFxuYXJjaC9zcGFyYy9tbS9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKSArPSBodWdldGxicGFnZS5vXFxuYXJjaC9zcGFyYy9tbS9NYWtlZmlsZS0xNS1cXG4tLVxcbmFyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYz03OT1zdGF0aWMgdW5zaWduZWQgaW50IGdldF91c2VyX2luc24odW5zaWduZWQgbG9uZyB0cGMpXFxuLS1cXG5hcmNoL3NwYXJjL21tL2ZhdWx0XzY0LmMtMTA1LVxcbmFyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYzoxMDY6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXFxuYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jLTEwNy1cXHRpZiAoaXNfaHVnZXRsYl9wbWQoKnBtZHApKSB7XFxuLS1cXG5hcmNoL3NwYXJjL21tL2ZhdWx0XzY0LmM9MjY3PWFzbWxpbmthZ2Ugdm9pZCBfX2twcm9iZXMgZG9fc3BhcmM2NF9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYy00NzItXFx0XFx0dHNiX2dyb3cobW0sIE1NX1RTQl9CQVNFLCBtbV9yc3MpO1xcbmFyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYzo0NzM6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXFxuYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jLTQ3NC1cXHRtbV9yc3MgPSBtbS1cXHUwMDNlY29udGV4dC5odWdldGxiX3B0ZV9jb3VudCArIG1tLVxcdTAwM2Vjb250ZXh0LnRocF9wdGVfY291bnQ7XFxuLS1cXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYz0zMTM9c3RhdGljIHZvaWQgX191cGRhdGVfbW11X3RzYl9pbnNlcnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdHNiX2luZGV4LFxcbi0tXFxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMzI4LVxcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jOjMyOTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jLTMzMC1zdGF0aWMgaW50IF9faW5pdCBodWdldGxicGFnZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYz0zNTQ9Ym9vbCBfX2luaXQgYXJjaF9odWdldGxiX3ZhbGlkX3NpemUodW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMzg0LX1cXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYzozODU6I2VuZGlmXFx0LyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jLTM4Ni1cXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYz0zODc9dm9pZCB1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jLTQxMS1cXHRpc19odWdlX3RzYiA9IGZhbHNlO1xcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jOjQxMjojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYy00MTMtXFx0aWYgKG1tLVxcdTAwM2Vjb250ZXh0Lmh1Z2V0bGJfcHRlX2NvdW50IHx8IG1tLVxcdTAwM2Vjb250ZXh0LnRocF9wdGVfY291bnQpIHtcXG4tLVxcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jPTI4ODI9dm9pZCB1cGRhdGVfbW11X2NhY2hlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMjkxMi1cXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYzoyOTEzOiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIHx8IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jLTI5MTQtc3RhdGljIHZvaWQgY29udGV4dF9yZWxvYWQodm9pZCAqX19kYXRhKVxcbi0tXFxuYXJjaC9zcGFyYy9tbS90c2IuYz04Mz1zdGF0aWMgdm9pZCBfX2ZsdXNoX3RzYl9vbmUoc3RydWN0IHRsYl9iYXRjaCAqdGIsIHVuc2lnbmVkIGxvbmcgaGFzaF9zaGlmdCxcXG4tLVxcbmFyY2gvc3BhcmMvbW0vdHNiLmMtOTEtXFxuYXJjaC9zcGFyYy9tbS90c2IuYzo5MjojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG5hcmNoL3NwYXJjL21tL3RzYi5jLTkzLXN0YXRpYyB2b2lkIF9fZmx1c2hfaHVnZV90c2Jfb25lX2VudHJ5KHVuc2lnbmVkIGxvbmcgdHNiLCB1bnNpZ25lZCBsb25nIHYsXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA5OjA5OjM1LjMwODM1OTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjMzNjAwMzA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZpcnR1YWwgTWFwcGluZyBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBqdW1wcyBvdXQuIEl0J3MgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiB0aGF0IGNvbnRyb2xzIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBoZXJlLiBUaGUgY2hhbmdlcyB0b3VjaCBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmhgLCBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYCwgYW5kIGBtbS92bWFsbG9jLmNgLlxuXG5JbiBgbW0vdm1hbGxvYy5jYCwgSSBzZWUgY29kZSBndWFyZGVkIGJ5IGBDT05GSUdfSFVHRVRMQl9QQUdFYCB0aGF0J3MgY2xlYXJseSByZWxhdGVkIHRvIGhhbmRsaW5nIGh1Z2UgcGFnZSBtYXBwaW5ncyB3aXRoaW4gdGhlIHZtYWxsb2MgYXJlbmEuIFRoZSBjb2RlIGNoZWNrcyBmb3IgYEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIGFuZCBgSEFWRV9BUkNIX0hVR0VfVk1BUGAsIHdoaWNoIGFwcGVhciB0byBiZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmVhdHVyZXMuIE9uIEFSTTY0LCB0aGVzZSBhcmUgaW1wbGljaXRseSBlbmFibGVkIGJ5IGBDT05GSUdfQVJNNjRgLCB3aGljaCBtZWFucyB0aGV5J3JlIGFsd2F5cyBhY3RpdmUuIFRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gYG51bV9jb250aWdfcHRlc2AgdG8gaGFuZGxlIHRoZSBzaXplIG9mIGEgcGFnZSBiZWluZyBtYXBwZWQuXG5cblNwZWNpZmljYWxseSwgaW4gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oYCwgYGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemVgIGhhcyBiZWVuIG1vZGlmaWVkLCBsaWtlbHkgdG8gc3VwcG9ydCBjb250aWd1b3VzIFBURSBtYXBwaW5ncy4gSXQgZGV0ZXJtaW5lcyB0aGUgb3B0aW1hbCBzaXplIGZvciBhIGNvbnRpZ3VvdXMgbWFwcGluZyBiYXNlZCBvbiBhbGlnbm1lbnQgYW5kIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlJ3MgY2FwYWJpbGl0aWVzLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHdoaWNoIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byB0aGlzIGNoYW5nZS4gYHZtYXBfc2V0X3B0ZXNgIGlzIGBfX2Fsd2F5c19pbmxpbmVgLCBzbyB0aGF0J3Mgbm90IGEgc3RhbmRhbG9uZSBmdW5jdGlvbiBpbiB0aGUgYmluYXJ5LiBgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkYCwgYHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYWAsIGFuZCBgdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGtgIGFyZSBhbGwgc3RhdGljLCBtZWFuaW5nIHRoZXkgYXJlIGxpa2VseSBpbnRlcm5hbGx5IGNhbGxlZC4gSG93ZXZlciwgdGhlc2UgY2FuIHN0aWxsIGJlIGZ1enplZCwgZGVwZW5kaW5nIG9uIHRoZSBmdXp6aW5nIHRvb2wuIEZpbmFsbHksIGB2bWFwYCwgYF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoYCwgYW5kIGB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hgIGFyZSBhbGwgZXhwb3J0ZWQgYW5kIHJlcHJlc2VudCB0aGUgZW50cnkgcG9pbnRzLlxuXG5DaGVja2luZyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIGBIVUdFVExCX1BBR0VgIGlzIHRoZSBjcml0aWNhbCBvbmUuIGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCBhbmQgYEhBVkVfQVJDSF9IVUdFX1ZNQVBgIGFyZSBhcmNoaXRlY3R1cmFsbHktc2VsZWN0ZWQgYW5kIHNvIHdlIHdvbid0IG5lZWQgdG8gc3BlY2lmeSB0aGVzZS4gYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIHR5cGljYWxseSBlbmFibGVkIGlmIGBDT05GSUdfSFVHRVRMQkZTYCBpcyBlbmFibGVkLiBUaGVyZWZvcmUsIG91ciBcIkVuYWJsZUNvbmZpZ3NcIiBsaXN0IHdpbGwgaW5jbHVkZSBcIkhVR0VUTEJfUEFHRVwiLlxuXG5JIHRoaW5rIHdlIHNob3VsZCBjb25jZW50cmF0ZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGB2bWFwYCwgYHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZGAsIGB2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWFgLCBgdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGtgLCBhbmQgYF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGVsZW1lbnRzIG9mIHRoZSBiYXRjaGVkIG1hcHBpbmcgbG9naWMsIGVzcGVjaWFsbHkgYHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZGAsIHdoaWNoIGFwcGVhcnMgdG8gYmUgdGhlIG1vc3Qgbm92ZWwgcGFydCBvZiB0aGUgY2hhbmdlLlxuXG5GaW5hbGx5LCByZWdhcmRpbmcgcG90ZW50aWFsIGZ1enppbmcsIHRoaXMgY2hhbmdlIHRvIHZpcnR1YWwgbWFwcGluZyBpcyBkZWZpbml0ZWx5IHdvcnRoIHRhcmdldGluZy4gSXQgaW50cm9kdWNlcyBuZXcgY29udGlndW91cyBtYXBwaW5ncyBhdCB0aGUgUFRFIGxldmVsIHdoaWNoIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSBjb3JlIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMuIFRoZSBmdW5jdGlvbnMgaW52b2x2ZWQgYXJlbid0IG9uIGFueSBob3QgcGF0aHMgc28gdGhlc2UgYXJlIGxpa2VseSBzYWZlIHRvIHRhcmdldCBpbiBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk5OCwiT3V0cHV0VG9rZW5zIjoxMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA5OjA5OjUxLjY0NDM2NTYxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMDU0NzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCX1BBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFwXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRcIixcbiAgICBcInZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYVwiLFxuICAgIFwidm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGtcIixcbiAgICBcIl9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBiYXRjaGVkIGNvbnRpZ3VvdXMgbWFwcGluZ3MgYXQgdGhlIFBURSBsZXZlbCBmb3Igdm1hcCwgbW9kaWZ5aW5nIGNvcmUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYy4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCX1BBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFwXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRcIixcbiAgICBcInZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYVwiLFxuICAgIFwidm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGtcIixcbiAgICBcIl9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBiYXRjaGVkIGNvbnRpZ3VvdXMgbWFwcGluZ3MgYXQgdGhlIFBURSBsZXZlbCBmb3Igdm1hcCwgbW9kaWZ5aW5nIGNvcmUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYy4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjcb7n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-06 08:49:41 +0000 UTC FinishedAt: 2026-07-06 09:09:53 +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": "c6b0b9701fcef71ed7cabc0358bb18e15e8e8329", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLB_PAGE" ], "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": "c6b0b9701fcef71ed7cabc0358bb18e15e8e8329", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLB_PAGE" ], "series_id": "295c283a-461d-4d2f-b4dd-121fc94c8a92" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vmap", "vmap_pages_range_batched", "vmap_get_aligned_vm_area", "vmap_pages_range_noflush_walk", "__vmap_pages_range_noflush" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA5OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXAmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkJiMzNDssCiAgICAmIzM0O3ZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayYjMzQ7LAogICAgJiMzNDtfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGJhdGNoZWQgY29udGlndW91cyBtYXBwaW5ncyBhdCB0aGUgUFRFIGxldmVsIGZvciB2bWFwLCBtb2RpZnlpbmcgY29yZSB2aXJ0dWFsIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA5OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjM0Nzk4MjEwYzQyMDk4NzFkMjIxMWUyMTUxNjA2ZTljMWVmM2RiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMDk6MDk6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaFxuaW5kZXggNGVjMWFjZDNjMWIzNDguLjdkOWM3ZGM3OTVjNDJjIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oXG5AQCAtMjMsNiAmIzQzOzIzLDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUodW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kLCB1NjQgcGZuLFxuIFx0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdClcbiB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzaXplO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBJZiB0aGUgYmxvY2sgaXMgYXQgbGVhc3QgQ09OVF9QVEVfU0laRSBpbiBzaXplLCBhbmQgaXMgbmF0dXJhbGx5XG4gXHQgKiBhbGlnbmVkIGluIGJvdGggdmlydHVhbCBhbmQgcGh5c2ljYWwgc3BhY2UsIHRoZW4gd2UgY2FuIHB0ZS1tYXAgdGhlXG5AQCAtNDAsNyAmIzQzOzQyLDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUodW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0aWYgKCFJU19BTElHTkVEKFBGTl9QSFlTKHBmbiksIENPTlRfUFRFX1NJWkUpKVxuIFx0XHRyZXR1cm4gUEFHRV9TSVpFO1xuIFxuLVx0cmV0dXJuIENPTlRfUFRFX1NJWkU7XG4mIzQzO1x0c2l6ZSA9IG1pbjMoZW5kIC0gYWRkciwgMVVMIFx1MDAzY1x1MDAzYyBtYXhfcGFnZV9zaGlmdCwgUE1EX1NJWkUgXHUwMDNlXHUwMDNlIDEpO1xuJiM0MztcdHNpemUgPSByb3VuZGRvd25fcG93X29mX3R3byhzaXplKTtcbiYjNDM7XHRyZXR1cm4gc2l6ZTtcbiB9XG4gXG4gI2RlZmluZSBhcmNoX3ZtYXBfcHRlX3JhbmdlX3VubWFwX3NpemUgYXJjaF92bWFwX3B0ZV9yYW5nZV91bm1hcF9zaXplXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jXG5pbmRleCAzMDc3MmE5MDlhZWEzZS4uZDYwMGE2ZDc1MWUyOTUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xuQEAgLTExMCw2ICYjNDM7MTEwLDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IG51bV9jb250aWdfcHRlcyh1bnNpZ25lZCBsb25nIHNpemUsIHNpemVfdCAqcGdzaXplKVxuIFx0XHRjb250aWdfcHRlcyA9IENPTlRfUFRFUztcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuJiM0MztcdFx0aWYgKHNpemUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDNjIFBNRF9TSVpFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdElTX0FMSUdORUQoc2l6ZSwgQ09OVF9QVEVfU0laRSkpIHtcbiYjNDM7XHRcdFx0KnBnc2l6ZSA9IFBBR0VfU0laRTtcbiYjNDM7XHRcdFx0Y29udGlnX3B0ZXMgPSBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiBcdFx0V0FSTl9PTighX19odWdldGxiX3ZhbGlkX3NpemUoc2l6ZSkpO1xuIFx0fVxuIFxuQEAgLTM1OSw2ICYjNDM7MzY1LDEwIEBAIHB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKVxuIFx0Y2FzZSBDT05UX1BURV9TSVpFOlxuIFx0XHRyZXR1cm4gcHRlX21rY29udChlbnRyeSk7XG4gXHRkZWZhdWx0OlxuJiM0MztcdFx0aWYgKHBhZ2VzaXplIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBwYWdlc2l6ZSBcdTAwM2MgUE1EX1NJWkUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0SVNfQUxJR05FRChwYWdlc2l6ZSwgQ09OVF9QVEVfU0laRSkpXG4mIzQzO1x0XHRcdHJldHVybiBwdGVfbWtjb250KGVudHJ5KTtcbiYjNDM7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFx0cHJfd2FybihcJiMzNDslczogdW5yZWNvZ25pemVkIGh1Z2UgcGFnZSBzaXplIDB4JWx4XFxuXCYjMzQ7LFxuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xuaW5kZXggMTJmNGEzOWZkZDBiM2UuLmEwODg2ODBjMzlmYzEyIDEwMDY0NFxuLS0tIGEvbW0vdm1hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmNcbkBAIC05MSw2ICYjNDM7OTEsMzMgQEAgc3RydWN0IHZmcmVlX2RlZmVycmVkIHtcbiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHZmcmVlX2RlZmVycmVkLCB2ZnJlZV9kZWZlcnJlZCk7XG4gXG4gLyoqKiBQYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgKioqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVHJ5IGNvbnRpZ3VvdXMgbWFwcGluZ3MgYXQgdGhlIFBURSBsZXZlbCBmb3IgYXJjaGVzIHdoaWNoIHN1cHBvcnQgdGhlbSwgYW5kIGlmXG4mIzQzOyAqIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyLiBGYWxsIGJhY2sgdG8gUEFHRV9TSVpFIG1hcHBpbmdzIG90aGVyd2lzZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBtYXBwaW5nIHNpemUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hcF9zZXRfcHRlcyhwdGVfdCAqcHRlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgdTY0IHBmbixcbiYjNDM7XHRcdHBncHJvdF90IHByb3QsIHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdClcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbiYjNDM7XG4mIzQzO1x0c2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUoYWRkciwgZW5kLCBwZm4sIG1heF9wYWdlX3NoaWZ0KTtcbiYjNDM7XHRpZiAoc2l6ZSAhPSBQQUdFX1NJWkUpIHtcbiYjNDM7XHRcdHB0ZV90IGVudHJ5ID0gcGZuX3B0ZShwZm4sIHByb3QpO1xuJiM0MztcbiYjNDM7XHRcdGVudHJ5ID0gYXJjaF9tYWtlX2h1Z2VfcHRlKGVudHJ5LCBpbG9nMihzaXplKSwgMCk7XG4mIzQzO1x0XHRzZXRfaHVnZV9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSwgc2l6ZSk7XG4mIzQzO1x0XHRyZXR1cm4gc2l6ZTtcbiYjNDM7XHR9XG4mIzQzOyNlbmRpZlxuJiM0MztcdHNldF9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBwZm5fcHRlKHBmbiwgcHJvdCkpO1xuJiM0MztcdHJldHVybiBQQUdFX1NJWkU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCxcbiBcdFx0XHR1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQsIHBndGJsX21vZF9tYXNrICptYXNrKVxuQEAgLTk4LDcgJiM0MzsxMjUsOCBAQCBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRwdGVfdCAqcHRlO1xuIFx0dTY0IHBmbjtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0dW5zaWduZWQgbG9uZyBzaXplID0gUEFHRV9TSVpFO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3RlcHM7XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFQQUdFX0FMSUdORUQoZW5kIC0gYWRkcikpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xMTksMjAgJiM0MzsxNDcsOSBAQCBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0QlVHKCk7XG4gXHRcdH1cbiBcbi0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuLVx0XHRzaXplID0gYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZShhZGRyLCBlbmQsIHBmbiwgbWF4X3BhZ2Vfc2hpZnQpO1xuLVx0XHRpZiAoc2l6ZSAhPSBQQUdFX1NJWkUpIHtcbi1cdFx0XHRwdGVfdCBlbnRyeSA9IHBmbl9wdGUocGZuLCBwcm90KTtcbi1cbi1cdFx0XHRlbnRyeSA9IGFyY2hfbWFrZV9odWdlX3B0ZShlbnRyeSwgaWxvZzIoc2l6ZSksIDApO1xuLVx0XHRcdHNldF9odWdlX3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5LCBzaXplKTtcbi1cdFx0XHRwZm4gJiM0Mzs9IFBGTl9ET1dOKHNpemUpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tI2VuZGlmXG4tXHRcdHNldF9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBwZm5fcHRlKHBmbiwgcHJvdCkpO1xuLVx0XHRwZm4mIzQzOyYjNDM7O1xuLVx0fSB3aGlsZSAocHRlICYjNDM7PSBQRk5fRE9XTihzaXplKSwgYWRkciAmIzQzOz0gc2l6ZSwgYWRkciAhPSBlbmQpO1xuJiM0MztcdFx0c2l6ZSA9IHZtYXBfc2V0X3B0ZXMocHRlLCBhZGRyLCBlbmQsIHBmbiwgcHJvdCwgbWF4X3BhZ2Vfc2hpZnQpO1xuJiM0MztcdFx0c3RlcHMgPSBQRk5fRE9XTihzaXplKTtcbiYjNDM7XHR9IHdoaWxlIChwdGUgJiM0Mzs9IHN0ZXBzLCBwZm4gJiM0Mzs9IHN0ZXBzLCBhZGRyICYjNDM7PSBzaXplLCBhZGRyICE9IGVuZCk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcdCptYXNrIHw9IFBHVEJMX1BURV9NT0RJRklFRDtcbkBAIC01MjQsOCAmIzQzOzU0MSwxMCBAQCB2b2lkIHZ1bm1hcF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucixcbi1cdFx0cGd0YmxfbW9kX21hc2sgKm1hc2spXG4mIzQzO1x0XHRwZ3RibF9tb2RfbWFzayAqbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0KVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBmbiwgc2l6ZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3RlcHM7XG4gXHRpbnQgZXJyID0gMDtcbiBcdHB0ZV90ICpwdGU7XG4gXG5AQCAtNTU2LDkgJiM0Mzs1NzUsMTAgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0c2V0X3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIG1rX3B0ZShwYWdlLCBwcm90KSk7XG4tXHRcdCgqbnIpJiM0MzsmIzQzOztcbi1cdH0gd2hpbGUgKHB0ZSYjNDM7JiM0MzssIGFkZHIgJiM0Mzs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpO1xuJiM0MztcdFx0cGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4mIzQzO1x0XHRzaXplID0gdm1hcF9zZXRfcHRlcyhwdGUsIGFkZHIsIGVuZCwgcGZuLCBwcm90LCBzaGlmdCk7XG4mIzQzO1x0XHRzdGVwcyA9IFBGTl9ET1dOKHNpemUpO1xuJiM0MztcdH0gd2hpbGUgKHB0ZSAmIzQzOz0gc3RlcHMsICpuciAmIzQzOz0gc3RlcHMsIGFkZHIgJiM0Mzs9IHNpemUsIGFkZHIgIT0gZW5kKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0Km1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEO1xuQEAgLTU2OCw3ICYjNDM7NTg4LDcgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXG4gc3RhdGljIGludCB2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLFxuLVx0XHRwZ3RibF9tb2RfbWFzayAqbWFzaylcbiYjNDM7XHRcdHBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpXG4ge1xuIFx0cG1kX3QgKnBtZDtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbkBAIC01NzgsNyAmIzQzOzU5OCwyNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbi1cdFx0aWYgKHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrKSlcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2hpZnQgXHUwMDNlPSBQTURfU0hJRlQpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1sqbnJdO1xuJiM0MztcdFx0XHRwaHlzX2FkZHJfdCBwaHlzX2FkZHI7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoV0FSTl9PTighcGFnZSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRcdGlmIChXQVJOX09OKCFwZm5fdmFsaWQocGFnZV90b19wZm4ocGFnZSkpKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRcdHBoeXNfYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh2bWFwX3RyeV9odWdlX3BtZChwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgcHJvdCxcbiYjNDM7XHRcdFx0XHRcdFx0c2hpZnQpKSB7XG4mIzQzO1x0XHRcdFx0Km1hc2sgfD0gUEdUQkxfUE1EX01PRElGSUVEO1xuJiM0MztcdFx0XHRcdCpuciAmIzQzOz0gMSBcdTAwM2NcdTAwM2MgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpO1xuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrLCBzaGlmdCkpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9IHdoaWxlIChwbWQmIzQzOyYjNDM7LCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNTg2LDcgJiM0Mzs2MjYsNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcbiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0dW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsXG4tXHRcdHBndGJsX21vZF9tYXNrICptYXNrKVxuJiM0MztcdFx0cGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdClcbiB7XG4gXHRwdWRfdCAqcHVkO1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuQEAgLTU5Niw3ICYjNDM7NjM2LDcgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4tXHRcdGlmICh2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaykpXG4mIzQzO1x0XHRpZiAodm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KSlcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH0gd2hpbGUgKHB1ZCYjNDM7JiM0MzssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XG4gXHRyZXR1cm4gMDtcbkBAIC02MDQsNyAmIzQzOzY0NCw3IEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucixcbi1cdFx0cGd0YmxfbW9kX21hc2sgKm1hc2spXG4mIzQzO1x0XHRwZ3RibF9tb2RfbWFzayAqbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0KVxuIHtcbiBcdHA0ZF90ICpwNGQ7XG4gXHR1bnNpZ25lZCBsb25nIG5leHQ7XG5AQCAtNjE0LDE0ICYjNDM7NjU0LDE4IEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGRvIHtcbiBcdFx0bmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuLVx0XHRpZiAodm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2spKVxuJiM0MztcdFx0aWYgKHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrLCBzaGlmdCkpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9IHdoaWxlIChwNGQmIzQzOyYjNDM7LCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tXHRcdHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMpXG4mIzQzOy8qXG4mIzQzOyAqIEl0IGNhbiB0YWtlIGFuIGFycmF5IG9mIHBhZ2VzIHdoaWNoIGFyZSBub3QgYWxsIGNvbnRpZ3VvdXMsIGJ1dCBpdFxuJiM0MzsgKiBtYXkgaGF2ZSBjb250aWd1b3VzIGNodW5rcywgYXMgaGludGVkIGJ5IEBzaGlmdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiYjNDM7XHRcdHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBzaGlmdClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcjtcbiBcdHBnZF90ICpwZ2Q7XG5AQCAtNjM2LDcgJiM0Mzs2ODAsNyBAQCBzdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRuZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4gXHRcdGlmIChwZ2RfYmFkKCpwZ2QpKVxuIFx0XHRcdG1hc2sgfD0gUEdUQkxfUEdEX01PRElGSUVEO1xuLVx0XHRlcnIgPSB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2QsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBcdTAwMjZuciwgXHUwMDI2bWFzayk7XG4mIzQzO1x0XHRlcnIgPSB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2QsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBcdTAwMjZuciwgXHUwMDI2bWFzaywgc2hpZnQpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGJyZWFrO1xuIFx0fSB3aGlsZSAocGdkJiM0MzsmIzQzOywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTtcbkBAIC02NTksMjcgJiM0Mzs3MDMsMTIgQEAgc3RhdGljIGludCB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBpbnQgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0cGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IHBhZ2Vfc2hpZnQpXG4ge1xuLVx0dW5zaWduZWQgaW50IGksIG5yID0gKGVuZCAtIGFkZHIpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVxuIFx0V0FSTl9PTihwYWdlX3NoaWZ0IFx1MDAzYyBQQUdFX1NISUZUKTtcbiBcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQykgfHxcbi1cdFx0XHRwYWdlX3NoaWZ0ID09IFBBR0VfU0hJRlQpXG4tXHRcdHJldHVybiB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2goYWRkciwgZW5kLCBwcm90LCBwYWdlcyk7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucjsgaSAmIzQzOz0gMVUgXHUwMDNjXHUwMDNjIChwYWdlX3NoaWZ0IC0gUEFHRV9TSElGVCkpIHtcbi1cdFx0aW50IGVycjtcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MpKVxuJiM0MztcdFx0cGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7XG4gXG4tXHRcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICYjNDM7ICgxVUwgXHUwMDNjXHUwMDNjIHBhZ2Vfc2hpZnQpLFxuLVx0XHRcdFx0XHRwYWdlX3RvX3BoeXMocGFnZXNbaV0pLCBwcm90LFxuLVx0XHRcdFx0XHRwYWdlX3NoaWZ0KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0XHRhZGRyICYjNDM7PSAxVUwgXHUwMDNjXHUwMDNjIHBhZ2Vfc2hpZnQ7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsoYWRkciwgZW5kLCBwcm90LCBwYWdlcywgcGFnZV9zaGlmdCk7XG4gfVxuIFxuIGludCB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbkBAIC0zMjc5LDYgJiM0MzszMzA4LDE0IEBAIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF92bV9hcmVhX2NhbGxlcih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG4gXHRcdFx0XHQgIE5VTUFfTk9fTk9ERSwgR0ZQX0tFUk5FTCwgY2FsbGVyKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIodW5zaWduZWQgbG9uZyBzaXplLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3Qgdm9pZCAqY2FsbGVyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBhbGlnbiwgUEFHRV9TSElGVCwgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcbiYjNDM7XHRcdFx0XHQgIE5VTUFfTk9fTk9ERSwgR0ZQX0tFUk5FTCwgY2FsbGVyKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBmaW5kX3ZtX2FyZWEgLSBmaW5kIGEgY29udGludW91cyBrZXJuZWwgdmlydHVhbCBhcmVhXG4gICogQGFkZHI6XHQgIGJhc2UgYWRkcmVzc1xuQEAgLTM1MTksNiAmIzQzOzM1NTYsMTEzIEBAIHZvaWQgdnVubWFwKGNvbnN0IHZvaWQgKmFkZHIpXG4gfVxuIEVYUE9SVF9TWU1CT0wodnVubWFwKTtcbiBcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdm1fc2hpZnQocGdwcm90X3QgcHJvdCwgdW5zaWduZWQgbG9uZyBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKHByb3QpIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gUE1EX1NJWkUpXG4mIzQzO1x0XHRyZXR1cm4gUE1EX1NISUZUO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYXJjaF92bWFwX3B0ZV9zdXBwb3J0ZWRfc2hpZnQoc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGdldF92bWFwX2JhdGNoX29yZGVyKHN0cnVjdCBwYWdlICoqcGFnZXMsXG4mIzQzO1x0XHRwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3N0ZXBzLCB1bnNpZ25lZCBpbnQgaWR4KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5yX2NvbnRpZztcbiYjNDM7XHRpbnQgb3JkZXI7XG4mIzQzO1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bnJfY29udGlnID0gbnVtX3BhZ2VzX2NvbnRpZ3VvdXMoXHUwMDI2cGFnZXNbaWR4XSwgbWF4X3N0ZXBzKTtcbiYjNDM7XHRpZiAobnJfY29udGlnIFx1MDAzYyAyKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG9yZGVyID0gaWxvZzIobnJfY29udGlnKTtcbiYjNDM7XG4mIzQzO1x0LyogTGltaXQgb3JkZXIgYnkgcGZuIGFsaWdubWVudCAqL1xuJiM0MztcdG9yZGVyID0gbWluX3QoaW50LCBvcmRlciwgX19mZnMocGFnZV90b19wZm4ocGFnZXNbaWR4XSkpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZtX3NoaWZ0KHByb3QsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpID09IFBBR0VfU0hJRlQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG9yZGVyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuJiM0MztcdFx0cGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBjb3VudCA9IChlbmQgLSBhZGRyKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcHJldl9zaGlmdCA9IDAsIGlkeCA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBtYXBfYWRkciA9IGFkZHIsIGJhdGNoX2VuZCA9IGFkZHI7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0ga21zYW5fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMsXG4mIzQzO1x0XHRcdFx0XHRcdFBBR0VfU0hJRlQsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIGNvdW50OyApIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBzaGlmdCA9IFBBR0VfU0hJRlQgJiM0MztcbiYjNDM7XHRcdFx0Z2V0X3ZtYXBfYmF0Y2hfb3JkZXIocGFnZXMsIHByb3QsIGNvdW50IC0gaSwgaSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFpKVxuJiM0MztcdFx0XHRwcmV2X3NoaWZ0ID0gc2hpZnQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNoaWZ0ICE9IHByZXZfc2hpZnQpIHtcbiYjNDM7XHRcdFx0ZXJyID0gdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsobWFwX2FkZHIsIGJhdGNoX2VuZCxcbiYjNDM7XHRcdFx0XHRcdHByb3QsIHBhZ2VzICYjNDM7IGlkeCwgcHJldl9zaGlmdCk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdHByZXZfc2hpZnQgPSBzaGlmdDtcbiYjNDM7XHRcdFx0bWFwX2FkZHIgPSBiYXRjaF9lbmQ7XG4mIzQzO1x0XHRcdGlkeCA9IGk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE9uY2Ugc21hbGwgcGFnZXMgYXJlIGVuY291bnRlcmVkLCB0aGUgcmVtYWluaW5nIHBhZ2VzXG4mIzQzO1x0XHQgKiBhcmUgbGlrZWx5IHNtYWxsIGFzIHdlbGwuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChzaGlmdCA9PSBQQUdFX1NISUZUKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRiYXRjaF9lbmQgJiM0Mzs9IDFVTCBcdTAwM2NcdTAwM2Mgc2hpZnQ7XG4mIzQzO1x0XHRpICYjNDM7PSAxVSBcdTAwM2NcdTAwM2MgKHNoaWZ0IC0gUEFHRV9TSElGVCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBSZW1haW5pbmcgKi9cbiYjNDM7XHRpZiAobWFwX2FkZHIgXHUwMDNjIGVuZClcbiYjNDM7XHRcdGVyciA9IHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKG1hcF9hZGRyLCBlbmQsXG4mIzQzO1x0XHRcdFx0cHJvdCwgcGFnZXMgJiM0MzsgaWR4LCBwcmV2X3NoaWZ0KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRmbHVzaF9jYWNoZV92bWFwKGFkZHIsIGVuZCk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKnZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGZsYWdzLCBwZ3Byb3RfdCBwcm90LCBjb25zdCB2b2lkICpjYWxsZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhO1xuJiM0MztcdHVuc2lnbmVkIGludCBzaGlmdDtcbiYjNDM7XG4mIzQzO1x0aWYgKGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKHByb3QpIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gUE1EX1NJWkUpIHtcbiYjNDM7XHRcdHZtX2FyZWEgPSBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgUE1EX1NJWkUsXG4mIzQzO1x0XHRcdFx0ZmxhZ3MsIGNhbGxlcik7XG4mIzQzO1x0XHRpZiAodm1fYXJlYSlcbiYjNDM7XHRcdFx0cmV0dXJuIHZtX2FyZWE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzaGlmdCA9IGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpO1xuJiM0MztcdGlmIChzaGlmdCBcdTAwM2UgUEFHRV9TSElGVCkge1xuJiM0MztcdFx0dm1fYXJlYSA9IF9fZ2V0X3ZtX2FyZWFfbm9kZV9hbGlnbmVkX2NhbGxlcihzaXplLCAxVUwgXHUwMDNjXHUwMDNjIHNoaWZ0LFxuJiM0MztcdFx0XHRcdGZsYWdzLCBjYWxsZXIpO1xuJiM0MztcdFx0aWYgKHZtX2FyZWEpXG4mIzQzO1x0XHRcdHJldHVybiB2bV9hcmVhO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZV9hbGlnbmVkX2NhbGxlcihzaXplLCBQQUdFX1NJWkUsIGZsYWdzLCBjYWxsZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHZtYXAgLSBtYXAgYW4gYXJyYXkgb2YgcGFnZXMgaW50byB2aXJ0dWFsbHkgY29udGlndW91cyBzcGFjZVxuICAqIEBwYWdlczogYXJyYXkgb2YgcGFnZSBwb2ludGVyc1xuQEAgLTM1NTcsMTMgJiM0MzszNzAxLDE0IEBAIHZvaWQgKnZtYXAoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGNvdW50LFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdHNpemUgPSAodW5zaWduZWQgbG9uZyljb3VudCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbi1cdGFyZWEgPSBnZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4mIzQzO1x0YXJlYSA9IHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYShzaXplLCBmbGFncywgcHJvdCxcbiYjNDM7XHRcdFx0XHRfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuIFx0aWYgKCFhcmVhKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLVx1MDAzZWFkZHI7XG4tXHRpZiAodm1hcF9wYWdlc19yYW5nZShhZGRyLCBhZGRyICYjNDM7IHNpemUsIHBncHJvdF9ueChwcm90KSxcbi1cdFx0XHRcdHBhZ2VzLCBQQUdFX1NISUZUKSBcdTAwM2MgMCkge1xuJiM0MztcdGlmICh2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWQoYWRkciwgYWRkciAmIzQzOyBzaXplLCBwZ3Byb3RfbngocHJvdCksXG4mIzQzO1x0XHRcdFx0cGFnZXMpIFx1MDAzYyAwKSB7XG4gXHRcdHZ1bm1hcChhcmVhLVx1MDAzZWFkZHIpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwOTowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWFwJiMzNDssCiAgICAmIzM0O3ZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZCYjMzQ7LAogICAgJiMzNDt2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWEmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsmIzM0OywKICAgICYjMzQ7X192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBiYXRjaGVkIGNvbnRpZ3VvdXMgbWFwcGluZ3MgYXQgdGhlIFBURSBsZXZlbCBmb3Igdm1hcCwgbW9kaWZ5aW5nIGNvcmUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYy4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjM0Nzk4MjEwYzQyMDk4NzFkMjIxMWUyMTUxNjA2ZTljMWVmM2RiNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDYgMDk6MDk6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oCmluZGV4IDRlYzFhY2QzYzFiMzQ4Li43ZDljN2RjNzk1YzQyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmgKQEAgLTIzLDYgJiM0MzsyMyw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplKHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkJCXVuc2lnbmVkIGxvbmcgZW5kLCB1NjQgcGZuLAogCQkJCQkJdW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0KQogewomIzQzOwl1bnNpZ25lZCBsb25nIHNpemU7CiYjNDM7CiAJLyoKIAkgKiBJZiB0aGUgYmxvY2sgaXMgYXQgbGVhc3QgQ09OVF9QVEVfU0laRSBpbiBzaXplLCBhbmQgaXMgbmF0dXJhbGx5CiAJICogYWxpZ25lZCBpbiBib3RoIHZpcnR1YWwgYW5kIHBoeXNpY2FsIHNwYWNlLCB0aGVuIHdlIGNhbiBwdGUtbWFwIHRoZQpAQCAtNDAsNyAmIzQzOzQyLDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUodW5zaWduZWQgbG9uZyBhZGRyLAogCWlmICghSVNfQUxJR05FRChQRk5fUEhZUyhwZm4pLCBDT05UX1BURV9TSVpFKSkKIAkJcmV0dXJuIFBBR0VfU0laRTsKIAotCXJldHVybiBDT05UX1BURV9TSVpFOwomIzQzOwlzaXplID0gbWluMyhlbmQgLSBhZGRyLCAxVUwgJmx0OyZsdDsgbWF4X3BhZ2Vfc2hpZnQsIFBNRF9TSVpFICZndDsmZ3Q7IDEpOwomIzQzOwlzaXplID0gcm91bmRkb3duX3Bvd19vZl90d28oc2l6ZSk7CiYjNDM7CXJldHVybiBzaXplOwogfQogCiAjZGVmaW5lIGFyY2hfdm1hcF9wdGVfcmFuZ2VfdW5tYXBfc2l6ZSBhcmNoX3ZtYXBfcHRlX3JhbmdlX3VubWFwX3NpemUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCAzMDc3MmE5MDlhZWEzZS4uZDYwMGE2ZDc1MWUyOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMKQEAgLTExMCw2ICYjNDM7MTEwLDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IG51bV9jb250aWdfcHRlcyh1bnNpZ25lZCBsb25nIHNpemUsIHNpemVfdCAqcGdzaXplKQogCQljb250aWdfcHRlcyA9IENPTlRfUFRFUzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKJiM0MzsJCWlmIChzaXplICZndDsgMCAmYW1wOyZhbXA7IHNpemUgJmx0OyBQTURfU0laRSAmYW1wOyZhbXA7CiYjNDM7CQkJCUlTX0FMSUdORUQoc2l6ZSwgQ09OVF9QVEVfU0laRSkpIHsKJiM0MzsJCQkqcGdzaXplID0gUEFHRV9TSVpFOwomIzQzOwkJCWNvbnRpZ19wdGVzID0gc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQogCQlXQVJOX09OKCFfX2h1Z2V0bGJfdmFsaWRfc2l6ZShzaXplKSk7CiAJfQogCkBAIC0zNTksNiAmIzQzOzM2NSwxMCBAQCBwdGVfdCBhcmNoX21ha2VfaHVnZV9wdGUocHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBzaGlmdCwgdm1fZmxhZ3NfdCBmbGFncykKIAljYXNlIENPTlRfUFRFX1NJWkU6CiAJCXJldHVybiBwdGVfbWtjb250KGVudHJ5KTsKIAlkZWZhdWx0OgomIzQzOwkJaWYgKHBhZ2VzaXplICZndDsgMCAmYW1wOyZhbXA7IHBhZ2VzaXplICZsdDsgUE1EX1NJWkUgJmFtcDsmYW1wOwomIzQzOwkJCQlJU19BTElHTkVEKHBhZ2VzaXplLCBDT05UX1BURV9TSVpFKSkKJiM0MzsJCQlyZXR1cm4gcHRlX21rY29udChlbnRyeSk7CiYjNDM7CiAJCWJyZWFrOwogCX0KIAlwcl93YXJuKCYjMzQ7JXM6IHVucmVjb2duaXplZCBodWdlIHBhZ2Ugc2l6ZSAweCVseFxuJiMzNDssCmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggMTJmNGEzOWZkZDBiM2UuLmEwODg2ODBjMzlmYzEyIDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jCkBAIC05MSw2ICYjNDM7OTEsMzMgQEAgc3RydWN0IHZmcmVlX2RlZmVycmVkIHsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdmZyZWVfZGVmZXJyZWQsIHZmcmVlX2RlZmVycmVkKTsKIAogLyoqKiBQYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgKioqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogVHJ5IGNvbnRpZ3VvdXMgbWFwcGluZ3MgYXQgdGhlIFBURSBsZXZlbCBmb3IgYXJjaGVzIHdoaWNoIHN1cHBvcnQgdGhlbSwgYW5kIGlmCiYjNDM7ICogcmVxdWVzdGVkIGJ5IHRoZSBjYWxsZXIuIEZhbGwgYmFjayB0byBQQUdFX1NJWkUgbWFwcGluZ3Mgb3RoZXJ3aXNlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBtYXBwaW5nIHNpemUuCiYjNDM7ICovCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZtYXBfc2V0X3B0ZXMocHRlX3QgKnB0ZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHU2NCBwZm4sCiYjNDM7CQlwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZTsKJiM0MzsKJiM0MzsJc2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUoYWRkciwgZW5kLCBwZm4sIG1heF9wYWdlX3NoaWZ0KTsKJiM0MzsJaWYgKHNpemUgIT0gUEFHRV9TSVpFKSB7CiYjNDM7CQlwdGVfdCBlbnRyeSA9IHBmbl9wdGUocGZuLCBwcm90KTsKJiM0MzsKJiM0MzsJCWVudHJ5ID0gYXJjaF9tYWtlX2h1Z2VfcHRlKGVudHJ5LCBpbG9nMihzaXplKSwgMCk7CiYjNDM7CQlzZXRfaHVnZV9wdGVfYXQoJmFtcDtpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5LCBzaXplKTsKJiM0MzsJCXJldHVybiBzaXplOwomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CXNldF9wdGVfYXQoJmFtcDtpbml0X21tLCBhZGRyLCBwdGUsIHBmbl9wdGUocGZuLCBwcm90KSk7CiYjNDM7CXJldHVybiBQQUdFX1NJWkU7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJcGh5c19hZGRyX3QgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90LAogCQkJdW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0LCBwZ3RibF9tb2RfbWFzayAqbWFzaykKQEAgLTk4LDcgJiM0MzsxMjUsOCBAQCBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJcHRlX3QgKnB0ZTsKIAl1NjQgcGZuOwogCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBBR0VfU0laRTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplOwomIzQzOwl1bnNpZ25lZCBpbnQgc3RlcHM7CiAKIAlpZiAoV0FSTl9PTl9PTkNFKCFQQUdFX0FMSUdORUQoZW5kIC0gYWRkcikpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExOSwyMCAmIzQzOzE0Nyw5IEBAIHN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCUJVRygpOwogCQl9CiAKLSNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCi0JCXNpemUgPSBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplKGFkZHIsIGVuZCwgcGZuLCBtYXhfcGFnZV9zaGlmdCk7Ci0JCWlmIChzaXplICE9IFBBR0VfU0laRSkgewotCQkJcHRlX3QgZW50cnkgPSBwZm5fcHRlKHBmbiwgcHJvdCk7Ci0KLQkJCWVudHJ5ID0gYXJjaF9tYWtlX2h1Z2VfcHRlKGVudHJ5LCBpbG9nMihzaXplKSwgMCk7Ci0JCQlzZXRfaHVnZV9wdGVfYXQoJmFtcDtpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5LCBzaXplKTsKLQkJCXBmbiAmIzQzOz0gUEZOX0RPV04oc2l6ZSk7Ci0JCQljb250aW51ZTsKLQkJfQotI2VuZGlmCi0JCXNldF9wdGVfYXQoJmFtcDtpbml0X21tLCBhZGRyLCBwdGUsIHBmbl9wdGUocGZuLCBwcm90KSk7Ci0JCXBmbiYjNDM7JiM0Mzs7Ci0JfSB3aGlsZSAocHRlICYjNDM7PSBQRk5fRE9XTihzaXplKSwgYWRkciAmIzQzOz0gc2l6ZSwgYWRkciAhPSBlbmQpOwomIzQzOwkJc2l6ZSA9IHZtYXBfc2V0X3B0ZXMocHRlLCBhZGRyLCBlbmQsIHBmbiwgcHJvdCwgbWF4X3BhZ2Vfc2hpZnQpOwomIzQzOwkJc3RlcHMgPSBQRk5fRE9XTihzaXplKTsKJiM0MzsJfSB3aGlsZSAocHRlICYjNDM7PSBzdGVwcywgcGZuICYjNDM7PSBzdGVwcywgYWRkciAmIzQzOz0gc2l6ZSwgYWRkciAhPSBlbmQpOwogCiAJbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7CiAJKm1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEOwpAQCAtNTI0LDggJiM0Mzs1NDEsMTAgQEAgdm9pZCB2dW5tYXBfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKIAogc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLAotCQlwZ3RibF9tb2RfbWFzayAqbWFzaykKJiM0MzsJCXBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcGZuLCBzaXplOwomIzQzOwl1bnNpZ25lZCBpbnQgc3RlcHM7CiAJaW50IGVyciA9IDA7CiAJcHRlX3QgKnB0ZTsKIApAQCAtNTU2LDkgJiM0Mzs1NzUsMTAgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQlicmVhazsKIAkJfQogCi0JCXNldF9wdGVfYXQoJmFtcDtpbml0X21tLCBhZGRyLCBwdGUsIG1rX3B0ZShwYWdlLCBwcm90KSk7Ci0JCSgqbnIpJiM0MzsmIzQzOzsKLQl9IHdoaWxlIChwdGUmIzQzOyYjNDM7LCBhZGRyICYjNDM7PSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKJiM0MzsJCXBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOwomIzQzOwkJc2l6ZSA9IHZtYXBfc2V0X3B0ZXMocHRlLCBhZGRyLCBlbmQsIHBmbiwgcHJvdCwgc2hpZnQpOwomIzQzOwkJc3RlcHMgPSBQRk5fRE9XTihzaXplKTsKJiM0MzsJfSB3aGlsZSAocHRlICYjNDM7PSBzdGVwcywgKm5yICYjNDM7PSBzdGVwcywgYWRkciAmIzQzOz0gc2l6ZSwgYWRkciAhPSBlbmQpOwogCiAJbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7CiAJKm1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEOwpAQCAtNTY4LDcgJiM0Mzs1ODgsNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAogc3RhdGljIGludCB2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLAotCQlwZ3RibF9tb2RfbWFzayAqbWFzaykKJiM0MzsJCXBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpCiB7CiAJcG1kX3QgKnBtZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CkBAIC01NzgsNyAmIzQzOzU5OCwyNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJcmV0dXJuIC1FTk9NRU07CiAJZG8gewogCQluZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCWlmICh2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaykpCiYjNDM7CiYjNDM7CQlpZiAoc2hpZnQgJmd0Oz0gUE1EX1NISUZUKSB7CiYjNDM7CQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1sqbnJdOwomIzQzOwkJCXBoeXNfYWRkcl90IHBoeXNfYWRkcjsKJiM0MzsKJiM0MzsJCQlpZiAoV0FSTl9PTighcGFnZSkpCiYjNDM7CQkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJCWlmIChXQVJOX09OKCFwZm5fdmFsaWQocGFnZV90b19wZm4ocGFnZSkpKSkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQkJcGh5c19hZGRyID0gcGFnZV90b19waHlzKHBhZ2UpOwomIzQzOwomIzQzOwkJCWlmICh2bWFwX3RyeV9odWdlX3BtZChwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgcHJvdCwKJiM0MzsJCQkJCQlzaGlmdCkpIHsKJiM0MzsJCQkJKm1hc2sgfD0gUEdUQkxfUE1EX01PRElGSUVEOwomIzQzOwkJCQkqbnIgJiM0Mzs9IDEgJmx0OyZsdDsgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOwomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAodm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KSkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0gd2hpbGUgKHBtZCYjNDM7JiM0MzssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiAJcmV0dXJuIDA7CkBAIC01ODYsNyAmIzQzOzYyNiw3IEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsCi0JCXBndGJsX21vZF9tYXNrICptYXNrKQomIzQzOwkJcGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdCkKIHsKIAlwdWRfdCAqcHVkOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKQEAgLTU5Niw3ICYjNDM7NjM2LDcgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXJldHVybiAtRU5PTUVNOwogCWRvIHsKIAkJbmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQlpZiAodm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2spKQomIzQzOwkJaWYgKHZtYXBfcGFnZXNfcG1kX3JhbmdlKHB1ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrLCBzaGlmdCkpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9IHdoaWxlIChwdWQmIzQzOyYjNDM7LCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogCXJldHVybiAwOwpAQCAtNjA0LDcgJiM0Mzs2NDQsNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAogc3RhdGljIGludCB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLAotCQlwZ3RibF9tb2RfbWFzayAqbWFzaykKJiM0MzsJCXBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpCiB7CiAJcDRkX3QgKnA0ZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CkBAIC02MTQsMTQgJiM0Mzs2NTQsMTggQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXJldHVybiAtRU5PTUVNOwogCWRvIHsKIAkJbmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQlpZiAodm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2spKQomIzQzOwkJaWYgKHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrLCBzaGlmdCkpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9IHdoaWxlIChwNGQmIzQzOyYjNDM7LCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAotCQlwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQomIzQzOy8qCiYjNDM7ICogSXQgY2FuIHRha2UgYW4gYXJyYXkgb2YgcGFnZXMgd2hpY2ggYXJlIG5vdCBhbGwgY29udGlndW91cywgYnV0IGl0CiYjNDM7ICogbWF5IGhhdmUgY29udGlndW91cyBjaHVua3MsIGFzIGhpbnRlZCBieSBAc2hpZnQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsayh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAomIzQzOwkJcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IHNoaWZ0KQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBhZGRyOwogCXBnZF90ICpwZ2Q7CkBAIC02MzYsNyAmIzQzOzY4MCw3IEBAIHN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKIAkJaWYgKHBnZF9iYWQoKnBnZCkpCiAJCQltYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDsKLQkJZXJyID0gdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgJmFtcDtuciwgJmFtcDttYXNrKTsKJiM0MzsJCWVyciA9IHZtYXBfcGFnZXNfcDRkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsICZhbXA7bnIsICZhbXA7bWFzaywgc2hpZnQpOwogCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAJfSB3aGlsZSAocGdkJiM0MzsmIzQzOywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKQEAgLTY1OSwyNyAmIzQzOzcwMywxMiBAQCBzdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogaW50IF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCXBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBwYWdlX3NoaWZ0KQogewotCXVuc2lnbmVkIGludCBpLCBuciA9IChlbmQgLSBhZGRyKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwotCiAJV0FSTl9PTihwYWdlX3NoaWZ0ICZsdDsgUEFHRV9TSElGVCk7CiAKLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MpIHx8Ci0JCQlwYWdlX3NoaWZ0ID09IFBBR0VfU0hJRlQpCi0JCXJldHVybiB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2goYWRkciwgZW5kLCBwcm90LCBwYWdlcyk7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgbnI7IGkgJiM0Mzs9IDFVICZsdDsmbHQ7IChwYWdlX3NoaWZ0IC0gUEFHRV9TSElGVCkpIHsKLQkJaW50IGVycjsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DKSkKJiM0MzsJCXBhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUOwogCi0JCWVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICYjNDM7ICgxVUwgJmx0OyZsdDsgcGFnZV9zaGlmdCksCi0JCQkJCXBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIHByb3QsCi0JCQkJCXBhZ2Vfc2hpZnQpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQlhZGRyICYjNDM7PSAxVUwgJmx0OyZsdDsgcGFnZV9zaGlmdDsKLQl9Ci0KLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMsIHBhZ2Vfc2hpZnQpOwogfQogCiBpbnQgdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCkBAIC0zMjc5LDYgJiM0MzszMzA4LDE0IEBAIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF92bV9hcmVhX2NhbGxlcih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkJICBOVU1BX05PX05PREUsIEdGUF9LRVJORUwsIGNhbGxlcik7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqX19nZXRfdm1fYXJlYV9ub2RlX2FsaWduZWRfY2FsbGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IHZvaWQgKmNhbGxlcikKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgYWxpZ24sIFBBR0VfU0hJRlQsIGZsYWdzLAomIzQzOwkJCQkgIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELAomIzQzOwkJCQkgIE5VTUFfTk9fTk9ERSwgR0ZQX0tFUk5FTCwgY2FsbGVyKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGZpbmRfdm1fYXJlYSAtIGZpbmQgYSBjb250aW51b3VzIGtlcm5lbCB2aXJ0dWFsIGFyZWEKICAqIEBhZGRyOgkgIGJhc2UgYWRkcmVzcwpAQCAtMzUxOSw2ICYjNDM7MzU1NiwxMTMgQEAgdm9pZCB2dW5tYXAoY29uc3Qgdm9pZCAqYWRkcikKIH0KIEVYUE9SVF9TWU1CT0wodnVubWFwKTsKIAomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHZtX3NoaWZ0KHBncHJvdF90IHByb3QsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt7CiYjNDM7CWlmIChhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSAmYW1wOyZhbXA7IHNpemUgJmd0Oz0gUE1EX1NJWkUpCiYjNDM7CQlyZXR1cm4gUE1EX1NISUZUOwomIzQzOwomIzQzOwlyZXR1cm4gYXJjaF92bWFwX3B0ZV9zdXBwb3J0ZWRfc2hpZnQoc2l6ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGdldF92bWFwX2JhdGNoX29yZGVyKHN0cnVjdCBwYWdlICoqcGFnZXMsCiYjNDM7CQlwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3N0ZXBzLCB1bnNpZ25lZCBpbnQgaWR4KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IG5yX2NvbnRpZzsKJiM0MzsJaW50IG9yZGVyOwomIzQzOwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW5yX2NvbnRpZyA9IG51bV9wYWdlc19jb250aWd1b3VzKCZhbXA7cGFnZXNbaWR4XSwgbWF4X3N0ZXBzKTsKJiM0MzsJaWYgKG5yX2NvbnRpZyAmbHQ7IDIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJb3JkZXIgPSBpbG9nMihucl9jb250aWcpOwomIzQzOwomIzQzOwkvKiBMaW1pdCBvcmRlciBieSBwZm4gYWxpZ25tZW50ICovCiYjNDM7CW9yZGVyID0gbWluX3QoaW50LCBvcmRlciwgX19mZnMocGFnZV90b19wZm4ocGFnZXNbaWR4XSkpKTsKJiM0MzsKJiM0MzsJaWYgKHZtX3NoaWZ0KHByb3QsIFBBR0VfU0laRSAmbHQ7Jmx0OyBvcmRlcikgPT0gUEFHRV9TSElGVCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gb3JkZXI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiYjNDM7CQlwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGNvdW50ID0gKGVuZCAtIGFkZHIpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CXVuc2lnbmVkIGludCBwcmV2X3NoaWZ0ID0gMCwgaWR4ID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBtYXBfYWRkciA9IGFkZHIsIGJhdGNoX2VuZCA9IGFkZHI7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IGttc2FuX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaChhZGRyLCBlbmQsIHByb3QsIHBhZ2VzLAomIzQzOwkJCQkJCVBBR0VfU0hJRlQsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgY291bnQ7ICkgewomIzQzOwkJdW5zaWduZWQgaW50IHNoaWZ0ID0gUEFHRV9TSElGVCAmIzQzOwomIzQzOwkJCWdldF92bWFwX2JhdGNoX29yZGVyKHBhZ2VzLCBwcm90LCBjb3VudCAtIGksIGkpOwomIzQzOwomIzQzOwkJaWYgKCFpKQomIzQzOwkJCXByZXZfc2hpZnQgPSBzaGlmdDsKJiM0MzsKJiM0MzsJCWlmIChzaGlmdCAhPSBwcmV2X3NoaWZ0KSB7CiYjNDM7CQkJZXJyID0gdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsobWFwX2FkZHIsIGJhdGNoX2VuZCwKJiM0MzsJCQkJCXByb3QsIHBhZ2VzICYjNDM7IGlkeCwgcHJldl9zaGlmdCk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJZ290byBvdXQ7CiYjNDM7CQkJcHJldl9zaGlmdCA9IHNoaWZ0OwomIzQzOwkJCW1hcF9hZGRyID0gYmF0Y2hfZW5kOwomIzQzOwkJCWlkeCA9IGk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogT25jZSBzbWFsbCBwYWdlcyBhcmUgZW5jb3VudGVyZWQsIHRoZSByZW1haW5pbmcgcGFnZXMKJiM0MzsJCSAqIGFyZSBsaWtlbHkgc21hbGwgYXMgd2VsbC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHNoaWZ0ID09IFBBR0VfU0hJRlQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQliYXRjaF9lbmQgJiM0Mzs9IDFVTCAmbHQ7Jmx0OyBzaGlmdDsKJiM0MzsJCWkgJiM0Mzs9IDFVICZsdDsmbHQ7IChzaGlmdCAtIFBBR0VfU0hJRlQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFJlbWFpbmluZyAqLwomIzQzOwlpZiAobWFwX2FkZHIgJmx0OyBlbmQpCiYjNDM7CQllcnIgPSB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhtYXBfYWRkciwgZW5kLAomIzQzOwkJCQlwcm90LCBwYWdlcyAmIzQzOyBpZHgsIHByZXZfc2hpZnQpOwomIzQzOwomIzQzO291dDoKJiM0MzsJZmx1c2hfY2FjaGVfdm1hcChhZGRyLCBlbmQpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHBncHJvdF90IHByb3QsIGNvbnN0IHZvaWQgKmNhbGxlcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2bV9zdHJ1Y3QgKnZtX2FyZWE7CiYjNDM7CXVuc2lnbmVkIGludCBzaGlmdDsKJiM0MzsKJiM0MzsJaWYgKGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKHByb3QpICZhbXA7JmFtcDsgc2l6ZSAmZ3Q7PSBQTURfU0laRSkgewomIzQzOwkJdm1fYXJlYSA9IF9fZ2V0X3ZtX2FyZWFfbm9kZV9hbGlnbmVkX2NhbGxlcihzaXplLCBQTURfU0laRSwKJiM0MzsJCQkJZmxhZ3MsIGNhbGxlcik7CiYjNDM7CQlpZiAodm1fYXJlYSkKJiM0MzsJCQlyZXR1cm4gdm1fYXJlYTsKJiM0MzsJfQomIzQzOwomIzQzOwlzaGlmdCA9IGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpOwomIzQzOwlpZiAoc2hpZnQgJmd0OyBQQUdFX1NISUZUKSB7CiYjNDM7CQl2bV9hcmVhID0gX19nZXRfdm1fYXJlYV9ub2RlX2FsaWduZWRfY2FsbGVyKHNpemUsIDFVTCAmbHQ7Jmx0OyBzaGlmdCwKJiM0MzsJCQkJZmxhZ3MsIGNhbGxlcik7CiYjNDM7CQlpZiAodm1fYXJlYSkKJiM0MzsJCQlyZXR1cm4gdm1fYXJlYTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlX2FsaWduZWRfY2FsbGVyKHNpemUsIFBBR0VfU0laRSwgZmxhZ3MsIGNhbGxlcik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB2bWFwIC0gbWFwIGFuIGFycmF5IG9mIHBhZ2VzIGludG8gdmlydHVhbGx5IGNvbnRpZ3VvdXMgc3BhY2UKICAqIEBwYWdlczogYXJyYXkgb2YgcGFnZSBwb2ludGVycwpAQCAtMzU1NywxMyAmIzQzOzM3MDEsMTQgQEAgdm9pZCAqdm1hcChzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgY291bnQsCiAJCXJldHVybiBOVUxMOwogCiAJc2l6ZSA9ICh1bnNpZ25lZCBsb25nKWNvdW50ICZsdDsmbHQ7IFBBR0VfU0hJRlQ7Ci0JYXJlYSA9IGdldF92bV9hcmVhX2NhbGxlcihzaXplLCBmbGFncywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKJiM0MzsJYXJlYSA9IHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYShzaXplLCBmbGFncywgcHJvdCwKJiM0MzsJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAlpZiAoIWFyZWEpCiAJCXJldHVybiBOVUxMOwogCiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtJmd0O2FkZHI7Ci0JaWYgKHZtYXBfcGFnZXNfcmFuZ2UoYWRkciwgYWRkciAmIzQzOyBzaXplLCBwZ3Byb3RfbngocHJvdCksCi0JCQkJcGFnZXMsIFBBR0VfU0hJRlQpICZsdDsgMCkgewomIzQzOwlpZiAodm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkKGFkZHIsIGFkZHIgJiM0Mzsgc2l6ZSwgcGdwcm90X254KHByb3QpLAomIzQzOwkJCQlwYWdlcykgJmx0OyAwKSB7CiAJCXZ1bm1hcChhcmVhLSZndDthZGRyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwOTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTE5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHZtYXBgIFBhdGNoIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlIGhhdmUgYSBwYXRjaCB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IGB2bWFwYCBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zIGluIGBtbS92bWFsbG9jLmNgIGFuZCBhIGZldyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZXMgaGFuZGxlIG1lbW9yeSBtYXBwaW5nLiBJdCBzZWVtcyB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBzb21lIGJhdGNoZWQgY29udGlndW91cyBtYXBwaW5ncyBhdCB0aGUgUFRFIGxldmVsLCBzcGVjaWZpY2FsbHkgZm9yIGFyY2hpdGVjdHVyZXMgbGlrZSBBUk02NCB3aXRoIGBDT05UX1BURV9TSVpFYC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGB2bWFwYCBpcyBhIGNvcmUsIGNyaXRpY2FsIGtlcm5lbCBBUEksIGhlYXZpbHkgcmVsaWVkIHVwb24gYnkgbnVtZXJvdXMgZHJpdmVycyBhbmQgc3Vic3lzdGVtcyB0byBtYXAgYXJyYXlzIG9mIHBhZ2VzIGNvbnRpZ3VvdXNseS4gU28sIHRoZSBwYXRjaCBpcyBhaW1pbmcgZm9yIG9wdGltaXphdGlvbiBoZXJlLCB1c2luZyBodWdlIHBhZ2VzIG9yIGNvbnRpZ3VvdXMgUFRFcyB3aGVuIGZlYXNpYmxlIHdpdGhpbiBgdm1hcGAuCgpNeSBpbml0aWFsIHRob3VnaHQ/IFRoaXMgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCByaXBlIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc28gaXQmIzM5O3MgYSBoaWdoLXZhbHVlIHRhcmdldC4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIHRoZSBmdXp6aW5nIGVmZm9ydHMuIENsZWFybHksIGB2bWFwYCBpdHNlbGYgaXMgYSBwcmltZSBjYW5kaWRhdGUsIGdpdmVuIGl0cyB3aWRlc3ByZWFkIHVzZSwgYnV0IGl0JiMzOTtzICpldmVyeXdoZXJlKi4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgdm1hcGAsIGl0IGNhbGxzIGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgLCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCwgYW5kIGB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa2AgKGZvcm1lcmx5IGB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2hgKSwgYW5kIG9mIGNvdXJzZSwgYHZtYXBfc2V0X3B0ZXNgLCB3aGljaCBpcyBwcm9iYWJseSB0aGUgaGVhcnQgb2YgdGhpcyBiYXRjaGVkIFBURSBsb2dpYy4gVGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBtbS92bWFsbG9jLmNgLCBzbyB3aGlsZSB0aGV5JiMzOTtyZSBub3QgZGlyZWN0bHkgZXhwb3J0ZWQsIHRoZXkmIzM5O3JlIGNyaXRpY2FsIHRvIHRoZSBvdmVyYWxsIGB2bWFwYCBmbG93LiBTbywgd2UmIzM5O2xsIGhpdCBgdm1hcGAsIHRoZSBgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkYCwgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrYCwgYW5kIGB2bWFwX3NldF9wdGVzYCBmdW5jdGlvbnMuIEJlY2F1c2Ugb2YgdGhlIG1haW4gY2hhbmdlcywgd2Ugc2hvdWxkIGFsc28gaW5jbHVkZSB0aGUgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaGAsIGBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaGAuCgpGaW5hbGx5LCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gV2UmIzM5O3JlIHNlZWluZyByZWZlcmVuY2VzIHRvIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AsIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAsIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gcXVpY2tseSB0cmFjayBkb3duIHdoZXJlIHRoZXNlIGFyZSBkZWZpbmVkLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBpcyBrZXkgdG8gc2V0dGluZyB1cCBlZmZlY3RpdmUgZnV6emluZyBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9BUkNIX0hVR0VfVk1BTExPQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9MTA5Mj1jb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BUFxuLS1cbmFyY2gvS2NvbmZpZy0xMDk5LSNcbmFyY2gvS2NvbmZpZzoxMTAwOmNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXG5hcmNoL0tjb25maWctMTEwMS1cdGRlcGVuZHMgb24gSEFWRV9BUkNIX0hVR0VfVk1BUFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0xNTMtXHRzZWxlY3QgSEFWRV9BUkNIX0NPTVBJTEVSX0hcbmFyY2gvYXJtNjQvS2NvbmZpZzoxNTQ6XHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xuYXJjaC9hcm02NC9LY29uZmlnLTE1NS1cdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFQXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0yMTgtXHRzZWxlY3QgSEFWRV9BUkNIX0FVRElUU1lTQ0FMTFxuYXJjaC9wb3dlcnBjL0tjb25maWc6MjE5Olx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcdFx0aWYgSEFWRV9BUkNIX0hVR0VfVk1BUFxuYXJjaC9wb3dlcnBjL0tjb25maWctMjIwLVx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcdFx0aWYgUFBDX1JBRElYX01NVSB8fCBQUENfOHh4XG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0xMzEtXHRzZWxlY3QgSEFWRV9BUkNIX0JJVFJFVkVSU0UgaWYgUklTQ1ZfSVNBX1pCS0IgXHUwMDI2XHUwMDI2IEJJVFJFVkVSU0VcbmFyY2gvcmlzY3YvS2NvbmZpZzoxMzI6XHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQyBpZiBIQVZFX0FSQ0hfSFVHRV9WTUFQXG5hcmNoL3Jpc2N2L0tjb25maWctMTMzLVx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVAgaWYgTU1VIFx1MDAyNlx1MDAyNiA2NEJJVFxuLS1cbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMTkyLVx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcdFx0aWYgWDg2XzY0IHx8IFg4Nl9QQUVcbmFyY2gveDg2L0tjb25maWc6MTkzOlx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcdFx0aWYgWDg2XzY0XG5hcmNoL3g4Ni9LY29uZmlnLTE5NC1cdHNlbGVjdCBIQVZFX0FSQ0hfSlVNUF9MQUJFTFxuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTE5PXN0cnVjdCBpb3ZfaXRlcjtcdFx0LyogaW4gdWlvLmggKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0zMS0jZGVmaW5lIFZNX01BUF9QVVRfUEFHRVNcdDB4MDAwMDAyMDBcdC8qIHB1dCBwYWdlcyBhbmQgZnJlZSBhcnJheSBpbiB2ZnJlZSAqL1xuaW5jbHVkZS9saW51eC92bWFsbG9jLmg6MzI6I2RlZmluZSBWTV9BTExPV19IVUdFX1ZNQVBcdDB4MDAwMDA0MDAgICAgICAvKiBBbGxvdyBmb3IgaHVnZSBwYWdlcyBvbiBhcmNocyB3aXRoIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0MgKi9cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTMzLVxuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTUyPXN0cnVjdCB2bV9zdHJ1Y3Qge1xuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTYxLVx0c3RydWN0IHBhZ2VcdFx0KipwYWdlcztcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjYyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtNjMtXHR1bnNpZ25lZCBpbnRcdFx0cGFnZV9vcmRlcjtcbi0tXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD0yNTg9c3RhdGljIGlubGluZSBib29sIGlzX3ZtX2FyZWFfaHVnZXBhZ2VzKGNvbnN0IHZvaWQgKmFkZHIpXG4tLVxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMjY2LVx0ICovXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDoyNjc6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0yNjgtXHRzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhID0gZmluZF92bV9hcmVhKGFkZHIpO1xuLS1cbm1tL3ZtYWxsb2MuYz02Mz1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGlvcmVtYXBfbWF4X3BhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUO1xuLS1cbm1tL3ZtYWxsb2MuYy02NS1cbm1tL3ZtYWxsb2MuYzo2NjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0Ncbm1tL3ZtYWxsb2MuYy02Ny1zdGF0aWMgYm9vbCBfX3JvX2FmdGVyX2luaXQgdm1hcF9hbGxvd19odWdlID0gdHJ1ZTtcbi0tXG5tbS92bWFsbG9jLmM9NzQ9ZWFybHlfcGFyYW0oXCYjMzQ7bm9odWdldm1hbGxvY1wmIzM0Oywgc2V0X25vaHVnZXZtYWxsb2MpO1xubW0vdm1hbGxvYy5jOjc1OiNlbHNlIC8qIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DICovXG5tbS92bWFsbG9jLmMtNzYtc3RhdGljIGNvbnN0IGJvb2wgdm1hcF9hbGxvd19odWdlID0gZmFsc2U7XG5tbS92bWFsbG9jLmM6Nzc6I2VuZGlmXHQvKiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQyAqL1xubW0vdm1hbGxvYy5jLTc4LVxuLS1cbm1tL3ZtYWxsb2MuYz03MDM9aW50IF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTcwNy1cbm1tL3ZtYWxsb2MuYzo3MDg6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MpKVxubW0vdm1hbGxvYy5jLTcwOS1cdFx0cGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7XG4tLVxubW0vdm1hbGxvYy5jPTMxMzQ9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdm1fYXJlYV9wYWdlX29yZGVyKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtKVxubW0vdm1hbGxvYy5jLTMxMzUte1xubW0vdm1hbGxvYy5jOjMxMzY6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXG5tbS92bWFsbG9jLmMtMzEzNy1cdHJldHVybiB2bS1cdTAwM2VwYWdlX29yZGVyO1xuLS1cbm1tL3ZtYWxsb2MuYz0zMTQ4PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdm1fYXJlYV9wYWdlX29yZGVyKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5tbS92bWFsbG9jLmMtMzE0OS17XG5tbS92bWFsbG9jLmM6MzE1MDojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0Ncbm1tL3ZtYWxsb2MuYy0zMTUxLVx0dm0tXHUwMDNlcGFnZV9vcmRlciA9IG9yZGVyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NjgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIE5ldyBDb2RlJiMzOTtzIEh1Z1RMQiBEZXBlbmRlbmN5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgdm1hcF9zZXRfcHRlc2AsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgdGhhdCBgI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VgLiBSaWdodCBhd2F5LCB0aGlzIHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSHVnZVRMQiBwYWdlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgdmlydHVhbCBtZW1vcnkgbWFwcGluZyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBjb25uZWN0ZWQgdG8gSHVnZVRMQnMuIFRoaXMgYWxzbyB0b3VjaGVzIG9uIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAgYW5kIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFzIGl0IGluZGljYXRlcyB0aGUgYXJjaGl0ZWN0dXJlIG1pZ2h0IGhhdmUgc29tZSBzcGVjaWZpYyBzdXBwb3J0IG9yIHJlcXVpcmVtZW50cyBmb3IgaGFuZGxpbmcgaHVnZSB2aXJ0dWFsIG1lbW9yeSBtYXBwaW5ncy4gU2VlbXMgbGlrZSB0aGlzIGlzIGdvaW5nIHRvIGJlIHJlbGV2YW50IHRvIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmcgd2l0aCBodWdlIHBhZ2VzLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBgQ09ORklHX0hVR0VUTEJfUEFHRWAgZGVmaW5pdGlvbiB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIGlzIGFsbCBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSFVHRVRMQl9QQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMDE3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dD05NT1LZXJuZWwgcGFyYW1ldGVyc1xuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwODUtXHRodWdldGxiX2ZyZWVfdm1lbW1hcD1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjIwODY6XHRcdFx0W0tOTF0gUmVxdWlyZXMgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDg3LVx0XHRcdGVuYWJsZWQuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA5NS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjIwOTY6XHRcdFx0QnVpbHQgd2l0aCBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTj15LFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA5Ny1cdFx0XHR0aGUgZGVmYXVsdCBpcyBvbi5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdD0yMj1GaXJzdCB0aGUgTGludXgga2VybmVsIG5lZWRzIHRvIGJlIGJ1aWx0IHdpdGggdGhlIENPTkZJR19IVUdFVExCRlNcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0OjIzOihwcmVzZW50IHVuZGVyIFwmIzM0O0ZpbGUgc3lzdGVtc1wmIzM0OykgYW5kIENPTkZJR19IVUdFVExCX1BBR0UgKHNlbGVjdGVkXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdC0yNC1hdXRvbWF0aWNhbGx5IHdoZW4gQ09ORklHX0hVR0VUTEJGUyBpcyBzZWxlY3RlZCkgY29uZmlndXJhdGlvblxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0PTE3ND1odWdldGxiX2ZyZWVfdm1lbW1hcFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q6MTc1Olx0V2hlbiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVAgaXMgc2V0LCB0aGlzIGVuYWJsZXMgSHVnZVRMQlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3QtMTc2LVx0Vm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykuXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tdGUuaD0xNTc9c3RhdGljIGlubGluZSBpbnQgbXRlX3B0cmFjZV9jb3B5X3RhZ3Moc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCxcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL210ZS5oLTE2NS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbXRlLmg6MTY2OiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19BUk02NF9NVEUpXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL210ZS5oLTE2Ny1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2h1Z2V0bGJfbXRlX3RhZ2dlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQVJNNjRfQ09OVFBURSlcdCYjNDM7PSBjb250cHRlLm9cbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGU6NzpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKVx0JiM0Mzs9IGh1Z2V0bGJwYWdlLm9cbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGUtOC1vYmotJChDT05GSUdfUFREVU1QKVx0XHQmIzQzOz0gcHRkdW1wLm9cbi0tXG5hcmNoL2hleGFnb24vaW5jbHVkZS9hc20vcGFnZS5oLTM5LSAqL1xuYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL3BhZ2UuaDo0MDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL3BhZ2UuaC00MS0jZGVmaW5lIEhQQUdFX1NISUZUIDIyXG4tLVxuYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL3BndGFibGUuaD0xMjk9ZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07ICAvKiBsb2NhdGVkIGluIGhlYWQuUyAqL1xuLS1cbmFyY2gvaGV4YWdvbi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTMxLS8qICBIVUdFVExCIG5vdCB3b3JraW5nIGN1cnJlbnRseSAgKi9cbmFyY2gvaGV4YWdvbi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTMyOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL2hleGFnb24vaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEzMy0jZGVmaW5lIHB0ZV9ta2h1Z2UocHRlKSBfX3B0ZSgocHRlX3ZhbChwdGUpIFx1MDAyNiB+MHgzKSB8IEhWTV9IVUdFUEFHRV9TSVpFKVxuLS1cbmFyY2gvbG9vbmdhcmNoL21tL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19ISUdITUVNKVx0XHQmIzQzOz0gaGlnaG1lbS5vXG5hcmNoL2xvb25nYXJjaC9tbS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKVx0JiM0Mzs9IGh1Z2V0bGJwYWdlLm9cbmFyY2gvbG9vbmdhcmNoL21tL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19LQVNBTilcdFx0JiM0Mzs9IGthc2FuX2luaXQub1xuLS1cbmFyY2gvbG9vbmdhcmNoL21tL3RsYi5jPTEzOD1zdGF0aWMgdm9pZCBfX3VwZGF0ZV9odWdldGxiKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKVxuYXJjaC9sb29uZ2FyY2gvbW0vdGxiLmMtMTM5LXtcbmFyY2gvbG9vbmdhcmNoL21tL3RsYi5jOjE0MDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9sb29uZ2FyY2gvbW0vdGxiLmMtMTQxLVx0aW50IGlkeDtcbi0tXG5hcmNoL21pcHMvbW0vTWFrZWZpbGU9MzE9b2JqLSQoQ09ORklHX0hJR0hNRU0pXHRcdCYjNDM7PSBoaWdobWVtLm9cbmFyY2gvbWlwcy9tbS9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKVx0JiM0Mzs9IGh1Z2V0bGJwYWdlLm9cbmFyY2gvbWlwcy9tbS9NYWtlZmlsZS0zMy1vYmotJChDT05GSUdfRE1BX05PTkNPSEVSRU5UKVx0JiM0Mzs9IGRtYS1ub25jb2hlcmVudC5vXG4tLVxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFnZS5oPTkzPWV4dGVybiBpbnQgbnBtZW1fcmFuZ2VzO1xuLS1cbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhZ2UuaC0xNDctXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYWdlLmg6MTQ4OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYWdlLmgtMTQ5LSNkZWZpbmUgSFBBR0VfU0hJRlRcdFx0UE1EX1NISUZUIC8qIGZpeGVkIGZvciB0cmFuc3BhcmVudCBodWdlIHBhZ2VzICovXG4tLVxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFnZS5oLTE2My0jZW5kaWZcbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhZ2UuaDoxNjQ6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhZ2UuaC0xNjUtXG4tLVxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTY0PWV4dGVybiB2b2lkIF9fdXBkYXRlX2NhY2hlKHB0ZV90IHB0ZSk7XG4tLVxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3MC0jZGVmaW5lIF9QQUdFX1VTRVJfQklUICAgICAyMCAgIC8qICgweDgwMCkgU29mdHdhcmU6IFVzZXIgYWNjZXNzaWJsZSBwYWdlICovXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTcxOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTcyLSNkZWZpbmUgX1BBR0VfU1BFQ0lBTF9CSVQgIF9QQUdFX0RNQl9CSVQgIC8qIERNQiBmZWF0dXJlIGlzIGN1cnJlbnRseSB1bnVzZWQgKi9cbi0tXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MzE1PXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpXHR7IHB0ZV92YWwocHRlKSB8PSBfUEFHRV9TUEVDSUFMOyByZXR1cm4gcHRlOyB9XG4tLVxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMxOS0gKi9cbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaDozMjA6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaC0zMjEtI2RlZmluZSBwdGVfaHVnZShwdGUpICAgICAgICAgICAocHRlX3ZhbChwdGUpIFx1MDAyNiBfUEFHRV9IVUdFKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jPTQxPWludCBtYWluKHZvaWQpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMtMjc4LVx0ICogYW5kIGtlcm5lbCBkYXRhIG9uIHBoeXNpY2FsIGh1Z2UgcGFnZXMgKi9cbmFyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jOjI3OTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMtMjgwLVx0REVGSU5FKEhVR0VQQUdFX1NJWkUsIDFVTCBcdTAwM2NcdTAwM2MgUkVBTF9IUEFHRV9TSElGVCk7XG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMtNDgxLVx0Lm1hY3JvXHRcdGNvbnZlcnRfZm9yX3RsYl9pbnNlcnQyMCBwdGUsdG1wXG5hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUzo0ODI6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmFyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TLTQ4My1cdGNvcHlcdFx0XFxwdGUsXFx0bXBcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvc2V0dXAuYz0xMDE9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9zZXR1cC5jLTExNC1cdFx0KGludCkoUEFHRV9TSVpFIC8gMTAyNCkpO1xuYXJjaC9wYXJpc2Mva2VybmVsL3NldHVwLmM6MTE1OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3BhcmlzYy9rZXJuZWwvc2V0dXAuYy0xMTYtXHRwcmludGsoS0VSTl9DT05UIFwmIzM0O2VuYWJsZWQgd2l0aCAlZCBNQiBwaHlzaWNhbCBhbmQgJWQgTUIgdmlydHVhbCBzaXplXCYjMzQ7LFxuLS1cbmFyY2gvcGFyaXNjL21tL01ha2VmaWxlPTY9b2JqLXlcdCA6PSBpbml0Lm8gZmF1bHQubyBpb3JlbWFwLm8gZml4bWFwLm9cbmFyY2gvcGFyaXNjL21tL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkgJiM0Mzs9IGh1Z2V0bGJwYWdlLm9cbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmgtNzQtXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmg6NzU6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSB8fCBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmgtNzYtI2RlZmluZSBIX1BNRF9GUkFHX1NJWkVfU0hJRlQgIChIX1BNRF9JTkRFWF9TSVpFICYjNDM7IDMgJiM0MzsgMSlcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmg9MTc1PXN0YXRpYyBpbmxpbmUgaW50IGhhc2hfX3JlbWFwXzRrX3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaC0xODYtI2RlZmluZSBIX1BURV9UQUJMRV9TSVpFXHRQVEVfRlJBR19TSVpFXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmg6MTg3OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHwgZGVmaW5lZCAoQ09ORklHX0hVR0VUTEJfUEFHRSlcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaC0xODgtI2RlZmluZSBIX1BNRF9UQUJMRV9TSVpFXHQoKHNpemVvZihwbWRfdCkgXHUwMDNjXHUwMDNjIFBNRF9JTkRFWF9TSVpFKSAmIzQzOyBcXFxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaC0xOTItI2VuZGlmXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmg6MTkzOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmgtMTk0LSNkZWZpbmUgSF9QVURfVEFCTEVfU0laRVx0KChzaXplb2YocHVkX3QpIFx1MDAzY1x1MDAzYyBQVURfSU5ERVhfU0laRSkgJiM0MztcdFxcXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLmgtNDYtICovXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2guaDo0NzojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSBcdTAwMjZcdTAwMjYgIGRlZmluZWQoQ09ORklHX1BQQ182NEtfUEFHRVMpXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2guaC00OC0jZGVmaW5lIEhfUFVEX0NBQ0hFX0lOREVYXHQoSF9QVURfSU5ERVhfU0laRSAmIzQzOyAxKVxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvbW11LWhhc2guaD03MTI9c3RydWN0IGhhc2hfbW1fY29udGV4dCB7XG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9tbXUtaGFzaC5oLTcyMi1cdHN0cnVjdCBzbGljZV9tYXNrIG1hc2tfNGs7XG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L21tdS1oYXNoLmg6NzIzOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L21tdS1oYXNoLmgtNzI0LVx0c3RydWN0IHNsaWNlX21hc2sgbWFza18xNm07XG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9tbXUuaD0xNjk9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xpY2VfbWFzayAqc2xpY2VfbWFza19mb3Jfc2l6ZShtbV9jb250ZXh0X3QgKmN0eCwgaW50IHBzaXplKVxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvbW11LmgtMTc0LSNlbmRpZlxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9tbXUuaDoxNzU6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvbW11LmgtMTc2LVx0aWYgKHBzaXplID09IE1NVV9QQUdFXzE2TSlcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BnYWxsb2MuaD00OD1zdGF0aWMgaW5saW5lIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ2FsbG9jLmgtNzMtXHQgKi9cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGdhbGxvYy5oOjc0OiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19QUENfNjRLX1BBR0VTKSBcdTAwMjZcdTAwMjYgXFxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGdhbGxvYy5oLTc1LVx0KEhfUEdEX0lOREVYX1NJWkUgPT0gSF9QVURfQ0FDSEVfSU5ERVgpXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLTY0ay5oLTUtI2lmbmRlZiBfX0FTU0VNQkxFUl9fXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUtNjRrLmg6NjojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLTY0ay5oLTctXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUtNjRrLmg6ODojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLTY0ay5oLTktXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9zbGljZS5oLTctI2lmZGVmIENPTkZJR19QUENfNjRTX0hBU0hfTU1VXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3NsaWNlLmg6ODojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9zbGljZS5oLTktI2RlZmluZSBIQVZFX0FSQ0hfSFVHRVRMQl9VTk1BUFBFRF9BUkVBXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC00LVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDo1OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTYtI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg9Njc9aW50IGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtNzItXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjczOiNlbHNlIC8qICEgQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC03NC1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfaHVnZXRsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg9Nzk9c3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBodWdldGxicGFnZV9pbml0X2RlZmF1bHRzaXplKHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC04MS19XG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjgyOiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTgzLVxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgtMjYtI2lmbmRlZiBfX0FTU0VNQkxFUl9fXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oOjI3OiNpZm5kZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaC0yOC0jZGVmaW5lIEhQQUdFX1NISUZUIFBBR0VfU0hJRlRcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTE0ND1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE0OC1cdGlmICgobW11X2hhc19mZWF0dXJlKE1NVV9GVFJfSFBURV9UQUJMRSkgXHUwMDI2XHUwMDI2ICFyYWRpeF9lbmFibGVkKCkpIHx8XG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjE0OTpcdCAgICAoSVNfRU5BQkxFRChDT05GSUdfUFBDX0U1MDApIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0UpKSlcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTUwLVx0XHRfX3VwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGVwKTtcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLXdhbGsuaD0xMD1zdGF0aWMgaW5saW5lIHB0ZV90ICpmaW5kX2xpbnV4X3B0ZShwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgZWEsXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS13YWxrLmgtMTgtI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1ZNKSBcdTAwMjZcdTAwMjZcdFx0XHRcdFx0XHRcXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS13YWxrLmg6MTk6XHQhKGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS13YWxrLmgtMjAtXHQvKlxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM9NTQ5PWludCBfX2luaXQgZmFkdW1wX3Jlc2VydmVfbWVtKHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy01OTQtXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjU5NTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy01OTYtXHRcdC8qXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUz0xNjY9c2V0X2l2b3I6XG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUy0zMDctICovXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TOjMwODojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUy0zMDktI2RlZmluZSBGSU5EX1BURVx0XFxcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TPTY2Nj1maW5pc2hfdGxiX2xvYWQ6XG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TOjY2NzojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUy02NjgtXHRjbXB3aVx0NiwgcjEwLCAwXHRcdFx0LyogY2hlY2sgZm9yIGh1Z2UgcGFnZSAqL1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlMtNzE4LVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUzo3MTk6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlMtNzIwLVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlM9NzM5PUVORF9NTVVfRlRSX1NFQ1RJT05fSUZTRVQoTU1VX0ZUUl9CSUdfUEhZUylcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TLTc0Mi1cdHJsd2ltaVx0cjEyLCByMTEsIDMyLTE5LCAyNywgMzFcdC8qIGV4dHJhY3QgV0lNR0UgZnJvbSBwdGUgKi9cbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlM6NzQzOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TLTc0NC1cdGJlcVx0NiwgM2ZcdFx0XHQvKiBkb24mIzM5O3QgbWFzayBpZiBwYWdlIGlzbiYjMzk7dCBodWdlICovXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUz03NTM9dGxiX3dyaXRlX2VudHJ5OlxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlMtNzU3LVx0bWZzcHJcdHIxMCwgU1BSTl9TUFJHX1RIUkVBRFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUzo3NTg6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlMtNzU5LVx0YmVxXHQ2LCA4ZiAvKiBza2lwIHJlc3RvcmUgZm9yIDRrIHBhZ2UgZmF1bHRzICovXG4tLVxuYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19OVU1BKSAmIzQzOz0gbnVtYS5vXG5hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSlcdCYjNDM7PSBodWdldGxicGFnZS5vXG5hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGUtMTYtb2JqLSQoQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSkgJiM0Mzs9IGRtYS1ub25jb2hlcmVudC5vXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L01ha2VmaWxlPTEyPWVuZGlmXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvTWFrZWZpbGUtMTMtXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSlcdCYjNDM7PSBodWdldGxicGFnZS5vXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvTWFrZWZpbGUtMTUtXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX1BQQ19SQURJWF9NTVUpXHQmIzQzOz0gcmFkaXhfcGd0YWJsZS5vIHJhZGl4X3RsYi5vXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvTWFrZWZpbGU6MTc6aWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19QUENfUkFESVhfTU1VKVx0JiM0Mzs9IHJhZGl4X2h1Z2V0bGJwYWdlLm9cbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF90bGIuYz00MT12b2lkIGhwdGVfbmVlZF9mbHVzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3RsYi5jLTYyLVx0aWYgKGh1Z2UpIHtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3RsYi5jOjYzOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF90bGIuYy02NC1cdFx0cHNpemUgPSBnZXRfc2xpY2VfcHNpemUobW0sIGFkZHIpO1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmM9ODQ2PXN0YXRpYyBpbnQgX19pbml0IGh0YWJfZHRfc2Nhbl9wYWdlX3NpemVzKHVuc2lnbmVkIGxvbmcgbm9kZSxcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTkyMy1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmM6OTI0OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTkyNS0vKlxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmM9OTI5PXN0YXRpYyBpbnQgX19pbml0IGh0YWJfZHRfc2Nhbl9odWdlcGFnZV9ibG9ja3ModW5zaWduZWQgbG9uZyBub2RlLFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmMtOTY2LX1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmM6OTY3OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTk2OC1cbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jPTk5Nj1zdGF0aWMgdm9pZCBfX2luaXQgaHRhYl9zY2FuX3BhZ2Vfc2l6ZXModm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTEwMTktXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jOjEwMjA6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmMtMTAyMS1cdGlmICghaHVnZXRsYl9kaXNhYmxlZCBcdTAwMjZcdTAwMjYgIWVhcmx5X3JhZGl4X2VuYWJsZWQoKSApIHtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTEwMjQtXHR9XG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jOjEwMjU6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmMtMTAyNi19XG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdXRpbHMuYz0xNzE4PWludCBoYXNoX3BhZ2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgZWEsXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdXRpbHMuYy0xODM4LVx0XHRcdFx0XHQgICAgIHRyYXAsIGZsYWdzLCBzc2l6ZSwgcHNpemUpO1xuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdXRpbHMuYzoxODM5OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTE4NDAtXHRcdGVsc2Vcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfdGxiLmM9NjI2PXZvaWQgcmFkaXhfX2xvY2FsX2ZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHZtYWRkcilcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYy02Mjcte1xuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3RsYi5jOjYyODojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3RsYi5jLTYyOS1cdC8qIG5lZWQgdGhlIHJldHVybiBmaXggZm9yIG5vaGFzaC5jICovXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3RsYi5jPTk0NT12b2lkIHJhZGl4X19mbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfdGxiLmMtOTQ2LXtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYzo5NDc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYy05NDgtXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3RsYi5jPTExMTE9dm9pZCByYWRpeF9fZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYy0xMTE0LXtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYzoxMTE1OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfdGxiLmMtMTExNi1cdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYz02MzY9RVhQT1JUX1NZTUJPTF9HUEwoc2xpY2VfZ2V0X3VubWFwcGVkX2FyZWEpO1xuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmMtNjM3LVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmM6NjM4OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYy02Mzktc3RhdGljIGludCBmaWxlX3RvX3BzaXplKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jPTc1Nz12b2lkIHNsaWNlX3NldF9yYW5nZV9wc2l6ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYy03NjctXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYzo3Njg6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jLTc2OS0vKlxuLS1cbmFyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmM9NjE3PXZvaWQgX19pbml0IG1tdV9lYXJseV9pbml0X2RldnRyZWUodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jLTY2NC1cbmFyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmM6NjY1Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFKSlcbmFyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMtNjY2LVx0XHRodWdldGxicGFnZV9pbml0X2RlZmF1bHRzaXplKCk7XG4tLVxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9NYWtlZmlsZT04PW9iai0kKENPTkZJR19SQU5ET01JWkVfQkFTRSlcdCYjNDM7PSBrYXNscl9ib29rZS5vXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL01ha2VmaWxlOjk6aWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfUFBDX0U1MDApXHQmIzQzOz0gZTUwMF9odWdldGxicGFnZS5vXG4tLVxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC90bGIuYz0yNzg9dm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL3RsYi5jLTI3OS17XG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL3RsYi5jOjI4MDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC90bGIuYy0yODEtXHRpZiAodm1hIFx1MDAyNlx1MDAyNiBpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcbi0tXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jPTI1NT1pbnQgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYy0yNjgtXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jOjI2OTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYy0yNzAtaW50IGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmM9MzUzPXZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMtMzgzLSNlbmRpZlxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYzozODQ6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMtMzg1LVxuLS1cbmFyY2gvcmlzY3YvbW0vTWFrZWZpbGU9MTk9b2JqLXkgJiM0Mzs9IHBtZW0ub1xuYXJjaC9yaXNjdi9tbS9NYWtlZmlsZS0yMC1cbmFyY2gvcmlzY3YvbW0vTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkgJiM0Mzs9IGh1Z2V0bGJwYWdlLm9cbmFyY2gvcmlzY3YvbW0vTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX1BURFVNUCkgJiM0Mzs9IHB0ZHVtcC5vXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaD0xMTExPXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMTE1LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMTE2OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTExMTctc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtodWdlKHB0ZV90IHB0ZSlcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTE1NjA9c3RhdGljIGlubGluZSBwdWRfdCBwdWRfbWtkaXJ0eShwdWRfdCBwdWQpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNTY3LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNTY4OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNTY5LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtYXNzYWdlX3BncHJvdF9wbWQocGdwcm90X3QgcGdwcm90KVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTYxOD1zdGF0aWMgaW5saW5lIHBtZF90IG1rX3BtZF9waHlzKHVuc2lnbmVkIGxvbmcgcGh5c3BhZ2UsIHBncHJvdF90IHBncHJvdClcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE2MjItXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjE2MjM6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSB8fCBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE2MjQtXG4tLVxuYXJjaC9zMzkwL21tL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19ERUJVR19WSVJUVUFMKVx0JiM0Mzs9IHBoeXNhZGRyLm9cbmFyY2gvczM5MC9tbS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKVx0JiM0Mzs9IGh1Z2V0bGJwYWdlLm9cbmFyY2gvczM5MC9tbS9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfUFREVU1QKVx0XHQmIzQzOz0gZHVtcF9wYWdldGFibGVzLm9cbi0tXG5hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZz0yNT1DT05GSUdfTUVNT1JZX1NJWkU9MHgxMDAwMDAwMFxuYXJjaC9zaC9jb25maWdzL2Fwc2g0YWQwYV9kZWZjb25maWc6MjY6Q09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQj15XG5hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZy0yNy1DT05GSUdfS1NNPXlcbi0tXG5hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWc9MTY9Q09ORklHX01FTU9SWV9TSVpFPTB4MDgwMDAwMDBcbmFyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZzoxNzpDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMU1CPXlcbmFyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZy0xOC1DT05GSUdfU0hfU1RPUkVfUVVFVUVTPXlcbi0tXG5hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4Nl9kZWZjb25maWc9NDQ9Q09ORklHX05VTUE9eVxuYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnOjQ1OkNPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NE1CPXlcbmFyY2gvc2gvY29uZmlncy9zZGs3Nzg2X2RlZmNvbmZpZy00Ni1DT05GSUdfS1NNPXlcbi0tXG5hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZz0xNz1DT05GSUdfUE1CPXlcbmFyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnOjE4OkNPTkZJR19IVUdFVExCX1BBR0VfU0laRV8xTUI9eVxuYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWctMTktQ09ORklHX1NIX1NUT1JFX1FVRVVFUz15XG4tLVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgtMTQtXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaDoxNTojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRLKVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgtMTYtI2RlZmluZSBIUEFHRV9TSElGVFx0MTZcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oOjE3OiNlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzI1NkspXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaC0xOC0jZGVmaW5lIEhQQUdFX1NISUZUXHQxOFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmg6MTk6I2VsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMU1CKVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgtMjAtI2RlZmluZSBIUEFHRV9TSElGVFx0MjBcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oOjIxOiNlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzRNQilcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oLTIyLSNkZWZpbmUgSFBBR0VfU0hJRlRcdDIyXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaDoyMzojZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NE1CKVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgtMjQtI2RlZmluZSBIUEFHRV9TSElGVFx0MjZcbi0tXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaC0yNi1cbmFyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oOjI3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaC0yOC0jZGVmaW5lIEhQQUdFX1NJWkVcdFx0KDFVTCBcdTAwM2NcdTAwM2MgSFBBR0VfU0hJRlQpXG4tLVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmg9OTc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvcHlfcHRlYV9hdHRyaWJ1dGVzKHVuc2lnbmVkIGxvbmcgeClcbi0tXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaC0xMzYtI2lmIGRlZmluZWQoQ09ORklHX1gyVExCKVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmg6MTM3OiMgaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRLKVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgtMTM4LSMgIGRlZmluZSBfUEFHRV9TWkhVR0VcdChfUEFHRV9FWFRfRVNaMilcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oOjEzOTojIGVsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMjU2SylcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oLTE0MC0jICBkZWZpbmUgX1BBR0VfU1pIVUdFXHQoX1BBR0VfRVhUX0VTWjAgfCBfUEFHRV9FWFRfRVNaMilcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oOjE0MTojIGVsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMU1CKVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgtMTQyLSMgIGRlZmluZSBfUEFHRV9TWkhVR0VcdChfUEFHRV9FWFRfRVNaMCB8IF9QQUdFX0VYVF9FU1oxIHwgX1BBR0VfRVhUX0VTWjIpXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaDoxNDM6IyBlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzRNQilcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oLTE0NC0jICBkZWZpbmUgX1BBR0VfU1pIVUdFXHQoX1BBR0VfRVhUX0VTWjMpXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaDoxNDU6IyBlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0TUIpXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaC0xNDYtIyAgZGVmaW5lIF9QQUdFX1NaSFVHRVx0KF9QQUdFX0VYVF9FU1oyIHwgX1BBR0VfRVhUX0VTWjMpXG4tLVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgtMTQ5LSNlbHNlXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaDoxNTA6IyBpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEspXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaC0xNTEtIyAgZGVmaW5lIF9QQUdFX1NaSFVHRVx0KF9QQUdFX1NaMSlcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oOjE1MjojIGVsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMU1CKVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgtMTUzLSMgIGRlZmluZSBfUEFHRV9TWkhVR0VcdChfUEFHRV9TWjAgfCBfUEFHRV9TWjEpXG4tLVxuYXJjaC9zaC9tbS9NYWtlZmlsZT0zNz1vYmotJChDT05GSUdfREVCVUdfRlMpXHRcdCYjNDM7PSAkKGRlYnVnZnMteSlcbmFyY2gvc2gvbW0vTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSlcdCYjNDM7PSBodWdldGxicGFnZS5vXG5hcmNoL3NoL21tL01ha2VmaWxlLTM5LW9iai0kKENPTkZJR19QTUIpXHRcdCYjNDM7PSBwbWIub1xuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTYtXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDo3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC04LXN0cnVjdCBwdWRfaHVnZV9wYXRjaF9lbnRyeSB7XG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfNjQuaD03NT1zdHJ1Y3QgdHNiX2NvbmZpZyB7XG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfNjQuaC04NS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vbW11XzY0Lmg6ODY6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tdV82NC5oLTg3LSNkZWZpbmUgTU1fVFNCX0hVR0VcdDFcbi0tXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzY0Lmg9Mzc9c3RhdGljIGlubGluZSB2b2lkIHRzYl9jb250ZXh0X3N3aXRjaF9jdHgoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF82NC5oLTQxLVx0XHRcdCAgICAgXHUwMDI2bW0tXHUwMDNlY29udGV4dC50c2JfYmxvY2tbTU1fVFNCX0JBU0VdLFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF82NC5oOjQyOiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIHx8IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF82NC5oLTQzLVx0XHRcdCAgICAgKG1tLVx1MDAzZWNvbnRleHQudHNiX2Jsb2NrW01NX1RTQl9IVUdFXS50c2IgP1xuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGFnZV82NC5oLTIzLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wYWdlXzY0Lmg6MjQ6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BhZ2VfNjQuaC0yNS0jZGVmaW5lIEhQQUdFX1NJWkVcdFx0KF9BQygxLFVMKSBcdTAwM2NcdTAwM2MgSFBBR0VfU0hJRlQpXG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wYWdlXzY0LmgtMzQtXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BhZ2VfNjQuaDozNTojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGFnZV82NC5oLTM2LXN0cnVjdCBwdF9yZWdzO1xuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oPTM3ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3dyaXRlKHB0ZV90IHB0ZSlcbi0tXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaC0zOTEtXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaDozOTI6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaC0zOTMtcHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsIHZtX2ZsYWdzX3QgZmxhZ3MpO1xuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oPTExNTY9YXNtbGlua2FnZSB2b2lkIGRvX3NwYXJjNjRfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oLTExNTktXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaDoxMTYwOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaC0xMTYxLVxuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oPTExNjk9ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHRlX2xlYWZfc2l6ZShwdGVfdCBwdGUpO1xuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgtMTE3MC1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oOjExNzE6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oLTExNzItXG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90c2IuaD03NT1leHRlcm4gc3RydWN0IHRzYl9waHlzX3BhdGNoX2VudHJ5IF9fdHNiX3BoeXNfcGF0Y2gsIF9fdHNiX3BoeXNfcGF0Y2hfZW5kO1xuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vdHNiLmgtMjA2LVx0ICovXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RzYi5oOjIwNzojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vdHNiLmgtMjA4LSNkZWZpbmUgVVNFUl9QR1RBQkxFX0NIRUNLX1BVRF9IVUdFKFZBRERSLCBSRUcxLCBSRUcyLCBGQUlMX0xBQkVMLCBQVEVfTEFCRUwpIFxcXG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90c2IuaC0yNDEtXHQgKi9cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vdHNiLmg6MjQyOiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIHx8IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90c2IuaC0yNDMtI2RlZmluZSBVU0VSX1BHVEFCTEVfQ0hFQ0tfUE1EX0hVR0UoVkFERFIsIFJFRzEsIFJFRzIsIEZBSUxfTEFCRUwsIFBURV9MQUJFTCkgXFxcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9zdW40dl90bGJfbWlzcy5TPTE3NT1zdW40dl90c2JfbWlzc19jb21tb246XG4tLVxuYXJjaC9zcGFyYy9rZXJuZWwvc3VuNHZfdGxiX21pc3MuUy0xNzktXG5hcmNoL3NwYXJjL2tlcm5lbC9zdW40dl90bGJfbWlzcy5TOjE4MDojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbmFyY2gvc3BhcmMva2VybmVsL3N1bjR2X3RsYl9taXNzLlMtMTgxLVx0bW92XHRTQ1JBVENIUEFEX1VUU0JSRUcyLCAlZzVcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC90c2IuUz01MT10c2JfbWlzc19wYWdlX3RhYmxlX3dhbGs6XG4tLVxuYXJjaC9zcGFyYy9rZXJuZWwvdHNiLlMtNTYtXHQgKi9cbmFyY2gvc3BhcmMva2VybmVsL3RzYi5TOjU3OiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIHx8IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxuYXJjaC9zcGFyYy9rZXJuZWwvdHNiLlMtNTgtXG4tLVxuYXJjaC9zcGFyYy9rZXJuZWwvdHNiLlM9MTE1PXRzYl9taXNzX3BhZ2VfdGFibGVfd2Fsa19zdW40dl9mYXN0cGF0aDpcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC90c2IuUy0xMTktXG5hcmNoL3NwYXJjL2tlcm5lbC90c2IuUzoxMjA6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG5hcmNoL3NwYXJjL2tlcm5lbC90c2IuUy0xMjEtXHRzZXRoaVx0XHQldWhpKF9QQUdFX1BNRF9IVUdFIHwgX1BBR0VfUFVEX0hVR0UpLCAlZzdcbi0tXG5hcmNoL3NwYXJjL21tL01ha2VmaWxlPTExPW9iai0kKENPTkZJR19TUEFSQzMyKSAgICYjNDM7PSBsZW9uX21tLm9cbi0tXG5hcmNoL3NwYXJjL21tL01ha2VmaWxlLTEzLSMgT25seSB1c2VkIGJ5IHNwYXJjNjRcbmFyY2gvc3BhcmMvbW0vTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkgJiM0Mzs9IGh1Z2V0bGJwYWdlLm9cbmFyY2gvc3BhcmMvbW0vTWFrZWZpbGUtMTUtXG4tLVxuYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jPTc5PXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VzZXJfaW5zbih1bnNpZ25lZCBsb25nIHRwYylcbi0tXG5hcmNoL3NwYXJjL21tL2ZhdWx0XzY0LmMtMTA1LVxuYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jOjEwNjojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbmFyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYy0xMDctXHRpZiAoaXNfaHVnZXRsYl9wbWQoKnBtZHApKSB7XG4tLVxuYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jPTI2Nz1hc21saW5rYWdlIHZvaWQgX19rcHJvYmVzIGRvX3NwYXJjNjRfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jLTQ3Mi1cdFx0dHNiX2dyb3cobW0sIE1NX1RTQl9CQVNFLCBtbV9yc3MpO1xuYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jOjQ3MzojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbmFyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYy00NzQtXHRtbV9yc3MgPSBtbS1cdTAwM2Vjb250ZXh0Lmh1Z2V0bGJfcHRlX2NvdW50ICYjNDM7IG1tLVx1MDAzZWNvbnRleHQudGhwX3B0ZV9jb3VudDtcbi0tXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYz0zMTM9c3RhdGljIHZvaWQgX191cGRhdGVfbW11X3RzYl9pbnNlcnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdHNiX2luZGV4LFxuLS1cbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jLTMyOC1cbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jOjMyOTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMzMwLXN0YXRpYyBpbnQgX19pbml0IGh1Z2V0bGJwYWdlX2luaXQodm9pZClcbi0tXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYz0zNTQ9Ym9vbCBfX2luaXQgYXJjaF9odWdldGxiX3ZhbGlkX3NpemUodW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jLTM4NC19XG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYzozODU6I2VuZGlmXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYy0zODYtXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYz0zODc9dm9pZCB1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYy00MTEtXHRpc19odWdlX3RzYiA9IGZhbHNlO1xuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmM6NDEyOiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIHx8IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtNDEzLVx0aWYgKG1tLVx1MDAzZWNvbnRleHQuaHVnZXRsYl9wdGVfY291bnQgfHwgbW0tXHUwMDNlY29udGV4dC50aHBfcHRlX2NvdW50KSB7XG4tLVxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmM9Mjg4Mj12b2lkIHVwZGF0ZV9tbXVfY2FjaGVfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMjkxMi1cbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jOjI5MTM6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYy0yOTE0LXN0YXRpYyB2b2lkIGNvbnRleHRfcmVsb2FkKHZvaWQgKl9fZGF0YSlcbi0tXG5hcmNoL3NwYXJjL21tL3RzYi5jPTgzPXN0YXRpYyB2b2lkIF9fZmx1c2hfdHNiX29uZShzdHJ1Y3QgdGxiX2JhdGNoICp0YiwgdW5zaWduZWQgbG9uZyBoYXNoX3NoaWZ0LFxuLS1cbmFyY2gvc3BhcmMvbW0vdHNiLmMtOTEtXG5hcmNoL3NwYXJjL21tL3RzYi5jOjkyOiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIHx8IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxuYXJjaC9zcGFyYy9tbS90c2IuYy05My1zdGF0aWMgdm9pZCBfX2ZsdXNoX2h1Z2VfdHNiX29uZV9lbnRyeSh1bnNpZ25lZCBsb25nIHRzYiwgdW5zaWduZWQgbG9uZyB2LFxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5OTgKCQkJCQkJCW91dHB1dDogMTIzCgkJCQkJCQl0aG91Z2h0czogMTY1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZpcnR1YWwgTWFwcGluZyBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19IVUdFVExCX1BBR0VgIGp1bXBzIG91dC4gSXQmIzM5O3MgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiB0aGF0IGNvbnRyb2xzIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBoZXJlLiBUaGUgY2hhbmdlcyB0b3VjaCBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmhgLCBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYCwgYW5kIGBtbS92bWFsbG9jLmNgLgoKSW4gYG1tL3ZtYWxsb2MuY2AsIEkgc2VlIGNvZGUgZ3VhcmRlZCBieSBgQ09ORklHX0hVR0VUTEJfUEFHRWAgdGhhdCYjMzk7cyBjbGVhcmx5IHJlbGF0ZWQgdG8gaGFuZGxpbmcgaHVnZSBwYWdlIG1hcHBpbmdzIHdpdGhpbiB0aGUgdm1hbGxvYyBhcmVuYS4gVGhlIGNvZGUgY2hlY2tzIGZvciBgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AgYW5kIGBIQVZFX0FSQ0hfSFVHRV9WTUFQYCwgd2hpY2ggYXBwZWFyIHRvIGJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmZWF0dXJlcy4gT24gQVJNNjQsIHRoZXNlIGFyZSBpbXBsaWNpdGx5IGVuYWJsZWQgYnkgYENPTkZJR19BUk02NGAsIHdoaWNoIG1lYW5zIHRoZXkmIzM5O3JlIGFsd2F5cyBhY3RpdmUuIFRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gYG51bV9jb250aWdfcHRlc2AgdG8gaGFuZGxlIHRoZSBzaXplIG9mIGEgcGFnZSBiZWluZyBtYXBwZWQuCgpTcGVjaWZpY2FsbHksIGluIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaGAsIGBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplYCBoYXMgYmVlbiBtb2RpZmllZCwgbGlrZWx5IHRvIHN1cHBvcnQgY29udGlndW91cyBQVEUgbWFwcGluZ3MuIEl0IGRldGVybWluZXMgdGhlIG9wdGltYWwgc2l6ZSBmb3IgYSBjb250aWd1b3VzIG1hcHBpbmcgYmFzZWQgb24gYWxpZ25tZW50IGFuZCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSYjMzk7cyBjYXBhYmlsaXRpZXMuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB3aGljaCBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhpcyBjaGFuZ2UuIGB2bWFwX3NldF9wdGVzYCBpcyBgX19hbHdheXNfaW5saW5lYCwgc28gdGhhdCYjMzk7cyBub3QgYSBzdGFuZGFsb25lIGZ1bmN0aW9uIGluIHRoZSBiaW5hcnkuIGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgLCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCwgYW5kIGB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa2AgYXJlIGFsbCBzdGF0aWMsIG1lYW5pbmcgdGhleSBhcmUgbGlrZWx5IGludGVybmFsbHkgY2FsbGVkLiBIb3dldmVyLCB0aGVzZSBjYW4gc3RpbGwgYmUgZnV6emVkLCBkZXBlbmRpbmcgb24gdGhlIGZ1enppbmcgdG9vbC4gRmluYWxseSwgYHZtYXBgLCBgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hgLCBhbmQgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaGAgYXJlIGFsbCBleHBvcnRlZCBhbmQgcmVwcmVzZW50IHRoZSBlbnRyeSBwb2ludHMuCgpDaGVja2luZyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIGBIVUdFVExCX1BBR0VgIGlzIHRoZSBjcml0aWNhbCBvbmUuIGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCBhbmQgYEhBVkVfQVJDSF9IVUdFX1ZNQVBgIGFyZSBhcmNoaXRlY3R1cmFsbHktc2VsZWN0ZWQgYW5kIHNvIHdlIHdvbiYjMzk7dCBuZWVkIHRvIHNwZWNpZnkgdGhlc2UuIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyB0eXBpY2FsbHkgZW5hYmxlZCBpZiBgQ09ORklHX0hVR0VUTEJGU2AgaXMgZW5hYmxlZC4gVGhlcmVmb3JlLCBvdXIgJiMzNDtFbmFibGVDb25maWdzJiMzNDsgbGlzdCB3aWxsIGluY2x1ZGUgJiMzNDtIVUdFVExCX1BBR0UmIzM0Oy4KCkkgdGhpbmsgd2Ugc2hvdWxkIGNvbmNlbnRyYXRlIG9uIHRoZXNlIGZ1bmN0aW9uczogYHZtYXBgLCBgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkYCwgYHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYWAsIGB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa2AsIGFuZCBgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZWxlbWVudHMgb2YgdGhlIGJhdGNoZWQgbWFwcGluZyBsb2dpYywgZXNwZWNpYWxseSBgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkYCwgd2hpY2ggYXBwZWFycyB0byBiZSB0aGUgbW9zdCBub3ZlbCBwYXJ0IG9mIHRoZSBjaGFuZ2UuCgpGaW5hbGx5LCByZWdhcmRpbmcgcG90ZW50aWFsIGZ1enppbmcsIHRoaXMgY2hhbmdlIHRvIHZpcnR1YWwgbWFwcGluZyBpcyBkZWZpbml0ZWx5IHdvcnRoIHRhcmdldGluZy4gSXQgaW50cm9kdWNlcyBuZXcgY29udGlndW91cyBtYXBwaW5ncyBhdCB0aGUgUFRFIGxldmVsIHdoaWNoIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSBjb3JlIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMuIFRoZSBmdW5jdGlvbnMgaW52b2x2ZWQgYXJlbiYjMzk7dCBvbiBhbnkgaG90IHBhdGhzIHNvIHRoZXNlIGFyZSBsaWtlbHkgc2FmZSB0byB0YXJnZXQgaW4gZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hcCYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWQmIzM0OywKICAgICYjMzQ7dm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhJiMzNDssCiAgICAmIzM0O3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrJiMzNDssCiAgICAmIzM0O19fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYmF0Y2hlZCBjb250aWd1b3VzIG1hcHBpbmdzIGF0IHRoZSBQVEUgbGV2ZWwgZm9yIHZtYXAsIG1vZGlmeWluZyBjb3JlIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXAmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkJiMzNDssCiAgICAmIzM0O3ZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayYjMzQ7LAogICAgJiMzNDtfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGJhdGNoZWQgY29udGlndW91cyBtYXBwaW5ncyBhdCB0aGUgUFRFIGxldmVsIGZvciB2bWFwLCBtb2RpZnlpbmcgY29yZSB2aXJ0dWFsIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDZUMDk6MDk6MTkuMjQ3MDQ2OTUzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI1MDAzODg3MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQl9QQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1hcFwiLFxuICAgIFwidm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkXCIsXG4gICAgXCJ2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWFcIixcbiAgICBcInZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrXCIsXG4gICAgXCJfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYmF0Y2hlZCBjb250aWd1b3VzIG1hcHBpbmdzIGF0IHRoZSBQVEUgbGV2ZWwgZm9yIHZtYXAsIG1vZGlmeWluZyBjb3JlIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA5OjA5OjE5LjI0NzA1NTQ5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4OTAxMzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjM0Nzk4MjEwYzQyMDk4NzFkMjIxMWUyMTUxNjA2ZTljMWVmM2RiNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCA2IDA5OjA5OjE4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmhcXG5pbmRleCA0ZWMxYWNkM2MxYjM0OC4uN2Q5YzdkYzc5NWM0MmMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaFxcbkBAIC0yMyw2ICsyMyw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplKHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHU2NCBwZm4sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdClcXG4ge1xcbitcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBJZiB0aGUgYmxvY2sgaXMgYXQgbGVhc3QgQ09OVF9QVEVfU0laRSBpbiBzaXplLCBhbmQgaXMgbmF0dXJhbGx5XFxuIFxcdCAqIGFsaWduZWQgaW4gYm90aCB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBzcGFjZSwgdGhlbiB3ZSBjYW4gcHRlLW1hcCB0aGVcXG5AQCAtNDAsNyArNDIsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZSh1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdGlmICghSVNfQUxJR05FRChQRk5fUEhZUyhwZm4pLCBDT05UX1BURV9TSVpFKSlcXG4gXFx0XFx0cmV0dXJuIFBBR0VfU0laRTtcXG4gXFxuLVxcdHJldHVybiBDT05UX1BURV9TSVpFO1xcbitcXHRzaXplID0gbWluMyhlbmQgLSBhZGRyLCAxVUwgXFx1MDAzY1xcdTAwM2MgbWF4X3BhZ2Vfc2hpZnQsIFBNRF9TSVpFIFxcdTAwM2VcXHUwMDNlIDEpO1xcbitcXHRzaXplID0gcm91bmRkb3duX3Bvd19vZl90d28oc2l6ZSk7XFxuK1xcdHJldHVybiBzaXplO1xcbiB9XFxuIFxcbiAjZGVmaW5lIGFyY2hfdm1hcF9wdGVfcmFuZ2VfdW5tYXBfc2l6ZSBhcmNoX3ZtYXBfcHRlX3JhbmdlX3VubWFwX3NpemVcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jXFxuaW5kZXggMzA3NzJhOTA5YWVhM2UuLmQ2MDBhNmQ3NTFlMjk1IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xcbisrKyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xcbkBAIC0xMTAsNiArMTEwLDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IG51bV9jb250aWdfcHRlcyh1bnNpZ25lZCBsb25nIHNpemUsIHNpemVfdCAqcGdzaXplKVxcbiBcXHRcXHRjb250aWdfcHRlcyA9IENPTlRfUFRFUztcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuK1xcdFxcdGlmIChzaXplIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBzaXplIFxcdTAwM2MgUE1EX1NJWkUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0SVNfQUxJR05FRChzaXplLCBDT05UX1BURV9TSVpFKSkge1xcbitcXHRcXHRcXHQqcGdzaXplID0gUEFHRV9TSVpFO1xcbitcXHRcXHRcXHRjb250aWdfcHRlcyA9IHNpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4gXFx0XFx0V0FSTl9PTighX19odWdldGxiX3ZhbGlkX3NpemUoc2l6ZSkpO1xcbiBcXHR9XFxuIFxcbkBAIC0zNTksNiArMzY1LDEwIEBAIHB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKVxcbiBcXHRjYXNlIENPTlRfUFRFX1NJWkU6XFxuIFxcdFxcdHJldHVybiBwdGVfbWtjb250KGVudHJ5KTtcXG4gXFx0ZGVmYXVsdDpcXG4rXFx0XFx0aWYgKHBhZ2VzaXplIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBwYWdlc2l6ZSBcXHUwMDNjIFBNRF9TSVpFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdElTX0FMSUdORUQocGFnZXNpemUsIENPTlRfUFRFX1NJWkUpKVxcbitcXHRcXHRcXHRyZXR1cm4gcHRlX21rY29udChlbnRyeSk7XFxuK1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXHRwcl93YXJuKFxcXCIlczogdW5yZWNvZ25pemVkIGh1Z2UgcGFnZSBzaXplIDB4JWx4XFxcXG5cXFwiLFxcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcXG5pbmRleCAxMmY0YTM5ZmRkMGIzZS4uYTA4ODY4MGMzOWZjMTIgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hbGxvYy5jXFxuKysrIGIvbW0vdm1hbGxvYy5jXFxuQEAgLTkxLDYgKzkxLDMzIEBAIHN0cnVjdCB2ZnJlZV9kZWZlcnJlZCB7XFxuIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdmZyZWVfZGVmZXJyZWQsIHZmcmVlX2RlZmVycmVkKTtcXG4gXFxuIC8qKiogUGFnZSB0YWJsZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zICoqKi9cXG4rXFxuKy8qXFxuKyAqIFRyeSBjb250aWd1b3VzIG1hcHBpbmdzIGF0IHRoZSBQVEUgbGV2ZWwgZm9yIGFyY2hlcyB3aGljaCBzdXBwb3J0IHRoZW0sIGFuZCBpZlxcbisgKiByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4gRmFsbCBiYWNrIHRvIFBBR0VfU0laRSBtYXBwaW5ncyBvdGhlcndpc2UuXFxuKyAqXFxuKyAqIFJldHVybjogbWFwcGluZyBzaXplLlxcbisgKi9cXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZtYXBfc2V0X3B0ZXMocHRlX3QgKnB0ZSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgdTY0IHBmbixcXG4rXFx0XFx0cGdwcm90X3QgcHJvdCwgdW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0KVxcbit7XFxuKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcXG4rXFxuK1xcdHNpemUgPSBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplKGFkZHIsIGVuZCwgcGZuLCBtYXhfcGFnZV9zaGlmdCk7XFxuK1xcdGlmIChzaXplICE9IFBBR0VfU0laRSkge1xcbitcXHRcXHRwdGVfdCBlbnRyeSA9IHBmbl9wdGUocGZuLCBwcm90KTtcXG4rXFxuK1xcdFxcdGVudHJ5ID0gYXJjaF9tYWtlX2h1Z2VfcHRlKGVudHJ5LCBpbG9nMihzaXplKSwgMCk7XFxuK1xcdFxcdHNldF9odWdlX3B0ZV9hdChcXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSwgc2l6ZSk7XFxuK1xcdFxcdHJldHVybiBzaXplO1xcbitcXHR9XFxuKyNlbmRpZlxcbitcXHRzZXRfcHRlX2F0KFxcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIHBmbl9wdGUocGZuLCBwcm90KSk7XFxuK1xcdHJldHVybiBQQUdFX1NJWkU7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0XFx0cGh5c19hZGRyX3QgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90LFxcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQsIHBndGJsX21vZF9tYXNrICptYXNrKVxcbkBAIC05OCw3ICsxMjUsOCBAQCBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdHB0ZV90ICpwdGU7XFxuIFxcdHU2NCBwZm47XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbi1cXHR1bnNpZ25lZCBsb25nIHNpemUgPSBQQUdFX1NJWkU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcXG4rXFx0dW5zaWduZWQgaW50IHN0ZXBzO1xcbiBcXG4gXFx0aWYgKFdBUk5fT05fT05DRSghUEFHRV9BTElHTkVEKGVuZCAtIGFkZHIpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTExOSwyMCArMTQ3LDkgQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRCVUcoKTtcXG4gXFx0XFx0fVxcbiBcXG4tI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4tXFx0XFx0c2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUoYWRkciwgZW5kLCBwZm4sIG1heF9wYWdlX3NoaWZ0KTtcXG4tXFx0XFx0aWYgKHNpemUgIT0gUEFHRV9TSVpFKSB7XFxuLVxcdFxcdFxcdHB0ZV90IGVudHJ5ID0gcGZuX3B0ZShwZm4sIHByb3QpO1xcbi1cXG4tXFx0XFx0XFx0ZW50cnkgPSBhcmNoX21ha2VfaHVnZV9wdGUoZW50cnksIGlsb2cyKHNpemUpLCAwKTtcXG4tXFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KFxcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5LCBzaXplKTtcXG4tXFx0XFx0XFx0cGZuICs9IFBGTl9ET1dOKHNpemUpO1xcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fVxcbi0jZW5kaWZcXG4tXFx0XFx0c2V0X3B0ZV9hdChcXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBwZm5fcHRlKHBmbiwgcHJvdCkpO1xcbi1cXHRcXHRwZm4rKztcXG4tXFx0fSB3aGlsZSAocHRlICs9IFBGTl9ET1dOKHNpemUpLCBhZGRyICs9IHNpemUsIGFkZHIgIT0gZW5kKTtcXG4rXFx0XFx0c2l6ZSA9IHZtYXBfc2V0X3B0ZXMocHRlLCBhZGRyLCBlbmQsIHBmbiwgcHJvdCwgbWF4X3BhZ2Vfc2hpZnQpO1xcbitcXHRcXHRzdGVwcyA9IFBGTl9ET1dOKHNpemUpO1xcbitcXHR9IHdoaWxlIChwdGUgKz0gc3RlcHMsIHBmbiArPSBzdGVwcywgYWRkciArPSBzaXplLCBhZGRyICE9IGVuZCk7XFxuIFxcbiBcXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcXG4gXFx0Km1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEO1xcbkBAIC01MjQsOCArNTQxLDEwIEBAIHZvaWQgdnVubWFwX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIFxcbiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsXFxuLVxcdFxcdHBndGJsX21vZF9tYXNrICptYXNrKVxcbitcXHRcXHRwZ3RibF9tb2RfbWFzayAqbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0KVxcbiB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcGZuLCBzaXplO1xcbitcXHR1bnNpZ25lZCBpbnQgc3RlcHM7XFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXHRwdGVfdCAqcHRlO1xcbiBcXG5AQCAtNTU2LDkgKzU3NSwxMCBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHNldF9wdGVfYXQoXFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgbWtfcHRlKHBhZ2UsIHByb3QpKTtcXG4tXFx0XFx0KCpucikrKztcXG4tXFx0fSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7XFxuK1xcdFxcdHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbitcXHRcXHRzaXplID0gdm1hcF9zZXRfcHRlcyhwdGUsIGFkZHIsIGVuZCwgcGZuLCBwcm90LCBzaGlmdCk7XFxuK1xcdFxcdHN0ZXBzID0gUEZOX0RPV04oc2l6ZSk7XFxuK1xcdH0gd2hpbGUgKHB0ZSArPSBzdGVwcywgKm5yICs9IHN0ZXBzLCBhZGRyICs9IHNpemUsIGFkZHIgIT0gZW5kKTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXHQqbWFzayB8PSBQR1RCTF9QVEVfTU9ESUZJRUQ7XFxuQEAgLTU2OCw3ICs1ODgsNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFxuIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucixcXG4tXFx0XFx0cGd0YmxfbW9kX21hc2sgKm1hc2spXFxuK1xcdFxcdHBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpXFxuIHtcXG4gXFx0cG1kX3QgKnBtZDtcXG4gXFx0dW5zaWduZWQgbG9uZyBuZXh0O1xcbkBAIC01NzgsNyArNTk4LDI3IEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0ZG8ge1xcbiBcXHRcXHRuZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7XFxuLVxcdFxcdGlmICh2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaykpXFxuK1xcbitcXHRcXHRpZiAoc2hpZnQgXFx1MDAzZT0gUE1EX1NISUZUKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gcGFnZXNbKm5yXTtcXG4rXFx0XFx0XFx0cGh5c19hZGRyX3QgcGh5c19hZGRyO1xcbitcXG4rXFx0XFx0XFx0aWYgKFdBUk5fT04oIXBhZ2UpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0XFx0aWYgKFdBUk5fT04oIXBmbl92YWxpZChwYWdlX3RvX3BmbihwYWdlKSkpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdFxcdHBoeXNfYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKTtcXG4rXFxuK1xcdFxcdFxcdGlmICh2bWFwX3RyeV9odWdlX3BtZChwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgcHJvdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c2hpZnQpKSB7XFxuK1xcdFxcdFxcdFxcdCptYXNrIHw9IFBHVEJMX1BNRF9NT0RJRklFRDtcXG4rXFx0XFx0XFx0XFx0Km5yICs9IDEgXFx1MDAzY1xcdTAwM2MgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpO1xcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAodm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH0gd2hpbGUgKHBtZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNTg2LDcgKzYyNiw3IEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXG4gc3RhdGljIGludCB2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLFxcbi1cXHRcXHRwZ3RibF9tb2RfbWFzayAqbWFzaylcXG4rXFx0XFx0cGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdClcXG4ge1xcbiBcXHRwdWRfdCAqcHVkO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5leHQ7XFxuQEAgLTU5Niw3ICs2MzYsNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdGRvIHtcXG4gXFx0XFx0bmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xcbi1cXHRcXHRpZiAodm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2spKVxcbitcXHRcXHRpZiAodm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNjA0LDcgKzY0NCw3IEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXG4gc3RhdGljIGludCB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLFxcbi1cXHRcXHRwZ3RibF9tb2RfbWFzayAqbWFzaylcXG4rXFx0XFx0cGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdClcXG4ge1xcbiBcXHRwNGRfdCAqcDRkO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5leHQ7XFxuQEAgLTYxNCwxNCArNjU0LDE4IEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0ZG8ge1xcbiBcXHRcXHRuZXh0ID0gcDRkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XFxuLVxcdFxcdGlmICh2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaykpXFxuK1xcdFxcdGlmICh2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaywgc2hpZnQpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fSB3aGlsZSAocDRkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi1cXHRcXHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxcbisvKlxcbisgKiBJdCBjYW4gdGFrZSBhbiBhcnJheSBvZiBwYWdlcyB3aGljaCBhcmUgbm90IGFsbCBjb250aWd1b3VzLCBidXQgaXRcXG4rICogbWF5IGhhdmUgY29udGlndW91cyBjaHVua3MsIGFzIGhpbnRlZCBieSBAc2hpZnQuXFxuKyAqL1xcbitzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuK1xcdFxcdHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBzaGlmdClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcjtcXG4gXFx0cGdkX3QgKnBnZDtcXG5AQCAtNjM2LDcgKzY4MCw3IEBAIHN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcXG4gXFx0XFx0aWYgKHBnZF9iYWQoKnBnZCkpXFxuIFxcdFxcdFxcdG1hc2sgfD0gUEdUQkxfUEdEX01PRElGSUVEO1xcbi1cXHRcXHRlcnIgPSB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2QsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBcXHUwMDI2bnIsIFxcdTAwMjZtYXNrKTtcXG4rXFx0XFx0ZXJyID0gdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgXFx1MDAyNm5yLCBcXHUwMDI2bWFzaywgc2hpZnQpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fSB3aGlsZSAocGdkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XFxuQEAgLTY1OSwyNyArNzAzLDEyIEBAIHN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIGludCBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgcGFnZV9zaGlmdClcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgaSwgbnIgPSAoZW5kIC0gYWRkcikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4tXFxuIFxcdFdBUk5fT04ocGFnZV9zaGlmdCBcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbiBcXG4tXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DKSB8fFxcbi1cXHRcXHRcXHRwYWdlX3NoaWZ0ID09IFBBR0VfU0hJRlQpXFxuLVxcdFxcdHJldHVybiB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2goYWRkciwgZW5kLCBwcm90LCBwYWdlcyk7XFxuLVxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnI7IGkgKz0gMVUgXFx1MDAzY1xcdTAwM2MgKHBhZ2Vfc2hpZnQgLSBQQUdFX1NISUZUKSkge1xcbi1cXHRcXHRpbnQgZXJyO1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MpKVxcbitcXHRcXHRwYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDtcXG4gXFxuLVxcdFxcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICsgKDFVTCBcXHUwMDNjXFx1MDAzYyBwYWdlX3NoaWZ0KSxcXG4tXFx0XFx0XFx0XFx0XFx0cGFnZV90b19waHlzKHBhZ2VzW2ldKSwgcHJvdCxcXG4tXFx0XFx0XFx0XFx0XFx0cGFnZV9zaGlmdCk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuLVxcbi1cXHRcXHRhZGRyICs9IDFVTCBcXHUwMDNjXFx1MDAzYyBwYWdlX3NoaWZ0O1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMsIHBhZ2Vfc2hpZnQpO1xcbiB9XFxuIFxcbiBpbnQgdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuQEAgLTMyNzksNiArMzMwOCwxNCBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfdm1fYXJlYV9jYWxsZXIodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxcbiBcXHRcXHRcXHRcXHQgIE5VTUFfTk9fTk9ERSwgR0ZQX0tFUk5FTCwgY2FsbGVyKTtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKl9fZ2V0X3ZtX2FyZWFfbm9kZV9hbGlnbmVkX2NhbGxlcih1bnNpZ25lZCBsb25nIHNpemUsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IHZvaWQgKmNhbGxlcilcXG4re1xcbitcXHRyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIGFsaWduLCBQQUdFX1NISUZULCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0ICBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcXG4rXFx0XFx0XFx0XFx0ICBOVU1BX05PX05PREUsIEdGUF9LRVJORUwsIGNhbGxlcik7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBmaW5kX3ZtX2FyZWEgLSBmaW5kIGEgY29udGludW91cyBrZXJuZWwgdmlydHVhbCBhcmVhXFxuICAqIEBhZGRyOlxcdCAgYmFzZSBhZGRyZXNzXFxuQEAgLTM1MTksNiArMzU1NiwxMTMgQEAgdm9pZCB2dW5tYXAoY29uc3Qgdm9pZCAqYWRkcilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHZ1bm1hcCk7XFxuIFxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB2bV9zaGlmdChwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBsb25nIHNpemUpXFxuK3tcXG4rXFx0aWYgKGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKHByb3QpIFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzZT0gUE1EX1NJWkUpXFxuK1xcdFxcdHJldHVybiBQTURfU0hJRlQ7XFxuK1xcbitcXHRyZXR1cm4gYXJjaF92bWFwX3B0ZV9zdXBwb3J0ZWRfc2hpZnQoc2l6ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGdldF92bWFwX2JhdGNoX29yZGVyKHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuK1xcdFxcdHBncHJvdF90IHByb3QsIHVuc2lnbmVkIGludCBtYXhfc3RlcHMsIHVuc2lnbmVkIGludCBpZHgpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IG5yX2NvbnRpZztcXG4rXFx0aW50IG9yZGVyO1xcbitcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFQKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRucl9jb250aWcgPSBudW1fcGFnZXNfY29udGlndW91cyhcXHUwMDI2cGFnZXNbaWR4XSwgbWF4X3N0ZXBzKTtcXG4rXFx0aWYgKG5yX2NvbnRpZyBcXHUwMDNjIDIpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0b3JkZXIgPSBpbG9nMihucl9jb250aWcpO1xcbitcXG4rXFx0LyogTGltaXQgb3JkZXIgYnkgcGZuIGFsaWdubWVudCAqL1xcbitcXHRvcmRlciA9IG1pbl90KGludCwgb3JkZXIsIF9fZmZzKHBhZ2VfdG9fcGZuKHBhZ2VzW2lkeF0pKSk7XFxuK1xcbitcXHRpZiAodm1fc2hpZnQocHJvdCwgUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSA9PSBQQUdFX1NISUZUKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiBvcmRlcjtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4rXFx0XFx0cGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgY291bnQgPSAoZW5kIC0gYWRkcikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4rXFx0dW5zaWduZWQgaW50IHByZXZfc2hpZnQgPSAwLCBpZHggPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIG1hcF9hZGRyID0gYWRkciwgYmF0Y2hfZW5kID0gYWRkcjtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IGttc2FuX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaChhZGRyLCBlbmQsIHByb3QsIHBhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRQQUdFX1NISUZULCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIGNvdW50OyApIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHNoaWZ0ID0gUEFHRV9TSElGVCArXFxuK1xcdFxcdFxcdGdldF92bWFwX2JhdGNoX29yZGVyKHBhZ2VzLCBwcm90LCBjb3VudCAtIGksIGkpO1xcbitcXG4rXFx0XFx0aWYgKCFpKVxcbitcXHRcXHRcXHRwcmV2X3NoaWZ0ID0gc2hpZnQ7XFxuK1xcbitcXHRcXHRpZiAoc2hpZnQgIT0gcHJldl9zaGlmdCkge1xcbitcXHRcXHRcXHRlcnIgPSB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhtYXBfYWRkciwgYmF0Y2hfZW5kLFxcbitcXHRcXHRcXHRcXHRcXHRwcm90LCBwYWdlcyArIGlkeCwgcHJldl9zaGlmdCk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRwcmV2X3NoaWZ0ID0gc2hpZnQ7XFxuK1xcdFxcdFxcdG1hcF9hZGRyID0gYmF0Y2hfZW5kO1xcbitcXHRcXHRcXHRpZHggPSBpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBPbmNlIHNtYWxsIHBhZ2VzIGFyZSBlbmNvdW50ZXJlZCwgdGhlIHJlbWFpbmluZyBwYWdlc1xcbitcXHRcXHQgKiBhcmUgbGlrZWx5IHNtYWxsIGFzIHdlbGwuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoc2hpZnQgPT0gUEFHRV9TSElGVClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRiYXRjaF9lbmQgKz0gMVVMIFxcdTAwM2NcXHUwMDNjIHNoaWZ0O1xcbitcXHRcXHRpICs9IDFVIFxcdTAwM2NcXHUwMDNjIChzaGlmdCAtIFBBR0VfU0hJRlQpO1xcbitcXHR9XFxuK1xcbitcXHQvKiBSZW1haW5pbmcgKi9cXG4rXFx0aWYgKG1hcF9hZGRyIFxcdTAwM2MgZW5kKVxcbitcXHRcXHRlcnIgPSB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhtYXBfYWRkciwgZW5kLFxcbitcXHRcXHRcXHRcXHRwcm90LCBwYWdlcyArIGlkeCwgcHJldl9zaGlmdCk7XFxuK1xcbitvdXQ6XFxuK1xcdGZsdXNoX2NhY2hlX3ZtYXAoYWRkciwgZW5kKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKnZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHBncHJvdF90IHByb3QsIGNvbnN0IHZvaWQgKmNhbGxlcilcXG4re1xcbitcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhO1xcbitcXHR1bnNpZ25lZCBpbnQgc2hpZnQ7XFxuK1xcbitcXHRpZiAoYXJjaF92bWFwX3BtZF9zdXBwb3J0ZWQocHJvdCkgXFx1MDAyNlxcdTAwMjYgc2l6ZSBcXHUwMDNlPSBQTURfU0laRSkge1xcbitcXHRcXHR2bV9hcmVhID0gX19nZXRfdm1fYXJlYV9ub2RlX2FsaWduZWRfY2FsbGVyKHNpemUsIFBNRF9TSVpFLFxcbitcXHRcXHRcXHRcXHRmbGFncywgY2FsbGVyKTtcXG4rXFx0XFx0aWYgKHZtX2FyZWEpXFxuK1xcdFxcdFxcdHJldHVybiB2bV9hcmVhO1xcbitcXHR9XFxuK1xcbitcXHRzaGlmdCA9IGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpO1xcbitcXHRpZiAoc2hpZnQgXFx1MDAzZSBQQUdFX1NISUZUKSB7XFxuK1xcdFxcdHZtX2FyZWEgPSBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgMVVMIFxcdTAwM2NcXHUwMDNjIHNoaWZ0LFxcbitcXHRcXHRcXHRcXHRmbGFncywgY2FsbGVyKTtcXG4rXFx0XFx0aWYgKHZtX2FyZWEpXFxuK1xcdFxcdFxcdHJldHVybiB2bV9hcmVhO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlX2FsaWduZWRfY2FsbGVyKHNpemUsIFBBR0VfU0laRSwgZmxhZ3MsIGNhbGxlcik7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB2bWFwIC0gbWFwIGFuIGFycmF5IG9mIHBhZ2VzIGludG8gdmlydHVhbGx5IGNvbnRpZ3VvdXMgc3BhY2VcXG4gICogQHBhZ2VzOiBhcnJheSBvZiBwYWdlIHBvaW50ZXJzXFxuQEAgLTM1NTcsMTMgKzM3MDEsMTQgQEAgdm9pZCAqdm1hcChzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgY291bnQsXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0c2l6ZSA9ICh1bnNpZ25lZCBsb25nKWNvdW50IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuLVxcdGFyZWEgPSBnZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XFxuK1xcdGFyZWEgPSB2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWEoc2l6ZSwgZmxhZ3MsIHByb3QsXFxuK1xcdFxcdFxcdFxcdF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XFxuIFxcdGlmICghYXJlYSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbiBcXHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS1cXHUwMDNlYWRkcjtcXG4tXFx0aWYgKHZtYXBfcGFnZXNfcmFuZ2UoYWRkciwgYWRkciArIHNpemUsIHBncHJvdF9ueChwcm90KSxcXG4tXFx0XFx0XFx0XFx0cGFnZXMsIFBBR0VfU0hJRlQpIFxcdTAwM2MgMCkge1xcbitcXHRpZiAodm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkKGFkZHIsIGFkZHIgKyBzaXplLCBwZ3Byb3RfbngocHJvdCksXFxuK1xcdFxcdFxcdFxcdHBhZ2VzKSBcXHUwMDNjIDApIHtcXG4gXFx0XFx0dnVubWFwKGFyZWEtXFx1MDAzZWFkZHIpO1xcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwOTowOToxOS43MTcwMzA1MTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDMwMzk0MTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJfUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBcIixcbiAgICBcInZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZFwiLFxuICAgIFwidm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa1wiLFxuICAgIFwiX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGJhdGNoZWQgY29udGlndW91cyBtYXBwaW5ncyBhdCB0aGUgUFRFIGxldmVsIGZvciB2bWFwLCBtb2RpZnlpbmcgY29yZSB2aXJ0dWFsIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIzNDc5ODIxMGM0MjA5ODcxZDIyMTFlMjE1MTYwNmU5YzFlZjNkYjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCA2IDA5OjA5OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaFxuaW5kZXggNGVjMWFjZDNjMWIzNDguLjdkOWM3ZGM3OTVjNDJjIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oXG5AQCAtMjMsNiArMjMsOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZSh1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBlbmQsIHU2NCBwZm4sXG4gXHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0KVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbitcbiBcdC8qXG4gXHQgKiBJZiB0aGUgYmxvY2sgaXMgYXQgbGVhc3QgQ09OVF9QVEVfU0laRSBpbiBzaXplLCBhbmQgaXMgbmF0dXJhbGx5XG4gXHQgKiBhbGlnbmVkIGluIGJvdGggdmlydHVhbCBhbmQgcGh5c2ljYWwgc3BhY2UsIHRoZW4gd2UgY2FuIHB0ZS1tYXAgdGhlXG5AQCAtNDAsNyArNDIsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZSh1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoIUlTX0FMSUdORUQoUEZOX1BIWVMocGZuKSwgQ09OVF9QVEVfU0laRSkpXG4gXHRcdHJldHVybiBQQUdFX1NJWkU7XG4gXG4tXHRyZXR1cm4gQ09OVF9QVEVfU0laRTtcbitcdHNpemUgPSBtaW4zKGVuZCAtIGFkZHIsIDFVTCBcdTAwM2NcdTAwM2MgbWF4X3BhZ2Vfc2hpZnQsIFBNRF9TSVpFIFx1MDAzZVx1MDAzZSAxKTtcbitcdHNpemUgPSByb3VuZGRvd25fcG93X29mX3R3byhzaXplKTtcbitcdHJldHVybiBzaXplO1xuIH1cbiBcbiAjZGVmaW5lIGFyY2hfdm1hcF9wdGVfcmFuZ2VfdW5tYXBfc2l6ZSBhcmNoX3ZtYXBfcHRlX3JhbmdlX3VubWFwX3NpemVcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcbmluZGV4IDMwNzcyYTkwOWFlYTNlLi5kNjAwYTZkNzUxZTI5NSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jXG5AQCAtMTEwLDYgKzExMCwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBudW1fY29udGlnX3B0ZXModW5zaWduZWQgbG9uZyBzaXplLCBzaXplX3QgKnBnc2l6ZSlcbiBcdFx0Y29udGlnX3B0ZXMgPSBDT05UX1BURVM7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbitcdFx0aWYgKHNpemUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDNjIFBNRF9TSVpFIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0SVNfQUxJR05FRChzaXplLCBDT05UX1BURV9TSVpFKSkge1xuK1x0XHRcdCpwZ3NpemUgPSBQQUdFX1NJWkU7XG4rXHRcdFx0Y29udGlnX3B0ZXMgPSBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4gXHRcdFdBUk5fT04oIV9faHVnZXRsYl92YWxpZF9zaXplKHNpemUpKTtcbiBcdH1cbiBcbkBAIC0zNTksNiArMzY1LDEwIEBAIHB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKVxuIFx0Y2FzZSBDT05UX1BURV9TSVpFOlxuIFx0XHRyZXR1cm4gcHRlX21rY29udChlbnRyeSk7XG4gXHRkZWZhdWx0OlxuK1x0XHRpZiAocGFnZXNpemUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHBhZ2VzaXplIFx1MDAzYyBQTURfU0laRSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdElTX0FMSUdORUQocGFnZXNpemUsIENPTlRfUFRFX1NJWkUpKVxuK1x0XHRcdHJldHVybiBwdGVfbWtjb250KGVudHJ5KTtcbitcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRwcl93YXJuKFwiJXM6IHVucmVjb2duaXplZCBodWdlIHBhZ2Ugc2l6ZSAweCVseFxcblwiLFxuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xuaW5kZXggMTJmNGEzOWZkZDBiM2UuLmEwODg2ODBjMzlmYzEyIDEwMDY0NFxuLS0tIGEvbW0vdm1hbGxvYy5jXG4rKysgYi9tbS92bWFsbG9jLmNcbkBAIC05MSw2ICs5MSwzMyBAQCBzdHJ1Y3QgdmZyZWVfZGVmZXJyZWQge1xuIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdmZyZWVfZGVmZXJyZWQsIHZmcmVlX2RlZmVycmVkKTtcbiBcbiAvKioqIFBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyAqKiovXG4rXG4rLypcbisgKiBUcnkgY29udGlndW91cyBtYXBwaW5ncyBhdCB0aGUgUFRFIGxldmVsIGZvciBhcmNoZXMgd2hpY2ggc3VwcG9ydCB0aGVtLCBhbmQgaWZcbisgKiByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4gRmFsbCBiYWNrIHRvIFBBR0VfU0laRSBtYXBwaW5ncyBvdGhlcndpc2UuXG4rICpcbisgKiBSZXR1cm46IG1hcHBpbmcgc2l6ZS5cbisgKi9cbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hcF9zZXRfcHRlcyhwdGVfdCAqcHRlLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCB1NjQgcGZuLFxuK1x0XHRwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXG4re1xuKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4rXHR1bnNpZ25lZCBsb25nIHNpemU7XG4rXG4rXHRzaXplID0gYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZShhZGRyLCBlbmQsIHBmbiwgbWF4X3BhZ2Vfc2hpZnQpO1xuK1x0aWYgKHNpemUgIT0gUEFHRV9TSVpFKSB7XG4rXHRcdHB0ZV90IGVudHJ5ID0gcGZuX3B0ZShwZm4sIHByb3QpO1xuK1xuK1x0XHRlbnRyeSA9IGFyY2hfbWFrZV9odWdlX3B0ZShlbnRyeSwgaWxvZzIoc2l6ZSksIDApO1xuK1x0XHRzZXRfaHVnZV9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSwgc2l6ZSk7XG4rXHRcdHJldHVybiBzaXplO1xuK1x0fVxuKyNlbmRpZlxuK1x0c2V0X3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIHBmbl9wdGUocGZuLCBwcm90KSk7XG4rXHRyZXR1cm4gUEFHRV9TSVpFO1xuK31cbitcbiBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0cGh5c19hZGRyX3QgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90LFxuIFx0XHRcdHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdCwgcGd0YmxfbW9kX21hc2sgKm1hc2spXG5AQCAtOTgsNyArMTI1LDggQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0cHRlX3QgKnB0ZTtcbiBcdHU2NCBwZm47XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbi1cdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBBR0VfU0laRTtcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbitcdHVuc2lnbmVkIGludCBzdGVwcztcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIVBBR0VfQUxJR05FRChlbmQgLSBhZGRyKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTExOSwyMCArMTQ3LDkgQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdEJVRygpO1xuIFx0XHR9XG4gXG4tI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbi1cdFx0c2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUoYWRkciwgZW5kLCBwZm4sIG1heF9wYWdlX3NoaWZ0KTtcbi1cdFx0aWYgKHNpemUgIT0gUEFHRV9TSVpFKSB7XG4tXHRcdFx0cHRlX3QgZW50cnkgPSBwZm5fcHRlKHBmbiwgcHJvdCk7XG4tXG4tXHRcdFx0ZW50cnkgPSBhcmNoX21ha2VfaHVnZV9wdGUoZW50cnksIGlsb2cyKHNpemUpLCAwKTtcbi1cdFx0XHRzZXRfaHVnZV9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSwgc2l6ZSk7XG4tXHRcdFx0cGZuICs9IFBGTl9ET1dOKHNpemUpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tI2VuZGlmXG4tXHRcdHNldF9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBwZm5fcHRlKHBmbiwgcHJvdCkpO1xuLVx0XHRwZm4rKztcbi1cdH0gd2hpbGUgKHB0ZSArPSBQRk5fRE9XTihzaXplKSwgYWRkciArPSBzaXplLCBhZGRyICE9IGVuZCk7XG4rXHRcdHNpemUgPSB2bWFwX3NldF9wdGVzKHB0ZSwgYWRkciwgZW5kLCBwZm4sIHByb3QsIG1heF9wYWdlX3NoaWZ0KTtcbitcdFx0c3RlcHMgPSBQRk5fRE9XTihzaXplKTtcbitcdH0gd2hpbGUgKHB0ZSArPSBzdGVwcywgcGZuICs9IHN0ZXBzLCBhZGRyICs9IHNpemUsIGFkZHIgIT0gZW5kKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0Km1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEO1xuQEAgLTUyNCw4ICs1NDEsMTAgQEAgdm9pZCB2dW5tYXBfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZClcbiBcbiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0dW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsXG4tXHRcdHBndGJsX21vZF9tYXNrICptYXNrKVxuK1x0XHRwZ3RibF9tb2RfbWFzayAqbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0KVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgcGZuLCBzaXplO1xuK1x0dW5zaWduZWQgaW50IHN0ZXBzO1xuIFx0aW50IGVyciA9IDA7XG4gXHRwdGVfdCAqcHRlO1xuIFxuQEAgLTU1Niw5ICs1NzUsMTAgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0c2V0X3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIG1rX3B0ZShwYWdlLCBwcm90KSk7XG4tXHRcdCgqbnIpKys7XG4tXHR9IHdoaWxlIChwdGUrKywgYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTtcbitcdFx0cGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4rXHRcdHNpemUgPSB2bWFwX3NldF9wdGVzKHB0ZSwgYWRkciwgZW5kLCBwZm4sIHByb3QsIHNoaWZ0KTtcbitcdFx0c3RlcHMgPSBQRk5fRE9XTihzaXplKTtcbitcdH0gd2hpbGUgKHB0ZSArPSBzdGVwcywgKm5yICs9IHN0ZXBzLCBhZGRyICs9IHNpemUsIGFkZHIgIT0gZW5kKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0Km1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEO1xuQEAgLTU2OCw3ICs1ODgsNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcbiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0dW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsXG4tXHRcdHBndGJsX21vZF9tYXNrICptYXNrKVxuK1x0XHRwZ3RibF9tb2RfbWFzayAqbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0KVxuIHtcbiBcdHBtZF90ICpwbWQ7XG4gXHR1bnNpZ25lZCBsb25nIG5leHQ7XG5AQCAtNTc4LDcgKzU5OCwyNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbi1cdFx0aWYgKHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrKSlcbitcbitcdFx0aWYgKHNoaWZ0IFx1MDAzZT0gUE1EX1NISUZUKSB7XG4rXHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1sqbnJdO1xuK1x0XHRcdHBoeXNfYWRkcl90IHBoeXNfYWRkcjtcbitcbitcdFx0XHRpZiAoV0FSTl9PTighcGFnZSkpXG4rXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0XHRpZiAoV0FSTl9PTighcGZuX3ZhbGlkKHBhZ2VfdG9fcGZuKHBhZ2UpKSkpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0XHRwaHlzX2FkZHIgPSBwYWdlX3RvX3BoeXMocGFnZSk7XG4rXG4rXHRcdFx0aWYgKHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZCwgYWRkciwgbmV4dCwgcGh5c19hZGRyLCBwcm90LFxuK1x0XHRcdFx0XHRcdHNoaWZ0KSkge1xuK1x0XHRcdFx0Km1hc2sgfD0gUEdUQkxfUE1EX01PRElGSUVEO1xuK1x0XHRcdFx0Km5yICs9IDEgXHUwMDNjXHUwMDNjIChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTtcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbitcdFx0fVxuK1xuK1x0XHRpZiAodm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KSlcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH0gd2hpbGUgKHBtZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNTg2LDcgKzYyNiw3IEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucixcbi1cdFx0cGd0YmxfbW9kX21hc2sgKm1hc2spXG4rXHRcdHBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpXG4ge1xuIFx0cHVkX3QgKnB1ZDtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbkBAIC01OTYsNyArNjM2LDcgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4tXHRcdGlmICh2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaykpXG4rXHRcdGlmICh2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaywgc2hpZnQpKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fSB3aGlsZSAocHVkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XG4gXHRyZXR1cm4gMDtcbkBAIC02MDQsNyArNjQ0LDcgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXG4gc3RhdGljIGludCB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLFxuLVx0XHRwZ3RibF9tb2RfbWFzayAqbWFzaylcbitcdFx0cGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdClcbiB7XG4gXHRwNGRfdCAqcDRkO1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuQEAgLTYxNCwxNCArNjU0LDE4IEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGRvIHtcbiBcdFx0bmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuLVx0XHRpZiAodm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2spKVxuK1x0XHRpZiAodm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KSlcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH0gd2hpbGUgKHA0ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tXHRcdHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMpXG4rLypcbisgKiBJdCBjYW4gdGFrZSBhbiBhcnJheSBvZiBwYWdlcyB3aGljaCBhcmUgbm90IGFsbCBjb250aWd1b3VzLCBidXQgaXRcbisgKiBtYXkgaGF2ZSBjb250aWd1b3VzIGNodW5rcywgYXMgaGludGVkIGJ5IEBzaGlmdC5cbisgKi9cbitzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4rXHRcdHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBzaGlmdClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcjtcbiBcdHBnZF90ICpwZ2Q7XG5AQCAtNjM2LDcgKzY4MCw3IEBAIHN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcbiBcdFx0aWYgKHBnZF9iYWQoKnBnZCkpXG4gXHRcdFx0bWFzayB8PSBQR1RCTF9QR0RfTU9ESUZJRUQ7XG4tXHRcdGVyciA9IHZtYXBfcGFnZXNfcDRkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIFx1MDAyNm5yLCBcdTAwMjZtYXNrKTtcbitcdFx0ZXJyID0gdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgXHUwMDI2bnIsIFx1MDAyNm1hc2ssIHNoaWZ0KTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRicmVhaztcbiBcdH0gd2hpbGUgKHBnZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xuQEAgLTY1OSwyNyArNzAzLDEyIEBAIHN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gaW50IF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBwYWdlX3NoaWZ0KVxuIHtcbi1cdHVuc2lnbmVkIGludCBpLCBuciA9IChlbmQgLSBhZGRyKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cbiBcdFdBUk5fT04ocGFnZV9zaGlmdCBcdTAwM2MgUEFHRV9TSElGVCk7XG4gXG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MpIHx8XG4tXHRcdFx0cGFnZV9zaGlmdCA9PSBQQUdFX1NISUZUKVxuLVx0XHRyZXR1cm4gdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMpO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnI7IGkgKz0gMVUgXHUwMDNjXHUwMDNjIChwYWdlX3NoaWZ0IC0gUEFHRV9TSElGVCkpIHtcbi1cdFx0aW50IGVycjtcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQykpXG4rXHRcdHBhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUO1xuIFxuLVx0XHRlcnIgPSB2bWFwX3JhbmdlX25vZmx1c2goYWRkciwgYWRkciArICgxVUwgXHUwMDNjXHUwMDNjIHBhZ2Vfc2hpZnQpLFxuLVx0XHRcdFx0XHRwYWdlX3RvX3BoeXMocGFnZXNbaV0pLCBwcm90LFxuLVx0XHRcdFx0XHRwYWdlX3NoaWZ0KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0XHRhZGRyICs9IDFVTCBcdTAwM2NcdTAwM2MgcGFnZV9zaGlmdDtcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMsIHBhZ2Vfc2hpZnQpO1xuIH1cbiBcbiBpbnQgdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5AQCAtMzI3OSw2ICszMzA4LDE0IEBAIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF92bV9hcmVhX2NhbGxlcih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG4gXHRcdFx0XHQgIE5VTUFfTk9fTk9ERSwgR0ZQX0tFUk5FTCwgY2FsbGVyKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKl9fZ2V0X3ZtX2FyZWFfbm9kZV9hbGlnbmVkX2NhbGxlcih1bnNpZ25lZCBsb25nIHNpemUsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IHZvaWQgKmNhbGxlcilcbit7XG4rXHRyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIGFsaWduLCBQQUdFX1NISUZULCBmbGFncyxcbitcdFx0XHRcdCAgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXG4rXHRcdFx0XHQgIE5VTUFfTk9fTk9ERSwgR0ZQX0tFUk5FTCwgY2FsbGVyKTtcbit9XG4rXG4gLyoqXG4gICogZmluZF92bV9hcmVhIC0gZmluZCBhIGNvbnRpbnVvdXMga2VybmVsIHZpcnR1YWwgYXJlYVxuICAqIEBhZGRyOlx0ICBiYXNlIGFkZHJlc3NcbkBAIC0zNTE5LDYgKzM1NTYsMTEzIEBAIHZvaWQgdnVubWFwKGNvbnN0IHZvaWQgKmFkZHIpXG4gfVxuIEVYUE9SVF9TWU1CT0wodnVubWFwKTtcbiBcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB2bV9zaGlmdChwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0aWYgKGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKHByb3QpIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gUE1EX1NJWkUpXG4rXHRcdHJldHVybiBQTURfU0hJRlQ7XG4rXG4rXHRyZXR1cm4gYXJjaF92bWFwX3B0ZV9zdXBwb3J0ZWRfc2hpZnQoc2l6ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGdldF92bWFwX2JhdGNoX29yZGVyKHN0cnVjdCBwYWdlICoqcGFnZXMsXG4rXHRcdHBncHJvdF90IHByb3QsIHVuc2lnbmVkIGludCBtYXhfc3RlcHMsIHVuc2lnbmVkIGludCBpZHgpXG4re1xuK1x0dW5zaWduZWQgaW50IG5yX2NvbnRpZztcbitcdGludCBvcmRlcjtcbitcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bnJfY29udGlnID0gbnVtX3BhZ2VzX2NvbnRpZ3VvdXMoXHUwMDI2cGFnZXNbaWR4XSwgbWF4X3N0ZXBzKTtcbitcdGlmIChucl9jb250aWcgXHUwMDNjIDIpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0b3JkZXIgPSBpbG9nMihucl9jb250aWcpO1xuK1xuK1x0LyogTGltaXQgb3JkZXIgYnkgcGZuIGFsaWdubWVudCAqL1xuK1x0b3JkZXIgPSBtaW5fdChpbnQsIG9yZGVyLCBfX2ZmcyhwYWdlX3RvX3BmbihwYWdlc1tpZHhdKSkpO1xuK1xuK1x0aWYgKHZtX3NoaWZ0KHByb3QsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpID09IFBBR0VfU0hJRlQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIG9yZGVyO1xuK31cbitcbitzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuK1x0XHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuK3tcbitcdHVuc2lnbmVkIGludCBjb3VudCA9IChlbmQgLSBhZGRyKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdHVuc2lnbmVkIGludCBwcmV2X3NoaWZ0ID0gMCwgaWR4ID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgbWFwX2FkZHIgPSBhZGRyLCBiYXRjaF9lbmQgPSBhZGRyO1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IGttc2FuX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaChhZGRyLCBlbmQsIHByb3QsIHBhZ2VzLFxuK1x0XHRcdFx0XHRcdFBBR0VfU0hJRlQsIEdGUF9LRVJORUwpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgY291bnQ7ICkge1xuK1x0XHR1bnNpZ25lZCBpbnQgc2hpZnQgPSBQQUdFX1NISUZUICtcbitcdFx0XHRnZXRfdm1hcF9iYXRjaF9vcmRlcihwYWdlcywgcHJvdCwgY291bnQgLSBpLCBpKTtcbitcbitcdFx0aWYgKCFpKVxuK1x0XHRcdHByZXZfc2hpZnQgPSBzaGlmdDtcbitcbitcdFx0aWYgKHNoaWZ0ICE9IHByZXZfc2hpZnQpIHtcbitcdFx0XHRlcnIgPSB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhtYXBfYWRkciwgYmF0Y2hfZW5kLFxuK1x0XHRcdFx0XHRwcm90LCBwYWdlcyArIGlkeCwgcHJldl9zaGlmdCk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdHByZXZfc2hpZnQgPSBzaGlmdDtcbitcdFx0XHRtYXBfYWRkciA9IGJhdGNoX2VuZDtcbitcdFx0XHRpZHggPSBpO1xuK1x0XHR9XG4rXG4rXHRcdC8qXG4rXHRcdCAqIE9uY2Ugc21hbGwgcGFnZXMgYXJlIGVuY291bnRlcmVkLCB0aGUgcmVtYWluaW5nIHBhZ2VzXG4rXHRcdCAqIGFyZSBsaWtlbHkgc21hbGwgYXMgd2VsbC5cbitcdFx0ICovXG4rXHRcdGlmIChzaGlmdCA9PSBQQUdFX1NISUZUKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRiYXRjaF9lbmQgKz0gMVVMIFx1MDAzY1x1MDAzYyBzaGlmdDtcbitcdFx0aSArPSAxVSBcdTAwM2NcdTAwM2MgKHNoaWZ0IC0gUEFHRV9TSElGVCk7XG4rXHR9XG4rXG4rXHQvKiBSZW1haW5pbmcgKi9cbitcdGlmIChtYXBfYWRkciBcdTAwM2MgZW5kKVxuK1x0XHRlcnIgPSB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhtYXBfYWRkciwgZW5kLFxuK1x0XHRcdFx0cHJvdCwgcGFnZXMgKyBpZHgsIHByZXZfc2hpZnQpO1xuK1xuK291dDpcbitcdGZsdXNoX2NhY2hlX3ZtYXAoYWRkciwgZW5kKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICp2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWEodW5zaWduZWQgbG9uZyBzaXplLFxuK1x0XHR1bnNpZ25lZCBsb25nIGZsYWdzLCBwZ3Byb3RfdCBwcm90LCBjb25zdCB2b2lkICpjYWxsZXIpXG4re1xuK1x0c3RydWN0IHZtX3N0cnVjdCAqdm1fYXJlYTtcbitcdHVuc2lnbmVkIGludCBzaGlmdDtcbitcbitcdGlmIChhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IFBNRF9TSVpFKSB7XG4rXHRcdHZtX2FyZWEgPSBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgUE1EX1NJWkUsXG4rXHRcdFx0XHRmbGFncywgY2FsbGVyKTtcbitcdFx0aWYgKHZtX2FyZWEpXG4rXHRcdFx0cmV0dXJuIHZtX2FyZWE7XG4rXHR9XG4rXG4rXHRzaGlmdCA9IGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpO1xuK1x0aWYgKHNoaWZ0IFx1MDAzZSBQQUdFX1NISUZUKSB7XG4rXHRcdHZtX2FyZWEgPSBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgMVVMIFx1MDAzY1x1MDAzYyBzaGlmdCxcbitcdFx0XHRcdGZsYWdzLCBjYWxsZXIpO1xuK1x0XHRpZiAodm1fYXJlYSlcbitcdFx0XHRyZXR1cm4gdm1fYXJlYTtcbitcdH1cbitcbitcdHJldHVybiBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgUEFHRV9TSVpFLCBmbGFncywgY2FsbGVyKTtcbit9XG4rXG4gLyoqXG4gICogdm1hcCAtIG1hcCBhbiBhcnJheSBvZiBwYWdlcyBpbnRvIHZpcnR1YWxseSBjb250aWd1b3VzIHNwYWNlXG4gICogQHBhZ2VzOiBhcnJheSBvZiBwYWdlIHBvaW50ZXJzXG5AQCAtMzU1NywxMyArMzcwMSwxNCBAQCB2b2lkICp2bWFwKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCxcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRzaXplID0gKHVuc2lnbmVkIGxvbmcpY291bnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4tXHRhcmVhID0gZ2V0X3ZtX2FyZWFfY2FsbGVyKHNpemUsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuK1x0YXJlYSA9IHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYShzaXplLCBmbGFncywgcHJvdCxcbitcdFx0XHRcdF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4gXHRpZiAoIWFyZWEpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXHUwMDNlYWRkcjtcbi1cdGlmICh2bWFwX3BhZ2VzX3JhbmdlKGFkZHIsIGFkZHIgKyBzaXplLCBwZ3Byb3RfbngocHJvdCksXG4tXHRcdFx0XHRwYWdlcywgUEFHRV9TSElGVCkgXHUwMDNjIDApIHtcbitcdGlmICh2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWQoYWRkciwgYWRkciArIHNpemUsIHBncHJvdF9ueChwcm90KSxcbitcdFx0XHRcdHBhZ2VzKSBcdTAwM2MgMCkge1xuIFx0XHR2dW5tYXAoYXJlYS1cdTAwM2VhZGRyKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwOTowOToxOS43MTcwMzMwNjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODQ1MTI0OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHZtYXBgIFBhdGNoIGZvciBGdXp6aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdGhhdCdzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IGB2bWFwYCBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zIGluIGBtbS92bWFsbG9jLmNgIGFuZCBhIGZldyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZXMgaGFuZGxlIG1lbW9yeSBtYXBwaW5nLiBJdCBzZWVtcyB0aGV5J3JlIGludHJvZHVjaW5nIHNvbWUgYmF0Y2hlZCBjb250aWd1b3VzIG1hcHBpbmdzIGF0IHRoZSBQVEUgbGV2ZWwsIHNwZWNpZmljYWxseSBmb3IgYXJjaGl0ZWN0dXJlcyBsaWtlIEFSTTY0IHdpdGggYENPTlRfUFRFX1NJWkVgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgYHZtYXBgIGlzIGEgY29yZSwgY3JpdGljYWwga2VybmVsIEFQSSwgaGVhdmlseSByZWxpZWQgdXBvbiBieSBudW1lcm91cyBkcml2ZXJzIGFuZCBzdWJzeXN0ZW1zIHRvIG1hcCBhcnJheXMgb2YgcGFnZXMgY29udGlndW91c2x5LiBTbywgdGhlIHBhdGNoIGlzIGFpbWluZyBmb3Igb3B0aW1pemF0aW9uIGhlcmUsIHVzaW5nIGh1Z2UgcGFnZXMgb3IgY29udGlndW91cyBQVEVzIHdoZW4gZmVhc2libGUgd2l0aGluIGB2bWFwYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0PyBUaGlzIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgcmlwZSBmb3IgZnV6emluZy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGl0J3MgYSBoaWdoLXZhbHVlIHRhcmdldC5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyB0aGUgZnV6emluZyBlZmZvcnRzLiBDbGVhcmx5LCBgdm1hcGAgaXRzZWxmIGlzIGEgcHJpbWUgY2FuZGlkYXRlLCBnaXZlbiBpdHMgd2lkZXNwcmVhZCB1c2UsIGJ1dCBpdCdzICpldmVyeXdoZXJlKi4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgdm1hcGAsIGl0IGNhbGxzIGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgLCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCwgYW5kIGB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa2AgKGZvcm1lcmx5IGB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2hgKSwgYW5kIG9mIGNvdXJzZSwgYHZtYXBfc2V0X3B0ZXNgLCB3aGljaCBpcyBwcm9iYWJseSB0aGUgaGVhcnQgb2YgdGhpcyBiYXRjaGVkIFBURSBsb2dpYy4gVGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBtbS92bWFsbG9jLmNgLCBzbyB3aGlsZSB0aGV5J3JlIG5vdCBkaXJlY3RseSBleHBvcnRlZCwgdGhleSdyZSBjcml0aWNhbCB0byB0aGUgb3ZlcmFsbCBgdm1hcGAgZmxvdy4gU28sIHdlJ2xsIGhpdCBgdm1hcGAsIHRoZSBgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkYCwgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrYCwgYW5kIGB2bWFwX3NldF9wdGVzYCBmdW5jdGlvbnMuIEJlY2F1c2Ugb2YgdGhlIG1haW4gY2hhbmdlcywgd2Ugc2hvdWxkIGFsc28gaW5jbHVkZSB0aGUgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaGAsIGBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaGAuXG5cbkZpbmFsbHksIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBjb250ZXh0LiBXZSdyZSBzZWVpbmcgcmVmZXJlbmNlcyB0byBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgLCBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVBgLCBhbmQgYENPTkZJR19IVUdFVExCX1BBR0VgLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gcXVpY2tseSB0cmFjayBkb3duIHdoZXJlIHRoZXNlIGFyZSBkZWZpbmVkLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBpcyBrZXkgdG8gc2V0dGluZyB1cCBlZmZlY3RpdmUgZnV6emluZyBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMTksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwOTowOToyNy41NjIxNjA0NjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxODQwMTcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvS2NvbmZpZz0xMDkyPWNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuLS1cXG5hcmNoL0tjb25maWctMTA5OS0jXFxuYXJjaC9LY29uZmlnOjExMDA6Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5hcmNoL0tjb25maWctMTEwMS1cXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9IVUdFX1ZNQVBcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE1My1cXHRzZWxlY3QgSEFWRV9BUkNIX0NPTVBJTEVSX0hcXG5hcmNoL2FybTY0L0tjb25maWc6MTU0OlxcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFxuYXJjaC9hcm02NC9LY29uZmlnLTE1NS1cXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BUFxcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTIxOC1cXHRzZWxlY3QgSEFWRV9BUkNIX0FVRElUU1lTQ0FMTFxcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjIxOTpcXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcdFxcdGlmIEhBVkVfQVJDSF9IVUdFX1ZNQVBcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0yMjAtXFx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcXHRcXHRpZiBQUENfUkFESVhfTU1VIHx8IFBQQ184eHhcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMzEtXFx0c2VsZWN0IEhBVkVfQVJDSF9CSVRSRVZFUlNFIGlmIFJJU0NWX0lTQV9aQktCIFxcdTAwMjZcXHUwMDI2IEJJVFJFVkVSU0VcXG5hcmNoL3Jpc2N2L0tjb25maWc6MTMyOlxcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DIGlmIEhBVkVfQVJDSF9IVUdFX1ZNQVBcXG5hcmNoL3Jpc2N2L0tjb25maWctMTMzLVxcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFQIGlmIE1NVSBcXHUwMDI2XFx1MDAyNiA2NEJJVFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTE5Mi1cXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BUFxcdFxcdGlmIFg4Nl82NCB8fCBYODZfUEFFXFxuYXJjaC94ODYvS2NvbmZpZzoxOTM6XFx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXHRcXHRpZiBYODZfNjRcXG5hcmNoL3g4Ni9LY29uZmlnLTE5NC1cXHRzZWxlY3QgSEFWRV9BUkNIX0pVTVBfTEFCRUxcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTE5PXN0cnVjdCBpb3ZfaXRlcjtcXHRcXHQvKiBpbiB1aW8uaCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMzEtI2RlZmluZSBWTV9NQVBfUFVUX1BBR0VTXFx0MHgwMDAwMDIwMFxcdC8qIHB1dCBwYWdlcyBhbmQgZnJlZSBhcnJheSBpbiB2ZnJlZSAqL1xcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjMyOiNkZWZpbmUgVk1fQUxMT1dfSFVHRV9WTUFQXFx0MHgwMDAwMDQwMCAgICAgIC8qIEFsbG93IGZvciBodWdlIHBhZ2VzIG9uIGFyY2hzIHdpdGggSEFWRV9BUkNIX0hVR0VfVk1BTExPQyAqL1xcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTMzLVxcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg9NTI9c3RydWN0IHZtX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC02MS1cXHRzdHJ1Y3QgcGFnZVxcdFxcdCoqcGFnZXM7XFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg6NjI6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtNjMtXFx0dW5zaWduZWQgaW50XFx0XFx0cGFnZV9vcmRlcjtcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTI1OD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdm1fYXJlYV9odWdlcGFnZXMoY29uc3Qgdm9pZCAqYWRkcilcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTI2Ni1cXHQgKi9cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDoyNjc6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMjY4LVxcdHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEgPSBmaW5kX3ZtX2FyZWEoYWRkcik7XFxuLS1cXG5tbS92bWFsbG9jLmM9NjM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpb3JlbWFwX21heF9wYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDtcXG4tLVxcbm1tL3ZtYWxsb2MuYy02NS1cXG5tbS92bWFsbG9jLmM6NjY6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFxubW0vdm1hbGxvYy5jLTY3LXN0YXRpYyBib29sIF9fcm9fYWZ0ZXJfaW5pdCB2bWFwX2FsbG93X2h1Z2UgPSB0cnVlO1xcbi0tXFxubW0vdm1hbGxvYy5jPTc0PWVhcmx5X3BhcmFtKFxcXCJub2h1Z2V2bWFsbG9jXFxcIiwgc2V0X25vaHVnZXZtYWxsb2MpO1xcbm1tL3ZtYWxsb2MuYzo3NTojZWxzZSAvKiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQyAqL1xcbm1tL3ZtYWxsb2MuYy03Ni1zdGF0aWMgY29uc3QgYm9vbCB2bWFwX2FsbG93X2h1Z2UgPSBmYWxzZTtcXG5tbS92bWFsbG9jLmM6Nzc6I2VuZGlmXFx0LyogQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MgKi9cXG5tbS92bWFsbG9jLmMtNzgtXFxuLS1cXG5tbS92bWFsbG9jLmM9NzAzPWludCBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTcwNy1cXG5tbS92bWFsbG9jLmM6NzA4OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQykpXFxubW0vdm1hbGxvYy5jLTcwOS1cXHRcXHRwYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zMTM0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHZtX2FyZWFfcGFnZV9vcmRlcihzdHJ1Y3Qgdm1fc3RydWN0ICp2bSlcXG5tbS92bWFsbG9jLmMtMzEzNS17XFxubW0vdm1hbGxvYy5jOjMxMzY6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFxubW0vdm1hbGxvYy5jLTMxMzctXFx0cmV0dXJuIHZtLVxcdTAwM2VwYWdlX29yZGVyO1xcbi0tXFxubW0vdm1hbGxvYy5jPTMxNDg9c3RhdGljIGlubGluZSB2b2lkIHNldF92bV9hcmVhX3BhZ2Vfb3JkZXIoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS92bWFsbG9jLmMtMzE0OS17XFxubW0vdm1hbGxvYy5jOjMxNTA6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFxubW0vdm1hbGxvYy5jLTMxNTEtXFx0dm0tXFx1MDAzZXBhZ2Vfb3JkZXIgPSBvcmRlcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDk6MDk6MjkuNzgwNTY2NDc1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyMDc5NzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIE5ldyBDb2RlJ3MgSHVnVExCIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYHZtYXBfc2V0X3B0ZXNgLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGF0IG1lIGlzIHRoYXQgYCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFYC4gUmlnaHQgYXdheSwgdGhpcyB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggSHVnZVRMQiBwYWdlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgdmlydHVhbCBtZW1vcnkgbWFwcGluZyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBjb25uZWN0ZWQgdG8gSHVnZVRMQnMuIFRoaXMgYWxzbyB0b3VjaGVzIG9uIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAgYW5kIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AuIFRoYXQncyBpbnRlcmVzdGluZywgYXMgaXQgaW5kaWNhdGVzIHRoZSBhcmNoaXRlY3R1cmUgbWlnaHQgaGF2ZSBzb21lIHNwZWNpZmljIHN1cHBvcnQgb3IgcmVxdWlyZW1lbnRzIGZvciBoYW5kbGluZyBodWdlIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmdzLiBTZWVtcyBsaWtlIHRoaXMgaXMgZ29pbmcgdG8gYmUgcmVsZXZhbnQgdG8gdmlydHVhbCBtZW1vcnkgbWFwcGluZyB3aXRoIGh1Z2UgcGFnZXMuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBkZWZpbml0aW9uIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB3aGF0IHRoaXMgaXMgYWxsIGFib3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTY4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDk6MDk6MzIuOTAxMzY1NDM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDY5ODc2OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0hVR0VUTEJfUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEwMTcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0PTk1PUtlcm5lbCBwYXJhbWV0ZXJzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDg1LVxcdGh1Z2V0bGJfZnJlZV92bWVtbWFwPVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjIwODY6XFx0XFx0XFx0W0tOTF0gUmVxdWlyZXMgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA4Ny1cXHRcXHRcXHRlbmFibGVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA5NS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDk2OlxcdFxcdFxcdEJ1aWx0IHdpdGggQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT049eSxcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDk3LVxcdFxcdFxcdHRoZSBkZWZhdWx0IGlzIG9uLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q9MjI9Rmlyc3QgdGhlIExpbnV4IGtlcm5lbCBuZWVkcyB0byBiZSBidWlsdCB3aXRoIHRoZSBDT05GSUdfSFVHRVRMQkZTXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q6MjM6KHByZXNlbnQgdW5kZXIgXFxcIkZpbGUgc3lzdGVtc1xcXCIpIGFuZCBDT05GSUdfSFVHRVRMQl9QQUdFIChzZWxlY3RlZFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0LTI0LWF1dG9tYXRpY2FsbHkgd2hlbiBDT05GSUdfSFVHRVRMQkZTIGlzIHNlbGVjdGVkKSBjb25maWd1cmF0aW9uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdD0xNzQ9aHVnZXRsYl9mcmVlX3ZtZW1tYXBcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdDoxNzU6XFx0V2hlbiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVAgaXMgc2V0LCB0aGlzIGVuYWJsZXMgSHVnZVRMQlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0LTE3Ni1cXHRWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKS5cXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbXRlLmg9MTU3PXN0YXRpYyBpbmxpbmUgaW50IG10ZV9wdHJhY2VfY29weV90YWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL210ZS5oLTE2NS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL210ZS5oOjE2NjojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19BUk02NF9NVEUpXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tdGUuaC0xNjctc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9odWdldGxiX210ZV90YWdnZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQVJNNjRfQ09OVFBURSlcXHQrPSBjb250cHRlLm9cXG5hcmNoL2FybTY0L21tL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSlcXHQrPSBodWdldGxicGFnZS5vXFxuYXJjaC9hcm02NC9tbS9NYWtlZmlsZS04LW9iai0kKENPTkZJR19QVERVTVApXFx0XFx0Kz0gcHRkdW1wLm9cXG4tLVxcbmFyY2gvaGV4YWdvbi9pbmNsdWRlL2FzbS9wYWdlLmgtMzktICovXFxuYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL3BhZ2UuaDo0MDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvaGV4YWdvbi9pbmNsdWRlL2FzbS9wYWdlLmgtNDEtI2RlZmluZSBIUEFHRV9TSElGVCAyMlxcbi0tXFxuYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL3BndGFibGUuaD0xMjk9ZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07ICAvKiBsb2NhdGVkIGluIGhlYWQuUyAqL1xcbi0tXFxuYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMzEtLyogIEhVR0VUTEIgbm90IHdvcmtpbmcgY3VycmVudGx5ICAqL1xcbmFyY2gvaGV4YWdvbi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTMyOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMzMtI2RlZmluZSBwdGVfbWtodWdlKHB0ZSkgX19wdGUoKHB0ZV92YWwocHRlKSBcXHUwMDI2IH4weDMpIHwgSFZNX0hVR0VQQUdFX1NJWkUpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9tbS9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfSElHSE1FTSlcXHRcXHQrPSBoaWdobWVtLm9cXG5hcmNoL2xvb25nYXJjaC9tbS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKVxcdCs9IGh1Z2V0bGJwYWdlLm9cXG5hcmNoL2xvb25nYXJjaC9tbS9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfS0FTQU4pXFx0XFx0Kz0ga2FzYW5faW5pdC5vXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9tbS90bGIuYz0xMzg9c3RhdGljIHZvaWQgX191cGRhdGVfaHVnZXRsYihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcClcXG5hcmNoL2xvb25nYXJjaC9tbS90bGIuYy0xMzkte1xcbmFyY2gvbG9vbmdhcmNoL21tL3RsYi5jOjE0MDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvbG9vbmdhcmNoL21tL3RsYi5jLTE0MS1cXHRpbnQgaWR4O1xcbi0tXFxuYXJjaC9taXBzL21tL01ha2VmaWxlPTMxPW9iai0kKENPTkZJR19ISUdITUVNKVxcdFxcdCs9IGhpZ2htZW0ub1xcbmFyY2gvbWlwcy9tbS9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKVxcdCs9IGh1Z2V0bGJwYWdlLm9cXG5hcmNoL21pcHMvbW0vTWFrZWZpbGUtMzMtb2JqLSQoQ09ORklHX0RNQV9OT05DT0hFUkVOVClcXHQrPSBkbWEtbm9uY29oZXJlbnQub1xcbi0tXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFnZS5oPTkzPWV4dGVybiBpbnQgbnBtZW1fcmFuZ2VzO1xcbi0tXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFnZS5oLTE0Ny1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYWdlLmg6MTQ4OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFnZS5oLTE0OS0jZGVmaW5lIEhQQUdFX1NISUZUXFx0XFx0UE1EX1NISUZUIC8qIGZpeGVkIGZvciB0cmFuc3BhcmVudCBodWdlIHBhZ2VzICovXFxuLS1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYWdlLmgtMTYzLSNlbmRpZlxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhZ2UuaDoxNjQ6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYWdlLmgtMTY1LVxcbi0tXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTY0PWV4dGVybiB2b2lkIF9fdXBkYXRlX2NhY2hlKHB0ZV90IHB0ZSk7XFxuLS1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTcwLSNkZWZpbmUgX1BBR0VfVVNFUl9CSVQgICAgIDIwICAgLyogKDB4ODAwKSBTb2Z0d2FyZTogVXNlciBhY2Nlc3NpYmxlIHBhZ2UgKi9cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTcxOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3Mi0jZGVmaW5lIF9QQUdFX1NQRUNJQUxfQklUICBfUEFHRV9ETUJfQklUICAvKiBETUIgZmVhdHVyZSBpcyBjdXJyZW50bHkgdW51c2VkICovXFxuLS1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MzE1PXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpXFx0eyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfU1BFQ0lBTDsgcmV0dXJuIHB0ZTsgfVxcbi0tXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMxOS0gKi9cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MzIwOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMyMS0jZGVmaW5lIHB0ZV9odWdlKHB0ZSkgICAgICAgICAgIChwdGVfdmFsKHB0ZSkgXFx1MDAyNiBfUEFHRV9IVUdFKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmM9NDE9aW50IG1haW4odm9pZClcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jLTI3OC1cXHQgKiBhbmQga2VybmVsIGRhdGEgb24gcGh5c2ljYWwgaHVnZSBwYWdlcyAqL1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jOjI3OTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jLTI4MC1cXHRERUZJTkUoSFVHRVBBR0VfU0laRSwgMVVMIFxcdTAwM2NcXHUwMDNjIFJFQUxfSFBBR0VfU0hJRlQpO1xcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMtNDgxLVxcdC5tYWNyb1xcdFxcdGNvbnZlcnRfZm9yX3RsYl9pbnNlcnQyMCBwdGUsdG1wXFxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlM6NDgyOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMtNDgzLVxcdGNvcHlcXHRcXHRcXFxccHRlLFxcXFx0bXBcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zZXR1cC5jPTEwMT12b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvc2V0dXAuYy0xMTQtXFx0XFx0KGludCkoUEFHRV9TSVpFIC8gMTAyNCkpO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9zZXR1cC5jOjExNTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zZXR1cC5jLTExNi1cXHRwcmludGsoS0VSTl9DT05UIFxcXCJlbmFibGVkIHdpdGggJWQgTUIgcGh5c2ljYWwgYW5kICVkIE1CIHZpcnR1YWwgc2l6ZVxcXCIsXFxuLS1cXG5hcmNoL3BhcmlzYy9tbS9NYWtlZmlsZT02PW9iai15XFx0IDo9IGluaXQubyBmYXVsdC5vIGlvcmVtYXAubyBmaXhtYXAub1xcbmFyY2gvcGFyaXNjL21tL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkgKz0gaHVnZXRsYnBhZ2Uub1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oLTc0LVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaDo3NTojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8IGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSlcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmgtNzYtI2RlZmluZSBIX1BNRF9GUkFHX1NJWkVfU0hJRlQgIChIX1BNRF9JTkRFWF9TSVpFICsgMyArIDEpXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmg9MTc1PXN0YXRpYyBpbmxpbmUgaW50IGhhc2hfX3JlbWFwXzRrX3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oLTE4Ni0jZGVmaW5lIEhfUFRFX1RBQkxFX1NJWkVcXHRQVEVfRlJBR19TSVpFXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oOjE4NzojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8IGRlZmluZWQgKENPTkZJR19IVUdFVExCX1BBR0UpXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oLTE4OC0jZGVmaW5lIEhfUE1EX1RBQkxFX1NJWkVcXHQoKHNpemVvZihwbWRfdCkgXFx1MDAzY1xcdTAwM2MgUE1EX0lOREVYX1NJWkUpICsgXFxcXFxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oLTE5Mi0jZW5kaWZcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmg6MTkzOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oLTE5NC0jZGVmaW5lIEhfUFVEX1RBQkxFX1NJWkVcXHQoKHNpemVvZihwdWRfdCkgXFx1MDAzY1xcdTAwM2MgUFVEX0lOREVYX1NJWkUpICtcXHRcXFxcXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2guaC00Ni0gKi9cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2guaDo0NzojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSBcXHUwMDI2XFx1MDAyNiAgZGVmaW5lZChDT05GSUdfUFBDXzY0S19QQUdFUylcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2guaC00OC0jZGVmaW5lIEhfUFVEX0NBQ0hFX0lOREVYXFx0KEhfUFVEX0lOREVYX1NJWkUgKyAxKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9tbXUtaGFzaC5oPTcxMj1zdHJ1Y3QgaGFzaF9tbV9jb250ZXh0IHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvbW11LWhhc2guaC03MjItXFx0c3RydWN0IHNsaWNlX21hc2sgbWFza180aztcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L21tdS1oYXNoLmg6NzIzOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9tbXUtaGFzaC5oLTcyNC1cXHRzdHJ1Y3Qgc2xpY2VfbWFzayBtYXNrXzE2bTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvbW11Lmg9MTY5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsaWNlX21hc2sgKnNsaWNlX21hc2tfZm9yX3NpemUobW1fY29udGV4dF90ICpjdHgsIGludCBwc2l6ZSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvbW11LmgtMTc0LSNlbmRpZlxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvbW11Lmg6MTc1OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9tbXUuaC0xNzYtXFx0aWYgKHBzaXplID09IE1NVV9QQUdFXzE2TSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGdhbGxvYy5oPTQ4PXN0YXRpYyBpbmxpbmUgcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGdhbGxvYy5oLTczLVxcdCAqL1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGdhbGxvYy5oOjc0OiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1BQQ182NEtfUEFHRVMpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BnYWxsb2MuaC03NS1cXHQoSF9QR0RfSU5ERVhfU0laRSA9PSBIX1BVRF9DQUNIRV9JTkRFWClcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS02NGsuaC01LSNpZm5kZWYgX19BU1NFTUJMRVJfX1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS02NGsuaDo2OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLTY0ay5oLTctXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLTY0ay5oOjg6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUtNjRrLmgtOS1cXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvc2xpY2UuaC03LSNpZmRlZiBDT05GSUdfUFBDXzY0U19IQVNIX01NVVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvc2xpY2UuaDo4OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9zbGljZS5oLTktI2RlZmluZSBIQVZFX0FSQ0hfSFVHRVRMQl9VTk1BUFBFRF9BUkVBXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTQtXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDo1OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC02LSNpbmNsdWRlIFxcdTAwM2Nhc20vcGFnZS5oXFx1MDAzZVxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD02Nz1pbnQgaHVnZV9wdGVwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTcyLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg6NzM6I2Vsc2UgLyogISBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC03NC1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfaHVnZXRsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD03OT1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGh1Z2V0bGJwYWdlX2luaXRfZGVmYXVsdHNpemUodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtODEtfVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg6ODI6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTgzLVxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaC0yNi0jaWZuZGVmIF9fQVNTRU1CTEVSX19cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oOjI3OiNpZm5kZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgtMjgtI2RlZmluZSBIUEFHRV9TSElGVCBQQUdFX1NISUZUXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTE0ND1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTQ4LVxcdGlmICgobW11X2hhc19mZWF0dXJlKE1NVV9GVFJfSFBURV9UQUJMRSkgXFx1MDAyNlxcdTAwMjYgIXJhZGl4X2VuYWJsZWQoKSkgfHxcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjE0OTpcXHQgICAgKElTX0VOQUJMRUQoQ09ORklHX1BQQ19FNTAwKSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0UpKSlcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE1MC1cXHRcXHRfX3VwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGVwKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtd2Fsay5oPTEwPXN0YXRpYyBpbmxpbmUgcHRlX3QgKmZpbmRfbGludXhfcHRlKHBnZF90ICpwZ2RpciwgdW5zaWduZWQgbG9uZyBlYSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtd2Fsay5oLTE4LSNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19WTSkgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS13YWxrLmg6MTk6XFx0IShkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIHx8IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLXdhbGsuaC0yMC1cXHQvKlxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYz01NDk9aW50IF9faW5pdCBmYWR1bXBfcmVzZXJ2ZV9tZW0odm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMtNTk0LVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM6NTk1OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy01OTYtXFx0XFx0LypcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlM9MTY2PXNldF9pdm9yOlxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUy0zMDctICovXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUzozMDg6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TLTMwOS0jZGVmaW5lIEZJTkRfUFRFXFx0XFxcXFxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUz02NjY9ZmluaXNoX3RsYl9sb2FkOlxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlM6NjY3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUy02NjgtXFx0Y21wd2lcXHQ2LCByMTAsIDBcXHRcXHRcXHQvKiBjaGVjayBmb3IgaHVnZSBwYWdlICovXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TLTcxOC1cXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TOjcxOTojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlMtNzIwLVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUz03Mzk9RU5EX01NVV9GVFJfU0VDVElPTl9JRlNFVChNTVVfRlRSX0JJR19QSFlTKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUy03NDItXFx0cmx3aW1pXFx0cjEyLCByMTEsIDMyLTE5LCAyNywgMzFcXHQvKiBleHRyYWN0IFdJTUdFIGZyb20gcHRlICovXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUzo3NDM6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TLTc0NC1cXHRiZXFcXHQ2LCAzZlxcdFxcdFxcdC8qIGRvbid0IG1hc2sgaWYgcGFnZSBpc24ndCBodWdlICovXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TPTc1Mz10bGJfd3JpdGVfZW50cnk6XFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfODV4eC5TLTc1Ny1cXHRtZnNwclxcdHIxMCwgU1BSTl9TUFJHX1RIUkVBRFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84NXh4LlM6NzU4OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzg1eHguUy03NTktXFx0YmVxXFx0NiwgOGYgLyogc2tpcCByZXN0b3JlIGZvciA0ayBwYWdlIGZhdWx0cyAqL1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19OVU1BKSArPSBudW1hLm9cXG5hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSlcXHQrPSBodWdldGxicGFnZS5vXFxuYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlLTE2LW9iai0kKENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUpICs9IGRtYS1ub25jb2hlcmVudC5vXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvTWFrZWZpbGU9MTI9ZW5kaWZcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvTWFrZWZpbGUtMTMtXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19IVUdFVExCX1BBR0UpXFx0Kz0gaHVnZXRsYnBhZ2Uub1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9NYWtlZmlsZS0xNS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX1BQQ19SQURJWF9NTVUpXFx0Kz0gcmFkaXhfcGd0YWJsZS5vIHJhZGl4X3RsYi5vXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L01ha2VmaWxlOjE3OmlmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1BQQ19SQURJWF9NTVUpXFx0Kz0gcmFkaXhfaHVnZXRsYnBhZ2Uub1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdGxiLmM9NDE9dm9pZCBocHRlX25lZWRfZmx1c2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3RsYi5jLTYyLVxcdGlmIChodWdlKSB7XFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdGxiLmM6NjM6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF90bGIuYy02NC1cXHRcXHRwc2l6ZSA9IGdldF9zbGljZV9wc2l6ZShtbSwgYWRkcik7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jPTg0Nj1zdGF0aWMgaW50IF9faW5pdCBodGFiX2R0X3NjYW5fcGFnZV9zaXplcyh1bnNpZ25lZCBsb25nIG5vZGUsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTkyMy1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jOjkyNDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmMtOTI1LS8qXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jPTkyOT1zdGF0aWMgaW50IF9faW5pdCBodGFiX2R0X3NjYW5faHVnZXBhZ2VfYmxvY2tzKHVuc2lnbmVkIGxvbmcgbm9kZSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmMtOTY2LX1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jOjk2NzojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3V0aWxzLmMtOTY4LVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdXRpbHMuYz05OTY9c3RhdGljIHZvaWQgX19pbml0IGh0YWJfc2Nhbl9wYWdlX3NpemVzKHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTEwMTktXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdXRpbHMuYzoxMDIwOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdXRpbHMuYy0xMDIxLVxcdGlmICghaHVnZXRsYl9kaXNhYmxlZCBcXHUwMDI2XFx1MDAyNiAhZWFybHlfcmFkaXhfZW5hYmxlZCgpICkge1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdXRpbHMuYy0xMDI0LVxcdH1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jOjEwMjU6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTEwMjYtfVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfdXRpbHMuYz0xNzE4PWludCBoYXNoX3BhZ2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgZWEsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTE4MzgtXFx0XFx0XFx0XFx0XFx0ICAgICB0cmFwLCBmbGFncywgc3NpemUsIHBzaXplKTtcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jOjE4Mzk6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF91dGlscy5jLTE4NDAtXFx0XFx0ZWxzZVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3RsYi5jPTYyNj12b2lkIHJhZGl4X19sb2NhbF9mbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3RsYi5jLTYyNy17XFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3RsYi5jOjYyODojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYy02MjktXFx0LyogbmVlZCB0aGUgcmV0dXJuIGZpeCBmb3Igbm9oYXNoLmMgKi9cXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYz05NDU9dm9pZCByYWRpeF9fZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdm1hZGRyKVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYy05NDYte1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYzo5NDc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfdGxiLmMtOTQ4LVxcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYz0xMTExPXZvaWQgcmFkaXhfX2ZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYy0xMTE0LXtcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfdGxiLmM6MTExNTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF90bGIuYy0xMTE2LVxcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jPTYzNj1FWFBPUlRfU1lNQk9MX0dQTChzbGljZV9nZXRfdW5tYXBwZWRfYXJlYSk7XFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmMtNjM3LVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jOjYzODojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jLTYzOS1zdGF0aWMgaW50IGZpbGVfdG9fcHNpemUoc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYz03NTc9dm9pZCBzbGljZV9zZXRfcmFuZ2VfcHNpemUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYy03NjctXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmM6NzY4OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmMtNzY5LS8qXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jPTYxNz12b2lkIF9faW5pdCBtbXVfZWFybHlfaW5pdF9kZXZ0cmVlKHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jLTY2NC1cXG5hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jOjY2NTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEUpKVxcbmFyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMtNjY2LVxcdFxcdGh1Z2V0bGJwYWdlX2luaXRfZGVmYXVsdHNpemUoKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfUkFORE9NSVpFX0JBU0UpXFx0Kz0ga2FzbHJfYm9va2Uub1xcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvTWFrZWZpbGU6OTppZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfUFBDX0U1MDApXFx0Kz0gZTUwMF9odWdldGxicGFnZS5vXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL3RsYi5jPTI3OD12b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHZtYWRkcilcXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL3RsYi5jLTI3OS17XFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC90bGIuYzoyODA6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL3RsYi5jLTI4MS1cXHRpZiAodm1hIFxcdTAwMjZcXHUwMDI2IGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYz0yNTU9aW50IHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYy0yNjgtXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYzoyNjk6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jLTI3MC1pbnQgaHVnZV9wdGVwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jPTM1Mz12b2lkIHNldF9odWdlX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMtMzgzLSNlbmRpZlxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmM6Mzg0OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYy0zODUtXFxuLS1cXG5hcmNoL3Jpc2N2L21tL01ha2VmaWxlPTE5PW9iai15ICs9IHBtZW0ub1xcbmFyY2gvcmlzY3YvbW0vTWFrZWZpbGUtMjAtXFxuYXJjaC9yaXNjdi9tbS9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKSArPSBodWdldGxicGFnZS5vXFxuYXJjaC9yaXNjdi9tbS9NYWtlZmlsZS0yMi1vYmotJChDT05GSUdfUFREVU1QKSArPSBwdGR1bXAub1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaD0xMTExPXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTExMTUtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMTE2OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMTE3LXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21raHVnZShwdGVfdCBwdGUpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTE1NjA9c3RhdGljIGlubGluZSBwdWRfdCBwdWRfbWtkaXJ0eShwdWRfdCBwdWQpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE1NjctXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNTY4OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTU2OS1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWFzc2FnZV9wZ3Byb3RfcG1kKHBncHJvdF90IHBncHJvdClcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTYxOD1zdGF0aWMgaW5saW5lIHBtZF90IG1rX3BtZF9waHlzKHVuc2lnbmVkIGxvbmcgcGh5c3BhZ2UsIHBncHJvdF90IHBncHJvdClcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTYyMi1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjE2MjM6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSB8fCBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNjI0LVxcbi0tXFxuYXJjaC9zMzkwL21tL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19ERUJVR19WSVJUVUFMKVxcdCs9IHBoeXNhZGRyLm9cXG5hcmNoL3MzOTAvbW0vTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSlcXHQrPSBodWdldGxicGFnZS5vXFxuYXJjaC9zMzkwL21tL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19QVERVTVApXFx0XFx0Kz0gZHVtcF9wYWdldGFibGVzLm9cXG4tLVxcbmFyY2gvc2gvY29uZmlncy9hcHNoNGFkMGFfZGVmY29uZmlnPTI1PUNPTkZJR19NRU1PUllfU0laRT0weDEwMDAwMDAwXFxuYXJjaC9zaC9jb25maWdzL2Fwc2g0YWQwYV9kZWZjb25maWc6MjY6Q09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQj15XFxuYXJjaC9zaC9jb25maWdzL2Fwc2g0YWQwYV9kZWZjb25maWctMjctQ09ORklHX0tTTT15XFxuLS1cXG5hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWc9MTY9Q09ORklHX01FTU9SWV9TSVpFPTB4MDgwMDAwMDBcXG5hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWc6MTc6Q09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQj15XFxuYXJjaC9zaC9jb25maWdzL3I3Nzg1cnBfZGVmY29uZmlnLTE4LUNPTkZJR19TSF9TVE9SRV9RVUVVRVM9eVxcbi0tXFxuYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnPTQ0PUNPTkZJR19OVU1BPXlcXG5hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4Nl9kZWZjb25maWc6NDU6Q09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0TUI9eVxcbmFyY2gvc2gvY29uZmlncy9zZGs3Nzg2X2RlZmNvbmZpZy00Ni1DT05GSUdfS1NNPXlcXG4tLVxcbmFyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnPTE3PUNPTkZJR19QTUI9eVxcbmFyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnOjE4OkNPTkZJR19IVUdFVExCX1BBR0VfU0laRV8xTUI9eVxcbmFyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnLTE5LUNPTkZJR19TSF9TVE9SRV9RVUVVRVM9eVxcbi0tXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgtMTQtXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmg6MTU6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0SylcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaC0xNi0jZGVmaW5lIEhQQUdFX1NISUZUXFx0MTZcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaDoxNzojZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV8yNTZLKVxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oLTE4LSNkZWZpbmUgSFBBR0VfU0hJRlRcXHQxOFxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oOjE5OiNlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQilcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaC0yMC0jZGVmaW5lIEhQQUdFX1NISUZUXFx0MjBcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaDoyMTojZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV80TUIpXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgtMjItI2RlZmluZSBIUEFHRV9TSElGVFxcdDIyXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmg6MjM6I2VsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRNQilcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaC0yNC0jZGVmaW5lIEhQQUdFX1NISUZUXFx0MjZcXG4tLVxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oLTI2LVxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oOjI3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgtMjgtI2RlZmluZSBIUEFHRV9TSVpFXFx0XFx0KDFVTCBcXHUwMDNjXFx1MDAzYyBIUEFHRV9TSElGVClcXG4tLVxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oPTk3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb3B5X3B0ZWFfYXR0cmlidXRlcyh1bnNpZ25lZCBsb25nIHgpXFxuLS1cXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaC0xMzYtI2lmIGRlZmluZWQoQ09ORklHX1gyVExCKVxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oOjEzNzojIGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0SylcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaC0xMzgtIyAgZGVmaW5lIF9QQUdFX1NaSFVHRVxcdChfUEFHRV9FWFRfRVNaMilcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaDoxMzk6IyBlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzI1NkspXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgtMTQwLSMgIGRlZmluZSBfUEFHRV9TWkhVR0VcXHQoX1BBR0VfRVhUX0VTWjAgfCBfUEFHRV9FWFRfRVNaMilcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaDoxNDE6IyBlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQilcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaC0xNDItIyAgZGVmaW5lIF9QQUdFX1NaSFVHRVxcdChfUEFHRV9FWFRfRVNaMCB8IF9QQUdFX0VYVF9FU1oxIHwgX1BBR0VfRVhUX0VTWjIpXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmg6MTQzOiMgZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV80TUIpXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgtMTQ0LSMgIGRlZmluZSBfUEFHRV9TWkhVR0VcXHQoX1BBR0VfRVhUX0VTWjMpXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmg6MTQ1OiMgZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NE1CKVxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oLTE0Ni0jICBkZWZpbmUgX1BBR0VfU1pIVUdFXFx0KF9QQUdFX0VYVF9FU1oyIHwgX1BBR0VfRVhUX0VTWjMpXFxuLS1cXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaC0xNDktI2Vsc2VcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaDoxNTA6IyBpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEspXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgtMTUxLSMgIGRlZmluZSBfUEFHRV9TWkhVR0VcXHQoX1BBR0VfU1oxKVxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oOjE1MjojIGVsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMU1CKVxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oLTE1My0jICBkZWZpbmUgX1BBR0VfU1pIVUdFXFx0KF9QQUdFX1NaMCB8IF9QQUdFX1NaMSlcXG4tLVxcbmFyY2gvc2gvbW0vTWFrZWZpbGU9Mzc9b2JqLSQoQ09ORklHX0RFQlVHX0ZTKVxcdFxcdCs9ICQoZGVidWdmcy15KVxcbmFyY2gvc2gvbW0vTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSlcXHQrPSBodWdldGxicGFnZS5vXFxuYXJjaC9zaC9tbS9NYWtlZmlsZS0zOS1vYmotJChDT05GSUdfUE1CKVxcdFxcdCs9IHBtYi5vXFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC02LVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC04LXN0cnVjdCBwdWRfaHVnZV9wYXRjaF9lbnRyeSB7XFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tdV82NC5oPTc1PXN0cnVjdCB0c2JfY29uZmlnIHtcXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vbW11XzY0LmgtODUtXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfNjQuaDo4NjojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tdV82NC5oLTg3LSNkZWZpbmUgTU1fVFNCX0hVR0VcXHQxXFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzY0Lmg9Mzc9c3RhdGljIGlubGluZSB2b2lkIHRzYl9jb250ZXh0X3N3aXRjaF9jdHgoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzY0LmgtNDEtXFx0XFx0XFx0ICAgICBcXHUwMDI2bW0tXFx1MDAzZWNvbnRleHQudHNiX2Jsb2NrW01NX1RTQl9CQVNFXSxcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzY0Lmg6NDI6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF82NC5oLTQzLVxcdFxcdFxcdCAgICAgKG1tLVxcdTAwM2Vjb250ZXh0LnRzYl9ibG9ja1tNTV9UU0JfSFVHRV0udHNiID9cXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGFnZV82NC5oLTIzLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGFnZV82NC5oOjI0OiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIHx8IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGFnZV82NC5oLTI1LSNkZWZpbmUgSFBBR0VfU0laRVxcdFxcdChfQUMoMSxVTCkgXFx1MDAzY1xcdTAwM2MgSFBBR0VfU0hJRlQpXFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BhZ2VfNjQuaC0zNC1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BhZ2VfNjQuaDozNTojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BhZ2VfNjQuaC0zNi1zdHJ1Y3QgcHRfcmVncztcXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oPTM3ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3dyaXRlKHB0ZV90IHB0ZSlcXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oLTM5MS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaDozOTI6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgtMzkzLXB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKTtcXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oPTExNTY9YXNtbGlua2FnZSB2b2lkIGRvX3NwYXJjNjRfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbi0tXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgtMTE1OS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaDoxMTYwOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgtMTE2MS1cXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oPTExNjk9ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHRlX2xlYWZfc2l6ZShwdGVfdCBwdGUpO1xcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oLTExNzAtXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0Lmg6MTE3MTojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oLTExNzItXFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RzYi5oPTc1PWV4dGVybiBzdHJ1Y3QgdHNiX3BoeXNfcGF0Y2hfZW50cnkgX190c2JfcGh5c19wYXRjaCwgX190c2JfcGh5c19wYXRjaF9lbmQ7XFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RzYi5oLTIwNi1cXHQgKi9cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RzYi5oOjIwNzojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RzYi5oLTIwOC0jZGVmaW5lIFVTRVJfUEdUQUJMRV9DSEVDS19QVURfSFVHRShWQUREUiwgUkVHMSwgUkVHMiwgRkFJTF9MQUJFTCwgUFRFX0xBQkVMKSBcXFxcXFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RzYi5oLTI0MS1cXHQgKi9cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RzYi5oOjI0MjojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RzYi5oLTI0My0jZGVmaW5lIFVTRVJfUEdUQUJMRV9DSEVDS19QTURfSFVHRShWQUREUiwgUkVHMSwgUkVHMiwgRkFJTF9MQUJFTCwgUFRFX0xBQkVMKSBcXFxcXFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9zdW40dl90bGJfbWlzcy5TPTE3NT1zdW40dl90c2JfbWlzc19jb21tb246XFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9zdW40dl90bGJfbWlzcy5TLTE3OS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9zdW40dl90bGJfbWlzcy5TOjE4MDojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG5hcmNoL3NwYXJjL2tlcm5lbC9zdW40dl90bGJfbWlzcy5TLTE4MS1cXHRtb3ZcXHRTQ1JBVENIUEFEX1VUU0JSRUcyLCAlZzVcXG4tLVxcbmFyY2gvc3BhcmMva2VybmVsL3RzYi5TPTUxPXRzYl9taXNzX3BhZ2VfdGFibGVfd2FsazpcXG4tLVxcbmFyY2gvc3BhcmMva2VybmVsL3RzYi5TLTU2LVxcdCAqL1xcbmFyY2gvc3BhcmMva2VybmVsL3RzYi5TOjU3OiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIHx8IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxcbmFyY2gvc3BhcmMva2VybmVsL3RzYi5TLTU4LVxcbi0tXFxuYXJjaC9zcGFyYy9rZXJuZWwvdHNiLlM9MTE1PXRzYl9taXNzX3BhZ2VfdGFibGVfd2Fsa19zdW40dl9mYXN0cGF0aDpcXG4tLVxcbmFyY2gvc3BhcmMva2VybmVsL3RzYi5TLTExOS1cXG5hcmNoL3NwYXJjL2tlcm5lbC90c2IuUzoxMjA6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXFxuYXJjaC9zcGFyYy9rZXJuZWwvdHNiLlMtMTIxLVxcdHNldGhpXFx0XFx0JXVoaShfUEFHRV9QTURfSFVHRSB8IF9QQUdFX1BVRF9IVUdFKSwgJWc3XFxuLS1cXG5hcmNoL3NwYXJjL21tL01ha2VmaWxlPTExPW9iai0kKENPTkZJR19TUEFSQzMyKSAgICs9IGxlb25fbW0ub1xcbi0tXFxuYXJjaC9zcGFyYy9tbS9NYWtlZmlsZS0xMy0jIE9ubHkgdXNlZCBieSBzcGFyYzY0XFxuYXJjaC9zcGFyYy9tbS9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKSArPSBodWdldGxicGFnZS5vXFxuYXJjaC9zcGFyYy9tbS9NYWtlZmlsZS0xNS1cXG4tLVxcbmFyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYz03OT1zdGF0aWMgdW5zaWduZWQgaW50IGdldF91c2VyX2luc24odW5zaWduZWQgbG9uZyB0cGMpXFxuLS1cXG5hcmNoL3NwYXJjL21tL2ZhdWx0XzY0LmMtMTA1LVxcbmFyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYzoxMDY6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXFxuYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jLTEwNy1cXHRpZiAoaXNfaHVnZXRsYl9wbWQoKnBtZHApKSB7XFxuLS1cXG5hcmNoL3NwYXJjL21tL2ZhdWx0XzY0LmM9MjY3PWFzbWxpbmthZ2Ugdm9pZCBfX2twcm9iZXMgZG9fc3BhcmM2NF9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYy00NzItXFx0XFx0dHNiX2dyb3cobW0sIE1NX1RTQl9CQVNFLCBtbV9yc3MpO1xcbmFyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYzo0NzM6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXFxuYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jLTQ3NC1cXHRtbV9yc3MgPSBtbS1cXHUwMDNlY29udGV4dC5odWdldGxiX3B0ZV9jb3VudCArIG1tLVxcdTAwM2Vjb250ZXh0LnRocF9wdGVfY291bnQ7XFxuLS1cXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYz0zMTM9c3RhdGljIHZvaWQgX191cGRhdGVfbW11X3RzYl9pbnNlcnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdHNiX2luZGV4LFxcbi0tXFxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMzI4LVxcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jOjMyOTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jLTMzMC1zdGF0aWMgaW50IF9faW5pdCBodWdldGxicGFnZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYz0zNTQ9Ym9vbCBfX2luaXQgYXJjaF9odWdldGxiX3ZhbGlkX3NpemUodW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMzg0LX1cXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYzozODU6I2VuZGlmXFx0LyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jLTM4Ni1cXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYz0zODc9dm9pZCB1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jLTQxMS1cXHRpc19odWdlX3RzYiA9IGZhbHNlO1xcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jOjQxMjojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYy00MTMtXFx0aWYgKG1tLVxcdTAwM2Vjb250ZXh0Lmh1Z2V0bGJfcHRlX2NvdW50IHx8IG1tLVxcdTAwM2Vjb250ZXh0LnRocF9wdGVfY291bnQpIHtcXG4tLVxcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jPTI4ODI9dm9pZCB1cGRhdGVfbW11X2NhY2hlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMjkxMi1cXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYzoyOTEzOiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIHx8IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jLTI5MTQtc3RhdGljIHZvaWQgY29udGV4dF9yZWxvYWQodm9pZCAqX19kYXRhKVxcbi0tXFxuYXJjaC9zcGFyYy9tbS90c2IuYz04Mz1zdGF0aWMgdm9pZCBfX2ZsdXNoX3RzYl9vbmUoc3RydWN0IHRsYl9iYXRjaCAqdGIsIHVuc2lnbmVkIGxvbmcgaGFzaF9zaGlmdCxcXG4tLVxcbmFyY2gvc3BhcmMvbW0vdHNiLmMtOTEtXFxuYXJjaC9zcGFyYy9tbS90c2IuYzo5MjojaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG5hcmNoL3NwYXJjL21tL3RzYi5jLTkzLXN0YXRpYyB2b2lkIF9fZmx1c2hfaHVnZV90c2Jfb25lX2VudHJ5KHVuc2lnbmVkIGxvbmcgdHNiLCB1bnNpZ25lZCBsb25nIHYsXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA5OjA5OjM1LjMwODM1OTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjMzNjAwMzA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZpcnR1YWwgTWFwcGluZyBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBqdW1wcyBvdXQuIEl0J3MgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiB0aGF0IGNvbnRyb2xzIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBoZXJlLiBUaGUgY2hhbmdlcyB0b3VjaCBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmhgLCBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYCwgYW5kIGBtbS92bWFsbG9jLmNgLlxuXG5JbiBgbW0vdm1hbGxvYy5jYCwgSSBzZWUgY29kZSBndWFyZGVkIGJ5IGBDT05GSUdfSFVHRVRMQl9QQUdFYCB0aGF0J3MgY2xlYXJseSByZWxhdGVkIHRvIGhhbmRsaW5nIGh1Z2UgcGFnZSBtYXBwaW5ncyB3aXRoaW4gdGhlIHZtYWxsb2MgYXJlbmEuIFRoZSBjb2RlIGNoZWNrcyBmb3IgYEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIGFuZCBgSEFWRV9BUkNIX0hVR0VfVk1BUGAsIHdoaWNoIGFwcGVhciB0byBiZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmVhdHVyZXMuIE9uIEFSTTY0LCB0aGVzZSBhcmUgaW1wbGljaXRseSBlbmFibGVkIGJ5IGBDT05GSUdfQVJNNjRgLCB3aGljaCBtZWFucyB0aGV5J3JlIGFsd2F5cyBhY3RpdmUuIFRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gYG51bV9jb250aWdfcHRlc2AgdG8gaGFuZGxlIHRoZSBzaXplIG9mIGEgcGFnZSBiZWluZyBtYXBwZWQuXG5cblNwZWNpZmljYWxseSwgaW4gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oYCwgYGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemVgIGhhcyBiZWVuIG1vZGlmaWVkLCBsaWtlbHkgdG8gc3VwcG9ydCBjb250aWd1b3VzIFBURSBtYXBwaW5ncy4gSXQgZGV0ZXJtaW5lcyB0aGUgb3B0aW1hbCBzaXplIGZvciBhIGNvbnRpZ3VvdXMgbWFwcGluZyBiYXNlZCBvbiBhbGlnbm1lbnQgYW5kIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlJ3MgY2FwYWJpbGl0aWVzLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHdoaWNoIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byB0aGlzIGNoYW5nZS4gYHZtYXBfc2V0X3B0ZXNgIGlzIGBfX2Fsd2F5c19pbmxpbmVgLCBzbyB0aGF0J3Mgbm90IGEgc3RhbmRhbG9uZSBmdW5jdGlvbiBpbiB0aGUgYmluYXJ5LiBgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkYCwgYHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYWAsIGFuZCBgdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGtgIGFyZSBhbGwgc3RhdGljLCBtZWFuaW5nIHRoZXkgYXJlIGxpa2VseSBpbnRlcm5hbGx5IGNhbGxlZC4gSG93ZXZlciwgdGhlc2UgY2FuIHN0aWxsIGJlIGZ1enplZCwgZGVwZW5kaW5nIG9uIHRoZSBmdXp6aW5nIHRvb2wuIEZpbmFsbHksIGB2bWFwYCwgYF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoYCwgYW5kIGB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hgIGFyZSBhbGwgZXhwb3J0ZWQgYW5kIHJlcHJlc2VudCB0aGUgZW50cnkgcG9pbnRzLlxuXG5DaGVja2luZyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIGBIVUdFVExCX1BBR0VgIGlzIHRoZSBjcml0aWNhbCBvbmUuIGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCBhbmQgYEhBVkVfQVJDSF9IVUdFX1ZNQVBgIGFyZSBhcmNoaXRlY3R1cmFsbHktc2VsZWN0ZWQgYW5kIHNvIHdlIHdvbid0IG5lZWQgdG8gc3BlY2lmeSB0aGVzZS4gYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIHR5cGljYWxseSBlbmFibGVkIGlmIGBDT05GSUdfSFVHRVRMQkZTYCBpcyBlbmFibGVkLiBUaGVyZWZvcmUsIG91ciBcIkVuYWJsZUNvbmZpZ3NcIiBsaXN0IHdpbGwgaW5jbHVkZSBcIkhVR0VUTEJfUEFHRVwiLlxuXG5JIHRoaW5rIHdlIHNob3VsZCBjb25jZW50cmF0ZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGB2bWFwYCwgYHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZGAsIGB2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWFgLCBgdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGtgLCBhbmQgYF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGVsZW1lbnRzIG9mIHRoZSBiYXRjaGVkIG1hcHBpbmcgbG9naWMsIGVzcGVjaWFsbHkgYHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZGAsIHdoaWNoIGFwcGVhcnMgdG8gYmUgdGhlIG1vc3Qgbm92ZWwgcGFydCBvZiB0aGUgY2hhbmdlLlxuXG5GaW5hbGx5LCByZWdhcmRpbmcgcG90ZW50aWFsIGZ1enppbmcsIHRoaXMgY2hhbmdlIHRvIHZpcnR1YWwgbWFwcGluZyBpcyBkZWZpbml0ZWx5IHdvcnRoIHRhcmdldGluZy4gSXQgaW50cm9kdWNlcyBuZXcgY29udGlndW91cyBtYXBwaW5ncyBhdCB0aGUgUFRFIGxldmVsIHdoaWNoIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSBjb3JlIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMuIFRoZSBmdW5jdGlvbnMgaW52b2x2ZWQgYXJlbid0IG9uIGFueSBob3QgcGF0aHMgc28gdGhlc2UgYXJlIGxpa2VseSBzYWZlIHRvIHRhcmdldCBpbiBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk5OCwiT3V0cHV0VG9rZW5zIjoxMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA5OjA5OjUxLjY0NDM2NTYxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMDU0NzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCX1BBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFwXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRcIixcbiAgICBcInZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYVwiLFxuICAgIFwidm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGtcIixcbiAgICBcIl9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBiYXRjaGVkIGNvbnRpZ3VvdXMgbWFwcGluZ3MgYXQgdGhlIFBURSBsZXZlbCBmb3Igdm1hcCwgbW9kaWZ5aW5nIGNvcmUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYy4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCX1BBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFwXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRcIixcbiAgICBcInZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYVwiLFxuICAgIFwidm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGtcIixcbiAgICBcIl9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBiYXRjaGVkIGNvbnRpZ3VvdXMgbWFwcGluZ3MgYXQgdGhlIFBURSBsZXZlbCBmb3Igdm1hcCwgbW9kaWZ5aW5nIGNvcmUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYy4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjcb7n[1] Phase: Succeeded StartedAt: 2026-07-06 09:10:03 +0000 UTC FinishedAt: 2026-07-06 09:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-06 09:10:03 +0000 UTC FinishedAt: 2026-07-06 09:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2] Phase: Succeeded StartedAt: 2026-07-06 09:10:03 +0000 UTC FinishedAt: 2026-07-06 13:27:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-06 09:10:03 +0000 UTC FinishedAt: 2026-07-06 13:27:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","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-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","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-06 09:10:03 +0000 UTC FinishedAt: 2026-07-06 09:10:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","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-06 09:10:03 +0000 UTC FinishedAt: 2026-07-06 09:10:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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-workflowjcb7n/series-workflowjcb7n-convert-artifact-1996303541/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","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-06 09:10:26 +0000 UTC FinishedAt: 2026-07-06 09:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","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-06 09:10:26 +0000 UTC FinishedAt: 2026-07-06 09:47:33 +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:*8f689f4c-4fd6-4112-aeb8-cbbf499544d7,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-workflowjcb7n/series-workflowjcb7n-convert-artifact-1996303541/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": "b1107942-7e5f-451e-9655-645877e477c0", "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-workflowjcb7n/series-workflowjcb7n-build-action-3429558427/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","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-06 09:10:26 +0000 UTC FinishedAt: 2026-07-06 09:47:21 +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:*8f689f4c-4fd6-4112-aeb8-cbbf499544d7,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-workflowjcb7n/series-workflowjcb7n-convert-artifact-1996303541/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": "b1107942-7e5f-451e-9655-645877e477c0", "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-workflowjcb7n/series-workflowjcb7n-build-action-3429558427/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","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-06 09:47:33 +0000 UTC FinishedAt: 2026-07-06 09:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","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-06 09:47:33 +0000 UTC FinishedAt: 2026-07-06 09:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","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-06 09:47:33 +0000 UTC FinishedAt: 2026-07-06 09:47:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","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-06 09:47:33 +0000 UTC FinishedAt: 2026-07-06 09:47:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","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-workflowjcb7n/series-workflowjcb7n-convert-artifact-4038520592/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","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-06 09:47:44 +0000 UTC FinishedAt: 2026-07-06 09:49:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","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-06 09:47:44 +0000 UTC FinishedAt: 2026-07-06 09:49:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b1107942-7e5f-451e-9655-645877e477c0,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-workflowjcb7n/series-workflowjcb7n-build-action-3429558427/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-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","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-06 09:49:48 +0000 UTC FinishedAt: 2026-07-06 09:49:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","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-06 09:49:48 +0000 UTC FinishedAt: 2026-07-06 09:49:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-06 09:49:48 +0000 UTC FinishedAt: 2026-07-06 10:23:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","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: Succeeded StartedAt: 2026-07-06 09:49:48 +0000 UTC FinishedAt: 2026-07-06 10:23:27 +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:*8f689f4c-4fd6-4112-aeb8-cbbf499544d7,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-workflowjcb7n/series-workflowjcb7n-convert-artifact-4038520592/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": "e5a31be7-bc41-4be8-95c9-606065b38afb", "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-workflowjcb7n/series-workflowjcb7n-build-action-54324108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","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: Succeeded StartedAt: 2026-07-06 09:49:48 +0000 UTC FinishedAt: 2026-07-06 10:23:15 +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:*8f689f4c-4fd6-4112-aeb8-cbbf499544d7,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-workflowjcb7n/series-workflowjcb7n-convert-artifact-4038520592/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": "e5a31be7-bc41-4be8-95c9-606065b38afb", "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-workflowjcb7n/series-workflowjcb7n-build-action-54324108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-06 10:23:27 +0000 UTC FinishedAt: 2026-07-06 10:23:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-06 10:23:27 +0000 UTC FinishedAt: 2026-07-06 10:23:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-06 10:23:27 +0000 UTC FinishedAt: 2026-07-06 10:25:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-06 10:23:27 +0000 UTC FinishedAt: 2026-07-06 10:25:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5a31be7-bc41-4be8-95c9-606065b38afb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,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-workflowjcb7n/series-workflowjcb7n-build-action-54324108/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-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-06 10:25:31 +0000 UTC FinishedAt: 2026-07-06 13:27:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-06 10:25:31 +0000 UTC FinishedAt: 2026-07-06 10:25:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-06 10:25:31 +0000 UTC FinishedAt: 2026-07-06 10:25:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-06 10:25:32 +0000 UTC FinishedAt: 2026-07-06 13:27:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*b1107942-7e5f-451e-9655-645877e477c0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5a31be7-bc41-4be8-95c9-606065b38afb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,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-workflowjcb7n/series-workflowjcb7n-build-action-3429558427/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,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-workflowjcb7n/series-workflowjcb7n-build-action-54324108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-06 10:25:32 +0000 UTC FinishedAt: 2026-07-06 10:25:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-06 10:25:32 +0000 UTC FinishedAt: 2026-07-06 10:25:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},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-workflowjcb7n/series-workflowjcb7n-convert-artifact-2565782025/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-06 10:25:32 +0000 UTC FinishedAt: 2026-07-06 10:25:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-06 10:25:55 +0000 UTC FinishedAt: 2026-07-06 13:27:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcb7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"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"],"focus":null,"focus_symbols":["vmap","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","__vmap_pages_range_noflush"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"295c283a-461d-4d2f-b4dd-121fc94c8a92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-06 10:25:55 +0000 UTC FinishedAt: 2026-07-06 13:27:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b1107942-7e5f-451e-9655-645877e477c0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5a31be7-bc41-4be8-95c9-606065b38afb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-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-workflowjcb7n/series-workflowjcb7n-build-action-3429558427/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,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-workflowjcb7n/series-workflowjcb7n-build-action-54324108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.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-workflowjcb7n/series-workflowjcb7n-convert-artifact-2565782025/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,}