Name: series-workflow49hdt Phase: Succeeded StartedAt: 2026-07-03 02:15:09 +0000 UTC FinishedAt: 2026-07-03 06:28:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[0] Phase: Succeeded StartedAt: 2026-07-03 02:15:09 +0000 UTC FinishedAt: 2026-07-03 02:31:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[0].run-triage Phase: Succeeded StartedAt: 2026-07-03 02:15:09 +0000 UTC FinishedAt: 2026-07-03 02:31:56 +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": "f4b4fac1867633ac17c35842f03933f6a7a4425f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KEXEC_HANDOVER" ], "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": "f4b4fac1867633ac17c35842f03933f6a7a4425f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KEXEC_HANDOVER" ], "series_id": "713d9168-6cd6-437c-9a69-b2bd109e2e23" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "kho_split_preserved_pages", "kho_preserve_pages", "kho_unpreserve_pages", "kho_radix_add_page", "kho_radix_del_page", "kho_radix_walk_tree", "kho_preserve_folio", "kho_unpreserve_folio" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAzIDAyOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tFWEVDX0hBTkRPVkVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyYjMzQ7LAogICAgJiMzNDtraG9fcHJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7a2hvX3VucHJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7a2hvX3JhZGl4X2FkZF9wYWdlJiMzNDssCiAgICAmIzM0O2tob19yYWRpeF9kZWxfcGFnZSYjMzQ7LAogICAgJiMzNDtraG9fcmFkaXhfd2Fsa190cmVlJiMzNDssCiAgICAmIzM0O2tob19wcmVzZXJ2ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtraG9fdW5wcmVzZXJ2ZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCBhbmQgbW9kaWZpZXMgdGhlIEtleGVjIEhhbmRvdmVyIChLSE8pIHJhZGl4IHRyZWUgbG9naWMgdG8gc3VwcG9ydCBzcGxpdCBwYWdlcy4gSXQgY2hhbmdlcyBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBraG9fcmFkaXhfYWRkX3BhZ2VgLCBga2hvX3JhZGl4X2RlbF9wYWdlYCwgYGtob19wcmVzZXJ2ZV9wYWdlc2AsIGFuZCBga2hvX3VucHJlc2VydmVfcGFnZXNgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwmIzM5O3MgbGl2ZSB1cGRhdGUgbWVjaGFuaXNtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmFkaXggdHJlZSBhbmQgcGFnZSBwcmVzZXJ2YXRpb24gbG9naWMgaGFuZGxlcyBzcGxpdCBwYWdlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDI6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkMzRiMmQ0NDZkMWZmMjk5MmI1MDcxNjJiYjBmMmNmMWMzNzQ2YTBmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAwMjoyODoxOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcbmluZGV4IDg5NjhjNTZkMmQ3M2UxLi40NTJlMzhiYjIwNzY4MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEAgaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuJiM0MztpbnQga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbiBpbnQga2hvX3ByZXNlcnZlX3ZtYWxsb2Modm9pZCAqcHRyLCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XG4gdm9pZCBraG9fdW5wcmVzZXJ2ZV92bWFsbG9jKHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKTtcbiB2b2lkICpraG9fYWxsb2NfcHJlc2VydmUoc2l6ZV90IHNpemUpO1xuQEAgLTY1LDYgJiM0Mzs2NiwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcykgeyB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9yZGVyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0cixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oIGIvaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oXG5pbmRleCA4NGU5MThiOTZlNTNkZi4uOTI0NGEzZjdhMmQ0NzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaFxuQEAgLTM0LDE2ICYjNDM7MzQsMjIgQEAgc3RydWN0IGtob19yYWRpeF90cmVlIHtcbiBcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0cyB0aGUgdHJlZSYjMzk7cyBzdHJ1Y3R1cmUgYW5kIHJvb3QgcG9pbnRlciAqL1xuIH07XG4gXG4mIzQzO2VudW0ga2hvX3BhZ2VfdHlwZSB7XG4mIzQzO1x0S0hPX1BBR0VfQ09OVElHID0gMCxcbiYjNDM7XHRLSE9fUEFHRV9TUExJVCxcbiYjNDM7fTtcbiYjNDM7XG4gdHlwZWRlZiBpbnQgKCpraG9fcmFkaXhfdHJlZV93YWxrX2NhbGxiYWNrX3QpKHBoeXNfYWRkcl90IHBoeXMsXG4tXHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBvcmRlcik7XG4mIzQzO1x0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSk7XG4gXG4gI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxuIFxuIGludCBraG9fcmFkaXhfYWRkX3BhZ2Uoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLCB1bnNpZ25lZCBsb25nIHBmbixcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBvcmRlcik7XG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSk7XG4gXG4gdm9pZCBraG9fcmFkaXhfZGVsX3BhZ2Uoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLCB1bnNpZ25lZCBsb25nIHBmbixcbi1cdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIpO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKTtcbiBcbiBpbnQga2hvX3JhZGl4X3dhbGtfdHJlZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXG4gXHRcdFx0a2hvX3JhZGl4X3RyZWVfd2Fsa19jYWxsYmFja190IGNiKTtcbkBAIC01MSwxMyAmIzQzOzU3LDE0IEBAIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbiAjZWxzZSAgLyogI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGtob19yYWRpeF9hZGRfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsIGxvbmcgcGZuLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgb3JkZXIpXG4mIzQzO1x0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKVxuIHtcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGtob19yYWRpeF9kZWxfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXG4tXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyKSB7IH1cbiYjNDM7XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyLFxuJiM0MztcdFx0XHRcdCAgICAgIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKSB7IH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbiBcdFx0XHRcdCAgICAgIGtob19yYWRpeF90cmVlX3dhbGtfY2FsbGJhY2tfdCBjYilcbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuaW5kZXggNDgzNGE4MDk5ODVhYjcuLmVhMDgyNDg5MDFiNTUxIDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuQEAgLTQzLDE4ICYjNDM7NDMsMjIgQEBcbiBcbiAvKlxuICAqIEtITyB1c2VzIHBhZ2UtXHUwMDNlcHJpdmF0ZSwgd2hpY2ggaXMgYW4gdW5zaWduZWQgbG9uZywgdG8gc3RvcmUgcGFnZSBtZXRhZGF0YS5cbi0gKiBVc2UgaXQgdG8gc3RvcmUgYm90aCB0aGUgbWFnaWMgYW5kIHRoZSBvcmRlci5cbiYjNDM7ICogVXNlIGl0IHRvIHN0b3JlIHRoZSBtYWdpYywgdGhlIG9yZGVyLCBhbmQgdGhlIHR5cGUgYml0LlxuICAqL1xuIHVuaW9uIGtob19wYWdlX2luZm8ge1xuIFx0dW5zaWduZWQgbG9uZyBwYWdlX3ByaXZhdGU7XG4gXHRzdHJ1Y3Qge1xuLVx0XHR1bnNpZ25lZCBpbnQgb3JkZXI7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgb3JkZXIgOiAzMTtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCB0eXBlICA6IDE7XG4gXHRcdHVuc2lnbmVkIGludCBtYWdpYztcbiBcdH07XG4gfTtcbiBcbiBzdGF0aWNfYXNzZXJ0KHNpemVvZih1bmlvbiBraG9fcGFnZV9pbmZvKSA9PSBzaXplb2YoKChzdHJ1Y3QgcGFnZSAqKTApLVx1MDAzZXByaXZhdGUpKTtcbiBcbiYjNDM7I2RlZmluZSBLSE9fS0VZX1RZUEVfU0hJRlQgNjNcbiYjNDM7I2RlZmluZSBLSE9fS0VZX1RZUEVfTUFTSyAgQklUKEtIT19LRVlfVFlQRV9TSElGVClcbiYjNDM7XG4gc3RhdGljIGJvb2wga2hvX2VuYWJsZSBfX3JvX2FmdGVyX2luaXQgPSBJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVCk7XG4gXG4gYm9vbCBraG9faXNfZW5hYmxlZCh2b2lkKVxuQEAgLTg1LDQyICYjNDM7ODksNTIgQEAgc3RhdGljIHN0cnVjdCBraG9fb3V0IGtob19vdXQgPSB7XG4gfTtcbiBcbiAvKipcbi0gKiBraG9fcmFkaXhfZW5jb2RlX2tleSAtIEVuY29kZXMgYSBwaHlzaWNhbCBhZGRyZXNzIGFuZCBvcmRlciBpbnRvIGEgcmFkaXgga2V5LlxuJiM0MzsgKiBraG9fcmFkaXhfZW5jb2RlX2tleSAtIEVuY29kZXMgYSBwaHlzaWNhbCBhZGRyZXNzLCBvcmRlciBhbmQgdHlwZSBpbnRvIGEgcmFkaXgga2V5LlxuICAqIEBwaHlzOiBUaGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcGFnZS5cbiAgKiBAb3JkZXI6IFRoZSBvcmRlciBvZiB0aGUgcGFnZS5cbiYjNDM7ICogQHR5cGU6IFRoZSBwYWdlIHR5cGUuXG4gICpcbi0gKiBUaGlzIGZ1bmN0aW9uIGNvbWJpbmVzIGEgcGFnZSYjMzk7cyBwaHlzaWNhbCBhZGRyZXNzIGFuZCBpdHMgb3JkZXIgaW50byBhXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gY29tYmluZXMgYSBwYWdlJiMzOTtzIHBoeXNpY2FsIGFkZHJlc3MsIGl0cyBvcmRlciwgYW5kIGl0cyB0eXBlIGludG8gYVxuICAqIHNpbmdsZSB1bnNpZ25lZCBsb25nLCB3aGljaCBpcyB1c2VkIGFzIGEga2V5IGZvciBhbGwgcmFkaXggdHJlZVxuICAqIG9wZXJhdGlvbnMuXG4gICpcbiAgKiBSZXR1cm46IFRoZSBlbmNvZGVkIHVuc2lnbmVkIGxvbmcgcmFkaXgga2V5LlxuICAqL1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGtob19yYWRpeF9lbmNvZGVfa2V5KHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGludCBvcmRlcilcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcga2hvX3JhZGl4X2VuY29kZV9rZXkocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgaW50IG9yZGVyLFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSlcbiB7XG4gXHQvKiBPcmRlciBiaXRzIHBhcnQgKi9cbiBcdHVuc2lnbmVkIGxvbmcgaCA9IDFVTCBcdTAwM2NcdTAwM2MgKEtIT19PUkRFUl8wX0xPRzIgLSBvcmRlcik7XG4gXHQvKiBTaGlmdGVkIHBoeXNpY2FsIGFkZHJlc3MgcGFydCAqL1xuIFx0dW5zaWduZWQgbG9uZyBsID0gcGh5cyBcdTAwM2VcdTAwM2UgKFBBR0VfU0hJRlQgJiM0Mzsgb3JkZXIpO1xuJiM0MztcdC8qIFR5cGUgYml0IHBhcnQgKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nIHQgPSAodW5zaWduZWQgbG9uZyl0eXBlIFx1MDAzY1x1MDAzYyBLSE9fS0VZX1RZUEVfU0hJRlQ7XG4gXG4tXHRyZXR1cm4gaCB8IGw7XG4mIzQzO1x0cmV0dXJuIGggfCBsIHwgdDtcbiB9XG4gXG4gLyoqXG4tICoga2hvX3JhZGl4X2RlY29kZV9rZXkgLSBEZWNvZGVzIGEgcmFkaXgga2V5IGJhY2sgaW50byBhIHBoeXNpY2FsIGFkZHJlc3MgYW5kIG9yZGVyLlxuJiM0MzsgKiBraG9fcmFkaXhfZGVjb2RlX2tleSAtIERlY29kZXMgYSByYWRpeCBrZXkgYmFjayBpbnRvIHBoeXNpY2FsIGFkZHJlc3MsIG9yZGVyLCBhbmQgdHlwZS5cbiAgKiBAa2V5OiBUaGUgdW5zaWduZWQgbG9uZyBrZXkgdG8gZGVjb2RlLlxuICAqIEBvcmRlcjogQW4gb3V0cHV0IHBhcmFtZXRlciwgYSBwb2ludGVyIHRvIGFuIHVuc2lnbmVkIGludCB3aGVyZSB0aGUgZGVjb2RlZFxuICAqICAgICAgICAgcGFnZSBvcmRlciB3aWxsIGJlIHN0b3JlZC5cbiYjNDM7ICogQHR5cGU6IEFuIG91dHB1dCBwYXJhbWV0ZXIsIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZGVjb2RlZCB0eXBlIHdpbGwgYmUgc3RvcmVkLlxuICAqXG4gICogVGhpcyBmdW5jdGlvbiByZXZlcnNlcyB0aGUgZW5jb2RpbmcgcGVyZm9ybWVkIGJ5IGtob19yYWRpeF9lbmNvZGVfa2V5KCksXG4tICogZXh0cmFjdGluZyB0aGUgb3JpZ2luYWwgcGh5c2ljYWwgYWRkcmVzcyBhbmQgcGFnZSBvcmRlciBmcm9tIGEgZ2l2ZW4ga2V5LlxuJiM0MzsgKiBleHRyYWN0aW5nIHRoZSBvcmlnaW5hbCBwaHlzaWNhbCBhZGRyZXNzLCBwYWdlIG9yZGVyLCBhbmQgdHlwZSBmcm9tIGEgZ2l2ZW4ga2V5LlxuICAqXG4gICogUmV0dXJuOiBUaGUgZGVjb2RlZCBwaHlzaWNhbCBhZGRyZXNzLlxuICAqL1xuLXN0YXRpYyBwaHlzX2FkZHJfdCBraG9fcmFkaXhfZGVjb2RlX2tleSh1bnNpZ25lZCBsb25nIGtleSwgdW5zaWduZWQgaW50ICpvcmRlcilcbiYjNDM7c3RhdGljIHBoeXNfYWRkcl90IGtob19yYWRpeF9kZWNvZGVfa2V5KHVuc2lnbmVkIGxvbmcga2V5LCB1bnNpZ25lZCBpbnQgKm9yZGVyLFxuJiM0MztcdFx0XHRcdFx0ZW51bSBraG9fcGFnZV90eXBlICp0eXBlKVxuIHtcbi1cdHVuc2lnbmVkIGludCBvcmRlcl9iaXQgPSBmbHM2NChrZXkpO1xuJiM0MztcdHVuc2lnbmVkIGludCBvcmRlcl9iaXQ7XG4gXHRwaHlzX2FkZHJfdCBwaHlzO1xuIFxuJiM0MztcdCp0eXBlID0gKGtleSBcdTAwMjYgS0hPX0tFWV9UWVBFX01BU0spIFx1MDAzZVx1MDAzZSBLSE9fS0VZX1RZUEVfU0hJRlQ7XG4mIzQzO1x0a2V5IFx1MDAyNj0gfktIT19LRVlfVFlQRV9NQVNLO1xuJiM0MztcbiYjNDM7XHRvcmRlcl9iaXQgPSBmbHM2NChrZXkpO1xuIFx0Lyogb3JkZXJfYml0IGlzIG51bWJlcmVkIHN0YXJ0aW5nIGF0IDEgZnJvbSBmbHM2NCAqL1xuIFx0Km9yZGVyID0gS0hPX09SREVSXzBfTE9HMiAtIG9yZGVyX2JpdCAmIzQzOyAxO1xuIFx0LyogVGhlIG9yZGVyIGlzIGRpc2NhcmRlZCBieSB0aGUgc2hpZnQgKi9cbkBAIC0xNDgsNiAmIzQzOzE2Miw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGtob19yYWRpeF9nZXRfdGFibGVfaW5kZXgodW5zaWduZWQgbG9uZyBrZXksXG4gICogQHRyZWU6IFRoZSBLSE8gcmFkaXggdHJlZS5cbiAgKiBAcGZuOiBUaGUgcGFnZSBmcmFtZSBudW1iZXIgb2YgdGhlIHBhZ2UgdG8gcHJlc2VydmUuXG4gICogQG9yZGVyOiBUaGUgb3JkZXIgb2YgdGhlIHBhZ2UuXG4mIzQzOyAqIEB0eXBlOiBUaGUgcGFnZSB0eXBlLlxuICAqXG4gICogVGhpcyBmdW5jdGlvbiB0cmF2ZXJzZXMgdGhlIHJhZGl4IHRyZWUgYmFzZWQgb24gdGhlIGtleSBkZXJpdmVkIGZyb20gQHBmblxuICAqIGFuZCBAb3JkZXIuIEl0IHNldHMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSBsZWFmIGJpdG1hcCB0byBtYXJrIHRoZVxuQEAgLTE1NywxMSAmIzQzOzE3MiwxMiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBraG9fcmFkaXhfZ2V0X3RhYmxlX2luZGV4KHVuc2lnbmVkIGxvbmcga2V5LFxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgKi9cbiBpbnQga2hvX3JhZGl4X2FkZF9wYWdlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBvcmRlcixcbiYjNDM7XHRcdCAgICAgICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSlcbiB7XG4gXHQvKiBOZXdseSBhbGxvY2F0ZWQgbm9kZXMgZm9yIGVycm9yIGNsZWFudXAgKi9cbiBcdHN0cnVjdCBraG9fcmFkaXhfbm9kZSAqaW50ZXJtZWRpYXRlX25vZGVzW0tIT19UUkVFX01BWF9ERVBUSF0gPSB7IDAgfTtcbi1cdHVuc2lnbmVkIGxvbmcga2V5ID0ga2hvX3JhZGl4X2VuY29kZV9rZXkoUEZOX1BIWVMocGZuKSwgb3JkZXIpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcga2V5ID0ga2hvX3JhZGl4X2VuY29kZV9rZXkoUEZOX1BIWVMocGZuKSwgb3JkZXIsIHR5cGUpO1xuIFx0c3RydWN0IGtob19yYWRpeF9ub2RlICphbmNob3Jfbm9kZSA9IE5VTEw7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X25vZGUgKm5vZGUgPSB0cmVlLVx1MDAzZXJvb3Q7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X25vZGUgKm5ld19ub2RlO1xuQEAgLTIzMSwxNSAmIzQzOzI0NywxNiBAQCBFWFBPUlRfU1lNQk9MX0dQTChraG9fcmFkaXhfYWRkX3BhZ2UpO1xuICAqIEB0cmVlOiBUaGUgS0hPIHJhZGl4IHRyZWUuXG4gICogQHBmbjogVGhlIHBhZ2UgZnJhbWUgbnVtYmVyIG9mIHRoZSBwYWdlIHRvIHVucHJlc2VydmUuXG4gICogQG9yZGVyOiBUaGUgb3JkZXIgb2YgdGhlIHBhZ2UuXG4mIzQzOyAqIEB0eXBlOiBUaGUgcGFnZSB0eXBlLlxuICAqXG4gICogVGhpcyBmdW5jdGlvbiB0cmF2ZXJzZXMgdGhlIHJhZGl4IHRyZWUgYW5kIGNsZWFycyB0aGUgYml0IGNvcnJlc3BvbmRpbmcgdG9cbiAgKiB0aGUgcGFnZSwgZWZmZWN0aXZlbHkgcmVtb3ZpbmcgaXRzIFwmIzM0O3ByZXNlcnZlZFwmIzM0OyBzdGF0dXMuIEl0IGRvZXMgbm90IGZyZWVcbiAgKiB0aGUgdHJlZSYjMzk7cyBpbnRlcm1lZGlhdGUgbm9kZXMsIGV2ZW4gaWYgdGhleSBiZWNvbWUgZW1wdHkuXG4gICovXG4gdm9pZCBraG9fcmFkaXhfZGVsX3BhZ2Uoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLCB1bnNpZ25lZCBsb25nIHBmbixcbi1cdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIpXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBvcmRlciwgZW51bSBraG9fcGFnZV90eXBlIHR5cGUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBrZXkgPSBraG9fcmFkaXhfZW5jb2RlX2tleShQRk5fUEhZUyhwZm4pLCBvcmRlcik7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBrZXkgPSBraG9fcmFkaXhfZW5jb2RlX2tleShQRk5fUEhZUyhwZm4pLCBvcmRlciwgdHlwZSk7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X25vZGUgKm5vZGUgPSB0cmVlLVx1MDAzZXJvb3Q7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X2xlYWYgKmxlYWY7XG4gXHR1bnNpZ25lZCBpbnQgaSwgaWR4O1xuQEAgLTI3NywxNCAmIzQzOzI5NCwxNSBAQCBzdGF0aWMgaW50IGtob19yYWRpeF93YWxrX2xlYWYoc3RydWN0IGtob19yYWRpeF9sZWFmICpsZWFmLFxuIFx0XHRcdCAgICAgICBraG9fcmFkaXhfdHJlZV93YWxrX2NhbGxiYWNrX3QgY2IpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyAqYml0bWFwID0gKHVuc2lnbmVkIGxvbmcgKilsZWFmO1xuJiM0MztcdGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlO1xuIFx0dW5zaWduZWQgaW50IG9yZGVyO1xuIFx0cGh5c19hZGRyX3QgcGh5cztcbiBcdHVuc2lnbmVkIGludCBpO1xuIFx0aW50IGVycjtcbiBcbiBcdGZvcl9lYWNoX3NldF9iaXQoaSwgYml0bWFwLCBQQUdFX1NJWkUgKiBCSVRTX1BFUl9CWVRFKSB7XG4tXHRcdHBoeXMgPSBraG9fcmFkaXhfZGVjb2RlX2tleShrZXkgfCBpLCBcdTAwMjZvcmRlcik7XG4tXHRcdGVyciA9IGNiKHBoeXMsIG9yZGVyKTtcbiYjNDM7XHRcdHBoeXMgPSBraG9fcmFkaXhfZGVjb2RlX2tleShrZXkgfCBpLCBcdTAwMjZvcmRlciwgXHUwMDI2dHlwZSk7XG4mIzQzO1x0XHRlcnIgPSBjYihwaHlzLCBvcmRlciwgdHlwZSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0zNTcsMTEgJiM0MzszNzUsMTggQEAgaW50IGtob19yYWRpeF93YWxrX3RyZWUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChraG9fcmFkaXhfd2Fsa190cmVlKTtcbiBcbi0vKiBGb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIDAtb3JkZXIgcGFnZXMuICovXG4tc3RhdGljIHZvaWQga2hvX2luaXRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4mIzQzOy8qIEZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgcGFnZXMuICovXG4mIzQzO3N0YXRpYyB2b2lkIGtob19yZXN0b3JlX3JlZmNvdW50cyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiYjNDM7XHRcdFx0XHQgIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKVxuIHtcbi1cdGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UgJiM0MzsgaSwgMSk7XG4mIzQzO1x0LyogSGVhZCBwYWdlIGFsd2F5cyBnZXRzIHJlZmNvdW50IG9mIDEuICovXG4mIzQzO1x0c2V0X3BhZ2VfY291bnQocGFnZSwgMSk7XG4mIzQzO1x0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDE7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGNvdW50ID0gKHR5cGUgPT0gS0hPX1BBR0VfU1BMSVQpID8gMSA6IDA7XG4mIzQzO1xuJiM0MztcdFx0c2V0X3BhZ2VfY291bnQocGFnZSAmIzQzOyBpLCBjb3VudCk7XG4gXHRcdC8qIENsZWFyIGVhY2ggcGFnZSYjMzk7cyBjb2RldGFnIHRvIGF2b2lkIGFjY291bnRpbmcgbWlzbWF0Y2guICovXG4gXHRcdGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlICYjNDM7IGkpO1xuIFx0fVxuQEAgLTM2OSwxNiAmIzQzOzM5NCw3IEBAIHN0YXRpYyB2b2lkIGtob19pbml0X3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuIFxuIHN0YXRpYyB2b2lkIGtob19pbml0X2ZvbGlvKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9ICgxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4tXG4tXHQvKiBIZWFkIHBhZ2UgZ2V0cyByZWZjb3VudCBvZiAxLiAqL1xuLVx0c2V0X3BhZ2VfY291bnQocGFnZSwgMSk7XG4tXHQvKiBDbGVhciBoZWFkIHBhZ2UmIzM5O3MgY29kZXRhZyB0byBhdm9pZCBhY2NvdW50aW5nIG1pc21hdGNoLiAqL1xuLVx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xuLVxuLVx0LyogRm9yIGhpZ2hlciBvcmRlciBmb2xpb3MsIHRhaWwgcGFnZXMgZ2V0IGEgcGFnZSBjb3VudCBvZiB6ZXJvLiAqL1xuLVx0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAxOyBpIFx1MDAzYyBucl9wYWdlczsgaSYjNDM7JiM0MzspXG4tXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UgJiM0MzsgaSwgMCk7XG4mIzQzO1x0a2hvX3Jlc3RvcmVfcmVmY291bnRzKHBhZ2UsIDEgXHUwMDNjXHUwMDNjIG9yZGVyLCBLSE9fUEFHRV9DT05USUcpO1xuIFxuIFx0aWYgKG9yZGVyIFx1MDAzZSAwKVxuIFx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgb3JkZXIpO1xuQEAgLTQwMywxMyAmIzQzOzQxOSwyMCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2UocGh5c19hZGRyX3QgcGh5cywgYm9vbCBpc19mb2xpbylcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHRucl9wYWdlcyA9ICgxIFx1MDAzY1x1MDAzYyBpbmZvLm9yZGVyKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHdlIHdhbnQgdG8gcmVzdG9yZSBhIGZvbGlvLCBidXQgdGhlIG1lbW9yeSB3YXMgc3BsaXQgaW4gdGhlXG4mIzQzO1x0ICogcHJldmlvdXMga2VybmVsLCBzb21ldGhpbmcgaXMgd3JvbmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShpc19mb2xpbyBcdTAwMjZcdTAwMjYgaW5mby50eXBlID09IEtIT19QQUdFX1NQTElUKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiBcdC8qIENsZWFyIHByaXZhdGUgdG8gbWFrZSBzdXJlIGxhdGVyIHJlc3RvcmVzIG9uIHRoaXMgcGFnZSBlcnJvciBvdXQuICovXG4gXHRwYWdlLVx1MDAzZXByaXZhdGUgPSAwO1xuIFxuIFx0aWYgKGlzX2ZvbGlvKVxuIFx0XHRraG9faW5pdF9mb2xpbyhwYWdlLCBpbmZvLm9yZGVyKTtcbiBcdGVsc2Vcbi1cdFx0a2hvX2luaXRfcGFnZXMocGFnZSwgbnJfcGFnZXMpO1xuJiM0MztcdFx0a2hvX3Jlc3RvcmVfcmVmY291bnRzKHBhZ2UsIG5yX3BhZ2VzLCBpbmZvLnR5cGUpO1xuIFxuIFx0YWRqdXN0X21hbmFnZWRfcGFnZV9jb3VudChwYWdlLCBucl9wYWdlcyk7XG4gXHRyZXR1cm4gcGFnZTtcbkBAIC00ODUsNyAmIzQzOzUwOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19pbml0IGtob19nZXRfcHJlc2VydmVkX3BhZ2UocGh5c19hZGRyX3QgcGh5cyxcbiB9XG4gXG4gc3RhdGljIGludCBfX2luaXQga2hvX3ByZXNlcnZlZF9tZW1vcnlfcmVzZXJ2ZShwaHlzX2FkZHJfdCBwaHlzLFxuLVx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IG9yZGVyKVxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBvcmRlcixcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSlcbiB7XG4gXHR1bmlvbiBraG9fcGFnZV9pbmZvIGluZm87XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbkBAIC00OTksNiAmIzQzOzUyMyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGtob19wcmVzZXJ2ZWRfbWVtb3J5X3Jlc2VydmUocGh5c19hZGRyX3QgcGh5cyxcbiBcdG1lbWJsb2NrX3Jlc2VydmVkX21hcmtfbm9pbml0KHBoeXMsIHN6KTtcbiBcdGluZm8ubWFnaWMgPSBLSE9fUEFHRV9NQUdJQztcbiBcdGluZm8ub3JkZXIgPSBvcmRlcjtcbiYjNDM7XHRpbmZvLnR5cGUgPSB0eXBlO1xuIFx0cGFnZS1cdTAwM2Vwcml2YXRlID0gaW5mby5wYWdlX3ByaXZhdGU7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04NTksNyAmIzQzOzg4NCw3IEBAIGludCBraG9fcHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0cmV0dXJuIGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTtcbiYjNDM7XHRyZXR1cm4ga2hvX3JhZGl4X2FkZF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIsIEtIT19QQUdFX0NPTlRJRyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob19wcmVzZXJ2ZV9mb2xpbyk7XG4gXG5AQCAtODc3LDcgJiM0Mzs5MDIsNyBAQCB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRjb25zdCB1bnNpZ25lZCBsb25nIHBmbiA9IGZvbGlvX3Bmbihmb2xpbyk7XG4gXHRjb25zdCB1bnNpZ25lZCBpbnQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4gXG4tXHRraG9fcmFkaXhfZGVsX3BhZ2UodHJlZSwgcGZuLCBvcmRlcik7XG4mIzQzO1x0a2hvX3JhZGl4X2RlbF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIsIEtIT19QQUdFX0NPTlRJRyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX2ZvbGlvKTtcbiBcbkBAIC04OTgsMTUgJiM0Mzs5MjMsMjkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdHJldHVybiBvcmRlcjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGtob19pc19wYWdlX3NwbGl0KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSByZWZjb3VudCBvZiB0aGUgc2Vjb25kIHBhZ2UgaXMgbm9uLXplcm8sIHRoaXMgYmxvY2tcbiYjNDM7XHQgKiBoYXMgYmVlbiBzcGxpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAob3JkZXIgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHBhZ2VfcmVmX2NvdW50KHBmbl90b19wYWdlKHBmbiAmIzQzOyAxKSkgIT0gMClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgX19raG9fdW5wcmVzZXJ2ZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXG4gXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuIHtcbi1cdHVuc2lnbmVkIGludCBvcmRlcjtcbi1cbiBcdHdoaWxlIChwZm4gXHUwMDNjIGVuZF9wZm4pIHtcbi1cdFx0b3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xuJiM0MztcdFx0dW5zaWduZWQgaW50IG9yZGVyID0gX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIocGZuLCBlbmRfcGZuKTtcbiYjNDM7XHRcdGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlO1xuIFxuLVx0XHRraG9fcmFkaXhfZGVsX3BhZ2UodHJlZSwgcGZuLCBvcmRlcik7XG4mIzQzO1x0XHR0eXBlID0ga2hvX2lzX3BhZ2Vfc3BsaXQocGZuLCBvcmRlcikgPyBLSE9fUEFHRV9TUExJVCA6XG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBLSE9fUEFHRV9DT05USUc7XG4mIzQzO1xuJiM0MztcdFx0a2hvX3JhZGl4X2RlbF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIsIHR5cGUpO1xuIFxuIFx0XHRwZm4gJiM0Mzs9IDEgXHUwMDNjXHUwMDNjIG9yZGVyO1xuIFx0fVxuQEAgLTkzOCw4ICYjNDM7OTc3LDEyIEBAIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4gXG4gXHR3aGlsZSAocGZuIFx1MDAzYyBlbmRfcGZuKSB7XG4gXHRcdHVuc2lnbmVkIGludCBvcmRlciA9IF9fa2hvX3ByZXNlcnZlX3BhZ2VzX29yZGVyKHBmbiwgZW5kX3Bmbik7XG4mIzQzO1x0XHRlbnVtIGtob19wYWdlX3R5cGUgdHlwZTtcbiYjNDM7XG4mIzQzO1x0XHR0eXBlID0ga2hvX2lzX3BhZ2Vfc3BsaXQocGZuLCBvcmRlcikgPyBLSE9fUEFHRV9TUExJVCA6XG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBLSE9fUEFHRV9DT05USUc7XG4gXG4tXHRcdGVyciA9IGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTtcbiYjNDM7XHRcdGVyciA9IGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyLCB0eXBlKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGZhaWxlZF9wZm4gPSBwZm47XG4gXHRcdFx0YnJlYWs7XG5AQCAtOTc1LDYgJiM0MzsxMDE4LDI5IEBAIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3BhZ2VzKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMgLSBzcGxpdCBjb250aWd1b3VzIHBhZ2VzIHRoYXQgYXJlIHByZXNlcnZlZFxuJiM0MzsgKiBAcGFnZTogZmlyc3QgcGFnZSBpbiB0aGUgbGlzdC5cbiYjNDM7ICogQG9yZGVyOiB0aGUgb3JkZXIgb2YgdGhlIG9yaWdpbmFsIGFsbG9jYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHNwbGl0IGEgaGlnaC1vcmRlciBhbGxvY2F0aW9uIHRoYXQgaGFzIGJlZW5cbiYjNDM7ICogcHJlc2VydmVkIGFjcm9zcyBrZXhlYy4gSXQgdW5wcmVzZXJ2ZXMgdGhlIHBhZ2VzLCBzcGxpdHMgdGhlbSB1c2luZ1xuJiM0MzsgKiBzcGxpdF9wYWdlKCkgYW5kIHRoZW4gcmUtcHJlc2VydmVzIHRoZW0gYXMgaW5kaXZpZHVhbCBwYWdlcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBNVVNUIG9ubHkgYmUgY2FsbGVkIG9uIHBhZ2VzIHRoYXQgYXJlIGN1cnJlbnRseSBwcmVzZXJ2ZWQuXG4mIzQzOyAqIFRoZSBAb3JkZXIgcHJvdmlkZWQgTVVTVCBtYXRjaCB0aGUgb3JkZXIgdXNlZCBkdXJpbmcgdGhlIGluaXRpYWxcbiYjNDM7ICogcHJlc2VydmF0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztpbnQga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuJiM0Mzt7XG4mIzQzO1x0a2hvX3VucHJlc2VydmVfcGFnZXMocGFnZSwgMVVMIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4mIzQzO1x0c3BsaXRfcGFnZShwYWdlLCBvcmRlcik7XG4mIzQzO1x0cmV0dXJuIGtob19wcmVzZXJ2ZV9wYWdlcyhwYWdlLCAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKTtcbiYjNDM7XG4gLyogdm1hbGxvYyBmbGFncyBLSE8gc3VwcG9ydHMgKi9cbiAjZGVmaW5lIEtIT19WTUFMTE9DX1NVUFBPUlRFRF9GTEFHU1x0KFZNX0FMTE9DIHwgVk1fQUxMT1dfSFVHRV9WTUFQKVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAyOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tFWEVDX0hBTkRPVkVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyYjMzQ7LAogICAgJiMzNDtraG9fcHJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7a2hvX3VucHJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7a2hvX3JhZGl4X2FkZF9wYWdlJiMzNDssCiAgICAmIzM0O2tob19yYWRpeF9kZWxfcGFnZSYjMzQ7LAogICAgJiMzNDtraG9fcmFkaXhfd2Fsa190cmVlJiMzNDssCiAgICAmIzM0O2tob19wcmVzZXJ2ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtraG9fdW5wcmVzZXJ2ZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCBhbmQgbW9kaWZpZXMgdGhlIEtleGVjIEhhbmRvdmVyIChLSE8pIHJhZGl4IHRyZWUgbG9naWMgdG8gc3VwcG9ydCBzcGxpdCBwYWdlcy4gSXQgY2hhbmdlcyBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBraG9fcmFkaXhfYWRkX3BhZ2VgLCBga2hvX3JhZGl4X2RlbF9wYWdlYCwgYGtob19wcmVzZXJ2ZV9wYWdlc2AsIGFuZCBga2hvX3VucHJlc2VydmVfcGFnZXNgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwmIzM5O3MgbGl2ZSB1cGRhdGUgbWVjaGFuaXNtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmFkaXggdHJlZSBhbmQgcGFnZSBwcmVzZXJ2YXRpb24gbG9naWMgaGFuZGxlcyBzcGxpdCBwYWdlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQzNGIyZDQ0NmQxZmYyOTkyYjUwNzE2MmJiMGYyY2YxYzM3NDZhMGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzIDAyOjI4OjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oIGIvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oCmluZGV4IDg5NjhjNTZkMmQ3M2UxLi40NTJlMzhiYjIwNzY4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaApAQCAtMjQsNiAmIzQzOzI0LDcgQEAgaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIHZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7CiBpbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwomIzQzO2ludCBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwogaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0ciwgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pOwogdm9pZCBraG9fdW5wcmVzZXJ2ZV92bWFsbG9jKHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKTsKIHZvaWQgKmtob19hbGxvY19wcmVzZXJ2ZShzaXplX3Qgc2l6ZSk7CkBAIC02NSw2ICYjNDM7NjYsMTIgQEAgc3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKSB7IH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQkJCQkgICAgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0ciwKIAkJCQkgICAgICAgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmggYi9pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmgKaW5kZXggODRlOTE4Yjk2ZTUzZGYuLjkyNDRhM2Y3YTJkNDc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oCkBAIC0zNCwxNiAmIzQzOzM0LDIyIEBAIHN0cnVjdCBraG9fcmFkaXhfdHJlZSB7CiAJc3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3RzIHRoZSB0cmVlJiMzOTtzIHN0cnVjdHVyZSBhbmQgcm9vdCBwb2ludGVyICovCiB9OwogCiYjNDM7ZW51bSBraG9fcGFnZV90eXBlIHsKJiM0MzsJS0hPX1BBR0VfQ09OVElHID0gMCwKJiM0MzsJS0hPX1BBR0VfU1BMSVQsCiYjNDM7fTsKJiM0MzsKIHR5cGVkZWYgaW50ICgqa2hvX3JhZGl4X3RyZWVfd2Fsa19jYWxsYmFja190KShwaHlzX2FkZHJfdCBwaHlzLAotCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIpOwomIzQzOwkJCQkJICAgICAgdW5zaWduZWQgaW50IG9yZGVyLAomIzQzOwkJCQkJICAgICAgZW51bSBraG9fcGFnZV90eXBlIHR5cGUpOwogCiAjaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSCiAKIGludCBraG9fcmFkaXhfYWRkX3BhZ2Uoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLCB1bnNpZ25lZCBsb25nIHBmbiwKLQkJICAgICAgIHVuc2lnbmVkIGludCBvcmRlcik7CiYjNDM7CQkgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSk7CiAKIHZvaWQga2hvX3JhZGl4X2RlbF9wYWdlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSwgdW5zaWduZWQgbG9uZyBwZm4sCi0JCQl1bnNpZ25lZCBpbnQgb3JkZXIpOwomIzQzOwkJCXVuc2lnbmVkIGludCBvcmRlciwgZW51bSBraG9fcGFnZV90eXBlIHR5cGUpOwogCiBpbnQga2hvX3JhZGl4X3dhbGtfdHJlZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsCiAJCQlraG9fcmFkaXhfdHJlZV93YWxrX2NhbGxiYWNrX3QgY2IpOwpAQCAtNTEsMTMgJiM0Mzs1NywxNCBAQCBpbnQga2hvX3JhZGl4X3dhbGtfdHJlZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsCiAjZWxzZSAgLyogI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqLwogCiBzdGF0aWMgaW5saW5lIGludCBraG9fcmFkaXhfYWRkX3BhZ2Uoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLCBsb25nIHBmbiwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBvcmRlcikKJiM0MzsJCQkJICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKQogewogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGtob19yYWRpeF9kZWxfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBvcmRlcikgeyB9CiYjNDM7CQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiYjNDM7CQkJCSAgICAgIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKSB7IH0KIAogc3RhdGljIGlubGluZSBpbnQga2hvX3JhZGl4X3dhbGtfdHJlZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsCiAJCQkJICAgICAga2hvX3JhZGl4X3RyZWVfd2Fsa19jYWxsYmFja190IGNiKQpkaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMKaW5kZXggNDgzNGE4MDk5ODVhYjcuLmVhMDgyNDg5MDFiNTUxIDEwMDY0NAotLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMKQEAgLTQzLDE4ICYjNDM7NDMsMjIgQEAKIAogLyoKICAqIEtITyB1c2VzIHBhZ2UtJmd0O3ByaXZhdGUsIHdoaWNoIGlzIGFuIHVuc2lnbmVkIGxvbmcsIHRvIHN0b3JlIHBhZ2UgbWV0YWRhdGEuCi0gKiBVc2UgaXQgdG8gc3RvcmUgYm90aCB0aGUgbWFnaWMgYW5kIHRoZSBvcmRlci4KJiM0MzsgKiBVc2UgaXQgdG8gc3RvcmUgdGhlIG1hZ2ljLCB0aGUgb3JkZXIsIGFuZCB0aGUgdHlwZSBiaXQuCiAgKi8KIHVuaW9uIGtob19wYWdlX2luZm8gewogCXVuc2lnbmVkIGxvbmcgcGFnZV9wcml2YXRlOwogCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGludCBvcmRlcjsKJiM0MzsJCXVuc2lnbmVkIGludCBvcmRlciA6IDMxOwomIzQzOwkJdW5zaWduZWQgaW50IHR5cGUgIDogMTsKIAkJdW5zaWduZWQgaW50IG1hZ2ljOwogCX07CiB9OwogCiBzdGF0aWNfYXNzZXJ0KHNpemVvZih1bmlvbiBraG9fcGFnZV9pbmZvKSA9PSBzaXplb2YoKChzdHJ1Y3QgcGFnZSAqKTApLSZndDtwcml2YXRlKSk7CiAKJiM0MzsjZGVmaW5lIEtIT19LRVlfVFlQRV9TSElGVCA2MwomIzQzOyNkZWZpbmUgS0hPX0tFWV9UWVBFX01BU0sgIEJJVChLSE9fS0VZX1RZUEVfU0hJRlQpCiYjNDM7CiBzdGF0aWMgYm9vbCBraG9fZW5hYmxlIF9fcm9fYWZ0ZXJfaW5pdCA9IElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUKTsKIAogYm9vbCBraG9faXNfZW5hYmxlZCh2b2lkKQpAQCAtODUsNDIgJiM0Mzs4OSw1MiBAQCBzdGF0aWMgc3RydWN0IGtob19vdXQga2hvX291dCA9IHsKIH07CiAKIC8qKgotICoga2hvX3JhZGl4X2VuY29kZV9rZXkgLSBFbmNvZGVzIGEgcGh5c2ljYWwgYWRkcmVzcyBhbmQgb3JkZXIgaW50byBhIHJhZGl4IGtleS4KJiM0MzsgKiBraG9fcmFkaXhfZW5jb2RlX2tleSAtIEVuY29kZXMgYSBwaHlzaWNhbCBhZGRyZXNzLCBvcmRlciBhbmQgdHlwZSBpbnRvIGEgcmFkaXgga2V5LgogICogQHBoeXM6IFRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBwYWdlLgogICogQG9yZGVyOiBUaGUgb3JkZXIgb2YgdGhlIHBhZ2UuCiYjNDM7ICogQHR5cGU6IFRoZSBwYWdlIHR5cGUuCiAgKgotICogVGhpcyBmdW5jdGlvbiBjb21iaW5lcyBhIHBhZ2UmIzM5O3MgcGh5c2ljYWwgYWRkcmVzcyBhbmQgaXRzIG9yZGVyIGludG8gYQomIzQzOyAqIFRoaXMgZnVuY3Rpb24gY29tYmluZXMgYSBwYWdlJiMzOTtzIHBoeXNpY2FsIGFkZHJlc3MsIGl0cyBvcmRlciwgYW5kIGl0cyB0eXBlIGludG8gYQogICogc2luZ2xlIHVuc2lnbmVkIGxvbmcsIHdoaWNoIGlzIHVzZWQgYXMgYSBrZXkgZm9yIGFsbCByYWRpeCB0cmVlCiAgKiBvcGVyYXRpb25zLgogICoKICAqIFJldHVybjogVGhlIGVuY29kZWQgdW5zaWduZWQgbG9uZyByYWRpeCBrZXkuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGtob19yYWRpeF9lbmNvZGVfa2V5KHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGludCBvcmRlcikKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBraG9fcmFkaXhfZW5jb2RlX2tleShwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiYjNDM7CQkJCQkgIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKQogewogCS8qIE9yZGVyIGJpdHMgcGFydCAqLwogCXVuc2lnbmVkIGxvbmcgaCA9IDFVTCAmbHQ7Jmx0OyAoS0hPX09SREVSXzBfTE9HMiAtIG9yZGVyKTsKIAkvKiBTaGlmdGVkIHBoeXNpY2FsIGFkZHJlc3MgcGFydCAqLwogCXVuc2lnbmVkIGxvbmcgbCA9IHBoeXMgJmd0OyZndDsgKFBBR0VfU0hJRlQgJiM0Mzsgb3JkZXIpOwomIzQzOwkvKiBUeXBlIGJpdCBwYXJ0ICovCiYjNDM7CXVuc2lnbmVkIGxvbmcgdCA9ICh1bnNpZ25lZCBsb25nKXR5cGUgJmx0OyZsdDsgS0hPX0tFWV9UWVBFX1NISUZUOwogCi0JcmV0dXJuIGggfCBsOwomIzQzOwlyZXR1cm4gaCB8IGwgfCB0OwogfQogCiAvKioKLSAqIGtob19yYWRpeF9kZWNvZGVfa2V5IC0gRGVjb2RlcyBhIHJhZGl4IGtleSBiYWNrIGludG8gYSBwaHlzaWNhbCBhZGRyZXNzIGFuZCBvcmRlci4KJiM0MzsgKiBraG9fcmFkaXhfZGVjb2RlX2tleSAtIERlY29kZXMgYSByYWRpeCBrZXkgYmFjayBpbnRvIHBoeXNpY2FsIGFkZHJlc3MsIG9yZGVyLCBhbmQgdHlwZS4KICAqIEBrZXk6IFRoZSB1bnNpZ25lZCBsb25nIGtleSB0byBkZWNvZGUuCiAgKiBAb3JkZXI6IEFuIG91dHB1dCBwYXJhbWV0ZXIsIGEgcG9pbnRlciB0byBhbiB1bnNpZ25lZCBpbnQgd2hlcmUgdGhlIGRlY29kZWQKICAqICAgICAgICAgcGFnZSBvcmRlciB3aWxsIGJlIHN0b3JlZC4KJiM0MzsgKiBAdHlwZTogQW4gb3V0cHV0IHBhcmFtZXRlciwgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBkZWNvZGVkIHR5cGUgd2lsbCBiZSBzdG9yZWQuCiAgKgogICogVGhpcyBmdW5jdGlvbiByZXZlcnNlcyB0aGUgZW5jb2RpbmcgcGVyZm9ybWVkIGJ5IGtob19yYWRpeF9lbmNvZGVfa2V5KCksCi0gKiBleHRyYWN0aW5nIHRoZSBvcmlnaW5hbCBwaHlzaWNhbCBhZGRyZXNzIGFuZCBwYWdlIG9yZGVyIGZyb20gYSBnaXZlbiBrZXkuCiYjNDM7ICogZXh0cmFjdGluZyB0aGUgb3JpZ2luYWwgcGh5c2ljYWwgYWRkcmVzcywgcGFnZSBvcmRlciwgYW5kIHR5cGUgZnJvbSBhIGdpdmVuIGtleS4KICAqCiAgKiBSZXR1cm46IFRoZSBkZWNvZGVkIHBoeXNpY2FsIGFkZHJlc3MuCiAgKi8KLXN0YXRpYyBwaHlzX2FkZHJfdCBraG9fcmFkaXhfZGVjb2RlX2tleSh1bnNpZ25lZCBsb25nIGtleSwgdW5zaWduZWQgaW50ICpvcmRlcikKJiM0MztzdGF0aWMgcGh5c19hZGRyX3Qga2hvX3JhZGl4X2RlY29kZV9rZXkodW5zaWduZWQgbG9uZyBrZXksIHVuc2lnbmVkIGludCAqb3JkZXIsCiYjNDM7CQkJCQllbnVtIGtob19wYWdlX3R5cGUgKnR5cGUpCiB7Ci0JdW5zaWduZWQgaW50IG9yZGVyX2JpdCA9IGZsczY0KGtleSk7CiYjNDM7CXVuc2lnbmVkIGludCBvcmRlcl9iaXQ7CiAJcGh5c19hZGRyX3QgcGh5czsKIAomIzQzOwkqdHlwZSA9IChrZXkgJmFtcDsgS0hPX0tFWV9UWVBFX01BU0spICZndDsmZ3Q7IEtIT19LRVlfVFlQRV9TSElGVDsKJiM0MzsJa2V5ICZhbXA7PSB+S0hPX0tFWV9UWVBFX01BU0s7CiYjNDM7CiYjNDM7CW9yZGVyX2JpdCA9IGZsczY0KGtleSk7CiAJLyogb3JkZXJfYml0IGlzIG51bWJlcmVkIHN0YXJ0aW5nIGF0IDEgZnJvbSBmbHM2NCAqLwogCSpvcmRlciA9IEtIT19PUkRFUl8wX0xPRzIgLSBvcmRlcl9iaXQgJiM0MzsgMTsKIAkvKiBUaGUgb3JkZXIgaXMgZGlzY2FyZGVkIGJ5IHRoZSBzaGlmdCAqLwpAQCAtMTQ4LDYgJiM0MzsxNjIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBraG9fcmFkaXhfZ2V0X3RhYmxlX2luZGV4KHVuc2lnbmVkIGxvbmcga2V5LAogICogQHRyZWU6IFRoZSBLSE8gcmFkaXggdHJlZS4KICAqIEBwZm46IFRoZSBwYWdlIGZyYW1lIG51bWJlciBvZiB0aGUgcGFnZSB0byBwcmVzZXJ2ZS4KICAqIEBvcmRlcjogVGhlIG9yZGVyIG9mIHRoZSBwYWdlLgomIzQzOyAqIEB0eXBlOiBUaGUgcGFnZSB0eXBlLgogICoKICAqIFRoaXMgZnVuY3Rpb24gdHJhdmVyc2VzIHRoZSByYWRpeCB0cmVlIGJhc2VkIG9uIHRoZSBrZXkgZGVyaXZlZCBmcm9tIEBwZm4KICAqIGFuZCBAb3JkZXIuIEl0IHNldHMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSBsZWFmIGJpdG1hcCB0byBtYXJrIHRoZQpAQCAtMTU3LDExICYjNDM7MTcyLDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGtob19yYWRpeF9nZXRfdGFibGVfaW5kZXgodW5zaWduZWQgbG9uZyBrZXksCiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIGludCBraG9fcmFkaXhfYWRkX3BhZ2Uoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLAotCQkgICAgICAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBvcmRlcikKJiM0MzsJCSAgICAgICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyLAomIzQzOwkJICAgICAgIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKQogewogCS8qIE5ld2x5IGFsbG9jYXRlZCBub2RlcyBmb3IgZXJyb3IgY2xlYW51cCAqLwogCXN0cnVjdCBraG9fcmFkaXhfbm9kZSAqaW50ZXJtZWRpYXRlX25vZGVzW0tIT19UUkVFX01BWF9ERVBUSF0gPSB7IDAgfTsKLQl1bnNpZ25lZCBsb25nIGtleSA9IGtob19yYWRpeF9lbmNvZGVfa2V5KFBGTl9QSFlTKHBmbiksIG9yZGVyKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBrZXkgPSBraG9fcmFkaXhfZW5jb2RlX2tleShQRk5fUEhZUyhwZm4pLCBvcmRlciwgdHlwZSk7CiAJc3RydWN0IGtob19yYWRpeF9ub2RlICphbmNob3Jfbm9kZSA9IE5VTEw7CiAJc3RydWN0IGtob19yYWRpeF9ub2RlICpub2RlID0gdHJlZS0mZ3Q7cm9vdDsKIAlzdHJ1Y3Qga2hvX3JhZGl4X25vZGUgKm5ld19ub2RlOwpAQCAtMjMxLDE1ICYjNDM7MjQ3LDE2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGtob19yYWRpeF9hZGRfcGFnZSk7CiAgKiBAdHJlZTogVGhlIEtITyByYWRpeCB0cmVlLgogICogQHBmbjogVGhlIHBhZ2UgZnJhbWUgbnVtYmVyIG9mIHRoZSBwYWdlIHRvIHVucHJlc2VydmUuCiAgKiBAb3JkZXI6IFRoZSBvcmRlciBvZiB0aGUgcGFnZS4KJiM0MzsgKiBAdHlwZTogVGhlIHBhZ2UgdHlwZS4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgcmFkaXggdHJlZSBhbmQgY2xlYXJzIHRoZSBiaXQgY29ycmVzcG9uZGluZyB0bwogICogdGhlIHBhZ2UsIGVmZmVjdGl2ZWx5IHJlbW92aW5nIGl0cyAmIzM0O3ByZXNlcnZlZCYjMzQ7IHN0YXR1cy4gSXQgZG9lcyBub3QgZnJlZQogICogdGhlIHRyZWUmIzM5O3MgaW50ZXJtZWRpYXRlIG5vZGVzLCBldmVuIGlmIHRoZXkgYmVjb21lIGVtcHR5LgogICovCiB2b2lkIGtob19yYWRpeF9kZWxfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsIHVuc2lnbmVkIGxvbmcgcGZuLAotCQkJdW5zaWduZWQgaW50IG9yZGVyKQomIzQzOwkJCXVuc2lnbmVkIGludCBvcmRlciwgZW51bSBraG9fcGFnZV90eXBlIHR5cGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBrZXkgPSBraG9fcmFkaXhfZW5jb2RlX2tleShQRk5fUEhZUyhwZm4pLCBvcmRlcik7CiYjNDM7CXVuc2lnbmVkIGxvbmcga2V5ID0ga2hvX3JhZGl4X2VuY29kZV9rZXkoUEZOX1BIWVMocGZuKSwgb3JkZXIsIHR5cGUpOwogCXN0cnVjdCBraG9fcmFkaXhfbm9kZSAqbm9kZSA9IHRyZWUtJmd0O3Jvb3Q7CiAJc3RydWN0IGtob19yYWRpeF9sZWFmICpsZWFmOwogCXVuc2lnbmVkIGludCBpLCBpZHg7CkBAIC0yNzcsMTQgJiM0MzsyOTQsMTUgQEAgc3RhdGljIGludCBraG9fcmFkaXhfd2Fsa19sZWFmKHN0cnVjdCBraG9fcmFkaXhfbGVhZiAqbGVhZiwKIAkJCSAgICAgICBraG9fcmFkaXhfdHJlZV93YWxrX2NhbGxiYWNrX3QgY2IpCiB7CiAJdW5zaWduZWQgbG9uZyAqYml0bWFwID0gKHVuc2lnbmVkIGxvbmcgKilsZWFmOwomIzQzOwllbnVtIGtob19wYWdlX3R5cGUgdHlwZTsKIAl1bnNpZ25lZCBpbnQgb3JkZXI7CiAJcGh5c19hZGRyX3QgcGh5czsKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgZXJyOwogCiAJZm9yX2VhY2hfc2V0X2JpdChpLCBiaXRtYXAsIFBBR0VfU0laRSAqIEJJVFNfUEVSX0JZVEUpIHsKLQkJcGh5cyA9IGtob19yYWRpeF9kZWNvZGVfa2V5KGtleSB8IGksICZhbXA7b3JkZXIpOwotCQllcnIgPSBjYihwaHlzLCBvcmRlcik7CiYjNDM7CQlwaHlzID0ga2hvX3JhZGl4X2RlY29kZV9rZXkoa2V5IHwgaSwgJmFtcDtvcmRlciwgJmFtcDt0eXBlKTsKJiM0MzsJCWVyciA9IGNiKHBoeXMsIG9yZGVyLCB0eXBlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMzU3LDExICYjNDM7Mzc1LDE4IEBAIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGtob19yYWRpeF93YWxrX3RyZWUpOwogCi0vKiBGb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIDAtb3JkZXIgcGFnZXMuICovCi1zdGF0aWMgdm9pZCBraG9faW5pdF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKJiM0MzsvKiBGb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIHBhZ2VzLiAqLwomIzQzO3N0YXRpYyB2b2lkIGtob19yZXN0b3JlX3JlZmNvdW50cyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKJiM0MzsJCQkJICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSkKIHsKLQlmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgJmx0OyBucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKLQkJc2V0X3BhZ2VfY291bnQocGFnZSAmIzQzOyBpLCAxKTsKJiM0MzsJLyogSGVhZCBwYWdlIGFsd2F5cyBnZXRzIHJlZmNvdW50IG9mIDEuICovCiYjNDM7CXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOwomIzQzOwljbGVhcl9wYWdlX3RhZ19yZWYocGFnZSk7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgbG9uZyBpID0gMTsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdW5zaWduZWQgaW50IGNvdW50ID0gKHR5cGUgPT0gS0hPX1BBR0VfU1BMSVQpID8gMSA6IDA7CiYjNDM7CiYjNDM7CQlzZXRfcGFnZV9jb3VudChwYWdlICYjNDM7IGksIGNvdW50KTsKIAkJLyogQ2xlYXIgZWFjaCBwYWdlJiMzOTtzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi8KIAkJY2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UgJiM0MzsgaSk7CiAJfQpAQCAtMzY5LDE2ICYjNDM7Mzk0LDcgQEAgc3RhdGljIHZvaWQga2hvX2luaXRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiAKIHN0YXRpYyB2b2lkIGtob19pbml0X2ZvbGlvKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9ICgxICZsdDsmbHQ7IG9yZGVyKTsKLQotCS8qIEhlYWQgcGFnZSBnZXRzIHJlZmNvdW50IG9mIDEuICovCi0Jc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7Ci0JLyogQ2xlYXIgaGVhZCBwYWdlJiMzOTtzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi8KLQljbGVhcl9wYWdlX3RhZ19yZWYocGFnZSk7Ci0KLQkvKiBGb3IgaGlnaGVyIG9yZGVyIGZvbGlvcywgdGFpbCBwYWdlcyBnZXQgYSBwYWdlIGNvdW50IG9mIHplcm8uICovCi0JZm9yICh1bnNpZ25lZCBsb25nIGkgPSAxOyBpICZsdDsgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KQotCQlzZXRfcGFnZV9jb3VudChwYWdlICYjNDM7IGksIDApOwomIzQzOwlraG9fcmVzdG9yZV9yZWZjb3VudHMocGFnZSwgMSAmbHQ7Jmx0OyBvcmRlciwgS0hPX1BBR0VfQ09OVElHKTsKIAogCWlmIChvcmRlciAmZ3Q7IDApCiAJCXByZXBfY29tcG91bmRfcGFnZShwYWdlLCBvcmRlcik7CkBAIC00MDMsMTMgJiM0Mzs0MTksMjAgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMsIGJvb2wgaXNfZm9saW8pCiAJCXJldHVybiBOVUxMOwogCW5yX3BhZ2VzID0gKDEgJmx0OyZsdDsgaW5mby5vcmRlcik7CiAKJiM0MzsJLyoKJiM0MzsJICogSWYgd2Ugd2FudCB0byByZXN0b3JlIGEgZm9saW8sIGJ1dCB0aGUgbWVtb3J5IHdhcyBzcGxpdCBpbiB0aGUKJiM0MzsJICogcHJldmlvdXMga2VybmVsLCBzb21ldGhpbmcgaXMgd3JvbmcuCiYjNDM7CSAqLwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKGlzX2ZvbGlvICZhbXA7JmFtcDsgaW5mby50eXBlID09IEtIT19QQUdFX1NQTElUKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwogCS8qIENsZWFyIHByaXZhdGUgdG8gbWFrZSBzdXJlIGxhdGVyIHJlc3RvcmVzIG9uIHRoaXMgcGFnZSBlcnJvciBvdXQuICovCiAJcGFnZS0mZ3Q7cHJpdmF0ZSA9IDA7CiAKIAlpZiAoaXNfZm9saW8pCiAJCWtob19pbml0X2ZvbGlvKHBhZ2UsIGluZm8ub3JkZXIpOwogCWVsc2UKLQkJa2hvX2luaXRfcGFnZXMocGFnZSwgbnJfcGFnZXMpOwomIzQzOwkJa2hvX3Jlc3RvcmVfcmVmY291bnRzKHBhZ2UsIG5yX3BhZ2VzLCBpbmZvLnR5cGUpOwogCiAJYWRqdXN0X21hbmFnZWRfcGFnZV9jb3VudChwYWdlLCBucl9wYWdlcyk7CiAJcmV0dXJuIHBhZ2U7CkBAIC00ODUsNyAmIzQzOzUwOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19pbml0IGtob19nZXRfcHJlc2VydmVkX3BhZ2UocGh5c19hZGRyX3QgcGh5cywKIH0KIAogc3RhdGljIGludCBfX2luaXQga2hvX3ByZXNlcnZlZF9tZW1vcnlfcmVzZXJ2ZShwaHlzX2FkZHJfdCBwaHlzLAotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzOwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBvcmRlciwKJiM0MzsJCQkJCSAgICAgICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSkKIHsKIAl1bmlvbiBraG9fcGFnZV9pbmZvIGluZm87CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CkBAIC00OTksNiAmIzQzOzUyMyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGtob19wcmVzZXJ2ZWRfbWVtb3J5X3Jlc2VydmUocGh5c19hZGRyX3QgcGh5cywKIAltZW1ibG9ja19yZXNlcnZlZF9tYXJrX25vaW5pdChwaHlzLCBzeik7CiAJaW5mby5tYWdpYyA9IEtIT19QQUdFX01BR0lDOwogCWluZm8ub3JkZXIgPSBvcmRlcjsKJiM0MzsJaW5mby50eXBlID0gdHlwZTsKIAlwYWdlLSZndDtwcml2YXRlID0gaW5mby5wYWdlX3ByaXZhdGU7CiAKIAlyZXR1cm4gMDsKQEAgLTg1OSw3ICYjNDM7ODg0LDcgQEAgaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAocGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQsIFBBR0VfU0laRSAmbHQ7Jmx0OyBvcmRlcikpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBraG9fcmFkaXhfYWRkX3BhZ2UodHJlZSwgcGZuLCBvcmRlcik7CiYjNDM7CXJldHVybiBraG9fcmFkaXhfYWRkX3BhZ2UodHJlZSwgcGZuLCBvcmRlciwgS0hPX1BBR0VfQ09OVElHKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGtob19wcmVzZXJ2ZV9mb2xpbyk7CiAKQEAgLTg3Nyw3ICYjNDM7OTAyLDcgQEAgdm9pZCBraG9fdW5wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWNvbnN0IHVuc2lnbmVkIGxvbmcgcGZuID0gZm9saW9fcGZuKGZvbGlvKTsKIAljb25zdCB1bnNpZ25lZCBpbnQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7CiAKLQlraG9fcmFkaXhfZGVsX3BhZ2UodHJlZSwgcGZuLCBvcmRlcik7CiYjNDM7CWtob19yYWRpeF9kZWxfcGFnZSh0cmVlLCBwZm4sIG9yZGVyLCBLSE9fUEFHRV9DT05USUcpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfZm9saW8pOwogCkBAIC04OTgsMTUgJiM0Mzs5MjMsMjkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAlyZXR1cm4gb3JkZXI7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBraG9faXNfcGFnZV9zcGxpdCh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIHJlZmNvdW50IG9mIHRoZSBzZWNvbmQgcGFnZSBpcyBub24temVybywgdGhpcyBibG9jawomIzQzOwkgKiBoYXMgYmVlbiBzcGxpdC4KJiM0MzsJICovCiYjNDM7CWlmIChvcmRlciAmZ3Q7IDAgJmFtcDsmYW1wOyBwYWdlX3JlZl9jb3VudChwZm5fdG9fcGFnZShwZm4gJiM0MzsgMSkpICE9IDApCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIF9fa2hvX3VucHJlc2VydmUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLAogCQkJICAgICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQogewotCXVuc2lnbmVkIGludCBvcmRlcjsKLQogCXdoaWxlIChwZm4gJmx0OyBlbmRfcGZuKSB7Ci0JCW9yZGVyID0gX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIocGZuLCBlbmRfcGZuKTsKJiM0MzsJCXVuc2lnbmVkIGludCBvcmRlciA9IF9fa2hvX3ByZXNlcnZlX3BhZ2VzX29yZGVyKHBmbiwgZW5kX3Bmbik7CiYjNDM7CQllbnVtIGtob19wYWdlX3R5cGUgdHlwZTsKIAotCQlraG9fcmFkaXhfZGVsX3BhZ2UodHJlZSwgcGZuLCBvcmRlcik7CiYjNDM7CQl0eXBlID0ga2hvX2lzX3BhZ2Vfc3BsaXQocGZuLCBvcmRlcikgPyBLSE9fUEFHRV9TUExJVCA6CiYjNDM7CQkJCQkJICAgICAgIEtIT19QQUdFX0NPTlRJRzsKJiM0MzsKJiM0MzsJCWtob19yYWRpeF9kZWxfcGFnZSh0cmVlLCBwZm4sIG9yZGVyLCB0eXBlKTsKIAogCQlwZm4gJiM0Mzs9IDEgJmx0OyZsdDsgb3JkZXI7CiAJfQpAQCAtOTM4LDggJiM0Mzs5NzcsMTIgQEAgaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKIAogCXdoaWxlIChwZm4gJmx0OyBlbmRfcGZuKSB7CiAJCXVuc2lnbmVkIGludCBvcmRlciA9IF9fa2hvX3ByZXNlcnZlX3BhZ2VzX29yZGVyKHBmbiwgZW5kX3Bmbik7CiYjNDM7CQllbnVtIGtob19wYWdlX3R5cGUgdHlwZTsKJiM0MzsKJiM0MzsJCXR5cGUgPSBraG9faXNfcGFnZV9zcGxpdChwZm4sIG9yZGVyKSA/IEtIT19QQUdFX1NQTElUIDoKJiM0MzsJCQkJCQkgICAgICAgS0hPX1BBR0VfQ09OVElHOwogCi0JCWVyciA9IGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTsKJiM0MzsJCWVyciA9IGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyLCB0eXBlKTsKIAkJaWYgKGVycikgewogCQkJZmFpbGVkX3BmbiA9IHBmbjsKIAkJCWJyZWFrOwpAQCAtOTc1LDYgJiM0MzsxMDE4LDI5IEBAIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV9wYWdlcyk7CiAKJiM0MzsvKioKJiM0MzsgKiBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzIC0gc3BsaXQgY29udGlndW91cyBwYWdlcyB0aGF0IGFyZSBwcmVzZXJ2ZWQKJiM0MzsgKiBAcGFnZTogZmlyc3QgcGFnZSBpbiB0aGUgbGlzdC4KJiM0MzsgKiBAb3JkZXI6IHRoZSBvcmRlciBvZiB0aGUgb3JpZ2luYWwgYWxsb2NhdGlvbi4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHNwbGl0IGEgaGlnaC1vcmRlciBhbGxvY2F0aW9uIHRoYXQgaGFzIGJlZW4KJiM0MzsgKiBwcmVzZXJ2ZWQgYWNyb3NzIGtleGVjLiBJdCB1bnByZXNlcnZlcyB0aGUgcGFnZXMsIHNwbGl0cyB0aGVtIHVzaW5nCiYjNDM7ICogc3BsaXRfcGFnZSgpIGFuZCB0aGVuIHJlLXByZXNlcnZlcyB0aGVtIGFzIGluZGl2aWR1YWwgcGFnZXMuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIE1VU1Qgb25seSBiZSBjYWxsZWQgb24gcGFnZXMgdGhhdCBhcmUgY3VycmVudGx5IHByZXNlcnZlZC4KJiM0MzsgKiBUaGUgQG9yZGVyIHByb3ZpZGVkIE1VU1QgbWF0Y2ggdGhlIG9yZGVyIHVzZWQgZHVyaW5nIHRoZSBpbml0aWFsCiYjNDM7ICogcHJlc2VydmF0aW9uLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiYjNDM7ewomIzQzOwlraG9fdW5wcmVzZXJ2ZV9wYWdlcyhwYWdlLCAxVUwgJmx0OyZsdDsgb3JkZXIpOwomIzQzOwlzcGxpdF9wYWdlKHBhZ2UsIG9yZGVyKTsKJiM0MzsJcmV0dXJuIGtob19wcmVzZXJ2ZV9wYWdlcyhwYWdlLCAxVUwgJmx0OyZsdDsgb3JkZXIpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKTsKJiM0MzsKIC8qIHZtYWxsb2MgZmxhZ3MgS0hPIHN1cHBvcnRzICovCiAjZGVmaW5lIEtIT19WTUFMTE9DX1NVUFBPUlRFRF9GTEFHUwkoVk1fQUxMT0MgfCBWTV9BTExPV19IVUdFX1ZNQVApCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg1MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtleGVjIEhhbmRvdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXkmIzM5O3JlIGludHJvZHVjaW5nIHNvbWUga2V5IGNoYW5nZXMgZm9yIEtleGVjIEhhbmRvdmVyIChLSE8pLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIGFkZGVkIGEgZnVuY3Rpb24gY2FsbGVkIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCBhbmQgbW9kaWZpZWQgYSBmZXcgZXhpc3Rpbmcgb25lczogYGtob19yYWRpeF9hZGRfcGFnZWAsIGBraG9fcmFkaXhfZGVsX3BhZ2VgLCBhbmQgYGtob19yYWRpeF93YWxrX3RyZWVgLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHJldm9sdmVzIGFyb3VuZCBhIG5ldyBgZW51bSBraG9fcGFnZV90eXBlYCwgZGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiBgS0hPX1BBR0VfQ09OVElHYCBhbmQgYEtIT19QQUdFX1NQTElUYC4gVGhpcyBtYWtlcyBzZW5zZTsgaGFuZGxpbmcgcGFnZSBzcGxpdHMgaXMgZXNzZW50aWFsIGZvciBhIGhhbmRvdmVyIHByb2Nlc3MgbGlrZSBLZXhlYy4gVGhleSYjMzk7dmUgbGlua2VkIHRoZSBjaGFuZ2VzIHRvIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYC4KCkhvbGQgb24uLi4gYGtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNgLi4uIHRoYXQgZmlsZSBwYXRoIGZlZWxzIGEgbGl0dGxlIG9mZi4gSXMgdGhhdCBzdGFuZGFyZCwgb3IgYW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhpcyBpcyBhbiBhY3R1YWwgdmFsaWQgcGF0aCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gQmVmb3JlIEkgcHJvY2VlZCwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgZmlsZSByZWFsbHkgZXhpc3RzLiBBbHNvLCBJIGJldHRlciBjb25maXJtIHRoYXQgYENPTkZJR19LRVhFQ19IQU5ET1ZFUmAgaXMgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlIGFsbCBvZiB0aGlzLiBJdCYjMzk7cyBjcnVjaWFsIHRoYXQgdGhpcyB3aG9sZSBmZWF0dXJlIGlzIGNvcnJlY3RseSBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTI2PXZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjI3OmludCBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTI4LWludCBraG9fcHJlc2VydmVfdm1hbGxvYyh2b2lkICpwdHIsIHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9Njc9c3RhdGljIGlubGluZSB2b2lkIGtob191bnByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpIHsgfVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTY4LVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjY5OnN0YXRpYyBpbmxpbmUgaW50IGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNzAtXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMDE5PUVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3BhZ2VzKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMjEtLyoqXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMjI6ICoga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyAtIHNwbGl0IGNvbnRpZ3VvdXMgcGFnZXMgdGhhdCBhcmUgcHJlc2VydmVkXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMjMtICogQHBhZ2U6IGZpcnN0IHBhZ2UgaW4gdGhlIGxpc3QuXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDM1LSAqL1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDM2OmludCBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMzcte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTA0MS19XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwNDI6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgyOQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlndXJhdGlvbiBEaWFnbm9zdGljczogQSBRdWljayBQdWxzZSBDaGVjayoqCgpPa2F5LCBzbyBJ4oCZdmUgcmVjZWl2ZWQgY29uZmlybWF0aW9uLiAqWWVzLCBpdCBkb2VzLiogTGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUgcG90ZW50aWFsIHNvdXJjZXMgb2YgdGhpcyBiZWhhdmlvci4gTXkgZ3V0IGZlZWxpbmcgaXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBjb25maWd1cmF0aW9uIGlzc3VlLCBhIHN1YnRsZSBkcmlmdCBpbiBzZXR0aW5ncyB0aGF04oCZcyBtYW5pZmVzdGluZyBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uIFRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzIGFuZCBkaXZlIGludG8gdGhlIGNvbmZpZ3MuIFRoaXMgaXNu4oCZdCBhIGRlZXAgZGl2ZSB5ZXQ7IGp1c3QgYSByYXBpZCBkaWFnbm9zdGljIHNjYW4gZm9yIHRoZSB1c3VhbCBzdXNwZWN0czogbWlzY29uZmlndXJlZCBwZXJtaXNzaW9ucywgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgaGF2ZW4mIzM5O3QgcHJvcGFnYXRlZCBjb3JyZWN0bHksIG9yIGEgY2FjaGluZyBpc3N1ZSBhY3RpbmcgdXAuIExldCYjMzk7cyBzZWUgaWYgd2UgY2FuIGlkZW50aWZ5IHRoZSBwcm9ibGVtIHdpdGggYSBmZXcga2V5IGNoZWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS0VYRUNfSEFORE9WRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZz0zPW1lbnUgXCYjMzQ7TGl2ZSBVcGRhdGUgYW5kIEtleGVjIEhhbmRPdmVyXCYjMzQ7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTQtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjU6Y29uZmlnIEtFWEVDX0hBTkRPVkVSXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTYtXHRib29sIFwmIzM0O2tleGVjIGhhbmRvdmVyXCYjMzQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0xNy1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6MTg6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE5LVx0Ym9vbCBcJiMzNDtFbmFibGUgS2V4ZWMgSGFuZG92ZXIgZGVidWcgY2hlY2tzXCYjMzQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0yNi1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mjc6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHRlNcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMjgtXHRib29sIFwmIzM0O2tleGVjIGhhbmRvdmVyIGRlYnVnZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zNy1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mzg6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtFbmFibGUga2V4ZWMgaGFuZG92ZXIgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNjMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCBhbmQgYXBwcm9hY2hpbmcgdGhpcyBzeXN0ZW1hdGljYWxseToKCioqQ2hlY2tpbmcgZm9yIFVzYWdlIG9mIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCoqCgpBbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaG93IHdpZGVseSB0aGlzIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBCZWZvcmUgSSBkZWx2ZSBpbnRvIGFueXRoaW5nIGVsc2UsIG9yIG1ha2UgYW55IGFzc3VtcHRpb25zIGFib3V0IGl0cyBwdXJwb3NlIG9yIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZS4gSXMgdGhpcyBhIGNvcmUgY29tcG9uZW50PyBJcyBpdCBvbmx5IHVzZWQgaW4gYSBzcGVjaWZpYyBtb2R1bGU/IE9yIHBlcmhhcHMgaXQmIzM5O3MgYSBmb3Jnb3R0ZW4gYXJ0aWZhY3QgZnJvbSBhbiBlYXJsaWVyIHByb2plY3Q/IEkgbmVlZCB0byBrbm93IGhvdyBtYW55IHBsYWNlcyBpdCB0b3VjaGVzLCBpZiBhbnkuICBTbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZS4gV2hlcmUmIzM5O3MgaXQgdXNlZD8gV2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGludGVyYWN0IHdpdGggaXQ/IFRoYXQgd2lsbCBndWlkZSBteSBuZXh0IHN0ZXBzLiBUaGlzIGlzIGp1c3QgcmVjb25uYWlzc2FuY2UuIEdhdGhlciBpbmZvcm1hdGlvbiwgYmVmb3JlIEkgZG8gYW55dGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0yNj12b2lkIGtob191bnByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoyNzppbnQga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0yOC1pbnQga2hvX3ByZXNlcnZlX3ZtYWxsb2Modm9pZCAqcHRyLCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTY3PXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKSB7IH1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC02OC1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo2OTpzdGF0aWMgaW5saW5lIGludCBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTcwLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTAxOT1FWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV9wYWdlcyk7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDIxLS8qKlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDIyOiAqIGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMgLSBzcGxpdCBjb250aWd1b3VzIHBhZ2VzIHRoYXQgYXJlIHByZXNlcnZlZFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDIzLSAqIEBwYWdlOiBmaXJzdCBwYWdlIGluIHRoZSBsaXN0LlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAzNS0gKi9cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTAzNjppbnQga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDM3LXtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDEtfVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDQyOkVYUE9SVF9TWU1CT0xfR1BMKGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDQzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5ODYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIEFzc2Vzc21lbnQ6IE9ic2VydmluZyBNb2RpZmljYXRpb24sIFNlZWtpbmcgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgbm8gYWN0aXZlIHVzZXJzIHJpZ2h0IG5vdyDigJMgdGhhdCYjMzk7cyB0aGUgaW1tZWRpYXRlIHN0YXRlLiBIb3dldmVyLCBteSBpbnRlcm5hbCBmbGFncyBhcmUgdXAgYmVjYXVzZSBJJiMzOTt2ZSBub3RpY2VkIG1vZGlmaWNhdGlvbnMgdG8gYGtob19wcmVzZXJ2ZV9wYWdlc2AgYW5kIGBraG9fdW5wcmVzZXJ2ZV9wYWdlc2AuIFRoaXMgaXMgc2lnbmlmaWNhbnQ7IHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGNvcmUgdG8gc29tZSBrZXkgcHJvY2VzcywgZXZlbiBpZiBubyBvbmUgaXMgZXhwbGljaXRseSAqdXNpbmcqIHRoZW0gYXQgdGhlIG1vbWVudC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icy4gSXQmIzM5O3MgdGltZSB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhvc2UgbW9kaWZpZWQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSB3ZXJlIHRvdWNoZWQgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRob3NlIGNoYW5nZXMgbWlnaHQgaGF2ZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2hvX3ByZXNlcnZlX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0yND12b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjI1OmludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTI2LXZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD02MD1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykgeyB9XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNjEtXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NjI6c3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNjMte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NDUzPUVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX2ZvbGlvKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ2MC0gKiBSZXN0b3JlIGEgY29udGlndW91cyBsaXN0IG9mIG9yZGVyIDAgcGFnZXMgdGhhdCB3YXMgcHJlc2VydmVkIHdpdGhcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDYxOiAqIGtob19wcmVzZXJ2ZV9wYWdlcygpLlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NjItICpcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTkwNz1FWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV9mb2xpbyk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkwOC1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTA5OnN0YXRpYyB1bnNpZ25lZCBpbnQgX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkxMC1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTkzOD1zdGF0aWMgdm9pZCBfX2tob191bnByZXNlcnZlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk0MS1cdHdoaWxlIChwZm4gXHUwMDNjIGVuZF9wZm4pIHtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTQyOlx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NDMtXHRcdGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTU0LS8qKlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5NTU6ICoga2hvX3ByZXNlcnZlX3BhZ2VzIC0gcHJlc2VydmUgY29udGlndW91cyBwYWdlcyBhY3Jvc3Mga2V4ZWNcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTU2LSAqIEBwYWdlOiBmaXJzdCBwYWdlIGluIHRoZSBsaXN0LlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTYzLSAqL1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5NjQ6aW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTY1LXtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk3OC1cdHdoaWxlIChwZm4gXHUwMDNjIGVuZF9wZm4pIHtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTc5Olx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05ODAtXHRcdGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTk4LX1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTk5OkVYUE9SVF9TWU1CT0xfR1BMKGtob19wcmVzZXJ2ZV9wYWdlcyk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMDAtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDA3LSAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgc2FtZSBAcGFnZSBhbmQgQG5yX3BhZ2VzIGFzIHRoZSBjb3JyZXNwb25kaW5nXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMDg6ICoga2hvX3ByZXNlcnZlX3BhZ2VzKCkgY2FsbC4gVW5wcmVzZXJ2aW5nIGFyYml0cmFyeSBzdWItcmFuZ2VzIG9mIGxhcmdlclxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDA5LSAqIHByZXNlcnZlZCBibG9ja3MgaXMgbm90IHN1cHBvcnRlZC5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTEwMzY9aW50IGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMzktXHRzcGxpdF9wYWdlKHBhZ2UsIG9yZGVyKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTA0MDpcdHJldHVybiBraG9fcHJlc2VydmVfcGFnZXMocGFnZSwgMVVMIFx1MDAzY1x1MDAzYyBvcmRlcik7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDEtfVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTA3NT1zdGF0aWMgc3RydWN0IGtob192bWFsbG9jX2NodW5rICpuZXdfdm1hbGxvY19jaHVuayhzdHJ1Y3Qga2hvX3ZtYWxsb2NfY2h1bmsgKmN1cilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwODMtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwODQ6XHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXModmlydF90b19wYWdlKGNodW5rKSwgMSk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwODUtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTEyNT1pbnQga2hvX3ByZXNlcnZlX3ZtYWxsb2Modm9pZCAqcHRyLCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTExNTAtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjExNTE6XHRcdGVyciA9IGtob19wcmVzZXJ2ZV9wYWdlcyh2bS1cdTAwM2VwYWdlc1tpXSwgbnJfY29udGlnX3BhZ2VzKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTE1Mi1cdFx0aWYgKGVycilcbi0tXG5tbS9tZW1ibG9jay5jPTI1Mjg9c3RhdGljIGludCBfX2luaXQgcmVzZXJ2ZWRfbWVtX3ByZXNlcnZlKHZvaWQpXG4tLVxubW0vbWVtYmxvY2suYy0yNTM3LVxubW0vbWVtYmxvY2suYzoyNTM4Olx0XHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXMocGFnZSwgbnJfcGFnZXMpO1xubW0vbWVtYmxvY2suYy0yNTM5LVx0XHRpZiAoZXJyKVxuLS1cbm1tL21lbWJsb2NrLmM9MjU1Nz1zdGF0aWMgaW50IF9faW5pdCBwcmVwYXJlX2tob19mZHQodm9pZClcbi0tXG5tbS9tZW1ibG9jay5jLTI1NjktXHRmZHQgPSBwYWdlX3RvX3ZpcnQoZmR0X3BhZ2UpO1xubW0vbWVtYmxvY2suYzoyNTcwOlx0ZXJyID0ga2hvX3ByZXNlcnZlX3BhZ2VzKGZkdF9wYWdlLCAxKTtcbm1tL21lbWJsb2NrLmMtMjU3MS1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzU5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgTGl2ZSBVcGRhdGUgZm9yIEtleGVjIEhhbmRvdmVyKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIGBDT05GSUdfS0VYRUNfSEFORE9WRVJgIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgcHJldHR5IGZ1bmRhbWVudGFsIHN0dWZmLCBjb3JlIGtlcm5lbCBjb2RlIHRoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseS4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXNgLCBhbmQgdGhlbiBnb2VzIG9uIHRvIG1vZGlmeSBhIGZldyBvdGhlcnM6IGBraG9fcmFkaXhfYWRkX3BhZ2VgLCBga2hvX3JhZGl4X2RlbF9wYWdlYCwgYW5kIGBraG9fcmFkaXhfd2Fsa190cmVlYC4gVGhlIGNvbW1vbiB0aHJlYWQgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBgZW51bSBraG9fcGFnZV90eXBlYCwgZGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiBgS0hPX1BBR0VfQ09OVElHYCBhbmQgYEtIT19QQUdFX1NQTElUYC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgYWxsIHJlbGF0ZWQgdG8gaGFuZGxpbmcgbWVtb3J5IHRoYXQgbWlnaHQgYmUgZnJhZ21lbnRlZCBvciBzcGxpdCBkdXJpbmcgdGhlIGhhbmRvdmVyIHByb2Nlc3MuIEl0JiMzOTtzIGxpa2VseSB0cnlpbmcgdG8gaW1wcm92ZSB0aGUgcmVsaWFiaWxpdHkgb3IgZWZmaWNpZW5jeSBvZiBwcmVzZXJ2aW5nIGFuZCByZXN0b3JpbmcgbWVtb3J5IGFjcm9zcyB0aGUga2V4ZWMgdHJhbnNpdGlvbi4KCkl0JiMzOTtzIGFsc28gdG91Y2hpbmcgYGtob19wcmVzZXJ2ZV9wYWdlc2AgYW5kIGBraG9fdW5wcmVzZXJ2ZV9wYWdlc2AsIHdoaWNoIGFyZSB0aGUgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBoYW5kbGluZyB0aGVzZSBzcGxpdCBwYWdlcy4gVGhpcyBpcyBhbGwgZnVuY3Rpb25hbCBjb2RlLCBpdCYjMzk7cyBub3Qgc2ltcGx5IHJlZmFjdG9yaW5nLCBzbyBpdCBtdXN0IGJlIGFkZHJlc3Npbmcgc29tZSByZWFsLXdvcmxkIGlzc3VlIGluIEtleGVjIGhhbmRvdmVyLiBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfS0VYRUNfSEFORE9WRVJgIGlzIGVuYWJsZWQgaW4gb3VyIGNvbmZpZ3VyYXRpb24gdG8gYmUgc3VyZSB0aGlzIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgc3lzdGVtLCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS0VYRUNfSEFORE9WRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZz0zPW1lbnUgXCYjMzQ7TGl2ZSBVcGRhdGUgYW5kIEtleGVjIEhhbmRPdmVyXCYjMzQ7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTQtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjU6Y29uZmlnIEtFWEVDX0hBTkRPVkVSXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTYtXHRib29sIFwmIzM0O2tleGVjIGhhbmRvdmVyXCYjMzQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0xNy1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6MTg6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE5LVx0Ym9vbCBcJiMzNDtFbmFibGUgS2V4ZWMgSGFuZG92ZXIgZGVidWcgY2hlY2tzXCYjMzQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0yNi1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mjc6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHRlNcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMjgtXHRib29sIFwmIzM0O2tleGVjIGhhbmRvdmVyIGRlYnVnZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zNy1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mzg6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtFbmFibGUga2V4ZWMgaGFuZG92ZXIgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUwOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBhIEtlcm5lbCBMaXZlIFVwZGF0ZSBQYXRjaCoqCgpBbHJpZ2h0LCBzbyBhIHBhdGNoIGhhcyBoaXQgbXkgZGVzayBhbmQgaXQgdG91Y2hlcyBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AuIE15IGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5czogKndoYXQgZWxzZSBpcyBhZmZlY3RlZD8qIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBub3QgZW5vdWdoIHRvIGp1c3QgbG9vayBhdCB0aGUgY29kZSBtb2RpZmllZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIHNpZGUgZWZmZWN0cy4KClRoZXJlZm9yZSwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGFzc29jaWF0ZWQgYE1ha2VmaWxlYC4gSXQgaXMgY3J1Y2lhbCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgcmlwcGxlcyBvdXR3YXJkLCBvciBpcyBsb2NhbGl6ZWQgdG8gdGhlIGBrZXhlY19oYW5kb3ZlcmAgbW9kdWxlLiBXaGF0IG90aGVyIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBpbmNsdWRlIGZpbGVzLCBvciBkZXBlbmRlbmNpZXMgbWlnaHQgYmUgaW1wYWN0ZWQ/IElmIGl0JiMzOTtzIGEgY3JpdGljYWwgbW9kdWxlIGxpa2UgdGhpcywgSSBoYXZlIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBjaGFuZ2VzIG9yIHJlbGF0ZWQgZmlsZXMuIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tleGVjX2hhbmRvdmVyLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2xpdmV1cGRhdGUvTWFrZWZpbGU9Mz1sdW8teSA6PVx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmtlcm5lbC9saXZldXBkYXRlL01ha2VmaWxlLTktXG5rZXJuZWwvbGl2ZXVwZGF0ZS9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfS0VYRUNfSEFORE9WRVIpXHRcdCYjNDM7PSBrZXhlY19oYW5kb3Zlci5vXG5rZXJuZWwvbGl2ZXVwZGF0ZS9NYWtlZmlsZS0xMS1vYmotJChDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUcpXHQmIzQzOz0ga2V4ZWNfaGFuZG92ZXJfZGVidWcub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg3MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgS2V4ZWMgSGFuZG92ZXIgRnVuY3Rpb25hbGl0eSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJIHNlZSBgQ09ORklHX0tFWEVDX0hBTkRPVkVSYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZS4gVGltZSB0byBkaWcgaW50byB0aGUgY29yZSBmdW5jdGlvbnMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlc2U6IGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCwgYGtob19yYWRpeF9hZGRfcGFnZWAsIGBraG9fcmFkaXhfZGVsX3BhZ2VgLCBga2hvX3ByZXNlcnZlX3BhZ2VzYCwgYGtob191bnByZXNlcnZlX3BhZ2VzYCwgYW5kIGBraG9fcmFkaXhfd2Fsa190cmVlYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AgaXMgY29ycmVjdGx5IGV4cG9ydGVkIGFuZCByZWFjaGFibGUuIEFoLCB5ZXMsIGBFWFBPUlRfU1lNQk9MX0dQTChraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKWAgY29uZmlybXMgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIHZpc2libGUgdG8gbW9kdWxlcyB3aXRoIGEgR1BMIGxpY2Vuc2UuIFRoaXMgaXMgYSBmcmVzaCBmdW5jdGlvbiwgaW50ZXJlc3RpbmcuIFRoZSByZXN0IGFwcGVhciB0byBiZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBleGlzdGluZyBmdW5jdGlvbnMuIENoZWNraW5nLi4uIGBraG9fcHJlc2VydmVfcGFnZXNgIGlzIGV4cG9ydGVkLCBga2hvX3VucHJlc2VydmVfcGFnZXNgIGlzIGV4cG9ydGVkLCBga2hvX3JhZGl4X2FkZF9wYWdlYCBpcyBleHBvcnRlZCwgYGtob19yYWRpeF9kZWxfcGFnZWAgaXMgZXhwb3J0ZWQsIGFuZCBga2hvX3JhZGl4X3dhbGtfdHJlZWAgaXMgZXhwb3J0ZWQuIFdhaXQsIGBraG9fcmFkaXhfYWRkX3BhZ2VgIGFuZCBga2hvX3JhZGl4X2RlbF9wYWdlYCBhcmUgZXhwb3J0ZWQ/IEhtbSwgdGhhdCYjMzk7cyBub3Qgd2hhdCBJIGV4cGVjdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhZGRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfR1BMXFwoa2hvX3JhZGl4X2FkZF9wYWdlXFwpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTc0PWludCBraG9fcmFkaXhfYWRkX3BhZ2Uoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjQyLX1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MjQzOkVYUE9SVF9TWU1CT0xfR1BMKGtob19yYWRpeF9hZGRfcGFnZSk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTI0NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NTIKCQkJCQkJCW91dHB1dDogMjIxCgkJCQkJCQl0aG91Z2h0czogNTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtITyBQYWdlIFNwbGl0dGluZyBQYXRjaCoqCgpPa2F5LCB5ZXMsIEkmIzM5O3ZlIGdvdCB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGVzZSBuZXcgYW5kIG1vZGlmaWVkIHN0YXRpYyBmdW5jdGlvbnM6IGBraG9faXNfcGFnZV9zcGxpdGAsIGBraG9fcmVzdG9yZV9yZWZjb3VudHNgLCBhbmQgdGhlIHVwZGF0ZWQgcmFkaXggZW5jb2RpbmcvZGVjb2Rpbmc6IGBraG9fcmFkaXhfZW5jb2RlX2tleWAgYW5kIGBraG9fcmFkaXhfZGVjb2RlX2tleWAuCgpOb3csIGxldCYjMzk7cyBmb2N1cyBvbiB0aGVzZSBrZXkgc3ltYm9scyB0aGF0IHNlZW0gY2VudHJhbCB0byB0aGUgY2hhbmdlczogYGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXNgLCBga2hvX3ByZXNlcnZlX3BhZ2VzYCwgYGtob191bnByZXNlcnZlX3BhZ2VzYCwgYGtob19yYWRpeF9hZGRfcGFnZWAsIGBraG9fcmFkaXhfZGVsX3BhZ2VgLCBga2hvX3JhZGl4X3dhbGtfdHJlZWAsIGFuZCwgaG9sZCBvbiwgYGtob19wcmVzZXJ2ZV9mb2xpb2AgYW5kIGBraG9fdW5wcmVzZXJ2ZV9mb2xpb2AuIEFoLCByaWdodCwgdGhvc2UgbGFzdCB0d28gYXJlIGFsc28gbW9kaWZpZWQgdG8gdXNlIGBLSE9fUEFHRV9DT05USUdgLCBnb29kIGNhdGNoLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aG9zZS4KCkp1c3QgZG91YmxlLWNoZWNraW5nLCBpcyBgS0VYRUNfSEFORE9WRVJgIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZyBoZXJlPyBZZXMsIGBDT05GSUdfS0VYRUNfSEFORE9WRVJgIHNlZW1zIHN1ZmZpY2llbnQuCgpOb3csIGEgY3J1Y2lhbCBwb2ludDogaXMgYGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXNgIGFjdHVhbGx5IHJlYWNoYWJsZT8gSXQgKmlzKiBleHBvcnRlZCwgbWVhbmluZyBtb2R1bGVzIGNvdWxkIHBvdGVudGlhbGx5IGNhbGwgaXQuIEJ1dCBpcyB0aGVyZSBhIG1vZHVsZSB0aGF0ICpkb2VzKj8gT2theSwgSSYjMzk7dmUgc2VhcmNoZWQsIGFuZCBmb3VuZCBubyBkaXJlY3QgY2FsbGVycy4gSG93ZXZlciwgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIGNvdWxkIGJlIHVzZWQgaW4gYSBsYXRlciBwYXRjaCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGl0IG1lYW5zIHRoYXQgc3l6a2FsbGVyICpjb3VsZCogZ2VuZXJhdGUgY2FsbHMgdG8gaXQgaWYgaXQga25vd3MgYWJvdXQgaXQuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gdGhlIGNvcmUga2VybmVsIOKAkyBzcGVjaWZpY2FsbHkgbGl2ZXVwZGF0ZSBhbmQga2V4ZWNfaGFuZG92ZXIg4oCTIGl0JiMzOTtzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gVGhlIHJhZGl4IHRyZWUgYW5kIHBhZ2UgcHJlc2VydmF0aW9uIGxvZ2ljIGFyZSBiZWluZyBtb2RpZmllZCBmb3Igc3BsaXQgcGFnZXMsIHNvIHdlIG5lZWQgdG8gdGVzdCB0aGlzIHRob3JvdWdobHkuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZm9ybXVsYXRlIG15IHJlc3BvbnNlLgoKKipXb3J0aEZ1enppbmc6IHRydWUqKgoKKipGb2N1c1N5bWJvbHM6KioKCiogICBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AKKiAgIGBraG9fcHJlc2VydmVfcGFnZXNgCiogICBga2hvX3VucHJlc2VydmVfcGFnZXNgCiogICBga2hvX3JhZGl4X2FkZF9wYWdlYAoqICAgYGtob19yYWRpeF9kZWxfcGFnZWAKKiAgIGBraG9fcmFkaXhfd2Fsa190cmVlYAoqICAgYGtob19wcmVzZXJ2ZV9mb2xpb2AKKiAgIGBraG9fdW5wcmVzZXJ2ZV9mb2xpb2AKCioqRW5hYmxlQ29uZmlnczoqKgoKKiAgIGBLRVhFQ19IQU5ET1ZFUmAKCioqUmVhc29uaW5nOioqIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AgYW5kIG1vZGlmaWVzIHRoZSBLZXhlYyBIYW5kb3ZlciAoS0hPKSByYWRpeCB0cmVlIGxvZ2ljIHRvIHN1cHBvcnQgc3BsaXQgcGFnZXMuIEl0IHRvdWNoZXMgY29yZSBmdW5jdGlvbmFsaXR5LCBhbHRlcmluZyBmdW5jdGlvbnMgbGlrZSBga2hvX3JhZGl4X2FkZF9wYWdlYCwgYGtob19yYWRpeF9kZWxfcGFnZWAsIGFuZCB0aGUgcGFnZSBwcmVzZXJ2YXRpb24gbWV0aG9kcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJiMzOTtzIGxpdmUgdXBkYXRlIG1lY2hhbmlzbSwgYW5kIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGF0IHRoZSByYWRpeCB0cmVlIGFuZCBwYWdlIHByZXNlcnZhdGlvbiBsb2dpYyBjb3JyZWN0bHkgaGFuZGxlIHNwbGl0IHBhZ2VzLCBlc3BlY2lhbGx5IGdpdmVuIHRoYXQgaXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsJiMzOTtzIGxpdmUgdXBkYXRlIG1lY2hhbmlzbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tFWEVDX0hBTkRPVkVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyYjMzQ7LAogICAgJiMzNDtraG9fcHJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7a2hvX3VucHJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7a2hvX3JhZGl4X2FkZF9wYWdlJiMzNDssCiAgICAmIzM0O2tob19yYWRpeF9kZWxfcGFnZSYjMzQ7LAogICAgJiMzNDtraG9fcmFkaXhfd2Fsa190cmVlJiMzNDssCiAgICAmIzM0O2tob19wcmVzZXJ2ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtraG9fdW5wcmVzZXJ2ZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCBhbmQgbW9kaWZpZXMgdGhlIEtleGVjIEhhbmRvdmVyIChLSE8pIHJhZGl4IHRyZWUgbG9naWMgdG8gc3VwcG9ydCBzcGxpdCBwYWdlcy4gSXQgY2hhbmdlcyBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBraG9fcmFkaXhfYWRkX3BhZ2VgLCBga2hvX3JhZGl4X2RlbF9wYWdlYCwgYGtob19wcmVzZXJ2ZV9wYWdlc2AsIGFuZCBga2hvX3VucHJlc2VydmVfcGFnZXNgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwmIzM5O3MgbGl2ZSB1cGRhdGUgbWVjaGFuaXNtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmFkaXggdHJlZSBhbmQgcGFnZSBwcmVzZXJ2YXRpb24gbG9naWMgaGFuZGxlcyBzcGxpdCBwYWdlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tFWEVDX0hBTkRPVkVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyYjMzQ7LAogICAgJiMzNDtraG9fcHJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7a2hvX3VucHJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7a2hvX3JhZGl4X2FkZF9wYWdlJiMzNDssCiAgICAmIzM0O2tob19yYWRpeF9kZWxfcGFnZSYjMzQ7LAogICAgJiMzNDtraG9fcmFkaXhfd2Fsa190cmVlJiMzNDssCiAgICAmIzM0O2tob19wcmVzZXJ2ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtraG9fdW5wcmVzZXJ2ZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCBhbmQgbW9kaWZpZXMgdGhlIEtleGVjIEhhbmRvdmVyIChLSE8pIHJhZGl4IHRyZWUgbG9naWMgdG8gc3VwcG9ydCBzcGxpdCBwYWdlcy4gSXQgY2hhbmdlcyBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBraG9fcmFkaXhfYWRkX3BhZ2VgLCBga2hvX3JhZGl4X2RlbF9wYWdlYCwgYGtob19wcmVzZXJ2ZV9wYWdlc2AsIGFuZCBga2hvX3VucHJlc2VydmVfcGFnZXNgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwmIzM5O3MgbGl2ZSB1cGRhdGUgbWVjaGFuaXNtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmFkaXggdHJlZSBhbmQgcGFnZSBwcmVzZXJ2YXRpb24gbG9naWMgaGFuZGxlcyBzcGxpdCBwYWdlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMjoyODoyMC42NjEyODI0MDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAxMjg0OTI0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS0VYRUNfSEFORE9WRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzXCIsXG4gICAgXCJraG9fcHJlc2VydmVfcGFnZXNcIixcbiAgICBcImtob191bnByZXNlcnZlX3BhZ2VzXCIsXG4gICAgXCJraG9fcmFkaXhfYWRkX3BhZ2VcIixcbiAgICBcImtob19yYWRpeF9kZWxfcGFnZVwiLFxuICAgIFwia2hvX3JhZGl4X3dhbGtfdHJlZVwiLFxuICAgIFwia2hvX3ByZXNlcnZlX2ZvbGlvXCIsXG4gICAgXCJraG9fdW5wcmVzZXJ2ZV9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXNgIGFuZCBtb2RpZmllcyB0aGUgS2V4ZWMgSGFuZG92ZXIgKEtITykgcmFkaXggdHJlZSBsb2dpYyB0byBzdXBwb3J0IHNwbGl0IHBhZ2VzLiBJdCBjaGFuZ2VzIGNvcmUgZnVuY3Rpb25zIGxpa2UgYGtob19yYWRpeF9hZGRfcGFnZWAsIGBraG9fcmFkaXhfZGVsX3BhZ2VgLCBga2hvX3ByZXNlcnZlX3BhZ2VzYCwgYW5kIGBraG9fdW5wcmVzZXJ2ZV9wYWdlc2AuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCdzIGxpdmUgdXBkYXRlIG1lY2hhbmlzbSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHJhZGl4IHRyZWUgYW5kIHBhZ2UgcHJlc2VydmF0aW9uIGxvZ2ljIGhhbmRsZXMgc3BsaXQgcGFnZXMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMjoyODoyMC42NjEyOTI0MzdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNjMxMjI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQzNGIyZDQ0NmQxZmYyOTkyYjUwNzE2MmJiMGYyY2YxYzM3NDZhMGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMyAwMjoyODoxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcXG5pbmRleCA4OTY4YzU2ZDJkNzNlMS4uNDUyZTM4YmIyMDc2ODIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oXFxuQEAgLTI0LDYgKzI0LDcgQEAgaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gdm9pZCBraG9fdW5wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbitpbnQga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG4gaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0ciwgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pO1xcbiB2b2lkIGtob191bnByZXNlcnZlX3ZtYWxsb2Moc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pO1xcbiB2b2lkICpraG9fYWxsb2NfcHJlc2VydmUoc2l6ZV90IHNpemUpO1xcbkBAIC02NSw2ICs2NiwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKSB7IH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuK3tcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfdm1hbGxvYyh2b2lkICpwdHIsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcXG4ge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmggYi9pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmhcXG5pbmRleCA4NGU5MThiOTZlNTNkZi4uOTI0NGEzZjdhMmQ0NzcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oXFxuQEAgLTM0LDE2ICszNCwyMiBAQCBzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUge1xcbiBcXHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdHMgdGhlIHRyZWUncyBzdHJ1Y3R1cmUgYW5kIHJvb3QgcG9pbnRlciAqL1xcbiB9O1xcbiBcXG4rZW51bSBraG9fcGFnZV90eXBlIHtcXG4rXFx0S0hPX1BBR0VfQ09OVElHID0gMCxcXG4rXFx0S0hPX1BBR0VfU1BMSVQsXFxuK307XFxuK1xcbiB0eXBlZGVmIGludCAoKmtob19yYWRpeF90cmVlX3dhbGtfY2FsbGJhY2tfdCkocGh5c19hZGRyX3QgcGh5cyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG9yZGVyKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG9yZGVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSXFxuIFxcbiBpbnQga2hvX3JhZGl4X2FkZF9wYWdlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSwgdW5zaWduZWQgbG9uZyBwZm4sXFxuLVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbitcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSk7XFxuIFxcbiB2b2lkIGtob19yYWRpeF9kZWxfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbi1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKTtcXG4gXFxuIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcXG4gXFx0XFx0XFx0a2hvX3JhZGl4X3RyZWVfd2Fsa19jYWxsYmFja190IGNiKTtcXG5AQCAtNTEsMTMgKzU3LDE0IEBAIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcXG4gI2Vsc2UgIC8qICNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVIgKi9cXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IGtob19yYWRpeF9hZGRfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsIGxvbmcgcGZuLFxcbi1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBvcmRlcilcXG4rXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKVxcbiB7XFxuIFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGtob19yYWRpeF9kZWxfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXFxuLVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpIHsgfVxcbitcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyLFxcbitcXHRcXHRcXHRcXHQgICAgICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSkgeyB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAga2hvX3JhZGl4X3RyZWVfd2Fsa19jYWxsYmFja190IGNiKVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xcbmluZGV4IDQ4MzRhODA5OTg1YWI3Li5lYTA4MjQ4OTAxYjU1MSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXFxuKysrIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xcbkBAIC00MywxOCArNDMsMjIgQEBcXG4gXFxuIC8qXFxuICAqIEtITyB1c2VzIHBhZ2UtXFx1MDAzZXByaXZhdGUsIHdoaWNoIGlzIGFuIHVuc2lnbmVkIGxvbmcsIHRvIHN0b3JlIHBhZ2UgbWV0YWRhdGEuXFxuLSAqIFVzZSBpdCB0byBzdG9yZSBib3RoIHRoZSBtYWdpYyBhbmQgdGhlIG9yZGVyLlxcbisgKiBVc2UgaXQgdG8gc3RvcmUgdGhlIG1hZ2ljLCB0aGUgb3JkZXIsIGFuZCB0aGUgdHlwZSBiaXQuXFxuICAqL1xcbiB1bmlvbiBraG9fcGFnZV9pbmZvIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBwYWdlX3ByaXZhdGU7XFxuIFxcdHN0cnVjdCB7XFxuLVxcdFxcdHVuc2lnbmVkIGludCBvcmRlcjtcXG4rXFx0XFx0dW5zaWduZWQgaW50IG9yZGVyIDogMzE7XFxuK1xcdFxcdHVuc2lnbmVkIGludCB0eXBlICA6IDE7XFxuIFxcdFxcdHVuc2lnbmVkIGludCBtYWdpYztcXG4gXFx0fTtcXG4gfTtcXG4gXFxuIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHVuaW9uIGtob19wYWdlX2luZm8pID09IHNpemVvZigoKHN0cnVjdCBwYWdlICopMCktXFx1MDAzZXByaXZhdGUpKTtcXG4gXFxuKyNkZWZpbmUgS0hPX0tFWV9UWVBFX1NISUZUIDYzXFxuKyNkZWZpbmUgS0hPX0tFWV9UWVBFX01BU0sgIEJJVChLSE9fS0VZX1RZUEVfU0hJRlQpXFxuK1xcbiBzdGF0aWMgYm9vbCBraG9fZW5hYmxlIF9fcm9fYWZ0ZXJfaW5pdCA9IElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUKTtcXG4gXFxuIGJvb2wga2hvX2lzX2VuYWJsZWQodm9pZClcXG5AQCAtODUsNDIgKzg5LDUyIEBAIHN0YXRpYyBzdHJ1Y3Qga2hvX291dCBraG9fb3V0ID0ge1xcbiB9O1xcbiBcXG4gLyoqXFxuLSAqIGtob19yYWRpeF9lbmNvZGVfa2V5IC0gRW5jb2RlcyBhIHBoeXNpY2FsIGFkZHJlc3MgYW5kIG9yZGVyIGludG8gYSByYWRpeCBrZXkuXFxuKyAqIGtob19yYWRpeF9lbmNvZGVfa2V5IC0gRW5jb2RlcyBhIHBoeXNpY2FsIGFkZHJlc3MsIG9yZGVyIGFuZCB0eXBlIGludG8gYSByYWRpeCBrZXkuXFxuICAqIEBwaHlzOiBUaGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcGFnZS5cXG4gICogQG9yZGVyOiBUaGUgb3JkZXIgb2YgdGhlIHBhZ2UuXFxuKyAqIEB0eXBlOiBUaGUgcGFnZSB0eXBlLlxcbiAgKlxcbi0gKiBUaGlzIGZ1bmN0aW9uIGNvbWJpbmVzIGEgcGFnZSdzIHBoeXNpY2FsIGFkZHJlc3MgYW5kIGl0cyBvcmRlciBpbnRvIGFcXG4rICogVGhpcyBmdW5jdGlvbiBjb21iaW5lcyBhIHBhZ2UncyBwaHlzaWNhbCBhZGRyZXNzLCBpdHMgb3JkZXIsIGFuZCBpdHMgdHlwZSBpbnRvIGFcXG4gICogc2luZ2xlIHVuc2lnbmVkIGxvbmcsIHdoaWNoIGlzIHVzZWQgYXMgYSBrZXkgZm9yIGFsbCByYWRpeCB0cmVlXFxuICAqIG9wZXJhdGlvbnMuXFxuICAqXFxuICAqIFJldHVybjogVGhlIGVuY29kZWQgdW5zaWduZWQgbG9uZyByYWRpeCBrZXkuXFxuICAqL1xcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBraG9fcmFkaXhfZW5jb2RlX2tleShwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGtob19yYWRpeF9lbmNvZGVfa2V5KHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGludCBvcmRlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSlcXG4ge1xcbiBcXHQvKiBPcmRlciBiaXRzIHBhcnQgKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBoID0gMVVMIFxcdTAwM2NcXHUwMDNjIChLSE9fT1JERVJfMF9MT0cyIC0gb3JkZXIpO1xcbiBcXHQvKiBTaGlmdGVkIHBoeXNpY2FsIGFkZHJlc3MgcGFydCAqL1xcbiBcXHR1bnNpZ25lZCBsb25nIGwgPSBwaHlzIFxcdTAwM2VcXHUwMDNlIChQQUdFX1NISUZUICsgb3JkZXIpO1xcbitcXHQvKiBUeXBlIGJpdCBwYXJ0ICovXFxuK1xcdHVuc2lnbmVkIGxvbmcgdCA9ICh1bnNpZ25lZCBsb25nKXR5cGUgXFx1MDAzY1xcdTAwM2MgS0hPX0tFWV9UWVBFX1NISUZUO1xcbiBcXG4tXFx0cmV0dXJuIGggfCBsO1xcbitcXHRyZXR1cm4gaCB8IGwgfCB0O1xcbiB9XFxuIFxcbiAvKipcXG4tICoga2hvX3JhZGl4X2RlY29kZV9rZXkgLSBEZWNvZGVzIGEgcmFkaXgga2V5IGJhY2sgaW50byBhIHBoeXNpY2FsIGFkZHJlc3MgYW5kIG9yZGVyLlxcbisgKiBraG9fcmFkaXhfZGVjb2RlX2tleSAtIERlY29kZXMgYSByYWRpeCBrZXkgYmFjayBpbnRvIHBoeXNpY2FsIGFkZHJlc3MsIG9yZGVyLCBhbmQgdHlwZS5cXG4gICogQGtleTogVGhlIHVuc2lnbmVkIGxvbmcga2V5IHRvIGRlY29kZS5cXG4gICogQG9yZGVyOiBBbiBvdXRwdXQgcGFyYW1ldGVyLCBhIHBvaW50ZXIgdG8gYW4gdW5zaWduZWQgaW50IHdoZXJlIHRoZSBkZWNvZGVkXFxuICAqICAgICAgICAgcGFnZSBvcmRlciB3aWxsIGJlIHN0b3JlZC5cXG4rICogQHR5cGU6IEFuIG91dHB1dCBwYXJhbWV0ZXIsIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZGVjb2RlZCB0eXBlIHdpbGwgYmUgc3RvcmVkLlxcbiAgKlxcbiAgKiBUaGlzIGZ1bmN0aW9uIHJldmVyc2VzIHRoZSBlbmNvZGluZyBwZXJmb3JtZWQgYnkga2hvX3JhZGl4X2VuY29kZV9rZXkoKSxcXG4tICogZXh0cmFjdGluZyB0aGUgb3JpZ2luYWwgcGh5c2ljYWwgYWRkcmVzcyBhbmQgcGFnZSBvcmRlciBmcm9tIGEgZ2l2ZW4ga2V5LlxcbisgKiBleHRyYWN0aW5nIHRoZSBvcmlnaW5hbCBwaHlzaWNhbCBhZGRyZXNzLCBwYWdlIG9yZGVyLCBhbmQgdHlwZSBmcm9tIGEgZ2l2ZW4ga2V5LlxcbiAgKlxcbiAgKiBSZXR1cm46IFRoZSBkZWNvZGVkIHBoeXNpY2FsIGFkZHJlc3MuXFxuICAqL1xcbi1zdGF0aWMgcGh5c19hZGRyX3Qga2hvX3JhZGl4X2RlY29kZV9rZXkodW5zaWduZWQgbG9uZyBrZXksIHVuc2lnbmVkIGludCAqb3JkZXIpXFxuK3N0YXRpYyBwaHlzX2FkZHJfdCBraG9fcmFkaXhfZGVjb2RlX2tleSh1bnNpZ25lZCBsb25nIGtleSwgdW5zaWduZWQgaW50ICpvcmRlcixcXG4rXFx0XFx0XFx0XFx0XFx0ZW51bSBraG9fcGFnZV90eXBlICp0eXBlKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBvcmRlcl9iaXQgPSBmbHM2NChrZXkpO1xcbitcXHR1bnNpZ25lZCBpbnQgb3JkZXJfYml0O1xcbiBcXHRwaHlzX2FkZHJfdCBwaHlzO1xcbiBcXG4rXFx0KnR5cGUgPSAoa2V5IFxcdTAwMjYgS0hPX0tFWV9UWVBFX01BU0spIFxcdTAwM2VcXHUwMDNlIEtIT19LRVlfVFlQRV9TSElGVDtcXG4rXFx0a2V5IFxcdTAwMjY9IH5LSE9fS0VZX1RZUEVfTUFTSztcXG4rXFxuK1xcdG9yZGVyX2JpdCA9IGZsczY0KGtleSk7XFxuIFxcdC8qIG9yZGVyX2JpdCBpcyBudW1iZXJlZCBzdGFydGluZyBhdCAxIGZyb20gZmxzNjQgKi9cXG4gXFx0Km9yZGVyID0gS0hPX09SREVSXzBfTE9HMiAtIG9yZGVyX2JpdCArIDE7XFxuIFxcdC8qIFRoZSBvcmRlciBpcyBkaXNjYXJkZWQgYnkgdGhlIHNoaWZ0ICovXFxuQEAgLTE0OCw2ICsxNjIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBraG9fcmFkaXhfZ2V0X3RhYmxlX2luZGV4KHVuc2lnbmVkIGxvbmcga2V5LFxcbiAgKiBAdHJlZTogVGhlIEtITyByYWRpeCB0cmVlLlxcbiAgKiBAcGZuOiBUaGUgcGFnZSBmcmFtZSBudW1iZXIgb2YgdGhlIHBhZ2UgdG8gcHJlc2VydmUuXFxuICAqIEBvcmRlcjogVGhlIG9yZGVyIG9mIHRoZSBwYWdlLlxcbisgKiBAdHlwZTogVGhlIHBhZ2UgdHlwZS5cXG4gICpcXG4gICogVGhpcyBmdW5jdGlvbiB0cmF2ZXJzZXMgdGhlIHJhZGl4IHRyZWUgYmFzZWQgb24gdGhlIGtleSBkZXJpdmVkIGZyb20gQHBmblxcbiAgKiBhbmQgQG9yZGVyLiBJdCBzZXRzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpbiB0aGUgbGVhZiBiaXRtYXAgdG8gbWFyayB0aGVcXG5AQCAtMTU3LDExICsxNzIsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcga2hvX3JhZGl4X2dldF90YWJsZV9pbmRleCh1bnNpZ25lZCBsb25nIGtleSxcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbiAgKi9cXG4gaW50IGtob19yYWRpeF9hZGRfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXFxuLVxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyKVxcbitcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBvcmRlcixcXG4rXFx0XFx0ICAgICAgIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKVxcbiB7XFxuIFxcdC8qIE5ld2x5IGFsbG9jYXRlZCBub2RlcyBmb3IgZXJyb3IgY2xlYW51cCAqL1xcbiBcXHRzdHJ1Y3Qga2hvX3JhZGl4X25vZGUgKmludGVybWVkaWF0ZV9ub2Rlc1tLSE9fVFJFRV9NQVhfREVQVEhdID0geyAwIH07XFxuLVxcdHVuc2lnbmVkIGxvbmcga2V5ID0ga2hvX3JhZGl4X2VuY29kZV9rZXkoUEZOX1BIWVMocGZuKSwgb3JkZXIpO1xcbitcXHR1bnNpZ25lZCBsb25nIGtleSA9IGtob19yYWRpeF9lbmNvZGVfa2V5KFBGTl9QSFlTKHBmbiksIG9yZGVyLCB0eXBlKTtcXG4gXFx0c3RydWN0IGtob19yYWRpeF9ub2RlICphbmNob3Jfbm9kZSA9IE5VTEw7XFxuIFxcdHN0cnVjdCBraG9fcmFkaXhfbm9kZSAqbm9kZSA9IHRyZWUtXFx1MDAzZXJvb3Q7XFxuIFxcdHN0cnVjdCBraG9fcmFkaXhfbm9kZSAqbmV3X25vZGU7XFxuQEAgLTIzMSwxNSArMjQ3LDE2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGtob19yYWRpeF9hZGRfcGFnZSk7XFxuICAqIEB0cmVlOiBUaGUgS0hPIHJhZGl4IHRyZWUuXFxuICAqIEBwZm46IFRoZSBwYWdlIGZyYW1lIG51bWJlciBvZiB0aGUgcGFnZSB0byB1bnByZXNlcnZlLlxcbiAgKiBAb3JkZXI6IFRoZSBvcmRlciBvZiB0aGUgcGFnZS5cXG4rICogQHR5cGU6IFRoZSBwYWdlIHR5cGUuXFxuICAqXFxuICAqIFRoaXMgZnVuY3Rpb24gdHJhdmVyc2VzIHRoZSByYWRpeCB0cmVlIGFuZCBjbGVhcnMgdGhlIGJpdCBjb3JyZXNwb25kaW5nIHRvXFxuICAqIHRoZSBwYWdlLCBlZmZlY3RpdmVseSByZW1vdmluZyBpdHMgXFxcInByZXNlcnZlZFxcXCIgc3RhdHVzLiBJdCBkb2VzIG5vdCBmcmVlXFxuICAqIHRoZSB0cmVlJ3MgaW50ZXJtZWRpYXRlIG5vZGVzLCBldmVuIGlmIHRoZXkgYmVjb21lIGVtcHR5LlxcbiAgKi9cXG4gdm9pZCBraG9fcmFkaXhfZGVsX3BhZ2Uoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4tXFx0XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyKVxcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcga2V5ID0ga2hvX3JhZGl4X2VuY29kZV9rZXkoUEZOX1BIWVMocGZuKSwgb3JkZXIpO1xcbitcXHR1bnNpZ25lZCBsb25nIGtleSA9IGtob19yYWRpeF9lbmNvZGVfa2V5KFBGTl9QSFlTKHBmbiksIG9yZGVyLCB0eXBlKTtcXG4gXFx0c3RydWN0IGtob19yYWRpeF9ub2RlICpub2RlID0gdHJlZS1cXHUwMDNlcm9vdDtcXG4gXFx0c3RydWN0IGtob19yYWRpeF9sZWFmICpsZWFmO1xcbiBcXHR1bnNpZ25lZCBpbnQgaSwgaWR4O1xcbkBAIC0yNzcsMTQgKzI5NCwxNSBAQCBzdGF0aWMgaW50IGtob19yYWRpeF93YWxrX2xlYWYoc3RydWN0IGtob19yYWRpeF9sZWFmICpsZWFmLFxcbiBcXHRcXHRcXHQgICAgICAga2hvX3JhZGl4X3RyZWVfd2Fsa19jYWxsYmFja190IGNiKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKmJpdG1hcCA9ICh1bnNpZ25lZCBsb25nICopbGVhZjtcXG4rXFx0ZW51bSBraG9fcGFnZV90eXBlIHR5cGU7XFxuIFxcdHVuc2lnbmVkIGludCBvcmRlcjtcXG4gXFx0cGh5c19hZGRyX3QgcGh5cztcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRmb3JfZWFjaF9zZXRfYml0KGksIGJpdG1hcCwgUEFHRV9TSVpFICogQklUU19QRVJfQllURSkge1xcbi1cXHRcXHRwaHlzID0ga2hvX3JhZGl4X2RlY29kZV9rZXkoa2V5IHwgaSwgXFx1MDAyNm9yZGVyKTtcXG4tXFx0XFx0ZXJyID0gY2IocGh5cywgb3JkZXIpO1xcbitcXHRcXHRwaHlzID0ga2hvX3JhZGl4X2RlY29kZV9rZXkoa2V5IHwgaSwgXFx1MDAyNm9yZGVyLCBcXHUwMDI2dHlwZSk7XFxuK1xcdFxcdGVyciA9IGNiKHBoeXMsIG9yZGVyLCB0eXBlKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbkBAIC0zNTcsMTEgKzM3NSwxOCBAQCBpbnQga2hvX3JhZGl4X3dhbGtfdHJlZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoa2hvX3JhZGl4X3dhbGtfdHJlZSk7XFxuIFxcbi0vKiBGb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIDAtb3JkZXIgcGFnZXMuICovXFxuLXN0YXRpYyB2b2lkIGtob19pbml0X3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbisvKiBGb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIHBhZ2VzLiAqL1xcbitzdGF0aWMgdm9pZCBraG9fcmVzdG9yZV9yZWZjb3VudHMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuK1xcdFxcdFxcdFxcdCAgZW51bSBraG9fcGFnZV90eXBlIHR5cGUpXFxuIHtcXG4tXFx0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xcbi1cXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMSk7XFxuK1xcdC8qIEhlYWQgcGFnZSBhbHdheXMgZ2V0cyByZWZjb3VudCBvZiAxLiAqL1xcbitcXHRzZXRfcGFnZV9jb3VudChwYWdlLCAxKTtcXG4rXFx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAxOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQgPSAodHlwZSA9PSBLSE9fUEFHRV9TUExJVCkgPyAxIDogMDtcXG4rXFxuK1xcdFxcdHNldF9wYWdlX2NvdW50KHBhZ2UgKyBpLCBjb3VudCk7XFxuIFxcdFxcdC8qIENsZWFyIGVhY2ggcGFnZSdzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cXG4gXFx0XFx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UgKyBpKTtcXG4gXFx0fVxcbkBAIC0zNjksMTYgKzM5NCw3IEBAIHN0YXRpYyB2b2lkIGtob19pbml0X3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbiBcXG4gc3RhdGljIHZvaWQga2hvX2luaXRfZm9saW8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gKDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbi1cXG4tXFx0LyogSGVhZCBwYWdlIGdldHMgcmVmY291bnQgb2YgMS4gKi9cXG4tXFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMSk7XFxuLVxcdC8qIENsZWFyIGhlYWQgcGFnZSdzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cXG4tXFx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xcbi1cXG4tXFx0LyogRm9yIGhpZ2hlciBvcmRlciBmb2xpb3MsIHRhaWwgcGFnZXMgZ2V0IGEgcGFnZSBjb3VudCBvZiB6ZXJvLiAqL1xcbi1cXHRmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDE7IGkgXFx1MDAzYyBucl9wYWdlczsgaSsrKVxcbi1cXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMCk7XFxuK1xcdGtob19yZXN0b3JlX3JlZmNvdW50cyhwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyLCBLSE9fUEFHRV9DT05USUcpO1xcbiBcXG4gXFx0aWYgKG9yZGVyIFxcdTAwM2UgMClcXG4gXFx0XFx0cHJlcF9jb21wb3VuZF9wYWdlKHBhZ2UsIG9yZGVyKTtcXG5AQCAtNDAzLDEzICs0MTksMjAgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMsIGJvb2wgaXNfZm9saW8pXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRucl9wYWdlcyA9ICgxIFxcdTAwM2NcXHUwMDNjIGluZm8ub3JkZXIpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogSWYgd2Ugd2FudCB0byByZXN0b3JlIGEgZm9saW8sIGJ1dCB0aGUgbWVtb3J5IHdhcyBzcGxpdCBpbiB0aGVcXG4rXFx0ICogcHJldmlvdXMga2VybmVsLCBzb21ldGhpbmcgaXMgd3JvbmcuXFxuK1xcdCAqL1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKGlzX2ZvbGlvIFxcdTAwMjZcXHUwMDI2IGluZm8udHlwZSA9PSBLSE9fUEFHRV9TUExJVCkpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4gXFx0LyogQ2xlYXIgcHJpdmF0ZSB0byBtYWtlIHN1cmUgbGF0ZXIgcmVzdG9yZXMgb24gdGhpcyBwYWdlIGVycm9yIG91dC4gKi9cXG4gXFx0cGFnZS1cXHUwMDNlcHJpdmF0ZSA9IDA7XFxuIFxcbiBcXHRpZiAoaXNfZm9saW8pXFxuIFxcdFxcdGtob19pbml0X2ZvbGlvKHBhZ2UsIGluZm8ub3JkZXIpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdGtob19pbml0X3BhZ2VzKHBhZ2UsIG5yX3BhZ2VzKTtcXG4rXFx0XFx0a2hvX3Jlc3RvcmVfcmVmY291bnRzKHBhZ2UsIG5yX3BhZ2VzLCBpbmZvLnR5cGUpO1xcbiBcXG4gXFx0YWRqdXN0X21hbmFnZWRfcGFnZV9jb3VudChwYWdlLCBucl9wYWdlcyk7XFxuIFxcdHJldHVybiBwYWdlO1xcbkBAIC00ODUsNyArNTA4LDggQEAgc3RhdGljIHN0cnVjdCBwYWdlICpfX2luaXQga2hvX2dldF9wcmVzZXJ2ZWRfcGFnZShwaHlzX2FkZHJfdCBwaHlzLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IF9faW5pdCBraG9fcHJlc2VydmVkX21lbW9yeV9yZXNlcnZlKHBoeXNfYWRkcl90IHBoeXMsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSlcXG4ge1xcbiBcXHR1bmlvbiBraG9fcGFnZV9pbmZvIGluZm87XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbkBAIC00OTksNiArNTIzLDcgQEAgc3RhdGljIGludCBfX2luaXQga2hvX3ByZXNlcnZlZF9tZW1vcnlfcmVzZXJ2ZShwaHlzX2FkZHJfdCBwaHlzLFxcbiBcXHRtZW1ibG9ja19yZXNlcnZlZF9tYXJrX25vaW5pdChwaHlzLCBzeik7XFxuIFxcdGluZm8ubWFnaWMgPSBLSE9fUEFHRV9NQUdJQztcXG4gXFx0aW5mby5vcmRlciA9IG9yZGVyO1xcbitcXHRpbmZvLnR5cGUgPSB0eXBlO1xcbiBcXHRwYWdlLVxcdTAwM2Vwcml2YXRlID0gaW5mby5wYWdlX3ByaXZhdGU7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtODU5LDcgKzg4NCw3IEBAIGludCBraG9fcHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0aWYgKFdBUk5fT04oa2hvX3NjcmF0Y2hfb3ZlcmxhcChwZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCwgUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0cmV0dXJuIGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTtcXG4rXFx0cmV0dXJuIGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyLCBLSE9fUEFHRV9DT05USUcpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob19wcmVzZXJ2ZV9mb2xpbyk7XFxuIFxcbkBAIC04NzcsNyArOTAyLDcgQEAgdm9pZCBraG9fdW5wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRjb25zdCB1bnNpZ25lZCBsb25nIHBmbiA9IGZvbGlvX3Bmbihmb2xpbyk7XFxuIFxcdGNvbnN0IHVuc2lnbmVkIGludCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcXG4gXFxuLVxcdGtob19yYWRpeF9kZWxfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTtcXG4rXFx0a2hvX3JhZGl4X2RlbF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIsIEtIT19QQUdFX0NPTlRJRyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfZm9saW8pO1xcbiBcXG5AQCAtODk4LDE1ICs5MjMsMjkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4gXFx0cmV0dXJuIG9yZGVyO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBraG9faXNfcGFnZV9zcGxpdCh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZSByZWZjb3VudCBvZiB0aGUgc2Vjb25kIHBhZ2UgaXMgbm9uLXplcm8sIHRoaXMgYmxvY2tcXG4rXFx0ICogaGFzIGJlZW4gc3BsaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAob3JkZXIgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHBhZ2VfcmVmX2NvdW50KHBmbl90b19wYWdlKHBmbiArIDEpKSAhPSAwKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgX19raG9fdW5wcmVzZXJ2ZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXFxuIFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgb3JkZXI7XFxuLVxcbiBcXHR3aGlsZSAocGZuIFxcdTAwM2MgZW5kX3Bmbikge1xcbi1cXHRcXHRvcmRlciA9IF9fa2hvX3ByZXNlcnZlX3BhZ2VzX29yZGVyKHBmbiwgZW5kX3Bmbik7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBvcmRlciA9IF9fa2hvX3ByZXNlcnZlX3BhZ2VzX29yZGVyKHBmbiwgZW5kX3Bmbik7XFxuK1xcdFxcdGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlO1xcbiBcXG4tXFx0XFx0a2hvX3JhZGl4X2RlbF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIpO1xcbitcXHRcXHR0eXBlID0ga2hvX2lzX3BhZ2Vfc3BsaXQocGZuLCBvcmRlcikgPyBLSE9fUEFHRV9TUExJVCA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBLSE9fUEFHRV9DT05USUc7XFxuK1xcbitcXHRcXHRraG9fcmFkaXhfZGVsX3BhZ2UodHJlZSwgcGZuLCBvcmRlciwgdHlwZSk7XFxuIFxcbiBcXHRcXHRwZm4gKz0gMSBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4gXFx0fVxcbkBAIC05MzgsOCArOTc3LDEyIEBAIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuIFxcbiBcXHR3aGlsZSAocGZuIFxcdTAwM2MgZW5kX3Bmbikge1xcbiBcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xcbitcXHRcXHRlbnVtIGtob19wYWdlX3R5cGUgdHlwZTtcXG4rXFxuK1xcdFxcdHR5cGUgPSBraG9faXNfcGFnZV9zcGxpdChwZm4sIG9yZGVyKSA/IEtIT19QQUdFX1NQTElUIDpcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIEtIT19QQUdFX0NPTlRJRztcXG4gXFxuLVxcdFxcdGVyciA9IGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTtcXG4rXFx0XFx0ZXJyID0ga2hvX3JhZGl4X2FkZF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIsIHR5cGUpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdGZhaWxlZF9wZm4gPSBwZm47XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC05NzUsNiArMTAxOCwyOSBAQCB2b2lkIGtob191bnByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3BhZ2VzKTtcXG4gXFxuKy8qKlxcbisgKiBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzIC0gc3BsaXQgY29udGlndW91cyBwYWdlcyB0aGF0IGFyZSBwcmVzZXJ2ZWRcXG4rICogQHBhZ2U6IGZpcnN0IHBhZ2UgaW4gdGhlIGxpc3QuXFxuKyAqIEBvcmRlcjogdGhlIG9yZGVyIG9mIHRoZSBvcmlnaW5hbCBhbGxvY2F0aW9uLlxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byBzcGxpdCBhIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbiB0aGF0IGhhcyBiZWVuXFxuKyAqIHByZXNlcnZlZCBhY3Jvc3Mga2V4ZWMuIEl0IHVucHJlc2VydmVzIHRoZSBwYWdlcywgc3BsaXRzIHRoZW0gdXNpbmdcXG4rICogc3BsaXRfcGFnZSgpIGFuZCB0aGVuIHJlLXByZXNlcnZlcyB0aGVtIGFzIGluZGl2aWR1YWwgcGFnZXMuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gTVVTVCBvbmx5IGJlIGNhbGxlZCBvbiBwYWdlcyB0aGF0IGFyZSBjdXJyZW50bHkgcHJlc2VydmVkLlxcbisgKiBUaGUgQG9yZGVyIHByb3ZpZGVkIE1VU1QgbWF0Y2ggdGhlIG9yZGVyIHVzZWQgZHVyaW5nIHRoZSBpbml0aWFsXFxuKyAqIHByZXNlcnZhdGlvbi5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4re1xcbitcXHRraG9fdW5wcmVzZXJ2ZV9wYWdlcyhwYWdlLCAxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbitcXHRzcGxpdF9wYWdlKHBhZ2UsIG9yZGVyKTtcXG4rXFx0cmV0dXJuIGtob19wcmVzZXJ2ZV9wYWdlcyhwYWdlLCAxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMpO1xcbitcXG4gLyogdm1hbGxvYyBmbGFncyBLSE8gc3VwcG9ydHMgKi9cXG4gI2RlZmluZSBLSE9fVk1BTExPQ19TVVBQT1JURURfRkxBR1NcXHQoVk1fQUxMT0MgfCBWTV9BTExPV19IVUdFX1ZNQVApXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMjoyODoyMS4xNjg1OTk0MThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4OTYyMTE2NTMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLRVhFQ19IQU5ET1ZFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXNcIixcbiAgICBcImtob19wcmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwia2hvX3VucHJlc2VydmVfcGFnZXNcIixcbiAgICBcImtob19yYWRpeF9hZGRfcGFnZVwiLFxuICAgIFwia2hvX3JhZGl4X2RlbF9wYWdlXCIsXG4gICAgXCJraG9fcmFkaXhfd2Fsa190cmVlXCIsXG4gICAgXCJraG9fcHJlc2VydmVfZm9saW9cIixcbiAgICBcImtob191bnByZXNlcnZlX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AgYW5kIG1vZGlmaWVzIHRoZSBLZXhlYyBIYW5kb3ZlciAoS0hPKSByYWRpeCB0cmVlIGxvZ2ljIHRvIHN1cHBvcnQgc3BsaXQgcGFnZXMuIEl0IGNoYW5nZXMgY29yZSBmdW5jdGlvbnMgbGlrZSBga2hvX3JhZGl4X2FkZF9wYWdlYCwgYGtob19yYWRpeF9kZWxfcGFnZWAsIGBraG9fcHJlc2VydmVfcGFnZXNgLCBhbmQgYGtob191bnByZXNlcnZlX3BhZ2VzYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJ3MgbGl2ZSB1cGRhdGUgbWVjaGFuaXNtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmFkaXggdHJlZSBhbmQgcGFnZSBwcmVzZXJ2YXRpb24gbG9naWMgaGFuZGxlcyBzcGxpdCBwYWdlcyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDM0YjJkNDQ2ZDFmZjI5OTJiNTA3MTYyYmIwZjJjZjFjMzc0NmEwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMgMDI6Mjg6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcbmluZGV4IDg5NjhjNTZkMmQ3M2UxLi40NTJlMzhiYjIwNzY4MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oXG5AQCAtMjQsNiArMjQsNyBAQCBpbnQga2hvX3ByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIHZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4raW50IGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4gaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0ciwgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pO1xuIHZvaWQga2hvX3VucHJlc2VydmVfdm1hbGxvYyhzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XG4gdm9pZCAqa2hvX2FsbG9jX3ByZXNlcnZlKHNpemVfdCBzaXplKTtcbkBAIC02NSw2ICs2NiwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcykgeyB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBvcmRlcilcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0cixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oIGIvaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oXG5pbmRleCA4NGU5MThiOTZlNTNkZi4uOTI0NGEzZjdhMmQ0NzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmhcbisrKyBiL2luY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaFxuQEAgLTM0LDE2ICszNCwyMiBAQCBzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUge1xuIFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3RzIHRoZSB0cmVlJ3Mgc3RydWN0dXJlIGFuZCByb290IHBvaW50ZXIgKi9cbiB9O1xuIFxuK2VudW0ga2hvX3BhZ2VfdHlwZSB7XG4rXHRLSE9fUEFHRV9DT05USUcgPSAwLFxuK1x0S0hPX1BBR0VfU1BMSVQsXG4rfTtcbitcbiB0eXBlZGVmIGludCAoKmtob19yYWRpeF90cmVlX3dhbGtfY2FsbGJhY2tfdCkocGh5c19hZGRyX3QgcGh5cyxcbi1cdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG9yZGVyKTtcbitcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG9yZGVyLFxuK1x0XHRcdFx0XHQgICAgICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSk7XG4gXG4gI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxuIFxuIGludCBraG9fcmFkaXhfYWRkX3BhZ2Uoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLCB1bnNpZ25lZCBsb25nIHBmbixcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBvcmRlcik7XG4rXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKTtcbiBcbiB2b2lkIGtob19yYWRpeF9kZWxfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsIHVuc2lnbmVkIGxvbmcgcGZuLFxuLVx0XHRcdHVuc2lnbmVkIGludCBvcmRlcik7XG4rXHRcdFx0dW5zaWduZWQgaW50IG9yZGVyLCBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSk7XG4gXG4gaW50IGtob19yYWRpeF93YWxrX3RyZWUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxuIFx0XHRcdGtob19yYWRpeF90cmVlX3dhbGtfY2FsbGJhY2tfdCBjYik7XG5AQCAtNTEsMTMgKzU3LDE0IEBAIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbiAjZWxzZSAgLyogI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGtob19yYWRpeF9hZGRfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsIGxvbmcgcGZuLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgb3JkZXIpXG4rXHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBvcmRlciwgZW51bSBraG9fcGFnZV90eXBlIHR5cGUpXG4ge1xuIFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQga2hvX3JhZGl4X2RlbF9wYWdlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbi1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpIHsgfVxuK1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0XHRcdCAgICAgIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKSB7IH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbiBcdFx0XHRcdCAgICAgIGtob19yYWRpeF90cmVlX3dhbGtfY2FsbGJhY2tfdCBjYilcbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuaW5kZXggNDgzNGE4MDk5ODVhYjcuLmVhMDgyNDg5MDFiNTUxIDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuKysrIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuQEAgLTQzLDE4ICs0MywyMiBAQFxuIFxuIC8qXG4gICogS0hPIHVzZXMgcGFnZS1cdTAwM2Vwcml2YXRlLCB3aGljaCBpcyBhbiB1bnNpZ25lZCBsb25nLCB0byBzdG9yZSBwYWdlIG1ldGFkYXRhLlxuLSAqIFVzZSBpdCB0byBzdG9yZSBib3RoIHRoZSBtYWdpYyBhbmQgdGhlIG9yZGVyLlxuKyAqIFVzZSBpdCB0byBzdG9yZSB0aGUgbWFnaWMsIHRoZSBvcmRlciwgYW5kIHRoZSB0eXBlIGJpdC5cbiAgKi9cbiB1bmlvbiBraG9fcGFnZV9pbmZvIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGFnZV9wcml2YXRlO1xuIFx0c3RydWN0IHtcbi1cdFx0dW5zaWduZWQgaW50IG9yZGVyO1xuK1x0XHR1bnNpZ25lZCBpbnQgb3JkZXIgOiAzMTtcbitcdFx0dW5zaWduZWQgaW50IHR5cGUgIDogMTtcbiBcdFx0dW5zaWduZWQgaW50IG1hZ2ljO1xuIFx0fTtcbiB9O1xuIFxuIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHVuaW9uIGtob19wYWdlX2luZm8pID09IHNpemVvZigoKHN0cnVjdCBwYWdlICopMCktXHUwMDNlcHJpdmF0ZSkpO1xuIFxuKyNkZWZpbmUgS0hPX0tFWV9UWVBFX1NISUZUIDYzXG4rI2RlZmluZSBLSE9fS0VZX1RZUEVfTUFTSyAgQklUKEtIT19LRVlfVFlQRV9TSElGVClcbitcbiBzdGF0aWMgYm9vbCBraG9fZW5hYmxlIF9fcm9fYWZ0ZXJfaW5pdCA9IElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUKTtcbiBcbiBib29sIGtob19pc19lbmFibGVkKHZvaWQpXG5AQCAtODUsNDIgKzg5LDUyIEBAIHN0YXRpYyBzdHJ1Y3Qga2hvX291dCBraG9fb3V0ID0ge1xuIH07XG4gXG4gLyoqXG4tICoga2hvX3JhZGl4X2VuY29kZV9rZXkgLSBFbmNvZGVzIGEgcGh5c2ljYWwgYWRkcmVzcyBhbmQgb3JkZXIgaW50byBhIHJhZGl4IGtleS5cbisgKiBraG9fcmFkaXhfZW5jb2RlX2tleSAtIEVuY29kZXMgYSBwaHlzaWNhbCBhZGRyZXNzLCBvcmRlciBhbmQgdHlwZSBpbnRvIGEgcmFkaXgga2V5LlxuICAqIEBwaHlzOiBUaGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcGFnZS5cbiAgKiBAb3JkZXI6IFRoZSBvcmRlciBvZiB0aGUgcGFnZS5cbisgKiBAdHlwZTogVGhlIHBhZ2UgdHlwZS5cbiAgKlxuLSAqIFRoaXMgZnVuY3Rpb24gY29tYmluZXMgYSBwYWdlJ3MgcGh5c2ljYWwgYWRkcmVzcyBhbmQgaXRzIG9yZGVyIGludG8gYVxuKyAqIFRoaXMgZnVuY3Rpb24gY29tYmluZXMgYSBwYWdlJ3MgcGh5c2ljYWwgYWRkcmVzcywgaXRzIG9yZGVyLCBhbmQgaXRzIHR5cGUgaW50byBhXG4gICogc2luZ2xlIHVuc2lnbmVkIGxvbmcsIHdoaWNoIGlzIHVzZWQgYXMgYSBrZXkgZm9yIGFsbCByYWRpeCB0cmVlXG4gICogb3BlcmF0aW9ucy5cbiAgKlxuICAqIFJldHVybjogVGhlIGVuY29kZWQgdW5zaWduZWQgbG9uZyByYWRpeCBrZXkuXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcga2hvX3JhZGl4X2VuY29kZV9rZXkocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgaW50IG9yZGVyKVxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGtob19yYWRpeF9lbmNvZGVfa2V5KHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0XHRcdFx0ICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSlcbiB7XG4gXHQvKiBPcmRlciBiaXRzIHBhcnQgKi9cbiBcdHVuc2lnbmVkIGxvbmcgaCA9IDFVTCBcdTAwM2NcdTAwM2MgKEtIT19PUkRFUl8wX0xPRzIgLSBvcmRlcik7XG4gXHQvKiBTaGlmdGVkIHBoeXNpY2FsIGFkZHJlc3MgcGFydCAqL1xuIFx0dW5zaWduZWQgbG9uZyBsID0gcGh5cyBcdTAwM2VcdTAwM2UgKFBBR0VfU0hJRlQgKyBvcmRlcik7XG4rXHQvKiBUeXBlIGJpdCBwYXJ0ICovXG4rXHR1bnNpZ25lZCBsb25nIHQgPSAodW5zaWduZWQgbG9uZyl0eXBlIFx1MDAzY1x1MDAzYyBLSE9fS0VZX1RZUEVfU0hJRlQ7XG4gXG4tXHRyZXR1cm4gaCB8IGw7XG4rXHRyZXR1cm4gaCB8IGwgfCB0O1xuIH1cbiBcbiAvKipcbi0gKiBraG9fcmFkaXhfZGVjb2RlX2tleSAtIERlY29kZXMgYSByYWRpeCBrZXkgYmFjayBpbnRvIGEgcGh5c2ljYWwgYWRkcmVzcyBhbmQgb3JkZXIuXG4rICoga2hvX3JhZGl4X2RlY29kZV9rZXkgLSBEZWNvZGVzIGEgcmFkaXgga2V5IGJhY2sgaW50byBwaHlzaWNhbCBhZGRyZXNzLCBvcmRlciwgYW5kIHR5cGUuXG4gICogQGtleTogVGhlIHVuc2lnbmVkIGxvbmcga2V5IHRvIGRlY29kZS5cbiAgKiBAb3JkZXI6IEFuIG91dHB1dCBwYXJhbWV0ZXIsIGEgcG9pbnRlciB0byBhbiB1bnNpZ25lZCBpbnQgd2hlcmUgdGhlIGRlY29kZWRcbiAgKiAgICAgICAgIHBhZ2Ugb3JkZXIgd2lsbCBiZSBzdG9yZWQuXG4rICogQHR5cGU6IEFuIG91dHB1dCBwYXJhbWV0ZXIsIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZGVjb2RlZCB0eXBlIHdpbGwgYmUgc3RvcmVkLlxuICAqXG4gICogVGhpcyBmdW5jdGlvbiByZXZlcnNlcyB0aGUgZW5jb2RpbmcgcGVyZm9ybWVkIGJ5IGtob19yYWRpeF9lbmNvZGVfa2V5KCksXG4tICogZXh0cmFjdGluZyB0aGUgb3JpZ2luYWwgcGh5c2ljYWwgYWRkcmVzcyBhbmQgcGFnZSBvcmRlciBmcm9tIGEgZ2l2ZW4ga2V5LlxuKyAqIGV4dHJhY3RpbmcgdGhlIG9yaWdpbmFsIHBoeXNpY2FsIGFkZHJlc3MsIHBhZ2Ugb3JkZXIsIGFuZCB0eXBlIGZyb20gYSBnaXZlbiBrZXkuXG4gICpcbiAgKiBSZXR1cm46IFRoZSBkZWNvZGVkIHBoeXNpY2FsIGFkZHJlc3MuXG4gICovXG4tc3RhdGljIHBoeXNfYWRkcl90IGtob19yYWRpeF9kZWNvZGVfa2V5KHVuc2lnbmVkIGxvbmcga2V5LCB1bnNpZ25lZCBpbnQgKm9yZGVyKVxuK3N0YXRpYyBwaHlzX2FkZHJfdCBraG9fcmFkaXhfZGVjb2RlX2tleSh1bnNpZ25lZCBsb25nIGtleSwgdW5zaWduZWQgaW50ICpvcmRlcixcbitcdFx0XHRcdFx0ZW51bSBraG9fcGFnZV90eXBlICp0eXBlKVxuIHtcbi1cdHVuc2lnbmVkIGludCBvcmRlcl9iaXQgPSBmbHM2NChrZXkpO1xuK1x0dW5zaWduZWQgaW50IG9yZGVyX2JpdDtcbiBcdHBoeXNfYWRkcl90IHBoeXM7XG4gXG4rXHQqdHlwZSA9IChrZXkgXHUwMDI2IEtIT19LRVlfVFlQRV9NQVNLKSBcdTAwM2VcdTAwM2UgS0hPX0tFWV9UWVBFX1NISUZUO1xuK1x0a2V5IFx1MDAyNj0gfktIT19LRVlfVFlQRV9NQVNLO1xuK1xuK1x0b3JkZXJfYml0ID0gZmxzNjQoa2V5KTtcbiBcdC8qIG9yZGVyX2JpdCBpcyBudW1iZXJlZCBzdGFydGluZyBhdCAxIGZyb20gZmxzNjQgKi9cbiBcdCpvcmRlciA9IEtIT19PUkRFUl8wX0xPRzIgLSBvcmRlcl9iaXQgKyAxO1xuIFx0LyogVGhlIG9yZGVyIGlzIGRpc2NhcmRlZCBieSB0aGUgc2hpZnQgKi9cbkBAIC0xNDgsNiArMTYyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcga2hvX3JhZGl4X2dldF90YWJsZV9pbmRleCh1bnNpZ25lZCBsb25nIGtleSxcbiAgKiBAdHJlZTogVGhlIEtITyByYWRpeCB0cmVlLlxuICAqIEBwZm46IFRoZSBwYWdlIGZyYW1lIG51bWJlciBvZiB0aGUgcGFnZSB0byBwcmVzZXJ2ZS5cbiAgKiBAb3JkZXI6IFRoZSBvcmRlciBvZiB0aGUgcGFnZS5cbisgKiBAdHlwZTogVGhlIHBhZ2UgdHlwZS5cbiAgKlxuICAqIFRoaXMgZnVuY3Rpb24gdHJhdmVyc2VzIHRoZSByYWRpeCB0cmVlIGJhc2VkIG9uIHRoZSBrZXkgZGVyaXZlZCBmcm9tIEBwZm5cbiAgKiBhbmQgQG9yZGVyLiBJdCBzZXRzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpbiB0aGUgbGVhZiBiaXRtYXAgdG8gbWFyayB0aGVcbkBAIC0xNTcsMTEgKzE3MiwxMiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBraG9fcmFkaXhfZ2V0X3RhYmxlX2luZGV4KHVuc2lnbmVkIGxvbmcga2V5LFxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgKi9cbiBpbnQga2hvX3JhZGl4X2FkZF9wYWdlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4rXHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyLFxuK1x0XHQgICAgICAgZW51bSBraG9fcGFnZV90eXBlIHR5cGUpXG4ge1xuIFx0LyogTmV3bHkgYWxsb2NhdGVkIG5vZGVzIGZvciBlcnJvciBjbGVhbnVwICovXG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X25vZGUgKmludGVybWVkaWF0ZV9ub2Rlc1tLSE9fVFJFRV9NQVhfREVQVEhdID0geyAwIH07XG4tXHR1bnNpZ25lZCBsb25nIGtleSA9IGtob19yYWRpeF9lbmNvZGVfa2V5KFBGTl9QSFlTKHBmbiksIG9yZGVyKTtcbitcdHVuc2lnbmVkIGxvbmcga2V5ID0ga2hvX3JhZGl4X2VuY29kZV9rZXkoUEZOX1BIWVMocGZuKSwgb3JkZXIsIHR5cGUpO1xuIFx0c3RydWN0IGtob19yYWRpeF9ub2RlICphbmNob3Jfbm9kZSA9IE5VTEw7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X25vZGUgKm5vZGUgPSB0cmVlLVx1MDAzZXJvb3Q7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X25vZGUgKm5ld19ub2RlO1xuQEAgLTIzMSwxNSArMjQ3LDE2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGtob19yYWRpeF9hZGRfcGFnZSk7XG4gICogQHRyZWU6IFRoZSBLSE8gcmFkaXggdHJlZS5cbiAgKiBAcGZuOiBUaGUgcGFnZSBmcmFtZSBudW1iZXIgb2YgdGhlIHBhZ2UgdG8gdW5wcmVzZXJ2ZS5cbiAgKiBAb3JkZXI6IFRoZSBvcmRlciBvZiB0aGUgcGFnZS5cbisgKiBAdHlwZTogVGhlIHBhZ2UgdHlwZS5cbiAgKlxuICAqIFRoaXMgZnVuY3Rpb24gdHJhdmVyc2VzIHRoZSByYWRpeCB0cmVlIGFuZCBjbGVhcnMgdGhlIGJpdCBjb3JyZXNwb25kaW5nIHRvXG4gICogdGhlIHBhZ2UsIGVmZmVjdGl2ZWx5IHJlbW92aW5nIGl0cyBcInByZXNlcnZlZFwiIHN0YXR1cy4gSXQgZG9lcyBub3QgZnJlZVxuICAqIHRoZSB0cmVlJ3MgaW50ZXJtZWRpYXRlIG5vZGVzLCBldmVuIGlmIHRoZXkgYmVjb21lIGVtcHR5LlxuICAqL1xuIHZvaWQga2hvX3JhZGl4X2RlbF9wYWdlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4tXHRcdFx0dW5zaWduZWQgaW50IG9yZGVyKVxuK1x0XHRcdHVuc2lnbmVkIGludCBvcmRlciwgZW51bSBraG9fcGFnZV90eXBlIHR5cGUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBrZXkgPSBraG9fcmFkaXhfZW5jb2RlX2tleShQRk5fUEhZUyhwZm4pLCBvcmRlcik7XG4rXHR1bnNpZ25lZCBsb25nIGtleSA9IGtob19yYWRpeF9lbmNvZGVfa2V5KFBGTl9QSFlTKHBmbiksIG9yZGVyLCB0eXBlKTtcbiBcdHN0cnVjdCBraG9fcmFkaXhfbm9kZSAqbm9kZSA9IHRyZWUtXHUwMDNlcm9vdDtcbiBcdHN0cnVjdCBraG9fcmFkaXhfbGVhZiAqbGVhZjtcbiBcdHVuc2lnbmVkIGludCBpLCBpZHg7XG5AQCAtMjc3LDE0ICsyOTQsMTUgQEAgc3RhdGljIGludCBraG9fcmFkaXhfd2Fsa19sZWFmKHN0cnVjdCBraG9fcmFkaXhfbGVhZiAqbGVhZixcbiBcdFx0XHQgICAgICAga2hvX3JhZGl4X3RyZWVfd2Fsa19jYWxsYmFja190IGNiKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgKmJpdG1hcCA9ICh1bnNpZ25lZCBsb25nICopbGVhZjtcbitcdGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlO1xuIFx0dW5zaWduZWQgaW50IG9yZGVyO1xuIFx0cGh5c19hZGRyX3QgcGh5cztcbiBcdHVuc2lnbmVkIGludCBpO1xuIFx0aW50IGVycjtcbiBcbiBcdGZvcl9lYWNoX3NldF9iaXQoaSwgYml0bWFwLCBQQUdFX1NJWkUgKiBCSVRTX1BFUl9CWVRFKSB7XG4tXHRcdHBoeXMgPSBraG9fcmFkaXhfZGVjb2RlX2tleShrZXkgfCBpLCBcdTAwMjZvcmRlcik7XG4tXHRcdGVyciA9IGNiKHBoeXMsIG9yZGVyKTtcbitcdFx0cGh5cyA9IGtob19yYWRpeF9kZWNvZGVfa2V5KGtleSB8IGksIFx1MDAyNm9yZGVyLCBcdTAwMjZ0eXBlKTtcbitcdFx0ZXJyID0gY2IocGh5cywgb3JkZXIsIHR5cGUpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtMzU3LDExICszNzUsMTggQEAgaW50IGtob19yYWRpeF93YWxrX3RyZWUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChraG9fcmFkaXhfd2Fsa190cmVlKTtcbiBcbi0vKiBGb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIDAtb3JkZXIgcGFnZXMuICovXG4tc3RhdGljIHZvaWQga2hvX2luaXRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4rLyogRm9yIHBoeXNpY2FsbHkgY29udGlndW91cyBwYWdlcy4gKi9cbitzdGF0aWMgdm9pZCBraG9fcmVzdG9yZV9yZWZjb3VudHMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4rXHRcdFx0XHQgIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKVxuIHtcbi1cdGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xuLVx0XHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMSk7XG4rXHQvKiBIZWFkIHBhZ2UgYWx3YXlzIGdldHMgcmVmY291bnQgb2YgMS4gKi9cbitcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDEpO1xuK1x0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAxOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XG4rXHRcdHVuc2lnbmVkIGludCBjb3VudCA9ICh0eXBlID09IEtIT19QQUdFX1NQTElUKSA/IDEgOiAwO1xuK1xuK1x0XHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgY291bnQpO1xuIFx0XHQvKiBDbGVhciBlYWNoIHBhZ2UncyBjb2RldGFnIHRvIGF2b2lkIGFjY291bnRpbmcgbWlzbWF0Y2guICovXG4gXHRcdGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlICsgaSk7XG4gXHR9XG5AQCAtMzY5LDE2ICszOTQsNyBAQCBzdGF0aWMgdm9pZCBraG9faW5pdF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiBcbiBzdGF0aWMgdm9pZCBraG9faW5pdF9mb2xpbyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuLVxuLVx0LyogSGVhZCBwYWdlIGdldHMgcmVmY291bnQgb2YgMS4gKi9cbi1cdHNldF9wYWdlX2NvdW50KHBhZ2UsIDEpO1xuLVx0LyogQ2xlYXIgaGVhZCBwYWdlJ3MgY29kZXRhZyB0byBhdm9pZCBhY2NvdW50aW5nIG1pc21hdGNoLiAqL1xuLVx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xuLVxuLVx0LyogRm9yIGhpZ2hlciBvcmRlciBmb2xpb3MsIHRhaWwgcGFnZXMgZ2V0IGEgcGFnZSBjb3VudCBvZiB6ZXJvLiAqL1xuLVx0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAxOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKVxuLVx0XHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMCk7XG4rXHRraG9fcmVzdG9yZV9yZWZjb3VudHMocGFnZSwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIsIEtIT19QQUdFX0NPTlRJRyk7XG4gXG4gXHRpZiAob3JkZXIgXHUwMDNlIDApXG4gXHRcdHByZXBfY29tcG91bmRfcGFnZShwYWdlLCBvcmRlcik7XG5AQCAtNDAzLDEzICs0MTksMjAgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMsIGJvb2wgaXNfZm9saW8pXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0bnJfcGFnZXMgPSAoMSBcdTAwM2NcdTAwM2MgaW5mby5vcmRlcik7XG4gXG4rXHQvKlxuK1x0ICogSWYgd2Ugd2FudCB0byByZXN0b3JlIGEgZm9saW8sIGJ1dCB0aGUgbWVtb3J5IHdhcyBzcGxpdCBpbiB0aGVcbitcdCAqIHByZXZpb3VzIGtlcm5lbCwgc29tZXRoaW5nIGlzIHdyb25nLlxuK1x0ICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKGlzX2ZvbGlvIFx1MDAyNlx1MDAyNiBpbmZvLnR5cGUgPT0gS0hPX1BBR0VfU1BMSVQpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbiBcdC8qIENsZWFyIHByaXZhdGUgdG8gbWFrZSBzdXJlIGxhdGVyIHJlc3RvcmVzIG9uIHRoaXMgcGFnZSBlcnJvciBvdXQuICovXG4gXHRwYWdlLVx1MDAzZXByaXZhdGUgPSAwO1xuIFxuIFx0aWYgKGlzX2ZvbGlvKVxuIFx0XHRraG9faW5pdF9mb2xpbyhwYWdlLCBpbmZvLm9yZGVyKTtcbiBcdGVsc2Vcbi1cdFx0a2hvX2luaXRfcGFnZXMocGFnZSwgbnJfcGFnZXMpO1xuK1x0XHRraG9fcmVzdG9yZV9yZWZjb3VudHMocGFnZSwgbnJfcGFnZXMsIGluZm8udHlwZSk7XG4gXG4gXHRhZGp1c3RfbWFuYWdlZF9wYWdlX2NvdW50KHBhZ2UsIG5yX3BhZ2VzKTtcbiBcdHJldHVybiBwYWdlO1xuQEAgLTQ4NSw3ICs1MDgsOCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9faW5pdCBraG9fZ2V0X3ByZXNlcnZlZF9wYWdlKHBoeXNfYWRkcl90IHBoeXMsXG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pbml0IGtob19wcmVzZXJ2ZWRfbWVtb3J5X3Jlc2VydmUocGh5c19hZGRyX3QgcGh5cyxcbi1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBvcmRlcilcbitcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0XHRcdFx0ICAgICAgIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKVxuIHtcbiBcdHVuaW9uIGtob19wYWdlX2luZm8gaW5mbztcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuQEAgLTQ5OSw2ICs1MjMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBraG9fcHJlc2VydmVkX21lbW9yeV9yZXNlcnZlKHBoeXNfYWRkcl90IHBoeXMsXG4gXHRtZW1ibG9ja19yZXNlcnZlZF9tYXJrX25vaW5pdChwaHlzLCBzeik7XG4gXHRpbmZvLm1hZ2ljID0gS0hPX1BBR0VfTUFHSUM7XG4gXHRpbmZvLm9yZGVyID0gb3JkZXI7XG4rXHRpbmZvLnR5cGUgPSB0eXBlO1xuIFx0cGFnZS1cdTAwM2Vwcml2YXRlID0gaW5mby5wYWdlX3ByaXZhdGU7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04NTksNyArODg0LDcgQEAgaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKFdBUk5fT04oa2hvX3NjcmF0Y2hfb3ZlcmxhcChwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRyZXR1cm4ga2hvX3JhZGl4X2FkZF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIpO1xuK1x0cmV0dXJuIGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyLCBLSE9fUEFHRV9DT05USUcpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChraG9fcHJlc2VydmVfZm9saW8pO1xuIFxuQEAgLTg3Nyw3ICs5MDIsNyBAQCB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRjb25zdCB1bnNpZ25lZCBsb25nIHBmbiA9IGZvbGlvX3Bmbihmb2xpbyk7XG4gXHRjb25zdCB1bnNpZ25lZCBpbnQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4gXG4tXHRraG9fcmFkaXhfZGVsX3BhZ2UodHJlZSwgcGZuLCBvcmRlcik7XG4rXHRraG9fcmFkaXhfZGVsX3BhZ2UodHJlZSwgcGZuLCBvcmRlciwgS0hPX1BBR0VfQ09OVElHKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfZm9saW8pO1xuIFxuQEAgLTg5OCwxNSArOTIzLDI5IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRyZXR1cm4gb3JkZXI7XG4gfVxuIFxuK3N0YXRpYyBib29sIGtob19pc19wYWdlX3NwbGl0KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4re1xuK1x0LypcbitcdCAqIElmIHRoZSByZWZjb3VudCBvZiB0aGUgc2Vjb25kIHBhZ2UgaXMgbm9uLXplcm8sIHRoaXMgYmxvY2tcbitcdCAqIGhhcyBiZWVuIHNwbGl0LlxuK1x0ICovXG4rXHRpZiAob3JkZXIgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHBhZ2VfcmVmX2NvdW50KHBmbl90b19wYWdlKHBmbiArIDEpKSAhPSAwKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gc3RhdGljIHZvaWQgX19raG9fdW5wcmVzZXJ2ZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXG4gXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuIHtcbi1cdHVuc2lnbmVkIGludCBvcmRlcjtcbi1cbiBcdHdoaWxlIChwZm4gXHUwMDNjIGVuZF9wZm4pIHtcbi1cdFx0b3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xuK1x0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xuK1x0XHRlbnVtIGtob19wYWdlX3R5cGUgdHlwZTtcbiBcbi1cdFx0a2hvX3JhZGl4X2RlbF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIpO1xuK1x0XHR0eXBlID0ga2hvX2lzX3BhZ2Vfc3BsaXQocGZuLCBvcmRlcikgPyBLSE9fUEFHRV9TUExJVCA6XG4rXHRcdFx0XHRcdFx0ICAgICAgIEtIT19QQUdFX0NPTlRJRztcbitcbitcdFx0a2hvX3JhZGl4X2RlbF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIsIHR5cGUpO1xuIFxuIFx0XHRwZm4gKz0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4gXHR9XG5AQCAtOTM4LDggKzk3NywxMiBAQCBpbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuIFxuIFx0d2hpbGUgKHBmbiBcdTAwM2MgZW5kX3Bmbikge1xuIFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xuK1x0XHRlbnVtIGtob19wYWdlX3R5cGUgdHlwZTtcbitcbitcdFx0dHlwZSA9IGtob19pc19wYWdlX3NwbGl0KHBmbiwgb3JkZXIpID8gS0hPX1BBR0VfU1BMSVQgOlxuK1x0XHRcdFx0XHRcdCAgICAgICBLSE9fUEFHRV9DT05USUc7XG4gXG4tXHRcdGVyciA9IGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTtcbitcdFx0ZXJyID0ga2hvX3JhZGl4X2FkZF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIsIHR5cGUpO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0ZmFpbGVkX3BmbiA9IHBmbjtcbiBcdFx0XHRicmVhaztcbkBAIC05NzUsNiArMTAxOCwyOSBAQCB2b2lkIGtob191bnByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV9wYWdlcyk7XG4gXG4rLyoqXG4rICoga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyAtIHNwbGl0IGNvbnRpZ3VvdXMgcGFnZXMgdGhhdCBhcmUgcHJlc2VydmVkXG4rICogQHBhZ2U6IGZpcnN0IHBhZ2UgaW4gdGhlIGxpc3QuXG4rICogQG9yZGVyOiB0aGUgb3JkZXIgb2YgdGhlIG9yaWdpbmFsIGFsbG9jYXRpb24uXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byBzcGxpdCBhIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbiB0aGF0IGhhcyBiZWVuXG4rICogcHJlc2VydmVkIGFjcm9zcyBrZXhlYy4gSXQgdW5wcmVzZXJ2ZXMgdGhlIHBhZ2VzLCBzcGxpdHMgdGhlbSB1c2luZ1xuKyAqIHNwbGl0X3BhZ2UoKSBhbmQgdGhlbiByZS1wcmVzZXJ2ZXMgdGhlbSBhcyBpbmRpdmlkdWFsIHBhZ2VzLlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBNVVNUIG9ubHkgYmUgY2FsbGVkIG9uIHBhZ2VzIHRoYXQgYXJlIGN1cnJlbnRseSBwcmVzZXJ2ZWQuXG4rICogVGhlIEBvcmRlciBwcm92aWRlZCBNVVNUIG1hdGNoIHRoZSBvcmRlciB1c2VkIGR1cmluZyB0aGUgaW5pdGlhbFxuKyAqIHByZXNlcnZhdGlvbi5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitpbnQga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuK3tcbitcdGtob191bnByZXNlcnZlX3BhZ2VzKHBhZ2UsIDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuK1x0c3BsaXRfcGFnZShwYWdlLCBvcmRlcik7XG4rXHRyZXR1cm4ga2hvX3ByZXNlcnZlX3BhZ2VzKHBhZ2UsIDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKTtcbitcbiAvKiB2bWFsbG9jIGZsYWdzIEtITyBzdXBwb3J0cyAqL1xuICNkZWZpbmUgS0hPX1ZNQUxMT0NfU1VQUE9SVEVEX0ZMQUdTXHQoVk1fQUxMT0MgfCBWTV9BTExPV19IVUdFX1ZNQVApXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMjoyODoyMS4xNjg2MDEyOThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzIzMzkwNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2V4ZWMgSGFuZG92ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXkncmUgaW50cm9kdWNpbmcgc29tZSBrZXkgY2hhbmdlcyBmb3IgS2V4ZWMgSGFuZG92ZXIgKEtITykuIFNwZWNpZmljYWxseSwgdGhleSd2ZSBhZGRlZCBhIGZ1bmN0aW9uIGNhbGxlZCBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AgYW5kIG1vZGlmaWVkIGEgZmV3IGV4aXN0aW5nIG9uZXM6IGBraG9fcmFkaXhfYWRkX3BhZ2VgLCBga2hvX3JhZGl4X2RlbF9wYWdlYCwgYW5kIGBraG9fcmFkaXhfd2Fsa190cmVlYC4gVGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbiByZXZvbHZlcyBhcm91bmQgYSBuZXcgYGVudW0ga2hvX3BhZ2VfdHlwZWAsIGRpc3Rpbmd1aXNoaW5nIGJldHdlZW4gYEtIT19QQUdFX0NPTlRJR2AgYW5kIGBLSE9fUEFHRV9TUExJVGAuIFRoaXMgbWFrZXMgc2Vuc2U7IGhhbmRsaW5nIHBhZ2Ugc3BsaXRzIGlzIGVzc2VudGlhbCBmb3IgYSBoYW5kb3ZlciBwcm9jZXNzIGxpa2UgS2V4ZWMuIFRoZXkndmUgbGlua2VkIHRoZSBjaGFuZ2VzIHRvIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYC5cblxuSG9sZCBvbi4uLiBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AuLi4gdGhhdCBmaWxlIHBhdGggZmVlbHMgYSBsaXR0bGUgb2ZmLiBJcyB0aGF0IHN0YW5kYXJkLCBvciBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGlzIGlzIGFuIGFjdHVhbCB2YWxpZCBwYXRoIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBCZWZvcmUgSSBwcm9jZWVkLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBmaWxlIHJlYWxseSBleGlzdHMuIEFsc28sIEkgYmV0dGVyIGNvbmZpcm0gdGhhdCBgQ09ORklHX0tFWEVDX0hBTkRPVkVSYCBpcyB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgYWxsIG9mIHRoaXMuIEl0J3MgY3J1Y2lhbCB0aGF0IHRoaXMgd2hvbGUgZmVhdHVyZSBpcyBjb3JyZWN0bHkgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg1MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAyOjI4OjI1LjQ5MTk5MzQ5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjMxNTc5NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTI2PXZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoyNzppbnQga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjgtaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0ciwgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTY3PXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKSB7IH1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNjgtXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjY5OnN0YXRpYyBpbmxpbmUgaW50IGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTcwLVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTEwMTk9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfcGFnZXMpO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDIxLS8qKlxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTAyMjogKiBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzIC0gc3BsaXQgY29udGlndW91cyBwYWdlcyB0aGF0IGFyZSBwcmVzZXJ2ZWRcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMjMtICogQHBhZ2U6IGZpcnN0IHBhZ2UgaW4gdGhlIGxpc3QuXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMzUtICovXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDM2OmludCBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDM3LXtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTA0MS19XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDQyOkVYUE9SVF9TWU1CT0xfR1BMKGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTA0My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDI6Mjg6MjkuMTIzNTgyNDM5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3NTQzMzA4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uZmlndXJhdGlvbiBEaWFnbm9zdGljczogQSBRdWljayBQdWxzZSBDaGVjayoqXG5cbk9rYXksIHNvIEnigJl2ZSByZWNlaXZlZCBjb25maXJtYXRpb24uICpZZXMsIGl0IGRvZXMuKiBMZXQncyBkcmlsbCBkb3duIGludG8gdGhlIHBvdGVudGlhbCBzb3VyY2VzIG9mIHRoaXMgYmVoYXZpb3IuIE15IGd1dCBmZWVsaW5nIGlzIHdlJ3JlIGxvb2tpbmcgYXQgYSBjb25maWd1cmF0aW9uIGlzc3VlLCBhIHN1YnRsZSBkcmlmdCBpbiBzZXR0aW5ncyB0aGF04oCZcyBtYW5pZmVzdGluZyBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uIFRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzIGFuZCBkaXZlIGludG8gdGhlIGNvbmZpZ3MuIFRoaXMgaXNu4oCZdCBhIGRlZXAgZGl2ZSB5ZXQ7IGp1c3QgYSByYXBpZCBkaWFnbm9zdGljIHNjYW4gZm9yIHRoZSB1c3VhbCBzdXNwZWN0czogbWlzY29uZmlndXJlZCBwZXJtaXNzaW9ucywgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgaGF2ZW4ndCBwcm9wYWdhdGVkIGNvcnJlY3RseSwgb3IgYSBjYWNoaW5nIGlzc3VlIGFjdGluZyB1cC4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBpZGVudGlmeSB0aGUgcHJvYmxlbSB3aXRoIGEgZmV3IGtleSBjaGVja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MjksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMjoyOToxMS44Nzc5MTU1MzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgyNDQ4Njg0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS0VYRUNfSEFORE9WRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZz0zPW1lbnUgXFxcIkxpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlclxcXCJcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTQtXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo1OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUlxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNi1cXHRib29sIFxcXCJrZXhlYyBoYW5kb3ZlclxcXCJcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMTctXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzoxODpjb25maWcgS0VYRUNfSEFORE9WRVJfREVCVUdcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE5LVxcdGJvb2wgXFxcIkVuYWJsZSBLZXhlYyBIYW5kb3ZlciBkZWJ1ZyBjaGVja3NcXFwiXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI2LVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mjc6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHRlNcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI4LVxcdGJvb2wgXFxcImtleGVjIGhhbmRvdmVyIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zNy1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjM4OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVFxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRW5hYmxlIGtleGVjIGhhbmRvdmVyIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAyOjI5OjE1LjcwMjQwOTQ5OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMjA2NDI4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkIGFuZCBhcHByb2FjaGluZyB0aGlzIHN5c3RlbWF0aWNhbGx5OlxuXG4qKkNoZWNraW5nIGZvciBVc2FnZSBvZiBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AqKlxuXG5BbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaG93IHdpZGVseSB0aGlzIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBCZWZvcmUgSSBkZWx2ZSBpbnRvIGFueXRoaW5nIGVsc2UsIG9yIG1ha2UgYW55IGFzc3VtcHRpb25zIGFib3V0IGl0cyBwdXJwb3NlIG9yIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZS4gSXMgdGhpcyBhIGNvcmUgY29tcG9uZW50PyBJcyBpdCBvbmx5IHVzZWQgaW4gYSBzcGVjaWZpYyBtb2R1bGU/IE9yIHBlcmhhcHMgaXQncyBhIGZvcmdvdHRlbiBhcnRpZmFjdCBmcm9tIGFuIGVhcmxpZXIgcHJvamVjdD8gSSBuZWVkIHRvIGtub3cgaG93IG1hbnkgcGxhY2VzIGl0IHRvdWNoZXMsIGlmIGFueS4gIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGViYXNlLiBXaGVyZSdzIGl0IHVzZWQ/IFdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBpbnRlcmFjdCB3aXRoIGl0PyBUaGF0IHdpbGwgZ3VpZGUgbXkgbmV4dCBzdGVwcy4gVGhpcyBpcyBqdXN0IHJlY29ubmFpc3NhbmNlLiBHYXRoZXIgaW5mb3JtYXRpb24sIGJlZm9yZSBJIGRvIGFueXRoaW5nIGVsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNjMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMjoyOToyMy4wMjMwNTUwMjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczNTA2NzI0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0yNj12b2lkIGtob191bnByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6Mjc6aW50IGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTI4LWludCBraG9fcHJlc2VydmVfdm1hbGxvYyh2b2lkICpwdHIsIHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD02Nz1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcykgeyB9XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTY4LVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo2OTpzdGF0aWMgaW5saW5lIGludCBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLFxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC03MC1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMDE5PUVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3BhZ2VzKTtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAyMS0vKipcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMjI6ICoga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyAtIHNwbGl0IGNvbnRpZ3VvdXMgcGFnZXMgdGhhdCBhcmUgcHJlc2VydmVkXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDIzLSAqIEBwYWdlOiBmaXJzdCBwYWdlIGluIHRoZSBsaXN0Llxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDM1LSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTAzNjppbnQga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAzNy17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDEtfVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTA0MjpFWFBPUlRfU1lNQk9MX0dQTChraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAyOjI5OjI1Ljc1ODEyNzk5MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTkxOTQyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBBc3Nlc3NtZW50OiBPYnNlcnZpbmcgTW9kaWZpY2F0aW9uLCBTZWVraW5nIFVzYWdlKipcblxuT2theSwgc28gSSdtIHNlZWluZyBubyBhY3RpdmUgdXNlcnMgcmlnaHQgbm93IOKAkyB0aGF0J3MgdGhlIGltbWVkaWF0ZSBzdGF0ZS4gSG93ZXZlciwgbXkgaW50ZXJuYWwgZmxhZ3MgYXJlIHVwIGJlY2F1c2UgSSd2ZSBub3RpY2VkIG1vZGlmaWNhdGlvbnMgdG8gYGtob19wcmVzZXJ2ZV9wYWdlc2AgYW5kIGBraG9fdW5wcmVzZXJ2ZV9wYWdlc2AuIFRoaXMgaXMgc2lnbmlmaWNhbnQ7IHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGNvcmUgdG8gc29tZSBrZXkgcHJvY2VzcywgZXZlbiBpZiBubyBvbmUgaXMgZXhwbGljaXRseSAqdXNpbmcqIHRoZW0gYXQgdGhlIG1vbWVudC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icy4gSXQncyB0aW1lIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiB0aG9zZSBtb2RpZmllZCBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5IHdlcmUgdG91Y2hlZCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhvc2UgY2hhbmdlcyBtaWdodCBoYXZlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTg2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDI6Mjk6MjguNjE3MzI0Njg0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjMyMjU5MzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtob19wcmVzZXJ2ZV9wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MjQ9dm9pZCBraG9fdW5wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MjU6aW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTI2LXZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTYwPXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKSB7IH1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNjEtXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjYyOnN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC02My17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTQ1Mz1FWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9mb2xpbyk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ2MC0gKiBSZXN0b3JlIGEgY29udGlndW91cyBsaXN0IG9mIG9yZGVyIDAgcGFnZXMgdGhhdCB3YXMgcHJlc2VydmVkIHdpdGhcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ2MTogKiBraG9fcHJlc2VydmVfcGFnZXMoKS5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ2Mi0gKlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz05MDc9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfZm9saW8pO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTA4LVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTA5OnN0YXRpYyB1bnNpZ25lZCBpbnQgX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MTAtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTM4PXN0YXRpYyB2b2lkIF9fa2hvX3VucHJlc2VydmUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NDEtXFx0d2hpbGUgKHBmbiBcXHUwMDNjIGVuZF9wZm4pIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk0MjpcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTQzLVxcdFxcdGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NTQtLyoqXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5NTU6ICoga2hvX3ByZXNlcnZlX3BhZ2VzIC0gcHJlc2VydmUgY29udGlndW91cyBwYWdlcyBhY3Jvc3Mga2V4ZWNcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk1Ni0gKiBAcGFnZTogZmlyc3QgcGFnZSBpbiB0aGUgbGlzdC5cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTYzLSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTY0OmludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NjUte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NzgtXFx0d2hpbGUgKHBmbiBcXHUwMDNjIGVuZF9wZm4pIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk3OTpcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTgwLVxcdFxcdGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05OTgtfVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTk5OkVYUE9SVF9TWU1CT0xfR1BMKGtob19wcmVzZXJ2ZV9wYWdlcyk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDAwLVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDA3LSAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgc2FtZSBAcGFnZSBhbmQgQG5yX3BhZ2VzIGFzIHRoZSBjb3JyZXNwb25kaW5nXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDA4OiAqIGtob19wcmVzZXJ2ZV9wYWdlcygpIGNhbGwuIFVucHJlc2VydmluZyBhcmJpdHJhcnkgc3ViLXJhbmdlcyBvZiBsYXJnZXJcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMDktICogcHJlc2VydmVkIGJsb2NrcyBpcyBub3Qgc3VwcG9ydGVkLlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMDM2PWludCBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMzktXFx0c3BsaXRfcGFnZShwYWdlLCBvcmRlcik7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDQwOlxcdHJldHVybiBraG9fcHJlc2VydmVfcGFnZXMocGFnZSwgMVVMIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDEtfVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMDc1PXN0YXRpYyBzdHJ1Y3Qga2hvX3ZtYWxsb2NfY2h1bmsgKm5ld192bWFsbG9jX2NodW5rKHN0cnVjdCBraG9fdm1hbGxvY19jaHVuayAqY3VyKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDgzLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTA4NDpcXHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXModmlydF90b19wYWdlKGNodW5rKSwgMSk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDg1LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTExMjU9aW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0ciwgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTExNTAtXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMTUxOlxcdFxcdGVyciA9IGtob19wcmVzZXJ2ZV9wYWdlcyh2bS1cXHUwMDNlcGFnZXNbaV0sIG5yX2NvbnRpZ19wYWdlcyk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMTUyLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9tZW1ibG9jay5jPTI1Mjg9c3RhdGljIGludCBfX2luaXQgcmVzZXJ2ZWRfbWVtX3ByZXNlcnZlKHZvaWQpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTI1MzctXFxubW0vbWVtYmxvY2suYzoyNTM4OlxcdFxcdGVyciA9IGtob19wcmVzZXJ2ZV9wYWdlcyhwYWdlLCBucl9wYWdlcyk7XFxubW0vbWVtYmxvY2suYy0yNTM5LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9tZW1ibG9jay5jPTI1NTc9c3RhdGljIGludCBfX2luaXQgcHJlcGFyZV9raG9fZmR0KHZvaWQpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTI1NjktXFx0ZmR0ID0gcGFnZV90b192aXJ0KGZkdF9wYWdlKTtcXG5tbS9tZW1ibG9jay5jOjI1NzA6XFx0ZXJyID0ga2hvX3ByZXNlcnZlX3BhZ2VzKGZkdF9wYWdlLCAxKTtcXG5tbS9tZW1ibG9jay5jLTI1NzEtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDI6Mjk6MzEuMjQ5NTkxMzc1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNTMwMzYyMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgTGl2ZSBVcGRhdGUgZm9yIEtleGVjIEhhbmRvdmVyKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNgLCB3aGljaCwgYXMgSSByZWNhbGwsIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgYENPTkZJR19LRVhFQ19IQU5ET1ZFUmAgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBwcmV0dHkgZnVuZGFtZW50YWwgc3R1ZmYsIGNvcmUga2VybmVsIGNvZGUgdGhhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5LiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uLCBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AsIGFuZCB0aGVuIGdvZXMgb24gdG8gbW9kaWZ5IGEgZmV3IG90aGVyczogYGtob19yYWRpeF9hZGRfcGFnZWAsIGBraG9fcmFkaXhfZGVsX3BhZ2VgLCBhbmQgYGtob19yYWRpeF93YWxrX3RyZWVgLiBUaGUgY29tbW9uIHRocmVhZCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IGBlbnVtIGtob19wYWdlX3R5cGVgLCBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuIGBLSE9fUEFHRV9DT05USUdgIGFuZCBgS0hPX1BBR0VfU1BMSVRgLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyBhbGwgcmVsYXRlZCB0byBoYW5kbGluZyBtZW1vcnkgdGhhdCBtaWdodCBiZSBmcmFnbWVudGVkIG9yIHNwbGl0IGR1cmluZyB0aGUgaGFuZG92ZXIgcHJvY2Vzcy4gSXQncyBsaWtlbHkgdHJ5aW5nIHRvIGltcHJvdmUgdGhlIHJlbGlhYmlsaXR5IG9yIGVmZmljaWVuY3kgb2YgcHJlc2VydmluZyBhbmQgcmVzdG9yaW5nIG1lbW9yeSBhY3Jvc3MgdGhlIGtleGVjIHRyYW5zaXRpb24uXG5cbkl0J3MgYWxzbyB0b3VjaGluZyBga2hvX3ByZXNlcnZlX3BhZ2VzYCBhbmQgYGtob191bnByZXNlcnZlX3BhZ2VzYCwgd2hpY2ggYXJlIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMgZm9yIGhhbmRsaW5nIHRoZXNlIHNwbGl0IHBhZ2VzLiBUaGlzIGlzIGFsbCBmdW5jdGlvbmFsIGNvZGUsIGl0J3Mgbm90IHNpbXBseSByZWZhY3RvcmluZywgc28gaXQgbXVzdCBiZSBhZGRyZXNzaW5nIHNvbWUgcmVhbC13b3JsZCBpc3N1ZSBpbiBLZXhlYyBoYW5kb3Zlci4gSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfS0VYRUNfSEFORE9WRVJgIGlzIGVuYWJsZWQgaW4gb3VyIGNvbmZpZ3VyYXRpb24gdG8gYmUgc3VyZSB0aGlzIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgc3lzdGVtLCBpdCdzIGFsd2F5cyBnb29kIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzU5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAyOjI5OjUxLjc3OTk1NTgwM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0MDI3NTk3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS0VYRUNfSEFORE9WRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZz0zPW1lbnUgXFxcIkxpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlclxcXCJcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTQtXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo1OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUlxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNi1cXHRib29sIFxcXCJrZXhlYyBoYW5kb3ZlclxcXCJcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMTctXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzoxODpjb25maWcgS0VYRUNfSEFORE9WRVJfREVCVUdcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE5LVxcdGJvb2wgXFxcIkVuYWJsZSBLZXhlYyBIYW5kb3ZlciBkZWJ1ZyBjaGVja3NcXFwiXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI2LVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mjc6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHRlNcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI4LVxcdGJvb2wgXFxcImtleGVjIGhhbmRvdmVyIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zNy1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjM4OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVFxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRW5hYmxlIGtleGVjIGhhbmRvdmVyIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAyOjI5OjU0LjUyMDIzNzM3MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzYwOTUyNDk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYSBLZXJuZWwgTGl2ZSBVcGRhdGUgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBzbyBhIHBhdGNoIGhhcyBoaXQgbXkgZGVzayBhbmQgaXQgdG91Y2hlcyBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AuIE15IGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5czogKndoYXQgZWxzZSBpcyBhZmZlY3RlZD8qIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCdzIG5vdCBlbm91Z2ggdG8ganVzdCBsb29rIGF0IHRoZSBjb2RlIG1vZGlmaWVkLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBkZXBlbmRlbmNpZXMgb3Igc2lkZSBlZmZlY3RzLlxuXG5UaGVyZWZvcmUsIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBhc3NvY2lhdGVkIGBNYWtlZmlsZWAuIEl0IGlzIGNydWNpYWwgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHJpcHBsZXMgb3V0d2FyZCwgb3IgaXMgbG9jYWxpemVkIHRvIHRoZSBga2V4ZWNfaGFuZG92ZXJgIG1vZHVsZS4gV2hhdCBvdGhlciBidWlsZCBjb25maWd1cmF0aW9ucywgaW5jbHVkZSBmaWxlcywgb3IgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlIGltcGFjdGVkPyBJZiBpdCdzIGEgY3JpdGljYWwgbW9kdWxlIGxpa2UgdGhpcywgSSBoYXZlIHRvIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGNoYW5nZXMgb3IgcmVsYXRlZCBmaWxlcy4gR290dGEgY292ZXIgYWxsIHRoZSBiYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MDgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMjozMDoyOC4xMjk3NjU4NjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NDk0OTAxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2V4ZWNfaGFuZG92ZXIub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbGl2ZXVwZGF0ZS9NYWtlZmlsZT0zPWx1by15IDo9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvTWFrZWZpbGUtOS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfS0VYRUNfSEFORE9WRVIpXFx0XFx0Kz0ga2V4ZWNfaGFuZG92ZXIub1xcbmtlcm5lbC9saXZldXBkYXRlL01ha2VmaWxlLTExLW9iai0kKENPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVRylcXHQrPSBrZXhlY19oYW5kb3Zlcl9kZWJ1Zy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAyOjMwOjMxLjA3OTI2MTkyN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTExMzI1Mzc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgS2V4ZWMgSGFuZG92ZXIgRnVuY3Rpb25hbGl0eSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkgc2VlIGBDT05GSUdfS0VYRUNfSEFORE9WRVJgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UncmUgZGVhbGluZyB3aXRoIGhlcmUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZXNlOiBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AsIGBraG9fcmFkaXhfYWRkX3BhZ2VgLCBga2hvX3JhZGl4X2RlbF9wYWdlYCwgYGtob19wcmVzZXJ2ZV9wYWdlc2AsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlc2AsIGFuZCBga2hvX3JhZGl4X3dhbGtfdHJlZWAuIExldCdzIGNvbmZpcm0gdGhhdCBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AgaXMgY29ycmVjdGx5IGV4cG9ydGVkIGFuZCByZWFjaGFibGUuIEFoLCB5ZXMsIGBFWFBPUlRfU1lNQk9MX0dQTChraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKWAgY29uZmlybXMgaXQncyBleHBvcnRlZCBhbmQgdmlzaWJsZSB0byBtb2R1bGVzIHdpdGggYSBHUEwgbGljZW5zZS4gVGhpcyBpcyBhIGZyZXNoIGZ1bmN0aW9uLCBpbnRlcmVzdGluZy4gVGhlIHJlc3QgYXBwZWFyIHRvIGJlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGV4aXN0aW5nIGZ1bmN0aW9ucy4gQ2hlY2tpbmcuLi4gYGtob19wcmVzZXJ2ZV9wYWdlc2AgaXMgZXhwb3J0ZWQsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlc2AgaXMgZXhwb3J0ZWQsIGBraG9fcmFkaXhfYWRkX3BhZ2VgIGlzIGV4cG9ydGVkLCBga2hvX3JhZGl4X2RlbF9wYWdlYCBpcyBleHBvcnRlZCwgYW5kIGBraG9fcmFkaXhfd2Fsa190cmVlYCBpcyBleHBvcnRlZC4gV2FpdCwgYGtob19yYWRpeF9hZGRfcGFnZWAgYW5kIGBraG9fcmFkaXhfZGVsX3BhZ2VgIGFyZSBleHBvcnRlZD8gSG1tLCB0aGF0J3Mgbm90IHdoYXQgSSBleHBlY3RlZC4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhZGRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODcyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAyOjMxOjAyLjE5MjUxNzU3OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIwNTk3OTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MX0dQTFxcXFwoa2hvX3JhZGl4X2FkZF9wYWdlXFxcXClcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xNzQ9aW50IGtob19yYWRpeF9hZGRfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTI0Mi19XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoyNDM6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3JhZGl4X2FkZF9wYWdlKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTI0NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDI6MzE6MDUuMzk4NTAyNDA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1MzExNDQ0Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtITyBQYWdlIFNwbGl0dGluZyBQYXRjaCoqXG5cbk9rYXksIHllcywgSSd2ZSBnb3QgdGhpcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGVzZSBuZXcgYW5kIG1vZGlmaWVkIHN0YXRpYyBmdW5jdGlvbnM6IGBraG9faXNfcGFnZV9zcGxpdGAsIGBraG9fcmVzdG9yZV9yZWZjb3VudHNgLCBhbmQgdGhlIHVwZGF0ZWQgcmFkaXggZW5jb2RpbmcvZGVjb2Rpbmc6IGBraG9fcmFkaXhfZW5jb2RlX2tleWAgYW5kIGBraG9fcmFkaXhfZGVjb2RlX2tleWAuXG5cbk5vdywgbGV0J3MgZm9jdXMgb24gdGhlc2Uga2V5IHN5bWJvbHMgdGhhdCBzZWVtIGNlbnRyYWwgdG8gdGhlIGNoYW5nZXM6IGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCwgYGtob19wcmVzZXJ2ZV9wYWdlc2AsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlc2AsIGBraG9fcmFkaXhfYWRkX3BhZ2VgLCBga2hvX3JhZGl4X2RlbF9wYWdlYCwgYGtob19yYWRpeF93YWxrX3RyZWVgLCBhbmQsIGhvbGQgb24sIGBraG9fcHJlc2VydmVfZm9saW9gIGFuZCBga2hvX3VucHJlc2VydmVfZm9saW9gLiBBaCwgcmlnaHQsIHRob3NlIGxhc3QgdHdvIGFyZSBhbHNvIG1vZGlmaWVkIHRvIHVzZSBgS0hPX1BBR0VfQ09OVElHYCwgZ29vZCBjYXRjaC4gSSdsbCBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aG9zZS5cblxuSnVzdCBkb3VibGUtY2hlY2tpbmcsIGlzIGBLRVhFQ19IQU5ET1ZFUmAgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnIGhlcmU/IFllcywgYENPTkZJR19LRVhFQ19IQU5ET1ZFUmAgc2VlbXMgc3VmZmljaWVudC5cblxuTm93LCBhIGNydWNpYWwgcG9pbnQ6IGlzIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCBhY3R1YWxseSByZWFjaGFibGU/IEl0ICppcyogZXhwb3J0ZWQsIG1lYW5pbmcgbW9kdWxlcyBjb3VsZCBwb3RlbnRpYWxseSBjYWxsIGl0LiBCdXQgaXMgdGhlcmUgYSBtb2R1bGUgdGhhdCAqZG9lcyo/IE9rYXksIEkndmUgc2VhcmNoZWQsIGFuZCBmb3VuZCBubyBkaXJlY3QgY2FsbGVycy4gSG93ZXZlciwgaXQncyBleHBvcnRlZCBhbmQgY291bGQgYmUgdXNlZCBpbiBhIGxhdGVyIHBhdGNoLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaXQgbWVhbnMgdGhhdCBzeXprYWxsZXIgKmNvdWxkKiBnZW5lcmF0ZSBjYWxscyB0byBpdCBpZiBpdCBrbm93cyBhYm91dCBpdC4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byB0aGUgY29yZSBrZXJuZWwg4oCTIHNwZWNpZmljYWxseSBsaXZldXBkYXRlIGFuZCBrZXhlY19oYW5kb3ZlciDigJMgaXQncyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSByYWRpeCB0cmVlIGFuZCBwYWdlIHByZXNlcnZhdGlvbiBsb2dpYyBhcmUgYmVpbmcgbW9kaWZpZWQgZm9yIHNwbGl0IHBhZ2VzLCBzbyB3ZSBuZWVkIHRvIHRlc3QgdGhpcyB0aG9yb3VnaGx5LlxuXG5BbHJpZ2h0LCBsZXQncyBmb3JtdWxhdGUgbXkgcmVzcG9uc2UuXG5cbioqV29ydGhGdXp6aW5nOiB0cnVlKipcblxuKipGb2N1c1N5bWJvbHM6KipcblxuKiAgIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYFxuKiAgIGBraG9fcHJlc2VydmVfcGFnZXNgXG4qICAgYGtob191bnByZXNlcnZlX3BhZ2VzYFxuKiAgIGBraG9fcmFkaXhfYWRkX3BhZ2VgXG4qICAgYGtob19yYWRpeF9kZWxfcGFnZWBcbiogICBga2hvX3JhZGl4X3dhbGtfdHJlZWBcbiogICBga2hvX3ByZXNlcnZlX2ZvbGlvYFxuKiAgIGBraG9fdW5wcmVzZXJ2ZV9mb2xpb2BcblxuKipFbmFibGVDb25maWdzOioqXG5cbiogICBgS0VYRUNfSEFORE9WRVJgXG5cbioqUmVhc29uaW5nOioqIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AgYW5kIG1vZGlmaWVzIHRoZSBLZXhlYyBIYW5kb3ZlciAoS0hPKSByYWRpeCB0cmVlIGxvZ2ljIHRvIHN1cHBvcnQgc3BsaXQgcGFnZXMuIEl0IHRvdWNoZXMgY29yZSBmdW5jdGlvbmFsaXR5LCBhbHRlcmluZyBmdW5jdGlvbnMgbGlrZSBga2hvX3JhZGl4X2FkZF9wYWdlYCwgYGtob19yYWRpeF9kZWxfcGFnZWAsIGFuZCB0aGUgcGFnZSBwcmVzZXJ2YXRpb24gbWV0aG9kcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJ3MgbGl2ZSB1cGRhdGUgbWVjaGFuaXNtLCBhbmQgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoYXQgdGhlIHJhZGl4IHRyZWUgYW5kIHBhZ2UgcHJlc2VydmF0aW9uIGxvZ2ljIGNvcnJlY3RseSBoYW5kbGUgc3BsaXQgcGFnZXMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCBpdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwncyBsaXZlIHVwZGF0ZSBtZWNoYW5pc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTUyLCJPdXRwdXRUb2tlbnMiOjIyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMjozMTozMC43MDk5NTA1NDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTgwMzE1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS0VYRUNfSEFORE9WRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzXCIsXG4gICAgXCJraG9fcHJlc2VydmVfcGFnZXNcIixcbiAgICBcImtob191bnByZXNlcnZlX3BhZ2VzXCIsXG4gICAgXCJraG9fcmFkaXhfYWRkX3BhZ2VcIixcbiAgICBcImtob19yYWRpeF9kZWxfcGFnZVwiLFxuICAgIFwia2hvX3JhZGl4X3dhbGtfdHJlZVwiLFxuICAgIFwia2hvX3ByZXNlcnZlX2ZvbGlvXCIsXG4gICAgXCJraG9fdW5wcmVzZXJ2ZV9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXNgIGFuZCBtb2RpZmllcyB0aGUgS2V4ZWMgSGFuZG92ZXIgKEtITykgcmFkaXggdHJlZSBsb2dpYyB0byBzdXBwb3J0IHNwbGl0IHBhZ2VzLiBJdCBjaGFuZ2VzIGNvcmUgZnVuY3Rpb25zIGxpa2UgYGtob19yYWRpeF9hZGRfcGFnZWAsIGBraG9fcmFkaXhfZGVsX3BhZ2VgLCBga2hvX3ByZXNlcnZlX3BhZ2VzYCwgYW5kIGBraG9fdW5wcmVzZXJ2ZV9wYWdlc2AuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCdzIGxpdmUgdXBkYXRlIG1lY2hhbmlzbSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHJhZGl4IHRyZWUgYW5kIHBhZ2UgcHJlc2VydmF0aW9uIGxvZ2ljIGhhbmRsZXMgc3BsaXQgcGFnZXMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktFWEVDX0hBTkRPVkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc1wiLFxuICAgIFwia2hvX3ByZXNlcnZlX3BhZ2VzXCIsXG4gICAgXCJraG9fdW5wcmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwia2hvX3JhZGl4X2FkZF9wYWdlXCIsXG4gICAgXCJraG9fcmFkaXhfZGVsX3BhZ2VcIixcbiAgICBcImtob19yYWRpeF93YWxrX3RyZWVcIixcbiAgICBcImtob19wcmVzZXJ2ZV9mb2xpb1wiLFxuICAgIFwia2hvX3VucHJlc2VydmVfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCBhbmQgbW9kaWZpZXMgdGhlIEtleGVjIEhhbmRvdmVyIChLSE8pIHJhZGl4IHRyZWUgbG9naWMgdG8gc3VwcG9ydCBzcGxpdCBwYWdlcy4gSXQgY2hhbmdlcyBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBraG9fcmFkaXhfYWRkX3BhZ2VgLCBga2hvX3JhZGl4X2RlbF9wYWdlYCwgYGtob19wcmVzZXJ2ZV9wYWdlc2AsIGFuZCBga2hvX3VucHJlc2VydmVfcGFnZXNgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwncyBsaXZlIHVwZGF0ZSBtZWNoYW5pc20gYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSByYWRpeCB0cmVlIGFuZCBwYWdlIHByZXNlcnZhdGlvbiBsb2dpYyBoYW5kbGVzIHNwbGl0IHBhZ2VzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow49hdt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-03 02:15:09 +0000 UTC FinishedAt: 2026-07-03 02:31:32 +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": "f4b4fac1867633ac17c35842f03933f6a7a4425f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KEXEC_HANDOVER" ], "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": "f4b4fac1867633ac17c35842f03933f6a7a4425f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KEXEC_HANDOVER" ], "series_id": "713d9168-6cd6-437c-9a69-b2bd109e2e23" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "kho_split_preserved_pages", "kho_preserve_pages", "kho_unpreserve_pages", "kho_radix_add_page", "kho_radix_del_page", "kho_radix_walk_tree", "kho_preserve_folio", "kho_unpreserve_folio" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAzIDAyOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tFWEVDX0hBTkRPVkVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyYjMzQ7LAogICAgJiMzNDtraG9fcHJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7a2hvX3VucHJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7a2hvX3JhZGl4X2FkZF9wYWdlJiMzNDssCiAgICAmIzM0O2tob19yYWRpeF9kZWxfcGFnZSYjMzQ7LAogICAgJiMzNDtraG9fcmFkaXhfd2Fsa190cmVlJiMzNDssCiAgICAmIzM0O2tob19wcmVzZXJ2ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtraG9fdW5wcmVzZXJ2ZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCBhbmQgbW9kaWZpZXMgdGhlIEtleGVjIEhhbmRvdmVyIChLSE8pIHJhZGl4IHRyZWUgbG9naWMgdG8gc3VwcG9ydCBzcGxpdCBwYWdlcy4gSXQgY2hhbmdlcyBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBraG9fcmFkaXhfYWRkX3BhZ2VgLCBga2hvX3JhZGl4X2RlbF9wYWdlYCwgYGtob19wcmVzZXJ2ZV9wYWdlc2AsIGFuZCBga2hvX3VucHJlc2VydmVfcGFnZXNgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwmIzM5O3MgbGl2ZSB1cGRhdGUgbWVjaGFuaXNtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmFkaXggdHJlZSBhbmQgcGFnZSBwcmVzZXJ2YXRpb24gbG9naWMgaGFuZGxlcyBzcGxpdCBwYWdlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDI6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkMzRiMmQ0NDZkMWZmMjk5MmI1MDcxNjJiYjBmMmNmMWMzNzQ2YTBmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAwMjoyODoxOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcbmluZGV4IDg5NjhjNTZkMmQ3M2UxLi40NTJlMzhiYjIwNzY4MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEAgaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuJiM0MztpbnQga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbiBpbnQga2hvX3ByZXNlcnZlX3ZtYWxsb2Modm9pZCAqcHRyLCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XG4gdm9pZCBraG9fdW5wcmVzZXJ2ZV92bWFsbG9jKHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKTtcbiB2b2lkICpraG9fYWxsb2NfcHJlc2VydmUoc2l6ZV90IHNpemUpO1xuQEAgLTY1LDYgJiM0Mzs2NiwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcykgeyB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9yZGVyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0cixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oIGIvaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oXG5pbmRleCA4NGU5MThiOTZlNTNkZi4uOTI0NGEzZjdhMmQ0NzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaFxuQEAgLTM0LDE2ICYjNDM7MzQsMjIgQEAgc3RydWN0IGtob19yYWRpeF90cmVlIHtcbiBcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0cyB0aGUgdHJlZSYjMzk7cyBzdHJ1Y3R1cmUgYW5kIHJvb3QgcG9pbnRlciAqL1xuIH07XG4gXG4mIzQzO2VudW0ga2hvX3BhZ2VfdHlwZSB7XG4mIzQzO1x0S0hPX1BBR0VfQ09OVElHID0gMCxcbiYjNDM7XHRLSE9fUEFHRV9TUExJVCxcbiYjNDM7fTtcbiYjNDM7XG4gdHlwZWRlZiBpbnQgKCpraG9fcmFkaXhfdHJlZV93YWxrX2NhbGxiYWNrX3QpKHBoeXNfYWRkcl90IHBoeXMsXG4tXHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBvcmRlcik7XG4mIzQzO1x0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSk7XG4gXG4gI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxuIFxuIGludCBraG9fcmFkaXhfYWRkX3BhZ2Uoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLCB1bnNpZ25lZCBsb25nIHBmbixcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBvcmRlcik7XG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSk7XG4gXG4gdm9pZCBraG9fcmFkaXhfZGVsX3BhZ2Uoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLCB1bnNpZ25lZCBsb25nIHBmbixcbi1cdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIpO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKTtcbiBcbiBpbnQga2hvX3JhZGl4X3dhbGtfdHJlZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXG4gXHRcdFx0a2hvX3JhZGl4X3RyZWVfd2Fsa19jYWxsYmFja190IGNiKTtcbkBAIC01MSwxMyAmIzQzOzU3LDE0IEBAIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbiAjZWxzZSAgLyogI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGtob19yYWRpeF9hZGRfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsIGxvbmcgcGZuLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgb3JkZXIpXG4mIzQzO1x0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKVxuIHtcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGtob19yYWRpeF9kZWxfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXG4tXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyKSB7IH1cbiYjNDM7XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyLFxuJiM0MztcdFx0XHRcdCAgICAgIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKSB7IH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbiBcdFx0XHRcdCAgICAgIGtob19yYWRpeF90cmVlX3dhbGtfY2FsbGJhY2tfdCBjYilcbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuaW5kZXggNDgzNGE4MDk5ODVhYjcuLmVhMDgyNDg5MDFiNTUxIDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuQEAgLTQzLDE4ICYjNDM7NDMsMjIgQEBcbiBcbiAvKlxuICAqIEtITyB1c2VzIHBhZ2UtXHUwMDNlcHJpdmF0ZSwgd2hpY2ggaXMgYW4gdW5zaWduZWQgbG9uZywgdG8gc3RvcmUgcGFnZSBtZXRhZGF0YS5cbi0gKiBVc2UgaXQgdG8gc3RvcmUgYm90aCB0aGUgbWFnaWMgYW5kIHRoZSBvcmRlci5cbiYjNDM7ICogVXNlIGl0IHRvIHN0b3JlIHRoZSBtYWdpYywgdGhlIG9yZGVyLCBhbmQgdGhlIHR5cGUgYml0LlxuICAqL1xuIHVuaW9uIGtob19wYWdlX2luZm8ge1xuIFx0dW5zaWduZWQgbG9uZyBwYWdlX3ByaXZhdGU7XG4gXHRzdHJ1Y3Qge1xuLVx0XHR1bnNpZ25lZCBpbnQgb3JkZXI7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgb3JkZXIgOiAzMTtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCB0eXBlICA6IDE7XG4gXHRcdHVuc2lnbmVkIGludCBtYWdpYztcbiBcdH07XG4gfTtcbiBcbiBzdGF0aWNfYXNzZXJ0KHNpemVvZih1bmlvbiBraG9fcGFnZV9pbmZvKSA9PSBzaXplb2YoKChzdHJ1Y3QgcGFnZSAqKTApLVx1MDAzZXByaXZhdGUpKTtcbiBcbiYjNDM7I2RlZmluZSBLSE9fS0VZX1RZUEVfU0hJRlQgNjNcbiYjNDM7I2RlZmluZSBLSE9fS0VZX1RZUEVfTUFTSyAgQklUKEtIT19LRVlfVFlQRV9TSElGVClcbiYjNDM7XG4gc3RhdGljIGJvb2wga2hvX2VuYWJsZSBfX3JvX2FmdGVyX2luaXQgPSBJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVCk7XG4gXG4gYm9vbCBraG9faXNfZW5hYmxlZCh2b2lkKVxuQEAgLTg1LDQyICYjNDM7ODksNTIgQEAgc3RhdGljIHN0cnVjdCBraG9fb3V0IGtob19vdXQgPSB7XG4gfTtcbiBcbiAvKipcbi0gKiBraG9fcmFkaXhfZW5jb2RlX2tleSAtIEVuY29kZXMgYSBwaHlzaWNhbCBhZGRyZXNzIGFuZCBvcmRlciBpbnRvIGEgcmFkaXgga2V5LlxuJiM0MzsgKiBraG9fcmFkaXhfZW5jb2RlX2tleSAtIEVuY29kZXMgYSBwaHlzaWNhbCBhZGRyZXNzLCBvcmRlciBhbmQgdHlwZSBpbnRvIGEgcmFkaXgga2V5LlxuICAqIEBwaHlzOiBUaGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcGFnZS5cbiAgKiBAb3JkZXI6IFRoZSBvcmRlciBvZiB0aGUgcGFnZS5cbiYjNDM7ICogQHR5cGU6IFRoZSBwYWdlIHR5cGUuXG4gICpcbi0gKiBUaGlzIGZ1bmN0aW9uIGNvbWJpbmVzIGEgcGFnZSYjMzk7cyBwaHlzaWNhbCBhZGRyZXNzIGFuZCBpdHMgb3JkZXIgaW50byBhXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gY29tYmluZXMgYSBwYWdlJiMzOTtzIHBoeXNpY2FsIGFkZHJlc3MsIGl0cyBvcmRlciwgYW5kIGl0cyB0eXBlIGludG8gYVxuICAqIHNpbmdsZSB1bnNpZ25lZCBsb25nLCB3aGljaCBpcyB1c2VkIGFzIGEga2V5IGZvciBhbGwgcmFkaXggdHJlZVxuICAqIG9wZXJhdGlvbnMuXG4gICpcbiAgKiBSZXR1cm46IFRoZSBlbmNvZGVkIHVuc2lnbmVkIGxvbmcgcmFkaXgga2V5LlxuICAqL1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGtob19yYWRpeF9lbmNvZGVfa2V5KHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGludCBvcmRlcilcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcga2hvX3JhZGl4X2VuY29kZV9rZXkocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgaW50IG9yZGVyLFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSlcbiB7XG4gXHQvKiBPcmRlciBiaXRzIHBhcnQgKi9cbiBcdHVuc2lnbmVkIGxvbmcgaCA9IDFVTCBcdTAwM2NcdTAwM2MgKEtIT19PUkRFUl8wX0xPRzIgLSBvcmRlcik7XG4gXHQvKiBTaGlmdGVkIHBoeXNpY2FsIGFkZHJlc3MgcGFydCAqL1xuIFx0dW5zaWduZWQgbG9uZyBsID0gcGh5cyBcdTAwM2VcdTAwM2UgKFBBR0VfU0hJRlQgJiM0Mzsgb3JkZXIpO1xuJiM0MztcdC8qIFR5cGUgYml0IHBhcnQgKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nIHQgPSAodW5zaWduZWQgbG9uZyl0eXBlIFx1MDAzY1x1MDAzYyBLSE9fS0VZX1RZUEVfU0hJRlQ7XG4gXG4tXHRyZXR1cm4gaCB8IGw7XG4mIzQzO1x0cmV0dXJuIGggfCBsIHwgdDtcbiB9XG4gXG4gLyoqXG4tICoga2hvX3JhZGl4X2RlY29kZV9rZXkgLSBEZWNvZGVzIGEgcmFkaXgga2V5IGJhY2sgaW50byBhIHBoeXNpY2FsIGFkZHJlc3MgYW5kIG9yZGVyLlxuJiM0MzsgKiBraG9fcmFkaXhfZGVjb2RlX2tleSAtIERlY29kZXMgYSByYWRpeCBrZXkgYmFjayBpbnRvIHBoeXNpY2FsIGFkZHJlc3MsIG9yZGVyLCBhbmQgdHlwZS5cbiAgKiBAa2V5OiBUaGUgdW5zaWduZWQgbG9uZyBrZXkgdG8gZGVjb2RlLlxuICAqIEBvcmRlcjogQW4gb3V0cHV0IHBhcmFtZXRlciwgYSBwb2ludGVyIHRvIGFuIHVuc2lnbmVkIGludCB3aGVyZSB0aGUgZGVjb2RlZFxuICAqICAgICAgICAgcGFnZSBvcmRlciB3aWxsIGJlIHN0b3JlZC5cbiYjNDM7ICogQHR5cGU6IEFuIG91dHB1dCBwYXJhbWV0ZXIsIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZGVjb2RlZCB0eXBlIHdpbGwgYmUgc3RvcmVkLlxuICAqXG4gICogVGhpcyBmdW5jdGlvbiByZXZlcnNlcyB0aGUgZW5jb2RpbmcgcGVyZm9ybWVkIGJ5IGtob19yYWRpeF9lbmNvZGVfa2V5KCksXG4tICogZXh0cmFjdGluZyB0aGUgb3JpZ2luYWwgcGh5c2ljYWwgYWRkcmVzcyBhbmQgcGFnZSBvcmRlciBmcm9tIGEgZ2l2ZW4ga2V5LlxuJiM0MzsgKiBleHRyYWN0aW5nIHRoZSBvcmlnaW5hbCBwaHlzaWNhbCBhZGRyZXNzLCBwYWdlIG9yZGVyLCBhbmQgdHlwZSBmcm9tIGEgZ2l2ZW4ga2V5LlxuICAqXG4gICogUmV0dXJuOiBUaGUgZGVjb2RlZCBwaHlzaWNhbCBhZGRyZXNzLlxuICAqL1xuLXN0YXRpYyBwaHlzX2FkZHJfdCBraG9fcmFkaXhfZGVjb2RlX2tleSh1bnNpZ25lZCBsb25nIGtleSwgdW5zaWduZWQgaW50ICpvcmRlcilcbiYjNDM7c3RhdGljIHBoeXNfYWRkcl90IGtob19yYWRpeF9kZWNvZGVfa2V5KHVuc2lnbmVkIGxvbmcga2V5LCB1bnNpZ25lZCBpbnQgKm9yZGVyLFxuJiM0MztcdFx0XHRcdFx0ZW51bSBraG9fcGFnZV90eXBlICp0eXBlKVxuIHtcbi1cdHVuc2lnbmVkIGludCBvcmRlcl9iaXQgPSBmbHM2NChrZXkpO1xuJiM0MztcdHVuc2lnbmVkIGludCBvcmRlcl9iaXQ7XG4gXHRwaHlzX2FkZHJfdCBwaHlzO1xuIFxuJiM0MztcdCp0eXBlID0gKGtleSBcdTAwMjYgS0hPX0tFWV9UWVBFX01BU0spIFx1MDAzZVx1MDAzZSBLSE9fS0VZX1RZUEVfU0hJRlQ7XG4mIzQzO1x0a2V5IFx1MDAyNj0gfktIT19LRVlfVFlQRV9NQVNLO1xuJiM0MztcbiYjNDM7XHRvcmRlcl9iaXQgPSBmbHM2NChrZXkpO1xuIFx0Lyogb3JkZXJfYml0IGlzIG51bWJlcmVkIHN0YXJ0aW5nIGF0IDEgZnJvbSBmbHM2NCAqL1xuIFx0Km9yZGVyID0gS0hPX09SREVSXzBfTE9HMiAtIG9yZGVyX2JpdCAmIzQzOyAxO1xuIFx0LyogVGhlIG9yZGVyIGlzIGRpc2NhcmRlZCBieSB0aGUgc2hpZnQgKi9cbkBAIC0xNDgsNiAmIzQzOzE2Miw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGtob19yYWRpeF9nZXRfdGFibGVfaW5kZXgodW5zaWduZWQgbG9uZyBrZXksXG4gICogQHRyZWU6IFRoZSBLSE8gcmFkaXggdHJlZS5cbiAgKiBAcGZuOiBUaGUgcGFnZSBmcmFtZSBudW1iZXIgb2YgdGhlIHBhZ2UgdG8gcHJlc2VydmUuXG4gICogQG9yZGVyOiBUaGUgb3JkZXIgb2YgdGhlIHBhZ2UuXG4mIzQzOyAqIEB0eXBlOiBUaGUgcGFnZSB0eXBlLlxuICAqXG4gICogVGhpcyBmdW5jdGlvbiB0cmF2ZXJzZXMgdGhlIHJhZGl4IHRyZWUgYmFzZWQgb24gdGhlIGtleSBkZXJpdmVkIGZyb20gQHBmblxuICAqIGFuZCBAb3JkZXIuIEl0IHNldHMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSBsZWFmIGJpdG1hcCB0byBtYXJrIHRoZVxuQEAgLTE1NywxMSAmIzQzOzE3MiwxMiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBraG9fcmFkaXhfZ2V0X3RhYmxlX2luZGV4KHVuc2lnbmVkIGxvbmcga2V5LFxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgKi9cbiBpbnQga2hvX3JhZGl4X2FkZF9wYWdlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBvcmRlcixcbiYjNDM7XHRcdCAgICAgICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSlcbiB7XG4gXHQvKiBOZXdseSBhbGxvY2F0ZWQgbm9kZXMgZm9yIGVycm9yIGNsZWFudXAgKi9cbiBcdHN0cnVjdCBraG9fcmFkaXhfbm9kZSAqaW50ZXJtZWRpYXRlX25vZGVzW0tIT19UUkVFX01BWF9ERVBUSF0gPSB7IDAgfTtcbi1cdHVuc2lnbmVkIGxvbmcga2V5ID0ga2hvX3JhZGl4X2VuY29kZV9rZXkoUEZOX1BIWVMocGZuKSwgb3JkZXIpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcga2V5ID0ga2hvX3JhZGl4X2VuY29kZV9rZXkoUEZOX1BIWVMocGZuKSwgb3JkZXIsIHR5cGUpO1xuIFx0c3RydWN0IGtob19yYWRpeF9ub2RlICphbmNob3Jfbm9kZSA9IE5VTEw7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X25vZGUgKm5vZGUgPSB0cmVlLVx1MDAzZXJvb3Q7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X25vZGUgKm5ld19ub2RlO1xuQEAgLTIzMSwxNSAmIzQzOzI0NywxNiBAQCBFWFBPUlRfU1lNQk9MX0dQTChraG9fcmFkaXhfYWRkX3BhZ2UpO1xuICAqIEB0cmVlOiBUaGUgS0hPIHJhZGl4IHRyZWUuXG4gICogQHBmbjogVGhlIHBhZ2UgZnJhbWUgbnVtYmVyIG9mIHRoZSBwYWdlIHRvIHVucHJlc2VydmUuXG4gICogQG9yZGVyOiBUaGUgb3JkZXIgb2YgdGhlIHBhZ2UuXG4mIzQzOyAqIEB0eXBlOiBUaGUgcGFnZSB0eXBlLlxuICAqXG4gICogVGhpcyBmdW5jdGlvbiB0cmF2ZXJzZXMgdGhlIHJhZGl4IHRyZWUgYW5kIGNsZWFycyB0aGUgYml0IGNvcnJlc3BvbmRpbmcgdG9cbiAgKiB0aGUgcGFnZSwgZWZmZWN0aXZlbHkgcmVtb3ZpbmcgaXRzIFwmIzM0O3ByZXNlcnZlZFwmIzM0OyBzdGF0dXMuIEl0IGRvZXMgbm90IGZyZWVcbiAgKiB0aGUgdHJlZSYjMzk7cyBpbnRlcm1lZGlhdGUgbm9kZXMsIGV2ZW4gaWYgdGhleSBiZWNvbWUgZW1wdHkuXG4gICovXG4gdm9pZCBraG9fcmFkaXhfZGVsX3BhZ2Uoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLCB1bnNpZ25lZCBsb25nIHBmbixcbi1cdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIpXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBvcmRlciwgZW51bSBraG9fcGFnZV90eXBlIHR5cGUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBrZXkgPSBraG9fcmFkaXhfZW5jb2RlX2tleShQRk5fUEhZUyhwZm4pLCBvcmRlcik7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBrZXkgPSBraG9fcmFkaXhfZW5jb2RlX2tleShQRk5fUEhZUyhwZm4pLCBvcmRlciwgdHlwZSk7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X25vZGUgKm5vZGUgPSB0cmVlLVx1MDAzZXJvb3Q7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X2xlYWYgKmxlYWY7XG4gXHR1bnNpZ25lZCBpbnQgaSwgaWR4O1xuQEAgLTI3NywxNCAmIzQzOzI5NCwxNSBAQCBzdGF0aWMgaW50IGtob19yYWRpeF93YWxrX2xlYWYoc3RydWN0IGtob19yYWRpeF9sZWFmICpsZWFmLFxuIFx0XHRcdCAgICAgICBraG9fcmFkaXhfdHJlZV93YWxrX2NhbGxiYWNrX3QgY2IpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyAqYml0bWFwID0gKHVuc2lnbmVkIGxvbmcgKilsZWFmO1xuJiM0MztcdGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlO1xuIFx0dW5zaWduZWQgaW50IG9yZGVyO1xuIFx0cGh5c19hZGRyX3QgcGh5cztcbiBcdHVuc2lnbmVkIGludCBpO1xuIFx0aW50IGVycjtcbiBcbiBcdGZvcl9lYWNoX3NldF9iaXQoaSwgYml0bWFwLCBQQUdFX1NJWkUgKiBCSVRTX1BFUl9CWVRFKSB7XG4tXHRcdHBoeXMgPSBraG9fcmFkaXhfZGVjb2RlX2tleShrZXkgfCBpLCBcdTAwMjZvcmRlcik7XG4tXHRcdGVyciA9IGNiKHBoeXMsIG9yZGVyKTtcbiYjNDM7XHRcdHBoeXMgPSBraG9fcmFkaXhfZGVjb2RlX2tleShrZXkgfCBpLCBcdTAwMjZvcmRlciwgXHUwMDI2dHlwZSk7XG4mIzQzO1x0XHRlcnIgPSBjYihwaHlzLCBvcmRlciwgdHlwZSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0zNTcsMTEgJiM0MzszNzUsMTggQEAgaW50IGtob19yYWRpeF93YWxrX3RyZWUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChraG9fcmFkaXhfd2Fsa190cmVlKTtcbiBcbi0vKiBGb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIDAtb3JkZXIgcGFnZXMuICovXG4tc3RhdGljIHZvaWQga2hvX2luaXRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4mIzQzOy8qIEZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgcGFnZXMuICovXG4mIzQzO3N0YXRpYyB2b2lkIGtob19yZXN0b3JlX3JlZmNvdW50cyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiYjNDM7XHRcdFx0XHQgIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKVxuIHtcbi1cdGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UgJiM0MzsgaSwgMSk7XG4mIzQzO1x0LyogSGVhZCBwYWdlIGFsd2F5cyBnZXRzIHJlZmNvdW50IG9mIDEuICovXG4mIzQzO1x0c2V0X3BhZ2VfY291bnQocGFnZSwgMSk7XG4mIzQzO1x0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDE7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGNvdW50ID0gKHR5cGUgPT0gS0hPX1BBR0VfU1BMSVQpID8gMSA6IDA7XG4mIzQzO1xuJiM0MztcdFx0c2V0X3BhZ2VfY291bnQocGFnZSAmIzQzOyBpLCBjb3VudCk7XG4gXHRcdC8qIENsZWFyIGVhY2ggcGFnZSYjMzk7cyBjb2RldGFnIHRvIGF2b2lkIGFjY291bnRpbmcgbWlzbWF0Y2guICovXG4gXHRcdGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlICYjNDM7IGkpO1xuIFx0fVxuQEAgLTM2OSwxNiAmIzQzOzM5NCw3IEBAIHN0YXRpYyB2b2lkIGtob19pbml0X3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuIFxuIHN0YXRpYyB2b2lkIGtob19pbml0X2ZvbGlvKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9ICgxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4tXG4tXHQvKiBIZWFkIHBhZ2UgZ2V0cyByZWZjb3VudCBvZiAxLiAqL1xuLVx0c2V0X3BhZ2VfY291bnQocGFnZSwgMSk7XG4tXHQvKiBDbGVhciBoZWFkIHBhZ2UmIzM5O3MgY29kZXRhZyB0byBhdm9pZCBhY2NvdW50aW5nIG1pc21hdGNoLiAqL1xuLVx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xuLVxuLVx0LyogRm9yIGhpZ2hlciBvcmRlciBmb2xpb3MsIHRhaWwgcGFnZXMgZ2V0IGEgcGFnZSBjb3VudCBvZiB6ZXJvLiAqL1xuLVx0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAxOyBpIFx1MDAzYyBucl9wYWdlczsgaSYjNDM7JiM0MzspXG4tXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UgJiM0MzsgaSwgMCk7XG4mIzQzO1x0a2hvX3Jlc3RvcmVfcmVmY291bnRzKHBhZ2UsIDEgXHUwMDNjXHUwMDNjIG9yZGVyLCBLSE9fUEFHRV9DT05USUcpO1xuIFxuIFx0aWYgKG9yZGVyIFx1MDAzZSAwKVxuIFx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgb3JkZXIpO1xuQEAgLTQwMywxMyAmIzQzOzQxOSwyMCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2UocGh5c19hZGRyX3QgcGh5cywgYm9vbCBpc19mb2xpbylcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHRucl9wYWdlcyA9ICgxIFx1MDAzY1x1MDAzYyBpbmZvLm9yZGVyKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHdlIHdhbnQgdG8gcmVzdG9yZSBhIGZvbGlvLCBidXQgdGhlIG1lbW9yeSB3YXMgc3BsaXQgaW4gdGhlXG4mIzQzO1x0ICogcHJldmlvdXMga2VybmVsLCBzb21ldGhpbmcgaXMgd3JvbmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShpc19mb2xpbyBcdTAwMjZcdTAwMjYgaW5mby50eXBlID09IEtIT19QQUdFX1NQTElUKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiBcdC8qIENsZWFyIHByaXZhdGUgdG8gbWFrZSBzdXJlIGxhdGVyIHJlc3RvcmVzIG9uIHRoaXMgcGFnZSBlcnJvciBvdXQuICovXG4gXHRwYWdlLVx1MDAzZXByaXZhdGUgPSAwO1xuIFxuIFx0aWYgKGlzX2ZvbGlvKVxuIFx0XHRraG9faW5pdF9mb2xpbyhwYWdlLCBpbmZvLm9yZGVyKTtcbiBcdGVsc2Vcbi1cdFx0a2hvX2luaXRfcGFnZXMocGFnZSwgbnJfcGFnZXMpO1xuJiM0MztcdFx0a2hvX3Jlc3RvcmVfcmVmY291bnRzKHBhZ2UsIG5yX3BhZ2VzLCBpbmZvLnR5cGUpO1xuIFxuIFx0YWRqdXN0X21hbmFnZWRfcGFnZV9jb3VudChwYWdlLCBucl9wYWdlcyk7XG4gXHRyZXR1cm4gcGFnZTtcbkBAIC00ODUsNyAmIzQzOzUwOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19pbml0IGtob19nZXRfcHJlc2VydmVkX3BhZ2UocGh5c19hZGRyX3QgcGh5cyxcbiB9XG4gXG4gc3RhdGljIGludCBfX2luaXQga2hvX3ByZXNlcnZlZF9tZW1vcnlfcmVzZXJ2ZShwaHlzX2FkZHJfdCBwaHlzLFxuLVx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IG9yZGVyKVxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBvcmRlcixcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSlcbiB7XG4gXHR1bmlvbiBraG9fcGFnZV9pbmZvIGluZm87XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbkBAIC00OTksNiAmIzQzOzUyMyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGtob19wcmVzZXJ2ZWRfbWVtb3J5X3Jlc2VydmUocGh5c19hZGRyX3QgcGh5cyxcbiBcdG1lbWJsb2NrX3Jlc2VydmVkX21hcmtfbm9pbml0KHBoeXMsIHN6KTtcbiBcdGluZm8ubWFnaWMgPSBLSE9fUEFHRV9NQUdJQztcbiBcdGluZm8ub3JkZXIgPSBvcmRlcjtcbiYjNDM7XHRpbmZvLnR5cGUgPSB0eXBlO1xuIFx0cGFnZS1cdTAwM2Vwcml2YXRlID0gaW5mby5wYWdlX3ByaXZhdGU7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04NTksNyAmIzQzOzg4NCw3IEBAIGludCBraG9fcHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0cmV0dXJuIGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTtcbiYjNDM7XHRyZXR1cm4ga2hvX3JhZGl4X2FkZF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIsIEtIT19QQUdFX0NPTlRJRyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob19wcmVzZXJ2ZV9mb2xpbyk7XG4gXG5AQCAtODc3LDcgJiM0Mzs5MDIsNyBAQCB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRjb25zdCB1bnNpZ25lZCBsb25nIHBmbiA9IGZvbGlvX3Bmbihmb2xpbyk7XG4gXHRjb25zdCB1bnNpZ25lZCBpbnQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4gXG4tXHRraG9fcmFkaXhfZGVsX3BhZ2UodHJlZSwgcGZuLCBvcmRlcik7XG4mIzQzO1x0a2hvX3JhZGl4X2RlbF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIsIEtIT19QQUdFX0NPTlRJRyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX2ZvbGlvKTtcbiBcbkBAIC04OTgsMTUgJiM0Mzs5MjMsMjkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdHJldHVybiBvcmRlcjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGtob19pc19wYWdlX3NwbGl0KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSByZWZjb3VudCBvZiB0aGUgc2Vjb25kIHBhZ2UgaXMgbm9uLXplcm8sIHRoaXMgYmxvY2tcbiYjNDM7XHQgKiBoYXMgYmVlbiBzcGxpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAob3JkZXIgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHBhZ2VfcmVmX2NvdW50KHBmbl90b19wYWdlKHBmbiAmIzQzOyAxKSkgIT0gMClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgX19raG9fdW5wcmVzZXJ2ZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXG4gXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuIHtcbi1cdHVuc2lnbmVkIGludCBvcmRlcjtcbi1cbiBcdHdoaWxlIChwZm4gXHUwMDNjIGVuZF9wZm4pIHtcbi1cdFx0b3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xuJiM0MztcdFx0dW5zaWduZWQgaW50IG9yZGVyID0gX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIocGZuLCBlbmRfcGZuKTtcbiYjNDM7XHRcdGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlO1xuIFxuLVx0XHRraG9fcmFkaXhfZGVsX3BhZ2UodHJlZSwgcGZuLCBvcmRlcik7XG4mIzQzO1x0XHR0eXBlID0ga2hvX2lzX3BhZ2Vfc3BsaXQocGZuLCBvcmRlcikgPyBLSE9fUEFHRV9TUExJVCA6XG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBLSE9fUEFHRV9DT05USUc7XG4mIzQzO1xuJiM0MztcdFx0a2hvX3JhZGl4X2RlbF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIsIHR5cGUpO1xuIFxuIFx0XHRwZm4gJiM0Mzs9IDEgXHUwMDNjXHUwMDNjIG9yZGVyO1xuIFx0fVxuQEAgLTkzOCw4ICYjNDM7OTc3LDEyIEBAIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4gXG4gXHR3aGlsZSAocGZuIFx1MDAzYyBlbmRfcGZuKSB7XG4gXHRcdHVuc2lnbmVkIGludCBvcmRlciA9IF9fa2hvX3ByZXNlcnZlX3BhZ2VzX29yZGVyKHBmbiwgZW5kX3Bmbik7XG4mIzQzO1x0XHRlbnVtIGtob19wYWdlX3R5cGUgdHlwZTtcbiYjNDM7XG4mIzQzO1x0XHR0eXBlID0ga2hvX2lzX3BhZ2Vfc3BsaXQocGZuLCBvcmRlcikgPyBLSE9fUEFHRV9TUExJVCA6XG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBLSE9fUEFHRV9DT05USUc7XG4gXG4tXHRcdGVyciA9IGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTtcbiYjNDM7XHRcdGVyciA9IGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyLCB0eXBlKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGZhaWxlZF9wZm4gPSBwZm47XG4gXHRcdFx0YnJlYWs7XG5AQCAtOTc1LDYgJiM0MzsxMDE4LDI5IEBAIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3BhZ2VzKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMgLSBzcGxpdCBjb250aWd1b3VzIHBhZ2VzIHRoYXQgYXJlIHByZXNlcnZlZFxuJiM0MzsgKiBAcGFnZTogZmlyc3QgcGFnZSBpbiB0aGUgbGlzdC5cbiYjNDM7ICogQG9yZGVyOiB0aGUgb3JkZXIgb2YgdGhlIG9yaWdpbmFsIGFsbG9jYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHNwbGl0IGEgaGlnaC1vcmRlciBhbGxvY2F0aW9uIHRoYXQgaGFzIGJlZW5cbiYjNDM7ICogcHJlc2VydmVkIGFjcm9zcyBrZXhlYy4gSXQgdW5wcmVzZXJ2ZXMgdGhlIHBhZ2VzLCBzcGxpdHMgdGhlbSB1c2luZ1xuJiM0MzsgKiBzcGxpdF9wYWdlKCkgYW5kIHRoZW4gcmUtcHJlc2VydmVzIHRoZW0gYXMgaW5kaXZpZHVhbCBwYWdlcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBNVVNUIG9ubHkgYmUgY2FsbGVkIG9uIHBhZ2VzIHRoYXQgYXJlIGN1cnJlbnRseSBwcmVzZXJ2ZWQuXG4mIzQzOyAqIFRoZSBAb3JkZXIgcHJvdmlkZWQgTVVTVCBtYXRjaCB0aGUgb3JkZXIgdXNlZCBkdXJpbmcgdGhlIGluaXRpYWxcbiYjNDM7ICogcHJlc2VydmF0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztpbnQga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuJiM0Mzt7XG4mIzQzO1x0a2hvX3VucHJlc2VydmVfcGFnZXMocGFnZSwgMVVMIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4mIzQzO1x0c3BsaXRfcGFnZShwYWdlLCBvcmRlcik7XG4mIzQzO1x0cmV0dXJuIGtob19wcmVzZXJ2ZV9wYWdlcyhwYWdlLCAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKTtcbiYjNDM7XG4gLyogdm1hbGxvYyBmbGFncyBLSE8gc3VwcG9ydHMgKi9cbiAjZGVmaW5lIEtIT19WTUFMTE9DX1NVUFBPUlRFRF9GTEFHU1x0KFZNX0FMTE9DIHwgVk1fQUxMT1dfSFVHRV9WTUFQKVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAyOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tFWEVDX0hBTkRPVkVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyYjMzQ7LAogICAgJiMzNDtraG9fcHJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7a2hvX3VucHJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7a2hvX3JhZGl4X2FkZF9wYWdlJiMzNDssCiAgICAmIzM0O2tob19yYWRpeF9kZWxfcGFnZSYjMzQ7LAogICAgJiMzNDtraG9fcmFkaXhfd2Fsa190cmVlJiMzNDssCiAgICAmIzM0O2tob19wcmVzZXJ2ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtraG9fdW5wcmVzZXJ2ZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCBhbmQgbW9kaWZpZXMgdGhlIEtleGVjIEhhbmRvdmVyIChLSE8pIHJhZGl4IHRyZWUgbG9naWMgdG8gc3VwcG9ydCBzcGxpdCBwYWdlcy4gSXQgY2hhbmdlcyBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBraG9fcmFkaXhfYWRkX3BhZ2VgLCBga2hvX3JhZGl4X2RlbF9wYWdlYCwgYGtob19wcmVzZXJ2ZV9wYWdlc2AsIGFuZCBga2hvX3VucHJlc2VydmVfcGFnZXNgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwmIzM5O3MgbGl2ZSB1cGRhdGUgbWVjaGFuaXNtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmFkaXggdHJlZSBhbmQgcGFnZSBwcmVzZXJ2YXRpb24gbG9naWMgaGFuZGxlcyBzcGxpdCBwYWdlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQzNGIyZDQ0NmQxZmYyOTkyYjUwNzE2MmJiMGYyY2YxYzM3NDZhMGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzIDAyOjI4OjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oIGIvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oCmluZGV4IDg5NjhjNTZkMmQ3M2UxLi40NTJlMzhiYjIwNzY4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaApAQCAtMjQsNiAmIzQzOzI0LDcgQEAgaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIHZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7CiBpbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwomIzQzO2ludCBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwogaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0ciwgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pOwogdm9pZCBraG9fdW5wcmVzZXJ2ZV92bWFsbG9jKHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKTsKIHZvaWQgKmtob19hbGxvY19wcmVzZXJ2ZShzaXplX3Qgc2l6ZSk7CkBAIC02NSw2ICYjNDM7NjYsMTIgQEAgc3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKSB7IH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQkJCQkgICAgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0ciwKIAkJCQkgICAgICAgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmggYi9pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmgKaW5kZXggODRlOTE4Yjk2ZTUzZGYuLjkyNDRhM2Y3YTJkNDc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oCkBAIC0zNCwxNiAmIzQzOzM0LDIyIEBAIHN0cnVjdCBraG9fcmFkaXhfdHJlZSB7CiAJc3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3RzIHRoZSB0cmVlJiMzOTtzIHN0cnVjdHVyZSBhbmQgcm9vdCBwb2ludGVyICovCiB9OwogCiYjNDM7ZW51bSBraG9fcGFnZV90eXBlIHsKJiM0MzsJS0hPX1BBR0VfQ09OVElHID0gMCwKJiM0MzsJS0hPX1BBR0VfU1BMSVQsCiYjNDM7fTsKJiM0MzsKIHR5cGVkZWYgaW50ICgqa2hvX3JhZGl4X3RyZWVfd2Fsa19jYWxsYmFja190KShwaHlzX2FkZHJfdCBwaHlzLAotCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIpOwomIzQzOwkJCQkJICAgICAgdW5zaWduZWQgaW50IG9yZGVyLAomIzQzOwkJCQkJICAgICAgZW51bSBraG9fcGFnZV90eXBlIHR5cGUpOwogCiAjaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSCiAKIGludCBraG9fcmFkaXhfYWRkX3BhZ2Uoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLCB1bnNpZ25lZCBsb25nIHBmbiwKLQkJICAgICAgIHVuc2lnbmVkIGludCBvcmRlcik7CiYjNDM7CQkgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSk7CiAKIHZvaWQga2hvX3JhZGl4X2RlbF9wYWdlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSwgdW5zaWduZWQgbG9uZyBwZm4sCi0JCQl1bnNpZ25lZCBpbnQgb3JkZXIpOwomIzQzOwkJCXVuc2lnbmVkIGludCBvcmRlciwgZW51bSBraG9fcGFnZV90eXBlIHR5cGUpOwogCiBpbnQga2hvX3JhZGl4X3dhbGtfdHJlZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsCiAJCQlraG9fcmFkaXhfdHJlZV93YWxrX2NhbGxiYWNrX3QgY2IpOwpAQCAtNTEsMTMgJiM0Mzs1NywxNCBAQCBpbnQga2hvX3JhZGl4X3dhbGtfdHJlZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsCiAjZWxzZSAgLyogI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqLwogCiBzdGF0aWMgaW5saW5lIGludCBraG9fcmFkaXhfYWRkX3BhZ2Uoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLCBsb25nIHBmbiwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBvcmRlcikKJiM0MzsJCQkJICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKQogewogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGtob19yYWRpeF9kZWxfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBvcmRlcikgeyB9CiYjNDM7CQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiYjNDM7CQkJCSAgICAgIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKSB7IH0KIAogc3RhdGljIGlubGluZSBpbnQga2hvX3JhZGl4X3dhbGtfdHJlZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsCiAJCQkJICAgICAga2hvX3JhZGl4X3RyZWVfd2Fsa19jYWxsYmFja190IGNiKQpkaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMKaW5kZXggNDgzNGE4MDk5ODVhYjcuLmVhMDgyNDg5MDFiNTUxIDEwMDY0NAotLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMKQEAgLTQzLDE4ICYjNDM7NDMsMjIgQEAKIAogLyoKICAqIEtITyB1c2VzIHBhZ2UtJmd0O3ByaXZhdGUsIHdoaWNoIGlzIGFuIHVuc2lnbmVkIGxvbmcsIHRvIHN0b3JlIHBhZ2UgbWV0YWRhdGEuCi0gKiBVc2UgaXQgdG8gc3RvcmUgYm90aCB0aGUgbWFnaWMgYW5kIHRoZSBvcmRlci4KJiM0MzsgKiBVc2UgaXQgdG8gc3RvcmUgdGhlIG1hZ2ljLCB0aGUgb3JkZXIsIGFuZCB0aGUgdHlwZSBiaXQuCiAgKi8KIHVuaW9uIGtob19wYWdlX2luZm8gewogCXVuc2lnbmVkIGxvbmcgcGFnZV9wcml2YXRlOwogCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGludCBvcmRlcjsKJiM0MzsJCXVuc2lnbmVkIGludCBvcmRlciA6IDMxOwomIzQzOwkJdW5zaWduZWQgaW50IHR5cGUgIDogMTsKIAkJdW5zaWduZWQgaW50IG1hZ2ljOwogCX07CiB9OwogCiBzdGF0aWNfYXNzZXJ0KHNpemVvZih1bmlvbiBraG9fcGFnZV9pbmZvKSA9PSBzaXplb2YoKChzdHJ1Y3QgcGFnZSAqKTApLSZndDtwcml2YXRlKSk7CiAKJiM0MzsjZGVmaW5lIEtIT19LRVlfVFlQRV9TSElGVCA2MwomIzQzOyNkZWZpbmUgS0hPX0tFWV9UWVBFX01BU0sgIEJJVChLSE9fS0VZX1RZUEVfU0hJRlQpCiYjNDM7CiBzdGF0aWMgYm9vbCBraG9fZW5hYmxlIF9fcm9fYWZ0ZXJfaW5pdCA9IElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUKTsKIAogYm9vbCBraG9faXNfZW5hYmxlZCh2b2lkKQpAQCAtODUsNDIgJiM0Mzs4OSw1MiBAQCBzdGF0aWMgc3RydWN0IGtob19vdXQga2hvX291dCA9IHsKIH07CiAKIC8qKgotICoga2hvX3JhZGl4X2VuY29kZV9rZXkgLSBFbmNvZGVzIGEgcGh5c2ljYWwgYWRkcmVzcyBhbmQgb3JkZXIgaW50byBhIHJhZGl4IGtleS4KJiM0MzsgKiBraG9fcmFkaXhfZW5jb2RlX2tleSAtIEVuY29kZXMgYSBwaHlzaWNhbCBhZGRyZXNzLCBvcmRlciBhbmQgdHlwZSBpbnRvIGEgcmFkaXgga2V5LgogICogQHBoeXM6IFRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBwYWdlLgogICogQG9yZGVyOiBUaGUgb3JkZXIgb2YgdGhlIHBhZ2UuCiYjNDM7ICogQHR5cGU6IFRoZSBwYWdlIHR5cGUuCiAgKgotICogVGhpcyBmdW5jdGlvbiBjb21iaW5lcyBhIHBhZ2UmIzM5O3MgcGh5c2ljYWwgYWRkcmVzcyBhbmQgaXRzIG9yZGVyIGludG8gYQomIzQzOyAqIFRoaXMgZnVuY3Rpb24gY29tYmluZXMgYSBwYWdlJiMzOTtzIHBoeXNpY2FsIGFkZHJlc3MsIGl0cyBvcmRlciwgYW5kIGl0cyB0eXBlIGludG8gYQogICogc2luZ2xlIHVuc2lnbmVkIGxvbmcsIHdoaWNoIGlzIHVzZWQgYXMgYSBrZXkgZm9yIGFsbCByYWRpeCB0cmVlCiAgKiBvcGVyYXRpb25zLgogICoKICAqIFJldHVybjogVGhlIGVuY29kZWQgdW5zaWduZWQgbG9uZyByYWRpeCBrZXkuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGtob19yYWRpeF9lbmNvZGVfa2V5KHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGludCBvcmRlcikKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBraG9fcmFkaXhfZW5jb2RlX2tleShwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiYjNDM7CQkJCQkgIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKQogewogCS8qIE9yZGVyIGJpdHMgcGFydCAqLwogCXVuc2lnbmVkIGxvbmcgaCA9IDFVTCAmbHQ7Jmx0OyAoS0hPX09SREVSXzBfTE9HMiAtIG9yZGVyKTsKIAkvKiBTaGlmdGVkIHBoeXNpY2FsIGFkZHJlc3MgcGFydCAqLwogCXVuc2lnbmVkIGxvbmcgbCA9IHBoeXMgJmd0OyZndDsgKFBBR0VfU0hJRlQgJiM0Mzsgb3JkZXIpOwomIzQzOwkvKiBUeXBlIGJpdCBwYXJ0ICovCiYjNDM7CXVuc2lnbmVkIGxvbmcgdCA9ICh1bnNpZ25lZCBsb25nKXR5cGUgJmx0OyZsdDsgS0hPX0tFWV9UWVBFX1NISUZUOwogCi0JcmV0dXJuIGggfCBsOwomIzQzOwlyZXR1cm4gaCB8IGwgfCB0OwogfQogCiAvKioKLSAqIGtob19yYWRpeF9kZWNvZGVfa2V5IC0gRGVjb2RlcyBhIHJhZGl4IGtleSBiYWNrIGludG8gYSBwaHlzaWNhbCBhZGRyZXNzIGFuZCBvcmRlci4KJiM0MzsgKiBraG9fcmFkaXhfZGVjb2RlX2tleSAtIERlY29kZXMgYSByYWRpeCBrZXkgYmFjayBpbnRvIHBoeXNpY2FsIGFkZHJlc3MsIG9yZGVyLCBhbmQgdHlwZS4KICAqIEBrZXk6IFRoZSB1bnNpZ25lZCBsb25nIGtleSB0byBkZWNvZGUuCiAgKiBAb3JkZXI6IEFuIG91dHB1dCBwYXJhbWV0ZXIsIGEgcG9pbnRlciB0byBhbiB1bnNpZ25lZCBpbnQgd2hlcmUgdGhlIGRlY29kZWQKICAqICAgICAgICAgcGFnZSBvcmRlciB3aWxsIGJlIHN0b3JlZC4KJiM0MzsgKiBAdHlwZTogQW4gb3V0cHV0IHBhcmFtZXRlciwgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBkZWNvZGVkIHR5cGUgd2lsbCBiZSBzdG9yZWQuCiAgKgogICogVGhpcyBmdW5jdGlvbiByZXZlcnNlcyB0aGUgZW5jb2RpbmcgcGVyZm9ybWVkIGJ5IGtob19yYWRpeF9lbmNvZGVfa2V5KCksCi0gKiBleHRyYWN0aW5nIHRoZSBvcmlnaW5hbCBwaHlzaWNhbCBhZGRyZXNzIGFuZCBwYWdlIG9yZGVyIGZyb20gYSBnaXZlbiBrZXkuCiYjNDM7ICogZXh0cmFjdGluZyB0aGUgb3JpZ2luYWwgcGh5c2ljYWwgYWRkcmVzcywgcGFnZSBvcmRlciwgYW5kIHR5cGUgZnJvbSBhIGdpdmVuIGtleS4KICAqCiAgKiBSZXR1cm46IFRoZSBkZWNvZGVkIHBoeXNpY2FsIGFkZHJlc3MuCiAgKi8KLXN0YXRpYyBwaHlzX2FkZHJfdCBraG9fcmFkaXhfZGVjb2RlX2tleSh1bnNpZ25lZCBsb25nIGtleSwgdW5zaWduZWQgaW50ICpvcmRlcikKJiM0MztzdGF0aWMgcGh5c19hZGRyX3Qga2hvX3JhZGl4X2RlY29kZV9rZXkodW5zaWduZWQgbG9uZyBrZXksIHVuc2lnbmVkIGludCAqb3JkZXIsCiYjNDM7CQkJCQllbnVtIGtob19wYWdlX3R5cGUgKnR5cGUpCiB7Ci0JdW5zaWduZWQgaW50IG9yZGVyX2JpdCA9IGZsczY0KGtleSk7CiYjNDM7CXVuc2lnbmVkIGludCBvcmRlcl9iaXQ7CiAJcGh5c19hZGRyX3QgcGh5czsKIAomIzQzOwkqdHlwZSA9IChrZXkgJmFtcDsgS0hPX0tFWV9UWVBFX01BU0spICZndDsmZ3Q7IEtIT19LRVlfVFlQRV9TSElGVDsKJiM0MzsJa2V5ICZhbXA7PSB+S0hPX0tFWV9UWVBFX01BU0s7CiYjNDM7CiYjNDM7CW9yZGVyX2JpdCA9IGZsczY0KGtleSk7CiAJLyogb3JkZXJfYml0IGlzIG51bWJlcmVkIHN0YXJ0aW5nIGF0IDEgZnJvbSBmbHM2NCAqLwogCSpvcmRlciA9IEtIT19PUkRFUl8wX0xPRzIgLSBvcmRlcl9iaXQgJiM0MzsgMTsKIAkvKiBUaGUgb3JkZXIgaXMgZGlzY2FyZGVkIGJ5IHRoZSBzaGlmdCAqLwpAQCAtMTQ4LDYgJiM0MzsxNjIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBraG9fcmFkaXhfZ2V0X3RhYmxlX2luZGV4KHVuc2lnbmVkIGxvbmcga2V5LAogICogQHRyZWU6IFRoZSBLSE8gcmFkaXggdHJlZS4KICAqIEBwZm46IFRoZSBwYWdlIGZyYW1lIG51bWJlciBvZiB0aGUgcGFnZSB0byBwcmVzZXJ2ZS4KICAqIEBvcmRlcjogVGhlIG9yZGVyIG9mIHRoZSBwYWdlLgomIzQzOyAqIEB0eXBlOiBUaGUgcGFnZSB0eXBlLgogICoKICAqIFRoaXMgZnVuY3Rpb24gdHJhdmVyc2VzIHRoZSByYWRpeCB0cmVlIGJhc2VkIG9uIHRoZSBrZXkgZGVyaXZlZCBmcm9tIEBwZm4KICAqIGFuZCBAb3JkZXIuIEl0IHNldHMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSBsZWFmIGJpdG1hcCB0byBtYXJrIHRoZQpAQCAtMTU3LDExICYjNDM7MTcyLDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGtob19yYWRpeF9nZXRfdGFibGVfaW5kZXgodW5zaWduZWQgbG9uZyBrZXksCiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIGludCBraG9fcmFkaXhfYWRkX3BhZ2Uoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLAotCQkgICAgICAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBvcmRlcikKJiM0MzsJCSAgICAgICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyLAomIzQzOwkJICAgICAgIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKQogewogCS8qIE5ld2x5IGFsbG9jYXRlZCBub2RlcyBmb3IgZXJyb3IgY2xlYW51cCAqLwogCXN0cnVjdCBraG9fcmFkaXhfbm9kZSAqaW50ZXJtZWRpYXRlX25vZGVzW0tIT19UUkVFX01BWF9ERVBUSF0gPSB7IDAgfTsKLQl1bnNpZ25lZCBsb25nIGtleSA9IGtob19yYWRpeF9lbmNvZGVfa2V5KFBGTl9QSFlTKHBmbiksIG9yZGVyKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBrZXkgPSBraG9fcmFkaXhfZW5jb2RlX2tleShQRk5fUEhZUyhwZm4pLCBvcmRlciwgdHlwZSk7CiAJc3RydWN0IGtob19yYWRpeF9ub2RlICphbmNob3Jfbm9kZSA9IE5VTEw7CiAJc3RydWN0IGtob19yYWRpeF9ub2RlICpub2RlID0gdHJlZS0mZ3Q7cm9vdDsKIAlzdHJ1Y3Qga2hvX3JhZGl4X25vZGUgKm5ld19ub2RlOwpAQCAtMjMxLDE1ICYjNDM7MjQ3LDE2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGtob19yYWRpeF9hZGRfcGFnZSk7CiAgKiBAdHJlZTogVGhlIEtITyByYWRpeCB0cmVlLgogICogQHBmbjogVGhlIHBhZ2UgZnJhbWUgbnVtYmVyIG9mIHRoZSBwYWdlIHRvIHVucHJlc2VydmUuCiAgKiBAb3JkZXI6IFRoZSBvcmRlciBvZiB0aGUgcGFnZS4KJiM0MzsgKiBAdHlwZTogVGhlIHBhZ2UgdHlwZS4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgcmFkaXggdHJlZSBhbmQgY2xlYXJzIHRoZSBiaXQgY29ycmVzcG9uZGluZyB0bwogICogdGhlIHBhZ2UsIGVmZmVjdGl2ZWx5IHJlbW92aW5nIGl0cyAmIzM0O3ByZXNlcnZlZCYjMzQ7IHN0YXR1cy4gSXQgZG9lcyBub3QgZnJlZQogICogdGhlIHRyZWUmIzM5O3MgaW50ZXJtZWRpYXRlIG5vZGVzLCBldmVuIGlmIHRoZXkgYmVjb21lIGVtcHR5LgogICovCiB2b2lkIGtob19yYWRpeF9kZWxfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsIHVuc2lnbmVkIGxvbmcgcGZuLAotCQkJdW5zaWduZWQgaW50IG9yZGVyKQomIzQzOwkJCXVuc2lnbmVkIGludCBvcmRlciwgZW51bSBraG9fcGFnZV90eXBlIHR5cGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBrZXkgPSBraG9fcmFkaXhfZW5jb2RlX2tleShQRk5fUEhZUyhwZm4pLCBvcmRlcik7CiYjNDM7CXVuc2lnbmVkIGxvbmcga2V5ID0ga2hvX3JhZGl4X2VuY29kZV9rZXkoUEZOX1BIWVMocGZuKSwgb3JkZXIsIHR5cGUpOwogCXN0cnVjdCBraG9fcmFkaXhfbm9kZSAqbm9kZSA9IHRyZWUtJmd0O3Jvb3Q7CiAJc3RydWN0IGtob19yYWRpeF9sZWFmICpsZWFmOwogCXVuc2lnbmVkIGludCBpLCBpZHg7CkBAIC0yNzcsMTQgJiM0MzsyOTQsMTUgQEAgc3RhdGljIGludCBraG9fcmFkaXhfd2Fsa19sZWFmKHN0cnVjdCBraG9fcmFkaXhfbGVhZiAqbGVhZiwKIAkJCSAgICAgICBraG9fcmFkaXhfdHJlZV93YWxrX2NhbGxiYWNrX3QgY2IpCiB7CiAJdW5zaWduZWQgbG9uZyAqYml0bWFwID0gKHVuc2lnbmVkIGxvbmcgKilsZWFmOwomIzQzOwllbnVtIGtob19wYWdlX3R5cGUgdHlwZTsKIAl1bnNpZ25lZCBpbnQgb3JkZXI7CiAJcGh5c19hZGRyX3QgcGh5czsKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgZXJyOwogCiAJZm9yX2VhY2hfc2V0X2JpdChpLCBiaXRtYXAsIFBBR0VfU0laRSAqIEJJVFNfUEVSX0JZVEUpIHsKLQkJcGh5cyA9IGtob19yYWRpeF9kZWNvZGVfa2V5KGtleSB8IGksICZhbXA7b3JkZXIpOwotCQllcnIgPSBjYihwaHlzLCBvcmRlcik7CiYjNDM7CQlwaHlzID0ga2hvX3JhZGl4X2RlY29kZV9rZXkoa2V5IHwgaSwgJmFtcDtvcmRlciwgJmFtcDt0eXBlKTsKJiM0MzsJCWVyciA9IGNiKHBoeXMsIG9yZGVyLCB0eXBlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMzU3LDExICYjNDM7Mzc1LDE4IEBAIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGtob19yYWRpeF93YWxrX3RyZWUpOwogCi0vKiBGb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIDAtb3JkZXIgcGFnZXMuICovCi1zdGF0aWMgdm9pZCBraG9faW5pdF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKJiM0MzsvKiBGb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIHBhZ2VzLiAqLwomIzQzO3N0YXRpYyB2b2lkIGtob19yZXN0b3JlX3JlZmNvdW50cyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKJiM0MzsJCQkJICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSkKIHsKLQlmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgJmx0OyBucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKLQkJc2V0X3BhZ2VfY291bnQocGFnZSAmIzQzOyBpLCAxKTsKJiM0MzsJLyogSGVhZCBwYWdlIGFsd2F5cyBnZXRzIHJlZmNvdW50IG9mIDEuICovCiYjNDM7CXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOwomIzQzOwljbGVhcl9wYWdlX3RhZ19yZWYocGFnZSk7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgbG9uZyBpID0gMTsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdW5zaWduZWQgaW50IGNvdW50ID0gKHR5cGUgPT0gS0hPX1BBR0VfU1BMSVQpID8gMSA6IDA7CiYjNDM7CiYjNDM7CQlzZXRfcGFnZV9jb3VudChwYWdlICYjNDM7IGksIGNvdW50KTsKIAkJLyogQ2xlYXIgZWFjaCBwYWdlJiMzOTtzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi8KIAkJY2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UgJiM0MzsgaSk7CiAJfQpAQCAtMzY5LDE2ICYjNDM7Mzk0LDcgQEAgc3RhdGljIHZvaWQga2hvX2luaXRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiAKIHN0YXRpYyB2b2lkIGtob19pbml0X2ZvbGlvKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9ICgxICZsdDsmbHQ7IG9yZGVyKTsKLQotCS8qIEhlYWQgcGFnZSBnZXRzIHJlZmNvdW50IG9mIDEuICovCi0Jc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7Ci0JLyogQ2xlYXIgaGVhZCBwYWdlJiMzOTtzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi8KLQljbGVhcl9wYWdlX3RhZ19yZWYocGFnZSk7Ci0KLQkvKiBGb3IgaGlnaGVyIG9yZGVyIGZvbGlvcywgdGFpbCBwYWdlcyBnZXQgYSBwYWdlIGNvdW50IG9mIHplcm8uICovCi0JZm9yICh1bnNpZ25lZCBsb25nIGkgPSAxOyBpICZsdDsgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KQotCQlzZXRfcGFnZV9jb3VudChwYWdlICYjNDM7IGksIDApOwomIzQzOwlraG9fcmVzdG9yZV9yZWZjb3VudHMocGFnZSwgMSAmbHQ7Jmx0OyBvcmRlciwgS0hPX1BBR0VfQ09OVElHKTsKIAogCWlmIChvcmRlciAmZ3Q7IDApCiAJCXByZXBfY29tcG91bmRfcGFnZShwYWdlLCBvcmRlcik7CkBAIC00MDMsMTMgJiM0Mzs0MTksMjAgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMsIGJvb2wgaXNfZm9saW8pCiAJCXJldHVybiBOVUxMOwogCW5yX3BhZ2VzID0gKDEgJmx0OyZsdDsgaW5mby5vcmRlcik7CiAKJiM0MzsJLyoKJiM0MzsJICogSWYgd2Ugd2FudCB0byByZXN0b3JlIGEgZm9saW8sIGJ1dCB0aGUgbWVtb3J5IHdhcyBzcGxpdCBpbiB0aGUKJiM0MzsJICogcHJldmlvdXMga2VybmVsLCBzb21ldGhpbmcgaXMgd3JvbmcuCiYjNDM7CSAqLwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKGlzX2ZvbGlvICZhbXA7JmFtcDsgaW5mby50eXBlID09IEtIT19QQUdFX1NQTElUKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwogCS8qIENsZWFyIHByaXZhdGUgdG8gbWFrZSBzdXJlIGxhdGVyIHJlc3RvcmVzIG9uIHRoaXMgcGFnZSBlcnJvciBvdXQuICovCiAJcGFnZS0mZ3Q7cHJpdmF0ZSA9IDA7CiAKIAlpZiAoaXNfZm9saW8pCiAJCWtob19pbml0X2ZvbGlvKHBhZ2UsIGluZm8ub3JkZXIpOwogCWVsc2UKLQkJa2hvX2luaXRfcGFnZXMocGFnZSwgbnJfcGFnZXMpOwomIzQzOwkJa2hvX3Jlc3RvcmVfcmVmY291bnRzKHBhZ2UsIG5yX3BhZ2VzLCBpbmZvLnR5cGUpOwogCiAJYWRqdXN0X21hbmFnZWRfcGFnZV9jb3VudChwYWdlLCBucl9wYWdlcyk7CiAJcmV0dXJuIHBhZ2U7CkBAIC00ODUsNyAmIzQzOzUwOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19pbml0IGtob19nZXRfcHJlc2VydmVkX3BhZ2UocGh5c19hZGRyX3QgcGh5cywKIH0KIAogc3RhdGljIGludCBfX2luaXQga2hvX3ByZXNlcnZlZF9tZW1vcnlfcmVzZXJ2ZShwaHlzX2FkZHJfdCBwaHlzLAotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzOwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBvcmRlciwKJiM0MzsJCQkJCSAgICAgICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSkKIHsKIAl1bmlvbiBraG9fcGFnZV9pbmZvIGluZm87CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CkBAIC00OTksNiAmIzQzOzUyMyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGtob19wcmVzZXJ2ZWRfbWVtb3J5X3Jlc2VydmUocGh5c19hZGRyX3QgcGh5cywKIAltZW1ibG9ja19yZXNlcnZlZF9tYXJrX25vaW5pdChwaHlzLCBzeik7CiAJaW5mby5tYWdpYyA9IEtIT19QQUdFX01BR0lDOwogCWluZm8ub3JkZXIgPSBvcmRlcjsKJiM0MzsJaW5mby50eXBlID0gdHlwZTsKIAlwYWdlLSZndDtwcml2YXRlID0gaW5mby5wYWdlX3ByaXZhdGU7CiAKIAlyZXR1cm4gMDsKQEAgLTg1OSw3ICYjNDM7ODg0LDcgQEAgaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAocGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQsIFBBR0VfU0laRSAmbHQ7Jmx0OyBvcmRlcikpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBraG9fcmFkaXhfYWRkX3BhZ2UodHJlZSwgcGZuLCBvcmRlcik7CiYjNDM7CXJldHVybiBraG9fcmFkaXhfYWRkX3BhZ2UodHJlZSwgcGZuLCBvcmRlciwgS0hPX1BBR0VfQ09OVElHKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGtob19wcmVzZXJ2ZV9mb2xpbyk7CiAKQEAgLTg3Nyw3ICYjNDM7OTAyLDcgQEAgdm9pZCBraG9fdW5wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWNvbnN0IHVuc2lnbmVkIGxvbmcgcGZuID0gZm9saW9fcGZuKGZvbGlvKTsKIAljb25zdCB1bnNpZ25lZCBpbnQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7CiAKLQlraG9fcmFkaXhfZGVsX3BhZ2UodHJlZSwgcGZuLCBvcmRlcik7CiYjNDM7CWtob19yYWRpeF9kZWxfcGFnZSh0cmVlLCBwZm4sIG9yZGVyLCBLSE9fUEFHRV9DT05USUcpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfZm9saW8pOwogCkBAIC04OTgsMTUgJiM0Mzs5MjMsMjkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAlyZXR1cm4gb3JkZXI7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBraG9faXNfcGFnZV9zcGxpdCh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIHJlZmNvdW50IG9mIHRoZSBzZWNvbmQgcGFnZSBpcyBub24temVybywgdGhpcyBibG9jawomIzQzOwkgKiBoYXMgYmVlbiBzcGxpdC4KJiM0MzsJICovCiYjNDM7CWlmIChvcmRlciAmZ3Q7IDAgJmFtcDsmYW1wOyBwYWdlX3JlZl9jb3VudChwZm5fdG9fcGFnZShwZm4gJiM0MzsgMSkpICE9IDApCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIF9fa2hvX3VucHJlc2VydmUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLAogCQkJICAgICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQogewotCXVuc2lnbmVkIGludCBvcmRlcjsKLQogCXdoaWxlIChwZm4gJmx0OyBlbmRfcGZuKSB7Ci0JCW9yZGVyID0gX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIocGZuLCBlbmRfcGZuKTsKJiM0MzsJCXVuc2lnbmVkIGludCBvcmRlciA9IF9fa2hvX3ByZXNlcnZlX3BhZ2VzX29yZGVyKHBmbiwgZW5kX3Bmbik7CiYjNDM7CQllbnVtIGtob19wYWdlX3R5cGUgdHlwZTsKIAotCQlraG9fcmFkaXhfZGVsX3BhZ2UodHJlZSwgcGZuLCBvcmRlcik7CiYjNDM7CQl0eXBlID0ga2hvX2lzX3BhZ2Vfc3BsaXQocGZuLCBvcmRlcikgPyBLSE9fUEFHRV9TUExJVCA6CiYjNDM7CQkJCQkJICAgICAgIEtIT19QQUdFX0NPTlRJRzsKJiM0MzsKJiM0MzsJCWtob19yYWRpeF9kZWxfcGFnZSh0cmVlLCBwZm4sIG9yZGVyLCB0eXBlKTsKIAogCQlwZm4gJiM0Mzs9IDEgJmx0OyZsdDsgb3JkZXI7CiAJfQpAQCAtOTM4LDggJiM0Mzs5NzcsMTIgQEAgaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKIAogCXdoaWxlIChwZm4gJmx0OyBlbmRfcGZuKSB7CiAJCXVuc2lnbmVkIGludCBvcmRlciA9IF9fa2hvX3ByZXNlcnZlX3BhZ2VzX29yZGVyKHBmbiwgZW5kX3Bmbik7CiYjNDM7CQllbnVtIGtob19wYWdlX3R5cGUgdHlwZTsKJiM0MzsKJiM0MzsJCXR5cGUgPSBraG9faXNfcGFnZV9zcGxpdChwZm4sIG9yZGVyKSA/IEtIT19QQUdFX1NQTElUIDoKJiM0MzsJCQkJCQkgICAgICAgS0hPX1BBR0VfQ09OVElHOwogCi0JCWVyciA9IGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTsKJiM0MzsJCWVyciA9IGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyLCB0eXBlKTsKIAkJaWYgKGVycikgewogCQkJZmFpbGVkX3BmbiA9IHBmbjsKIAkJCWJyZWFrOwpAQCAtOTc1LDYgJiM0MzsxMDE4LDI5IEBAIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV9wYWdlcyk7CiAKJiM0MzsvKioKJiM0MzsgKiBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzIC0gc3BsaXQgY29udGlndW91cyBwYWdlcyB0aGF0IGFyZSBwcmVzZXJ2ZWQKJiM0MzsgKiBAcGFnZTogZmlyc3QgcGFnZSBpbiB0aGUgbGlzdC4KJiM0MzsgKiBAb3JkZXI6IHRoZSBvcmRlciBvZiB0aGUgb3JpZ2luYWwgYWxsb2NhdGlvbi4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHNwbGl0IGEgaGlnaC1vcmRlciBhbGxvY2F0aW9uIHRoYXQgaGFzIGJlZW4KJiM0MzsgKiBwcmVzZXJ2ZWQgYWNyb3NzIGtleGVjLiBJdCB1bnByZXNlcnZlcyB0aGUgcGFnZXMsIHNwbGl0cyB0aGVtIHVzaW5nCiYjNDM7ICogc3BsaXRfcGFnZSgpIGFuZCB0aGVuIHJlLXByZXNlcnZlcyB0aGVtIGFzIGluZGl2aWR1YWwgcGFnZXMuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIE1VU1Qgb25seSBiZSBjYWxsZWQgb24gcGFnZXMgdGhhdCBhcmUgY3VycmVudGx5IHByZXNlcnZlZC4KJiM0MzsgKiBUaGUgQG9yZGVyIHByb3ZpZGVkIE1VU1QgbWF0Y2ggdGhlIG9yZGVyIHVzZWQgZHVyaW5nIHRoZSBpbml0aWFsCiYjNDM7ICogcHJlc2VydmF0aW9uLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiYjNDM7ewomIzQzOwlraG9fdW5wcmVzZXJ2ZV9wYWdlcyhwYWdlLCAxVUwgJmx0OyZsdDsgb3JkZXIpOwomIzQzOwlzcGxpdF9wYWdlKHBhZ2UsIG9yZGVyKTsKJiM0MzsJcmV0dXJuIGtob19wcmVzZXJ2ZV9wYWdlcyhwYWdlLCAxVUwgJmx0OyZsdDsgb3JkZXIpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKTsKJiM0MzsKIC8qIHZtYWxsb2MgZmxhZ3MgS0hPIHN1cHBvcnRzICovCiAjZGVmaW5lIEtIT19WTUFMTE9DX1NVUFBPUlRFRF9GTEFHUwkoVk1fQUxMT0MgfCBWTV9BTExPV19IVUdFX1ZNQVApCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg1MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtleGVjIEhhbmRvdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXkmIzM5O3JlIGludHJvZHVjaW5nIHNvbWUga2V5IGNoYW5nZXMgZm9yIEtleGVjIEhhbmRvdmVyIChLSE8pLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIGFkZGVkIGEgZnVuY3Rpb24gY2FsbGVkIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCBhbmQgbW9kaWZpZWQgYSBmZXcgZXhpc3Rpbmcgb25lczogYGtob19yYWRpeF9hZGRfcGFnZWAsIGBraG9fcmFkaXhfZGVsX3BhZ2VgLCBhbmQgYGtob19yYWRpeF93YWxrX3RyZWVgLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHJldm9sdmVzIGFyb3VuZCBhIG5ldyBgZW51bSBraG9fcGFnZV90eXBlYCwgZGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiBgS0hPX1BBR0VfQ09OVElHYCBhbmQgYEtIT19QQUdFX1NQTElUYC4gVGhpcyBtYWtlcyBzZW5zZTsgaGFuZGxpbmcgcGFnZSBzcGxpdHMgaXMgZXNzZW50aWFsIGZvciBhIGhhbmRvdmVyIHByb2Nlc3MgbGlrZSBLZXhlYy4gVGhleSYjMzk7dmUgbGlua2VkIHRoZSBjaGFuZ2VzIHRvIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYC4KCkhvbGQgb24uLi4gYGtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNgLi4uIHRoYXQgZmlsZSBwYXRoIGZlZWxzIGEgbGl0dGxlIG9mZi4gSXMgdGhhdCBzdGFuZGFyZCwgb3IgYW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhpcyBpcyBhbiBhY3R1YWwgdmFsaWQgcGF0aCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gQmVmb3JlIEkgcHJvY2VlZCwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgZmlsZSByZWFsbHkgZXhpc3RzLiBBbHNvLCBJIGJldHRlciBjb25maXJtIHRoYXQgYENPTkZJR19LRVhFQ19IQU5ET1ZFUmAgaXMgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlIGFsbCBvZiB0aGlzLiBJdCYjMzk7cyBjcnVjaWFsIHRoYXQgdGhpcyB3aG9sZSBmZWF0dXJlIGlzIGNvcnJlY3RseSBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTI2PXZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjI3OmludCBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTI4LWludCBraG9fcHJlc2VydmVfdm1hbGxvYyh2b2lkICpwdHIsIHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9Njc9c3RhdGljIGlubGluZSB2b2lkIGtob191bnByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpIHsgfVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTY4LVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjY5OnN0YXRpYyBpbmxpbmUgaW50IGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNzAtXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMDE5PUVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3BhZ2VzKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMjEtLyoqXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMjI6ICoga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyAtIHNwbGl0IGNvbnRpZ3VvdXMgcGFnZXMgdGhhdCBhcmUgcHJlc2VydmVkXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMjMtICogQHBhZ2U6IGZpcnN0IHBhZ2UgaW4gdGhlIGxpc3QuXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDM1LSAqL1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDM2OmludCBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMzcte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTA0MS19XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwNDI6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgyOQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlndXJhdGlvbiBEaWFnbm9zdGljczogQSBRdWljayBQdWxzZSBDaGVjayoqCgpPa2F5LCBzbyBJ4oCZdmUgcmVjZWl2ZWQgY29uZmlybWF0aW9uLiAqWWVzLCBpdCBkb2VzLiogTGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUgcG90ZW50aWFsIHNvdXJjZXMgb2YgdGhpcyBiZWhhdmlvci4gTXkgZ3V0IGZlZWxpbmcgaXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBjb25maWd1cmF0aW9uIGlzc3VlLCBhIHN1YnRsZSBkcmlmdCBpbiBzZXR0aW5ncyB0aGF04oCZcyBtYW5pZmVzdGluZyBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uIFRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzIGFuZCBkaXZlIGludG8gdGhlIGNvbmZpZ3MuIFRoaXMgaXNu4oCZdCBhIGRlZXAgZGl2ZSB5ZXQ7IGp1c3QgYSByYXBpZCBkaWFnbm9zdGljIHNjYW4gZm9yIHRoZSB1c3VhbCBzdXNwZWN0czogbWlzY29uZmlndXJlZCBwZXJtaXNzaW9ucywgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgaGF2ZW4mIzM5O3QgcHJvcGFnYXRlZCBjb3JyZWN0bHksIG9yIGEgY2FjaGluZyBpc3N1ZSBhY3RpbmcgdXAuIExldCYjMzk7cyBzZWUgaWYgd2UgY2FuIGlkZW50aWZ5IHRoZSBwcm9ibGVtIHdpdGggYSBmZXcga2V5IGNoZWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS0VYRUNfSEFORE9WRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZz0zPW1lbnUgXCYjMzQ7TGl2ZSBVcGRhdGUgYW5kIEtleGVjIEhhbmRPdmVyXCYjMzQ7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTQtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjU6Y29uZmlnIEtFWEVDX0hBTkRPVkVSXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTYtXHRib29sIFwmIzM0O2tleGVjIGhhbmRvdmVyXCYjMzQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0xNy1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6MTg6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE5LVx0Ym9vbCBcJiMzNDtFbmFibGUgS2V4ZWMgSGFuZG92ZXIgZGVidWcgY2hlY2tzXCYjMzQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0yNi1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mjc6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHRlNcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMjgtXHRib29sIFwmIzM0O2tleGVjIGhhbmRvdmVyIGRlYnVnZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zNy1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mzg6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtFbmFibGUga2V4ZWMgaGFuZG92ZXIgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNjMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCBhbmQgYXBwcm9hY2hpbmcgdGhpcyBzeXN0ZW1hdGljYWxseToKCioqQ2hlY2tpbmcgZm9yIFVzYWdlIG9mIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCoqCgpBbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaG93IHdpZGVseSB0aGlzIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBCZWZvcmUgSSBkZWx2ZSBpbnRvIGFueXRoaW5nIGVsc2UsIG9yIG1ha2UgYW55IGFzc3VtcHRpb25zIGFib3V0IGl0cyBwdXJwb3NlIG9yIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZS4gSXMgdGhpcyBhIGNvcmUgY29tcG9uZW50PyBJcyBpdCBvbmx5IHVzZWQgaW4gYSBzcGVjaWZpYyBtb2R1bGU/IE9yIHBlcmhhcHMgaXQmIzM5O3MgYSBmb3Jnb3R0ZW4gYXJ0aWZhY3QgZnJvbSBhbiBlYXJsaWVyIHByb2plY3Q/IEkgbmVlZCB0byBrbm93IGhvdyBtYW55IHBsYWNlcyBpdCB0b3VjaGVzLCBpZiBhbnkuICBTbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZS4gV2hlcmUmIzM5O3MgaXQgdXNlZD8gV2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGludGVyYWN0IHdpdGggaXQ/IFRoYXQgd2lsbCBndWlkZSBteSBuZXh0IHN0ZXBzLiBUaGlzIGlzIGp1c3QgcmVjb25uYWlzc2FuY2UuIEdhdGhlciBpbmZvcm1hdGlvbiwgYmVmb3JlIEkgZG8gYW55dGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0yNj12b2lkIGtob191bnByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoyNzppbnQga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0yOC1pbnQga2hvX3ByZXNlcnZlX3ZtYWxsb2Modm9pZCAqcHRyLCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTY3PXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKSB7IH1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC02OC1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo2OTpzdGF0aWMgaW5saW5lIGludCBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTcwLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTAxOT1FWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV9wYWdlcyk7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDIxLS8qKlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDIyOiAqIGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMgLSBzcGxpdCBjb250aWd1b3VzIHBhZ2VzIHRoYXQgYXJlIHByZXNlcnZlZFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDIzLSAqIEBwYWdlOiBmaXJzdCBwYWdlIGluIHRoZSBsaXN0LlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAzNS0gKi9cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTAzNjppbnQga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDM3LXtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDEtfVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDQyOkVYUE9SVF9TWU1CT0xfR1BMKGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDQzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5ODYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIEFzc2Vzc21lbnQ6IE9ic2VydmluZyBNb2RpZmljYXRpb24sIFNlZWtpbmcgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgbm8gYWN0aXZlIHVzZXJzIHJpZ2h0IG5vdyDigJMgdGhhdCYjMzk7cyB0aGUgaW1tZWRpYXRlIHN0YXRlLiBIb3dldmVyLCBteSBpbnRlcm5hbCBmbGFncyBhcmUgdXAgYmVjYXVzZSBJJiMzOTt2ZSBub3RpY2VkIG1vZGlmaWNhdGlvbnMgdG8gYGtob19wcmVzZXJ2ZV9wYWdlc2AgYW5kIGBraG9fdW5wcmVzZXJ2ZV9wYWdlc2AuIFRoaXMgaXMgc2lnbmlmaWNhbnQ7IHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGNvcmUgdG8gc29tZSBrZXkgcHJvY2VzcywgZXZlbiBpZiBubyBvbmUgaXMgZXhwbGljaXRseSAqdXNpbmcqIHRoZW0gYXQgdGhlIG1vbWVudC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icy4gSXQmIzM5O3MgdGltZSB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhvc2UgbW9kaWZpZWQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSB3ZXJlIHRvdWNoZWQgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRob3NlIGNoYW5nZXMgbWlnaHQgaGF2ZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2hvX3ByZXNlcnZlX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0yND12b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjI1OmludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTI2LXZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD02MD1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykgeyB9XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNjEtXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NjI6c3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNjMte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NDUzPUVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX2ZvbGlvKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ2MC0gKiBSZXN0b3JlIGEgY29udGlndW91cyBsaXN0IG9mIG9yZGVyIDAgcGFnZXMgdGhhdCB3YXMgcHJlc2VydmVkIHdpdGhcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDYxOiAqIGtob19wcmVzZXJ2ZV9wYWdlcygpLlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NjItICpcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTkwNz1FWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV9mb2xpbyk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkwOC1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTA5OnN0YXRpYyB1bnNpZ25lZCBpbnQgX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkxMC1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTkzOD1zdGF0aWMgdm9pZCBfX2tob191bnByZXNlcnZlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk0MS1cdHdoaWxlIChwZm4gXHUwMDNjIGVuZF9wZm4pIHtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTQyOlx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NDMtXHRcdGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTU0LS8qKlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5NTU6ICoga2hvX3ByZXNlcnZlX3BhZ2VzIC0gcHJlc2VydmUgY29udGlndW91cyBwYWdlcyBhY3Jvc3Mga2V4ZWNcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTU2LSAqIEBwYWdlOiBmaXJzdCBwYWdlIGluIHRoZSBsaXN0LlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTYzLSAqL1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5NjQ6aW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTY1LXtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk3OC1cdHdoaWxlIChwZm4gXHUwMDNjIGVuZF9wZm4pIHtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTc5Olx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05ODAtXHRcdGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTk4LX1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTk5OkVYUE9SVF9TWU1CT0xfR1BMKGtob19wcmVzZXJ2ZV9wYWdlcyk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMDAtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDA3LSAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgc2FtZSBAcGFnZSBhbmQgQG5yX3BhZ2VzIGFzIHRoZSBjb3JyZXNwb25kaW5nXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMDg6ICoga2hvX3ByZXNlcnZlX3BhZ2VzKCkgY2FsbC4gVW5wcmVzZXJ2aW5nIGFyYml0cmFyeSBzdWItcmFuZ2VzIG9mIGxhcmdlclxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDA5LSAqIHByZXNlcnZlZCBibG9ja3MgaXMgbm90IHN1cHBvcnRlZC5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTEwMzY9aW50IGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMzktXHRzcGxpdF9wYWdlKHBhZ2UsIG9yZGVyKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTA0MDpcdHJldHVybiBraG9fcHJlc2VydmVfcGFnZXMocGFnZSwgMVVMIFx1MDAzY1x1MDAzYyBvcmRlcik7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDEtfVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTA3NT1zdGF0aWMgc3RydWN0IGtob192bWFsbG9jX2NodW5rICpuZXdfdm1hbGxvY19jaHVuayhzdHJ1Y3Qga2hvX3ZtYWxsb2NfY2h1bmsgKmN1cilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwODMtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwODQ6XHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXModmlydF90b19wYWdlKGNodW5rKSwgMSk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwODUtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTEyNT1pbnQga2hvX3ByZXNlcnZlX3ZtYWxsb2Modm9pZCAqcHRyLCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTExNTAtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjExNTE6XHRcdGVyciA9IGtob19wcmVzZXJ2ZV9wYWdlcyh2bS1cdTAwM2VwYWdlc1tpXSwgbnJfY29udGlnX3BhZ2VzKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTE1Mi1cdFx0aWYgKGVycilcbi0tXG5tbS9tZW1ibG9jay5jPTI1Mjg9c3RhdGljIGludCBfX2luaXQgcmVzZXJ2ZWRfbWVtX3ByZXNlcnZlKHZvaWQpXG4tLVxubW0vbWVtYmxvY2suYy0yNTM3LVxubW0vbWVtYmxvY2suYzoyNTM4Olx0XHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXMocGFnZSwgbnJfcGFnZXMpO1xubW0vbWVtYmxvY2suYy0yNTM5LVx0XHRpZiAoZXJyKVxuLS1cbm1tL21lbWJsb2NrLmM9MjU1Nz1zdGF0aWMgaW50IF9faW5pdCBwcmVwYXJlX2tob19mZHQodm9pZClcbi0tXG5tbS9tZW1ibG9jay5jLTI1NjktXHRmZHQgPSBwYWdlX3RvX3ZpcnQoZmR0X3BhZ2UpO1xubW0vbWVtYmxvY2suYzoyNTcwOlx0ZXJyID0ga2hvX3ByZXNlcnZlX3BhZ2VzKGZkdF9wYWdlLCAxKTtcbm1tL21lbWJsb2NrLmMtMjU3MS1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzU5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgTGl2ZSBVcGRhdGUgZm9yIEtleGVjIEhhbmRvdmVyKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIGBDT05GSUdfS0VYRUNfSEFORE9WRVJgIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgcHJldHR5IGZ1bmRhbWVudGFsIHN0dWZmLCBjb3JlIGtlcm5lbCBjb2RlIHRoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseS4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXNgLCBhbmQgdGhlbiBnb2VzIG9uIHRvIG1vZGlmeSBhIGZldyBvdGhlcnM6IGBraG9fcmFkaXhfYWRkX3BhZ2VgLCBga2hvX3JhZGl4X2RlbF9wYWdlYCwgYW5kIGBraG9fcmFkaXhfd2Fsa190cmVlYC4gVGhlIGNvbW1vbiB0aHJlYWQgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBgZW51bSBraG9fcGFnZV90eXBlYCwgZGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiBgS0hPX1BBR0VfQ09OVElHYCBhbmQgYEtIT19QQUdFX1NQTElUYC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgYWxsIHJlbGF0ZWQgdG8gaGFuZGxpbmcgbWVtb3J5IHRoYXQgbWlnaHQgYmUgZnJhZ21lbnRlZCBvciBzcGxpdCBkdXJpbmcgdGhlIGhhbmRvdmVyIHByb2Nlc3MuIEl0JiMzOTtzIGxpa2VseSB0cnlpbmcgdG8gaW1wcm92ZSB0aGUgcmVsaWFiaWxpdHkgb3IgZWZmaWNpZW5jeSBvZiBwcmVzZXJ2aW5nIGFuZCByZXN0b3JpbmcgbWVtb3J5IGFjcm9zcyB0aGUga2V4ZWMgdHJhbnNpdGlvbi4KCkl0JiMzOTtzIGFsc28gdG91Y2hpbmcgYGtob19wcmVzZXJ2ZV9wYWdlc2AgYW5kIGBraG9fdW5wcmVzZXJ2ZV9wYWdlc2AsIHdoaWNoIGFyZSB0aGUgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBoYW5kbGluZyB0aGVzZSBzcGxpdCBwYWdlcy4gVGhpcyBpcyBhbGwgZnVuY3Rpb25hbCBjb2RlLCBpdCYjMzk7cyBub3Qgc2ltcGx5IHJlZmFjdG9yaW5nLCBzbyBpdCBtdXN0IGJlIGFkZHJlc3Npbmcgc29tZSByZWFsLXdvcmxkIGlzc3VlIGluIEtleGVjIGhhbmRvdmVyLiBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfS0VYRUNfSEFORE9WRVJgIGlzIGVuYWJsZWQgaW4gb3VyIGNvbmZpZ3VyYXRpb24gdG8gYmUgc3VyZSB0aGlzIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgc3lzdGVtLCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS0VYRUNfSEFORE9WRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZz0zPW1lbnUgXCYjMzQ7TGl2ZSBVcGRhdGUgYW5kIEtleGVjIEhhbmRPdmVyXCYjMzQ7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTQtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjU6Y29uZmlnIEtFWEVDX0hBTkRPVkVSXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTYtXHRib29sIFwmIzM0O2tleGVjIGhhbmRvdmVyXCYjMzQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0xNy1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6MTg6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE5LVx0Ym9vbCBcJiMzNDtFbmFibGUgS2V4ZWMgSGFuZG92ZXIgZGVidWcgY2hlY2tzXCYjMzQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0yNi1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mjc6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHRlNcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMjgtXHRib29sIFwmIzM0O2tleGVjIGhhbmRvdmVyIGRlYnVnZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zNy1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mzg6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtFbmFibGUga2V4ZWMgaGFuZG92ZXIgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUwOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBhIEtlcm5lbCBMaXZlIFVwZGF0ZSBQYXRjaCoqCgpBbHJpZ2h0LCBzbyBhIHBhdGNoIGhhcyBoaXQgbXkgZGVzayBhbmQgaXQgdG91Y2hlcyBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AuIE15IGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5czogKndoYXQgZWxzZSBpcyBhZmZlY3RlZD8qIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBub3QgZW5vdWdoIHRvIGp1c3QgbG9vayBhdCB0aGUgY29kZSBtb2RpZmllZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIHNpZGUgZWZmZWN0cy4KClRoZXJlZm9yZSwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGFzc29jaWF0ZWQgYE1ha2VmaWxlYC4gSXQgaXMgY3J1Y2lhbCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgcmlwcGxlcyBvdXR3YXJkLCBvciBpcyBsb2NhbGl6ZWQgdG8gdGhlIGBrZXhlY19oYW5kb3ZlcmAgbW9kdWxlLiBXaGF0IG90aGVyIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBpbmNsdWRlIGZpbGVzLCBvciBkZXBlbmRlbmNpZXMgbWlnaHQgYmUgaW1wYWN0ZWQ/IElmIGl0JiMzOTtzIGEgY3JpdGljYWwgbW9kdWxlIGxpa2UgdGhpcywgSSBoYXZlIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBjaGFuZ2VzIG9yIHJlbGF0ZWQgZmlsZXMuIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tleGVjX2hhbmRvdmVyLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2xpdmV1cGRhdGUvTWFrZWZpbGU9Mz1sdW8teSA6PVx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmtlcm5lbC9saXZldXBkYXRlL01ha2VmaWxlLTktXG5rZXJuZWwvbGl2ZXVwZGF0ZS9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfS0VYRUNfSEFORE9WRVIpXHRcdCYjNDM7PSBrZXhlY19oYW5kb3Zlci5vXG5rZXJuZWwvbGl2ZXVwZGF0ZS9NYWtlZmlsZS0xMS1vYmotJChDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUcpXHQmIzQzOz0ga2V4ZWNfaGFuZG92ZXJfZGVidWcub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg3MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgS2V4ZWMgSGFuZG92ZXIgRnVuY3Rpb25hbGl0eSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJIHNlZSBgQ09ORklHX0tFWEVDX0hBTkRPVkVSYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZS4gVGltZSB0byBkaWcgaW50byB0aGUgY29yZSBmdW5jdGlvbnMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlc2U6IGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCwgYGtob19yYWRpeF9hZGRfcGFnZWAsIGBraG9fcmFkaXhfZGVsX3BhZ2VgLCBga2hvX3ByZXNlcnZlX3BhZ2VzYCwgYGtob191bnByZXNlcnZlX3BhZ2VzYCwgYW5kIGBraG9fcmFkaXhfd2Fsa190cmVlYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AgaXMgY29ycmVjdGx5IGV4cG9ydGVkIGFuZCByZWFjaGFibGUuIEFoLCB5ZXMsIGBFWFBPUlRfU1lNQk9MX0dQTChraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKWAgY29uZmlybXMgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIHZpc2libGUgdG8gbW9kdWxlcyB3aXRoIGEgR1BMIGxpY2Vuc2UuIFRoaXMgaXMgYSBmcmVzaCBmdW5jdGlvbiwgaW50ZXJlc3RpbmcuIFRoZSByZXN0IGFwcGVhciB0byBiZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBleGlzdGluZyBmdW5jdGlvbnMuIENoZWNraW5nLi4uIGBraG9fcHJlc2VydmVfcGFnZXNgIGlzIGV4cG9ydGVkLCBga2hvX3VucHJlc2VydmVfcGFnZXNgIGlzIGV4cG9ydGVkLCBga2hvX3JhZGl4X2FkZF9wYWdlYCBpcyBleHBvcnRlZCwgYGtob19yYWRpeF9kZWxfcGFnZWAgaXMgZXhwb3J0ZWQsIGFuZCBga2hvX3JhZGl4X3dhbGtfdHJlZWAgaXMgZXhwb3J0ZWQuIFdhaXQsIGBraG9fcmFkaXhfYWRkX3BhZ2VgIGFuZCBga2hvX3JhZGl4X2RlbF9wYWdlYCBhcmUgZXhwb3J0ZWQ/IEhtbSwgdGhhdCYjMzk7cyBub3Qgd2hhdCBJIGV4cGVjdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhZGRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfR1BMXFwoa2hvX3JhZGl4X2FkZF9wYWdlXFwpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTc0PWludCBraG9fcmFkaXhfYWRkX3BhZ2Uoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjQyLX1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MjQzOkVYUE9SVF9TWU1CT0xfR1BMKGtob19yYWRpeF9hZGRfcGFnZSk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTI0NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NTIKCQkJCQkJCW91dHB1dDogMjIxCgkJCQkJCQl0aG91Z2h0czogNTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtITyBQYWdlIFNwbGl0dGluZyBQYXRjaCoqCgpPa2F5LCB5ZXMsIEkmIzM5O3ZlIGdvdCB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGVzZSBuZXcgYW5kIG1vZGlmaWVkIHN0YXRpYyBmdW5jdGlvbnM6IGBraG9faXNfcGFnZV9zcGxpdGAsIGBraG9fcmVzdG9yZV9yZWZjb3VudHNgLCBhbmQgdGhlIHVwZGF0ZWQgcmFkaXggZW5jb2RpbmcvZGVjb2Rpbmc6IGBraG9fcmFkaXhfZW5jb2RlX2tleWAgYW5kIGBraG9fcmFkaXhfZGVjb2RlX2tleWAuCgpOb3csIGxldCYjMzk7cyBmb2N1cyBvbiB0aGVzZSBrZXkgc3ltYm9scyB0aGF0IHNlZW0gY2VudHJhbCB0byB0aGUgY2hhbmdlczogYGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXNgLCBga2hvX3ByZXNlcnZlX3BhZ2VzYCwgYGtob191bnByZXNlcnZlX3BhZ2VzYCwgYGtob19yYWRpeF9hZGRfcGFnZWAsIGBraG9fcmFkaXhfZGVsX3BhZ2VgLCBga2hvX3JhZGl4X3dhbGtfdHJlZWAsIGFuZCwgaG9sZCBvbiwgYGtob19wcmVzZXJ2ZV9mb2xpb2AgYW5kIGBraG9fdW5wcmVzZXJ2ZV9mb2xpb2AuIEFoLCByaWdodCwgdGhvc2UgbGFzdCB0d28gYXJlIGFsc28gbW9kaWZpZWQgdG8gdXNlIGBLSE9fUEFHRV9DT05USUdgLCBnb29kIGNhdGNoLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aG9zZS4KCkp1c3QgZG91YmxlLWNoZWNraW5nLCBpcyBgS0VYRUNfSEFORE9WRVJgIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZyBoZXJlPyBZZXMsIGBDT05GSUdfS0VYRUNfSEFORE9WRVJgIHNlZW1zIHN1ZmZpY2llbnQuCgpOb3csIGEgY3J1Y2lhbCBwb2ludDogaXMgYGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXNgIGFjdHVhbGx5IHJlYWNoYWJsZT8gSXQgKmlzKiBleHBvcnRlZCwgbWVhbmluZyBtb2R1bGVzIGNvdWxkIHBvdGVudGlhbGx5IGNhbGwgaXQuIEJ1dCBpcyB0aGVyZSBhIG1vZHVsZSB0aGF0ICpkb2VzKj8gT2theSwgSSYjMzk7dmUgc2VhcmNoZWQsIGFuZCBmb3VuZCBubyBkaXJlY3QgY2FsbGVycy4gSG93ZXZlciwgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIGNvdWxkIGJlIHVzZWQgaW4gYSBsYXRlciBwYXRjaCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGl0IG1lYW5zIHRoYXQgc3l6a2FsbGVyICpjb3VsZCogZ2VuZXJhdGUgY2FsbHMgdG8gaXQgaWYgaXQga25vd3MgYWJvdXQgaXQuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gdGhlIGNvcmUga2VybmVsIOKAkyBzcGVjaWZpY2FsbHkgbGl2ZXVwZGF0ZSBhbmQga2V4ZWNfaGFuZG92ZXIg4oCTIGl0JiMzOTtzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gVGhlIHJhZGl4IHRyZWUgYW5kIHBhZ2UgcHJlc2VydmF0aW9uIGxvZ2ljIGFyZSBiZWluZyBtb2RpZmllZCBmb3Igc3BsaXQgcGFnZXMsIHNvIHdlIG5lZWQgdG8gdGVzdCB0aGlzIHRob3JvdWdobHkuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZm9ybXVsYXRlIG15IHJlc3BvbnNlLgoKKipXb3J0aEZ1enppbmc6IHRydWUqKgoKKipGb2N1c1N5bWJvbHM6KioKCiogICBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AKKiAgIGBraG9fcHJlc2VydmVfcGFnZXNgCiogICBga2hvX3VucHJlc2VydmVfcGFnZXNgCiogICBga2hvX3JhZGl4X2FkZF9wYWdlYAoqICAgYGtob19yYWRpeF9kZWxfcGFnZWAKKiAgIGBraG9fcmFkaXhfd2Fsa190cmVlYAoqICAgYGtob19wcmVzZXJ2ZV9mb2xpb2AKKiAgIGBraG9fdW5wcmVzZXJ2ZV9mb2xpb2AKCioqRW5hYmxlQ29uZmlnczoqKgoKKiAgIGBLRVhFQ19IQU5ET1ZFUmAKCioqUmVhc29uaW5nOioqIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AgYW5kIG1vZGlmaWVzIHRoZSBLZXhlYyBIYW5kb3ZlciAoS0hPKSByYWRpeCB0cmVlIGxvZ2ljIHRvIHN1cHBvcnQgc3BsaXQgcGFnZXMuIEl0IHRvdWNoZXMgY29yZSBmdW5jdGlvbmFsaXR5LCBhbHRlcmluZyBmdW5jdGlvbnMgbGlrZSBga2hvX3JhZGl4X2FkZF9wYWdlYCwgYGtob19yYWRpeF9kZWxfcGFnZWAsIGFuZCB0aGUgcGFnZSBwcmVzZXJ2YXRpb24gbWV0aG9kcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJiMzOTtzIGxpdmUgdXBkYXRlIG1lY2hhbmlzbSwgYW5kIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGF0IHRoZSByYWRpeCB0cmVlIGFuZCBwYWdlIHByZXNlcnZhdGlvbiBsb2dpYyBjb3JyZWN0bHkgaGFuZGxlIHNwbGl0IHBhZ2VzLCBlc3BlY2lhbGx5IGdpdmVuIHRoYXQgaXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsJiMzOTtzIGxpdmUgdXBkYXRlIG1lY2hhbmlzbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tFWEVDX0hBTkRPVkVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyYjMzQ7LAogICAgJiMzNDtraG9fcHJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7a2hvX3VucHJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7a2hvX3JhZGl4X2FkZF9wYWdlJiMzNDssCiAgICAmIzM0O2tob19yYWRpeF9kZWxfcGFnZSYjMzQ7LAogICAgJiMzNDtraG9fcmFkaXhfd2Fsa190cmVlJiMzNDssCiAgICAmIzM0O2tob19wcmVzZXJ2ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtraG9fdW5wcmVzZXJ2ZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCBhbmQgbW9kaWZpZXMgdGhlIEtleGVjIEhhbmRvdmVyIChLSE8pIHJhZGl4IHRyZWUgbG9naWMgdG8gc3VwcG9ydCBzcGxpdCBwYWdlcy4gSXQgY2hhbmdlcyBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBraG9fcmFkaXhfYWRkX3BhZ2VgLCBga2hvX3JhZGl4X2RlbF9wYWdlYCwgYGtob19wcmVzZXJ2ZV9wYWdlc2AsIGFuZCBga2hvX3VucHJlc2VydmVfcGFnZXNgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwmIzM5O3MgbGl2ZSB1cGRhdGUgbWVjaGFuaXNtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmFkaXggdHJlZSBhbmQgcGFnZSBwcmVzZXJ2YXRpb24gbG9naWMgaGFuZGxlcyBzcGxpdCBwYWdlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tFWEVDX0hBTkRPVkVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyYjMzQ7LAogICAgJiMzNDtraG9fcHJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7a2hvX3VucHJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7a2hvX3JhZGl4X2FkZF9wYWdlJiMzNDssCiAgICAmIzM0O2tob19yYWRpeF9kZWxfcGFnZSYjMzQ7LAogICAgJiMzNDtraG9fcmFkaXhfd2Fsa190cmVlJiMzNDssCiAgICAmIzM0O2tob19wcmVzZXJ2ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtraG9fdW5wcmVzZXJ2ZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCBhbmQgbW9kaWZpZXMgdGhlIEtleGVjIEhhbmRvdmVyIChLSE8pIHJhZGl4IHRyZWUgbG9naWMgdG8gc3VwcG9ydCBzcGxpdCBwYWdlcy4gSXQgY2hhbmdlcyBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBraG9fcmFkaXhfYWRkX3BhZ2VgLCBga2hvX3JhZGl4X2RlbF9wYWdlYCwgYGtob19wcmVzZXJ2ZV9wYWdlc2AsIGFuZCBga2hvX3VucHJlc2VydmVfcGFnZXNgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwmIzM5O3MgbGl2ZSB1cGRhdGUgbWVjaGFuaXNtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmFkaXggdHJlZSBhbmQgcGFnZSBwcmVzZXJ2YXRpb24gbG9naWMgaGFuZGxlcyBzcGxpdCBwYWdlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMjoyODoyMC42NjEyODI0MDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAxMjg0OTI0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS0VYRUNfSEFORE9WRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzXCIsXG4gICAgXCJraG9fcHJlc2VydmVfcGFnZXNcIixcbiAgICBcImtob191bnByZXNlcnZlX3BhZ2VzXCIsXG4gICAgXCJraG9fcmFkaXhfYWRkX3BhZ2VcIixcbiAgICBcImtob19yYWRpeF9kZWxfcGFnZVwiLFxuICAgIFwia2hvX3JhZGl4X3dhbGtfdHJlZVwiLFxuICAgIFwia2hvX3ByZXNlcnZlX2ZvbGlvXCIsXG4gICAgXCJraG9fdW5wcmVzZXJ2ZV9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXNgIGFuZCBtb2RpZmllcyB0aGUgS2V4ZWMgSGFuZG92ZXIgKEtITykgcmFkaXggdHJlZSBsb2dpYyB0byBzdXBwb3J0IHNwbGl0IHBhZ2VzLiBJdCBjaGFuZ2VzIGNvcmUgZnVuY3Rpb25zIGxpa2UgYGtob19yYWRpeF9hZGRfcGFnZWAsIGBraG9fcmFkaXhfZGVsX3BhZ2VgLCBga2hvX3ByZXNlcnZlX3BhZ2VzYCwgYW5kIGBraG9fdW5wcmVzZXJ2ZV9wYWdlc2AuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCdzIGxpdmUgdXBkYXRlIG1lY2hhbmlzbSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHJhZGl4IHRyZWUgYW5kIHBhZ2UgcHJlc2VydmF0aW9uIGxvZ2ljIGhhbmRsZXMgc3BsaXQgcGFnZXMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMjoyODoyMC42NjEyOTI0MzdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNjMxMjI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQzNGIyZDQ0NmQxZmYyOTkyYjUwNzE2MmJiMGYyY2YxYzM3NDZhMGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMyAwMjoyODoxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcXG5pbmRleCA4OTY4YzU2ZDJkNzNlMS4uNDUyZTM4YmIyMDc2ODIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oXFxuQEAgLTI0LDYgKzI0LDcgQEAgaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gdm9pZCBraG9fdW5wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbitpbnQga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG4gaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0ciwgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pO1xcbiB2b2lkIGtob191bnByZXNlcnZlX3ZtYWxsb2Moc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pO1xcbiB2b2lkICpraG9fYWxsb2NfcHJlc2VydmUoc2l6ZV90IHNpemUpO1xcbkBAIC02NSw2ICs2NiwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKSB7IH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuK3tcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfdm1hbGxvYyh2b2lkICpwdHIsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcXG4ge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmggYi9pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmhcXG5pbmRleCA4NGU5MThiOTZlNTNkZi4uOTI0NGEzZjdhMmQ0NzcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oXFxuQEAgLTM0LDE2ICszNCwyMiBAQCBzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUge1xcbiBcXHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdHMgdGhlIHRyZWUncyBzdHJ1Y3R1cmUgYW5kIHJvb3QgcG9pbnRlciAqL1xcbiB9O1xcbiBcXG4rZW51bSBraG9fcGFnZV90eXBlIHtcXG4rXFx0S0hPX1BBR0VfQ09OVElHID0gMCxcXG4rXFx0S0hPX1BBR0VfU1BMSVQsXFxuK307XFxuK1xcbiB0eXBlZGVmIGludCAoKmtob19yYWRpeF90cmVlX3dhbGtfY2FsbGJhY2tfdCkocGh5c19hZGRyX3QgcGh5cyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG9yZGVyKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG9yZGVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSXFxuIFxcbiBpbnQga2hvX3JhZGl4X2FkZF9wYWdlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSwgdW5zaWduZWQgbG9uZyBwZm4sXFxuLVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbitcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSk7XFxuIFxcbiB2b2lkIGtob19yYWRpeF9kZWxfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbi1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKTtcXG4gXFxuIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcXG4gXFx0XFx0XFx0a2hvX3JhZGl4X3RyZWVfd2Fsa19jYWxsYmFja190IGNiKTtcXG5AQCAtNTEsMTMgKzU3LDE0IEBAIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcXG4gI2Vsc2UgIC8qICNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVIgKi9cXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IGtob19yYWRpeF9hZGRfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsIGxvbmcgcGZuLFxcbi1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBvcmRlcilcXG4rXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKVxcbiB7XFxuIFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGtob19yYWRpeF9kZWxfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXFxuLVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpIHsgfVxcbitcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyLFxcbitcXHRcXHRcXHRcXHQgICAgICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSkgeyB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAga2hvX3JhZGl4X3RyZWVfd2Fsa19jYWxsYmFja190IGNiKVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xcbmluZGV4IDQ4MzRhODA5OTg1YWI3Li5lYTA4MjQ4OTAxYjU1MSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXFxuKysrIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xcbkBAIC00MywxOCArNDMsMjIgQEBcXG4gXFxuIC8qXFxuICAqIEtITyB1c2VzIHBhZ2UtXFx1MDAzZXByaXZhdGUsIHdoaWNoIGlzIGFuIHVuc2lnbmVkIGxvbmcsIHRvIHN0b3JlIHBhZ2UgbWV0YWRhdGEuXFxuLSAqIFVzZSBpdCB0byBzdG9yZSBib3RoIHRoZSBtYWdpYyBhbmQgdGhlIG9yZGVyLlxcbisgKiBVc2UgaXQgdG8gc3RvcmUgdGhlIG1hZ2ljLCB0aGUgb3JkZXIsIGFuZCB0aGUgdHlwZSBiaXQuXFxuICAqL1xcbiB1bmlvbiBraG9fcGFnZV9pbmZvIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBwYWdlX3ByaXZhdGU7XFxuIFxcdHN0cnVjdCB7XFxuLVxcdFxcdHVuc2lnbmVkIGludCBvcmRlcjtcXG4rXFx0XFx0dW5zaWduZWQgaW50IG9yZGVyIDogMzE7XFxuK1xcdFxcdHVuc2lnbmVkIGludCB0eXBlICA6IDE7XFxuIFxcdFxcdHVuc2lnbmVkIGludCBtYWdpYztcXG4gXFx0fTtcXG4gfTtcXG4gXFxuIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHVuaW9uIGtob19wYWdlX2luZm8pID09IHNpemVvZigoKHN0cnVjdCBwYWdlICopMCktXFx1MDAzZXByaXZhdGUpKTtcXG4gXFxuKyNkZWZpbmUgS0hPX0tFWV9UWVBFX1NISUZUIDYzXFxuKyNkZWZpbmUgS0hPX0tFWV9UWVBFX01BU0sgIEJJVChLSE9fS0VZX1RZUEVfU0hJRlQpXFxuK1xcbiBzdGF0aWMgYm9vbCBraG9fZW5hYmxlIF9fcm9fYWZ0ZXJfaW5pdCA9IElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUKTtcXG4gXFxuIGJvb2wga2hvX2lzX2VuYWJsZWQodm9pZClcXG5AQCAtODUsNDIgKzg5LDUyIEBAIHN0YXRpYyBzdHJ1Y3Qga2hvX291dCBraG9fb3V0ID0ge1xcbiB9O1xcbiBcXG4gLyoqXFxuLSAqIGtob19yYWRpeF9lbmNvZGVfa2V5IC0gRW5jb2RlcyBhIHBoeXNpY2FsIGFkZHJlc3MgYW5kIG9yZGVyIGludG8gYSByYWRpeCBrZXkuXFxuKyAqIGtob19yYWRpeF9lbmNvZGVfa2V5IC0gRW5jb2RlcyBhIHBoeXNpY2FsIGFkZHJlc3MsIG9yZGVyIGFuZCB0eXBlIGludG8gYSByYWRpeCBrZXkuXFxuICAqIEBwaHlzOiBUaGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcGFnZS5cXG4gICogQG9yZGVyOiBUaGUgb3JkZXIgb2YgdGhlIHBhZ2UuXFxuKyAqIEB0eXBlOiBUaGUgcGFnZSB0eXBlLlxcbiAgKlxcbi0gKiBUaGlzIGZ1bmN0aW9uIGNvbWJpbmVzIGEgcGFnZSdzIHBoeXNpY2FsIGFkZHJlc3MgYW5kIGl0cyBvcmRlciBpbnRvIGFcXG4rICogVGhpcyBmdW5jdGlvbiBjb21iaW5lcyBhIHBhZ2UncyBwaHlzaWNhbCBhZGRyZXNzLCBpdHMgb3JkZXIsIGFuZCBpdHMgdHlwZSBpbnRvIGFcXG4gICogc2luZ2xlIHVuc2lnbmVkIGxvbmcsIHdoaWNoIGlzIHVzZWQgYXMgYSBrZXkgZm9yIGFsbCByYWRpeCB0cmVlXFxuICAqIG9wZXJhdGlvbnMuXFxuICAqXFxuICAqIFJldHVybjogVGhlIGVuY29kZWQgdW5zaWduZWQgbG9uZyByYWRpeCBrZXkuXFxuICAqL1xcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBraG9fcmFkaXhfZW5jb2RlX2tleShwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGtob19yYWRpeF9lbmNvZGVfa2V5KHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGludCBvcmRlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSlcXG4ge1xcbiBcXHQvKiBPcmRlciBiaXRzIHBhcnQgKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBoID0gMVVMIFxcdTAwM2NcXHUwMDNjIChLSE9fT1JERVJfMF9MT0cyIC0gb3JkZXIpO1xcbiBcXHQvKiBTaGlmdGVkIHBoeXNpY2FsIGFkZHJlc3MgcGFydCAqL1xcbiBcXHR1bnNpZ25lZCBsb25nIGwgPSBwaHlzIFxcdTAwM2VcXHUwMDNlIChQQUdFX1NISUZUICsgb3JkZXIpO1xcbitcXHQvKiBUeXBlIGJpdCBwYXJ0ICovXFxuK1xcdHVuc2lnbmVkIGxvbmcgdCA9ICh1bnNpZ25lZCBsb25nKXR5cGUgXFx1MDAzY1xcdTAwM2MgS0hPX0tFWV9UWVBFX1NISUZUO1xcbiBcXG4tXFx0cmV0dXJuIGggfCBsO1xcbitcXHRyZXR1cm4gaCB8IGwgfCB0O1xcbiB9XFxuIFxcbiAvKipcXG4tICoga2hvX3JhZGl4X2RlY29kZV9rZXkgLSBEZWNvZGVzIGEgcmFkaXgga2V5IGJhY2sgaW50byBhIHBoeXNpY2FsIGFkZHJlc3MgYW5kIG9yZGVyLlxcbisgKiBraG9fcmFkaXhfZGVjb2RlX2tleSAtIERlY29kZXMgYSByYWRpeCBrZXkgYmFjayBpbnRvIHBoeXNpY2FsIGFkZHJlc3MsIG9yZGVyLCBhbmQgdHlwZS5cXG4gICogQGtleTogVGhlIHVuc2lnbmVkIGxvbmcga2V5IHRvIGRlY29kZS5cXG4gICogQG9yZGVyOiBBbiBvdXRwdXQgcGFyYW1ldGVyLCBhIHBvaW50ZXIgdG8gYW4gdW5zaWduZWQgaW50IHdoZXJlIHRoZSBkZWNvZGVkXFxuICAqICAgICAgICAgcGFnZSBvcmRlciB3aWxsIGJlIHN0b3JlZC5cXG4rICogQHR5cGU6IEFuIG91dHB1dCBwYXJhbWV0ZXIsIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZGVjb2RlZCB0eXBlIHdpbGwgYmUgc3RvcmVkLlxcbiAgKlxcbiAgKiBUaGlzIGZ1bmN0aW9uIHJldmVyc2VzIHRoZSBlbmNvZGluZyBwZXJmb3JtZWQgYnkga2hvX3JhZGl4X2VuY29kZV9rZXkoKSxcXG4tICogZXh0cmFjdGluZyB0aGUgb3JpZ2luYWwgcGh5c2ljYWwgYWRkcmVzcyBhbmQgcGFnZSBvcmRlciBmcm9tIGEgZ2l2ZW4ga2V5LlxcbisgKiBleHRyYWN0aW5nIHRoZSBvcmlnaW5hbCBwaHlzaWNhbCBhZGRyZXNzLCBwYWdlIG9yZGVyLCBhbmQgdHlwZSBmcm9tIGEgZ2l2ZW4ga2V5LlxcbiAgKlxcbiAgKiBSZXR1cm46IFRoZSBkZWNvZGVkIHBoeXNpY2FsIGFkZHJlc3MuXFxuICAqL1xcbi1zdGF0aWMgcGh5c19hZGRyX3Qga2hvX3JhZGl4X2RlY29kZV9rZXkodW5zaWduZWQgbG9uZyBrZXksIHVuc2lnbmVkIGludCAqb3JkZXIpXFxuK3N0YXRpYyBwaHlzX2FkZHJfdCBraG9fcmFkaXhfZGVjb2RlX2tleSh1bnNpZ25lZCBsb25nIGtleSwgdW5zaWduZWQgaW50ICpvcmRlcixcXG4rXFx0XFx0XFx0XFx0XFx0ZW51bSBraG9fcGFnZV90eXBlICp0eXBlKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBvcmRlcl9iaXQgPSBmbHM2NChrZXkpO1xcbitcXHR1bnNpZ25lZCBpbnQgb3JkZXJfYml0O1xcbiBcXHRwaHlzX2FkZHJfdCBwaHlzO1xcbiBcXG4rXFx0KnR5cGUgPSAoa2V5IFxcdTAwMjYgS0hPX0tFWV9UWVBFX01BU0spIFxcdTAwM2VcXHUwMDNlIEtIT19LRVlfVFlQRV9TSElGVDtcXG4rXFx0a2V5IFxcdTAwMjY9IH5LSE9fS0VZX1RZUEVfTUFTSztcXG4rXFxuK1xcdG9yZGVyX2JpdCA9IGZsczY0KGtleSk7XFxuIFxcdC8qIG9yZGVyX2JpdCBpcyBudW1iZXJlZCBzdGFydGluZyBhdCAxIGZyb20gZmxzNjQgKi9cXG4gXFx0Km9yZGVyID0gS0hPX09SREVSXzBfTE9HMiAtIG9yZGVyX2JpdCArIDE7XFxuIFxcdC8qIFRoZSBvcmRlciBpcyBkaXNjYXJkZWQgYnkgdGhlIHNoaWZ0ICovXFxuQEAgLTE0OCw2ICsxNjIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBraG9fcmFkaXhfZ2V0X3RhYmxlX2luZGV4KHVuc2lnbmVkIGxvbmcga2V5LFxcbiAgKiBAdHJlZTogVGhlIEtITyByYWRpeCB0cmVlLlxcbiAgKiBAcGZuOiBUaGUgcGFnZSBmcmFtZSBudW1iZXIgb2YgdGhlIHBhZ2UgdG8gcHJlc2VydmUuXFxuICAqIEBvcmRlcjogVGhlIG9yZGVyIG9mIHRoZSBwYWdlLlxcbisgKiBAdHlwZTogVGhlIHBhZ2UgdHlwZS5cXG4gICpcXG4gICogVGhpcyBmdW5jdGlvbiB0cmF2ZXJzZXMgdGhlIHJhZGl4IHRyZWUgYmFzZWQgb24gdGhlIGtleSBkZXJpdmVkIGZyb20gQHBmblxcbiAgKiBhbmQgQG9yZGVyLiBJdCBzZXRzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpbiB0aGUgbGVhZiBiaXRtYXAgdG8gbWFyayB0aGVcXG5AQCAtMTU3LDExICsxNzIsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcga2hvX3JhZGl4X2dldF90YWJsZV9pbmRleCh1bnNpZ25lZCBsb25nIGtleSxcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbiAgKi9cXG4gaW50IGtob19yYWRpeF9hZGRfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXFxuLVxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyKVxcbitcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBvcmRlcixcXG4rXFx0XFx0ICAgICAgIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKVxcbiB7XFxuIFxcdC8qIE5ld2x5IGFsbG9jYXRlZCBub2RlcyBmb3IgZXJyb3IgY2xlYW51cCAqL1xcbiBcXHRzdHJ1Y3Qga2hvX3JhZGl4X25vZGUgKmludGVybWVkaWF0ZV9ub2Rlc1tLSE9fVFJFRV9NQVhfREVQVEhdID0geyAwIH07XFxuLVxcdHVuc2lnbmVkIGxvbmcga2V5ID0ga2hvX3JhZGl4X2VuY29kZV9rZXkoUEZOX1BIWVMocGZuKSwgb3JkZXIpO1xcbitcXHR1bnNpZ25lZCBsb25nIGtleSA9IGtob19yYWRpeF9lbmNvZGVfa2V5KFBGTl9QSFlTKHBmbiksIG9yZGVyLCB0eXBlKTtcXG4gXFx0c3RydWN0IGtob19yYWRpeF9ub2RlICphbmNob3Jfbm9kZSA9IE5VTEw7XFxuIFxcdHN0cnVjdCBraG9fcmFkaXhfbm9kZSAqbm9kZSA9IHRyZWUtXFx1MDAzZXJvb3Q7XFxuIFxcdHN0cnVjdCBraG9fcmFkaXhfbm9kZSAqbmV3X25vZGU7XFxuQEAgLTIzMSwxNSArMjQ3LDE2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGtob19yYWRpeF9hZGRfcGFnZSk7XFxuICAqIEB0cmVlOiBUaGUgS0hPIHJhZGl4IHRyZWUuXFxuICAqIEBwZm46IFRoZSBwYWdlIGZyYW1lIG51bWJlciBvZiB0aGUgcGFnZSB0byB1bnByZXNlcnZlLlxcbiAgKiBAb3JkZXI6IFRoZSBvcmRlciBvZiB0aGUgcGFnZS5cXG4rICogQHR5cGU6IFRoZSBwYWdlIHR5cGUuXFxuICAqXFxuICAqIFRoaXMgZnVuY3Rpb24gdHJhdmVyc2VzIHRoZSByYWRpeCB0cmVlIGFuZCBjbGVhcnMgdGhlIGJpdCBjb3JyZXNwb25kaW5nIHRvXFxuICAqIHRoZSBwYWdlLCBlZmZlY3RpdmVseSByZW1vdmluZyBpdHMgXFxcInByZXNlcnZlZFxcXCIgc3RhdHVzLiBJdCBkb2VzIG5vdCBmcmVlXFxuICAqIHRoZSB0cmVlJ3MgaW50ZXJtZWRpYXRlIG5vZGVzLCBldmVuIGlmIHRoZXkgYmVjb21lIGVtcHR5LlxcbiAgKi9cXG4gdm9pZCBraG9fcmFkaXhfZGVsX3BhZ2Uoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4tXFx0XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyKVxcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcga2V5ID0ga2hvX3JhZGl4X2VuY29kZV9rZXkoUEZOX1BIWVMocGZuKSwgb3JkZXIpO1xcbitcXHR1bnNpZ25lZCBsb25nIGtleSA9IGtob19yYWRpeF9lbmNvZGVfa2V5KFBGTl9QSFlTKHBmbiksIG9yZGVyLCB0eXBlKTtcXG4gXFx0c3RydWN0IGtob19yYWRpeF9ub2RlICpub2RlID0gdHJlZS1cXHUwMDNlcm9vdDtcXG4gXFx0c3RydWN0IGtob19yYWRpeF9sZWFmICpsZWFmO1xcbiBcXHR1bnNpZ25lZCBpbnQgaSwgaWR4O1xcbkBAIC0yNzcsMTQgKzI5NCwxNSBAQCBzdGF0aWMgaW50IGtob19yYWRpeF93YWxrX2xlYWYoc3RydWN0IGtob19yYWRpeF9sZWFmICpsZWFmLFxcbiBcXHRcXHRcXHQgICAgICAga2hvX3JhZGl4X3RyZWVfd2Fsa19jYWxsYmFja190IGNiKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKmJpdG1hcCA9ICh1bnNpZ25lZCBsb25nICopbGVhZjtcXG4rXFx0ZW51bSBraG9fcGFnZV90eXBlIHR5cGU7XFxuIFxcdHVuc2lnbmVkIGludCBvcmRlcjtcXG4gXFx0cGh5c19hZGRyX3QgcGh5cztcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRmb3JfZWFjaF9zZXRfYml0KGksIGJpdG1hcCwgUEFHRV9TSVpFICogQklUU19QRVJfQllURSkge1xcbi1cXHRcXHRwaHlzID0ga2hvX3JhZGl4X2RlY29kZV9rZXkoa2V5IHwgaSwgXFx1MDAyNm9yZGVyKTtcXG4tXFx0XFx0ZXJyID0gY2IocGh5cywgb3JkZXIpO1xcbitcXHRcXHRwaHlzID0ga2hvX3JhZGl4X2RlY29kZV9rZXkoa2V5IHwgaSwgXFx1MDAyNm9yZGVyLCBcXHUwMDI2dHlwZSk7XFxuK1xcdFxcdGVyciA9IGNiKHBoeXMsIG9yZGVyLCB0eXBlKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbkBAIC0zNTcsMTEgKzM3NSwxOCBAQCBpbnQga2hvX3JhZGl4X3dhbGtfdHJlZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoa2hvX3JhZGl4X3dhbGtfdHJlZSk7XFxuIFxcbi0vKiBGb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIDAtb3JkZXIgcGFnZXMuICovXFxuLXN0YXRpYyB2b2lkIGtob19pbml0X3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbisvKiBGb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIHBhZ2VzLiAqL1xcbitzdGF0aWMgdm9pZCBraG9fcmVzdG9yZV9yZWZjb3VudHMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuK1xcdFxcdFxcdFxcdCAgZW51bSBraG9fcGFnZV90eXBlIHR5cGUpXFxuIHtcXG4tXFx0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xcbi1cXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMSk7XFxuK1xcdC8qIEhlYWQgcGFnZSBhbHdheXMgZ2V0cyByZWZjb3VudCBvZiAxLiAqL1xcbitcXHRzZXRfcGFnZV9jb3VudChwYWdlLCAxKTtcXG4rXFx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAxOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQgPSAodHlwZSA9PSBLSE9fUEFHRV9TUExJVCkgPyAxIDogMDtcXG4rXFxuK1xcdFxcdHNldF9wYWdlX2NvdW50KHBhZ2UgKyBpLCBjb3VudCk7XFxuIFxcdFxcdC8qIENsZWFyIGVhY2ggcGFnZSdzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cXG4gXFx0XFx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UgKyBpKTtcXG4gXFx0fVxcbkBAIC0zNjksMTYgKzM5NCw3IEBAIHN0YXRpYyB2b2lkIGtob19pbml0X3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbiBcXG4gc3RhdGljIHZvaWQga2hvX2luaXRfZm9saW8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gKDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbi1cXG4tXFx0LyogSGVhZCBwYWdlIGdldHMgcmVmY291bnQgb2YgMS4gKi9cXG4tXFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMSk7XFxuLVxcdC8qIENsZWFyIGhlYWQgcGFnZSdzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cXG4tXFx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xcbi1cXG4tXFx0LyogRm9yIGhpZ2hlciBvcmRlciBmb2xpb3MsIHRhaWwgcGFnZXMgZ2V0IGEgcGFnZSBjb3VudCBvZiB6ZXJvLiAqL1xcbi1cXHRmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDE7IGkgXFx1MDAzYyBucl9wYWdlczsgaSsrKVxcbi1cXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMCk7XFxuK1xcdGtob19yZXN0b3JlX3JlZmNvdW50cyhwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyLCBLSE9fUEFHRV9DT05USUcpO1xcbiBcXG4gXFx0aWYgKG9yZGVyIFxcdTAwM2UgMClcXG4gXFx0XFx0cHJlcF9jb21wb3VuZF9wYWdlKHBhZ2UsIG9yZGVyKTtcXG5AQCAtNDAzLDEzICs0MTksMjAgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMsIGJvb2wgaXNfZm9saW8pXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRucl9wYWdlcyA9ICgxIFxcdTAwM2NcXHUwMDNjIGluZm8ub3JkZXIpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogSWYgd2Ugd2FudCB0byByZXN0b3JlIGEgZm9saW8sIGJ1dCB0aGUgbWVtb3J5IHdhcyBzcGxpdCBpbiB0aGVcXG4rXFx0ICogcHJldmlvdXMga2VybmVsLCBzb21ldGhpbmcgaXMgd3JvbmcuXFxuK1xcdCAqL1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKGlzX2ZvbGlvIFxcdTAwMjZcXHUwMDI2IGluZm8udHlwZSA9PSBLSE9fUEFHRV9TUExJVCkpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4gXFx0LyogQ2xlYXIgcHJpdmF0ZSB0byBtYWtlIHN1cmUgbGF0ZXIgcmVzdG9yZXMgb24gdGhpcyBwYWdlIGVycm9yIG91dC4gKi9cXG4gXFx0cGFnZS1cXHUwMDNlcHJpdmF0ZSA9IDA7XFxuIFxcbiBcXHRpZiAoaXNfZm9saW8pXFxuIFxcdFxcdGtob19pbml0X2ZvbGlvKHBhZ2UsIGluZm8ub3JkZXIpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdGtob19pbml0X3BhZ2VzKHBhZ2UsIG5yX3BhZ2VzKTtcXG4rXFx0XFx0a2hvX3Jlc3RvcmVfcmVmY291bnRzKHBhZ2UsIG5yX3BhZ2VzLCBpbmZvLnR5cGUpO1xcbiBcXG4gXFx0YWRqdXN0X21hbmFnZWRfcGFnZV9jb3VudChwYWdlLCBucl9wYWdlcyk7XFxuIFxcdHJldHVybiBwYWdlO1xcbkBAIC00ODUsNyArNTA4LDggQEAgc3RhdGljIHN0cnVjdCBwYWdlICpfX2luaXQga2hvX2dldF9wcmVzZXJ2ZWRfcGFnZShwaHlzX2FkZHJfdCBwaHlzLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IF9faW5pdCBraG9fcHJlc2VydmVkX21lbW9yeV9yZXNlcnZlKHBoeXNfYWRkcl90IHBoeXMsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSlcXG4ge1xcbiBcXHR1bmlvbiBraG9fcGFnZV9pbmZvIGluZm87XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbkBAIC00OTksNiArNTIzLDcgQEAgc3RhdGljIGludCBfX2luaXQga2hvX3ByZXNlcnZlZF9tZW1vcnlfcmVzZXJ2ZShwaHlzX2FkZHJfdCBwaHlzLFxcbiBcXHRtZW1ibG9ja19yZXNlcnZlZF9tYXJrX25vaW5pdChwaHlzLCBzeik7XFxuIFxcdGluZm8ubWFnaWMgPSBLSE9fUEFHRV9NQUdJQztcXG4gXFx0aW5mby5vcmRlciA9IG9yZGVyO1xcbitcXHRpbmZvLnR5cGUgPSB0eXBlO1xcbiBcXHRwYWdlLVxcdTAwM2Vwcml2YXRlID0gaW5mby5wYWdlX3ByaXZhdGU7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtODU5LDcgKzg4NCw3IEBAIGludCBraG9fcHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0aWYgKFdBUk5fT04oa2hvX3NjcmF0Y2hfb3ZlcmxhcChwZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCwgUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0cmV0dXJuIGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTtcXG4rXFx0cmV0dXJuIGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyLCBLSE9fUEFHRV9DT05USUcpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob19wcmVzZXJ2ZV9mb2xpbyk7XFxuIFxcbkBAIC04NzcsNyArOTAyLDcgQEAgdm9pZCBraG9fdW5wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRjb25zdCB1bnNpZ25lZCBsb25nIHBmbiA9IGZvbGlvX3Bmbihmb2xpbyk7XFxuIFxcdGNvbnN0IHVuc2lnbmVkIGludCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcXG4gXFxuLVxcdGtob19yYWRpeF9kZWxfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTtcXG4rXFx0a2hvX3JhZGl4X2RlbF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIsIEtIT19QQUdFX0NPTlRJRyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfZm9saW8pO1xcbiBcXG5AQCAtODk4LDE1ICs5MjMsMjkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4gXFx0cmV0dXJuIG9yZGVyO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBraG9faXNfcGFnZV9zcGxpdCh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZSByZWZjb3VudCBvZiB0aGUgc2Vjb25kIHBhZ2UgaXMgbm9uLXplcm8sIHRoaXMgYmxvY2tcXG4rXFx0ICogaGFzIGJlZW4gc3BsaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAob3JkZXIgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHBhZ2VfcmVmX2NvdW50KHBmbl90b19wYWdlKHBmbiArIDEpKSAhPSAwKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgX19raG9fdW5wcmVzZXJ2ZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXFxuIFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgb3JkZXI7XFxuLVxcbiBcXHR3aGlsZSAocGZuIFxcdTAwM2MgZW5kX3Bmbikge1xcbi1cXHRcXHRvcmRlciA9IF9fa2hvX3ByZXNlcnZlX3BhZ2VzX29yZGVyKHBmbiwgZW5kX3Bmbik7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBvcmRlciA9IF9fa2hvX3ByZXNlcnZlX3BhZ2VzX29yZGVyKHBmbiwgZW5kX3Bmbik7XFxuK1xcdFxcdGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlO1xcbiBcXG4tXFx0XFx0a2hvX3JhZGl4X2RlbF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIpO1xcbitcXHRcXHR0eXBlID0ga2hvX2lzX3BhZ2Vfc3BsaXQocGZuLCBvcmRlcikgPyBLSE9fUEFHRV9TUExJVCA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBLSE9fUEFHRV9DT05USUc7XFxuK1xcbitcXHRcXHRraG9fcmFkaXhfZGVsX3BhZ2UodHJlZSwgcGZuLCBvcmRlciwgdHlwZSk7XFxuIFxcbiBcXHRcXHRwZm4gKz0gMSBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4gXFx0fVxcbkBAIC05MzgsOCArOTc3LDEyIEBAIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuIFxcbiBcXHR3aGlsZSAocGZuIFxcdTAwM2MgZW5kX3Bmbikge1xcbiBcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xcbitcXHRcXHRlbnVtIGtob19wYWdlX3R5cGUgdHlwZTtcXG4rXFxuK1xcdFxcdHR5cGUgPSBraG9faXNfcGFnZV9zcGxpdChwZm4sIG9yZGVyKSA/IEtIT19QQUdFX1NQTElUIDpcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIEtIT19QQUdFX0NPTlRJRztcXG4gXFxuLVxcdFxcdGVyciA9IGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTtcXG4rXFx0XFx0ZXJyID0ga2hvX3JhZGl4X2FkZF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIsIHR5cGUpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdGZhaWxlZF9wZm4gPSBwZm47XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC05NzUsNiArMTAxOCwyOSBAQCB2b2lkIGtob191bnByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3BhZ2VzKTtcXG4gXFxuKy8qKlxcbisgKiBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzIC0gc3BsaXQgY29udGlndW91cyBwYWdlcyB0aGF0IGFyZSBwcmVzZXJ2ZWRcXG4rICogQHBhZ2U6IGZpcnN0IHBhZ2UgaW4gdGhlIGxpc3QuXFxuKyAqIEBvcmRlcjogdGhlIG9yZGVyIG9mIHRoZSBvcmlnaW5hbCBhbGxvY2F0aW9uLlxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byBzcGxpdCBhIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbiB0aGF0IGhhcyBiZWVuXFxuKyAqIHByZXNlcnZlZCBhY3Jvc3Mga2V4ZWMuIEl0IHVucHJlc2VydmVzIHRoZSBwYWdlcywgc3BsaXRzIHRoZW0gdXNpbmdcXG4rICogc3BsaXRfcGFnZSgpIGFuZCB0aGVuIHJlLXByZXNlcnZlcyB0aGVtIGFzIGluZGl2aWR1YWwgcGFnZXMuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gTVVTVCBvbmx5IGJlIGNhbGxlZCBvbiBwYWdlcyB0aGF0IGFyZSBjdXJyZW50bHkgcHJlc2VydmVkLlxcbisgKiBUaGUgQG9yZGVyIHByb3ZpZGVkIE1VU1QgbWF0Y2ggdGhlIG9yZGVyIHVzZWQgZHVyaW5nIHRoZSBpbml0aWFsXFxuKyAqIHByZXNlcnZhdGlvbi5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4re1xcbitcXHRraG9fdW5wcmVzZXJ2ZV9wYWdlcyhwYWdlLCAxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbitcXHRzcGxpdF9wYWdlKHBhZ2UsIG9yZGVyKTtcXG4rXFx0cmV0dXJuIGtob19wcmVzZXJ2ZV9wYWdlcyhwYWdlLCAxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMpO1xcbitcXG4gLyogdm1hbGxvYyBmbGFncyBLSE8gc3VwcG9ydHMgKi9cXG4gI2RlZmluZSBLSE9fVk1BTExPQ19TVVBQT1JURURfRkxBR1NcXHQoVk1fQUxMT0MgfCBWTV9BTExPV19IVUdFX1ZNQVApXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMjoyODoyMS4xNjg1OTk0MThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4OTYyMTE2NTMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLRVhFQ19IQU5ET1ZFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXNcIixcbiAgICBcImtob19wcmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwia2hvX3VucHJlc2VydmVfcGFnZXNcIixcbiAgICBcImtob19yYWRpeF9hZGRfcGFnZVwiLFxuICAgIFwia2hvX3JhZGl4X2RlbF9wYWdlXCIsXG4gICAgXCJraG9fcmFkaXhfd2Fsa190cmVlXCIsXG4gICAgXCJraG9fcHJlc2VydmVfZm9saW9cIixcbiAgICBcImtob191bnByZXNlcnZlX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AgYW5kIG1vZGlmaWVzIHRoZSBLZXhlYyBIYW5kb3ZlciAoS0hPKSByYWRpeCB0cmVlIGxvZ2ljIHRvIHN1cHBvcnQgc3BsaXQgcGFnZXMuIEl0IGNoYW5nZXMgY29yZSBmdW5jdGlvbnMgbGlrZSBga2hvX3JhZGl4X2FkZF9wYWdlYCwgYGtob19yYWRpeF9kZWxfcGFnZWAsIGBraG9fcHJlc2VydmVfcGFnZXNgLCBhbmQgYGtob191bnByZXNlcnZlX3BhZ2VzYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJ3MgbGl2ZSB1cGRhdGUgbWVjaGFuaXNtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmFkaXggdHJlZSBhbmQgcGFnZSBwcmVzZXJ2YXRpb24gbG9naWMgaGFuZGxlcyBzcGxpdCBwYWdlcyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDM0YjJkNDQ2ZDFmZjI5OTJiNTA3MTYyYmIwZjJjZjFjMzc0NmEwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMgMDI6Mjg6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcbmluZGV4IDg5NjhjNTZkMmQ3M2UxLi40NTJlMzhiYjIwNzY4MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oXG5AQCAtMjQsNiArMjQsNyBAQCBpbnQga2hvX3ByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIHZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4raW50IGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4gaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0ciwgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pO1xuIHZvaWQga2hvX3VucHJlc2VydmVfdm1hbGxvYyhzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XG4gdm9pZCAqa2hvX2FsbG9jX3ByZXNlcnZlKHNpemVfdCBzaXplKTtcbkBAIC02NSw2ICs2NiwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcykgeyB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBvcmRlcilcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0cixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oIGIvaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oXG5pbmRleCA4NGU5MThiOTZlNTNkZi4uOTI0NGEzZjdhMmQ0NzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmhcbisrKyBiL2luY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaFxuQEAgLTM0LDE2ICszNCwyMiBAQCBzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUge1xuIFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3RzIHRoZSB0cmVlJ3Mgc3RydWN0dXJlIGFuZCByb290IHBvaW50ZXIgKi9cbiB9O1xuIFxuK2VudW0ga2hvX3BhZ2VfdHlwZSB7XG4rXHRLSE9fUEFHRV9DT05USUcgPSAwLFxuK1x0S0hPX1BBR0VfU1BMSVQsXG4rfTtcbitcbiB0eXBlZGVmIGludCAoKmtob19yYWRpeF90cmVlX3dhbGtfY2FsbGJhY2tfdCkocGh5c19hZGRyX3QgcGh5cyxcbi1cdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG9yZGVyKTtcbitcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG9yZGVyLFxuK1x0XHRcdFx0XHQgICAgICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSk7XG4gXG4gI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxuIFxuIGludCBraG9fcmFkaXhfYWRkX3BhZ2Uoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLCB1bnNpZ25lZCBsb25nIHBmbixcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBvcmRlcik7XG4rXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKTtcbiBcbiB2b2lkIGtob19yYWRpeF9kZWxfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsIHVuc2lnbmVkIGxvbmcgcGZuLFxuLVx0XHRcdHVuc2lnbmVkIGludCBvcmRlcik7XG4rXHRcdFx0dW5zaWduZWQgaW50IG9yZGVyLCBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSk7XG4gXG4gaW50IGtob19yYWRpeF93YWxrX3RyZWUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxuIFx0XHRcdGtob19yYWRpeF90cmVlX3dhbGtfY2FsbGJhY2tfdCBjYik7XG5AQCAtNTEsMTMgKzU3LDE0IEBAIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbiAjZWxzZSAgLyogI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGtob19yYWRpeF9hZGRfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsIGxvbmcgcGZuLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgb3JkZXIpXG4rXHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBvcmRlciwgZW51bSBraG9fcGFnZV90eXBlIHR5cGUpXG4ge1xuIFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQga2hvX3JhZGl4X2RlbF9wYWdlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbi1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpIHsgfVxuK1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0XHRcdCAgICAgIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKSB7IH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbiBcdFx0XHRcdCAgICAgIGtob19yYWRpeF90cmVlX3dhbGtfY2FsbGJhY2tfdCBjYilcbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuaW5kZXggNDgzNGE4MDk5ODVhYjcuLmVhMDgyNDg5MDFiNTUxIDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuKysrIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuQEAgLTQzLDE4ICs0MywyMiBAQFxuIFxuIC8qXG4gICogS0hPIHVzZXMgcGFnZS1cdTAwM2Vwcml2YXRlLCB3aGljaCBpcyBhbiB1bnNpZ25lZCBsb25nLCB0byBzdG9yZSBwYWdlIG1ldGFkYXRhLlxuLSAqIFVzZSBpdCB0byBzdG9yZSBib3RoIHRoZSBtYWdpYyBhbmQgdGhlIG9yZGVyLlxuKyAqIFVzZSBpdCB0byBzdG9yZSB0aGUgbWFnaWMsIHRoZSBvcmRlciwgYW5kIHRoZSB0eXBlIGJpdC5cbiAgKi9cbiB1bmlvbiBraG9fcGFnZV9pbmZvIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGFnZV9wcml2YXRlO1xuIFx0c3RydWN0IHtcbi1cdFx0dW5zaWduZWQgaW50IG9yZGVyO1xuK1x0XHR1bnNpZ25lZCBpbnQgb3JkZXIgOiAzMTtcbitcdFx0dW5zaWduZWQgaW50IHR5cGUgIDogMTtcbiBcdFx0dW5zaWduZWQgaW50IG1hZ2ljO1xuIFx0fTtcbiB9O1xuIFxuIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHVuaW9uIGtob19wYWdlX2luZm8pID09IHNpemVvZigoKHN0cnVjdCBwYWdlICopMCktXHUwMDNlcHJpdmF0ZSkpO1xuIFxuKyNkZWZpbmUgS0hPX0tFWV9UWVBFX1NISUZUIDYzXG4rI2RlZmluZSBLSE9fS0VZX1RZUEVfTUFTSyAgQklUKEtIT19LRVlfVFlQRV9TSElGVClcbitcbiBzdGF0aWMgYm9vbCBraG9fZW5hYmxlIF9fcm9fYWZ0ZXJfaW5pdCA9IElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUKTtcbiBcbiBib29sIGtob19pc19lbmFibGVkKHZvaWQpXG5AQCAtODUsNDIgKzg5LDUyIEBAIHN0YXRpYyBzdHJ1Y3Qga2hvX291dCBraG9fb3V0ID0ge1xuIH07XG4gXG4gLyoqXG4tICoga2hvX3JhZGl4X2VuY29kZV9rZXkgLSBFbmNvZGVzIGEgcGh5c2ljYWwgYWRkcmVzcyBhbmQgb3JkZXIgaW50byBhIHJhZGl4IGtleS5cbisgKiBraG9fcmFkaXhfZW5jb2RlX2tleSAtIEVuY29kZXMgYSBwaHlzaWNhbCBhZGRyZXNzLCBvcmRlciBhbmQgdHlwZSBpbnRvIGEgcmFkaXgga2V5LlxuICAqIEBwaHlzOiBUaGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcGFnZS5cbiAgKiBAb3JkZXI6IFRoZSBvcmRlciBvZiB0aGUgcGFnZS5cbisgKiBAdHlwZTogVGhlIHBhZ2UgdHlwZS5cbiAgKlxuLSAqIFRoaXMgZnVuY3Rpb24gY29tYmluZXMgYSBwYWdlJ3MgcGh5c2ljYWwgYWRkcmVzcyBhbmQgaXRzIG9yZGVyIGludG8gYVxuKyAqIFRoaXMgZnVuY3Rpb24gY29tYmluZXMgYSBwYWdlJ3MgcGh5c2ljYWwgYWRkcmVzcywgaXRzIG9yZGVyLCBhbmQgaXRzIHR5cGUgaW50byBhXG4gICogc2luZ2xlIHVuc2lnbmVkIGxvbmcsIHdoaWNoIGlzIHVzZWQgYXMgYSBrZXkgZm9yIGFsbCByYWRpeCB0cmVlXG4gICogb3BlcmF0aW9ucy5cbiAgKlxuICAqIFJldHVybjogVGhlIGVuY29kZWQgdW5zaWduZWQgbG9uZyByYWRpeCBrZXkuXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcga2hvX3JhZGl4X2VuY29kZV9rZXkocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgaW50IG9yZGVyKVxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGtob19yYWRpeF9lbmNvZGVfa2V5KHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0XHRcdFx0ICBlbnVtIGtob19wYWdlX3R5cGUgdHlwZSlcbiB7XG4gXHQvKiBPcmRlciBiaXRzIHBhcnQgKi9cbiBcdHVuc2lnbmVkIGxvbmcgaCA9IDFVTCBcdTAwM2NcdTAwM2MgKEtIT19PUkRFUl8wX0xPRzIgLSBvcmRlcik7XG4gXHQvKiBTaGlmdGVkIHBoeXNpY2FsIGFkZHJlc3MgcGFydCAqL1xuIFx0dW5zaWduZWQgbG9uZyBsID0gcGh5cyBcdTAwM2VcdTAwM2UgKFBBR0VfU0hJRlQgKyBvcmRlcik7XG4rXHQvKiBUeXBlIGJpdCBwYXJ0ICovXG4rXHR1bnNpZ25lZCBsb25nIHQgPSAodW5zaWduZWQgbG9uZyl0eXBlIFx1MDAzY1x1MDAzYyBLSE9fS0VZX1RZUEVfU0hJRlQ7XG4gXG4tXHRyZXR1cm4gaCB8IGw7XG4rXHRyZXR1cm4gaCB8IGwgfCB0O1xuIH1cbiBcbiAvKipcbi0gKiBraG9fcmFkaXhfZGVjb2RlX2tleSAtIERlY29kZXMgYSByYWRpeCBrZXkgYmFjayBpbnRvIGEgcGh5c2ljYWwgYWRkcmVzcyBhbmQgb3JkZXIuXG4rICoga2hvX3JhZGl4X2RlY29kZV9rZXkgLSBEZWNvZGVzIGEgcmFkaXgga2V5IGJhY2sgaW50byBwaHlzaWNhbCBhZGRyZXNzLCBvcmRlciwgYW5kIHR5cGUuXG4gICogQGtleTogVGhlIHVuc2lnbmVkIGxvbmcga2V5IHRvIGRlY29kZS5cbiAgKiBAb3JkZXI6IEFuIG91dHB1dCBwYXJhbWV0ZXIsIGEgcG9pbnRlciB0byBhbiB1bnNpZ25lZCBpbnQgd2hlcmUgdGhlIGRlY29kZWRcbiAgKiAgICAgICAgIHBhZ2Ugb3JkZXIgd2lsbCBiZSBzdG9yZWQuXG4rICogQHR5cGU6IEFuIG91dHB1dCBwYXJhbWV0ZXIsIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZGVjb2RlZCB0eXBlIHdpbGwgYmUgc3RvcmVkLlxuICAqXG4gICogVGhpcyBmdW5jdGlvbiByZXZlcnNlcyB0aGUgZW5jb2RpbmcgcGVyZm9ybWVkIGJ5IGtob19yYWRpeF9lbmNvZGVfa2V5KCksXG4tICogZXh0cmFjdGluZyB0aGUgb3JpZ2luYWwgcGh5c2ljYWwgYWRkcmVzcyBhbmQgcGFnZSBvcmRlciBmcm9tIGEgZ2l2ZW4ga2V5LlxuKyAqIGV4dHJhY3RpbmcgdGhlIG9yaWdpbmFsIHBoeXNpY2FsIGFkZHJlc3MsIHBhZ2Ugb3JkZXIsIGFuZCB0eXBlIGZyb20gYSBnaXZlbiBrZXkuXG4gICpcbiAgKiBSZXR1cm46IFRoZSBkZWNvZGVkIHBoeXNpY2FsIGFkZHJlc3MuXG4gICovXG4tc3RhdGljIHBoeXNfYWRkcl90IGtob19yYWRpeF9kZWNvZGVfa2V5KHVuc2lnbmVkIGxvbmcga2V5LCB1bnNpZ25lZCBpbnQgKm9yZGVyKVxuK3N0YXRpYyBwaHlzX2FkZHJfdCBraG9fcmFkaXhfZGVjb2RlX2tleSh1bnNpZ25lZCBsb25nIGtleSwgdW5zaWduZWQgaW50ICpvcmRlcixcbitcdFx0XHRcdFx0ZW51bSBraG9fcGFnZV90eXBlICp0eXBlKVxuIHtcbi1cdHVuc2lnbmVkIGludCBvcmRlcl9iaXQgPSBmbHM2NChrZXkpO1xuK1x0dW5zaWduZWQgaW50IG9yZGVyX2JpdDtcbiBcdHBoeXNfYWRkcl90IHBoeXM7XG4gXG4rXHQqdHlwZSA9IChrZXkgXHUwMDI2IEtIT19LRVlfVFlQRV9NQVNLKSBcdTAwM2VcdTAwM2UgS0hPX0tFWV9UWVBFX1NISUZUO1xuK1x0a2V5IFx1MDAyNj0gfktIT19LRVlfVFlQRV9NQVNLO1xuK1xuK1x0b3JkZXJfYml0ID0gZmxzNjQoa2V5KTtcbiBcdC8qIG9yZGVyX2JpdCBpcyBudW1iZXJlZCBzdGFydGluZyBhdCAxIGZyb20gZmxzNjQgKi9cbiBcdCpvcmRlciA9IEtIT19PUkRFUl8wX0xPRzIgLSBvcmRlcl9iaXQgKyAxO1xuIFx0LyogVGhlIG9yZGVyIGlzIGRpc2NhcmRlZCBieSB0aGUgc2hpZnQgKi9cbkBAIC0xNDgsNiArMTYyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcga2hvX3JhZGl4X2dldF90YWJsZV9pbmRleCh1bnNpZ25lZCBsb25nIGtleSxcbiAgKiBAdHJlZTogVGhlIEtITyByYWRpeCB0cmVlLlxuICAqIEBwZm46IFRoZSBwYWdlIGZyYW1lIG51bWJlciBvZiB0aGUgcGFnZSB0byBwcmVzZXJ2ZS5cbiAgKiBAb3JkZXI6IFRoZSBvcmRlciBvZiB0aGUgcGFnZS5cbisgKiBAdHlwZTogVGhlIHBhZ2UgdHlwZS5cbiAgKlxuICAqIFRoaXMgZnVuY3Rpb24gdHJhdmVyc2VzIHRoZSByYWRpeCB0cmVlIGJhc2VkIG9uIHRoZSBrZXkgZGVyaXZlZCBmcm9tIEBwZm5cbiAgKiBhbmQgQG9yZGVyLiBJdCBzZXRzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpbiB0aGUgbGVhZiBiaXRtYXAgdG8gbWFyayB0aGVcbkBAIC0xNTcsMTEgKzE3MiwxMiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBraG9fcmFkaXhfZ2V0X3RhYmxlX2luZGV4KHVuc2lnbmVkIGxvbmcga2V5LFxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgKi9cbiBpbnQga2hvX3JhZGl4X2FkZF9wYWdlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4rXHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyLFxuK1x0XHQgICAgICAgZW51bSBraG9fcGFnZV90eXBlIHR5cGUpXG4ge1xuIFx0LyogTmV3bHkgYWxsb2NhdGVkIG5vZGVzIGZvciBlcnJvciBjbGVhbnVwICovXG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X25vZGUgKmludGVybWVkaWF0ZV9ub2Rlc1tLSE9fVFJFRV9NQVhfREVQVEhdID0geyAwIH07XG4tXHR1bnNpZ25lZCBsb25nIGtleSA9IGtob19yYWRpeF9lbmNvZGVfa2V5KFBGTl9QSFlTKHBmbiksIG9yZGVyKTtcbitcdHVuc2lnbmVkIGxvbmcga2V5ID0ga2hvX3JhZGl4X2VuY29kZV9rZXkoUEZOX1BIWVMocGZuKSwgb3JkZXIsIHR5cGUpO1xuIFx0c3RydWN0IGtob19yYWRpeF9ub2RlICphbmNob3Jfbm9kZSA9IE5VTEw7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X25vZGUgKm5vZGUgPSB0cmVlLVx1MDAzZXJvb3Q7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X25vZGUgKm5ld19ub2RlO1xuQEAgLTIzMSwxNSArMjQ3LDE2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGtob19yYWRpeF9hZGRfcGFnZSk7XG4gICogQHRyZWU6IFRoZSBLSE8gcmFkaXggdHJlZS5cbiAgKiBAcGZuOiBUaGUgcGFnZSBmcmFtZSBudW1iZXIgb2YgdGhlIHBhZ2UgdG8gdW5wcmVzZXJ2ZS5cbiAgKiBAb3JkZXI6IFRoZSBvcmRlciBvZiB0aGUgcGFnZS5cbisgKiBAdHlwZTogVGhlIHBhZ2UgdHlwZS5cbiAgKlxuICAqIFRoaXMgZnVuY3Rpb24gdHJhdmVyc2VzIHRoZSByYWRpeCB0cmVlIGFuZCBjbGVhcnMgdGhlIGJpdCBjb3JyZXNwb25kaW5nIHRvXG4gICogdGhlIHBhZ2UsIGVmZmVjdGl2ZWx5IHJlbW92aW5nIGl0cyBcInByZXNlcnZlZFwiIHN0YXR1cy4gSXQgZG9lcyBub3QgZnJlZVxuICAqIHRoZSB0cmVlJ3MgaW50ZXJtZWRpYXRlIG5vZGVzLCBldmVuIGlmIHRoZXkgYmVjb21lIGVtcHR5LlxuICAqL1xuIHZvaWQga2hvX3JhZGl4X2RlbF9wYWdlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4tXHRcdFx0dW5zaWduZWQgaW50IG9yZGVyKVxuK1x0XHRcdHVuc2lnbmVkIGludCBvcmRlciwgZW51bSBraG9fcGFnZV90eXBlIHR5cGUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBrZXkgPSBraG9fcmFkaXhfZW5jb2RlX2tleShQRk5fUEhZUyhwZm4pLCBvcmRlcik7XG4rXHR1bnNpZ25lZCBsb25nIGtleSA9IGtob19yYWRpeF9lbmNvZGVfa2V5KFBGTl9QSFlTKHBmbiksIG9yZGVyLCB0eXBlKTtcbiBcdHN0cnVjdCBraG9fcmFkaXhfbm9kZSAqbm9kZSA9IHRyZWUtXHUwMDNlcm9vdDtcbiBcdHN0cnVjdCBraG9fcmFkaXhfbGVhZiAqbGVhZjtcbiBcdHVuc2lnbmVkIGludCBpLCBpZHg7XG5AQCAtMjc3LDE0ICsyOTQsMTUgQEAgc3RhdGljIGludCBraG9fcmFkaXhfd2Fsa19sZWFmKHN0cnVjdCBraG9fcmFkaXhfbGVhZiAqbGVhZixcbiBcdFx0XHQgICAgICAga2hvX3JhZGl4X3RyZWVfd2Fsa19jYWxsYmFja190IGNiKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgKmJpdG1hcCA9ICh1bnNpZ25lZCBsb25nICopbGVhZjtcbitcdGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlO1xuIFx0dW5zaWduZWQgaW50IG9yZGVyO1xuIFx0cGh5c19hZGRyX3QgcGh5cztcbiBcdHVuc2lnbmVkIGludCBpO1xuIFx0aW50IGVycjtcbiBcbiBcdGZvcl9lYWNoX3NldF9iaXQoaSwgYml0bWFwLCBQQUdFX1NJWkUgKiBCSVRTX1BFUl9CWVRFKSB7XG4tXHRcdHBoeXMgPSBraG9fcmFkaXhfZGVjb2RlX2tleShrZXkgfCBpLCBcdTAwMjZvcmRlcik7XG4tXHRcdGVyciA9IGNiKHBoeXMsIG9yZGVyKTtcbitcdFx0cGh5cyA9IGtob19yYWRpeF9kZWNvZGVfa2V5KGtleSB8IGksIFx1MDAyNm9yZGVyLCBcdTAwMjZ0eXBlKTtcbitcdFx0ZXJyID0gY2IocGh5cywgb3JkZXIsIHR5cGUpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtMzU3LDExICszNzUsMTggQEAgaW50IGtob19yYWRpeF93YWxrX3RyZWUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChraG9fcmFkaXhfd2Fsa190cmVlKTtcbiBcbi0vKiBGb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIDAtb3JkZXIgcGFnZXMuICovXG4tc3RhdGljIHZvaWQga2hvX2luaXRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4rLyogRm9yIHBoeXNpY2FsbHkgY29udGlndW91cyBwYWdlcy4gKi9cbitzdGF0aWMgdm9pZCBraG9fcmVzdG9yZV9yZWZjb3VudHMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4rXHRcdFx0XHQgIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKVxuIHtcbi1cdGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xuLVx0XHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMSk7XG4rXHQvKiBIZWFkIHBhZ2UgYWx3YXlzIGdldHMgcmVmY291bnQgb2YgMS4gKi9cbitcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDEpO1xuK1x0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAxOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XG4rXHRcdHVuc2lnbmVkIGludCBjb3VudCA9ICh0eXBlID09IEtIT19QQUdFX1NQTElUKSA/IDEgOiAwO1xuK1xuK1x0XHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgY291bnQpO1xuIFx0XHQvKiBDbGVhciBlYWNoIHBhZ2UncyBjb2RldGFnIHRvIGF2b2lkIGFjY291bnRpbmcgbWlzbWF0Y2guICovXG4gXHRcdGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlICsgaSk7XG4gXHR9XG5AQCAtMzY5LDE2ICszOTQsNyBAQCBzdGF0aWMgdm9pZCBraG9faW5pdF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiBcbiBzdGF0aWMgdm9pZCBraG9faW5pdF9mb2xpbyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuLVxuLVx0LyogSGVhZCBwYWdlIGdldHMgcmVmY291bnQgb2YgMS4gKi9cbi1cdHNldF9wYWdlX2NvdW50KHBhZ2UsIDEpO1xuLVx0LyogQ2xlYXIgaGVhZCBwYWdlJ3MgY29kZXRhZyB0byBhdm9pZCBhY2NvdW50aW5nIG1pc21hdGNoLiAqL1xuLVx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xuLVxuLVx0LyogRm9yIGhpZ2hlciBvcmRlciBmb2xpb3MsIHRhaWwgcGFnZXMgZ2V0IGEgcGFnZSBjb3VudCBvZiB6ZXJvLiAqL1xuLVx0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAxOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKVxuLVx0XHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMCk7XG4rXHRraG9fcmVzdG9yZV9yZWZjb3VudHMocGFnZSwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIsIEtIT19QQUdFX0NPTlRJRyk7XG4gXG4gXHRpZiAob3JkZXIgXHUwMDNlIDApXG4gXHRcdHByZXBfY29tcG91bmRfcGFnZShwYWdlLCBvcmRlcik7XG5AQCAtNDAzLDEzICs0MTksMjAgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMsIGJvb2wgaXNfZm9saW8pXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0bnJfcGFnZXMgPSAoMSBcdTAwM2NcdTAwM2MgaW5mby5vcmRlcik7XG4gXG4rXHQvKlxuK1x0ICogSWYgd2Ugd2FudCB0byByZXN0b3JlIGEgZm9saW8sIGJ1dCB0aGUgbWVtb3J5IHdhcyBzcGxpdCBpbiB0aGVcbitcdCAqIHByZXZpb3VzIGtlcm5lbCwgc29tZXRoaW5nIGlzIHdyb25nLlxuK1x0ICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKGlzX2ZvbGlvIFx1MDAyNlx1MDAyNiBpbmZvLnR5cGUgPT0gS0hPX1BBR0VfU1BMSVQpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbiBcdC8qIENsZWFyIHByaXZhdGUgdG8gbWFrZSBzdXJlIGxhdGVyIHJlc3RvcmVzIG9uIHRoaXMgcGFnZSBlcnJvciBvdXQuICovXG4gXHRwYWdlLVx1MDAzZXByaXZhdGUgPSAwO1xuIFxuIFx0aWYgKGlzX2ZvbGlvKVxuIFx0XHRraG9faW5pdF9mb2xpbyhwYWdlLCBpbmZvLm9yZGVyKTtcbiBcdGVsc2Vcbi1cdFx0a2hvX2luaXRfcGFnZXMocGFnZSwgbnJfcGFnZXMpO1xuK1x0XHRraG9fcmVzdG9yZV9yZWZjb3VudHMocGFnZSwgbnJfcGFnZXMsIGluZm8udHlwZSk7XG4gXG4gXHRhZGp1c3RfbWFuYWdlZF9wYWdlX2NvdW50KHBhZ2UsIG5yX3BhZ2VzKTtcbiBcdHJldHVybiBwYWdlO1xuQEAgLTQ4NSw3ICs1MDgsOCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9faW5pdCBraG9fZ2V0X3ByZXNlcnZlZF9wYWdlKHBoeXNfYWRkcl90IHBoeXMsXG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pbml0IGtob19wcmVzZXJ2ZWRfbWVtb3J5X3Jlc2VydmUocGh5c19hZGRyX3QgcGh5cyxcbi1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBvcmRlcilcbitcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0XHRcdFx0ICAgICAgIGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlKVxuIHtcbiBcdHVuaW9uIGtob19wYWdlX2luZm8gaW5mbztcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuQEAgLTQ5OSw2ICs1MjMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBraG9fcHJlc2VydmVkX21lbW9yeV9yZXNlcnZlKHBoeXNfYWRkcl90IHBoeXMsXG4gXHRtZW1ibG9ja19yZXNlcnZlZF9tYXJrX25vaW5pdChwaHlzLCBzeik7XG4gXHRpbmZvLm1hZ2ljID0gS0hPX1BBR0VfTUFHSUM7XG4gXHRpbmZvLm9yZGVyID0gb3JkZXI7XG4rXHRpbmZvLnR5cGUgPSB0eXBlO1xuIFx0cGFnZS1cdTAwM2Vwcml2YXRlID0gaW5mby5wYWdlX3ByaXZhdGU7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04NTksNyArODg0LDcgQEAgaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKFdBUk5fT04oa2hvX3NjcmF0Y2hfb3ZlcmxhcChwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRyZXR1cm4ga2hvX3JhZGl4X2FkZF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIpO1xuK1x0cmV0dXJuIGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyLCBLSE9fUEFHRV9DT05USUcpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChraG9fcHJlc2VydmVfZm9saW8pO1xuIFxuQEAgLTg3Nyw3ICs5MDIsNyBAQCB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRjb25zdCB1bnNpZ25lZCBsb25nIHBmbiA9IGZvbGlvX3Bmbihmb2xpbyk7XG4gXHRjb25zdCB1bnNpZ25lZCBpbnQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4gXG4tXHRraG9fcmFkaXhfZGVsX3BhZ2UodHJlZSwgcGZuLCBvcmRlcik7XG4rXHRraG9fcmFkaXhfZGVsX3BhZ2UodHJlZSwgcGZuLCBvcmRlciwgS0hPX1BBR0VfQ09OVElHKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfZm9saW8pO1xuIFxuQEAgLTg5OCwxNSArOTIzLDI5IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRyZXR1cm4gb3JkZXI7XG4gfVxuIFxuK3N0YXRpYyBib29sIGtob19pc19wYWdlX3NwbGl0KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4re1xuK1x0LypcbitcdCAqIElmIHRoZSByZWZjb3VudCBvZiB0aGUgc2Vjb25kIHBhZ2UgaXMgbm9uLXplcm8sIHRoaXMgYmxvY2tcbitcdCAqIGhhcyBiZWVuIHNwbGl0LlxuK1x0ICovXG4rXHRpZiAob3JkZXIgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHBhZ2VfcmVmX2NvdW50KHBmbl90b19wYWdlKHBmbiArIDEpKSAhPSAwKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gc3RhdGljIHZvaWQgX19raG9fdW5wcmVzZXJ2ZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXG4gXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuIHtcbi1cdHVuc2lnbmVkIGludCBvcmRlcjtcbi1cbiBcdHdoaWxlIChwZm4gXHUwMDNjIGVuZF9wZm4pIHtcbi1cdFx0b3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xuK1x0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xuK1x0XHRlbnVtIGtob19wYWdlX3R5cGUgdHlwZTtcbiBcbi1cdFx0a2hvX3JhZGl4X2RlbF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIpO1xuK1x0XHR0eXBlID0ga2hvX2lzX3BhZ2Vfc3BsaXQocGZuLCBvcmRlcikgPyBLSE9fUEFHRV9TUExJVCA6XG4rXHRcdFx0XHRcdFx0ICAgICAgIEtIT19QQUdFX0NPTlRJRztcbitcbitcdFx0a2hvX3JhZGl4X2RlbF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIsIHR5cGUpO1xuIFxuIFx0XHRwZm4gKz0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4gXHR9XG5AQCAtOTM4LDggKzk3NywxMiBAQCBpbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuIFxuIFx0d2hpbGUgKHBmbiBcdTAwM2MgZW5kX3Bmbikge1xuIFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xuK1x0XHRlbnVtIGtob19wYWdlX3R5cGUgdHlwZTtcbitcbitcdFx0dHlwZSA9IGtob19pc19wYWdlX3NwbGl0KHBmbiwgb3JkZXIpID8gS0hPX1BBR0VfU1BMSVQgOlxuK1x0XHRcdFx0XHRcdCAgICAgICBLSE9fUEFHRV9DT05USUc7XG4gXG4tXHRcdGVyciA9IGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTtcbitcdFx0ZXJyID0ga2hvX3JhZGl4X2FkZF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIsIHR5cGUpO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0ZmFpbGVkX3BmbiA9IHBmbjtcbiBcdFx0XHRicmVhaztcbkBAIC05NzUsNiArMTAxOCwyOSBAQCB2b2lkIGtob191bnByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV9wYWdlcyk7XG4gXG4rLyoqXG4rICoga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyAtIHNwbGl0IGNvbnRpZ3VvdXMgcGFnZXMgdGhhdCBhcmUgcHJlc2VydmVkXG4rICogQHBhZ2U6IGZpcnN0IHBhZ2UgaW4gdGhlIGxpc3QuXG4rICogQG9yZGVyOiB0aGUgb3JkZXIgb2YgdGhlIG9yaWdpbmFsIGFsbG9jYXRpb24uXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byBzcGxpdCBhIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbiB0aGF0IGhhcyBiZWVuXG4rICogcHJlc2VydmVkIGFjcm9zcyBrZXhlYy4gSXQgdW5wcmVzZXJ2ZXMgdGhlIHBhZ2VzLCBzcGxpdHMgdGhlbSB1c2luZ1xuKyAqIHNwbGl0X3BhZ2UoKSBhbmQgdGhlbiByZS1wcmVzZXJ2ZXMgdGhlbSBhcyBpbmRpdmlkdWFsIHBhZ2VzLlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBNVVNUIG9ubHkgYmUgY2FsbGVkIG9uIHBhZ2VzIHRoYXQgYXJlIGN1cnJlbnRseSBwcmVzZXJ2ZWQuXG4rICogVGhlIEBvcmRlciBwcm92aWRlZCBNVVNUIG1hdGNoIHRoZSBvcmRlciB1c2VkIGR1cmluZyB0aGUgaW5pdGlhbFxuKyAqIHByZXNlcnZhdGlvbi5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitpbnQga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuK3tcbitcdGtob191bnByZXNlcnZlX3BhZ2VzKHBhZ2UsIDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuK1x0c3BsaXRfcGFnZShwYWdlLCBvcmRlcik7XG4rXHRyZXR1cm4ga2hvX3ByZXNlcnZlX3BhZ2VzKHBhZ2UsIDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKTtcbitcbiAvKiB2bWFsbG9jIGZsYWdzIEtITyBzdXBwb3J0cyAqL1xuICNkZWZpbmUgS0hPX1ZNQUxMT0NfU1VQUE9SVEVEX0ZMQUdTXHQoVk1fQUxMT0MgfCBWTV9BTExPV19IVUdFX1ZNQVApXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMjoyODoyMS4xNjg2MDEyOThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzIzMzkwNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2V4ZWMgSGFuZG92ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXkncmUgaW50cm9kdWNpbmcgc29tZSBrZXkgY2hhbmdlcyBmb3IgS2V4ZWMgSGFuZG92ZXIgKEtITykuIFNwZWNpZmljYWxseSwgdGhleSd2ZSBhZGRlZCBhIGZ1bmN0aW9uIGNhbGxlZCBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AgYW5kIG1vZGlmaWVkIGEgZmV3IGV4aXN0aW5nIG9uZXM6IGBraG9fcmFkaXhfYWRkX3BhZ2VgLCBga2hvX3JhZGl4X2RlbF9wYWdlYCwgYW5kIGBraG9fcmFkaXhfd2Fsa190cmVlYC4gVGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbiByZXZvbHZlcyBhcm91bmQgYSBuZXcgYGVudW0ga2hvX3BhZ2VfdHlwZWAsIGRpc3Rpbmd1aXNoaW5nIGJldHdlZW4gYEtIT19QQUdFX0NPTlRJR2AgYW5kIGBLSE9fUEFHRV9TUExJVGAuIFRoaXMgbWFrZXMgc2Vuc2U7IGhhbmRsaW5nIHBhZ2Ugc3BsaXRzIGlzIGVzc2VudGlhbCBmb3IgYSBoYW5kb3ZlciBwcm9jZXNzIGxpa2UgS2V4ZWMuIFRoZXkndmUgbGlua2VkIHRoZSBjaGFuZ2VzIHRvIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYC5cblxuSG9sZCBvbi4uLiBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AuLi4gdGhhdCBmaWxlIHBhdGggZmVlbHMgYSBsaXR0bGUgb2ZmLiBJcyB0aGF0IHN0YW5kYXJkLCBvciBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGlzIGlzIGFuIGFjdHVhbCB2YWxpZCBwYXRoIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBCZWZvcmUgSSBwcm9jZWVkLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBmaWxlIHJlYWxseSBleGlzdHMuIEFsc28sIEkgYmV0dGVyIGNvbmZpcm0gdGhhdCBgQ09ORklHX0tFWEVDX0hBTkRPVkVSYCBpcyB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgYWxsIG9mIHRoaXMuIEl0J3MgY3J1Y2lhbCB0aGF0IHRoaXMgd2hvbGUgZmVhdHVyZSBpcyBjb3JyZWN0bHkgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg1MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAyOjI4OjI1LjQ5MTk5MzQ5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjMxNTc5NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTI2PXZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoyNzppbnQga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjgtaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0ciwgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTY3PXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKSB7IH1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNjgtXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjY5OnN0YXRpYyBpbmxpbmUgaW50IGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTcwLVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTEwMTk9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfcGFnZXMpO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDIxLS8qKlxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTAyMjogKiBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzIC0gc3BsaXQgY29udGlndW91cyBwYWdlcyB0aGF0IGFyZSBwcmVzZXJ2ZWRcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMjMtICogQHBhZ2U6IGZpcnN0IHBhZ2UgaW4gdGhlIGxpc3QuXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMzUtICovXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDM2OmludCBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDM3LXtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTA0MS19XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDQyOkVYUE9SVF9TWU1CT0xfR1BMKGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTA0My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDI6Mjg6MjkuMTIzNTgyNDM5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3NTQzMzA4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uZmlndXJhdGlvbiBEaWFnbm9zdGljczogQSBRdWljayBQdWxzZSBDaGVjayoqXG5cbk9rYXksIHNvIEnigJl2ZSByZWNlaXZlZCBjb25maXJtYXRpb24uICpZZXMsIGl0IGRvZXMuKiBMZXQncyBkcmlsbCBkb3duIGludG8gdGhlIHBvdGVudGlhbCBzb3VyY2VzIG9mIHRoaXMgYmVoYXZpb3IuIE15IGd1dCBmZWVsaW5nIGlzIHdlJ3JlIGxvb2tpbmcgYXQgYSBjb25maWd1cmF0aW9uIGlzc3VlLCBhIHN1YnRsZSBkcmlmdCBpbiBzZXR0aW5ncyB0aGF04oCZcyBtYW5pZmVzdGluZyBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uIFRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzIGFuZCBkaXZlIGludG8gdGhlIGNvbmZpZ3MuIFRoaXMgaXNu4oCZdCBhIGRlZXAgZGl2ZSB5ZXQ7IGp1c3QgYSByYXBpZCBkaWFnbm9zdGljIHNjYW4gZm9yIHRoZSB1c3VhbCBzdXNwZWN0czogbWlzY29uZmlndXJlZCBwZXJtaXNzaW9ucywgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgaGF2ZW4ndCBwcm9wYWdhdGVkIGNvcnJlY3RseSwgb3IgYSBjYWNoaW5nIGlzc3VlIGFjdGluZyB1cC4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBpZGVudGlmeSB0aGUgcHJvYmxlbSB3aXRoIGEgZmV3IGtleSBjaGVja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MjksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMjoyOToxMS44Nzc5MTU1MzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgyNDQ4Njg0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS0VYRUNfSEFORE9WRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZz0zPW1lbnUgXFxcIkxpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlclxcXCJcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTQtXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo1OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUlxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNi1cXHRib29sIFxcXCJrZXhlYyBoYW5kb3ZlclxcXCJcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMTctXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzoxODpjb25maWcgS0VYRUNfSEFORE9WRVJfREVCVUdcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE5LVxcdGJvb2wgXFxcIkVuYWJsZSBLZXhlYyBIYW5kb3ZlciBkZWJ1ZyBjaGVja3NcXFwiXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI2LVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mjc6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHRlNcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI4LVxcdGJvb2wgXFxcImtleGVjIGhhbmRvdmVyIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zNy1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjM4OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVFxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRW5hYmxlIGtleGVjIGhhbmRvdmVyIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAyOjI5OjE1LjcwMjQwOTQ5OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMjA2NDI4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkIGFuZCBhcHByb2FjaGluZyB0aGlzIHN5c3RlbWF0aWNhbGx5OlxuXG4qKkNoZWNraW5nIGZvciBVc2FnZSBvZiBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AqKlxuXG5BbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaG93IHdpZGVseSB0aGlzIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBCZWZvcmUgSSBkZWx2ZSBpbnRvIGFueXRoaW5nIGVsc2UsIG9yIG1ha2UgYW55IGFzc3VtcHRpb25zIGFib3V0IGl0cyBwdXJwb3NlIG9yIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZS4gSXMgdGhpcyBhIGNvcmUgY29tcG9uZW50PyBJcyBpdCBvbmx5IHVzZWQgaW4gYSBzcGVjaWZpYyBtb2R1bGU/IE9yIHBlcmhhcHMgaXQncyBhIGZvcmdvdHRlbiBhcnRpZmFjdCBmcm9tIGFuIGVhcmxpZXIgcHJvamVjdD8gSSBuZWVkIHRvIGtub3cgaG93IG1hbnkgcGxhY2VzIGl0IHRvdWNoZXMsIGlmIGFueS4gIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGViYXNlLiBXaGVyZSdzIGl0IHVzZWQ/IFdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBpbnRlcmFjdCB3aXRoIGl0PyBUaGF0IHdpbGwgZ3VpZGUgbXkgbmV4dCBzdGVwcy4gVGhpcyBpcyBqdXN0IHJlY29ubmFpc3NhbmNlLiBHYXRoZXIgaW5mb3JtYXRpb24sIGJlZm9yZSBJIGRvIGFueXRoaW5nIGVsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNjMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMjoyOToyMy4wMjMwNTUwMjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczNTA2NzI0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0yNj12b2lkIGtob191bnByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6Mjc6aW50IGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTI4LWludCBraG9fcHJlc2VydmVfdm1hbGxvYyh2b2lkICpwdHIsIHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD02Nz1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcykgeyB9XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTY4LVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo2OTpzdGF0aWMgaW5saW5lIGludCBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLFxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC03MC1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMDE5PUVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3BhZ2VzKTtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAyMS0vKipcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMjI6ICoga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyAtIHNwbGl0IGNvbnRpZ3VvdXMgcGFnZXMgdGhhdCBhcmUgcHJlc2VydmVkXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDIzLSAqIEBwYWdlOiBmaXJzdCBwYWdlIGluIHRoZSBsaXN0Llxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDM1LSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTAzNjppbnQga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAzNy17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDEtfVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTA0MjpFWFBPUlRfU1lNQk9MX0dQTChraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAyOjI5OjI1Ljc1ODEyNzk5MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTkxOTQyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBBc3Nlc3NtZW50OiBPYnNlcnZpbmcgTW9kaWZpY2F0aW9uLCBTZWVraW5nIFVzYWdlKipcblxuT2theSwgc28gSSdtIHNlZWluZyBubyBhY3RpdmUgdXNlcnMgcmlnaHQgbm93IOKAkyB0aGF0J3MgdGhlIGltbWVkaWF0ZSBzdGF0ZS4gSG93ZXZlciwgbXkgaW50ZXJuYWwgZmxhZ3MgYXJlIHVwIGJlY2F1c2UgSSd2ZSBub3RpY2VkIG1vZGlmaWNhdGlvbnMgdG8gYGtob19wcmVzZXJ2ZV9wYWdlc2AgYW5kIGBraG9fdW5wcmVzZXJ2ZV9wYWdlc2AuIFRoaXMgaXMgc2lnbmlmaWNhbnQ7IHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGNvcmUgdG8gc29tZSBrZXkgcHJvY2VzcywgZXZlbiBpZiBubyBvbmUgaXMgZXhwbGljaXRseSAqdXNpbmcqIHRoZW0gYXQgdGhlIG1vbWVudC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icy4gSXQncyB0aW1lIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiB0aG9zZSBtb2RpZmllZCBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5IHdlcmUgdG91Y2hlZCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhvc2UgY2hhbmdlcyBtaWdodCBoYXZlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTg2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDI6Mjk6MjguNjE3MzI0Njg0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjMyMjU5MzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtob19wcmVzZXJ2ZV9wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MjQ9dm9pZCBraG9fdW5wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MjU6aW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTI2LXZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTYwPXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKSB7IH1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNjEtXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjYyOnN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC02My17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTQ1Mz1FWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9mb2xpbyk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ2MC0gKiBSZXN0b3JlIGEgY29udGlndW91cyBsaXN0IG9mIG9yZGVyIDAgcGFnZXMgdGhhdCB3YXMgcHJlc2VydmVkIHdpdGhcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ2MTogKiBraG9fcHJlc2VydmVfcGFnZXMoKS5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ2Mi0gKlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz05MDc9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfZm9saW8pO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTA4LVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTA5OnN0YXRpYyB1bnNpZ25lZCBpbnQgX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MTAtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTM4PXN0YXRpYyB2b2lkIF9fa2hvX3VucHJlc2VydmUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NDEtXFx0d2hpbGUgKHBmbiBcXHUwMDNjIGVuZF9wZm4pIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk0MjpcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTQzLVxcdFxcdGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NTQtLyoqXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5NTU6ICoga2hvX3ByZXNlcnZlX3BhZ2VzIC0gcHJlc2VydmUgY29udGlndW91cyBwYWdlcyBhY3Jvc3Mga2V4ZWNcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk1Ni0gKiBAcGFnZTogZmlyc3QgcGFnZSBpbiB0aGUgbGlzdC5cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTYzLSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTY0OmludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NjUte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NzgtXFx0d2hpbGUgKHBmbiBcXHUwMDNjIGVuZF9wZm4pIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk3OTpcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTgwLVxcdFxcdGVudW0ga2hvX3BhZ2VfdHlwZSB0eXBlO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05OTgtfVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTk5OkVYUE9SVF9TWU1CT0xfR1BMKGtob19wcmVzZXJ2ZV9wYWdlcyk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDAwLVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDA3LSAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgc2FtZSBAcGFnZSBhbmQgQG5yX3BhZ2VzIGFzIHRoZSBjb3JyZXNwb25kaW5nXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDA4OiAqIGtob19wcmVzZXJ2ZV9wYWdlcygpIGNhbGwuIFVucHJlc2VydmluZyBhcmJpdHJhcnkgc3ViLXJhbmdlcyBvZiBsYXJnZXJcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMDktICogcHJlc2VydmVkIGJsb2NrcyBpcyBub3Qgc3VwcG9ydGVkLlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMDM2PWludCBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMzktXFx0c3BsaXRfcGFnZShwYWdlLCBvcmRlcik7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDQwOlxcdHJldHVybiBraG9fcHJlc2VydmVfcGFnZXMocGFnZSwgMVVMIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDEtfVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMDc1PXN0YXRpYyBzdHJ1Y3Qga2hvX3ZtYWxsb2NfY2h1bmsgKm5ld192bWFsbG9jX2NodW5rKHN0cnVjdCBraG9fdm1hbGxvY19jaHVuayAqY3VyKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDgzLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTA4NDpcXHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXModmlydF90b19wYWdlKGNodW5rKSwgMSk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDg1LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTExMjU9aW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0ciwgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTExNTAtXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMTUxOlxcdFxcdGVyciA9IGtob19wcmVzZXJ2ZV9wYWdlcyh2bS1cXHUwMDNlcGFnZXNbaV0sIG5yX2NvbnRpZ19wYWdlcyk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMTUyLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9tZW1ibG9jay5jPTI1Mjg9c3RhdGljIGludCBfX2luaXQgcmVzZXJ2ZWRfbWVtX3ByZXNlcnZlKHZvaWQpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTI1MzctXFxubW0vbWVtYmxvY2suYzoyNTM4OlxcdFxcdGVyciA9IGtob19wcmVzZXJ2ZV9wYWdlcyhwYWdlLCBucl9wYWdlcyk7XFxubW0vbWVtYmxvY2suYy0yNTM5LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9tZW1ibG9jay5jPTI1NTc9c3RhdGljIGludCBfX2luaXQgcHJlcGFyZV9raG9fZmR0KHZvaWQpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTI1NjktXFx0ZmR0ID0gcGFnZV90b192aXJ0KGZkdF9wYWdlKTtcXG5tbS9tZW1ibG9jay5jOjI1NzA6XFx0ZXJyID0ga2hvX3ByZXNlcnZlX3BhZ2VzKGZkdF9wYWdlLCAxKTtcXG5tbS9tZW1ibG9jay5jLTI1NzEtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDI6Mjk6MzEuMjQ5NTkxMzc1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNTMwMzYyMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgTGl2ZSBVcGRhdGUgZm9yIEtleGVjIEhhbmRvdmVyKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNgLCB3aGljaCwgYXMgSSByZWNhbGwsIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgYENPTkZJR19LRVhFQ19IQU5ET1ZFUmAgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBwcmV0dHkgZnVuZGFtZW50YWwgc3R1ZmYsIGNvcmUga2VybmVsIGNvZGUgdGhhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5LiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uLCBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AsIGFuZCB0aGVuIGdvZXMgb24gdG8gbW9kaWZ5IGEgZmV3IG90aGVyczogYGtob19yYWRpeF9hZGRfcGFnZWAsIGBraG9fcmFkaXhfZGVsX3BhZ2VgLCBhbmQgYGtob19yYWRpeF93YWxrX3RyZWVgLiBUaGUgY29tbW9uIHRocmVhZCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IGBlbnVtIGtob19wYWdlX3R5cGVgLCBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuIGBLSE9fUEFHRV9DT05USUdgIGFuZCBgS0hPX1BBR0VfU1BMSVRgLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyBhbGwgcmVsYXRlZCB0byBoYW5kbGluZyBtZW1vcnkgdGhhdCBtaWdodCBiZSBmcmFnbWVudGVkIG9yIHNwbGl0IGR1cmluZyB0aGUgaGFuZG92ZXIgcHJvY2Vzcy4gSXQncyBsaWtlbHkgdHJ5aW5nIHRvIGltcHJvdmUgdGhlIHJlbGlhYmlsaXR5IG9yIGVmZmljaWVuY3kgb2YgcHJlc2VydmluZyBhbmQgcmVzdG9yaW5nIG1lbW9yeSBhY3Jvc3MgdGhlIGtleGVjIHRyYW5zaXRpb24uXG5cbkl0J3MgYWxzbyB0b3VjaGluZyBga2hvX3ByZXNlcnZlX3BhZ2VzYCBhbmQgYGtob191bnByZXNlcnZlX3BhZ2VzYCwgd2hpY2ggYXJlIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMgZm9yIGhhbmRsaW5nIHRoZXNlIHNwbGl0IHBhZ2VzLiBUaGlzIGlzIGFsbCBmdW5jdGlvbmFsIGNvZGUsIGl0J3Mgbm90IHNpbXBseSByZWZhY3RvcmluZywgc28gaXQgbXVzdCBiZSBhZGRyZXNzaW5nIHNvbWUgcmVhbC13b3JsZCBpc3N1ZSBpbiBLZXhlYyBoYW5kb3Zlci4gSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfS0VYRUNfSEFORE9WRVJgIGlzIGVuYWJsZWQgaW4gb3VyIGNvbmZpZ3VyYXRpb24gdG8gYmUgc3VyZSB0aGlzIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgc3lzdGVtLCBpdCdzIGFsd2F5cyBnb29kIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzU5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAyOjI5OjUxLjc3OTk1NTgwM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0MDI3NTk3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS0VYRUNfSEFORE9WRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZz0zPW1lbnUgXFxcIkxpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlclxcXCJcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTQtXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo1OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUlxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNi1cXHRib29sIFxcXCJrZXhlYyBoYW5kb3ZlclxcXCJcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMTctXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzoxODpjb25maWcgS0VYRUNfSEFORE9WRVJfREVCVUdcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE5LVxcdGJvb2wgXFxcIkVuYWJsZSBLZXhlYyBIYW5kb3ZlciBkZWJ1ZyBjaGVja3NcXFwiXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI2LVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mjc6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHRlNcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI4LVxcdGJvb2wgXFxcImtleGVjIGhhbmRvdmVyIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zNy1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjM4OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVFxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRW5hYmxlIGtleGVjIGhhbmRvdmVyIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAyOjI5OjU0LjUyMDIzNzM3MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzYwOTUyNDk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYSBLZXJuZWwgTGl2ZSBVcGRhdGUgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBzbyBhIHBhdGNoIGhhcyBoaXQgbXkgZGVzayBhbmQgaXQgdG91Y2hlcyBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AuIE15IGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5czogKndoYXQgZWxzZSBpcyBhZmZlY3RlZD8qIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCdzIG5vdCBlbm91Z2ggdG8ganVzdCBsb29rIGF0IHRoZSBjb2RlIG1vZGlmaWVkLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBkZXBlbmRlbmNpZXMgb3Igc2lkZSBlZmZlY3RzLlxuXG5UaGVyZWZvcmUsIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBhc3NvY2lhdGVkIGBNYWtlZmlsZWAuIEl0IGlzIGNydWNpYWwgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHJpcHBsZXMgb3V0d2FyZCwgb3IgaXMgbG9jYWxpemVkIHRvIHRoZSBga2V4ZWNfaGFuZG92ZXJgIG1vZHVsZS4gV2hhdCBvdGhlciBidWlsZCBjb25maWd1cmF0aW9ucywgaW5jbHVkZSBmaWxlcywgb3IgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlIGltcGFjdGVkPyBJZiBpdCdzIGEgY3JpdGljYWwgbW9kdWxlIGxpa2UgdGhpcywgSSBoYXZlIHRvIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGNoYW5nZXMgb3IgcmVsYXRlZCBmaWxlcy4gR290dGEgY292ZXIgYWxsIHRoZSBiYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MDgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMjozMDoyOC4xMjk3NjU4NjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NDk0OTAxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2V4ZWNfaGFuZG92ZXIub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbGl2ZXVwZGF0ZS9NYWtlZmlsZT0zPWx1by15IDo9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvTWFrZWZpbGUtOS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfS0VYRUNfSEFORE9WRVIpXFx0XFx0Kz0ga2V4ZWNfaGFuZG92ZXIub1xcbmtlcm5lbC9saXZldXBkYXRlL01ha2VmaWxlLTExLW9iai0kKENPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVRylcXHQrPSBrZXhlY19oYW5kb3Zlcl9kZWJ1Zy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAyOjMwOjMxLjA3OTI2MTkyN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTExMzI1Mzc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgS2V4ZWMgSGFuZG92ZXIgRnVuY3Rpb25hbGl0eSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkgc2VlIGBDT05GSUdfS0VYRUNfSEFORE9WRVJgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UncmUgZGVhbGluZyB3aXRoIGhlcmUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZXNlOiBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AsIGBraG9fcmFkaXhfYWRkX3BhZ2VgLCBga2hvX3JhZGl4X2RlbF9wYWdlYCwgYGtob19wcmVzZXJ2ZV9wYWdlc2AsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlc2AsIGFuZCBga2hvX3JhZGl4X3dhbGtfdHJlZWAuIExldCdzIGNvbmZpcm0gdGhhdCBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AgaXMgY29ycmVjdGx5IGV4cG9ydGVkIGFuZCByZWFjaGFibGUuIEFoLCB5ZXMsIGBFWFBPUlRfU1lNQk9MX0dQTChraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzKWAgY29uZmlybXMgaXQncyBleHBvcnRlZCBhbmQgdmlzaWJsZSB0byBtb2R1bGVzIHdpdGggYSBHUEwgbGljZW5zZS4gVGhpcyBpcyBhIGZyZXNoIGZ1bmN0aW9uLCBpbnRlcmVzdGluZy4gVGhlIHJlc3QgYXBwZWFyIHRvIGJlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGV4aXN0aW5nIGZ1bmN0aW9ucy4gQ2hlY2tpbmcuLi4gYGtob19wcmVzZXJ2ZV9wYWdlc2AgaXMgZXhwb3J0ZWQsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlc2AgaXMgZXhwb3J0ZWQsIGBraG9fcmFkaXhfYWRkX3BhZ2VgIGlzIGV4cG9ydGVkLCBga2hvX3JhZGl4X2RlbF9wYWdlYCBpcyBleHBvcnRlZCwgYW5kIGBraG9fcmFkaXhfd2Fsa190cmVlYCBpcyBleHBvcnRlZC4gV2FpdCwgYGtob19yYWRpeF9hZGRfcGFnZWAgYW5kIGBraG9fcmFkaXhfZGVsX3BhZ2VgIGFyZSBleHBvcnRlZD8gSG1tLCB0aGF0J3Mgbm90IHdoYXQgSSBleHBlY3RlZC4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhZGRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODcyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAyOjMxOjAyLjE5MjUxNzU3OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIwNTk3OTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MX0dQTFxcXFwoa2hvX3JhZGl4X2FkZF9wYWdlXFxcXClcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xNzQ9aW50IGtob19yYWRpeF9hZGRfcGFnZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTI0Mi19XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoyNDM6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3JhZGl4X2FkZF9wYWdlKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTI0NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDI6MzE6MDUuMzk4NTAyNDA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1MzExNDQ0Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtITyBQYWdlIFNwbGl0dGluZyBQYXRjaCoqXG5cbk9rYXksIHllcywgSSd2ZSBnb3QgdGhpcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGVzZSBuZXcgYW5kIG1vZGlmaWVkIHN0YXRpYyBmdW5jdGlvbnM6IGBraG9faXNfcGFnZV9zcGxpdGAsIGBraG9fcmVzdG9yZV9yZWZjb3VudHNgLCBhbmQgdGhlIHVwZGF0ZWQgcmFkaXggZW5jb2RpbmcvZGVjb2Rpbmc6IGBraG9fcmFkaXhfZW5jb2RlX2tleWAgYW5kIGBraG9fcmFkaXhfZGVjb2RlX2tleWAuXG5cbk5vdywgbGV0J3MgZm9jdXMgb24gdGhlc2Uga2V5IHN5bWJvbHMgdGhhdCBzZWVtIGNlbnRyYWwgdG8gdGhlIGNoYW5nZXM6IGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCwgYGtob19wcmVzZXJ2ZV9wYWdlc2AsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlc2AsIGBraG9fcmFkaXhfYWRkX3BhZ2VgLCBga2hvX3JhZGl4X2RlbF9wYWdlYCwgYGtob19yYWRpeF93YWxrX3RyZWVgLCBhbmQsIGhvbGQgb24sIGBraG9fcHJlc2VydmVfZm9saW9gIGFuZCBga2hvX3VucHJlc2VydmVfZm9saW9gLiBBaCwgcmlnaHQsIHRob3NlIGxhc3QgdHdvIGFyZSBhbHNvIG1vZGlmaWVkIHRvIHVzZSBgS0hPX1BBR0VfQ09OVElHYCwgZ29vZCBjYXRjaC4gSSdsbCBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aG9zZS5cblxuSnVzdCBkb3VibGUtY2hlY2tpbmcsIGlzIGBLRVhFQ19IQU5ET1ZFUmAgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnIGhlcmU/IFllcywgYENPTkZJR19LRVhFQ19IQU5ET1ZFUmAgc2VlbXMgc3VmZmljaWVudC5cblxuTm93LCBhIGNydWNpYWwgcG9pbnQ6IGlzIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCBhY3R1YWxseSByZWFjaGFibGU/IEl0ICppcyogZXhwb3J0ZWQsIG1lYW5pbmcgbW9kdWxlcyBjb3VsZCBwb3RlbnRpYWxseSBjYWxsIGl0LiBCdXQgaXMgdGhlcmUgYSBtb2R1bGUgdGhhdCAqZG9lcyo/IE9rYXksIEkndmUgc2VhcmNoZWQsIGFuZCBmb3VuZCBubyBkaXJlY3QgY2FsbGVycy4gSG93ZXZlciwgaXQncyBleHBvcnRlZCBhbmQgY291bGQgYmUgdXNlZCBpbiBhIGxhdGVyIHBhdGNoLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaXQgbWVhbnMgdGhhdCBzeXprYWxsZXIgKmNvdWxkKiBnZW5lcmF0ZSBjYWxscyB0byBpdCBpZiBpdCBrbm93cyBhYm91dCBpdC4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byB0aGUgY29yZSBrZXJuZWwg4oCTIHNwZWNpZmljYWxseSBsaXZldXBkYXRlIGFuZCBrZXhlY19oYW5kb3ZlciDigJMgaXQncyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSByYWRpeCB0cmVlIGFuZCBwYWdlIHByZXNlcnZhdGlvbiBsb2dpYyBhcmUgYmVpbmcgbW9kaWZpZWQgZm9yIHNwbGl0IHBhZ2VzLCBzbyB3ZSBuZWVkIHRvIHRlc3QgdGhpcyB0aG9yb3VnaGx5LlxuXG5BbHJpZ2h0LCBsZXQncyBmb3JtdWxhdGUgbXkgcmVzcG9uc2UuXG5cbioqV29ydGhGdXp6aW5nOiB0cnVlKipcblxuKipGb2N1c1N5bWJvbHM6KipcblxuKiAgIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYFxuKiAgIGBraG9fcHJlc2VydmVfcGFnZXNgXG4qICAgYGtob191bnByZXNlcnZlX3BhZ2VzYFxuKiAgIGBraG9fcmFkaXhfYWRkX3BhZ2VgXG4qICAgYGtob19yYWRpeF9kZWxfcGFnZWBcbiogICBga2hvX3JhZGl4X3dhbGtfdHJlZWBcbiogICBga2hvX3ByZXNlcnZlX2ZvbGlvYFxuKiAgIGBraG9fdW5wcmVzZXJ2ZV9mb2xpb2BcblxuKipFbmFibGVDb25maWdzOioqXG5cbiogICBgS0VYRUNfSEFORE9WRVJgXG5cbioqUmVhc29uaW5nOioqIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBga2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc2AgYW5kIG1vZGlmaWVzIHRoZSBLZXhlYyBIYW5kb3ZlciAoS0hPKSByYWRpeCB0cmVlIGxvZ2ljIHRvIHN1cHBvcnQgc3BsaXQgcGFnZXMuIEl0IHRvdWNoZXMgY29yZSBmdW5jdGlvbmFsaXR5LCBhbHRlcmluZyBmdW5jdGlvbnMgbGlrZSBga2hvX3JhZGl4X2FkZF9wYWdlYCwgYGtob19yYWRpeF9kZWxfcGFnZWAsIGFuZCB0aGUgcGFnZSBwcmVzZXJ2YXRpb24gbWV0aG9kcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJ3MgbGl2ZSB1cGRhdGUgbWVjaGFuaXNtLCBhbmQgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoYXQgdGhlIHJhZGl4IHRyZWUgYW5kIHBhZ2UgcHJlc2VydmF0aW9uIGxvZ2ljIGNvcnJlY3RseSBoYW5kbGUgc3BsaXQgcGFnZXMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCBpdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwncyBsaXZlIHVwZGF0ZSBtZWNoYW5pc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTUyLCJPdXRwdXRUb2tlbnMiOjIyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMjozMTozMC43MDk5NTA1NDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTgwMzE1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS0VYRUNfSEFORE9WRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzXCIsXG4gICAgXCJraG9fcHJlc2VydmVfcGFnZXNcIixcbiAgICBcImtob191bnByZXNlcnZlX3BhZ2VzXCIsXG4gICAgXCJraG9fcmFkaXhfYWRkX3BhZ2VcIixcbiAgICBcImtob19yYWRpeF9kZWxfcGFnZVwiLFxuICAgIFwia2hvX3JhZGl4X3dhbGtfdHJlZVwiLFxuICAgIFwia2hvX3ByZXNlcnZlX2ZvbGlvXCIsXG4gICAgXCJraG9fdW5wcmVzZXJ2ZV9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGtob19zcGxpdF9wcmVzZXJ2ZWRfcGFnZXNgIGFuZCBtb2RpZmllcyB0aGUgS2V4ZWMgSGFuZG92ZXIgKEtITykgcmFkaXggdHJlZSBsb2dpYyB0byBzdXBwb3J0IHNwbGl0IHBhZ2VzLiBJdCBjaGFuZ2VzIGNvcmUgZnVuY3Rpb25zIGxpa2UgYGtob19yYWRpeF9hZGRfcGFnZWAsIGBraG9fcmFkaXhfZGVsX3BhZ2VgLCBga2hvX3ByZXNlcnZlX3BhZ2VzYCwgYW5kIGBraG9fdW5wcmVzZXJ2ZV9wYWdlc2AuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCdzIGxpdmUgdXBkYXRlIG1lY2hhbmlzbSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHJhZGl4IHRyZWUgYW5kIHBhZ2UgcHJlc2VydmF0aW9uIGxvZ2ljIGhhbmRsZXMgc3BsaXQgcGFnZXMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktFWEVDX0hBTkRPVkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2hvX3NwbGl0X3ByZXNlcnZlZF9wYWdlc1wiLFxuICAgIFwia2hvX3ByZXNlcnZlX3BhZ2VzXCIsXG4gICAgXCJraG9fdW5wcmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwia2hvX3JhZGl4X2FkZF9wYWdlXCIsXG4gICAgXCJraG9fcmFkaXhfZGVsX3BhZ2VcIixcbiAgICBcImtob19yYWRpeF93YWxrX3RyZWVcIixcbiAgICBcImtob19wcmVzZXJ2ZV9mb2xpb1wiLFxuICAgIFwia2hvX3VucHJlc2VydmVfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBraG9fc3BsaXRfcHJlc2VydmVkX3BhZ2VzYCBhbmQgbW9kaWZpZXMgdGhlIEtleGVjIEhhbmRvdmVyIChLSE8pIHJhZGl4IHRyZWUgbG9naWMgdG8gc3VwcG9ydCBzcGxpdCBwYWdlcy4gSXQgY2hhbmdlcyBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBraG9fcmFkaXhfYWRkX3BhZ2VgLCBga2hvX3JhZGl4X2RlbF9wYWdlYCwgYGtob19wcmVzZXJ2ZV9wYWdlc2AsIGFuZCBga2hvX3VucHJlc2VydmVfcGFnZXNgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwncyBsaXZlIHVwZGF0ZSBtZWNoYW5pc20gYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSByYWRpeCB0cmVlIGFuZCBwYWdlIHByZXNlcnZhdGlvbiBsb2dpYyBoYW5kbGVzIHNwbGl0IHBhZ2VzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow49hdt[1] Phase: Succeeded StartedAt: 2026-07-03 02:31:56 +0000 UTC FinishedAt: 2026-07-03 02:31:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-03 02:31:56 +0000 UTC FinishedAt: 2026-07-03 02:31:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2] Phase: Succeeded StartedAt: 2026-07-03 02:31:56 +0000 UTC FinishedAt: 2026-07-03 06:28:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 02:31:56 +0000 UTC FinishedAt: 2026-07-03 06:28:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 02:31:56 +0000 UTC FinishedAt: 2026-07-03 02:32:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 02:31:56 +0000 UTC FinishedAt: 2026-07-03 02:32:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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-workflow49hdt/series-workflow49hdt-convert-artifact-2813638674/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 02:32:23 +0000 UTC FinishedAt: 2026-07-03 03:00:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 02:32:23 +0000 UTC FinishedAt: 2026-07-03 03:00:14 +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:*f1b5682b-11ec-4f0b-b245-4f3cc6e7e56c,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-workflow49hdt/series-workflow49hdt-convert-artifact-2813638674/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": "263d3d78-ebcc-491e-be29-9715fa6e3b18", "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-workflow49hdt/series-workflow49hdt-build-action-936327568/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 02:32:23 +0000 UTC FinishedAt: 2026-07-03 03:00:04 +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:*f1b5682b-11ec-4f0b-b245-4f3cc6e7e56c,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-workflow49hdt/series-workflow49hdt-convert-artifact-2813638674/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": "263d3d78-ebcc-491e-be29-9715fa6e3b18", "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-workflow49hdt/series-workflow49hdt-build-action-936327568/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:00:14 +0000 UTC FinishedAt: 2026-07-03 03:00:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:00:14 +0000 UTC FinishedAt: 2026-07-03 03:00:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:00:14 +0000 UTC FinishedAt: 2026-07-03 03:00:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:00:14 +0000 UTC FinishedAt: 2026-07-03 03:00:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-workflow49hdt/series-workflow49hdt-convert-artifact-3851539501/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:00:24 +0000 UTC FinishedAt: 2026-07-03 03:02:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:00:24 +0000 UTC FinishedAt: 2026-07-03 03:02:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*263d3d78-ebcc-491e-be29-9715fa6e3b18,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-workflow49hdt/series-workflow49hdt-build-action-936327568/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-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:02:24 +0000 UTC FinishedAt: 2026-07-03 03:02:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:02:24 +0000 UTC FinishedAt: 2026-07-03 03:02:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:02:24 +0000 UTC FinishedAt: 2026-07-03 03:23:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:02:24 +0000 UTC FinishedAt: 2026-07-03 03:23:44 +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:*f1b5682b-11ec-4f0b-b245-4f3cc6e7e56c,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-workflow49hdt/series-workflow49hdt-convert-artifact-3851539501/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": "8d6d0d4b-3a8d-47a2-afb2-6bdb5a8e26a3", "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-workflow49hdt/series-workflow49hdt-build-action-3604355209/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:02:24 +0000 UTC FinishedAt: 2026-07-03 03:23:33 +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:*f1b5682b-11ec-4f0b-b245-4f3cc6e7e56c,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-workflow49hdt/series-workflow49hdt-convert-artifact-3851539501/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": "8d6d0d4b-3a8d-47a2-afb2-6bdb5a8e26a3", "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-workflow49hdt/series-workflow49hdt-build-action-3604355209/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:23:44 +0000 UTC FinishedAt: 2026-07-03 03:23:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:23:44 +0000 UTC FinishedAt: 2026-07-03 03:23:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:23:44 +0000 UTC FinishedAt: 2026-07-03 03:25:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:23:44 +0000 UTC FinishedAt: 2026-07-03 03:25:38 +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:*8d6d0d4b-3a8d-47a2-afb2-6bdb5a8e26a3,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-workflow49hdt/series-workflow49hdt-build-action-3604355209/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-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:25:48 +0000 UTC FinishedAt: 2026-07-03 06:28:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:25:48 +0000 UTC FinishedAt: 2026-07-03 06:28:36 +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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"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:*263d3d78-ebcc-491e-be29-9715fa6e3b18,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8d6d0d4b-3a8d-47a2-afb2-6bdb5a8e26a3,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-workflow49hdt/series-workflow49hdt-build-action-936327568/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-workflow49hdt/series-workflow49hdt-build-action-3604355209/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:25:48 +0000 UTC FinishedAt: 2026-07-03 03:25:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:25:48 +0000 UTC FinishedAt: 2026-07-03 03:25:55 +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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"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-workflow49hdt/series-workflow49hdt-convert-artifact-3052293778/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:25:48 +0000 UTC FinishedAt: 2026-07-03 03:25:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:25:48 +0000 UTC FinishedAt: 2026-07-03 03:25:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:25:48 +0000 UTC FinishedAt: 2026-07-03 03:25:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:25:58 +0000 UTC FinishedAt: 2026-07-03 06:28:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow49hdt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"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":["kho_split_preserved_pages","kho_preserve_pages","kho_unpreserve_pages","kho_radix_add_page","kho_radix_del_page","kho_radix_walk_tree","kho_preserve_folio","kho_unpreserve_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f4b4fac1867633ac17c35842f03933f6a7a4425f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KEXEC_HANDOVER"],"series_id":"713d9168-6cd6-437c-9a69-b2bd109e2e23","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-03 03:25:58 +0000 UTC FinishedAt: 2026-07-03 06:28:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*263d3d78-ebcc-491e-be29-9715fa6e3b18,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8d6d0d4b-3a8d-47a2-afb2-6bdb5a8e26a3,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-workflow49hdt/series-workflow49hdt-build-action-936327568/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-workflow49hdt/series-workflow49hdt-build-action-3604355209/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-workflow49hdt/series-workflow49hdt-convert-artifact-3052293778/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,}