Name: series-workflowx7bp7 Phase: Succeeded StartedAt: 2026-09-09 21:59:58 +0000 UTC FinishedAt: 2026-09-10 01:48:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[0] Phase: Succeeded StartedAt: 2026-09-09 21:59:58 +0000 UTC FinishedAt: 2026-09-09 22:02:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 21:59:58 +0000 UTC FinishedAt: 2026-09-09 22:02:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "163169ef-3d75-4bd6-99d5-8b5a1a932fcb" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugepage_subpool_get_pages", "hugepage_subpool_put_pages", "hugetlb_reserve_pages", "alloc_hugetlb_folio", "hugetlbfs_statfs", "hugetlb_unreserve_pages", "hugepage_put_subpool" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJmc19zdGF0ZnMmIzM0OywKICAgICYjMzQ7aHVnZXRsYl91bnJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXBhZ2VfcHV0X3N1YnBvb2wmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3VicG9vbCBhY2NvdW50aW5nIGFuZCByZXNlcnZhdGlvbiBsb2dpYyBmb3IgaHVnZXRsYmZzIChpbmNsdWRpbmcgaHVnZXRsYl9zdWJwb29sX2dldF9wYWdlcywgaHVnZXRsYl9zdWJwb29sX3B1dF9wYWdlcywgc3RhdGZzIHJlcG9ydGluZywgYW5kIHJvbGxiYWNrIGhhbmRsaW5nIGluIGFsbG9jX2h1Z2V0bGJfZm9saW8gYW5kIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcykuXG5cbkFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBvciBtb2RpZmllZCAoc3VjaCBhcyBnYmxfcmVzdl9nZXQsIGdibF9yZXN2X3B1dCwgZ2JsX3Jlc3ZfYWNjdGVkLCBsaW1pdCwgYW5kIGZyZWVfcGFnZXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgYWNyb3NzIGFsbCBjb250cm9sIGZsb3cgcGF0aHMuIE5vIG5ldyBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBubyBwYWRkaW5nIGJ5dGVzIGFyZSBleHBvc2VkLCBhbmQgbm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGlzIHBhc3NlZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29uZGl0aW9uYWwgYnJhbmNoaW5nLlxuXG5Qb3RlbnRpYWwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBwYWdlIGFjY291bnRpbmcgaW5hY2N1cmFjaWVzLCBjb25jdXJyZW5jeS9zeW5jaHJvbml6YXRpb24gdW5kZXIgcmFjZSBjb25kaXRpb25zLCBvciBtZW1vcnkgZXhoYXVzdGlvbiwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGJmcyBzdWJwb29sIGFjY291bnRpbmcgbG9naWMgYW5kIHJlc2VydmF0aW9uIGVycm9yLXVud2luZCBwYXRocyBpbiBtbS9odWdldGxiLmMgYW5kIGZzL2h1Z2V0bGJmcy9pbm9kZS5jLiBTcGVjaWZpY2FsbHksIGl0IGNoYW5nZXMgaG93IGB1c2VkX2hwYWdlc2AgYW5kIGByc3ZfaHBhZ2VzYCBhcmUgdXBkYXRlZCBpbiBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoKWAgYW5kIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcygpYCwgYWx0ZXJzIHN1YnBvb2wgcmVsZWFzZSBjaGVja3MgaW4gYHN1YnBvb2xfaXNfZnJlZSgpYCwgZml4ZXMgc3RhdGZzIGNhbGN1bGF0aW9uIGZvciB1bmJvdW5kZWQgc3VicG9vbHMgaW4gYGh1Z2V0bGJmc19zdGF0ZnMoKWAsIGFuZCByZWZhY3RvcnMgZ2xvYmFsIG1lbW9yeSByZXNlcnZhdGlvbiByb2xsYmFja3MgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW8oKWAgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAuIFRoaXMgbG9naWMgaXMgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBodWdldGxiZnMgZmlsZXN5c3RlbSBtb3VudHMsIGFsbG9jYXRpb25zLCBhbmQgbW1hcCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2EzNzA1NGE3ZmQ5OTZiZTMwZTkwMzY1NTYxN2Y4NTZlZmM3NjZkMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMjI6MDE6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcbmluZGV4IGE0OTExNWRiMThjNzYuLmQyNDQ1ODNmZGNiYzMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG5AQCAtMzE0LDIxICYjNDM7MzE0LDggQEAgaHVnZSBwYWdlcy4gIElmIHRoZXkgY2FuIG5vdCBiZSByZXNlcnZlZCwgdGhlIG1vdW50IGZhaWxzLlxuIFRoZSByb3V0aW5lcyBodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKSBhcmUgY2FsbGVkIHdoZW4gcGFnZXMgYXJlXG4gb2J0YWluZWQgZnJvbSBvciByZWxlYXNlZCBiYWNrIHRvIGEgc3VicG9vbC4gIFRoZXkgcGVyZm9ybSBhbGwgc3VicG9vbFxuIGFjY291bnRpbmcsIGFuZCB0cmFjayBhbnkgcmVzZXJ2YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbC5cbi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMgYXJlIHBhc3NlZCB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgYnkgd2hpY2hcbi10byBhZGp1c3QgdGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudCAoZG93biBmb3IgZ2V0LCB1cCBmb3IgcHV0KS4gIE5vcm1hbGx5LFxuLXRoZXkgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIHRoYXQgd2FzIHBhc3NlZCBvciBhbiBlcnJvciBpZiBub3QgZW5vdWdoIHBhZ2VzXG4tZXhpc3QgaW4gdGhlIHN1YnBvb2wuXG4tXG4tSG93ZXZlciwgaWYgcmVzZXJ2ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbCBhIHJldHVybiB2YWx1ZSBsZXNzXG4tdGhhbiB0aGUgcGFzc2VkIHZhbHVlIG1heSBiZSByZXR1cm5lZC4gIFRoaXMgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB0aGVcbi1udW1iZXIgb2YgYWRkaXRpb25hbCBnbG9iYWwgcG9vbCBhZGp1c3RtZW50cyB3aGljaCBtdXN0IGJlIG1hZGUuICBGb3IgZXhhbXBsZSxcbi1zdXBwb3NlIGEgc3VicG9vbCBjb250YWlucyAzIHJlc2VydmVkIGh1Z2UgcGFnZXMgYW5kIHNvbWVvbmUgYXNrcyBmb3IgNS5cbi1UaGUgMyByZXNlcnZlZCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnBvb2wgY2FuIGJlIHVzZWQgdG8gc2F0aXNmeSBwYXJ0XG4tb2YgdGhlIHJlcXVlc3QuICBCdXQsIDIgcGFnZXMgbXVzdCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBnbG9iYWwgcG9vbHMuICBUb1xuLXJlbGF5IHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGNhbGxlciwgdGhlIHZhbHVlIDIgaXMgcmV0dXJuZWQuICBUaGUgY2FsbGVyXG4taXMgdGhlbiByZXNwb25zaWJsZSBmb3IgYXR0ZW1wdGluZyB0byBvYnRhaW4gdGhlIGFkZGl0aW9uYWwgdHdvIHBhZ2VzIGZyb21cbi10aGUgZ2xvYmFsIHBvb2xzLlxuLVxuJiM0MztodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKSB1c2UgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIHBhc3NlZCB0byBhZGp1c3RcbiYjNDM7dGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudC5cbiBcbiBDT1cgYW5kIFJlc2VydmF0aW9uc1xuID09PT09PT09PT09PT09PT09PT09XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuaW5kZXggMjA5NDdmOGJkMDY1NC4uYWUxZjFmMzE0NzdmYyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuQEAgLTI0NiwxNSAmIzQzOzI0Niw4IEBAIGh1Z2VwYWdlX3N1YnBvb2znmoRtaW5faHBhZ2Vz5a2X5q615Lit6KKr6Lef6Liq44CC5Zyo5oyC6L295pe277yMaHVnZXRsYl9hY2N0X21lXG4g6KKr6LCD55So5Lul6aKE55WZ5oyH5a6a5pWw6YeP55qE5beo6aG144CC5aaC5p6c5a6D5Lus5LiN6IO96KKr6aKE55WZ77yM5oyC6L295bCx5Lya5aSx6LSl44CCXG4gXG4g5b2T5LuO5a2Q5rGg5Lit6I635Y+W5oiW6YeK5pS+6aG16Z2i5pe277yM5Lya6LCD55SoaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCnlh73mlbDjgIJcbi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXPooqvkvKDpgJLnu5nlt6jpobXmlbDph4/vvIzku6XmraTmnaXosIPmlbTlrZDmsaDnmoQg4oCc5bey55So6aG16Z2i4oCdIOiuoeaVsFxuLe+8iGdldOS4uuS4i+mZje+8jHB1dOS4uuS4iuWNh++8ieOAgumAmuW4uOaDheWGteS4i++8jOWmguaenOWtkOaxoOS4reayoeaciei2s+Wkn+eahOmhtemdou+8jOWug+S7rOS8mui/lOWbnuS4juS8oOmAkueahOebuOWQjOeahOWAvOaIllxuLeS4gOS4qumUmeivr+OAglxuLVxuLeeEtuiAjO+8jOWmguaenOmihOeVmeS4juWtkOaxoOebuOWFs+iBlO+8jOWPr+iDveS8mui/lOWbnuS4gOS4quWwj+S6juS8oOmAkuWAvOeahOi/lOWbnuWAvOOAgui/meS4qui/lOWbnuWAvOihqOekuuW/hemhu+i/m+ihjOeahOmineWkluWFqOWxgFxuLeaxoOiwg+aVtOeahOaVsOmHj+OAguS+i+Wmgu+8jOWBh+iuvuS4gOS4quWtkOaxoOWMheWQqzPkuKrpooTnlZnnmoTlt6jpobXvvIzmnInkurropoHmsYI15Liq44CC5LiO5a2Q5rGg55u45YWz55qEM+S4qumihOeVmemhteWPr+S7peeUqOadpVxuLea7oei2s+mDqOWIhuivt+axguOAguS9huaYr++8jOW/hemhu+S7juWFqOWxgOaxoOS4reiOt+W+lzLkuKrpobXpnaLjgILkuLrkuoblkJHosIPnlKjogIXovazovr7ov5nkuIDkv6Hmga/vvIzlsIbov5Tlm57lgLwy44CC54S25ZCO77yM6LCD55SoXG4t6ICF6KaB6LSf6LSj5LuO5YWo5bGA5rGg5Lit6I635Y+W5Y+m5aSW5Lik5Liq6aG16Z2i44CCXG4tXG4mIzQzO+Wug+S7rOi0n+i0o+aJgOacieWtkOaxoOeahOe7n+iuoeaguOeul++8jOW5tui3n+i4quS4juWtkOaxoOebuOWFs+iBlOeahOmihOeVmeOAglxuJiM0MztodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKeWHveaVsOS9v+eUqOS8oOWFpeeahOW3qOmhteaVsOmHj+adpeiwg+aVtOWtkOaxoOeahOKAnOW3sueUqOmhtemdouKAneiuoeaVsOOAglxuIFxuIENPV+WSjOmihOeVmVxuID09PT09PT09PT1cbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCA3NjExYTg0NzBlYTI2Li41MTEzZjc0M2Y2ZmM3IDEwMDY0NFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5AQCAtMTEwOSw4ICYjNDM7MTEwOSwxMiBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuIFxuIFx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2c2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZWxvY2spO1xuIFx0XHRcdGJ1Zi1cdTAwM2VmX2Jsb2NrcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzO1xuLVx0XHRcdGZyZWVfcGFnZXMgPSBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlc1xuLVx0XHRcdFx0LSBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4mIzQzO1x0XHRcdGlmIChzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyA9PSAtMSkge1xuJiM0MztcdFx0XHRcdGZyZWVfcGFnZXMgPSAtMTtcbiYjNDM7XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRmcmVlX3BhZ2VzID0gc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXMgLVxuJiM0MztcdFx0XHRcdFx0ICAgICBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRidWYtXHUwMDNlZl9iYXZhaWwgPSBidWYtXHUwMDNlZl9iZnJlZSA9IGZyZWVfcGFnZXM7XG4gXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRidWYtXHUwMDNlZl9maWxlcyA9IHNiaW5mby1cdTAwM2VtYXhfaW5vZGVzO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbmluZGV4IDE2YzRjNGNhYTEyNmMuLjQ1NTFmZjMwMjM2NDAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0zOSw4ICYjNDM7MzksOCBAQCBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCB7XG4gXHRzcGlubG9ja190IGxvY2s7XG4gXHRsb25nIGNvdW50O1xuIFx0bG9uZyBtYXhfaHBhZ2VzO1x0LyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovXG4tXHRsb25nIHVzZWRfaHBhZ2VzO1x0LyogVXNlZCBjb3VudCBhZ2FpbnN0IG1heGltdW0sIGluY2x1ZGVzICovXG4tXHRcdFx0XHQvKiBib3RoIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXG4mIzQzO1x0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgcGFnZSBjb3VudCwgaW5jbHVkZXMgYm90aCAqL1xuJiM0MztcdFx0XHRcdC8qIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXG4gXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7XG4gXHRsb25nIG1pbl9ocGFnZXM7XHQvKiBNaW5pbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWluaW11bS4gKi9cbiBcdGxvbmcgcnN2X2hwYWdlcztcdC8qIFBhZ2VzIHJlc2VydmVkIGFnYWluc3QgZ2xvYmFsIHBvb2wgdG8gKi9cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDRmNmY1OGJmM2RiNmMuLjExNTFhZDk1OWZmZDUgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEzMCwxMiAmIzQzOzEzMCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzdWJwb29sX2lzX2ZyZWUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuIHtcbiBcdGlmIChzcG9vbC1cdTAwM2Vjb3VudClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuLVx0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXG4tXHRcdHJldHVybiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAwO1xuLVx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEpXG4tXHRcdHJldHVybiBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IHNwb29sLVx1MDAzZW1pbl9ocGFnZXM7XG4gXG4tXHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuQEAgLTE5MywxMyAmIzQzOzE4OSwxOCBAQCB2b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbiBcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbiB9XG4gXG4tLypcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGFsbG9jYXRpbmcgYW5kIHJlc2VydmluZyBwYWdlcy5cbi0gKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGVcbi0gKiByZXF1ZXN0LiAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBieSB3aGljaCB0aGVcbi0gKiBnbG9iYWwgcG9vbHMgbXVzdCBiZSBhZGp1c3RlZCAodXB3YXJkKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBtYXlcbi0gKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZVxuLSAqIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxuJiM0MzsvKipcbiYjNDM7ICogaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMgLSBHZXQgcGFnZXMgZnJvbSBhIHN1YnBvb2xcbiYjNDM7ICogQHNwb29sOiBwb2ludGVyIHRvIHN1YnBvb2wgc3RydWN0dXJlIChtYXkgYmUgTlVMTClcbiYjNDM7ICogQGRlbHRhOiBudW1iZXIgb2YgcGFnZXMgdG8gYWxsb2NhdGUgb3IgcmVzZXJ2ZVxuJiM0MzsgKlxuJiM0MzsgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBhbGxvY2F0aW5nIG9yXG4mIzQzOyAqIHJlc2VydmluZyBAZGVsdGEgaHVnZXBhZ2VzLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBUYWtlcyBzcG9vbC1cdTAwM2Vsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnEoKS5cbiYjNDM7ICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IGNhbm5vdCBiZVxuJiM0MzsgKiAgICAgICAgIHNhdGlzZmllZCBieSB0aGUgc3VicG9vbCwgb3IgLUVOT01FTSBpZiB0aGUgc3VicG9vbCBtYXhpbXVtXG4mIzQzOyAqICAgICAgICAgbGltaXQgd291bGQgYmUgZXhjZWVkZWQuXG4gICovXG4gc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFx0XHRcdFx0ICAgICAgbG9uZyBkZWx0YSlcbkBAIC0yMTEsMTUgJiM0MzsyMTIsMTQgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrKTtcbiBcbi1cdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKSB7XHRcdC8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4tXHRcdGlmICgoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgJiM0MzsgZGVsdGEpIFx1MDAzYz0gc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcylcbi1cdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7XG4tXHRcdGVsc2Uge1xuLVx0XHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdFx0Z290byB1bmxvY2tfcmV0O1xuLVx0XHR9XG4mIzQzO1x0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICYjNDM7IGRlbHRhIFx1MDAzZSBzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byB1bmxvY2tfcmV0O1xuIFx0fVxuIFxuJiM0MztcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICYjNDM7PSBkZWx0YTtcbiYjNDM7XG4gXHQvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xuIFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMpIHtcbiBcdFx0aWYgKGRlbHRhIFx1MDAzZSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzKSB7XG5AQCAtMjQwLDExICYjNDM7MjQwLDE5IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qXG4tICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBmcmVlaW5nIGFuZCB1bnJlc2VydmluZyBwYWdlcy5cbi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBnbG9iYWwgcGFnZSByZXNlcnZhdGlvbnMgdGhhdCBtdXN0IGJlIGRyb3BwZWQuXG4tICogVGhlIHJldHVybiB2YWx1ZSBtYXkgb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSlcbi0gKiBpbiB0aGUgY2FzZSB3aGVyZSBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC5cbiYjNDM7LyoqXG4mIzQzOyAqIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzIC0gUmVsZWFzZSBwYWdlcyBiYWNrIHRvIGEgc3VicG9vbFxuJiM0MzsgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKVxuJiM0MzsgKiBAZGVsdGE6IG51bWJlciBvZiBwYWdlcyB0byBmcmVlIG9yIHVucmVzZXJ2ZVxuJiM0MzsgKlxuJiM0MzsgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBmcmVlaW5nIG9yXG4mIzQzOyAqIHVucmVzZXJ2aW5nIEBkZWx0YSBodWdlcGFnZXMuXG4mIzQzOyAqXG4mIzQzOyAqIENvbnRleHQ6IFRha2VzIHNwb29sLVx1MDAzZWxvY2sgdXNpbmcgc3Bpbl9sb2NrX2lycXNhdmUoKS4gTWF5IHJlbGVhc2VcbiYjNDM7ICogICAgICAgICAgYW5kIGZyZWUgQHNwb29sIGlmIGl0cyB1c2FnZSBjb3VudCBhbmQgcmVmZXJlbmNlcyByZWFjaFxuJiM0MzsgKiAgICAgICAgICB6ZXJvLlxuJiM0MzsgKiBSZXR1cm46IE5vbi1uZWdhdGl2ZSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgdGhlIHN1YnBvb2wgY2Fubm90XG4mIzQzOyAqICAgICAgICAgYWJzb3JiLlxuICAqL1xuIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcdFx0XHRcdCAgICAgICBsb25nIGRlbHRhKVxuQEAgLTI1NywxOSAmIzQzOzI2NSwyNCBAQCBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcdFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cbi1cdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XG4mIzQzO1x0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XG4gXG4gXHQgLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi9cbiBcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyBcdTAwM2Mgc3Bvb2wtXHUwMDNlbWluX2hwYWdlcykge1xuLVx0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyAmIzQzOyBkZWx0YSBcdTAwM2M9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogbGltaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0XG4mIzQzO1x0XHQgKiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcyBzdWJwb29sLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRsb25nIGxpbWl0ID0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAtIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIFx1MDAzYz0gbGltaXQpXG4gXHRcdFx0cmV0ID0gMDtcbiBcdFx0ZWxzZVxuLVx0XHRcdHJldCA9IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgJiM0MzsgZGVsdGEgLSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuJiM0MztcdFx0XHRyZXQgPSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIC0gbGltaXQ7XG4gXG4gXHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgJiM0Mzs9IGRlbHRhO1xuLVx0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyBcdTAwM2Ugc3Bvb2wtXHUwMDNlbWluX2hwYWdlcylcbi1cdFx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcztcbiYjNDM7XHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzIFx1MDAzZSBsaW1pdClcbiYjNDM7XHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IGxpbWl0O1xuIFx0fVxuIFxuIFx0LypcbkBAIC0yOTQ0LDcgJiM0MzsyOTU3LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF92bWEodm1hKTtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0bG9uZyByZXR2YWwsIGdibF9jaGcsIGdibF9yZXNlcnZlO1xuJiM0MztcdGxvbmcgcmV0dmFsLCBnYmxfcmVzdl9nZXQ7XG4gXHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XG4gXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xuIFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuQEAgLTI5ODMsOCAmIzQzOzI5OTYsOCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHQgKiBPciBpZiBpdCBjYW4gZ2V0IG9uZSBmcm9tIHRoZSBwb29sIHJlc2VydmF0aW9uIGRpcmVjdGx5LlxuIFx0ICovXG4gXHRpZiAobWFwX2NoZykge1xuLVx0XHRnYmxfY2hnID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuLVx0XHRpZiAoZ2JsX2NoZyBcdTAwM2MgMCkge1xuJiM0MztcdFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuJiM0MztcdFx0aWYgKGdibF9yZXN2X2dldCBcdTAwM2MgMCkge1xuIFx0XHRcdHJldCA9IC1FTk9TUEM7XG4gXHRcdFx0Z290byBvdXRfZW5kX3Jlc2VydmF0aW9uO1xuIFx0XHR9XG5AQCAtMjk5Myw3ICYjNDM7MzAwNiw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0ICogSWYgd2UgaGF2ZSB0aGUgdm1hIHJlc2VydmF0aW9uIHJlYWR5LCBubyBuZWVkIGZvciBleHRyYVxuIFx0XHQgKiBnbG9iYWwgcmVzZXJ2YXRpb24uXG4gXHRcdCAqL1xuLVx0XHRnYmxfY2hnID0gMDtcbiYjNDM7XHRcdGdibF9yZXN2X2dldCA9IDA7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTMwMDQsMTAgJiM0MzszMDE3LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDtcbiBcbiBcdC8qXG4tXHQgKiBnYmxfY2hnID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXG4mIzQzO1x0ICogZ2JsX3Jlc3ZfZ2V0ID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXG4gXHQgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LlxuIFx0ICovXG4tXHRpZiAoZ2JsX2NoZyA9PSAwKVxuJiM0MztcdGlmIChnYmxfcmVzdl9nZXQgPT0gMClcbiBcdFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUztcbiBcbiBcdC8qIFRha2VzIHJlZmVyZW5jZSBvbiBtcG9sLiAqL1xuQEAgLTMwNjEsMTMgJiM0MzszMDc0LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHJldHVybiBmb2xpbztcbiBcbiBvdXRfc3VicG9vbF9wdXQ6XG4tXHQvKlxuLVx0ICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wmIzM5O3MgcnN2X2hwYWdlcyBpcyB1c2VkXG4tXHQgKiBkdXJpbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMuXG4tXHQgKi9cbi1cdGlmIChtYXBfY2hnIFx1MDAyNlx1MDAyNiAhZ2JsX2NoZykge1xuLVx0XHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbi1cdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xuJiM0MztcdGlmIChtYXBfY2hnKSB7XG4mIzQzO1x0XHRsb25nIGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbiYjNDM7XG4mIzQzO1x0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCAtIGdibF9yZXN2X3B1dCk7XG4gXHR9XG4gXG4gb3V0X2VuZF9yZXNlcnZhdGlvbjpcbkBAIC02NjYzLDEyICYjNDM7NjY3MywxNSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbi1cdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xLCBzcG9vbF9yZXN2LCBnYmxfcmVzdjtcbiYjNDM7XHRsb25nIGNoZyA9IC0xLCBhZGQgPSAtMTtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfaW5vZGUoaW5vZGUpO1xuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF9pbm9kZShpbm9kZSk7XG4gXHRzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwO1xuIFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDtcbi1cdGxvbmcgZ2JsX3Jlc2VydmUsIHJlZ2lvbnNfbmVlZGVkID0gMDtcbiYjNDM7XHRsb25nIGdibF9yZXN2X2FjY3RlZCA9IDA7XG4mIzQzO1x0bG9uZyByZWdpb25zX25lZWRlZCA9IDA7XG4mIzQzO1x0bG9uZyBnYmxfcmVzdl9nZXQ7XG4mIzQzO1x0bG9uZyBnYmxfcmVzdl9wdXQ7XG4gXHRpbnQgZXJyO1xuIFxuIFx0LyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovXG5AQCAtNjc0Myw5ICYjNDM7Njc1Niw5IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgKiB0aGUgc3VicG9vbCBoYXMgYSBtaW5pbXVtIHNpemUsIHRoZXJlIG1heSBiZSBzb21lIGdsb2JhbFxuIFx0ICogcmVzZXJ2YXRpb25zIGFscmVhZHkgaW4gcGxhY2UgKGdibF9yZXNlcnZlKS5cbiBcdCAqL1xuLVx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgY2hnKTtcbi1cdGlmIChnYmxfcmVzZXJ2ZSBcdTAwM2MgMCkge1xuLVx0XHRlcnIgPSBnYmxfcmVzZXJ2ZTtcbiYjNDM7XHRnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgY2hnKTtcbiYjNDM7XHRpZiAoZ2JsX3Jlc3ZfZ2V0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRlcnIgPSBnYmxfcmVzdl9nZXQ7XG4gXHRcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDtcbiBcdH1cbiBcbkBAIC02NzUzLDkgJiM0Mzs2NzY2LDEwIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi5cbiBcdCAqIEhhbmQgdGhlIHBhZ2VzIGJhY2sgdG8gdGhlIHN1YnBvb2wgaWYgdGhlcmUgYXJlIG5vdFxuIFx0ICovXG4tXHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTtcbiYjNDM7XHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF9wdXRfcGFnZXM7XG4mIzQzO1x0Z2JsX3Jlc3ZfYWNjdGVkID0gZ2JsX3Jlc3ZfZ2V0O1xuIFxuIFx0LypcbiBcdCAqIEFjY291bnQgZm9yIHRoZSByZXNlcnZhdGlvbnMgbWFkZS4gU2hhcmVkIG1hcHBpbmdzIHJlY29yZCByZWdpb25zXG5AQCAtNjc3Miw3ICYjNDM7Njc4Niw2IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdGFkZCA9IHJlZ2lvbl9hZGQocmVzdl9tYXAsIGZyb20sIHRvLCByZWdpb25zX25lZWRlZCwgaCwgaF9jZyk7XG4gXG4gXHRcdGlmICh1bmxpa2VseShhZGQgXHUwMDNjIDApKSB7XG4tXHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xuIFx0XHRcdGVyciA9IGFkZDtcbiBcdFx0XHRnb3RvIG91dF9wdXRfcGFnZXM7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoY2hnIFx1MDAzZSBhZGQpKSB7XG5AQCAtNjgwOCwyNiAmIzQzOzY4MjEsMjIgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdH1cbiBcdHJldHVybiBjaGc7XG4gXG4tb3V0X3B1dF9wYWdlczpcbi1cdHNwb29sX3Jlc3YgPSBjaGcgLSBnYmxfcmVzZXJ2ZTtcbi1cdGlmIChzcG9vbF9yZXN2KSB7XG4tXHRcdC8qIHB1dCBzdWIgcG9vbCYjMzk7cyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqL1xuLVx0XHRnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTtcbi1cdFx0Lypcbi1cdFx0ICogc3VicG9vbCYjMzk7cyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxuLVx0XHQgKiByZXR1cm4gdG8gaHN0YXRlLlxuLVx0XHQgKi9cbi1cdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xuLVx0fVxuLVx0LyogUmVzdG9yZSB1c2VkX2hwYWdlcyBmb3IgcGFnZXMgdGhhdCBmYWlsZWQgZ2xvYmFsIHJlc2VydmF0aW9uICovXG4tXHRpZiAoZ2JsX3Jlc2VydmUgXHUwMDI2XHUwMDI2IHNwb29sKSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzOyBvdXRfcHV0X3BhZ2VzOlxuJiM0MztcdC8qXG4mIzQzO1x0ICogUmV0dXJuIGFsbCB0aGF0IHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc3VicG9vbCwgbGV0IHN1YnBvb2xcbiYjNDM7XHQgKiB0ZWxsIHVzIHRoZSBuZXcgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IG5lZWQgdG8gYmVcbiYjNDM7XHQgKiByZXR1cm5lZCB0byB0aGUgZ2xvYmFsIHBvb2wuXG4mIzQzO1x0ICovXG4mIzQzO1x0Z2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIGNoZyk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGVyZSBtYXkgYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZlxuJiM0MztcdCAqIHJlc2VydmF0aW9ucyB0byBjb25zdW1lIGFuZCB0aGUgbnVtYmVyIHRvIHJlc3RvcmUgbm93IGlmXG4mIzQzO1x0ICogdGhlcmUgYXJlIG11bHRpcGxlIHRocmVhZHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3VicG9vbCAtXG4mIzQzO1x0ICogcmVzdG9yZSB0aGUgZGlmZmVyZW5jZSwgdGFraW5nIGludG8gYWNjb3VudCBhbnkgZ2xvYmFsXG4mIzQzO1x0ICogcmVzZXJ2YXRpb25zIGFscmVhZHkgYWNxdWlyZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQgLSBnYmxfcmVzdl9hY2N0ZWQpO1xuIFxuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlO1xuLVx0XHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4tXHR9XG4gb3V0X3VuY2hhcmdlX2Nncm91cDpcbiBcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcbiBcdFx0XHRcdFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJmc19zdGF0ZnMmIzM0OywKICAgICYjMzQ7aHVnZXRsYl91bnJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXBhZ2VfcHV0X3N1YnBvb2wmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYmZzIHN1YnBvb2wgYWNjb3VudGluZyBsb2dpYyBhbmQgcmVzZXJ2YXRpb24gZXJyb3ItdW53aW5kIHBhdGhzIGluIG1tL2h1Z2V0bGIuYyBhbmQgZnMvaHVnZXRsYmZzL2lub2RlLmMuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyBob3cgYHVzZWRfaHBhZ2VzYCBhbmQgYHJzdl9ocGFnZXNgIGFyZSB1cGRhdGVkIGluIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcygpYCBhbmQgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKClgLCBhbHRlcnMgc3VicG9vbCByZWxlYXNlIGNoZWNrcyBpbiBgc3VicG9vbF9pc19mcmVlKClgLCBmaXhlcyBzdGF0ZnMgY2FsY3VsYXRpb24gZm9yIHVuYm91bmRlZCBzdWJwb29scyBpbiBgaHVnZXRsYmZzX3N0YXRmcygpYCwgYW5kIHJlZmFjdG9ycyBnbG9iYWwgbWVtb3J5IHJlc2VydmF0aW9uIHJvbGxiYWNrcyBpbiBgYWxsb2NfaHVnZXRsYl9mb2xpbygpYCBhbmQgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYC4gVGhpcyBsb2dpYyBpcyBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcyBmaWxlc3lzdGVtIG1vdW50cywgYWxsb2NhdGlvbnMsIGFuZCBtbWFwIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YTM3MDU0YTdmZDk5NmJlMzBlOTAzNjU1NjE3Zjg1NmVmYzc2NmQwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAyMjowMToxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CmluZGV4IGE0OTExNWRiMThjNzYuLmQyNDQ1ODNmZGNiYzMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdApAQCAtMzE0LDIxICYjNDM7MzE0LDggQEAgaHVnZSBwYWdlcy4gIElmIHRoZXkgY2FuIG5vdCBiZSByZXNlcnZlZCwgdGhlIG1vdW50IGZhaWxzLgogVGhlIHJvdXRpbmVzIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygpIGFyZSBjYWxsZWQgd2hlbiBwYWdlcyBhcmUKIG9idGFpbmVkIGZyb20gb3IgcmVsZWFzZWQgYmFjayB0byBhIHN1YnBvb2wuICBUaGV5IHBlcmZvcm0gYWxsIHN1YnBvb2wKIGFjY291bnRpbmcsIGFuZCB0cmFjayBhbnkgcmVzZXJ2YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbC4KLWh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcyBhcmUgcGFzc2VkIHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcyBieSB3aGljaAotdG8gYWRqdXN0IHRoZSBzdWJwb29sICYjMzk7dXNlZCBwYWdlJiMzOTsgY291bnQgKGRvd24gZm9yIGdldCwgdXAgZm9yIHB1dCkuICBOb3JtYWxseSwKLXRoZXkgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIHRoYXQgd2FzIHBhc3NlZCBvciBhbiBlcnJvciBpZiBub3QgZW5vdWdoIHBhZ2VzCi1leGlzdCBpbiB0aGUgc3VicG9vbC4KLQotSG93ZXZlciwgaWYgcmVzZXJ2ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbCBhIHJldHVybiB2YWx1ZSBsZXNzCi10aGFuIHRoZSBwYXNzZWQgdmFsdWUgbWF5IGJlIHJldHVybmVkLiAgVGhpcyByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHRoZQotbnVtYmVyIG9mIGFkZGl0aW9uYWwgZ2xvYmFsIHBvb2wgYWRqdXN0bWVudHMgd2hpY2ggbXVzdCBiZSBtYWRlLiAgRm9yIGV4YW1wbGUsCi1zdXBwb3NlIGEgc3VicG9vbCBjb250YWlucyAzIHJlc2VydmVkIGh1Z2UgcGFnZXMgYW5kIHNvbWVvbmUgYXNrcyBmb3IgNS4KLVRoZSAzIHJlc2VydmVkIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbCBjYW4gYmUgdXNlZCB0byBzYXRpc2Z5IHBhcnQKLW9mIHRoZSByZXF1ZXN0LiAgQnV0LCAyIHBhZ2VzIG11c3QgYmUgb2J0YWluZWQgZnJvbSB0aGUgZ2xvYmFsIHBvb2xzLiAgVG8KLXJlbGF5IHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGNhbGxlciwgdGhlIHZhbHVlIDIgaXMgcmV0dXJuZWQuICBUaGUgY2FsbGVyCi1pcyB0aGVuIHJlc3BvbnNpYmxlIGZvciBhdHRlbXB0aW5nIHRvIG9idGFpbiB0aGUgYWRkaXRpb25hbCB0d28gcGFnZXMgZnJvbQotdGhlIGdsb2JhbCBwb29scy4KLQomIzQzO2h1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygpIHVzZSB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgcGFzc2VkIHRvIGFkanVzdAomIzQzO3RoZSBzdWJwb29sICYjMzk7dXNlZCBwYWdlJiMzOTsgY291bnQuCiAKIENPVyBhbmQgUmVzZXJ2YXRpb25zCiA9PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdAppbmRleCAyMDk0N2Y4YmQwNjU0Li5hZTFmMWYzMTQ3N2ZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdApAQCAtMjQ2LDE1ICYjNDM7MjQ2LDggQEAgaHVnZXBhZ2Vfc3VicG9vbOeahG1pbl9ocGFnZXPlrZfmrrXkuK3ooqvot5/ouKrjgILlnKjmjILovb3ml7bvvIxodWdldGxiX2FjY3RfbWUKIOiiq+iwg+eUqOS7pemihOeVmeaMh+WumuaVsOmHj+eahOW3qOmhteOAguWmguaenOWug+S7rOS4jeiDveiiq+mihOeVme+8jOaMgui9veWwseS8muWksei0peOAggogCiDlvZPku47lrZDmsaDkuK3ojrflj5bmiJbph4rmlL7pobXpnaLml7bvvIzkvJrosIPnlKhodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKeWHveaVsOOAggotaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2Vz6KKr5Lyg6YCS57uZ5beo6aG15pWw6YeP77yM5Lul5q2k5p2l6LCD5pW05a2Q5rGg55qEIOKAnOW3sueUqOmhtemdouKAnSDorqHmlbAKLe+8iGdldOS4uuS4i+mZje+8jHB1dOS4uuS4iuWNh++8ieOAgumAmuW4uOaDheWGteS4i++8jOWmguaenOWtkOaxoOS4reayoeaciei2s+Wkn+eahOmhtemdou+8jOWug+S7rOS8mui/lOWbnuS4juS8oOmAkueahOebuOWQjOeahOWAvOaIlgot5LiA5Liq6ZSZ6K+v44CCCi0KLeeEtuiAjO+8jOWmguaenOmihOeVmeS4juWtkOaxoOebuOWFs+iBlO+8jOWPr+iDveS8mui/lOWbnuS4gOS4quWwj+S6juS8oOmAkuWAvOeahOi/lOWbnuWAvOOAgui/meS4qui/lOWbnuWAvOihqOekuuW/hemhu+i/m+ihjOeahOmineWkluWFqOWxgAot5rGg6LCD5pW055qE5pWw6YeP44CC5L6L5aaC77yM5YGH6K6+5LiA5Liq5a2Q5rGg5YyF5ZCrM+S4qumihOeVmeeahOW3qOmhte+8jOacieS6uuimgeaxgjXkuKrjgILkuI7lrZDmsaDnm7jlhbPnmoQz5Liq6aKE55WZ6aG15Y+v5Lul55So5p2lCi3mu6HotrPpg6jliIbor7fmsYLjgILkvYbmmK/vvIzlv4Xpobvku47lhajlsYDmsaDkuK3ojrflvpcy5Liq6aG16Z2i44CC5Li65LqG5ZCR6LCD55So6ICF6L2s6L6+6L+Z5LiA5L+h5oGv77yM5bCG6L+U5Zue5YC8MuOAgueEtuWQju+8jOiwg+eUqAot6ICF6KaB6LSf6LSj5LuO5YWo5bGA5rGg5Lit6I635Y+W5Y+m5aSW5Lik5Liq6aG16Z2i44CCCi0KJiM0MzvlroPku6zotJ/otKPmiYDmnInlrZDmsaDnmoTnu5/orqHmoLjnrpfvvIzlubbot5/ouKrkuI7lrZDmsaDnm7jlhbPogZTnmoTpooTnlZnjgIIKJiM0MztodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKeWHveaVsOS9v+eUqOS8oOWFpeeahOW3qOmhteaVsOmHj+adpeiwg+aVtOWtkOaxoOeahOKAnOW3sueUqOmhtemdouKAneiuoeaVsOOAggogCiBDT1flkozpooTnlZkKID09PT09PT09PT0KZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKaW5kZXggNzYxMWE4NDcwZWEyNi4uNTExM2Y3NDNmNmZjNyAxMDA2NDQKLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKQEAgLTExMDksOCAmIzQzOzExMDksMTIgQEAgc3RhdGljIGludCBodWdldGxiZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIAogCQkJc3Bpbl9sb2NrX2lycSgmYW1wO3NiaW5mby0mZ3Q7c3Bvb2wtJmd0O2xvY2spOwogCQkJYnVmLSZndDtmX2Jsb2NrcyA9IHNiaW5mby0mZ3Q7c3Bvb2wtJmd0O21heF9ocGFnZXM7Ci0JCQlmcmVlX3BhZ2VzID0gc2JpbmZvLSZndDtzcG9vbC0mZ3Q7bWF4X2hwYWdlcwotCQkJCS0gc2JpbmZvLSZndDtzcG9vbC0mZ3Q7dXNlZF9ocGFnZXM7CiYjNDM7CQkJaWYgKHNiaW5mby0mZ3Q7c3Bvb2wtJmd0O21heF9ocGFnZXMgPT0gLTEpIHsKJiM0MzsJCQkJZnJlZV9wYWdlcyA9IC0xOwomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCWZyZWVfcGFnZXMgPSBzYmluZm8tJmd0O3Nwb29sLSZndDttYXhfaHBhZ2VzIC0KJiM0MzsJCQkJCSAgICAgc2JpbmZvLSZndDtzcG9vbC0mZ3Q7dXNlZF9ocGFnZXM7CiYjNDM7CQkJfQogCQkJYnVmLSZndDtmX2JhdmFpbCA9IGJ1Zi0mZ3Q7Zl9iZnJlZSA9IGZyZWVfcGFnZXM7CiAJCQlzcGluX3VubG9ja19pcnEoJmFtcDtzYmluZm8tJmd0O3Nwb29sLSZndDtsb2NrKTsKIAkJCWJ1Zi0mZ3Q7Zl9maWxlcyA9IHNiaW5mby0mZ3Q7bWF4X2lub2RlczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggMTZjNGM0Y2FhMTI2Yy4uNDU1MWZmMzAyMzY0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKQEAgLTM5LDggJiM0MzszOSw4IEBAIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sIHsKIAlzcGlubG9ja190IGxvY2s7CiAJbG9uZyBjb3VudDsKIAlsb25nIG1heF9ocGFnZXM7CS8qIE1heGltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtYXhpbXVtLiAqLwotCWxvbmcgdXNlZF9ocGFnZXM7CS8qIFVzZWQgY291bnQgYWdhaW5zdCBtYXhpbXVtLCBpbmNsdWRlcyAqLwotCQkJCS8qIGJvdGggYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi8KJiM0MzsJbG9uZyB1c2VkX2hwYWdlczsJLyogVXNlZCBwYWdlIGNvdW50LCBpbmNsdWRlcyBib3RoICovCiYjNDM7CQkJCS8qIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovCiAJc3RydWN0IGhzdGF0ZSAqaHN0YXRlOwogCWxvbmcgbWluX2hwYWdlczsJLyogTWluaW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1pbmltdW0uICovCiAJbG9uZyByc3ZfaHBhZ2VzOwkvKiBQYWdlcyByZXNlcnZlZCBhZ2FpbnN0IGdsb2JhbCBwb29sIHRvICovCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggNGY2ZjU4YmYzZGI2Yy4uMTE1MWFkOTU5ZmZkNSAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuYwpAQCAtMTMwLDEyICYjNDM7MTMwLDggQEAgc3RhdGljIGlubGluZSBib29sIHN1YnBvb2xfaXNfZnJlZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCiB7CiAJaWYgKHNwb29sLSZndDtjb3VudCkKIAkJcmV0dXJuIGZhbHNlOwotCWlmIChzcG9vbC0mZ3Q7bWF4X2hwYWdlcyAhPSAtMSkKLQkJcmV0dXJuIHNwb29sLSZndDt1c2VkX2hwYWdlcyA9PSAwOwotCWlmIChzcG9vbC0mZ3Q7bWluX2hwYWdlcyAhPSAtMSkKLQkJcmV0dXJuIHNwb29sLSZndDtyc3ZfaHBhZ2VzID09IHNwb29sLSZndDttaW5faHBhZ2VzOwogCi0JcmV0dXJuIHRydWU7CiYjNDM7CXJldHVybiBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgPT0gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLApAQCAtMTkzLDEzICYjNDM7MTg5LDE4IEBAIHZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKQogCXVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTsKIH0KIAotLyoKLSAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgYWxsb2NhdGluZyBhbmQgcmVzZXJ2aW5nIHBhZ2VzLgotICogUmV0dXJuIC1FTk9NRU0gaWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvIHNhdGlzZnkgdGhlCi0gKiByZXF1ZXN0LiAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBieSB3aGljaCB0aGUKLSAqIGdsb2JhbCBwb29scyBtdXN0IGJlIGFkanVzdGVkICh1cHdhcmQpLiAgVGhlIHJldHVybmVkIHZhbHVlIG1heQotICogb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSkgaW4gdGhlIGNhc2Ugd2hlcmUKLSAqIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLgomIzQzOy8qKgomIzQzOyAqIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzIC0gR2V0IHBhZ2VzIGZyb20gYSBzdWJwb29sCiYjNDM7ICogQHNwb29sOiBwb2ludGVyIHRvIHN1YnBvb2wgc3RydWN0dXJlIChtYXkgYmUgTlVMTCkKJiM0MzsgKiBAZGVsdGE6IG51bWJlciBvZiBwYWdlcyB0byBhbGxvY2F0ZSBvciByZXNlcnZlCiYjNDM7ICoKJiM0MzsgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBhbGxvY2F0aW5nIG9yCiYjNDM7ICogcmVzZXJ2aW5nIEBkZWx0YSBodWdlcGFnZXMuCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBUYWtlcyBzcG9vbC0mZ3Q7bG9jayB1c2luZyBzcGluX2xvY2tfaXJxKCkuCiYjNDM7ICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IGNhbm5vdCBiZQomIzQzOyAqICAgICAgICAgc2F0aXNmaWVkIGJ5IHRoZSBzdWJwb29sLCBvciAtRU5PTUVNIGlmIHRoZSBzdWJwb29sIG1heGltdW0KJiM0MzsgKiAgICAgICAgIGxpbWl0IHdvdWxkIGJlIGV4Y2VlZGVkLgogICovCiBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCiAJCQkJICAgICAgbG9uZyBkZWx0YSkKQEAgLTIxMSwxNSAmIzQzOzIxMiwxNCBAQCBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCiAKIAlzcGluX2xvY2tfaXJxKCZhbXA7c3Bvb2wtJmd0O2xvY2spOwogCi0JaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKSB7CQkvKiBtYXhpbXVtIHNpemUgYWNjb3VudGluZyAqLwotCQlpZiAoKHNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOyBkZWx0YSkgJmx0Oz0gc3Bvb2wtJmd0O21heF9ocGFnZXMpCi0JCQlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgJiM0Mzs9IGRlbHRhOwotCQllbHNlIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIHVubG9ja19yZXQ7Ci0JCX0KJiM0MzsJaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xICZhbXA7JmFtcDsKJiM0MzsJICAgIHNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOyBkZWx0YSAmZ3Q7IHNwb29sLSZndDttYXhfaHBhZ2VzKSB7CiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJZ290byB1bmxvY2tfcmV0OwogCX0KIAomIzQzOwlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgJiM0Mzs9IGRlbHRhOwomIzQzOwogCS8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovCiAJaWYgKHNwb29sLSZndDttaW5faHBhZ2VzICE9IC0xICZhbXA7JmFtcDsgc3Bvb2wtJmd0O3Jzdl9ocGFnZXMpIHsKIAkJaWYgKGRlbHRhICZndDsgc3Bvb2wtJmd0O3Jzdl9ocGFnZXMpIHsKQEAgLTI0MCwxMSAmIzQzOzI0MCwxOSBAQCBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgZnJlZWluZyBhbmQgdW5yZXNlcnZpbmcgcGFnZXMuCi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBnbG9iYWwgcGFnZSByZXNlcnZhdGlvbnMgdGhhdCBtdXN0IGJlIGRyb3BwZWQuCi0gKiBUaGUgcmV0dXJuIHZhbHVlIG1heSBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKQotICogaW4gdGhlIGNhc2Ugd2hlcmUgYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuCiYjNDM7LyoqCiYjNDM7ICogaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMgLSBSZWxlYXNlIHBhZ2VzIGJhY2sgdG8gYSBzdWJwb29sCiYjNDM7ICogQHNwb29sOiBwb2ludGVyIHRvIHN1YnBvb2wgc3RydWN0dXJlIChtYXkgYmUgTlVMTCkKJiM0MzsgKiBAZGVsdGE6IG51bWJlciBvZiBwYWdlcyB0byBmcmVlIG9yIHVucmVzZXJ2ZQomIzQzOyAqCiYjNDM7ICogQ2hlY2sgYW5kIHVwZGF0ZSBzdWJwb29sIHBhZ2UgdXNhZ2UgY291bnRzIHdoZW4gZnJlZWluZyBvcgomIzQzOyAqIHVucmVzZXJ2aW5nIEBkZWx0YSBodWdlcGFnZXMuCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBUYWtlcyBzcG9vbC0mZ3Q7bG9jayB1c2luZyBzcGluX2xvY2tfaXJxc2F2ZSgpLiBNYXkgcmVsZWFzZQomIzQzOyAqICAgICAgICAgIGFuZCBmcmVlIEBzcG9vbCBpZiBpdHMgdXNhZ2UgY291bnQgYW5kIHJlZmVyZW5jZXMgcmVhY2gKJiM0MzsgKiAgICAgICAgICB6ZXJvLgomIzQzOyAqIFJldHVybjogTm9uLW5lZ2F0aXZlIG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCB0aGUgc3VicG9vbCBjYW5ub3QKJiM0MzsgKiAgICAgICAgIGFic29yYi4KICAqLwogc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLAogCQkJCSAgICAgICBsb25nIGRlbHRhKQpAQCAtMjU3LDE5ICYjNDM7MjY1LDI0IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKIAotCWlmIChzcG9vbC0mZ3Q7bWF4X2hwYWdlcyAhPSAtMSkJCS8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovCi0JCXNwb29sLSZndDt1c2VkX2hwYWdlcyAtPSBkZWx0YTsKJiM0MzsJc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzIC09IGRlbHRhOwogCiAJIC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovCiAJaWYgKHNwb29sLSZndDttaW5faHBhZ2VzICE9IC0xICZhbXA7JmFtcDsgc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzICZsdDsgc3Bvb2wtJmd0O21pbl9ocGFnZXMpIHsKLQkJaWYgKHNwb29sLSZndDtyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhICZsdDs9IHNwb29sLSZndDttaW5faHBhZ2VzKQomIzQzOwkJLyoKJiM0MzsJCSAqIGxpbWl0IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdAomIzQzOwkJICogY2FuIGJlIHJlc3RvcmVkIHRvIHRoaXMgc3VicG9vbC4KJiM0MzsJCSAqLwomIzQzOwkJbG9uZyBsaW1pdCA9IHNwb29sLSZndDttaW5faHBhZ2VzIC0gc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzOwomIzQzOwomIzQzOwkJaWYgKHNwb29sLSZndDtyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhICZsdDs9IGxpbWl0KQogCQkJcmV0ID0gMDsKIAkJZWxzZQotCQkJcmV0ID0gc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0MzsgZGVsdGEgLSBzcG9vbC0mZ3Q7bWluX2hwYWdlczsKJiM0MzsJCQlyZXQgPSBzcG9vbC0mZ3Q7cnN2X2hwYWdlcyAmIzQzOyBkZWx0YSAtIGxpbWl0OwogCiAJCXNwb29sLSZndDtyc3ZfaHBhZ2VzICYjNDM7PSBkZWx0YTsKLQkJaWYgKHNwb29sLSZndDtyc3ZfaHBhZ2VzICZndDsgc3Bvb2wtJmd0O21pbl9ocGFnZXMpCi0JCQlzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9IHNwb29sLSZndDttaW5faHBhZ2VzOwomIzQzOwkJaWYgKHNwb29sLSZndDtyc3ZfaHBhZ2VzICZndDsgbGltaXQpCiYjNDM7CQkJc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgPSBsaW1pdDsKIAl9CiAKIAkvKgpAQCAtMjk0NCw3ICYjNDM7Mjk1Nyw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX3ZtYSh2bWEpOwogCXN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKLQlsb25nIHJldHZhbCwgZ2JsX2NoZywgZ2JsX3Jlc2VydmU7CiYjNDM7CWxvbmcgcmV0dmFsLCBnYmxfcmVzdl9nZXQ7CiAJbWFwX2NoZ19zdGF0ZSBtYXBfY2hnOwogCXN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgbXBvbGk7CiAJZ2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpOwpAQCAtMjk4Myw4ICYjNDM7Mjk5Niw4IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkgKiBPciBpZiBpdCBjYW4gZ2V0IG9uZSBmcm9tIHRoZSBwb29sIHJlc2VydmF0aW9uIGRpcmVjdGx5LgogCSAqLwogCWlmIChtYXBfY2hnKSB7Ci0JCWdibF9jaGcgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7Ci0JCWlmIChnYmxfY2hnICZsdDsgMCkgewomIzQzOwkJZ2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpOwomIzQzOwkJaWYgKGdibF9yZXN2X2dldCAmbHQ7IDApIHsKIAkJCXJldCA9IC1FTk9TUEM7CiAJCQlnb3RvIG91dF9lbmRfcmVzZXJ2YXRpb247CiAJCX0KQEAgLTI5OTMsNyAmIzQzOzMwMDYsNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCSAqIElmIHdlIGhhdmUgdGhlIHZtYSByZXNlcnZhdGlvbiByZWFkeSwgbm8gbmVlZCBmb3IgZXh0cmEKIAkJICogZ2xvYmFsIHJlc2VydmF0aW9uLgogCQkgKi8KLQkJZ2JsX2NoZyA9IDA7CiYjNDM7CQlnYmxfcmVzdl9nZXQgPSAwOwogCX0KIAogCS8qCkBAIC0zMDA0LDEwICYjNDM7MzAxNywxMCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCWFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7CiAKIAkvKgotCSAqIGdibF9jaGcgPT0gMCBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoaXMKJiM0MzsJICogZ2JsX3Jlc3ZfZ2V0ID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzCiAJICogYWxsb2NhdGlvbiwgc28gdHJ5IHRvIHVzZSBpdC4KIAkgKi8KLQlpZiAoZ2JsX2NoZyA9PSAwKQomIzQzOwlpZiAoZ2JsX3Jlc3ZfZ2V0ID09IDApCiAJCWFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlM7CiAKIAkvKiBUYWtlcyByZWZlcmVuY2Ugb24gbXBvbC4gKi8KQEAgLTMwNjEsMTMgJiM0MzszMDc0LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlyZXR1cm4gZm9saW87CiAKIG91dF9zdWJwb29sX3B1dDoKLQkvKgotCSAqIHB1dCBwYWdlIHRvIHN1YnBvb2wgaWZmIHRoZSBxdW90YSBvZiBzdWJwb29sJiMzOTtzIHJzdl9ocGFnZXMgaXMgdXNlZAotCSAqIGR1cmluZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcy4KLQkgKi8KLQlpZiAobWFwX2NoZyAmYW1wOyZhbXA7ICFnYmxfY2hnKSB7Ci0JCWdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpOwotCQlodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7CiYjNDM7CWlmIChtYXBfY2hnKSB7CiYjNDM7CQlsb25nIGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTsKJiM0MzsKJiM0MzsJCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0IC0gZ2JsX3Jlc3ZfcHV0KTsKIAl9CiAKIG91dF9lbmRfcmVzZXJ2YXRpb246CkBAIC02NjYzLDEyICYjNDM7NjY3MywxNSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKQogewotCWxvbmcgY2hnID0gLTEsIGFkZCA9IC0xLCBzcG9vbF9yZXN2LCBnYmxfcmVzdjsKJiM0MzsJbG9uZyBjaGcgPSAtMSwgYWRkID0gLTE7CiAJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7CiAJc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF9pbm9kZShpbm9kZSk7CiAJc3RydWN0IHJlc3ZfbWFwICpyZXN2X21hcDsKIAlzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMOwotCWxvbmcgZ2JsX3Jlc2VydmUsIHJlZ2lvbnNfbmVlZGVkID0gMDsKJiM0MzsJbG9uZyBnYmxfcmVzdl9hY2N0ZWQgPSAwOwomIzQzOwlsb25nIHJlZ2lvbnNfbmVlZGVkID0gMDsKJiM0MzsJbG9uZyBnYmxfcmVzdl9nZXQ7CiYjNDM7CWxvbmcgZ2JsX3Jlc3ZfcHV0OwogCWludCBlcnI7CiAKIAkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KQEAgLTY3NDMsOSAmIzQzOzY3NTYsOSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSAqIHRoZSBzdWJwb29sIGhhcyBhIG1pbmltdW0gc2l6ZSwgdGhlcmUgbWF5IGJlIHNvbWUgZ2xvYmFsCiAJICogcmVzZXJ2YXRpb25zIGFscmVhZHkgaW4gcGxhY2UgKGdibF9yZXNlcnZlKS4KIAkgKi8KLQlnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpOwotCWlmIChnYmxfcmVzZXJ2ZSAmbHQ7IDApIHsKLQkJZXJyID0gZ2JsX3Jlc2VydmU7CiYjNDM7CWdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpOwomIzQzOwlpZiAoZ2JsX3Jlc3ZfZ2V0ICZsdDsgMCkgewomIzQzOwkJZXJyID0gZ2JsX3Jlc3ZfZ2V0OwogCQlnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7CiAJfQogCkBAIC02NzUzLDkgJiM0Mzs2NzY2LDEwIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJICogQ2hlY2sgZW5vdWdoIGh1Z2VwYWdlcyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgcmVzZXJ2YXRpb24uCiAJICogSGFuZCB0aGUgcGFnZXMgYmFjayB0byB0aGUgc3VicG9vbCBpZiB0aGVyZSBhcmUgbm90CiAJICovCi0JZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzZXJ2ZSk7CiYjNDM7CWVyciA9IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0KTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJZ290byBvdXRfcHV0X3BhZ2VzOwomIzQzOwlnYmxfcmVzdl9hY2N0ZWQgPSBnYmxfcmVzdl9nZXQ7CiAKIAkvKgogCSAqIEFjY291bnQgZm9yIHRoZSByZXNlcnZhdGlvbnMgbWFkZS4gU2hhcmVkIG1hcHBpbmdzIHJlY29yZCByZWdpb25zCkBAIC02NzcyLDcgJiM0Mzs2Nzg2LDYgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwKIAkJYWRkID0gcmVnaW9uX2FkZChyZXN2X21hcCwgZnJvbSwgdG8sIHJlZ2lvbnNfbmVlZGVkLCBoLCBoX2NnKTsKIAogCQlpZiAodW5saWtlbHkoYWRkICZsdDsgMCkpIHsKLQkJCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTsKIAkJCWVyciA9IGFkZDsKIAkJCWdvdG8gb3V0X3B1dF9wYWdlczsKIAkJfSBlbHNlIGlmICh1bmxpa2VseShjaGcgJmd0OyBhZGQpKSB7CkBAIC02ODA4LDI2ICYjNDM7NjgyMSwyMiBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCX0KIAlyZXR1cm4gY2hnOwogCi1vdXRfcHV0X3BhZ2VzOgotCXNwb29sX3Jlc3YgPSBjaGcgLSBnYmxfcmVzZXJ2ZTsKLQlpZiAoc3Bvb2xfcmVzdikgewotCQkvKiBwdXQgc3ViIHBvb2wmIzM5O3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi8KLQkJZ2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7Ci0JCS8qCi0JCSAqIHN1YnBvb2wmIzM5O3MgcmVzZXJ2ZWQgcGFnZXMgY2FuIG5vdCBiZSBwdXQgYmFjayBkdWUgdG8gcmFjZSwKLQkJICogcmV0dXJuIHRvIGhzdGF0ZS4KLQkJICovCi0JCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2KTsKLQl9Ci0JLyogUmVzdG9yZSB1c2VkX2hwYWdlcyBmb3IgcGFnZXMgdGhhdCBmYWlsZWQgZ2xvYmFsIHJlc2VydmF0aW9uICovCi0JaWYgKGdibF9yZXNlcnZlICZhbXA7JmFtcDsgc3Bvb2wpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0Mzsgb3V0X3B1dF9wYWdlczoKJiM0MzsJLyoKJiM0MzsJICogUmV0dXJuIGFsbCB0aGF0IHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc3VicG9vbCwgbGV0IHN1YnBvb2wKJiM0MzsJICogdGVsbCB1cyB0aGUgbmV3IG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCBuZWVkIHRvIGJlCiYjNDM7CSAqIHJldHVybmVkIHRvIHRoZSBnbG9iYWwgcG9vbC4KJiM0MzsJICovCiYjNDM7CWdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBjaGcpOwomIzQzOwkvKgomIzQzOwkgKiBUaGVyZSBtYXkgYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZgomIzQzOwkgKiByZXNlcnZhdGlvbnMgdG8gY29uc3VtZSBhbmQgdGhlIG51bWJlciB0byByZXN0b3JlIG5vdyBpZgomIzQzOwkgKiB0aGVyZSBhcmUgbXVsdGlwbGUgdGhyZWFkcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdWJwb29sIC0KJiM0MzsJICogcmVzdG9yZSB0aGUgZGlmZmVyZW5jZSwgdGFraW5nIGludG8gYWNjb3VudCBhbnkgZ2xvYmFsCiYjNDM7CSAqIHJlc2VydmF0aW9ucyBhbHJlYWR5IGFjcXVpcmVkLgomIzQzOwkgKi8KJiM0MzsJaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQgLSBnYmxfcmVzdl9hY2N0ZWQpOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKLQkJaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKQotCQkJc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlOwotCQl1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7Ci0JfQogb3V0X3VuY2hhcmdlX2Nncm91cDoKIAlodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksCiAJCQkJCSAgICBjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg1NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBIdWdldGxiZnMgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzLiBGaXJzdCwgdGhlIGZpbGUgY2hhbmdlcy4gSSBzZWU6IGBEb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0YCwgdGhlIENoaW5lc2UgdHJhbnNsYXRpb24sIGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAsIGFuZCBgbW0vaHVnZXRsYi5jYC4gQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgY2hhbmdlcyBhY3Jvc3MgZG9jdW1lbnRhdGlvbiwgdGhlIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24sIGFuZCB0aGUgY29yZSBodWdldGxiIG1lbW9yeSBtYW5hZ2VtZW50LgoKTm93IGZvciB0aGUgbWVhdCBvZiBpdC4gSW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgdGhlIGBodWdldGxiZnNfc3RhdGZzYCBmdW5jdGlvbiBoYXMgYSBidWdmaXguIEl0IGNvcnJlY3RseSBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIGBtYXhfaHBhZ2VzYCBpcyAtMSAobWVhbmluZyB1bmxpbWl0ZWQgcGFnZXMpIGluIGBzYmluZm8tJmd0O3Nwb29sYC4gSW5zdGVhZCBvZiBzdWJ0cmFjdGluZyBmcm9tIC0xLCB3aGljaCB3b3VsZCBsZWFkIHRvIGFyaXRobWV0aWMgbm9uc2Vuc2UsIGl0IHNldHMgdGhlIGBmcmVlX3BhZ2VzYCB0byAtMS4gR29vZCBjYXRjaC4KClRoZSBjb3JlIG9mIHRoZSB3b3JrLCB0aG91Z2gsIGlzIGluIHRoZSBoZWFkZXIgYW5kIG1tIGZpbGVzLiBJdCBsb29rcyBsaWtlIGEgcmVmYWN0b3JpbmcgYW5kIGZpeCBmb3Igc3VicG9vbCBhY2NvdW50aW5nIHdpdGhpbiBodWdldGxiZnMuIFRoZXkmIzM5O3ZlIHRvdWNoZWQgYHN1YnBvb2xfaXNfZnJlZWAsIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AsIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AsIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLiBTcGVjaWZpY2FsbHk6CgoqICAgYHN1YnBvb2xfaXNfZnJlZWAgbm93IGp1c3QgY2hlY2tzIGlmIGB1c2VkX2hwYWdlc2AgaXMgemVybyAoc2VlbXMgbW9yZSBzdHJhaWdodGZvcndhcmQpLgoqICAgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYCBpbmNyZW1lbnRzIGB1c2VkX2hwYWdlc2AgdW5jb25kaXRpb25hbGx5LCB3aGljaCBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZSB0cmFja2luZy4KKiAgIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AgZGVjcmVtZW50cyBgdXNlZF9ocGFnZXNgIHVuY29uZGl0aW9uYWxseSB0b28sIGFuZCBub3cgaW5jbHVkZXMgYSBjYWxjdWxhdGlvbiBmb3IgdGhlIGBsaW1pdGAgdXNpbmcgYm90aCBgbWluX2hwYWdlc2AgYW5kIGB1c2VkX2hwYWdlc2AsIG1ha2luZyBpdCBhbGwgbW9yZSBwcmVjaXNlLgoqICAgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGhhcyBhbiBpbXByb3ZlbWVudDsgSXQgbm93IHByb3Blcmx5IGhhbmRsZXMgcmVzZXJ2YXRpb24gYWNjb3VudGluZyBvbiBmYWlsdXJlIHVzaW5nIGEgZGlmZmVyZW5jZSBjYWxjdWxhdGlvbiwgd2hpY2ggaW5kaWNhdGVzIGEgbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgYXBwcm9hY2guCiogICBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCBjbGVhbnMgdXAgdGhlIGVycm9yIHBhdGhzIGludm9sdmluZyBzdWJwb29scywgbGVhZGluZyB0byBtb3JlIHJlc2lsaWVudCBjb2RlLgoKSXMgdGhpcyByZWFjaGFibGUgY29kZT8gQWJzb2x1dGVseS4gVGhlIGZpbGVzIGBtbS9odWdldGxiLmNgIGFuZCBgZnMvaHVnZXRsYmZzL2AgYXJlIGludGVncmFsIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBzdWJzeXN0ZW1zLiBJJiMzOTtkIGV4cGVjdCB0aGlzIGNvZGUgdG8gYmUgaGl0IGZyZXF1ZW50bHkgd2hlbiB1c2luZyBodWdldGxiZnMgdGhyb3VnaCBtbWFwLCBzeXNjYWxscywgb3IgZmFsbG9jYXRlIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuCgpBbHJpZ2h0LCBub3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgcmVxdWlyZWQgZm9yIGh1Z2V0bGJmcyBhbmQgaHVnZXRsYi4gSSYjMzk7bGwgZ2V0IHRoZSBncmVwcGVyIHJlYWR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9odWdldGxiZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMDcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIERvd24gdGhlIGh1Z2V0bGJmcyBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgS2NvbmZpZyBmaWxlIHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmluZyBodWdldGxiZnMuIFRoaXMgaXNuJiMzOTt0IHVzdWFsbHkgYSB3aWxkIGdvb3NlIGNoYXNlLCBidXQgZGVwZW5kaW5nIG9uIHRoZSBwcm9qZWN0IHN0cnVjdHVyZSwgaXQgY2FuIGJlIHNsaWdodGx5IGxlc3Mgb2J2aW91cyB0aGFuIG9uZSBtaWdodCBob3BlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyB1c3VhbGx5IGZvbGxvd3MgYSBmZXcgcXVpY2sgcGF0aHMuIEnigJlsbCBzdGFydCBieSB0aGlua2luZyBhYm91dCBjb21tb24gbG9jYXRpb25zIOKAkyB0aGUgYGZzL2AsIGBtbS9gLCBvciBtYXliZSBldmVuIHRoZSByb290IG9mIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgaWYgaXQmIzM5O3MgYSBwYXJ0aWN1bGFybHkgY29yZSBmZWF0dXJlLCB0aG91Z2ggdGhhdCYjMzk7cyBsZXNzIGxpa2VseSB0aGVzZSBkYXlzIHdpdGggdGhlIG1vZHVsYXJpemF0aW9uIGVmZm9ydHMuCgpJJiMzOTtsbCBiZSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIG1hcCBvZiB0aGUga2VybmVsIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIE15IG5leHQgbW92ZSB3aWxsIGJlIHRvIHRoaW5rIGFib3V0IG90aGVyIHNpbWlsYXIgZmVhdHVyZXMuIFdoYXQgYXJlIHRoZSBwYXR0ZXJucz8gSXMgaXQgdXNpbmcgYSBzdGFuZGFyZCBgS2NvbmZpZ2AgaW5jbHVkZSwgb3IgaXMgaXQgYSBtb3JlIGJlc3Bva2Ugc2V0dXA/IEkmIzM5O2xsIHByb2JhYmx5IGJlIHF1aWNrbHkgc2Nhbm5pbmcgbXkgbWVtb3J5IGZvciByZWxhdGVkIGZpbGVzeXN0ZW0gb3B0aW9ucyBvciBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zIHRoYXQgSSBjb25maWd1cmVkIHJlY2VudGx5LCBhbmQgY3Jvc3MtcmVmZXJlbmNpbmcuCgpPbmNlIEkmIzM5O3ZlIGdvdCBhIGxpa2VseSBzdXNwZWN0IGxvY2F0aW9uIG9yIHR3bywgSSYjMzk7bGwgZGl2ZSBpbiwgdXNpbmcgYGdyZXBgIG9yIGBmaW5kYCBhcyBhIHF1aWNrIHRlc3QsIGlmIEkgY2FuJiMzOTt0IHJlbWVtYmVyIHByZWNpc2VseS4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGUgcmVsZXZhbnQgY29uZmlnIHN5bWJvbCwgbGlrZSAmIzM0O0hVR0VUTEJGUyYjMzQ7IG9yIG1heWJlIGV2ZW4gYSByZWxhdGVkIGRlcGVuZGVuY3ksIGp1c3QgdG8gbWFrZSBzdXJlIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgcmlnaHQgZmlsZS4gSSYjMzk7bGwgZXhwZWN0IHRvIHJlY29nbml6ZSB0aGUgc3RhbmRhcmQgYGNvbmZpZ2AgZGlyZWN0aXZlIGFuZCBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gRnJvbSB0aGVyZSwgSSBjYW4gcmVmaW5lIG15IHNlYXJjaCBvciBtb3ZlIG9uIHRvIHRoZSBuZXh0IGxpa2VseSBsb2NhdGlvbiB1bnRpbCBJIGxhbmQgb24gdGhlIGZpbGUsIG9yIGZpbGVzLCB0aGF0IEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNTA9bWVudWNvbmZpZyBIVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI1NS1cdGhlbHBcbmZzL0tjb25maWc6MjU2Olx0ICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uXG5mcy9LY29uZmlnLTI1Ny1cdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxuLS1cbmZzL01ha2VmaWxlPTczPW9iai15XHRcdFx0XHQmIzQzOz0gcmFtZnMvXG5mcy9NYWtlZmlsZTo3NDpvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0XHQmIzQzOz0gaHVnZXRsYmZzL1xuZnMvTWFrZWZpbGUtNzUtb2JqLSQoQ09ORklHX0NPREFfRlMpXHRcdCYjNDM7PSBjb2RhL1xuLS1cbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZS01LVxuZnMvaHVnZXRsYmZzL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0hVR0VUTEJGUykgJiM0Mzs9IGh1Z2V0bGJmcy5vXG5mcy9odWdldGxiZnMvTWFrZWZpbGUtNy1cbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZTo4Omh1Z2V0bGJmcy1vYmpzIDo9IGlub2RlLm9cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy00Mi0jZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQzOiNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9odWdldGxiZnMuaFx1MDAzZVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDQtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NTpzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBodWdldGxiZnNfYW9wcztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NzpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDg6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDktXG5mcy9odWdldGxiZnMvaW5vZGUuYzo1MDplbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgeyBOT19TSVpFLCBTSVpFX1NURCwgU0laRV9QRVJDRU5UIH07XG5mcy9odWdldGxiZnMvaW5vZGUuYy01MS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUyOnN0cnVjdCBodWdldGxiZnNfZnNfY29udGV4dCB7XG5mcy9odWdldGxiZnMvaW5vZGUuYy01My1cdHN0cnVjdCBoc3RhdGVcdFx0KmhzdGF0ZTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy01OC1cdGxvbmdcdFx0XHRtaW5faHBhZ2VzO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NTk6XHRlbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgbWF4X3ZhbF90eXBlO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjA6XHRlbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgbWluX3ZhbF90eXBlO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjEtXHRrdWlkX3RcdFx0XHR1aWQ7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBodWdldGxiX2ZzX3BhcmFtZXRlcnNbXSA9IHtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy05OC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk5OnN0YXRpYyBpbnQgaHVnZXRsYmZzX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDAte1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0Ni1cdCAqIGZvciBTSE1fSFVHRVRMQiwgdGhlIHBhZ2VzIGFyZSByZXNlcnZlZCBpbiB0aGUgc2htZ2V0KCkgY2FsbCBzbyBza2lwXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDc6XHQgKiByZXNlcnZpbmcgaGVyZS4gTm90ZTogb25seSBmb3IgU0hNIGh1Z2V0bGJmcyBmaWxlLCB0aGUgaW5vZGVcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0OC1cdCAqIGZsYWcgU19QUklWQVRFIGlzIHNldC5cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xOTY9c3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yMTktICovXG5mcy9odWdldGxiZnMvaW5vZGUuYzoyMjA6c3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yMjEte1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTI5Ny1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjI5ODpzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yOTktXHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMzA1LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MzA2OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3dyaXRlX2VuZChjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0zMDctXHRcdFx0ICAgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTU1Mj1zdGF0aWMgdm9pZCByZW1vdmVfaW5vZGVfaHVnZXBhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTkyLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NTkzOnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTk0LXtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy01OTYtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo1OTc6XHR0cmFjZV9odWdldGxiZnNfZXZpY3RfaW5vZGUoaW5vZGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTk4LVx0cmVtb3ZlX2lub2RlX2h1Z2VwYWdlcyhpbm9kZSwgMCwgTExPTkdfTUFYKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz02MDc9c3RhdGljIHZvaWQgaHVnZXRsYl92bXRydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQpXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjIzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjI0OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc196ZXJvX3BhcnRpYWxfcGFnZShzdHJ1Y3QgaHN0YXRlICpoLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjI1LVx0XHRcdFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy02NDYtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo2NDc6c3RhdGljIGxvbmcgaHVnZXRsYmZzX3B1bmNoX2hvbGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY0OC17XG5mcy9odWdldGxiZnMvaW5vZGUuYzo2NDk6XHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmluZm8gPSBIVUdFVExCRlNfSShpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy02NTAtXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy02NzItXHRpZiAob2Zmc2V0IFx1MDAzYyBob2xlX3N0YXJ0KVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjczOlx0XHRodWdldGxiZnNfemVyb19wYXJ0aWFsX3BhZ2UoaCwgbWFwcGluZyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY3NC1cdFx0XHRcdG9mZnNldCwgbWluKG9mZnNldCAmIzQzOyBsZW4sIGhvbGVfc3RhcnQpKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy02ODUtXHRpZiAoKG9mZnNldCAmIzQzOyBsZW4pIFx1MDAzZSBob2xlX2VuZCBcdTAwMjZcdTAwMjYgKG9mZnNldCAmIzQzOyBsZW4pIFx1MDAzZSBob2xlX3N0YXJ0KVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Njg2Olx0XHRodWdldGxiZnNfemVyb19wYXJ0aWFsX3BhZ2UoaCwgbWFwcGluZyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY4Ny1cdFx0XHRcdGhvbGVfZW5kLCBvZmZzZXQgJiM0MzsgbGVuKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy02OTktXG5mcy9odWdldGxiZnMvaW5vZGUuYzo3MDA6c3RhdGljIGxvbmcgaHVnZXRsYmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG5mcy9odWdldGxiZnMvaW5vZGUuYy03MDEtXHRcdFx0XHRsb2ZmX3QgbGVuKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTcwMy1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NzA0Olx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICppbmZvID0gSFVHRVRMQkZTX0koaW5vZGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzA1LVx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzE4LVx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo3MTk6XHRcdGVycm9yID0gaHVnZXRsYmZzX3B1bmNoX2hvbGUoaW5vZGUsIG9mZnNldCwgbGVuKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTcyMC1cdFx0Z290byBvdXRfbm9sb2NrO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgyNi1vdXRfbm9sb2NrOlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODI3Olx0dHJhY2VfaHVnZXRsYmZzX2ZhbGxvY2F0ZShpbm9kZSwgbW9kZSwgb2Zmc2V0LCBsZW4sIGVycm9yKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgyOC1cdHJldHVybiBlcnJvcjtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MzAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4MzE6c3RhdGljIGludCBodWdldGxiZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgzMi1cdFx0XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgzNy1cdHVuc2lnbmVkIGludCBpYV92YWxpZCA9IGF0dHItXHUwMDNlaWFfdmFsaWQ7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo4Mzg6XHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmluZm8gPSBIVUdFVExCRlNfSShpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy04MzktXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODQzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODQ0Olx0dHJhY2VfaHVnZXRsYmZzX3NldGF0dHIoaW5vZGUsIGRlbnRyeSwgYXR0cik7XG5mcy9odWdldGxiZnMvaW5vZGUuYy04NDUtXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODYzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODY0OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODY1Olx0XHRcdFx0XHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eClcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg2Ni17XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODc1LVx0XHRzaW1wbGVfaW5vZGVfaW5pdF90cyhpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo4NzY6XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG5mcy9odWdldGxiZnMvaW5vZGUuYy04NzctXHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2c2ltcGxlX2Rpcl9vcGVyYXRpb25zO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg5MS0gKi9cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjg5MjpzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGh1Z2V0bGJmc19pX21tYXBfcndzZW1fa2V5O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtODkzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODk0OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg5NS1cdFx0XHRcdFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTEzLVx0aWYgKGlub2RlKSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo5MTQ6XHRcdHN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyAqaW5mbyA9IEhVR0VUTEJGU19JKGlub2RlKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkxNS1cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy05MTgtXHRcdGxvY2tkZXBfc2V0X2NsYXNzKFx1MDAyNmlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VpX21tYXBfcndzZW0sXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5MTk6XHRcdFx0XHRcdTAwMjZodWdldGxiZnNfaV9tbWFwX3J3c2VtX2tleSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo5MjA6XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmh1Z2V0bGJmc19hb3BzO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTIxLVx0XHRzaW1wbGVfaW5vZGVfaW5pdF90cyhpbm9kZSk7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTI4LVx0XHRjYXNlIFNfSUZSRUc6XG5mcy9odWdldGxiZnMvaW5vZGUuYzo5Mjk6XHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTMwOlx0XHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkzMS1cdFx0XHRicmVhaztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkzMi1cdFx0Y2FzZSBTX0lGRElSOlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTMzOlx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG5mcy9odWdldGxiZnMvaW5vZGUuYy05MzQtXHRcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZzaW1wbGVfZGlyX29wZXJhdGlvbnM7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTQ0LVx0XHRsb2NrZGVwX2Fubm90YXRlX2lub2RlX211dGV4X2tleShpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo5NDU6XHRcdHRyYWNlX2h1Z2V0bGJmc19hbGxvY19pbm9kZShpbm9kZSwgZGlyLCBtb2RlKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk0Ni1cdH0gZWxzZSB7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTU2LSAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTU3OnN0YXRpYyBpbnQgaHVnZXRsYmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk1OC1cdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk2MS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk2MjpcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShkaXItXHUwMDNlaV9zYiwgaWRtYXAsIGRpciwgbW9kZSwgZGV2KTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk2My1cdGlmICghaW5vZGUpXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTY5LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTcwOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpodWdldGxiZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTcxLVx0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NzIte1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTczOlx0aW50IHJldHZhbCA9IGh1Z2V0bGJmc19ta25vZChpZG1hcCwgZGlyLCBkZW50cnksXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NzQtXHRcdFx0XHQgICAgIG1vZGUsIDApO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk3OS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk4MDpzdGF0aWMgaW50IGh1Z2V0bGJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODEtXHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTgzLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk4NDpcdHJldHVybiBodWdldGxiZnNfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODUtfVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTg2LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTg3OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODgtXHRcdFx0ICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTkyLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTkzOlx0aW5vZGUgPSBodWdldGxiZnNfZ2V0X2lub2RlKGRpci1cdTAwM2VpX3NiLCBpZG1hcCwgZGlyLCBtb2RlIHwgU19JRlJFRywgMCk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy05OTQtXHRpZiAoIWlub2RlKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMDAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDAxOnN0YXRpYyBpbnQgaHVnZXRsYmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDAyLVx0XHRcdCAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDA4LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTAwOTpcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShkaXItXHUwMDNlaV9zYiwgaWRtYXAsIGRpciwgbW9kZSwgMCk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDEwLVx0aWYgKGlub2RlKSB7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAyMy0jaWZkZWYgQ09ORklHX01JR1JBVElPTlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTAyNDpzdGF0aWMgaW50IGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAyNS1cdFx0XHRcdHN0cnVjdCBmb2xpbyAqZHN0LCBzdHJ1Y3QgZm9saW8gKnNyYyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDQ0LSNlbHNlXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDQ1OiNkZWZpbmUgaHVnZXRsYmZzX21pZ3JhdGVfZm9saW8gTlVMTFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA0Ni0jZW5kaWZcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNDctXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDQ4OnN0YXRpYyBpbnQgaHVnZXRsYmZzX2Vycm9yX3JlbW92ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNDktXHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNTYtICovXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDU3OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDU4LXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNTk6XHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbyA9IEhVR0VUTEJGU19TQihyb290LVx1MDAzZWRfc2IpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA2MC1cdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHNiaW5mby1cdTAwM2VzcG9vbDtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDkzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTA5NDpzdGF0aWMgaW50IGh1Z2V0bGJmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA5NS17XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDk2Olx0c3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8gPSBIVUdFVExCRlNfU0IoZGVudHJ5LVx1MDAzZWRfc2IpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA5Ny1cdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfaW5vZGUoZF9pbm9kZShkZW50cnkpKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTI4LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTEyOTpzdGF0aWMgdm9pZCBodWdldGxiZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTMwLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExMzE6XHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaSA9IEhVR0VUTEJGU19TQihzYik7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTMyLVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNDEtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTQyOnN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJmc19kZWNfZnJlZV9pbm9kZXMoc3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8pXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTQzLXtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTU2LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE1NzpzdGF0aWMgdm9pZCBodWdldGxiZnNfaW5jX2ZyZWVfaW5vZGVzKHN0cnVjdCBodWdldGxiZnNfc2JfaW5mbyAqc2JpbmZvKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE1OC17XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE2Ni1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNjc6c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpodWdldGxiZnNfaW5vZGVfY2FjaGVwO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE2OC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNjk6c3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTcwLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzE6XHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbyA9IEhVR0VUTEJGU19TQihzYik7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTcyOlx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICpwO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3My1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzQ6XHRpZiAodW5saWtlbHkoIWh1Z2V0bGJmc19kZWNfZnJlZV9pbm9kZXMoc2JpbmZvKSkpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTc1LVx0XHRyZXR1cm4gTlVMTDtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzY6XHRwID0gYWxsb2NfaW5vZGVfc2Ioc2IsIGh1Z2V0bGJmc19pbm9kZV9jYWNoZXAsIEdGUF9LRVJORUwpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3Ny1cdGlmICh1bmxpa2VseSghcCkpIHtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzg6XHRcdGh1Z2V0bGJmc19pbmNfZnJlZV9pbm9kZXMoc2JpbmZvKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNzktXHRcdHJldHVybiBOVUxMO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExODMtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTg0OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTg1LXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExODY6XHR0cmFjZV9odWdldGxiZnNfZnJlZV9pbm9kZShpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTg3Olx0a21lbV9jYWNoZV9mcmVlKGh1Z2V0bGJmc19pbm9kZV9jYWNoZXAsIEhVR0VUTEJGU19JKGlub2RlKSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTg4LX1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExODktXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTkwOnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTkxLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExOTI6XHRodWdldGxiZnNfaW5jX2ZyZWVfaW5vZGVzKEhVR0VUTEJGU19TQihpbm9kZS1cdTAwM2VpX3NiKSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTkzLX1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExOTQtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTk1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19hb3BzID0ge1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE5NjpcdC53cml0ZV9iZWdpblx0PSBodWdldGxiZnNfd3JpdGVfYmVnaW4sXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTk3Olx0LndyaXRlX2VuZFx0PSBodWdldGxiZnNfd3JpdGVfZW5kLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE5OC1cdC5kaXJ0eV9mb2xpb1x0PSBub29wX2RpcnR5X2ZvbGlvLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE5OTpcdC5taWdyYXRlX2ZvbGlvICA9IGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIwMDpcdC5lcnJvcl9yZW1vdmVfZm9saW9cdD0gaHVnZXRsYmZzX2Vycm9yX3JlbW92ZV9mb2xpbyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMDEtfTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMjA0PXN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjA1LXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMDY6XHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmVpID0gZm9vO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIwNy1cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjEwLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxMTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxMjpcdC5yZWFkX2l0ZXJcdFx0PSBodWdldGxiZnNfcmVhZF9pdGVyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxMzpcdC5tbWFwXHRcdFx0PSBodWdldGxiZnNfZmlsZV9tbWFwLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIxNC1cdC5mc3luY1x0XHRcdD0gbm9vcF9mc3luYyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjE2LVx0Lmxsc2Vla1x0XHRcdD0gZGVmYXVsdF9sbHNlZWssXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjE3Olx0LmZhbGxvY2F0ZVx0XHQ9IGh1Z2V0bGJmc19mYWxsb2NhdGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjE4LVx0LmZvcF9mbGFnc1x0XHQ9IEZPUF9IVUdFX1BBR0VTLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMjAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjIxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjIyOlx0LmNyZWF0ZVx0XHQ9IGh1Z2V0bGJmc19jcmVhdGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjIzLVx0Lmxvb2t1cFx0XHQ9IHNpbXBsZV9sb29rdXAsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIyNS1cdC51bmxpbmtcdFx0PSBzaW1wbGVfdW5saW5rLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIyNjpcdC5zeW1saW5rXHQ9IGh1Z2V0bGJmc19zeW1saW5rLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIyNzpcdC5ta2Rpclx0XHQ9IGh1Z2V0bGJmc19ta2RpcixcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMjgtXHQucm1kaXJcdFx0PSBzaW1wbGVfcm1kaXIsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjI5Olx0Lm1rbm9kXHRcdD0gaHVnZXRsYmZzX21rbm9kLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzMC1cdC5yZW5hbWVcdFx0PSBzaW1wbGVfcmVuYW1lLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIzMTpcdC5zZXRhdHRyXHQ9IGh1Z2V0bGJmc19zZXRhdHRyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIzMjpcdC50bXBmaWxlXHQ9IGh1Z2V0bGJmc190bXBmaWxlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzMy19O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzNC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMzU6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zID0ge1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIzNjpcdC5zZXRhdHRyXHQ9IGh1Z2V0bGJmc19zZXRhdHRyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzNy19O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzOC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMzk6c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGh1Z2V0bGJmc19vcHMgPSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQwOlx0LmFsbG9jX2lub2RlICAgID0gaHVnZXRsYmZzX2FsbG9jX2lub2RlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0MTpcdC5mcmVlX2lub2RlICAgICA9IGh1Z2V0bGJmc19mcmVlX2lub2RlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0MjpcdC5kZXN0cm95X2lub2RlICA9IGh1Z2V0bGJmc19kZXN0cm95X2lub2RlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0MzpcdC5ldmljdF9pbm9kZVx0PSBodWdldGxiZnNfZXZpY3RfaW5vZGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQ0Olx0LnN0YXRmc1x0XHQ9IGh1Z2V0bGJmc19zdGF0ZnMsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQ1Olx0LnB1dF9zdXBlclx0PSBodWdldGxiZnNfcHV0X3N1cGVyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0NjpcdC5zaG93X29wdGlvbnNcdD0gaHVnZXRsYmZzX3Nob3dfb3B0aW9ucyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyNDctfTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMjU0PXN0YXRpYyBsb25nXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjU1Omh1Z2V0bGJmc19zaXplX3RvX2hwYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZV9vcHQsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjU2Olx0XHRcdCBlbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgdmFsX3R5cGUpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjU3LXtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjczLSAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI3NDpzdGF0aWMgaW50IGh1Z2V0bGJmc19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI3NS17XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjc2Olx0c3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0ICpjdHggPSBmYy1cdTAwM2Vmc19wcml2YXRlO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI3Ny1cdHN0cnVjdCBmc19wYXJzZV9yZXN1bHQgcmVzdWx0O1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNDgtICovXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzQ5OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3ZhbGlkYXRlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNTAte1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM1MTpcdHN0cnVjdCBodWdldGxiZnNfZnNfY29udGV4dCAqY3R4ID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNTItXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTM1Ni1cdCAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM1NzpcdGN0eC1cdTAwM2VtYXhfaHBhZ2VzID0gaHVnZXRsYmZzX3NpemVfdG9faHBhZ2VzKGN0eC1cdTAwM2Voc3RhdGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzU4LVx0XHRcdFx0XHRcdCAgIGN0eC1cdTAwM2VtYXhfc2l6ZV9vcHQsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzU5LVx0XHRcdFx0XHRcdCAgIGN0eC1cdTAwM2VtYXhfdmFsX3R5cGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM2MDpcdGN0eC1cdTAwM2VtaW5faHBhZ2VzID0gaHVnZXRsYmZzX3NpemVfdG9faHBhZ2VzKGN0eC1cdTAwM2Voc3RhdGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzYxLVx0XHRcdFx0XHRcdCAgIGN0eC1cdTAwM2VtaW5fc2l6ZV9vcHQsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTM3Nj1zdGF0aWMgaW50XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzc3Omh1Z2V0bGJmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNzgte1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM3OTpcdHN0cnVjdCBodWdldGxiZnNfZnNfY29udGV4dCAqY3R4ID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzODA6XHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzODEtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzgyOlx0c2JpbmZvID0ga21hbGxvY19vYmooc3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzODMtXHRpZiAoIXNiaW5mbylcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDEwLVx0c2ItXHUwMDNlc19tYWdpYyA9IEhVR0VUTEJGU19NQUdJQztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0MTE6XHRzYi1cdTAwM2VzX29wID0gXHUwMDI2aHVnZXRsYmZzX29wcztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTItXHRzYi1cdTAwM2VzX2RfZmxhZ3MgPSBEQ0FDSEVfRE9OVENBQ0hFO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTUtXHQvKlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQxNjpcdCAqIER1ZSB0byB0aGUgc3BlY2lhbCBhbmQgbGltaXRlZCBmdW5jdGlvbmFsaXR5IG9mIGh1Z2V0bGJmcywgaXQgZG9lc1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQxNy1cdCAqIG5vdCB3b3JrIHdlbGwgYXMgYSBzdGFja2luZyBmaWxlc3lzdGVtLlxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTktXHRzYi1cdTAwM2VzX3N0YWNrX2RlcHRoID0gRklMRVNZU1RFTV9NQVhfU1RBQ0tfREVQVEg7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDIwOlx0c2ItXHUwMDNlc19yb290ID0gZF9tYWtlX3Jvb3QoaHVnZXRsYmZzX2dldF9yb290KHNiLCBjdHgpKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MjEtXHRpZiAoIXNiLVx1MDAzZXNfcm9vdClcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDI5LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQzMDpzdGF0aWMgaW50IGh1Z2V0bGJmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDMxLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0MzI6XHRpbnQgZXJyID0gaHVnZXRsYmZzX3ZhbGlkYXRlKGZjKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MzMtXHRpZiAoZXJyKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNC1cdFx0cmV0dXJuIGVycjtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0MzU6XHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGh1Z2V0bGJmc19maWxsX3N1cGVyKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MzYtfVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNy1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0Mzg6c3RhdGljIHZvaWQgaHVnZXRsYmZzX2ZzX2NvbnRleHRfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDM5LXtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDQyLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ0MzpzdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBodWdldGxiZnNfZnNfY29udGV4dF9vcHMgPSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ0Olx0LmZyZWVcdFx0PSBodWdldGxiZnNfZnNfY29udGV4dF9mcmVlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ0NTpcdC5wYXJzZV9wYXJhbVx0PSBodWdldGxiZnNfcGFyc2VfcGFyYW0sXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ2Olx0LmdldF90cmVlXHQ9IGh1Z2V0bGJmc19nZXRfdHJlZSxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NDctfTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NDgtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ5OnN0YXRpYyBpbnQgaHVnZXRsYmZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDUwLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0NTE6XHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eDtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NTItXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDUzOlx0Y3R4ID0ga3phbGxvY19vYmooc3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0KTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NTQtXHRpZiAoIWN0eClcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDY2LVx0ZmMtXHUwMDNlZnNfcHJpdmF0ZSA9IGN0eDtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0Njc6XHRmYy1cdTAwM2VvcHNcdD0gXHUwMDI2aHVnZXRsYmZzX2ZzX2NvbnRleHRfb3BzO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ2OC1cdHJldHVybiAwO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDcxOnN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBodWdldGxiZnNfZnNfdHlwZSA9IHtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0NzI6XHQubmFtZVx0XHRcdD0gXCYjMzQ7aHVnZXRsYmZzXCYjMzQ7LFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3MzpcdC5pbml0X2ZzX2NvbnRleHRcdD0gaHVnZXRsYmZzX2luaXRfZnNfY29udGV4dCxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzQtXHQucGFyYW1ldGVyc1x0XHQ9IGh1Z2V0bGJfZnNfcGFyYW1ldGVycyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDc4LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3OTpzdGF0aWMgc3RydWN0IHZmc21vdW50ICpodWdldGxiZnNfdmZzbW91bnRbSFVHRV9NQVhfSFNUQVRFXTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0ODAtXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTUwMT1zdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MTMtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTE0Olx0bW50ID0gaHVnZXRsYmZzX3Zmc21vdW50W2hzdGF0ZV9pZHhdO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTUxNS1cdGlmICghbW50KVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MjktXHRmaWxlID0gRVJSX1BUUigtRU5PU1BDKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1MzA6XHQvKiBodWdldGxiZnNfdmZzbW91bnRbXSBtb3VudHMgZG8gbm90IHVzZSBpZG1hcHBlZCBtb3VudHMuICAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTUzMTpcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShtbnQtXHUwMDNlbW50X3NiLCBcdTAwMjZub3BfbW50X2lkbWFwLCBOVUxMLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTUzMi1cdFx0XHRcdCAgICBTX0lGUkVHIHwgU19JUldYVUdPLCAwKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTQ2LVx0XHRmaWxlID0gYWxsb2NfZmlsZV9wc2V1ZG8oaW5vZGUsIG1udCwgbmFtZSwgT19SRFdSLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU0NzpcdFx0XHRcdFx0XHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTQ4LVx0aWYgKCFJU19FUlIoZmlsZSkpXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU1NS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NTY6c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqX19pbml0IG1vdW50X29uZV9odWdldGxiZnMoc3RydWN0IGhzdGF0ZSAqaClcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NTcte1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTYxOlx0ZmMgPSBmc19jb250ZXh0X2Zvcl9tb3VudChcdTAwMjZodWdldGxiZnNfZnNfdHlwZSwgU0JfS0VSTk1PVU5UKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjItXHRpZiAoSVNfRVJSKGZjKSkge1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjQtXHR9IGVsc2Uge1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU2NTpcdFx0c3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0ICpjdHggPSBmYy1cdTAwM2Vmc19wcml2YXRlO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU2Ni1cdFx0Y3R4LVx1MDAzZWhzdGF0ZSA9IGg7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU3MC1cdGlmIChJU19FUlIobW50KSlcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NzE6XHRcdHByX2VycihcJiMzNDtDYW5ub3QgbW91bnQgaW50ZXJuYWwgaHVnZXRsYmZzIGZvciBwYWdlIHNpemUgJWx1S1wmIzM0OyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NzItXHRcdCAgICAgICBodWdlX3BhZ2Vfc2l6ZShoKSAvIFNaXzFLKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTc1LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU3NjpzdGF0aWMgaW50IF9faW5pdCBpbml0X2h1Z2V0bGJmc19mcyh2b2lkKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU3Ny17XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU4OC1cdGVycm9yID0gLUVOT01FTTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1ODk6XHRodWdldGxiZnNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoXCYjMzQ7aHVnZXRsYmZzX2lub2RlX2NhY2hlXCYjMzQ7LFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU5MDpcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyksXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTkxLVx0XHRcdFx0XHQwLCBTTEFCX0FDQ09VTlQsIGluaXRfb25jZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTkyOlx0aWYgKGh1Z2V0bGJmc19pbm9kZV9jYWNoZXAgPT0gTlVMTClcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1OTMtXHRcdGdvdG8gb3V0O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU5NC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1OTU6XHRlcnJvciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oXHUwMDI2aHVnZXRsYmZzX2ZzX3R5cGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU5Ni1cdGlmIChlcnJvcilcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTk5LVx0LyogZGVmYXVsdCBoc3RhdGUgbW91bnQgaXMgcmVxdWlyZWQgKi9cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MDA6XHRtbnQgPSBtb3VudF9vbmVfaHVnZXRsYmZzKFx1MDAyNmRlZmF1bHRfaHN0YXRlKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MDEtXHRpZiAoSVNfRVJSKG1udCkpIHtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjA0LVx0fVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYwNTpcdGh1Z2V0bGJmc192ZnNtb3VudFtkZWZhdWx0X2hzdGF0ZV9pZHhdID0gbW50O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYwNi1cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjE0LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYxNTpcdFx0bW50ID0gbW91bnRfb25lX2h1Z2V0bGJmcyhoKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MTYtXHRcdGlmIChJU19FUlIobW50KSlcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MTc6XHRcdFx0aHVnZXRsYmZzX3Zmc21vdW50W2ldID0gTlVMTDtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MTgtXHRcdGVsc2VcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MTk6XHRcdFx0aHVnZXRsYmZzX3Zmc21vdW50W2ldID0gbW50O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYyMC1cdFx0aSYjNDM7JiM0Mzs7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYyNS0gb3V0X3VucmVnOlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYyNjpcdCh2b2lkKXVucmVnaXN0ZXJfZmlsZXN5c3RlbShcdTAwMjZodWdldGxiZnNfZnNfdHlwZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjI3LSBvdXRfZnJlZTpcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2Mjg6XHRrbWVtX2NhY2hlX2Rlc3Ryb3koaHVnZXRsYmZzX2lub2RlX2NhY2hlcCk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjI5LSBvdXQ6XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYzMS19XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNjMyOmZzX2luaXRjYWxsKGluaXRfaHVnZXRsYmZzX2ZzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODM3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEh1Z2UgUGFnZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGBIVUdFVExCRlNgIGFuZCBgSFVHRVRMQl9QQUdFYC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGV5JiMzOTtyZSByZWxhdGVkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGxvZ2ljIHN0cmFpZ2h0IGluIG15IGhlYWQuIFRpbWUgdG8gb3BlbiB1cCB0aGUgYGZzL0tjb25maWdgIGZpbGUgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEkga25vdyB0aGF0JiMzOTtzIHRoZSBjYW5vbmljYWwgcGxhY2UgZm9yIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCB0aGVpciBkZXNjcmlwdGlvbnMsIGFuZCwgY3JpdGljYWxseSwgdGhlaXIgcmVsYXRpb25zaGlwcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDI1MCDigJMgdGhhdCBmZWVscyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCBsb29raW5nLCBnaXZlbiBteSBleHBlcmllbmNlIHdpdGggc2ltaWxhciBvcHRpb25zIGluIHRoZSBwYXN0LiBIb3BlZnVsbHksIHRoYXQgc2VjdGlvbiB3aWxsIGNvbnRhaW4gdGhlIHJlbGV2YW50IGBjb25maWdgIHN0YXRlbWVudHMgYW5kIGFueSBgZGVwZW5kcyBvbmAgY2xhdXNlcyB0aGF0IHNwZWxsIG91dCBleGFjdGx5IGhvdyB0aGVzZSB0d28gb3B0aW9ucyBhcmUgbGlua2VkLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgYGRlcGVuZHMgb25gIGRpcmVjdGl2ZXMgc3BlY2lmeWluZyB3aGljaCBvdGhlciBvcHRpb25zIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhlc2UgdG8gZXZlbiBzaG93IHVwIGluIHRoZSBtZW51Y29uZmlnLCBvciB3aGljaCBmZWF0dXJlcyB0aGV5IGNhbiBlbmFibGUuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgb25lIGlzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSBvdGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI0NjpcdFxuIDI0NzpcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI0ODpcdFx0ZGVmX2Jvb2wgblxuIDI0OTpcdFxuIDI1MDpcdG1lbnVjb25maWcgSFVHRVRMQkZTXG4gMjUxOlx0XHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuIDI1MjpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI1MzpcdFx0c2VsZWN0IE1FTUZEX0NSRUFURVxuIDI1NDpcdFx0c2VsZWN0IFBBREFUQSBpZiBTTVBcbiAyNTU6XHRcdGhlbHBcbiAyNTY6XHRcdCAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvblxuIDI1NzpcdFx0ICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkXG4gMjU4Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMjU5Olx0XG4gMjYwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjYxOlx0XG4gMjYyOlx0aWYgSFVHRVRMQkZTXG4gMjYzOlx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbiAyNjQ6XHRcdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuIDI2NTpcdFx0ZGVmYXVsdCBuXG4gMjY2Olx0XHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG4gMjY3Olx0XHRoZWxwXG4gMjY4Olx0XHQgIFRoZSBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9mZi4gU2F5IFkgaGVyZSB0b1xuIDI2OTpcdFx0ICBlbmFibGUgSFZPIGJ5IGRlZmF1bHQuIEl0IGNhbiBiZSBkaXNhYmxlZCB2aWEgaHVnZXRsYl9mcmVlX3ZtZW1tYXA9b2ZmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NDIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgSFVHRVRMQl9QQUdFKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHRhc2sgYXQgaGFuZC4gSSBzaG91bGQgaW1tZWRpYXRlbHkgY3Jvc3MtcmVmZXJlbmNlIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSBpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIGZvciBzZXR0aW5ncyByZWxhdGVkIHRvIEh1Z2VUTEIgcGFnZXMuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZGVmaW5pbmcgZmVhdHVyZS4gVGhpcyB3aWxsIGhlbHAgdG8gY29uZmlybSB3aGF0LCBpZiBhbnksIGZlYXR1cmVzIHdlcmUgZW5hYmxlZCwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXJlIG1heSBoYXZlIGJlZW4gb24gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYEhVR0VUTEJfUEFHRWAuIExldCYjMzk7cyBjb25maXJtIGhvdyB0aGUgc3BlY2lmaWMgb3B0aW9ucyBmb3IgdGhhdCBhcmUgc2V0IHVwLiBJIGNhbiYjMzk7dCBhc3N1bWUgYW55dGhpbmcuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCX1BBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02OTQ9Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXG4tLVxubW0vS2NvbmZpZy02OTYtXG5tbS9LY29uZmlnOjY5Nzpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNjk4LVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg0MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkZpbmRpbmcgdGhlIEhVR0VUTEJfUEFHRSBEZWZpbml0aW9uIGluIEtjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYEhVR0VUTEJfUEFHRWAgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGxpa2VseSB0aWVzIGludG8gaHVnZSBwYWdlIHN1cHBvcnQsIGFuZCBmaWd1cmluZyBvdXQgaXRzIGV4YWN0IGRlZmluaXRpb24gd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZSB0cmVlJiMzOTtzIEtjb25maWcgZmlsZXMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBncmVwYCBvciBhIHNpbWlsYXIgc2VhcmNoIHRvb2wgdG8gcXVpY2tseSBsb2NhdGUgaXQuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcGFydCBvZiB0aGUgbWVtb3J5IG9yIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgYnV0IGJlc3QgdG8gc3RhcnQgd2l0aCBhIGJyb2FkIHNlYXJjaCB0byBlbnN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBnZW5lcmFsIHNlYXJjaCBhbmQgdGhlbiBuYXJyb3cgdGhlIHNjb3BlIGlmIG5lY2Vzc2FyeS4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgaW5jbHVzaW9uIGFuZCBhbnkgYXNzb2NpYXRlZCBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSB1c2Ugb2YgaHVnZSBwYWdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcbmZzL0tjb25maWctMjcyLVxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExMzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgSFVHRVRMQkZTIG9uIEh1Z2UgUGFnZXMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYEhVR0VUTEJGU2AgZW5hYmxpbmcgYEhVR0VUTEJfUEFHRWAuIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBjb3JlIHJlbGF0aW9uc2hpcCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgcGxheXMgb3V0IGluIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkIGJ5IHRoaXMgZGlmZi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZzoKCjEuICBgaHVnZXRsYmZzX3N0YXRmc2AgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYC4gVGhpcyBzdWdnZXN0cyBjaGFuZ2VzIHRvIGhvdyB0aGUgZmlsZSBzeXN0ZW0mIzM5O3Mgc3RhdHVzIGlzIHJlcG9ydGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gV2UgY291bGQgc2VlIGRpZmZlcmVudCByZXBvcnRpbmcgcmVsYXRpbmcgdG8gaHVnZSBwYWdlIGFsbG9jYXRpb25zLgoyLiAgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYCBpbiBgbW0vaHVnZXRsYi5jYC4gVGhhdCYjMzk7cyBhIGtleSBvbmUuIEl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLCBzdWdnZXN0aW5nIGEgcmVsYXRpb25zaGlwIHdpdGggcGFnZSBhbGxvY2F0aW9uIGFuZCByZXNlcnZhdGlvbi4KMy4gIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AgYWxzbyBpbiBgbW0vaHVnZXRsYi5jYC4gQW5vdGhlciBzdGF0aWMgZnVuY3Rpb24sIGl0JiMzOTtzIGNhbGxlZCBieSB0aGUgY291bnRlcnBhcnRzIG9mIHRoZSAmIzM0O2dldCYjMzQ7IGZ1bmN0aW9ucywgcGx1cyBgcmVtb3ZlX2lub2RlX2h1Z2VwYWdlc2AuIEl0JiMzOTtzIHJlbGF0ZWQgdG8gcmVsZWFzaW5nIHBhZ2VzLgo0LiAgYHN1YnBvb2xfaXNfZnJlZWAgYWxzbyBpbiBgbW0vaHVnZXRsYi5jYC4gVGhpcyBpcyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAgYW5kIGBodWdlcGFnZV9wdXRfc3VicG9vbGAsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHByb2Nlc3MuCjUuICBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgaW4gYG1tL2h1Z2V0bGIuY2AuIFRoaXMgaXMgb2J2aW91c2x5IGEga2V5IGZ1bmN0aW9uIGZvciBmb2xpbyBhbGxvY2F0aW9uLCBzbyBpdCYjMzk7cyBlc3NlbnRpYWwgdG8gbG9vayBhdC4KNi4gIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGluIGBtbS9odWdldGxiLmNgLiBQYWdlIHJlc2VydmF0aW9uIGlzIGFsc28gYW4gaW1wb3J0YW50IHBhcnQgb2YgdGhlIGZvbGlvIHByb2Nlc3MuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgY2FsbGVycyBvZiB0aG9zZSBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgIGZ1bmN0aW9ucywganVzdCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgaG93IHRoZXNlIGNoYW5nZXMgYXJlIGludGVncmF0ZWQgYW5kIGVuc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIHRoZSBvdmVyYWxsIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfLipfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTE3OT12b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbi0tXG5tbS9odWdldGxiLmMtMTkyLS8qKlxubW0vaHVnZXRsYi5jOjE5MzogKiBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyAtIEdldCBwYWdlcyBmcm9tIGEgc3VicG9vbFxubW0vaHVnZXRsYi5jLTE5NC0gKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKVxuLS1cbm1tL2h1Z2V0bGIuYy0yMDQtICovXG5tbS9odWdldGxiLmM6MjA1OnN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbm1tL2h1Z2V0bGIuYy0yMDYtXHRcdFx0XHQgICAgICBsb25nIGRlbHRhKVxuLS1cbm1tL2h1Z2V0bGIuYy0yNDMtLyoqXG5tbS9odWdldGxiLmM6MjQ0OiAqIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzIC0gUmVsZWFzZSBwYWdlcyBiYWNrIHRvIGEgc3VicG9vbFxubW0vaHVnZXRsYi5jLTI0NS0gKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKVxuLS1cbm1tL2h1Z2V0bGIuYy0yNTYtICovXG5tbS9odWdldGxiLmM6MjU3OnN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbm1tL2h1Z2V0bGIuYy0yNTgtXHRcdFx0XHQgICAgICAgbG9uZyBkZWx0YSlcbi0tXG5tbS9odWdldGxiLmM9OTc1PXZvaWQgaHVnZXRsYl9maXhfcmVzZXJ2ZV9jb3VudHMoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5tbS9odWdldGxiLmMtOTgwLVxubW0vaHVnZXRsYi5jOjk4MTpcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XG5tbS9odWdldGxiLmMtOTgyLVx0aWYgKHJzdl9hZGp1c3QgXHUwMDNlIDApIHtcbi0tXG5tbS9odWdldGxiLmM9MTY4Nj12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGIuYy0xNzExLVx0ICogd291bGQgaGF2ZSBiZWVuIGEgcGFnZSByZXNlcnZlZCBpbiB0aGUgc3VicG9vbCBiZWZvcmUgYWxsb2NhdGlvblxubW0vaHVnZXRsYi5jOjE3MTI6XHQgKiB2aWEgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoKS4gIFNpbmNlIHdlIGFyZSAmIzM5O3Jlc3RvcmluZyYjMzk7IHRoZVxubW0vaHVnZXRsYi5jOjE3MTM6XHQgKiByZXNlcnZhdGlvbiwgZG8gbm90IGNhbGwgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoKSBhcyB0aGlzIHdpbGxcbm1tL2h1Z2V0bGIuYy0xNzE0LVx0ICogcmVtb3ZlIHRoZSByZXNlcnZlZCBwYWdlIGZyb20gdGhlIHN1YnBvb2wuXG4tLVxubW0vaHVnZXRsYi5jLTE3MjItXHRcdCAqL1xubW0vaHVnZXRsYi5jOjE3MjM6XHRcdGlmIChodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSkgPT0gMClcbm1tL2h1Z2V0bGIuYy0xNzI0LVx0XHRcdHJlc3RvcmVfcmVzZXJ2ZSA9IHRydWU7XG4tLVxubW0vaHVnZXRsYi5jPTI5NTQ9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0yOTk4LVx0aWYgKG1hcF9jaGcpIHtcbm1tL2h1Z2V0bGIuYzoyOTk5Olx0XHRnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XG5tbS9odWdldGxiLmMtMzAwMC1cdFx0aWYgKGdibF9yZXN2X2dldCBcdTAwM2MgMCkge1xuLS1cbm1tL2h1Z2V0bGIuYy0zMDY0LVxubW0vaHVnZXRsYi5jOjMwNjU6XHRcdFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbm1tL2h1Z2V0bGIuYy0zMDY2LVx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xuLS1cbm1tL2h1Z2V0bGIuYy0zMDc3LVx0aWYgKG1hcF9jaGcpIHtcbm1tL2h1Z2V0bGIuYzozMDc4Olx0XHRsb25nIGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbm1tL2h1Z2V0bGIuYy0zMDc5LVxuLS1cbm1tL2h1Z2V0bGIuYz00NzIxPXN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1fb3BfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZXRsYi5jLTQ3NDQtXHRcdCAqL1xubW0vaHVnZXRsYi5jOjQ3NDU6XHRcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHJlc2VydmUpO1xubW0vaHVnZXRsYi5jLTQ3NDYtXHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbi0tXG5tbS9odWdldGxiLmM9NjY3MT1sb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbm1tL2h1Z2V0bGIuYy02NzU4LVx0ICovXG5tbS9odWdldGxiLmM6Njc1OTpcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xubW0vaHVnZXRsYi5jLTY3NjAtXHRpZiAoZ2JsX3Jlc3ZfZ2V0IFx1MDAzYyAwKSB7XG4tLVxubW0vaHVnZXRsYi5jLTY4MDgtXG5tbS9odWdldGxiLmM6NjgwOTpcdFx0XHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsXG5tbS9odWdldGxiLmMtNjgxMC1cdFx0XHRcdFx0XHRcdFx0Y2hnIC0gYWRkKTtcbi0tXG5tbS9odWdldGxiLmMtNjgyOS1cdCAqL1xubW0vaHVnZXRsYi5jOjY4MzA6XHRnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgY2hnKTtcbm1tL2h1Z2V0bGIuYy02ODMxLVx0Lypcbi0tXG5tbS9odWdldGxiLmM9Njg1OD1sb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxuLS1cbm1tL2h1Z2V0bGIuYy02ODkyLVx0ICovXG5tbS9odWdldGxiLmM6Njg5MzpcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIChjaGcgLSBmcmVlZCkpO1xubW0vaHVnZXRsYi5jLTY4OTQtXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzk2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBzb21lb25lIGtub3dsZWRnZWFibGUgaW4gdGhpcyBhcmVhOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDYWxsZXJzIGluIGZzL2h1Z2V0bGJmcyoqCgpSaWdodCwgbGV0JiMzOTtzIG5vdCBsaW1pdCBvdXIgc2VhcmNoIHRvIGp1c3QgdGhlIG9idmlvdXMgc3VzcGVjdHMuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSBrbm93IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciwgYW5kIEkgaGF2ZSBhIGdvb2QgaWRlYSBvZiB3aGVyZSB0byBzdGFydCwgYnV0IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhlcmUmIzM5O3MgYWxtb3N0IGFsd2F5cyBzb21ldGhpbmcgbHVya2luZyBpbiB0aGUgc2hhZG93cy4gSSYjMzk7dmUgZ290IHRvIGNhc3QgYSB3aWRlciBuZXQuIFRoZSBjb3JlIGlzc3VlIGlzIHByb2JhYmx5IGxvY2FsaXplZCwgYnV0IEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIG1vbWVudCBhbmQgYWxzbyBtZXRpY3Vsb3VzbHkgY2hlY2sgYGZzL2h1Z2V0bGJmc2AuIFRoZXJlICpjb3VsZCogYmUgcmVsYXRlZCBjYWxscywgb3IgZXZlbiBzdWJ0bGUgaW50ZXJhY3Rpb25zLCBsdXJraW5nIHdpdGhpbiB0aGF0IHBhcnQgb2YgdGhlIGZpbGVzeXN0ZW0gY29kZSB0aGF0IEkmIzM5O20gbWlzc2luZy4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIGlmIGFueXRoaW5nIGVsc2UgaXMgdXNpbmcgdGhvc2UgY29tcG9uZW50cyBvciBmdW5jdGlvbnMuIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMgdG8gYXZvaWQgYW55IG5hc3R5IHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdlcGFnZV9zdWJwb29sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaHVnZXRsYmZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jPTEwNTc9c3RhdGljIGludCBodWdldGxiZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdClcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDU5LVx0c3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8gPSBIVUdFVExCRlNfU0Iocm9vdC1cdTAwM2VkX3NiKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNjA6XHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzYmluZm8tXHUwMDNlc3Bvb2w7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDYxLVx0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplID0gaHVnZV9wYWdlX3NpemUoc2JpbmZvLVx1MDAzZWhzdGF0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODA2CgkJCQkJCQlvdXRwdXQ6IDI4MQoJCQkJCQkJdGhvdWdodHM6IDk0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogSHVnZXRsYmZzIFN1YnBvb2wgQWNjb3VudGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHF1ZXN0aW9uOiBpcyB0aGlzIGNvZGUgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhlIGFuYWx5c2lzLCBhYnNvbHV0ZWx5LiBUaGUgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBRRU1VIGFuZCBzeXNjYWxscyBsaWtlIGBtbWFwYCwgYHN0YXRmc2AsIGFuZCBzcGVjaWZpYyBodWdldGxiZnMgbW91bnQgb3B0aW9ucyDigJMgbm8gbWFnaWMgcmVxdWlyZWQuIFRoaXMgaXMgYSBnb29kIHN0YXJ0LgoKVGhlIHJlYWwgbWVhdCBpcyBpbiB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBodWdldGxiIHN1YnBvb2wgYWNjb3VudGluZyBsb2dpYy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnM6IGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AsIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AsIGBzdWJwb29sX2lzX2ZyZWVgLCBgYWxsb2NfaHVnZXRsYl9mb2xpb2AsIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLCBhbmQgYGh1Z2V0bGJmc19zdGF0ZnNgLiBTcGVjaWZpY2FsbHksIHRoZSBhY2NvdW50aW5nIGZvciBgdXNlZF9ocGFnZXNgIGlzIHVuY29uZGl0aW9uYWxseSBhZGp1c3RlZCBub3csIGFuZCBtaW5pbXVtIHNpemUgY2FsY3VsYXRpb25zIGFyZSBjb21wbGV0ZWx5IHJlc3RydWN0dXJlZC4gRXJyb3IgdW53aW5kIGNhbGN1bGF0aW9ucyBmb3Igc3VicG9vbHMgYW5kIGdsb2JhbCByZXNlcnZhdGlvbnMgd2l0aGluIGBhbGxvY19odWdldGxiX2ZvbGlvYCBhbmQgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgaGF2ZSBhbHNvIGJlZW4gYWx0ZXJlZC4gVGhpcyBpcyBhIGRpcmVjdCB0b3VjaCB0byBtZW1vcnkgbWFuYWdlbWVudCBpbnZhcmlhbnRzIGluIGBtbS9odWdldGxiLmNgIGFuZCBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLiBUaGF0JiMzOTtzIGEgdGV4dGJvb2sgZGVmaW5pdGlvbiBvZiAmIzM0O3dvcnRoIGZ1enppbmcuJiMzNDsKCk5vdywgbGV0JiMzOTtzIGJlIHN0cmF0ZWdpYyBhYm91dCBvdXIgYEZvY3VzU3ltYm9sc2AuIFdlIGRvbiYjMzk7dCB3YW50IHRvIHdhc3RlIGN5Y2xlcyBvbiB1YmlxdWl0b3VzIGFsbG9jYXRvcnMgb3IgZ2VuZXJhbCBsb2NrIHByaW1pdGl2ZXMuIEluc3RlYWQsIHdlIHdhbnQgZnVuY3Rpb25zIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZSBwYXRjaC4gU28sIHdlJiMzOTtyZSB0YXJnZXRpbmcgdGhlc2UgZXhhY3Qgc3ltYm9sczoKCiogICBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgCiogICBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgCiogICBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYAoqICAgYGFsbG9jX2h1Z2V0bGJfZm9saW9gCiogICBgaHVnZXRsYmZzX3N0YXRmc2AKKiAgIGBodWdlcGFnZV9wdXRfc3VicG9vbGAgLyBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAgKHdoZXJlIHN1YnBvb2xfaXNfZnJlZSBpcyBjYWxsZWQpCiogICBgaHVnZXRsYl91bnJlc2VydmVfcGFnZXNgCiogICBgaHVnZXRsYl9maXhfcmVzZXJ2ZV9jb3VudHNgCgpDb25maXJtZWQgdGhlIGV4YWN0IG5hbWVzIGFnYWluc3QgYG1tL2h1Z2V0bGIuY2AgYW5kIGBmcy9odWdldGxiZnMvaW5vZGUuY2A6CgoqICAgYGh1Z2V0bGJmc19zdGF0ZnNgCiogICBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgCiogICBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgCiogICBgYWxsb2NfaHVnZXRsYl9mb2xpb2AKKiAgIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgCiogICBgaHVnZXRsYl91bnJlc2VydmVfcGFnZXNgCiogICBgaHVnZXBhZ2VfcHV0X3N1YnBvb2xgCgpBbmQgZm9yIGNvbmZpZ3VyYXRpb25zPyBXZSBuZWVkIGBIVUdFVExCRlNgLiBUaGlzIGltcGxpZXMgYEhVR0VUTEJfUEFHRWAgb24gc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMgKGxpa2UgeDg2XF82NCksIHNvIHRoYXQmIzM5O3MgY292ZXJlZC4gU2FuaXR5IGNoZWNrIGNvbmZpcm1zIHRoZSBmb3JtYXQgZm9yIGBFbmFibGVDb25maWdzYCBpcyBqdXN0IHRoZSBmbGFncyB3aXRob3V0IHRoZSBgQ09ORklHX2AgcHJlZml4OiBgWyYjMzQ7SFVHRVRMQkZTJiMzNDtdYCAob3IgcG90ZW50aWFsbHkgYFsmIzM0O0hVR0VUTEJGUyYjMzQ7LCAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7XWApLgoKU28sIHRvIHN1bW1hcml6ZSBhbmQgY29uZmlybToKCiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlLgoqICAgKipSZWFzb25pbmcqKjogU3VicG9vbCBhY2NvdW50aW5nIGFuZCBlcnJvciBoYW5kbGluZyBjaGFuZ2VzLCBpbXBhY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFjY2Vzc2libGUgdmlhIGBodWdldGxiZnNgIGFuZCBgbW1hcGAuCiogICAqKkZvY3VzU3ltYm9scyoqOiBTcGVjaWZpYyBmdW5jdGlvbnMgbGlzdGVkIGFib3ZlLgoqICAgKipFbmFibGVDb25maWdzKio6IGAmIzM0O0hVR0VUTEJGUyYjMzQ7YAoqICAgVGltZSB0byBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXRsYl9yZXNlcnZlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7aHVnZXRsYmZzX3N0YXRmcyYjMzQ7LAogICAgJiMzNDtodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV9wdXRfc3VicG9vbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiZnMgc3VicG9vbCBhY2NvdW50aW5nIGxvZ2ljIGFuZCByZXNlcnZhdGlvbiBlcnJvci11bndpbmQgcGF0aHMgaW4gbW0vaHVnZXRsYi5jIGFuZCBmcy9odWdldGxiZnMvaW5vZGUuYy4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIGhvdyBgdXNlZF9ocGFnZXNgIGFuZCBgcnN2X2hwYWdlc2AgYXJlIHVwZGF0ZWQgaW4gYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKClgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoKWAsIGFsdGVycyBzdWJwb29sIHJlbGVhc2UgY2hlY2tzIGluIGBzdWJwb29sX2lzX2ZyZWUoKWAsIGZpeGVzIHN0YXRmcyBjYWxjdWxhdGlvbiBmb3IgdW5ib3VuZGVkIHN1YnBvb2xzIGluIGBodWdldGxiZnNfc3RhdGZzKClgLCBhbmQgcmVmYWN0b3JzIGdsb2JhbCBtZW1vcnkgcmVzZXJ2YXRpb24gcm9sbGJhY2tzIGluIGBhbGxvY19odWdldGxiX2ZvbGlvKClgIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgLiBUaGlzIGxvZ2ljIGlzIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaHVnZXRsYmZzIGZpbGVzeXN0ZW0gbW91bnRzLCBhbGxvY2F0aW9ucywgYW5kIG1tYXAgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXRsYl9yZXNlcnZlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7aHVnZXRsYmZzX3N0YXRmcyYjMzQ7LAogICAgJiMzNDtodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV9wdXRfc3VicG9vbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiZnMgc3VicG9vbCBhY2NvdW50aW5nIGxvZ2ljIGFuZCByZXNlcnZhdGlvbiBlcnJvci11bndpbmQgcGF0aHMgaW4gbW0vaHVnZXRsYi5jIGFuZCBmcy9odWdldGxiZnMvaW5vZGUuYy4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIGhvdyBgdXNlZF9ocGFnZXNgIGFuZCBgcnN2X2hwYWdlc2AgYXJlIHVwZGF0ZWQgaW4gYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKClgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoKWAsIGFsdGVycyBzdWJwb29sIHJlbGVhc2UgY2hlY2tzIGluIGBzdWJwb29sX2lzX2ZyZWUoKWAsIGZpeGVzIHN0YXRmcyBjYWxjdWxhdGlvbiBmb3IgdW5ib3VuZGVkIHN1YnBvb2xzIGluIGBodWdldGxiZnNfc3RhdGZzKClgLCBhbmQgcmVmYWN0b3JzIGdsb2JhbCBtZW1vcnkgcmVzZXJ2YXRpb24gcm9sbGJhY2tzIGluIGBhbGxvY19odWdldGxiX2ZvbGlvKClgIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgLiBUaGlzIGxvZ2ljIGlzIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaHVnZXRsYmZzIGZpbGVzeXN0ZW0gbW91bnRzLCBhbGxvY2F0aW9ucywgYW5kIG1tYXAgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdWJwb29sIGFjY291bnRpbmcgYW5kIHJlc2VydmF0aW9uIGxvZ2ljIGZvciBodWdldGxiZnMgKGluY2x1ZGluZyBodWdldGxiX3N1YnBvb2xfZ2V0X3BhZ2VzLCBodWdldGxiX3N1YnBvb2xfcHV0X3BhZ2VzLCBzdGF0ZnMgcmVwb3J0aW5nLCBhbmQgcm9sbGJhY2sgaGFuZGxpbmcgaW4gYWxsb2NfaHVnZXRsYl9mb2xpbyBhbmQgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKS5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChzdWNoIGFzIGdibF9yZXN2X2dldCwgZ2JsX3Jlc3ZfcHV0LCBnYmxfcmVzdl9hY2N0ZWQsIGxpbWl0LCBhbmQgZnJlZV9wYWdlcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhY3Jvc3MgYWxsIGNvbnRyb2wgZmxvdyBwYXRocy4gTm8gbmV3IHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgYWxsb2NhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIG5vIHBhZGRpbmcgYnl0ZXMgYXJlIGV4cG9zZWQsIGFuZCBubyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgcGFzc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb25kaXRpb25hbCBicmFuY2hpbmcuXG5cblBvdGVudGlhbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaCBpbnZvbHZlIHBhZ2UgYWNjb3VudGluZyBpbmFjY3VyYWNpZXMsIGNvbmN1cnJlbmN5L3N5bmNocm9uaXphdGlvbiB1bmRlciByYWNlIGNvbmRpdGlvbnMsIG9yIG1lbW9yeSBleGhhdXN0aW9uLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucywgS0FTQU4sIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdhMzcwNTRhN2ZkOTk2YmUzMGU5MDM2NTU2MTdmODU2ZWZjNzY2ZDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDIyOjAxOjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QKaW5kZXggYTQ5MTE1ZGIxOGM3Ni4uZDI0NDU4M2ZkY2JjMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CkBAIC0zMTQsMjEgJiM0MzszMTQsOCBAQCBodWdlIHBhZ2VzLiAgSWYgdGhleSBjYW4gbm90IGJlIHJlc2VydmVkLCB0aGUgbW91bnQgZmFpbHMuCiBUaGUgcm91dGluZXMgaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgYXJlIGNhbGxlZCB3aGVuIHBhZ2VzIGFyZQogb2J0YWluZWQgZnJvbSBvciByZWxlYXNlZCBiYWNrIHRvIGEgc3VicG9vbC4gIFRoZXkgcGVyZm9ybSBhbGwgc3VicG9vbAogYWNjb3VudGluZywgYW5kIHRyYWNrIGFueSByZXNlcnZhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sLgotaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzIGFyZSBwYXNzZWQgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIGJ5IHdoaWNoCi10byBhZGp1c3QgdGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudCAoZG93biBmb3IgZ2V0LCB1cCBmb3IgcHV0KS4gIE5vcm1hbGx5LAotdGhleSByZXR1cm4gdGhlIHNhbWUgdmFsdWUgdGhhdCB3YXMgcGFzc2VkIG9yIGFuIGVycm9yIGlmIG5vdCBlbm91Z2ggcGFnZXMKLWV4aXN0IGluIHRoZSBzdWJwb29sLgotCi1Ib3dldmVyLCBpZiByZXNlcnZlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGEgcmV0dXJuIHZhbHVlIGxlc3MKLXRoYW4gdGhlIHBhc3NlZCB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQuICBUaGlzIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgdGhlCi1udW1iZXIgb2YgYWRkaXRpb25hbCBnbG9iYWwgcG9vbCBhZGp1c3RtZW50cyB3aGljaCBtdXN0IGJlIG1hZGUuICBGb3IgZXhhbXBsZSwKLXN1cHBvc2UgYSBzdWJwb29sIGNvbnRhaW5zIDMgcmVzZXJ2ZWQgaHVnZSBwYWdlcyBhbmQgc29tZW9uZSBhc2tzIGZvciA1LgotVGhlIDMgcmVzZXJ2ZWQgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGNhbiBiZSB1c2VkIHRvIHNhdGlzZnkgcGFydAotb2YgdGhlIHJlcXVlc3QuICBCdXQsIDIgcGFnZXMgbXVzdCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBnbG9iYWwgcG9vbHMuICBUbwotcmVsYXkgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUgY2FsbGVyLCB0aGUgdmFsdWUgMiBpcyByZXR1cm5lZC4gIFRoZSBjYWxsZXIKLWlzIHRoZW4gcmVzcG9uc2libGUgZm9yIGF0dGVtcHRpbmcgdG8gb2J0YWluIHRoZSBhZGRpdGlvbmFsIHR3byBwYWdlcyBmcm9tCi10aGUgZ2xvYmFsIHBvb2xzLgotCiYjNDM7aHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgdXNlIHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcyBwYXNzZWQgdG8gYWRqdXN0CiYjNDM7dGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudC4KIAogQ09XIGFuZCBSZXNlcnZhdGlvbnMKID09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CmluZGV4IDIwOTQ3ZjhiZDA2NTQuLmFlMWYxZjMxNDc3ZmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CkBAIC0yNDYsMTUgJiM0MzsyNDYsOCBAQCBodWdlcGFnZV9zdWJwb29s55qEbWluX2hwYWdlc+Wtl+auteS4reiiq+i3n+i4quOAguWcqOaMgui9veaXtu+8jGh1Z2V0bGJfYWNjdF9tZQog6KKr6LCD55So5Lul6aKE55WZ5oyH5a6a5pWw6YeP55qE5beo6aG144CC5aaC5p6c5a6D5Lus5LiN6IO96KKr6aKE55WZ77yM5oyC6L295bCx5Lya5aSx6LSl44CCCiAKIOW9k+S7juWtkOaxoOS4reiOt+WPluaIlumHiuaUvumhtemdouaXtu+8jOS8muiwg+eUqGh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygp5Ye95pWw44CCCi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXPooqvkvKDpgJLnu5nlt6jpobXmlbDph4/vvIzku6XmraTmnaXosIPmlbTlrZDmsaDnmoQg4oCc5bey55So6aG16Z2i4oCdIOiuoeaVsAot77yIZ2V05Li65LiL6ZmN77yMcHV05Li65LiK5Y2H77yJ44CC6YCa5bi45oOF5Ya15LiL77yM5aaC5p6c5a2Q5rGg5Lit5rKh5pyJ6Laz5aSf55qE6aG16Z2i77yM5a6D5Lus5Lya6L+U5Zue5LiO5Lyg6YCS55qE55u45ZCM55qE5YC85oiWCi3kuIDkuKrplJnor6/jgIIKLQot54S26ICM77yM5aaC5p6c6aKE55WZ5LiO5a2Q5rGg55u45YWz6IGU77yM5Y+v6IO95Lya6L+U5Zue5LiA5Liq5bCP5LqO5Lyg6YCS5YC855qE6L+U5Zue5YC844CC6L+Z5Liq6L+U5Zue5YC86KGo56S65b+F6aG76L+b6KGM55qE6aKd5aSW5YWo5bGACi3msaDosIPmlbTnmoTmlbDph4/jgILkvovlpoLvvIzlgYforr7kuIDkuKrlrZDmsaDljIXlkKsz5Liq6aKE55WZ55qE5beo6aG177yM5pyJ5Lq66KaB5rGCNeS4quOAguS4juWtkOaxoOebuOWFs+eahDPkuKrpooTnlZnpobXlj6/ku6XnlKjmnaUKLea7oei2s+mDqOWIhuivt+axguOAguS9huaYr++8jOW/hemhu+S7juWFqOWxgOaxoOS4reiOt+W+lzLkuKrpobXpnaLjgILkuLrkuoblkJHosIPnlKjogIXovazovr7ov5nkuIDkv6Hmga/vvIzlsIbov5Tlm57lgLwy44CC54S25ZCO77yM6LCD55SoCi3ogIXopoHotJ/otKPku47lhajlsYDmsaDkuK3ojrflj5blj6blpJbkuKTkuKrpobXpnaLjgIIKLQomIzQzO+Wug+S7rOi0n+i0o+aJgOacieWtkOaxoOeahOe7n+iuoeaguOeul++8jOW5tui3n+i4quS4juWtkOaxoOebuOWFs+iBlOeahOmihOeVmeOAggomIzQzO2h1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygp5Ye95pWw5L2/55So5Lyg5YWl55qE5beo6aG15pWw6YeP5p2l6LCD5pW05a2Q5rGg55qE4oCc5bey55So6aG16Z2i4oCd6K6h5pWw44CCCiAKIENPV+WSjOmihOeVmQogPT09PT09PT09PQpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCA3NjExYTg0NzBlYTI2Li41MTEzZjc0M2Y2ZmM3IDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtMTEwOSw4ICYjNDM7MTEwOSwxMiBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogCiAJCQlzcGluX2xvY2tfaXJxKCZhbXA7c2JpbmZvLSZndDtzcG9vbC0mZ3Q7bG9jayk7CiAJCQlidWYtJmd0O2ZfYmxvY2tzID0gc2JpbmZvLSZndDtzcG9vbC0mZ3Q7bWF4X2hwYWdlczsKLQkJCWZyZWVfcGFnZXMgPSBzYmluZm8tJmd0O3Nwb29sLSZndDttYXhfaHBhZ2VzCi0JCQkJLSBzYmluZm8tJmd0O3Nwb29sLSZndDt1c2VkX2hwYWdlczsKJiM0MzsJCQlpZiAoc2JpbmZvLSZndDtzcG9vbC0mZ3Q7bWF4X2hwYWdlcyA9PSAtMSkgewomIzQzOwkJCQlmcmVlX3BhZ2VzID0gLTE7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJZnJlZV9wYWdlcyA9IHNiaW5mby0mZ3Q7c3Bvb2wtJmd0O21heF9ocGFnZXMgLQomIzQzOwkJCQkJICAgICBzYmluZm8tJmd0O3Nwb29sLSZndDt1c2VkX2hwYWdlczsKJiM0MzsJCQl9CiAJCQlidWYtJmd0O2ZfYmF2YWlsID0gYnVmLSZndDtmX2JmcmVlID0gZnJlZV9wYWdlczsKIAkJCXNwaW5fdW5sb2NrX2lycSgmYW1wO3NiaW5mby0mZ3Q7c3Bvb2wtJmd0O2xvY2spOwogCQkJYnVmLSZndDtmX2ZpbGVzID0gc2JpbmZvLSZndDttYXhfaW5vZGVzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCAxNmM0YzRjYWExMjZjLi40NTUxZmYzMDIzNjQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtMzksOCAmIzQzOzM5LDggQEAgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgewogCXNwaW5sb2NrX3QgbG9jazsKIAlsb25nIGNvdW50OwogCWxvbmcgbWF4X2hwYWdlczsJLyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovCi0JbG9uZyB1c2VkX2hwYWdlczsJLyogVXNlZCBjb3VudCBhZ2FpbnN0IG1heGltdW0sIGluY2x1ZGVzICovCi0JCQkJLyogYm90aCBhbGxvY2F0ZWQgYW5kIHJlc2VydmVkIHBhZ2VzLiAqLwomIzQzOwlsb25nIHVzZWRfaHBhZ2VzOwkvKiBVc2VkIHBhZ2UgY291bnQsIGluY2x1ZGVzIGJvdGggKi8KJiM0MzsJCQkJLyogYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi8KIAlzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7CiAJbG9uZyBtaW5faHBhZ2VzOwkvKiBNaW5pbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWluaW11bS4gKi8KIAlsb25nIHJzdl9ocGFnZXM7CS8qIFBhZ2VzIHJlc2VydmVkIGFnYWluc3QgZ2xvYmFsIHBvb2wgdG8gKi8KZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA0ZjZmNThiZjNkYjZjLi4xMTUxYWQ5NTlmZmQ1IDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC0xMzAsMTIgJiM0MzsxMzAsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCkKIHsKIAlpZiAoc3Bvb2wtJmd0O2NvdW50KQogCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKQotCQlyZXR1cm4gc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDA7Ci0JaWYgKHNwb29sLSZndDttaW5faHBhZ2VzICE9IC0xKQotCQlyZXR1cm4gc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgPT0gc3Bvb2wtJmd0O21pbl9ocGFnZXM7CiAKLQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuIHNwb29sLSZndDt1c2VkX2hwYWdlcyA9PSAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCkBAIC0xOTMsMTMgJiM0MzsxODksMTggQEAgdm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCiAJdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpOwogfQogCi0vKgotICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBhbGxvY2F0aW5nIGFuZCByZXNlcnZpbmcgcGFnZXMuCi0gKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGUKLSAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZQotICogZ2xvYmFsIHBvb2xzIG11c3QgYmUgYWRqdXN0ZWQgKHVwd2FyZCkuICBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5Ci0gKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZQotICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuCiYjNDM7LyoqCiYjNDM7ICogaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMgLSBHZXQgcGFnZXMgZnJvbSBhIHN1YnBvb2wKJiM0MzsgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKQomIzQzOyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlIG9yIHJlc2VydmUKJiM0MzsgKgomIzQzOyAqIENoZWNrIGFuZCB1cGRhdGUgc3VicG9vbCBwYWdlIHVzYWdlIGNvdW50cyB3aGVuIGFsbG9jYXRpbmcgb3IKJiM0MzsgKiByZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IFRha2VzIHNwb29sLSZndDtsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnEoKS4KJiM0MzsgKiBSZXR1cm46IE5vbi1uZWdhdGl2ZSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgY2Fubm90IGJlCiYjNDM7ICogICAgICAgICBzYXRpc2ZpZWQgYnkgdGhlIHN1YnBvb2wsIG9yIC1FTk9NRU0gaWYgdGhlIHN1YnBvb2wgbWF4aW11bQomIzQzOyAqICAgICAgICAgbGltaXQgd291bGQgYmUgZXhjZWVkZWQuCiAgKi8KIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAkJCQkgICAgICBsb25nIGRlbHRhKQpAQCAtMjExLDE1ICYjNDM7MjEyLDE0IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAogCXNwaW5fbG9ja19pcnEoJmFtcDtzcG9vbC0mZ3Q7bG9jayk7CiAKLQlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEpIHsJCS8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovCi0JCWlmICgoc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzICYjNDM7IGRlbHRhKSAmbHQ7PSBzcG9vbC0mZ3Q7bWF4X2hwYWdlcykKLQkJCXNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7Ci0JCWVsc2UgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gdW5sb2NrX3JldDsKLQkJfQomIzQzOwlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOwomIzQzOwkgICAgc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzICYjNDM7IGRlbHRhICZndDsgc3Bvb2wtJmd0O21heF9ocGFnZXMpIHsKJiM0MzsJCXJldCA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIHVubG9ja19yZXQ7CiAJfQogCiYjNDM7CXNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7CiYjNDM7CiAJLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi8KIAlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOyBzcG9vbC0mZ3Q7cnN2X2hwYWdlcykgewogCQlpZiAoZGVsdGEgJmd0OyBzcG9vbC0mZ3Q7cnN2X2hwYWdlcykgewpAQCAtMjQwLDExICYjNDM7MjQwLDE5IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBmcmVlaW5nIGFuZCB1bnJlc2VydmluZyBwYWdlcy4KLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdsb2JhbCBwYWdlIHJlc2VydmF0aW9ucyB0aGF0IG11c3QgYmUgZHJvcHBlZC4KLSAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpCi0gKiBpbiB0aGUgY2FzZSB3aGVyZSBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC4KJiM0MzsvKioKJiM0MzsgKiBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyAtIFJlbGVhc2UgcGFnZXMgYmFjayB0byBhIHN1YnBvb2wKJiM0MzsgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKQomIzQzOyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGZyZWUgb3IgdW5yZXNlcnZlCiYjNDM7ICoKJiM0MzsgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBmcmVlaW5nIG9yCiYjNDM7ICogdW5yZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IFRha2VzIHNwb29sLSZndDtsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnFzYXZlKCkuIE1heSByZWxlYXNlCiYjNDM7ICogICAgICAgICAgYW5kIGZyZWUgQHNwb29sIGlmIGl0cyB1c2FnZSBjb3VudCBhbmQgcmVmZXJlbmNlcyByZWFjaAomIzQzOyAqICAgICAgICAgIHplcm8uCiYjNDM7ICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IHRoZSBzdWJwb29sIGNhbm5vdAomIzQzOyAqICAgICAgICAgYWJzb3JiLgogICovCiBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCiAJCQkJICAgICAgIGxvbmcgZGVsdGEpCkBAIC0yNTcsMTkgJiM0MzsyNjUsMjQgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzcG9vbC0mZ3Q7bG9jaywgZmxhZ3MpOwogCi0JaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKQkJLyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi8KLQkJc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzIC09IGRlbHRhOwomIzQzOwlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgLT0gZGVsdGE7CiAKIAkgLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi8KIAlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOyBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgJmx0OyBzcG9vbC0mZ3Q7bWluX2hwYWdlcykgewotCQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0MzsgZGVsdGEgJmx0Oz0gc3Bvb2wtJmd0O21pbl9ocGFnZXMpCiYjNDM7CQkvKgomIzQzOwkJICogbGltaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0CiYjNDM7CQkgKiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcyBzdWJwb29sLgomIzQzOwkJICovCiYjNDM7CQlsb25nIGxpbWl0ID0gc3Bvb2wtJmd0O21pbl9ocGFnZXMgLSBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXM7CiYjNDM7CiYjNDM7CQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0MzsgZGVsdGEgJmx0Oz0gbGltaXQpCiAJCQlyZXQgPSAwOwogCQllbHNlCi0JCQlyZXQgPSBzcG9vbC0mZ3Q7cnN2X2hwYWdlcyAmIzQzOyBkZWx0YSAtIHNwb29sLSZndDttaW5faHBhZ2VzOwomIzQzOwkJCXJldCA9IHNwb29sLSZndDtyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIC0gbGltaXQ7CiAKIAkJc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0Mzs9IGRlbHRhOwotCQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJmd0OyBzcG9vbC0mZ3Q7bWluX2hwYWdlcykKLQkJCXNwb29sLSZndDtyc3ZfaHBhZ2VzID0gc3Bvb2wtJmd0O21pbl9ocGFnZXM7CiYjNDM7CQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJmd0OyBsaW1pdCkKJiM0MzsJCQlzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9IGxpbWl0OwogCX0KIAogCS8qCkBAIC0yOTQ0LDcgJiM0MzsyOTU3LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfdm1hKHZtYSk7CiAJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwotCWxvbmcgcmV0dmFsLCBnYmxfY2hnLCBnYmxfcmVzZXJ2ZTsKJiM0MzsJbG9uZyByZXR2YWwsIGdibF9yZXN2X2dldDsKIAltYXBfY2hnX3N0YXRlIG1hcF9jaGc7CiAJc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCBtcG9saTsKIAlnZnBfdCBnZnAgPSBodGxiX2FsbG9jX21hc2soaCk7CkBAIC0yOTgzLDggJiM0MzsyOTk2LDggQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCSAqIE9yIGlmIGl0IGNhbiBnZXQgb25lIGZyb20gdGhlIHBvb2wgcmVzZXJ2YXRpb24gZGlyZWN0bHkuCiAJICovCiAJaWYgKG1hcF9jaGcpIHsKLQkJZ2JsX2NoZyA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTsKLQkJaWYgKGdibF9jaGcgJmx0OyAwKSB7CiYjNDM7CQlnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7CiYjNDM7CQlpZiAoZ2JsX3Jlc3ZfZ2V0ICZsdDsgMCkgewogCQkJcmV0ID0gLUVOT1NQQzsKIAkJCWdvdG8gb3V0X2VuZF9yZXNlcnZhdGlvbjsKIAkJfQpAQCAtMjk5Myw3ICYjNDM7MzAwNiw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJICogSWYgd2UgaGF2ZSB0aGUgdm1hIHJlc2VydmF0aW9uIHJlYWR5LCBubyBuZWVkIGZvciBleHRyYQogCQkgKiBnbG9iYWwgcmVzZXJ2YXRpb24uCiAJCSAqLwotCQlnYmxfY2hnID0gMDsKJiM0MzsJCWdibF9yZXN2X2dldCA9IDA7CiAJfQogCiAJLyoKQEAgLTMwMDQsMTAgJiM0MzszMDE3LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJYWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDsKIAogCS8qCi0JICogZ2JsX2NoZyA9PSAwIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyBmb3IgdGhpcwomIzQzOwkgKiBnYmxfcmVzdl9nZXQgPT0gMCBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoaXMKIAkgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LgogCSAqLwotCWlmIChnYmxfY2hnID09IDApCiYjNDM7CWlmIChnYmxfcmVzdl9nZXQgPT0gMCkKIAkJYWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUzsKIAogCS8qIFRha2VzIHJlZmVyZW5jZSBvbiBtcG9sLiAqLwpAQCAtMzA2MSwxMyAmIzQzOzMwNzQsMTAgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXJldHVybiBmb2xpbzsKIAogb3V0X3N1YnBvb2xfcHV0OgotCS8qCi0JICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wmIzM5O3MgcnN2X2hwYWdlcyBpcyB1c2VkCi0JICogZHVyaW5nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLgotCSAqLwotCWlmIChtYXBfY2hnICZhbXA7JmFtcDsgIWdibF9jaGcpIHsKLQkJZ2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7Ci0JCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTsKJiM0MzsJaWYgKG1hcF9jaGcpIHsKJiM0MzsJCWxvbmcgZ2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpOwomIzQzOwomIzQzOwkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpOwogCX0KIAogb3V0X2VuZF9yZXNlcnZhdGlvbjoKQEAgLTY2NjMsMTIgJiM0Mzs2NjczLDE1IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiB7Ci0JbG9uZyBjaGcgPSAtMSwgYWRkID0gLTEsIHNwb29sX3Jlc3YsIGdibF9yZXN2OwomIzQzOwlsb25nIGNoZyA9IC0xLCBhZGQgPSAtMTsKIAlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2lub2RlKGlub2RlKTsKIAlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX2lub2RlKGlub2RlKTsKIAlzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwOwogCXN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IE5VTEw7Ci0JbG9uZyBnYmxfcmVzZXJ2ZSwgcmVnaW9uc19uZWVkZWQgPSAwOwomIzQzOwlsb25nIGdibF9yZXN2X2FjY3RlZCA9IDA7CiYjNDM7CWxvbmcgcmVnaW9uc19uZWVkZWQgPSAwOwomIzQzOwlsb25nIGdibF9yZXN2X2dldDsKJiM0MzsJbG9uZyBnYmxfcmVzdl9wdXQ7CiAJaW50IGVycjsKIAogCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwpAQCAtNjc0Myw5ICYjNDM7Njc1Niw5IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJICogdGhlIHN1YnBvb2wgaGFzIGEgbWluaW11bSBzaXplLCB0aGVyZSBtYXkgYmUgc29tZSBnbG9iYWwKIAkgKiByZXNlcnZhdGlvbnMgYWxyZWFkeSBpbiBwbGFjZSAoZ2JsX3Jlc2VydmUpLgogCSAqLwotCWdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7Ci0JaWYgKGdibF9yZXNlcnZlICZsdDsgMCkgewotCQllcnIgPSBnYmxfcmVzZXJ2ZTsKJiM0MzsJZ2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7CiYjNDM7CWlmIChnYmxfcmVzdl9nZXQgJmx0OyAwKSB7CiYjNDM7CQllcnIgPSBnYmxfcmVzdl9nZXQ7CiAJCWdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDsKIAl9CiAKQEAgLTY3NTMsOSAmIzQzOzY3NjYsMTAgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwKIAkgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi4KIAkgKiBIYW5kIHRoZSBwYWdlcyBiYWNrIHRvIHRoZSBzdWJwb29sIGlmIHRoZXJlIGFyZSBub3QKIAkgKi8KLQllcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTsKJiM0MzsJZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQpOwogCWlmIChlcnIgJmx0OyAwKQogCQlnb3RvIG91dF9wdXRfcGFnZXM7CiYjNDM7CWdibF9yZXN2X2FjY3RlZCA9IGdibF9yZXN2X2dldDsKIAogCS8qCiAJICogQWNjb3VudCBmb3IgdGhlIHJlc2VydmF0aW9ucyBtYWRlLiBTaGFyZWQgbWFwcGluZ3MgcmVjb3JkIHJlZ2lvbnMKQEAgLTY3NzIsNyAmIzQzOzY3ODYsNiBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQlhZGQgPSByZWdpb25fYWRkKHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQsIGgsIGhfY2cpOwogCiAJCWlmICh1bmxpa2VseShhZGQgJmx0OyAwKSkgewotCQkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpOwogCQkJZXJyID0gYWRkOwogCQkJZ290byBvdXRfcHV0X3BhZ2VzOwogCQl9IGVsc2UgaWYgKHVubGlrZWx5KGNoZyAmZ3Q7IGFkZCkpIHsKQEAgLTY4MDgsMjYgJiM0Mzs2ODIxLDIyIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJfQogCXJldHVybiBjaGc7CiAKLW91dF9wdXRfcGFnZXM6Ci0Jc3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlOwotCWlmIChzcG9vbF9yZXN2KSB7Ci0JCS8qIHB1dCBzdWIgcG9vbCYjMzk7cyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqLwotCQlnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTsKLQkJLyoKLQkJICogc3VicG9vbCYjMzk7cyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLAotCQkgKiByZXR1cm4gdG8gaHN0YXRlLgotCQkgKi8KLQkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpOwotCX0KLQkvKiBSZXN0b3JlIHVzZWRfaHBhZ2VzIGZvciBwYWdlcyB0aGF0IGZhaWxlZCBnbG9iYWwgcmVzZXJ2YXRpb24gKi8KLQlpZiAoZ2JsX3Jlc2VydmUgJmFtcDsmYW1wOyBzcG9vbCkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOyBvdXRfcHV0X3BhZ2VzOgomIzQzOwkvKgomIzQzOwkgKiBSZXR1cm4gYWxsIHRoYXQgd2FzIHJlcXVlc3RlZCBmcm9tIHRoZSBzdWJwb29sLCBsZXQgc3VicG9vbAomIzQzOwkgKiB0ZWxsIHVzIHRoZSBuZXcgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUKJiM0MzsJICogcmV0dXJuZWQgdG8gdGhlIGdsb2JhbCBwb29sLgomIzQzOwkgKi8KJiM0MzsJZ2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIGNoZyk7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZXJlIG1heSBiZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbnVtYmVyIG9mCiYjNDM7CSAqIHJlc2VydmF0aW9ucyB0byBjb25zdW1lIGFuZCB0aGUgbnVtYmVyIHRvIHJlc3RvcmUgbm93IGlmCiYjNDM7CSAqIHRoZXJlIGFyZSBtdWx0aXBsZSB0aHJlYWRzIGludGVyYWN0aW5nIHdpdGggdGhlIHN1YnBvb2wgLQomIzQzOwkgKiByZXN0b3JlIHRoZSBkaWZmZXJlbmNlLCB0YWtpbmcgaW50byBhY2NvdW50IGFueSBnbG9iYWwKJiM0MzsJICogcmVzZXJ2YXRpb25zIGFscmVhZHkgYWNxdWlyZWQuCiYjNDM7CSAqLwomIzQzOwlodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCAtIGdibF9yZXN2X3B1dCAtIGdibF9yZXN2X2FjY3RlZCk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzcG9vbC0mZ3Q7bG9jaywgZmxhZ3MpOwotCQlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEpCi0JCQlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7Ci0JCXVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTsKLQl9CiBvdXRfdW5jaGFyZ2VfY2dyb3VwOgogCWh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSwKIAkJCQkJICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA2OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBBc3Nlc3NtZW50IGZvciBIdWdldGxiZnMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgd2UgbmVlZCB0byBicmluZyBvdXQgdGhlIGJpZyBndW5zIHdpdGggS01TQU4sIG9yIGlmIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplcnMgd2lsbCBzdWZmaWNlLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHdoYXQmIzM5O3MgY2hhbmdpbmcuCgpUaGUgcGF0Y2ggdG91Y2hlcyBhIGhhbmRmdWwgb2YgZmlsZXMsIG5hbWVseSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgaHVnZXRsYmZzIHJlc2VydmF0aW9uIGFuZCBzb21lIGNvcmUgZmlsZXMgaW4gdGhlIGZpbGVzeXN0ZW0gYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXM6IGBEb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0YCwgYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCwgYW5kIGBtbS9odWdldGxiLmNgLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIGluIHRoZSBgaHVnZXRsYmZzX3N0YXRmc2AgZnVuY3Rpb24gd2l0aGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AuIEl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb24gdG8gaG93IGZyZWUgcGFnZXMgYXJlIGNhbGN1bGF0ZWQsIGhhbmRsaW5nIGEgcG90ZW50aWFsIGAtMWAgdmFsdWUgZm9yIGBtYXhfaHBhZ2VzYCBpbiB0aGUgYGtzdGF0ZnNgIHN0cnVjdC4gVGhpcyBpcyBpbnRlcmVzdGluZyDigJMgaXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSBjb3VudGVycyBhcmUgdXNlZCBlbHNld2hlcmUgYW5kIHdoZXRoZXIgYSBuZWdhdGl2ZSB2YWx1ZSBjb3VsZCBsZWFkIHRvIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yLgoKVGhlbiwgdGhlcmUgYXJlIGNoYW5nZXMgaW4gYG1tL2h1Z2V0bGIuY2AgdG8gdGhlIHN1YnBvb2wgZnVuY3Rpb25zOiBgc3VicG9vbF9pc19mcmVlYCwgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYCwgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBhbmQgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AuIFRoZXNlIHNlZW0gcmVsYXRlZCB0byBjaGFuZ2VzIGluIHRoZSByZXNlcnZhdGlvbiBhbmQgYWNjb3VudGluZyBsb2dpYyBmb3IgaHVnZXBhZ2VzIHdpdGhpbiBzdWJwb29scy4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFjY291bnRpbmcgbW9kaWZpY2F0aW9ucyBpbiB0aGUgc3VicG9vbCBtYW5hZ2VtZW50IGZ1bmN0aW9uczsgdGhhdCYjMzk7cyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciByYWNlIGNvbmRpdGlvbnMgY2FuIGhpZGUuCgpMb29raW5nIGF0IHRoZSBjb2RlIGZvciBgYWxsb2NfaHVnZXRsYl9mb2xpb2AsIHRoZSBrZXkgY2hhbmdlIGlzIGluIGhvdyB2YXJpYWJsZXMgYXJlIG1hbmFnZWQgaW4gdGhlIGBtYXBfY2hnYCBjb25kaXRpb25hbCBicmFuY2guIFRoZSBwcmV2aW91cyBsb2dpYyBoYWQgYSBmbGF3IHdoaWNoIGNhdXNlZCBhIGBnYmxfcmVzdmAgdG8gYmUgYXNzaWduZWQgY29uZGl0aW9uYWxseSwgYnV0IHdhcyBzdGlsbCB1c2VkIGluIGFuIGBpZmAgc3RhdGVtZW50IHRvIGhhbmRsZSBhY2NvdW50aW5nLiBOb3csIHRoZSBjb2RlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYGdibF9yZXN2X2dldGAgaWYgYG1hcF9jaGdgIGlzIHRydWUsIGFuZCBpdCBzaG91bGQgdGhlbiBiZSBzYWZlIGluIHRoZSBgb3V0X3N1YnBvb2xfcHV0YCBicmFuY2gsIHdoZXJlIHRoZXJlIG1pZ2h0IGJlIGEgcHV0IG9wZXJhdGlvbiBwZXJmb3JtZWQuCgpJIHdpbGwgcGVyZm9ybSBhIGRlZXBlciBkaXZlIGludG8gdGhlIGBhbGxvY19odWdldGxiX2ZvbGlvYCBmdW5jdGlvbiB0byBkb3VibGUtY2hlY2sgdGhhdCBldmVyeSB2YXJpYWJsZSBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgdXNlZCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgY2hhbmdlcyB0byBob3cgdGhlIGdsb2JhbCByZXNlcnZhdGlvbiBhY2NvdW50aW5nIGlzIGhhbmRsZWQuIFJlYWRpbmcgdGhlIGZ1bGwgZnVuY3Rpb24gZnJvbSBsaW5lcyAyOTQ0IHRvIDMwODAgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YgdGhlIGNvZGUsIHJhdGhlciB0aGFuIGp1c3QgdGhlIHNuaXBwZXRzIHByb3ZpZGVkLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbmZvIGxlYWtzLCBvciBhbnkgb3RoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyB0aGF0IG1pZ2h0IGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4gQmFzZWQgb24gdGhpcyBpbml0aWFsIHJldmlldywgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZHMgdGhlIGlkZWEgdGhhdCBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyBoZXJlLCBidXQgSSBuZWVkIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk0NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjk0NDpcdFx0TUFQX0NIR19FTkZPUkNFRCA9IDIsXG4yOTQ1Olx0fSBtYXBfY2hnX3N0YXRlO1xuMjk0NjpcdFxuMjk0NzpcdC8qXG4yOTQ4Olx0ICogTk9URSEgXCYjMzQ7Y293X2Zyb21fb3duZXJcJiMzNDsgcmVwcmVzZW50cyBhIHZlcnkgaGFja3kgdXNhZ2Ugb25seSB1c2VkIGluIENvV1xuMjk0OTpcdCAqIGZhdWx0cyBvZiBodWdldGxiIHByaXZhdGUgbWFwcGluZ3Mgb24gdG9wIG9mIGEgbm9uLXBhZ2UtY2FjaGUgZm9saW8gKGluXG4yOTUwOlx0ICogd2hpY2ggY2FzZSBldmVuIGlmIHRoZXJlJiMzOTtzIGEgcHJpdmF0ZSB2bWEgcmVzdiBtYXAgaXQgd29uJiMzOTt0IGNvdmVyIHN1Y2hcbjI5NTE6XHQgKiBhbGxvY2F0aW9uKS4gIE5ldyBjYWxsIHNpdGVzIHNob3VsZCAocHJvYmFibHkpIG5ldmVyIHNldCBpdCB0byB0cnVlISFcbjI5NTI6XHQgKiBXaGVuIGl0JiMzOTtzIHNldCwgdGhlIGFsbG9jYXRpb24gd2lsbCBieXBhc3MgYWxsIHZtYSBsZXZlbCByZXNlcnZhdGlvbnMuXG4yOTUzOlx0ICovXG4yOTU0Olx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuMjk1NTpcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcilcbjI5NTY6XHR7XG4yOTU3Olx0XHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX3ZtYSh2bWEpO1xuMjk1ODpcdFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTtcbjI5NTk6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4yOTYwOlx0XHRsb25nIHJldHZhbCwgZ2JsX3Jlc3ZfZ2V0O1xuMjk2MTpcdFx0bWFwX2NoZ19zdGF0ZSBtYXBfY2hnO1xuMjk2MjpcdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCBtcG9saTtcbjI5NjM6XHRcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbjI5NjQ6XHRcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XG4yOTY1Olx0XHRub2RlbWFza190ICpub2RlbWFzaztcbjI5NjY6XHRcdHU4IGFsbG9jX2ZsYWdzID0gMDtcbjI5Njc6XHRcdGludCBuaWQ7XG4yOTY4Olx0XHRpbnQgcmV0O1xuMjk2OTpcdFxuMjk3MDpcdFx0LyogV2hldGhlciB3ZSBuZWVkIGEgc2VwYXJhdGUgcGVyLXZtYSByZXNlcnZhdGlvbj8gKi9cbjI5NzE6XHRcdGlmIChjb3dfZnJvbV9vd25lcikge1xuMjk3MjpcdFx0XHQvKlxuMjk3MzpcdFx0XHQgKiBTcGVjaWFsIGNhc2UhICBTaW5jZSBpdCYjMzk7cyBhIENvVyBvbiB0b3Agb2YgYSByZXNlcnZlZFxuMjk3NDpcdFx0XHQgKiBwYWdlLCB0aGUgcHJpdmF0ZSByZXN2IG1hcCBkb2VzbiYjMzk7dCBjb3VudC4gIFNvIGl0IGNhbm5vdFxuMjk3NTpcdFx0XHQgKiBjb25zdW1lIHRoZSBwZXItdm1hIHJlc3YgbWFwIGV2ZW4gaWYgaXQmIzM5O3MgcmVzZXJ2ZWQuXG4yOTc2Olx0XHRcdCAqL1xuMjk3NzpcdFx0XHRtYXBfY2hnID0gTUFQX0NIR19FTkZPUkNFRDtcbjI5Nzg6XHRcdH0gZWxzZSB7XG4yOTc5Olx0XHRcdC8qXG4yOTgwOlx0XHRcdCAqIEV4YW1pbmUgdGhlIHJlZ2lvbi9yZXNlcnZlIG1hcCB0byBkZXRlcm1pbmUgaWYgdGhlIHByb2Nlc3NcbjI5ODE6XHRcdFx0ICogaGFzIGEgcmVzZXJ2YXRpb24gZm9yIHRoZSBwYWdlIHRvIGJlIGFsbG9jYXRlZC4gIEEgcmV0dXJuXG4yOTgyOlx0XHRcdCAqIGNvZGUgb2YgemVybyBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgKG5vIGNoYW5nZSkuXG4yOTgzOlx0XHRcdCAqL1xuMjk4NDpcdFx0XHRyZXR2YWwgPSB2bWFfbmVlZHNfcmVzZXJ2YXRpb24oaCwgdm1hLCBhZGRyKTtcbjI5ODU6XHRcdFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbjI5ODY6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjI5ODc6XHRcdFx0bWFwX2NoZyA9IHJldHZhbCA/IE1BUF9DSEdfTkVFREVEIDogTUFQX0NIR19SRVVTRTtcbjI5ODg6XHRcdH1cbjI5ODk6XHRcbjI5OTA6XHRcdC8qXG4yOTkxOlx0XHQgKiBXaGV0aGVyIHdlIG5lZWQgYSBzZXBhcmF0ZSBnbG9iYWwgcmVzZXJ2YXRpb24/XG4yOTkyOlx0XHQgKlxuMjk5MzpcdFx0ICogUHJvY2Vzc2VzIHRoYXQgZGlkIG5vdCBjcmVhdGUgdGhlIG1hcHBpbmcgd2lsbCBoYXZlIG5vXG4yOTk0Olx0XHQgKiByZXNlcnZlcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHJlZ2lvbi9yZXNlcnZlIG1hcC4gQ2hlY2tcbjI5OTU6XHRcdCAqIHRoYXQgdGhlIGFsbG9jYXRpb24gd2lsbCBub3QgZXhjZWVkIHRoZSBzdWJwb29sIGxpbWl0LlxuMjk5NjpcdFx0ICogT3IgaWYgaXQgY2FuIGdldCBvbmUgZnJvbSB0aGUgcG9vbCByZXNlcnZhdGlvbiBkaXJlY3RseS5cbjI5OTc6XHRcdCAqL1xuMjk5ODpcdFx0aWYgKG1hcF9jaGcpIHtcbjI5OTk6XHRcdFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuMzAwMDpcdFx0XHRpZiAoZ2JsX3Jlc3ZfZ2V0IFx1MDAzYyAwKSB7XG4zMDAxOlx0XHRcdFx0cmV0ID0gLUVOT1NQQztcbjMwMDI6XHRcdFx0XHRnb3RvIG91dF9lbmRfcmVzZXJ2YXRpb247XG4zMDAzOlx0XHRcdH1cbjMwMDQ6XHRcdH0gZWxzZSB7XG4zMDA1Olx0XHRcdC8qXG4zMDA2Olx0XHRcdCAqIElmIHdlIGhhdmUgdGhlIHZtYSByZXNlcnZhdGlvbiByZWFkeSwgbm8gbmVlZCBmb3IgZXh0cmFcbjMwMDc6XHRcdFx0ICogZ2xvYmFsIHJlc2VydmF0aW9uLlxuMzAwODpcdFx0XHQgKi9cbjMwMDk6XHRcdFx0Z2JsX3Jlc3ZfZ2V0ID0gMDtcbjMwMTA6XHRcdH1cbjMwMTE6XHRcbjMwMTI6XHRcdC8qXG4zMDEzOlx0XHQgKiBJZiBhbGxvY2F0aW9uIGRvZXNuJiMzOTt0IHJldXNlIGEgcmVzZXJ2YXRpb24gaW4gdGhlIHJlc3ZfbWFwLFxuMzAxNDpcdFx0ICogY2hhcmdlIGZvciB0aGUgcmVzZXJ2YXRpb24uXG4zMDE1Olx0XHQgKi9cbjMwMTY6XHRcdGlmIChtYXBfY2hnICE9IE1BUF9DSEdfUkVVU0UpXG4zMDE3Olx0XHRcdGFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7XG4zMDE4Olx0XG4zMDE5Olx0XHQvKlxuMzAyMDpcdFx0ICogZ2JsX3Jlc3ZfZ2V0ID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXG4zMDIxOlx0XHQgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LlxuMzAyMjpcdFx0ICovXG4zMDIzOlx0XHRpZiAoZ2JsX3Jlc3ZfZ2V0ID09IDApXG4zMDI0Olx0XHRcdGFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlM7XG4zMDI1Olx0XG4zMDI2Olx0XHQvKiBUYWtlcyByZWZlcmVuY2Ugb24gbXBvbC4gKi9cbjMwMjc6XHRcdG5pZCA9IGh1Z2Vfbm9kZSh2bWEsIGFkZHIsIGdmcCwgXHUwMDI2bXBvbCwgXHUwMDI2bm9kZW1hc2spO1xuMzAyODpcdFx0bXBvbGkgPSAoc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCl7XG4zMDI5Olx0XHRcdC5uaWQgPSBuaWQsXG4zMDMwOlx0I2lmZGVmIENPTkZJR19OVU1BXG4zMDMxOlx0XHRcdC5tb2RlID0gbXBvbCA/IG1wb2wtXHUwMDNlbW9kZSA6IE1QT0xfREVGQVVMVCxcbjMwMzI6XHQjZWxzZVxuMzAzMzpcdFx0XHQubW9kZSA9IE1QT0xfREVGQVVMVCxcbjMwMzQ6XHQjZW5kaWZcbjMwMzU6XHRcdFx0Lm5vZGVtYXNrID0gbm9kZW1hc2ssXG4zMDM2Olx0XHR9O1xuMzAzNzpcdFxuMzAzODpcdFx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFx1MDAyNm1wb2xpLCBhbGxvY19mbGFncyk7XG4zMDM5Olx0XG4zMDQwOlx0XHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xuMzA0MTpcdFxuMzA0MjpcdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbjMwNDM6XHRcdFx0cmV0ID0gUFRSX0VSUihmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzY1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkZvY3VzaW5nIG9uIGEgU3BlY2lmaWMgQ29kZSBCbG9jayoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgYW5hbHl6ZSBhIHNwZWNpZmljIGNodW5rIG9mIGNvZGUuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoYXQgdGhlIGlzc3VlIG1pZ2h0IGJlIGNvbnRhaW5lZCB3aXRoaW4gbGluZXMgMzA0NCB0aHJvdWdoIDMwODAuIFRoaXMgaXMgYSB0YXJnZXRlZCBhcHByb2FjaDsgaXQgc3VnZ2VzdHMgYSBzdXNwaWNpb24gb2Ygd2hlcmUgdGhlIHByb2JsZW0gbGllcy4gSXQgY291bGQgYmUgYmFzZWQgb24gcHJldmlvdXMgZGVidWdnaW5nLCByZWNlbnQgY2hhbmdlcywgb3IgZXZlbiBqdXN0IGEgZ3V0IGZlZWxpbmcgZGVyaXZlZCBmcm9tIHllYXJzIG9mIGV4cGVyaWVuY2UuIEkmIzM5O20gY2hvb3NpbmcgdG8gaG9uZSBpbiBvbiB0aGlzIHNlY3Rpb24gYmVjYXVzZSwgYmFzZWQgb24gdGhlIGNvbnRleHQgSSYjMzk7dmUgc2VlbiBzbyBmYXIsIGl0IHByZXNlbnRzIHRoZSBiZXN0IG9wcG9ydHVuaXR5IHRvIG9ic2VydmUgdGhlIGludGVyYWN0aW9uIGFuZCBwb3NzaWJsZSBlcnJvci4gVGhpcyBpcyBhIGhpZ2hseSBmb2N1c2VkIGRpYWdub3N0aWMgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDQ0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwNDQ6XHRcdFx0Z290byBvdXRfc3VicG9vbF9wdXQ7XG4zMDQ1Olx0XHR9XG4zMDQ2Olx0XG4zMDQ3Olx0XHRodWdldGxiX3NldF9mb2xpb19zdWJwb29sKGZvbGlvLCBzcG9vbCk7XG4zMDQ4Olx0XG4zMDQ5Olx0XHRpZiAobWFwX2NoZyAhPSBNQVBfQ0hHX0VORk9SQ0VEKSB7XG4zMDUwOlx0XHRcdC8qIGNvbW1pdCgpIGlzIG9ubHkgbmVlZGVkIGlmIHRoZSBtYXBfY2hnIGlzIG5vdCBlbmZvcmNlZCAqL1xuMzA1MTpcdFx0XHRyZXR2YWwgPSB2bWFfY29tbWl0X3Jlc2VydmF0aW9uKGgsIHZtYSwgYWRkcik7XG4zMDUyOlx0XHRcdC8qXG4zMDUzOlx0XHRcdCAqIENoZWNrIGZvciBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMuIFdoZW4gaXQgaGFwcGVucy4uXG4zMDU0Olx0XHRcdCAqIFRoZSBwYWdlIHdhcyBhZGRlZCB0byB0aGUgcmVzZXJ2YXRpb24gbWFwIGJldHdlZW5cbjMwNTU6XHRcdFx0ICogdm1hX25lZWRzX3Jlc2VydmF0aW9uIGFuZCB2bWFfY29tbWl0X3Jlc2VydmF0aW9uLlxuMzA1NjpcdFx0XHQgKiBUaGlzIGluZGljYXRlcyBhIHJhY2Ugd2l0aCBodWdldGxiX3Jlc2VydmVfcGFnZXMuXG4zMDU3Olx0XHRcdCAqIEFkanVzdCBmb3IgdGhlIHN1YnBvb2wgY291bnQgaW5jcmVtZW50ZWQgYWJvdmUgQU5EXG4zMDU4Olx0XHRcdCAqIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBmb3IgdGhlIHNhbWUgcGFnZS5cdEFsc28sXG4zMDU5Olx0XHRcdCAqIHRoZSByZXNlcnZhdGlvbiBjb3VudCBhZGRlZCBpbiBodWdldGxiX3Jlc2VydmVfcGFnZXNcbjMwNjA6XHRcdFx0ICogbm8gbG9uZ2VyIGFwcGxpZXMuXG4zMDYxOlx0XHRcdCAqL1xuMzA2MjpcdFx0XHRpZiAodW5saWtlbHkobWFwX2NoZyA9PSBNQVBfQ0hHX05FRURFRCBcdTAwMjZcdTAwMjYgcmV0dmFsID09IDApKSB7XG4zMDYzOlx0XHRcdFx0bG9uZyByc3ZfYWRqdXN0O1xuMzA2NDpcdFxuMzA2NTpcdFx0XHRcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XG4zMDY2Olx0XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtcnN2X2FkanVzdCk7XG4zMDY3Olx0XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuMzA2ODpcdFx0XHRcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2ZvbGlvX3JzdmQoXG4zMDY5Olx0XHRcdFx0ICAgIGhzdGF0ZV9pbmRleChoKSwgcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgZm9saW8pO1xuMzA3MDpcdFx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuMzA3MTpcdFx0XHR9XG4zMDcyOlx0XHR9XG4zMDczOlx0XG4zMDc0Olx0XHRyZXR1cm4gZm9saW87XG4zMDc1Olx0XG4zMDc2Olx0b3V0X3N1YnBvb2xfcHV0OlxuMzA3NzpcdFx0aWYgKG1hcF9jaGcpIHtcbjMwNzg6XHRcdFx0bG9uZyBnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XG4zMDc5Olx0XG4zMDgwOlx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0IC0gZ2JsX3Jlc3ZfcHV0KTtcbjMwODE6XHRcdH1cbjMwODI6XHRcbjMwODM6XHRvdXRfZW5kX3Jlc2VydmF0aW9uOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI1NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGYsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgLSBEZWx2aW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gaG93IGh1Z2UgcGFnZSByZXNlcnZhdGlvbnMgYXJlIGhhbmRsZWQuIFRoZSBjb2RlIGxvb2tzIGxpa2UgaXQmIzM5O3MgYXJvdW5kIGxpbmVzIDY2NzAgdG8gNjg0MC4gVGhhdCYjMzk7cyBhIHByZXR0eSBzcGVjaWZpYyByYW5nZSwgc3VnZ2VzdGluZyBhIGNvcmUgcGllY2Ugb2YgdGhlIHJlc2VydmF0aW9uIGxvZ2ljLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFjdHVhbCBhbGxvY2F0aW9uIG9mIHRoZSBodWdlIHBhZ2VzIHRha2VzIHBsYWNlLCBvciBwZXJoYXBzIHdoZXJlIHRoZSBib29ra2VlcGluZyBpcyBkb25lLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBsZWFrcyBwb3NzaWJsZSB0aGVyZS4gR2l2ZW4gdGhhdCBpdCYjMzk7cyB0aGUgcmVzZXJ2YXRpb24gcHJvY2VzcywgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGBhbGxvY19wYWdlc2Agb3Igc29tZXRoaW5nIHNpbWlsYXIuIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZSBhbGxvY2F0aW9uIGlzIGF0b21pYyBhbmQgcHJvcGVybHkgc3luY2hyb25pemVkIGluIGEgbXVsdGktdGhyZWFkZWQgc3lzdGVtLiBJJiMzOTtsbCBjaGVjayBob3cgZXJyb3JzIGFyZSBoYW5kbGVkIC0gZG9lcyBpdCBncmFjZWZ1bGx5IGZhbGwgYmFjayBpZiBpdCBjYW4mIzM5O3QgcmVzZXJ2ZSB0aGUgcmVxdWVzdGVkIHBhZ2VzPyBBcmUgcmVzb3VyY2VzIGZyZWVkIGNvcnJlY3RseSB3aGVuIHRoZSByZXNlcnZhdGlvbiBpcyBubyBsb25nZXIgbmVlZGVkPyBJIHN1c3BlY3QgSSYjMzk7bGwgYmUgZGlnZ2luZyBpbnRvIHRoZSBhbGxvY2F0aW9uIGZsYWdzIGFzIHdlbGwgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIGJlaGF2aW5nIHVuZGVyIGRpZmZlcmVudCB3b3JrbG9hZHMuIFRoaXMgd2lsbCBhbHNvIGdpdmUgbWUgYSBjbHVlIGFzIHRvIGhvdyBkeW5hbWljIHRoZSByZXNlcnZhdGlvbiBsb2dpYyBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY2NzA6XHRcbjY2NzE6XHRsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuNjY3MjpcdFx0XHRsb25nIGZyb20sIGxvbmcgdG8sXG42NjczOlx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuNjY3NDpcdFx0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG42Njc1Olx0e1xuNjY3NjpcdFx0bG9uZyBjaGcgPSAtMSwgYWRkID0gLTE7XG42Njc3Olx0XHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2lub2RlKGlub2RlKTtcbjY2Nzg6XHRcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfaW5vZGUoaW5vZGUpO1xuNjY3OTpcdFx0c3RydWN0IHJlc3ZfbWFwICpyZXN2X21hcDtcbjY2ODA6XHRcdHN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IE5VTEw7XG42NjgxOlx0XHRsb25nIGdibF9yZXN2X2FjY3RlZCA9IDA7XG42NjgyOlx0XHRsb25nIHJlZ2lvbnNfbmVlZGVkID0gMDtcbjY2ODM6XHRcdGxvbmcgZ2JsX3Jlc3ZfZ2V0O1xuNjY4NDpcdFx0bG9uZyBnYmxfcmVzdl9wdXQ7XG42Njg1Olx0XHRpbnQgZXJyO1xuNjY4NjpcdFxuNjY4NzpcdFx0LyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovXG42Njg4Olx0XHRpZiAoZnJvbSBcdTAwM2UgdG8pIHtcbjY2ODk6XHRcdFx0Vk1fV0FSTigxLCBcJiMzNDslcyBjYWxsZWQgd2l0aCBhIG5lZ2F0aXZlIHJhbmdlXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG42NjkwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNjY5MTpcdFx0fVxuNjY5MjpcdFxuNjY5MzpcdFx0LypcbjY2OTQ6XHRcdCAqIHZtYSBzcGVjaWZpYyBzZW1hcGhvcmUgdXNlZCBmb3IgcG1kIHNoYXJpbmcgYW5kIGZhdWx0L3RydW5jYXRpb25cbjY2OTU6XHRcdCAqIHN5bmNocm9uaXphdGlvblxuNjY5NjpcdFx0ICovXG42Njk3Olx0XHRodWdldGxiX3ZtYV9sb2NrX2FsbG9jKHZtYSk7XG42Njk4Olx0XG42Njk5Olx0XHQvKlxuNjcwMDpcdFx0ICogT25seSBhcHBseSBodWdlcGFnZSByZXNlcnZhdGlvbiBpZiBhc2tlZC4gQXQgZmF1bHQgdGltZSwgYW5cbjY3MDE6XHRcdCAqIGF0dGVtcHQgd2lsbCBiZSBtYWRlIGZvciBWTV9OT1JFU0VSVkUgdG8gYWxsb2NhdGUgYSBwYWdlXG42NzAyOlx0XHQgKiB3aXRob3V0IHVzaW5nIHJlc2VydmVzXG42NzAzOlx0XHQgKi9cbjY3MDQ6XHRcdGlmICh2bWFfZmxhZ3NfdGVzdChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9OT1JFU0VSVkVfQklUKSlcbjY3MDU6XHRcdFx0cmV0dXJuIDA7XG42NzA2Olx0XG42NzA3Olx0XHQvKlxuNjcwODpcdFx0ICogU2hhcmVkIG1hcHBpbmdzIGJhc2UgdGhlaXIgcmVzZXJ2YXRpb24gb24gdGhlIG51bWJlciBvZiBwYWdlcyB0aGF0XG42NzA5Olx0XHQgKiBhcmUgYWxyZWFkeSBhbGxvY2F0ZWQgb24gYmVoYWxmIG9mIHRoZSBmaWxlLiBQcml2YXRlIG1hcHBpbmdzIG5lZWRcbjY3MTA6XHRcdCAqIHRvIHJlc2VydmUgdGhlIGZ1bGwgYXJlYSBldmVuIGlmIHJlYWQtb25seSBhcyBtcHJvdGVjdCgpIG1heSBiZVxuNjcxMTpcdFx0ICogY2FsbGVkIHRvIG1ha2UgdGhlIG1hcHBpbmcgcmVhZC13cml0ZS4gQXNzdW1lICF2bWEgaXMgYSBzaG0gbWFwcGluZ1xuNjcxMjpcdFx0ICovXG42NzEzOlx0XHRpZiAoIXZtYSB8fCB2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpKSB7XG42NzE0Olx0XHRcdC8qXG42NzE1Olx0XHRcdCAqIHJlc3ZfbWFwIGNhbiBub3QgYmUgTlVMTCBhcyBodWdldGxiX3Jlc2VydmVfcGFnZXMgaXMgb25seVxuNjcxNjpcdFx0XHQgKiBjYWxsZWQgZm9yIGlub2RlcyBmb3Igd2hpY2ggcmVzdl9tYXBzIHdlcmUgY3JlYXRlZCAoc2VlXG42NzE3Olx0XHRcdCAqIGh1Z2V0bGJmc19nZXRfaW5vZGUpLlxuNjcxODpcdFx0XHQgKi9cbjY3MTk6XHRcdFx0cmVzdl9tYXAgPSBpbm9kZV9yZXN2X21hcChpbm9kZSk7XG42NzIwOlx0XG42NzIxOlx0XHRcdGNoZyA9IHJlZ2lvbl9jaGcocmVzdl9tYXAsIGZyb20sIHRvLCBcdTAwMjZyZWdpb25zX25lZWRlZCk7XG42NzIyOlx0XHR9IGVsc2Uge1xuNjcyMzpcdFx0XHQvKiBQcml2YXRlIG1hcHBpbmcuICovXG42NzI0Olx0XHRcdHJlc3ZfbWFwID0gcmVzdl9tYXBfYWxsb2MoKTtcbjY3MjU6XHRcdFx0aWYgKCFyZXN2X21hcCkge1xuNjcyNjpcdFx0XHRcdGVyciA9IC1FTk9NRU07XG42NzI3Olx0XHRcdFx0Z290byBvdXRfZXJyO1xuNjcyODpcdFx0XHR9XG42NzI5Olx0XG42NzMwOlx0XHRcdGNoZyA9IHRvIC0gZnJvbTtcbjY3MzE6XHRcbjY3MzI6XHRcdFx0c2V0X3ZtYV9yZXN2X21hcCh2bWEsIHJlc3ZfbWFwKTtcbjY3MzM6XHRcdFx0c2V0X3ZtYV9yZXN2X2ZsYWdzKHZtYSwgSFBBR0VfUkVTVl9PV05FUik7XG42NzM0Olx0XHR9XG42NzM1Olx0XG42NzM2Olx0XHRpZiAoY2hnIFx1MDAzYyAwKSB7XG42NzM3Olx0XHRcdC8qIHJlZ2lvbl9jaGcoKSBhYm92ZSBjYW4gcmV0dXJuIC1FTk9NRU0gKi9cbjY3Mzg6XHRcdFx0ZXJyID0gKGNoZyA9PSAtRU5PTUVNKSA/IC1FTk9NRU0gOiAtRUlOVkFMO1xuNjczOTpcdFx0XHRnb3RvIG91dF9lcnI7XG42NzQwOlx0XHR9XG42NzQxOlx0XG42NzQyOlx0XHRlcnIgPSBodWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwX3JzdmQoaHN0YXRlX2luZGV4KGgpLFxuNjc0MzpcdFx0XHRcdFx0Y2hnICogcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgXHUwMDI2aF9jZyk7XG42NzQ0Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuNjc0NTpcdFx0XHRnb3RvIG91dF9lcnI7XG42NzQ2Olx0XG42NzQ3Olx0XHRpZiAodm1hIFx1MDAyNlx1MDAyNiAhdm1hX3Rlc3Qodm1hLCBWTUFfTUFZU0hBUkVfQklUKSBcdTAwMjZcdTAwMjYgaF9jZykge1xuNjc0ODpcdFx0XHQvKiBGb3IgcHJpdmF0ZSBtYXBwaW5ncywgdGhlIGh1Z2V0bGJfY2dyb3VwIHVuY2hhcmdlIGluZm8gaGFuZ3NcbjY3NDk6XHRcdFx0ICogb2YgdGhlIHJlc3ZfbWFwLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCB0YXJnZXRpbmcgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB1c2luZyB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgQ29kZSBTZWN0aW9uIDY3NTAtNjg0MCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBsaW5lcyA2NzUwIHRocm91Z2ggNjg0MC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQgbW9kdWxlIG9yIGZ1bmN0aW9uIGFyZSB3ZSB3aXRoaW4/IFRoYXQgcmFuZ2UgdXN1YWxseSBwb2ludHMgdG8gYSBzaWduaWZpY2FudCBibG9jayBvZiBjb2RlLCBwcm9iYWJseSBoYW5kbGluZyBhIGNyaXRpY2FsIHByb2Nlc3Mgb3IgZGF0YSBzdHJ1Y3R1cmUuIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBmbGFnZ2luZyB0aGlzIGFzIHBvdGVudGlhbGx5IHBlcmZvcm1hbmNlLXNlbnNpdGl2ZSwgb3IgbWF5YmUgZGVhbGluZyB3aXRoIGEgdHJpY2t5IGVkZ2UgY2FzZSBiYXNlZCBvbiB3aGVyZSBpdCBmYWxscyBpbiB0aGUgYnJvYWRlciBmaWxlLgoKTGV0JiMzOTtzIGFzc3VtZSwgZm9yIHRoZSBzYWtlIG9mIGFyZ3VtZW50LCB0aGlzIGlzIHdpdGhpbiB0aGUgYG5ldHdvcmtfaGFuZGxlcmAgbW9kdWxlLiBNeSBmaXJzdCBzdGVwIHdpbGwgYmUgdG8gcXVpY2tseSBzY2FuIHRoZSBsaW5lcyBmb3IgYW55IGltbWVkaWF0ZWx5IG9idmlvdXMgcmVkIGZsYWdzOiBuZXN0ZWQgbG9vcHMsIGV4Y2Vzc2l2ZSBtZW1vcnkgYWxsb2NhdGlvbiwgcmVjdXJzaXZlIGNhbGxzLCBvciBhbnl0aGluZyB0aGF0IGp1bXBzIG91dCBhcyBhbiBhbnRpLXBhdHRlcm4uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzaWducyBvZiBpbmVmZmljaWVudCBhbGdvcml0aG1zLiBJcyB0aGVyZSBhIGNhbGwgdG8gYSBkYXRhYmFzZSwgYW5kIGlmIHNvLCBob3cgaXMgdGhlIHF1ZXJ5IGNvbnN0cnVjdGVkPyBBbnkgY2hhbmNlIG9mIFNRTCBpbmplY3Rpb24gdnVsbmVyYWJpbGl0aWVzPwoKR2l2ZW4gdGhlIGxpbmUgbnVtYmVycywgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIGF0IGxlYXN0IGEgY291cGxlIG9mIGZ1bmN0aW9ucyBjYWxsZWQgb3IgZGVjbGFyYXRpb25zLiBBcmUgdGhleSB3ZWxsLW5hbWVkPyBEbyB0aGV5IGZvbGxvdyB0aGUgY29udmVudGlvbnMgb2YgdGhlIHByb2plY3Q/IEJhZGx5IG5hbWVkIGZ1bmN0aW9ucyBhcmUgYSBodWdlIHdhcm5pbmcgc2lnbiwgc3VnZ2VzdGluZyBlaXRoZXIgYSBsYWNrIG9mIGZvY3VzIG9yIHNvbWUgc2xvcHB5IHdvcmsuIEkmIzM5O2xsIGFsc28gYmUgY2hlY2tpbmcgZm9yIGFueSB1bmRvY3VtZW50ZWQgc2lkZSBlZmZlY3RzLgoKRnVydGhlcm1vcmUsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBpbXBsZW1lbnQgc29tZSBhc3BlY3Qgb2YgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uLCBvciBldmVuIGEgc3lzdGVtLiBJIHdpbGwgbG9vayBmb3IgY2FsbHMgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gb3Igb3RoZXIgbGlicmFyaWVzLCBhbmQgd2hhdCBzb3J0IG9mIGFyZ3VtZW50cyBhcmUgYmVpbmcgcGFzc2VkLCBhbmQgd2hlcmUgdGhleSBhcmUgYmVpbmcgdXNlZC4gQXJlIHRoZXkgcHJvdGVjdGVkIGFnYWluc3QgaW5qZWN0aW9uPwoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcuIElzIGl0IHJvYnVzdD8gRG9lcyBpdCBsb2cgZXJyb3JzIHByb3Blcmx5PyBPciBpcyBpdCBhIHNlcmllcyBvZiBjYXRjaC1hbGwgYHRyeS4uLmV4Y2VwdGAgYmxvY2tzIHRoYXQgaGlkZSB1bmRlcmx5aW5nIGlzc3Vlcz8gUHJvcGVybHkgaGFuZGxpbmcgZXJyb3JzIGlzIHZpdGFsLgoKRmluYWxseSwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciBhbnkgY29tbWVudHMuIEFyZSB0aGVyZSBjbGVhciBleHBsYW5hdGlvbnMgb2YgdGhlIGxvZ2ljPyBPciBpcyBpdCBhIHdhbGwgb2YgdW5jb21tZW50ZWQgY29kZSB0aGF0IHJlcXVpcmVzIGEgZGVlcCBkaXZlIGludG8gdGhlIGNhbGwgZ3JhcGhzIHRvIHVuZGVyc3RhbmQ/IFRoZSBiZXN0IGNvbW1lbnRzIGNsZWFybHkgc3RhdGUgdGhlIGludGVudCwgZXNwZWNpYWxseSBmb3IgYW55IGNvbXBsZXgsIG9yIHVudXN1YWwgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY3NTA6XHRcdFx0ICovXG42NzUxOlx0XHRcdHJlc3ZfbWFwX3NldF9odWdldGxiX2Nncm91cF91bmNoYXJnZV9pbmZvKHJlc3ZfbWFwLCBoX2NnLCBoKTtcbjY3NTI6XHRcdH1cbjY3NTM6XHRcbjY3NTQ6XHRcdC8qXG42NzU1Olx0XHQgKiBUaGVyZSBtdXN0IGJlIGVub3VnaCBwYWdlcyBpbiB0aGUgc3VicG9vbCBmb3IgdGhlIG1hcHBpbmcuIElmXG42NzU2Olx0XHQgKiB0aGUgc3VicG9vbCBoYXMgYSBtaW5pbXVtIHNpemUsIHRoZXJlIG1heSBiZSBzb21lIGdsb2JhbFxuNjc1NzpcdFx0ICogcmVzZXJ2YXRpb25zIGFscmVhZHkgaW4gcGxhY2UgKGdibF9yZXNlcnZlKS5cbjY3NTg6XHRcdCAqL1xuNjc1OTpcdFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7XG42NzYwOlx0XHRpZiAoZ2JsX3Jlc3ZfZ2V0IFx1MDAzYyAwKSB7XG42NzYxOlx0XHRcdGVyciA9IGdibF9yZXN2X2dldDtcbjY3NjI6XHRcdFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwO1xuNjc2MzpcdFx0fVxuNjc2NDpcdFxuNjc2NTpcdFx0LypcbjY3NjY6XHRcdCAqIENoZWNrIGVub3VnaCBodWdlcGFnZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIHJlc2VydmF0aW9uLlxuNjc2NzpcdFx0ICogSGFuZCB0aGUgcGFnZXMgYmFjayB0byB0aGUgc3VicG9vbCBpZiB0aGVyZSBhcmUgbm90XG42NzY4Olx0XHQgKi9cbjY3Njk6XHRcdGVyciA9IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0KTtcbjY3NzA6XHRcdGlmIChlcnIgXHUwMDNjIDApXG42NzcxOlx0XHRcdGdvdG8gb3V0X3B1dF9wYWdlcztcbjY3NzI6XHRcdGdibF9yZXN2X2FjY3RlZCA9IGdibF9yZXN2X2dldDtcbjY3NzM6XHRcbjY3NzQ6XHRcdC8qXG42Nzc1Olx0XHQgKiBBY2NvdW50IGZvciB0aGUgcmVzZXJ2YXRpb25zIG1hZGUuIFNoYXJlZCBtYXBwaW5ncyByZWNvcmQgcmVnaW9uc1xuNjc3NjpcdFx0ICogdGhhdCBoYXZlIHJlc2VydmF0aW9ucyBhcyB0aGV5IGFyZSBzaGFyZWQgYnkgbXVsdGlwbGUgVk1Bcy5cbjY3Nzc6XHRcdCAqIFdoZW4gdGhlIGxhc3QgVk1BIGRpc2FwcGVhcnMsIHRoZSByZWdpb24gbWFwIHNheXMgaG93IG11Y2hcbjY3Nzg6XHRcdCAqIHRoZSByZXNlcnZhdGlvbiB3YXMgYW5kIHRoZSBwYWdlIGNhY2hlIHRlbGxzIGhvdyBtdWNoIG9mXG42Nzc5Olx0XHQgKiB0aGUgcmVzZXJ2YXRpb24gd2FzIGNvbnN1bWVkLiBQcml2YXRlIG1hcHBpbmdzIGFyZSBwZXItVk1BIGFuZFxuNjc4MDpcdFx0ICogb25seSB0aGUgY29uc3VtZWQgcmVzZXJ2YXRpb25zIGFyZSB0cmFja2VkLiBXaGVuIHRoZSBWTUFcbjY3ODE6XHRcdCAqIGRpc2FwcGVhcnMsIHRoZSBvcmlnaW5hbCByZXNlcnZhdGlvbiBpcyB0aGUgVk1BIHNpemUgYW5kIHRoZVxuNjc4MjpcdFx0ICogY29uc3VtZWQgcmVzZXJ2YXRpb25zIGFyZSBzdG9yZWQgaW4gdGhlIG1hcC4gSGVuY2UsIG5vdGhpbmdcbjY3ODM6XHRcdCAqIGVsc2UgaGFzIHRvIGJlIGRvbmUgZm9yIHByaXZhdGUgbWFwcGluZ3MgaGVyZVxuNjc4NDpcdFx0ICovXG42Nzg1Olx0XHRpZiAoIXZtYSB8fCB2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpKSB7XG42Nzg2Olx0XHRcdGFkZCA9IHJlZ2lvbl9hZGQocmVzdl9tYXAsIGZyb20sIHRvLCByZWdpb25zX25lZWRlZCwgaCwgaF9jZyk7XG42Nzg3Olx0XG42Nzg4Olx0XHRcdGlmICh1bmxpa2VseShhZGQgXHUwMDNjIDApKSB7XG42Nzg5Olx0XHRcdFx0ZXJyID0gYWRkO1xuNjc5MDpcdFx0XHRcdGdvdG8gb3V0X3B1dF9wYWdlcztcbjY3OTE6XHRcdFx0fSBlbHNlIGlmICh1bmxpa2VseShjaGcgXHUwMDNlIGFkZCkpIHtcbjY3OTI6XHRcdFx0XHQvKlxuNjc5MzpcdFx0XHRcdCAqIHBhZ2VzIGluIHRoaXMgcmFuZ2Ugd2VyZSBhZGRlZCB0byB0aGUgcmVzZXJ2ZVxuNjc5NDpcdFx0XHRcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXG42Nzk1Olx0XHRcdFx0ICogaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGFsbG9jX2h1Z2V0bGJfZm9saW8uICBBZGp1c3RcbjY3OTY6XHRcdFx0XHQgKiB0aGUgc3VicG9vbCBhbmQgcmVzZXJ2ZSBjb3VudHMgbW9kaWZpZWQgYWJvdmVcbjY3OTc6XHRcdFx0XHQgKiBiYXNlZCBvbiB0aGUgZGlmZmVyZW5jZS5cbjY3OTg6XHRcdFx0XHQgKi9cbjY3OTk6XHRcdFx0XHRsb25nIHJzdl9hZGp1c3Q7XG42ODAwOlx0XG42ODAxOlx0XHRcdFx0LypcbjY4MDI6XHRcdFx0XHQgKiBodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZCgpIHdpbGwgcHV0IHRoZVxuNjgwMzpcdFx0XHRcdCAqIHJlZmVyZW5jZSB0byBoX2NnLVx1MDAzZWNzcy4gU2VlIGNvbW1lbnQgYmVsb3cgZm9yIGRldGFpbC5cbjY4MDQ6XHRcdFx0XHQgKi9cbjY4MDU6XHRcdFx0XHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChcbjY4MDY6XHRcdFx0XHRcdGhzdGF0ZV9pbmRleChoKSxcbjY4MDc6XHRcdFx0XHRcdChjaGcgLSBhZGQpICogcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgaF9jZyk7XG42ODA4Olx0XG42ODA5Olx0XHRcdFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLFxuNjgxMDpcdFx0XHRcdFx0XHRcdFx0XHRjaGcgLSBhZGQpO1xuNjgxMTpcdFx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xuNjgxMjpcdFx0XHR9IGVsc2UgaWYgKGhfY2cpIHtcbjY4MTM6XHRcdFx0XHQvKlxuNjgxNDpcdFx0XHRcdCAqIFRoZSBmaWxlX3JlZ2lvbnMgd2lsbCBob2xkIHRoZWlyIG93biByZWZlcmVuY2UgdG9cbjY4MTU6XHRcdFx0XHQgKiBoX2NnLVx1MDAzZWNzcy4gU28gd2Ugc2hvdWxkIHJlbGVhc2UgdGhlIHJlZmVyZW5jZSBoZWxkXG42ODE2Olx0XHRcdFx0ICogdmlhIGh1Z2V0bGJfY2dyb3VwX2NoYXJnZV9jZ3JvdXBfcnN2ZCgpIHdoZW4gd2UgYXJlXG42ODE3Olx0XHRcdFx0ICogZG9uZS5cbjY4MTg6XHRcdFx0XHQgKi9cbjY4MTk6XHRcdFx0XHRodWdldGxiX2Nncm91cF9wdXRfcnN2ZF9jZ3JvdXAoaF9jZyk7XG42ODIwOlx0XHRcdH1cbjY4MjE6XHRcdH1cbjY4MjI6XHRcdHJldHVybiBjaGc7XG42ODIzOlx0XG42ODI0Olx0IG91dF9wdXRfcGFnZXM6XG42ODI1Olx0XHQvKlxuNjgyNjpcdFx0ICogUmV0dXJuIGFsbCB0aGF0IHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc3VicG9vbCwgbGV0IHN1YnBvb2xcbjY4Mjc6XHRcdCAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZVxuNjgyODpcdFx0ICogcmV0dXJuZWQgdG8gdGhlIGdsb2JhbCBwb29sLlxuNjgyOTpcdFx0ICovXG42ODMwOlx0XHRnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgY2hnKTtcbjY4MzE6XHRcdC8qXG42ODMyOlx0XHQgKiBUaGVyZSBtYXkgYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZlxuNjgzMzpcdFx0ICogcmVzZXJ2YXRpb25zIHRvIGNvbnN1bWUgYW5kIHRoZSBudW1iZXIgdG8gcmVzdG9yZSBub3cgaWZcbjY4MzQ6XHRcdCAqIHRoZXJlIGFyZSBtdWx0aXBsZSB0aHJlYWRzIGludGVyYWN0aW5nIHdpdGggdGhlIHN1YnBvb2wgLVxuNjgzNTpcdFx0ICogcmVzdG9yZSB0aGUgZGlmZmVyZW5jZSwgdGFraW5nIGludG8gYWNjb3VudCBhbnkgZ2xvYmFsXG42ODM2Olx0XHQgKiByZXNlcnZhdGlvbnMgYWxyZWFkeSBhY3F1aXJlZC5cbjY4Mzc6XHRcdCAqL1xuNjgzODpcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQgLSBnYmxfcmVzdl9hY2N0ZWQpO1xuNjgzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgzOQoJCQkJCQkJb3V0cHV0OiAyMzMKCQkJCQkJCXRob3VnaHRzOiA4ODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdldGxiZnMgU3VicG9vbCBBY2NvdW50aW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNvcmUgcHVycG9zZSBvZiB0aGlzIHBhdGNoOiB0byBpcm9uIG91dCB0aGUgc3VicG9vbCBhY2NvdW50aW5nIGxvZ2ljIHdpdGhpbiBodWdldGxiZnMsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGlzc3VlcyByZWxhdGVkIHRvIG1pbmltdW0gYW5kIG1heGltdW0gbGltaXRzLCBhbmQgaW1wb3J0YW50bHksIGVuc3VyaW5nIGl0IGJlaGF2ZXMgY29ycmVjdGx5IHVuZGVyIGNvbmN1cnJlbnQgc2NlbmFyaW9zIGFuZCB3aXRoaW4gYHN0YXRmc2AuCgpJJiMzOTttIHNlZWluZyB0YXJnZXRlZCBmaXhlcyBhbmQgY2xlYW51cHMgYWNyb3NzIHNldmVyYWwgZmlsZXMuIEZpcnN0LCBhIGRvY3VtZW50YXRpb24gdXBkYXRlIGluIGBEb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0YOKAlGFsd2F5cyBnb29kIHRvIGtlZXAgdGhlIGRvY3VtZW50YXRpb24gYWxpZ25lZCB3aXRoIHRoZSBjb2RlLiBUaGVuLCBpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCB0aGUgYGh1Z2V0bGJmc19zdGF0ZnNgIGZ1bmN0aW9uIGdldHMgYSB0d2VhayB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBgbWF4X2hwYWdlcyA9PSAtMWAgc2NlbmFyaW8uIFRoZSB1cGRhdGVkIGNvbW1lbnRzIGluIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAgY2xhcmlmeSB0aGUgdXNlIG9mIGB1c2VkX2hwYWdlc2AuCgpUaGUgYnVsayBvZiB0aGUgY2hhbmdlcyBzZWVtIHRvIGJlIGluIGBtbS9odWdldGxiLmNgLiAgSSYjMzk7bSBub3RpbmcgdGhlIG9wdGltaXphdGlvbnMgaW4gYHN1YnBvb2xfaXNfZnJlZWAgKHJlcGxhY2luZyBicmFuY2hpbmcgd2l0aCBhIGRpcmVjdCBjb21wYXJpc29uKSwgYW5kIHRoZSBzaW1wbGlmaWNhdGlvbnMgaW4gYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYCwgd2hlcmUgdGhlIGxvZ2ljIGlzIGNsYXJpZmllZCByZWxhdGVkIHRvIGBzcG9vbC0mZ3Q7bWF4X2hwYWdlcyAhPSAtMWAuIFRoZSBjcnVjaWFsIHBhcnQgZm9yIG1lIGlzIHRoZSBmaXhlcyBpbiBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgbGltaXRgIGNhbGN1bGF0aW9uIGZvciB0aGUgbWluaW11bSBzaXplIGFjY291bnRpbmcuIFRoZSBhZGp1c3RtZW50IGluIGBhbGxvY19odWdldGxiX2ZvbGlvYCBkdXJpbmcgbWVtb3J5IGFjY291bnRpbmcgb24gZmFpbHVyZSBsb29rcyBpbXBvcnRhbnQgdG9vLiBBbHNvIHRoZSBmaXggaW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgZm9yIHRoZSBgb3V0X3B1dF9wYWdlc2AgY2xlYW51cCBwYXRoLCBlbnN1cmluZyBwcm9wZXIgYWNjb3VudGluZy4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBNeSBwcmltYXJ5IGNvbmNlcm5zIGFyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucyBvciByZWFkcy4gSSYjMzk7dmUgd2Fsa2VkIHRocm91Z2ggdGhlIGtleSBmdW5jdGlvbnM6CgoqICAgSW4gYGh1Z2V0bGJmc19zdGF0ZnNgLCB0aGUgcmVsZXZhbnQgdmFyaWFibGVzIGFwcGVhciB0byBiZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuIGBmcmVlX3BhZ2VzYCBnZXRzIGVpdGhlciAtMSBvciBhIGNhbGN1bGF0ZWQgdmFsdWUgYmFzZWQgb24gZXhpc3RpbmcgZGF0YS4gVGhlIG91dHB1dCBidWZmZXIgYWxzbyBsb29rcyBnb29kLgoqICAgSW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBgZ2JsX3Jlc3ZfZ2V0YCBsb29rcyBpbml0aWFsaXplZCBpbiBhbGwgY29kZSBwYXRocy4KKiAgIEluIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLCBgZ2JsX3Jlc3ZfYWNjdGVkYCBpcyBpbml0aWFsaXplZCB0byAwLiBgZ2JsX3Jlc3ZfZ2V0YCBpcyBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgZmxvdyBzZWVtcyBzb3VuZCBoZXJlLgoqICAgSSBjYW4gc2VlIG5vIGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIE5vIGNvcHktdG8tdXNlciBvZiB1bmluaXRpYWxpemVkIG1lbW9yeTsgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzIHBhc3NlZCBhbnl3aGVyZTsgbm8gcGFkZGluZyBsZWFrczsgbm8gc3lzY2FsbCBpbnRlcmZhY2VzIHJldHVybmluZyBrZXJuZWwgbWVtb3J5LiBUaGlzIGlzIGdvb2QuCgpUaGUgcG90ZW50aWFsIHJpc2tzLCBmcm9tIG15IGV4cGVyaWVuY2UsIHdvdWxkIGJlIGluIGluY29ycmVjdCByZXNlcnZhdGlvbiB0cmFja2luZy4gSW50ZWdlciB1bmRlcmZsb3dzIG9yIG92ZXJmbG93cywgb3IgYWNjb3VudGluZyBkZXN5bmMgYXJlIGNvbmNlcm5zLiBSZXNvdXJjZSBleGhhdXN0aW9uIG9yIE9PTSBvciBwYWdlIGFjY291bnRpbmcgbGVha3Mgd291bGQgYmUgYW5vdGhlciByaXNrLiBTdGFuZGFyZCBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIGFsd2F5cyBvbiBteSBtaW5kLCBidXQgdGhlc2UgYXJlIGFsbCB0eXBpY2FsIGxvZ2ljIG9yIGFjY291bnRpbmcgYnVncy4KCk5vdywgaXMgS01TQU4gbmVlZGVkIGhlcmU/IEFic29sdXRlbHkgbm90LiBLTVNBTiBpcyBmb3IgY2F0Y2hpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gS0FTQU4vTE9DS0RFUC9rZXJuZWwgYXNzZXJ0cyBsaWtlIFZNXF9CVUdcX09OIGV0Yy4sIHdpbGwgY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmVmY291bnRpbmcgaXNzdWVzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBsb2dpY2FsIGFjY291bnRpbmcgaGVyZSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCByZXF1aXJlIEtNU0FOLiBUaGUgS01TQU5SZWFzb25pbmcgaXMgdGhhdCB1bmluaXRpYWxpemVkIHJlYWRzIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzIGFyZW4mIzM5O3QgcmVsZXZhbnQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN1YnBvb2wgYWNjb3VudGluZyBhbmQgcmVzZXJ2YXRpb24gbG9naWMgZm9yIGh1Z2V0bGJmcyAoaW5jbHVkaW5nIGh1Z2V0bGJfc3VicG9vbF9nZXRfcGFnZXMsIGh1Z2V0bGJfc3VicG9vbF9wdXRfcGFnZXMsIHN0YXRmcyByZXBvcnRpbmcsIGFuZCByb2xsYmFjayBoYW5kbGluZyBpbiBhbGxvY19odWdldGxiX2ZvbGlvIGFuZCBodWdldGxiX3Jlc2VydmVfcGFnZXMpLlxuXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKHN1Y2ggYXMgZ2JsX3Jlc3ZfZ2V0LCBnYmxfcmVzdl9wdXQsIGdibF9yZXN2X2FjY3RlZCwgbGltaXQsIGFuZCBmcmVlX3BhZ2VzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGFjcm9zcyBhbGwgY29udHJvbCBmbG93IHBhdGhzLiBObyBuZXcgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm8gcGFkZGluZyBieXRlcyBhcmUgZXhwb3NlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBpcyBwYXNzZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZy5cblxuUG90ZW50aWFsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgcGFnZSBhY2NvdW50aW5nIGluYWNjdXJhY2llcywgY29uY3VycmVuY3kvc3luY2hyb25pemF0aW9uIHVuZGVyIHJhY2UgY29uZGl0aW9ucywgb3IgbWVtb3J5IGV4aGF1c3Rpb24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN1YnBvb2wgYWNjb3VudGluZyBhbmQgcmVzZXJ2YXRpb24gbG9naWMgZm9yIGh1Z2V0bGJmcyAoaW5jbHVkaW5nIGh1Z2V0bGJfc3VicG9vbF9nZXRfcGFnZXMsIGh1Z2V0bGJfc3VicG9vbF9wdXRfcGFnZXMsIHN0YXRmcyByZXBvcnRpbmcsIGFuZCByb2xsYmFjayBoYW5kbGluZyBpbiBhbGxvY19odWdldGxiX2ZvbGlvIGFuZCBodWdldGxiX3Jlc2VydmVfcGFnZXMpLlxuXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKHN1Y2ggYXMgZ2JsX3Jlc3ZfZ2V0LCBnYmxfcmVzdl9wdXQsIGdibF9yZXN2X2FjY3RlZCwgbGltaXQsIGFuZCBmcmVlX3BhZ2VzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGFjcm9zcyBhbGwgY29udHJvbCBmbG93IHBhdGhzLiBObyBuZXcgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm8gcGFkZGluZyBieXRlcyBhcmUgZXhwb3NlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBpcyBwYXNzZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZy5cblxuUG90ZW50aWFsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgcGFnZSBhY2NvdW50aW5nIGluYWNjdXJhY2llcywgY29uY3VycmVuY3kvc3luY2hyb25pemF0aW9uIHVuZGVyIHJhY2UgY29uZGl0aW9ucywgb3IgbWVtb3J5IGV4aGF1c3Rpb24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjowMToxNS45Mzg5MjI4ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTk1MDQ5NzI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc1wiLFxuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNcIixcbiAgICBcImh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwiaHVnZXRsYmZzX3N0YXRmc1wiLFxuICAgIFwiaHVnZXRsYl91bnJlc2VydmVfcGFnZXNcIixcbiAgICBcImh1Z2VwYWdlX3B1dF9zdWJwb29sXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3VicG9vbCBhY2NvdW50aW5nIGFuZCByZXNlcnZhdGlvbiBsb2dpYyBmb3IgaHVnZXRsYmZzIChpbmNsdWRpbmcgaHVnZXRsYl9zdWJwb29sX2dldF9wYWdlcywgaHVnZXRsYl9zdWJwb29sX3B1dF9wYWdlcywgc3RhdGZzIHJlcG9ydGluZywgYW5kIHJvbGxiYWNrIGhhbmRsaW5nIGluIGFsbG9jX2h1Z2V0bGJfZm9saW8gYW5kIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcykuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChzdWNoIGFzIGdibF9yZXN2X2dldCwgZ2JsX3Jlc3ZfcHV0LCBnYmxfcmVzdl9hY2N0ZWQsIGxpbWl0LCBhbmQgZnJlZV9wYWdlcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhY3Jvc3MgYWxsIGNvbnRyb2wgZmxvdyBwYXRocy4gTm8gbmV3IHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgYWxsb2NhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIG5vIHBhZGRpbmcgYnl0ZXMgYXJlIGV4cG9zZWQsIGFuZCBubyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgcGFzc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb25kaXRpb25hbCBicmFuY2hpbmcuXFxuXFxuUG90ZW50aWFsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgcGFnZSBhY2NvdW50aW5nIGluYWNjdXJhY2llcywgY29uY3VycmVuY3kvc3luY2hyb25pemF0aW9uIHVuZGVyIHJhY2UgY29uZGl0aW9ucywgb3IgbWVtb3J5IGV4aGF1c3Rpb24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGJmcyBzdWJwb29sIGFjY291bnRpbmcgbG9naWMgYW5kIHJlc2VydmF0aW9uIGVycm9yLXVud2luZCBwYXRocyBpbiBtbS9odWdldGxiLmMgYW5kIGZzL2h1Z2V0bGJmcy9pbm9kZS5jLiBTcGVjaWZpY2FsbHksIGl0IGNoYW5nZXMgaG93IGB1c2VkX2hwYWdlc2AgYW5kIGByc3ZfaHBhZ2VzYCBhcmUgdXBkYXRlZCBpbiBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoKWAgYW5kIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcygpYCwgYWx0ZXJzIHN1YnBvb2wgcmVsZWFzZSBjaGVja3MgaW4gYHN1YnBvb2xfaXNfZnJlZSgpYCwgZml4ZXMgc3RhdGZzIGNhbGN1bGF0aW9uIGZvciB1bmJvdW5kZWQgc3VicG9vbHMgaW4gYGh1Z2V0bGJmc19zdGF0ZnMoKWAsIGFuZCByZWZhY3RvcnMgZ2xvYmFsIG1lbW9yeSByZXNlcnZhdGlvbiByb2xsYmFja3MgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW8oKWAgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAuIFRoaXMgbG9naWMgaXMgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBodWdldGxiZnMgZmlsZXN5c3RlbSBtb3VudHMsIGFsbG9jYXRpb25zLCBhbmQgbW1hcCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjowMToxNS45Mzg5MjcxMzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDUxNjQ1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3YTM3MDU0YTdmZDk5NmJlMzBlOTAzNjU1NjE3Zjg1NmVmYzc2NmQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMjI6MDE6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcXG5pbmRleCBhNDkxMTVkYjE4Yzc2Li5kMjQ0NTgzZmRjYmMzIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XFxuQEAgLTMxNCwyMSArMzE0LDggQEAgaHVnZSBwYWdlcy4gIElmIHRoZXkgY2FuIG5vdCBiZSByZXNlcnZlZCwgdGhlIG1vdW50IGZhaWxzLlxcbiBUaGUgcm91dGluZXMgaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgYXJlIGNhbGxlZCB3aGVuIHBhZ2VzIGFyZVxcbiBvYnRhaW5lZCBmcm9tIG9yIHJlbGVhc2VkIGJhY2sgdG8gYSBzdWJwb29sLiAgVGhleSBwZXJmb3JtIGFsbCBzdWJwb29sXFxuIGFjY291bnRpbmcsIGFuZCB0cmFjayBhbnkgcmVzZXJ2YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbC5cXG4taHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzIGFyZSBwYXNzZWQgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIGJ5IHdoaWNoXFxuLXRvIGFkanVzdCB0aGUgc3VicG9vbCAndXNlZCBwYWdlJyBjb3VudCAoZG93biBmb3IgZ2V0LCB1cCBmb3IgcHV0KS4gIE5vcm1hbGx5LFxcbi10aGV5IHJldHVybiB0aGUgc2FtZSB2YWx1ZSB0aGF0IHdhcyBwYXNzZWQgb3IgYW4gZXJyb3IgaWYgbm90IGVub3VnaCBwYWdlc1xcbi1leGlzdCBpbiB0aGUgc3VicG9vbC5cXG4tXFxuLUhvd2V2ZXIsIGlmIHJlc2VydmVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnBvb2wgYSByZXR1cm4gdmFsdWUgbGVzc1xcbi10aGFuIHRoZSBwYXNzZWQgdmFsdWUgbWF5IGJlIHJldHVybmVkLiAgVGhpcyByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHRoZVxcbi1udW1iZXIgb2YgYWRkaXRpb25hbCBnbG9iYWwgcG9vbCBhZGp1c3RtZW50cyB3aGljaCBtdXN0IGJlIG1hZGUuICBGb3IgZXhhbXBsZSxcXG4tc3VwcG9zZSBhIHN1YnBvb2wgY29udGFpbnMgMyByZXNlcnZlZCBodWdlIHBhZ2VzIGFuZCBzb21lb25lIGFza3MgZm9yIDUuXFxuLVRoZSAzIHJlc2VydmVkIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbCBjYW4gYmUgdXNlZCB0byBzYXRpc2Z5IHBhcnRcXG4tb2YgdGhlIHJlcXVlc3QuICBCdXQsIDIgcGFnZXMgbXVzdCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBnbG9iYWwgcG9vbHMuICBUb1xcbi1yZWxheSB0aGlzIGluZm9ybWF0aW9uIHRvIHRoZSBjYWxsZXIsIHRoZSB2YWx1ZSAyIGlzIHJldHVybmVkLiAgVGhlIGNhbGxlclxcbi1pcyB0aGVuIHJlc3BvbnNpYmxlIGZvciBhdHRlbXB0aW5nIHRvIG9idGFpbiB0aGUgYWRkaXRpb25hbCB0d28gcGFnZXMgZnJvbVxcbi10aGUgZ2xvYmFsIHBvb2xzLlxcbi1cXG4raHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgdXNlIHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcyBwYXNzZWQgdG8gYWRqdXN0XFxuK3RoZSBzdWJwb29sICd1c2VkIHBhZ2UnIGNvdW50LlxcbiBcXG4gQ09XIGFuZCBSZXNlcnZhdGlvbnNcXG4gPT09PT09PT09PT09PT09PT09PT1cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxcbmluZGV4IDIwOTQ3ZjhiZDA2NTQuLmFlMWYxZjMxNDc3ZmMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxcbkBAIC0yNDYsMTUgKzI0Niw4IEBAIGh1Z2VwYWdlX3N1YnBvb2znmoRtaW5faHBhZ2Vz5a2X5q615Lit6KKr6Lef6Liq44CC5Zyo5oyC6L295pe277yMaHVnZXRsYl9hY2N0X21lXFxuIOiiq+iwg+eUqOS7pemihOeVmeaMh+WumuaVsOmHj+eahOW3qOmhteOAguWmguaenOWug+S7rOS4jeiDveiiq+mihOeVme+8jOaMgui9veWwseS8muWksei0peOAglxcbiBcXG4g5b2T5LuO5a2Q5rGg5Lit6I635Y+W5oiW6YeK5pS+6aG16Z2i5pe277yM5Lya6LCD55SoaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCnlh73mlbDjgIJcXG4taHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2Vz6KKr5Lyg6YCS57uZ5beo6aG15pWw6YeP77yM5Lul5q2k5p2l6LCD5pW05a2Q5rGg55qEIOKAnOW3sueUqOmhtemdouKAnSDorqHmlbBcXG4t77yIZ2V05Li65LiL6ZmN77yMcHV05Li65LiK5Y2H77yJ44CC6YCa5bi45oOF5Ya15LiL77yM5aaC5p6c5a2Q5rGg5Lit5rKh5pyJ6Laz5aSf55qE6aG16Z2i77yM5a6D5Lus5Lya6L+U5Zue5LiO5Lyg6YCS55qE55u45ZCM55qE5YC85oiWXFxuLeS4gOS4qumUmeivr+OAglxcbi1cXG4t54S26ICM77yM5aaC5p6c6aKE55WZ5LiO5a2Q5rGg55u45YWz6IGU77yM5Y+v6IO95Lya6L+U5Zue5LiA5Liq5bCP5LqO5Lyg6YCS5YC855qE6L+U5Zue5YC844CC6L+Z5Liq6L+U5Zue5YC86KGo56S65b+F6aG76L+b6KGM55qE6aKd5aSW5YWo5bGAXFxuLeaxoOiwg+aVtOeahOaVsOmHj+OAguS+i+Wmgu+8jOWBh+iuvuS4gOS4quWtkOaxoOWMheWQqzPkuKrpooTnlZnnmoTlt6jpobXvvIzmnInkurropoHmsYI15Liq44CC5LiO5a2Q5rGg55u45YWz55qEM+S4qumihOeVmemhteWPr+S7peeUqOadpVxcbi3mu6HotrPpg6jliIbor7fmsYLjgILkvYbmmK/vvIzlv4Xpobvku47lhajlsYDmsaDkuK3ojrflvpcy5Liq6aG16Z2i44CC5Li65LqG5ZCR6LCD55So6ICF6L2s6L6+6L+Z5LiA5L+h5oGv77yM5bCG6L+U5Zue5YC8MuOAgueEtuWQju+8jOiwg+eUqFxcbi3ogIXopoHotJ/otKPku47lhajlsYDmsaDkuK3ojrflj5blj6blpJbkuKTkuKrpobXpnaLjgIJcXG4tXFxuK+Wug+S7rOi0n+i0o+aJgOacieWtkOaxoOeahOe7n+iuoeaguOeul++8jOW5tui3n+i4quS4juWtkOaxoOebuOWFs+iBlOeahOmihOeVmeOAglxcbitodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKeWHveaVsOS9v+eUqOS8oOWFpeeahOW3qOmhteaVsOmHj+adpeiwg+aVtOWtkOaxoOeahOKAnOW3sueUqOmhtemdouKAneiuoeaVsOOAglxcbiBcXG4gQ09X5ZKM6aKE55WZXFxuID09PT09PT09PT1cXG5kaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xcbmluZGV4IDc2MTFhODQ3MGVhMjYuLjUxMTNmNzQzZjZmYzcgMTAwNjQ0XFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcXG4rKysgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xcbkBAIC0xMTA5LDggKzExMDksMTIgQEAgc3RhdGljIGludCBodWdldGxiZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcXG4gXFxuIFxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZWxvY2spO1xcbiBcXHRcXHRcXHRidWYtXFx1MDAzZWZfYmxvY2tzID0gc2JpbmZvLVxcdTAwM2VzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcztcXG4tXFx0XFx0XFx0ZnJlZV9wYWdlcyA9IHNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXNcXG4tXFx0XFx0XFx0XFx0LSBzYmluZm8tXFx1MDAzZXNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcztcXG4rXFx0XFx0XFx0aWYgKHNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgPT0gLTEpIHtcXG4rXFx0XFx0XFx0XFx0ZnJlZV9wYWdlcyA9IC0xO1xcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRmcmVlX3BhZ2VzID0gc2JpbmZvLVxcdTAwM2VzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcyAtXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2JpbmZvLVxcdTAwM2VzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXM7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0YnVmLVxcdTAwM2VmX2JhdmFpbCA9IGJ1Zi1cXHUwMDNlZl9iZnJlZSA9IGZyZWVfcGFnZXM7XFxuIFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2c2JpbmZvLVxcdTAwM2VzcG9vbC1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdFxcdGJ1Zi1cXHUwMDNlZl9maWxlcyA9IHNiaW5mby1cXHUwMDNlbWF4X2lub2RlcztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbmluZGV4IDE2YzRjNGNhYTEyNmMuLjQ1NTFmZjMwMjM2NDAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbkBAIC0zOSw4ICszOSw4IEBAIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sIHtcXG4gXFx0c3BpbmxvY2tfdCBsb2NrO1xcbiBcXHRsb25nIGNvdW50O1xcbiBcXHRsb25nIG1heF9ocGFnZXM7XFx0LyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovXFxuLVxcdGxvbmcgdXNlZF9ocGFnZXM7XFx0LyogVXNlZCBjb3VudCBhZ2FpbnN0IG1heGltdW0sIGluY2x1ZGVzICovXFxuLVxcdFxcdFxcdFxcdC8qIGJvdGggYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi9cXG4rXFx0bG9uZyB1c2VkX2hwYWdlcztcXHQvKiBVc2VkIHBhZ2UgY291bnQsIGluY2x1ZGVzIGJvdGggKi9cXG4rXFx0XFx0XFx0XFx0LyogYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi9cXG4gXFx0c3RydWN0IGhzdGF0ZSAqaHN0YXRlO1xcbiBcXHRsb25nIG1pbl9ocGFnZXM7XFx0LyogTWluaW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1pbmltdW0uICovXFxuIFxcdGxvbmcgcnN2X2hwYWdlcztcXHQvKiBQYWdlcyByZXNlcnZlZCBhZ2FpbnN0IGdsb2JhbCBwb29sIHRvICovXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IDRmNmY1OGJmM2RiNmMuLjExNTFhZDk1OWZmZDUgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYi5jXFxuKysrIGIvbW0vaHVnZXRsYi5jXFxuQEAgLTEzMCwxMiArMTMwLDggQEAgc3RhdGljIGlubGluZSBib29sIHN1YnBvb2xfaXNfZnJlZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXFxuIHtcXG4gXFx0aWYgKHNwb29sLVxcdTAwM2Vjb3VudClcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXFxuLVxcdFxcdHJldHVybiBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcXG4tXFx0aWYgKHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxcbi1cXHRcXHRyZXR1cm4gc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPT0gc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXM7XFxuIFxcbi1cXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0cmV0dXJuIHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyA9PSAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxuQEAgLTE5MywxMyArMTg5LDE4IEBAIHZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbiBcXHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgYWxsb2NhdGluZyBhbmQgcmVzZXJ2aW5nIHBhZ2VzLlxcbi0gKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGVcXG4tICogcmVxdWVzdC4gIE90aGVyd2lzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2YgcGFnZXMgYnkgd2hpY2ggdGhlXFxuLSAqIGdsb2JhbCBwb29scyBtdXN0IGJlIGFkanVzdGVkICh1cHdhcmQpLiAgVGhlIHJldHVybmVkIHZhbHVlIG1heVxcbi0gKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZVxcbi0gKiBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC5cXG4rLyoqXFxuKyAqIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzIC0gR2V0IHBhZ2VzIGZyb20gYSBzdWJwb29sXFxuKyAqIEBzcG9vbDogcG9pbnRlciB0byBzdWJwb29sIHN0cnVjdHVyZSAobWF5IGJlIE5VTEwpXFxuKyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlIG9yIHJlc2VydmVcXG4rICpcXG4rICogQ2hlY2sgYW5kIHVwZGF0ZSBzdWJwb29sIHBhZ2UgdXNhZ2UgY291bnRzIHdoZW4gYWxsb2NhdGluZyBvclxcbisgKiByZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy5cXG4rICpcXG4rICogQ29udGV4dDogVGFrZXMgc3Bvb2wtXFx1MDAzZWxvY2sgdXNpbmcgc3Bpbl9sb2NrX2lycSgpLlxcbisgKiBSZXR1cm46IE5vbi1uZWdhdGl2ZSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgY2Fubm90IGJlXFxuKyAqICAgICAgICAgc2F0aXNmaWVkIGJ5IHRoZSBzdWJwb29sLCBvciAtRU5PTUVNIGlmIHRoZSBzdWJwb29sIG1heGltdW1cXG4rICogICAgICAgICBsaW1pdCB3b3VsZCBiZSBleGNlZWRlZC5cXG4gICovXFxuIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgbG9uZyBkZWx0YSlcXG5AQCAtMjExLDE1ICsyMTIsMTQgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbiBcXG4gXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2spO1xcbiBcXG4tXFx0aWYgKHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzICE9IC0xKSB7XFx0XFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cXG4tXFx0XFx0aWYgKChzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgKyBkZWx0YSkgXFx1MDAzYz0gc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMpXFxuLVxcdFxcdFxcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyArPSBkZWx0YTtcXG4tXFx0XFx0ZWxzZSB7XFxuLVxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuLVxcdFxcdFxcdGdvdG8gdW5sb2NrX3JldDtcXG4tXFx0XFx0fVxcbitcXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyArIGRlbHRhIFxcdTAwM2Ugc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byB1bmxvY2tfcmV0O1xcbiBcXHR9XFxuIFxcbitcXHRzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgKz0gZGVsdGE7XFxuK1xcbiBcXHQvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xcbiBcXHRpZiAoc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXFx1MDAyNlxcdTAwMjYgc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMpIHtcXG4gXFx0XFx0aWYgKGRlbHRhIFxcdTAwM2Ugc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMpIHtcXG5AQCAtMjQwLDExICsyNDAsMTkgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGZyZWVpbmcgYW5kIHVucmVzZXJ2aW5nIHBhZ2VzLlxcbi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBnbG9iYWwgcGFnZSByZXNlcnZhdGlvbnMgdGhhdCBtdXN0IGJlIGRyb3BwZWQuXFxuLSAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpXFxuLSAqIGluIHRoZSBjYXNlIHdoZXJlIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxcbisvKipcXG4rICogaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMgLSBSZWxlYXNlIHBhZ2VzIGJhY2sgdG8gYSBzdWJwb29sXFxuKyAqIEBzcG9vbDogcG9pbnRlciB0byBzdWJwb29sIHN0cnVjdHVyZSAobWF5IGJlIE5VTEwpXFxuKyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGZyZWUgb3IgdW5yZXNlcnZlXFxuKyAqXFxuKyAqIENoZWNrIGFuZCB1cGRhdGUgc3VicG9vbCBwYWdlIHVzYWdlIGNvdW50cyB3aGVuIGZyZWVpbmcgb3JcXG4rICogdW5yZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy5cXG4rICpcXG4rICogQ29udGV4dDogVGFrZXMgc3Bvb2wtXFx1MDAzZWxvY2sgdXNpbmcgc3Bpbl9sb2NrX2lycXNhdmUoKS4gTWF5IHJlbGVhc2VcXG4rICogICAgICAgICAgYW5kIGZyZWUgQHNwb29sIGlmIGl0cyB1c2FnZSBjb3VudCBhbmQgcmVmZXJlbmNlcyByZWFjaFxcbisgKiAgICAgICAgICB6ZXJvLlxcbisgKiBSZXR1cm46IE5vbi1uZWdhdGl2ZSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgdGhlIHN1YnBvb2wgY2Fubm90XFxuKyAqICAgICAgICAgYWJzb3JiLlxcbiAgKi9cXG4gc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgbG9uZyBkZWx0YSlcXG5AQCAtMjU3LDE5ICsyNjUsMjQgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbiBcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnNwb29sLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXFx0XFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cXG4tXFx0XFx0c3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzIC09IGRlbHRhO1xcbitcXHRzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XFxuIFxcbiBcXHQgLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi9cXG4gXFx0aWYgKHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzICE9IC0xIFxcdTAwMjZcXHUwMDI2IHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyBcXHUwMDNjIHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzKSB7XFxuLVxcdFxcdGlmIChzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIFxcdTAwM2M9IHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzKVxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBsaW1pdCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXRcXG4rXFx0XFx0ICogY2FuIGJlIHJlc3RvcmVkIHRvIHRoaXMgc3VicG9vbC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGxvbmcgbGltaXQgPSBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyAtIHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcztcXG4rXFxuK1xcdFxcdGlmIChzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIFxcdTAwM2M9IGxpbWl0KVxcbiBcXHRcXHRcXHRyZXQgPSAwO1xcbiBcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHJldCA9IHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgLSBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcztcXG4rXFx0XFx0XFx0cmV0ID0gc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSAtIGxpbWl0O1xcbiBcXG4gXFx0XFx0c3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgKz0gZGVsdGE7XFxuLVxcdFxcdGlmIChzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyBcXHUwMDNlIHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzKVxcbi1cXHRcXHRcXHRzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyA9IHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzO1xcbitcXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgXFx1MDAzZSBsaW1pdClcXG4rXFx0XFx0XFx0c3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPSBsaW1pdDtcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG5AQCAtMjk0NCw3ICsyOTU3LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX3ZtYSh2bWEpO1xcbiBcXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbi1cXHRsb25nIHJldHZhbCwgZ2JsX2NoZywgZ2JsX3Jlc2VydmU7XFxuK1xcdGxvbmcgcmV0dmFsLCBnYmxfcmVzdl9nZXQ7XFxuIFxcdG1hcF9jaGdfc3RhdGUgbWFwX2NoZztcXG4gXFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCBtcG9saTtcXG4gXFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xcbkBAIC0yOTgzLDggKzI5OTYsOCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdCAqIE9yIGlmIGl0IGNhbiBnZXQgb25lIGZyb20gdGhlIHBvb2wgcmVzZXJ2YXRpb24gZGlyZWN0bHkuXFxuIFxcdCAqL1xcbiBcXHRpZiAobWFwX2NoZykge1xcbi1cXHRcXHRnYmxfY2hnID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xcbi1cXHRcXHRpZiAoZ2JsX2NoZyBcXHUwMDNjIDApIHtcXG4rXFx0XFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xcbitcXHRcXHRpZiAoZ2JsX3Jlc3ZfZ2V0IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRyZXQgPSAtRU5PU1BDO1xcbiBcXHRcXHRcXHRnb3RvIG91dF9lbmRfcmVzZXJ2YXRpb247XFxuIFxcdFxcdH1cXG5AQCAtMjk5Myw3ICszMDA2LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHQgKiBJZiB3ZSBoYXZlIHRoZSB2bWEgcmVzZXJ2YXRpb24gcmVhZHksIG5vIG5lZWQgZm9yIGV4dHJhXFxuIFxcdFxcdCAqIGdsb2JhbCByZXNlcnZhdGlvbi5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGdibF9jaGcgPSAwO1xcbitcXHRcXHRnYmxfcmVzdl9nZXQgPSAwO1xcbiBcXHR9XFxuIFxcbiBcXHQvKlxcbkBAIC0zMDA0LDEwICszMDE3LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIGdibF9jaGcgPT0gMCBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoaXNcXG4rXFx0ICogZ2JsX3Jlc3ZfZ2V0ID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXFxuIFxcdCAqIGFsbG9jYXRpb24sIHNvIHRyeSB0byB1c2UgaXQuXFxuIFxcdCAqL1xcbi1cXHRpZiAoZ2JsX2NoZyA9PSAwKVxcbitcXHRpZiAoZ2JsX3Jlc3ZfZ2V0ID09IDApXFxuIFxcdFxcdGFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlM7XFxuIFxcbiBcXHQvKiBUYWtlcyByZWZlcmVuY2Ugb24gbXBvbC4gKi9cXG5AQCAtMzA2MSwxMyArMzA3NCwxMCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdHJldHVybiBmb2xpbztcXG4gXFxuIG91dF9zdWJwb29sX3B1dDpcXG4tXFx0LypcXG4tXFx0ICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wncyByc3ZfaHBhZ2VzIGlzIHVzZWRcXG4tXFx0ICogZHVyaW5nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLlxcbi1cXHQgKi9cXG4tXFx0aWYgKG1hcF9jaGcgXFx1MDAyNlxcdTAwMjYgIWdibF9jaGcpIHtcXG4tXFx0XFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxuLVxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcXG4rXFx0aWYgKG1hcF9jaGcpIHtcXG4rXFx0XFx0bG9uZyBnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxuK1xcbitcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCAtIGdibF9yZXN2X3B1dCk7XFxuIFxcdH1cXG4gXFxuIG91dF9lbmRfcmVzZXJ2YXRpb246XFxuQEAgLTY2NjMsMTIgKzY2NzMsMTUgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncylcXG4ge1xcbi1cXHRsb25nIGNoZyA9IC0xLCBhZGQgPSAtMSwgc3Bvb2xfcmVzdiwgZ2JsX3Jlc3Y7XFxuK1xcdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xO1xcbiBcXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2lub2RlKGlub2RlKTtcXG4gXFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF9pbm9kZShpbm9kZSk7XFxuIFxcdHN0cnVjdCByZXN2X21hcCAqcmVzdl9tYXA7XFxuIFxcdHN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IE5VTEw7XFxuLVxcdGxvbmcgZ2JsX3Jlc2VydmUsIHJlZ2lvbnNfbmVlZGVkID0gMDtcXG4rXFx0bG9uZyBnYmxfcmVzdl9hY2N0ZWQgPSAwO1xcbitcXHRsb25nIHJlZ2lvbnNfbmVlZGVkID0gMDtcXG4rXFx0bG9uZyBnYmxfcmVzdl9nZXQ7XFxuK1xcdGxvbmcgZ2JsX3Jlc3ZfcHV0O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0LyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovXFxuQEAgLTY3NDMsOSArNjc1Niw5IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdCAqIHRoZSBzdWJwb29sIGhhcyBhIG1pbmltdW0gc2l6ZSwgdGhlcmUgbWF5IGJlIHNvbWUgZ2xvYmFsXFxuIFxcdCAqIHJlc2VydmF0aW9ucyBhbHJlYWR5IGluIHBsYWNlIChnYmxfcmVzZXJ2ZSkuXFxuIFxcdCAqL1xcbi1cXHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xcbi1cXHRpZiAoZ2JsX3Jlc2VydmUgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdGVyciA9IGdibF9yZXNlcnZlO1xcbitcXHRnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgY2hnKTtcXG4rXFx0aWYgKGdibF9yZXN2X2dldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZXJyID0gZ2JsX3Jlc3ZfZ2V0O1xcbiBcXHRcXHRnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7XFxuIFxcdH1cXG4gXFxuQEAgLTY3NTMsOSArNjc2NiwxMCBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHQgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi5cXG4gXFx0ICogSGFuZCB0aGUgcGFnZXMgYmFjayB0byB0aGUgc3VicG9vbCBpZiB0aGVyZSBhcmUgbm90XFxuIFxcdCAqL1xcbi1cXHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTtcXG4rXFx0ZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQpO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfcHV0X3BhZ2VzO1xcbitcXHRnYmxfcmVzdl9hY2N0ZWQgPSBnYmxfcmVzdl9nZXQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBBY2NvdW50IGZvciB0aGUgcmVzZXJ2YXRpb25zIG1hZGUuIFNoYXJlZCBtYXBwaW5ncyByZWNvcmQgcmVnaW9uc1xcbkBAIC02NzcyLDcgKzY3ODYsNiBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRhZGQgPSByZWdpb25fYWRkKHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQsIGgsIGhfY2cpO1xcbiBcXG4gXFx0XFx0aWYgKHVubGlrZWx5KGFkZCBcXHUwMDNjIDApKSB7XFxuLVxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcXG4gXFx0XFx0XFx0ZXJyID0gYWRkO1xcbiBcXHRcXHRcXHRnb3RvIG91dF9wdXRfcGFnZXM7XFxuIFxcdFxcdH0gZWxzZSBpZiAodW5saWtlbHkoY2hnIFxcdTAwM2UgYWRkKSkge1xcbkBAIC02ODA4LDI2ICs2ODIxLDIyIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdH1cXG4gXFx0cmV0dXJuIGNoZztcXG4gXFxuLW91dF9wdXRfcGFnZXM6XFxuLVxcdHNwb29sX3Jlc3YgPSBjaGcgLSBnYmxfcmVzZXJ2ZTtcXG4tXFx0aWYgKHNwb29sX3Jlc3YpIHtcXG4tXFx0XFx0LyogcHV0IHN1YiBwb29sJ3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cXG4tXFx0XFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIHN1YnBvb2wncyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxcbi1cXHRcXHQgKiByZXR1cm4gdG8gaHN0YXRlLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xcbi1cXHR9XFxuLVxcdC8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqL1xcbi1cXHRpZiAoZ2JsX3Jlc2VydmUgXFx1MDAyNlxcdTAwMjYgc3Bvb2wpIHtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rIG91dF9wdXRfcGFnZXM6XFxuK1xcdC8qXFxuK1xcdCAqIFJldHVybiBhbGwgdGhhdCB3YXMgcmVxdWVzdGVkIGZyb20gdGhlIHN1YnBvb2wsIGxldCBzdWJwb29sXFxuK1xcdCAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZVxcbitcXHQgKiByZXR1cm5lZCB0byB0aGUgZ2xvYmFsIHBvb2wuXFxuK1xcdCAqL1xcbitcXHRnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgY2hnKTtcXG4rXFx0LypcXG4rXFx0ICogVGhlcmUgbWF5IGJlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBudW1iZXIgb2ZcXG4rXFx0ICogcmVzZXJ2YXRpb25zIHRvIGNvbnN1bWUgYW5kIHRoZSBudW1iZXIgdG8gcmVzdG9yZSBub3cgaWZcXG4rXFx0ICogdGhlcmUgYXJlIG11bHRpcGxlIHRocmVhZHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3VicG9vbCAtXFxuK1xcdCAqIHJlc3RvcmUgdGhlIGRpZmZlcmVuY2UsIHRha2luZyBpbnRvIGFjY291bnQgYW55IGdsb2JhbFxcbitcXHQgKiByZXNlcnZhdGlvbnMgYWxyZWFkeSBhY3F1aXJlZC5cXG4rXFx0ICovXFxuK1xcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0IC0gZ2JsX3Jlc3ZfcHV0IC0gZ2JsX3Jlc3ZfYWNjdGVkKTtcXG4gXFxuLVxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzcG9vbC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi1cXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXFxuLVxcdFxcdFxcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtcXG4tXFx0XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbi1cXHR9XFxuIG91dF91bmNoYXJnZV9jZ3JvdXA6XFxuIFxcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjowMToxNy4zNDQ4NTMwNTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMzMjExMDM1MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzXCIsXG4gICAgXCJodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc1wiLFxuICAgIFwiaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXCIsXG4gICAgXCJhbGxvY19odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJodWdldGxiZnNfc3RhdGZzXCIsXG4gICAgXCJodWdldGxiX3VucmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwiaHVnZXBhZ2VfcHV0X3N1YnBvb2xcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiZnMgc3VicG9vbCBhY2NvdW50aW5nIGxvZ2ljIGFuZCByZXNlcnZhdGlvbiBlcnJvci11bndpbmQgcGF0aHMgaW4gbW0vaHVnZXRsYi5jIGFuZCBmcy9odWdldGxiZnMvaW5vZGUuYy4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIGhvdyBgdXNlZF9ocGFnZXNgIGFuZCBgcnN2X2hwYWdlc2AgYXJlIHVwZGF0ZWQgaW4gYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKClgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoKWAsIGFsdGVycyBzdWJwb29sIHJlbGVhc2UgY2hlY2tzIGluIGBzdWJwb29sX2lzX2ZyZWUoKWAsIGZpeGVzIHN0YXRmcyBjYWxjdWxhdGlvbiBmb3IgdW5ib3VuZGVkIHN1YnBvb2xzIGluIGBodWdldGxiZnNfc3RhdGZzKClgLCBhbmQgcmVmYWN0b3JzIGdsb2JhbCBtZW1vcnkgcmVzZXJ2YXRpb24gcm9sbGJhY2tzIGluIGBhbGxvY19odWdldGxiX2ZvbGlvKClgIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgLiBUaGlzIGxvZ2ljIGlzIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaHVnZXRsYmZzIGZpbGVzeXN0ZW0gbW91bnRzLCBhbGxvY2F0aW9ucywgYW5kIG1tYXAgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3YTM3MDU0YTdmZDk5NmJlMzBlOTAzNjU1NjE3Zjg1NmVmYzc2NmQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAyMjowMToxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG5pbmRleCBhNDkxMTVkYjE4Yzc2Li5kMjQ0NTgzZmRjYmMzIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuQEAgLTMxNCwyMSArMzE0LDggQEAgaHVnZSBwYWdlcy4gIElmIHRoZXkgY2FuIG5vdCBiZSByZXNlcnZlZCwgdGhlIG1vdW50IGZhaWxzLlxuIFRoZSByb3V0aW5lcyBodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKSBhcmUgY2FsbGVkIHdoZW4gcGFnZXMgYXJlXG4gb2J0YWluZWQgZnJvbSBvciByZWxlYXNlZCBiYWNrIHRvIGEgc3VicG9vbC4gIFRoZXkgcGVyZm9ybSBhbGwgc3VicG9vbFxuIGFjY291bnRpbmcsIGFuZCB0cmFjayBhbnkgcmVzZXJ2YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbC5cbi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMgYXJlIHBhc3NlZCB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgYnkgd2hpY2hcbi10byBhZGp1c3QgdGhlIHN1YnBvb2wgJ3VzZWQgcGFnZScgY291bnQgKGRvd24gZm9yIGdldCwgdXAgZm9yIHB1dCkuICBOb3JtYWxseSxcbi10aGV5IHJldHVybiB0aGUgc2FtZSB2YWx1ZSB0aGF0IHdhcyBwYXNzZWQgb3IgYW4gZXJyb3IgaWYgbm90IGVub3VnaCBwYWdlc1xuLWV4aXN0IGluIHRoZSBzdWJwb29sLlxuLVxuLUhvd2V2ZXIsIGlmIHJlc2VydmVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnBvb2wgYSByZXR1cm4gdmFsdWUgbGVzc1xuLXRoYW4gdGhlIHBhc3NlZCB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQuICBUaGlzIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgdGhlXG4tbnVtYmVyIG9mIGFkZGl0aW9uYWwgZ2xvYmFsIHBvb2wgYWRqdXN0bWVudHMgd2hpY2ggbXVzdCBiZSBtYWRlLiAgRm9yIGV4YW1wbGUsXG4tc3VwcG9zZSBhIHN1YnBvb2wgY29udGFpbnMgMyByZXNlcnZlZCBodWdlIHBhZ2VzIGFuZCBzb21lb25lIGFza3MgZm9yIDUuXG4tVGhlIDMgcmVzZXJ2ZWQgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGNhbiBiZSB1c2VkIHRvIHNhdGlzZnkgcGFydFxuLW9mIHRoZSByZXF1ZXN0LiAgQnV0LCAyIHBhZ2VzIG11c3QgYmUgb2J0YWluZWQgZnJvbSB0aGUgZ2xvYmFsIHBvb2xzLiAgVG9cbi1yZWxheSB0aGlzIGluZm9ybWF0aW9uIHRvIHRoZSBjYWxsZXIsIHRoZSB2YWx1ZSAyIGlzIHJldHVybmVkLiAgVGhlIGNhbGxlclxuLWlzIHRoZW4gcmVzcG9uc2libGUgZm9yIGF0dGVtcHRpbmcgdG8gb2J0YWluIHRoZSBhZGRpdGlvbmFsIHR3byBwYWdlcyBmcm9tXG4tdGhlIGdsb2JhbCBwb29scy5cbi1cbitodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKSB1c2UgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIHBhc3NlZCB0byBhZGp1c3Rcbit0aGUgc3VicG9vbCAndXNlZCBwYWdlJyBjb3VudC5cbiBcbiBDT1cgYW5kIFJlc2VydmF0aW9uc1xuID09PT09PT09PT09PT09PT09PT09XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuaW5kZXggMjA5NDdmOGJkMDY1NC4uYWUxZjFmMzE0NzdmYyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuQEAgLTI0NiwxNSArMjQ2LDggQEAgaHVnZXBhZ2Vfc3VicG9vbOeahG1pbl9ocGFnZXPlrZfmrrXkuK3ooqvot5/ouKrjgILlnKjmjILovb3ml7bvvIxodWdldGxiX2FjY3RfbWVcbiDooqvosIPnlKjku6XpooTnlZnmjIflrprmlbDph4/nmoTlt6jpobXjgILlpoLmnpzlroPku6zkuI3og73ooqvpooTnlZnvvIzmjILovb3lsLHkvJrlpLHotKXjgIJcbiBcbiDlvZPku47lrZDmsaDkuK3ojrflj5bmiJbph4rmlL7pobXpnaLml7bvvIzkvJrosIPnlKhodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKeWHveaVsOOAglxuLWh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlc+iiq+S8oOmAkue7meW3qOmhteaVsOmHj++8jOS7peatpOadpeiwg+aVtOWtkOaxoOeahCDigJzlt7LnlKjpobXpnaLigJ0g6K6h5pWwXG4t77yIZ2V05Li65LiL6ZmN77yMcHV05Li65LiK5Y2H77yJ44CC6YCa5bi45oOF5Ya15LiL77yM5aaC5p6c5a2Q5rGg5Lit5rKh5pyJ6Laz5aSf55qE6aG16Z2i77yM5a6D5Lus5Lya6L+U5Zue5LiO5Lyg6YCS55qE55u45ZCM55qE5YC85oiWXG4t5LiA5Liq6ZSZ6K+v44CCXG4tXG4t54S26ICM77yM5aaC5p6c6aKE55WZ5LiO5a2Q5rGg55u45YWz6IGU77yM5Y+v6IO95Lya6L+U5Zue5LiA5Liq5bCP5LqO5Lyg6YCS5YC855qE6L+U5Zue5YC844CC6L+Z5Liq6L+U5Zue5YC86KGo56S65b+F6aG76L+b6KGM55qE6aKd5aSW5YWo5bGAXG4t5rGg6LCD5pW055qE5pWw6YeP44CC5L6L5aaC77yM5YGH6K6+5LiA5Liq5a2Q5rGg5YyF5ZCrM+S4qumihOeVmeeahOW3qOmhte+8jOacieS6uuimgeaxgjXkuKrjgILkuI7lrZDmsaDnm7jlhbPnmoQz5Liq6aKE55WZ6aG15Y+v5Lul55So5p2lXG4t5ruh6Laz6YOo5YiG6K+35rGC44CC5L2G5piv77yM5b+F6aG75LuO5YWo5bGA5rGg5Lit6I635b6XMuS4qumhtemdouOAguS4uuS6huWQkeiwg+eUqOiAhei9rOi+vui/meS4gOS/oeaBr++8jOWwhui/lOWbnuWAvDLjgILnhLblkI7vvIzosIPnlKhcbi3ogIXopoHotJ/otKPku47lhajlsYDmsaDkuK3ojrflj5blj6blpJbkuKTkuKrpobXpnaLjgIJcbi1cbivlroPku6zotJ/otKPmiYDmnInlrZDmsaDnmoTnu5/orqHmoLjnrpfvvIzlubbot5/ouKrkuI7lrZDmsaDnm7jlhbPogZTnmoTpooTnlZnjgIJcbitodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKeWHveaVsOS9v+eUqOS8oOWFpeeahOW3qOmhteaVsOmHj+adpeiwg+aVtOWtkOaxoOeahOKAnOW3sueUqOmhtemdouKAneiuoeaVsOOAglxuIFxuIENPV+WSjOmihOeVmVxuID09PT09PT09PT1cbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCA3NjExYTg0NzBlYTI2Li41MTEzZjc0M2Y2ZmM3IDEwMDY0NFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcbisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5AQCAtMTEwOSw4ICsxMTA5LDEyIEBAIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG4gXG4gXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbG9jayk7XG4gXHRcdFx0YnVmLVx1MDAzZWZfYmxvY2tzID0gc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXM7XG4tXHRcdFx0ZnJlZV9wYWdlcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzXG4tXHRcdFx0XHQtIHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcztcbitcdFx0XHRpZiAoc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXMgPT0gLTEpIHtcbitcdFx0XHRcdGZyZWVfcGFnZXMgPSAtMTtcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0ZnJlZV9wYWdlcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzIC1cbitcdFx0XHRcdFx0ICAgICBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4rXHRcdFx0fVxuIFx0XHRcdGJ1Zi1cdTAwM2VmX2JhdmFpbCA9IGJ1Zi1cdTAwM2VmX2JmcmVlID0gZnJlZV9wYWdlcztcbiBcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2c2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZWxvY2spO1xuIFx0XHRcdGJ1Zi1cdTAwM2VmX2ZpbGVzID0gc2JpbmZvLVx1MDAzZW1heF9pbm9kZXM7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMTZjNGM0Y2FhMTI2Yy4uNDU1MWZmMzAyMzY0MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuQEAgLTM5LDggKzM5LDggQEAgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wge1xuIFx0c3BpbmxvY2tfdCBsb2NrO1xuIFx0bG9uZyBjb3VudDtcbiBcdGxvbmcgbWF4X2hwYWdlcztcdC8qIE1heGltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtYXhpbXVtLiAqL1xuLVx0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgY291bnQgYWdhaW5zdCBtYXhpbXVtLCBpbmNsdWRlcyAqL1xuLVx0XHRcdFx0LyogYm90aCBhbGxvY2F0ZWQgYW5kIHJlc2VydmVkIHBhZ2VzLiAqL1xuK1x0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgcGFnZSBjb3VudCwgaW5jbHVkZXMgYm90aCAqL1xuK1x0XHRcdFx0LyogYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi9cbiBcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZTtcbiBcdGxvbmcgbWluX2hwYWdlcztcdC8qIE1pbmltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtaW5pbXVtLiAqL1xuIFx0bG9uZyByc3ZfaHBhZ2VzO1x0LyogUGFnZXMgcmVzZXJ2ZWQgYWdhaW5zdCBnbG9iYWwgcG9vbCB0byAqL1xuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNGY2ZjU4YmYzZGI2Yy4uMTE1MWFkOTU5ZmZkNSAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtMTMwLDEyICsxMzAsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbiB7XG4gXHRpZiAoc3Bvb2wtXHUwMDNlY291bnQpXG4gXHRcdHJldHVybiBmYWxzZTtcbi1cdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRyZXR1cm4gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcbi1cdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxuLVx0XHRyZXR1cm4gc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuIFxuLVx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuQEAgLTE5MywxMyArMTg5LDE4IEBAIHZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuIFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xuIH1cbiBcbi0vKlxuLSAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgYWxsb2NhdGluZyBhbmQgcmVzZXJ2aW5nIHBhZ2VzLlxuLSAqIFJldHVybiAtRU5PTUVNIGlmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHJlc291cmNlcyB0byBzYXRpc2Z5IHRoZVxuLSAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZVxuLSAqIGdsb2JhbCBwb29scyBtdXN0IGJlIGFkanVzdGVkICh1cHdhcmQpLiAgVGhlIHJldHVybmVkIHZhbHVlIG1heVxuLSAqIG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpIGluIHRoZSBjYXNlIHdoZXJlXG4tICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXG4rLyoqXG4rICogaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMgLSBHZXQgcGFnZXMgZnJvbSBhIHN1YnBvb2xcbisgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKVxuKyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlIG9yIHJlc2VydmVcbisgKlxuKyAqIENoZWNrIGFuZCB1cGRhdGUgc3VicG9vbCBwYWdlIHVzYWdlIGNvdW50cyB3aGVuIGFsbG9jYXRpbmcgb3JcbisgKiByZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy5cbisgKlxuKyAqIENvbnRleHQ6IFRha2VzIHNwb29sLVx1MDAzZWxvY2sgdXNpbmcgc3Bpbl9sb2NrX2lycSgpLlxuKyAqIFJldHVybjogTm9uLW5lZ2F0aXZlIG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCBjYW5ub3QgYmVcbisgKiAgICAgICAgIHNhdGlzZmllZCBieSB0aGUgc3VicG9vbCwgb3IgLUVOT01FTSBpZiB0aGUgc3VicG9vbCBtYXhpbXVtXG4rICogICAgICAgICBsaW1pdCB3b3VsZCBiZSBleGNlZWRlZC5cbiAgKi9cbiBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXHRcdFx0XHQgICAgICBsb25nIGRlbHRhKVxuQEAgLTIxMSwxNSArMjEyLDE0IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jayk7XG4gXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSkge1x0XHQvKiBtYXhpbXVtIHNpemUgYWNjb3VudGluZyAqL1xuLVx0XHRpZiAoKHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICsgZGVsdGEpIFx1MDAzYz0gc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcylcbi1cdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyArPSBkZWx0YTtcbi1cdFx0ZWxzZSB7XG4tXHRcdFx0cmV0ID0gLUVOT01FTTtcbi1cdFx0XHRnb3RvIHVubG9ja19yZXQ7XG4tXHRcdH1cbitcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICsgZGVsdGEgXHUwMDNlIHNwb29sLVx1MDAzZW1heF9ocGFnZXMpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byB1bmxvY2tfcmV0O1xuIFx0fVxuIFxuK1x0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgKz0gZGVsdGE7XG4rXG4gXHQvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xuIFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMpIHtcbiBcdFx0aWYgKGRlbHRhIFx1MDAzZSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzKSB7XG5AQCAtMjQwLDExICsyNDAsMTkgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLypcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGZyZWVpbmcgYW5kIHVucmVzZXJ2aW5nIHBhZ2VzLlxuLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdsb2JhbCBwYWdlIHJlc2VydmF0aW9ucyB0aGF0IG11c3QgYmUgZHJvcHBlZC5cbi0gKiBUaGUgcmV0dXJuIHZhbHVlIG1heSBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKVxuLSAqIGluIHRoZSBjYXNlIHdoZXJlIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxuKy8qKlxuKyAqIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzIC0gUmVsZWFzZSBwYWdlcyBiYWNrIHRvIGEgc3VicG9vbFxuKyAqIEBzcG9vbDogcG9pbnRlciB0byBzdWJwb29sIHN0cnVjdHVyZSAobWF5IGJlIE5VTEwpXG4rICogQGRlbHRhOiBudW1iZXIgb2YgcGFnZXMgdG8gZnJlZSBvciB1bnJlc2VydmVcbisgKlxuKyAqIENoZWNrIGFuZCB1cGRhdGUgc3VicG9vbCBwYWdlIHVzYWdlIGNvdW50cyB3aGVuIGZyZWVpbmcgb3JcbisgKiB1bnJlc2VydmluZyBAZGVsdGEgaHVnZXBhZ2VzLlxuKyAqXG4rICogQ29udGV4dDogVGFrZXMgc3Bvb2wtXHUwMDNlbG9jayB1c2luZyBzcGluX2xvY2tfaXJxc2F2ZSgpLiBNYXkgcmVsZWFzZVxuKyAqICAgICAgICAgIGFuZCBmcmVlIEBzcG9vbCBpZiBpdHMgdXNhZ2UgY291bnQgYW5kIHJlZmVyZW5jZXMgcmVhY2hcbisgKiAgICAgICAgICB6ZXJvLlxuKyAqIFJldHVybjogTm9uLW5lZ2F0aXZlIG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCB0aGUgc3VicG9vbCBjYW5ub3RcbisgKiAgICAgICAgIGFic29yYi5cbiAgKi9cbiBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXHRcdFx0XHQgICAgICAgbG9uZyBkZWx0YSlcbkBAIC0yNTcsMTkgKzI2NSwyNCBAQCBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcdFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cbi1cdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XG4rXHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBkZWx0YTtcbiBcbiBcdCAvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xuIFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIFx1MDAzYyBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzKSB7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgXHUwMDNjPSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzKVxuK1x0XHQvKlxuK1x0XHQgKiBsaW1pdCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXRcbitcdFx0ICogY2FuIGJlIHJlc3RvcmVkIHRvIHRoaXMgc3VicG9vbC5cbitcdFx0ICovXG4rXHRcdGxvbmcgbGltaXQgPSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzIC0gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4rXG4rXHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgXHUwMDNjPSBsaW1pdClcbiBcdFx0XHRyZXQgPSAwO1xuIFx0XHRlbHNlXG4tXHRcdFx0cmV0ID0gc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIC0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcztcbitcdFx0XHRyZXQgPSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgLSBsaW1pdDtcbiBcbiBcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArPSBkZWx0YTtcbi1cdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgXHUwMDNlIHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpXG4tXHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXM7XG4rXHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzIFx1MDAzZSBsaW1pdClcbitcdFx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID0gbGltaXQ7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTI5NDQsNyArMjk1Nyw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfdm1hKHZtYSk7XG4gXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdGxvbmcgcmV0dmFsLCBnYmxfY2hnLCBnYmxfcmVzZXJ2ZTtcbitcdGxvbmcgcmV0dmFsLCBnYmxfcmVzdl9nZXQ7XG4gXHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XG4gXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xuIFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuQEAgLTI5ODMsOCArMjk5Niw4IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdCAqIE9yIGlmIGl0IGNhbiBnZXQgb25lIGZyb20gdGhlIHBvb2wgcmVzZXJ2YXRpb24gZGlyZWN0bHkuXG4gXHQgKi9cbiBcdGlmIChtYXBfY2hnKSB7XG4tXHRcdGdibF9jaGcgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XG4tXHRcdGlmIChnYmxfY2hnIFx1MDAzYyAwKSB7XG4rXHRcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTtcbitcdFx0aWYgKGdibF9yZXN2X2dldCBcdTAwM2MgMCkge1xuIFx0XHRcdHJldCA9IC1FTk9TUEM7XG4gXHRcdFx0Z290byBvdXRfZW5kX3Jlc2VydmF0aW9uO1xuIFx0XHR9XG5AQCAtMjk5Myw3ICszMDA2LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQgKiBJZiB3ZSBoYXZlIHRoZSB2bWEgcmVzZXJ2YXRpb24gcmVhZHksIG5vIG5lZWQgZm9yIGV4dHJhXG4gXHRcdCAqIGdsb2JhbCByZXNlcnZhdGlvbi5cbiBcdFx0ICovXG4tXHRcdGdibF9jaGcgPSAwO1xuK1x0XHRnYmxfcmVzdl9nZXQgPSAwO1xuIFx0fVxuIFxuIFx0LypcbkBAIC0zMDA0LDEwICszMDE3LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDtcbiBcbiBcdC8qXG4tXHQgKiBnYmxfY2hnID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXG4rXHQgKiBnYmxfcmVzdl9nZXQgPT0gMCBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoaXNcbiBcdCAqIGFsbG9jYXRpb24sIHNvIHRyeSB0byB1c2UgaXQuXG4gXHQgKi9cbi1cdGlmIChnYmxfY2hnID09IDApXG4rXHRpZiAoZ2JsX3Jlc3ZfZ2V0ID09IDApXG4gXHRcdGFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlM7XG4gXG4gXHQvKiBUYWtlcyByZWZlcmVuY2Ugb24gbXBvbC4gKi9cbkBAIC0zMDYxLDEzICszMDc0LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHJldHVybiBmb2xpbztcbiBcbiBvdXRfc3VicG9vbF9wdXQ6XG4tXHQvKlxuLVx0ICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wncyByc3ZfaHBhZ2VzIGlzIHVzZWRcbi1cdCAqIGR1cmluZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcy5cbi1cdCAqL1xuLVx0aWYgKG1hcF9jaGcgXHUwMDI2XHUwMDI2ICFnYmxfY2hnKSB7XG4tXHRcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xuLVx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG4rXHRpZiAobWFwX2NoZykge1xuK1x0XHRsb25nIGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbitcbitcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpO1xuIFx0fVxuIFxuIG91dF9lbmRfcmVzZXJ2YXRpb246XG5AQCAtNjY2MywxMiArNjY3MywxNSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbi1cdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xLCBzcG9vbF9yZXN2LCBnYmxfcmVzdjtcbitcdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xO1xuIFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XG4gXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX2lub2RlKGlub2RlKTtcbiBcdHN0cnVjdCByZXN2X21hcCAqcmVzdl9tYXA7XG4gXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMO1xuLVx0bG9uZyBnYmxfcmVzZXJ2ZSwgcmVnaW9uc19uZWVkZWQgPSAwO1xuK1x0bG9uZyBnYmxfcmVzdl9hY2N0ZWQgPSAwO1xuK1x0bG9uZyByZWdpb25zX25lZWRlZCA9IDA7XG4rXHRsb25nIGdibF9yZXN2X2dldDtcbitcdGxvbmcgZ2JsX3Jlc3ZfcHV0O1xuIFx0aW50IGVycjtcbiBcbiBcdC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqL1xuQEAgLTY3NDMsOSArNjc1Niw5IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgKiB0aGUgc3VicG9vbCBoYXMgYSBtaW5pbXVtIHNpemUsIHRoZXJlIG1heSBiZSBzb21lIGdsb2JhbFxuIFx0ICogcmVzZXJ2YXRpb25zIGFscmVhZHkgaW4gcGxhY2UgKGdibF9yZXNlcnZlKS5cbiBcdCAqL1xuLVx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgY2hnKTtcbi1cdGlmIChnYmxfcmVzZXJ2ZSBcdTAwM2MgMCkge1xuLVx0XHRlcnIgPSBnYmxfcmVzZXJ2ZTtcbitcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xuK1x0aWYgKGdibF9yZXN2X2dldCBcdTAwM2MgMCkge1xuK1x0XHRlcnIgPSBnYmxfcmVzdl9nZXQ7XG4gXHRcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDtcbiBcdH1cbiBcbkBAIC02NzUzLDkgKzY3NjYsMTAgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCAqIENoZWNrIGVub3VnaCBodWdlcGFnZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIHJlc2VydmF0aW9uLlxuIFx0ICogSGFuZCB0aGUgcGFnZXMgYmFjayB0byB0aGUgc3VicG9vbCBpZiB0aGVyZSBhcmUgbm90XG4gXHQgKi9cbi1cdGVyciA9IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc2VydmUpO1xuK1x0ZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfcHV0X3BhZ2VzO1xuK1x0Z2JsX3Jlc3ZfYWNjdGVkID0gZ2JsX3Jlc3ZfZ2V0O1xuIFxuIFx0LypcbiBcdCAqIEFjY291bnQgZm9yIHRoZSByZXNlcnZhdGlvbnMgbWFkZS4gU2hhcmVkIG1hcHBpbmdzIHJlY29yZCByZWdpb25zXG5AQCAtNjc3Miw3ICs2Nzg2LDYgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0YWRkID0gcmVnaW9uX2FkZChyZXN2X21hcCwgZnJvbSwgdG8sIHJlZ2lvbnNfbmVlZGVkLCBoLCBoX2NnKTtcbiBcbiBcdFx0aWYgKHVubGlrZWx5KGFkZCBcdTAwM2MgMCkpIHtcbi1cdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG4gXHRcdFx0ZXJyID0gYWRkO1xuIFx0XHRcdGdvdG8gb3V0X3B1dF9wYWdlcztcbiBcdFx0fSBlbHNlIGlmICh1bmxpa2VseShjaGcgXHUwMDNlIGFkZCkpIHtcbkBAIC02ODA4LDI2ICs2ODIxLDIyIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHR9XG4gXHRyZXR1cm4gY2hnO1xuIFxuLW91dF9wdXRfcGFnZXM6XG4tXHRzcG9vbF9yZXN2ID0gY2hnIC0gZ2JsX3Jlc2VydmU7XG4tXHRpZiAoc3Bvb2xfcmVzdikge1xuLVx0XHQvKiBwdXQgc3ViIHBvb2wncyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqL1xuLVx0XHRnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTtcbi1cdFx0Lypcbi1cdFx0ICogc3VicG9vbCdzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsXG4tXHRcdCAqIHJldHVybiB0byBoc3RhdGUuXG4tXHRcdCAqL1xuLVx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7XG4tXHR9XG4tXHQvKiBSZXN0b3JlIHVzZWRfaHBhZ2VzIGZvciBwYWdlcyB0aGF0IGZhaWxlZCBnbG9iYWwgcmVzZXJ2YXRpb24gKi9cbi1cdGlmIChnYmxfcmVzZXJ2ZSBcdTAwMjZcdTAwMjYgc3Bvb2wpIHtcbi1cdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbisgb3V0X3B1dF9wYWdlczpcbitcdC8qXG4rXHQgKiBSZXR1cm4gYWxsIHRoYXQgd2FzIHJlcXVlc3RlZCBmcm9tIHRoZSBzdWJwb29sLCBsZXQgc3VicG9vbFxuK1x0ICogdGVsbCB1cyB0aGUgbmV3IG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCBuZWVkIHRvIGJlXG4rXHQgKiByZXR1cm5lZCB0byB0aGUgZ2xvYmFsIHBvb2wuXG4rXHQgKi9cbitcdGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBjaGcpO1xuK1x0LypcbitcdCAqIFRoZXJlIG1heSBiZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbnVtYmVyIG9mXG4rXHQgKiByZXNlcnZhdGlvbnMgdG8gY29uc3VtZSBhbmQgdGhlIG51bWJlciB0byByZXN0b3JlIG5vdyBpZlxuK1x0ICogdGhlcmUgYXJlIG11bHRpcGxlIHRocmVhZHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3VicG9vbCAtXG4rXHQgKiByZXN0b3JlIHRoZSBkaWZmZXJlbmNlLCB0YWtpbmcgaW50byBhY2NvdW50IGFueSBnbG9iYWxcbitcdCAqIHJlc2VydmF0aW9ucyBhbHJlYWR5IGFjcXVpcmVkLlxuK1x0ICovXG4rXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCAtIGdibF9yZXN2X3B1dCAtIGdibF9yZXN2X2FjY3RlZCk7XG4gXG4tXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnNwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdFx0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXG4tXHRcdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7XG4tXHRcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbi1cdH1cbiBvdXRfdW5jaGFyZ2VfY2dyb3VwOlxuIFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoaHN0YXRlX2luZGV4KGgpLFxuIFx0XHRcdFx0XHQgICAgY2hnICogcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgaF9jZyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjowMToxNy4zNDQ4NTQ0NzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTYyODczMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIEh1Z2V0bGJmcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzLiBGaXJzdCwgdGhlIGZpbGUgY2hhbmdlcy4gSSBzZWU6IGBEb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0YCwgdGhlIENoaW5lc2UgdHJhbnNsYXRpb24sIGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAsIGFuZCBgbW0vaHVnZXRsYi5jYC4gQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBjaGFuZ2VzIGFjcm9zcyBkb2N1bWVudGF0aW9uLCB0aGUgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbiwgYW5kIHRoZSBjb3JlIGh1Z2V0bGIgbWVtb3J5IG1hbmFnZW1lbnQuXG5cbk5vdyBmb3IgdGhlIG1lYXQgb2YgaXQuIEluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIHRoZSBgaHVnZXRsYmZzX3N0YXRmc2AgZnVuY3Rpb24gaGFzIGEgYnVnZml4LiBJdCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBgbWF4X2hwYWdlc2AgaXMgLTEgKG1lYW5pbmcgdW5saW1pdGVkIHBhZ2VzKSBpbiBgc2JpbmZvLVx1MDAzZXNwb29sYC4gSW5zdGVhZCBvZiBzdWJ0cmFjdGluZyBmcm9tIC0xLCB3aGljaCB3b3VsZCBsZWFkIHRvIGFyaXRobWV0aWMgbm9uc2Vuc2UsIGl0IHNldHMgdGhlIGBmcmVlX3BhZ2VzYCB0byAtMS4gR29vZCBjYXRjaC5cblxuVGhlIGNvcmUgb2YgdGhlIHdvcmssIHRob3VnaCwgaXMgaW4gdGhlIGhlYWRlciBhbmQgbW0gZmlsZXMuIEl0IGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZyBhbmQgZml4IGZvciBzdWJwb29sIGFjY291bnRpbmcgd2l0aGluIGh1Z2V0bGJmcy4gVGhleSd2ZSB0b3VjaGVkIGBzdWJwb29sX2lzX2ZyZWVgLCBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgLCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgLCBgYWxsb2NfaHVnZXRsYl9mb2xpb2AsIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYC4gU3BlY2lmaWNhbGx5OlxuXG4qICAgYHN1YnBvb2xfaXNfZnJlZWAgbm93IGp1c3QgY2hlY2tzIGlmIGB1c2VkX2hwYWdlc2AgaXMgemVybyAoc2VlbXMgbW9yZSBzdHJhaWdodGZvcndhcmQpLlxuKiAgIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AgaW5jcmVtZW50cyBgdXNlZF9ocGFnZXNgIHVuY29uZGl0aW9uYWxseSwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGUgdHJhY2tpbmcuXG4qICAgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCBkZWNyZW1lbnRzIGB1c2VkX2hwYWdlc2AgdW5jb25kaXRpb25hbGx5IHRvbywgYW5kIG5vdyBpbmNsdWRlcyBhIGNhbGN1bGF0aW9uIGZvciB0aGUgYGxpbWl0YCB1c2luZyBib3RoIGBtaW5faHBhZ2VzYCBhbmQgYHVzZWRfaHBhZ2VzYCwgbWFraW5nIGl0IGFsbCBtb3JlIHByZWNpc2UuXG4qICAgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGhhcyBhbiBpbXByb3ZlbWVudDsgSXQgbm93IHByb3Blcmx5IGhhbmRsZXMgcmVzZXJ2YXRpb24gYWNjb3VudGluZyBvbiBmYWlsdXJlIHVzaW5nIGEgZGlmZmVyZW5jZSBjYWxjdWxhdGlvbiwgd2hpY2ggaW5kaWNhdGVzIGEgbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgYXBwcm9hY2guXG4qICAgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgY2xlYW5zIHVwIHRoZSBlcnJvciBwYXRocyBpbnZvbHZpbmcgc3VicG9vbHMsIGxlYWRpbmcgdG8gbW9yZSByZXNpbGllbnQgY29kZS5cblxuSXMgdGhpcyByZWFjaGFibGUgY29kZT8gQWJzb2x1dGVseS4gVGhlIGZpbGVzIGBtbS9odWdldGxiLmNgIGFuZCBgZnMvaHVnZXRsYmZzL2AgYXJlIGludGVncmFsIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBzdWJzeXN0ZW1zLiBJJ2QgZXhwZWN0IHRoaXMgY29kZSB0byBiZSBoaXQgZnJlcXVlbnRseSB3aGVuIHVzaW5nIGh1Z2V0bGJmcyB0aHJvdWdoIG1tYXAsIHN5c2NhbGxzLCBvciBmYWxsb2NhdGUgd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC5cblxuQWxyaWdodCwgbm93IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHJlcXVpcmVkIGZvciBodWdldGxiZnMgYW5kIGh1Z2V0bGIuIEknbGwgZ2V0IHRoZSBncmVwcGVyIHJlYWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODU3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6MjMuOTA3NzMwMzg1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDY4NjYyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9odWdldGxiZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAxOjIzLjk1NDgwMzk1N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNjQ0NzUyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biB0aGUgaHVnZXRsYmZzIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgS2NvbmZpZyBmaWxlIHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmluZyBodWdldGxiZnMuIFRoaXMgaXNuJ3QgdXN1YWxseSBhIHdpbGQgZ29vc2UgY2hhc2UsIGJ1dCBkZXBlbmRpbmcgb24gdGhlIHByb2plY3Qgc3RydWN0dXJlLCBpdCBjYW4gYmUgc2xpZ2h0bHkgbGVzcyBvYnZpb3VzIHRoYW4gb25lIG1pZ2h0IGhvcGUuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHVzdWFsbHkgZm9sbG93cyBhIGZldyBxdWljayBwYXRocy4gSeKAmWxsIHN0YXJ0IGJ5IHRoaW5raW5nIGFib3V0IGNvbW1vbiBsb2NhdGlvbnMg4oCTIHRoZSBgZnMvYCwgYG1tL2AsIG9yIG1heWJlIGV2ZW4gdGhlIHJvb3Qgb2YgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBpZiBpdCdzIGEgcGFydGljdWxhcmx5IGNvcmUgZmVhdHVyZSwgdGhvdWdoIHRoYXQncyBsZXNzIGxpa2VseSB0aGVzZSBkYXlzIHdpdGggdGhlIG1vZHVsYXJpemF0aW9uIGVmZm9ydHMuXG5cbkknbGwgYmUgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIG15IG1lbnRhbCBtYXAgb2YgdGhlIGtlcm5lbCBkaXJlY3Rvcnkgc3RydWN0dXJlLiBNeSBuZXh0IG1vdmUgd2lsbCBiZSB0byB0aGluayBhYm91dCBvdGhlciBzaW1pbGFyIGZlYXR1cmVzLiBXaGF0IGFyZSB0aGUgcGF0dGVybnM/IElzIGl0IHVzaW5nIGEgc3RhbmRhcmQgYEtjb25maWdgIGluY2x1ZGUsIG9yIGlzIGl0IGEgbW9yZSBiZXNwb2tlIHNldHVwPyBJJ2xsIHByb2JhYmx5IGJlIHF1aWNrbHkgc2Nhbm5pbmcgbXkgbWVtb3J5IGZvciByZWxhdGVkIGZpbGVzeXN0ZW0gb3B0aW9ucyBvciBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zIHRoYXQgSSBjb25maWd1cmVkIHJlY2VudGx5LCBhbmQgY3Jvc3MtcmVmZXJlbmNpbmcuXG5cbk9uY2UgSSd2ZSBnb3QgYSBsaWtlbHkgc3VzcGVjdCBsb2NhdGlvbiBvciB0d28sIEknbGwgZGl2ZSBpbiwgdXNpbmcgYGdyZXBgIG9yIGBmaW5kYCBhcyBhIHF1aWNrIHRlc3QsIGlmIEkgY2FuJ3QgcmVtZW1iZXIgcHJlY2lzZWx5LiBJJ2xsIHNlYXJjaCBmb3IgdGhlIHJlbGV2YW50IGNvbmZpZyBzeW1ib2wsIGxpa2UgXCJIVUdFVExCRlNcIiBvciBtYXliZSBldmVuIGEgcmVsYXRlZCBkZXBlbmRlbmN5LCBqdXN0IHRvIG1ha2Ugc3VyZSBJJ20gemVyb2luZyBpbiBvbiB0aGUgcmlnaHQgZmlsZS4gSSdsbCBleHBlY3QgdG8gcmVjb2duaXplIHRoZSBzdGFuZGFyZCBgY29uZmlnYCBkaXJlY3RpdmUgYW5kIGFzc29jaWF0ZWQgaGVscCB0ZXh0LiBGcm9tIHRoZXJlLCBJIGNhbiByZWZpbmUgbXkgc2VhcmNoIG9yIG1vdmUgb24gdG8gdGhlIG5leHQgbGlrZWx5IGxvY2F0aW9uIHVudGlsIEkgbGFuZCBvbiB0aGUgZmlsZSwgb3IgZmlsZXMsIHRoYXQgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDA3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6MjcuMDE5MjgxNzI4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MTc1MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNTA9bWVudWNvbmZpZyBIVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjU1LVxcdGhlbHBcXG5mcy9LY29uZmlnOjI1NjpcXHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cXG5mcy9LY29uZmlnLTI1Ny1cXHQgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWRcXG4tLVxcbmZzL01ha2VmaWxlPTczPW9iai15XFx0XFx0XFx0XFx0Kz0gcmFtZnMvXFxuZnMvTWFrZWZpbGU6NzQ6b2JqLSQoQ09ORklHX0hVR0VUTEJGUylcXHRcXHQrPSBodWdldGxiZnMvXFxuZnMvTWFrZWZpbGUtNzUtb2JqLSQoQ09ORklHX0NPREFfRlMpXFx0XFx0Kz0gY29kYS9cXG4tLVxcbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZS01LVxcbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19IVUdFVExCRlMpICs9IGh1Z2V0bGJmcy5vXFxuZnMvaHVnZXRsYmZzL01ha2VmaWxlLTctXFxuZnMvaHVnZXRsYmZzL01ha2VmaWxlOjg6aHVnZXRsYmZzLW9ianMgOj0gaW5vZGUub1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDItI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDM6I2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9odWdldGxiZnMuaFxcdTAwM2VcXG5mcy9odWdldGxiZnMvaW5vZGUuYy00NC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NTpzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBodWdldGxiZnNfYW9wcztcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDg6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ5LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUwOmVudW0gaHVnZXRsYmZzX3NpemVfdHlwZSB7IE5PX1NJWkUsIFNJWkVfU1RELCBTSVpFX1BFUkNFTlQgfTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy01MS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo1MjpzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQge1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTUzLVxcdHN0cnVjdCBoc3RhdGVcXHRcXHQqaHN0YXRlO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTgtXFx0bG9uZ1xcdFxcdFxcdG1pbl9ocGFnZXM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NTk6XFx0ZW51bSBodWdldGxiZnNfc2l6ZV90eXBlIG1heF92YWxfdHlwZTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo2MDpcXHRlbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgbWluX3ZhbF90eXBlO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTYxLVxcdGt1aWRfdFxcdFxcdFxcdHVpZDtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgaHVnZXRsYl9mc19wYXJhbWV0ZXJzW10gPSB7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy05OC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5OTpzdGF0aWMgaW50IGh1Z2V0bGJmc19maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMC17XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDYtXFx0ICogZm9yIFNITV9IVUdFVExCLCB0aGUgcGFnZXMgYXJlIHJlc2VydmVkIGluIHRoZSBzaG1nZXQoKSBjYWxsIHNvIHNraXBcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDc6XFx0ICogcmVzZXJ2aW5nIGhlcmUuIE5vdGU6IG9ubHkgZm9yIFNITSBodWdldGxiZnMgZmlsZSwgdGhlIGlub2RlXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ4LVxcdCAqIGZsYWcgU19QUklWQVRFIGlzIHNldC5cXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTE5Nj1zdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMjE5LSAqL1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjIyMDpzdGF0aWMgc3NpemVfdCBodWdldGxiZnNfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yMjEte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMjk3LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjI5ODpzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMjk5LVxcdFxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMzA1LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjMwNjpzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTMwNy1cXHRcXHRcXHQgICAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz01NTI9c3RhdGljIHZvaWQgcmVtb3ZlX2lub2RlX2h1Z2VwYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTkyLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjU5MzpzdGF0aWMgdm9pZCBodWdldGxiZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9odWdldGxiZnMvaW5vZGUuYy01OTQte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTk2LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjU5NzpcXHR0cmFjZV9odWdldGxiZnNfZXZpY3RfaW5vZGUoaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTU5OC1cXHRyZW1vdmVfaW5vZGVfaHVnZXBhZ2VzKGlub2RlLCAwLCBMTE9OR19NQVgpO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9NjA3PXN0YXRpYyB2b2lkIGh1Z2V0bGJfdm10cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0KVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjIzLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjYyNDpzdGF0aWMgdm9pZCBodWdldGxiZnNfemVyb19wYXJ0aWFsX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy02MjUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy02NDYtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjQ3OnN0YXRpYyBsb25nIGh1Z2V0bGJmc19wdW5jaF9ob2xlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjQ4LXtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo2NDk6XFx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICppbmZvID0gSFVHRVRMQkZTX0koaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY1MC1cXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVxcdTAwM2VpX21hcHBpbmc7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy02NzItXFx0aWYgKG9mZnNldCBcXHUwMDNjIGhvbGVfc3RhcnQpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjczOlxcdFxcdGh1Z2V0bGJmc196ZXJvX3BhcnRpYWxfcGFnZShoLCBtYXBwaW5nLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY3NC1cXHRcXHRcXHRcXHRvZmZzZXQsIG1pbihvZmZzZXQgKyBsZW4sIGhvbGVfc3RhcnQpKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY4NS1cXHRpZiAoKG9mZnNldCArIGxlbikgXFx1MDAzZSBob2xlX2VuZCBcXHUwMDI2XFx1MDAyNiAob2Zmc2V0ICsgbGVuKSBcXHUwMDNlIGhvbGVfc3RhcnQpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Njg2OlxcdFxcdGh1Z2V0bGJmc196ZXJvX3BhcnRpYWxfcGFnZShoLCBtYXBwaW5nLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY4Ny1cXHRcXHRcXHRcXHRob2xlX2VuZCwgb2Zmc2V0ICsgbGVuKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY5OS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo3MDA6c3RhdGljIGxvbmcgaHVnZXRsYmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzAxLVxcdFxcdFxcdFxcdGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy03MDMtXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NzA0OlxcdHN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyAqaW5mbyA9IEhVR0VUTEJGU19JKGlub2RlKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy03MDUtXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cXHUwMDNlaV9tYXBwaW5nO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzE4LVxcdGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpIHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo3MTk6XFx0XFx0ZXJyb3IgPSBodWdldGxiZnNfcHVuY2hfaG9sZShpbm9kZSwgb2Zmc2V0LCBsZW4pO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTcyMC1cXHRcXHRnb3RvIG91dF9ub2xvY2s7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MjYtb3V0X25vbG9jazpcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4Mjc6XFx0dHJhY2VfaHVnZXRsYmZzX2ZhbGxvY2F0ZShpbm9kZSwgbW9kZSwgb2Zmc2V0LCBsZW4sIGVycm9yKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MjgtXFx0cmV0dXJuIGVycm9yO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODMwLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjgzMTpzdGF0aWMgaW50IGh1Z2V0bGJmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgzMi1cXHRcXHRcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODM3LVxcdHVuc2lnbmVkIGludCBpYV92YWxpZCA9IGF0dHItXFx1MDAzZWlhX3ZhbGlkO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjgzODpcXHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmluZm8gPSBIVUdFVExCRlNfSShpbm9kZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODM5LVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODQzLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjg0NDpcXHR0cmFjZV9odWdldGxiZnNfc2V0YXR0cihpbm9kZSwgZGVudHJ5LCBhdHRyKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy04NDUtXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy04NjMtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODY0OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjg2NTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eClcXG5mcy9odWdldGxiZnMvaW5vZGUuYy04NjYte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODc1LVxcdFxcdHNpbXBsZV9pbm9kZV9pbml0X3RzKGlub2RlKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4NzY6XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg3Ny1cXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2c2ltcGxlX2Rpcl9vcGVyYXRpb25zO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODkxLSAqL1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjg5MjpzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGh1Z2V0bGJmc19pX21tYXBfcndzZW1fa2V5O1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg5My1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4OTQ6c3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg5NS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkxMy1cXHRpZiAoaW5vZGUpIHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5MTQ6XFx0XFx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICppbmZvID0gSFVHRVRMQkZTX0koaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkxNS1cXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkxOC1cXHRcXHRsb2NrZGVwX3NldF9jbGFzcyhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlaV9tbWFwX3J3c2VtLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjkxOTpcXHRcXHRcXHRcXHRcXHUwMDI2aHVnZXRsYmZzX2lfbW1hcF9yd3NlbV9rZXkpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjkyMDpcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZodWdldGxiZnNfYW9wcztcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05MjEtXFx0XFx0c2ltcGxlX2lub2RlX2luaXRfdHMoaW5vZGUpO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTI4LVxcdFxcdGNhc2UgU19JRlJFRzpcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5Mjk6XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTMwOlxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkzMS1cXHRcXHRcXHRicmVhaztcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05MzItXFx0XFx0Y2FzZSBTX0lGRElSOlxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjkzMzpcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTM0LVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZzaW1wbGVfZGlyX29wZXJhdGlvbnM7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NDQtXFx0XFx0bG9ja2RlcF9hbm5vdGF0ZV9pbm9kZV9tdXRleF9rZXkoaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk0NTpcXHRcXHR0cmFjZV9odWdldGxiZnNfYWxsb2NfaW5vZGUoaW5vZGUsIGRpciwgbW9kZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTQ2LVxcdH0gZWxzZSB7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NTYtICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTU3OnN0YXRpYyBpbnQgaHVnZXRsYmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NTgtXFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk2MS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5NjI6XFx0aW5vZGUgPSBodWdldGxiZnNfZ2V0X2lub2RlKGRpci1cXHUwMDNlaV9zYiwgaWRtYXAsIGRpciwgbW9kZSwgZGV2KTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NjMtXFx0aWYgKCFpbm9kZSlcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk2OS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5NzA6c3RhdGljIHN0cnVjdCBkZW50cnkgKmh1Z2V0bGJmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTcxLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk3Mi17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTczOlxcdGludCByZXR2YWwgPSBodWdldGxiZnNfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk3NC1cXHRcXHRcXHRcXHQgICAgIG1vZGUsIDApO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTc5LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk4MDpzdGF0aWMgaW50IGh1Z2V0bGJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTgxLVxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTgzLXtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5ODQ6XFx0cmV0dXJuIGh1Z2V0bGJmc19ta25vZChpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHLCAwKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODUtfVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk4Ni1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5ODc6c3RhdGljIGludCBodWdldGxiZnNfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy05OTItXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTkzOlxcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShkaXItXFx1MDAzZWlfc2IsIGlkbWFwLCBkaXIsIG1vZGUgfCBTX0lGUkVHLCAwKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05OTQtXFx0aWYgKCFpbm9kZSlcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMDAtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTAwMTpzdGF0aWMgaW50IGh1Z2V0bGJmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMDItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAwOC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDA5OlxcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShkaXItXFx1MDAzZWlfc2IsIGlkbWFwLCBkaXIsIG1vZGUsIDApO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMTAtXFx0aWYgKGlub2RlKSB7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDIzLSNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTAyNDpzdGF0aWMgaW50IGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMjUtXFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpkc3QsIHN0cnVjdCBmb2xpbyAqc3JjLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA0NC0jZWxzZVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNDU6I2RlZmluZSBodWdldGxiZnNfbWlncmF0ZV9mb2xpbyBOVUxMXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA0Ni0jZW5kaWZcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDQ3LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNDg6c3RhdGljIGludCBodWdldGxiZnNfZXJyb3JfcmVtb3ZlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNDktXFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNTYtICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTA1NzpzdGF0aWMgaW50IGh1Z2V0bGJmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNTgte1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNTk6XFx0c3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8gPSBIVUdFVExCRlNfU0Iocm9vdC1cXHUwMDNlZF9zYik7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA2MC1cXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzYmluZm8tXFx1MDAzZXNwb29sO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA5My1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDk0OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA5NS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTA5NjpcXHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbyA9IEhVR0VUTEJGU19TQihkZW50cnktXFx1MDAzZWRfc2IpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwOTctXFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShkX2lub2RlKGRlbnRyeSkpO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTEyOC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTI5OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTMwLXtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTMxOlxcdHN0cnVjdCBodWdldGxiZnNfc2JfaW5mbyAqc2JpID0gSFVHRVRMQkZTX1NCKHNiKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTMyLVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE0MS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTQyOnN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJmc19kZWNfZnJlZV9pbm9kZXMoc3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8pXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE0My17XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTU2LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNTc6c3RhdGljIHZvaWQgaHVnZXRsYmZzX2luY19mcmVlX2lub2RlcyhzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbylcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTU4LXtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNjYtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE2NzpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmh1Z2V0bGJmc19pbm9kZV9jYWNoZXA7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE2OC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTY5OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNzAte1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzE6XFx0c3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8gPSBIVUdFVExCRlNfU0Ioc2IpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzI6XFx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICpwO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNzMtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE3NDpcXHRpZiAodW5saWtlbHkoIWh1Z2V0bGJmc19kZWNfZnJlZV9pbm9kZXMoc2JpbmZvKSkpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3NS1cXHRcXHRyZXR1cm4gTlVMTDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTc2OlxcdHAgPSBhbGxvY19pbm9kZV9zYihzYiwgaHVnZXRsYmZzX2lub2RlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3Ny1cXHRpZiAodW5saWtlbHkoIXApKSB7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE3ODpcXHRcXHRodWdldGxiZnNfaW5jX2ZyZWVfaW5vZGVzKHNiaW5mbyk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3OS1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExODMtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE4NDpzdGF0aWMgdm9pZCBodWdldGxiZnNfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExODUte1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExODY6XFx0dHJhY2VfaHVnZXRsYmZzX2ZyZWVfaW5vZGUoaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExODc6XFx0a21lbV9jYWNoZV9mcmVlKGh1Z2V0bGJmc19pbm9kZV9jYWNoZXAsIEhVR0VUTEJGU19JKGlub2RlKSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE4OC19XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE4OS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTkwOnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE5MS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE5MjpcXHRodWdldGxiZnNfaW5jX2ZyZWVfaW5vZGVzKEhVR0VUTEJGU19TQihpbm9kZS1cXHUwMDNlaV9zYikpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExOTMtfVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExOTQtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE5NTpzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBodWdldGxiZnNfYW9wcyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTk2OlxcdC53cml0ZV9iZWdpblxcdD0gaHVnZXRsYmZzX3dyaXRlX2JlZ2luLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExOTc6XFx0LndyaXRlX2VuZFxcdD0gaHVnZXRsYmZzX3dyaXRlX2VuZCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTk4LVxcdC5kaXJ0eV9mb2xpb1xcdD0gbm9vcF9kaXJ0eV9mb2xpbyxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTk5OlxcdC5taWdyYXRlX2ZvbGlvICA9IGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMDA6XFx0LmVycm9yX3JlbW92ZV9mb2xpb1xcdD0gaHVnZXRsYmZzX2Vycm9yX3JlbW92ZV9mb2xpbyxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjAxLX07XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMjA0PXN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIwNS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIwNjpcXHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmVpID0gZm9vO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMDctXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjEwLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMTE6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjEyOlxcdC5yZWFkX2l0ZXJcXHRcXHQ9IGh1Z2V0bGJmc19yZWFkX2l0ZXIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxMzpcXHQubW1hcFxcdFxcdFxcdD0gaHVnZXRsYmZzX2ZpbGVfbW1hcCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjE0LVxcdC5mc3luY1xcdFxcdFxcdD0gbm9vcF9mc3luYyxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMTYtXFx0Lmxsc2Vla1xcdFxcdFxcdD0gZGVmYXVsdF9sbHNlZWssXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxNzpcXHQuZmFsbG9jYXRlXFx0XFx0PSBodWdldGxiZnNfZmFsbG9jYXRlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMTgtXFx0LmZvcF9mbGFnc1xcdFxcdD0gRk9QX0hVR0VfUEFHRVMsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjIwLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMjE6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjIyOlxcdC5jcmVhdGVcXHRcXHQ9IGh1Z2V0bGJmc19jcmVhdGUsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIyMy1cXHQubG9va3VwXFx0XFx0PSBzaW1wbGVfbG9va3VwLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIyNS1cXHQudW5saW5rXFx0XFx0PSBzaW1wbGVfdW5saW5rLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMjY6XFx0LnN5bWxpbmtcXHQ9IGh1Z2V0bGJmc19zeW1saW5rLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMjc6XFx0Lm1rZGlyXFx0XFx0PSBodWdldGxiZnNfbWtkaXIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIyOC1cXHQucm1kaXJcXHRcXHQ9IHNpbXBsZV9ybWRpcixcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjI5OlxcdC5ta25vZFxcdFxcdD0gaHVnZXRsYmZzX21rbm9kLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMzAtXFx0LnJlbmFtZVxcdFxcdD0gc2ltcGxlX3JlbmFtZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjMxOlxcdC5zZXRhdHRyXFx0PSBodWdldGxiZnNfc2V0YXR0cixcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjMyOlxcdC50bXBmaWxlXFx0PSBodWdldGxiZnNfdG1wZmlsZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjMzLX07XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzNC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjM1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjM2OlxcdC5zZXRhdHRyXFx0PSBodWdldGxiZnNfc2V0YXR0cixcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjM3LX07XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzOC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjM5OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBodWdldGxiZnNfb3BzID0ge1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyNDA6XFx0LmFsbG9jX2lub2RlICAgID0gaHVnZXRsYmZzX2FsbG9jX2lub2RlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyNDE6XFx0LmZyZWVfaW5vZGUgICAgID0gaHVnZXRsYmZzX2ZyZWVfaW5vZGUsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0MjpcXHQuZGVzdHJveV9pbm9kZSAgPSBodWdldGxiZnNfZGVzdHJveV9pbm9kZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQzOlxcdC5ldmljdF9pbm9kZVxcdD0gaHVnZXRsYmZzX2V2aWN0X2lub2RlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyNDQ6XFx0LnN0YXRmc1xcdFxcdD0gaHVnZXRsYmZzX3N0YXRmcyxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQ1OlxcdC5wdXRfc3VwZXJcXHQ9IGh1Z2V0bGJmc19wdXRfc3VwZXIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0NjpcXHQuc2hvd19vcHRpb25zXFx0PSBodWdldGxiZnNfc2hvd19vcHRpb25zLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyNDctfTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTEyNTQ9c3RhdGljIGxvbmdcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjU1Omh1Z2V0bGJmc19zaXplX3RvX2hwYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZV9vcHQsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI1NjpcXHRcXHRcXHQgZW51bSBodWdldGxiZnNfc2l6ZV90eXBlIHZhbF90eXBlKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyNTcte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI3My0gKi9cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjc0OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI3NS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI3NjpcXHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eCA9IGZjLVxcdTAwM2Vmc19wcml2YXRlO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyNzctXFx0c3RydWN0IGZzX3BhcnNlX3Jlc3VsdCByZXN1bHQ7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzQ4LSAqL1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzNDk6c3RhdGljIGludCBodWdldGxiZnNfdmFsaWRhdGUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNTAte1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzNTE6XFx0c3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0ICpjdHggPSBmYy1cXHUwMDNlZnNfcHJpdmF0ZTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzUyLVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTM1Ni1cXHQgKi9cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzU3OlxcdGN0eC1cXHUwMDNlbWF4X2hwYWdlcyA9IGh1Z2V0bGJmc19zaXplX3RvX2hwYWdlcyhjdHgtXFx1MDAzZWhzdGF0ZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzU4LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGN0eC1cXHUwMDNlbWF4X3NpemVfb3B0LFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNTktXFx0XFx0XFx0XFx0XFx0XFx0ICAgY3R4LVxcdTAwM2VtYXhfdmFsX3R5cGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzNjA6XFx0Y3R4LVxcdTAwM2VtaW5faHBhZ2VzID0gaHVnZXRsYmZzX3NpemVfdG9faHBhZ2VzKGN0eC1cXHUwMDNlaHN0YXRlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNjEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgY3R4LVxcdTAwM2VtaW5fc2l6ZV9vcHQsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMzc2PXN0YXRpYyBpbnRcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzc3Omh1Z2V0bGJmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzc4LXtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzc5OlxcdHN0cnVjdCBodWdldGxiZnNfZnNfY29udGV4dCAqY3R4ID0gZmMtXFx1MDAzZWZzX3ByaXZhdGU7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM4MDpcXHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbztcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzgxLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzODI6XFx0c2JpbmZvID0ga21hbGxvY19vYmooc3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzgzLVxcdGlmICghc2JpbmZvKVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQxMC1cXHRzYi1cXHUwMDNlc19tYWdpYyA9IEhVR0VUTEJGU19NQUdJQztcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDExOlxcdHNiLVxcdTAwM2VzX29wID0gXFx1MDAyNmh1Z2V0bGJmc19vcHM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQxMi1cXHRzYi1cXHUwMDNlc19kX2ZsYWdzID0gRENBQ0hFX0RPTlRDQUNIRTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTUtXFx0LypcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDE2OlxcdCAqIER1ZSB0byB0aGUgc3BlY2lhbCBhbmQgbGltaXRlZCBmdW5jdGlvbmFsaXR5IG9mIGh1Z2V0bGJmcywgaXQgZG9lc1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTctXFx0ICogbm90IHdvcmsgd2VsbCBhcyBhIHN0YWNraW5nIGZpbGVzeXN0ZW0uXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDE5LVxcdHNiLVxcdTAwM2VzX3N0YWNrX2RlcHRoID0gRklMRVNZU1RFTV9NQVhfU1RBQ0tfREVQVEg7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQyMDpcXHRzYi1cXHUwMDNlc19yb290ID0gZF9tYWtlX3Jvb3QoaHVnZXRsYmZzX2dldF9yb290KHNiLCBjdHgpKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDIxLVxcdGlmICghc2ItXFx1MDAzZXNfcm9vdClcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MjktXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQzMDpzdGF0aWMgaW50IGh1Z2V0bGJmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzMS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQzMjpcXHRpbnQgZXJyID0gaHVnZXRsYmZzX3ZhbGlkYXRlKGZjKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDMzLVxcdGlmIChlcnIpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNC1cXHRcXHRyZXR1cm4gZXJyO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0MzU6XFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBodWdldGxiZnNfZmlsbF9zdXBlcik7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNi19XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNy1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDM4OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19mc19jb250ZXh0X2ZyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0Mzkte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ0Mi1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGh1Z2V0bGJmc19mc19jb250ZXh0X29wcyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ0OlxcdC5mcmVlXFx0XFx0PSBodWdldGxiZnNfZnNfY29udGV4dF9mcmVlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0NDU6XFx0LnBhcnNlX3BhcmFtXFx0PSBodWdldGxiZnNfcGFyc2VfcGFyYW0sXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ0NjpcXHQuZ2V0X3RyZWVcXHQ9IGh1Z2V0bGJmc19nZXRfdHJlZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDQ3LX07XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ0OC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ5OnN0YXRpYyBpbnQgaHVnZXRsYmZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ1MC17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ1MTpcXHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDUyLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0NTM6XFx0Y3R4ID0ga3phbGxvY19vYmooc3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0KTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDU0LVxcdGlmICghY3R4KVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ2Ni1cXHRmYy1cXHUwMDNlZnNfcHJpdmF0ZSA9IGN0eDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDY3OlxcdGZjLVxcdTAwM2VvcHNcXHQ9IFxcdTAwMjZodWdldGxiZnNfZnNfY29udGV4dF9vcHM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ2OC1cXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzAtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3MTpzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgaHVnZXRsYmZzX2ZzX3R5cGUgPSB7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3MjpcXHQubmFtZVxcdFxcdFxcdD0gXFxcImh1Z2V0bGJmc1xcXCIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3MzpcXHQuaW5pdF9mc19jb250ZXh0XFx0PSBodWdldGxiZnNfaW5pdF9mc19jb250ZXh0LFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzQtXFx0LnBhcmFtZXRlcnNcXHRcXHQ9IGh1Z2V0bGJfZnNfcGFyYW1ldGVycyxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzgtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3OTpzdGF0aWMgc3RydWN0IHZmc21vdW50ICpodWdldGxiZnNfdmZzbW91bnRbSFVHRV9NQVhfSFNUQVRFXTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDgwLVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTUwMT1zdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTUxMy1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTE0OlxcdG1udCA9IGh1Z2V0bGJmc192ZnNtb3VudFtoc3RhdGVfaWR4XTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTE1LVxcdGlmICghbW50KVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTUyOS1cXHRmaWxlID0gRVJSX1BUUigtRU5PU1BDKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTMwOlxcdC8qIGh1Z2V0bGJmc192ZnNtb3VudFtdIG1vdW50cyBkbyBub3QgdXNlIGlkbWFwcGVkIG1vdW50cy4gICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTUzMTpcXHRpbm9kZSA9IGh1Z2V0bGJmc19nZXRfaW5vZGUobW50LVxcdTAwM2VtbnRfc2IsIFxcdTAwMjZub3BfbW50X2lkbWFwLCBOVUxMLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MzItXFx0XFx0XFx0XFx0ICAgIFNfSUZSRUcgfCBTX0lSV1hVR08sIDApO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU0Ni1cXHRcXHRmaWxlID0gYWxsb2NfZmlsZV9wc2V1ZG8oaW5vZGUsIG1udCwgbmFtZSwgT19SRFdSLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NDc6XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NDgtXFx0aWYgKCFJU19FUlIoZmlsZSkpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTU1LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NTY6c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqX19pbml0IG1vdW50X29uZV9odWdldGxiZnMoc3RydWN0IGhzdGF0ZSAqaClcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTU3LXtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjAtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU2MTpcXHRmYyA9IGZzX2NvbnRleHRfZm9yX21vdW50KFxcdTAwMjZodWdldGxiZnNfZnNfdHlwZSwgU0JfS0VSTk1PVU5UKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTYyLVxcdGlmIChJU19FUlIoZmMpKSB7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTY0LVxcdH0gZWxzZSB7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU2NTpcXHRcXHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eCA9IGZjLVxcdTAwM2Vmc19wcml2YXRlO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjYtXFx0XFx0Y3R4LVxcdTAwM2Voc3RhdGUgPSBoO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU3MC1cXHRpZiAoSVNfRVJSKG1udCkpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU3MTpcXHRcXHRwcl9lcnIoXFxcIkNhbm5vdCBtb3VudCBpbnRlcm5hbCBodWdldGxiZnMgZm9yIHBhZ2Ugc2l6ZSAlbHVLXFxcIixcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTcyLVxcdFxcdCAgICAgICBodWdlX3BhZ2Vfc2l6ZShoKSAvIFNaXzFLKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NzUtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU3NjpzdGF0aWMgaW50IF9faW5pdCBpbml0X2h1Z2V0bGJmc19mcyh2b2lkKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1Nzcte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU4OC1cXHRlcnJvciA9IC1FTk9NRU07XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU4OTpcXHRodWdldGxiZnNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoXFxcImh1Z2V0bGJmc19pbm9kZV9jYWNoZVxcXCIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU5MDpcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvKSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTkxLVxcdFxcdFxcdFxcdFxcdDAsIFNMQUJfQUNDT1VOVCwgaW5pdF9vbmNlKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTkyOlxcdGlmIChodWdldGxiZnNfaW5vZGVfY2FjaGVwID09IE5VTEwpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU5My1cXHRcXHRnb3RvIG91dDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTk0LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1OTU6XFx0ZXJyb3IgPSByZWdpc3Rlcl9maWxlc3lzdGVtKFxcdTAwMjZodWdldGxiZnNfZnNfdHlwZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU5Ni1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTk5LVxcdC8qIGRlZmF1bHQgaHN0YXRlIG1vdW50IGlzIHJlcXVpcmVkICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYwMDpcXHRtbnQgPSBtb3VudF9vbmVfaHVnZXRsYmZzKFxcdTAwMjZkZWZhdWx0X2hzdGF0ZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYwMS1cXHRpZiAoSVNfRVJSKG1udCkpIHtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MDQtXFx0fVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MDU6XFx0aHVnZXRsYmZzX3Zmc21vdW50W2RlZmF1bHRfaHN0YXRlX2lkeF0gPSBtbnQ7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYwNi1cXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MTQtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYxNTpcXHRcXHRtbnQgPSBtb3VudF9vbmVfaHVnZXRsYmZzKGgpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MTYtXFx0XFx0aWYgKElTX0VSUihtbnQpKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MTc6XFx0XFx0XFx0aHVnZXRsYmZzX3Zmc21vdW50W2ldID0gTlVMTDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjE4LVxcdFxcdGVsc2VcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNjE5OlxcdFxcdFxcdGh1Z2V0bGJmc192ZnNtb3VudFtpXSA9IG1udDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjIwLVxcdFxcdGkrKztcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MjUtIG91dF91bnJlZzpcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNjI2OlxcdCh2b2lkKXVucmVnaXN0ZXJfZmlsZXN5c3RlbShcXHUwMDI2aHVnZXRsYmZzX2ZzX3R5cGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MjctIG91dF9mcmVlOlxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2Mjg6XFx0a21lbV9jYWNoZV9kZXN0cm95KGh1Z2V0bGJmc19pbm9kZV9jYWNoZXApO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MjktIG91dDpcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MzEtfVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MzI6ZnNfaW5pdGNhbGwoaW5pdF9odWdldGxiZnNfZnMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAxOjI3LjA5NzQ2MDk5NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNzY1MDE2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBIdWdlIFBhZ2VzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGBIVUdFVExCRlNgIGFuZCBgSFVHRVRMQl9QQUdFYC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGV5J3JlIHJlbGF0ZWQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IHRoZSBsb2dpYyBzdHJhaWdodCBpbiBteSBoZWFkLiBUaW1lIHRvIG9wZW4gdXAgdGhlIGBmcy9LY29uZmlnYCBmaWxlIGluIHRoZSBrZXJuZWwgc291cmNlLiBJIGtub3cgdGhhdCdzIHRoZSBjYW5vbmljYWwgcGxhY2UgZm9yIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCB0aGVpciBkZXNjcmlwdGlvbnMsIGFuZCwgY3JpdGljYWxseSwgdGhlaXIgcmVsYXRpb25zaGlwcy4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYXJvdW5kIGxpbmUgMjUwIOKAkyB0aGF0IGZlZWxzIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIG9wdGlvbnMgaW4gdGhlIHBhc3QuIEhvcGVmdWxseSwgdGhhdCBzZWN0aW9uIHdpbGwgY29udGFpbiB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agc3RhdGVtZW50cyBhbmQgYW55IGBkZXBlbmRzIG9uYCBjbGF1c2VzIHRoYXQgc3BlbGwgb3V0IGV4YWN0bHkgaG93IHRoZXNlIHR3byBvcHRpb25zIGFyZSBsaW5rZWQuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIGBkZXBlbmRzIG9uYCBkaXJlY3RpdmVzIHNwZWNpZnlpbmcgd2hpY2ggb3RoZXIgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoZXNlIHRvIGV2ZW4gc2hvdyB1cCBpbiB0aGUgbWVudWNvbmZpZywgb3Igd2hpY2ggZmVhdHVyZXMgdGhleSBjYW4gZW5hYmxlLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIG9uZSBpcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGUgb3RoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6MjkuNDczOTY0NjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI0NjpcXHRcXG4gMjQ3OlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbiAyNDg6XFx0XFx0ZGVmX2Jvb2wgblxcbiAyNDk6XFx0XFxuIDI1MDpcXHRtZW51Y29uZmlnIEhVR0VUTEJGU1xcbiAyNTE6XFx0XFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAyNTI6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbiAyNTM6XFx0XFx0c2VsZWN0IE1FTUZEX0NSRUFURVxcbiAyNTQ6XFx0XFx0c2VsZWN0IFBBREFUQSBpZiBTTVBcXG4gMjU1OlxcdFxcdGhlbHBcXG4gMjU2OlxcdFxcdCAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvblxcbiAyNTc6XFx0XFx0ICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkXFxuIDI1ODpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMjU5OlxcdFxcbiAyNjA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNjE6XFx0XFxuIDI2MjpcXHRpZiBIVUdFVExCRlNcXG4gMjYzOlxcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuIDI2NDpcXHRcXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbiAyNjU6XFx0XFx0ZGVmYXVsdCBuXFxuIDI2NjpcXHRcXHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuIDI2NzpcXHRcXHRoZWxwXFxuIDI2ODpcXHRcXHQgIFRoZSBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9mZi4gU2F5IFkgaGVyZSB0b1xcbiAyNjk6XFx0XFx0ICBlbmFibGUgSFZPIGJ5IGRlZmF1bHQuIEl0IGNhbiBiZSBkaXNhYmxlZCB2aWEgaHVnZXRsYl9mcmVlX3ZtZW1tYXA9b2ZmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAxOjI5LjQ3NDAyNzgxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk3MjkzNzg5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIEhVR0VUTEJfUEFHRSoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgdGFzayBhdCBoYW5kLiBJIHNob3VsZCBpbW1lZGlhdGVseSBjcm9zcy1yZWZlcmVuY2UgdGhlIGBtbS9LY29uZmlnYCBmaWxlIGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgZm9yIHNldHRpbmdzIHJlbGF0ZWQgdG8gSHVnZVRMQiBwYWdlcy4gVGhhdCdzIHVzdWFsbHkgdGhlIGRlZmluaW5nIGZlYXR1cmUuIFRoaXMgd2lsbCBoZWxwIHRvIGNvbmZpcm0gd2hhdCwgaWYgYW55LCBmZWF0dXJlcyB3ZXJlIGVuYWJsZWQsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyB0aGVyZSBtYXkgaGF2ZSBiZWVuIG9uIHRoaXMgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYEhVR0VUTEJfUEFHRWAuIExldCdzIGNvbmZpcm0gaG93IHRoZSBzcGVjaWZpYyBvcHRpb25zIGZvciB0aGF0IGFyZSBzZXQgdXAuIEkgY2FuJ3QgYXNzdW1lIGFueXRoaW5nLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU0MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6MzEuNDQ2OTcxODczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDAwOTQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY5ND1jb25maWcgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcXG4tLVxcbm1tL0tjb25maWctNjk2LVxcbm1tL0tjb25maWc6Njk3OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbm1tL0tjb25maWctNjk4LVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6MzEuNTAwOTg3NTA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODY3MjU3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkZpbmRpbmcgdGhlIEhVR0VUTEJfUEFHRSBEZWZpbml0aW9uIGluIEtjb25maWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgSFVHRVRMQl9QQUdFYCB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgbGlrZWx5IHRpZXMgaW50byBodWdlIHBhZ2Ugc3VwcG9ydCwgYW5kIGZpZ3VyaW5nIG91dCBpdHMgZXhhY3QgZGVmaW5pdGlvbiB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggaXQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlIHRyZWUncyBLY29uZmlnIGZpbGVzLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwYCBvciBhIHNpbWlsYXIgc2VhcmNoIHRvb2wgdG8gcXVpY2tseSBsb2NhdGUgaXQuIEknbSBhc3N1bWluZyBpdCdzIHBhcnQgb2YgdGhlIG1lbW9yeSBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGJ1dCBiZXN0IHRvIHN0YXJ0IHdpdGggYSBicm9hZCBzZWFyY2ggdG8gZW5zdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy4gTGV0J3Mgc3RhcnQgd2l0aCBhIGdlbmVyYWwgc2VhcmNoIGFuZCB0aGVuIG5hcnJvdyB0aGUgc2NvcGUgaWYgbmVjZXNzYXJ5LiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBpbmNsdXNpb24gYW5kIGFueSBhc3NvY2lhdGVkIHNldHRpbmdzIHJlbGF0ZWQgdG8gdGhlIHVzZSBvZiBodWdlIHBhZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg0MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAxOjMzLjc4NzcxNjE1NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExODEwODc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFJFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6MzUuOTA1ODI5MTAyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NDYwODM3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgSFVHRVRMQkZTIG9uIEh1Z2UgUGFnZXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBIVUdFVExCRlNgIGVuYWJsaW5nIGBIVUdFVExCX1BBR0VgLiBSaWdodCwgdGhhdCdzIHRoZSBjb3JlIHJlbGF0aW9uc2hpcCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQuIExldCdzIHNlZSBob3cgdGhpcyBwbGF5cyBvdXQgaW4gdGhlIGNvZGUuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBieSB0aGlzIGRpZmYuIFNwZWNpZmljYWxseSwgSSdtIG5vdGluZzpcblxuMS4gIGBodWdldGxiZnNfc3RhdGZzYCBpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLiBUaGlzIHN1Z2dlc3RzIGNoYW5nZXMgdG8gaG93IHRoZSBmaWxlIHN5c3RlbSdzIHN0YXR1cyBpcyByZXBvcnRlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFdlIGNvdWxkIHNlZSBkaWZmZXJlbnQgcmVwb3J0aW5nIHJlbGF0aW5nIHRvIGh1Z2UgcGFnZSBhbGxvY2F0aW9ucy5cbjIuICBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgIGluIGBtbS9odWdldGxiLmNgLiBUaGF0J3MgYSBrZXkgb25lLiBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgaXQncyBjYWxsZWQgYnkgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBhbmQgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AsIHN1Z2dlc3RpbmcgYSByZWxhdGlvbnNoaXAgd2l0aCBwYWdlIGFsbG9jYXRpb24gYW5kIHJlc2VydmF0aW9uLlxuMy4gIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AgYWxzbyBpbiBgbW0vaHVnZXRsYi5jYC4gQW5vdGhlciBzdGF0aWMgZnVuY3Rpb24sIGl0J3MgY2FsbGVkIGJ5IHRoZSBjb3VudGVycGFydHMgb2YgdGhlIFwiZ2V0XCIgZnVuY3Rpb25zLCBwbHVzIGByZW1vdmVfaW5vZGVfaHVnZXBhZ2VzYC4gSXQncyByZWxhdGVkIHRvIHJlbGVhc2luZyBwYWdlcy5cbjQuICBgc3VicG9vbF9pc19mcmVlYCBhbHNvIGluIGBtbS9odWdldGxiLmNgLiBUaGlzIGlzIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sYCBhbmQgYGh1Z2VwYWdlX3B1dF9zdWJwb29sYCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcHJvY2Vzcy5cbjUuICBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgaW4gYG1tL2h1Z2V0bGIuY2AuIFRoaXMgaXMgb2J2aW91c2x5IGEga2V5IGZ1bmN0aW9uIGZvciBmb2xpbyBhbGxvY2F0aW9uLCBzbyBpdCdzIGVzc2VudGlhbCB0byBsb29rIGF0LlxuNi4gIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGluIGBtbS9odWdldGxiLmNgLiBQYWdlIHJlc2VydmF0aW9uIGlzIGFsc28gYW4gaW1wb3J0YW50IHBhcnQgb2YgdGhlIGZvbGlvIHByb2Nlc3MuXG5cbk5vdywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIGNhbGxlcnMgb2YgdGhvc2UgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYCBhbmQgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCBmdW5jdGlvbnMsIGp1c3QgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIGhvdyB0aGVzZSBjaGFuZ2VzIGFyZSBpbnRlZ3JhdGVkIGFuZCBlbnN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIHRoZSBvdmVyYWxsIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTM2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAxOjQxLjM1MTkxNDg3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MzY2MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXBhZ2Vfc3VicG9vbF8uKl9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTE3OT12b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xOTItLyoqXFxubW0vaHVnZXRsYi5jOjE5MzogKiBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyAtIEdldCBwYWdlcyBmcm9tIGEgc3VicG9vbFxcbm1tL2h1Z2V0bGIuYy0xOTQtICogQHNwb29sOiBwb2ludGVyIHRvIHN1YnBvb2wgc3RydWN0dXJlIChtYXkgYmUgTlVMTClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMDQtICovXFxubW0vaHVnZXRsYi5jOjIwNTpzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxubW0vaHVnZXRsYi5jLTIwNi1cXHRcXHRcXHRcXHQgICAgICBsb25nIGRlbHRhKVxcbi0tXFxubW0vaHVnZXRsYi5jLTI0My0vKipcXG5tbS9odWdldGxiLmM6MjQ0OiAqIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzIC0gUmVsZWFzZSBwYWdlcyBiYWNrIHRvIGEgc3VicG9vbFxcbm1tL2h1Z2V0bGIuYy0yNDUtICogQHNwb29sOiBwb2ludGVyIHRvIHN1YnBvb2wgc3RydWN0dXJlIChtYXkgYmUgTlVMTClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTYtICovXFxubW0vaHVnZXRsYi5jOjI1NzpzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxubW0vaHVnZXRsYi5jLTI1OC1cXHRcXHRcXHRcXHQgICAgICAgbG9uZyBkZWx0YSlcXG4tLVxcbm1tL2h1Z2V0bGIuYz05NzU9dm9pZCBodWdldGxiX2ZpeF9yZXNlcnZlX2NvdW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxubW0vaHVnZXRsYi5jLTk4MC1cXG5tbS9odWdldGxiLmM6OTgxOlxcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XFxubW0vaHVnZXRsYi5jLTk4Mi1cXHRpZiAocnN2X2FkanVzdCBcXHUwMDNlIDApIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNjg2PXZvaWQgZnJlZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtMTcxMS1cXHQgKiB3b3VsZCBoYXZlIGJlZW4gYSBwYWdlIHJlc2VydmVkIGluIHRoZSBzdWJwb29sIGJlZm9yZSBhbGxvY2F0aW9uXFxubW0vaHVnZXRsYi5jOjE3MTI6XFx0ICogdmlhIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKCkuICBTaW5jZSB3ZSBhcmUgJ3Jlc3RvcmluZycgdGhlXFxubW0vaHVnZXRsYi5jOjE3MTM6XFx0ICogcmVzZXJ2YXRpb24sIGRvIG5vdCBjYWxsIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKCkgYXMgdGhpcyB3aWxsXFxubW0vaHVnZXRsYi5jLTE3MTQtXFx0ICogcmVtb3ZlIHRoZSByZXNlcnZlZCBwYWdlIGZyb20gdGhlIHN1YnBvb2wuXFxuLS1cXG5tbS9odWdldGxiLmMtMTcyMi1cXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6MTcyMzpcXHRcXHRpZiAoaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpID09IDApXFxubW0vaHVnZXRsYi5jLTE3MjQtXFx0XFx0XFx0cmVzdG9yZV9yZXNlcnZlID0gdHJ1ZTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yOTU0PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yOTk4LVxcdGlmIChtYXBfY2hnKSB7XFxubW0vaHVnZXRsYi5jOjI5OTk6XFx0XFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xcbm1tL2h1Z2V0bGIuYy0zMDAwLVxcdFxcdGlmIChnYmxfcmVzdl9nZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5tbS9odWdldGxiLmMtMzA2NC1cXG5tbS9odWdldGxiLmM6MzA2NTpcXHRcXHRcXHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xcbm1tL2h1Z2V0bGIuYy0zMDY2LVxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xcbi0tXFxubW0vaHVnZXRsYi5jLTMwNzctXFx0aWYgKG1hcF9jaGcpIHtcXG5tbS9odWdldGxiLmM6MzA3ODpcXHRcXHRsb25nIGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcXG5tbS9odWdldGxiLmMtMzA3OS1cXG4tLVxcbm1tL2h1Z2V0bGIuYz00NzIxPXN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1fb3BfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdldGxiLmMtNDc0NC1cXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6NDc0NTpcXHRcXHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCByZXNlcnZlKTtcXG5tbS9odWdldGxiLmMtNDc0Ni1cXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XFxuLS1cXG5tbS9odWdldGxiLmM9NjY3MT1sb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY3NTgtXFx0ICovXFxubW0vaHVnZXRsYi5jOjY3NTk6XFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7XFxubW0vaHVnZXRsYi5jLTY3NjAtXFx0aWYgKGdibF9yZXN2X2dldCBcXHUwMDNjIDApIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy02ODA4LVxcbm1tL2h1Z2V0bGIuYzo2ODA5OlxcdFxcdFxcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCxcXG5tbS9odWdldGxiLmMtNjgxMC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjaGcgLSBhZGQpO1xcbi0tXFxubW0vaHVnZXRsYi5jLTY4MjktXFx0ICovXFxubW0vaHVnZXRsYi5jOjY4MzA6XFx0Z2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIGNoZyk7XFxubW0vaHVnZXRsYi5jLTY4MzEtXFx0LypcXG4tLVxcbm1tL2h1Z2V0bGIuYz02ODU4PWxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXFxuLS1cXG5tbS9odWdldGxiLmMtNjg5Mi1cXHQgKi9cXG5tbS9odWdldGxiLmM6Njg5MzpcXHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAoY2hnIC0gZnJlZWQpKTtcXG5tbS9odWdldGxiLmMtNjg5NC1cXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAxOjQxLjM5Nzg1NTI1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTI0NDE0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIHNvbWVvbmUga25vd2xlZGdlYWJsZSBpbiB0aGlzIGFyZWE6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ2FsbGVycyBpbiBmcy9odWdldGxiZnMqKlxuXG5SaWdodCwgbGV0J3Mgbm90IGxpbWl0IG91ciBzZWFyY2ggdG8ganVzdCB0aGUgb2J2aW91cyBzdXNwZWN0cy4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIGtub3cgd2hhdCBJJ20gbG9va2luZyBmb3IsIGFuZCBJIGhhdmUgYSBnb29kIGlkZWEgb2Ygd2hlcmUgdG8gc3RhcnQsIGJ1dCBleHBlcmllbmNlIHRlbGxzIG1lIHRoZXJlJ3MgYWxtb3N0IGFsd2F5cyBzb21ldGhpbmcgbHVya2luZyBpbiB0aGUgc2hhZG93cy4gSSd2ZSBnb3QgdG8gY2FzdCBhIHdpZGVyIG5ldC4gVGhlIGNvcmUgaXNzdWUgaXMgcHJvYmFibHkgbG9jYWxpemVkLCBidXQgSSdtIGdvaW5nIHRvIHRha2UgYSBtb21lbnQgYW5kIGFsc28gbWV0aWN1bG91c2x5IGNoZWNrIGBmcy9odWdldGxiZnNgLiBUaGVyZSAqY291bGQqIGJlIHJlbGF0ZWQgY2FsbHMsIG9yIGV2ZW4gc3VidGxlIGludGVyYWN0aW9ucywgbHVya2luZyB3aXRoaW4gdGhhdCBwYXJ0IG9mIHRoZSBmaWxlc3lzdGVtIGNvZGUgdGhhdCBJJ20gbWlzc2luZy4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIGlmIGFueXRoaW5nIGVsc2UgaXMgdXNpbmcgdGhvc2UgY29tcG9uZW50cyBvciBmdW5jdGlvbnMuIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMgdG8gYXZvaWQgYW55IG5hc3R5IHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzM5NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAxOjQzLjQ5MDI5OTM3MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1OTcyMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXBhZ2Vfc3VicG9vbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9odWdldGxiZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaHVnZXRsYmZzL2lub2RlLmM9MTA1Nz1zdGF0aWMgaW50IGh1Z2V0bGJmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA1OS1cXHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbyA9IEhVR0VUTEJGU19TQihyb290LVxcdTAwM2VkX3NiKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDYwOlxcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHNiaW5mby1cXHUwMDNlc3Bvb2w7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA2MS1cXHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBodWdlX3BhZ2Vfc2l6ZShzYmluZm8tXFx1MDAzZWhzdGF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAxOjQzLjUzNDkwMzUzNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTQzMDg3OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBIdWdldGxiZnMgU3VicG9vbCBBY2NvdW50aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHF1ZXN0aW9uOiBpcyB0aGlzIGNvZGUgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhlIGFuYWx5c2lzLCBhYnNvbHV0ZWx5LiBUaGUgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBRRU1VIGFuZCBzeXNjYWxscyBsaWtlIGBtbWFwYCwgYHN0YXRmc2AsIGFuZCBzcGVjaWZpYyBodWdldGxiZnMgbW91bnQgb3B0aW9ucyDigJMgbm8gbWFnaWMgcmVxdWlyZWQuIFRoaXMgaXMgYSBnb29kIHN0YXJ0LlxuXG5UaGUgcmVhbCBtZWF0IGlzIGluIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIGh1Z2V0bGIgc3VicG9vbCBhY2NvdW50aW5nIGxvZ2ljLiBXZSdyZSB0YWxraW5nIGFib3V0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zOiBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgLCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgLCBgc3VicG9vbF9pc19mcmVlYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYW5kIGBodWdldGxiZnNfc3RhdGZzYC4gU3BlY2lmaWNhbGx5LCB0aGUgYWNjb3VudGluZyBmb3IgYHVzZWRfaHBhZ2VzYCBpcyB1bmNvbmRpdGlvbmFsbHkgYWRqdXN0ZWQgbm93LCBhbmQgbWluaW11bSBzaXplIGNhbGN1bGF0aW9ucyBhcmUgY29tcGxldGVseSByZXN0cnVjdHVyZWQuIEVycm9yIHVud2luZCBjYWxjdWxhdGlvbnMgZm9yIHN1YnBvb2xzIGFuZCBnbG9iYWwgcmVzZXJ2YXRpb25zIHdpdGhpbiBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGhhdmUgYWxzbyBiZWVuIGFsdGVyZWQuIFRoaXMgaXMgYSBkaXJlY3QgdG91Y2ggdG8gbWVtb3J5IG1hbmFnZW1lbnQgaW52YXJpYW50cyBpbiBgbW0vaHVnZXRsYi5jYCBhbmQgYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYC4gVGhhdCdzIGEgdGV4dGJvb2sgZGVmaW5pdGlvbiBvZiBcIndvcnRoIGZ1enppbmcuXCJcblxuTm93LCBsZXQncyBiZSBzdHJhdGVnaWMgYWJvdXQgb3VyIGBGb2N1c1N5bWJvbHNgLiBXZSBkb24ndCB3YW50IHRvIHdhc3RlIGN5Y2xlcyBvbiB1YmlxdWl0b3VzIGFsbG9jYXRvcnMgb3IgZ2VuZXJhbCBsb2NrIHByaW1pdGl2ZXMuIEluc3RlYWQsIHdlIHdhbnQgZnVuY3Rpb25zIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZSBwYXRjaC4gU28sIHdlJ3JlIHRhcmdldGluZyB0aGVzZSBleGFjdCBzeW1ib2xzOlxuXG4qICAgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYFxuKiAgIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2BcbiogICBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYFxuKiAgIGBhbGxvY19odWdldGxiX2ZvbGlvYFxuKiAgIGBodWdldGxiZnNfc3RhdGZzYFxuKiAgIGBodWdlcGFnZV9wdXRfc3VicG9vbGAgLyBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAgKHdoZXJlIHN1YnBvb2xfaXNfZnJlZSBpcyBjYWxsZWQpXG4qICAgYGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzYFxuKiAgIGBodWdldGxiX2ZpeF9yZXNlcnZlX2NvdW50c2BcblxuQ29uZmlybWVkIHRoZSBleGFjdCBuYW1lcyBhZ2FpbnN0IGBtbS9odWdldGxiLmNgIGFuZCBgZnMvaHVnZXRsYmZzL2lub2RlLmNgOlxuXG4qICAgYGh1Z2V0bGJmc19zdGF0ZnNgXG4qICAgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYFxuKiAgIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2BcbiogICBgYWxsb2NfaHVnZXRsYl9mb2xpb2BcbiogICBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYFxuKiAgIGBodWdldGxiX3VucmVzZXJ2ZV9wYWdlc2BcbiogICBgaHVnZXBhZ2VfcHV0X3N1YnBvb2xgXG5cbkFuZCBmb3IgY29uZmlndXJhdGlvbnM/IFdlIG5lZWQgYEhVR0VUTEJGU2AuIFRoaXMgaW1wbGllcyBgSFVHRVRMQl9QQUdFYCBvbiBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcyAobGlrZSB4ODZcXF82NCksIHNvIHRoYXQncyBjb3ZlcmVkLiBTYW5pdHkgY2hlY2sgY29uZmlybXMgdGhlIGZvcm1hdCBmb3IgYEVuYWJsZUNvbmZpZ3NgIGlzIGp1c3QgdGhlIGZsYWdzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXg6IGBbXCJIVUdFVExCRlNcIl1gIChvciBwb3RlbnRpYWxseSBgW1wiSFVHRVRMQkZTXCIsIFwiSFVHRVRMQl9QQUdFXCJdYCkuXG5cblNvLCB0byBzdW1tYXJpemUgYW5kIGNvbmZpcm06XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlLlxuKiAgICoqUmVhc29uaW5nKio6IFN1YnBvb2wgYWNjb3VudGluZyBhbmQgZXJyb3IgaGFuZGxpbmcgY2hhbmdlcywgaW1wYWN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhY2Nlc3NpYmxlIHZpYSBgaHVnZXRsYmZzYCBhbmQgYG1tYXBgLlxuKiAgICoqRm9jdXNTeW1ib2xzKio6IFNwZWNpZmljIGZ1bmN0aW9ucyBsaXN0ZWQgYWJvdmUuXG4qICAgKipFbmFibGVDb25maWdzKio6IGBcIkhVR0VUTEJGU1wiYFxuKiAgIFRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4MDYsIk91dHB1dFRva2VucyI6MjgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAxOjUwLjQ3Nzk5NDA1MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3ODkxMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc1wiLFxuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNcIixcbiAgICBcImh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwiaHVnZXRsYmZzX3N0YXRmc1wiLFxuICAgIFwiaHVnZXRsYl91bnJlc2VydmVfcGFnZXNcIixcbiAgICBcImh1Z2VwYWdlX3B1dF9zdWJwb29sXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYmZzIHN1YnBvb2wgYWNjb3VudGluZyBsb2dpYyBhbmQgcmVzZXJ2YXRpb24gZXJyb3ItdW53aW5kIHBhdGhzIGluIG1tL2h1Z2V0bGIuYyBhbmQgZnMvaHVnZXRsYmZzL2lub2RlLmMuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyBob3cgYHVzZWRfaHBhZ2VzYCBhbmQgYHJzdl9ocGFnZXNgIGFyZSB1cGRhdGVkIGluIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcygpYCBhbmQgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKClgLCBhbHRlcnMgc3VicG9vbCByZWxlYXNlIGNoZWNrcyBpbiBgc3VicG9vbF9pc19mcmVlKClgLCBmaXhlcyBzdGF0ZnMgY2FsY3VsYXRpb24gZm9yIHVuYm91bmRlZCBzdWJwb29scyBpbiBgaHVnZXRsYmZzX3N0YXRmcygpYCwgYW5kIHJlZmFjdG9ycyBnbG9iYWwgbWVtb3J5IHJlc2VydmF0aW9uIHJvbGxiYWNrcyBpbiBgYWxsb2NfaHVnZXRsYl9mb2xpbygpYCBhbmQgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYC4gVGhpcyBsb2dpYyBpcyBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcyBmaWxlc3lzdGVtIG1vdW50cywgYWxsb2NhdGlvbnMsIGFuZCBtbWFwIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNcIixcbiAgICBcImh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzXCIsXG4gICAgXCJodWdldGxiX3Jlc2VydmVfcGFnZXNcIixcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIixcbiAgICBcImh1Z2V0bGJmc19zdGF0ZnNcIixcbiAgICBcImh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzXCIsXG4gICAgXCJodWdlcGFnZV9wdXRfc3VicG9vbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGJmcyBzdWJwb29sIGFjY291bnRpbmcgbG9naWMgYW5kIHJlc2VydmF0aW9uIGVycm9yLXVud2luZCBwYXRocyBpbiBtbS9odWdldGxiLmMgYW5kIGZzL2h1Z2V0bGJmcy9pbm9kZS5jLiBTcGVjaWZpY2FsbHksIGl0IGNoYW5nZXMgaG93IGB1c2VkX2hwYWdlc2AgYW5kIGByc3ZfaHBhZ2VzYCBhcmUgdXBkYXRlZCBpbiBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoKWAgYW5kIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcygpYCwgYWx0ZXJzIHN1YnBvb2wgcmVsZWFzZSBjaGVja3MgaW4gYHN1YnBvb2xfaXNfZnJlZSgpYCwgZml4ZXMgc3RhdGZzIGNhbGN1bGF0aW9uIGZvciB1bmJvdW5kZWQgc3VicG9vbHMgaW4gYGh1Z2V0bGJmc19zdGF0ZnMoKWAsIGFuZCByZWZhY3RvcnMgZ2xvYmFsIG1lbW9yeSByZXNlcnZhdGlvbiByb2xsYmFja3MgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW8oKWAgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAuIFRoaXMgbG9naWMgaXMgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBodWdldGxiZnMgZmlsZXN5c3RlbSBtb3VudHMsIGFsbG9jYXRpb25zLCBhbmQgbW1hcCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjowMTo1MC41NTU4OTE4OThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzMzNTE4MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6NTAuNTU2MzU3NjY4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjEzMzMwNDgxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdWJwb29sIGFjY291bnRpbmcgYW5kIHJlc2VydmF0aW9uIGxvZ2ljIGZvciBodWdldGxiZnMgKGluY2x1ZGluZyBodWdldGxiX3N1YnBvb2xfZ2V0X3BhZ2VzLCBodWdldGxiX3N1YnBvb2xfcHV0X3BhZ2VzLCBzdGF0ZnMgcmVwb3J0aW5nLCBhbmQgcm9sbGJhY2sgaGFuZGxpbmcgaW4gYWxsb2NfaHVnZXRsYl9mb2xpbyBhbmQgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKS5cXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKHN1Y2ggYXMgZ2JsX3Jlc3ZfZ2V0LCBnYmxfcmVzdl9wdXQsIGdibF9yZXN2X2FjY3RlZCwgbGltaXQsIGFuZCBmcmVlX3BhZ2VzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGFjcm9zcyBhbGwgY29udHJvbCBmbG93IHBhdGhzLiBObyBuZXcgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm8gcGFkZGluZyBieXRlcyBhcmUgZXhwb3NlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBpcyBwYXNzZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZy5cXG5cXG5Qb3RlbnRpYWwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBwYWdlIGFjY291bnRpbmcgaW5hY2N1cmFjaWVzLCBjb25jdXJyZW5jeS9zeW5jaHJvbml6YXRpb24gdW5kZXIgcmFjZSBjb25kaXRpb25zLCBvciBtZW1vcnkgZXhoYXVzdGlvbiwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2EzNzA1NGE3ZmQ5OTZiZTMwZTkwMzY1NTYxN2Y4NTZlZmM3NjZkMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMjI6MDE6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuaW5kZXggYTQ5MTE1ZGIxOGM3Ni4uZDI0NDU4M2ZkY2JjMyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcbkBAIC0zMTQsMjEgKzMxNCw4IEBAIGh1Z2UgcGFnZXMuICBJZiB0aGV5IGNhbiBub3QgYmUgcmVzZXJ2ZWQsIHRoZSBtb3VudCBmYWlscy5cbiBUaGUgcm91dGluZXMgaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgYXJlIGNhbGxlZCB3aGVuIHBhZ2VzIGFyZVxuIG9idGFpbmVkIGZyb20gb3IgcmVsZWFzZWQgYmFjayB0byBhIHN1YnBvb2wuICBUaGV5IHBlcmZvcm0gYWxsIHN1YnBvb2xcbiBhY2NvdW50aW5nLCBhbmQgdHJhY2sgYW55IHJlc2VydmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnBvb2wuXG4taHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzIGFyZSBwYXNzZWQgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIGJ5IHdoaWNoXG4tdG8gYWRqdXN0IHRoZSBzdWJwb29sICd1c2VkIHBhZ2UnIGNvdW50IChkb3duIGZvciBnZXQsIHVwIGZvciBwdXQpLiAgTm9ybWFsbHksXG4tdGhleSByZXR1cm4gdGhlIHNhbWUgdmFsdWUgdGhhdCB3YXMgcGFzc2VkIG9yIGFuIGVycm9yIGlmIG5vdCBlbm91Z2ggcGFnZXNcbi1leGlzdCBpbiB0aGUgc3VicG9vbC5cbi1cbi1Ib3dldmVyLCBpZiByZXNlcnZlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGEgcmV0dXJuIHZhbHVlIGxlc3Ncbi10aGFuIHRoZSBwYXNzZWQgdmFsdWUgbWF5IGJlIHJldHVybmVkLiAgVGhpcyByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHRoZVxuLW51bWJlciBvZiBhZGRpdGlvbmFsIGdsb2JhbCBwb29sIGFkanVzdG1lbnRzIHdoaWNoIG11c3QgYmUgbWFkZS4gIEZvciBleGFtcGxlLFxuLXN1cHBvc2UgYSBzdWJwb29sIGNvbnRhaW5zIDMgcmVzZXJ2ZWQgaHVnZSBwYWdlcyBhbmQgc29tZW9uZSBhc2tzIGZvciA1LlxuLVRoZSAzIHJlc2VydmVkIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbCBjYW4gYmUgdXNlZCB0byBzYXRpc2Z5IHBhcnRcbi1vZiB0aGUgcmVxdWVzdC4gIEJ1dCwgMiBwYWdlcyBtdXN0IGJlIG9idGFpbmVkIGZyb20gdGhlIGdsb2JhbCBwb29scy4gIFRvXG4tcmVsYXkgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUgY2FsbGVyLCB0aGUgdmFsdWUgMiBpcyByZXR1cm5lZC4gIFRoZSBjYWxsZXJcbi1pcyB0aGVuIHJlc3BvbnNpYmxlIGZvciBhdHRlbXB0aW5nIHRvIG9idGFpbiB0aGUgYWRkaXRpb25hbCB0d28gcGFnZXMgZnJvbVxuLXRoZSBnbG9iYWwgcG9vbHMuXG4tXG4raHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgdXNlIHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcyBwYXNzZWQgdG8gYWRqdXN0XG4rdGhlIHN1YnBvb2wgJ3VzZWQgcGFnZScgY291bnQuXG4gXG4gQ09XIGFuZCBSZXNlcnZhdGlvbnNcbiA9PT09PT09PT09PT09PT09PT09PVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0IGIvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcbmluZGV4IDIwOTQ3ZjhiZDA2NTQuLmFlMWYxZjMxNDc3ZmMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcbkBAIC0yNDYsMTUgKzI0Niw4IEBAIGh1Z2VwYWdlX3N1YnBvb2znmoRtaW5faHBhZ2Vz5a2X5q615Lit6KKr6Lef6Liq44CC5Zyo5oyC6L295pe277yMaHVnZXRsYl9hY2N0X21lXG4g6KKr6LCD55So5Lul6aKE55WZ5oyH5a6a5pWw6YeP55qE5beo6aG144CC5aaC5p6c5a6D5Lus5LiN6IO96KKr6aKE55WZ77yM5oyC6L295bCx5Lya5aSx6LSl44CCXG4gXG4g5b2T5LuO5a2Q5rGg5Lit6I635Y+W5oiW6YeK5pS+6aG16Z2i5pe277yM5Lya6LCD55SoaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCnlh73mlbDjgIJcbi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXPooqvkvKDpgJLnu5nlt6jpobXmlbDph4/vvIzku6XmraTmnaXosIPmlbTlrZDmsaDnmoQg4oCc5bey55So6aG16Z2i4oCdIOiuoeaVsFxuLe+8iGdldOS4uuS4i+mZje+8jHB1dOS4uuS4iuWNh++8ieOAgumAmuW4uOaDheWGteS4i++8jOWmguaenOWtkOaxoOS4reayoeaciei2s+Wkn+eahOmhtemdou+8jOWug+S7rOS8mui/lOWbnuS4juS8oOmAkueahOebuOWQjOeahOWAvOaIllxuLeS4gOS4qumUmeivr+OAglxuLVxuLeeEtuiAjO+8jOWmguaenOmihOeVmeS4juWtkOaxoOebuOWFs+iBlO+8jOWPr+iDveS8mui/lOWbnuS4gOS4quWwj+S6juS8oOmAkuWAvOeahOi/lOWbnuWAvOOAgui/meS4qui/lOWbnuWAvOihqOekuuW/hemhu+i/m+ihjOeahOmineWkluWFqOWxgFxuLeaxoOiwg+aVtOeahOaVsOmHj+OAguS+i+Wmgu+8jOWBh+iuvuS4gOS4quWtkOaxoOWMheWQqzPkuKrpooTnlZnnmoTlt6jpobXvvIzmnInkurropoHmsYI15Liq44CC5LiO5a2Q5rGg55u45YWz55qEM+S4qumihOeVmemhteWPr+S7peeUqOadpVxuLea7oei2s+mDqOWIhuivt+axguOAguS9huaYr++8jOW/hemhu+S7juWFqOWxgOaxoOS4reiOt+W+lzLkuKrpobXpnaLjgILkuLrkuoblkJHosIPnlKjogIXovazovr7ov5nkuIDkv6Hmga/vvIzlsIbov5Tlm57lgLwy44CC54S25ZCO77yM6LCD55SoXG4t6ICF6KaB6LSf6LSj5LuO5YWo5bGA5rGg5Lit6I635Y+W5Y+m5aSW5Lik5Liq6aG16Z2i44CCXG4tXG4r5a6D5Lus6LSf6LSj5omA5pyJ5a2Q5rGg55qE57uf6K6h5qC4566X77yM5bm26Lef6Liq5LiO5a2Q5rGg55u45YWz6IGU55qE6aKE55WZ44CCXG4raHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCnlh73mlbDkvb/nlKjkvKDlhaXnmoTlt6jpobXmlbDph4/mnaXosIPmlbTlrZDmsaDnmoTigJzlt7LnlKjpobXpnaLigJ3orqHmlbDjgIJcbiBcbiBDT1flkozpooTnlZlcbiA9PT09PT09PT09XG5kaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xuaW5kZXggNzYxMWE4NDcwZWEyNi4uNTExM2Y3NDNmNmZjNyAxMDA2NDRcbi0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG4rKysgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xuQEAgLTExMDksOCArMTEwOSwxMiBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuIFxuIFx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2c2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZWxvY2spO1xuIFx0XHRcdGJ1Zi1cdTAwM2VmX2Jsb2NrcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzO1xuLVx0XHRcdGZyZWVfcGFnZXMgPSBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlc1xuLVx0XHRcdFx0LSBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4rXHRcdFx0aWYgKHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzID09IC0xKSB7XG4rXHRcdFx0XHRmcmVlX3BhZ2VzID0gLTE7XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdGZyZWVfcGFnZXMgPSBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAtXG4rXHRcdFx0XHRcdCAgICAgc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzO1xuK1x0XHRcdH1cbiBcdFx0XHRidWYtXHUwMDNlZl9iYXZhaWwgPSBidWYtXHUwMDNlZl9iZnJlZSA9IGZyZWVfcGFnZXM7XG4gXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRidWYtXHUwMDNlZl9maWxlcyA9IHNiaW5mby1cdTAwM2VtYXhfaW5vZGVzO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbmluZGV4IDE2YzRjNGNhYTEyNmMuLjQ1NTFmZjMwMjM2NDAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0zOSw4ICszOSw4IEBAIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sIHtcbiBcdHNwaW5sb2NrX3QgbG9jaztcbiBcdGxvbmcgY291bnQ7XG4gXHRsb25nIG1heF9ocGFnZXM7XHQvKiBNYXhpbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWF4aW11bS4gKi9cbi1cdGxvbmcgdXNlZF9ocGFnZXM7XHQvKiBVc2VkIGNvdW50IGFnYWluc3QgbWF4aW11bSwgaW5jbHVkZXMgKi9cbi1cdFx0XHRcdC8qIGJvdGggYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi9cbitcdGxvbmcgdXNlZF9ocGFnZXM7XHQvKiBVc2VkIHBhZ2UgY291bnQsIGluY2x1ZGVzIGJvdGggKi9cbitcdFx0XHRcdC8qIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXG4gXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7XG4gXHRsb25nIG1pbl9ocGFnZXM7XHQvKiBNaW5pbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWluaW11bS4gKi9cbiBcdGxvbmcgcnN2X2hwYWdlcztcdC8qIFBhZ2VzIHJlc2VydmVkIGFnYWluc3QgZ2xvYmFsIHBvb2wgdG8gKi9cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDRmNmY1OGJmM2RiNmMuLjExNTFhZDk1OWZmZDUgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEzMCwxMiArMTMwLDggQEAgc3RhdGljIGlubGluZSBib29sIHN1YnBvb2xfaXNfZnJlZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG4ge1xuIFx0aWYgKHNwb29sLVx1MDAzZWNvdW50KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcbi1cdFx0cmV0dXJuIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDA7XG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAhPSAtMSlcbi1cdFx0cmV0dXJuIHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPT0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcztcbiBcbi1cdHJldHVybiB0cnVlO1xuK1x0cmV0dXJuIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDA7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbkBAIC0xOTMsMTMgKzE4OSwxOCBAQCB2b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbiBcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbiB9XG4gXG4tLypcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGFsbG9jYXRpbmcgYW5kIHJlc2VydmluZyBwYWdlcy5cbi0gKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGVcbi0gKiByZXF1ZXN0LiAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBieSB3aGljaCB0aGVcbi0gKiBnbG9iYWwgcG9vbHMgbXVzdCBiZSBhZGp1c3RlZCAodXB3YXJkKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBtYXlcbi0gKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZVxuLSAqIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxuKy8qKlxuKyAqIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzIC0gR2V0IHBhZ2VzIGZyb20gYSBzdWJwb29sXG4rICogQHNwb29sOiBwb2ludGVyIHRvIHN1YnBvb2wgc3RydWN0dXJlIChtYXkgYmUgTlVMTClcbisgKiBAZGVsdGE6IG51bWJlciBvZiBwYWdlcyB0byBhbGxvY2F0ZSBvciByZXNlcnZlXG4rICpcbisgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBhbGxvY2F0aW5nIG9yXG4rICogcmVzZXJ2aW5nIEBkZWx0YSBodWdlcGFnZXMuXG4rICpcbisgKiBDb250ZXh0OiBUYWtlcyBzcG9vbC1cdTAwM2Vsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnEoKS5cbisgKiBSZXR1cm46IE5vbi1uZWdhdGl2ZSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgY2Fubm90IGJlXG4rICogICAgICAgICBzYXRpc2ZpZWQgYnkgdGhlIHN1YnBvb2wsIG9yIC1FTk9NRU0gaWYgdGhlIHN1YnBvb2wgbWF4aW11bVxuKyAqICAgICAgICAgbGltaXQgd291bGQgYmUgZXhjZWVkZWQuXG4gICovXG4gc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFx0XHRcdFx0ICAgICAgbG9uZyBkZWx0YSlcbkBAIC0yMTEsMTUgKzIxMiwxNCBAQCBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuIFxuLVx0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEpIHtcdFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cbi1cdFx0aWYgKChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyArIGRlbHRhKSBcdTAwM2M9IHNwb29sLVx1MDAzZW1heF9ocGFnZXMpXG4tXHRcdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgKz0gZGVsdGE7XG4tXHRcdGVsc2Uge1xuLVx0XHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdFx0Z290byB1bmxvY2tfcmV0O1xuLVx0XHR9XG4rXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSBcdTAwMjZcdTAwMjZcbitcdCAgICBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyArIGRlbHRhIFx1MDAzZSBzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzKSB7XG4rXHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdGdvdG8gdW5sb2NrX3JldDtcbiBcdH1cbiBcbitcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICs9IGRlbHRhO1xuK1xuIFx0LyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi9cbiBcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNiBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzKSB7XG4gXHRcdGlmIChkZWx0YSBcdTAwM2Ugc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcykge1xuQEAgLTI0MCwxMSArMjQwLDE5IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qXG4tICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBmcmVlaW5nIGFuZCB1bnJlc2VydmluZyBwYWdlcy5cbi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBnbG9iYWwgcGFnZSByZXNlcnZhdGlvbnMgdGhhdCBtdXN0IGJlIGRyb3BwZWQuXG4tICogVGhlIHJldHVybiB2YWx1ZSBtYXkgb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSlcbi0gKiBpbiB0aGUgY2FzZSB3aGVyZSBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC5cbisvKipcbisgKiBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyAtIFJlbGVhc2UgcGFnZXMgYmFjayB0byBhIHN1YnBvb2xcbisgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKVxuKyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGZyZWUgb3IgdW5yZXNlcnZlXG4rICpcbisgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBmcmVlaW5nIG9yXG4rICogdW5yZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy5cbisgKlxuKyAqIENvbnRleHQ6IFRha2VzIHNwb29sLVx1MDAzZWxvY2sgdXNpbmcgc3Bpbl9sb2NrX2lycXNhdmUoKS4gTWF5IHJlbGVhc2VcbisgKiAgICAgICAgICBhbmQgZnJlZSBAc3Bvb2wgaWYgaXRzIHVzYWdlIGNvdW50IGFuZCByZWZlcmVuY2VzIHJlYWNoXG4rICogICAgICAgICAgemVyby5cbisgKiBSZXR1cm46IE5vbi1uZWdhdGl2ZSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgdGhlIHN1YnBvb2wgY2Fubm90XG4rICogICAgICAgICBhYnNvcmIuXG4gICovXG4gc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFx0XHRcdFx0ICAgICAgIGxvbmcgZGVsdGEpXG5AQCAtMjU3LDE5ICsyNjUsMjQgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuLVx0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXHRcdC8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4tXHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGRlbHRhO1xuK1x0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XG4gXG4gXHQgLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi9cbiBcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyBcdTAwM2Mgc3Bvb2wtXHUwMDNlbWluX2hwYWdlcykge1xuLVx0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIFx1MDAzYz0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcylcbitcdFx0LypcbitcdFx0ICogbGltaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0XG4rXHRcdCAqIGNhbiBiZSByZXN0b3JlZCB0byB0aGlzIHN1YnBvb2wuXG4rXHRcdCAqL1xuK1x0XHRsb25nIGxpbWl0ID0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAtIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzO1xuK1xuK1x0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIFx1MDAzYz0gbGltaXQpXG4gXHRcdFx0cmV0ID0gMDtcbiBcdFx0ZWxzZVxuLVx0XHRcdHJldCA9IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSAtIHNwb29sLVx1MDAzZW1pbl9ocGFnZXM7XG4rXHRcdFx0cmV0ID0gc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIC0gbGltaXQ7XG4gXG4gXHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgKz0gZGVsdGE7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzIFx1MDAzZSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzKVxuLVx0XHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuK1x0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyBcdTAwM2UgbGltaXQpXG4rXHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IGxpbWl0O1xuIFx0fVxuIFxuIFx0LypcbkBAIC0yOTQ0LDcgKzI5NTcsNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX3ZtYSh2bWEpO1xuIFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHRsb25nIHJldHZhbCwgZ2JsX2NoZywgZ2JsX3Jlc2VydmU7XG4rXHRsb25nIHJldHZhbCwgZ2JsX3Jlc3ZfZ2V0O1xuIFx0bWFwX2NoZ19zdGF0ZSBtYXBfY2hnO1xuIFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCBtcG9saTtcbiBcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbkBAIC0yOTgzLDggKzI5OTYsOCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHQgKiBPciBpZiBpdCBjYW4gZ2V0IG9uZSBmcm9tIHRoZSBwb29sIHJlc2VydmF0aW9uIGRpcmVjdGx5LlxuIFx0ICovXG4gXHRpZiAobWFwX2NoZykge1xuLVx0XHRnYmxfY2hnID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuLVx0XHRpZiAoZ2JsX2NoZyBcdTAwM2MgMCkge1xuK1x0XHRnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XG4rXHRcdGlmIChnYmxfcmVzdl9nZXQgXHUwMDNjIDApIHtcbiBcdFx0XHRyZXQgPSAtRU5PU1BDO1xuIFx0XHRcdGdvdG8gb3V0X2VuZF9yZXNlcnZhdGlvbjtcbiBcdFx0fVxuQEAgLTI5OTMsNyArMzAwNiw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0ICogSWYgd2UgaGF2ZSB0aGUgdm1hIHJlc2VydmF0aW9uIHJlYWR5LCBubyBuZWVkIGZvciBleHRyYVxuIFx0XHQgKiBnbG9iYWwgcmVzZXJ2YXRpb24uXG4gXHRcdCAqL1xuLVx0XHRnYmxfY2hnID0gMDtcbitcdFx0Z2JsX3Jlc3ZfZ2V0ID0gMDtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMzAwNCwxMCArMzAxNywxMCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdGFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7XG4gXG4gXHQvKlxuLVx0ICogZ2JsX2NoZyA9PSAwIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyBmb3IgdGhpc1xuK1x0ICogZ2JsX3Jlc3ZfZ2V0ID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXG4gXHQgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LlxuIFx0ICovXG4tXHRpZiAoZ2JsX2NoZyA9PSAwKVxuK1x0aWYgKGdibF9yZXN2X2dldCA9PSAwKVxuIFx0XHRhbGxvY19mbGFncyB8PSBIVUdFVExCX0FMTE9DX1VTRV9HTE9CQUxfUkVTRVJWQVRJT05TO1xuIFxuIFx0LyogVGFrZXMgcmVmZXJlbmNlIG9uIG1wb2wuICovXG5AQCAtMzA2MSwxMyArMzA3NCwxMCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRyZXR1cm4gZm9saW87XG4gXG4gb3V0X3N1YnBvb2xfcHV0OlxuLVx0Lypcbi1cdCAqIHB1dCBwYWdlIHRvIHN1YnBvb2wgaWZmIHRoZSBxdW90YSBvZiBzdWJwb29sJ3MgcnN2X2hwYWdlcyBpcyB1c2VkXG4tXHQgKiBkdXJpbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMuXG4tXHQgKi9cbi1cdGlmIChtYXBfY2hnIFx1MDAyNlx1MDAyNiAhZ2JsX2NoZykge1xuLVx0XHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbi1cdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xuK1x0aWYgKG1hcF9jaGcpIHtcbitcdFx0bG9uZyBnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XG4rXG4rXHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0IC0gZ2JsX3Jlc3ZfcHV0KTtcbiBcdH1cbiBcbiBvdXRfZW5kX3Jlc2VydmF0aW9uOlxuQEAgLTY2NjMsMTIgKzY2NzMsMTUgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHZtYV9mbGFnc190IHZtYV9mbGFncylcbiB7XG4tXHRsb25nIGNoZyA9IC0xLCBhZGQgPSAtMSwgc3Bvb2xfcmVzdiwgZ2JsX3Jlc3Y7XG4rXHRsb25nIGNoZyA9IC0xLCBhZGQgPSAtMTtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfaW5vZGUoaW5vZGUpO1xuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF9pbm9kZShpbm9kZSk7XG4gXHRzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwO1xuIFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDtcbi1cdGxvbmcgZ2JsX3Jlc2VydmUsIHJlZ2lvbnNfbmVlZGVkID0gMDtcbitcdGxvbmcgZ2JsX3Jlc3ZfYWNjdGVkID0gMDtcbitcdGxvbmcgcmVnaW9uc19uZWVkZWQgPSAwO1xuK1x0bG9uZyBnYmxfcmVzdl9nZXQ7XG4rXHRsb25nIGdibF9yZXN2X3B1dDtcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi9cbkBAIC02NzQzLDkgKzY3NTYsOSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0ICogdGhlIHN1YnBvb2wgaGFzIGEgbWluaW11bSBzaXplLCB0aGVyZSBtYXkgYmUgc29tZSBnbG9iYWxcbiBcdCAqIHJlc2VydmF0aW9ucyBhbHJlYWR5IGluIHBsYWNlIChnYmxfcmVzZXJ2ZSkuXG4gXHQgKi9cbi1cdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7XG4tXHRpZiAoZ2JsX3Jlc2VydmUgXHUwMDNjIDApIHtcbi1cdFx0ZXJyID0gZ2JsX3Jlc2VydmU7XG4rXHRnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgY2hnKTtcbitcdGlmIChnYmxfcmVzdl9nZXQgXHUwMDNjIDApIHtcbitcdFx0ZXJyID0gZ2JsX3Jlc3ZfZ2V0O1xuIFx0XHRnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7XG4gXHR9XG4gXG5AQCAtNjc1Myw5ICs2NzY2LDEwIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi5cbiBcdCAqIEhhbmQgdGhlIHBhZ2VzIGJhY2sgdG8gdGhlIHN1YnBvb2wgaWYgdGhlcmUgYXJlIG5vdFxuIFx0ICovXG4tXHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTtcbitcdGVyciA9IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0KTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X3B1dF9wYWdlcztcbitcdGdibF9yZXN2X2FjY3RlZCA9IGdibF9yZXN2X2dldDtcbiBcbiBcdC8qXG4gXHQgKiBBY2NvdW50IGZvciB0aGUgcmVzZXJ2YXRpb25zIG1hZGUuIFNoYXJlZCBtYXBwaW5ncyByZWNvcmQgcmVnaW9uc1xuQEAgLTY3NzIsNyArNjc4Niw2IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdGFkZCA9IHJlZ2lvbl9hZGQocmVzdl9tYXAsIGZyb20sIHRvLCByZWdpb25zX25lZWRlZCwgaCwgaF9jZyk7XG4gXG4gXHRcdGlmICh1bmxpa2VseShhZGQgXHUwMDNjIDApKSB7XG4tXHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xuIFx0XHRcdGVyciA9IGFkZDtcbiBcdFx0XHRnb3RvIG91dF9wdXRfcGFnZXM7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoY2hnIFx1MDAzZSBhZGQpKSB7XG5AQCAtNjgwOCwyNiArNjgyMSwyMiBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0fVxuIFx0cmV0dXJuIGNoZztcbiBcbi1vdXRfcHV0X3BhZ2VzOlxuLVx0c3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlO1xuLVx0aWYgKHNwb29sX3Jlc3YpIHtcbi1cdFx0LyogcHV0IHN1YiBwb29sJ3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cbi1cdFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XG4tXHRcdC8qXG4tXHRcdCAqIHN1YnBvb2wncyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxuLVx0XHQgKiByZXR1cm4gdG8gaHN0YXRlLlxuLVx0XHQgKi9cbi1cdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xuLVx0fVxuLVx0LyogUmVzdG9yZSB1c2VkX2hwYWdlcyBmb3IgcGFnZXMgdGhhdCBmYWlsZWQgZ2xvYmFsIHJlc2VydmF0aW9uICovXG4tXHRpZiAoZ2JsX3Jlc2VydmUgXHUwMDI2XHUwMDI2IHNwb29sKSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rIG91dF9wdXRfcGFnZXM6XG4rXHQvKlxuK1x0ICogUmV0dXJuIGFsbCB0aGF0IHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc3VicG9vbCwgbGV0IHN1YnBvb2xcbitcdCAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZVxuK1x0ICogcmV0dXJuZWQgdG8gdGhlIGdsb2JhbCBwb29sLlxuK1x0ICovXG4rXHRnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgY2hnKTtcbitcdC8qXG4rXHQgKiBUaGVyZSBtYXkgYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZlxuK1x0ICogcmVzZXJ2YXRpb25zIHRvIGNvbnN1bWUgYW5kIHRoZSBudW1iZXIgdG8gcmVzdG9yZSBub3cgaWZcbitcdCAqIHRoZXJlIGFyZSBtdWx0aXBsZSB0aHJlYWRzIGludGVyYWN0aW5nIHdpdGggdGhlIHN1YnBvb2wgLVxuK1x0ICogcmVzdG9yZSB0aGUgZGlmZmVyZW5jZSwgdGFraW5nIGludG8gYWNjb3VudCBhbnkgZ2xvYmFsXG4rXHQgKiByZXNlcnZhdGlvbnMgYWxyZWFkeSBhY3F1aXJlZC5cbitcdCAqL1xuK1x0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQgLSBnYmxfcmVzdl9hY2N0ZWQpO1xuIFxuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlO1xuLVx0XHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4tXHR9XG4gb3V0X3VuY2hhcmdlX2Nncm91cDpcbiBcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcbiBcdFx0XHRcdFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6NTAuNTU2MzU4NTM4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1OTAwMTk1NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBBc3Nlc3NtZW50IGZvciBIdWdldGxiZnMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZGVjaWRlIGlmIHdlIG5lZWQgdG8gYnJpbmcgb3V0IHRoZSBiaWcgZ3VucyB3aXRoIEtNU0FOLCBvciBpZiBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXJzIHdpbGwgc3VmZmljZS4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB3aGF0J3MgY2hhbmdpbmcuXG5cblRoZSBwYXRjaCB0b3VjaGVzIGEgaGFuZGZ1bCBvZiBmaWxlcywgbmFtZWx5IHRoZSBkb2N1bWVudGF0aW9uIGZvciBodWdldGxiZnMgcmVzZXJ2YXRpb24gYW5kIHNvbWUgY29yZSBmaWxlcyBpbiB0aGUgZmlsZXN5c3RlbSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtczogYERvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RgLCBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCBhbmQgYG1tL2h1Z2V0bGIuY2AuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyBpbiB0aGUgYGh1Z2V0bGJmc19zdGF0ZnNgIGZ1bmN0aW9uIHdpdGhpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLiBJdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSBtb2RpZmljYXRpb24gdG8gaG93IGZyZWUgcGFnZXMgYXJlIGNhbGN1bGF0ZWQsIGhhbmRsaW5nIGEgcG90ZW50aWFsIGAtMWAgdmFsdWUgZm9yIGBtYXhfaHBhZ2VzYCBpbiB0aGUgYGtzdGF0ZnNgIHN0cnVjdC4gVGhpcyBpcyBpbnRlcmVzdGluZyDigJMgaXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIGNvdW50ZXJzIGFyZSB1c2VkIGVsc2V3aGVyZSBhbmQgd2hldGhlciBhIG5lZ2F0aXZlIHZhbHVlIGNvdWxkIGxlYWQgdG8gYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblRoZW4sIHRoZXJlIGFyZSBjaGFuZ2VzIGluIGBtbS9odWdldGxiLmNgIHRvIHRoZSBzdWJwb29sIGZ1bmN0aW9uczogYHN1YnBvb2xfaXNfZnJlZWAsIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AsIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AsIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLiBUaGVzZSBzZWVtIHJlbGF0ZWQgdG8gY2hhbmdlcyBpbiB0aGUgcmVzZXJ2YXRpb24gYW5kIGFjY291bnRpbmcgbG9naWMgZm9yIGh1Z2VwYWdlcyB3aXRoaW4gc3VicG9vbHMuIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhY2NvdW50aW5nIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHN1YnBvb2wgbWFuYWdlbWVudCBmdW5jdGlvbnM7IHRoYXQncyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciByYWNlIGNvbmRpdGlvbnMgY2FuIGhpZGUuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUgZm9yIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgdGhlIGtleSBjaGFuZ2UgaXMgaW4gaG93IHZhcmlhYmxlcyBhcmUgbWFuYWdlZCBpbiB0aGUgYG1hcF9jaGdgIGNvbmRpdGlvbmFsIGJyYW5jaC4gVGhlIHByZXZpb3VzIGxvZ2ljIGhhZCBhIGZsYXcgd2hpY2ggY2F1c2VkIGEgYGdibF9yZXN2YCB0byBiZSBhc3NpZ25lZCBjb25kaXRpb25hbGx5LCBidXQgd2FzIHN0aWxsIHVzZWQgaW4gYW4gYGlmYCBzdGF0ZW1lbnQgdG8gaGFuZGxlIGFjY291bnRpbmcuIE5vdywgdGhlIGNvZGUgZXhwbGljaXRseSBpbml0aWFsaXplcyBgZ2JsX3Jlc3ZfZ2V0YCBpZiBgbWFwX2NoZ2AgaXMgdHJ1ZSwgYW5kIGl0IHNob3VsZCB0aGVuIGJlIHNhZmUgaW4gdGhlIGBvdXRfc3VicG9vbF9wdXRgIGJyYW5jaCwgd2hlcmUgdGhlcmUgbWlnaHQgYmUgYSBwdXQgb3BlcmF0aW9uIHBlcmZvcm1lZC5cblxuSSB3aWxsIHBlcmZvcm0gYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgZnVuY3Rpb24gdG8gZG91YmxlLWNoZWNrIHRoYXQgZXZlcnkgdmFyaWFibGUgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIHVzZWQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGNoYW5nZXMgdG8gaG93IHRoZSBnbG9iYWwgcmVzZXJ2YXRpb24gYWNjb3VudGluZyBpcyBoYW5kbGVkLiBSZWFkaW5nIHRoZSBmdWxsIGZ1bmN0aW9uIGZyb20gbGluZXMgMjk0NCB0byAzMDgwIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIG92ZXJ2aWV3IG9mIHRoZSBjb2RlLCByYXRoZXIgdGhhbiBqdXN0IHRoZSBzbmlwcGV0cyBwcm92aWRlZC5cblxuVWx0aW1hdGVseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbmZvIGxlYWtzLCBvciBhbnkgb3RoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyB0aGF0IG1pZ2h0IGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4gQmFzZWQgb24gdGhpcyBpbml0aWFsIHJldmlldywgSSdtIGxlYW5pbmcgdG93YXJkcyB0aGUgaWRlYSB0aGF0IEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIGhlcmUsIGJ1dCBJIG5lZWQgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjowMTo1Ny4xNDYzODg3NDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2V0bGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTQ0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjk0NDpcXHRcXHRNQVBfQ0hHX0VORk9SQ0VEID0gMixcXG4yOTQ1OlxcdH0gbWFwX2NoZ19zdGF0ZTtcXG4yOTQ2OlxcdFxcbjI5NDc6XFx0LypcXG4yOTQ4OlxcdCAqIE5PVEUhIFxcXCJjb3dfZnJvbV9vd25lclxcXCIgcmVwcmVzZW50cyBhIHZlcnkgaGFja3kgdXNhZ2Ugb25seSB1c2VkIGluIENvV1xcbjI5NDk6XFx0ICogZmF1bHRzIG9mIGh1Z2V0bGIgcHJpdmF0ZSBtYXBwaW5ncyBvbiB0b3Agb2YgYSBub24tcGFnZS1jYWNoZSBmb2xpbyAoaW5cXG4yOTUwOlxcdCAqIHdoaWNoIGNhc2UgZXZlbiBpZiB0aGVyZSdzIGEgcHJpdmF0ZSB2bWEgcmVzdiBtYXAgaXQgd29uJ3QgY292ZXIgc3VjaFxcbjI5NTE6XFx0ICogYWxsb2NhdGlvbikuICBOZXcgY2FsbCBzaXRlcyBzaG91bGQgKHByb2JhYmx5KSBuZXZlciBzZXQgaXQgdG8gdHJ1ZSEhXFxuMjk1MjpcXHQgKiBXaGVuIGl0J3Mgc2V0LCB0aGUgYWxsb2NhdGlvbiB3aWxsIGJ5cGFzcyBhbGwgdm1hIGxldmVsIHJlc2VydmF0aW9ucy5cXG4yOTUzOlxcdCAqL1xcbjI5NTQ6XFx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjI5NTU6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcilcXG4yOTU2OlxcdHtcXG4yOTU3OlxcdFxcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfdm1hKHZtYSk7XFxuMjk1ODpcXHRcXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xcbjI5NTk6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4yOTYwOlxcdFxcdGxvbmcgcmV0dmFsLCBnYmxfcmVzdl9nZXQ7XFxuMjk2MTpcXHRcXHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XFxuMjk2MjpcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xcbjI5NjM6XFx0XFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xcbjI5NjQ6XFx0XFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcXG4yOTY1OlxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xcbjI5NjY6XFx0XFx0dTggYWxsb2NfZmxhZ3MgPSAwO1xcbjI5Njc6XFx0XFx0aW50IG5pZDtcXG4yOTY4OlxcdFxcdGludCByZXQ7XFxuMjk2OTpcXHRcXG4yOTcwOlxcdFxcdC8qIFdoZXRoZXIgd2UgbmVlZCBhIHNlcGFyYXRlIHBlci12bWEgcmVzZXJ2YXRpb24/ICovXFxuMjk3MTpcXHRcXHRpZiAoY293X2Zyb21fb3duZXIpIHtcXG4yOTcyOlxcdFxcdFxcdC8qXFxuMjk3MzpcXHRcXHRcXHQgKiBTcGVjaWFsIGNhc2UhICBTaW5jZSBpdCdzIGEgQ29XIG9uIHRvcCBvZiBhIHJlc2VydmVkXFxuMjk3NDpcXHRcXHRcXHQgKiBwYWdlLCB0aGUgcHJpdmF0ZSByZXN2IG1hcCBkb2Vzbid0IGNvdW50LiAgU28gaXQgY2Fubm90XFxuMjk3NTpcXHRcXHRcXHQgKiBjb25zdW1lIHRoZSBwZXItdm1hIHJlc3YgbWFwIGV2ZW4gaWYgaXQncyByZXNlcnZlZC5cXG4yOTc2OlxcdFxcdFxcdCAqL1xcbjI5Nzc6XFx0XFx0XFx0bWFwX2NoZyA9IE1BUF9DSEdfRU5GT1JDRUQ7XFxuMjk3ODpcXHRcXHR9IGVsc2Uge1xcbjI5Nzk6XFx0XFx0XFx0LypcXG4yOTgwOlxcdFxcdFxcdCAqIEV4YW1pbmUgdGhlIHJlZ2lvbi9yZXNlcnZlIG1hcCB0byBkZXRlcm1pbmUgaWYgdGhlIHByb2Nlc3NcXG4yOTgxOlxcdFxcdFxcdCAqIGhhcyBhIHJlc2VydmF0aW9uIGZvciB0aGUgcGFnZSB0byBiZSBhbGxvY2F0ZWQuICBBIHJldHVyblxcbjI5ODI6XFx0XFx0XFx0ICogY29kZSBvZiB6ZXJvIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyAobm8gY2hhbmdlKS5cXG4yOTgzOlxcdFxcdFxcdCAqL1xcbjI5ODQ6XFx0XFx0XFx0cmV0dmFsID0gdm1hX25lZWRzX3Jlc2VydmF0aW9uKGgsIHZtYSwgYWRkcik7XFxuMjk4NTpcXHRcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4yOTg2OlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjI5ODc6XFx0XFx0XFx0bWFwX2NoZyA9IHJldHZhbCA/IE1BUF9DSEdfTkVFREVEIDogTUFQX0NIR19SRVVTRTtcXG4yOTg4OlxcdFxcdH1cXG4yOTg5OlxcdFxcbjI5OTA6XFx0XFx0LypcXG4yOTkxOlxcdFxcdCAqIFdoZXRoZXIgd2UgbmVlZCBhIHNlcGFyYXRlIGdsb2JhbCByZXNlcnZhdGlvbj9cXG4yOTkyOlxcdFxcdCAqXFxuMjk5MzpcXHRcXHQgKiBQcm9jZXNzZXMgdGhhdCBkaWQgbm90IGNyZWF0ZSB0aGUgbWFwcGluZyB3aWxsIGhhdmUgbm9cXG4yOTk0OlxcdFxcdCAqIHJlc2VydmVzIGFzIGluZGljYXRlZCBieSB0aGUgcmVnaW9uL3Jlc2VydmUgbWFwLiBDaGVja1xcbjI5OTU6XFx0XFx0ICogdGhhdCB0aGUgYWxsb2NhdGlvbiB3aWxsIG5vdCBleGNlZWQgdGhlIHN1YnBvb2wgbGltaXQuXFxuMjk5NjpcXHRcXHQgKiBPciBpZiBpdCBjYW4gZ2V0IG9uZSBmcm9tIHRoZSBwb29sIHJlc2VydmF0aW9uIGRpcmVjdGx5LlxcbjI5OTc6XFx0XFx0ICovXFxuMjk5ODpcXHRcXHRpZiAobWFwX2NoZykge1xcbjI5OTk6XFx0XFx0XFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xcbjMwMDA6XFx0XFx0XFx0aWYgKGdibF9yZXN2X2dldCBcXHUwMDNjIDApIHtcXG4zMDAxOlxcdFxcdFxcdFxcdHJldCA9IC1FTk9TUEM7XFxuMzAwMjpcXHRcXHRcXHRcXHRnb3RvIG91dF9lbmRfcmVzZXJ2YXRpb247XFxuMzAwMzpcXHRcXHRcXHR9XFxuMzAwNDpcXHRcXHR9IGVsc2Uge1xcbjMwMDU6XFx0XFx0XFx0LypcXG4zMDA2OlxcdFxcdFxcdCAqIElmIHdlIGhhdmUgdGhlIHZtYSByZXNlcnZhdGlvbiByZWFkeSwgbm8gbmVlZCBmb3IgZXh0cmFcXG4zMDA3OlxcdFxcdFxcdCAqIGdsb2JhbCByZXNlcnZhdGlvbi5cXG4zMDA4OlxcdFxcdFxcdCAqL1xcbjMwMDk6XFx0XFx0XFx0Z2JsX3Jlc3ZfZ2V0ID0gMDtcXG4zMDEwOlxcdFxcdH1cXG4zMDExOlxcdFxcbjMwMTI6XFx0XFx0LypcXG4zMDEzOlxcdFxcdCAqIElmIGFsbG9jYXRpb24gZG9lc24ndCByZXVzZSBhIHJlc2VydmF0aW9uIGluIHRoZSByZXN2X21hcCxcXG4zMDE0OlxcdFxcdCAqIGNoYXJnZSBmb3IgdGhlIHJlc2VydmF0aW9uLlxcbjMwMTU6XFx0XFx0ICovXFxuMzAxNjpcXHRcXHRpZiAobWFwX2NoZyAhPSBNQVBfQ0hHX1JFVVNFKVxcbjMwMTc6XFx0XFx0XFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDtcXG4zMDE4OlxcdFxcbjMwMTk6XFx0XFx0LypcXG4zMDIwOlxcdFxcdCAqIGdibF9yZXN2X2dldCA9PSAwIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyBmb3IgdGhpc1xcbjMwMjE6XFx0XFx0ICogYWxsb2NhdGlvbiwgc28gdHJ5IHRvIHVzZSBpdC5cXG4zMDIyOlxcdFxcdCAqL1xcbjMwMjM6XFx0XFx0aWYgKGdibF9yZXN2X2dldCA9PSAwKVxcbjMwMjQ6XFx0XFx0XFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUztcXG4zMDI1OlxcdFxcbjMwMjY6XFx0XFx0LyogVGFrZXMgcmVmZXJlbmNlIG9uIG1wb2wuICovXFxuMzAyNzpcXHRcXHRuaWQgPSBodWdlX25vZGUodm1hLCBhZGRyLCBnZnAsIFxcdTAwMjZtcG9sLCBcXHUwMDI2bm9kZW1hc2spO1xcbjMwMjg6XFx0XFx0bXBvbGkgPSAoc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCl7XFxuMzAyOTpcXHRcXHRcXHQubmlkID0gbmlkLFxcbjMwMzA6XFx0I2lmZGVmIENPTkZJR19OVU1BXFxuMzAzMTpcXHRcXHRcXHQubW9kZSA9IG1wb2wgPyBtcG9sLVxcdTAwM2Vtb2RlIDogTVBPTF9ERUZBVUxULFxcbjMwMzI6XFx0I2Vsc2VcXG4zMDMzOlxcdFxcdFxcdC5tb2RlID0gTVBPTF9ERUZBVUxULFxcbjMwMzQ6XFx0I2VuZGlmXFxuMzAzNTpcXHRcXHRcXHQubm9kZW1hc2sgPSBub2RlbWFzayxcXG4zMDM2OlxcdFxcdH07XFxuMzAzNzpcXHRcXG4zMDM4OlxcdFxcdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcXHUwMDI2bXBvbGksIGFsbG9jX2ZsYWdzKTtcXG4zMDM5OlxcdFxcbjMwNDA6XFx0XFx0bXBvbF9jb25kX3B1dChtcG9sKTtcXG4zMDQxOlxcdFxcbjMwNDI6XFx0XFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4zMDQzOlxcdFxcdFxcdHJldCA9IFBUUl9FUlIoZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjowMTo1Ny4xNDY5MzQ0ODNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc1NDAzNzYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkZvY3VzaW5nIG9uIGEgU3BlY2lmaWMgQ29kZSBCbG9jayoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIGRyaWxsIGRvd24gYW5kIGFuYWx5emUgYSBzcGVjaWZpYyBjaHVuayBvZiBjb2RlLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IHRoZSBpc3N1ZSBtaWdodCBiZSBjb250YWluZWQgd2l0aGluIGxpbmVzIDMwNDQgdGhyb3VnaCAzMDgwLiBUaGlzIGlzIGEgdGFyZ2V0ZWQgYXBwcm9hY2g7IGl0IHN1Z2dlc3RzIGEgc3VzcGljaW9uIG9mIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIEl0IGNvdWxkIGJlIGJhc2VkIG9uIHByZXZpb3VzIGRlYnVnZ2luZywgcmVjZW50IGNoYW5nZXMsIG9yIGV2ZW4ganVzdCBhIGd1dCBmZWVsaW5nIGRlcml2ZWQgZnJvbSB5ZWFycyBvZiBleHBlcmllbmNlLiBJJ20gY2hvb3NpbmcgdG8gaG9uZSBpbiBvbiB0aGlzIHNlY3Rpb24gYmVjYXVzZSwgYmFzZWQgb24gdGhlIGNvbnRleHQgSSd2ZSBzZWVuIHNvIGZhciwgaXQgcHJlc2VudHMgdGhlIGJlc3Qgb3Bwb3J0dW5pdHkgdG8gb2JzZXJ2ZSB0aGUgaW50ZXJhY3Rpb24gYW5kIHBvc3NpYmxlIGVycm9yLiBUaGlzIGlzIGEgaGlnaGx5IGZvY3VzZWQgZGlhZ25vc3RpYyBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM2NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6NTguOTAwOTc2MDIyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzA0NCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzA0NDpcXHRcXHRcXHRnb3RvIG91dF9zdWJwb29sX3B1dDtcXG4zMDQ1OlxcdFxcdH1cXG4zMDQ2OlxcdFxcbjMwNDc6XFx0XFx0aHVnZXRsYl9zZXRfZm9saW9fc3VicG9vbChmb2xpbywgc3Bvb2wpO1xcbjMwNDg6XFx0XFxuMzA0OTpcXHRcXHRpZiAobWFwX2NoZyAhPSBNQVBfQ0hHX0VORk9SQ0VEKSB7XFxuMzA1MDpcXHRcXHRcXHQvKiBjb21taXQoKSBpcyBvbmx5IG5lZWRlZCBpZiB0aGUgbWFwX2NoZyBpcyBub3QgZW5mb3JjZWQgKi9cXG4zMDUxOlxcdFxcdFxcdHJldHZhbCA9IHZtYV9jb21taXRfcmVzZXJ2YXRpb24oaCwgdm1hLCBhZGRyKTtcXG4zMDUyOlxcdFxcdFxcdC8qXFxuMzA1MzpcXHRcXHRcXHQgKiBDaGVjayBmb3IgcG9zc2libGUgcmFjZSBjb25kaXRpb25zLiBXaGVuIGl0IGhhcHBlbnMuLlxcbjMwNTQ6XFx0XFx0XFx0ICogVGhlIHBhZ2Ugd2FzIGFkZGVkIHRvIHRoZSByZXNlcnZhdGlvbiBtYXAgYmV0d2VlblxcbjMwNTU6XFx0XFx0XFx0ICogdm1hX25lZWRzX3Jlc2VydmF0aW9uIGFuZCB2bWFfY29tbWl0X3Jlc2VydmF0aW9uLlxcbjMwNTY6XFx0XFx0XFx0ICogVGhpcyBpbmRpY2F0ZXMgYSByYWNlIHdpdGggaHVnZXRsYl9yZXNlcnZlX3BhZ2VzLlxcbjMwNTc6XFx0XFx0XFx0ICogQWRqdXN0IGZvciB0aGUgc3VicG9vbCBjb3VudCBpbmNyZW1lbnRlZCBhYm92ZSBBTkRcXG4zMDU4OlxcdFxcdFxcdCAqIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBmb3IgdGhlIHNhbWUgcGFnZS5cXHRBbHNvLFxcbjMwNTk6XFx0XFx0XFx0ICogdGhlIHJlc2VydmF0aW9uIGNvdW50IGFkZGVkIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1xcbjMwNjA6XFx0XFx0XFx0ICogbm8gbG9uZ2VyIGFwcGxpZXMuXFxuMzA2MTpcXHRcXHRcXHQgKi9cXG4zMDYyOlxcdFxcdFxcdGlmICh1bmxpa2VseShtYXBfY2hnID09IE1BUF9DSEdfTkVFREVEIFxcdTAwMjZcXHUwMDI2IHJldHZhbCA9PSAwKSkge1xcbjMwNjM6XFx0XFx0XFx0XFx0bG9uZyByc3ZfYWRqdXN0O1xcbjMwNjQ6XFx0XFxuMzA2NTpcXHRcXHRcXHRcXHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xcbjMwNjY6XFx0XFx0XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtcnN2X2FkanVzdCk7XFxuMzA2NzpcXHRcXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbjMwNjg6XFx0XFx0XFx0XFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9fcnN2ZChcXG4zMDY5OlxcdFxcdFxcdFxcdCAgICBoc3RhdGVfaW5kZXgoaCksIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGZvbGlvKTtcXG4zMDcwOlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4zMDcxOlxcdFxcdFxcdH1cXG4zMDcyOlxcdFxcdH1cXG4zMDczOlxcdFxcbjMwNzQ6XFx0XFx0cmV0dXJuIGZvbGlvO1xcbjMwNzU6XFx0XFxuMzA3NjpcXHRvdXRfc3VicG9vbF9wdXQ6XFxuMzA3NzpcXHRcXHRpZiAobWFwX2NoZykge1xcbjMwNzg6XFx0XFx0XFx0bG9uZyBnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxuMzA3OTpcXHRcXG4zMDgwOlxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0IC0gZ2JsX3Jlc3ZfcHV0KTtcXG4zMDgxOlxcdFxcdH1cXG4zMDgyOlxcdFxcbjMwODM6XFx0b3V0X2VuZF9yZXNlcnZhdGlvbjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6NTguOTAxNDEyOTIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NDA3NzYwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGYsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCAtIERlbHZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGhvdyBodWdlIHBhZ2UgcmVzZXJ2YXRpb25zIGFyZSBoYW5kbGVkLiBUaGUgY29kZSBsb29rcyBsaWtlIGl0J3MgYXJvdW5kIGxpbmVzIDY2NzAgdG8gNjg0MC4gVGhhdCdzIGEgcHJldHR5IHNwZWNpZmljIHJhbmdlLCBzdWdnZXN0aW5nIGEgY29yZSBwaWVjZSBvZiB0aGUgcmVzZXJ2YXRpb24gbG9naWMuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgdGhlIGFjdHVhbCBhbGxvY2F0aW9uIG9mIHRoZSBodWdlIHBhZ2VzIHRha2VzIHBsYWNlLCBvciBwZXJoYXBzIHdoZXJlIHRoZSBib29ra2VlcGluZyBpcyBkb25lLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IGxlYWtzIHBvc3NpYmxlIHRoZXJlLiBHaXZlbiB0aGF0IGl0J3MgdGhlIHJlc2VydmF0aW9uIHByb2Nlc3MsIEknbSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGBhbGxvY19wYWdlc2Agb3Igc29tZXRoaW5nIHNpbWlsYXIuIEknbGwgYmUgbG9va2luZyB0byBzZWUgaWYgdGhlIGFsbG9jYXRpb24gaXMgYXRvbWljIGFuZCBwcm9wZXJseSBzeW5jaHJvbml6ZWQgaW4gYSBtdWx0aS10aHJlYWRlZCBzeXN0ZW0uIEknbGwgY2hlY2sgaG93IGVycm9ycyBhcmUgaGFuZGxlZCAtIGRvZXMgaXQgZ3JhY2VmdWxseSBmYWxsIGJhY2sgaWYgaXQgY2FuJ3QgcmVzZXJ2ZSB0aGUgcmVxdWVzdGVkIHBhZ2VzPyBBcmUgcmVzb3VyY2VzIGZyZWVkIGNvcnJlY3RseSB3aGVuIHRoZSByZXNlcnZhdGlvbiBpcyBubyBsb25nZXIgbmVlZGVkPyBJIHN1c3BlY3QgSSdsbCBiZSBkaWdnaW5nIGludG8gdGhlIGFsbG9jYXRpb24gZmxhZ3MgYXMgd2VsbCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgdW5kZXIgZGlmZmVyZW50IHdvcmtsb2Fkcy4gVGhpcyB3aWxsIGFsc28gZ2l2ZSBtZSBhIGNsdWUgYXMgdG8gaG93IGR5bmFtaWMgdGhlIHJlc2VydmF0aW9uIGxvZ2ljIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI1NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDI6MDEuNTQyMTkyMjQzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjY3MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjY3MDpcXHRcXG42NjcxOlxcdGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuNjY3MjpcXHRcXHRcXHRsb25nIGZyb20sIGxvbmcgdG8sXFxuNjY3MzpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG42Njc0OlxcdFxcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncylcXG42Njc1OlxcdHtcXG42Njc2OlxcdFxcdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xO1xcbjY2Nzc6XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XFxuNjY3ODpcXHRcXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX2lub2RlKGlub2RlKTtcXG42Njc5OlxcdFxcdHN0cnVjdCByZXN2X21hcCAqcmVzdl9tYXA7XFxuNjY4MDpcXHRcXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMO1xcbjY2ODE6XFx0XFx0bG9uZyBnYmxfcmVzdl9hY2N0ZWQgPSAwO1xcbjY2ODI6XFx0XFx0bG9uZyByZWdpb25zX25lZWRlZCA9IDA7XFxuNjY4MzpcXHRcXHRsb25nIGdibF9yZXN2X2dldDtcXG42Njg0OlxcdFxcdGxvbmcgZ2JsX3Jlc3ZfcHV0O1xcbjY2ODU6XFx0XFx0aW50IGVycjtcXG42Njg2OlxcdFxcbjY2ODc6XFx0XFx0LyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovXFxuNjY4ODpcXHRcXHRpZiAoZnJvbSBcXHUwMDNlIHRvKSB7XFxuNjY4OTpcXHRcXHRcXHRWTV9XQVJOKDEsIFxcXCIlcyBjYWxsZWQgd2l0aCBhIG5lZ2F0aXZlIHJhbmdlXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuNjY5MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42NjkxOlxcdFxcdH1cXG42NjkyOlxcdFxcbjY2OTM6XFx0XFx0LypcXG42Njk0OlxcdFxcdCAqIHZtYSBzcGVjaWZpYyBzZW1hcGhvcmUgdXNlZCBmb3IgcG1kIHNoYXJpbmcgYW5kIGZhdWx0L3RydW5jYXRpb25cXG42Njk1OlxcdFxcdCAqIHN5bmNocm9uaXphdGlvblxcbjY2OTY6XFx0XFx0ICovXFxuNjY5NzpcXHRcXHRodWdldGxiX3ZtYV9sb2NrX2FsbG9jKHZtYSk7XFxuNjY5ODpcXHRcXG42Njk5OlxcdFxcdC8qXFxuNjcwMDpcXHRcXHQgKiBPbmx5IGFwcGx5IGh1Z2VwYWdlIHJlc2VydmF0aW9uIGlmIGFza2VkLiBBdCBmYXVsdCB0aW1lLCBhblxcbjY3MDE6XFx0XFx0ICogYXR0ZW1wdCB3aWxsIGJlIG1hZGUgZm9yIFZNX05PUkVTRVJWRSB0byBhbGxvY2F0ZSBhIHBhZ2VcXG42NzAyOlxcdFxcdCAqIHdpdGhvdXQgdXNpbmcgcmVzZXJ2ZXNcXG42NzAzOlxcdFxcdCAqL1xcbjY3MDQ6XFx0XFx0aWYgKHZtYV9mbGFnc190ZXN0KFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9OT1JFU0VSVkVfQklUKSlcXG42NzA1OlxcdFxcdFxcdHJldHVybiAwO1xcbjY3MDY6XFx0XFxuNjcwNzpcXHRcXHQvKlxcbjY3MDg6XFx0XFx0ICogU2hhcmVkIG1hcHBpbmdzIGJhc2UgdGhlaXIgcmVzZXJ2YXRpb24gb24gdGhlIG51bWJlciBvZiBwYWdlcyB0aGF0XFxuNjcwOTpcXHRcXHQgKiBhcmUgYWxyZWFkeSBhbGxvY2F0ZWQgb24gYmVoYWxmIG9mIHRoZSBmaWxlLiBQcml2YXRlIG1hcHBpbmdzIG5lZWRcXG42NzEwOlxcdFxcdCAqIHRvIHJlc2VydmUgdGhlIGZ1bGwgYXJlYSBldmVuIGlmIHJlYWQtb25seSBhcyBtcHJvdGVjdCgpIG1heSBiZVxcbjY3MTE6XFx0XFx0ICogY2FsbGVkIHRvIG1ha2UgdGhlIG1hcHBpbmcgcmVhZC13cml0ZS4gQXNzdW1lICF2bWEgaXMgYSBzaG0gbWFwcGluZ1xcbjY3MTI6XFx0XFx0ICovXFxuNjcxMzpcXHRcXHRpZiAoIXZtYSB8fCB2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpKSB7XFxuNjcxNDpcXHRcXHRcXHQvKlxcbjY3MTU6XFx0XFx0XFx0ICogcmVzdl9tYXAgY2FuIG5vdCBiZSBOVUxMIGFzIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBpcyBvbmx5XFxuNjcxNjpcXHRcXHRcXHQgKiBjYWxsZWQgZm9yIGlub2RlcyBmb3Igd2hpY2ggcmVzdl9tYXBzIHdlcmUgY3JlYXRlZCAoc2VlXFxuNjcxNzpcXHRcXHRcXHQgKiBodWdldGxiZnNfZ2V0X2lub2RlKS5cXG42NzE4OlxcdFxcdFxcdCAqL1xcbjY3MTk6XFx0XFx0XFx0cmVzdl9tYXAgPSBpbm9kZV9yZXN2X21hcChpbm9kZSk7XFxuNjcyMDpcXHRcXG42NzIxOlxcdFxcdFxcdGNoZyA9IHJlZ2lvbl9jaGcocmVzdl9tYXAsIGZyb20sIHRvLCBcXHUwMDI2cmVnaW9uc19uZWVkZWQpO1xcbjY3MjI6XFx0XFx0fSBlbHNlIHtcXG42NzIzOlxcdFxcdFxcdC8qIFByaXZhdGUgbWFwcGluZy4gKi9cXG42NzI0OlxcdFxcdFxcdHJlc3ZfbWFwID0gcmVzdl9tYXBfYWxsb2MoKTtcXG42NzI1OlxcdFxcdFxcdGlmICghcmVzdl9tYXApIHtcXG42NzI2OlxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuNjcyNzpcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuNjcyODpcXHRcXHRcXHR9XFxuNjcyOTpcXHRcXG42NzMwOlxcdFxcdFxcdGNoZyA9IHRvIC0gZnJvbTtcXG42NzMxOlxcdFxcbjY3MzI6XFx0XFx0XFx0c2V0X3ZtYV9yZXN2X21hcCh2bWEsIHJlc3ZfbWFwKTtcXG42NzMzOlxcdFxcdFxcdHNldF92bWFfcmVzdl9mbGFncyh2bWEsIEhQQUdFX1JFU1ZfT1dORVIpO1xcbjY3MzQ6XFx0XFx0fVxcbjY3MzU6XFx0XFxuNjczNjpcXHRcXHRpZiAoY2hnIFxcdTAwM2MgMCkge1xcbjY3Mzc6XFx0XFx0XFx0LyogcmVnaW9uX2NoZygpIGFib3ZlIGNhbiByZXR1cm4gLUVOT01FTSAqL1xcbjY3Mzg6XFx0XFx0XFx0ZXJyID0gKGNoZyA9PSAtRU5PTUVNKSA/IC1FTk9NRU0gOiAtRUlOVkFMO1xcbjY3Mzk6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjY3NDA6XFx0XFx0fVxcbjY3NDE6XFx0XFxuNjc0MjpcXHRcXHRlcnIgPSBodWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwX3JzdmQoaHN0YXRlX2luZGV4KGgpLFxcbjY3NDM6XFx0XFx0XFx0XFx0XFx0Y2hnICogcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgXFx1MDAyNmhfY2cpO1xcbjY3NDQ6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuNjc0NTpcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuNjc0NjpcXHRcXG42NzQ3OlxcdFxcdGlmICh2bWEgXFx1MDAyNlxcdTAwMjYgIXZtYV90ZXN0KHZtYSwgVk1BX01BWVNIQVJFX0JJVCkgXFx1MDAyNlxcdTAwMjYgaF9jZykge1xcbjY3NDg6XFx0XFx0XFx0LyogRm9yIHByaXZhdGUgbWFwcGluZ3MsIHRoZSBodWdldGxiX2Nncm91cCB1bmNoYXJnZSBpbmZvIGhhbmdzXFxuNjc0OTpcXHRcXHRcXHQgKiBvZiB0aGUgcmVzdl9tYXAuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAyOjAxLjU0MjYyNzQ0M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjgxOTE2Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIHRhcmdldGluZyBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHVzaW5nIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIENvZGUgU2VjdGlvbiA2NzUwLTY4NDAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBsaW5lcyA2NzUwIHRocm91Z2ggNjg0MC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgY29udGV4dD8gV2hhdCBtb2R1bGUgb3IgZnVuY3Rpb24gYXJlIHdlIHdpdGhpbj8gVGhhdCByYW5nZSB1c3VhbGx5IHBvaW50cyB0byBhIHNpZ25pZmljYW50IGJsb2NrIG9mIGNvZGUsIHByb2JhYmx5IGhhbmRsaW5nIGEgY3JpdGljYWwgcHJvY2VzcyBvciBkYXRhIHN0cnVjdHVyZS4gSSdtIGFscmVhZHkgbWVudGFsbHkgZmxhZ2dpbmcgdGhpcyBhcyBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS1zZW5zaXRpdmUsIG9yIG1heWJlIGRlYWxpbmcgd2l0aCBhIHRyaWNreSBlZGdlIGNhc2UgYmFzZWQgb24gd2hlcmUgaXQgZmFsbHMgaW4gdGhlIGJyb2FkZXIgZmlsZS5cblxuTGV0J3MgYXNzdW1lLCBmb3IgdGhlIHNha2Ugb2YgYXJndW1lbnQsIHRoaXMgaXMgd2l0aGluIHRoZSBgbmV0d29ya19oYW5kbGVyYCBtb2R1bGUuIE15IGZpcnN0IHN0ZXAgd2lsbCBiZSB0byBxdWlja2x5IHNjYW4gdGhlIGxpbmVzIGZvciBhbnkgaW1tZWRpYXRlbHkgb2J2aW91cyByZWQgZmxhZ3M6IG5lc3RlZCBsb29wcywgZXhjZXNzaXZlIG1lbW9yeSBhbGxvY2F0aW9uLCByZWN1cnNpdmUgY2FsbHMsIG9yIGFueXRoaW5nIHRoYXQganVtcHMgb3V0IGFzIGFuIGFudGktcGF0dGVybi4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgaW5lZmZpY2llbnQgYWxnb3JpdGhtcy4gSXMgdGhlcmUgYSBjYWxsIHRvIGEgZGF0YWJhc2UsIGFuZCBpZiBzbywgaG93IGlzIHRoZSBxdWVyeSBjb25zdHJ1Y3RlZD8gQW55IGNoYW5jZSBvZiBTUUwgaW5qZWN0aW9uIHZ1bG5lcmFiaWxpdGllcz9cblxuR2l2ZW4gdGhlIGxpbmUgbnVtYmVycywgSSdkIGV4cGVjdCB0byBzZWUgYXQgbGVhc3QgYSBjb3VwbGUgb2YgZnVuY3Rpb25zIGNhbGxlZCBvciBkZWNsYXJhdGlvbnMuIEFyZSB0aGV5IHdlbGwtbmFtZWQ/IERvIHRoZXkgZm9sbG93IHRoZSBjb252ZW50aW9ucyBvZiB0aGUgcHJvamVjdD8gQmFkbHkgbmFtZWQgZnVuY3Rpb25zIGFyZSBhIGh1Z2Ugd2FybmluZyBzaWduLCBzdWdnZXN0aW5nIGVpdGhlciBhIGxhY2sgb2YgZm9jdXMgb3Igc29tZSBzbG9wcHkgd29yay4gSSdsbCBhbHNvIGJlIGNoZWNraW5nIGZvciBhbnkgdW5kb2N1bWVudGVkIHNpZGUgZWZmZWN0cy5cblxuRnVydGhlcm1vcmUsIEknbSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGltcGxlbWVudCBzb21lIGFzcGVjdCBvZiBhIHBhcnRpY3VsYXIgZnVuY3Rpb24sIG9yIGV2ZW4gYSBzeXN0ZW0uIEkgd2lsbCBsb29rIGZvciBjYWxscyB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvciBvdGhlciBsaWJyYXJpZXMsIGFuZCB3aGF0IHNvcnQgb2YgYXJndW1lbnRzIGFyZSBiZWluZyBwYXNzZWQsIGFuZCB3aGVyZSB0aGV5IGFyZSBiZWluZyB1c2VkLiBBcmUgdGhleSBwcm90ZWN0ZWQgYWdhaW5zdCBpbmplY3Rpb24/XG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcuIElzIGl0IHJvYnVzdD8gRG9lcyBpdCBsb2cgZXJyb3JzIHByb3Blcmx5PyBPciBpcyBpdCBhIHNlcmllcyBvZiBjYXRjaC1hbGwgYHRyeS4uLmV4Y2VwdGAgYmxvY2tzIHRoYXQgaGlkZSB1bmRlcmx5aW5nIGlzc3Vlcz8gUHJvcGVybHkgaGFuZGxpbmcgZXJyb3JzIGlzIHZpdGFsLlxuXG5GaW5hbGx5LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBmb3IgYW55IGNvbW1lbnRzLiBBcmUgdGhlcmUgY2xlYXIgZXhwbGFuYXRpb25zIG9mIHRoZSBsb2dpYz8gT3IgaXMgaXQgYSB3YWxsIG9mIHVuY29tbWVudGVkIGNvZGUgdGhhdCByZXF1aXJlcyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjYWxsIGdyYXBocyB0byB1bmRlcnN0YW5kPyBUaGUgYmVzdCBjb21tZW50cyBjbGVhcmx5IHN0YXRlIHRoZSBpbnRlbnQsIGVzcGVjaWFsbHkgZm9yIGFueSBjb21wbGV4LCBvciB1bnVzdWFsIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODQ5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjowMjowNC44MjQ1NDY0NzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIyNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2V0bGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NzUwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NzUwOlxcdFxcdFxcdCAqL1xcbjY3NTE6XFx0XFx0XFx0cmVzdl9tYXBfc2V0X2h1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2luZm8ocmVzdl9tYXAsIGhfY2csIGgpO1xcbjY3NTI6XFx0XFx0fVxcbjY3NTM6XFx0XFxuNjc1NDpcXHRcXHQvKlxcbjY3NTU6XFx0XFx0ICogVGhlcmUgbXVzdCBiZSBlbm91Z2ggcGFnZXMgaW4gdGhlIHN1YnBvb2wgZm9yIHRoZSBtYXBwaW5nLiBJZlxcbjY3NTY6XFx0XFx0ICogdGhlIHN1YnBvb2wgaGFzIGEgbWluaW11bSBzaXplLCB0aGVyZSBtYXkgYmUgc29tZSBnbG9iYWxcXG42NzU3OlxcdFxcdCAqIHJlc2VydmF0aW9ucyBhbHJlYWR5IGluIHBsYWNlIChnYmxfcmVzZXJ2ZSkuXFxuNjc1ODpcXHRcXHQgKi9cXG42NzU5OlxcdFxcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xcbjY3NjA6XFx0XFx0aWYgKGdibF9yZXN2X2dldCBcXHUwMDNjIDApIHtcXG42NzYxOlxcdFxcdFxcdGVyciA9IGdibF9yZXN2X2dldDtcXG42NzYyOlxcdFxcdFxcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDtcXG42NzYzOlxcdFxcdH1cXG42NzY0OlxcdFxcbjY3NjU6XFx0XFx0LypcXG42NzY2OlxcdFxcdCAqIENoZWNrIGVub3VnaCBodWdlcGFnZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIHJlc2VydmF0aW9uLlxcbjY3Njc6XFx0XFx0ICogSGFuZCB0aGUgcGFnZXMgYmFjayB0byB0aGUgc3VicG9vbCBpZiB0aGVyZSBhcmUgbm90XFxuNjc2ODpcXHRcXHQgKi9cXG42NzY5OlxcdFxcdGVyciA9IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0KTtcXG42NzcwOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjY3NzE6XFx0XFx0XFx0Z290byBvdXRfcHV0X3BhZ2VzO1xcbjY3NzI6XFx0XFx0Z2JsX3Jlc3ZfYWNjdGVkID0gZ2JsX3Jlc3ZfZ2V0O1xcbjY3NzM6XFx0XFxuNjc3NDpcXHRcXHQvKlxcbjY3NzU6XFx0XFx0ICogQWNjb3VudCBmb3IgdGhlIHJlc2VydmF0aW9ucyBtYWRlLiBTaGFyZWQgbWFwcGluZ3MgcmVjb3JkIHJlZ2lvbnNcXG42Nzc2OlxcdFxcdCAqIHRoYXQgaGF2ZSByZXNlcnZhdGlvbnMgYXMgdGhleSBhcmUgc2hhcmVkIGJ5IG11bHRpcGxlIFZNQXMuXFxuNjc3NzpcXHRcXHQgKiBXaGVuIHRoZSBsYXN0IFZNQSBkaXNhcHBlYXJzLCB0aGUgcmVnaW9uIG1hcCBzYXlzIGhvdyBtdWNoXFxuNjc3ODpcXHRcXHQgKiB0aGUgcmVzZXJ2YXRpb24gd2FzIGFuZCB0aGUgcGFnZSBjYWNoZSB0ZWxscyBob3cgbXVjaCBvZlxcbjY3Nzk6XFx0XFx0ICogdGhlIHJlc2VydmF0aW9uIHdhcyBjb25zdW1lZC4gUHJpdmF0ZSBtYXBwaW5ncyBhcmUgcGVyLVZNQSBhbmRcXG42NzgwOlxcdFxcdCAqIG9ubHkgdGhlIGNvbnN1bWVkIHJlc2VydmF0aW9ucyBhcmUgdHJhY2tlZC4gV2hlbiB0aGUgVk1BXFxuNjc4MTpcXHRcXHQgKiBkaXNhcHBlYXJzLCB0aGUgb3JpZ2luYWwgcmVzZXJ2YXRpb24gaXMgdGhlIFZNQSBzaXplIGFuZCB0aGVcXG42NzgyOlxcdFxcdCAqIGNvbnN1bWVkIHJlc2VydmF0aW9ucyBhcmUgc3RvcmVkIGluIHRoZSBtYXAuIEhlbmNlLCBub3RoaW5nXFxuNjc4MzpcXHRcXHQgKiBlbHNlIGhhcyB0byBiZSBkb25lIGZvciBwcml2YXRlIG1hcHBpbmdzIGhlcmVcXG42Nzg0OlxcdFxcdCAqL1xcbjY3ODU6XFx0XFx0aWYgKCF2bWEgfHwgdm1hX3Rlc3Qodm1hLCBWTUFfTUFZU0hBUkVfQklUKSkge1xcbjY3ODY6XFx0XFx0XFx0YWRkID0gcmVnaW9uX2FkZChyZXN2X21hcCwgZnJvbSwgdG8sIHJlZ2lvbnNfbmVlZGVkLCBoLCBoX2NnKTtcXG42Nzg3OlxcdFxcbjY3ODg6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGFkZCBcXHUwMDNjIDApKSB7XFxuNjc4OTpcXHRcXHRcXHRcXHRlcnIgPSBhZGQ7XFxuNjc5MDpcXHRcXHRcXHRcXHRnb3RvIG91dF9wdXRfcGFnZXM7XFxuNjc5MTpcXHRcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KGNoZyBcXHUwMDNlIGFkZCkpIHtcXG42NzkyOlxcdFxcdFxcdFxcdC8qXFxuNjc5MzpcXHRcXHRcXHRcXHQgKiBwYWdlcyBpbiB0aGlzIHJhbmdlIHdlcmUgYWRkZWQgdG8gdGhlIHJlc2VydmVcXG42Nzk0OlxcdFxcdFxcdFxcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXFxuNjc5NTpcXHRcXHRcXHRcXHQgKiBpbmRpY2F0ZXMgYSByYWNlIHdpdGggYWxsb2NfaHVnZXRsYl9mb2xpby4gIEFkanVzdFxcbjY3OTY6XFx0XFx0XFx0XFx0ICogdGhlIHN1YnBvb2wgYW5kIHJlc2VydmUgY291bnRzIG1vZGlmaWVkIGFib3ZlXFxuNjc5NzpcXHRcXHRcXHRcXHQgKiBiYXNlZCBvbiB0aGUgZGlmZmVyZW5jZS5cXG42Nzk4OlxcdFxcdFxcdFxcdCAqL1xcbjY3OTk6XFx0XFx0XFx0XFx0bG9uZyByc3ZfYWRqdXN0O1xcbjY4MDA6XFx0XFxuNjgwMTpcXHRcXHRcXHRcXHQvKlxcbjY4MDI6XFx0XFx0XFx0XFx0ICogaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoKSB3aWxsIHB1dCB0aGVcXG42ODAzOlxcdFxcdFxcdFxcdCAqIHJlZmVyZW5jZSB0byBoX2NnLVxcdTAwM2Vjc3MuIFNlZSBjb21tZW50IGJlbG93IGZvciBkZXRhaWwuXFxuNjgwNDpcXHRcXHRcXHRcXHQgKi9cXG42ODA1OlxcdFxcdFxcdFxcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKFxcbjY4MDY6XFx0XFx0XFx0XFx0XFx0aHN0YXRlX2luZGV4KGgpLFxcbjY4MDc6XFx0XFx0XFx0XFx0XFx0KGNoZyAtIGFkZCkgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcXG42ODA4OlxcdFxcbjY4MDk6XFx0XFx0XFx0XFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLFxcbjY4MTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2hnIC0gYWRkKTtcXG42ODExOlxcdFxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xcbjY4MTI6XFx0XFx0XFx0fSBlbHNlIGlmIChoX2NnKSB7XFxuNjgxMzpcXHRcXHRcXHRcXHQvKlxcbjY4MTQ6XFx0XFx0XFx0XFx0ICogVGhlIGZpbGVfcmVnaW9ucyB3aWxsIGhvbGQgdGhlaXIgb3duIHJlZmVyZW5jZSB0b1xcbjY4MTU6XFx0XFx0XFx0XFx0ICogaF9jZy1cXHUwMDNlY3NzLiBTbyB3ZSBzaG91bGQgcmVsZWFzZSB0aGUgcmVmZXJlbmNlIGhlbGRcXG42ODE2OlxcdFxcdFxcdFxcdCAqIHZpYSBodWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwX3JzdmQoKSB3aGVuIHdlIGFyZVxcbjY4MTc6XFx0XFx0XFx0XFx0ICogZG9uZS5cXG42ODE4OlxcdFxcdFxcdFxcdCAqL1xcbjY4MTk6XFx0XFx0XFx0XFx0aHVnZXRsYl9jZ3JvdXBfcHV0X3JzdmRfY2dyb3VwKGhfY2cpO1xcbjY4MjA6XFx0XFx0XFx0fVxcbjY4MjE6XFx0XFx0fVxcbjY4MjI6XFx0XFx0cmV0dXJuIGNoZztcXG42ODIzOlxcdFxcbjY4MjQ6XFx0IG91dF9wdXRfcGFnZXM6XFxuNjgyNTpcXHRcXHQvKlxcbjY4MjY6XFx0XFx0ICogUmV0dXJuIGFsbCB0aGF0IHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc3VicG9vbCwgbGV0IHN1YnBvb2xcXG42ODI3OlxcdFxcdCAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZVxcbjY4Mjg6XFx0XFx0ICogcmV0dXJuZWQgdG8gdGhlIGdsb2JhbCBwb29sLlxcbjY4Mjk6XFx0XFx0ICovXFxuNjgzMDpcXHRcXHRnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgY2hnKTtcXG42ODMxOlxcdFxcdC8qXFxuNjgzMjpcXHRcXHQgKiBUaGVyZSBtYXkgYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZlxcbjY4MzM6XFx0XFx0ICogcmVzZXJ2YXRpb25zIHRvIGNvbnN1bWUgYW5kIHRoZSBudW1iZXIgdG8gcmVzdG9yZSBub3cgaWZcXG42ODM0OlxcdFxcdCAqIHRoZXJlIGFyZSBtdWx0aXBsZSB0aHJlYWRzIGludGVyYWN0aW5nIHdpdGggdGhlIHN1YnBvb2wgLVxcbjY4MzU6XFx0XFx0ICogcmVzdG9yZSB0aGUgZGlmZmVyZW5jZSwgdGFraW5nIGludG8gYWNjb3VudCBhbnkgZ2xvYmFsXFxuNjgzNjpcXHRcXHQgKiByZXNlcnZhdGlvbnMgYWxyZWFkeSBhY3F1aXJlZC5cXG42ODM3OlxcdFxcdCAqL1xcbjY4Mzg6XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQgLSBnYmxfcmVzdl9hY2N0ZWQpO1xcbjY4Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAyOjA0LjgyNDg3MTc0OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDY0NTAwOTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYmZzIFN1YnBvb2wgQWNjb3VudGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgY29yZSBwdXJwb3NlIG9mIHRoaXMgcGF0Y2g6IHRvIGlyb24gb3V0IHRoZSBzdWJwb29sIGFjY291bnRpbmcgbG9naWMgd2l0aGluIGh1Z2V0bGJmcywgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gbWluaW11bSBhbmQgbWF4aW11bSBsaW1pdHMsIGFuZCBpbXBvcnRhbnRseSwgZW5zdXJpbmcgaXQgYmVoYXZlcyBjb3JyZWN0bHkgdW5kZXIgY29uY3VycmVudCBzY2VuYXJpb3MgYW5kIHdpdGhpbiBgc3RhdGZzYC5cblxuSSdtIHNlZWluZyB0YXJnZXRlZCBmaXhlcyBhbmQgY2xlYW51cHMgYWNyb3NzIHNldmVyYWwgZmlsZXMuIEZpcnN0LCBhIGRvY3VtZW50YXRpb24gdXBkYXRlIGluIGBEb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0YOKAlGFsd2F5cyBnb29kIHRvIGtlZXAgdGhlIGRvY3VtZW50YXRpb24gYWxpZ25lZCB3aXRoIHRoZSBjb2RlLiBUaGVuLCBpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCB0aGUgYGh1Z2V0bGJmc19zdGF0ZnNgIGZ1bmN0aW9uIGdldHMgYSB0d2VhayB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBgbWF4X2hwYWdlcyA9PSAtMWAgc2NlbmFyaW8uIFRoZSB1cGRhdGVkIGNvbW1lbnRzIGluIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAgY2xhcmlmeSB0aGUgdXNlIG9mIGB1c2VkX2hwYWdlc2AuXG5cblRoZSBidWxrIG9mIHRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgaW4gYG1tL2h1Z2V0bGIuY2AuICBJJ20gbm90aW5nIHRoZSBvcHRpbWl6YXRpb25zIGluIGBzdWJwb29sX2lzX2ZyZWVgIChyZXBsYWNpbmcgYnJhbmNoaW5nIHdpdGggYSBkaXJlY3QgY29tcGFyaXNvbiksIGFuZCB0aGUgc2ltcGxpZmljYXRpb25zIGluIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AsIHdoZXJlIHRoZSBsb2dpYyBpcyBjbGFyaWZpZWQgcmVsYXRlZCB0byBgc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMWAuIFRoZSBjcnVjaWFsIHBhcnQgZm9yIG1lIGlzIHRoZSBmaXhlcyBpbiBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgbGltaXRgIGNhbGN1bGF0aW9uIGZvciB0aGUgbWluaW11bSBzaXplIGFjY291bnRpbmcuIFRoZSBhZGp1c3RtZW50IGluIGBhbGxvY19odWdldGxiX2ZvbGlvYCBkdXJpbmcgbWVtb3J5IGFjY291bnRpbmcgb24gZmFpbHVyZSBsb29rcyBpbXBvcnRhbnQgdG9vLiBBbHNvIHRoZSBmaXggaW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgZm9yIHRoZSBgb3V0X3B1dF9wYWdlc2AgY2xlYW51cCBwYXRoLCBlbnN1cmluZyBwcm9wZXIgYWNjb3VudGluZy5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE15IHByaW1hcnkgY29uY2VybnMgYXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zIG9yIHJlYWRzLiBJJ3ZlIHdhbGtlZCB0aHJvdWdoIHRoZSBrZXkgZnVuY3Rpb25zOlxuXG4qICAgSW4gYGh1Z2V0bGJmc19zdGF0ZnNgLCB0aGUgcmVsZXZhbnQgdmFyaWFibGVzIGFwcGVhciB0byBiZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuIGBmcmVlX3BhZ2VzYCBnZXRzIGVpdGhlciAtMSBvciBhIGNhbGN1bGF0ZWQgdmFsdWUgYmFzZWQgb24gZXhpc3RpbmcgZGF0YS4gVGhlIG91dHB1dCBidWZmZXIgYWxzbyBsb29rcyBnb29kLlxuKiAgIEluIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYGdibF9yZXN2X2dldGAgbG9va3MgaW5pdGlhbGl6ZWQgaW4gYWxsIGNvZGUgcGF0aHMuXG4qICAgSW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AsIGBnYmxfcmVzdl9hY2N0ZWRgIGlzIGluaXRpYWxpemVkIHRvIDAuIGBnYmxfcmVzdl9nZXRgIGlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBmbG93IHNlZW1zIHNvdW5kIGhlcmUuXG4qICAgSSBjYW4gc2VlIG5vIGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIE5vIGNvcHktdG8tdXNlciBvZiB1bmluaXRpYWxpemVkIG1lbW9yeTsgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzIHBhc3NlZCBhbnl3aGVyZTsgbm8gcGFkZGluZyBsZWFrczsgbm8gc3lzY2FsbCBpbnRlcmZhY2VzIHJldHVybmluZyBrZXJuZWwgbWVtb3J5LiBUaGlzIGlzIGdvb2QuXG5cblRoZSBwb3RlbnRpYWwgcmlza3MsIGZyb20gbXkgZXhwZXJpZW5jZSwgd291bGQgYmUgaW4gaW5jb3JyZWN0IHJlc2VydmF0aW9uIHRyYWNraW5nLiBJbnRlZ2VyIHVuZGVyZmxvd3Mgb3Igb3ZlcmZsb3dzLCBvciBhY2NvdW50aW5nIGRlc3luYyBhcmUgY29uY2VybnMuIFJlc291cmNlIGV4aGF1c3Rpb24gb3IgT09NIG9yIHBhZ2UgYWNjb3VudGluZyBsZWFrcyB3b3VsZCBiZSBhbm90aGVyIHJpc2suIFN0YW5kYXJkIGNvbmN1cnJlbmN5IGlzc3VlcyBhcmUgYWx3YXlzIG9uIG15IG1pbmQsIGJ1dCB0aGVzZSBhcmUgYWxsIHR5cGljYWwgbG9naWMgb3IgYWNjb3VudGluZyBidWdzLlxuXG5Ob3csIGlzIEtNU0FOIG5lZWRlZCBoZXJlPyBBYnNvbHV0ZWx5IG5vdC4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIEtBU0FOL0xPQ0tERVAva2VybmVsIGFzc2VydHMgbGlrZSBWTVxcX0JVR1xcX09OIGV0Yy4sIHdpbGwgY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmVmY291bnRpbmcgaXNzdWVzLiBXZSdyZSBsb29raW5nIGF0IGxvZ2ljYWwgYWNjb3VudGluZyBoZXJlLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgcmVxdWlyZSBLTVNBTi4gVGhlIEtNU0FOUmVhc29uaW5nIGlzIHRoYXQgdW5pbml0aWFsaXplZCByZWFkcyBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcyBhcmVuJ3QgcmVsZXZhbnQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MzksIk91dHB1dFRva2VucyI6MjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDI6MTEuODg5Mzg4MTI0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3VicG9vbCBhY2NvdW50aW5nIGFuZCByZXNlcnZhdGlvbiBsb2dpYyBmb3IgaHVnZXRsYmZzIChpbmNsdWRpbmcgaHVnZXRsYl9zdWJwb29sX2dldF9wYWdlcywgaHVnZXRsYl9zdWJwb29sX3B1dF9wYWdlcywgc3RhdGZzIHJlcG9ydGluZywgYW5kIHJvbGxiYWNrIGhhbmRsaW5nIGluIGFsbG9jX2h1Z2V0bGJfZm9saW8gYW5kIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcykuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChzdWNoIGFzIGdibF9yZXN2X2dldCwgZ2JsX3Jlc3ZfcHV0LCBnYmxfcmVzdl9hY2N0ZWQsIGxpbWl0LCBhbmQgZnJlZV9wYWdlcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhY3Jvc3MgYWxsIGNvbnRyb2wgZmxvdyBwYXRocy4gTm8gbmV3IHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgYWxsb2NhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIG5vIHBhZGRpbmcgYnl0ZXMgYXJlIGV4cG9zZWQsIGFuZCBubyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgcGFzc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb25kaXRpb25hbCBicmFuY2hpbmcuXFxuXFxuUG90ZW50aWFsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgcGFnZSBhY2NvdW50aW5nIGluYWNjdXJhY2llcywgY29uY3VycmVuY3kvc3luY2hyb25pemF0aW9uIHVuZGVyIHJhY2UgY29uZGl0aW9ucywgb3IgbWVtb3J5IGV4aGF1c3Rpb24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdWJwb29sIGFjY291bnRpbmcgYW5kIHJlc2VydmF0aW9uIGxvZ2ljIGZvciBodWdldGxiZnMgKGluY2x1ZGluZyBodWdldGxiX3N1YnBvb2xfZ2V0X3BhZ2VzLCBodWdldGxiX3N1YnBvb2xfcHV0X3BhZ2VzLCBzdGF0ZnMgcmVwb3J0aW5nLCBhbmQgcm9sbGJhY2sgaGFuZGxpbmcgaW4gYWxsb2NfaHVnZXRsYl9mb2xpbyBhbmQgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKS5cXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKHN1Y2ggYXMgZ2JsX3Jlc3ZfZ2V0LCBnYmxfcmVzdl9wdXQsIGdibF9yZXN2X2FjY3RlZCwgbGltaXQsIGFuZCBmcmVlX3BhZ2VzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGFjcm9zcyBhbGwgY29udHJvbCBmbG93IHBhdGhzLiBObyBuZXcgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm8gcGFkZGluZyBieXRlcyBhcmUgZXhwb3NlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBpcyBwYXNzZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZy5cXG5cXG5Qb3RlbnRpYWwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBwYWdlIGFjY291bnRpbmcgaW5hY2N1cmFjaWVzLCBjb25jdXJyZW5jeS9zeW5jaHJvbml6YXRpb24gdW5kZXIgcmFjZSBjb25kaXRpb25zLCBvciBtZW1vcnkgZXhoYXVzdGlvbiwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowx7bp7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 21:59:58 +0000 UTC FinishedAt: 2026-09-09 22:02:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "163169ef-3d75-4bd6-99d5-8b5a1a932fcb" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugepage_subpool_get_pages", "hugepage_subpool_put_pages", "hugetlb_reserve_pages", "alloc_hugetlb_folio", "hugetlbfs_statfs", "hugetlb_unreserve_pages", "hugepage_put_subpool" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJmc19zdGF0ZnMmIzM0OywKICAgICYjMzQ7aHVnZXRsYl91bnJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXBhZ2VfcHV0X3N1YnBvb2wmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3VicG9vbCBhY2NvdW50aW5nIGFuZCByZXNlcnZhdGlvbiBsb2dpYyBmb3IgaHVnZXRsYmZzIChpbmNsdWRpbmcgaHVnZXRsYl9zdWJwb29sX2dldF9wYWdlcywgaHVnZXRsYl9zdWJwb29sX3B1dF9wYWdlcywgc3RhdGZzIHJlcG9ydGluZywgYW5kIHJvbGxiYWNrIGhhbmRsaW5nIGluIGFsbG9jX2h1Z2V0bGJfZm9saW8gYW5kIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcykuXG5cbkFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBvciBtb2RpZmllZCAoc3VjaCBhcyBnYmxfcmVzdl9nZXQsIGdibF9yZXN2X3B1dCwgZ2JsX3Jlc3ZfYWNjdGVkLCBsaW1pdCwgYW5kIGZyZWVfcGFnZXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgYWNyb3NzIGFsbCBjb250cm9sIGZsb3cgcGF0aHMuIE5vIG5ldyBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBubyBwYWRkaW5nIGJ5dGVzIGFyZSBleHBvc2VkLCBhbmQgbm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGlzIHBhc3NlZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29uZGl0aW9uYWwgYnJhbmNoaW5nLlxuXG5Qb3RlbnRpYWwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBwYWdlIGFjY291bnRpbmcgaW5hY2N1cmFjaWVzLCBjb25jdXJyZW5jeS9zeW5jaHJvbml6YXRpb24gdW5kZXIgcmFjZSBjb25kaXRpb25zLCBvciBtZW1vcnkgZXhoYXVzdGlvbiwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGJmcyBzdWJwb29sIGFjY291bnRpbmcgbG9naWMgYW5kIHJlc2VydmF0aW9uIGVycm9yLXVud2luZCBwYXRocyBpbiBtbS9odWdldGxiLmMgYW5kIGZzL2h1Z2V0bGJmcy9pbm9kZS5jLiBTcGVjaWZpY2FsbHksIGl0IGNoYW5nZXMgaG93IGB1c2VkX2hwYWdlc2AgYW5kIGByc3ZfaHBhZ2VzYCBhcmUgdXBkYXRlZCBpbiBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoKWAgYW5kIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcygpYCwgYWx0ZXJzIHN1YnBvb2wgcmVsZWFzZSBjaGVja3MgaW4gYHN1YnBvb2xfaXNfZnJlZSgpYCwgZml4ZXMgc3RhdGZzIGNhbGN1bGF0aW9uIGZvciB1bmJvdW5kZWQgc3VicG9vbHMgaW4gYGh1Z2V0bGJmc19zdGF0ZnMoKWAsIGFuZCByZWZhY3RvcnMgZ2xvYmFsIG1lbW9yeSByZXNlcnZhdGlvbiByb2xsYmFja3MgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW8oKWAgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAuIFRoaXMgbG9naWMgaXMgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBodWdldGxiZnMgZmlsZXN5c3RlbSBtb3VudHMsIGFsbG9jYXRpb25zLCBhbmQgbW1hcCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2EzNzA1NGE3ZmQ5OTZiZTMwZTkwMzY1NTYxN2Y4NTZlZmM3NjZkMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMjI6MDE6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcbmluZGV4IGE0OTExNWRiMThjNzYuLmQyNDQ1ODNmZGNiYzMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG5AQCAtMzE0LDIxICYjNDM7MzE0LDggQEAgaHVnZSBwYWdlcy4gIElmIHRoZXkgY2FuIG5vdCBiZSByZXNlcnZlZCwgdGhlIG1vdW50IGZhaWxzLlxuIFRoZSByb3V0aW5lcyBodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKSBhcmUgY2FsbGVkIHdoZW4gcGFnZXMgYXJlXG4gb2J0YWluZWQgZnJvbSBvciByZWxlYXNlZCBiYWNrIHRvIGEgc3VicG9vbC4gIFRoZXkgcGVyZm9ybSBhbGwgc3VicG9vbFxuIGFjY291bnRpbmcsIGFuZCB0cmFjayBhbnkgcmVzZXJ2YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbC5cbi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMgYXJlIHBhc3NlZCB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgYnkgd2hpY2hcbi10byBhZGp1c3QgdGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudCAoZG93biBmb3IgZ2V0LCB1cCBmb3IgcHV0KS4gIE5vcm1hbGx5LFxuLXRoZXkgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIHRoYXQgd2FzIHBhc3NlZCBvciBhbiBlcnJvciBpZiBub3QgZW5vdWdoIHBhZ2VzXG4tZXhpc3QgaW4gdGhlIHN1YnBvb2wuXG4tXG4tSG93ZXZlciwgaWYgcmVzZXJ2ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbCBhIHJldHVybiB2YWx1ZSBsZXNzXG4tdGhhbiB0aGUgcGFzc2VkIHZhbHVlIG1heSBiZSByZXR1cm5lZC4gIFRoaXMgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB0aGVcbi1udW1iZXIgb2YgYWRkaXRpb25hbCBnbG9iYWwgcG9vbCBhZGp1c3RtZW50cyB3aGljaCBtdXN0IGJlIG1hZGUuICBGb3IgZXhhbXBsZSxcbi1zdXBwb3NlIGEgc3VicG9vbCBjb250YWlucyAzIHJlc2VydmVkIGh1Z2UgcGFnZXMgYW5kIHNvbWVvbmUgYXNrcyBmb3IgNS5cbi1UaGUgMyByZXNlcnZlZCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnBvb2wgY2FuIGJlIHVzZWQgdG8gc2F0aXNmeSBwYXJ0XG4tb2YgdGhlIHJlcXVlc3QuICBCdXQsIDIgcGFnZXMgbXVzdCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBnbG9iYWwgcG9vbHMuICBUb1xuLXJlbGF5IHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGNhbGxlciwgdGhlIHZhbHVlIDIgaXMgcmV0dXJuZWQuICBUaGUgY2FsbGVyXG4taXMgdGhlbiByZXNwb25zaWJsZSBmb3IgYXR0ZW1wdGluZyB0byBvYnRhaW4gdGhlIGFkZGl0aW9uYWwgdHdvIHBhZ2VzIGZyb21cbi10aGUgZ2xvYmFsIHBvb2xzLlxuLVxuJiM0MztodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKSB1c2UgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIHBhc3NlZCB0byBhZGp1c3RcbiYjNDM7dGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudC5cbiBcbiBDT1cgYW5kIFJlc2VydmF0aW9uc1xuID09PT09PT09PT09PT09PT09PT09XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuaW5kZXggMjA5NDdmOGJkMDY1NC4uYWUxZjFmMzE0NzdmYyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuQEAgLTI0NiwxNSAmIzQzOzI0Niw4IEBAIGh1Z2VwYWdlX3N1YnBvb2znmoRtaW5faHBhZ2Vz5a2X5q615Lit6KKr6Lef6Liq44CC5Zyo5oyC6L295pe277yMaHVnZXRsYl9hY2N0X21lXG4g6KKr6LCD55So5Lul6aKE55WZ5oyH5a6a5pWw6YeP55qE5beo6aG144CC5aaC5p6c5a6D5Lus5LiN6IO96KKr6aKE55WZ77yM5oyC6L295bCx5Lya5aSx6LSl44CCXG4gXG4g5b2T5LuO5a2Q5rGg5Lit6I635Y+W5oiW6YeK5pS+6aG16Z2i5pe277yM5Lya6LCD55SoaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCnlh73mlbDjgIJcbi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXPooqvkvKDpgJLnu5nlt6jpobXmlbDph4/vvIzku6XmraTmnaXosIPmlbTlrZDmsaDnmoQg4oCc5bey55So6aG16Z2i4oCdIOiuoeaVsFxuLe+8iGdldOS4uuS4i+mZje+8jHB1dOS4uuS4iuWNh++8ieOAgumAmuW4uOaDheWGteS4i++8jOWmguaenOWtkOaxoOS4reayoeaciei2s+Wkn+eahOmhtemdou+8jOWug+S7rOS8mui/lOWbnuS4juS8oOmAkueahOebuOWQjOeahOWAvOaIllxuLeS4gOS4qumUmeivr+OAglxuLVxuLeeEtuiAjO+8jOWmguaenOmihOeVmeS4juWtkOaxoOebuOWFs+iBlO+8jOWPr+iDveS8mui/lOWbnuS4gOS4quWwj+S6juS8oOmAkuWAvOeahOi/lOWbnuWAvOOAgui/meS4qui/lOWbnuWAvOihqOekuuW/hemhu+i/m+ihjOeahOmineWkluWFqOWxgFxuLeaxoOiwg+aVtOeahOaVsOmHj+OAguS+i+Wmgu+8jOWBh+iuvuS4gOS4quWtkOaxoOWMheWQqzPkuKrpooTnlZnnmoTlt6jpobXvvIzmnInkurropoHmsYI15Liq44CC5LiO5a2Q5rGg55u45YWz55qEM+S4qumihOeVmemhteWPr+S7peeUqOadpVxuLea7oei2s+mDqOWIhuivt+axguOAguS9huaYr++8jOW/hemhu+S7juWFqOWxgOaxoOS4reiOt+W+lzLkuKrpobXpnaLjgILkuLrkuoblkJHosIPnlKjogIXovazovr7ov5nkuIDkv6Hmga/vvIzlsIbov5Tlm57lgLwy44CC54S25ZCO77yM6LCD55SoXG4t6ICF6KaB6LSf6LSj5LuO5YWo5bGA5rGg5Lit6I635Y+W5Y+m5aSW5Lik5Liq6aG16Z2i44CCXG4tXG4mIzQzO+Wug+S7rOi0n+i0o+aJgOacieWtkOaxoOeahOe7n+iuoeaguOeul++8jOW5tui3n+i4quS4juWtkOaxoOebuOWFs+iBlOeahOmihOeVmeOAglxuJiM0MztodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKeWHveaVsOS9v+eUqOS8oOWFpeeahOW3qOmhteaVsOmHj+adpeiwg+aVtOWtkOaxoOeahOKAnOW3sueUqOmhtemdouKAneiuoeaVsOOAglxuIFxuIENPV+WSjOmihOeVmVxuID09PT09PT09PT1cbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCA3NjExYTg0NzBlYTI2Li41MTEzZjc0M2Y2ZmM3IDEwMDY0NFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5AQCAtMTEwOSw4ICYjNDM7MTEwOSwxMiBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuIFxuIFx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2c2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZWxvY2spO1xuIFx0XHRcdGJ1Zi1cdTAwM2VmX2Jsb2NrcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzO1xuLVx0XHRcdGZyZWVfcGFnZXMgPSBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlc1xuLVx0XHRcdFx0LSBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4mIzQzO1x0XHRcdGlmIChzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyA9PSAtMSkge1xuJiM0MztcdFx0XHRcdGZyZWVfcGFnZXMgPSAtMTtcbiYjNDM7XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRmcmVlX3BhZ2VzID0gc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXMgLVxuJiM0MztcdFx0XHRcdFx0ICAgICBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRidWYtXHUwMDNlZl9iYXZhaWwgPSBidWYtXHUwMDNlZl9iZnJlZSA9IGZyZWVfcGFnZXM7XG4gXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRidWYtXHUwMDNlZl9maWxlcyA9IHNiaW5mby1cdTAwM2VtYXhfaW5vZGVzO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbmluZGV4IDE2YzRjNGNhYTEyNmMuLjQ1NTFmZjMwMjM2NDAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0zOSw4ICYjNDM7MzksOCBAQCBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCB7XG4gXHRzcGlubG9ja190IGxvY2s7XG4gXHRsb25nIGNvdW50O1xuIFx0bG9uZyBtYXhfaHBhZ2VzO1x0LyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovXG4tXHRsb25nIHVzZWRfaHBhZ2VzO1x0LyogVXNlZCBjb3VudCBhZ2FpbnN0IG1heGltdW0sIGluY2x1ZGVzICovXG4tXHRcdFx0XHQvKiBib3RoIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXG4mIzQzO1x0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgcGFnZSBjb3VudCwgaW5jbHVkZXMgYm90aCAqL1xuJiM0MztcdFx0XHRcdC8qIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXG4gXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7XG4gXHRsb25nIG1pbl9ocGFnZXM7XHQvKiBNaW5pbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWluaW11bS4gKi9cbiBcdGxvbmcgcnN2X2hwYWdlcztcdC8qIFBhZ2VzIHJlc2VydmVkIGFnYWluc3QgZ2xvYmFsIHBvb2wgdG8gKi9cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDRmNmY1OGJmM2RiNmMuLjExNTFhZDk1OWZmZDUgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEzMCwxMiAmIzQzOzEzMCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzdWJwb29sX2lzX2ZyZWUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuIHtcbiBcdGlmIChzcG9vbC1cdTAwM2Vjb3VudClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuLVx0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXG4tXHRcdHJldHVybiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAwO1xuLVx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEpXG4tXHRcdHJldHVybiBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IHNwb29sLVx1MDAzZW1pbl9ocGFnZXM7XG4gXG4tXHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuQEAgLTE5MywxMyAmIzQzOzE4OSwxOCBAQCB2b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbiBcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbiB9XG4gXG4tLypcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGFsbG9jYXRpbmcgYW5kIHJlc2VydmluZyBwYWdlcy5cbi0gKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGVcbi0gKiByZXF1ZXN0LiAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBieSB3aGljaCB0aGVcbi0gKiBnbG9iYWwgcG9vbHMgbXVzdCBiZSBhZGp1c3RlZCAodXB3YXJkKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBtYXlcbi0gKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZVxuLSAqIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxuJiM0MzsvKipcbiYjNDM7ICogaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMgLSBHZXQgcGFnZXMgZnJvbSBhIHN1YnBvb2xcbiYjNDM7ICogQHNwb29sOiBwb2ludGVyIHRvIHN1YnBvb2wgc3RydWN0dXJlIChtYXkgYmUgTlVMTClcbiYjNDM7ICogQGRlbHRhOiBudW1iZXIgb2YgcGFnZXMgdG8gYWxsb2NhdGUgb3IgcmVzZXJ2ZVxuJiM0MzsgKlxuJiM0MzsgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBhbGxvY2F0aW5nIG9yXG4mIzQzOyAqIHJlc2VydmluZyBAZGVsdGEgaHVnZXBhZ2VzLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBUYWtlcyBzcG9vbC1cdTAwM2Vsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnEoKS5cbiYjNDM7ICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IGNhbm5vdCBiZVxuJiM0MzsgKiAgICAgICAgIHNhdGlzZmllZCBieSB0aGUgc3VicG9vbCwgb3IgLUVOT01FTSBpZiB0aGUgc3VicG9vbCBtYXhpbXVtXG4mIzQzOyAqICAgICAgICAgbGltaXQgd291bGQgYmUgZXhjZWVkZWQuXG4gICovXG4gc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFx0XHRcdFx0ICAgICAgbG9uZyBkZWx0YSlcbkBAIC0yMTEsMTUgJiM0MzsyMTIsMTQgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrKTtcbiBcbi1cdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKSB7XHRcdC8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4tXHRcdGlmICgoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgJiM0MzsgZGVsdGEpIFx1MDAzYz0gc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcylcbi1cdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7XG4tXHRcdGVsc2Uge1xuLVx0XHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdFx0Z290byB1bmxvY2tfcmV0O1xuLVx0XHR9XG4mIzQzO1x0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICYjNDM7IGRlbHRhIFx1MDAzZSBzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byB1bmxvY2tfcmV0O1xuIFx0fVxuIFxuJiM0MztcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICYjNDM7PSBkZWx0YTtcbiYjNDM7XG4gXHQvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xuIFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMpIHtcbiBcdFx0aWYgKGRlbHRhIFx1MDAzZSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzKSB7XG5AQCAtMjQwLDExICYjNDM7MjQwLDE5IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qXG4tICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBmcmVlaW5nIGFuZCB1bnJlc2VydmluZyBwYWdlcy5cbi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBnbG9iYWwgcGFnZSByZXNlcnZhdGlvbnMgdGhhdCBtdXN0IGJlIGRyb3BwZWQuXG4tICogVGhlIHJldHVybiB2YWx1ZSBtYXkgb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSlcbi0gKiBpbiB0aGUgY2FzZSB3aGVyZSBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC5cbiYjNDM7LyoqXG4mIzQzOyAqIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzIC0gUmVsZWFzZSBwYWdlcyBiYWNrIHRvIGEgc3VicG9vbFxuJiM0MzsgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKVxuJiM0MzsgKiBAZGVsdGE6IG51bWJlciBvZiBwYWdlcyB0byBmcmVlIG9yIHVucmVzZXJ2ZVxuJiM0MzsgKlxuJiM0MzsgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBmcmVlaW5nIG9yXG4mIzQzOyAqIHVucmVzZXJ2aW5nIEBkZWx0YSBodWdlcGFnZXMuXG4mIzQzOyAqXG4mIzQzOyAqIENvbnRleHQ6IFRha2VzIHNwb29sLVx1MDAzZWxvY2sgdXNpbmcgc3Bpbl9sb2NrX2lycXNhdmUoKS4gTWF5IHJlbGVhc2VcbiYjNDM7ICogICAgICAgICAgYW5kIGZyZWUgQHNwb29sIGlmIGl0cyB1c2FnZSBjb3VudCBhbmQgcmVmZXJlbmNlcyByZWFjaFxuJiM0MzsgKiAgICAgICAgICB6ZXJvLlxuJiM0MzsgKiBSZXR1cm46IE5vbi1uZWdhdGl2ZSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgdGhlIHN1YnBvb2wgY2Fubm90XG4mIzQzOyAqICAgICAgICAgYWJzb3JiLlxuICAqL1xuIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcdFx0XHRcdCAgICAgICBsb25nIGRlbHRhKVxuQEAgLTI1NywxOSAmIzQzOzI2NSwyNCBAQCBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcdFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cbi1cdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XG4mIzQzO1x0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XG4gXG4gXHQgLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi9cbiBcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyBcdTAwM2Mgc3Bvb2wtXHUwMDNlbWluX2hwYWdlcykge1xuLVx0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyAmIzQzOyBkZWx0YSBcdTAwM2M9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogbGltaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0XG4mIzQzO1x0XHQgKiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcyBzdWJwb29sLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRsb25nIGxpbWl0ID0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAtIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIFx1MDAzYz0gbGltaXQpXG4gXHRcdFx0cmV0ID0gMDtcbiBcdFx0ZWxzZVxuLVx0XHRcdHJldCA9IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgJiM0MzsgZGVsdGEgLSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuJiM0MztcdFx0XHRyZXQgPSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIC0gbGltaXQ7XG4gXG4gXHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgJiM0Mzs9IGRlbHRhO1xuLVx0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyBcdTAwM2Ugc3Bvb2wtXHUwMDNlbWluX2hwYWdlcylcbi1cdFx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcztcbiYjNDM7XHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzIFx1MDAzZSBsaW1pdClcbiYjNDM7XHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IGxpbWl0O1xuIFx0fVxuIFxuIFx0LypcbkBAIC0yOTQ0LDcgJiM0MzsyOTU3LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF92bWEodm1hKTtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0bG9uZyByZXR2YWwsIGdibF9jaGcsIGdibF9yZXNlcnZlO1xuJiM0MztcdGxvbmcgcmV0dmFsLCBnYmxfcmVzdl9nZXQ7XG4gXHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XG4gXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xuIFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuQEAgLTI5ODMsOCAmIzQzOzI5OTYsOCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHQgKiBPciBpZiBpdCBjYW4gZ2V0IG9uZSBmcm9tIHRoZSBwb29sIHJlc2VydmF0aW9uIGRpcmVjdGx5LlxuIFx0ICovXG4gXHRpZiAobWFwX2NoZykge1xuLVx0XHRnYmxfY2hnID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuLVx0XHRpZiAoZ2JsX2NoZyBcdTAwM2MgMCkge1xuJiM0MztcdFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuJiM0MztcdFx0aWYgKGdibF9yZXN2X2dldCBcdTAwM2MgMCkge1xuIFx0XHRcdHJldCA9IC1FTk9TUEM7XG4gXHRcdFx0Z290byBvdXRfZW5kX3Jlc2VydmF0aW9uO1xuIFx0XHR9XG5AQCAtMjk5Myw3ICYjNDM7MzAwNiw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0ICogSWYgd2UgaGF2ZSB0aGUgdm1hIHJlc2VydmF0aW9uIHJlYWR5LCBubyBuZWVkIGZvciBleHRyYVxuIFx0XHQgKiBnbG9iYWwgcmVzZXJ2YXRpb24uXG4gXHRcdCAqL1xuLVx0XHRnYmxfY2hnID0gMDtcbiYjNDM7XHRcdGdibF9yZXN2X2dldCA9IDA7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTMwMDQsMTAgJiM0MzszMDE3LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDtcbiBcbiBcdC8qXG4tXHQgKiBnYmxfY2hnID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXG4mIzQzO1x0ICogZ2JsX3Jlc3ZfZ2V0ID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXG4gXHQgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LlxuIFx0ICovXG4tXHRpZiAoZ2JsX2NoZyA9PSAwKVxuJiM0MztcdGlmIChnYmxfcmVzdl9nZXQgPT0gMClcbiBcdFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUztcbiBcbiBcdC8qIFRha2VzIHJlZmVyZW5jZSBvbiBtcG9sLiAqL1xuQEAgLTMwNjEsMTMgJiM0MzszMDc0LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHJldHVybiBmb2xpbztcbiBcbiBvdXRfc3VicG9vbF9wdXQ6XG4tXHQvKlxuLVx0ICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wmIzM5O3MgcnN2X2hwYWdlcyBpcyB1c2VkXG4tXHQgKiBkdXJpbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMuXG4tXHQgKi9cbi1cdGlmIChtYXBfY2hnIFx1MDAyNlx1MDAyNiAhZ2JsX2NoZykge1xuLVx0XHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbi1cdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xuJiM0MztcdGlmIChtYXBfY2hnKSB7XG4mIzQzO1x0XHRsb25nIGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbiYjNDM7XG4mIzQzO1x0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCAtIGdibF9yZXN2X3B1dCk7XG4gXHR9XG4gXG4gb3V0X2VuZF9yZXNlcnZhdGlvbjpcbkBAIC02NjYzLDEyICYjNDM7NjY3MywxNSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbi1cdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xLCBzcG9vbF9yZXN2LCBnYmxfcmVzdjtcbiYjNDM7XHRsb25nIGNoZyA9IC0xLCBhZGQgPSAtMTtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfaW5vZGUoaW5vZGUpO1xuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF9pbm9kZShpbm9kZSk7XG4gXHRzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwO1xuIFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDtcbi1cdGxvbmcgZ2JsX3Jlc2VydmUsIHJlZ2lvbnNfbmVlZGVkID0gMDtcbiYjNDM7XHRsb25nIGdibF9yZXN2X2FjY3RlZCA9IDA7XG4mIzQzO1x0bG9uZyByZWdpb25zX25lZWRlZCA9IDA7XG4mIzQzO1x0bG9uZyBnYmxfcmVzdl9nZXQ7XG4mIzQzO1x0bG9uZyBnYmxfcmVzdl9wdXQ7XG4gXHRpbnQgZXJyO1xuIFxuIFx0LyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovXG5AQCAtNjc0Myw5ICYjNDM7Njc1Niw5IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgKiB0aGUgc3VicG9vbCBoYXMgYSBtaW5pbXVtIHNpemUsIHRoZXJlIG1heSBiZSBzb21lIGdsb2JhbFxuIFx0ICogcmVzZXJ2YXRpb25zIGFscmVhZHkgaW4gcGxhY2UgKGdibF9yZXNlcnZlKS5cbiBcdCAqL1xuLVx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgY2hnKTtcbi1cdGlmIChnYmxfcmVzZXJ2ZSBcdTAwM2MgMCkge1xuLVx0XHRlcnIgPSBnYmxfcmVzZXJ2ZTtcbiYjNDM7XHRnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgY2hnKTtcbiYjNDM7XHRpZiAoZ2JsX3Jlc3ZfZ2V0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRlcnIgPSBnYmxfcmVzdl9nZXQ7XG4gXHRcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDtcbiBcdH1cbiBcbkBAIC02NzUzLDkgJiM0Mzs2NzY2LDEwIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi5cbiBcdCAqIEhhbmQgdGhlIHBhZ2VzIGJhY2sgdG8gdGhlIHN1YnBvb2wgaWYgdGhlcmUgYXJlIG5vdFxuIFx0ICovXG4tXHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTtcbiYjNDM7XHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF9wdXRfcGFnZXM7XG4mIzQzO1x0Z2JsX3Jlc3ZfYWNjdGVkID0gZ2JsX3Jlc3ZfZ2V0O1xuIFxuIFx0LypcbiBcdCAqIEFjY291bnQgZm9yIHRoZSByZXNlcnZhdGlvbnMgbWFkZS4gU2hhcmVkIG1hcHBpbmdzIHJlY29yZCByZWdpb25zXG5AQCAtNjc3Miw3ICYjNDM7Njc4Niw2IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdGFkZCA9IHJlZ2lvbl9hZGQocmVzdl9tYXAsIGZyb20sIHRvLCByZWdpb25zX25lZWRlZCwgaCwgaF9jZyk7XG4gXG4gXHRcdGlmICh1bmxpa2VseShhZGQgXHUwMDNjIDApKSB7XG4tXHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xuIFx0XHRcdGVyciA9IGFkZDtcbiBcdFx0XHRnb3RvIG91dF9wdXRfcGFnZXM7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoY2hnIFx1MDAzZSBhZGQpKSB7XG5AQCAtNjgwOCwyNiAmIzQzOzY4MjEsMjIgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdH1cbiBcdHJldHVybiBjaGc7XG4gXG4tb3V0X3B1dF9wYWdlczpcbi1cdHNwb29sX3Jlc3YgPSBjaGcgLSBnYmxfcmVzZXJ2ZTtcbi1cdGlmIChzcG9vbF9yZXN2KSB7XG4tXHRcdC8qIHB1dCBzdWIgcG9vbCYjMzk7cyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqL1xuLVx0XHRnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTtcbi1cdFx0Lypcbi1cdFx0ICogc3VicG9vbCYjMzk7cyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxuLVx0XHQgKiByZXR1cm4gdG8gaHN0YXRlLlxuLVx0XHQgKi9cbi1cdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xuLVx0fVxuLVx0LyogUmVzdG9yZSB1c2VkX2hwYWdlcyBmb3IgcGFnZXMgdGhhdCBmYWlsZWQgZ2xvYmFsIHJlc2VydmF0aW9uICovXG4tXHRpZiAoZ2JsX3Jlc2VydmUgXHUwMDI2XHUwMDI2IHNwb29sKSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzOyBvdXRfcHV0X3BhZ2VzOlxuJiM0MztcdC8qXG4mIzQzO1x0ICogUmV0dXJuIGFsbCB0aGF0IHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc3VicG9vbCwgbGV0IHN1YnBvb2xcbiYjNDM7XHQgKiB0ZWxsIHVzIHRoZSBuZXcgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IG5lZWQgdG8gYmVcbiYjNDM7XHQgKiByZXR1cm5lZCB0byB0aGUgZ2xvYmFsIHBvb2wuXG4mIzQzO1x0ICovXG4mIzQzO1x0Z2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIGNoZyk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGVyZSBtYXkgYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZlxuJiM0MztcdCAqIHJlc2VydmF0aW9ucyB0byBjb25zdW1lIGFuZCB0aGUgbnVtYmVyIHRvIHJlc3RvcmUgbm93IGlmXG4mIzQzO1x0ICogdGhlcmUgYXJlIG11bHRpcGxlIHRocmVhZHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3VicG9vbCAtXG4mIzQzO1x0ICogcmVzdG9yZSB0aGUgZGlmZmVyZW5jZSwgdGFraW5nIGludG8gYWNjb3VudCBhbnkgZ2xvYmFsXG4mIzQzO1x0ICogcmVzZXJ2YXRpb25zIGFscmVhZHkgYWNxdWlyZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQgLSBnYmxfcmVzdl9hY2N0ZWQpO1xuIFxuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlO1xuLVx0XHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4tXHR9XG4gb3V0X3VuY2hhcmdlX2Nncm91cDpcbiBcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcbiBcdFx0XHRcdFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJmc19zdGF0ZnMmIzM0OywKICAgICYjMzQ7aHVnZXRsYl91bnJlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXBhZ2VfcHV0X3N1YnBvb2wmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYmZzIHN1YnBvb2wgYWNjb3VudGluZyBsb2dpYyBhbmQgcmVzZXJ2YXRpb24gZXJyb3ItdW53aW5kIHBhdGhzIGluIG1tL2h1Z2V0bGIuYyBhbmQgZnMvaHVnZXRsYmZzL2lub2RlLmMuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyBob3cgYHVzZWRfaHBhZ2VzYCBhbmQgYHJzdl9ocGFnZXNgIGFyZSB1cGRhdGVkIGluIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcygpYCBhbmQgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKClgLCBhbHRlcnMgc3VicG9vbCByZWxlYXNlIGNoZWNrcyBpbiBgc3VicG9vbF9pc19mcmVlKClgLCBmaXhlcyBzdGF0ZnMgY2FsY3VsYXRpb24gZm9yIHVuYm91bmRlZCBzdWJwb29scyBpbiBgaHVnZXRsYmZzX3N0YXRmcygpYCwgYW5kIHJlZmFjdG9ycyBnbG9iYWwgbWVtb3J5IHJlc2VydmF0aW9uIHJvbGxiYWNrcyBpbiBgYWxsb2NfaHVnZXRsYl9mb2xpbygpYCBhbmQgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYC4gVGhpcyBsb2dpYyBpcyBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcyBmaWxlc3lzdGVtIG1vdW50cywgYWxsb2NhdGlvbnMsIGFuZCBtbWFwIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YTM3MDU0YTdmZDk5NmJlMzBlOTAzNjU1NjE3Zjg1NmVmYzc2NmQwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAyMjowMToxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CmluZGV4IGE0OTExNWRiMThjNzYuLmQyNDQ1ODNmZGNiYzMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdApAQCAtMzE0LDIxICYjNDM7MzE0LDggQEAgaHVnZSBwYWdlcy4gIElmIHRoZXkgY2FuIG5vdCBiZSByZXNlcnZlZCwgdGhlIG1vdW50IGZhaWxzLgogVGhlIHJvdXRpbmVzIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygpIGFyZSBjYWxsZWQgd2hlbiBwYWdlcyBhcmUKIG9idGFpbmVkIGZyb20gb3IgcmVsZWFzZWQgYmFjayB0byBhIHN1YnBvb2wuICBUaGV5IHBlcmZvcm0gYWxsIHN1YnBvb2wKIGFjY291bnRpbmcsIGFuZCB0cmFjayBhbnkgcmVzZXJ2YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbC4KLWh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcyBhcmUgcGFzc2VkIHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcyBieSB3aGljaAotdG8gYWRqdXN0IHRoZSBzdWJwb29sICYjMzk7dXNlZCBwYWdlJiMzOTsgY291bnQgKGRvd24gZm9yIGdldCwgdXAgZm9yIHB1dCkuICBOb3JtYWxseSwKLXRoZXkgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIHRoYXQgd2FzIHBhc3NlZCBvciBhbiBlcnJvciBpZiBub3QgZW5vdWdoIHBhZ2VzCi1leGlzdCBpbiB0aGUgc3VicG9vbC4KLQotSG93ZXZlciwgaWYgcmVzZXJ2ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbCBhIHJldHVybiB2YWx1ZSBsZXNzCi10aGFuIHRoZSBwYXNzZWQgdmFsdWUgbWF5IGJlIHJldHVybmVkLiAgVGhpcyByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHRoZQotbnVtYmVyIG9mIGFkZGl0aW9uYWwgZ2xvYmFsIHBvb2wgYWRqdXN0bWVudHMgd2hpY2ggbXVzdCBiZSBtYWRlLiAgRm9yIGV4YW1wbGUsCi1zdXBwb3NlIGEgc3VicG9vbCBjb250YWlucyAzIHJlc2VydmVkIGh1Z2UgcGFnZXMgYW5kIHNvbWVvbmUgYXNrcyBmb3IgNS4KLVRoZSAzIHJlc2VydmVkIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbCBjYW4gYmUgdXNlZCB0byBzYXRpc2Z5IHBhcnQKLW9mIHRoZSByZXF1ZXN0LiAgQnV0LCAyIHBhZ2VzIG11c3QgYmUgb2J0YWluZWQgZnJvbSB0aGUgZ2xvYmFsIHBvb2xzLiAgVG8KLXJlbGF5IHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGNhbGxlciwgdGhlIHZhbHVlIDIgaXMgcmV0dXJuZWQuICBUaGUgY2FsbGVyCi1pcyB0aGVuIHJlc3BvbnNpYmxlIGZvciBhdHRlbXB0aW5nIHRvIG9idGFpbiB0aGUgYWRkaXRpb25hbCB0d28gcGFnZXMgZnJvbQotdGhlIGdsb2JhbCBwb29scy4KLQomIzQzO2h1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygpIHVzZSB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgcGFzc2VkIHRvIGFkanVzdAomIzQzO3RoZSBzdWJwb29sICYjMzk7dXNlZCBwYWdlJiMzOTsgY291bnQuCiAKIENPVyBhbmQgUmVzZXJ2YXRpb25zCiA9PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdAppbmRleCAyMDk0N2Y4YmQwNjU0Li5hZTFmMWYzMTQ3N2ZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdApAQCAtMjQ2LDE1ICYjNDM7MjQ2LDggQEAgaHVnZXBhZ2Vfc3VicG9vbOeahG1pbl9ocGFnZXPlrZfmrrXkuK3ooqvot5/ouKrjgILlnKjmjILovb3ml7bvvIxodWdldGxiX2FjY3RfbWUKIOiiq+iwg+eUqOS7pemihOeVmeaMh+WumuaVsOmHj+eahOW3qOmhteOAguWmguaenOWug+S7rOS4jeiDveiiq+mihOeVme+8jOaMgui9veWwseS8muWksei0peOAggogCiDlvZPku47lrZDmsaDkuK3ojrflj5bmiJbph4rmlL7pobXpnaLml7bvvIzkvJrosIPnlKhodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKeWHveaVsOOAggotaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2Vz6KKr5Lyg6YCS57uZ5beo6aG15pWw6YeP77yM5Lul5q2k5p2l6LCD5pW05a2Q5rGg55qEIOKAnOW3sueUqOmhtemdouKAnSDorqHmlbAKLe+8iGdldOS4uuS4i+mZje+8jHB1dOS4uuS4iuWNh++8ieOAgumAmuW4uOaDheWGteS4i++8jOWmguaenOWtkOaxoOS4reayoeaciei2s+Wkn+eahOmhtemdou+8jOWug+S7rOS8mui/lOWbnuS4juS8oOmAkueahOebuOWQjOeahOWAvOaIlgot5LiA5Liq6ZSZ6K+v44CCCi0KLeeEtuiAjO+8jOWmguaenOmihOeVmeS4juWtkOaxoOebuOWFs+iBlO+8jOWPr+iDveS8mui/lOWbnuS4gOS4quWwj+S6juS8oOmAkuWAvOeahOi/lOWbnuWAvOOAgui/meS4qui/lOWbnuWAvOihqOekuuW/hemhu+i/m+ihjOeahOmineWkluWFqOWxgAot5rGg6LCD5pW055qE5pWw6YeP44CC5L6L5aaC77yM5YGH6K6+5LiA5Liq5a2Q5rGg5YyF5ZCrM+S4qumihOeVmeeahOW3qOmhte+8jOacieS6uuimgeaxgjXkuKrjgILkuI7lrZDmsaDnm7jlhbPnmoQz5Liq6aKE55WZ6aG15Y+v5Lul55So5p2lCi3mu6HotrPpg6jliIbor7fmsYLjgILkvYbmmK/vvIzlv4Xpobvku47lhajlsYDmsaDkuK3ojrflvpcy5Liq6aG16Z2i44CC5Li65LqG5ZCR6LCD55So6ICF6L2s6L6+6L+Z5LiA5L+h5oGv77yM5bCG6L+U5Zue5YC8MuOAgueEtuWQju+8jOiwg+eUqAot6ICF6KaB6LSf6LSj5LuO5YWo5bGA5rGg5Lit6I635Y+W5Y+m5aSW5Lik5Liq6aG16Z2i44CCCi0KJiM0MzvlroPku6zotJ/otKPmiYDmnInlrZDmsaDnmoTnu5/orqHmoLjnrpfvvIzlubbot5/ouKrkuI7lrZDmsaDnm7jlhbPogZTnmoTpooTnlZnjgIIKJiM0MztodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKeWHveaVsOS9v+eUqOS8oOWFpeeahOW3qOmhteaVsOmHj+adpeiwg+aVtOWtkOaxoOeahOKAnOW3sueUqOmhtemdouKAneiuoeaVsOOAggogCiBDT1flkozpooTnlZkKID09PT09PT09PT0KZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKaW5kZXggNzYxMWE4NDcwZWEyNi4uNTExM2Y3NDNmNmZjNyAxMDA2NDQKLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKQEAgLTExMDksOCAmIzQzOzExMDksMTIgQEAgc3RhdGljIGludCBodWdldGxiZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIAogCQkJc3Bpbl9sb2NrX2lycSgmYW1wO3NiaW5mby0mZ3Q7c3Bvb2wtJmd0O2xvY2spOwogCQkJYnVmLSZndDtmX2Jsb2NrcyA9IHNiaW5mby0mZ3Q7c3Bvb2wtJmd0O21heF9ocGFnZXM7Ci0JCQlmcmVlX3BhZ2VzID0gc2JpbmZvLSZndDtzcG9vbC0mZ3Q7bWF4X2hwYWdlcwotCQkJCS0gc2JpbmZvLSZndDtzcG9vbC0mZ3Q7dXNlZF9ocGFnZXM7CiYjNDM7CQkJaWYgKHNiaW5mby0mZ3Q7c3Bvb2wtJmd0O21heF9ocGFnZXMgPT0gLTEpIHsKJiM0MzsJCQkJZnJlZV9wYWdlcyA9IC0xOwomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCWZyZWVfcGFnZXMgPSBzYmluZm8tJmd0O3Nwb29sLSZndDttYXhfaHBhZ2VzIC0KJiM0MzsJCQkJCSAgICAgc2JpbmZvLSZndDtzcG9vbC0mZ3Q7dXNlZF9ocGFnZXM7CiYjNDM7CQkJfQogCQkJYnVmLSZndDtmX2JhdmFpbCA9IGJ1Zi0mZ3Q7Zl9iZnJlZSA9IGZyZWVfcGFnZXM7CiAJCQlzcGluX3VubG9ja19pcnEoJmFtcDtzYmluZm8tJmd0O3Nwb29sLSZndDtsb2NrKTsKIAkJCWJ1Zi0mZ3Q7Zl9maWxlcyA9IHNiaW5mby0mZ3Q7bWF4X2lub2RlczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggMTZjNGM0Y2FhMTI2Yy4uNDU1MWZmMzAyMzY0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKQEAgLTM5LDggJiM0MzszOSw4IEBAIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sIHsKIAlzcGlubG9ja190IGxvY2s7CiAJbG9uZyBjb3VudDsKIAlsb25nIG1heF9ocGFnZXM7CS8qIE1heGltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtYXhpbXVtLiAqLwotCWxvbmcgdXNlZF9ocGFnZXM7CS8qIFVzZWQgY291bnQgYWdhaW5zdCBtYXhpbXVtLCBpbmNsdWRlcyAqLwotCQkJCS8qIGJvdGggYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi8KJiM0MzsJbG9uZyB1c2VkX2hwYWdlczsJLyogVXNlZCBwYWdlIGNvdW50LCBpbmNsdWRlcyBib3RoICovCiYjNDM7CQkJCS8qIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovCiAJc3RydWN0IGhzdGF0ZSAqaHN0YXRlOwogCWxvbmcgbWluX2hwYWdlczsJLyogTWluaW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1pbmltdW0uICovCiAJbG9uZyByc3ZfaHBhZ2VzOwkvKiBQYWdlcyByZXNlcnZlZCBhZ2FpbnN0IGdsb2JhbCBwb29sIHRvICovCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggNGY2ZjU4YmYzZGI2Yy4uMTE1MWFkOTU5ZmZkNSAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuYwpAQCAtMTMwLDEyICYjNDM7MTMwLDggQEAgc3RhdGljIGlubGluZSBib29sIHN1YnBvb2xfaXNfZnJlZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCiB7CiAJaWYgKHNwb29sLSZndDtjb3VudCkKIAkJcmV0dXJuIGZhbHNlOwotCWlmIChzcG9vbC0mZ3Q7bWF4X2hwYWdlcyAhPSAtMSkKLQkJcmV0dXJuIHNwb29sLSZndDt1c2VkX2hwYWdlcyA9PSAwOwotCWlmIChzcG9vbC0mZ3Q7bWluX2hwYWdlcyAhPSAtMSkKLQkJcmV0dXJuIHNwb29sLSZndDtyc3ZfaHBhZ2VzID09IHNwb29sLSZndDttaW5faHBhZ2VzOwogCi0JcmV0dXJuIHRydWU7CiYjNDM7CXJldHVybiBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgPT0gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLApAQCAtMTkzLDEzICYjNDM7MTg5LDE4IEBAIHZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKQogCXVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTsKIH0KIAotLyoKLSAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgYWxsb2NhdGluZyBhbmQgcmVzZXJ2aW5nIHBhZ2VzLgotICogUmV0dXJuIC1FTk9NRU0gaWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvIHNhdGlzZnkgdGhlCi0gKiByZXF1ZXN0LiAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBieSB3aGljaCB0aGUKLSAqIGdsb2JhbCBwb29scyBtdXN0IGJlIGFkanVzdGVkICh1cHdhcmQpLiAgVGhlIHJldHVybmVkIHZhbHVlIG1heQotICogb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSkgaW4gdGhlIGNhc2Ugd2hlcmUKLSAqIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLgomIzQzOy8qKgomIzQzOyAqIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzIC0gR2V0IHBhZ2VzIGZyb20gYSBzdWJwb29sCiYjNDM7ICogQHNwb29sOiBwb2ludGVyIHRvIHN1YnBvb2wgc3RydWN0dXJlIChtYXkgYmUgTlVMTCkKJiM0MzsgKiBAZGVsdGE6IG51bWJlciBvZiBwYWdlcyB0byBhbGxvY2F0ZSBvciByZXNlcnZlCiYjNDM7ICoKJiM0MzsgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBhbGxvY2F0aW5nIG9yCiYjNDM7ICogcmVzZXJ2aW5nIEBkZWx0YSBodWdlcGFnZXMuCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBUYWtlcyBzcG9vbC0mZ3Q7bG9jayB1c2luZyBzcGluX2xvY2tfaXJxKCkuCiYjNDM7ICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IGNhbm5vdCBiZQomIzQzOyAqICAgICAgICAgc2F0aXNmaWVkIGJ5IHRoZSBzdWJwb29sLCBvciAtRU5PTUVNIGlmIHRoZSBzdWJwb29sIG1heGltdW0KJiM0MzsgKiAgICAgICAgIGxpbWl0IHdvdWxkIGJlIGV4Y2VlZGVkLgogICovCiBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCiAJCQkJICAgICAgbG9uZyBkZWx0YSkKQEAgLTIxMSwxNSAmIzQzOzIxMiwxNCBAQCBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCiAKIAlzcGluX2xvY2tfaXJxKCZhbXA7c3Bvb2wtJmd0O2xvY2spOwogCi0JaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKSB7CQkvKiBtYXhpbXVtIHNpemUgYWNjb3VudGluZyAqLwotCQlpZiAoKHNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOyBkZWx0YSkgJmx0Oz0gc3Bvb2wtJmd0O21heF9ocGFnZXMpCi0JCQlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgJiM0Mzs9IGRlbHRhOwotCQllbHNlIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIHVubG9ja19yZXQ7Ci0JCX0KJiM0MzsJaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xICZhbXA7JmFtcDsKJiM0MzsJICAgIHNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOyBkZWx0YSAmZ3Q7IHNwb29sLSZndDttYXhfaHBhZ2VzKSB7CiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJZ290byB1bmxvY2tfcmV0OwogCX0KIAomIzQzOwlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgJiM0Mzs9IGRlbHRhOwomIzQzOwogCS8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovCiAJaWYgKHNwb29sLSZndDttaW5faHBhZ2VzICE9IC0xICZhbXA7JmFtcDsgc3Bvb2wtJmd0O3Jzdl9ocGFnZXMpIHsKIAkJaWYgKGRlbHRhICZndDsgc3Bvb2wtJmd0O3Jzdl9ocGFnZXMpIHsKQEAgLTI0MCwxMSAmIzQzOzI0MCwxOSBAQCBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgZnJlZWluZyBhbmQgdW5yZXNlcnZpbmcgcGFnZXMuCi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBnbG9iYWwgcGFnZSByZXNlcnZhdGlvbnMgdGhhdCBtdXN0IGJlIGRyb3BwZWQuCi0gKiBUaGUgcmV0dXJuIHZhbHVlIG1heSBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKQotICogaW4gdGhlIGNhc2Ugd2hlcmUgYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuCiYjNDM7LyoqCiYjNDM7ICogaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMgLSBSZWxlYXNlIHBhZ2VzIGJhY2sgdG8gYSBzdWJwb29sCiYjNDM7ICogQHNwb29sOiBwb2ludGVyIHRvIHN1YnBvb2wgc3RydWN0dXJlIChtYXkgYmUgTlVMTCkKJiM0MzsgKiBAZGVsdGE6IG51bWJlciBvZiBwYWdlcyB0byBmcmVlIG9yIHVucmVzZXJ2ZQomIzQzOyAqCiYjNDM7ICogQ2hlY2sgYW5kIHVwZGF0ZSBzdWJwb29sIHBhZ2UgdXNhZ2UgY291bnRzIHdoZW4gZnJlZWluZyBvcgomIzQzOyAqIHVucmVzZXJ2aW5nIEBkZWx0YSBodWdlcGFnZXMuCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBUYWtlcyBzcG9vbC0mZ3Q7bG9jayB1c2luZyBzcGluX2xvY2tfaXJxc2F2ZSgpLiBNYXkgcmVsZWFzZQomIzQzOyAqICAgICAgICAgIGFuZCBmcmVlIEBzcG9vbCBpZiBpdHMgdXNhZ2UgY291bnQgYW5kIHJlZmVyZW5jZXMgcmVhY2gKJiM0MzsgKiAgICAgICAgICB6ZXJvLgomIzQzOyAqIFJldHVybjogTm9uLW5lZ2F0aXZlIG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCB0aGUgc3VicG9vbCBjYW5ub3QKJiM0MzsgKiAgICAgICAgIGFic29yYi4KICAqLwogc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLAogCQkJCSAgICAgICBsb25nIGRlbHRhKQpAQCAtMjU3LDE5ICYjNDM7MjY1LDI0IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKIAotCWlmIChzcG9vbC0mZ3Q7bWF4X2hwYWdlcyAhPSAtMSkJCS8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovCi0JCXNwb29sLSZndDt1c2VkX2hwYWdlcyAtPSBkZWx0YTsKJiM0MzsJc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzIC09IGRlbHRhOwogCiAJIC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovCiAJaWYgKHNwb29sLSZndDttaW5faHBhZ2VzICE9IC0xICZhbXA7JmFtcDsgc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzICZsdDsgc3Bvb2wtJmd0O21pbl9ocGFnZXMpIHsKLQkJaWYgKHNwb29sLSZndDtyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhICZsdDs9IHNwb29sLSZndDttaW5faHBhZ2VzKQomIzQzOwkJLyoKJiM0MzsJCSAqIGxpbWl0IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdAomIzQzOwkJICogY2FuIGJlIHJlc3RvcmVkIHRvIHRoaXMgc3VicG9vbC4KJiM0MzsJCSAqLwomIzQzOwkJbG9uZyBsaW1pdCA9IHNwb29sLSZndDttaW5faHBhZ2VzIC0gc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzOwomIzQzOwomIzQzOwkJaWYgKHNwb29sLSZndDtyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhICZsdDs9IGxpbWl0KQogCQkJcmV0ID0gMDsKIAkJZWxzZQotCQkJcmV0ID0gc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0MzsgZGVsdGEgLSBzcG9vbC0mZ3Q7bWluX2hwYWdlczsKJiM0MzsJCQlyZXQgPSBzcG9vbC0mZ3Q7cnN2X2hwYWdlcyAmIzQzOyBkZWx0YSAtIGxpbWl0OwogCiAJCXNwb29sLSZndDtyc3ZfaHBhZ2VzICYjNDM7PSBkZWx0YTsKLQkJaWYgKHNwb29sLSZndDtyc3ZfaHBhZ2VzICZndDsgc3Bvb2wtJmd0O21pbl9ocGFnZXMpCi0JCQlzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9IHNwb29sLSZndDttaW5faHBhZ2VzOwomIzQzOwkJaWYgKHNwb29sLSZndDtyc3ZfaHBhZ2VzICZndDsgbGltaXQpCiYjNDM7CQkJc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgPSBsaW1pdDsKIAl9CiAKIAkvKgpAQCAtMjk0NCw3ICYjNDM7Mjk1Nyw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX3ZtYSh2bWEpOwogCXN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKLQlsb25nIHJldHZhbCwgZ2JsX2NoZywgZ2JsX3Jlc2VydmU7CiYjNDM7CWxvbmcgcmV0dmFsLCBnYmxfcmVzdl9nZXQ7CiAJbWFwX2NoZ19zdGF0ZSBtYXBfY2hnOwogCXN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgbXBvbGk7CiAJZ2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpOwpAQCAtMjk4Myw4ICYjNDM7Mjk5Niw4IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkgKiBPciBpZiBpdCBjYW4gZ2V0IG9uZSBmcm9tIHRoZSBwb29sIHJlc2VydmF0aW9uIGRpcmVjdGx5LgogCSAqLwogCWlmIChtYXBfY2hnKSB7Ci0JCWdibF9jaGcgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7Ci0JCWlmIChnYmxfY2hnICZsdDsgMCkgewomIzQzOwkJZ2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpOwomIzQzOwkJaWYgKGdibF9yZXN2X2dldCAmbHQ7IDApIHsKIAkJCXJldCA9IC1FTk9TUEM7CiAJCQlnb3RvIG91dF9lbmRfcmVzZXJ2YXRpb247CiAJCX0KQEAgLTI5OTMsNyAmIzQzOzMwMDYsNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCSAqIElmIHdlIGhhdmUgdGhlIHZtYSByZXNlcnZhdGlvbiByZWFkeSwgbm8gbmVlZCBmb3IgZXh0cmEKIAkJICogZ2xvYmFsIHJlc2VydmF0aW9uLgogCQkgKi8KLQkJZ2JsX2NoZyA9IDA7CiYjNDM7CQlnYmxfcmVzdl9nZXQgPSAwOwogCX0KIAogCS8qCkBAIC0zMDA0LDEwICYjNDM7MzAxNywxMCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCWFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7CiAKIAkvKgotCSAqIGdibF9jaGcgPT0gMCBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoaXMKJiM0MzsJICogZ2JsX3Jlc3ZfZ2V0ID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzCiAJICogYWxsb2NhdGlvbiwgc28gdHJ5IHRvIHVzZSBpdC4KIAkgKi8KLQlpZiAoZ2JsX2NoZyA9PSAwKQomIzQzOwlpZiAoZ2JsX3Jlc3ZfZ2V0ID09IDApCiAJCWFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlM7CiAKIAkvKiBUYWtlcyByZWZlcmVuY2Ugb24gbXBvbC4gKi8KQEAgLTMwNjEsMTMgJiM0MzszMDc0LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlyZXR1cm4gZm9saW87CiAKIG91dF9zdWJwb29sX3B1dDoKLQkvKgotCSAqIHB1dCBwYWdlIHRvIHN1YnBvb2wgaWZmIHRoZSBxdW90YSBvZiBzdWJwb29sJiMzOTtzIHJzdl9ocGFnZXMgaXMgdXNlZAotCSAqIGR1cmluZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcy4KLQkgKi8KLQlpZiAobWFwX2NoZyAmYW1wOyZhbXA7ICFnYmxfY2hnKSB7Ci0JCWdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpOwotCQlodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7CiYjNDM7CWlmIChtYXBfY2hnKSB7CiYjNDM7CQlsb25nIGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTsKJiM0MzsKJiM0MzsJCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0IC0gZ2JsX3Jlc3ZfcHV0KTsKIAl9CiAKIG91dF9lbmRfcmVzZXJ2YXRpb246CkBAIC02NjYzLDEyICYjNDM7NjY3MywxNSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKQogewotCWxvbmcgY2hnID0gLTEsIGFkZCA9IC0xLCBzcG9vbF9yZXN2LCBnYmxfcmVzdjsKJiM0MzsJbG9uZyBjaGcgPSAtMSwgYWRkID0gLTE7CiAJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7CiAJc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF9pbm9kZShpbm9kZSk7CiAJc3RydWN0IHJlc3ZfbWFwICpyZXN2X21hcDsKIAlzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMOwotCWxvbmcgZ2JsX3Jlc2VydmUsIHJlZ2lvbnNfbmVlZGVkID0gMDsKJiM0MzsJbG9uZyBnYmxfcmVzdl9hY2N0ZWQgPSAwOwomIzQzOwlsb25nIHJlZ2lvbnNfbmVlZGVkID0gMDsKJiM0MzsJbG9uZyBnYmxfcmVzdl9nZXQ7CiYjNDM7CWxvbmcgZ2JsX3Jlc3ZfcHV0OwogCWludCBlcnI7CiAKIAkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KQEAgLTY3NDMsOSAmIzQzOzY3NTYsOSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSAqIHRoZSBzdWJwb29sIGhhcyBhIG1pbmltdW0gc2l6ZSwgdGhlcmUgbWF5IGJlIHNvbWUgZ2xvYmFsCiAJICogcmVzZXJ2YXRpb25zIGFscmVhZHkgaW4gcGxhY2UgKGdibF9yZXNlcnZlKS4KIAkgKi8KLQlnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpOwotCWlmIChnYmxfcmVzZXJ2ZSAmbHQ7IDApIHsKLQkJZXJyID0gZ2JsX3Jlc2VydmU7CiYjNDM7CWdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpOwomIzQzOwlpZiAoZ2JsX3Jlc3ZfZ2V0ICZsdDsgMCkgewomIzQzOwkJZXJyID0gZ2JsX3Jlc3ZfZ2V0OwogCQlnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7CiAJfQogCkBAIC02NzUzLDkgJiM0Mzs2NzY2LDEwIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJICogQ2hlY2sgZW5vdWdoIGh1Z2VwYWdlcyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgcmVzZXJ2YXRpb24uCiAJICogSGFuZCB0aGUgcGFnZXMgYmFjayB0byB0aGUgc3VicG9vbCBpZiB0aGVyZSBhcmUgbm90CiAJICovCi0JZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzZXJ2ZSk7CiYjNDM7CWVyciA9IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0KTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJZ290byBvdXRfcHV0X3BhZ2VzOwomIzQzOwlnYmxfcmVzdl9hY2N0ZWQgPSBnYmxfcmVzdl9nZXQ7CiAKIAkvKgogCSAqIEFjY291bnQgZm9yIHRoZSByZXNlcnZhdGlvbnMgbWFkZS4gU2hhcmVkIG1hcHBpbmdzIHJlY29yZCByZWdpb25zCkBAIC02NzcyLDcgJiM0Mzs2Nzg2LDYgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwKIAkJYWRkID0gcmVnaW9uX2FkZChyZXN2X21hcCwgZnJvbSwgdG8sIHJlZ2lvbnNfbmVlZGVkLCBoLCBoX2NnKTsKIAogCQlpZiAodW5saWtlbHkoYWRkICZsdDsgMCkpIHsKLQkJCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTsKIAkJCWVyciA9IGFkZDsKIAkJCWdvdG8gb3V0X3B1dF9wYWdlczsKIAkJfSBlbHNlIGlmICh1bmxpa2VseShjaGcgJmd0OyBhZGQpKSB7CkBAIC02ODA4LDI2ICYjNDM7NjgyMSwyMiBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCX0KIAlyZXR1cm4gY2hnOwogCi1vdXRfcHV0X3BhZ2VzOgotCXNwb29sX3Jlc3YgPSBjaGcgLSBnYmxfcmVzZXJ2ZTsKLQlpZiAoc3Bvb2xfcmVzdikgewotCQkvKiBwdXQgc3ViIHBvb2wmIzM5O3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi8KLQkJZ2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7Ci0JCS8qCi0JCSAqIHN1YnBvb2wmIzM5O3MgcmVzZXJ2ZWQgcGFnZXMgY2FuIG5vdCBiZSBwdXQgYmFjayBkdWUgdG8gcmFjZSwKLQkJICogcmV0dXJuIHRvIGhzdGF0ZS4KLQkJICovCi0JCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2KTsKLQl9Ci0JLyogUmVzdG9yZSB1c2VkX2hwYWdlcyBmb3IgcGFnZXMgdGhhdCBmYWlsZWQgZ2xvYmFsIHJlc2VydmF0aW9uICovCi0JaWYgKGdibF9yZXNlcnZlICZhbXA7JmFtcDsgc3Bvb2wpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0Mzsgb3V0X3B1dF9wYWdlczoKJiM0MzsJLyoKJiM0MzsJICogUmV0dXJuIGFsbCB0aGF0IHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc3VicG9vbCwgbGV0IHN1YnBvb2wKJiM0MzsJICogdGVsbCB1cyB0aGUgbmV3IG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCBuZWVkIHRvIGJlCiYjNDM7CSAqIHJldHVybmVkIHRvIHRoZSBnbG9iYWwgcG9vbC4KJiM0MzsJICovCiYjNDM7CWdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBjaGcpOwomIzQzOwkvKgomIzQzOwkgKiBUaGVyZSBtYXkgYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZgomIzQzOwkgKiByZXNlcnZhdGlvbnMgdG8gY29uc3VtZSBhbmQgdGhlIG51bWJlciB0byByZXN0b3JlIG5vdyBpZgomIzQzOwkgKiB0aGVyZSBhcmUgbXVsdGlwbGUgdGhyZWFkcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdWJwb29sIC0KJiM0MzsJICogcmVzdG9yZSB0aGUgZGlmZmVyZW5jZSwgdGFraW5nIGludG8gYWNjb3VudCBhbnkgZ2xvYmFsCiYjNDM7CSAqIHJlc2VydmF0aW9ucyBhbHJlYWR5IGFjcXVpcmVkLgomIzQzOwkgKi8KJiM0MzsJaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQgLSBnYmxfcmVzdl9hY2N0ZWQpOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKLQkJaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKQotCQkJc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlOwotCQl1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7Ci0JfQogb3V0X3VuY2hhcmdlX2Nncm91cDoKIAlodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksCiAJCQkJCSAgICBjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg1NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBIdWdldGxiZnMgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzLiBGaXJzdCwgdGhlIGZpbGUgY2hhbmdlcy4gSSBzZWU6IGBEb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0YCwgdGhlIENoaW5lc2UgdHJhbnNsYXRpb24sIGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAsIGFuZCBgbW0vaHVnZXRsYi5jYC4gQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgY2hhbmdlcyBhY3Jvc3MgZG9jdW1lbnRhdGlvbiwgdGhlIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24sIGFuZCB0aGUgY29yZSBodWdldGxiIG1lbW9yeSBtYW5hZ2VtZW50LgoKTm93IGZvciB0aGUgbWVhdCBvZiBpdC4gSW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgdGhlIGBodWdldGxiZnNfc3RhdGZzYCBmdW5jdGlvbiBoYXMgYSBidWdmaXguIEl0IGNvcnJlY3RseSBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIGBtYXhfaHBhZ2VzYCBpcyAtMSAobWVhbmluZyB1bmxpbWl0ZWQgcGFnZXMpIGluIGBzYmluZm8tJmd0O3Nwb29sYC4gSW5zdGVhZCBvZiBzdWJ0cmFjdGluZyBmcm9tIC0xLCB3aGljaCB3b3VsZCBsZWFkIHRvIGFyaXRobWV0aWMgbm9uc2Vuc2UsIGl0IHNldHMgdGhlIGBmcmVlX3BhZ2VzYCB0byAtMS4gR29vZCBjYXRjaC4KClRoZSBjb3JlIG9mIHRoZSB3b3JrLCB0aG91Z2gsIGlzIGluIHRoZSBoZWFkZXIgYW5kIG1tIGZpbGVzLiBJdCBsb29rcyBsaWtlIGEgcmVmYWN0b3JpbmcgYW5kIGZpeCBmb3Igc3VicG9vbCBhY2NvdW50aW5nIHdpdGhpbiBodWdldGxiZnMuIFRoZXkmIzM5O3ZlIHRvdWNoZWQgYHN1YnBvb2xfaXNfZnJlZWAsIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AsIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AsIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLiBTcGVjaWZpY2FsbHk6CgoqICAgYHN1YnBvb2xfaXNfZnJlZWAgbm93IGp1c3QgY2hlY2tzIGlmIGB1c2VkX2hwYWdlc2AgaXMgemVybyAoc2VlbXMgbW9yZSBzdHJhaWdodGZvcndhcmQpLgoqICAgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYCBpbmNyZW1lbnRzIGB1c2VkX2hwYWdlc2AgdW5jb25kaXRpb25hbGx5LCB3aGljaCBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZSB0cmFja2luZy4KKiAgIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AgZGVjcmVtZW50cyBgdXNlZF9ocGFnZXNgIHVuY29uZGl0aW9uYWxseSB0b28sIGFuZCBub3cgaW5jbHVkZXMgYSBjYWxjdWxhdGlvbiBmb3IgdGhlIGBsaW1pdGAgdXNpbmcgYm90aCBgbWluX2hwYWdlc2AgYW5kIGB1c2VkX2hwYWdlc2AsIG1ha2luZyBpdCBhbGwgbW9yZSBwcmVjaXNlLgoqICAgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGhhcyBhbiBpbXByb3ZlbWVudDsgSXQgbm93IHByb3Blcmx5IGhhbmRsZXMgcmVzZXJ2YXRpb24gYWNjb3VudGluZyBvbiBmYWlsdXJlIHVzaW5nIGEgZGlmZmVyZW5jZSBjYWxjdWxhdGlvbiwgd2hpY2ggaW5kaWNhdGVzIGEgbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgYXBwcm9hY2guCiogICBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCBjbGVhbnMgdXAgdGhlIGVycm9yIHBhdGhzIGludm9sdmluZyBzdWJwb29scywgbGVhZGluZyB0byBtb3JlIHJlc2lsaWVudCBjb2RlLgoKSXMgdGhpcyByZWFjaGFibGUgY29kZT8gQWJzb2x1dGVseS4gVGhlIGZpbGVzIGBtbS9odWdldGxiLmNgIGFuZCBgZnMvaHVnZXRsYmZzL2AgYXJlIGludGVncmFsIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBzdWJzeXN0ZW1zLiBJJiMzOTtkIGV4cGVjdCB0aGlzIGNvZGUgdG8gYmUgaGl0IGZyZXF1ZW50bHkgd2hlbiB1c2luZyBodWdldGxiZnMgdGhyb3VnaCBtbWFwLCBzeXNjYWxscywgb3IgZmFsbG9jYXRlIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuCgpBbHJpZ2h0LCBub3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgcmVxdWlyZWQgZm9yIGh1Z2V0bGJmcyBhbmQgaHVnZXRsYi4gSSYjMzk7bGwgZ2V0IHRoZSBncmVwcGVyIHJlYWR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9odWdldGxiZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMDcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIERvd24gdGhlIGh1Z2V0bGJmcyBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgS2NvbmZpZyBmaWxlIHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmluZyBodWdldGxiZnMuIFRoaXMgaXNuJiMzOTt0IHVzdWFsbHkgYSB3aWxkIGdvb3NlIGNoYXNlLCBidXQgZGVwZW5kaW5nIG9uIHRoZSBwcm9qZWN0IHN0cnVjdHVyZSwgaXQgY2FuIGJlIHNsaWdodGx5IGxlc3Mgb2J2aW91cyB0aGFuIG9uZSBtaWdodCBob3BlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyB1c3VhbGx5IGZvbGxvd3MgYSBmZXcgcXVpY2sgcGF0aHMuIEnigJlsbCBzdGFydCBieSB0aGlua2luZyBhYm91dCBjb21tb24gbG9jYXRpb25zIOKAkyB0aGUgYGZzL2AsIGBtbS9gLCBvciBtYXliZSBldmVuIHRoZSByb290IG9mIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgaWYgaXQmIzM5O3MgYSBwYXJ0aWN1bGFybHkgY29yZSBmZWF0dXJlLCB0aG91Z2ggdGhhdCYjMzk7cyBsZXNzIGxpa2VseSB0aGVzZSBkYXlzIHdpdGggdGhlIG1vZHVsYXJpemF0aW9uIGVmZm9ydHMuCgpJJiMzOTtsbCBiZSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIG1hcCBvZiB0aGUga2VybmVsIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIE15IG5leHQgbW92ZSB3aWxsIGJlIHRvIHRoaW5rIGFib3V0IG90aGVyIHNpbWlsYXIgZmVhdHVyZXMuIFdoYXQgYXJlIHRoZSBwYXR0ZXJucz8gSXMgaXQgdXNpbmcgYSBzdGFuZGFyZCBgS2NvbmZpZ2AgaW5jbHVkZSwgb3IgaXMgaXQgYSBtb3JlIGJlc3Bva2Ugc2V0dXA/IEkmIzM5O2xsIHByb2JhYmx5IGJlIHF1aWNrbHkgc2Nhbm5pbmcgbXkgbWVtb3J5IGZvciByZWxhdGVkIGZpbGVzeXN0ZW0gb3B0aW9ucyBvciBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zIHRoYXQgSSBjb25maWd1cmVkIHJlY2VudGx5LCBhbmQgY3Jvc3MtcmVmZXJlbmNpbmcuCgpPbmNlIEkmIzM5O3ZlIGdvdCBhIGxpa2VseSBzdXNwZWN0IGxvY2F0aW9uIG9yIHR3bywgSSYjMzk7bGwgZGl2ZSBpbiwgdXNpbmcgYGdyZXBgIG9yIGBmaW5kYCBhcyBhIHF1aWNrIHRlc3QsIGlmIEkgY2FuJiMzOTt0IHJlbWVtYmVyIHByZWNpc2VseS4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGUgcmVsZXZhbnQgY29uZmlnIHN5bWJvbCwgbGlrZSAmIzM0O0hVR0VUTEJGUyYjMzQ7IG9yIG1heWJlIGV2ZW4gYSByZWxhdGVkIGRlcGVuZGVuY3ksIGp1c3QgdG8gbWFrZSBzdXJlIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgcmlnaHQgZmlsZS4gSSYjMzk7bGwgZXhwZWN0IHRvIHJlY29nbml6ZSB0aGUgc3RhbmRhcmQgYGNvbmZpZ2AgZGlyZWN0aXZlIGFuZCBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gRnJvbSB0aGVyZSwgSSBjYW4gcmVmaW5lIG15IHNlYXJjaCBvciBtb3ZlIG9uIHRvIHRoZSBuZXh0IGxpa2VseSBsb2NhdGlvbiB1bnRpbCBJIGxhbmQgb24gdGhlIGZpbGUsIG9yIGZpbGVzLCB0aGF0IEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNTA9bWVudWNvbmZpZyBIVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI1NS1cdGhlbHBcbmZzL0tjb25maWc6MjU2Olx0ICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uXG5mcy9LY29uZmlnLTI1Ny1cdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxuLS1cbmZzL01ha2VmaWxlPTczPW9iai15XHRcdFx0XHQmIzQzOz0gcmFtZnMvXG5mcy9NYWtlZmlsZTo3NDpvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0XHQmIzQzOz0gaHVnZXRsYmZzL1xuZnMvTWFrZWZpbGUtNzUtb2JqLSQoQ09ORklHX0NPREFfRlMpXHRcdCYjNDM7PSBjb2RhL1xuLS1cbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZS01LVxuZnMvaHVnZXRsYmZzL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0hVR0VUTEJGUykgJiM0Mzs9IGh1Z2V0bGJmcy5vXG5mcy9odWdldGxiZnMvTWFrZWZpbGUtNy1cbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZTo4Omh1Z2V0bGJmcy1vYmpzIDo9IGlub2RlLm9cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy00Mi0jZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQzOiNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9odWdldGxiZnMuaFx1MDAzZVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDQtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NTpzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBodWdldGxiZnNfYW9wcztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NzpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDg6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDktXG5mcy9odWdldGxiZnMvaW5vZGUuYzo1MDplbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgeyBOT19TSVpFLCBTSVpFX1NURCwgU0laRV9QRVJDRU5UIH07XG5mcy9odWdldGxiZnMvaW5vZGUuYy01MS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUyOnN0cnVjdCBodWdldGxiZnNfZnNfY29udGV4dCB7XG5mcy9odWdldGxiZnMvaW5vZGUuYy01My1cdHN0cnVjdCBoc3RhdGVcdFx0KmhzdGF0ZTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy01OC1cdGxvbmdcdFx0XHRtaW5faHBhZ2VzO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NTk6XHRlbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgbWF4X3ZhbF90eXBlO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjA6XHRlbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgbWluX3ZhbF90eXBlO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjEtXHRrdWlkX3RcdFx0XHR1aWQ7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBodWdldGxiX2ZzX3BhcmFtZXRlcnNbXSA9IHtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy05OC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk5OnN0YXRpYyBpbnQgaHVnZXRsYmZzX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDAte1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0Ni1cdCAqIGZvciBTSE1fSFVHRVRMQiwgdGhlIHBhZ2VzIGFyZSByZXNlcnZlZCBpbiB0aGUgc2htZ2V0KCkgY2FsbCBzbyBza2lwXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDc6XHQgKiByZXNlcnZpbmcgaGVyZS4gTm90ZTogb25seSBmb3IgU0hNIGh1Z2V0bGJmcyBmaWxlLCB0aGUgaW5vZGVcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0OC1cdCAqIGZsYWcgU19QUklWQVRFIGlzIHNldC5cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xOTY9c3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yMTktICovXG5mcy9odWdldGxiZnMvaW5vZGUuYzoyMjA6c3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yMjEte1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTI5Ny1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjI5ODpzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yOTktXHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMzA1LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MzA2OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3dyaXRlX2VuZChjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0zMDctXHRcdFx0ICAgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTU1Mj1zdGF0aWMgdm9pZCByZW1vdmVfaW5vZGVfaHVnZXBhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTkyLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NTkzOnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTk0LXtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy01OTYtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo1OTc6XHR0cmFjZV9odWdldGxiZnNfZXZpY3RfaW5vZGUoaW5vZGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTk4LVx0cmVtb3ZlX2lub2RlX2h1Z2VwYWdlcyhpbm9kZSwgMCwgTExPTkdfTUFYKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz02MDc9c3RhdGljIHZvaWQgaHVnZXRsYl92bXRydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQpXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjIzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjI0OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc196ZXJvX3BhcnRpYWxfcGFnZShzdHJ1Y3QgaHN0YXRlICpoLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjI1LVx0XHRcdFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy02NDYtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo2NDc6c3RhdGljIGxvbmcgaHVnZXRsYmZzX3B1bmNoX2hvbGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY0OC17XG5mcy9odWdldGxiZnMvaW5vZGUuYzo2NDk6XHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmluZm8gPSBIVUdFVExCRlNfSShpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy02NTAtXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy02NzItXHRpZiAob2Zmc2V0IFx1MDAzYyBob2xlX3N0YXJ0KVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjczOlx0XHRodWdldGxiZnNfemVyb19wYXJ0aWFsX3BhZ2UoaCwgbWFwcGluZyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY3NC1cdFx0XHRcdG9mZnNldCwgbWluKG9mZnNldCAmIzQzOyBsZW4sIGhvbGVfc3RhcnQpKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy02ODUtXHRpZiAoKG9mZnNldCAmIzQzOyBsZW4pIFx1MDAzZSBob2xlX2VuZCBcdTAwMjZcdTAwMjYgKG9mZnNldCAmIzQzOyBsZW4pIFx1MDAzZSBob2xlX3N0YXJ0KVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Njg2Olx0XHRodWdldGxiZnNfemVyb19wYXJ0aWFsX3BhZ2UoaCwgbWFwcGluZyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY4Ny1cdFx0XHRcdGhvbGVfZW5kLCBvZmZzZXQgJiM0MzsgbGVuKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy02OTktXG5mcy9odWdldGxiZnMvaW5vZGUuYzo3MDA6c3RhdGljIGxvbmcgaHVnZXRsYmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG5mcy9odWdldGxiZnMvaW5vZGUuYy03MDEtXHRcdFx0XHRsb2ZmX3QgbGVuKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTcwMy1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NzA0Olx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICppbmZvID0gSFVHRVRMQkZTX0koaW5vZGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzA1LVx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzE4LVx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo3MTk6XHRcdGVycm9yID0gaHVnZXRsYmZzX3B1bmNoX2hvbGUoaW5vZGUsIG9mZnNldCwgbGVuKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTcyMC1cdFx0Z290byBvdXRfbm9sb2NrO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgyNi1vdXRfbm9sb2NrOlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODI3Olx0dHJhY2VfaHVnZXRsYmZzX2ZhbGxvY2F0ZShpbm9kZSwgbW9kZSwgb2Zmc2V0LCBsZW4sIGVycm9yKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgyOC1cdHJldHVybiBlcnJvcjtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MzAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4MzE6c3RhdGljIGludCBodWdldGxiZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgzMi1cdFx0XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgzNy1cdHVuc2lnbmVkIGludCBpYV92YWxpZCA9IGF0dHItXHUwMDNlaWFfdmFsaWQ7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo4Mzg6XHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmluZm8gPSBIVUdFVExCRlNfSShpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy04MzktXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODQzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODQ0Olx0dHJhY2VfaHVnZXRsYmZzX3NldGF0dHIoaW5vZGUsIGRlbnRyeSwgYXR0cik7XG5mcy9odWdldGxiZnMvaW5vZGUuYy04NDUtXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODYzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODY0OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODY1Olx0XHRcdFx0XHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eClcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg2Ni17XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODc1LVx0XHRzaW1wbGVfaW5vZGVfaW5pdF90cyhpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo4NzY6XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG5mcy9odWdldGxiZnMvaW5vZGUuYy04NzctXHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2c2ltcGxlX2Rpcl9vcGVyYXRpb25zO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg5MS0gKi9cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjg5MjpzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGh1Z2V0bGJmc19pX21tYXBfcndzZW1fa2V5O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtODkzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODk0OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg5NS1cdFx0XHRcdFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTEzLVx0aWYgKGlub2RlKSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo5MTQ6XHRcdHN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyAqaW5mbyA9IEhVR0VUTEJGU19JKGlub2RlKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkxNS1cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy05MTgtXHRcdGxvY2tkZXBfc2V0X2NsYXNzKFx1MDAyNmlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VpX21tYXBfcndzZW0sXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5MTk6XHRcdFx0XHRcdTAwMjZodWdldGxiZnNfaV9tbWFwX3J3c2VtX2tleSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo5MjA6XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmh1Z2V0bGJmc19hb3BzO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTIxLVx0XHRzaW1wbGVfaW5vZGVfaW5pdF90cyhpbm9kZSk7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTI4LVx0XHRjYXNlIFNfSUZSRUc6XG5mcy9odWdldGxiZnMvaW5vZGUuYzo5Mjk6XHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTMwOlx0XHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkzMS1cdFx0XHRicmVhaztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkzMi1cdFx0Y2FzZSBTX0lGRElSOlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTMzOlx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG5mcy9odWdldGxiZnMvaW5vZGUuYy05MzQtXHRcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZzaW1wbGVfZGlyX29wZXJhdGlvbnM7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTQ0LVx0XHRsb2NrZGVwX2Fubm90YXRlX2lub2RlX211dGV4X2tleShpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo5NDU6XHRcdHRyYWNlX2h1Z2V0bGJmc19hbGxvY19pbm9kZShpbm9kZSwgZGlyLCBtb2RlKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk0Ni1cdH0gZWxzZSB7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTU2LSAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTU3OnN0YXRpYyBpbnQgaHVnZXRsYmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk1OC1cdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk2MS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk2MjpcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShkaXItXHUwMDNlaV9zYiwgaWRtYXAsIGRpciwgbW9kZSwgZGV2KTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk2My1cdGlmICghaW5vZGUpXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTY5LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTcwOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpodWdldGxiZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTcxLVx0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NzIte1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTczOlx0aW50IHJldHZhbCA9IGh1Z2V0bGJmc19ta25vZChpZG1hcCwgZGlyLCBkZW50cnksXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NzQtXHRcdFx0XHQgICAgIG1vZGUsIDApO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk3OS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk4MDpzdGF0aWMgaW50IGh1Z2V0bGJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODEtXHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTgzLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk4NDpcdHJldHVybiBodWdldGxiZnNfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODUtfVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTg2LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTg3OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODgtXHRcdFx0ICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTkyLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTkzOlx0aW5vZGUgPSBodWdldGxiZnNfZ2V0X2lub2RlKGRpci1cdTAwM2VpX3NiLCBpZG1hcCwgZGlyLCBtb2RlIHwgU19JRlJFRywgMCk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy05OTQtXHRpZiAoIWlub2RlKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMDAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDAxOnN0YXRpYyBpbnQgaHVnZXRsYmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDAyLVx0XHRcdCAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDA4LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTAwOTpcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShkaXItXHUwMDNlaV9zYiwgaWRtYXAsIGRpciwgbW9kZSwgMCk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDEwLVx0aWYgKGlub2RlKSB7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAyMy0jaWZkZWYgQ09ORklHX01JR1JBVElPTlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTAyNDpzdGF0aWMgaW50IGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAyNS1cdFx0XHRcdHN0cnVjdCBmb2xpbyAqZHN0LCBzdHJ1Y3QgZm9saW8gKnNyYyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDQ0LSNlbHNlXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDQ1OiNkZWZpbmUgaHVnZXRsYmZzX21pZ3JhdGVfZm9saW8gTlVMTFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA0Ni0jZW5kaWZcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNDctXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDQ4OnN0YXRpYyBpbnQgaHVnZXRsYmZzX2Vycm9yX3JlbW92ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNDktXHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNTYtICovXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDU3OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDU4LXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNTk6XHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbyA9IEhVR0VUTEJGU19TQihyb290LVx1MDAzZWRfc2IpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA2MC1cdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHNiaW5mby1cdTAwM2VzcG9vbDtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDkzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTA5NDpzdGF0aWMgaW50IGh1Z2V0bGJmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA5NS17XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDk2Olx0c3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8gPSBIVUdFVExCRlNfU0IoZGVudHJ5LVx1MDAzZWRfc2IpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA5Ny1cdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfaW5vZGUoZF9pbm9kZShkZW50cnkpKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTI4LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTEyOTpzdGF0aWMgdm9pZCBodWdldGxiZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTMwLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExMzE6XHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaSA9IEhVR0VUTEJGU19TQihzYik7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTMyLVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNDEtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTQyOnN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJmc19kZWNfZnJlZV9pbm9kZXMoc3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8pXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTQzLXtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTU2LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE1NzpzdGF0aWMgdm9pZCBodWdldGxiZnNfaW5jX2ZyZWVfaW5vZGVzKHN0cnVjdCBodWdldGxiZnNfc2JfaW5mbyAqc2JpbmZvKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE1OC17XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE2Ni1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNjc6c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpodWdldGxiZnNfaW5vZGVfY2FjaGVwO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE2OC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNjk6c3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTcwLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzE6XHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbyA9IEhVR0VUTEJGU19TQihzYik7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTcyOlx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICpwO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3My1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzQ6XHRpZiAodW5saWtlbHkoIWh1Z2V0bGJmc19kZWNfZnJlZV9pbm9kZXMoc2JpbmZvKSkpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTc1LVx0XHRyZXR1cm4gTlVMTDtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzY6XHRwID0gYWxsb2NfaW5vZGVfc2Ioc2IsIGh1Z2V0bGJmc19pbm9kZV9jYWNoZXAsIEdGUF9LRVJORUwpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3Ny1cdGlmICh1bmxpa2VseSghcCkpIHtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzg6XHRcdGh1Z2V0bGJmc19pbmNfZnJlZV9pbm9kZXMoc2JpbmZvKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNzktXHRcdHJldHVybiBOVUxMO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExODMtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTg0OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTg1LXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExODY6XHR0cmFjZV9odWdldGxiZnNfZnJlZV9pbm9kZShpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTg3Olx0a21lbV9jYWNoZV9mcmVlKGh1Z2V0bGJmc19pbm9kZV9jYWNoZXAsIEhVR0VUTEJGU19JKGlub2RlKSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTg4LX1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExODktXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTkwOnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTkxLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExOTI6XHRodWdldGxiZnNfaW5jX2ZyZWVfaW5vZGVzKEhVR0VUTEJGU19TQihpbm9kZS1cdTAwM2VpX3NiKSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTkzLX1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExOTQtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTk1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19hb3BzID0ge1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE5NjpcdC53cml0ZV9iZWdpblx0PSBodWdldGxiZnNfd3JpdGVfYmVnaW4sXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTk3Olx0LndyaXRlX2VuZFx0PSBodWdldGxiZnNfd3JpdGVfZW5kLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE5OC1cdC5kaXJ0eV9mb2xpb1x0PSBub29wX2RpcnR5X2ZvbGlvLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE5OTpcdC5taWdyYXRlX2ZvbGlvICA9IGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIwMDpcdC5lcnJvcl9yZW1vdmVfZm9saW9cdD0gaHVnZXRsYmZzX2Vycm9yX3JlbW92ZV9mb2xpbyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMDEtfTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMjA0PXN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjA1LXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMDY6XHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmVpID0gZm9vO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIwNy1cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjEwLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxMTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxMjpcdC5yZWFkX2l0ZXJcdFx0PSBodWdldGxiZnNfcmVhZF9pdGVyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxMzpcdC5tbWFwXHRcdFx0PSBodWdldGxiZnNfZmlsZV9tbWFwLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIxNC1cdC5mc3luY1x0XHRcdD0gbm9vcF9mc3luYyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjE2LVx0Lmxsc2Vla1x0XHRcdD0gZGVmYXVsdF9sbHNlZWssXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjE3Olx0LmZhbGxvY2F0ZVx0XHQ9IGh1Z2V0bGJmc19mYWxsb2NhdGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjE4LVx0LmZvcF9mbGFnc1x0XHQ9IEZPUF9IVUdFX1BBR0VTLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMjAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjIxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjIyOlx0LmNyZWF0ZVx0XHQ9IGh1Z2V0bGJmc19jcmVhdGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjIzLVx0Lmxvb2t1cFx0XHQ9IHNpbXBsZV9sb29rdXAsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIyNS1cdC51bmxpbmtcdFx0PSBzaW1wbGVfdW5saW5rLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIyNjpcdC5zeW1saW5rXHQ9IGh1Z2V0bGJmc19zeW1saW5rLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIyNzpcdC5ta2Rpclx0XHQ9IGh1Z2V0bGJmc19ta2RpcixcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMjgtXHQucm1kaXJcdFx0PSBzaW1wbGVfcm1kaXIsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjI5Olx0Lm1rbm9kXHRcdD0gaHVnZXRsYmZzX21rbm9kLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzMC1cdC5yZW5hbWVcdFx0PSBzaW1wbGVfcmVuYW1lLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIzMTpcdC5zZXRhdHRyXHQ9IGh1Z2V0bGJmc19zZXRhdHRyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIzMjpcdC50bXBmaWxlXHQ9IGh1Z2V0bGJmc190bXBmaWxlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzMy19O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzNC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMzU6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zID0ge1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIzNjpcdC5zZXRhdHRyXHQ9IGh1Z2V0bGJmc19zZXRhdHRyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzNy19O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzOC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMzk6c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGh1Z2V0bGJmc19vcHMgPSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQwOlx0LmFsbG9jX2lub2RlICAgID0gaHVnZXRsYmZzX2FsbG9jX2lub2RlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0MTpcdC5mcmVlX2lub2RlICAgICA9IGh1Z2V0bGJmc19mcmVlX2lub2RlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0MjpcdC5kZXN0cm95X2lub2RlICA9IGh1Z2V0bGJmc19kZXN0cm95X2lub2RlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0MzpcdC5ldmljdF9pbm9kZVx0PSBodWdldGxiZnNfZXZpY3RfaW5vZGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQ0Olx0LnN0YXRmc1x0XHQ9IGh1Z2V0bGJmc19zdGF0ZnMsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQ1Olx0LnB1dF9zdXBlclx0PSBodWdldGxiZnNfcHV0X3N1cGVyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0NjpcdC5zaG93X29wdGlvbnNcdD0gaHVnZXRsYmZzX3Nob3dfb3B0aW9ucyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyNDctfTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMjU0PXN0YXRpYyBsb25nXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjU1Omh1Z2V0bGJmc19zaXplX3RvX2hwYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZV9vcHQsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjU2Olx0XHRcdCBlbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgdmFsX3R5cGUpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjU3LXtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjczLSAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI3NDpzdGF0aWMgaW50IGh1Z2V0bGJmc19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI3NS17XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjc2Olx0c3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0ICpjdHggPSBmYy1cdTAwM2Vmc19wcml2YXRlO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI3Ny1cdHN0cnVjdCBmc19wYXJzZV9yZXN1bHQgcmVzdWx0O1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNDgtICovXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzQ5OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3ZhbGlkYXRlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNTAte1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM1MTpcdHN0cnVjdCBodWdldGxiZnNfZnNfY29udGV4dCAqY3R4ID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNTItXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTM1Ni1cdCAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM1NzpcdGN0eC1cdTAwM2VtYXhfaHBhZ2VzID0gaHVnZXRsYmZzX3NpemVfdG9faHBhZ2VzKGN0eC1cdTAwM2Voc3RhdGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzU4LVx0XHRcdFx0XHRcdCAgIGN0eC1cdTAwM2VtYXhfc2l6ZV9vcHQsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzU5LVx0XHRcdFx0XHRcdCAgIGN0eC1cdTAwM2VtYXhfdmFsX3R5cGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM2MDpcdGN0eC1cdTAwM2VtaW5faHBhZ2VzID0gaHVnZXRsYmZzX3NpemVfdG9faHBhZ2VzKGN0eC1cdTAwM2Voc3RhdGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzYxLVx0XHRcdFx0XHRcdCAgIGN0eC1cdTAwM2VtaW5fc2l6ZV9vcHQsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTM3Nj1zdGF0aWMgaW50XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzc3Omh1Z2V0bGJmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNzgte1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM3OTpcdHN0cnVjdCBodWdldGxiZnNfZnNfY29udGV4dCAqY3R4ID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzODA6XHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzODEtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzgyOlx0c2JpbmZvID0ga21hbGxvY19vYmooc3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzODMtXHRpZiAoIXNiaW5mbylcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDEwLVx0c2ItXHUwMDNlc19tYWdpYyA9IEhVR0VUTEJGU19NQUdJQztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0MTE6XHRzYi1cdTAwM2VzX29wID0gXHUwMDI2aHVnZXRsYmZzX29wcztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTItXHRzYi1cdTAwM2VzX2RfZmxhZ3MgPSBEQ0FDSEVfRE9OVENBQ0hFO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTUtXHQvKlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQxNjpcdCAqIER1ZSB0byB0aGUgc3BlY2lhbCBhbmQgbGltaXRlZCBmdW5jdGlvbmFsaXR5IG9mIGh1Z2V0bGJmcywgaXQgZG9lc1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQxNy1cdCAqIG5vdCB3b3JrIHdlbGwgYXMgYSBzdGFja2luZyBmaWxlc3lzdGVtLlxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTktXHRzYi1cdTAwM2VzX3N0YWNrX2RlcHRoID0gRklMRVNZU1RFTV9NQVhfU1RBQ0tfREVQVEg7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDIwOlx0c2ItXHUwMDNlc19yb290ID0gZF9tYWtlX3Jvb3QoaHVnZXRsYmZzX2dldF9yb290KHNiLCBjdHgpKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MjEtXHRpZiAoIXNiLVx1MDAzZXNfcm9vdClcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDI5LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQzMDpzdGF0aWMgaW50IGh1Z2V0bGJmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDMxLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0MzI6XHRpbnQgZXJyID0gaHVnZXRsYmZzX3ZhbGlkYXRlKGZjKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MzMtXHRpZiAoZXJyKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNC1cdFx0cmV0dXJuIGVycjtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0MzU6XHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGh1Z2V0bGJmc19maWxsX3N1cGVyKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MzYtfVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNy1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0Mzg6c3RhdGljIHZvaWQgaHVnZXRsYmZzX2ZzX2NvbnRleHRfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDM5LXtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDQyLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ0MzpzdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBodWdldGxiZnNfZnNfY29udGV4dF9vcHMgPSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ0Olx0LmZyZWVcdFx0PSBodWdldGxiZnNfZnNfY29udGV4dF9mcmVlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ0NTpcdC5wYXJzZV9wYXJhbVx0PSBodWdldGxiZnNfcGFyc2VfcGFyYW0sXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ2Olx0LmdldF90cmVlXHQ9IGh1Z2V0bGJmc19nZXRfdHJlZSxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NDctfTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NDgtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ5OnN0YXRpYyBpbnQgaHVnZXRsYmZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDUwLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0NTE6XHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eDtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NTItXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDUzOlx0Y3R4ID0ga3phbGxvY19vYmooc3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0KTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NTQtXHRpZiAoIWN0eClcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDY2LVx0ZmMtXHUwMDNlZnNfcHJpdmF0ZSA9IGN0eDtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0Njc6XHRmYy1cdTAwM2VvcHNcdD0gXHUwMDI2aHVnZXRsYmZzX2ZzX2NvbnRleHRfb3BzO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ2OC1cdHJldHVybiAwO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDcxOnN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBodWdldGxiZnNfZnNfdHlwZSA9IHtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0NzI6XHQubmFtZVx0XHRcdD0gXCYjMzQ7aHVnZXRsYmZzXCYjMzQ7LFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3MzpcdC5pbml0X2ZzX2NvbnRleHRcdD0gaHVnZXRsYmZzX2luaXRfZnNfY29udGV4dCxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzQtXHQucGFyYW1ldGVyc1x0XHQ9IGh1Z2V0bGJfZnNfcGFyYW1ldGVycyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDc4LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3OTpzdGF0aWMgc3RydWN0IHZmc21vdW50ICpodWdldGxiZnNfdmZzbW91bnRbSFVHRV9NQVhfSFNUQVRFXTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0ODAtXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTUwMT1zdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MTMtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTE0Olx0bW50ID0gaHVnZXRsYmZzX3Zmc21vdW50W2hzdGF0ZV9pZHhdO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTUxNS1cdGlmICghbW50KVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MjktXHRmaWxlID0gRVJSX1BUUigtRU5PU1BDKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1MzA6XHQvKiBodWdldGxiZnNfdmZzbW91bnRbXSBtb3VudHMgZG8gbm90IHVzZSBpZG1hcHBlZCBtb3VudHMuICAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTUzMTpcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShtbnQtXHUwMDNlbW50X3NiLCBcdTAwMjZub3BfbW50X2lkbWFwLCBOVUxMLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTUzMi1cdFx0XHRcdCAgICBTX0lGUkVHIHwgU19JUldYVUdPLCAwKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTQ2LVx0XHRmaWxlID0gYWxsb2NfZmlsZV9wc2V1ZG8oaW5vZGUsIG1udCwgbmFtZSwgT19SRFdSLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU0NzpcdFx0XHRcdFx0XHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTQ4LVx0aWYgKCFJU19FUlIoZmlsZSkpXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU1NS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NTY6c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqX19pbml0IG1vdW50X29uZV9odWdldGxiZnMoc3RydWN0IGhzdGF0ZSAqaClcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NTcte1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTYxOlx0ZmMgPSBmc19jb250ZXh0X2Zvcl9tb3VudChcdTAwMjZodWdldGxiZnNfZnNfdHlwZSwgU0JfS0VSTk1PVU5UKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjItXHRpZiAoSVNfRVJSKGZjKSkge1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjQtXHR9IGVsc2Uge1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU2NTpcdFx0c3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0ICpjdHggPSBmYy1cdTAwM2Vmc19wcml2YXRlO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU2Ni1cdFx0Y3R4LVx1MDAzZWhzdGF0ZSA9IGg7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU3MC1cdGlmIChJU19FUlIobW50KSlcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NzE6XHRcdHByX2VycihcJiMzNDtDYW5ub3QgbW91bnQgaW50ZXJuYWwgaHVnZXRsYmZzIGZvciBwYWdlIHNpemUgJWx1S1wmIzM0OyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NzItXHRcdCAgICAgICBodWdlX3BhZ2Vfc2l6ZShoKSAvIFNaXzFLKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTc1LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU3NjpzdGF0aWMgaW50IF9faW5pdCBpbml0X2h1Z2V0bGJmc19mcyh2b2lkKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU3Ny17XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU4OC1cdGVycm9yID0gLUVOT01FTTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1ODk6XHRodWdldGxiZnNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoXCYjMzQ7aHVnZXRsYmZzX2lub2RlX2NhY2hlXCYjMzQ7LFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU5MDpcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyksXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTkxLVx0XHRcdFx0XHQwLCBTTEFCX0FDQ09VTlQsIGluaXRfb25jZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTkyOlx0aWYgKGh1Z2V0bGJmc19pbm9kZV9jYWNoZXAgPT0gTlVMTClcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1OTMtXHRcdGdvdG8gb3V0O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU5NC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1OTU6XHRlcnJvciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oXHUwMDI2aHVnZXRsYmZzX2ZzX3R5cGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU5Ni1cdGlmIChlcnJvcilcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTk5LVx0LyogZGVmYXVsdCBoc3RhdGUgbW91bnQgaXMgcmVxdWlyZWQgKi9cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MDA6XHRtbnQgPSBtb3VudF9vbmVfaHVnZXRsYmZzKFx1MDAyNmRlZmF1bHRfaHN0YXRlKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MDEtXHRpZiAoSVNfRVJSKG1udCkpIHtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjA0LVx0fVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYwNTpcdGh1Z2V0bGJmc192ZnNtb3VudFtkZWZhdWx0X2hzdGF0ZV9pZHhdID0gbW50O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYwNi1cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjE0LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYxNTpcdFx0bW50ID0gbW91bnRfb25lX2h1Z2V0bGJmcyhoKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MTYtXHRcdGlmIChJU19FUlIobW50KSlcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MTc6XHRcdFx0aHVnZXRsYmZzX3Zmc21vdW50W2ldID0gTlVMTDtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MTgtXHRcdGVsc2VcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MTk6XHRcdFx0aHVnZXRsYmZzX3Zmc21vdW50W2ldID0gbW50O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYyMC1cdFx0aSYjNDM7JiM0Mzs7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYyNS0gb3V0X3VucmVnOlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYyNjpcdCh2b2lkKXVucmVnaXN0ZXJfZmlsZXN5c3RlbShcdTAwMjZodWdldGxiZnNfZnNfdHlwZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjI3LSBvdXRfZnJlZTpcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2Mjg6XHRrbWVtX2NhY2hlX2Rlc3Ryb3koaHVnZXRsYmZzX2lub2RlX2NhY2hlcCk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjI5LSBvdXQ6XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYzMS19XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNjMyOmZzX2luaXRjYWxsKGluaXRfaHVnZXRsYmZzX2ZzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODM3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEh1Z2UgUGFnZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGBIVUdFVExCRlNgIGFuZCBgSFVHRVRMQl9QQUdFYC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGV5JiMzOTtyZSByZWxhdGVkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGxvZ2ljIHN0cmFpZ2h0IGluIG15IGhlYWQuIFRpbWUgdG8gb3BlbiB1cCB0aGUgYGZzL0tjb25maWdgIGZpbGUgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEkga25vdyB0aGF0JiMzOTtzIHRoZSBjYW5vbmljYWwgcGxhY2UgZm9yIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCB0aGVpciBkZXNjcmlwdGlvbnMsIGFuZCwgY3JpdGljYWxseSwgdGhlaXIgcmVsYXRpb25zaGlwcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDI1MCDigJMgdGhhdCBmZWVscyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCBsb29raW5nLCBnaXZlbiBteSBleHBlcmllbmNlIHdpdGggc2ltaWxhciBvcHRpb25zIGluIHRoZSBwYXN0LiBIb3BlZnVsbHksIHRoYXQgc2VjdGlvbiB3aWxsIGNvbnRhaW4gdGhlIHJlbGV2YW50IGBjb25maWdgIHN0YXRlbWVudHMgYW5kIGFueSBgZGVwZW5kcyBvbmAgY2xhdXNlcyB0aGF0IHNwZWxsIG91dCBleGFjdGx5IGhvdyB0aGVzZSB0d28gb3B0aW9ucyBhcmUgbGlua2VkLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgYGRlcGVuZHMgb25gIGRpcmVjdGl2ZXMgc3BlY2lmeWluZyB3aGljaCBvdGhlciBvcHRpb25zIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhlc2UgdG8gZXZlbiBzaG93IHVwIGluIHRoZSBtZW51Y29uZmlnLCBvciB3aGljaCBmZWF0dXJlcyB0aGV5IGNhbiBlbmFibGUuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgb25lIGlzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSBvdGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI0NjpcdFxuIDI0NzpcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI0ODpcdFx0ZGVmX2Jvb2wgblxuIDI0OTpcdFxuIDI1MDpcdG1lbnVjb25maWcgSFVHRVRMQkZTXG4gMjUxOlx0XHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuIDI1MjpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI1MzpcdFx0c2VsZWN0IE1FTUZEX0NSRUFURVxuIDI1NDpcdFx0c2VsZWN0IFBBREFUQSBpZiBTTVBcbiAyNTU6XHRcdGhlbHBcbiAyNTY6XHRcdCAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvblxuIDI1NzpcdFx0ICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkXG4gMjU4Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMjU5Olx0XG4gMjYwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjYxOlx0XG4gMjYyOlx0aWYgSFVHRVRMQkZTXG4gMjYzOlx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbiAyNjQ6XHRcdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuIDI2NTpcdFx0ZGVmYXVsdCBuXG4gMjY2Olx0XHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG4gMjY3Olx0XHRoZWxwXG4gMjY4Olx0XHQgIFRoZSBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9mZi4gU2F5IFkgaGVyZSB0b1xuIDI2OTpcdFx0ICBlbmFibGUgSFZPIGJ5IGRlZmF1bHQuIEl0IGNhbiBiZSBkaXNhYmxlZCB2aWEgaHVnZXRsYl9mcmVlX3ZtZW1tYXA9b2ZmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NDIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgSFVHRVRMQl9QQUdFKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHRhc2sgYXQgaGFuZC4gSSBzaG91bGQgaW1tZWRpYXRlbHkgY3Jvc3MtcmVmZXJlbmNlIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSBpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIGZvciBzZXR0aW5ncyByZWxhdGVkIHRvIEh1Z2VUTEIgcGFnZXMuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZGVmaW5pbmcgZmVhdHVyZS4gVGhpcyB3aWxsIGhlbHAgdG8gY29uZmlybSB3aGF0LCBpZiBhbnksIGZlYXR1cmVzIHdlcmUgZW5hYmxlZCwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXJlIG1heSBoYXZlIGJlZW4gb24gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYEhVR0VUTEJfUEFHRWAuIExldCYjMzk7cyBjb25maXJtIGhvdyB0aGUgc3BlY2lmaWMgb3B0aW9ucyBmb3IgdGhhdCBhcmUgc2V0IHVwLiBJIGNhbiYjMzk7dCBhc3N1bWUgYW55dGhpbmcuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCX1BBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02OTQ9Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXG4tLVxubW0vS2NvbmZpZy02OTYtXG5tbS9LY29uZmlnOjY5Nzpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNjk4LVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg0MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkZpbmRpbmcgdGhlIEhVR0VUTEJfUEFHRSBEZWZpbml0aW9uIGluIEtjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYEhVR0VUTEJfUEFHRWAgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGxpa2VseSB0aWVzIGludG8gaHVnZSBwYWdlIHN1cHBvcnQsIGFuZCBmaWd1cmluZyBvdXQgaXRzIGV4YWN0IGRlZmluaXRpb24gd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZSB0cmVlJiMzOTtzIEtjb25maWcgZmlsZXMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBncmVwYCBvciBhIHNpbWlsYXIgc2VhcmNoIHRvb2wgdG8gcXVpY2tseSBsb2NhdGUgaXQuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcGFydCBvZiB0aGUgbWVtb3J5IG9yIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgYnV0IGJlc3QgdG8gc3RhcnQgd2l0aCBhIGJyb2FkIHNlYXJjaCB0byBlbnN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBnZW5lcmFsIHNlYXJjaCBhbmQgdGhlbiBuYXJyb3cgdGhlIHNjb3BlIGlmIG5lY2Vzc2FyeS4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgaW5jbHVzaW9uIGFuZCBhbnkgYXNzb2NpYXRlZCBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSB1c2Ugb2YgaHVnZSBwYWdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcbmZzL0tjb25maWctMjcyLVxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExMzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgSFVHRVRMQkZTIG9uIEh1Z2UgUGFnZXMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYEhVR0VUTEJGU2AgZW5hYmxpbmcgYEhVR0VUTEJfUEFHRWAuIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBjb3JlIHJlbGF0aW9uc2hpcCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgcGxheXMgb3V0IGluIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkIGJ5IHRoaXMgZGlmZi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZzoKCjEuICBgaHVnZXRsYmZzX3N0YXRmc2AgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYC4gVGhpcyBzdWdnZXN0cyBjaGFuZ2VzIHRvIGhvdyB0aGUgZmlsZSBzeXN0ZW0mIzM5O3Mgc3RhdHVzIGlzIHJlcG9ydGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gV2UgY291bGQgc2VlIGRpZmZlcmVudCByZXBvcnRpbmcgcmVsYXRpbmcgdG8gaHVnZSBwYWdlIGFsbG9jYXRpb25zLgoyLiAgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYCBpbiBgbW0vaHVnZXRsYi5jYC4gVGhhdCYjMzk7cyBhIGtleSBvbmUuIEl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLCBzdWdnZXN0aW5nIGEgcmVsYXRpb25zaGlwIHdpdGggcGFnZSBhbGxvY2F0aW9uIGFuZCByZXNlcnZhdGlvbi4KMy4gIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AgYWxzbyBpbiBgbW0vaHVnZXRsYi5jYC4gQW5vdGhlciBzdGF0aWMgZnVuY3Rpb24sIGl0JiMzOTtzIGNhbGxlZCBieSB0aGUgY291bnRlcnBhcnRzIG9mIHRoZSAmIzM0O2dldCYjMzQ7IGZ1bmN0aW9ucywgcGx1cyBgcmVtb3ZlX2lub2RlX2h1Z2VwYWdlc2AuIEl0JiMzOTtzIHJlbGF0ZWQgdG8gcmVsZWFzaW5nIHBhZ2VzLgo0LiAgYHN1YnBvb2xfaXNfZnJlZWAgYWxzbyBpbiBgbW0vaHVnZXRsYi5jYC4gVGhpcyBpcyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAgYW5kIGBodWdlcGFnZV9wdXRfc3VicG9vbGAsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHByb2Nlc3MuCjUuICBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgaW4gYG1tL2h1Z2V0bGIuY2AuIFRoaXMgaXMgb2J2aW91c2x5IGEga2V5IGZ1bmN0aW9uIGZvciBmb2xpbyBhbGxvY2F0aW9uLCBzbyBpdCYjMzk7cyBlc3NlbnRpYWwgdG8gbG9vayBhdC4KNi4gIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGluIGBtbS9odWdldGxiLmNgLiBQYWdlIHJlc2VydmF0aW9uIGlzIGFsc28gYW4gaW1wb3J0YW50IHBhcnQgb2YgdGhlIGZvbGlvIHByb2Nlc3MuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgY2FsbGVycyBvZiB0aG9zZSBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgIGZ1bmN0aW9ucywganVzdCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgaG93IHRoZXNlIGNoYW5nZXMgYXJlIGludGVncmF0ZWQgYW5kIGVuc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIHRoZSBvdmVyYWxsIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfLipfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTE3OT12b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbi0tXG5tbS9odWdldGxiLmMtMTkyLS8qKlxubW0vaHVnZXRsYi5jOjE5MzogKiBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyAtIEdldCBwYWdlcyBmcm9tIGEgc3VicG9vbFxubW0vaHVnZXRsYi5jLTE5NC0gKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKVxuLS1cbm1tL2h1Z2V0bGIuYy0yMDQtICovXG5tbS9odWdldGxiLmM6MjA1OnN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbm1tL2h1Z2V0bGIuYy0yMDYtXHRcdFx0XHQgICAgICBsb25nIGRlbHRhKVxuLS1cbm1tL2h1Z2V0bGIuYy0yNDMtLyoqXG5tbS9odWdldGxiLmM6MjQ0OiAqIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzIC0gUmVsZWFzZSBwYWdlcyBiYWNrIHRvIGEgc3VicG9vbFxubW0vaHVnZXRsYi5jLTI0NS0gKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKVxuLS1cbm1tL2h1Z2V0bGIuYy0yNTYtICovXG5tbS9odWdldGxiLmM6MjU3OnN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbm1tL2h1Z2V0bGIuYy0yNTgtXHRcdFx0XHQgICAgICAgbG9uZyBkZWx0YSlcbi0tXG5tbS9odWdldGxiLmM9OTc1PXZvaWQgaHVnZXRsYl9maXhfcmVzZXJ2ZV9jb3VudHMoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5tbS9odWdldGxiLmMtOTgwLVxubW0vaHVnZXRsYi5jOjk4MTpcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XG5tbS9odWdldGxiLmMtOTgyLVx0aWYgKHJzdl9hZGp1c3QgXHUwMDNlIDApIHtcbi0tXG5tbS9odWdldGxiLmM9MTY4Nj12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGIuYy0xNzExLVx0ICogd291bGQgaGF2ZSBiZWVuIGEgcGFnZSByZXNlcnZlZCBpbiB0aGUgc3VicG9vbCBiZWZvcmUgYWxsb2NhdGlvblxubW0vaHVnZXRsYi5jOjE3MTI6XHQgKiB2aWEgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoKS4gIFNpbmNlIHdlIGFyZSAmIzM5O3Jlc3RvcmluZyYjMzk7IHRoZVxubW0vaHVnZXRsYi5jOjE3MTM6XHQgKiByZXNlcnZhdGlvbiwgZG8gbm90IGNhbGwgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoKSBhcyB0aGlzIHdpbGxcbm1tL2h1Z2V0bGIuYy0xNzE0LVx0ICogcmVtb3ZlIHRoZSByZXNlcnZlZCBwYWdlIGZyb20gdGhlIHN1YnBvb2wuXG4tLVxubW0vaHVnZXRsYi5jLTE3MjItXHRcdCAqL1xubW0vaHVnZXRsYi5jOjE3MjM6XHRcdGlmIChodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSkgPT0gMClcbm1tL2h1Z2V0bGIuYy0xNzI0LVx0XHRcdHJlc3RvcmVfcmVzZXJ2ZSA9IHRydWU7XG4tLVxubW0vaHVnZXRsYi5jPTI5NTQ9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0yOTk4LVx0aWYgKG1hcF9jaGcpIHtcbm1tL2h1Z2V0bGIuYzoyOTk5Olx0XHRnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XG5tbS9odWdldGxiLmMtMzAwMC1cdFx0aWYgKGdibF9yZXN2X2dldCBcdTAwM2MgMCkge1xuLS1cbm1tL2h1Z2V0bGIuYy0zMDY0LVxubW0vaHVnZXRsYi5jOjMwNjU6XHRcdFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbm1tL2h1Z2V0bGIuYy0zMDY2LVx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xuLS1cbm1tL2h1Z2V0bGIuYy0zMDc3LVx0aWYgKG1hcF9jaGcpIHtcbm1tL2h1Z2V0bGIuYzozMDc4Olx0XHRsb25nIGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbm1tL2h1Z2V0bGIuYy0zMDc5LVxuLS1cbm1tL2h1Z2V0bGIuYz00NzIxPXN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1fb3BfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZXRsYi5jLTQ3NDQtXHRcdCAqL1xubW0vaHVnZXRsYi5jOjQ3NDU6XHRcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHJlc2VydmUpO1xubW0vaHVnZXRsYi5jLTQ3NDYtXHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbi0tXG5tbS9odWdldGxiLmM9NjY3MT1sb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbm1tL2h1Z2V0bGIuYy02NzU4LVx0ICovXG5tbS9odWdldGxiLmM6Njc1OTpcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xubW0vaHVnZXRsYi5jLTY3NjAtXHRpZiAoZ2JsX3Jlc3ZfZ2V0IFx1MDAzYyAwKSB7XG4tLVxubW0vaHVnZXRsYi5jLTY4MDgtXG5tbS9odWdldGxiLmM6NjgwOTpcdFx0XHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsXG5tbS9odWdldGxiLmMtNjgxMC1cdFx0XHRcdFx0XHRcdFx0Y2hnIC0gYWRkKTtcbi0tXG5tbS9odWdldGxiLmMtNjgyOS1cdCAqL1xubW0vaHVnZXRsYi5jOjY4MzA6XHRnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgY2hnKTtcbm1tL2h1Z2V0bGIuYy02ODMxLVx0Lypcbi0tXG5tbS9odWdldGxiLmM9Njg1OD1sb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxuLS1cbm1tL2h1Z2V0bGIuYy02ODkyLVx0ICovXG5tbS9odWdldGxiLmM6Njg5MzpcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIChjaGcgLSBmcmVlZCkpO1xubW0vaHVnZXRsYi5jLTY4OTQtXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzk2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBzb21lb25lIGtub3dsZWRnZWFibGUgaW4gdGhpcyBhcmVhOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDYWxsZXJzIGluIGZzL2h1Z2V0bGJmcyoqCgpSaWdodCwgbGV0JiMzOTtzIG5vdCBsaW1pdCBvdXIgc2VhcmNoIHRvIGp1c3QgdGhlIG9idmlvdXMgc3VzcGVjdHMuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSBrbm93IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciwgYW5kIEkgaGF2ZSBhIGdvb2QgaWRlYSBvZiB3aGVyZSB0byBzdGFydCwgYnV0IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhlcmUmIzM5O3MgYWxtb3N0IGFsd2F5cyBzb21ldGhpbmcgbHVya2luZyBpbiB0aGUgc2hhZG93cy4gSSYjMzk7dmUgZ290IHRvIGNhc3QgYSB3aWRlciBuZXQuIFRoZSBjb3JlIGlzc3VlIGlzIHByb2JhYmx5IGxvY2FsaXplZCwgYnV0IEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIG1vbWVudCBhbmQgYWxzbyBtZXRpY3Vsb3VzbHkgY2hlY2sgYGZzL2h1Z2V0bGJmc2AuIFRoZXJlICpjb3VsZCogYmUgcmVsYXRlZCBjYWxscywgb3IgZXZlbiBzdWJ0bGUgaW50ZXJhY3Rpb25zLCBsdXJraW5nIHdpdGhpbiB0aGF0IHBhcnQgb2YgdGhlIGZpbGVzeXN0ZW0gY29kZSB0aGF0IEkmIzM5O20gbWlzc2luZy4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIGlmIGFueXRoaW5nIGVsc2UgaXMgdXNpbmcgdGhvc2UgY29tcG9uZW50cyBvciBmdW5jdGlvbnMuIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMgdG8gYXZvaWQgYW55IG5hc3R5IHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdlcGFnZV9zdWJwb29sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaHVnZXRsYmZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jPTEwNTc9c3RhdGljIGludCBodWdldGxiZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdClcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDU5LVx0c3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8gPSBIVUdFVExCRlNfU0Iocm9vdC1cdTAwM2VkX3NiKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNjA6XHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzYmluZm8tXHUwMDNlc3Bvb2w7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDYxLVx0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplID0gaHVnZV9wYWdlX3NpemUoc2JpbmZvLVx1MDAzZWhzdGF0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODA2CgkJCQkJCQlvdXRwdXQ6IDI4MQoJCQkJCQkJdGhvdWdodHM6IDk0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogSHVnZXRsYmZzIFN1YnBvb2wgQWNjb3VudGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHF1ZXN0aW9uOiBpcyB0aGlzIGNvZGUgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhlIGFuYWx5c2lzLCBhYnNvbHV0ZWx5LiBUaGUgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBRRU1VIGFuZCBzeXNjYWxscyBsaWtlIGBtbWFwYCwgYHN0YXRmc2AsIGFuZCBzcGVjaWZpYyBodWdldGxiZnMgbW91bnQgb3B0aW9ucyDigJMgbm8gbWFnaWMgcmVxdWlyZWQuIFRoaXMgaXMgYSBnb29kIHN0YXJ0LgoKVGhlIHJlYWwgbWVhdCBpcyBpbiB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBodWdldGxiIHN1YnBvb2wgYWNjb3VudGluZyBsb2dpYy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnM6IGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AsIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AsIGBzdWJwb29sX2lzX2ZyZWVgLCBgYWxsb2NfaHVnZXRsYl9mb2xpb2AsIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLCBhbmQgYGh1Z2V0bGJmc19zdGF0ZnNgLiBTcGVjaWZpY2FsbHksIHRoZSBhY2NvdW50aW5nIGZvciBgdXNlZF9ocGFnZXNgIGlzIHVuY29uZGl0aW9uYWxseSBhZGp1c3RlZCBub3csIGFuZCBtaW5pbXVtIHNpemUgY2FsY3VsYXRpb25zIGFyZSBjb21wbGV0ZWx5IHJlc3RydWN0dXJlZC4gRXJyb3IgdW53aW5kIGNhbGN1bGF0aW9ucyBmb3Igc3VicG9vbHMgYW5kIGdsb2JhbCByZXNlcnZhdGlvbnMgd2l0aGluIGBhbGxvY19odWdldGxiX2ZvbGlvYCBhbmQgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgaGF2ZSBhbHNvIGJlZW4gYWx0ZXJlZC4gVGhpcyBpcyBhIGRpcmVjdCB0b3VjaCB0byBtZW1vcnkgbWFuYWdlbWVudCBpbnZhcmlhbnRzIGluIGBtbS9odWdldGxiLmNgIGFuZCBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLiBUaGF0JiMzOTtzIGEgdGV4dGJvb2sgZGVmaW5pdGlvbiBvZiAmIzM0O3dvcnRoIGZ1enppbmcuJiMzNDsKCk5vdywgbGV0JiMzOTtzIGJlIHN0cmF0ZWdpYyBhYm91dCBvdXIgYEZvY3VzU3ltYm9sc2AuIFdlIGRvbiYjMzk7dCB3YW50IHRvIHdhc3RlIGN5Y2xlcyBvbiB1YmlxdWl0b3VzIGFsbG9jYXRvcnMgb3IgZ2VuZXJhbCBsb2NrIHByaW1pdGl2ZXMuIEluc3RlYWQsIHdlIHdhbnQgZnVuY3Rpb25zIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZSBwYXRjaC4gU28sIHdlJiMzOTtyZSB0YXJnZXRpbmcgdGhlc2UgZXhhY3Qgc3ltYm9sczoKCiogICBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgCiogICBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgCiogICBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYAoqICAgYGFsbG9jX2h1Z2V0bGJfZm9saW9gCiogICBgaHVnZXRsYmZzX3N0YXRmc2AKKiAgIGBodWdlcGFnZV9wdXRfc3VicG9vbGAgLyBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAgKHdoZXJlIHN1YnBvb2xfaXNfZnJlZSBpcyBjYWxsZWQpCiogICBgaHVnZXRsYl91bnJlc2VydmVfcGFnZXNgCiogICBgaHVnZXRsYl9maXhfcmVzZXJ2ZV9jb3VudHNgCgpDb25maXJtZWQgdGhlIGV4YWN0IG5hbWVzIGFnYWluc3QgYG1tL2h1Z2V0bGIuY2AgYW5kIGBmcy9odWdldGxiZnMvaW5vZGUuY2A6CgoqICAgYGh1Z2V0bGJmc19zdGF0ZnNgCiogICBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgCiogICBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgCiogICBgYWxsb2NfaHVnZXRsYl9mb2xpb2AKKiAgIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgCiogICBgaHVnZXRsYl91bnJlc2VydmVfcGFnZXNgCiogICBgaHVnZXBhZ2VfcHV0X3N1YnBvb2xgCgpBbmQgZm9yIGNvbmZpZ3VyYXRpb25zPyBXZSBuZWVkIGBIVUdFVExCRlNgLiBUaGlzIGltcGxpZXMgYEhVR0VUTEJfUEFHRWAgb24gc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMgKGxpa2UgeDg2XF82NCksIHNvIHRoYXQmIzM5O3MgY292ZXJlZC4gU2FuaXR5IGNoZWNrIGNvbmZpcm1zIHRoZSBmb3JtYXQgZm9yIGBFbmFibGVDb25maWdzYCBpcyBqdXN0IHRoZSBmbGFncyB3aXRob3V0IHRoZSBgQ09ORklHX2AgcHJlZml4OiBgWyYjMzQ7SFVHRVRMQkZTJiMzNDtdYCAob3IgcG90ZW50aWFsbHkgYFsmIzM0O0hVR0VUTEJGUyYjMzQ7LCAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7XWApLgoKU28sIHRvIHN1bW1hcml6ZSBhbmQgY29uZmlybToKCiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlLgoqICAgKipSZWFzb25pbmcqKjogU3VicG9vbCBhY2NvdW50aW5nIGFuZCBlcnJvciBoYW5kbGluZyBjaGFuZ2VzLCBpbXBhY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFjY2Vzc2libGUgdmlhIGBodWdldGxiZnNgIGFuZCBgbW1hcGAuCiogICAqKkZvY3VzU3ltYm9scyoqOiBTcGVjaWZpYyBmdW5jdGlvbnMgbGlzdGVkIGFib3ZlLgoqICAgKipFbmFibGVDb25maWdzKio6IGAmIzM0O0hVR0VUTEJGUyYjMzQ7YAoqICAgVGltZSB0byBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXRsYl9yZXNlcnZlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7aHVnZXRsYmZzX3N0YXRmcyYjMzQ7LAogICAgJiMzNDtodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV9wdXRfc3VicG9vbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiZnMgc3VicG9vbCBhY2NvdW50aW5nIGxvZ2ljIGFuZCByZXNlcnZhdGlvbiBlcnJvci11bndpbmQgcGF0aHMgaW4gbW0vaHVnZXRsYi5jIGFuZCBmcy9odWdldGxiZnMvaW5vZGUuYy4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIGhvdyBgdXNlZF9ocGFnZXNgIGFuZCBgcnN2X2hwYWdlc2AgYXJlIHVwZGF0ZWQgaW4gYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKClgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoKWAsIGFsdGVycyBzdWJwb29sIHJlbGVhc2UgY2hlY2tzIGluIGBzdWJwb29sX2lzX2ZyZWUoKWAsIGZpeGVzIHN0YXRmcyBjYWxjdWxhdGlvbiBmb3IgdW5ib3VuZGVkIHN1YnBvb2xzIGluIGBodWdldGxiZnNfc3RhdGZzKClgLCBhbmQgcmVmYWN0b3JzIGdsb2JhbCBtZW1vcnkgcmVzZXJ2YXRpb24gcm9sbGJhY2tzIGluIGBhbGxvY19odWdldGxiX2ZvbGlvKClgIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgLiBUaGlzIGxvZ2ljIGlzIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaHVnZXRsYmZzIGZpbGVzeXN0ZW0gbW91bnRzLCBhbGxvY2F0aW9ucywgYW5kIG1tYXAgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXRsYl9yZXNlcnZlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7aHVnZXRsYmZzX3N0YXRmcyYjMzQ7LAogICAgJiMzNDtodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV9wdXRfc3VicG9vbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiZnMgc3VicG9vbCBhY2NvdW50aW5nIGxvZ2ljIGFuZCByZXNlcnZhdGlvbiBlcnJvci11bndpbmQgcGF0aHMgaW4gbW0vaHVnZXRsYi5jIGFuZCBmcy9odWdldGxiZnMvaW5vZGUuYy4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIGhvdyBgdXNlZF9ocGFnZXNgIGFuZCBgcnN2X2hwYWdlc2AgYXJlIHVwZGF0ZWQgaW4gYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKClgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoKWAsIGFsdGVycyBzdWJwb29sIHJlbGVhc2UgY2hlY2tzIGluIGBzdWJwb29sX2lzX2ZyZWUoKWAsIGZpeGVzIHN0YXRmcyBjYWxjdWxhdGlvbiBmb3IgdW5ib3VuZGVkIHN1YnBvb2xzIGluIGBodWdldGxiZnNfc3RhdGZzKClgLCBhbmQgcmVmYWN0b3JzIGdsb2JhbCBtZW1vcnkgcmVzZXJ2YXRpb24gcm9sbGJhY2tzIGluIGBhbGxvY19odWdldGxiX2ZvbGlvKClgIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgLiBUaGlzIGxvZ2ljIGlzIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaHVnZXRsYmZzIGZpbGVzeXN0ZW0gbW91bnRzLCBhbGxvY2F0aW9ucywgYW5kIG1tYXAgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdWJwb29sIGFjY291bnRpbmcgYW5kIHJlc2VydmF0aW9uIGxvZ2ljIGZvciBodWdldGxiZnMgKGluY2x1ZGluZyBodWdldGxiX3N1YnBvb2xfZ2V0X3BhZ2VzLCBodWdldGxiX3N1YnBvb2xfcHV0X3BhZ2VzLCBzdGF0ZnMgcmVwb3J0aW5nLCBhbmQgcm9sbGJhY2sgaGFuZGxpbmcgaW4gYWxsb2NfaHVnZXRsYl9mb2xpbyBhbmQgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKS5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChzdWNoIGFzIGdibF9yZXN2X2dldCwgZ2JsX3Jlc3ZfcHV0LCBnYmxfcmVzdl9hY2N0ZWQsIGxpbWl0LCBhbmQgZnJlZV9wYWdlcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhY3Jvc3MgYWxsIGNvbnRyb2wgZmxvdyBwYXRocy4gTm8gbmV3IHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgYWxsb2NhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIG5vIHBhZGRpbmcgYnl0ZXMgYXJlIGV4cG9zZWQsIGFuZCBubyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgcGFzc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb25kaXRpb25hbCBicmFuY2hpbmcuXG5cblBvdGVudGlhbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaCBpbnZvbHZlIHBhZ2UgYWNjb3VudGluZyBpbmFjY3VyYWNpZXMsIGNvbmN1cnJlbmN5L3N5bmNocm9uaXphdGlvbiB1bmRlciByYWNlIGNvbmRpdGlvbnMsIG9yIG1lbW9yeSBleGhhdXN0aW9uLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucywgS0FTQU4sIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdhMzcwNTRhN2ZkOTk2YmUzMGU5MDM2NTU2MTdmODU2ZWZjNzY2ZDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDIyOjAxOjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QKaW5kZXggYTQ5MTE1ZGIxOGM3Ni4uZDI0NDU4M2ZkY2JjMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CkBAIC0zMTQsMjEgJiM0MzszMTQsOCBAQCBodWdlIHBhZ2VzLiAgSWYgdGhleSBjYW4gbm90IGJlIHJlc2VydmVkLCB0aGUgbW91bnQgZmFpbHMuCiBUaGUgcm91dGluZXMgaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgYXJlIGNhbGxlZCB3aGVuIHBhZ2VzIGFyZQogb2J0YWluZWQgZnJvbSBvciByZWxlYXNlZCBiYWNrIHRvIGEgc3VicG9vbC4gIFRoZXkgcGVyZm9ybSBhbGwgc3VicG9vbAogYWNjb3VudGluZywgYW5kIHRyYWNrIGFueSByZXNlcnZhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sLgotaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzIGFyZSBwYXNzZWQgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIGJ5IHdoaWNoCi10byBhZGp1c3QgdGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudCAoZG93biBmb3IgZ2V0LCB1cCBmb3IgcHV0KS4gIE5vcm1hbGx5LAotdGhleSByZXR1cm4gdGhlIHNhbWUgdmFsdWUgdGhhdCB3YXMgcGFzc2VkIG9yIGFuIGVycm9yIGlmIG5vdCBlbm91Z2ggcGFnZXMKLWV4aXN0IGluIHRoZSBzdWJwb29sLgotCi1Ib3dldmVyLCBpZiByZXNlcnZlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGEgcmV0dXJuIHZhbHVlIGxlc3MKLXRoYW4gdGhlIHBhc3NlZCB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQuICBUaGlzIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgdGhlCi1udW1iZXIgb2YgYWRkaXRpb25hbCBnbG9iYWwgcG9vbCBhZGp1c3RtZW50cyB3aGljaCBtdXN0IGJlIG1hZGUuICBGb3IgZXhhbXBsZSwKLXN1cHBvc2UgYSBzdWJwb29sIGNvbnRhaW5zIDMgcmVzZXJ2ZWQgaHVnZSBwYWdlcyBhbmQgc29tZW9uZSBhc2tzIGZvciA1LgotVGhlIDMgcmVzZXJ2ZWQgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGNhbiBiZSB1c2VkIHRvIHNhdGlzZnkgcGFydAotb2YgdGhlIHJlcXVlc3QuICBCdXQsIDIgcGFnZXMgbXVzdCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBnbG9iYWwgcG9vbHMuICBUbwotcmVsYXkgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUgY2FsbGVyLCB0aGUgdmFsdWUgMiBpcyByZXR1cm5lZC4gIFRoZSBjYWxsZXIKLWlzIHRoZW4gcmVzcG9uc2libGUgZm9yIGF0dGVtcHRpbmcgdG8gb2J0YWluIHRoZSBhZGRpdGlvbmFsIHR3byBwYWdlcyBmcm9tCi10aGUgZ2xvYmFsIHBvb2xzLgotCiYjNDM7aHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgdXNlIHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcyBwYXNzZWQgdG8gYWRqdXN0CiYjNDM7dGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudC4KIAogQ09XIGFuZCBSZXNlcnZhdGlvbnMKID09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CmluZGV4IDIwOTQ3ZjhiZDA2NTQuLmFlMWYxZjMxNDc3ZmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CkBAIC0yNDYsMTUgJiM0MzsyNDYsOCBAQCBodWdlcGFnZV9zdWJwb29s55qEbWluX2hwYWdlc+Wtl+auteS4reiiq+i3n+i4quOAguWcqOaMgui9veaXtu+8jGh1Z2V0bGJfYWNjdF9tZQog6KKr6LCD55So5Lul6aKE55WZ5oyH5a6a5pWw6YeP55qE5beo6aG144CC5aaC5p6c5a6D5Lus5LiN6IO96KKr6aKE55WZ77yM5oyC6L295bCx5Lya5aSx6LSl44CCCiAKIOW9k+S7juWtkOaxoOS4reiOt+WPluaIlumHiuaUvumhtemdouaXtu+8jOS8muiwg+eUqGh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygp5Ye95pWw44CCCi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXPooqvkvKDpgJLnu5nlt6jpobXmlbDph4/vvIzku6XmraTmnaXosIPmlbTlrZDmsaDnmoQg4oCc5bey55So6aG16Z2i4oCdIOiuoeaVsAot77yIZ2V05Li65LiL6ZmN77yMcHV05Li65LiK5Y2H77yJ44CC6YCa5bi45oOF5Ya15LiL77yM5aaC5p6c5a2Q5rGg5Lit5rKh5pyJ6Laz5aSf55qE6aG16Z2i77yM5a6D5Lus5Lya6L+U5Zue5LiO5Lyg6YCS55qE55u45ZCM55qE5YC85oiWCi3kuIDkuKrplJnor6/jgIIKLQot54S26ICM77yM5aaC5p6c6aKE55WZ5LiO5a2Q5rGg55u45YWz6IGU77yM5Y+v6IO95Lya6L+U5Zue5LiA5Liq5bCP5LqO5Lyg6YCS5YC855qE6L+U5Zue5YC844CC6L+Z5Liq6L+U5Zue5YC86KGo56S65b+F6aG76L+b6KGM55qE6aKd5aSW5YWo5bGACi3msaDosIPmlbTnmoTmlbDph4/jgILkvovlpoLvvIzlgYforr7kuIDkuKrlrZDmsaDljIXlkKsz5Liq6aKE55WZ55qE5beo6aG177yM5pyJ5Lq66KaB5rGCNeS4quOAguS4juWtkOaxoOebuOWFs+eahDPkuKrpooTnlZnpobXlj6/ku6XnlKjmnaUKLea7oei2s+mDqOWIhuivt+axguOAguS9huaYr++8jOW/hemhu+S7juWFqOWxgOaxoOS4reiOt+W+lzLkuKrpobXpnaLjgILkuLrkuoblkJHosIPnlKjogIXovazovr7ov5nkuIDkv6Hmga/vvIzlsIbov5Tlm57lgLwy44CC54S25ZCO77yM6LCD55SoCi3ogIXopoHotJ/otKPku47lhajlsYDmsaDkuK3ojrflj5blj6blpJbkuKTkuKrpobXpnaLjgIIKLQomIzQzO+Wug+S7rOi0n+i0o+aJgOacieWtkOaxoOeahOe7n+iuoeaguOeul++8jOW5tui3n+i4quS4juWtkOaxoOebuOWFs+iBlOeahOmihOeVmeOAggomIzQzO2h1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygp5Ye95pWw5L2/55So5Lyg5YWl55qE5beo6aG15pWw6YeP5p2l6LCD5pW05a2Q5rGg55qE4oCc5bey55So6aG16Z2i4oCd6K6h5pWw44CCCiAKIENPV+WSjOmihOeVmQogPT09PT09PT09PQpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCA3NjExYTg0NzBlYTI2Li41MTEzZjc0M2Y2ZmM3IDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtMTEwOSw4ICYjNDM7MTEwOSwxMiBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogCiAJCQlzcGluX2xvY2tfaXJxKCZhbXA7c2JpbmZvLSZndDtzcG9vbC0mZ3Q7bG9jayk7CiAJCQlidWYtJmd0O2ZfYmxvY2tzID0gc2JpbmZvLSZndDtzcG9vbC0mZ3Q7bWF4X2hwYWdlczsKLQkJCWZyZWVfcGFnZXMgPSBzYmluZm8tJmd0O3Nwb29sLSZndDttYXhfaHBhZ2VzCi0JCQkJLSBzYmluZm8tJmd0O3Nwb29sLSZndDt1c2VkX2hwYWdlczsKJiM0MzsJCQlpZiAoc2JpbmZvLSZndDtzcG9vbC0mZ3Q7bWF4X2hwYWdlcyA9PSAtMSkgewomIzQzOwkJCQlmcmVlX3BhZ2VzID0gLTE7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJZnJlZV9wYWdlcyA9IHNiaW5mby0mZ3Q7c3Bvb2wtJmd0O21heF9ocGFnZXMgLQomIzQzOwkJCQkJICAgICBzYmluZm8tJmd0O3Nwb29sLSZndDt1c2VkX2hwYWdlczsKJiM0MzsJCQl9CiAJCQlidWYtJmd0O2ZfYmF2YWlsID0gYnVmLSZndDtmX2JmcmVlID0gZnJlZV9wYWdlczsKIAkJCXNwaW5fdW5sb2NrX2lycSgmYW1wO3NiaW5mby0mZ3Q7c3Bvb2wtJmd0O2xvY2spOwogCQkJYnVmLSZndDtmX2ZpbGVzID0gc2JpbmZvLSZndDttYXhfaW5vZGVzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCAxNmM0YzRjYWExMjZjLi40NTUxZmYzMDIzNjQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtMzksOCAmIzQzOzM5LDggQEAgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgewogCXNwaW5sb2NrX3QgbG9jazsKIAlsb25nIGNvdW50OwogCWxvbmcgbWF4X2hwYWdlczsJLyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovCi0JbG9uZyB1c2VkX2hwYWdlczsJLyogVXNlZCBjb3VudCBhZ2FpbnN0IG1heGltdW0sIGluY2x1ZGVzICovCi0JCQkJLyogYm90aCBhbGxvY2F0ZWQgYW5kIHJlc2VydmVkIHBhZ2VzLiAqLwomIzQzOwlsb25nIHVzZWRfaHBhZ2VzOwkvKiBVc2VkIHBhZ2UgY291bnQsIGluY2x1ZGVzIGJvdGggKi8KJiM0MzsJCQkJLyogYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi8KIAlzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7CiAJbG9uZyBtaW5faHBhZ2VzOwkvKiBNaW5pbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWluaW11bS4gKi8KIAlsb25nIHJzdl9ocGFnZXM7CS8qIFBhZ2VzIHJlc2VydmVkIGFnYWluc3QgZ2xvYmFsIHBvb2wgdG8gKi8KZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA0ZjZmNThiZjNkYjZjLi4xMTUxYWQ5NTlmZmQ1IDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC0xMzAsMTIgJiM0MzsxMzAsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCkKIHsKIAlpZiAoc3Bvb2wtJmd0O2NvdW50KQogCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKQotCQlyZXR1cm4gc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDA7Ci0JaWYgKHNwb29sLSZndDttaW5faHBhZ2VzICE9IC0xKQotCQlyZXR1cm4gc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgPT0gc3Bvb2wtJmd0O21pbl9ocGFnZXM7CiAKLQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuIHNwb29sLSZndDt1c2VkX2hwYWdlcyA9PSAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCkBAIC0xOTMsMTMgJiM0MzsxODksMTggQEAgdm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCiAJdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpOwogfQogCi0vKgotICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBhbGxvY2F0aW5nIGFuZCByZXNlcnZpbmcgcGFnZXMuCi0gKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGUKLSAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZQotICogZ2xvYmFsIHBvb2xzIG11c3QgYmUgYWRqdXN0ZWQgKHVwd2FyZCkuICBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5Ci0gKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZQotICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuCiYjNDM7LyoqCiYjNDM7ICogaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMgLSBHZXQgcGFnZXMgZnJvbSBhIHN1YnBvb2wKJiM0MzsgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKQomIzQzOyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlIG9yIHJlc2VydmUKJiM0MzsgKgomIzQzOyAqIENoZWNrIGFuZCB1cGRhdGUgc3VicG9vbCBwYWdlIHVzYWdlIGNvdW50cyB3aGVuIGFsbG9jYXRpbmcgb3IKJiM0MzsgKiByZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IFRha2VzIHNwb29sLSZndDtsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnEoKS4KJiM0MzsgKiBSZXR1cm46IE5vbi1uZWdhdGl2ZSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgY2Fubm90IGJlCiYjNDM7ICogICAgICAgICBzYXRpc2ZpZWQgYnkgdGhlIHN1YnBvb2wsIG9yIC1FTk9NRU0gaWYgdGhlIHN1YnBvb2wgbWF4aW11bQomIzQzOyAqICAgICAgICAgbGltaXQgd291bGQgYmUgZXhjZWVkZWQuCiAgKi8KIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAkJCQkgICAgICBsb25nIGRlbHRhKQpAQCAtMjExLDE1ICYjNDM7MjEyLDE0IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAogCXNwaW5fbG9ja19pcnEoJmFtcDtzcG9vbC0mZ3Q7bG9jayk7CiAKLQlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEpIHsJCS8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovCi0JCWlmICgoc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzICYjNDM7IGRlbHRhKSAmbHQ7PSBzcG9vbC0mZ3Q7bWF4X2hwYWdlcykKLQkJCXNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7Ci0JCWVsc2UgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gdW5sb2NrX3JldDsKLQkJfQomIzQzOwlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOwomIzQzOwkgICAgc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzICYjNDM7IGRlbHRhICZndDsgc3Bvb2wtJmd0O21heF9ocGFnZXMpIHsKJiM0MzsJCXJldCA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIHVubG9ja19yZXQ7CiAJfQogCiYjNDM7CXNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7CiYjNDM7CiAJLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi8KIAlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOyBzcG9vbC0mZ3Q7cnN2X2hwYWdlcykgewogCQlpZiAoZGVsdGEgJmd0OyBzcG9vbC0mZ3Q7cnN2X2hwYWdlcykgewpAQCAtMjQwLDExICYjNDM7MjQwLDE5IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBmcmVlaW5nIGFuZCB1bnJlc2VydmluZyBwYWdlcy4KLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdsb2JhbCBwYWdlIHJlc2VydmF0aW9ucyB0aGF0IG11c3QgYmUgZHJvcHBlZC4KLSAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpCi0gKiBpbiB0aGUgY2FzZSB3aGVyZSBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC4KJiM0MzsvKioKJiM0MzsgKiBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyAtIFJlbGVhc2UgcGFnZXMgYmFjayB0byBhIHN1YnBvb2wKJiM0MzsgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKQomIzQzOyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGZyZWUgb3IgdW5yZXNlcnZlCiYjNDM7ICoKJiM0MzsgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBmcmVlaW5nIG9yCiYjNDM7ICogdW5yZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IFRha2VzIHNwb29sLSZndDtsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnFzYXZlKCkuIE1heSByZWxlYXNlCiYjNDM7ICogICAgICAgICAgYW5kIGZyZWUgQHNwb29sIGlmIGl0cyB1c2FnZSBjb3VudCBhbmQgcmVmZXJlbmNlcyByZWFjaAomIzQzOyAqICAgICAgICAgIHplcm8uCiYjNDM7ICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IHRoZSBzdWJwb29sIGNhbm5vdAomIzQzOyAqICAgICAgICAgYWJzb3JiLgogICovCiBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCiAJCQkJICAgICAgIGxvbmcgZGVsdGEpCkBAIC0yNTcsMTkgJiM0MzsyNjUsMjQgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzcG9vbC0mZ3Q7bG9jaywgZmxhZ3MpOwogCi0JaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKQkJLyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi8KLQkJc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzIC09IGRlbHRhOwomIzQzOwlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgLT0gZGVsdGE7CiAKIAkgLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi8KIAlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOyBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgJmx0OyBzcG9vbC0mZ3Q7bWluX2hwYWdlcykgewotCQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0MzsgZGVsdGEgJmx0Oz0gc3Bvb2wtJmd0O21pbl9ocGFnZXMpCiYjNDM7CQkvKgomIzQzOwkJICogbGltaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0CiYjNDM7CQkgKiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcyBzdWJwb29sLgomIzQzOwkJICovCiYjNDM7CQlsb25nIGxpbWl0ID0gc3Bvb2wtJmd0O21pbl9ocGFnZXMgLSBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXM7CiYjNDM7CiYjNDM7CQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0MzsgZGVsdGEgJmx0Oz0gbGltaXQpCiAJCQlyZXQgPSAwOwogCQllbHNlCi0JCQlyZXQgPSBzcG9vbC0mZ3Q7cnN2X2hwYWdlcyAmIzQzOyBkZWx0YSAtIHNwb29sLSZndDttaW5faHBhZ2VzOwomIzQzOwkJCXJldCA9IHNwb29sLSZndDtyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIC0gbGltaXQ7CiAKIAkJc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0Mzs9IGRlbHRhOwotCQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJmd0OyBzcG9vbC0mZ3Q7bWluX2hwYWdlcykKLQkJCXNwb29sLSZndDtyc3ZfaHBhZ2VzID0gc3Bvb2wtJmd0O21pbl9ocGFnZXM7CiYjNDM7CQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJmd0OyBsaW1pdCkKJiM0MzsJCQlzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9IGxpbWl0OwogCX0KIAogCS8qCkBAIC0yOTQ0LDcgJiM0MzsyOTU3LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfdm1hKHZtYSk7CiAJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwotCWxvbmcgcmV0dmFsLCBnYmxfY2hnLCBnYmxfcmVzZXJ2ZTsKJiM0MzsJbG9uZyByZXR2YWwsIGdibF9yZXN2X2dldDsKIAltYXBfY2hnX3N0YXRlIG1hcF9jaGc7CiAJc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCBtcG9saTsKIAlnZnBfdCBnZnAgPSBodGxiX2FsbG9jX21hc2soaCk7CkBAIC0yOTgzLDggJiM0MzsyOTk2LDggQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCSAqIE9yIGlmIGl0IGNhbiBnZXQgb25lIGZyb20gdGhlIHBvb2wgcmVzZXJ2YXRpb24gZGlyZWN0bHkuCiAJICovCiAJaWYgKG1hcF9jaGcpIHsKLQkJZ2JsX2NoZyA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTsKLQkJaWYgKGdibF9jaGcgJmx0OyAwKSB7CiYjNDM7CQlnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7CiYjNDM7CQlpZiAoZ2JsX3Jlc3ZfZ2V0ICZsdDsgMCkgewogCQkJcmV0ID0gLUVOT1NQQzsKIAkJCWdvdG8gb3V0X2VuZF9yZXNlcnZhdGlvbjsKIAkJfQpAQCAtMjk5Myw3ICYjNDM7MzAwNiw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJICogSWYgd2UgaGF2ZSB0aGUgdm1hIHJlc2VydmF0aW9uIHJlYWR5LCBubyBuZWVkIGZvciBleHRyYQogCQkgKiBnbG9iYWwgcmVzZXJ2YXRpb24uCiAJCSAqLwotCQlnYmxfY2hnID0gMDsKJiM0MzsJCWdibF9yZXN2X2dldCA9IDA7CiAJfQogCiAJLyoKQEAgLTMwMDQsMTAgJiM0MzszMDE3LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJYWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDsKIAogCS8qCi0JICogZ2JsX2NoZyA9PSAwIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyBmb3IgdGhpcwomIzQzOwkgKiBnYmxfcmVzdl9nZXQgPT0gMCBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoaXMKIAkgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LgogCSAqLwotCWlmIChnYmxfY2hnID09IDApCiYjNDM7CWlmIChnYmxfcmVzdl9nZXQgPT0gMCkKIAkJYWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUzsKIAogCS8qIFRha2VzIHJlZmVyZW5jZSBvbiBtcG9sLiAqLwpAQCAtMzA2MSwxMyAmIzQzOzMwNzQsMTAgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXJldHVybiBmb2xpbzsKIAogb3V0X3N1YnBvb2xfcHV0OgotCS8qCi0JICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wmIzM5O3MgcnN2X2hwYWdlcyBpcyB1c2VkCi0JICogZHVyaW5nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLgotCSAqLwotCWlmIChtYXBfY2hnICZhbXA7JmFtcDsgIWdibF9jaGcpIHsKLQkJZ2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7Ci0JCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTsKJiM0MzsJaWYgKG1hcF9jaGcpIHsKJiM0MzsJCWxvbmcgZ2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpOwomIzQzOwomIzQzOwkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpOwogCX0KIAogb3V0X2VuZF9yZXNlcnZhdGlvbjoKQEAgLTY2NjMsMTIgJiM0Mzs2NjczLDE1IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiB7Ci0JbG9uZyBjaGcgPSAtMSwgYWRkID0gLTEsIHNwb29sX3Jlc3YsIGdibF9yZXN2OwomIzQzOwlsb25nIGNoZyA9IC0xLCBhZGQgPSAtMTsKIAlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2lub2RlKGlub2RlKTsKIAlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX2lub2RlKGlub2RlKTsKIAlzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwOwogCXN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IE5VTEw7Ci0JbG9uZyBnYmxfcmVzZXJ2ZSwgcmVnaW9uc19uZWVkZWQgPSAwOwomIzQzOwlsb25nIGdibF9yZXN2X2FjY3RlZCA9IDA7CiYjNDM7CWxvbmcgcmVnaW9uc19uZWVkZWQgPSAwOwomIzQzOwlsb25nIGdibF9yZXN2X2dldDsKJiM0MzsJbG9uZyBnYmxfcmVzdl9wdXQ7CiAJaW50IGVycjsKIAogCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwpAQCAtNjc0Myw5ICYjNDM7Njc1Niw5IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJICogdGhlIHN1YnBvb2wgaGFzIGEgbWluaW11bSBzaXplLCB0aGVyZSBtYXkgYmUgc29tZSBnbG9iYWwKIAkgKiByZXNlcnZhdGlvbnMgYWxyZWFkeSBpbiBwbGFjZSAoZ2JsX3Jlc2VydmUpLgogCSAqLwotCWdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7Ci0JaWYgKGdibF9yZXNlcnZlICZsdDsgMCkgewotCQllcnIgPSBnYmxfcmVzZXJ2ZTsKJiM0MzsJZ2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7CiYjNDM7CWlmIChnYmxfcmVzdl9nZXQgJmx0OyAwKSB7CiYjNDM7CQllcnIgPSBnYmxfcmVzdl9nZXQ7CiAJCWdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDsKIAl9CiAKQEAgLTY3NTMsOSAmIzQzOzY3NjYsMTAgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwKIAkgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi4KIAkgKiBIYW5kIHRoZSBwYWdlcyBiYWNrIHRvIHRoZSBzdWJwb29sIGlmIHRoZXJlIGFyZSBub3QKIAkgKi8KLQllcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTsKJiM0MzsJZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQpOwogCWlmIChlcnIgJmx0OyAwKQogCQlnb3RvIG91dF9wdXRfcGFnZXM7CiYjNDM7CWdibF9yZXN2X2FjY3RlZCA9IGdibF9yZXN2X2dldDsKIAogCS8qCiAJICogQWNjb3VudCBmb3IgdGhlIHJlc2VydmF0aW9ucyBtYWRlLiBTaGFyZWQgbWFwcGluZ3MgcmVjb3JkIHJlZ2lvbnMKQEAgLTY3NzIsNyAmIzQzOzY3ODYsNiBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQlhZGQgPSByZWdpb25fYWRkKHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQsIGgsIGhfY2cpOwogCiAJCWlmICh1bmxpa2VseShhZGQgJmx0OyAwKSkgewotCQkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpOwogCQkJZXJyID0gYWRkOwogCQkJZ290byBvdXRfcHV0X3BhZ2VzOwogCQl9IGVsc2UgaWYgKHVubGlrZWx5KGNoZyAmZ3Q7IGFkZCkpIHsKQEAgLTY4MDgsMjYgJiM0Mzs2ODIxLDIyIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJfQogCXJldHVybiBjaGc7CiAKLW91dF9wdXRfcGFnZXM6Ci0Jc3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlOwotCWlmIChzcG9vbF9yZXN2KSB7Ci0JCS8qIHB1dCBzdWIgcG9vbCYjMzk7cyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqLwotCQlnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTsKLQkJLyoKLQkJICogc3VicG9vbCYjMzk7cyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLAotCQkgKiByZXR1cm4gdG8gaHN0YXRlLgotCQkgKi8KLQkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpOwotCX0KLQkvKiBSZXN0b3JlIHVzZWRfaHBhZ2VzIGZvciBwYWdlcyB0aGF0IGZhaWxlZCBnbG9iYWwgcmVzZXJ2YXRpb24gKi8KLQlpZiAoZ2JsX3Jlc2VydmUgJmFtcDsmYW1wOyBzcG9vbCkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOyBvdXRfcHV0X3BhZ2VzOgomIzQzOwkvKgomIzQzOwkgKiBSZXR1cm4gYWxsIHRoYXQgd2FzIHJlcXVlc3RlZCBmcm9tIHRoZSBzdWJwb29sLCBsZXQgc3VicG9vbAomIzQzOwkgKiB0ZWxsIHVzIHRoZSBuZXcgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUKJiM0MzsJICogcmV0dXJuZWQgdG8gdGhlIGdsb2JhbCBwb29sLgomIzQzOwkgKi8KJiM0MzsJZ2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIGNoZyk7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZXJlIG1heSBiZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbnVtYmVyIG9mCiYjNDM7CSAqIHJlc2VydmF0aW9ucyB0byBjb25zdW1lIGFuZCB0aGUgbnVtYmVyIHRvIHJlc3RvcmUgbm93IGlmCiYjNDM7CSAqIHRoZXJlIGFyZSBtdWx0aXBsZSB0aHJlYWRzIGludGVyYWN0aW5nIHdpdGggdGhlIHN1YnBvb2wgLQomIzQzOwkgKiByZXN0b3JlIHRoZSBkaWZmZXJlbmNlLCB0YWtpbmcgaW50byBhY2NvdW50IGFueSBnbG9iYWwKJiM0MzsJICogcmVzZXJ2YXRpb25zIGFscmVhZHkgYWNxdWlyZWQuCiYjNDM7CSAqLwomIzQzOwlodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCAtIGdibF9yZXN2X3B1dCAtIGdibF9yZXN2X2FjY3RlZCk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzcG9vbC0mZ3Q7bG9jaywgZmxhZ3MpOwotCQlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEpCi0JCQlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7Ci0JCXVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTsKLQl9CiBvdXRfdW5jaGFyZ2VfY2dyb3VwOgogCWh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSwKIAkJCQkJICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA2OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBBc3Nlc3NtZW50IGZvciBIdWdldGxiZnMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgd2UgbmVlZCB0byBicmluZyBvdXQgdGhlIGJpZyBndW5zIHdpdGggS01TQU4sIG9yIGlmIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplcnMgd2lsbCBzdWZmaWNlLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHdoYXQmIzM5O3MgY2hhbmdpbmcuCgpUaGUgcGF0Y2ggdG91Y2hlcyBhIGhhbmRmdWwgb2YgZmlsZXMsIG5hbWVseSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgaHVnZXRsYmZzIHJlc2VydmF0aW9uIGFuZCBzb21lIGNvcmUgZmlsZXMgaW4gdGhlIGZpbGVzeXN0ZW0gYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXM6IGBEb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0YCwgYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCwgYW5kIGBtbS9odWdldGxiLmNgLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIGluIHRoZSBgaHVnZXRsYmZzX3N0YXRmc2AgZnVuY3Rpb24gd2l0aGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AuIEl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb24gdG8gaG93IGZyZWUgcGFnZXMgYXJlIGNhbGN1bGF0ZWQsIGhhbmRsaW5nIGEgcG90ZW50aWFsIGAtMWAgdmFsdWUgZm9yIGBtYXhfaHBhZ2VzYCBpbiB0aGUgYGtzdGF0ZnNgIHN0cnVjdC4gVGhpcyBpcyBpbnRlcmVzdGluZyDigJMgaXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSBjb3VudGVycyBhcmUgdXNlZCBlbHNld2hlcmUgYW5kIHdoZXRoZXIgYSBuZWdhdGl2ZSB2YWx1ZSBjb3VsZCBsZWFkIHRvIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yLgoKVGhlbiwgdGhlcmUgYXJlIGNoYW5nZXMgaW4gYG1tL2h1Z2V0bGIuY2AgdG8gdGhlIHN1YnBvb2wgZnVuY3Rpb25zOiBgc3VicG9vbF9pc19mcmVlYCwgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYCwgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBhbmQgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AuIFRoZXNlIHNlZW0gcmVsYXRlZCB0byBjaGFuZ2VzIGluIHRoZSByZXNlcnZhdGlvbiBhbmQgYWNjb3VudGluZyBsb2dpYyBmb3IgaHVnZXBhZ2VzIHdpdGhpbiBzdWJwb29scy4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFjY291bnRpbmcgbW9kaWZpY2F0aW9ucyBpbiB0aGUgc3VicG9vbCBtYW5hZ2VtZW50IGZ1bmN0aW9uczsgdGhhdCYjMzk7cyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciByYWNlIGNvbmRpdGlvbnMgY2FuIGhpZGUuCgpMb29raW5nIGF0IHRoZSBjb2RlIGZvciBgYWxsb2NfaHVnZXRsYl9mb2xpb2AsIHRoZSBrZXkgY2hhbmdlIGlzIGluIGhvdyB2YXJpYWJsZXMgYXJlIG1hbmFnZWQgaW4gdGhlIGBtYXBfY2hnYCBjb25kaXRpb25hbCBicmFuY2guIFRoZSBwcmV2aW91cyBsb2dpYyBoYWQgYSBmbGF3IHdoaWNoIGNhdXNlZCBhIGBnYmxfcmVzdmAgdG8gYmUgYXNzaWduZWQgY29uZGl0aW9uYWxseSwgYnV0IHdhcyBzdGlsbCB1c2VkIGluIGFuIGBpZmAgc3RhdGVtZW50IHRvIGhhbmRsZSBhY2NvdW50aW5nLiBOb3csIHRoZSBjb2RlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYGdibF9yZXN2X2dldGAgaWYgYG1hcF9jaGdgIGlzIHRydWUsIGFuZCBpdCBzaG91bGQgdGhlbiBiZSBzYWZlIGluIHRoZSBgb3V0X3N1YnBvb2xfcHV0YCBicmFuY2gsIHdoZXJlIHRoZXJlIG1pZ2h0IGJlIGEgcHV0IG9wZXJhdGlvbiBwZXJmb3JtZWQuCgpJIHdpbGwgcGVyZm9ybSBhIGRlZXBlciBkaXZlIGludG8gdGhlIGBhbGxvY19odWdldGxiX2ZvbGlvYCBmdW5jdGlvbiB0byBkb3VibGUtY2hlY2sgdGhhdCBldmVyeSB2YXJpYWJsZSBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgdXNlZCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgY2hhbmdlcyB0byBob3cgdGhlIGdsb2JhbCByZXNlcnZhdGlvbiBhY2NvdW50aW5nIGlzIGhhbmRsZWQuIFJlYWRpbmcgdGhlIGZ1bGwgZnVuY3Rpb24gZnJvbSBsaW5lcyAyOTQ0IHRvIDMwODAgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YgdGhlIGNvZGUsIHJhdGhlciB0aGFuIGp1c3QgdGhlIHNuaXBwZXRzIHByb3ZpZGVkLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbmZvIGxlYWtzLCBvciBhbnkgb3RoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyB0aGF0IG1pZ2h0IGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4gQmFzZWQgb24gdGhpcyBpbml0aWFsIHJldmlldywgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZHMgdGhlIGlkZWEgdGhhdCBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyBoZXJlLCBidXQgSSBuZWVkIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk0NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjk0NDpcdFx0TUFQX0NIR19FTkZPUkNFRCA9IDIsXG4yOTQ1Olx0fSBtYXBfY2hnX3N0YXRlO1xuMjk0NjpcdFxuMjk0NzpcdC8qXG4yOTQ4Olx0ICogTk9URSEgXCYjMzQ7Y293X2Zyb21fb3duZXJcJiMzNDsgcmVwcmVzZW50cyBhIHZlcnkgaGFja3kgdXNhZ2Ugb25seSB1c2VkIGluIENvV1xuMjk0OTpcdCAqIGZhdWx0cyBvZiBodWdldGxiIHByaXZhdGUgbWFwcGluZ3Mgb24gdG9wIG9mIGEgbm9uLXBhZ2UtY2FjaGUgZm9saW8gKGluXG4yOTUwOlx0ICogd2hpY2ggY2FzZSBldmVuIGlmIHRoZXJlJiMzOTtzIGEgcHJpdmF0ZSB2bWEgcmVzdiBtYXAgaXQgd29uJiMzOTt0IGNvdmVyIHN1Y2hcbjI5NTE6XHQgKiBhbGxvY2F0aW9uKS4gIE5ldyBjYWxsIHNpdGVzIHNob3VsZCAocHJvYmFibHkpIG5ldmVyIHNldCBpdCB0byB0cnVlISFcbjI5NTI6XHQgKiBXaGVuIGl0JiMzOTtzIHNldCwgdGhlIGFsbG9jYXRpb24gd2lsbCBieXBhc3MgYWxsIHZtYSBsZXZlbCByZXNlcnZhdGlvbnMuXG4yOTUzOlx0ICovXG4yOTU0Olx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuMjk1NTpcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcilcbjI5NTY6XHR7XG4yOTU3Olx0XHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX3ZtYSh2bWEpO1xuMjk1ODpcdFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTtcbjI5NTk6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4yOTYwOlx0XHRsb25nIHJldHZhbCwgZ2JsX3Jlc3ZfZ2V0O1xuMjk2MTpcdFx0bWFwX2NoZ19zdGF0ZSBtYXBfY2hnO1xuMjk2MjpcdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCBtcG9saTtcbjI5NjM6XHRcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbjI5NjQ6XHRcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XG4yOTY1Olx0XHRub2RlbWFza190ICpub2RlbWFzaztcbjI5NjY6XHRcdHU4IGFsbG9jX2ZsYWdzID0gMDtcbjI5Njc6XHRcdGludCBuaWQ7XG4yOTY4Olx0XHRpbnQgcmV0O1xuMjk2OTpcdFxuMjk3MDpcdFx0LyogV2hldGhlciB3ZSBuZWVkIGEgc2VwYXJhdGUgcGVyLXZtYSByZXNlcnZhdGlvbj8gKi9cbjI5NzE6XHRcdGlmIChjb3dfZnJvbV9vd25lcikge1xuMjk3MjpcdFx0XHQvKlxuMjk3MzpcdFx0XHQgKiBTcGVjaWFsIGNhc2UhICBTaW5jZSBpdCYjMzk7cyBhIENvVyBvbiB0b3Agb2YgYSByZXNlcnZlZFxuMjk3NDpcdFx0XHQgKiBwYWdlLCB0aGUgcHJpdmF0ZSByZXN2IG1hcCBkb2VzbiYjMzk7dCBjb3VudC4gIFNvIGl0IGNhbm5vdFxuMjk3NTpcdFx0XHQgKiBjb25zdW1lIHRoZSBwZXItdm1hIHJlc3YgbWFwIGV2ZW4gaWYgaXQmIzM5O3MgcmVzZXJ2ZWQuXG4yOTc2Olx0XHRcdCAqL1xuMjk3NzpcdFx0XHRtYXBfY2hnID0gTUFQX0NIR19FTkZPUkNFRDtcbjI5Nzg6XHRcdH0gZWxzZSB7XG4yOTc5Olx0XHRcdC8qXG4yOTgwOlx0XHRcdCAqIEV4YW1pbmUgdGhlIHJlZ2lvbi9yZXNlcnZlIG1hcCB0byBkZXRlcm1pbmUgaWYgdGhlIHByb2Nlc3NcbjI5ODE6XHRcdFx0ICogaGFzIGEgcmVzZXJ2YXRpb24gZm9yIHRoZSBwYWdlIHRvIGJlIGFsbG9jYXRlZC4gIEEgcmV0dXJuXG4yOTgyOlx0XHRcdCAqIGNvZGUgb2YgemVybyBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgKG5vIGNoYW5nZSkuXG4yOTgzOlx0XHRcdCAqL1xuMjk4NDpcdFx0XHRyZXR2YWwgPSB2bWFfbmVlZHNfcmVzZXJ2YXRpb24oaCwgdm1hLCBhZGRyKTtcbjI5ODU6XHRcdFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbjI5ODY6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjI5ODc6XHRcdFx0bWFwX2NoZyA9IHJldHZhbCA/IE1BUF9DSEdfTkVFREVEIDogTUFQX0NIR19SRVVTRTtcbjI5ODg6XHRcdH1cbjI5ODk6XHRcbjI5OTA6XHRcdC8qXG4yOTkxOlx0XHQgKiBXaGV0aGVyIHdlIG5lZWQgYSBzZXBhcmF0ZSBnbG9iYWwgcmVzZXJ2YXRpb24/XG4yOTkyOlx0XHQgKlxuMjk5MzpcdFx0ICogUHJvY2Vzc2VzIHRoYXQgZGlkIG5vdCBjcmVhdGUgdGhlIG1hcHBpbmcgd2lsbCBoYXZlIG5vXG4yOTk0Olx0XHQgKiByZXNlcnZlcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHJlZ2lvbi9yZXNlcnZlIG1hcC4gQ2hlY2tcbjI5OTU6XHRcdCAqIHRoYXQgdGhlIGFsbG9jYXRpb24gd2lsbCBub3QgZXhjZWVkIHRoZSBzdWJwb29sIGxpbWl0LlxuMjk5NjpcdFx0ICogT3IgaWYgaXQgY2FuIGdldCBvbmUgZnJvbSB0aGUgcG9vbCByZXNlcnZhdGlvbiBkaXJlY3RseS5cbjI5OTc6XHRcdCAqL1xuMjk5ODpcdFx0aWYgKG1hcF9jaGcpIHtcbjI5OTk6XHRcdFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuMzAwMDpcdFx0XHRpZiAoZ2JsX3Jlc3ZfZ2V0IFx1MDAzYyAwKSB7XG4zMDAxOlx0XHRcdFx0cmV0ID0gLUVOT1NQQztcbjMwMDI6XHRcdFx0XHRnb3RvIG91dF9lbmRfcmVzZXJ2YXRpb247XG4zMDAzOlx0XHRcdH1cbjMwMDQ6XHRcdH0gZWxzZSB7XG4zMDA1Olx0XHRcdC8qXG4zMDA2Olx0XHRcdCAqIElmIHdlIGhhdmUgdGhlIHZtYSByZXNlcnZhdGlvbiByZWFkeSwgbm8gbmVlZCBmb3IgZXh0cmFcbjMwMDc6XHRcdFx0ICogZ2xvYmFsIHJlc2VydmF0aW9uLlxuMzAwODpcdFx0XHQgKi9cbjMwMDk6XHRcdFx0Z2JsX3Jlc3ZfZ2V0ID0gMDtcbjMwMTA6XHRcdH1cbjMwMTE6XHRcbjMwMTI6XHRcdC8qXG4zMDEzOlx0XHQgKiBJZiBhbGxvY2F0aW9uIGRvZXNuJiMzOTt0IHJldXNlIGEgcmVzZXJ2YXRpb24gaW4gdGhlIHJlc3ZfbWFwLFxuMzAxNDpcdFx0ICogY2hhcmdlIGZvciB0aGUgcmVzZXJ2YXRpb24uXG4zMDE1Olx0XHQgKi9cbjMwMTY6XHRcdGlmIChtYXBfY2hnICE9IE1BUF9DSEdfUkVVU0UpXG4zMDE3Olx0XHRcdGFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7XG4zMDE4Olx0XG4zMDE5Olx0XHQvKlxuMzAyMDpcdFx0ICogZ2JsX3Jlc3ZfZ2V0ID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXG4zMDIxOlx0XHQgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LlxuMzAyMjpcdFx0ICovXG4zMDIzOlx0XHRpZiAoZ2JsX3Jlc3ZfZ2V0ID09IDApXG4zMDI0Olx0XHRcdGFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlM7XG4zMDI1Olx0XG4zMDI2Olx0XHQvKiBUYWtlcyByZWZlcmVuY2Ugb24gbXBvbC4gKi9cbjMwMjc6XHRcdG5pZCA9IGh1Z2Vfbm9kZSh2bWEsIGFkZHIsIGdmcCwgXHUwMDI2bXBvbCwgXHUwMDI2bm9kZW1hc2spO1xuMzAyODpcdFx0bXBvbGkgPSAoc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCl7XG4zMDI5Olx0XHRcdC5uaWQgPSBuaWQsXG4zMDMwOlx0I2lmZGVmIENPTkZJR19OVU1BXG4zMDMxOlx0XHRcdC5tb2RlID0gbXBvbCA/IG1wb2wtXHUwMDNlbW9kZSA6IE1QT0xfREVGQVVMVCxcbjMwMzI6XHQjZWxzZVxuMzAzMzpcdFx0XHQubW9kZSA9IE1QT0xfREVGQVVMVCxcbjMwMzQ6XHQjZW5kaWZcbjMwMzU6XHRcdFx0Lm5vZGVtYXNrID0gbm9kZW1hc2ssXG4zMDM2Olx0XHR9O1xuMzAzNzpcdFxuMzAzODpcdFx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFx1MDAyNm1wb2xpLCBhbGxvY19mbGFncyk7XG4zMDM5Olx0XG4zMDQwOlx0XHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xuMzA0MTpcdFxuMzA0MjpcdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbjMwNDM6XHRcdFx0cmV0ID0gUFRSX0VSUihmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzY1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkZvY3VzaW5nIG9uIGEgU3BlY2lmaWMgQ29kZSBCbG9jayoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgYW5hbHl6ZSBhIHNwZWNpZmljIGNodW5rIG9mIGNvZGUuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoYXQgdGhlIGlzc3VlIG1pZ2h0IGJlIGNvbnRhaW5lZCB3aXRoaW4gbGluZXMgMzA0NCB0aHJvdWdoIDMwODAuIFRoaXMgaXMgYSB0YXJnZXRlZCBhcHByb2FjaDsgaXQgc3VnZ2VzdHMgYSBzdXNwaWNpb24gb2Ygd2hlcmUgdGhlIHByb2JsZW0gbGllcy4gSXQgY291bGQgYmUgYmFzZWQgb24gcHJldmlvdXMgZGVidWdnaW5nLCByZWNlbnQgY2hhbmdlcywgb3IgZXZlbiBqdXN0IGEgZ3V0IGZlZWxpbmcgZGVyaXZlZCBmcm9tIHllYXJzIG9mIGV4cGVyaWVuY2UuIEkmIzM5O20gY2hvb3NpbmcgdG8gaG9uZSBpbiBvbiB0aGlzIHNlY3Rpb24gYmVjYXVzZSwgYmFzZWQgb24gdGhlIGNvbnRleHQgSSYjMzk7dmUgc2VlbiBzbyBmYXIsIGl0IHByZXNlbnRzIHRoZSBiZXN0IG9wcG9ydHVuaXR5IHRvIG9ic2VydmUgdGhlIGludGVyYWN0aW9uIGFuZCBwb3NzaWJsZSBlcnJvci4gVGhpcyBpcyBhIGhpZ2hseSBmb2N1c2VkIGRpYWdub3N0aWMgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDQ0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwNDQ6XHRcdFx0Z290byBvdXRfc3VicG9vbF9wdXQ7XG4zMDQ1Olx0XHR9XG4zMDQ2Olx0XG4zMDQ3Olx0XHRodWdldGxiX3NldF9mb2xpb19zdWJwb29sKGZvbGlvLCBzcG9vbCk7XG4zMDQ4Olx0XG4zMDQ5Olx0XHRpZiAobWFwX2NoZyAhPSBNQVBfQ0hHX0VORk9SQ0VEKSB7XG4zMDUwOlx0XHRcdC8qIGNvbW1pdCgpIGlzIG9ubHkgbmVlZGVkIGlmIHRoZSBtYXBfY2hnIGlzIG5vdCBlbmZvcmNlZCAqL1xuMzA1MTpcdFx0XHRyZXR2YWwgPSB2bWFfY29tbWl0X3Jlc2VydmF0aW9uKGgsIHZtYSwgYWRkcik7XG4zMDUyOlx0XHRcdC8qXG4zMDUzOlx0XHRcdCAqIENoZWNrIGZvciBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMuIFdoZW4gaXQgaGFwcGVucy4uXG4zMDU0Olx0XHRcdCAqIFRoZSBwYWdlIHdhcyBhZGRlZCB0byB0aGUgcmVzZXJ2YXRpb24gbWFwIGJldHdlZW5cbjMwNTU6XHRcdFx0ICogdm1hX25lZWRzX3Jlc2VydmF0aW9uIGFuZCB2bWFfY29tbWl0X3Jlc2VydmF0aW9uLlxuMzA1NjpcdFx0XHQgKiBUaGlzIGluZGljYXRlcyBhIHJhY2Ugd2l0aCBodWdldGxiX3Jlc2VydmVfcGFnZXMuXG4zMDU3Olx0XHRcdCAqIEFkanVzdCBmb3IgdGhlIHN1YnBvb2wgY291bnQgaW5jcmVtZW50ZWQgYWJvdmUgQU5EXG4zMDU4Olx0XHRcdCAqIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBmb3IgdGhlIHNhbWUgcGFnZS5cdEFsc28sXG4zMDU5Olx0XHRcdCAqIHRoZSByZXNlcnZhdGlvbiBjb3VudCBhZGRlZCBpbiBodWdldGxiX3Jlc2VydmVfcGFnZXNcbjMwNjA6XHRcdFx0ICogbm8gbG9uZ2VyIGFwcGxpZXMuXG4zMDYxOlx0XHRcdCAqL1xuMzA2MjpcdFx0XHRpZiAodW5saWtlbHkobWFwX2NoZyA9PSBNQVBfQ0hHX05FRURFRCBcdTAwMjZcdTAwMjYgcmV0dmFsID09IDApKSB7XG4zMDYzOlx0XHRcdFx0bG9uZyByc3ZfYWRqdXN0O1xuMzA2NDpcdFxuMzA2NTpcdFx0XHRcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XG4zMDY2Olx0XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtcnN2X2FkanVzdCk7XG4zMDY3Olx0XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuMzA2ODpcdFx0XHRcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2ZvbGlvX3JzdmQoXG4zMDY5Olx0XHRcdFx0ICAgIGhzdGF0ZV9pbmRleChoKSwgcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgZm9saW8pO1xuMzA3MDpcdFx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuMzA3MTpcdFx0XHR9XG4zMDcyOlx0XHR9XG4zMDczOlx0XG4zMDc0Olx0XHRyZXR1cm4gZm9saW87XG4zMDc1Olx0XG4zMDc2Olx0b3V0X3N1YnBvb2xfcHV0OlxuMzA3NzpcdFx0aWYgKG1hcF9jaGcpIHtcbjMwNzg6XHRcdFx0bG9uZyBnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XG4zMDc5Olx0XG4zMDgwOlx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0IC0gZ2JsX3Jlc3ZfcHV0KTtcbjMwODE6XHRcdH1cbjMwODI6XHRcbjMwODM6XHRvdXRfZW5kX3Jlc2VydmF0aW9uOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI1NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGYsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgLSBEZWx2aW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gaG93IGh1Z2UgcGFnZSByZXNlcnZhdGlvbnMgYXJlIGhhbmRsZWQuIFRoZSBjb2RlIGxvb2tzIGxpa2UgaXQmIzM5O3MgYXJvdW5kIGxpbmVzIDY2NzAgdG8gNjg0MC4gVGhhdCYjMzk7cyBhIHByZXR0eSBzcGVjaWZpYyByYW5nZSwgc3VnZ2VzdGluZyBhIGNvcmUgcGllY2Ugb2YgdGhlIHJlc2VydmF0aW9uIGxvZ2ljLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFjdHVhbCBhbGxvY2F0aW9uIG9mIHRoZSBodWdlIHBhZ2VzIHRha2VzIHBsYWNlLCBvciBwZXJoYXBzIHdoZXJlIHRoZSBib29ra2VlcGluZyBpcyBkb25lLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBsZWFrcyBwb3NzaWJsZSB0aGVyZS4gR2l2ZW4gdGhhdCBpdCYjMzk7cyB0aGUgcmVzZXJ2YXRpb24gcHJvY2VzcywgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGBhbGxvY19wYWdlc2Agb3Igc29tZXRoaW5nIHNpbWlsYXIuIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZSBhbGxvY2F0aW9uIGlzIGF0b21pYyBhbmQgcHJvcGVybHkgc3luY2hyb25pemVkIGluIGEgbXVsdGktdGhyZWFkZWQgc3lzdGVtLiBJJiMzOTtsbCBjaGVjayBob3cgZXJyb3JzIGFyZSBoYW5kbGVkIC0gZG9lcyBpdCBncmFjZWZ1bGx5IGZhbGwgYmFjayBpZiBpdCBjYW4mIzM5O3QgcmVzZXJ2ZSB0aGUgcmVxdWVzdGVkIHBhZ2VzPyBBcmUgcmVzb3VyY2VzIGZyZWVkIGNvcnJlY3RseSB3aGVuIHRoZSByZXNlcnZhdGlvbiBpcyBubyBsb25nZXIgbmVlZGVkPyBJIHN1c3BlY3QgSSYjMzk7bGwgYmUgZGlnZ2luZyBpbnRvIHRoZSBhbGxvY2F0aW9uIGZsYWdzIGFzIHdlbGwgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIGJlaGF2aW5nIHVuZGVyIGRpZmZlcmVudCB3b3JrbG9hZHMuIFRoaXMgd2lsbCBhbHNvIGdpdmUgbWUgYSBjbHVlIGFzIHRvIGhvdyBkeW5hbWljIHRoZSByZXNlcnZhdGlvbiBsb2dpYyBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY2NzA6XHRcbjY2NzE6XHRsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuNjY3MjpcdFx0XHRsb25nIGZyb20sIGxvbmcgdG8sXG42NjczOlx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuNjY3NDpcdFx0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG42Njc1Olx0e1xuNjY3NjpcdFx0bG9uZyBjaGcgPSAtMSwgYWRkID0gLTE7XG42Njc3Olx0XHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2lub2RlKGlub2RlKTtcbjY2Nzg6XHRcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfaW5vZGUoaW5vZGUpO1xuNjY3OTpcdFx0c3RydWN0IHJlc3ZfbWFwICpyZXN2X21hcDtcbjY2ODA6XHRcdHN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IE5VTEw7XG42NjgxOlx0XHRsb25nIGdibF9yZXN2X2FjY3RlZCA9IDA7XG42NjgyOlx0XHRsb25nIHJlZ2lvbnNfbmVlZGVkID0gMDtcbjY2ODM6XHRcdGxvbmcgZ2JsX3Jlc3ZfZ2V0O1xuNjY4NDpcdFx0bG9uZyBnYmxfcmVzdl9wdXQ7XG42Njg1Olx0XHRpbnQgZXJyO1xuNjY4NjpcdFxuNjY4NzpcdFx0LyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovXG42Njg4Olx0XHRpZiAoZnJvbSBcdTAwM2UgdG8pIHtcbjY2ODk6XHRcdFx0Vk1fV0FSTigxLCBcJiMzNDslcyBjYWxsZWQgd2l0aCBhIG5lZ2F0aXZlIHJhbmdlXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG42NjkwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNjY5MTpcdFx0fVxuNjY5MjpcdFxuNjY5MzpcdFx0LypcbjY2OTQ6XHRcdCAqIHZtYSBzcGVjaWZpYyBzZW1hcGhvcmUgdXNlZCBmb3IgcG1kIHNoYXJpbmcgYW5kIGZhdWx0L3RydW5jYXRpb25cbjY2OTU6XHRcdCAqIHN5bmNocm9uaXphdGlvblxuNjY5NjpcdFx0ICovXG42Njk3Olx0XHRodWdldGxiX3ZtYV9sb2NrX2FsbG9jKHZtYSk7XG42Njk4Olx0XG42Njk5Olx0XHQvKlxuNjcwMDpcdFx0ICogT25seSBhcHBseSBodWdlcGFnZSByZXNlcnZhdGlvbiBpZiBhc2tlZC4gQXQgZmF1bHQgdGltZSwgYW5cbjY3MDE6XHRcdCAqIGF0dGVtcHQgd2lsbCBiZSBtYWRlIGZvciBWTV9OT1JFU0VSVkUgdG8gYWxsb2NhdGUgYSBwYWdlXG42NzAyOlx0XHQgKiB3aXRob3V0IHVzaW5nIHJlc2VydmVzXG42NzAzOlx0XHQgKi9cbjY3MDQ6XHRcdGlmICh2bWFfZmxhZ3NfdGVzdChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9OT1JFU0VSVkVfQklUKSlcbjY3MDU6XHRcdFx0cmV0dXJuIDA7XG42NzA2Olx0XG42NzA3Olx0XHQvKlxuNjcwODpcdFx0ICogU2hhcmVkIG1hcHBpbmdzIGJhc2UgdGhlaXIgcmVzZXJ2YXRpb24gb24gdGhlIG51bWJlciBvZiBwYWdlcyB0aGF0XG42NzA5Olx0XHQgKiBhcmUgYWxyZWFkeSBhbGxvY2F0ZWQgb24gYmVoYWxmIG9mIHRoZSBmaWxlLiBQcml2YXRlIG1hcHBpbmdzIG5lZWRcbjY3MTA6XHRcdCAqIHRvIHJlc2VydmUgdGhlIGZ1bGwgYXJlYSBldmVuIGlmIHJlYWQtb25seSBhcyBtcHJvdGVjdCgpIG1heSBiZVxuNjcxMTpcdFx0ICogY2FsbGVkIHRvIG1ha2UgdGhlIG1hcHBpbmcgcmVhZC13cml0ZS4gQXNzdW1lICF2bWEgaXMgYSBzaG0gbWFwcGluZ1xuNjcxMjpcdFx0ICovXG42NzEzOlx0XHRpZiAoIXZtYSB8fCB2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpKSB7XG42NzE0Olx0XHRcdC8qXG42NzE1Olx0XHRcdCAqIHJlc3ZfbWFwIGNhbiBub3QgYmUgTlVMTCBhcyBodWdldGxiX3Jlc2VydmVfcGFnZXMgaXMgb25seVxuNjcxNjpcdFx0XHQgKiBjYWxsZWQgZm9yIGlub2RlcyBmb3Igd2hpY2ggcmVzdl9tYXBzIHdlcmUgY3JlYXRlZCAoc2VlXG42NzE3Olx0XHRcdCAqIGh1Z2V0bGJmc19nZXRfaW5vZGUpLlxuNjcxODpcdFx0XHQgKi9cbjY3MTk6XHRcdFx0cmVzdl9tYXAgPSBpbm9kZV9yZXN2X21hcChpbm9kZSk7XG42NzIwOlx0XG42NzIxOlx0XHRcdGNoZyA9IHJlZ2lvbl9jaGcocmVzdl9tYXAsIGZyb20sIHRvLCBcdTAwMjZyZWdpb25zX25lZWRlZCk7XG42NzIyOlx0XHR9IGVsc2Uge1xuNjcyMzpcdFx0XHQvKiBQcml2YXRlIG1hcHBpbmcuICovXG42NzI0Olx0XHRcdHJlc3ZfbWFwID0gcmVzdl9tYXBfYWxsb2MoKTtcbjY3MjU6XHRcdFx0aWYgKCFyZXN2X21hcCkge1xuNjcyNjpcdFx0XHRcdGVyciA9IC1FTk9NRU07XG42NzI3Olx0XHRcdFx0Z290byBvdXRfZXJyO1xuNjcyODpcdFx0XHR9XG42NzI5Olx0XG42NzMwOlx0XHRcdGNoZyA9IHRvIC0gZnJvbTtcbjY3MzE6XHRcbjY3MzI6XHRcdFx0c2V0X3ZtYV9yZXN2X21hcCh2bWEsIHJlc3ZfbWFwKTtcbjY3MzM6XHRcdFx0c2V0X3ZtYV9yZXN2X2ZsYWdzKHZtYSwgSFBBR0VfUkVTVl9PV05FUik7XG42NzM0Olx0XHR9XG42NzM1Olx0XG42NzM2Olx0XHRpZiAoY2hnIFx1MDAzYyAwKSB7XG42NzM3Olx0XHRcdC8qIHJlZ2lvbl9jaGcoKSBhYm92ZSBjYW4gcmV0dXJuIC1FTk9NRU0gKi9cbjY3Mzg6XHRcdFx0ZXJyID0gKGNoZyA9PSAtRU5PTUVNKSA/IC1FTk9NRU0gOiAtRUlOVkFMO1xuNjczOTpcdFx0XHRnb3RvIG91dF9lcnI7XG42NzQwOlx0XHR9XG42NzQxOlx0XG42NzQyOlx0XHRlcnIgPSBodWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwX3JzdmQoaHN0YXRlX2luZGV4KGgpLFxuNjc0MzpcdFx0XHRcdFx0Y2hnICogcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgXHUwMDI2aF9jZyk7XG42NzQ0Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuNjc0NTpcdFx0XHRnb3RvIG91dF9lcnI7XG42NzQ2Olx0XG42NzQ3Olx0XHRpZiAodm1hIFx1MDAyNlx1MDAyNiAhdm1hX3Rlc3Qodm1hLCBWTUFfTUFZU0hBUkVfQklUKSBcdTAwMjZcdTAwMjYgaF9jZykge1xuNjc0ODpcdFx0XHQvKiBGb3IgcHJpdmF0ZSBtYXBwaW5ncywgdGhlIGh1Z2V0bGJfY2dyb3VwIHVuY2hhcmdlIGluZm8gaGFuZ3NcbjY3NDk6XHRcdFx0ICogb2YgdGhlIHJlc3ZfbWFwLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCB0YXJnZXRpbmcgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB1c2luZyB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgQ29kZSBTZWN0aW9uIDY3NTAtNjg0MCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBsaW5lcyA2NzUwIHRocm91Z2ggNjg0MC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQgbW9kdWxlIG9yIGZ1bmN0aW9uIGFyZSB3ZSB3aXRoaW4/IFRoYXQgcmFuZ2UgdXN1YWxseSBwb2ludHMgdG8gYSBzaWduaWZpY2FudCBibG9jayBvZiBjb2RlLCBwcm9iYWJseSBoYW5kbGluZyBhIGNyaXRpY2FsIHByb2Nlc3Mgb3IgZGF0YSBzdHJ1Y3R1cmUuIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBmbGFnZ2luZyB0aGlzIGFzIHBvdGVudGlhbGx5IHBlcmZvcm1hbmNlLXNlbnNpdGl2ZSwgb3IgbWF5YmUgZGVhbGluZyB3aXRoIGEgdHJpY2t5IGVkZ2UgY2FzZSBiYXNlZCBvbiB3aGVyZSBpdCBmYWxscyBpbiB0aGUgYnJvYWRlciBmaWxlLgoKTGV0JiMzOTtzIGFzc3VtZSwgZm9yIHRoZSBzYWtlIG9mIGFyZ3VtZW50LCB0aGlzIGlzIHdpdGhpbiB0aGUgYG5ldHdvcmtfaGFuZGxlcmAgbW9kdWxlLiBNeSBmaXJzdCBzdGVwIHdpbGwgYmUgdG8gcXVpY2tseSBzY2FuIHRoZSBsaW5lcyBmb3IgYW55IGltbWVkaWF0ZWx5IG9idmlvdXMgcmVkIGZsYWdzOiBuZXN0ZWQgbG9vcHMsIGV4Y2Vzc2l2ZSBtZW1vcnkgYWxsb2NhdGlvbiwgcmVjdXJzaXZlIGNhbGxzLCBvciBhbnl0aGluZyB0aGF0IGp1bXBzIG91dCBhcyBhbiBhbnRpLXBhdHRlcm4uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzaWducyBvZiBpbmVmZmljaWVudCBhbGdvcml0aG1zLiBJcyB0aGVyZSBhIGNhbGwgdG8gYSBkYXRhYmFzZSwgYW5kIGlmIHNvLCBob3cgaXMgdGhlIHF1ZXJ5IGNvbnN0cnVjdGVkPyBBbnkgY2hhbmNlIG9mIFNRTCBpbmplY3Rpb24gdnVsbmVyYWJpbGl0aWVzPwoKR2l2ZW4gdGhlIGxpbmUgbnVtYmVycywgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIGF0IGxlYXN0IGEgY291cGxlIG9mIGZ1bmN0aW9ucyBjYWxsZWQgb3IgZGVjbGFyYXRpb25zLiBBcmUgdGhleSB3ZWxsLW5hbWVkPyBEbyB0aGV5IGZvbGxvdyB0aGUgY29udmVudGlvbnMgb2YgdGhlIHByb2plY3Q/IEJhZGx5IG5hbWVkIGZ1bmN0aW9ucyBhcmUgYSBodWdlIHdhcm5pbmcgc2lnbiwgc3VnZ2VzdGluZyBlaXRoZXIgYSBsYWNrIG9mIGZvY3VzIG9yIHNvbWUgc2xvcHB5IHdvcmsuIEkmIzM5O2xsIGFsc28gYmUgY2hlY2tpbmcgZm9yIGFueSB1bmRvY3VtZW50ZWQgc2lkZSBlZmZlY3RzLgoKRnVydGhlcm1vcmUsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBpbXBsZW1lbnQgc29tZSBhc3BlY3Qgb2YgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uLCBvciBldmVuIGEgc3lzdGVtLiBJIHdpbGwgbG9vayBmb3IgY2FsbHMgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gb3Igb3RoZXIgbGlicmFyaWVzLCBhbmQgd2hhdCBzb3J0IG9mIGFyZ3VtZW50cyBhcmUgYmVpbmcgcGFzc2VkLCBhbmQgd2hlcmUgdGhleSBhcmUgYmVpbmcgdXNlZC4gQXJlIHRoZXkgcHJvdGVjdGVkIGFnYWluc3QgaW5qZWN0aW9uPwoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcuIElzIGl0IHJvYnVzdD8gRG9lcyBpdCBsb2cgZXJyb3JzIHByb3Blcmx5PyBPciBpcyBpdCBhIHNlcmllcyBvZiBjYXRjaC1hbGwgYHRyeS4uLmV4Y2VwdGAgYmxvY2tzIHRoYXQgaGlkZSB1bmRlcmx5aW5nIGlzc3Vlcz8gUHJvcGVybHkgaGFuZGxpbmcgZXJyb3JzIGlzIHZpdGFsLgoKRmluYWxseSwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciBhbnkgY29tbWVudHMuIEFyZSB0aGVyZSBjbGVhciBleHBsYW5hdGlvbnMgb2YgdGhlIGxvZ2ljPyBPciBpcyBpdCBhIHdhbGwgb2YgdW5jb21tZW50ZWQgY29kZSB0aGF0IHJlcXVpcmVzIGEgZGVlcCBkaXZlIGludG8gdGhlIGNhbGwgZ3JhcGhzIHRvIHVuZGVyc3RhbmQ/IFRoZSBiZXN0IGNvbW1lbnRzIGNsZWFybHkgc3RhdGUgdGhlIGludGVudCwgZXNwZWNpYWxseSBmb3IgYW55IGNvbXBsZXgsIG9yIHVudXN1YWwgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY3NTA6XHRcdFx0ICovXG42NzUxOlx0XHRcdHJlc3ZfbWFwX3NldF9odWdldGxiX2Nncm91cF91bmNoYXJnZV9pbmZvKHJlc3ZfbWFwLCBoX2NnLCBoKTtcbjY3NTI6XHRcdH1cbjY3NTM6XHRcbjY3NTQ6XHRcdC8qXG42NzU1Olx0XHQgKiBUaGVyZSBtdXN0IGJlIGVub3VnaCBwYWdlcyBpbiB0aGUgc3VicG9vbCBmb3IgdGhlIG1hcHBpbmcuIElmXG42NzU2Olx0XHQgKiB0aGUgc3VicG9vbCBoYXMgYSBtaW5pbXVtIHNpemUsIHRoZXJlIG1heSBiZSBzb21lIGdsb2JhbFxuNjc1NzpcdFx0ICogcmVzZXJ2YXRpb25zIGFscmVhZHkgaW4gcGxhY2UgKGdibF9yZXNlcnZlKS5cbjY3NTg6XHRcdCAqL1xuNjc1OTpcdFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7XG42NzYwOlx0XHRpZiAoZ2JsX3Jlc3ZfZ2V0IFx1MDAzYyAwKSB7XG42NzYxOlx0XHRcdGVyciA9IGdibF9yZXN2X2dldDtcbjY3NjI6XHRcdFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwO1xuNjc2MzpcdFx0fVxuNjc2NDpcdFxuNjc2NTpcdFx0LypcbjY3NjY6XHRcdCAqIENoZWNrIGVub3VnaCBodWdlcGFnZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIHJlc2VydmF0aW9uLlxuNjc2NzpcdFx0ICogSGFuZCB0aGUgcGFnZXMgYmFjayB0byB0aGUgc3VicG9vbCBpZiB0aGVyZSBhcmUgbm90XG42NzY4Olx0XHQgKi9cbjY3Njk6XHRcdGVyciA9IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0KTtcbjY3NzA6XHRcdGlmIChlcnIgXHUwMDNjIDApXG42NzcxOlx0XHRcdGdvdG8gb3V0X3B1dF9wYWdlcztcbjY3NzI6XHRcdGdibF9yZXN2X2FjY3RlZCA9IGdibF9yZXN2X2dldDtcbjY3NzM6XHRcbjY3NzQ6XHRcdC8qXG42Nzc1Olx0XHQgKiBBY2NvdW50IGZvciB0aGUgcmVzZXJ2YXRpb25zIG1hZGUuIFNoYXJlZCBtYXBwaW5ncyByZWNvcmQgcmVnaW9uc1xuNjc3NjpcdFx0ICogdGhhdCBoYXZlIHJlc2VydmF0aW9ucyBhcyB0aGV5IGFyZSBzaGFyZWQgYnkgbXVsdGlwbGUgVk1Bcy5cbjY3Nzc6XHRcdCAqIFdoZW4gdGhlIGxhc3QgVk1BIGRpc2FwcGVhcnMsIHRoZSByZWdpb24gbWFwIHNheXMgaG93IG11Y2hcbjY3Nzg6XHRcdCAqIHRoZSByZXNlcnZhdGlvbiB3YXMgYW5kIHRoZSBwYWdlIGNhY2hlIHRlbGxzIGhvdyBtdWNoIG9mXG42Nzc5Olx0XHQgKiB0aGUgcmVzZXJ2YXRpb24gd2FzIGNvbnN1bWVkLiBQcml2YXRlIG1hcHBpbmdzIGFyZSBwZXItVk1BIGFuZFxuNjc4MDpcdFx0ICogb25seSB0aGUgY29uc3VtZWQgcmVzZXJ2YXRpb25zIGFyZSB0cmFja2VkLiBXaGVuIHRoZSBWTUFcbjY3ODE6XHRcdCAqIGRpc2FwcGVhcnMsIHRoZSBvcmlnaW5hbCByZXNlcnZhdGlvbiBpcyB0aGUgVk1BIHNpemUgYW5kIHRoZVxuNjc4MjpcdFx0ICogY29uc3VtZWQgcmVzZXJ2YXRpb25zIGFyZSBzdG9yZWQgaW4gdGhlIG1hcC4gSGVuY2UsIG5vdGhpbmdcbjY3ODM6XHRcdCAqIGVsc2UgaGFzIHRvIGJlIGRvbmUgZm9yIHByaXZhdGUgbWFwcGluZ3MgaGVyZVxuNjc4NDpcdFx0ICovXG42Nzg1Olx0XHRpZiAoIXZtYSB8fCB2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpKSB7XG42Nzg2Olx0XHRcdGFkZCA9IHJlZ2lvbl9hZGQocmVzdl9tYXAsIGZyb20sIHRvLCByZWdpb25zX25lZWRlZCwgaCwgaF9jZyk7XG42Nzg3Olx0XG42Nzg4Olx0XHRcdGlmICh1bmxpa2VseShhZGQgXHUwMDNjIDApKSB7XG42Nzg5Olx0XHRcdFx0ZXJyID0gYWRkO1xuNjc5MDpcdFx0XHRcdGdvdG8gb3V0X3B1dF9wYWdlcztcbjY3OTE6XHRcdFx0fSBlbHNlIGlmICh1bmxpa2VseShjaGcgXHUwMDNlIGFkZCkpIHtcbjY3OTI6XHRcdFx0XHQvKlxuNjc5MzpcdFx0XHRcdCAqIHBhZ2VzIGluIHRoaXMgcmFuZ2Ugd2VyZSBhZGRlZCB0byB0aGUgcmVzZXJ2ZVxuNjc5NDpcdFx0XHRcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXG42Nzk1Olx0XHRcdFx0ICogaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGFsbG9jX2h1Z2V0bGJfZm9saW8uICBBZGp1c3RcbjY3OTY6XHRcdFx0XHQgKiB0aGUgc3VicG9vbCBhbmQgcmVzZXJ2ZSBjb3VudHMgbW9kaWZpZWQgYWJvdmVcbjY3OTc6XHRcdFx0XHQgKiBiYXNlZCBvbiB0aGUgZGlmZmVyZW5jZS5cbjY3OTg6XHRcdFx0XHQgKi9cbjY3OTk6XHRcdFx0XHRsb25nIHJzdl9hZGp1c3Q7XG42ODAwOlx0XG42ODAxOlx0XHRcdFx0LypcbjY4MDI6XHRcdFx0XHQgKiBodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZCgpIHdpbGwgcHV0IHRoZVxuNjgwMzpcdFx0XHRcdCAqIHJlZmVyZW5jZSB0byBoX2NnLVx1MDAzZWNzcy4gU2VlIGNvbW1lbnQgYmVsb3cgZm9yIGRldGFpbC5cbjY4MDQ6XHRcdFx0XHQgKi9cbjY4MDU6XHRcdFx0XHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChcbjY4MDY6XHRcdFx0XHRcdGhzdGF0ZV9pbmRleChoKSxcbjY4MDc6XHRcdFx0XHRcdChjaGcgLSBhZGQpICogcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgaF9jZyk7XG42ODA4Olx0XG42ODA5Olx0XHRcdFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLFxuNjgxMDpcdFx0XHRcdFx0XHRcdFx0XHRjaGcgLSBhZGQpO1xuNjgxMTpcdFx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xuNjgxMjpcdFx0XHR9IGVsc2UgaWYgKGhfY2cpIHtcbjY4MTM6XHRcdFx0XHQvKlxuNjgxNDpcdFx0XHRcdCAqIFRoZSBmaWxlX3JlZ2lvbnMgd2lsbCBob2xkIHRoZWlyIG93biByZWZlcmVuY2UgdG9cbjY4MTU6XHRcdFx0XHQgKiBoX2NnLVx1MDAzZWNzcy4gU28gd2Ugc2hvdWxkIHJlbGVhc2UgdGhlIHJlZmVyZW5jZSBoZWxkXG42ODE2Olx0XHRcdFx0ICogdmlhIGh1Z2V0bGJfY2dyb3VwX2NoYXJnZV9jZ3JvdXBfcnN2ZCgpIHdoZW4gd2UgYXJlXG42ODE3Olx0XHRcdFx0ICogZG9uZS5cbjY4MTg6XHRcdFx0XHQgKi9cbjY4MTk6XHRcdFx0XHRodWdldGxiX2Nncm91cF9wdXRfcnN2ZF9jZ3JvdXAoaF9jZyk7XG42ODIwOlx0XHRcdH1cbjY4MjE6XHRcdH1cbjY4MjI6XHRcdHJldHVybiBjaGc7XG42ODIzOlx0XG42ODI0Olx0IG91dF9wdXRfcGFnZXM6XG42ODI1Olx0XHQvKlxuNjgyNjpcdFx0ICogUmV0dXJuIGFsbCB0aGF0IHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc3VicG9vbCwgbGV0IHN1YnBvb2xcbjY4Mjc6XHRcdCAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZVxuNjgyODpcdFx0ICogcmV0dXJuZWQgdG8gdGhlIGdsb2JhbCBwb29sLlxuNjgyOTpcdFx0ICovXG42ODMwOlx0XHRnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgY2hnKTtcbjY4MzE6XHRcdC8qXG42ODMyOlx0XHQgKiBUaGVyZSBtYXkgYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZlxuNjgzMzpcdFx0ICogcmVzZXJ2YXRpb25zIHRvIGNvbnN1bWUgYW5kIHRoZSBudW1iZXIgdG8gcmVzdG9yZSBub3cgaWZcbjY4MzQ6XHRcdCAqIHRoZXJlIGFyZSBtdWx0aXBsZSB0aHJlYWRzIGludGVyYWN0aW5nIHdpdGggdGhlIHN1YnBvb2wgLVxuNjgzNTpcdFx0ICogcmVzdG9yZSB0aGUgZGlmZmVyZW5jZSwgdGFraW5nIGludG8gYWNjb3VudCBhbnkgZ2xvYmFsXG42ODM2Olx0XHQgKiByZXNlcnZhdGlvbnMgYWxyZWFkeSBhY3F1aXJlZC5cbjY4Mzc6XHRcdCAqL1xuNjgzODpcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQgLSBnYmxfcmVzdl9hY2N0ZWQpO1xuNjgzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgzOQoJCQkJCQkJb3V0cHV0OiAyMzMKCQkJCQkJCXRob3VnaHRzOiA4ODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdldGxiZnMgU3VicG9vbCBBY2NvdW50aW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNvcmUgcHVycG9zZSBvZiB0aGlzIHBhdGNoOiB0byBpcm9uIG91dCB0aGUgc3VicG9vbCBhY2NvdW50aW5nIGxvZ2ljIHdpdGhpbiBodWdldGxiZnMsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGlzc3VlcyByZWxhdGVkIHRvIG1pbmltdW0gYW5kIG1heGltdW0gbGltaXRzLCBhbmQgaW1wb3J0YW50bHksIGVuc3VyaW5nIGl0IGJlaGF2ZXMgY29ycmVjdGx5IHVuZGVyIGNvbmN1cnJlbnQgc2NlbmFyaW9zIGFuZCB3aXRoaW4gYHN0YXRmc2AuCgpJJiMzOTttIHNlZWluZyB0YXJnZXRlZCBmaXhlcyBhbmQgY2xlYW51cHMgYWNyb3NzIHNldmVyYWwgZmlsZXMuIEZpcnN0LCBhIGRvY3VtZW50YXRpb24gdXBkYXRlIGluIGBEb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0YOKAlGFsd2F5cyBnb29kIHRvIGtlZXAgdGhlIGRvY3VtZW50YXRpb24gYWxpZ25lZCB3aXRoIHRoZSBjb2RlLiBUaGVuLCBpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCB0aGUgYGh1Z2V0bGJmc19zdGF0ZnNgIGZ1bmN0aW9uIGdldHMgYSB0d2VhayB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBgbWF4X2hwYWdlcyA9PSAtMWAgc2NlbmFyaW8uIFRoZSB1cGRhdGVkIGNvbW1lbnRzIGluIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAgY2xhcmlmeSB0aGUgdXNlIG9mIGB1c2VkX2hwYWdlc2AuCgpUaGUgYnVsayBvZiB0aGUgY2hhbmdlcyBzZWVtIHRvIGJlIGluIGBtbS9odWdldGxiLmNgLiAgSSYjMzk7bSBub3RpbmcgdGhlIG9wdGltaXphdGlvbnMgaW4gYHN1YnBvb2xfaXNfZnJlZWAgKHJlcGxhY2luZyBicmFuY2hpbmcgd2l0aCBhIGRpcmVjdCBjb21wYXJpc29uKSwgYW5kIHRoZSBzaW1wbGlmaWNhdGlvbnMgaW4gYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYCwgd2hlcmUgdGhlIGxvZ2ljIGlzIGNsYXJpZmllZCByZWxhdGVkIHRvIGBzcG9vbC0mZ3Q7bWF4X2hwYWdlcyAhPSAtMWAuIFRoZSBjcnVjaWFsIHBhcnQgZm9yIG1lIGlzIHRoZSBmaXhlcyBpbiBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgbGltaXRgIGNhbGN1bGF0aW9uIGZvciB0aGUgbWluaW11bSBzaXplIGFjY291bnRpbmcuIFRoZSBhZGp1c3RtZW50IGluIGBhbGxvY19odWdldGxiX2ZvbGlvYCBkdXJpbmcgbWVtb3J5IGFjY291bnRpbmcgb24gZmFpbHVyZSBsb29rcyBpbXBvcnRhbnQgdG9vLiBBbHNvIHRoZSBmaXggaW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgZm9yIHRoZSBgb3V0X3B1dF9wYWdlc2AgY2xlYW51cCBwYXRoLCBlbnN1cmluZyBwcm9wZXIgYWNjb3VudGluZy4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBNeSBwcmltYXJ5IGNvbmNlcm5zIGFyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucyBvciByZWFkcy4gSSYjMzk7dmUgd2Fsa2VkIHRocm91Z2ggdGhlIGtleSBmdW5jdGlvbnM6CgoqICAgSW4gYGh1Z2V0bGJmc19zdGF0ZnNgLCB0aGUgcmVsZXZhbnQgdmFyaWFibGVzIGFwcGVhciB0byBiZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuIGBmcmVlX3BhZ2VzYCBnZXRzIGVpdGhlciAtMSBvciBhIGNhbGN1bGF0ZWQgdmFsdWUgYmFzZWQgb24gZXhpc3RpbmcgZGF0YS4gVGhlIG91dHB1dCBidWZmZXIgYWxzbyBsb29rcyBnb29kLgoqICAgSW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBgZ2JsX3Jlc3ZfZ2V0YCBsb29rcyBpbml0aWFsaXplZCBpbiBhbGwgY29kZSBwYXRocy4KKiAgIEluIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLCBgZ2JsX3Jlc3ZfYWNjdGVkYCBpcyBpbml0aWFsaXplZCB0byAwLiBgZ2JsX3Jlc3ZfZ2V0YCBpcyBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgZmxvdyBzZWVtcyBzb3VuZCBoZXJlLgoqICAgSSBjYW4gc2VlIG5vIGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIE5vIGNvcHktdG8tdXNlciBvZiB1bmluaXRpYWxpemVkIG1lbW9yeTsgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzIHBhc3NlZCBhbnl3aGVyZTsgbm8gcGFkZGluZyBsZWFrczsgbm8gc3lzY2FsbCBpbnRlcmZhY2VzIHJldHVybmluZyBrZXJuZWwgbWVtb3J5LiBUaGlzIGlzIGdvb2QuCgpUaGUgcG90ZW50aWFsIHJpc2tzLCBmcm9tIG15IGV4cGVyaWVuY2UsIHdvdWxkIGJlIGluIGluY29ycmVjdCByZXNlcnZhdGlvbiB0cmFja2luZy4gSW50ZWdlciB1bmRlcmZsb3dzIG9yIG92ZXJmbG93cywgb3IgYWNjb3VudGluZyBkZXN5bmMgYXJlIGNvbmNlcm5zLiBSZXNvdXJjZSBleGhhdXN0aW9uIG9yIE9PTSBvciBwYWdlIGFjY291bnRpbmcgbGVha3Mgd291bGQgYmUgYW5vdGhlciByaXNrLiBTdGFuZGFyZCBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIGFsd2F5cyBvbiBteSBtaW5kLCBidXQgdGhlc2UgYXJlIGFsbCB0eXBpY2FsIGxvZ2ljIG9yIGFjY291bnRpbmcgYnVncy4KCk5vdywgaXMgS01TQU4gbmVlZGVkIGhlcmU/IEFic29sdXRlbHkgbm90LiBLTVNBTiBpcyBmb3IgY2F0Y2hpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gS0FTQU4vTE9DS0RFUC9rZXJuZWwgYXNzZXJ0cyBsaWtlIFZNXF9CVUdcX09OIGV0Yy4sIHdpbGwgY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmVmY291bnRpbmcgaXNzdWVzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBsb2dpY2FsIGFjY291bnRpbmcgaGVyZSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCByZXF1aXJlIEtNU0FOLiBUaGUgS01TQU5SZWFzb25pbmcgaXMgdGhhdCB1bmluaXRpYWxpemVkIHJlYWRzIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzIGFyZW4mIzM5O3QgcmVsZXZhbnQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN1YnBvb2wgYWNjb3VudGluZyBhbmQgcmVzZXJ2YXRpb24gbG9naWMgZm9yIGh1Z2V0bGJmcyAoaW5jbHVkaW5nIGh1Z2V0bGJfc3VicG9vbF9nZXRfcGFnZXMsIGh1Z2V0bGJfc3VicG9vbF9wdXRfcGFnZXMsIHN0YXRmcyByZXBvcnRpbmcsIGFuZCByb2xsYmFjayBoYW5kbGluZyBpbiBhbGxvY19odWdldGxiX2ZvbGlvIGFuZCBodWdldGxiX3Jlc2VydmVfcGFnZXMpLlxuXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKHN1Y2ggYXMgZ2JsX3Jlc3ZfZ2V0LCBnYmxfcmVzdl9wdXQsIGdibF9yZXN2X2FjY3RlZCwgbGltaXQsIGFuZCBmcmVlX3BhZ2VzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGFjcm9zcyBhbGwgY29udHJvbCBmbG93IHBhdGhzLiBObyBuZXcgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm8gcGFkZGluZyBieXRlcyBhcmUgZXhwb3NlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBpcyBwYXNzZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZy5cblxuUG90ZW50aWFsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgcGFnZSBhY2NvdW50aW5nIGluYWNjdXJhY2llcywgY29uY3VycmVuY3kvc3luY2hyb25pemF0aW9uIHVuZGVyIHJhY2UgY29uZGl0aW9ucywgb3IgbWVtb3J5IGV4aGF1c3Rpb24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN1YnBvb2wgYWNjb3VudGluZyBhbmQgcmVzZXJ2YXRpb24gbG9naWMgZm9yIGh1Z2V0bGJmcyAoaW5jbHVkaW5nIGh1Z2V0bGJfc3VicG9vbF9nZXRfcGFnZXMsIGh1Z2V0bGJfc3VicG9vbF9wdXRfcGFnZXMsIHN0YXRmcyByZXBvcnRpbmcsIGFuZCByb2xsYmFjayBoYW5kbGluZyBpbiBhbGxvY19odWdldGxiX2ZvbGlvIGFuZCBodWdldGxiX3Jlc2VydmVfcGFnZXMpLlxuXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKHN1Y2ggYXMgZ2JsX3Jlc3ZfZ2V0LCBnYmxfcmVzdl9wdXQsIGdibF9yZXN2X2FjY3RlZCwgbGltaXQsIGFuZCBmcmVlX3BhZ2VzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGFjcm9zcyBhbGwgY29udHJvbCBmbG93IHBhdGhzLiBObyBuZXcgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm8gcGFkZGluZyBieXRlcyBhcmUgZXhwb3NlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBpcyBwYXNzZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZy5cblxuUG90ZW50aWFsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgcGFnZSBhY2NvdW50aW5nIGluYWNjdXJhY2llcywgY29uY3VycmVuY3kvc3luY2hyb25pemF0aW9uIHVuZGVyIHJhY2UgY29uZGl0aW9ucywgb3IgbWVtb3J5IGV4aGF1c3Rpb24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjowMToxNS45Mzg5MjI4ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTk1MDQ5NzI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc1wiLFxuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNcIixcbiAgICBcImh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwiaHVnZXRsYmZzX3N0YXRmc1wiLFxuICAgIFwiaHVnZXRsYl91bnJlc2VydmVfcGFnZXNcIixcbiAgICBcImh1Z2VwYWdlX3B1dF9zdWJwb29sXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3VicG9vbCBhY2NvdW50aW5nIGFuZCByZXNlcnZhdGlvbiBsb2dpYyBmb3IgaHVnZXRsYmZzIChpbmNsdWRpbmcgaHVnZXRsYl9zdWJwb29sX2dldF9wYWdlcywgaHVnZXRsYl9zdWJwb29sX3B1dF9wYWdlcywgc3RhdGZzIHJlcG9ydGluZywgYW5kIHJvbGxiYWNrIGhhbmRsaW5nIGluIGFsbG9jX2h1Z2V0bGJfZm9saW8gYW5kIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcykuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChzdWNoIGFzIGdibF9yZXN2X2dldCwgZ2JsX3Jlc3ZfcHV0LCBnYmxfcmVzdl9hY2N0ZWQsIGxpbWl0LCBhbmQgZnJlZV9wYWdlcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhY3Jvc3MgYWxsIGNvbnRyb2wgZmxvdyBwYXRocy4gTm8gbmV3IHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgYWxsb2NhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIG5vIHBhZGRpbmcgYnl0ZXMgYXJlIGV4cG9zZWQsIGFuZCBubyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgcGFzc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb25kaXRpb25hbCBicmFuY2hpbmcuXFxuXFxuUG90ZW50aWFsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgcGFnZSBhY2NvdW50aW5nIGluYWNjdXJhY2llcywgY29uY3VycmVuY3kvc3luY2hyb25pemF0aW9uIHVuZGVyIHJhY2UgY29uZGl0aW9ucywgb3IgbWVtb3J5IGV4aGF1c3Rpb24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGJmcyBzdWJwb29sIGFjY291bnRpbmcgbG9naWMgYW5kIHJlc2VydmF0aW9uIGVycm9yLXVud2luZCBwYXRocyBpbiBtbS9odWdldGxiLmMgYW5kIGZzL2h1Z2V0bGJmcy9pbm9kZS5jLiBTcGVjaWZpY2FsbHksIGl0IGNoYW5nZXMgaG93IGB1c2VkX2hwYWdlc2AgYW5kIGByc3ZfaHBhZ2VzYCBhcmUgdXBkYXRlZCBpbiBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoKWAgYW5kIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcygpYCwgYWx0ZXJzIHN1YnBvb2wgcmVsZWFzZSBjaGVja3MgaW4gYHN1YnBvb2xfaXNfZnJlZSgpYCwgZml4ZXMgc3RhdGZzIGNhbGN1bGF0aW9uIGZvciB1bmJvdW5kZWQgc3VicG9vbHMgaW4gYGh1Z2V0bGJmc19zdGF0ZnMoKWAsIGFuZCByZWZhY3RvcnMgZ2xvYmFsIG1lbW9yeSByZXNlcnZhdGlvbiByb2xsYmFja3MgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW8oKWAgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAuIFRoaXMgbG9naWMgaXMgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBodWdldGxiZnMgZmlsZXN5c3RlbSBtb3VudHMsIGFsbG9jYXRpb25zLCBhbmQgbW1hcCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjowMToxNS45Mzg5MjcxMzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDUxNjQ1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3YTM3MDU0YTdmZDk5NmJlMzBlOTAzNjU1NjE3Zjg1NmVmYzc2NmQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMjI6MDE6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcXG5pbmRleCBhNDkxMTVkYjE4Yzc2Li5kMjQ0NTgzZmRjYmMzIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XFxuQEAgLTMxNCwyMSArMzE0LDggQEAgaHVnZSBwYWdlcy4gIElmIHRoZXkgY2FuIG5vdCBiZSByZXNlcnZlZCwgdGhlIG1vdW50IGZhaWxzLlxcbiBUaGUgcm91dGluZXMgaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgYXJlIGNhbGxlZCB3aGVuIHBhZ2VzIGFyZVxcbiBvYnRhaW5lZCBmcm9tIG9yIHJlbGVhc2VkIGJhY2sgdG8gYSBzdWJwb29sLiAgVGhleSBwZXJmb3JtIGFsbCBzdWJwb29sXFxuIGFjY291bnRpbmcsIGFuZCB0cmFjayBhbnkgcmVzZXJ2YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbC5cXG4taHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzIGFyZSBwYXNzZWQgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIGJ5IHdoaWNoXFxuLXRvIGFkanVzdCB0aGUgc3VicG9vbCAndXNlZCBwYWdlJyBjb3VudCAoZG93biBmb3IgZ2V0LCB1cCBmb3IgcHV0KS4gIE5vcm1hbGx5LFxcbi10aGV5IHJldHVybiB0aGUgc2FtZSB2YWx1ZSB0aGF0IHdhcyBwYXNzZWQgb3IgYW4gZXJyb3IgaWYgbm90IGVub3VnaCBwYWdlc1xcbi1leGlzdCBpbiB0aGUgc3VicG9vbC5cXG4tXFxuLUhvd2V2ZXIsIGlmIHJlc2VydmVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnBvb2wgYSByZXR1cm4gdmFsdWUgbGVzc1xcbi10aGFuIHRoZSBwYXNzZWQgdmFsdWUgbWF5IGJlIHJldHVybmVkLiAgVGhpcyByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHRoZVxcbi1udW1iZXIgb2YgYWRkaXRpb25hbCBnbG9iYWwgcG9vbCBhZGp1c3RtZW50cyB3aGljaCBtdXN0IGJlIG1hZGUuICBGb3IgZXhhbXBsZSxcXG4tc3VwcG9zZSBhIHN1YnBvb2wgY29udGFpbnMgMyByZXNlcnZlZCBodWdlIHBhZ2VzIGFuZCBzb21lb25lIGFza3MgZm9yIDUuXFxuLVRoZSAzIHJlc2VydmVkIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbCBjYW4gYmUgdXNlZCB0byBzYXRpc2Z5IHBhcnRcXG4tb2YgdGhlIHJlcXVlc3QuICBCdXQsIDIgcGFnZXMgbXVzdCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBnbG9iYWwgcG9vbHMuICBUb1xcbi1yZWxheSB0aGlzIGluZm9ybWF0aW9uIHRvIHRoZSBjYWxsZXIsIHRoZSB2YWx1ZSAyIGlzIHJldHVybmVkLiAgVGhlIGNhbGxlclxcbi1pcyB0aGVuIHJlc3BvbnNpYmxlIGZvciBhdHRlbXB0aW5nIHRvIG9idGFpbiB0aGUgYWRkaXRpb25hbCB0d28gcGFnZXMgZnJvbVxcbi10aGUgZ2xvYmFsIHBvb2xzLlxcbi1cXG4raHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgdXNlIHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcyBwYXNzZWQgdG8gYWRqdXN0XFxuK3RoZSBzdWJwb29sICd1c2VkIHBhZ2UnIGNvdW50LlxcbiBcXG4gQ09XIGFuZCBSZXNlcnZhdGlvbnNcXG4gPT09PT09PT09PT09PT09PT09PT1cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxcbmluZGV4IDIwOTQ3ZjhiZDA2NTQuLmFlMWYxZjMxNDc3ZmMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxcbkBAIC0yNDYsMTUgKzI0Niw4IEBAIGh1Z2VwYWdlX3N1YnBvb2znmoRtaW5faHBhZ2Vz5a2X5q615Lit6KKr6Lef6Liq44CC5Zyo5oyC6L295pe277yMaHVnZXRsYl9hY2N0X21lXFxuIOiiq+iwg+eUqOS7pemihOeVmeaMh+WumuaVsOmHj+eahOW3qOmhteOAguWmguaenOWug+S7rOS4jeiDveiiq+mihOeVme+8jOaMgui9veWwseS8muWksei0peOAglxcbiBcXG4g5b2T5LuO5a2Q5rGg5Lit6I635Y+W5oiW6YeK5pS+6aG16Z2i5pe277yM5Lya6LCD55SoaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCnlh73mlbDjgIJcXG4taHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2Vz6KKr5Lyg6YCS57uZ5beo6aG15pWw6YeP77yM5Lul5q2k5p2l6LCD5pW05a2Q5rGg55qEIOKAnOW3sueUqOmhtemdouKAnSDorqHmlbBcXG4t77yIZ2V05Li65LiL6ZmN77yMcHV05Li65LiK5Y2H77yJ44CC6YCa5bi45oOF5Ya15LiL77yM5aaC5p6c5a2Q5rGg5Lit5rKh5pyJ6Laz5aSf55qE6aG16Z2i77yM5a6D5Lus5Lya6L+U5Zue5LiO5Lyg6YCS55qE55u45ZCM55qE5YC85oiWXFxuLeS4gOS4qumUmeivr+OAglxcbi1cXG4t54S26ICM77yM5aaC5p6c6aKE55WZ5LiO5a2Q5rGg55u45YWz6IGU77yM5Y+v6IO95Lya6L+U5Zue5LiA5Liq5bCP5LqO5Lyg6YCS5YC855qE6L+U5Zue5YC844CC6L+Z5Liq6L+U5Zue5YC86KGo56S65b+F6aG76L+b6KGM55qE6aKd5aSW5YWo5bGAXFxuLeaxoOiwg+aVtOeahOaVsOmHj+OAguS+i+Wmgu+8jOWBh+iuvuS4gOS4quWtkOaxoOWMheWQqzPkuKrpooTnlZnnmoTlt6jpobXvvIzmnInkurropoHmsYI15Liq44CC5LiO5a2Q5rGg55u45YWz55qEM+S4qumihOeVmemhteWPr+S7peeUqOadpVxcbi3mu6HotrPpg6jliIbor7fmsYLjgILkvYbmmK/vvIzlv4Xpobvku47lhajlsYDmsaDkuK3ojrflvpcy5Liq6aG16Z2i44CC5Li65LqG5ZCR6LCD55So6ICF6L2s6L6+6L+Z5LiA5L+h5oGv77yM5bCG6L+U5Zue5YC8MuOAgueEtuWQju+8jOiwg+eUqFxcbi3ogIXopoHotJ/otKPku47lhajlsYDmsaDkuK3ojrflj5blj6blpJbkuKTkuKrpobXpnaLjgIJcXG4tXFxuK+Wug+S7rOi0n+i0o+aJgOacieWtkOaxoOeahOe7n+iuoeaguOeul++8jOW5tui3n+i4quS4juWtkOaxoOebuOWFs+iBlOeahOmihOeVmeOAglxcbitodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKeWHveaVsOS9v+eUqOS8oOWFpeeahOW3qOmhteaVsOmHj+adpeiwg+aVtOWtkOaxoOeahOKAnOW3sueUqOmhtemdouKAneiuoeaVsOOAglxcbiBcXG4gQ09X5ZKM6aKE55WZXFxuID09PT09PT09PT1cXG5kaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xcbmluZGV4IDc2MTFhODQ3MGVhMjYuLjUxMTNmNzQzZjZmYzcgMTAwNjQ0XFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcXG4rKysgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xcbkBAIC0xMTA5LDggKzExMDksMTIgQEAgc3RhdGljIGludCBodWdldGxiZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcXG4gXFxuIFxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZWxvY2spO1xcbiBcXHRcXHRcXHRidWYtXFx1MDAzZWZfYmxvY2tzID0gc2JpbmZvLVxcdTAwM2VzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcztcXG4tXFx0XFx0XFx0ZnJlZV9wYWdlcyA9IHNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXNcXG4tXFx0XFx0XFx0XFx0LSBzYmluZm8tXFx1MDAzZXNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcztcXG4rXFx0XFx0XFx0aWYgKHNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgPT0gLTEpIHtcXG4rXFx0XFx0XFx0XFx0ZnJlZV9wYWdlcyA9IC0xO1xcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRmcmVlX3BhZ2VzID0gc2JpbmZvLVxcdTAwM2VzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcyAtXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2JpbmZvLVxcdTAwM2VzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXM7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0YnVmLVxcdTAwM2VmX2JhdmFpbCA9IGJ1Zi1cXHUwMDNlZl9iZnJlZSA9IGZyZWVfcGFnZXM7XFxuIFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2c2JpbmZvLVxcdTAwM2VzcG9vbC1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdFxcdGJ1Zi1cXHUwMDNlZl9maWxlcyA9IHNiaW5mby1cXHUwMDNlbWF4X2lub2RlcztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbmluZGV4IDE2YzRjNGNhYTEyNmMuLjQ1NTFmZjMwMjM2NDAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbkBAIC0zOSw4ICszOSw4IEBAIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sIHtcXG4gXFx0c3BpbmxvY2tfdCBsb2NrO1xcbiBcXHRsb25nIGNvdW50O1xcbiBcXHRsb25nIG1heF9ocGFnZXM7XFx0LyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovXFxuLVxcdGxvbmcgdXNlZF9ocGFnZXM7XFx0LyogVXNlZCBjb3VudCBhZ2FpbnN0IG1heGltdW0sIGluY2x1ZGVzICovXFxuLVxcdFxcdFxcdFxcdC8qIGJvdGggYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi9cXG4rXFx0bG9uZyB1c2VkX2hwYWdlcztcXHQvKiBVc2VkIHBhZ2UgY291bnQsIGluY2x1ZGVzIGJvdGggKi9cXG4rXFx0XFx0XFx0XFx0LyogYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi9cXG4gXFx0c3RydWN0IGhzdGF0ZSAqaHN0YXRlO1xcbiBcXHRsb25nIG1pbl9ocGFnZXM7XFx0LyogTWluaW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1pbmltdW0uICovXFxuIFxcdGxvbmcgcnN2X2hwYWdlcztcXHQvKiBQYWdlcyByZXNlcnZlZCBhZ2FpbnN0IGdsb2JhbCBwb29sIHRvICovXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IDRmNmY1OGJmM2RiNmMuLjExNTFhZDk1OWZmZDUgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYi5jXFxuKysrIGIvbW0vaHVnZXRsYi5jXFxuQEAgLTEzMCwxMiArMTMwLDggQEAgc3RhdGljIGlubGluZSBib29sIHN1YnBvb2xfaXNfZnJlZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXFxuIHtcXG4gXFx0aWYgKHNwb29sLVxcdTAwM2Vjb3VudClcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXFxuLVxcdFxcdHJldHVybiBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcXG4tXFx0aWYgKHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxcbi1cXHRcXHRyZXR1cm4gc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPT0gc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXM7XFxuIFxcbi1cXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0cmV0dXJuIHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyA9PSAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxuQEAgLTE5MywxMyArMTg5LDE4IEBAIHZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbiBcXHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgYWxsb2NhdGluZyBhbmQgcmVzZXJ2aW5nIHBhZ2VzLlxcbi0gKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGVcXG4tICogcmVxdWVzdC4gIE90aGVyd2lzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2YgcGFnZXMgYnkgd2hpY2ggdGhlXFxuLSAqIGdsb2JhbCBwb29scyBtdXN0IGJlIGFkanVzdGVkICh1cHdhcmQpLiAgVGhlIHJldHVybmVkIHZhbHVlIG1heVxcbi0gKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZVxcbi0gKiBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC5cXG4rLyoqXFxuKyAqIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzIC0gR2V0IHBhZ2VzIGZyb20gYSBzdWJwb29sXFxuKyAqIEBzcG9vbDogcG9pbnRlciB0byBzdWJwb29sIHN0cnVjdHVyZSAobWF5IGJlIE5VTEwpXFxuKyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlIG9yIHJlc2VydmVcXG4rICpcXG4rICogQ2hlY2sgYW5kIHVwZGF0ZSBzdWJwb29sIHBhZ2UgdXNhZ2UgY291bnRzIHdoZW4gYWxsb2NhdGluZyBvclxcbisgKiByZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy5cXG4rICpcXG4rICogQ29udGV4dDogVGFrZXMgc3Bvb2wtXFx1MDAzZWxvY2sgdXNpbmcgc3Bpbl9sb2NrX2lycSgpLlxcbisgKiBSZXR1cm46IE5vbi1uZWdhdGl2ZSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgY2Fubm90IGJlXFxuKyAqICAgICAgICAgc2F0aXNmaWVkIGJ5IHRoZSBzdWJwb29sLCBvciAtRU5PTUVNIGlmIHRoZSBzdWJwb29sIG1heGltdW1cXG4rICogICAgICAgICBsaW1pdCB3b3VsZCBiZSBleGNlZWRlZC5cXG4gICovXFxuIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgbG9uZyBkZWx0YSlcXG5AQCAtMjExLDE1ICsyMTIsMTQgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbiBcXG4gXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2spO1xcbiBcXG4tXFx0aWYgKHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzICE9IC0xKSB7XFx0XFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cXG4tXFx0XFx0aWYgKChzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgKyBkZWx0YSkgXFx1MDAzYz0gc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMpXFxuLVxcdFxcdFxcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyArPSBkZWx0YTtcXG4tXFx0XFx0ZWxzZSB7XFxuLVxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuLVxcdFxcdFxcdGdvdG8gdW5sb2NrX3JldDtcXG4tXFx0XFx0fVxcbitcXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyArIGRlbHRhIFxcdTAwM2Ugc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byB1bmxvY2tfcmV0O1xcbiBcXHR9XFxuIFxcbitcXHRzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgKz0gZGVsdGE7XFxuK1xcbiBcXHQvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xcbiBcXHRpZiAoc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXFx1MDAyNlxcdTAwMjYgc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMpIHtcXG4gXFx0XFx0aWYgKGRlbHRhIFxcdTAwM2Ugc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMpIHtcXG5AQCAtMjQwLDExICsyNDAsMTkgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGZyZWVpbmcgYW5kIHVucmVzZXJ2aW5nIHBhZ2VzLlxcbi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBnbG9iYWwgcGFnZSByZXNlcnZhdGlvbnMgdGhhdCBtdXN0IGJlIGRyb3BwZWQuXFxuLSAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpXFxuLSAqIGluIHRoZSBjYXNlIHdoZXJlIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxcbisvKipcXG4rICogaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMgLSBSZWxlYXNlIHBhZ2VzIGJhY2sgdG8gYSBzdWJwb29sXFxuKyAqIEBzcG9vbDogcG9pbnRlciB0byBzdWJwb29sIHN0cnVjdHVyZSAobWF5IGJlIE5VTEwpXFxuKyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGZyZWUgb3IgdW5yZXNlcnZlXFxuKyAqXFxuKyAqIENoZWNrIGFuZCB1cGRhdGUgc3VicG9vbCBwYWdlIHVzYWdlIGNvdW50cyB3aGVuIGZyZWVpbmcgb3JcXG4rICogdW5yZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy5cXG4rICpcXG4rICogQ29udGV4dDogVGFrZXMgc3Bvb2wtXFx1MDAzZWxvY2sgdXNpbmcgc3Bpbl9sb2NrX2lycXNhdmUoKS4gTWF5IHJlbGVhc2VcXG4rICogICAgICAgICAgYW5kIGZyZWUgQHNwb29sIGlmIGl0cyB1c2FnZSBjb3VudCBhbmQgcmVmZXJlbmNlcyByZWFjaFxcbisgKiAgICAgICAgICB6ZXJvLlxcbisgKiBSZXR1cm46IE5vbi1uZWdhdGl2ZSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgdGhlIHN1YnBvb2wgY2Fubm90XFxuKyAqICAgICAgICAgYWJzb3JiLlxcbiAgKi9cXG4gc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgbG9uZyBkZWx0YSlcXG5AQCAtMjU3LDE5ICsyNjUsMjQgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbiBcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnNwb29sLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXFx0XFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cXG4tXFx0XFx0c3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzIC09IGRlbHRhO1xcbitcXHRzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XFxuIFxcbiBcXHQgLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi9cXG4gXFx0aWYgKHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzICE9IC0xIFxcdTAwMjZcXHUwMDI2IHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyBcXHUwMDNjIHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzKSB7XFxuLVxcdFxcdGlmIChzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIFxcdTAwM2M9IHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzKVxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBsaW1pdCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXRcXG4rXFx0XFx0ICogY2FuIGJlIHJlc3RvcmVkIHRvIHRoaXMgc3VicG9vbC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGxvbmcgbGltaXQgPSBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyAtIHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcztcXG4rXFxuK1xcdFxcdGlmIChzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIFxcdTAwM2M9IGxpbWl0KVxcbiBcXHRcXHRcXHRyZXQgPSAwO1xcbiBcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHJldCA9IHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgLSBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcztcXG4rXFx0XFx0XFx0cmV0ID0gc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSAtIGxpbWl0O1xcbiBcXG4gXFx0XFx0c3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgKz0gZGVsdGE7XFxuLVxcdFxcdGlmIChzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyBcXHUwMDNlIHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzKVxcbi1cXHRcXHRcXHRzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyA9IHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzO1xcbitcXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgXFx1MDAzZSBsaW1pdClcXG4rXFx0XFx0XFx0c3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPSBsaW1pdDtcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG5AQCAtMjk0NCw3ICsyOTU3LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX3ZtYSh2bWEpO1xcbiBcXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbi1cXHRsb25nIHJldHZhbCwgZ2JsX2NoZywgZ2JsX3Jlc2VydmU7XFxuK1xcdGxvbmcgcmV0dmFsLCBnYmxfcmVzdl9nZXQ7XFxuIFxcdG1hcF9jaGdfc3RhdGUgbWFwX2NoZztcXG4gXFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCBtcG9saTtcXG4gXFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xcbkBAIC0yOTgzLDggKzI5OTYsOCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdCAqIE9yIGlmIGl0IGNhbiBnZXQgb25lIGZyb20gdGhlIHBvb2wgcmVzZXJ2YXRpb24gZGlyZWN0bHkuXFxuIFxcdCAqL1xcbiBcXHRpZiAobWFwX2NoZykge1xcbi1cXHRcXHRnYmxfY2hnID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xcbi1cXHRcXHRpZiAoZ2JsX2NoZyBcXHUwMDNjIDApIHtcXG4rXFx0XFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xcbitcXHRcXHRpZiAoZ2JsX3Jlc3ZfZ2V0IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRyZXQgPSAtRU5PU1BDO1xcbiBcXHRcXHRcXHRnb3RvIG91dF9lbmRfcmVzZXJ2YXRpb247XFxuIFxcdFxcdH1cXG5AQCAtMjk5Myw3ICszMDA2LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHQgKiBJZiB3ZSBoYXZlIHRoZSB2bWEgcmVzZXJ2YXRpb24gcmVhZHksIG5vIG5lZWQgZm9yIGV4dHJhXFxuIFxcdFxcdCAqIGdsb2JhbCByZXNlcnZhdGlvbi5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGdibF9jaGcgPSAwO1xcbitcXHRcXHRnYmxfcmVzdl9nZXQgPSAwO1xcbiBcXHR9XFxuIFxcbiBcXHQvKlxcbkBAIC0zMDA0LDEwICszMDE3LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIGdibF9jaGcgPT0gMCBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoaXNcXG4rXFx0ICogZ2JsX3Jlc3ZfZ2V0ID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXFxuIFxcdCAqIGFsbG9jYXRpb24sIHNvIHRyeSB0byB1c2UgaXQuXFxuIFxcdCAqL1xcbi1cXHRpZiAoZ2JsX2NoZyA9PSAwKVxcbitcXHRpZiAoZ2JsX3Jlc3ZfZ2V0ID09IDApXFxuIFxcdFxcdGFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlM7XFxuIFxcbiBcXHQvKiBUYWtlcyByZWZlcmVuY2Ugb24gbXBvbC4gKi9cXG5AQCAtMzA2MSwxMyArMzA3NCwxMCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdHJldHVybiBmb2xpbztcXG4gXFxuIG91dF9zdWJwb29sX3B1dDpcXG4tXFx0LypcXG4tXFx0ICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wncyByc3ZfaHBhZ2VzIGlzIHVzZWRcXG4tXFx0ICogZHVyaW5nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLlxcbi1cXHQgKi9cXG4tXFx0aWYgKG1hcF9jaGcgXFx1MDAyNlxcdTAwMjYgIWdibF9jaGcpIHtcXG4tXFx0XFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxuLVxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcXG4rXFx0aWYgKG1hcF9jaGcpIHtcXG4rXFx0XFx0bG9uZyBnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxuK1xcbitcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCAtIGdibF9yZXN2X3B1dCk7XFxuIFxcdH1cXG4gXFxuIG91dF9lbmRfcmVzZXJ2YXRpb246XFxuQEAgLTY2NjMsMTIgKzY2NzMsMTUgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncylcXG4ge1xcbi1cXHRsb25nIGNoZyA9IC0xLCBhZGQgPSAtMSwgc3Bvb2xfcmVzdiwgZ2JsX3Jlc3Y7XFxuK1xcdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xO1xcbiBcXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2lub2RlKGlub2RlKTtcXG4gXFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF9pbm9kZShpbm9kZSk7XFxuIFxcdHN0cnVjdCByZXN2X21hcCAqcmVzdl9tYXA7XFxuIFxcdHN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IE5VTEw7XFxuLVxcdGxvbmcgZ2JsX3Jlc2VydmUsIHJlZ2lvbnNfbmVlZGVkID0gMDtcXG4rXFx0bG9uZyBnYmxfcmVzdl9hY2N0ZWQgPSAwO1xcbitcXHRsb25nIHJlZ2lvbnNfbmVlZGVkID0gMDtcXG4rXFx0bG9uZyBnYmxfcmVzdl9nZXQ7XFxuK1xcdGxvbmcgZ2JsX3Jlc3ZfcHV0O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0LyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovXFxuQEAgLTY3NDMsOSArNjc1Niw5IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdCAqIHRoZSBzdWJwb29sIGhhcyBhIG1pbmltdW0gc2l6ZSwgdGhlcmUgbWF5IGJlIHNvbWUgZ2xvYmFsXFxuIFxcdCAqIHJlc2VydmF0aW9ucyBhbHJlYWR5IGluIHBsYWNlIChnYmxfcmVzZXJ2ZSkuXFxuIFxcdCAqL1xcbi1cXHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xcbi1cXHRpZiAoZ2JsX3Jlc2VydmUgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdGVyciA9IGdibF9yZXNlcnZlO1xcbitcXHRnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgY2hnKTtcXG4rXFx0aWYgKGdibF9yZXN2X2dldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZXJyID0gZ2JsX3Jlc3ZfZ2V0O1xcbiBcXHRcXHRnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7XFxuIFxcdH1cXG4gXFxuQEAgLTY3NTMsOSArNjc2NiwxMCBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHQgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi5cXG4gXFx0ICogSGFuZCB0aGUgcGFnZXMgYmFjayB0byB0aGUgc3VicG9vbCBpZiB0aGVyZSBhcmUgbm90XFxuIFxcdCAqL1xcbi1cXHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTtcXG4rXFx0ZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQpO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfcHV0X3BhZ2VzO1xcbitcXHRnYmxfcmVzdl9hY2N0ZWQgPSBnYmxfcmVzdl9nZXQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBBY2NvdW50IGZvciB0aGUgcmVzZXJ2YXRpb25zIG1hZGUuIFNoYXJlZCBtYXBwaW5ncyByZWNvcmQgcmVnaW9uc1xcbkBAIC02NzcyLDcgKzY3ODYsNiBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRhZGQgPSByZWdpb25fYWRkKHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQsIGgsIGhfY2cpO1xcbiBcXG4gXFx0XFx0aWYgKHVubGlrZWx5KGFkZCBcXHUwMDNjIDApKSB7XFxuLVxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcXG4gXFx0XFx0XFx0ZXJyID0gYWRkO1xcbiBcXHRcXHRcXHRnb3RvIG91dF9wdXRfcGFnZXM7XFxuIFxcdFxcdH0gZWxzZSBpZiAodW5saWtlbHkoY2hnIFxcdTAwM2UgYWRkKSkge1xcbkBAIC02ODA4LDI2ICs2ODIxLDIyIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdH1cXG4gXFx0cmV0dXJuIGNoZztcXG4gXFxuLW91dF9wdXRfcGFnZXM6XFxuLVxcdHNwb29sX3Jlc3YgPSBjaGcgLSBnYmxfcmVzZXJ2ZTtcXG4tXFx0aWYgKHNwb29sX3Jlc3YpIHtcXG4tXFx0XFx0LyogcHV0IHN1YiBwb29sJ3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cXG4tXFx0XFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIHN1YnBvb2wncyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxcbi1cXHRcXHQgKiByZXR1cm4gdG8gaHN0YXRlLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xcbi1cXHR9XFxuLVxcdC8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqL1xcbi1cXHRpZiAoZ2JsX3Jlc2VydmUgXFx1MDAyNlxcdTAwMjYgc3Bvb2wpIHtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rIG91dF9wdXRfcGFnZXM6XFxuK1xcdC8qXFxuK1xcdCAqIFJldHVybiBhbGwgdGhhdCB3YXMgcmVxdWVzdGVkIGZyb20gdGhlIHN1YnBvb2wsIGxldCBzdWJwb29sXFxuK1xcdCAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZVxcbitcXHQgKiByZXR1cm5lZCB0byB0aGUgZ2xvYmFsIHBvb2wuXFxuK1xcdCAqL1xcbitcXHRnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgY2hnKTtcXG4rXFx0LypcXG4rXFx0ICogVGhlcmUgbWF5IGJlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBudW1iZXIgb2ZcXG4rXFx0ICogcmVzZXJ2YXRpb25zIHRvIGNvbnN1bWUgYW5kIHRoZSBudW1iZXIgdG8gcmVzdG9yZSBub3cgaWZcXG4rXFx0ICogdGhlcmUgYXJlIG11bHRpcGxlIHRocmVhZHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3VicG9vbCAtXFxuK1xcdCAqIHJlc3RvcmUgdGhlIGRpZmZlcmVuY2UsIHRha2luZyBpbnRvIGFjY291bnQgYW55IGdsb2JhbFxcbitcXHQgKiByZXNlcnZhdGlvbnMgYWxyZWFkeSBhY3F1aXJlZC5cXG4rXFx0ICovXFxuK1xcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0IC0gZ2JsX3Jlc3ZfcHV0IC0gZ2JsX3Jlc3ZfYWNjdGVkKTtcXG4gXFxuLVxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzcG9vbC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi1cXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXFxuLVxcdFxcdFxcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtcXG4tXFx0XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbi1cXHR9XFxuIG91dF91bmNoYXJnZV9jZ3JvdXA6XFxuIFxcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjowMToxNy4zNDQ4NTMwNTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMzMjExMDM1MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzXCIsXG4gICAgXCJodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc1wiLFxuICAgIFwiaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXCIsXG4gICAgXCJhbGxvY19odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJodWdldGxiZnNfc3RhdGZzXCIsXG4gICAgXCJodWdldGxiX3VucmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwiaHVnZXBhZ2VfcHV0X3N1YnBvb2xcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiZnMgc3VicG9vbCBhY2NvdW50aW5nIGxvZ2ljIGFuZCByZXNlcnZhdGlvbiBlcnJvci11bndpbmQgcGF0aHMgaW4gbW0vaHVnZXRsYi5jIGFuZCBmcy9odWdldGxiZnMvaW5vZGUuYy4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIGhvdyBgdXNlZF9ocGFnZXNgIGFuZCBgcnN2X2hwYWdlc2AgYXJlIHVwZGF0ZWQgaW4gYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKClgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoKWAsIGFsdGVycyBzdWJwb29sIHJlbGVhc2UgY2hlY2tzIGluIGBzdWJwb29sX2lzX2ZyZWUoKWAsIGZpeGVzIHN0YXRmcyBjYWxjdWxhdGlvbiBmb3IgdW5ib3VuZGVkIHN1YnBvb2xzIGluIGBodWdldGxiZnNfc3RhdGZzKClgLCBhbmQgcmVmYWN0b3JzIGdsb2JhbCBtZW1vcnkgcmVzZXJ2YXRpb24gcm9sbGJhY2tzIGluIGBhbGxvY19odWdldGxiX2ZvbGlvKClgIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgLiBUaGlzIGxvZ2ljIGlzIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaHVnZXRsYmZzIGZpbGVzeXN0ZW0gbW91bnRzLCBhbGxvY2F0aW9ucywgYW5kIG1tYXAgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3YTM3MDU0YTdmZDk5NmJlMzBlOTAzNjU1NjE3Zjg1NmVmYzc2NmQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAyMjowMToxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG5pbmRleCBhNDkxMTVkYjE4Yzc2Li5kMjQ0NTgzZmRjYmMzIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuQEAgLTMxNCwyMSArMzE0LDggQEAgaHVnZSBwYWdlcy4gIElmIHRoZXkgY2FuIG5vdCBiZSByZXNlcnZlZCwgdGhlIG1vdW50IGZhaWxzLlxuIFRoZSByb3V0aW5lcyBodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKSBhcmUgY2FsbGVkIHdoZW4gcGFnZXMgYXJlXG4gb2J0YWluZWQgZnJvbSBvciByZWxlYXNlZCBiYWNrIHRvIGEgc3VicG9vbC4gIFRoZXkgcGVyZm9ybSBhbGwgc3VicG9vbFxuIGFjY291bnRpbmcsIGFuZCB0cmFjayBhbnkgcmVzZXJ2YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbC5cbi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMgYXJlIHBhc3NlZCB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgYnkgd2hpY2hcbi10byBhZGp1c3QgdGhlIHN1YnBvb2wgJ3VzZWQgcGFnZScgY291bnQgKGRvd24gZm9yIGdldCwgdXAgZm9yIHB1dCkuICBOb3JtYWxseSxcbi10aGV5IHJldHVybiB0aGUgc2FtZSB2YWx1ZSB0aGF0IHdhcyBwYXNzZWQgb3IgYW4gZXJyb3IgaWYgbm90IGVub3VnaCBwYWdlc1xuLWV4aXN0IGluIHRoZSBzdWJwb29sLlxuLVxuLUhvd2V2ZXIsIGlmIHJlc2VydmVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnBvb2wgYSByZXR1cm4gdmFsdWUgbGVzc1xuLXRoYW4gdGhlIHBhc3NlZCB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQuICBUaGlzIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgdGhlXG4tbnVtYmVyIG9mIGFkZGl0aW9uYWwgZ2xvYmFsIHBvb2wgYWRqdXN0bWVudHMgd2hpY2ggbXVzdCBiZSBtYWRlLiAgRm9yIGV4YW1wbGUsXG4tc3VwcG9zZSBhIHN1YnBvb2wgY29udGFpbnMgMyByZXNlcnZlZCBodWdlIHBhZ2VzIGFuZCBzb21lb25lIGFza3MgZm9yIDUuXG4tVGhlIDMgcmVzZXJ2ZWQgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGNhbiBiZSB1c2VkIHRvIHNhdGlzZnkgcGFydFxuLW9mIHRoZSByZXF1ZXN0LiAgQnV0LCAyIHBhZ2VzIG11c3QgYmUgb2J0YWluZWQgZnJvbSB0aGUgZ2xvYmFsIHBvb2xzLiAgVG9cbi1yZWxheSB0aGlzIGluZm9ybWF0aW9uIHRvIHRoZSBjYWxsZXIsIHRoZSB2YWx1ZSAyIGlzIHJldHVybmVkLiAgVGhlIGNhbGxlclxuLWlzIHRoZW4gcmVzcG9uc2libGUgZm9yIGF0dGVtcHRpbmcgdG8gb2J0YWluIHRoZSBhZGRpdGlvbmFsIHR3byBwYWdlcyBmcm9tXG4tdGhlIGdsb2JhbCBwb29scy5cbi1cbitodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKSB1c2UgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIHBhc3NlZCB0byBhZGp1c3Rcbit0aGUgc3VicG9vbCAndXNlZCBwYWdlJyBjb3VudC5cbiBcbiBDT1cgYW5kIFJlc2VydmF0aW9uc1xuID09PT09PT09PT09PT09PT09PT09XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuaW5kZXggMjA5NDdmOGJkMDY1NC4uYWUxZjFmMzE0NzdmYyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuQEAgLTI0NiwxNSArMjQ2LDggQEAgaHVnZXBhZ2Vfc3VicG9vbOeahG1pbl9ocGFnZXPlrZfmrrXkuK3ooqvot5/ouKrjgILlnKjmjILovb3ml7bvvIxodWdldGxiX2FjY3RfbWVcbiDooqvosIPnlKjku6XpooTnlZnmjIflrprmlbDph4/nmoTlt6jpobXjgILlpoLmnpzlroPku6zkuI3og73ooqvpooTnlZnvvIzmjILovb3lsLHkvJrlpLHotKXjgIJcbiBcbiDlvZPku47lrZDmsaDkuK3ojrflj5bmiJbph4rmlL7pobXpnaLml7bvvIzkvJrosIPnlKhodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKeWHveaVsOOAglxuLWh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlc+iiq+S8oOmAkue7meW3qOmhteaVsOmHj++8jOS7peatpOadpeiwg+aVtOWtkOaxoOeahCDigJzlt7LnlKjpobXpnaLigJ0g6K6h5pWwXG4t77yIZ2V05Li65LiL6ZmN77yMcHV05Li65LiK5Y2H77yJ44CC6YCa5bi45oOF5Ya15LiL77yM5aaC5p6c5a2Q5rGg5Lit5rKh5pyJ6Laz5aSf55qE6aG16Z2i77yM5a6D5Lus5Lya6L+U5Zue5LiO5Lyg6YCS55qE55u45ZCM55qE5YC85oiWXG4t5LiA5Liq6ZSZ6K+v44CCXG4tXG4t54S26ICM77yM5aaC5p6c6aKE55WZ5LiO5a2Q5rGg55u45YWz6IGU77yM5Y+v6IO95Lya6L+U5Zue5LiA5Liq5bCP5LqO5Lyg6YCS5YC855qE6L+U5Zue5YC844CC6L+Z5Liq6L+U5Zue5YC86KGo56S65b+F6aG76L+b6KGM55qE6aKd5aSW5YWo5bGAXG4t5rGg6LCD5pW055qE5pWw6YeP44CC5L6L5aaC77yM5YGH6K6+5LiA5Liq5a2Q5rGg5YyF5ZCrM+S4qumihOeVmeeahOW3qOmhte+8jOacieS6uuimgeaxgjXkuKrjgILkuI7lrZDmsaDnm7jlhbPnmoQz5Liq6aKE55WZ6aG15Y+v5Lul55So5p2lXG4t5ruh6Laz6YOo5YiG6K+35rGC44CC5L2G5piv77yM5b+F6aG75LuO5YWo5bGA5rGg5Lit6I635b6XMuS4qumhtemdouOAguS4uuS6huWQkeiwg+eUqOiAhei9rOi+vui/meS4gOS/oeaBr++8jOWwhui/lOWbnuWAvDLjgILnhLblkI7vvIzosIPnlKhcbi3ogIXopoHotJ/otKPku47lhajlsYDmsaDkuK3ojrflj5blj6blpJbkuKTkuKrpobXpnaLjgIJcbi1cbivlroPku6zotJ/otKPmiYDmnInlrZDmsaDnmoTnu5/orqHmoLjnrpfvvIzlubbot5/ouKrkuI7lrZDmsaDnm7jlhbPogZTnmoTpooTnlZnjgIJcbitodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKeWHveaVsOS9v+eUqOS8oOWFpeeahOW3qOmhteaVsOmHj+adpeiwg+aVtOWtkOaxoOeahOKAnOW3sueUqOmhtemdouKAneiuoeaVsOOAglxuIFxuIENPV+WSjOmihOeVmVxuID09PT09PT09PT1cbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCA3NjExYTg0NzBlYTI2Li41MTEzZjc0M2Y2ZmM3IDEwMDY0NFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcbisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5AQCAtMTEwOSw4ICsxMTA5LDEyIEBAIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG4gXG4gXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbG9jayk7XG4gXHRcdFx0YnVmLVx1MDAzZWZfYmxvY2tzID0gc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXM7XG4tXHRcdFx0ZnJlZV9wYWdlcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzXG4tXHRcdFx0XHQtIHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcztcbitcdFx0XHRpZiAoc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXMgPT0gLTEpIHtcbitcdFx0XHRcdGZyZWVfcGFnZXMgPSAtMTtcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0ZnJlZV9wYWdlcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzIC1cbitcdFx0XHRcdFx0ICAgICBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4rXHRcdFx0fVxuIFx0XHRcdGJ1Zi1cdTAwM2VmX2JhdmFpbCA9IGJ1Zi1cdTAwM2VmX2JmcmVlID0gZnJlZV9wYWdlcztcbiBcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2c2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZWxvY2spO1xuIFx0XHRcdGJ1Zi1cdTAwM2VmX2ZpbGVzID0gc2JpbmZvLVx1MDAzZW1heF9pbm9kZXM7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMTZjNGM0Y2FhMTI2Yy4uNDU1MWZmMzAyMzY0MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuQEAgLTM5LDggKzM5LDggQEAgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wge1xuIFx0c3BpbmxvY2tfdCBsb2NrO1xuIFx0bG9uZyBjb3VudDtcbiBcdGxvbmcgbWF4X2hwYWdlcztcdC8qIE1heGltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtYXhpbXVtLiAqL1xuLVx0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgY291bnQgYWdhaW5zdCBtYXhpbXVtLCBpbmNsdWRlcyAqL1xuLVx0XHRcdFx0LyogYm90aCBhbGxvY2F0ZWQgYW5kIHJlc2VydmVkIHBhZ2VzLiAqL1xuK1x0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgcGFnZSBjb3VudCwgaW5jbHVkZXMgYm90aCAqL1xuK1x0XHRcdFx0LyogYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi9cbiBcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZTtcbiBcdGxvbmcgbWluX2hwYWdlcztcdC8qIE1pbmltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtaW5pbXVtLiAqL1xuIFx0bG9uZyByc3ZfaHBhZ2VzO1x0LyogUGFnZXMgcmVzZXJ2ZWQgYWdhaW5zdCBnbG9iYWwgcG9vbCB0byAqL1xuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNGY2ZjU4YmYzZGI2Yy4uMTE1MWFkOTU5ZmZkNSAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtMTMwLDEyICsxMzAsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbiB7XG4gXHRpZiAoc3Bvb2wtXHUwMDNlY291bnQpXG4gXHRcdHJldHVybiBmYWxzZTtcbi1cdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRyZXR1cm4gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcbi1cdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxuLVx0XHRyZXR1cm4gc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuIFxuLVx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuQEAgLTE5MywxMyArMTg5LDE4IEBAIHZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuIFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xuIH1cbiBcbi0vKlxuLSAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgYWxsb2NhdGluZyBhbmQgcmVzZXJ2aW5nIHBhZ2VzLlxuLSAqIFJldHVybiAtRU5PTUVNIGlmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHJlc291cmNlcyB0byBzYXRpc2Z5IHRoZVxuLSAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZVxuLSAqIGdsb2JhbCBwb29scyBtdXN0IGJlIGFkanVzdGVkICh1cHdhcmQpLiAgVGhlIHJldHVybmVkIHZhbHVlIG1heVxuLSAqIG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpIGluIHRoZSBjYXNlIHdoZXJlXG4tICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXG4rLyoqXG4rICogaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMgLSBHZXQgcGFnZXMgZnJvbSBhIHN1YnBvb2xcbisgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKVxuKyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlIG9yIHJlc2VydmVcbisgKlxuKyAqIENoZWNrIGFuZCB1cGRhdGUgc3VicG9vbCBwYWdlIHVzYWdlIGNvdW50cyB3aGVuIGFsbG9jYXRpbmcgb3JcbisgKiByZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy5cbisgKlxuKyAqIENvbnRleHQ6IFRha2VzIHNwb29sLVx1MDAzZWxvY2sgdXNpbmcgc3Bpbl9sb2NrX2lycSgpLlxuKyAqIFJldHVybjogTm9uLW5lZ2F0aXZlIG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCBjYW5ub3QgYmVcbisgKiAgICAgICAgIHNhdGlzZmllZCBieSB0aGUgc3VicG9vbCwgb3IgLUVOT01FTSBpZiB0aGUgc3VicG9vbCBtYXhpbXVtXG4rICogICAgICAgICBsaW1pdCB3b3VsZCBiZSBleGNlZWRlZC5cbiAgKi9cbiBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXHRcdFx0XHQgICAgICBsb25nIGRlbHRhKVxuQEAgLTIxMSwxNSArMjEyLDE0IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jayk7XG4gXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSkge1x0XHQvKiBtYXhpbXVtIHNpemUgYWNjb3VudGluZyAqL1xuLVx0XHRpZiAoKHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICsgZGVsdGEpIFx1MDAzYz0gc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcylcbi1cdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyArPSBkZWx0YTtcbi1cdFx0ZWxzZSB7XG4tXHRcdFx0cmV0ID0gLUVOT01FTTtcbi1cdFx0XHRnb3RvIHVubG9ja19yZXQ7XG4tXHRcdH1cbitcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICsgZGVsdGEgXHUwMDNlIHNwb29sLVx1MDAzZW1heF9ocGFnZXMpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byB1bmxvY2tfcmV0O1xuIFx0fVxuIFxuK1x0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgKz0gZGVsdGE7XG4rXG4gXHQvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xuIFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMpIHtcbiBcdFx0aWYgKGRlbHRhIFx1MDAzZSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzKSB7XG5AQCAtMjQwLDExICsyNDAsMTkgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLypcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGZyZWVpbmcgYW5kIHVucmVzZXJ2aW5nIHBhZ2VzLlxuLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdsb2JhbCBwYWdlIHJlc2VydmF0aW9ucyB0aGF0IG11c3QgYmUgZHJvcHBlZC5cbi0gKiBUaGUgcmV0dXJuIHZhbHVlIG1heSBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKVxuLSAqIGluIHRoZSBjYXNlIHdoZXJlIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxuKy8qKlxuKyAqIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzIC0gUmVsZWFzZSBwYWdlcyBiYWNrIHRvIGEgc3VicG9vbFxuKyAqIEBzcG9vbDogcG9pbnRlciB0byBzdWJwb29sIHN0cnVjdHVyZSAobWF5IGJlIE5VTEwpXG4rICogQGRlbHRhOiBudW1iZXIgb2YgcGFnZXMgdG8gZnJlZSBvciB1bnJlc2VydmVcbisgKlxuKyAqIENoZWNrIGFuZCB1cGRhdGUgc3VicG9vbCBwYWdlIHVzYWdlIGNvdW50cyB3aGVuIGZyZWVpbmcgb3JcbisgKiB1bnJlc2VydmluZyBAZGVsdGEgaHVnZXBhZ2VzLlxuKyAqXG4rICogQ29udGV4dDogVGFrZXMgc3Bvb2wtXHUwMDNlbG9jayB1c2luZyBzcGluX2xvY2tfaXJxc2F2ZSgpLiBNYXkgcmVsZWFzZVxuKyAqICAgICAgICAgIGFuZCBmcmVlIEBzcG9vbCBpZiBpdHMgdXNhZ2UgY291bnQgYW5kIHJlZmVyZW5jZXMgcmVhY2hcbisgKiAgICAgICAgICB6ZXJvLlxuKyAqIFJldHVybjogTm9uLW5lZ2F0aXZlIG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCB0aGUgc3VicG9vbCBjYW5ub3RcbisgKiAgICAgICAgIGFic29yYi5cbiAgKi9cbiBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXHRcdFx0XHQgICAgICAgbG9uZyBkZWx0YSlcbkBAIC0yNTcsMTkgKzI2NSwyNCBAQCBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcdFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cbi1cdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XG4rXHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBkZWx0YTtcbiBcbiBcdCAvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xuIFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIFx1MDAzYyBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzKSB7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgXHUwMDNjPSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzKVxuK1x0XHQvKlxuK1x0XHQgKiBsaW1pdCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXRcbitcdFx0ICogY2FuIGJlIHJlc3RvcmVkIHRvIHRoaXMgc3VicG9vbC5cbitcdFx0ICovXG4rXHRcdGxvbmcgbGltaXQgPSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzIC0gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4rXG4rXHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgXHUwMDNjPSBsaW1pdClcbiBcdFx0XHRyZXQgPSAwO1xuIFx0XHRlbHNlXG4tXHRcdFx0cmV0ID0gc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIC0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcztcbitcdFx0XHRyZXQgPSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgLSBsaW1pdDtcbiBcbiBcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArPSBkZWx0YTtcbi1cdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgXHUwMDNlIHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpXG4tXHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXM7XG4rXHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzIFx1MDAzZSBsaW1pdClcbitcdFx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID0gbGltaXQ7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTI5NDQsNyArMjk1Nyw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfdm1hKHZtYSk7XG4gXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdGxvbmcgcmV0dmFsLCBnYmxfY2hnLCBnYmxfcmVzZXJ2ZTtcbitcdGxvbmcgcmV0dmFsLCBnYmxfcmVzdl9nZXQ7XG4gXHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XG4gXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xuIFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuQEAgLTI5ODMsOCArMjk5Niw4IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdCAqIE9yIGlmIGl0IGNhbiBnZXQgb25lIGZyb20gdGhlIHBvb2wgcmVzZXJ2YXRpb24gZGlyZWN0bHkuXG4gXHQgKi9cbiBcdGlmIChtYXBfY2hnKSB7XG4tXHRcdGdibF9jaGcgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XG4tXHRcdGlmIChnYmxfY2hnIFx1MDAzYyAwKSB7XG4rXHRcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTtcbitcdFx0aWYgKGdibF9yZXN2X2dldCBcdTAwM2MgMCkge1xuIFx0XHRcdHJldCA9IC1FTk9TUEM7XG4gXHRcdFx0Z290byBvdXRfZW5kX3Jlc2VydmF0aW9uO1xuIFx0XHR9XG5AQCAtMjk5Myw3ICszMDA2LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQgKiBJZiB3ZSBoYXZlIHRoZSB2bWEgcmVzZXJ2YXRpb24gcmVhZHksIG5vIG5lZWQgZm9yIGV4dHJhXG4gXHRcdCAqIGdsb2JhbCByZXNlcnZhdGlvbi5cbiBcdFx0ICovXG4tXHRcdGdibF9jaGcgPSAwO1xuK1x0XHRnYmxfcmVzdl9nZXQgPSAwO1xuIFx0fVxuIFxuIFx0LypcbkBAIC0zMDA0LDEwICszMDE3LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDtcbiBcbiBcdC8qXG4tXHQgKiBnYmxfY2hnID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXG4rXHQgKiBnYmxfcmVzdl9nZXQgPT0gMCBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoaXNcbiBcdCAqIGFsbG9jYXRpb24sIHNvIHRyeSB0byB1c2UgaXQuXG4gXHQgKi9cbi1cdGlmIChnYmxfY2hnID09IDApXG4rXHRpZiAoZ2JsX3Jlc3ZfZ2V0ID09IDApXG4gXHRcdGFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlM7XG4gXG4gXHQvKiBUYWtlcyByZWZlcmVuY2Ugb24gbXBvbC4gKi9cbkBAIC0zMDYxLDEzICszMDc0LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHJldHVybiBmb2xpbztcbiBcbiBvdXRfc3VicG9vbF9wdXQ6XG4tXHQvKlxuLVx0ICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wncyByc3ZfaHBhZ2VzIGlzIHVzZWRcbi1cdCAqIGR1cmluZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcy5cbi1cdCAqL1xuLVx0aWYgKG1hcF9jaGcgXHUwMDI2XHUwMDI2ICFnYmxfY2hnKSB7XG4tXHRcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xuLVx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG4rXHRpZiAobWFwX2NoZykge1xuK1x0XHRsb25nIGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbitcbitcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpO1xuIFx0fVxuIFxuIG91dF9lbmRfcmVzZXJ2YXRpb246XG5AQCAtNjY2MywxMiArNjY3MywxNSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbi1cdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xLCBzcG9vbF9yZXN2LCBnYmxfcmVzdjtcbitcdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xO1xuIFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XG4gXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX2lub2RlKGlub2RlKTtcbiBcdHN0cnVjdCByZXN2X21hcCAqcmVzdl9tYXA7XG4gXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMO1xuLVx0bG9uZyBnYmxfcmVzZXJ2ZSwgcmVnaW9uc19uZWVkZWQgPSAwO1xuK1x0bG9uZyBnYmxfcmVzdl9hY2N0ZWQgPSAwO1xuK1x0bG9uZyByZWdpb25zX25lZWRlZCA9IDA7XG4rXHRsb25nIGdibF9yZXN2X2dldDtcbitcdGxvbmcgZ2JsX3Jlc3ZfcHV0O1xuIFx0aW50IGVycjtcbiBcbiBcdC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqL1xuQEAgLTY3NDMsOSArNjc1Niw5IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgKiB0aGUgc3VicG9vbCBoYXMgYSBtaW5pbXVtIHNpemUsIHRoZXJlIG1heSBiZSBzb21lIGdsb2JhbFxuIFx0ICogcmVzZXJ2YXRpb25zIGFscmVhZHkgaW4gcGxhY2UgKGdibF9yZXNlcnZlKS5cbiBcdCAqL1xuLVx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgY2hnKTtcbi1cdGlmIChnYmxfcmVzZXJ2ZSBcdTAwM2MgMCkge1xuLVx0XHRlcnIgPSBnYmxfcmVzZXJ2ZTtcbitcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xuK1x0aWYgKGdibF9yZXN2X2dldCBcdTAwM2MgMCkge1xuK1x0XHRlcnIgPSBnYmxfcmVzdl9nZXQ7XG4gXHRcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDtcbiBcdH1cbiBcbkBAIC02NzUzLDkgKzY3NjYsMTAgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCAqIENoZWNrIGVub3VnaCBodWdlcGFnZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIHJlc2VydmF0aW9uLlxuIFx0ICogSGFuZCB0aGUgcGFnZXMgYmFjayB0byB0aGUgc3VicG9vbCBpZiB0aGVyZSBhcmUgbm90XG4gXHQgKi9cbi1cdGVyciA9IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc2VydmUpO1xuK1x0ZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfcHV0X3BhZ2VzO1xuK1x0Z2JsX3Jlc3ZfYWNjdGVkID0gZ2JsX3Jlc3ZfZ2V0O1xuIFxuIFx0LypcbiBcdCAqIEFjY291bnQgZm9yIHRoZSByZXNlcnZhdGlvbnMgbWFkZS4gU2hhcmVkIG1hcHBpbmdzIHJlY29yZCByZWdpb25zXG5AQCAtNjc3Miw3ICs2Nzg2LDYgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0YWRkID0gcmVnaW9uX2FkZChyZXN2X21hcCwgZnJvbSwgdG8sIHJlZ2lvbnNfbmVlZGVkLCBoLCBoX2NnKTtcbiBcbiBcdFx0aWYgKHVubGlrZWx5KGFkZCBcdTAwM2MgMCkpIHtcbi1cdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG4gXHRcdFx0ZXJyID0gYWRkO1xuIFx0XHRcdGdvdG8gb3V0X3B1dF9wYWdlcztcbiBcdFx0fSBlbHNlIGlmICh1bmxpa2VseShjaGcgXHUwMDNlIGFkZCkpIHtcbkBAIC02ODA4LDI2ICs2ODIxLDIyIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHR9XG4gXHRyZXR1cm4gY2hnO1xuIFxuLW91dF9wdXRfcGFnZXM6XG4tXHRzcG9vbF9yZXN2ID0gY2hnIC0gZ2JsX3Jlc2VydmU7XG4tXHRpZiAoc3Bvb2xfcmVzdikge1xuLVx0XHQvKiBwdXQgc3ViIHBvb2wncyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqL1xuLVx0XHRnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTtcbi1cdFx0Lypcbi1cdFx0ICogc3VicG9vbCdzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsXG4tXHRcdCAqIHJldHVybiB0byBoc3RhdGUuXG4tXHRcdCAqL1xuLVx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7XG4tXHR9XG4tXHQvKiBSZXN0b3JlIHVzZWRfaHBhZ2VzIGZvciBwYWdlcyB0aGF0IGZhaWxlZCBnbG9iYWwgcmVzZXJ2YXRpb24gKi9cbi1cdGlmIChnYmxfcmVzZXJ2ZSBcdTAwMjZcdTAwMjYgc3Bvb2wpIHtcbi1cdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbisgb3V0X3B1dF9wYWdlczpcbitcdC8qXG4rXHQgKiBSZXR1cm4gYWxsIHRoYXQgd2FzIHJlcXVlc3RlZCBmcm9tIHRoZSBzdWJwb29sLCBsZXQgc3VicG9vbFxuK1x0ICogdGVsbCB1cyB0aGUgbmV3IG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCBuZWVkIHRvIGJlXG4rXHQgKiByZXR1cm5lZCB0byB0aGUgZ2xvYmFsIHBvb2wuXG4rXHQgKi9cbitcdGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBjaGcpO1xuK1x0LypcbitcdCAqIFRoZXJlIG1heSBiZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbnVtYmVyIG9mXG4rXHQgKiByZXNlcnZhdGlvbnMgdG8gY29uc3VtZSBhbmQgdGhlIG51bWJlciB0byByZXN0b3JlIG5vdyBpZlxuK1x0ICogdGhlcmUgYXJlIG11bHRpcGxlIHRocmVhZHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3VicG9vbCAtXG4rXHQgKiByZXN0b3JlIHRoZSBkaWZmZXJlbmNlLCB0YWtpbmcgaW50byBhY2NvdW50IGFueSBnbG9iYWxcbitcdCAqIHJlc2VydmF0aW9ucyBhbHJlYWR5IGFjcXVpcmVkLlxuK1x0ICovXG4rXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCAtIGdibF9yZXN2X3B1dCAtIGdibF9yZXN2X2FjY3RlZCk7XG4gXG4tXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnNwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdFx0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXG4tXHRcdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7XG4tXHRcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbi1cdH1cbiBvdXRfdW5jaGFyZ2VfY2dyb3VwOlxuIFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoaHN0YXRlX2luZGV4KGgpLFxuIFx0XHRcdFx0XHQgICAgY2hnICogcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgaF9jZyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjowMToxNy4zNDQ4NTQ0NzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTYyODczMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIEh1Z2V0bGJmcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzLiBGaXJzdCwgdGhlIGZpbGUgY2hhbmdlcy4gSSBzZWU6IGBEb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0YCwgdGhlIENoaW5lc2UgdHJhbnNsYXRpb24sIGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAsIGFuZCBgbW0vaHVnZXRsYi5jYC4gQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBjaGFuZ2VzIGFjcm9zcyBkb2N1bWVudGF0aW9uLCB0aGUgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbiwgYW5kIHRoZSBjb3JlIGh1Z2V0bGIgbWVtb3J5IG1hbmFnZW1lbnQuXG5cbk5vdyBmb3IgdGhlIG1lYXQgb2YgaXQuIEluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIHRoZSBgaHVnZXRsYmZzX3N0YXRmc2AgZnVuY3Rpb24gaGFzIGEgYnVnZml4LiBJdCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBgbWF4X2hwYWdlc2AgaXMgLTEgKG1lYW5pbmcgdW5saW1pdGVkIHBhZ2VzKSBpbiBgc2JpbmZvLVx1MDAzZXNwb29sYC4gSW5zdGVhZCBvZiBzdWJ0cmFjdGluZyBmcm9tIC0xLCB3aGljaCB3b3VsZCBsZWFkIHRvIGFyaXRobWV0aWMgbm9uc2Vuc2UsIGl0IHNldHMgdGhlIGBmcmVlX3BhZ2VzYCB0byAtMS4gR29vZCBjYXRjaC5cblxuVGhlIGNvcmUgb2YgdGhlIHdvcmssIHRob3VnaCwgaXMgaW4gdGhlIGhlYWRlciBhbmQgbW0gZmlsZXMuIEl0IGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZyBhbmQgZml4IGZvciBzdWJwb29sIGFjY291bnRpbmcgd2l0aGluIGh1Z2V0bGJmcy4gVGhleSd2ZSB0b3VjaGVkIGBzdWJwb29sX2lzX2ZyZWVgLCBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgLCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgLCBgYWxsb2NfaHVnZXRsYl9mb2xpb2AsIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYC4gU3BlY2lmaWNhbGx5OlxuXG4qICAgYHN1YnBvb2xfaXNfZnJlZWAgbm93IGp1c3QgY2hlY2tzIGlmIGB1c2VkX2hwYWdlc2AgaXMgemVybyAoc2VlbXMgbW9yZSBzdHJhaWdodGZvcndhcmQpLlxuKiAgIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AgaW5jcmVtZW50cyBgdXNlZF9ocGFnZXNgIHVuY29uZGl0aW9uYWxseSwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGUgdHJhY2tpbmcuXG4qICAgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCBkZWNyZW1lbnRzIGB1c2VkX2hwYWdlc2AgdW5jb25kaXRpb25hbGx5IHRvbywgYW5kIG5vdyBpbmNsdWRlcyBhIGNhbGN1bGF0aW9uIGZvciB0aGUgYGxpbWl0YCB1c2luZyBib3RoIGBtaW5faHBhZ2VzYCBhbmQgYHVzZWRfaHBhZ2VzYCwgbWFraW5nIGl0IGFsbCBtb3JlIHByZWNpc2UuXG4qICAgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGhhcyBhbiBpbXByb3ZlbWVudDsgSXQgbm93IHByb3Blcmx5IGhhbmRsZXMgcmVzZXJ2YXRpb24gYWNjb3VudGluZyBvbiBmYWlsdXJlIHVzaW5nIGEgZGlmZmVyZW5jZSBjYWxjdWxhdGlvbiwgd2hpY2ggaW5kaWNhdGVzIGEgbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgYXBwcm9hY2guXG4qICAgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgY2xlYW5zIHVwIHRoZSBlcnJvciBwYXRocyBpbnZvbHZpbmcgc3VicG9vbHMsIGxlYWRpbmcgdG8gbW9yZSByZXNpbGllbnQgY29kZS5cblxuSXMgdGhpcyByZWFjaGFibGUgY29kZT8gQWJzb2x1dGVseS4gVGhlIGZpbGVzIGBtbS9odWdldGxiLmNgIGFuZCBgZnMvaHVnZXRsYmZzL2AgYXJlIGludGVncmFsIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBzdWJzeXN0ZW1zLiBJJ2QgZXhwZWN0IHRoaXMgY29kZSB0byBiZSBoaXQgZnJlcXVlbnRseSB3aGVuIHVzaW5nIGh1Z2V0bGJmcyB0aHJvdWdoIG1tYXAsIHN5c2NhbGxzLCBvciBmYWxsb2NhdGUgd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC5cblxuQWxyaWdodCwgbm93IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHJlcXVpcmVkIGZvciBodWdldGxiZnMgYW5kIGh1Z2V0bGIuIEknbGwgZ2V0IHRoZSBncmVwcGVyIHJlYWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODU3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6MjMuOTA3NzMwMzg1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDY4NjYyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9odWdldGxiZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAxOjIzLjk1NDgwMzk1N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNjQ0NzUyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biB0aGUgaHVnZXRsYmZzIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgS2NvbmZpZyBmaWxlIHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmluZyBodWdldGxiZnMuIFRoaXMgaXNuJ3QgdXN1YWxseSBhIHdpbGQgZ29vc2UgY2hhc2UsIGJ1dCBkZXBlbmRpbmcgb24gdGhlIHByb2plY3Qgc3RydWN0dXJlLCBpdCBjYW4gYmUgc2xpZ2h0bHkgbGVzcyBvYnZpb3VzIHRoYW4gb25lIG1pZ2h0IGhvcGUuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHVzdWFsbHkgZm9sbG93cyBhIGZldyBxdWljayBwYXRocy4gSeKAmWxsIHN0YXJ0IGJ5IHRoaW5raW5nIGFib3V0IGNvbW1vbiBsb2NhdGlvbnMg4oCTIHRoZSBgZnMvYCwgYG1tL2AsIG9yIG1heWJlIGV2ZW4gdGhlIHJvb3Qgb2YgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBpZiBpdCdzIGEgcGFydGljdWxhcmx5IGNvcmUgZmVhdHVyZSwgdGhvdWdoIHRoYXQncyBsZXNzIGxpa2VseSB0aGVzZSBkYXlzIHdpdGggdGhlIG1vZHVsYXJpemF0aW9uIGVmZm9ydHMuXG5cbkknbGwgYmUgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIG15IG1lbnRhbCBtYXAgb2YgdGhlIGtlcm5lbCBkaXJlY3Rvcnkgc3RydWN0dXJlLiBNeSBuZXh0IG1vdmUgd2lsbCBiZSB0byB0aGluayBhYm91dCBvdGhlciBzaW1pbGFyIGZlYXR1cmVzLiBXaGF0IGFyZSB0aGUgcGF0dGVybnM/IElzIGl0IHVzaW5nIGEgc3RhbmRhcmQgYEtjb25maWdgIGluY2x1ZGUsIG9yIGlzIGl0IGEgbW9yZSBiZXNwb2tlIHNldHVwPyBJJ2xsIHByb2JhYmx5IGJlIHF1aWNrbHkgc2Nhbm5pbmcgbXkgbWVtb3J5IGZvciByZWxhdGVkIGZpbGVzeXN0ZW0gb3B0aW9ucyBvciBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zIHRoYXQgSSBjb25maWd1cmVkIHJlY2VudGx5LCBhbmQgY3Jvc3MtcmVmZXJlbmNpbmcuXG5cbk9uY2UgSSd2ZSBnb3QgYSBsaWtlbHkgc3VzcGVjdCBsb2NhdGlvbiBvciB0d28sIEknbGwgZGl2ZSBpbiwgdXNpbmcgYGdyZXBgIG9yIGBmaW5kYCBhcyBhIHF1aWNrIHRlc3QsIGlmIEkgY2FuJ3QgcmVtZW1iZXIgcHJlY2lzZWx5LiBJJ2xsIHNlYXJjaCBmb3IgdGhlIHJlbGV2YW50IGNvbmZpZyBzeW1ib2wsIGxpa2UgXCJIVUdFVExCRlNcIiBvciBtYXliZSBldmVuIGEgcmVsYXRlZCBkZXBlbmRlbmN5LCBqdXN0IHRvIG1ha2Ugc3VyZSBJJ20gemVyb2luZyBpbiBvbiB0aGUgcmlnaHQgZmlsZS4gSSdsbCBleHBlY3QgdG8gcmVjb2duaXplIHRoZSBzdGFuZGFyZCBgY29uZmlnYCBkaXJlY3RpdmUgYW5kIGFzc29jaWF0ZWQgaGVscCB0ZXh0LiBGcm9tIHRoZXJlLCBJIGNhbiByZWZpbmUgbXkgc2VhcmNoIG9yIG1vdmUgb24gdG8gdGhlIG5leHQgbGlrZWx5IGxvY2F0aW9uIHVudGlsIEkgbGFuZCBvbiB0aGUgZmlsZSwgb3IgZmlsZXMsIHRoYXQgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDA3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6MjcuMDE5MjgxNzI4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MTc1MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNTA9bWVudWNvbmZpZyBIVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjU1LVxcdGhlbHBcXG5mcy9LY29uZmlnOjI1NjpcXHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cXG5mcy9LY29uZmlnLTI1Ny1cXHQgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWRcXG4tLVxcbmZzL01ha2VmaWxlPTczPW9iai15XFx0XFx0XFx0XFx0Kz0gcmFtZnMvXFxuZnMvTWFrZWZpbGU6NzQ6b2JqLSQoQ09ORklHX0hVR0VUTEJGUylcXHRcXHQrPSBodWdldGxiZnMvXFxuZnMvTWFrZWZpbGUtNzUtb2JqLSQoQ09ORklHX0NPREFfRlMpXFx0XFx0Kz0gY29kYS9cXG4tLVxcbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZS01LVxcbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19IVUdFVExCRlMpICs9IGh1Z2V0bGJmcy5vXFxuZnMvaHVnZXRsYmZzL01ha2VmaWxlLTctXFxuZnMvaHVnZXRsYmZzL01ha2VmaWxlOjg6aHVnZXRsYmZzLW9ianMgOj0gaW5vZGUub1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDItI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDM6I2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9odWdldGxiZnMuaFxcdTAwM2VcXG5mcy9odWdldGxiZnMvaW5vZGUuYy00NC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NTpzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBodWdldGxiZnNfYW9wcztcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDg6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ5LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUwOmVudW0gaHVnZXRsYmZzX3NpemVfdHlwZSB7IE5PX1NJWkUsIFNJWkVfU1RELCBTSVpFX1BFUkNFTlQgfTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy01MS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo1MjpzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQge1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTUzLVxcdHN0cnVjdCBoc3RhdGVcXHRcXHQqaHN0YXRlO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTgtXFx0bG9uZ1xcdFxcdFxcdG1pbl9ocGFnZXM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NTk6XFx0ZW51bSBodWdldGxiZnNfc2l6ZV90eXBlIG1heF92YWxfdHlwZTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo2MDpcXHRlbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgbWluX3ZhbF90eXBlO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTYxLVxcdGt1aWRfdFxcdFxcdFxcdHVpZDtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgaHVnZXRsYl9mc19wYXJhbWV0ZXJzW10gPSB7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy05OC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5OTpzdGF0aWMgaW50IGh1Z2V0bGJmc19maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMC17XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDYtXFx0ICogZm9yIFNITV9IVUdFVExCLCB0aGUgcGFnZXMgYXJlIHJlc2VydmVkIGluIHRoZSBzaG1nZXQoKSBjYWxsIHNvIHNraXBcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDc6XFx0ICogcmVzZXJ2aW5nIGhlcmUuIE5vdGU6IG9ubHkgZm9yIFNITSBodWdldGxiZnMgZmlsZSwgdGhlIGlub2RlXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ4LVxcdCAqIGZsYWcgU19QUklWQVRFIGlzIHNldC5cXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTE5Nj1zdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMjE5LSAqL1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjIyMDpzdGF0aWMgc3NpemVfdCBodWdldGxiZnNfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yMjEte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMjk3LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjI5ODpzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMjk5LVxcdFxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMzA1LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjMwNjpzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTMwNy1cXHRcXHRcXHQgICAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz01NTI9c3RhdGljIHZvaWQgcmVtb3ZlX2lub2RlX2h1Z2VwYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTkyLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjU5MzpzdGF0aWMgdm9pZCBodWdldGxiZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9odWdldGxiZnMvaW5vZGUuYy01OTQte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTk2LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjU5NzpcXHR0cmFjZV9odWdldGxiZnNfZXZpY3RfaW5vZGUoaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTU5OC1cXHRyZW1vdmVfaW5vZGVfaHVnZXBhZ2VzKGlub2RlLCAwLCBMTE9OR19NQVgpO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9NjA3PXN0YXRpYyB2b2lkIGh1Z2V0bGJfdm10cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0KVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjIzLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjYyNDpzdGF0aWMgdm9pZCBodWdldGxiZnNfemVyb19wYXJ0aWFsX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy02MjUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy02NDYtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjQ3OnN0YXRpYyBsb25nIGh1Z2V0bGJmc19wdW5jaF9ob2xlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjQ4LXtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo2NDk6XFx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICppbmZvID0gSFVHRVRMQkZTX0koaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY1MC1cXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVxcdTAwM2VpX21hcHBpbmc7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy02NzItXFx0aWYgKG9mZnNldCBcXHUwMDNjIGhvbGVfc3RhcnQpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjczOlxcdFxcdGh1Z2V0bGJmc196ZXJvX3BhcnRpYWxfcGFnZShoLCBtYXBwaW5nLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY3NC1cXHRcXHRcXHRcXHRvZmZzZXQsIG1pbihvZmZzZXQgKyBsZW4sIGhvbGVfc3RhcnQpKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY4NS1cXHRpZiAoKG9mZnNldCArIGxlbikgXFx1MDAzZSBob2xlX2VuZCBcXHUwMDI2XFx1MDAyNiAob2Zmc2V0ICsgbGVuKSBcXHUwMDNlIGhvbGVfc3RhcnQpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Njg2OlxcdFxcdGh1Z2V0bGJmc196ZXJvX3BhcnRpYWxfcGFnZShoLCBtYXBwaW5nLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY4Ny1cXHRcXHRcXHRcXHRob2xlX2VuZCwgb2Zmc2V0ICsgbGVuKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY5OS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo3MDA6c3RhdGljIGxvbmcgaHVnZXRsYmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzAxLVxcdFxcdFxcdFxcdGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy03MDMtXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NzA0OlxcdHN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyAqaW5mbyA9IEhVR0VUTEJGU19JKGlub2RlKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy03MDUtXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cXHUwMDNlaV9tYXBwaW5nO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzE4LVxcdGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpIHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo3MTk6XFx0XFx0ZXJyb3IgPSBodWdldGxiZnNfcHVuY2hfaG9sZShpbm9kZSwgb2Zmc2V0LCBsZW4pO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTcyMC1cXHRcXHRnb3RvIG91dF9ub2xvY2s7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MjYtb3V0X25vbG9jazpcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4Mjc6XFx0dHJhY2VfaHVnZXRsYmZzX2ZhbGxvY2F0ZShpbm9kZSwgbW9kZSwgb2Zmc2V0LCBsZW4sIGVycm9yKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MjgtXFx0cmV0dXJuIGVycm9yO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODMwLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjgzMTpzdGF0aWMgaW50IGh1Z2V0bGJmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgzMi1cXHRcXHRcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODM3LVxcdHVuc2lnbmVkIGludCBpYV92YWxpZCA9IGF0dHItXFx1MDAzZWlhX3ZhbGlkO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjgzODpcXHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmluZm8gPSBIVUdFVExCRlNfSShpbm9kZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODM5LVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODQzLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjg0NDpcXHR0cmFjZV9odWdldGxiZnNfc2V0YXR0cihpbm9kZSwgZGVudHJ5LCBhdHRyKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy04NDUtXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy04NjMtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODY0OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjg2NTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eClcXG5mcy9odWdldGxiZnMvaW5vZGUuYy04NjYte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODc1LVxcdFxcdHNpbXBsZV9pbm9kZV9pbml0X3RzKGlub2RlKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4NzY6XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg3Ny1cXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2c2ltcGxlX2Rpcl9vcGVyYXRpb25zO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODkxLSAqL1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjg5MjpzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGh1Z2V0bGJmc19pX21tYXBfcndzZW1fa2V5O1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg5My1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4OTQ6c3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg5NS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkxMy1cXHRpZiAoaW5vZGUpIHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5MTQ6XFx0XFx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICppbmZvID0gSFVHRVRMQkZTX0koaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkxNS1cXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkxOC1cXHRcXHRsb2NrZGVwX3NldF9jbGFzcyhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlaV9tbWFwX3J3c2VtLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjkxOTpcXHRcXHRcXHRcXHRcXHUwMDI2aHVnZXRsYmZzX2lfbW1hcF9yd3NlbV9rZXkpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjkyMDpcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZodWdldGxiZnNfYW9wcztcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05MjEtXFx0XFx0c2ltcGxlX2lub2RlX2luaXRfdHMoaW5vZGUpO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTI4LVxcdFxcdGNhc2UgU19JRlJFRzpcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5Mjk6XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTMwOlxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkzMS1cXHRcXHRcXHRicmVhaztcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05MzItXFx0XFx0Y2FzZSBTX0lGRElSOlxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjkzMzpcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTM0LVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZzaW1wbGVfZGlyX29wZXJhdGlvbnM7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NDQtXFx0XFx0bG9ja2RlcF9hbm5vdGF0ZV9pbm9kZV9tdXRleF9rZXkoaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk0NTpcXHRcXHR0cmFjZV9odWdldGxiZnNfYWxsb2NfaW5vZGUoaW5vZGUsIGRpciwgbW9kZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTQ2LVxcdH0gZWxzZSB7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NTYtICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTU3OnN0YXRpYyBpbnQgaHVnZXRsYmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NTgtXFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk2MS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5NjI6XFx0aW5vZGUgPSBodWdldGxiZnNfZ2V0X2lub2RlKGRpci1cXHUwMDNlaV9zYiwgaWRtYXAsIGRpciwgbW9kZSwgZGV2KTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NjMtXFx0aWYgKCFpbm9kZSlcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk2OS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5NzA6c3RhdGljIHN0cnVjdCBkZW50cnkgKmh1Z2V0bGJmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTcxLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk3Mi17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTczOlxcdGludCByZXR2YWwgPSBodWdldGxiZnNfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk3NC1cXHRcXHRcXHRcXHQgICAgIG1vZGUsIDApO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTc5LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk4MDpzdGF0aWMgaW50IGh1Z2V0bGJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTgxLVxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTgzLXtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5ODQ6XFx0cmV0dXJuIGh1Z2V0bGJmc19ta25vZChpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHLCAwKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODUtfVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk4Ni1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5ODc6c3RhdGljIGludCBodWdldGxiZnNfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy05OTItXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTkzOlxcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShkaXItXFx1MDAzZWlfc2IsIGlkbWFwLCBkaXIsIG1vZGUgfCBTX0lGUkVHLCAwKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05OTQtXFx0aWYgKCFpbm9kZSlcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMDAtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTAwMTpzdGF0aWMgaW50IGh1Z2V0bGJmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMDItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAwOC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDA5OlxcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShkaXItXFx1MDAzZWlfc2IsIGlkbWFwLCBkaXIsIG1vZGUsIDApO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMTAtXFx0aWYgKGlub2RlKSB7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDIzLSNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTAyNDpzdGF0aWMgaW50IGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMjUtXFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpkc3QsIHN0cnVjdCBmb2xpbyAqc3JjLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA0NC0jZWxzZVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNDU6I2RlZmluZSBodWdldGxiZnNfbWlncmF0ZV9mb2xpbyBOVUxMXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA0Ni0jZW5kaWZcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDQ3LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNDg6c3RhdGljIGludCBodWdldGxiZnNfZXJyb3JfcmVtb3ZlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNDktXFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNTYtICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTA1NzpzdGF0aWMgaW50IGh1Z2V0bGJmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNTgte1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNTk6XFx0c3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8gPSBIVUdFVExCRlNfU0Iocm9vdC1cXHUwMDNlZF9zYik7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA2MC1cXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzYmluZm8tXFx1MDAzZXNwb29sO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA5My1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDk0OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA5NS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTA5NjpcXHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbyA9IEhVR0VUTEJGU19TQihkZW50cnktXFx1MDAzZWRfc2IpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwOTctXFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShkX2lub2RlKGRlbnRyeSkpO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTEyOC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTI5OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTMwLXtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTMxOlxcdHN0cnVjdCBodWdldGxiZnNfc2JfaW5mbyAqc2JpID0gSFVHRVRMQkZTX1NCKHNiKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTMyLVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE0MS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTQyOnN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJmc19kZWNfZnJlZV9pbm9kZXMoc3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8pXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE0My17XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTU2LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNTc6c3RhdGljIHZvaWQgaHVnZXRsYmZzX2luY19mcmVlX2lub2RlcyhzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbylcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTU4LXtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNjYtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE2NzpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmh1Z2V0bGJmc19pbm9kZV9jYWNoZXA7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE2OC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTY5OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNzAte1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzE6XFx0c3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8gPSBIVUdFVExCRlNfU0Ioc2IpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzI6XFx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICpwO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNzMtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE3NDpcXHRpZiAodW5saWtlbHkoIWh1Z2V0bGJmc19kZWNfZnJlZV9pbm9kZXMoc2JpbmZvKSkpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3NS1cXHRcXHRyZXR1cm4gTlVMTDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTc2OlxcdHAgPSBhbGxvY19pbm9kZV9zYihzYiwgaHVnZXRsYmZzX2lub2RlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3Ny1cXHRpZiAodW5saWtlbHkoIXApKSB7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE3ODpcXHRcXHRodWdldGxiZnNfaW5jX2ZyZWVfaW5vZGVzKHNiaW5mbyk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3OS1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExODMtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE4NDpzdGF0aWMgdm9pZCBodWdldGxiZnNfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExODUte1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExODY6XFx0dHJhY2VfaHVnZXRsYmZzX2ZyZWVfaW5vZGUoaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExODc6XFx0a21lbV9jYWNoZV9mcmVlKGh1Z2V0bGJmc19pbm9kZV9jYWNoZXAsIEhVR0VUTEJGU19JKGlub2RlKSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE4OC19XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE4OS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTkwOnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE5MS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE5MjpcXHRodWdldGxiZnNfaW5jX2ZyZWVfaW5vZGVzKEhVR0VUTEJGU19TQihpbm9kZS1cXHUwMDNlaV9zYikpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExOTMtfVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExOTQtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE5NTpzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBodWdldGxiZnNfYW9wcyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTk2OlxcdC53cml0ZV9iZWdpblxcdD0gaHVnZXRsYmZzX3dyaXRlX2JlZ2luLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExOTc6XFx0LndyaXRlX2VuZFxcdD0gaHVnZXRsYmZzX3dyaXRlX2VuZCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTk4LVxcdC5kaXJ0eV9mb2xpb1xcdD0gbm9vcF9kaXJ0eV9mb2xpbyxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTk5OlxcdC5taWdyYXRlX2ZvbGlvICA9IGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMDA6XFx0LmVycm9yX3JlbW92ZV9mb2xpb1xcdD0gaHVnZXRsYmZzX2Vycm9yX3JlbW92ZV9mb2xpbyxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjAxLX07XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMjA0PXN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIwNS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIwNjpcXHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmVpID0gZm9vO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMDctXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjEwLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMTE6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjEyOlxcdC5yZWFkX2l0ZXJcXHRcXHQ9IGh1Z2V0bGJmc19yZWFkX2l0ZXIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxMzpcXHQubW1hcFxcdFxcdFxcdD0gaHVnZXRsYmZzX2ZpbGVfbW1hcCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjE0LVxcdC5mc3luY1xcdFxcdFxcdD0gbm9vcF9mc3luYyxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMTYtXFx0Lmxsc2Vla1xcdFxcdFxcdD0gZGVmYXVsdF9sbHNlZWssXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxNzpcXHQuZmFsbG9jYXRlXFx0XFx0PSBodWdldGxiZnNfZmFsbG9jYXRlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMTgtXFx0LmZvcF9mbGFnc1xcdFxcdD0gRk9QX0hVR0VfUEFHRVMsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjIwLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMjE6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjIyOlxcdC5jcmVhdGVcXHRcXHQ9IGh1Z2V0bGJmc19jcmVhdGUsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIyMy1cXHQubG9va3VwXFx0XFx0PSBzaW1wbGVfbG9va3VwLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIyNS1cXHQudW5saW5rXFx0XFx0PSBzaW1wbGVfdW5saW5rLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMjY6XFx0LnN5bWxpbmtcXHQ9IGh1Z2V0bGJmc19zeW1saW5rLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMjc6XFx0Lm1rZGlyXFx0XFx0PSBodWdldGxiZnNfbWtkaXIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIyOC1cXHQucm1kaXJcXHRcXHQ9IHNpbXBsZV9ybWRpcixcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjI5OlxcdC5ta25vZFxcdFxcdD0gaHVnZXRsYmZzX21rbm9kLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMzAtXFx0LnJlbmFtZVxcdFxcdD0gc2ltcGxlX3JlbmFtZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjMxOlxcdC5zZXRhdHRyXFx0PSBodWdldGxiZnNfc2V0YXR0cixcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjMyOlxcdC50bXBmaWxlXFx0PSBodWdldGxiZnNfdG1wZmlsZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjMzLX07XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzNC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjM1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjM2OlxcdC5zZXRhdHRyXFx0PSBodWdldGxiZnNfc2V0YXR0cixcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjM3LX07XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzOC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjM5OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBodWdldGxiZnNfb3BzID0ge1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyNDA6XFx0LmFsbG9jX2lub2RlICAgID0gaHVnZXRsYmZzX2FsbG9jX2lub2RlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyNDE6XFx0LmZyZWVfaW5vZGUgICAgID0gaHVnZXRsYmZzX2ZyZWVfaW5vZGUsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0MjpcXHQuZGVzdHJveV9pbm9kZSAgPSBodWdldGxiZnNfZGVzdHJveV9pbm9kZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQzOlxcdC5ldmljdF9pbm9kZVxcdD0gaHVnZXRsYmZzX2V2aWN0X2lub2RlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyNDQ6XFx0LnN0YXRmc1xcdFxcdD0gaHVnZXRsYmZzX3N0YXRmcyxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQ1OlxcdC5wdXRfc3VwZXJcXHQ9IGh1Z2V0bGJmc19wdXRfc3VwZXIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0NjpcXHQuc2hvd19vcHRpb25zXFx0PSBodWdldGxiZnNfc2hvd19vcHRpb25zLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyNDctfTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTEyNTQ9c3RhdGljIGxvbmdcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjU1Omh1Z2V0bGJmc19zaXplX3RvX2hwYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZV9vcHQsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI1NjpcXHRcXHRcXHQgZW51bSBodWdldGxiZnNfc2l6ZV90eXBlIHZhbF90eXBlKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyNTcte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI3My0gKi9cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjc0OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI3NS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI3NjpcXHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eCA9IGZjLVxcdTAwM2Vmc19wcml2YXRlO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyNzctXFx0c3RydWN0IGZzX3BhcnNlX3Jlc3VsdCByZXN1bHQ7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzQ4LSAqL1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzNDk6c3RhdGljIGludCBodWdldGxiZnNfdmFsaWRhdGUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNTAte1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzNTE6XFx0c3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0ICpjdHggPSBmYy1cXHUwMDNlZnNfcHJpdmF0ZTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzUyLVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTM1Ni1cXHQgKi9cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzU3OlxcdGN0eC1cXHUwMDNlbWF4X2hwYWdlcyA9IGh1Z2V0bGJmc19zaXplX3RvX2hwYWdlcyhjdHgtXFx1MDAzZWhzdGF0ZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzU4LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGN0eC1cXHUwMDNlbWF4X3NpemVfb3B0LFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNTktXFx0XFx0XFx0XFx0XFx0XFx0ICAgY3R4LVxcdTAwM2VtYXhfdmFsX3R5cGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzNjA6XFx0Y3R4LVxcdTAwM2VtaW5faHBhZ2VzID0gaHVnZXRsYmZzX3NpemVfdG9faHBhZ2VzKGN0eC1cXHUwMDNlaHN0YXRlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNjEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgY3R4LVxcdTAwM2VtaW5fc2l6ZV9vcHQsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMzc2PXN0YXRpYyBpbnRcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzc3Omh1Z2V0bGJmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzc4LXtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzc5OlxcdHN0cnVjdCBodWdldGxiZnNfZnNfY29udGV4dCAqY3R4ID0gZmMtXFx1MDAzZWZzX3ByaXZhdGU7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM4MDpcXHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbztcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzgxLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzODI6XFx0c2JpbmZvID0ga21hbGxvY19vYmooc3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzgzLVxcdGlmICghc2JpbmZvKVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQxMC1cXHRzYi1cXHUwMDNlc19tYWdpYyA9IEhVR0VUTEJGU19NQUdJQztcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDExOlxcdHNiLVxcdTAwM2VzX29wID0gXFx1MDAyNmh1Z2V0bGJmc19vcHM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQxMi1cXHRzYi1cXHUwMDNlc19kX2ZsYWdzID0gRENBQ0hFX0RPTlRDQUNIRTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTUtXFx0LypcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDE2OlxcdCAqIER1ZSB0byB0aGUgc3BlY2lhbCBhbmQgbGltaXRlZCBmdW5jdGlvbmFsaXR5IG9mIGh1Z2V0bGJmcywgaXQgZG9lc1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTctXFx0ICogbm90IHdvcmsgd2VsbCBhcyBhIHN0YWNraW5nIGZpbGVzeXN0ZW0uXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDE5LVxcdHNiLVxcdTAwM2VzX3N0YWNrX2RlcHRoID0gRklMRVNZU1RFTV9NQVhfU1RBQ0tfREVQVEg7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQyMDpcXHRzYi1cXHUwMDNlc19yb290ID0gZF9tYWtlX3Jvb3QoaHVnZXRsYmZzX2dldF9yb290KHNiLCBjdHgpKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDIxLVxcdGlmICghc2ItXFx1MDAzZXNfcm9vdClcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MjktXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQzMDpzdGF0aWMgaW50IGh1Z2V0bGJmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzMS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQzMjpcXHRpbnQgZXJyID0gaHVnZXRsYmZzX3ZhbGlkYXRlKGZjKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDMzLVxcdGlmIChlcnIpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNC1cXHRcXHRyZXR1cm4gZXJyO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0MzU6XFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBodWdldGxiZnNfZmlsbF9zdXBlcik7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNi19XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNy1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDM4OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19mc19jb250ZXh0X2ZyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0Mzkte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ0Mi1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGh1Z2V0bGJmc19mc19jb250ZXh0X29wcyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ0OlxcdC5mcmVlXFx0XFx0PSBodWdldGxiZnNfZnNfY29udGV4dF9mcmVlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0NDU6XFx0LnBhcnNlX3BhcmFtXFx0PSBodWdldGxiZnNfcGFyc2VfcGFyYW0sXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ0NjpcXHQuZ2V0X3RyZWVcXHQ9IGh1Z2V0bGJmc19nZXRfdHJlZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDQ3LX07XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ0OC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ5OnN0YXRpYyBpbnQgaHVnZXRsYmZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ1MC17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ1MTpcXHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDUyLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0NTM6XFx0Y3R4ID0ga3phbGxvY19vYmooc3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0KTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDU0LVxcdGlmICghY3R4KVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ2Ni1cXHRmYy1cXHUwMDNlZnNfcHJpdmF0ZSA9IGN0eDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDY3OlxcdGZjLVxcdTAwM2VvcHNcXHQ9IFxcdTAwMjZodWdldGxiZnNfZnNfY29udGV4dF9vcHM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ2OC1cXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzAtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3MTpzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgaHVnZXRsYmZzX2ZzX3R5cGUgPSB7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3MjpcXHQubmFtZVxcdFxcdFxcdD0gXFxcImh1Z2V0bGJmc1xcXCIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3MzpcXHQuaW5pdF9mc19jb250ZXh0XFx0PSBodWdldGxiZnNfaW5pdF9mc19jb250ZXh0LFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzQtXFx0LnBhcmFtZXRlcnNcXHRcXHQ9IGh1Z2V0bGJfZnNfcGFyYW1ldGVycyxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzgtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3OTpzdGF0aWMgc3RydWN0IHZmc21vdW50ICpodWdldGxiZnNfdmZzbW91bnRbSFVHRV9NQVhfSFNUQVRFXTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDgwLVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTUwMT1zdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTUxMy1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTE0OlxcdG1udCA9IGh1Z2V0bGJmc192ZnNtb3VudFtoc3RhdGVfaWR4XTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTE1LVxcdGlmICghbW50KVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTUyOS1cXHRmaWxlID0gRVJSX1BUUigtRU5PU1BDKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTMwOlxcdC8qIGh1Z2V0bGJmc192ZnNtb3VudFtdIG1vdW50cyBkbyBub3QgdXNlIGlkbWFwcGVkIG1vdW50cy4gICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTUzMTpcXHRpbm9kZSA9IGh1Z2V0bGJmc19nZXRfaW5vZGUobW50LVxcdTAwM2VtbnRfc2IsIFxcdTAwMjZub3BfbW50X2lkbWFwLCBOVUxMLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MzItXFx0XFx0XFx0XFx0ICAgIFNfSUZSRUcgfCBTX0lSV1hVR08sIDApO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU0Ni1cXHRcXHRmaWxlID0gYWxsb2NfZmlsZV9wc2V1ZG8oaW5vZGUsIG1udCwgbmFtZSwgT19SRFdSLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NDc6XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NDgtXFx0aWYgKCFJU19FUlIoZmlsZSkpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTU1LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NTY6c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqX19pbml0IG1vdW50X29uZV9odWdldGxiZnMoc3RydWN0IGhzdGF0ZSAqaClcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTU3LXtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjAtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU2MTpcXHRmYyA9IGZzX2NvbnRleHRfZm9yX21vdW50KFxcdTAwMjZodWdldGxiZnNfZnNfdHlwZSwgU0JfS0VSTk1PVU5UKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTYyLVxcdGlmIChJU19FUlIoZmMpKSB7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTY0LVxcdH0gZWxzZSB7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU2NTpcXHRcXHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eCA9IGZjLVxcdTAwM2Vmc19wcml2YXRlO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjYtXFx0XFx0Y3R4LVxcdTAwM2Voc3RhdGUgPSBoO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU3MC1cXHRpZiAoSVNfRVJSKG1udCkpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU3MTpcXHRcXHRwcl9lcnIoXFxcIkNhbm5vdCBtb3VudCBpbnRlcm5hbCBodWdldGxiZnMgZm9yIHBhZ2Ugc2l6ZSAlbHVLXFxcIixcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTcyLVxcdFxcdCAgICAgICBodWdlX3BhZ2Vfc2l6ZShoKSAvIFNaXzFLKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NzUtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU3NjpzdGF0aWMgaW50IF9faW5pdCBpbml0X2h1Z2V0bGJmc19mcyh2b2lkKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1Nzcte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU4OC1cXHRlcnJvciA9IC1FTk9NRU07XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU4OTpcXHRodWdldGxiZnNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoXFxcImh1Z2V0bGJmc19pbm9kZV9jYWNoZVxcXCIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU5MDpcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvKSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTkxLVxcdFxcdFxcdFxcdFxcdDAsIFNMQUJfQUNDT1VOVCwgaW5pdF9vbmNlKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTkyOlxcdGlmIChodWdldGxiZnNfaW5vZGVfY2FjaGVwID09IE5VTEwpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU5My1cXHRcXHRnb3RvIG91dDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTk0LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1OTU6XFx0ZXJyb3IgPSByZWdpc3Rlcl9maWxlc3lzdGVtKFxcdTAwMjZodWdldGxiZnNfZnNfdHlwZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU5Ni1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTk5LVxcdC8qIGRlZmF1bHQgaHN0YXRlIG1vdW50IGlzIHJlcXVpcmVkICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYwMDpcXHRtbnQgPSBtb3VudF9vbmVfaHVnZXRsYmZzKFxcdTAwMjZkZWZhdWx0X2hzdGF0ZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYwMS1cXHRpZiAoSVNfRVJSKG1udCkpIHtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MDQtXFx0fVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MDU6XFx0aHVnZXRsYmZzX3Zmc21vdW50W2RlZmF1bHRfaHN0YXRlX2lkeF0gPSBtbnQ7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYwNi1cXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MTQtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYxNTpcXHRcXHRtbnQgPSBtb3VudF9vbmVfaHVnZXRsYmZzKGgpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MTYtXFx0XFx0aWYgKElTX0VSUihtbnQpKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MTc6XFx0XFx0XFx0aHVnZXRsYmZzX3Zmc21vdW50W2ldID0gTlVMTDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjE4LVxcdFxcdGVsc2VcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNjE5OlxcdFxcdFxcdGh1Z2V0bGJmc192ZnNtb3VudFtpXSA9IG1udDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjIwLVxcdFxcdGkrKztcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MjUtIG91dF91bnJlZzpcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNjI2OlxcdCh2b2lkKXVucmVnaXN0ZXJfZmlsZXN5c3RlbShcXHUwMDI2aHVnZXRsYmZzX2ZzX3R5cGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MjctIG91dF9mcmVlOlxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2Mjg6XFx0a21lbV9jYWNoZV9kZXN0cm95KGh1Z2V0bGJmc19pbm9kZV9jYWNoZXApO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MjktIG91dDpcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MzEtfVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MzI6ZnNfaW5pdGNhbGwoaW5pdF9odWdldGxiZnNfZnMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAxOjI3LjA5NzQ2MDk5NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNzY1MDE2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBIdWdlIFBhZ2VzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGBIVUdFVExCRlNgIGFuZCBgSFVHRVRMQl9QQUdFYC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGV5J3JlIHJlbGF0ZWQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IHRoZSBsb2dpYyBzdHJhaWdodCBpbiBteSBoZWFkLiBUaW1lIHRvIG9wZW4gdXAgdGhlIGBmcy9LY29uZmlnYCBmaWxlIGluIHRoZSBrZXJuZWwgc291cmNlLiBJIGtub3cgdGhhdCdzIHRoZSBjYW5vbmljYWwgcGxhY2UgZm9yIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCB0aGVpciBkZXNjcmlwdGlvbnMsIGFuZCwgY3JpdGljYWxseSwgdGhlaXIgcmVsYXRpb25zaGlwcy4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYXJvdW5kIGxpbmUgMjUwIOKAkyB0aGF0IGZlZWxzIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIG9wdGlvbnMgaW4gdGhlIHBhc3QuIEhvcGVmdWxseSwgdGhhdCBzZWN0aW9uIHdpbGwgY29udGFpbiB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agc3RhdGVtZW50cyBhbmQgYW55IGBkZXBlbmRzIG9uYCBjbGF1c2VzIHRoYXQgc3BlbGwgb3V0IGV4YWN0bHkgaG93IHRoZXNlIHR3byBvcHRpb25zIGFyZSBsaW5rZWQuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIGBkZXBlbmRzIG9uYCBkaXJlY3RpdmVzIHNwZWNpZnlpbmcgd2hpY2ggb3RoZXIgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoZXNlIHRvIGV2ZW4gc2hvdyB1cCBpbiB0aGUgbWVudWNvbmZpZywgb3Igd2hpY2ggZmVhdHVyZXMgdGhleSBjYW4gZW5hYmxlLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIG9uZSBpcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGUgb3RoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6MjkuNDczOTY0NjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI0NjpcXHRcXG4gMjQ3OlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbiAyNDg6XFx0XFx0ZGVmX2Jvb2wgblxcbiAyNDk6XFx0XFxuIDI1MDpcXHRtZW51Y29uZmlnIEhVR0VUTEJGU1xcbiAyNTE6XFx0XFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAyNTI6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbiAyNTM6XFx0XFx0c2VsZWN0IE1FTUZEX0NSRUFURVxcbiAyNTQ6XFx0XFx0c2VsZWN0IFBBREFUQSBpZiBTTVBcXG4gMjU1OlxcdFxcdGhlbHBcXG4gMjU2OlxcdFxcdCAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvblxcbiAyNTc6XFx0XFx0ICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkXFxuIDI1ODpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMjU5OlxcdFxcbiAyNjA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNjE6XFx0XFxuIDI2MjpcXHRpZiBIVUdFVExCRlNcXG4gMjYzOlxcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuIDI2NDpcXHRcXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbiAyNjU6XFx0XFx0ZGVmYXVsdCBuXFxuIDI2NjpcXHRcXHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuIDI2NzpcXHRcXHRoZWxwXFxuIDI2ODpcXHRcXHQgIFRoZSBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9mZi4gU2F5IFkgaGVyZSB0b1xcbiAyNjk6XFx0XFx0ICBlbmFibGUgSFZPIGJ5IGRlZmF1bHQuIEl0IGNhbiBiZSBkaXNhYmxlZCB2aWEgaHVnZXRsYl9mcmVlX3ZtZW1tYXA9b2ZmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAxOjI5LjQ3NDAyNzgxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk3MjkzNzg5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIEhVR0VUTEJfUEFHRSoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgdGFzayBhdCBoYW5kLiBJIHNob3VsZCBpbW1lZGlhdGVseSBjcm9zcy1yZWZlcmVuY2UgdGhlIGBtbS9LY29uZmlnYCBmaWxlIGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgZm9yIHNldHRpbmdzIHJlbGF0ZWQgdG8gSHVnZVRMQiBwYWdlcy4gVGhhdCdzIHVzdWFsbHkgdGhlIGRlZmluaW5nIGZlYXR1cmUuIFRoaXMgd2lsbCBoZWxwIHRvIGNvbmZpcm0gd2hhdCwgaWYgYW55LCBmZWF0dXJlcyB3ZXJlIGVuYWJsZWQsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyB0aGVyZSBtYXkgaGF2ZSBiZWVuIG9uIHRoaXMgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYEhVR0VUTEJfUEFHRWAuIExldCdzIGNvbmZpcm0gaG93IHRoZSBzcGVjaWZpYyBvcHRpb25zIGZvciB0aGF0IGFyZSBzZXQgdXAuIEkgY2FuJ3QgYXNzdW1lIGFueXRoaW5nLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU0MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6MzEuNDQ2OTcxODczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDAwOTQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY5ND1jb25maWcgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcXG4tLVxcbm1tL0tjb25maWctNjk2LVxcbm1tL0tjb25maWc6Njk3OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbm1tL0tjb25maWctNjk4LVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6MzEuNTAwOTg3NTA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODY3MjU3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkZpbmRpbmcgdGhlIEhVR0VUTEJfUEFHRSBEZWZpbml0aW9uIGluIEtjb25maWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgSFVHRVRMQl9QQUdFYCB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgbGlrZWx5IHRpZXMgaW50byBodWdlIHBhZ2Ugc3VwcG9ydCwgYW5kIGZpZ3VyaW5nIG91dCBpdHMgZXhhY3QgZGVmaW5pdGlvbiB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggaXQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlIHRyZWUncyBLY29uZmlnIGZpbGVzLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwYCBvciBhIHNpbWlsYXIgc2VhcmNoIHRvb2wgdG8gcXVpY2tseSBsb2NhdGUgaXQuIEknbSBhc3N1bWluZyBpdCdzIHBhcnQgb2YgdGhlIG1lbW9yeSBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGJ1dCBiZXN0IHRvIHN0YXJ0IHdpdGggYSBicm9hZCBzZWFyY2ggdG8gZW5zdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy4gTGV0J3Mgc3RhcnQgd2l0aCBhIGdlbmVyYWwgc2VhcmNoIGFuZCB0aGVuIG5hcnJvdyB0aGUgc2NvcGUgaWYgbmVjZXNzYXJ5LiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBpbmNsdXNpb24gYW5kIGFueSBhc3NvY2lhdGVkIHNldHRpbmdzIHJlbGF0ZWQgdG8gdGhlIHVzZSBvZiBodWdlIHBhZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg0MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAxOjMzLjc4NzcxNjE1NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExODEwODc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFJFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6MzUuOTA1ODI5MTAyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NDYwODM3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgSFVHRVRMQkZTIG9uIEh1Z2UgUGFnZXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBIVUdFVExCRlNgIGVuYWJsaW5nIGBIVUdFVExCX1BBR0VgLiBSaWdodCwgdGhhdCdzIHRoZSBjb3JlIHJlbGF0aW9uc2hpcCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQuIExldCdzIHNlZSBob3cgdGhpcyBwbGF5cyBvdXQgaW4gdGhlIGNvZGUuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBieSB0aGlzIGRpZmYuIFNwZWNpZmljYWxseSwgSSdtIG5vdGluZzpcblxuMS4gIGBodWdldGxiZnNfc3RhdGZzYCBpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLiBUaGlzIHN1Z2dlc3RzIGNoYW5nZXMgdG8gaG93IHRoZSBmaWxlIHN5c3RlbSdzIHN0YXR1cyBpcyByZXBvcnRlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFdlIGNvdWxkIHNlZSBkaWZmZXJlbnQgcmVwb3J0aW5nIHJlbGF0aW5nIHRvIGh1Z2UgcGFnZSBhbGxvY2F0aW9ucy5cbjIuICBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgIGluIGBtbS9odWdldGxiLmNgLiBUaGF0J3MgYSBrZXkgb25lLiBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgaXQncyBjYWxsZWQgYnkgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBhbmQgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AsIHN1Z2dlc3RpbmcgYSByZWxhdGlvbnNoaXAgd2l0aCBwYWdlIGFsbG9jYXRpb24gYW5kIHJlc2VydmF0aW9uLlxuMy4gIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AgYWxzbyBpbiBgbW0vaHVnZXRsYi5jYC4gQW5vdGhlciBzdGF0aWMgZnVuY3Rpb24sIGl0J3MgY2FsbGVkIGJ5IHRoZSBjb3VudGVycGFydHMgb2YgdGhlIFwiZ2V0XCIgZnVuY3Rpb25zLCBwbHVzIGByZW1vdmVfaW5vZGVfaHVnZXBhZ2VzYC4gSXQncyByZWxhdGVkIHRvIHJlbGVhc2luZyBwYWdlcy5cbjQuICBgc3VicG9vbF9pc19mcmVlYCBhbHNvIGluIGBtbS9odWdldGxiLmNgLiBUaGlzIGlzIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sYCBhbmQgYGh1Z2VwYWdlX3B1dF9zdWJwb29sYCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcHJvY2Vzcy5cbjUuICBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgaW4gYG1tL2h1Z2V0bGIuY2AuIFRoaXMgaXMgb2J2aW91c2x5IGEga2V5IGZ1bmN0aW9uIGZvciBmb2xpbyBhbGxvY2F0aW9uLCBzbyBpdCdzIGVzc2VudGlhbCB0byBsb29rIGF0LlxuNi4gIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGluIGBtbS9odWdldGxiLmNgLiBQYWdlIHJlc2VydmF0aW9uIGlzIGFsc28gYW4gaW1wb3J0YW50IHBhcnQgb2YgdGhlIGZvbGlvIHByb2Nlc3MuXG5cbk5vdywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIGNhbGxlcnMgb2YgdGhvc2UgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYCBhbmQgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCBmdW5jdGlvbnMsIGp1c3QgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIGhvdyB0aGVzZSBjaGFuZ2VzIGFyZSBpbnRlZ3JhdGVkIGFuZCBlbnN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIHRoZSBvdmVyYWxsIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTM2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAxOjQxLjM1MTkxNDg3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MzY2MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXBhZ2Vfc3VicG9vbF8uKl9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTE3OT12b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xOTItLyoqXFxubW0vaHVnZXRsYi5jOjE5MzogKiBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyAtIEdldCBwYWdlcyBmcm9tIGEgc3VicG9vbFxcbm1tL2h1Z2V0bGIuYy0xOTQtICogQHNwb29sOiBwb2ludGVyIHRvIHN1YnBvb2wgc3RydWN0dXJlIChtYXkgYmUgTlVMTClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMDQtICovXFxubW0vaHVnZXRsYi5jOjIwNTpzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxubW0vaHVnZXRsYi5jLTIwNi1cXHRcXHRcXHRcXHQgICAgICBsb25nIGRlbHRhKVxcbi0tXFxubW0vaHVnZXRsYi5jLTI0My0vKipcXG5tbS9odWdldGxiLmM6MjQ0OiAqIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzIC0gUmVsZWFzZSBwYWdlcyBiYWNrIHRvIGEgc3VicG9vbFxcbm1tL2h1Z2V0bGIuYy0yNDUtICogQHNwb29sOiBwb2ludGVyIHRvIHN1YnBvb2wgc3RydWN0dXJlIChtYXkgYmUgTlVMTClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTYtICovXFxubW0vaHVnZXRsYi5jOjI1NzpzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxubW0vaHVnZXRsYi5jLTI1OC1cXHRcXHRcXHRcXHQgICAgICAgbG9uZyBkZWx0YSlcXG4tLVxcbm1tL2h1Z2V0bGIuYz05NzU9dm9pZCBodWdldGxiX2ZpeF9yZXNlcnZlX2NvdW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxubW0vaHVnZXRsYi5jLTk4MC1cXG5tbS9odWdldGxiLmM6OTgxOlxcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XFxubW0vaHVnZXRsYi5jLTk4Mi1cXHRpZiAocnN2X2FkanVzdCBcXHUwMDNlIDApIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNjg2PXZvaWQgZnJlZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtMTcxMS1cXHQgKiB3b3VsZCBoYXZlIGJlZW4gYSBwYWdlIHJlc2VydmVkIGluIHRoZSBzdWJwb29sIGJlZm9yZSBhbGxvY2F0aW9uXFxubW0vaHVnZXRsYi5jOjE3MTI6XFx0ICogdmlhIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKCkuICBTaW5jZSB3ZSBhcmUgJ3Jlc3RvcmluZycgdGhlXFxubW0vaHVnZXRsYi5jOjE3MTM6XFx0ICogcmVzZXJ2YXRpb24sIGRvIG5vdCBjYWxsIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKCkgYXMgdGhpcyB3aWxsXFxubW0vaHVnZXRsYi5jLTE3MTQtXFx0ICogcmVtb3ZlIHRoZSByZXNlcnZlZCBwYWdlIGZyb20gdGhlIHN1YnBvb2wuXFxuLS1cXG5tbS9odWdldGxiLmMtMTcyMi1cXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6MTcyMzpcXHRcXHRpZiAoaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpID09IDApXFxubW0vaHVnZXRsYi5jLTE3MjQtXFx0XFx0XFx0cmVzdG9yZV9yZXNlcnZlID0gdHJ1ZTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yOTU0PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yOTk4LVxcdGlmIChtYXBfY2hnKSB7XFxubW0vaHVnZXRsYi5jOjI5OTk6XFx0XFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xcbm1tL2h1Z2V0bGIuYy0zMDAwLVxcdFxcdGlmIChnYmxfcmVzdl9nZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5tbS9odWdldGxiLmMtMzA2NC1cXG5tbS9odWdldGxiLmM6MzA2NTpcXHRcXHRcXHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xcbm1tL2h1Z2V0bGIuYy0zMDY2LVxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xcbi0tXFxubW0vaHVnZXRsYi5jLTMwNzctXFx0aWYgKG1hcF9jaGcpIHtcXG5tbS9odWdldGxiLmM6MzA3ODpcXHRcXHRsb25nIGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcXG5tbS9odWdldGxiLmMtMzA3OS1cXG4tLVxcbm1tL2h1Z2V0bGIuYz00NzIxPXN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1fb3BfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdldGxiLmMtNDc0NC1cXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6NDc0NTpcXHRcXHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCByZXNlcnZlKTtcXG5tbS9odWdldGxiLmMtNDc0Ni1cXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XFxuLS1cXG5tbS9odWdldGxiLmM9NjY3MT1sb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY3NTgtXFx0ICovXFxubW0vaHVnZXRsYi5jOjY3NTk6XFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7XFxubW0vaHVnZXRsYi5jLTY3NjAtXFx0aWYgKGdibF9yZXN2X2dldCBcXHUwMDNjIDApIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy02ODA4LVxcbm1tL2h1Z2V0bGIuYzo2ODA5OlxcdFxcdFxcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCxcXG5tbS9odWdldGxiLmMtNjgxMC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjaGcgLSBhZGQpO1xcbi0tXFxubW0vaHVnZXRsYi5jLTY4MjktXFx0ICovXFxubW0vaHVnZXRsYi5jOjY4MzA6XFx0Z2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIGNoZyk7XFxubW0vaHVnZXRsYi5jLTY4MzEtXFx0LypcXG4tLVxcbm1tL2h1Z2V0bGIuYz02ODU4PWxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXFxuLS1cXG5tbS9odWdldGxiLmMtNjg5Mi1cXHQgKi9cXG5tbS9odWdldGxiLmM6Njg5MzpcXHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAoY2hnIC0gZnJlZWQpKTtcXG5tbS9odWdldGxiLmMtNjg5NC1cXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAxOjQxLjM5Nzg1NTI1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTI0NDE0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIHNvbWVvbmUga25vd2xlZGdlYWJsZSBpbiB0aGlzIGFyZWE6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ2FsbGVycyBpbiBmcy9odWdldGxiZnMqKlxuXG5SaWdodCwgbGV0J3Mgbm90IGxpbWl0IG91ciBzZWFyY2ggdG8ganVzdCB0aGUgb2J2aW91cyBzdXNwZWN0cy4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIGtub3cgd2hhdCBJJ20gbG9va2luZyBmb3IsIGFuZCBJIGhhdmUgYSBnb29kIGlkZWEgb2Ygd2hlcmUgdG8gc3RhcnQsIGJ1dCBleHBlcmllbmNlIHRlbGxzIG1lIHRoZXJlJ3MgYWxtb3N0IGFsd2F5cyBzb21ldGhpbmcgbHVya2luZyBpbiB0aGUgc2hhZG93cy4gSSd2ZSBnb3QgdG8gY2FzdCBhIHdpZGVyIG5ldC4gVGhlIGNvcmUgaXNzdWUgaXMgcHJvYmFibHkgbG9jYWxpemVkLCBidXQgSSdtIGdvaW5nIHRvIHRha2UgYSBtb21lbnQgYW5kIGFsc28gbWV0aWN1bG91c2x5IGNoZWNrIGBmcy9odWdldGxiZnNgLiBUaGVyZSAqY291bGQqIGJlIHJlbGF0ZWQgY2FsbHMsIG9yIGV2ZW4gc3VidGxlIGludGVyYWN0aW9ucywgbHVya2luZyB3aXRoaW4gdGhhdCBwYXJ0IG9mIHRoZSBmaWxlc3lzdGVtIGNvZGUgdGhhdCBJJ20gbWlzc2luZy4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIGlmIGFueXRoaW5nIGVsc2UgaXMgdXNpbmcgdGhvc2UgY29tcG9uZW50cyBvciBmdW5jdGlvbnMuIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMgdG8gYXZvaWQgYW55IG5hc3R5IHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzM5NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAxOjQzLjQ5MDI5OTM3MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1OTcyMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXBhZ2Vfc3VicG9vbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9odWdldGxiZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaHVnZXRsYmZzL2lub2RlLmM9MTA1Nz1zdGF0aWMgaW50IGh1Z2V0bGJmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA1OS1cXHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbyA9IEhVR0VUTEJGU19TQihyb290LVxcdTAwM2VkX3NiKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDYwOlxcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHNiaW5mby1cXHUwMDNlc3Bvb2w7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA2MS1cXHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBodWdlX3BhZ2Vfc2l6ZShzYmluZm8tXFx1MDAzZWhzdGF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAxOjQzLjUzNDkwMzUzNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTQzMDg3OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBIdWdldGxiZnMgU3VicG9vbCBBY2NvdW50aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHF1ZXN0aW9uOiBpcyB0aGlzIGNvZGUgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhlIGFuYWx5c2lzLCBhYnNvbHV0ZWx5LiBUaGUgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBRRU1VIGFuZCBzeXNjYWxscyBsaWtlIGBtbWFwYCwgYHN0YXRmc2AsIGFuZCBzcGVjaWZpYyBodWdldGxiZnMgbW91bnQgb3B0aW9ucyDigJMgbm8gbWFnaWMgcmVxdWlyZWQuIFRoaXMgaXMgYSBnb29kIHN0YXJ0LlxuXG5UaGUgcmVhbCBtZWF0IGlzIGluIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIGh1Z2V0bGIgc3VicG9vbCBhY2NvdW50aW5nIGxvZ2ljLiBXZSdyZSB0YWxraW5nIGFib3V0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zOiBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgLCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgLCBgc3VicG9vbF9pc19mcmVlYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYW5kIGBodWdldGxiZnNfc3RhdGZzYC4gU3BlY2lmaWNhbGx5LCB0aGUgYWNjb3VudGluZyBmb3IgYHVzZWRfaHBhZ2VzYCBpcyB1bmNvbmRpdGlvbmFsbHkgYWRqdXN0ZWQgbm93LCBhbmQgbWluaW11bSBzaXplIGNhbGN1bGF0aW9ucyBhcmUgY29tcGxldGVseSByZXN0cnVjdHVyZWQuIEVycm9yIHVud2luZCBjYWxjdWxhdGlvbnMgZm9yIHN1YnBvb2xzIGFuZCBnbG9iYWwgcmVzZXJ2YXRpb25zIHdpdGhpbiBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGhhdmUgYWxzbyBiZWVuIGFsdGVyZWQuIFRoaXMgaXMgYSBkaXJlY3QgdG91Y2ggdG8gbWVtb3J5IG1hbmFnZW1lbnQgaW52YXJpYW50cyBpbiBgbW0vaHVnZXRsYi5jYCBhbmQgYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYC4gVGhhdCdzIGEgdGV4dGJvb2sgZGVmaW5pdGlvbiBvZiBcIndvcnRoIGZ1enppbmcuXCJcblxuTm93LCBsZXQncyBiZSBzdHJhdGVnaWMgYWJvdXQgb3VyIGBGb2N1c1N5bWJvbHNgLiBXZSBkb24ndCB3YW50IHRvIHdhc3RlIGN5Y2xlcyBvbiB1YmlxdWl0b3VzIGFsbG9jYXRvcnMgb3IgZ2VuZXJhbCBsb2NrIHByaW1pdGl2ZXMuIEluc3RlYWQsIHdlIHdhbnQgZnVuY3Rpb25zIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZSBwYXRjaC4gU28sIHdlJ3JlIHRhcmdldGluZyB0aGVzZSBleGFjdCBzeW1ib2xzOlxuXG4qICAgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYFxuKiAgIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2BcbiogICBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYFxuKiAgIGBhbGxvY19odWdldGxiX2ZvbGlvYFxuKiAgIGBodWdldGxiZnNfc3RhdGZzYFxuKiAgIGBodWdlcGFnZV9wdXRfc3VicG9vbGAgLyBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAgKHdoZXJlIHN1YnBvb2xfaXNfZnJlZSBpcyBjYWxsZWQpXG4qICAgYGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzYFxuKiAgIGBodWdldGxiX2ZpeF9yZXNlcnZlX2NvdW50c2BcblxuQ29uZmlybWVkIHRoZSBleGFjdCBuYW1lcyBhZ2FpbnN0IGBtbS9odWdldGxiLmNgIGFuZCBgZnMvaHVnZXRsYmZzL2lub2RlLmNgOlxuXG4qICAgYGh1Z2V0bGJmc19zdGF0ZnNgXG4qICAgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYFxuKiAgIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2BcbiogICBgYWxsb2NfaHVnZXRsYl9mb2xpb2BcbiogICBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYFxuKiAgIGBodWdldGxiX3VucmVzZXJ2ZV9wYWdlc2BcbiogICBgaHVnZXBhZ2VfcHV0X3N1YnBvb2xgXG5cbkFuZCBmb3IgY29uZmlndXJhdGlvbnM/IFdlIG5lZWQgYEhVR0VUTEJGU2AuIFRoaXMgaW1wbGllcyBgSFVHRVRMQl9QQUdFYCBvbiBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcyAobGlrZSB4ODZcXF82NCksIHNvIHRoYXQncyBjb3ZlcmVkLiBTYW5pdHkgY2hlY2sgY29uZmlybXMgdGhlIGZvcm1hdCBmb3IgYEVuYWJsZUNvbmZpZ3NgIGlzIGp1c3QgdGhlIGZsYWdzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXg6IGBbXCJIVUdFVExCRlNcIl1gIChvciBwb3RlbnRpYWxseSBgW1wiSFVHRVRMQkZTXCIsIFwiSFVHRVRMQl9QQUdFXCJdYCkuXG5cblNvLCB0byBzdW1tYXJpemUgYW5kIGNvbmZpcm06XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlLlxuKiAgICoqUmVhc29uaW5nKio6IFN1YnBvb2wgYWNjb3VudGluZyBhbmQgZXJyb3IgaGFuZGxpbmcgY2hhbmdlcywgaW1wYWN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhY2Nlc3NpYmxlIHZpYSBgaHVnZXRsYmZzYCBhbmQgYG1tYXBgLlxuKiAgICoqRm9jdXNTeW1ib2xzKio6IFNwZWNpZmljIGZ1bmN0aW9ucyBsaXN0ZWQgYWJvdmUuXG4qICAgKipFbmFibGVDb25maWdzKio6IGBcIkhVR0VUTEJGU1wiYFxuKiAgIFRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4MDYsIk91dHB1dFRva2VucyI6MjgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAxOjUwLjQ3Nzk5NDA1MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3ODkxMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc1wiLFxuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNcIixcbiAgICBcImh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwiaHVnZXRsYmZzX3N0YXRmc1wiLFxuICAgIFwiaHVnZXRsYl91bnJlc2VydmVfcGFnZXNcIixcbiAgICBcImh1Z2VwYWdlX3B1dF9zdWJwb29sXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYmZzIHN1YnBvb2wgYWNjb3VudGluZyBsb2dpYyBhbmQgcmVzZXJ2YXRpb24gZXJyb3ItdW53aW5kIHBhdGhzIGluIG1tL2h1Z2V0bGIuYyBhbmQgZnMvaHVnZXRsYmZzL2lub2RlLmMuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyBob3cgYHVzZWRfaHBhZ2VzYCBhbmQgYHJzdl9ocGFnZXNgIGFyZSB1cGRhdGVkIGluIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcygpYCBhbmQgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKClgLCBhbHRlcnMgc3VicG9vbCByZWxlYXNlIGNoZWNrcyBpbiBgc3VicG9vbF9pc19mcmVlKClgLCBmaXhlcyBzdGF0ZnMgY2FsY3VsYXRpb24gZm9yIHVuYm91bmRlZCBzdWJwb29scyBpbiBgaHVnZXRsYmZzX3N0YXRmcygpYCwgYW5kIHJlZmFjdG9ycyBnbG9iYWwgbWVtb3J5IHJlc2VydmF0aW9uIHJvbGxiYWNrcyBpbiBgYWxsb2NfaHVnZXRsYl9mb2xpbygpYCBhbmQgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYC4gVGhpcyBsb2dpYyBpcyBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcyBmaWxlc3lzdGVtIG1vdW50cywgYWxsb2NhdGlvbnMsIGFuZCBtbWFwIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNcIixcbiAgICBcImh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzXCIsXG4gICAgXCJodWdldGxiX3Jlc2VydmVfcGFnZXNcIixcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIixcbiAgICBcImh1Z2V0bGJmc19zdGF0ZnNcIixcbiAgICBcImh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzXCIsXG4gICAgXCJodWdlcGFnZV9wdXRfc3VicG9vbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGJmcyBzdWJwb29sIGFjY291bnRpbmcgbG9naWMgYW5kIHJlc2VydmF0aW9uIGVycm9yLXVud2luZCBwYXRocyBpbiBtbS9odWdldGxiLmMgYW5kIGZzL2h1Z2V0bGJmcy9pbm9kZS5jLiBTcGVjaWZpY2FsbHksIGl0IGNoYW5nZXMgaG93IGB1c2VkX2hwYWdlc2AgYW5kIGByc3ZfaHBhZ2VzYCBhcmUgdXBkYXRlZCBpbiBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoKWAgYW5kIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcygpYCwgYWx0ZXJzIHN1YnBvb2wgcmVsZWFzZSBjaGVja3MgaW4gYHN1YnBvb2xfaXNfZnJlZSgpYCwgZml4ZXMgc3RhdGZzIGNhbGN1bGF0aW9uIGZvciB1bmJvdW5kZWQgc3VicG9vbHMgaW4gYGh1Z2V0bGJmc19zdGF0ZnMoKWAsIGFuZCByZWZhY3RvcnMgZ2xvYmFsIG1lbW9yeSByZXNlcnZhdGlvbiByb2xsYmFja3MgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW8oKWAgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAuIFRoaXMgbG9naWMgaXMgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBodWdldGxiZnMgZmlsZXN5c3RlbSBtb3VudHMsIGFsbG9jYXRpb25zLCBhbmQgbW1hcCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjowMTo1MC41NTU4OTE4OThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzMzNTE4MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6NTAuNTU2MzU3NjY4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjEzMzMwNDgxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdWJwb29sIGFjY291bnRpbmcgYW5kIHJlc2VydmF0aW9uIGxvZ2ljIGZvciBodWdldGxiZnMgKGluY2x1ZGluZyBodWdldGxiX3N1YnBvb2xfZ2V0X3BhZ2VzLCBodWdldGxiX3N1YnBvb2xfcHV0X3BhZ2VzLCBzdGF0ZnMgcmVwb3J0aW5nLCBhbmQgcm9sbGJhY2sgaGFuZGxpbmcgaW4gYWxsb2NfaHVnZXRsYl9mb2xpbyBhbmQgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKS5cXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKHN1Y2ggYXMgZ2JsX3Jlc3ZfZ2V0LCBnYmxfcmVzdl9wdXQsIGdibF9yZXN2X2FjY3RlZCwgbGltaXQsIGFuZCBmcmVlX3BhZ2VzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGFjcm9zcyBhbGwgY29udHJvbCBmbG93IHBhdGhzLiBObyBuZXcgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm8gcGFkZGluZyBieXRlcyBhcmUgZXhwb3NlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBpcyBwYXNzZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZy5cXG5cXG5Qb3RlbnRpYWwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBwYWdlIGFjY291bnRpbmcgaW5hY2N1cmFjaWVzLCBjb25jdXJyZW5jeS9zeW5jaHJvbml6YXRpb24gdW5kZXIgcmFjZSBjb25kaXRpb25zLCBvciBtZW1vcnkgZXhoYXVzdGlvbiwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2EzNzA1NGE3ZmQ5OTZiZTMwZTkwMzY1NTYxN2Y4NTZlZmM3NjZkMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMjI6MDE6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuaW5kZXggYTQ5MTE1ZGIxOGM3Ni4uZDI0NDU4M2ZkY2JjMyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcbkBAIC0zMTQsMjEgKzMxNCw4IEBAIGh1Z2UgcGFnZXMuICBJZiB0aGV5IGNhbiBub3QgYmUgcmVzZXJ2ZWQsIHRoZSBtb3VudCBmYWlscy5cbiBUaGUgcm91dGluZXMgaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgYXJlIGNhbGxlZCB3aGVuIHBhZ2VzIGFyZVxuIG9idGFpbmVkIGZyb20gb3IgcmVsZWFzZWQgYmFjayB0byBhIHN1YnBvb2wuICBUaGV5IHBlcmZvcm0gYWxsIHN1YnBvb2xcbiBhY2NvdW50aW5nLCBhbmQgdHJhY2sgYW55IHJlc2VydmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnBvb2wuXG4taHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzIGFyZSBwYXNzZWQgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIGJ5IHdoaWNoXG4tdG8gYWRqdXN0IHRoZSBzdWJwb29sICd1c2VkIHBhZ2UnIGNvdW50IChkb3duIGZvciBnZXQsIHVwIGZvciBwdXQpLiAgTm9ybWFsbHksXG4tdGhleSByZXR1cm4gdGhlIHNhbWUgdmFsdWUgdGhhdCB3YXMgcGFzc2VkIG9yIGFuIGVycm9yIGlmIG5vdCBlbm91Z2ggcGFnZXNcbi1leGlzdCBpbiB0aGUgc3VicG9vbC5cbi1cbi1Ib3dldmVyLCBpZiByZXNlcnZlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGEgcmV0dXJuIHZhbHVlIGxlc3Ncbi10aGFuIHRoZSBwYXNzZWQgdmFsdWUgbWF5IGJlIHJldHVybmVkLiAgVGhpcyByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHRoZVxuLW51bWJlciBvZiBhZGRpdGlvbmFsIGdsb2JhbCBwb29sIGFkanVzdG1lbnRzIHdoaWNoIG11c3QgYmUgbWFkZS4gIEZvciBleGFtcGxlLFxuLXN1cHBvc2UgYSBzdWJwb29sIGNvbnRhaW5zIDMgcmVzZXJ2ZWQgaHVnZSBwYWdlcyBhbmQgc29tZW9uZSBhc2tzIGZvciA1LlxuLVRoZSAzIHJlc2VydmVkIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbCBjYW4gYmUgdXNlZCB0byBzYXRpc2Z5IHBhcnRcbi1vZiB0aGUgcmVxdWVzdC4gIEJ1dCwgMiBwYWdlcyBtdXN0IGJlIG9idGFpbmVkIGZyb20gdGhlIGdsb2JhbCBwb29scy4gIFRvXG4tcmVsYXkgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUgY2FsbGVyLCB0aGUgdmFsdWUgMiBpcyByZXR1cm5lZC4gIFRoZSBjYWxsZXJcbi1pcyB0aGVuIHJlc3BvbnNpYmxlIGZvciBhdHRlbXB0aW5nIHRvIG9idGFpbiB0aGUgYWRkaXRpb25hbCB0d28gcGFnZXMgZnJvbVxuLXRoZSBnbG9iYWwgcG9vbHMuXG4tXG4raHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgdXNlIHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcyBwYXNzZWQgdG8gYWRqdXN0XG4rdGhlIHN1YnBvb2wgJ3VzZWQgcGFnZScgY291bnQuXG4gXG4gQ09XIGFuZCBSZXNlcnZhdGlvbnNcbiA9PT09PT09PT09PT09PT09PT09PVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0IGIvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcbmluZGV4IDIwOTQ3ZjhiZDA2NTQuLmFlMWYxZjMxNDc3ZmMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcbkBAIC0yNDYsMTUgKzI0Niw4IEBAIGh1Z2VwYWdlX3N1YnBvb2znmoRtaW5faHBhZ2Vz5a2X5q615Lit6KKr6Lef6Liq44CC5Zyo5oyC6L295pe277yMaHVnZXRsYl9hY2N0X21lXG4g6KKr6LCD55So5Lul6aKE55WZ5oyH5a6a5pWw6YeP55qE5beo6aG144CC5aaC5p6c5a6D5Lus5LiN6IO96KKr6aKE55WZ77yM5oyC6L295bCx5Lya5aSx6LSl44CCXG4gXG4g5b2T5LuO5a2Q5rGg5Lit6I635Y+W5oiW6YeK5pS+6aG16Z2i5pe277yM5Lya6LCD55SoaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCnlh73mlbDjgIJcbi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXPooqvkvKDpgJLnu5nlt6jpobXmlbDph4/vvIzku6XmraTmnaXosIPmlbTlrZDmsaDnmoQg4oCc5bey55So6aG16Z2i4oCdIOiuoeaVsFxuLe+8iGdldOS4uuS4i+mZje+8jHB1dOS4uuS4iuWNh++8ieOAgumAmuW4uOaDheWGteS4i++8jOWmguaenOWtkOaxoOS4reayoeaciei2s+Wkn+eahOmhtemdou+8jOWug+S7rOS8mui/lOWbnuS4juS8oOmAkueahOebuOWQjOeahOWAvOaIllxuLeS4gOS4qumUmeivr+OAglxuLVxuLeeEtuiAjO+8jOWmguaenOmihOeVmeS4juWtkOaxoOebuOWFs+iBlO+8jOWPr+iDveS8mui/lOWbnuS4gOS4quWwj+S6juS8oOmAkuWAvOeahOi/lOWbnuWAvOOAgui/meS4qui/lOWbnuWAvOihqOekuuW/hemhu+i/m+ihjOeahOmineWkluWFqOWxgFxuLeaxoOiwg+aVtOeahOaVsOmHj+OAguS+i+Wmgu+8jOWBh+iuvuS4gOS4quWtkOaxoOWMheWQqzPkuKrpooTnlZnnmoTlt6jpobXvvIzmnInkurropoHmsYI15Liq44CC5LiO5a2Q5rGg55u45YWz55qEM+S4qumihOeVmemhteWPr+S7peeUqOadpVxuLea7oei2s+mDqOWIhuivt+axguOAguS9huaYr++8jOW/hemhu+S7juWFqOWxgOaxoOS4reiOt+W+lzLkuKrpobXpnaLjgILkuLrkuoblkJHosIPnlKjogIXovazovr7ov5nkuIDkv6Hmga/vvIzlsIbov5Tlm57lgLwy44CC54S25ZCO77yM6LCD55SoXG4t6ICF6KaB6LSf6LSj5LuO5YWo5bGA5rGg5Lit6I635Y+W5Y+m5aSW5Lik5Liq6aG16Z2i44CCXG4tXG4r5a6D5Lus6LSf6LSj5omA5pyJ5a2Q5rGg55qE57uf6K6h5qC4566X77yM5bm26Lef6Liq5LiO5a2Q5rGg55u45YWz6IGU55qE6aKE55WZ44CCXG4raHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCnlh73mlbDkvb/nlKjkvKDlhaXnmoTlt6jpobXmlbDph4/mnaXosIPmlbTlrZDmsaDnmoTigJzlt7LnlKjpobXpnaLigJ3orqHmlbDjgIJcbiBcbiBDT1flkozpooTnlZlcbiA9PT09PT09PT09XG5kaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xuaW5kZXggNzYxMWE4NDcwZWEyNi4uNTExM2Y3NDNmNmZjNyAxMDA2NDRcbi0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG4rKysgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xuQEAgLTExMDksOCArMTEwOSwxMiBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuIFxuIFx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2c2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZWxvY2spO1xuIFx0XHRcdGJ1Zi1cdTAwM2VmX2Jsb2NrcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzO1xuLVx0XHRcdGZyZWVfcGFnZXMgPSBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlc1xuLVx0XHRcdFx0LSBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4rXHRcdFx0aWYgKHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzID09IC0xKSB7XG4rXHRcdFx0XHRmcmVlX3BhZ2VzID0gLTE7XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdGZyZWVfcGFnZXMgPSBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAtXG4rXHRcdFx0XHRcdCAgICAgc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzO1xuK1x0XHRcdH1cbiBcdFx0XHRidWYtXHUwMDNlZl9iYXZhaWwgPSBidWYtXHUwMDNlZl9iZnJlZSA9IGZyZWVfcGFnZXM7XG4gXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRidWYtXHUwMDNlZl9maWxlcyA9IHNiaW5mby1cdTAwM2VtYXhfaW5vZGVzO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbmluZGV4IDE2YzRjNGNhYTEyNmMuLjQ1NTFmZjMwMjM2NDAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0zOSw4ICszOSw4IEBAIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sIHtcbiBcdHNwaW5sb2NrX3QgbG9jaztcbiBcdGxvbmcgY291bnQ7XG4gXHRsb25nIG1heF9ocGFnZXM7XHQvKiBNYXhpbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWF4aW11bS4gKi9cbi1cdGxvbmcgdXNlZF9ocGFnZXM7XHQvKiBVc2VkIGNvdW50IGFnYWluc3QgbWF4aW11bSwgaW5jbHVkZXMgKi9cbi1cdFx0XHRcdC8qIGJvdGggYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi9cbitcdGxvbmcgdXNlZF9ocGFnZXM7XHQvKiBVc2VkIHBhZ2UgY291bnQsIGluY2x1ZGVzIGJvdGggKi9cbitcdFx0XHRcdC8qIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXG4gXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7XG4gXHRsb25nIG1pbl9ocGFnZXM7XHQvKiBNaW5pbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWluaW11bS4gKi9cbiBcdGxvbmcgcnN2X2hwYWdlcztcdC8qIFBhZ2VzIHJlc2VydmVkIGFnYWluc3QgZ2xvYmFsIHBvb2wgdG8gKi9cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDRmNmY1OGJmM2RiNmMuLjExNTFhZDk1OWZmZDUgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEzMCwxMiArMTMwLDggQEAgc3RhdGljIGlubGluZSBib29sIHN1YnBvb2xfaXNfZnJlZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG4ge1xuIFx0aWYgKHNwb29sLVx1MDAzZWNvdW50KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcbi1cdFx0cmV0dXJuIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDA7XG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAhPSAtMSlcbi1cdFx0cmV0dXJuIHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPT0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcztcbiBcbi1cdHJldHVybiB0cnVlO1xuK1x0cmV0dXJuIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDA7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbkBAIC0xOTMsMTMgKzE4OSwxOCBAQCB2b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbiBcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbiB9XG4gXG4tLypcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGFsbG9jYXRpbmcgYW5kIHJlc2VydmluZyBwYWdlcy5cbi0gKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGVcbi0gKiByZXF1ZXN0LiAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBieSB3aGljaCB0aGVcbi0gKiBnbG9iYWwgcG9vbHMgbXVzdCBiZSBhZGp1c3RlZCAodXB3YXJkKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBtYXlcbi0gKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZVxuLSAqIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxuKy8qKlxuKyAqIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzIC0gR2V0IHBhZ2VzIGZyb20gYSBzdWJwb29sXG4rICogQHNwb29sOiBwb2ludGVyIHRvIHN1YnBvb2wgc3RydWN0dXJlIChtYXkgYmUgTlVMTClcbisgKiBAZGVsdGE6IG51bWJlciBvZiBwYWdlcyB0byBhbGxvY2F0ZSBvciByZXNlcnZlXG4rICpcbisgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBhbGxvY2F0aW5nIG9yXG4rICogcmVzZXJ2aW5nIEBkZWx0YSBodWdlcGFnZXMuXG4rICpcbisgKiBDb250ZXh0OiBUYWtlcyBzcG9vbC1cdTAwM2Vsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnEoKS5cbisgKiBSZXR1cm46IE5vbi1uZWdhdGl2ZSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgY2Fubm90IGJlXG4rICogICAgICAgICBzYXRpc2ZpZWQgYnkgdGhlIHN1YnBvb2wsIG9yIC1FTk9NRU0gaWYgdGhlIHN1YnBvb2wgbWF4aW11bVxuKyAqICAgICAgICAgbGltaXQgd291bGQgYmUgZXhjZWVkZWQuXG4gICovXG4gc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFx0XHRcdFx0ICAgICAgbG9uZyBkZWx0YSlcbkBAIC0yMTEsMTUgKzIxMiwxNCBAQCBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuIFxuLVx0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEpIHtcdFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cbi1cdFx0aWYgKChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyArIGRlbHRhKSBcdTAwM2M9IHNwb29sLVx1MDAzZW1heF9ocGFnZXMpXG4tXHRcdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgKz0gZGVsdGE7XG4tXHRcdGVsc2Uge1xuLVx0XHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdFx0Z290byB1bmxvY2tfcmV0O1xuLVx0XHR9XG4rXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSBcdTAwMjZcdTAwMjZcbitcdCAgICBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyArIGRlbHRhIFx1MDAzZSBzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzKSB7XG4rXHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdGdvdG8gdW5sb2NrX3JldDtcbiBcdH1cbiBcbitcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICs9IGRlbHRhO1xuK1xuIFx0LyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi9cbiBcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNiBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzKSB7XG4gXHRcdGlmIChkZWx0YSBcdTAwM2Ugc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcykge1xuQEAgLTI0MCwxMSArMjQwLDE5IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qXG4tICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBmcmVlaW5nIGFuZCB1bnJlc2VydmluZyBwYWdlcy5cbi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBnbG9iYWwgcGFnZSByZXNlcnZhdGlvbnMgdGhhdCBtdXN0IGJlIGRyb3BwZWQuXG4tICogVGhlIHJldHVybiB2YWx1ZSBtYXkgb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSlcbi0gKiBpbiB0aGUgY2FzZSB3aGVyZSBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC5cbisvKipcbisgKiBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyAtIFJlbGVhc2UgcGFnZXMgYmFjayB0byBhIHN1YnBvb2xcbisgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKVxuKyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGZyZWUgb3IgdW5yZXNlcnZlXG4rICpcbisgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBmcmVlaW5nIG9yXG4rICogdW5yZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy5cbisgKlxuKyAqIENvbnRleHQ6IFRha2VzIHNwb29sLVx1MDAzZWxvY2sgdXNpbmcgc3Bpbl9sb2NrX2lycXNhdmUoKS4gTWF5IHJlbGVhc2VcbisgKiAgICAgICAgICBhbmQgZnJlZSBAc3Bvb2wgaWYgaXRzIHVzYWdlIGNvdW50IGFuZCByZWZlcmVuY2VzIHJlYWNoXG4rICogICAgICAgICAgemVyby5cbisgKiBSZXR1cm46IE5vbi1uZWdhdGl2ZSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgdGhlIHN1YnBvb2wgY2Fubm90XG4rICogICAgICAgICBhYnNvcmIuXG4gICovXG4gc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFx0XHRcdFx0ICAgICAgIGxvbmcgZGVsdGEpXG5AQCAtMjU3LDE5ICsyNjUsMjQgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuLVx0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXHRcdC8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4tXHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGRlbHRhO1xuK1x0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XG4gXG4gXHQgLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi9cbiBcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyBcdTAwM2Mgc3Bvb2wtXHUwMDNlbWluX2hwYWdlcykge1xuLVx0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIFx1MDAzYz0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcylcbitcdFx0LypcbitcdFx0ICogbGltaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0XG4rXHRcdCAqIGNhbiBiZSByZXN0b3JlZCB0byB0aGlzIHN1YnBvb2wuXG4rXHRcdCAqL1xuK1x0XHRsb25nIGxpbWl0ID0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAtIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzO1xuK1xuK1x0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIFx1MDAzYz0gbGltaXQpXG4gXHRcdFx0cmV0ID0gMDtcbiBcdFx0ZWxzZVxuLVx0XHRcdHJldCA9IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSAtIHNwb29sLVx1MDAzZW1pbl9ocGFnZXM7XG4rXHRcdFx0cmV0ID0gc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIC0gbGltaXQ7XG4gXG4gXHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgKz0gZGVsdGE7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzIFx1MDAzZSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzKVxuLVx0XHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuK1x0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyBcdTAwM2UgbGltaXQpXG4rXHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IGxpbWl0O1xuIFx0fVxuIFxuIFx0LypcbkBAIC0yOTQ0LDcgKzI5NTcsNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX3ZtYSh2bWEpO1xuIFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHRsb25nIHJldHZhbCwgZ2JsX2NoZywgZ2JsX3Jlc2VydmU7XG4rXHRsb25nIHJldHZhbCwgZ2JsX3Jlc3ZfZ2V0O1xuIFx0bWFwX2NoZ19zdGF0ZSBtYXBfY2hnO1xuIFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCBtcG9saTtcbiBcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbkBAIC0yOTgzLDggKzI5OTYsOCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHQgKiBPciBpZiBpdCBjYW4gZ2V0IG9uZSBmcm9tIHRoZSBwb29sIHJlc2VydmF0aW9uIGRpcmVjdGx5LlxuIFx0ICovXG4gXHRpZiAobWFwX2NoZykge1xuLVx0XHRnYmxfY2hnID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuLVx0XHRpZiAoZ2JsX2NoZyBcdTAwM2MgMCkge1xuK1x0XHRnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XG4rXHRcdGlmIChnYmxfcmVzdl9nZXQgXHUwMDNjIDApIHtcbiBcdFx0XHRyZXQgPSAtRU5PU1BDO1xuIFx0XHRcdGdvdG8gb3V0X2VuZF9yZXNlcnZhdGlvbjtcbiBcdFx0fVxuQEAgLTI5OTMsNyArMzAwNiw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0ICogSWYgd2UgaGF2ZSB0aGUgdm1hIHJlc2VydmF0aW9uIHJlYWR5LCBubyBuZWVkIGZvciBleHRyYVxuIFx0XHQgKiBnbG9iYWwgcmVzZXJ2YXRpb24uXG4gXHRcdCAqL1xuLVx0XHRnYmxfY2hnID0gMDtcbitcdFx0Z2JsX3Jlc3ZfZ2V0ID0gMDtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMzAwNCwxMCArMzAxNywxMCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdGFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7XG4gXG4gXHQvKlxuLVx0ICogZ2JsX2NoZyA9PSAwIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyBmb3IgdGhpc1xuK1x0ICogZ2JsX3Jlc3ZfZ2V0ID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXG4gXHQgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LlxuIFx0ICovXG4tXHRpZiAoZ2JsX2NoZyA9PSAwKVxuK1x0aWYgKGdibF9yZXN2X2dldCA9PSAwKVxuIFx0XHRhbGxvY19mbGFncyB8PSBIVUdFVExCX0FMTE9DX1VTRV9HTE9CQUxfUkVTRVJWQVRJT05TO1xuIFxuIFx0LyogVGFrZXMgcmVmZXJlbmNlIG9uIG1wb2wuICovXG5AQCAtMzA2MSwxMyArMzA3NCwxMCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRyZXR1cm4gZm9saW87XG4gXG4gb3V0X3N1YnBvb2xfcHV0OlxuLVx0Lypcbi1cdCAqIHB1dCBwYWdlIHRvIHN1YnBvb2wgaWZmIHRoZSBxdW90YSBvZiBzdWJwb29sJ3MgcnN2X2hwYWdlcyBpcyB1c2VkXG4tXHQgKiBkdXJpbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMuXG4tXHQgKi9cbi1cdGlmIChtYXBfY2hnIFx1MDAyNlx1MDAyNiAhZ2JsX2NoZykge1xuLVx0XHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbi1cdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xuK1x0aWYgKG1hcF9jaGcpIHtcbitcdFx0bG9uZyBnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XG4rXG4rXHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0IC0gZ2JsX3Jlc3ZfcHV0KTtcbiBcdH1cbiBcbiBvdXRfZW5kX3Jlc2VydmF0aW9uOlxuQEAgLTY2NjMsMTIgKzY2NzMsMTUgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHZtYV9mbGFnc190IHZtYV9mbGFncylcbiB7XG4tXHRsb25nIGNoZyA9IC0xLCBhZGQgPSAtMSwgc3Bvb2xfcmVzdiwgZ2JsX3Jlc3Y7XG4rXHRsb25nIGNoZyA9IC0xLCBhZGQgPSAtMTtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfaW5vZGUoaW5vZGUpO1xuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF9pbm9kZShpbm9kZSk7XG4gXHRzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwO1xuIFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDtcbi1cdGxvbmcgZ2JsX3Jlc2VydmUsIHJlZ2lvbnNfbmVlZGVkID0gMDtcbitcdGxvbmcgZ2JsX3Jlc3ZfYWNjdGVkID0gMDtcbitcdGxvbmcgcmVnaW9uc19uZWVkZWQgPSAwO1xuK1x0bG9uZyBnYmxfcmVzdl9nZXQ7XG4rXHRsb25nIGdibF9yZXN2X3B1dDtcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi9cbkBAIC02NzQzLDkgKzY3NTYsOSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0ICogdGhlIHN1YnBvb2wgaGFzIGEgbWluaW11bSBzaXplLCB0aGVyZSBtYXkgYmUgc29tZSBnbG9iYWxcbiBcdCAqIHJlc2VydmF0aW9ucyBhbHJlYWR5IGluIHBsYWNlIChnYmxfcmVzZXJ2ZSkuXG4gXHQgKi9cbi1cdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7XG4tXHRpZiAoZ2JsX3Jlc2VydmUgXHUwMDNjIDApIHtcbi1cdFx0ZXJyID0gZ2JsX3Jlc2VydmU7XG4rXHRnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgY2hnKTtcbitcdGlmIChnYmxfcmVzdl9nZXQgXHUwMDNjIDApIHtcbitcdFx0ZXJyID0gZ2JsX3Jlc3ZfZ2V0O1xuIFx0XHRnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7XG4gXHR9XG4gXG5AQCAtNjc1Myw5ICs2NzY2LDEwIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi5cbiBcdCAqIEhhbmQgdGhlIHBhZ2VzIGJhY2sgdG8gdGhlIHN1YnBvb2wgaWYgdGhlcmUgYXJlIG5vdFxuIFx0ICovXG4tXHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTtcbitcdGVyciA9IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0KTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X3B1dF9wYWdlcztcbitcdGdibF9yZXN2X2FjY3RlZCA9IGdibF9yZXN2X2dldDtcbiBcbiBcdC8qXG4gXHQgKiBBY2NvdW50IGZvciB0aGUgcmVzZXJ2YXRpb25zIG1hZGUuIFNoYXJlZCBtYXBwaW5ncyByZWNvcmQgcmVnaW9uc1xuQEAgLTY3NzIsNyArNjc4Niw2IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdGFkZCA9IHJlZ2lvbl9hZGQocmVzdl9tYXAsIGZyb20sIHRvLCByZWdpb25zX25lZWRlZCwgaCwgaF9jZyk7XG4gXG4gXHRcdGlmICh1bmxpa2VseShhZGQgXHUwMDNjIDApKSB7XG4tXHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xuIFx0XHRcdGVyciA9IGFkZDtcbiBcdFx0XHRnb3RvIG91dF9wdXRfcGFnZXM7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoY2hnIFx1MDAzZSBhZGQpKSB7XG5AQCAtNjgwOCwyNiArNjgyMSwyMiBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0fVxuIFx0cmV0dXJuIGNoZztcbiBcbi1vdXRfcHV0X3BhZ2VzOlxuLVx0c3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlO1xuLVx0aWYgKHNwb29sX3Jlc3YpIHtcbi1cdFx0LyogcHV0IHN1YiBwb29sJ3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cbi1cdFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XG4tXHRcdC8qXG4tXHRcdCAqIHN1YnBvb2wncyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxuLVx0XHQgKiByZXR1cm4gdG8gaHN0YXRlLlxuLVx0XHQgKi9cbi1cdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xuLVx0fVxuLVx0LyogUmVzdG9yZSB1c2VkX2hwYWdlcyBmb3IgcGFnZXMgdGhhdCBmYWlsZWQgZ2xvYmFsIHJlc2VydmF0aW9uICovXG4tXHRpZiAoZ2JsX3Jlc2VydmUgXHUwMDI2XHUwMDI2IHNwb29sKSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rIG91dF9wdXRfcGFnZXM6XG4rXHQvKlxuK1x0ICogUmV0dXJuIGFsbCB0aGF0IHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc3VicG9vbCwgbGV0IHN1YnBvb2xcbitcdCAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZVxuK1x0ICogcmV0dXJuZWQgdG8gdGhlIGdsb2JhbCBwb29sLlxuK1x0ICovXG4rXHRnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgY2hnKTtcbitcdC8qXG4rXHQgKiBUaGVyZSBtYXkgYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZlxuK1x0ICogcmVzZXJ2YXRpb25zIHRvIGNvbnN1bWUgYW5kIHRoZSBudW1iZXIgdG8gcmVzdG9yZSBub3cgaWZcbitcdCAqIHRoZXJlIGFyZSBtdWx0aXBsZSB0aHJlYWRzIGludGVyYWN0aW5nIHdpdGggdGhlIHN1YnBvb2wgLVxuK1x0ICogcmVzdG9yZSB0aGUgZGlmZmVyZW5jZSwgdGFraW5nIGludG8gYWNjb3VudCBhbnkgZ2xvYmFsXG4rXHQgKiByZXNlcnZhdGlvbnMgYWxyZWFkeSBhY3F1aXJlZC5cbitcdCAqL1xuK1x0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQgLSBnYmxfcmVzdl9hY2N0ZWQpO1xuIFxuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlO1xuLVx0XHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4tXHR9XG4gb3V0X3VuY2hhcmdlX2Nncm91cDpcbiBcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcbiBcdFx0XHRcdFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6NTAuNTU2MzU4NTM4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1OTAwMTk1NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBBc3Nlc3NtZW50IGZvciBIdWdldGxiZnMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZGVjaWRlIGlmIHdlIG5lZWQgdG8gYnJpbmcgb3V0IHRoZSBiaWcgZ3VucyB3aXRoIEtNU0FOLCBvciBpZiBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXJzIHdpbGwgc3VmZmljZS4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB3aGF0J3MgY2hhbmdpbmcuXG5cblRoZSBwYXRjaCB0b3VjaGVzIGEgaGFuZGZ1bCBvZiBmaWxlcywgbmFtZWx5IHRoZSBkb2N1bWVudGF0aW9uIGZvciBodWdldGxiZnMgcmVzZXJ2YXRpb24gYW5kIHNvbWUgY29yZSBmaWxlcyBpbiB0aGUgZmlsZXN5c3RlbSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtczogYERvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RgLCBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCBhbmQgYG1tL2h1Z2V0bGIuY2AuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyBpbiB0aGUgYGh1Z2V0bGJmc19zdGF0ZnNgIGZ1bmN0aW9uIHdpdGhpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLiBJdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSBtb2RpZmljYXRpb24gdG8gaG93IGZyZWUgcGFnZXMgYXJlIGNhbGN1bGF0ZWQsIGhhbmRsaW5nIGEgcG90ZW50aWFsIGAtMWAgdmFsdWUgZm9yIGBtYXhfaHBhZ2VzYCBpbiB0aGUgYGtzdGF0ZnNgIHN0cnVjdC4gVGhpcyBpcyBpbnRlcmVzdGluZyDigJMgaXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIGNvdW50ZXJzIGFyZSB1c2VkIGVsc2V3aGVyZSBhbmQgd2hldGhlciBhIG5lZ2F0aXZlIHZhbHVlIGNvdWxkIGxlYWQgdG8gYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblRoZW4sIHRoZXJlIGFyZSBjaGFuZ2VzIGluIGBtbS9odWdldGxiLmNgIHRvIHRoZSBzdWJwb29sIGZ1bmN0aW9uczogYHN1YnBvb2xfaXNfZnJlZWAsIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AsIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AsIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLiBUaGVzZSBzZWVtIHJlbGF0ZWQgdG8gY2hhbmdlcyBpbiB0aGUgcmVzZXJ2YXRpb24gYW5kIGFjY291bnRpbmcgbG9naWMgZm9yIGh1Z2VwYWdlcyB3aXRoaW4gc3VicG9vbHMuIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhY2NvdW50aW5nIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHN1YnBvb2wgbWFuYWdlbWVudCBmdW5jdGlvbnM7IHRoYXQncyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciByYWNlIGNvbmRpdGlvbnMgY2FuIGhpZGUuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUgZm9yIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgdGhlIGtleSBjaGFuZ2UgaXMgaW4gaG93IHZhcmlhYmxlcyBhcmUgbWFuYWdlZCBpbiB0aGUgYG1hcF9jaGdgIGNvbmRpdGlvbmFsIGJyYW5jaC4gVGhlIHByZXZpb3VzIGxvZ2ljIGhhZCBhIGZsYXcgd2hpY2ggY2F1c2VkIGEgYGdibF9yZXN2YCB0byBiZSBhc3NpZ25lZCBjb25kaXRpb25hbGx5LCBidXQgd2FzIHN0aWxsIHVzZWQgaW4gYW4gYGlmYCBzdGF0ZW1lbnQgdG8gaGFuZGxlIGFjY291bnRpbmcuIE5vdywgdGhlIGNvZGUgZXhwbGljaXRseSBpbml0aWFsaXplcyBgZ2JsX3Jlc3ZfZ2V0YCBpZiBgbWFwX2NoZ2AgaXMgdHJ1ZSwgYW5kIGl0IHNob3VsZCB0aGVuIGJlIHNhZmUgaW4gdGhlIGBvdXRfc3VicG9vbF9wdXRgIGJyYW5jaCwgd2hlcmUgdGhlcmUgbWlnaHQgYmUgYSBwdXQgb3BlcmF0aW9uIHBlcmZvcm1lZC5cblxuSSB3aWxsIHBlcmZvcm0gYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgZnVuY3Rpb24gdG8gZG91YmxlLWNoZWNrIHRoYXQgZXZlcnkgdmFyaWFibGUgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIHVzZWQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGNoYW5nZXMgdG8gaG93IHRoZSBnbG9iYWwgcmVzZXJ2YXRpb24gYWNjb3VudGluZyBpcyBoYW5kbGVkLiBSZWFkaW5nIHRoZSBmdWxsIGZ1bmN0aW9uIGZyb20gbGluZXMgMjk0NCB0byAzMDgwIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIG92ZXJ2aWV3IG9mIHRoZSBjb2RlLCByYXRoZXIgdGhhbiBqdXN0IHRoZSBzbmlwcGV0cyBwcm92aWRlZC5cblxuVWx0aW1hdGVseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbmZvIGxlYWtzLCBvciBhbnkgb3RoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyB0aGF0IG1pZ2h0IGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4gQmFzZWQgb24gdGhpcyBpbml0aWFsIHJldmlldywgSSdtIGxlYW5pbmcgdG93YXJkcyB0aGUgaWRlYSB0aGF0IEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIGhlcmUsIGJ1dCBJIG5lZWQgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjowMTo1Ny4xNDYzODg3NDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2V0bGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTQ0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjk0NDpcXHRcXHRNQVBfQ0hHX0VORk9SQ0VEID0gMixcXG4yOTQ1OlxcdH0gbWFwX2NoZ19zdGF0ZTtcXG4yOTQ2OlxcdFxcbjI5NDc6XFx0LypcXG4yOTQ4OlxcdCAqIE5PVEUhIFxcXCJjb3dfZnJvbV9vd25lclxcXCIgcmVwcmVzZW50cyBhIHZlcnkgaGFja3kgdXNhZ2Ugb25seSB1c2VkIGluIENvV1xcbjI5NDk6XFx0ICogZmF1bHRzIG9mIGh1Z2V0bGIgcHJpdmF0ZSBtYXBwaW5ncyBvbiB0b3Agb2YgYSBub24tcGFnZS1jYWNoZSBmb2xpbyAoaW5cXG4yOTUwOlxcdCAqIHdoaWNoIGNhc2UgZXZlbiBpZiB0aGVyZSdzIGEgcHJpdmF0ZSB2bWEgcmVzdiBtYXAgaXQgd29uJ3QgY292ZXIgc3VjaFxcbjI5NTE6XFx0ICogYWxsb2NhdGlvbikuICBOZXcgY2FsbCBzaXRlcyBzaG91bGQgKHByb2JhYmx5KSBuZXZlciBzZXQgaXQgdG8gdHJ1ZSEhXFxuMjk1MjpcXHQgKiBXaGVuIGl0J3Mgc2V0LCB0aGUgYWxsb2NhdGlvbiB3aWxsIGJ5cGFzcyBhbGwgdm1hIGxldmVsIHJlc2VydmF0aW9ucy5cXG4yOTUzOlxcdCAqL1xcbjI5NTQ6XFx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjI5NTU6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcilcXG4yOTU2OlxcdHtcXG4yOTU3OlxcdFxcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfdm1hKHZtYSk7XFxuMjk1ODpcXHRcXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xcbjI5NTk6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4yOTYwOlxcdFxcdGxvbmcgcmV0dmFsLCBnYmxfcmVzdl9nZXQ7XFxuMjk2MTpcXHRcXHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XFxuMjk2MjpcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xcbjI5NjM6XFx0XFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xcbjI5NjQ6XFx0XFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcXG4yOTY1OlxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xcbjI5NjY6XFx0XFx0dTggYWxsb2NfZmxhZ3MgPSAwO1xcbjI5Njc6XFx0XFx0aW50IG5pZDtcXG4yOTY4OlxcdFxcdGludCByZXQ7XFxuMjk2OTpcXHRcXG4yOTcwOlxcdFxcdC8qIFdoZXRoZXIgd2UgbmVlZCBhIHNlcGFyYXRlIHBlci12bWEgcmVzZXJ2YXRpb24/ICovXFxuMjk3MTpcXHRcXHRpZiAoY293X2Zyb21fb3duZXIpIHtcXG4yOTcyOlxcdFxcdFxcdC8qXFxuMjk3MzpcXHRcXHRcXHQgKiBTcGVjaWFsIGNhc2UhICBTaW5jZSBpdCdzIGEgQ29XIG9uIHRvcCBvZiBhIHJlc2VydmVkXFxuMjk3NDpcXHRcXHRcXHQgKiBwYWdlLCB0aGUgcHJpdmF0ZSByZXN2IG1hcCBkb2Vzbid0IGNvdW50LiAgU28gaXQgY2Fubm90XFxuMjk3NTpcXHRcXHRcXHQgKiBjb25zdW1lIHRoZSBwZXItdm1hIHJlc3YgbWFwIGV2ZW4gaWYgaXQncyByZXNlcnZlZC5cXG4yOTc2OlxcdFxcdFxcdCAqL1xcbjI5Nzc6XFx0XFx0XFx0bWFwX2NoZyA9IE1BUF9DSEdfRU5GT1JDRUQ7XFxuMjk3ODpcXHRcXHR9IGVsc2Uge1xcbjI5Nzk6XFx0XFx0XFx0LypcXG4yOTgwOlxcdFxcdFxcdCAqIEV4YW1pbmUgdGhlIHJlZ2lvbi9yZXNlcnZlIG1hcCB0byBkZXRlcm1pbmUgaWYgdGhlIHByb2Nlc3NcXG4yOTgxOlxcdFxcdFxcdCAqIGhhcyBhIHJlc2VydmF0aW9uIGZvciB0aGUgcGFnZSB0byBiZSBhbGxvY2F0ZWQuICBBIHJldHVyblxcbjI5ODI6XFx0XFx0XFx0ICogY29kZSBvZiB6ZXJvIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyAobm8gY2hhbmdlKS5cXG4yOTgzOlxcdFxcdFxcdCAqL1xcbjI5ODQ6XFx0XFx0XFx0cmV0dmFsID0gdm1hX25lZWRzX3Jlc2VydmF0aW9uKGgsIHZtYSwgYWRkcik7XFxuMjk4NTpcXHRcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4yOTg2OlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjI5ODc6XFx0XFx0XFx0bWFwX2NoZyA9IHJldHZhbCA/IE1BUF9DSEdfTkVFREVEIDogTUFQX0NIR19SRVVTRTtcXG4yOTg4OlxcdFxcdH1cXG4yOTg5OlxcdFxcbjI5OTA6XFx0XFx0LypcXG4yOTkxOlxcdFxcdCAqIFdoZXRoZXIgd2UgbmVlZCBhIHNlcGFyYXRlIGdsb2JhbCByZXNlcnZhdGlvbj9cXG4yOTkyOlxcdFxcdCAqXFxuMjk5MzpcXHRcXHQgKiBQcm9jZXNzZXMgdGhhdCBkaWQgbm90IGNyZWF0ZSB0aGUgbWFwcGluZyB3aWxsIGhhdmUgbm9cXG4yOTk0OlxcdFxcdCAqIHJlc2VydmVzIGFzIGluZGljYXRlZCBieSB0aGUgcmVnaW9uL3Jlc2VydmUgbWFwLiBDaGVja1xcbjI5OTU6XFx0XFx0ICogdGhhdCB0aGUgYWxsb2NhdGlvbiB3aWxsIG5vdCBleGNlZWQgdGhlIHN1YnBvb2wgbGltaXQuXFxuMjk5NjpcXHRcXHQgKiBPciBpZiBpdCBjYW4gZ2V0IG9uZSBmcm9tIHRoZSBwb29sIHJlc2VydmF0aW9uIGRpcmVjdGx5LlxcbjI5OTc6XFx0XFx0ICovXFxuMjk5ODpcXHRcXHRpZiAobWFwX2NoZykge1xcbjI5OTk6XFx0XFx0XFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xcbjMwMDA6XFx0XFx0XFx0aWYgKGdibF9yZXN2X2dldCBcXHUwMDNjIDApIHtcXG4zMDAxOlxcdFxcdFxcdFxcdHJldCA9IC1FTk9TUEM7XFxuMzAwMjpcXHRcXHRcXHRcXHRnb3RvIG91dF9lbmRfcmVzZXJ2YXRpb247XFxuMzAwMzpcXHRcXHRcXHR9XFxuMzAwNDpcXHRcXHR9IGVsc2Uge1xcbjMwMDU6XFx0XFx0XFx0LypcXG4zMDA2OlxcdFxcdFxcdCAqIElmIHdlIGhhdmUgdGhlIHZtYSByZXNlcnZhdGlvbiByZWFkeSwgbm8gbmVlZCBmb3IgZXh0cmFcXG4zMDA3OlxcdFxcdFxcdCAqIGdsb2JhbCByZXNlcnZhdGlvbi5cXG4zMDA4OlxcdFxcdFxcdCAqL1xcbjMwMDk6XFx0XFx0XFx0Z2JsX3Jlc3ZfZ2V0ID0gMDtcXG4zMDEwOlxcdFxcdH1cXG4zMDExOlxcdFxcbjMwMTI6XFx0XFx0LypcXG4zMDEzOlxcdFxcdCAqIElmIGFsbG9jYXRpb24gZG9lc24ndCByZXVzZSBhIHJlc2VydmF0aW9uIGluIHRoZSByZXN2X21hcCxcXG4zMDE0OlxcdFxcdCAqIGNoYXJnZSBmb3IgdGhlIHJlc2VydmF0aW9uLlxcbjMwMTU6XFx0XFx0ICovXFxuMzAxNjpcXHRcXHRpZiAobWFwX2NoZyAhPSBNQVBfQ0hHX1JFVVNFKVxcbjMwMTc6XFx0XFx0XFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDtcXG4zMDE4OlxcdFxcbjMwMTk6XFx0XFx0LypcXG4zMDIwOlxcdFxcdCAqIGdibF9yZXN2X2dldCA9PSAwIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyBmb3IgdGhpc1xcbjMwMjE6XFx0XFx0ICogYWxsb2NhdGlvbiwgc28gdHJ5IHRvIHVzZSBpdC5cXG4zMDIyOlxcdFxcdCAqL1xcbjMwMjM6XFx0XFx0aWYgKGdibF9yZXN2X2dldCA9PSAwKVxcbjMwMjQ6XFx0XFx0XFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUztcXG4zMDI1OlxcdFxcbjMwMjY6XFx0XFx0LyogVGFrZXMgcmVmZXJlbmNlIG9uIG1wb2wuICovXFxuMzAyNzpcXHRcXHRuaWQgPSBodWdlX25vZGUodm1hLCBhZGRyLCBnZnAsIFxcdTAwMjZtcG9sLCBcXHUwMDI2bm9kZW1hc2spO1xcbjMwMjg6XFx0XFx0bXBvbGkgPSAoc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCl7XFxuMzAyOTpcXHRcXHRcXHQubmlkID0gbmlkLFxcbjMwMzA6XFx0I2lmZGVmIENPTkZJR19OVU1BXFxuMzAzMTpcXHRcXHRcXHQubW9kZSA9IG1wb2wgPyBtcG9sLVxcdTAwM2Vtb2RlIDogTVBPTF9ERUZBVUxULFxcbjMwMzI6XFx0I2Vsc2VcXG4zMDMzOlxcdFxcdFxcdC5tb2RlID0gTVBPTF9ERUZBVUxULFxcbjMwMzQ6XFx0I2VuZGlmXFxuMzAzNTpcXHRcXHRcXHQubm9kZW1hc2sgPSBub2RlbWFzayxcXG4zMDM2OlxcdFxcdH07XFxuMzAzNzpcXHRcXG4zMDM4OlxcdFxcdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcXHUwMDI2bXBvbGksIGFsbG9jX2ZsYWdzKTtcXG4zMDM5OlxcdFxcbjMwNDA6XFx0XFx0bXBvbF9jb25kX3B1dChtcG9sKTtcXG4zMDQxOlxcdFxcbjMwNDI6XFx0XFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4zMDQzOlxcdFxcdFxcdHJldCA9IFBUUl9FUlIoZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjowMTo1Ny4xNDY5MzQ0ODNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc1NDAzNzYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkZvY3VzaW5nIG9uIGEgU3BlY2lmaWMgQ29kZSBCbG9jayoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIGRyaWxsIGRvd24gYW5kIGFuYWx5emUgYSBzcGVjaWZpYyBjaHVuayBvZiBjb2RlLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IHRoZSBpc3N1ZSBtaWdodCBiZSBjb250YWluZWQgd2l0aGluIGxpbmVzIDMwNDQgdGhyb3VnaCAzMDgwLiBUaGlzIGlzIGEgdGFyZ2V0ZWQgYXBwcm9hY2g7IGl0IHN1Z2dlc3RzIGEgc3VzcGljaW9uIG9mIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIEl0IGNvdWxkIGJlIGJhc2VkIG9uIHByZXZpb3VzIGRlYnVnZ2luZywgcmVjZW50IGNoYW5nZXMsIG9yIGV2ZW4ganVzdCBhIGd1dCBmZWVsaW5nIGRlcml2ZWQgZnJvbSB5ZWFycyBvZiBleHBlcmllbmNlLiBJJ20gY2hvb3NpbmcgdG8gaG9uZSBpbiBvbiB0aGlzIHNlY3Rpb24gYmVjYXVzZSwgYmFzZWQgb24gdGhlIGNvbnRleHQgSSd2ZSBzZWVuIHNvIGZhciwgaXQgcHJlc2VudHMgdGhlIGJlc3Qgb3Bwb3J0dW5pdHkgdG8gb2JzZXJ2ZSB0aGUgaW50ZXJhY3Rpb24gYW5kIHBvc3NpYmxlIGVycm9yLiBUaGlzIGlzIGEgaGlnaGx5IGZvY3VzZWQgZGlhZ25vc3RpYyBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM2NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6NTguOTAwOTc2MDIyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzA0NCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzA0NDpcXHRcXHRcXHRnb3RvIG91dF9zdWJwb29sX3B1dDtcXG4zMDQ1OlxcdFxcdH1cXG4zMDQ2OlxcdFxcbjMwNDc6XFx0XFx0aHVnZXRsYl9zZXRfZm9saW9fc3VicG9vbChmb2xpbywgc3Bvb2wpO1xcbjMwNDg6XFx0XFxuMzA0OTpcXHRcXHRpZiAobWFwX2NoZyAhPSBNQVBfQ0hHX0VORk9SQ0VEKSB7XFxuMzA1MDpcXHRcXHRcXHQvKiBjb21taXQoKSBpcyBvbmx5IG5lZWRlZCBpZiB0aGUgbWFwX2NoZyBpcyBub3QgZW5mb3JjZWQgKi9cXG4zMDUxOlxcdFxcdFxcdHJldHZhbCA9IHZtYV9jb21taXRfcmVzZXJ2YXRpb24oaCwgdm1hLCBhZGRyKTtcXG4zMDUyOlxcdFxcdFxcdC8qXFxuMzA1MzpcXHRcXHRcXHQgKiBDaGVjayBmb3IgcG9zc2libGUgcmFjZSBjb25kaXRpb25zLiBXaGVuIGl0IGhhcHBlbnMuLlxcbjMwNTQ6XFx0XFx0XFx0ICogVGhlIHBhZ2Ugd2FzIGFkZGVkIHRvIHRoZSByZXNlcnZhdGlvbiBtYXAgYmV0d2VlblxcbjMwNTU6XFx0XFx0XFx0ICogdm1hX25lZWRzX3Jlc2VydmF0aW9uIGFuZCB2bWFfY29tbWl0X3Jlc2VydmF0aW9uLlxcbjMwNTY6XFx0XFx0XFx0ICogVGhpcyBpbmRpY2F0ZXMgYSByYWNlIHdpdGggaHVnZXRsYl9yZXNlcnZlX3BhZ2VzLlxcbjMwNTc6XFx0XFx0XFx0ICogQWRqdXN0IGZvciB0aGUgc3VicG9vbCBjb3VudCBpbmNyZW1lbnRlZCBhYm92ZSBBTkRcXG4zMDU4OlxcdFxcdFxcdCAqIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBmb3IgdGhlIHNhbWUgcGFnZS5cXHRBbHNvLFxcbjMwNTk6XFx0XFx0XFx0ICogdGhlIHJlc2VydmF0aW9uIGNvdW50IGFkZGVkIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1xcbjMwNjA6XFx0XFx0XFx0ICogbm8gbG9uZ2VyIGFwcGxpZXMuXFxuMzA2MTpcXHRcXHRcXHQgKi9cXG4zMDYyOlxcdFxcdFxcdGlmICh1bmxpa2VseShtYXBfY2hnID09IE1BUF9DSEdfTkVFREVEIFxcdTAwMjZcXHUwMDI2IHJldHZhbCA9PSAwKSkge1xcbjMwNjM6XFx0XFx0XFx0XFx0bG9uZyByc3ZfYWRqdXN0O1xcbjMwNjQ6XFx0XFxuMzA2NTpcXHRcXHRcXHRcXHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xcbjMwNjY6XFx0XFx0XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtcnN2X2FkanVzdCk7XFxuMzA2NzpcXHRcXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbjMwNjg6XFx0XFx0XFx0XFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9fcnN2ZChcXG4zMDY5OlxcdFxcdFxcdFxcdCAgICBoc3RhdGVfaW5kZXgoaCksIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGZvbGlvKTtcXG4zMDcwOlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4zMDcxOlxcdFxcdFxcdH1cXG4zMDcyOlxcdFxcdH1cXG4zMDczOlxcdFxcbjMwNzQ6XFx0XFx0cmV0dXJuIGZvbGlvO1xcbjMwNzU6XFx0XFxuMzA3NjpcXHRvdXRfc3VicG9vbF9wdXQ6XFxuMzA3NzpcXHRcXHRpZiAobWFwX2NoZykge1xcbjMwNzg6XFx0XFx0XFx0bG9uZyBnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxuMzA3OTpcXHRcXG4zMDgwOlxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0IC0gZ2JsX3Jlc3ZfcHV0KTtcXG4zMDgxOlxcdFxcdH1cXG4zMDgyOlxcdFxcbjMwODM6XFx0b3V0X2VuZF9yZXNlcnZhdGlvbjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDE6NTguOTAxNDEyOTIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NDA3NzYwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGYsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCAtIERlbHZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGhvdyBodWdlIHBhZ2UgcmVzZXJ2YXRpb25zIGFyZSBoYW5kbGVkLiBUaGUgY29kZSBsb29rcyBsaWtlIGl0J3MgYXJvdW5kIGxpbmVzIDY2NzAgdG8gNjg0MC4gVGhhdCdzIGEgcHJldHR5IHNwZWNpZmljIHJhbmdlLCBzdWdnZXN0aW5nIGEgY29yZSBwaWVjZSBvZiB0aGUgcmVzZXJ2YXRpb24gbG9naWMuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgdGhlIGFjdHVhbCBhbGxvY2F0aW9uIG9mIHRoZSBodWdlIHBhZ2VzIHRha2VzIHBsYWNlLCBvciBwZXJoYXBzIHdoZXJlIHRoZSBib29ra2VlcGluZyBpcyBkb25lLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IGxlYWtzIHBvc3NpYmxlIHRoZXJlLiBHaXZlbiB0aGF0IGl0J3MgdGhlIHJlc2VydmF0aW9uIHByb2Nlc3MsIEknbSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGBhbGxvY19wYWdlc2Agb3Igc29tZXRoaW5nIHNpbWlsYXIuIEknbGwgYmUgbG9va2luZyB0byBzZWUgaWYgdGhlIGFsbG9jYXRpb24gaXMgYXRvbWljIGFuZCBwcm9wZXJseSBzeW5jaHJvbml6ZWQgaW4gYSBtdWx0aS10aHJlYWRlZCBzeXN0ZW0uIEknbGwgY2hlY2sgaG93IGVycm9ycyBhcmUgaGFuZGxlZCAtIGRvZXMgaXQgZ3JhY2VmdWxseSBmYWxsIGJhY2sgaWYgaXQgY2FuJ3QgcmVzZXJ2ZSB0aGUgcmVxdWVzdGVkIHBhZ2VzPyBBcmUgcmVzb3VyY2VzIGZyZWVkIGNvcnJlY3RseSB3aGVuIHRoZSByZXNlcnZhdGlvbiBpcyBubyBsb25nZXIgbmVlZGVkPyBJIHN1c3BlY3QgSSdsbCBiZSBkaWdnaW5nIGludG8gdGhlIGFsbG9jYXRpb24gZmxhZ3MgYXMgd2VsbCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgdW5kZXIgZGlmZmVyZW50IHdvcmtsb2Fkcy4gVGhpcyB3aWxsIGFsc28gZ2l2ZSBtZSBhIGNsdWUgYXMgdG8gaG93IGR5bmFtaWMgdGhlIHJlc2VydmF0aW9uIGxvZ2ljIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI1NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDI6MDEuNTQyMTkyMjQzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjY3MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjY3MDpcXHRcXG42NjcxOlxcdGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuNjY3MjpcXHRcXHRcXHRsb25nIGZyb20sIGxvbmcgdG8sXFxuNjY3MzpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG42Njc0OlxcdFxcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncylcXG42Njc1OlxcdHtcXG42Njc2OlxcdFxcdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xO1xcbjY2Nzc6XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XFxuNjY3ODpcXHRcXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX2lub2RlKGlub2RlKTtcXG42Njc5OlxcdFxcdHN0cnVjdCByZXN2X21hcCAqcmVzdl9tYXA7XFxuNjY4MDpcXHRcXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMO1xcbjY2ODE6XFx0XFx0bG9uZyBnYmxfcmVzdl9hY2N0ZWQgPSAwO1xcbjY2ODI6XFx0XFx0bG9uZyByZWdpb25zX25lZWRlZCA9IDA7XFxuNjY4MzpcXHRcXHRsb25nIGdibF9yZXN2X2dldDtcXG42Njg0OlxcdFxcdGxvbmcgZ2JsX3Jlc3ZfcHV0O1xcbjY2ODU6XFx0XFx0aW50IGVycjtcXG42Njg2OlxcdFxcbjY2ODc6XFx0XFx0LyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovXFxuNjY4ODpcXHRcXHRpZiAoZnJvbSBcXHUwMDNlIHRvKSB7XFxuNjY4OTpcXHRcXHRcXHRWTV9XQVJOKDEsIFxcXCIlcyBjYWxsZWQgd2l0aCBhIG5lZ2F0aXZlIHJhbmdlXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuNjY5MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42NjkxOlxcdFxcdH1cXG42NjkyOlxcdFxcbjY2OTM6XFx0XFx0LypcXG42Njk0OlxcdFxcdCAqIHZtYSBzcGVjaWZpYyBzZW1hcGhvcmUgdXNlZCBmb3IgcG1kIHNoYXJpbmcgYW5kIGZhdWx0L3RydW5jYXRpb25cXG42Njk1OlxcdFxcdCAqIHN5bmNocm9uaXphdGlvblxcbjY2OTY6XFx0XFx0ICovXFxuNjY5NzpcXHRcXHRodWdldGxiX3ZtYV9sb2NrX2FsbG9jKHZtYSk7XFxuNjY5ODpcXHRcXG42Njk5OlxcdFxcdC8qXFxuNjcwMDpcXHRcXHQgKiBPbmx5IGFwcGx5IGh1Z2VwYWdlIHJlc2VydmF0aW9uIGlmIGFza2VkLiBBdCBmYXVsdCB0aW1lLCBhblxcbjY3MDE6XFx0XFx0ICogYXR0ZW1wdCB3aWxsIGJlIG1hZGUgZm9yIFZNX05PUkVTRVJWRSB0byBhbGxvY2F0ZSBhIHBhZ2VcXG42NzAyOlxcdFxcdCAqIHdpdGhvdXQgdXNpbmcgcmVzZXJ2ZXNcXG42NzAzOlxcdFxcdCAqL1xcbjY3MDQ6XFx0XFx0aWYgKHZtYV9mbGFnc190ZXN0KFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9OT1JFU0VSVkVfQklUKSlcXG42NzA1OlxcdFxcdFxcdHJldHVybiAwO1xcbjY3MDY6XFx0XFxuNjcwNzpcXHRcXHQvKlxcbjY3MDg6XFx0XFx0ICogU2hhcmVkIG1hcHBpbmdzIGJhc2UgdGhlaXIgcmVzZXJ2YXRpb24gb24gdGhlIG51bWJlciBvZiBwYWdlcyB0aGF0XFxuNjcwOTpcXHRcXHQgKiBhcmUgYWxyZWFkeSBhbGxvY2F0ZWQgb24gYmVoYWxmIG9mIHRoZSBmaWxlLiBQcml2YXRlIG1hcHBpbmdzIG5lZWRcXG42NzEwOlxcdFxcdCAqIHRvIHJlc2VydmUgdGhlIGZ1bGwgYXJlYSBldmVuIGlmIHJlYWQtb25seSBhcyBtcHJvdGVjdCgpIG1heSBiZVxcbjY3MTE6XFx0XFx0ICogY2FsbGVkIHRvIG1ha2UgdGhlIG1hcHBpbmcgcmVhZC13cml0ZS4gQXNzdW1lICF2bWEgaXMgYSBzaG0gbWFwcGluZ1xcbjY3MTI6XFx0XFx0ICovXFxuNjcxMzpcXHRcXHRpZiAoIXZtYSB8fCB2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpKSB7XFxuNjcxNDpcXHRcXHRcXHQvKlxcbjY3MTU6XFx0XFx0XFx0ICogcmVzdl9tYXAgY2FuIG5vdCBiZSBOVUxMIGFzIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBpcyBvbmx5XFxuNjcxNjpcXHRcXHRcXHQgKiBjYWxsZWQgZm9yIGlub2RlcyBmb3Igd2hpY2ggcmVzdl9tYXBzIHdlcmUgY3JlYXRlZCAoc2VlXFxuNjcxNzpcXHRcXHRcXHQgKiBodWdldGxiZnNfZ2V0X2lub2RlKS5cXG42NzE4OlxcdFxcdFxcdCAqL1xcbjY3MTk6XFx0XFx0XFx0cmVzdl9tYXAgPSBpbm9kZV9yZXN2X21hcChpbm9kZSk7XFxuNjcyMDpcXHRcXG42NzIxOlxcdFxcdFxcdGNoZyA9IHJlZ2lvbl9jaGcocmVzdl9tYXAsIGZyb20sIHRvLCBcXHUwMDI2cmVnaW9uc19uZWVkZWQpO1xcbjY3MjI6XFx0XFx0fSBlbHNlIHtcXG42NzIzOlxcdFxcdFxcdC8qIFByaXZhdGUgbWFwcGluZy4gKi9cXG42NzI0OlxcdFxcdFxcdHJlc3ZfbWFwID0gcmVzdl9tYXBfYWxsb2MoKTtcXG42NzI1OlxcdFxcdFxcdGlmICghcmVzdl9tYXApIHtcXG42NzI2OlxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuNjcyNzpcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuNjcyODpcXHRcXHRcXHR9XFxuNjcyOTpcXHRcXG42NzMwOlxcdFxcdFxcdGNoZyA9IHRvIC0gZnJvbTtcXG42NzMxOlxcdFxcbjY3MzI6XFx0XFx0XFx0c2V0X3ZtYV9yZXN2X21hcCh2bWEsIHJlc3ZfbWFwKTtcXG42NzMzOlxcdFxcdFxcdHNldF92bWFfcmVzdl9mbGFncyh2bWEsIEhQQUdFX1JFU1ZfT1dORVIpO1xcbjY3MzQ6XFx0XFx0fVxcbjY3MzU6XFx0XFxuNjczNjpcXHRcXHRpZiAoY2hnIFxcdTAwM2MgMCkge1xcbjY3Mzc6XFx0XFx0XFx0LyogcmVnaW9uX2NoZygpIGFib3ZlIGNhbiByZXR1cm4gLUVOT01FTSAqL1xcbjY3Mzg6XFx0XFx0XFx0ZXJyID0gKGNoZyA9PSAtRU5PTUVNKSA/IC1FTk9NRU0gOiAtRUlOVkFMO1xcbjY3Mzk6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjY3NDA6XFx0XFx0fVxcbjY3NDE6XFx0XFxuNjc0MjpcXHRcXHRlcnIgPSBodWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwX3JzdmQoaHN0YXRlX2luZGV4KGgpLFxcbjY3NDM6XFx0XFx0XFx0XFx0XFx0Y2hnICogcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgXFx1MDAyNmhfY2cpO1xcbjY3NDQ6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuNjc0NTpcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuNjc0NjpcXHRcXG42NzQ3OlxcdFxcdGlmICh2bWEgXFx1MDAyNlxcdTAwMjYgIXZtYV90ZXN0KHZtYSwgVk1BX01BWVNIQVJFX0JJVCkgXFx1MDAyNlxcdTAwMjYgaF9jZykge1xcbjY3NDg6XFx0XFx0XFx0LyogRm9yIHByaXZhdGUgbWFwcGluZ3MsIHRoZSBodWdldGxiX2Nncm91cCB1bmNoYXJnZSBpbmZvIGhhbmdzXFxuNjc0OTpcXHRcXHRcXHQgKiBvZiB0aGUgcmVzdl9tYXAuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAyOjAxLjU0MjYyNzQ0M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjgxOTE2Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIHRhcmdldGluZyBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHVzaW5nIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIENvZGUgU2VjdGlvbiA2NzUwLTY4NDAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBsaW5lcyA2NzUwIHRocm91Z2ggNjg0MC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgY29udGV4dD8gV2hhdCBtb2R1bGUgb3IgZnVuY3Rpb24gYXJlIHdlIHdpdGhpbj8gVGhhdCByYW5nZSB1c3VhbGx5IHBvaW50cyB0byBhIHNpZ25pZmljYW50IGJsb2NrIG9mIGNvZGUsIHByb2JhYmx5IGhhbmRsaW5nIGEgY3JpdGljYWwgcHJvY2VzcyBvciBkYXRhIHN0cnVjdHVyZS4gSSdtIGFscmVhZHkgbWVudGFsbHkgZmxhZ2dpbmcgdGhpcyBhcyBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS1zZW5zaXRpdmUsIG9yIG1heWJlIGRlYWxpbmcgd2l0aCBhIHRyaWNreSBlZGdlIGNhc2UgYmFzZWQgb24gd2hlcmUgaXQgZmFsbHMgaW4gdGhlIGJyb2FkZXIgZmlsZS5cblxuTGV0J3MgYXNzdW1lLCBmb3IgdGhlIHNha2Ugb2YgYXJndW1lbnQsIHRoaXMgaXMgd2l0aGluIHRoZSBgbmV0d29ya19oYW5kbGVyYCBtb2R1bGUuIE15IGZpcnN0IHN0ZXAgd2lsbCBiZSB0byBxdWlja2x5IHNjYW4gdGhlIGxpbmVzIGZvciBhbnkgaW1tZWRpYXRlbHkgb2J2aW91cyByZWQgZmxhZ3M6IG5lc3RlZCBsb29wcywgZXhjZXNzaXZlIG1lbW9yeSBhbGxvY2F0aW9uLCByZWN1cnNpdmUgY2FsbHMsIG9yIGFueXRoaW5nIHRoYXQganVtcHMgb3V0IGFzIGFuIGFudGktcGF0dGVybi4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgaW5lZmZpY2llbnQgYWxnb3JpdGhtcy4gSXMgdGhlcmUgYSBjYWxsIHRvIGEgZGF0YWJhc2UsIGFuZCBpZiBzbywgaG93IGlzIHRoZSBxdWVyeSBjb25zdHJ1Y3RlZD8gQW55IGNoYW5jZSBvZiBTUUwgaW5qZWN0aW9uIHZ1bG5lcmFiaWxpdGllcz9cblxuR2l2ZW4gdGhlIGxpbmUgbnVtYmVycywgSSdkIGV4cGVjdCB0byBzZWUgYXQgbGVhc3QgYSBjb3VwbGUgb2YgZnVuY3Rpb25zIGNhbGxlZCBvciBkZWNsYXJhdGlvbnMuIEFyZSB0aGV5IHdlbGwtbmFtZWQ/IERvIHRoZXkgZm9sbG93IHRoZSBjb252ZW50aW9ucyBvZiB0aGUgcHJvamVjdD8gQmFkbHkgbmFtZWQgZnVuY3Rpb25zIGFyZSBhIGh1Z2Ugd2FybmluZyBzaWduLCBzdWdnZXN0aW5nIGVpdGhlciBhIGxhY2sgb2YgZm9jdXMgb3Igc29tZSBzbG9wcHkgd29yay4gSSdsbCBhbHNvIGJlIGNoZWNraW5nIGZvciBhbnkgdW5kb2N1bWVudGVkIHNpZGUgZWZmZWN0cy5cblxuRnVydGhlcm1vcmUsIEknbSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGltcGxlbWVudCBzb21lIGFzcGVjdCBvZiBhIHBhcnRpY3VsYXIgZnVuY3Rpb24sIG9yIGV2ZW4gYSBzeXN0ZW0uIEkgd2lsbCBsb29rIGZvciBjYWxscyB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvciBvdGhlciBsaWJyYXJpZXMsIGFuZCB3aGF0IHNvcnQgb2YgYXJndW1lbnRzIGFyZSBiZWluZyBwYXNzZWQsIGFuZCB3aGVyZSB0aGV5IGFyZSBiZWluZyB1c2VkLiBBcmUgdGhleSBwcm90ZWN0ZWQgYWdhaW5zdCBpbmplY3Rpb24/XG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcuIElzIGl0IHJvYnVzdD8gRG9lcyBpdCBsb2cgZXJyb3JzIHByb3Blcmx5PyBPciBpcyBpdCBhIHNlcmllcyBvZiBjYXRjaC1hbGwgYHRyeS4uLmV4Y2VwdGAgYmxvY2tzIHRoYXQgaGlkZSB1bmRlcmx5aW5nIGlzc3Vlcz8gUHJvcGVybHkgaGFuZGxpbmcgZXJyb3JzIGlzIHZpdGFsLlxuXG5GaW5hbGx5LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBmb3IgYW55IGNvbW1lbnRzLiBBcmUgdGhlcmUgY2xlYXIgZXhwbGFuYXRpb25zIG9mIHRoZSBsb2dpYz8gT3IgaXMgaXQgYSB3YWxsIG9mIHVuY29tbWVudGVkIGNvZGUgdGhhdCByZXF1aXJlcyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjYWxsIGdyYXBocyB0byB1bmRlcnN0YW5kPyBUaGUgYmVzdCBjb21tZW50cyBjbGVhcmx5IHN0YXRlIHRoZSBpbnRlbnQsIGVzcGVjaWFsbHkgZm9yIGFueSBjb21wbGV4LCBvciB1bnVzdWFsIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODQ5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjowMjowNC44MjQ1NDY0NzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIyNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2V0bGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NzUwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NzUwOlxcdFxcdFxcdCAqL1xcbjY3NTE6XFx0XFx0XFx0cmVzdl9tYXBfc2V0X2h1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2luZm8ocmVzdl9tYXAsIGhfY2csIGgpO1xcbjY3NTI6XFx0XFx0fVxcbjY3NTM6XFx0XFxuNjc1NDpcXHRcXHQvKlxcbjY3NTU6XFx0XFx0ICogVGhlcmUgbXVzdCBiZSBlbm91Z2ggcGFnZXMgaW4gdGhlIHN1YnBvb2wgZm9yIHRoZSBtYXBwaW5nLiBJZlxcbjY3NTY6XFx0XFx0ICogdGhlIHN1YnBvb2wgaGFzIGEgbWluaW11bSBzaXplLCB0aGVyZSBtYXkgYmUgc29tZSBnbG9iYWxcXG42NzU3OlxcdFxcdCAqIHJlc2VydmF0aW9ucyBhbHJlYWR5IGluIHBsYWNlIChnYmxfcmVzZXJ2ZSkuXFxuNjc1ODpcXHRcXHQgKi9cXG42NzU5OlxcdFxcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xcbjY3NjA6XFx0XFx0aWYgKGdibF9yZXN2X2dldCBcXHUwMDNjIDApIHtcXG42NzYxOlxcdFxcdFxcdGVyciA9IGdibF9yZXN2X2dldDtcXG42NzYyOlxcdFxcdFxcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDtcXG42NzYzOlxcdFxcdH1cXG42NzY0OlxcdFxcbjY3NjU6XFx0XFx0LypcXG42NzY2OlxcdFxcdCAqIENoZWNrIGVub3VnaCBodWdlcGFnZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIHJlc2VydmF0aW9uLlxcbjY3Njc6XFx0XFx0ICogSGFuZCB0aGUgcGFnZXMgYmFjayB0byB0aGUgc3VicG9vbCBpZiB0aGVyZSBhcmUgbm90XFxuNjc2ODpcXHRcXHQgKi9cXG42NzY5OlxcdFxcdGVyciA9IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0KTtcXG42NzcwOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjY3NzE6XFx0XFx0XFx0Z290byBvdXRfcHV0X3BhZ2VzO1xcbjY3NzI6XFx0XFx0Z2JsX3Jlc3ZfYWNjdGVkID0gZ2JsX3Jlc3ZfZ2V0O1xcbjY3NzM6XFx0XFxuNjc3NDpcXHRcXHQvKlxcbjY3NzU6XFx0XFx0ICogQWNjb3VudCBmb3IgdGhlIHJlc2VydmF0aW9ucyBtYWRlLiBTaGFyZWQgbWFwcGluZ3MgcmVjb3JkIHJlZ2lvbnNcXG42Nzc2OlxcdFxcdCAqIHRoYXQgaGF2ZSByZXNlcnZhdGlvbnMgYXMgdGhleSBhcmUgc2hhcmVkIGJ5IG11bHRpcGxlIFZNQXMuXFxuNjc3NzpcXHRcXHQgKiBXaGVuIHRoZSBsYXN0IFZNQSBkaXNhcHBlYXJzLCB0aGUgcmVnaW9uIG1hcCBzYXlzIGhvdyBtdWNoXFxuNjc3ODpcXHRcXHQgKiB0aGUgcmVzZXJ2YXRpb24gd2FzIGFuZCB0aGUgcGFnZSBjYWNoZSB0ZWxscyBob3cgbXVjaCBvZlxcbjY3Nzk6XFx0XFx0ICogdGhlIHJlc2VydmF0aW9uIHdhcyBjb25zdW1lZC4gUHJpdmF0ZSBtYXBwaW5ncyBhcmUgcGVyLVZNQSBhbmRcXG42NzgwOlxcdFxcdCAqIG9ubHkgdGhlIGNvbnN1bWVkIHJlc2VydmF0aW9ucyBhcmUgdHJhY2tlZC4gV2hlbiB0aGUgVk1BXFxuNjc4MTpcXHRcXHQgKiBkaXNhcHBlYXJzLCB0aGUgb3JpZ2luYWwgcmVzZXJ2YXRpb24gaXMgdGhlIFZNQSBzaXplIGFuZCB0aGVcXG42NzgyOlxcdFxcdCAqIGNvbnN1bWVkIHJlc2VydmF0aW9ucyBhcmUgc3RvcmVkIGluIHRoZSBtYXAuIEhlbmNlLCBub3RoaW5nXFxuNjc4MzpcXHRcXHQgKiBlbHNlIGhhcyB0byBiZSBkb25lIGZvciBwcml2YXRlIG1hcHBpbmdzIGhlcmVcXG42Nzg0OlxcdFxcdCAqL1xcbjY3ODU6XFx0XFx0aWYgKCF2bWEgfHwgdm1hX3Rlc3Qodm1hLCBWTUFfTUFZU0hBUkVfQklUKSkge1xcbjY3ODY6XFx0XFx0XFx0YWRkID0gcmVnaW9uX2FkZChyZXN2X21hcCwgZnJvbSwgdG8sIHJlZ2lvbnNfbmVlZGVkLCBoLCBoX2NnKTtcXG42Nzg3OlxcdFxcbjY3ODg6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGFkZCBcXHUwMDNjIDApKSB7XFxuNjc4OTpcXHRcXHRcXHRcXHRlcnIgPSBhZGQ7XFxuNjc5MDpcXHRcXHRcXHRcXHRnb3RvIG91dF9wdXRfcGFnZXM7XFxuNjc5MTpcXHRcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KGNoZyBcXHUwMDNlIGFkZCkpIHtcXG42NzkyOlxcdFxcdFxcdFxcdC8qXFxuNjc5MzpcXHRcXHRcXHRcXHQgKiBwYWdlcyBpbiB0aGlzIHJhbmdlIHdlcmUgYWRkZWQgdG8gdGhlIHJlc2VydmVcXG42Nzk0OlxcdFxcdFxcdFxcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXFxuNjc5NTpcXHRcXHRcXHRcXHQgKiBpbmRpY2F0ZXMgYSByYWNlIHdpdGggYWxsb2NfaHVnZXRsYl9mb2xpby4gIEFkanVzdFxcbjY3OTY6XFx0XFx0XFx0XFx0ICogdGhlIHN1YnBvb2wgYW5kIHJlc2VydmUgY291bnRzIG1vZGlmaWVkIGFib3ZlXFxuNjc5NzpcXHRcXHRcXHRcXHQgKiBiYXNlZCBvbiB0aGUgZGlmZmVyZW5jZS5cXG42Nzk4OlxcdFxcdFxcdFxcdCAqL1xcbjY3OTk6XFx0XFx0XFx0XFx0bG9uZyByc3ZfYWRqdXN0O1xcbjY4MDA6XFx0XFxuNjgwMTpcXHRcXHRcXHRcXHQvKlxcbjY4MDI6XFx0XFx0XFx0XFx0ICogaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoKSB3aWxsIHB1dCB0aGVcXG42ODAzOlxcdFxcdFxcdFxcdCAqIHJlZmVyZW5jZSB0byBoX2NnLVxcdTAwM2Vjc3MuIFNlZSBjb21tZW50IGJlbG93IGZvciBkZXRhaWwuXFxuNjgwNDpcXHRcXHRcXHRcXHQgKi9cXG42ODA1OlxcdFxcdFxcdFxcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKFxcbjY4MDY6XFx0XFx0XFx0XFx0XFx0aHN0YXRlX2luZGV4KGgpLFxcbjY4MDc6XFx0XFx0XFx0XFx0XFx0KGNoZyAtIGFkZCkgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcXG42ODA4OlxcdFxcbjY4MDk6XFx0XFx0XFx0XFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLFxcbjY4MTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2hnIC0gYWRkKTtcXG42ODExOlxcdFxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xcbjY4MTI6XFx0XFx0XFx0fSBlbHNlIGlmIChoX2NnKSB7XFxuNjgxMzpcXHRcXHRcXHRcXHQvKlxcbjY4MTQ6XFx0XFx0XFx0XFx0ICogVGhlIGZpbGVfcmVnaW9ucyB3aWxsIGhvbGQgdGhlaXIgb3duIHJlZmVyZW5jZSB0b1xcbjY4MTU6XFx0XFx0XFx0XFx0ICogaF9jZy1cXHUwMDNlY3NzLiBTbyB3ZSBzaG91bGQgcmVsZWFzZSB0aGUgcmVmZXJlbmNlIGhlbGRcXG42ODE2OlxcdFxcdFxcdFxcdCAqIHZpYSBodWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwX3JzdmQoKSB3aGVuIHdlIGFyZVxcbjY4MTc6XFx0XFx0XFx0XFx0ICogZG9uZS5cXG42ODE4OlxcdFxcdFxcdFxcdCAqL1xcbjY4MTk6XFx0XFx0XFx0XFx0aHVnZXRsYl9jZ3JvdXBfcHV0X3JzdmRfY2dyb3VwKGhfY2cpO1xcbjY4MjA6XFx0XFx0XFx0fVxcbjY4MjE6XFx0XFx0fVxcbjY4MjI6XFx0XFx0cmV0dXJuIGNoZztcXG42ODIzOlxcdFxcbjY4MjQ6XFx0IG91dF9wdXRfcGFnZXM6XFxuNjgyNTpcXHRcXHQvKlxcbjY4MjY6XFx0XFx0ICogUmV0dXJuIGFsbCB0aGF0IHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc3VicG9vbCwgbGV0IHN1YnBvb2xcXG42ODI3OlxcdFxcdCAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZVxcbjY4Mjg6XFx0XFx0ICogcmV0dXJuZWQgdG8gdGhlIGdsb2JhbCBwb29sLlxcbjY4Mjk6XFx0XFx0ICovXFxuNjgzMDpcXHRcXHRnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgY2hnKTtcXG42ODMxOlxcdFxcdC8qXFxuNjgzMjpcXHRcXHQgKiBUaGVyZSBtYXkgYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZlxcbjY4MzM6XFx0XFx0ICogcmVzZXJ2YXRpb25zIHRvIGNvbnN1bWUgYW5kIHRoZSBudW1iZXIgdG8gcmVzdG9yZSBub3cgaWZcXG42ODM0OlxcdFxcdCAqIHRoZXJlIGFyZSBtdWx0aXBsZSB0aHJlYWRzIGludGVyYWN0aW5nIHdpdGggdGhlIHN1YnBvb2wgLVxcbjY4MzU6XFx0XFx0ICogcmVzdG9yZSB0aGUgZGlmZmVyZW5jZSwgdGFraW5nIGludG8gYWNjb3VudCBhbnkgZ2xvYmFsXFxuNjgzNjpcXHRcXHQgKiByZXNlcnZhdGlvbnMgYWxyZWFkeSBhY3F1aXJlZC5cXG42ODM3OlxcdFxcdCAqL1xcbjY4Mzg6XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQgLSBnYmxfcmVzdl9hY2N0ZWQpO1xcbjY4Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjAyOjA0LjgyNDg3MTc0OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDY0NTAwOTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYmZzIFN1YnBvb2wgQWNjb3VudGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgY29yZSBwdXJwb3NlIG9mIHRoaXMgcGF0Y2g6IHRvIGlyb24gb3V0IHRoZSBzdWJwb29sIGFjY291bnRpbmcgbG9naWMgd2l0aGluIGh1Z2V0bGJmcywgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gbWluaW11bSBhbmQgbWF4aW11bSBsaW1pdHMsIGFuZCBpbXBvcnRhbnRseSwgZW5zdXJpbmcgaXQgYmVoYXZlcyBjb3JyZWN0bHkgdW5kZXIgY29uY3VycmVudCBzY2VuYXJpb3MgYW5kIHdpdGhpbiBgc3RhdGZzYC5cblxuSSdtIHNlZWluZyB0YXJnZXRlZCBmaXhlcyBhbmQgY2xlYW51cHMgYWNyb3NzIHNldmVyYWwgZmlsZXMuIEZpcnN0LCBhIGRvY3VtZW50YXRpb24gdXBkYXRlIGluIGBEb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0YOKAlGFsd2F5cyBnb29kIHRvIGtlZXAgdGhlIGRvY3VtZW50YXRpb24gYWxpZ25lZCB3aXRoIHRoZSBjb2RlLiBUaGVuLCBpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCB0aGUgYGh1Z2V0bGJmc19zdGF0ZnNgIGZ1bmN0aW9uIGdldHMgYSB0d2VhayB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBgbWF4X2hwYWdlcyA9PSAtMWAgc2NlbmFyaW8uIFRoZSB1cGRhdGVkIGNvbW1lbnRzIGluIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAgY2xhcmlmeSB0aGUgdXNlIG9mIGB1c2VkX2hwYWdlc2AuXG5cblRoZSBidWxrIG9mIHRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgaW4gYG1tL2h1Z2V0bGIuY2AuICBJJ20gbm90aW5nIHRoZSBvcHRpbWl6YXRpb25zIGluIGBzdWJwb29sX2lzX2ZyZWVgIChyZXBsYWNpbmcgYnJhbmNoaW5nIHdpdGggYSBkaXJlY3QgY29tcGFyaXNvbiksIGFuZCB0aGUgc2ltcGxpZmljYXRpb25zIGluIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AsIHdoZXJlIHRoZSBsb2dpYyBpcyBjbGFyaWZpZWQgcmVsYXRlZCB0byBgc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMWAuIFRoZSBjcnVjaWFsIHBhcnQgZm9yIG1lIGlzIHRoZSBmaXhlcyBpbiBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgbGltaXRgIGNhbGN1bGF0aW9uIGZvciB0aGUgbWluaW11bSBzaXplIGFjY291bnRpbmcuIFRoZSBhZGp1c3RtZW50IGluIGBhbGxvY19odWdldGxiX2ZvbGlvYCBkdXJpbmcgbWVtb3J5IGFjY291bnRpbmcgb24gZmFpbHVyZSBsb29rcyBpbXBvcnRhbnQgdG9vLiBBbHNvIHRoZSBmaXggaW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgZm9yIHRoZSBgb3V0X3B1dF9wYWdlc2AgY2xlYW51cCBwYXRoLCBlbnN1cmluZyBwcm9wZXIgYWNjb3VudGluZy5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE15IHByaW1hcnkgY29uY2VybnMgYXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zIG9yIHJlYWRzLiBJJ3ZlIHdhbGtlZCB0aHJvdWdoIHRoZSBrZXkgZnVuY3Rpb25zOlxuXG4qICAgSW4gYGh1Z2V0bGJmc19zdGF0ZnNgLCB0aGUgcmVsZXZhbnQgdmFyaWFibGVzIGFwcGVhciB0byBiZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuIGBmcmVlX3BhZ2VzYCBnZXRzIGVpdGhlciAtMSBvciBhIGNhbGN1bGF0ZWQgdmFsdWUgYmFzZWQgb24gZXhpc3RpbmcgZGF0YS4gVGhlIG91dHB1dCBidWZmZXIgYWxzbyBsb29rcyBnb29kLlxuKiAgIEluIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYGdibF9yZXN2X2dldGAgbG9va3MgaW5pdGlhbGl6ZWQgaW4gYWxsIGNvZGUgcGF0aHMuXG4qICAgSW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AsIGBnYmxfcmVzdl9hY2N0ZWRgIGlzIGluaXRpYWxpemVkIHRvIDAuIGBnYmxfcmVzdl9nZXRgIGlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBmbG93IHNlZW1zIHNvdW5kIGhlcmUuXG4qICAgSSBjYW4gc2VlIG5vIGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIE5vIGNvcHktdG8tdXNlciBvZiB1bmluaXRpYWxpemVkIG1lbW9yeTsgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzIHBhc3NlZCBhbnl3aGVyZTsgbm8gcGFkZGluZyBsZWFrczsgbm8gc3lzY2FsbCBpbnRlcmZhY2VzIHJldHVybmluZyBrZXJuZWwgbWVtb3J5LiBUaGlzIGlzIGdvb2QuXG5cblRoZSBwb3RlbnRpYWwgcmlza3MsIGZyb20gbXkgZXhwZXJpZW5jZSwgd291bGQgYmUgaW4gaW5jb3JyZWN0IHJlc2VydmF0aW9uIHRyYWNraW5nLiBJbnRlZ2VyIHVuZGVyZmxvd3Mgb3Igb3ZlcmZsb3dzLCBvciBhY2NvdW50aW5nIGRlc3luYyBhcmUgY29uY2VybnMuIFJlc291cmNlIGV4aGF1c3Rpb24gb3IgT09NIG9yIHBhZ2UgYWNjb3VudGluZyBsZWFrcyB3b3VsZCBiZSBhbm90aGVyIHJpc2suIFN0YW5kYXJkIGNvbmN1cnJlbmN5IGlzc3VlcyBhcmUgYWx3YXlzIG9uIG15IG1pbmQsIGJ1dCB0aGVzZSBhcmUgYWxsIHR5cGljYWwgbG9naWMgb3IgYWNjb3VudGluZyBidWdzLlxuXG5Ob3csIGlzIEtNU0FOIG5lZWRlZCBoZXJlPyBBYnNvbHV0ZWx5IG5vdC4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIEtBU0FOL0xPQ0tERVAva2VybmVsIGFzc2VydHMgbGlrZSBWTVxcX0JVR1xcX09OIGV0Yy4sIHdpbGwgY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmVmY291bnRpbmcgaXNzdWVzLiBXZSdyZSBsb29raW5nIGF0IGxvZ2ljYWwgYWNjb3VudGluZyBoZXJlLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgcmVxdWlyZSBLTVNBTi4gVGhlIEtNU0FOUmVhc29uaW5nIGlzIHRoYXQgdW5pbml0aWFsaXplZCByZWFkcyBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcyBhcmVuJ3QgcmVsZXZhbnQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MzksIk91dHB1dFRva2VucyI6MjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MDI6MTEuODg5Mzg4MTI0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3VicG9vbCBhY2NvdW50aW5nIGFuZCByZXNlcnZhdGlvbiBsb2dpYyBmb3IgaHVnZXRsYmZzIChpbmNsdWRpbmcgaHVnZXRsYl9zdWJwb29sX2dldF9wYWdlcywgaHVnZXRsYl9zdWJwb29sX3B1dF9wYWdlcywgc3RhdGZzIHJlcG9ydGluZywgYW5kIHJvbGxiYWNrIGhhbmRsaW5nIGluIGFsbG9jX2h1Z2V0bGJfZm9saW8gYW5kIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcykuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChzdWNoIGFzIGdibF9yZXN2X2dldCwgZ2JsX3Jlc3ZfcHV0LCBnYmxfcmVzdl9hY2N0ZWQsIGxpbWl0LCBhbmQgZnJlZV9wYWdlcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhY3Jvc3MgYWxsIGNvbnRyb2wgZmxvdyBwYXRocy4gTm8gbmV3IHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgYWxsb2NhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIG5vIHBhZGRpbmcgYnl0ZXMgYXJlIGV4cG9zZWQsIGFuZCBubyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgcGFzc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb25kaXRpb25hbCBicmFuY2hpbmcuXFxuXFxuUG90ZW50aWFsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgcGFnZSBhY2NvdW50aW5nIGluYWNjdXJhY2llcywgY29uY3VycmVuY3kvc3luY2hyb25pemF0aW9uIHVuZGVyIHJhY2UgY29uZGl0aW9ucywgb3IgbWVtb3J5IGV4aGF1c3Rpb24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdWJwb29sIGFjY291bnRpbmcgYW5kIHJlc2VydmF0aW9uIGxvZ2ljIGZvciBodWdldGxiZnMgKGluY2x1ZGluZyBodWdldGxiX3N1YnBvb2xfZ2V0X3BhZ2VzLCBodWdldGxiX3N1YnBvb2xfcHV0X3BhZ2VzLCBzdGF0ZnMgcmVwb3J0aW5nLCBhbmQgcm9sbGJhY2sgaGFuZGxpbmcgaW4gYWxsb2NfaHVnZXRsYl9mb2xpbyBhbmQgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKS5cXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKHN1Y2ggYXMgZ2JsX3Jlc3ZfZ2V0LCBnYmxfcmVzdl9wdXQsIGdibF9yZXN2X2FjY3RlZCwgbGltaXQsIGFuZCBmcmVlX3BhZ2VzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGFjcm9zcyBhbGwgY29udHJvbCBmbG93IHBhdGhzLiBObyBuZXcgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm8gcGFkZGluZyBieXRlcyBhcmUgZXhwb3NlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBpcyBwYXNzZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZy5cXG5cXG5Qb3RlbnRpYWwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBwYWdlIGFjY291bnRpbmcgaW5hY2N1cmFjaWVzLCBjb25jdXJyZW5jeS9zeW5jaHJvbml6YXRpb24gdW5kZXIgcmFjZSBjb25kaXRpb25zLCBvciBtZW1vcnkgZXhoYXVzdGlvbiwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowx7bp7[1] Phase: Succeeded StartedAt: 2026-09-09 22:02:22 +0000 UTC FinishedAt: 2026-09-09 22:02:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 22:02:22 +0000 UTC FinishedAt: 2026-09-09 22:02:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2] Phase: Succeeded StartedAt: 2026-09-09 22:02:22 +0000 UTC FinishedAt: 2026-09-10 01:48:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 22:02:22 +0000 UTC FinishedAt: 2026-09-10 01:48:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 22:02:22 +0000 UTC FinishedAt: 2026-09-09 22:02:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 22:02:22 +0000 UTC FinishedAt: 2026-09-09 22:02:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowx7bp7/series-workflowx7bp7-convert-artifact-3606103629/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 22:02:33 +0000 UTC FinishedAt: 2026-09-09 22:19:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 22:02:33 +0000 UTC FinishedAt: 2026-09-09 22:19:41 +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:*db84f17f-2de8-41d3-91dd-8a07c8dc8040,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-workflowx7bp7/series-workflowx7bp7-convert-artifact-3606103629/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": "772c5a73-85b0-41b1-a554-ede3affe5e0e", "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-workflowx7bp7/series-workflowx7bp7-build-action-1491404483/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 22:02:33 +0000 UTC FinishedAt: 2026-09-09 22:19:31 +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:*db84f17f-2de8-41d3-91dd-8a07c8dc8040,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-workflowx7bp7/series-workflowx7bp7-convert-artifact-3606103629/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": "772c5a73-85b0-41b1-a554-ede3affe5e0e", "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-workflowx7bp7/series-workflowx7bp7-build-action-1491404483/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 22:19:41 +0000 UTC FinishedAt: 2026-09-09 22:19:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 22:19:41 +0000 UTC FinishedAt: 2026-09-09 22:19:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 22:19:41 +0000 UTC FinishedAt: 2026-09-09 22:19:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 22:19:41 +0000 UTC FinishedAt: 2026-09-09 22:19:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowx7bp7/series-workflowx7bp7-convert-artifact-1592156072/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 22:19:51 +0000 UTC FinishedAt: 2026-09-09 22:22:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 22:19:51 +0000 UTC FinishedAt: 2026-09-09 22:22:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*772c5a73-85b0-41b1-a554-ede3affe5e0e,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-workflowx7bp7/series-workflowx7bp7-build-action-1491404483/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-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 22:22:18 +0000 UTC FinishedAt: 2026-09-09 22:22:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 22:22:18 +0000 UTC FinishedAt: 2026-09-09 22:22:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 22:22:18 +0000 UTC FinishedAt: 2026-09-09 22:40:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 22:22:18 +0000 UTC FinishedAt: 2026-09-09 22:40:47 +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:*db84f17f-2de8-41d3-91dd-8a07c8dc8040,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-workflowx7bp7/series-workflowx7bp7-convert-artifact-1592156072/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": "f186d66e-bcc7-41ea-abf0-132a9d1f6b07", "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-workflowx7bp7/series-workflowx7bp7-build-action-237985108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 22:22:18 +0000 UTC FinishedAt: 2026-09-09 22:40:37 +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:*db84f17f-2de8-41d3-91dd-8a07c8dc8040,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-workflowx7bp7/series-workflowx7bp7-convert-artifact-1592156072/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": "f186d66e-bcc7-41ea-abf0-132a9d1f6b07", "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-workflowx7bp7/series-workflowx7bp7-build-action-237985108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 22:40:47 +0000 UTC FinishedAt: 2026-09-09 22:40:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 22:40:47 +0000 UTC FinishedAt: 2026-09-09 22:40:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 22:40:47 +0000 UTC FinishedAt: 2026-09-09 22:42:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 22:40:47 +0000 UTC FinishedAt: 2026-09-09 22:42:29 +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:*f186d66e-bcc7-41ea-abf0-132a9d1f6b07,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-workflowx7bp7/series-workflowx7bp7-build-action-237985108/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-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 22:42:39 +0000 UTC FinishedAt: 2026-09-10 01:48:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 22:42:39 +0000 UTC FinishedAt: 2026-09-10 01:48:26 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"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:*772c5a73-85b0-41b1-a554-ede3affe5e0e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f186d66e-bcc7-41ea-abf0-132a9d1f6b07,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-workflowx7bp7/series-workflowx7bp7-build-action-1491404483/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-workflowx7bp7/series-workflowx7bp7-build-action-237985108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 22:42:39 +0000 UTC FinishedAt: 2026-09-09 22:42:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 22:42:39 +0000 UTC FinishedAt: 2026-09-09 22:42:44 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"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-workflowx7bp7/series-workflowx7bp7-convert-artifact-1418191073/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 22:42:39 +0000 UTC FinishedAt: 2026-09-09 22:42:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 22:42:39 +0000 UTC FinishedAt: 2026-09-09 22:42:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 22:42:39 +0000 UTC FinishedAt: 2026-09-09 22:42:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 22:42:49 +0000 UTC FinishedAt: 2026-09-10 01:48:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlb_reserve_pages","alloc_hugetlb_folio","hugetlbfs_statfs","hugetlb_unreserve_pages","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"163169ef-3d75-4bd6-99d5-8b5a1a932fcb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 22:42:49 +0000 UTC FinishedAt: 2026-09-10 01:48:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*772c5a73-85b0-41b1-a554-ede3affe5e0e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f186d66e-bcc7-41ea-abf0-132a9d1f6b07,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-workflowx7bp7/series-workflowx7bp7-build-action-1491404483/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-workflowx7bp7/series-workflowx7bp7-build-action-237985108/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-workflowx7bp7/series-workflowx7bp7-convert-artifact-1418191073/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,}