Name: series-workflowrc25n Phase: Running StartedAt: 2026-07-17 22:19:08 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrc25n[0] Phase: Running StartedAt: 2026-07-17 22:19:08 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrc25n[0].run-triage Phase: Running StartedAt: 2026-07-17 22:19:08 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrc25n[0].run-triage(0) Phase: Running StartedAt: 2026-07-17 22:19:08 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "5093dba1014c1d7f7e247fd118f0fa8f22136046", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KSM", "USERFAULTFD", "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE", "MIGRATION", "FS_DAX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "5093dba1014c1d7f7e247fd118f0fa8f22136046", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KSM", "USERFAULTFD", "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE", "MIGRATION", "FS_DAX" ], "series_id": "b5c827e8-78a4-494c-b925-417c34a60e85" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "mmap_zero_prepare", "try_to_merge_with_ksm_page", "rmap_walk_ksm", "remove_migration_pte", "copy_vma_and_data", "move_present_ptes", "relocate_vma_down" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tTTSYjMzQ7LAogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OywKICAgICYjMzQ7RlNfREFYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW1hcF96ZXJvX3ByZXBhcmUmIzM0OywKICAgICYjMzQ7dHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2UmIzM0OywKICAgICYjMzQ7cm1hcF93YWxrX2tzbSYjMzQ7LAogICAgJiMzNDtyZW1vdmVfbWlncmF0aW9uX3B0ZSYjMzQ7LAogICAgJiMzNDtjb3B5X3ZtYV9hbmRfZGF0YSYjMzQ7LAogICAgJiMzNDttb3ZlX3ByZXNlbnRfcHRlcyYjMzQ7LAogICAgJiMzNDtyZWxvY2F0ZV92bWFfZG93biYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdG8gaGFuZGxlIE1BUF9QUklWQVRFIG1hcHBpbmdzIG9mIC9kZXYvemVybyBhcyB0cnVseSBhbm9ueW1vdXMgbWFwcGluZ3MsIHJhdGhlciB0aGFuIGZpbGUtYmFja2VkIG1hcHBpbmdzIHdpdGggYSBzcGVjaWFsIGZsYWcuIEl0IGludHJvZHVjZXMgdmlydHVhbCBwYWdlIG9mZnNldHMgZm9yIFZNQXMgdG8gY29ycmVjdGx5IHRyYWNrIGFuZCBtZXJnZSB0aGVzZSBtYXBwaW5ncy4gVGhpcyBhZmZlY3RzIHZhcmlvdXMgbW0gc3Vic3lzdGVtcyBpbmNsdWRpbmcgS1NNLCBtaWdyYXRpb24sIG1yZW1hcCwgdXNlcmZhdWx0ZmQsIGFuZCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbW1hcCwgbXJlbWFwLCB1c2VyZmF1bHRmZCwgZXRjLiwgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjEzM2Y2MGM3NmEwN2ZiZWQxZDAzMGQxNDkyYmFjOGM5NjE0NTNmNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDE3IDIyOjQ3OjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9tZW0uYyBiL2RyaXZlcnMvY2hhci9tZW0uY1xuaW5kZXggNjMyNTNkMWRlNWQ3MGIuLmRjZmQ4OTZiNzMzZDhmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2NoYXIvbWVtLmNcbkBAIC01MDYsMTEgJiM0Mzs1MDYsNyBAQCBzdGF0aWMgaW50IG1tYXBfemVyb19wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXG4gXHRpZiAodm1hX2Rlc2NfdGVzdChkZXNjLCBWTUFfU0hBUkVEX0JJVCkpXG4gXHRcdHJldHVybiBzaG1lbV96ZXJvX3NldHVwX2Rlc2MoZGVzYyk7XG4gXG4tXHQvKlxuLVx0ICogVGhpcyBpcyBhIGhpZ2hseSB1bmlxdWUgc2l0dWF0aW9uIHdoZXJlIHdlIG1hcmsgYSBNQVBfUFJJVkFURSBtYXBwaW5nXG4tXHQgKiBvZiAvZGV2L3plcm8gYW5vbnltb3VzLCBkZXNwaXRlIGl0IG5vdCBiZWluZy5cbi1cdCAqL1xuLVx0dm1hX2Rlc2Nfc2V0X2Fub255bW91cyhkZXNjKTtcbiYjNDM7XHQvKiBNQVBfUFJJVkFURSBzZW1hbnRpY3MgYXJlIHRha2VuIGNhcmUgZm9yIHVzIGJ5IGNvcmUgbW0uICovXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNjk4LDcgJiM0Mzs2OTQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1lbWRldiB7XG4gI2lmZGVmIENPTkZJR19ERVZQT1JUXG4gXHRbNF0gPSB7IFwmIzM0O3BvcnRcJiMzNDssIFx1MDAyNnBvcnRfZm9wcywgMCwgMCB9LFxuICNlbmRpZlxuLVx0WzVdID0geyBcJiMzNDt6ZXJvXCYjMzQ7LCBcdTAwMjZ6ZXJvX2ZvcHMsIEZNT0RFX05PV0FJVCwgMDY2NiB9LFxuJiM0MztcdFtERVZaRVJPX01JTk9SXSA9IHsgXCYjMzQ7emVyb1wmIzM0OywgXHUwMDI2emVyb19mb3BzLCBGTU9ERV9OT1dBSVQsIDA2NjYgfSxcbiBcdFs3XSA9IHsgXCYjMzQ7ZnVsbFwmIzM0OywgXHUwMDI2ZnVsbF9mb3BzLCAwLCAwNjY2IH0sXG4gXHRbOF0gPSB7IFwmIzM0O3JhbmRvbVwmIzM0OywgXHUwMDI2cmFuZG9tX2ZvcHMsIEZNT0RFX05PV0FJVCwgMDY2NiB9LFxuIFx0WzldID0geyBcJiMzNDt1cmFuZG9tXCYjMzQ7LCBcdTAwMjZ1cmFuZG9tX2ZvcHMsIEZNT0RFX05PV0FJVCwgMDY2NiB9LFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggODdmZWFhNWEyYjc4MGUuLjdmYWJlNmM2NmI0YjczIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC03NDAsNiAmIzQzOzc0MCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmYXVsdF9mbGFnX2FsbG93X3JldHJ5X2ZpcnN0KGVudW0gZmF1bHRfZmxhZyBmbGFncylcbiBcdHsgRkFVTFRfRkxBR19JTlRFUlJVUFRJQkxFLFx0XCYjMzQ7SU5URVJSVVBUSUJMRVwmIzM0OyB9LCBcXFxuIFx0eyBGQVVMVF9GTEFHX1ZNQV9MT0NLLFx0XHRcJiMzNDtWTUFfTE9DS1wmIzM0OyB9XG4gXG4mIzQzOy8qIC9kZXYvemVybyBtaW5vciBkZXZpY2UgbnVtYmVyLiBTcGVjaWFsIGR1ZSB0byBNQVBfUFJJVkFURSBzZW1hbnRpY3MuICovXG4mIzQzOyNkZWZpbmUgREVWWkVST19NSU5PUlx0NVxuJiM0MztcbiAvKlxuICAqIHZtX2ZhdWx0IGlzIGZpbGxlZCBieSB0aGUgcGFnZWZhdWx0IGhhbmRsZXIgYW5kIHBhc3NlZCB0byB0aGUgdm1hJiMzOTtzXG4gICogLVx1MDAzZWZhdWx0IGZ1bmN0aW9uLiBUaGUgdm1hJiMzOTtzIC1cdTAwM2VmYXVsdCBpcyByZXNwb25zaWJsZSBmb3IgcmV0dXJuaW5nIGEgYml0bWFza1xuQEAgLTE1NTEsMTIgJiM0MzsxNTU0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHZtYV9zZXRfYW5vbnltb3VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0dm1hLVx1MDAzZXZtX29wcyA9IE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfZGVzY19zZXRfYW5vbnltb3VzKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXG4te1xuLVx0ZGVzYy1cdTAwM2V2bV9vcHMgPSBOVUxMO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2Fub255bW91cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHZtYV9pc19hbm9ueW1vdXMoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0cmV0dXJuICF2bWEtXHUwMDNldm1fb3BzO1xuIH1cbkBAIC00MzQ5LDkgJiM0Mzs0MzQ3LDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9wYWdlcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiAgKiBJZiBAdm1hIGlzIGEgTUFQX1BSSVZBVEUgZmlsZS1iYWNrZWQgbWFwcGluZywgdGhlbiB0aGlzIHJldHVybnMgdGhlXG4gICogcGFnZSBvZmZzZXQgd2l0aGluIHRoZSBmaWxlLlxuICAqXG4tICogRWRnZSBjYXNlczogbm9tbXUgZG9lcyBub3QgYWJpZGUgYnkgdGhlc2UsIE1BUF9QUklWQVRFLS9kZXYvemVybyBzYXRpc2ZpZXNcbi0gKiB2bWFfaXNfYW5vbnltb3VzKCkgYnV0IGhhcyBmaWxlLWJhY2tlZCBwYWdlIG9mZnNldCwgYW5kIE1BUF9QUklWQVRFLXBmbm1hcFxuLSAqIHJlZ2lvbnMgaGF2ZSB0aGVpciBwYWdlIG9mZnNldCBzZXQgdG8gdGhlIGZpcnN0IFBGTiBpbiB0aGUgcmFuZ2UuXG4mIzQzOyAqIEVkZ2UgY2FzZXM6IG5vbW11IGRvZXMgbm90IGFiaWRlIGJ5IHRoZXNlIGFuZCBDb1cgTUFQX1BSSVZBVEUtcGZubWFwIHJlZ2lvbnNcbiYjNDM7ICogaGF2ZSB0aGVpciBwYWdlIG9mZnNldCBzZXQgdG8gdGhlIGZpcnN0IFBGTiBpbiB0aGUgcmFuZ2UuXG4gICpcbiAgKiBSZXR1cm5zOiBUaGUgcGFnZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIEB2bWEuXG4gICovXG5AQCAtNDM5Myw2ICYjNDM7NDM5MCw2NSBAQCBzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1hX2xhc3RfcGdvZmYoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRyZXR1cm4gdm1hX2VuZF9wZ29mZih2bWEpIC0gMTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB2bWFfc3RhcnRfdmlydF9wZ29mZigpIC0gR2V0IHRoZSB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IG9mIHRoZSBzdGFydCBvZiBAdm1hXG4mIzQzOyAqIEB2bWE6IFRoZSBWTUEgd2hvc2UgdmlydHVhbCBwYWdlIG9mZnNldCBpcyByZXF1aXJlZC5cbiYjNDM7ICpcbiYjNDM7ICogSWYgdW5mYXVsdGVkLCB0aGVuIHRoaXMgaXMgdm1hLVx1MDAzZXZtX3N0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBpZiBmYXVsdGVkIHRoZW4gdGhlXG4mIzQzOyAqIHZpcnR1YWwgcGFnZSBvZmZzZXQgYXQgdGhlIHRpbWUgb2YgZmlyc3QgZmF1bHQuXG4mIzQzOyAqXG4mIzQzOyAqIElmIHRoZSBWTUEgaXMgYW5vbnltb3VzLCB0aGlzIHJldHVybnMgdGhlIHNhbWUgdmFsdWUgYXMgdm1hX3N0YXJ0X3Bnb2ZmKCkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgdmFsdWUgaXMgdXNlZCBmb3IgdHJhY2tpbmcgTUFQX1BSSVZBVEUgZmlsZS1iYWNrZWQgbWFwcGluZ3MgYnkgdGhlaXJcbiYjNDM7ICogdmlydHVhbCBwYWdlIG9mZnNldC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogVGhlIHZpcnR1YWwgcGFnZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIEB2bWEuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1hX3N0YXJ0X3ZpcnRfcGdvZmYoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4mIzQzO3tcbiYjNDM7XHRwZ29mZl90IHBnb2ZmID0gMDtcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfNjRCSVRcbiYjNDM7XHRwZ29mZiAmIzQzOz0gdm1hLVx1MDAzZV9fdm1fdmlydF9wZ29mZl9oaTtcbiYjNDM7XHRwZ29mZiBcdTAwM2NcdTAwM2M9IDMyO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRwZ29mZiAmIzQzOz0gdm1hLVx1MDAzZV9fdm1fdmlydF9wZ29mZl9sbztcbiYjNDM7XHRyZXR1cm4gcGdvZmY7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB2bWFfZW5kX3ZpcnRfcGdvZmYoKSAtIEdldCB0aGUgdmlydHVhbCBwYWdlIG9mZnNldCBvZiB0aGUgZXhjbHVzaXZlIGVuZCBvZlxuJiM0MzsgKiBAdm1hLlxuJiM0MzsgKiBAdm1hOiBUaGUgVk1BIHdob3NlIGVuZCB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IGlzIHJlcXVpcmVkLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIHJldHVybnMgdGhlIHZpcnR1YWwgZXhjbHVzaXZlIGVuZCBwYWdlIG9mZnNldCBvZiBAdm1hLCB3aGljaCBpcyB1c2VmdWxcbiYjNDM7ICogZm9yIGV4cHJlc3NpbmcgcGFnZSBvZmZzZXQgcmFuZ2VzLlxuJiM0MzsgKlxuJiM0MzsgKiBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKCkgZm9yIGEgZGVzY3JpcHRpb24gb2YgVk1BXG4mIzQzOyAqIHZpcnR1YWwgcGFnZSBvZmZzZXRzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiBUaGUgZXhjbHVzaXZlIGVuZCB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IG9mIEB2bWEuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1hX2VuZF92aXJ0X3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSkgJiM0Mzsgdm1hX3BhZ2VzKHZtYSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB2bWFfbGFzdF92aXJ0X3Bnb2ZmKCkgLSBHZXQgdGhlIHZpcnR1YWwgcGFnZSBvZmZzZXQgb2YgdGhlIGxhc3QgcGFnZSBpblxuJiM0MzsgKiBAdm1hLlxuJiM0MzsgKiBAdm1hOiBUaGUgVk1BIHdob3NlIGxhc3QgdmlydHVhbCBwYWdlIG9mZnNldCBpcyByZXF1aXJlZC5cbiYjNDM7ICpcbiYjNDM7ICogU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB2bWFfc3RhcnRfdmlydF9wZ29mZigpIGZvciBhIGRlc2NyaXB0aW9uIG9mIFZNQVxuJiM0MzsgKiB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0cy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogVGhlIGxhc3QgdmlydHVhbCBwYWdlIG9mZnNldCBvZiBAdm1hLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9sYXN0X3ZpcnRfcGdvZmYoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdm1hX2VuZF92aXJ0X3Bnb2ZmKHZtYSkgLSAxO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfZGVzY19zaXplKGNvbnN0IHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXG4ge1xuIFx0cmV0dXJuIGRlc2MtXHUwMDNlZW5kIC0gZGVzYy1cdTAwM2VzdGFydDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbmluZGV4IDkzOWI1ZWE4YzllMGJlLi4yNzEwNjI4MDU5YjE1YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5AQCAtOTY3LDYgJiM0Mzs5NjcsNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xuIFx0ICovXG4gXHR1bnNpZ25lZCBpbnQgdm1fbG9ja19zZXE7XG4gI2VuZGlmXG4mIzQzO1x0dW5zaWduZWQgaW50IF9fdm1fdmlydF9wZ29mZl9sbzsgLyogTG93IDMyLWJpdHMgb2YgdmlydHVhbCBwZ29mZi4gKi9cbiBcdC8qXG4gXHQgKiBBIGZpbGUmIzM5O3MgTUFQX1BSSVZBVEUgdm1hIGNhbiBiZSBpbiBib3RoIGlfbW1hcCB0cmVlIGFuZCBhbm9uX3ZtYVxuIFx0ICogbGlzdCwgYWZ0ZXIgYSBDT1cgb2Ygb25lIG9mIHRoZSBmaWxlIHBhZ2VzLlx0QSBNQVBfU0hBUkVEIHZtYVxuQEAgLTEwNDEsNiAmIzQzOzEwNDIsOSBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xuICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQ1xuIFx0c3RydWN0IGxvY2tkZXBfbWFwIHZtbG9ja19kZXBfbWFwO1xuICNlbmRpZlxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmZGVmIENPTkZJR182NEJJVFxuJiM0MztcdHVuc2lnbmVkIGludCBfX3ZtX3ZpcnRfcGdvZmZfaGk7ICAvKiBIaWdoIDMyLWJpdHMgb2YgdmlydHVhbCBwZ29mZi4gKi9cbiAjZW5kaWZcbiBcdC8qXG4gXHQgKiBGb3IgYXJlYXMgd2l0aCBhbiBhZGRyZXNzIHNwYWNlIGFuZCBiYWNraW5nIHN0b3JlLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbmluZGV4IGM2ZmM3ODNhYWVlNTc2Li45MDEzMGYyOGU3YTg3ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTExMDEsNiAmIzQzOzExMDEsNzIgQEAgc3RhdGljIGlubGluZSBwZ29mZl90IGxpbmVhcl9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0cmV0dXJuIHBnb2ZmO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBwZ29mZl90IF9fbGluZWFyX3ZpcnRfcGFnZV9pbmRleChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4mIzQzO3tcbiYjNDM7XHRwZ29mZl90IHBnb2ZmO1xuJiM0MztcbiYjNDM7XHRwZ29mZiA9IGxpbmVhcl9wYWdlX2RlbHRhKHZtYSwgYWRkcmVzcyk7XG4mIzQzO1x0cGdvZmYgJiM0Mzs9IHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSk7XG4mIzQzO1x0cmV0dXJuIHBnb2ZmO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogbGluZWFyX3ZpcnRfcGFnZV9pbmRleCgpIC0gRGV0ZXJtaW5lIHRoZSBhYnNvbHV0ZSB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IG9mXG4mIzQzOyAqIEBhZGRyZXNzIHdpdGhpbiBAdm1hLlxuJiM0MzsgKiBAdm1hOiBBbiBhbm9ueW1vdXMgb3IgTUFQX1BSSVZBVEUgZmlsZS1iYWNrZWQgVk1BIGluIHdoaWNoIEBhZGRyZXNzIHJlc2lkZXMuXG4mIzQzOyAqIEBhZGRyZXNzOiBUaGUgYWRkcmVzcyB3aG9zZSBhYnNvbHV0ZSBwYWdlIG9mZnNldCBpcyByZXF1aXJlZC5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyByZXR1cm5zIHRoZSB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IG9mIEBhZGRyZXNzLCB3aGljaCBpcyB0aGUgcGFnZSBvZmZzZXRcbiYjNDM7ICogdGhlIGFkZHJlc3MgcG9zc2Vzc2VkIGF0IHRoZSB0aW1lIHRoZSBWTUEgd2FzIGZpcnN0IGZhdWx0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqIEZvciBhbm9ueW1vdXMgbWFwcGluZ3MsIHRoaXMgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSBhcyBsaW5lYXJfcGFnZV9pbmRleCgpLlxuJiM0MzsgKlxuJiM0MzsgKiBGb3IgTUFQX1BSSVZBVEUgZmlsZS1iYWNrZWQgbWFwcGluZ3MsIHRoaXMgcmV0dXJucyB0aGUgdmlydHVhbCBwYWdlIG9mZnNldCBvZlxuJiM0MzsgKiBAYWRkcmVzcywgd2hpY2ggaXMgdGhlIHBhZ2Ugb2Zmc2V0IHRoZSBhZGRyZXNzIHBvc3Nlc3NlZCBhdCB0aGUgdGltZSB0aGUgVk1BXG4mIzQzOyAqIHdhcyBmaXJzdCBmYXVsdGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBJdCBpcyBub3QgdmFsaWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBzaGFyZWQgZmlsZS1iYWNrZWQgbWFwcGluZ3MuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IFRoZSBhYnNvbHV0ZSB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IG9mIEBhZGRyZXNzIHdpdGhpbiBAdm1hLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBwZ29mZl90IGxpbmVhcl92aXJ0X3BhZ2VfaW5kZXgoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHBnb2ZmX3QgcGdvZmYgPSBfX2xpbmVhcl92aXJ0X3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTtcbiYjNDM7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKHZtYV90ZXN0KHZtYSwgVk1BX1NIQVJFRF9CSVQpKTtcbiYjNDM7XHRpZiAoIXZtYS1cdTAwM2V2bV9maWxlKSAvKiBJcyBhbm9ueW1vdXMgZXhjZXB0IE1BUF9QUklWQVRFLS9kZXYvemVybyAqL1xuJiM0MztcdFx0Vk1fV0FSTl9PTl9PTkNFKHBnb2ZmICE9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcykpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGdvZmY7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBsaW5lYXJfZm9saW9fcGFnZV9pbmRleCgpIC0gRGV0ZXJtaW5lIHRoZSBhYnNvbHV0ZSBwYWdlIG9mZnNldCBvZlxuJiM0MzsgKiBAYWRkcmVzcyB3aXRoaW4gQHZtYSBmcm9tIEBmb2xpby5cbiYjNDM7ICogQGZvbGlvOiBUaGUgZm9saW8gd2hvc2UgbGluZWFyIHBhZ2UgaW5kZXggaXMgc291Z2h0LlxuJiM0MzsgKiBAdm1hOiBUaGUgVk1BIGluIHdoaWNoIEBhZGRyZXNzIHJlc2lkZXMuXG4mIzQzOyAqIEBhZGRyZXNzOiBUaGUgYWRkcmVzcyB3aG9zZSBhYnNvbHV0ZSBwYWdlIG9mZnNldCBpcyByZXF1aXJlZC5cbiYjNDM7ICpcbiYjNDM7ICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIG9idGFpbiB0aGUgdmlydHVhbCBsaW5lYXIgcGFnZSBpbmRleCBiYXNlZCBvbiB3aGV0aGVyXG4mIzQzOyAqIEBmb2xpbyBpcyBhbm9ueW1vdXMgb3Igbm90LlxuJiM0MzsgKlxuJiM0MzsgKiBTZWUgdGhlIGRlc2NyaXB0aW9ucyBvZiBsaW5lYXJfdmlydF9wYWdlX2luZGV4KCkgYW5kIGxpbmVhcl9wYWdlX2luZGV4KCkgZm9yXG4mIzQzOyAqIGRldGFpbHMgb2YgZWFjaC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogVGhlIGFic29sdXRlIHBhZ2Ugb2Zmc2V0IG9mIEBhZGRyZXNzIHdpdGhpbiBAdm1hLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBwZ29mZl90IGxpbmVhcl9mb2xpb19wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiYjNDM7e1xuJiM0MztcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKVxuJiM0MztcdFx0cmV0dXJuIGxpbmVhcl92aXJ0X3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyk7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IHdhaXRfcGFnZV9rZXkge1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdGludCBiaXRfbnI7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ybWFwLmggYi9pbmNsdWRlL2xpbnV4L3JtYXAuaFxuaW5kZXggOGRjMDg3MWU1ZjAwMTEuLmE0OGFlOTU3NWJkMjYyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcm1hcC5oXG5AQCAtODcxLDYgJiM0Mzs4NzEsNyBAQCBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsge1xuIFx0cHRlX3QgKnB0ZTtcbiBcdHNwaW5sb2NrX3QgKnB0bDtcbiBcdHVuc2lnbmVkIGludCBmbGFncztcbiYjNDM7XHRib29sIGlzX2Fub25fd2FsaztcbiB9O1xuIFxuICNkZWZpbmUgREVGSU5FX0ZPTElPX1ZNQV9XQUxLKG5hbWUsIF9mb2xpbywgX3ZtYSwgX2FkZHJlc3MsIF9mbGFncylcdFxcXG5AQCAtODgxLDYgJiM0Mzs4ODIsNyBAQCBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsge1xuIFx0XHQudm1hID0gX3ZtYSxcdFx0XHRcdFx0XHRcXFxuIFx0XHQuYWRkcmVzcyA9IF9hZGRyZXNzLFx0XHRcdFx0XHRcXFxuIFx0XHQuZmxhZ3MgPSBfZmxhZ3MsXHRcdFx0XHRcdFxcXG4mIzQzO1x0XHQuaXNfYW5vbl93YWxrID0gZm9saW9fdGVzdF9hbm9uKF9mb2xpbyksXHRcdFxcXG4gXHR9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCA5YjFmM2IyNGY3ZTBkMC4uYWJjNjVkNjA4YzIzOTIgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMjg4Nyw3ICYjNDM7Mjg4Nyw4IEBAIGludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtXG4gXHRcdH1cbiBcbiBcdFx0Zm9saW9fbW92ZV9hbm9uX3JtYXAoc3JjX2ZvbGlvLCBkc3Rfdm1hKTtcbi1cdFx0c3JjX2ZvbGlvLVx1MDAzZWluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgoZHN0X3ZtYSwgZHN0X2FkZHIpO1xuJiM0MztcdFx0c3JjX2ZvbGlvLVx1MDAzZWluZGV4ID0gbGluZWFyX2ZvbGlvX3BhZ2VfaW5kZXgoc3JjX2ZvbGlvLCBkc3Rfdm1hLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIGRzdF9hZGRyKTtcbiBcbiBcdFx0X2RzdF9wbWQgPSBmb2xpb19ta19wbWQoc3JjX2ZvbGlvLCBkc3Rfdm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4gXHRcdC8qIEZvbGxvdyBtcmVtYXAoKSBiZWhhdmlvciBhbmQgdHJlYXQgdGhlIGVudHJ5IGRpcnR5IGFmdGVyIHRoZSBtb3ZlICovXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IGYyNjQyM2RlNGNhMjg3Li40MTU2MWZkZWI1NmQwYSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC0yNDAsNiAmIzQzOzI0MCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBtbWFwX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiBcdGludCBlcnIgPSB2ZnNfbW1hcChmaWxlLCB2bWEpO1xuIFxuJiM0MztcdC8qIEhvb2tzIGNhbm5vdCBtYXJrIHRoZW1zZWx2ZXMgYW5vbnltb3VzLiAqL1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0Uodm1hX2lzX2Fub255bW91cyh2bWEpKSlcbiYjNDM7XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1xuIFx0aWYgKGxpa2VseSghZXJyKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtOTMzLDcgJiM0Mzs5MzcsOCBAQCBmb2xpb193aXRoaW5fcmFuZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdHBnb2ZmX2ZvbGlvID0gZm9saW9fcGdvZmYoZm9saW8pO1xuLVx0cGdvZmZfdm1hX3N0YXJ0ID0gdm1hX3N0YXJ0X3Bnb2ZmKHZtYSk7XG4mIzQzO1x0cGdvZmZfdm1hX3N0YXJ0ID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSA/XG4mIzQzO1x0XHR2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpIDogdm1hX3N0YXJ0X3Bnb2ZmKHZtYSk7XG4gXG4gXHRpZiAoc3RhcnQgXHUwMDNjIHZtYS1cdTAwM2V2bV9zdGFydClcbiBcdFx0c3RhcnQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG5AQCAtMTAwNSwxOSAmIzQzOzEwMTAsOSBAQCB2b2lkIG1sb2NrX2RyYWluX3JlbW90ZShpbnQgY3B1KTtcbiBcbiBleHRlcm4gcG1kX3QgbWF5YmVfcG1kX21rd3JpdGUocG1kX3QgcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gXG4tLyoqXG4tICogdm1hX2FkZHJlc3MgLSBGaW5kIHRoZSB2aXJ0dWFsIGFkZHJlc3MgYSBwYWdlIHJhbmdlIGlzIG1hcHBlZCBhdFxuLSAqIEB2bWE6IFRoZSB2bWEgd2hpY2ggbWFwcyB0aGlzIG9iamVjdC5cbi0gKiBAcGdvZmY6IFRoZSBwYWdlIG9mZnNldCB3aXRoaW4gaXRzIG9iamVjdC5cbi0gKiBAbnJfcGFnZXM6IFRoZSBudW1iZXIgb2YgcGFnZXMgdG8gY29uc2lkZXIuXG4tICpcbi0gKiBJZiBhbnkgcGFnZSBpbiB0aGlzIHJhbmdlIGlzIG1hcHBlZCBieSB0aGlzIFZNQSwgcmV0dXJuIHRoZSBmaXJzdCBhZGRyZXNzXG4tICogd2hlcmUgYW55IG9mIHRoZXNlIHBhZ2VzIGFwcGVhci4gIE90aGVyd2lzZSwgcmV0dXJuIC1FRkFVTFQuXG4tICovXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hZGRyZXNzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHRwZ29mZl90IHBnb2ZmLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX192bWFfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjNDM7XHRcdHBnb2ZmX3QgcGdvZmYsIHBnb2ZmX3QgcGdvZmZfc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4ge1xuLVx0Y29uc3QgcGdvZmZfdCBwZ29mZl9zdGFydCA9IHZtYV9zdGFydF9wZ29mZih2bWEpO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xuIFxuIFx0aWYgKHBnb2ZmIFx1MDAzZT0gcGdvZmZfc3RhcnQpIHtcbkBAIC0xMDM1LDIzICYjNDM7MTAzMCw2OCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hX2FkZHJlc3MoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRyZXR1cm4gYWRkcmVzcztcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB2bWFfZmlsZWJhY2tlZF9hZGRyZXNzIC0gRmluZCB0aGUgdmlydHVhbCBhZGRyZXNzIGEgZmlsZS1iYWNrZWQgcGFnZSByYW5nZSBpc1xuJiM0MzsgKiBtYXBwZWQgYXQuXG4mIzQzOyAqIEB2bWE6IFRoZSB2bWEgd2hpY2ggbWFwcyB0aGlzIG9iamVjdC5cbiYjNDM7ICogQHBnb2ZmOiBUaGUgcGFnZSBvZmZzZXQgd2l0aGluIGl0cyBvYmplY3QuXG4mIzQzOyAqIEBucl9wYWdlczogVGhlIG51bWJlciBvZiBwYWdlcyB0byBjb25zaWRlci5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogSWYgYW55IHBhZ2UgaW4gdGhpcyByYW5nZSBpcyBtYXBwZWQgYnkgdGhpcyBWTUEsIHJldHVybiB0aGUgZmlyc3RcbiYjNDM7ICogYWRkcmVzcyB3aGVyZSBhbnkgb2YgdGhlc2UgcGFnZXMgYXBwZWFyLiAgT3RoZXJ3aXNlLCByZXR1cm4gLUVGQVVMVC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfZmlsZWJhY2tlZF9hZGRyZXNzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0cGdvZmZfdCBwZ29mZiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdFZNX1dBUk5fT05fT05DRSh2bWFfaXNfYW5vbnltb3VzKHZtYSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX192bWFfYWRkcmVzcyh2bWEsIHBnb2ZmLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgbnJfcGFnZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogdm1hX2Fub25fYWRkcmVzcyAtIEZpbmQgdGhlIHZpcnR1YWwgYWRkcmVzcyBhbiBhbm9ueW1vdXMgcGFnZSByYW5nZSBpcyBtYXBwZWRcbiYjNDM7ICogYXQuXG4mIzQzOyAqIEB2bWE6IFRoZSB2bWEgd2hpY2ggbWFwcyB0aGlzIG9iamVjdC5cbiYjNDM7ICogQHBnb2ZmX3ZpcnQ6IFRoZSB2aXJ0dWFsIHBhZ2UgaW5kZXggYmVsb25naW5nIHRvIHRoZSBmb2xpby5cbiYjNDM7ICogQG5yX3BhZ2VzOiBUaGUgbnVtYmVyIG9mIHBhZ2VzIHRvIGNvbnNpZGVyLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yIGFub255bW91cyBvciBNQVBfUFJJVkFURS1tYXBwZWQgZmlsZS1iYWNrZWQgVk1Bcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogSWYgYW55IHBhZ2UgaW4gdGhpcyByYW5nZSBpcyBtYXBwZWQgYnkgdGhpcyBWTUEsIHJldHVybiB0aGUgZmlyc3QgYWRkcmVzc1xuJiM0MzsgKiB3aGVyZSBhbnkgb2YgdGhlc2UgcGFnZXMgYXBwZWFyLiBPdGhlcndpc2UsIHJldHVybiAtRUZBVUxULlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hbm9uX2FkZHJlc3MoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzQzO1x0XHRwZ29mZl90IHBnb2ZmX3ZpcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0UoIXZtYV9pc19hbm9ueW1vdXModm1hKSBcdTAwMjZcdTAwMjYgdm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX192bWFfYWRkcmVzcyh2bWEsIHBnb2ZmX3ZpcnQsIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIG5yX3BhZ2VzKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuLSAqIFRoZW4gYXQgd2hhdCB1c2VyIHZpcnR1YWwgYWRkcmVzcyB3aWxsIG5vbmUgb2YgdGhlIHJhbmdlIGJlIGZvdW5kIGluIHZtYT9cbiYjNDM7ICogQXQgd2hhdCB1c2VyIHZpcnR1YWwgYWRkcmVzcyB3aWxsIG5vbmUgb2YgdGhlIHJhbmdlIGJlIGZvdW5kIGluIHZtYT9cbiAgKiBBc3N1bWVzIHRoYXQgdm1hX2FkZHJlc3MoKSBhbHJlYWR5IHJldHVybmVkIGEgZ29vZCBzdGFydGluZyBhZGRyZXNzLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfYWRkcmVzc19lbmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuIHtcbi1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gcHZtdy1cdTAwM2V2bWE7XG4tXHRwZ29mZl90IHBnb2ZmO1xuJiM0MztcdGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gcHZtdy1cdTAwM2V2bWE7XG4mIzQzO1x0Y29uc3QgcGdvZmZfdCBwZ29mZiA9IHB2bXctXHUwMDNlcGdvZmY7XG4mIzQzO1x0cGdvZmZfdCBwZ29mZl92bWFfc3RhcnQ7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHJlc3M7XG4mIzQzO1x0cGdvZmZfdCBwZ29mZl9lbmQ7XG4gXG4gXHQvKiBDb21tb24gY2FzZSwgcGx1cyAtXHUwMDNlcGdvZmYgaXMgaW52YWxpZCBmb3IgS1NNICovXG4gXHRpZiAocHZtdy1cdTAwM2Vucl9wYWdlcyA9PSAxKVxuIFx0XHRyZXR1cm4gcHZtdy1cdTAwM2VhZGRyZXNzICYjNDM7IFBBR0VfU0laRTtcbiBcbi1cdHBnb2ZmID0gcHZtdy1cdTAwM2VwZ29mZiAmIzQzOyBwdm13LVx1MDAzZW5yX3BhZ2VzO1xuJiM0MztcdGlmIChwdm13LVx1MDAzZWlzX2Fub25fd2FsaylcbiYjNDM7XHRcdHBnb2ZmX3ZtYV9zdGFydCA9IHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cGdvZmZfdm1hX3N0YXJ0ID0gdm1hX3N0YXJ0X3Bnb2ZmKHZtYSk7XG4mIzQzO1xuJiM0MztcdHBnb2ZmX2VuZCA9IHBnb2ZmICYjNDM7IHB2bXctXHUwMDNlbnJfcGFnZXM7XG4gXHRhZGRyZXNzID0gdm1hLVx1MDAzZXZtX3N0YXJ0ICYjNDM7XG4tXHRcdCgocGdvZmYgLSB2bWFfc3RhcnRfcGdvZmYodm1hKSkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpO1xuJiM0MztcdFx0KChwZ29mZl9lbmQgLSBwZ29mZl92bWFfc3RhcnQpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbiBcdC8qIENoZWNrIGZvciBhZGRyZXNzIGJleW9uZCB2bWEgKG9yIHdyYXBwZWQgdGhyb3VnaCAwPykgKi9cbiBcdGlmIChhZGRyZXNzIFx1MDAzYyB2bWEtXHUwMDNldm1fc3RhcnQgfHwgYWRkcmVzcyBcdTAwM2Ugdm1hLVx1MDAzZXZtX2VuZClcbiBcdFx0YWRkcmVzcyA9IHZtYS1cdTAwM2V2bV9lbmQ7XG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJ2YWxfdHJlZS5jIGIvbW0vaW50ZXJ2YWxfdHJlZS5jXG5pbmRleCAzYWU5ZTEwNmQzYWZkOC4uMjZiODQzN2UzYjFiMTMgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcnZhbF90cmVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVydmFsX3RyZWUuY1xuQEAgLTgzLDEyICYjNDM7ODMsMTIgQEAgbWFwcGluZ19ybWFwX3RyZWVfaXRlcl9uZXh0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFxuIHN0YXRpYyBwZ29mZl90IGF2Y19zdGFydF9wZ29mZihzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YylcbiB7XG4tXHRyZXR1cm4gdm1hX3N0YXJ0X3Bnb2ZmKGF2Yy1cdTAwM2V2bWEpO1xuJiM0MztcdHJldHVybiB2bWFfc3RhcnRfdmlydF9wZ29mZihhdmMtXHUwMDNldm1hKTtcbiB9XG4gXG4gc3RhdGljIHBnb2ZmX3QgYXZjX2xhc3RfcGdvZmYoc3RydWN0IGFub25fdm1hX2NoYWluICphdmMpXG4ge1xuLVx0cmV0dXJuIHZtYV9sYXN0X3Bnb2ZmKGF2Yy1cdTAwM2V2bWEpO1xuJiM0MztcdHJldHVybiB2bWFfbGFzdF92aXJ0X3Bnb2ZmKGF2Yy1cdTAwM2V2bWEpO1xuIH1cbiBcbiBJTlRFUlZBTF9UUkVFX0RFRklORShzdHJ1Y3QgYW5vbl92bWFfY2hhaW4sIHJiLCBwZ29mZl90LCByYl9zdWJ0cmVlX2xhc3QsXG5kaWZmIC0tZ2l0IGEvbW0va3NtLmMgYi9tbS9rc20uY1xuaW5kZXggNDcwMDZmNDk0ZmNiMWIuLmI5YjMyZjdiZmI2OTFlIDEwMDY0NFxuLS0tIGEvbW0va3NtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2tzbS5jXG5AQCAtMTYyNSw3ICYjNDM7MTYyNSw4IEBAIHN0YXRpYyBpbnQgdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSxcbiBcdCAqIHN0YWJsZV90cmVlLCBicmVha19jb3coKSB3aWxsIGNsZWFuIGl0IHVwLlxuIFx0ICovXG4gXHRybWFwX2l0ZW0tXHUwMDNlYW5vbl92bWEgPSB2bWEtXHUwMDNlYW5vbl92bWE7XG4tXHRybWFwX2l0ZW0tXHUwMDNlbGluZWFyX3BhZ2VfaW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKTtcbiYjNDM7XHQvKiBUaGUgVk1BIGlzIGFsd2F5cyBhbm9uL01BUF9QUklWQVRFLWZpbGUgYmFja2VkIHNvIHVzZSBhbm9uIGluZGV4LiAqL1xuJiM0MztcdHJtYXBfaXRlbS1cdTAwM2VsaW5lYXJfcGFnZV9pbmRleCA9IGxpbmVhcl92aXJ0X3BhZ2VfaW5kZXgodm1hLCBybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcyk7XG4gXHRnZXRfYW5vbl92bWEodm1hLVx1MDAzZWFub25fdm1hKTtcbiBvdXQ6XG4gXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbkBAIC0zMTUyLDcgJiM0MzszMTUzLDcgQEAgc3RydWN0IGZvbGlvICprc21fbWlnaHRfbmVlZF90b19jb3B5KHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1x0Lyogbm8gbmVlZCB0byBjb3B5IGl0ICovXG4gXHR9IGVsc2UgaWYgKCFhbm9uX3ZtYSkge1xuIFx0XHRyZXR1cm4gZm9saW87XHRcdC8qIG5vIG5lZWQgdG8gY29weSBpdCAqL1xuLVx0fSBlbHNlIGlmIChmb2xpby1cdTAwM2VpbmRleCA9PSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdH0gZWxzZSBpZiAoZm9saW8tXHUwMDNlaW5kZXggPT0gbGluZWFyX3ZpcnRfcGFnZV9pbmRleCh2bWEsIGFkZHIpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdGFub25fdm1hLVx1MDAzZXJvb3QgPT0gdm1hLVx1MDAzZWFub25fdm1hLVx1MDAzZXJvb3QpIHtcbiBcdFx0cmV0dXJuIGZvbGlvO1x0XHQvKiBzdGlsbCBubyBuZWVkIHRvIGNvcHkgaXQgKi9cbiBcdH1cbkBAIC0zMjIyLDcgJiM0MzszMjIzLDcgQEAgdm9pZCBybWFwX3dhbGtfa3NtKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCAqcndjKVxuIFx0XHQvKlxuIFx0XHQgKiBDdXJyZW50bHksIEtTTSBmb2xpb3MgYXJlIGFsd2F5cyBzbWFsbCBmb2xpb3MsIHNvIGl0JiMzOTtzXG4gXHRcdCAqIHN1ZmZpY2llbnQgdG8gc2VhcmNoIGZvciBhIHNpbmdsZSBwYWdlLiBXZSBjYW4gc2ltcGx5IHVzZVxuLVx0XHQgKiB0aGUgbGluZWFyX3BhZ2VfaW5kZXggb2YgdGhlIG9yaWdpbmFsIGRlLWR1cGxpY2F0ZVxuJiM0MztcdFx0ICogdGhlIGxpbmVhcl92aXJ0X3BhZ2VfaW5kZXggb2YgdGhlIG9yaWdpbmFsIGRlLWR1cGxpY2F0ZVxuIFx0XHQgKiBhbm9ueW1vdXMgcGFnZSB0aGF0IHdlIHJlbWVtYmVyZWQgaW4gdGhlIHJtYXBfaXRlbSB3aGlsZVxuIFx0XHQgKiBkZS1kdXBsaWNhdGluZy4gTm90ZSB0aGF0IG1yZW1hcCgpIGFsd2F5cyBkZS1kdXBsaWNhdGVzIEtTTVxuIFx0XHQgKiBmb2xpb3M6IHNvIGlmIHRoZXJlIHdhcyBtcmVtYXAoKSBpbiBvdXIgcGFyZW50IG9yIG91ciBjaGlsZCxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYWFmMTQ2MDhiMzBlMmQuLmE4YjAzZTI5MjBiYThhIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTYyMCw3ICYjNDM7NjIwLDcgQEAgc3RhdGljIHZvaWQgYWRkX3RvX2tpbGxfZnNkYXgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGNvbnN0IHN0cnVjdCBwYWdlICpwLFxuIFx0XHRcdCAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnRvX2tpbGwsIHBnb2ZmX3QgcGdvZmYpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBhZGRyID0gdm1hX2FkZHJlc3Modm1hLCBwZ29mZiwgMSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBhZGRyID0gdm1hX2ZpbGViYWNrZWRfYWRkcmVzcyh2bWEsIHBnb2ZmLCAxKTtcbiBcdF9fYWRkX3RvX2tpbGwodHNrLCBwLCB2bWEsIHRvX2tpbGwsIGFkZHIpO1xuIH1cbiBcbkBAIC0yMjY1LDcgJiM0MzsyMjY1LDcgQEAgc3RhdGljIHZvaWQgYWRkX3RvX2tpbGxfcGdvZmYoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssXG4gXHR9XG4gXG4gXHQvKiBDaGVjayBmb3IgcGdvZmYgbm90IGJhY2tlZCBieSBzdHJ1Y3QgcGFnZSAqL1xuLVx0dGstXHUwMDNlYWRkciA9IHZtYV9hZGRyZXNzKHZtYSwgcGdvZmYsIDEpO1xuJiM0MztcdHRrLVx1MDAzZWFkZHIgPSB2bWFfZmlsZWJhY2tlZF9hZGRyZXNzKHZtYSwgcGdvZmYsIDEpO1xuIFx0dGstXHUwMDNlc2l6ZV9zaGlmdCA9IFBBR0VfU0hJRlQ7XG4gXG4gXHRpZiAodGstXHUwMDNlYWRkciA9PSAtRUZBVUxUKVxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGQ1ZTg3NjI0ZjY5MjA1Li41NmIyNDQ1NTJmMTM5NCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTYzMSwxMyAmIzQzOzYzMSwxNCBAQCBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4ge1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4gXHRjaGFyIGVudHJ5X3N0cltQVFZBTF9TVFJfTUFYXTtcbi1cdHBnb2ZmX3QgaW5kZXg7XG4mIzQzO1x0cGdvZmZfdCBpbmRleCwgdmlydF9pbmRleDtcbiBcbiBcdGlmIChpc19iYWRfcGFnZV9tYXBfcmF0ZWxpbWl0ZWQoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bWFwcGluZyA9IHZtYS1cdTAwM2V2bV9maWxlID8gdm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nIDogTlVMTDtcbiBcdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTtcbiYjNDM7XHR2aXJ0X2luZGV4ID0gX19saW5lYXJfdmlydF9wYWdlX2luZGV4KHZtYSwgYWRkcik7XG4gXG4gXHRwdHZhbF9ieXRlc190b19oZXhfc3RyKGVudHJ5X3N0ciwgc2l6ZW9mKGVudHJ5X3N0ciksIGVudHJ5LCBlbnRyeV9zaXplKTtcbiBcdHByX2FsZXJ0KFwmIzM0O0JVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiVzXCYjMzQ7LCBjdXJyZW50LVx1MDAzZWNvbW0sXG5AQCAtNjQ1LDggJiM0Mzs2NDYsOSBAQCBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHZtYS1cdTAwM2V2bV9tbSwgYWRkcik7XG4gXHRpZiAocGFnZSlcbiBcdFx0ZHVtcF9wYWdlKHBhZ2UsIFwmIzM0O2JhZCBwYWdlIG1hcFwmIzM0Oyk7XG4tXHRwcl9hbGVydChcJiMzNDthZGRyOiVweCB2bV9mbGFnczolMDhseCBhbm9uX3ZtYTolcHggbWFwcGluZzolcHggaW5kZXg6JWx4XFxuXCYjMzQ7LFxuLVx0XHQgKHZvaWQgKilhZGRyLCB2bWEtXHUwMDNldm1fZmxhZ3MsIHZtYS1cdTAwM2Vhbm9uX3ZtYSwgbWFwcGluZywgaW5kZXgpO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O2FkZHI6JXB4IHZtX2ZsYWdzOiUwOGx4IGFub25fdm1hOiVweCBtYXBwaW5nOiVweCBpbmRleDolbHggdmlydF9pbmRleDolbHhcXG5cJiMzNDssXG4mIzQzO1x0XHQgKHZvaWQgKilhZGRyLCB2bWEtXHUwMDNldm1fZmxhZ3MsIHZtYS1cdTAwM2Vhbm9uX3ZtYSwgbWFwcGluZywgaW5kZXgsXG4mIzQzO1x0XHQgdmlydF9pbmRleCk7XG4gXHRwcl9hbGVydChcJiMzNDtmaWxlOiVwRCBmYXVsdDolcHMgbW1hcDolcHMgbW1hcF9wcmVwYXJlOiAlcHMgcmVhZF9mb2xpbzolcHNcXG5cJiMzNDssXG4gXHRcdCB2bWEtXHUwMDNldm1fZmlsZSxcbiBcdFx0IHZtYS1cdTAwM2V2bV9vcHMgPyB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWZhdWx0IDogTlVMTCxcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IDIyMmM4YzE1Zjc4MmY3Li4zN2ZlN2E5YjNmYWNjOCAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jXG5AQCAtMzYzLDggJiM0MzszNjMsMTAgQEAgc3RhdGljIGJvb2wgcmVtb3ZlX21pZ3JhdGlvbl9wdGUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0dW5zaWduZWQgbG9uZyBpZHggPSAwO1xuIFxuIFx0XHQvKiBwZ29mZiBpcyBpbnZhbGlkIGZvciBrc20gcGFnZXMsIGJ1dCB0aGV5IGFyZSBuZXZlciBsYXJnZSAqL1xuLVx0XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuLVx0XHRcdGlkeCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgcHZtdy5hZGRyZXNzKSAtIHB2bXcucGdvZmY7XG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4mIzQzO1x0XHRcdGlkeCAmIzQzOz0gbGluZWFyX2ZvbGlvX3BhZ2VfaW5kZXgoZm9saW8sIHZtYSwgcHZtdy5hZGRyZXNzKTtcbiYjNDM7XHRcdFx0aWR4IC09IHB2bXcucGdvZmY7XG4mIzQzO1x0XHR9XG4gXHRcdG5ldyA9IGZvbGlvX3BhZ2UoZm9saW8sIGlkeCk7XG4gXG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFU1xuZGlmZiAtLWdpdCBhL21tL21yZW1hcC5jIGIvbW0vbXJlbWFwLmNcbmluZGV4IGI2NGFhMWY2ZTA3ZWRlLi5mMDdmYzRlM2VmMmU2YyAxMDA2NDRcbi0tLSBhL21tL21yZW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tcmVtYXAuY1xuQEAgLTEyNjUsNyAmIzQzOzEyNjUsOSBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gc3RhdGljIGludCBjb3B5X3ZtYV9hbmRfZGF0YShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtLFxuIFx0XHRcdCAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqbmV3X3ZtYV9wdHIpXG4ge1xuLVx0Y29uc3QgdW5zaWduZWQgbG9uZyBuZXdfcGdvZmYgPSBsaW5lYXJfcGFnZV9pbmRleCh2cm0tXHUwMDNldm1hLCB2cm0tXHUwMDNlYWRkcik7XG4mIzQzO1x0Y29uc3QgcGdvZmZfdCBuZXdfcGdvZmYgPSBsaW5lYXJfcGFnZV9pbmRleCh2cm0tXHUwMDNldm1hLCB2cm0tXHUwMDNlYWRkcik7XG4mIzQzO1x0Y29uc3QgcGdvZmZfdCBuZXdfdmlydF9wZ29mZiA9XG4mIzQzO1x0XHRfX2xpbmVhcl92aXJ0X3BhZ2VfaW5kZXgodnJtLVx1MDAzZXZtYSwgdnJtLVx1MDAzZWFkZHIpO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2cm0tXHUwMDNldm1hO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpuZXdfdm1hO1xuIFx0dW5zaWduZWQgbG9uZyBtb3ZlZF9sZW47XG5AQCAtMTI3Myw3ICYjNDM7MTI3NSw3IEBAIHN0YXRpYyBpbnQgY29weV92bWFfYW5kX2RhdGEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSxcbiBcdFBBR0VUQUJMRV9NT1ZFKHBtYywgTlVMTCwgTlVMTCwgdnJtLVx1MDAzZWFkZHIsIHZybS1cdTAwM2VuZXdfYWRkciwgdnJtLVx1MDAzZW9sZF9sZW4pO1xuIFxuIFx0bmV3X3ZtYSA9IGNvcHlfdm1hKFx1MDAyNnZtYSwgdnJtLVx1MDAzZW5ld19hZGRyLCB2cm0tXHUwMDNlbmV3X2xlbiwgbmV3X3Bnb2ZmLFxuLVx0XHRcdCAgIFx1MDAyNnBtYy5uZWVkX3JtYXBfbG9ja3MpO1xuJiM0MztcdFx0XHQgICBuZXdfdmlydF9wZ29mZiwgXHUwMDI2cG1jLm5lZWRfcm1hcF9sb2Nrcyk7XG4gXHRpZiAoIW5ld192bWEpIHtcbiBcdFx0dnJtX3VuY2hhcmdlKHZybSk7XG4gXHRcdCpuZXdfdm1hX3B0ciA9IE5VTEw7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV92bWFfbWFwcGVkLmMgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xuaW5kZXggZDc2NzBiYTQxNDdiZmYuLjRlOTY0NTQ1ZTVlODVhIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV92bWFfbWFwcGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXG5AQCAtMzU2LDYgJiM0MzszNTYsNyBAQCB1bnNpZ25lZCBsb25nIHBhZ2VfbWFwcGVkX2luX3ZtYShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4mIzQzO1x0Y29uc3QgcGdvZmZfdCBwZ29mZiA9IHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpO1xuIFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XG4gXHRcdC5wZm4gPSBwYWdlX3RvX3BmbihwYWdlKSxcbiBcdFx0Lm5yX3BhZ2VzID0gMSxcbkBAIC0zNjMsNyAmIzQzOzM2NCwxMCBAQCB1bnNpZ25lZCBsb25nIHBhZ2VfbWFwcGVkX2luX3ZtYShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0LmZsYWdzID0gUFZNV19TWU5DLFxuIFx0fTtcbiBcbi1cdHB2bXcuYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHZtYSwgcGFnZV9wZ29mZihmb2xpbywgcGFnZSksIDEpO1xuJiM0MztcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKVxuJiM0MztcdFx0cHZtdy5hZGRyZXNzID0gdm1hX2Fub25fYWRkcmVzcyh2bWEsIHBnb2ZmLCAxKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRwdm13LmFkZHJlc3MgPSB2bWFfZmlsZWJhY2tlZF9hZGRyZXNzKHZtYSwgcGdvZmYsIDEpO1xuIFx0aWYgKHB2bXcuYWRkcmVzcyA9PSAtRUZBVUxUKVxuIFx0XHRnb3RvIG91dDtcbiBcdGlmICghcGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCBhZDgyMGZlODZmN2Q4Yy4uNjg1NGJhZjRiODc3OGYgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuY1xuQEAgLTg2NSwxNCAmIzQzOzg2NSwxNSBAQCB1bnNpZ25lZCBsb25nIHBhZ2VfYWRkcmVzc19pbl92bWEoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0aWYgKCF2bWEtXHUwMDNlYW5vbl92bWEgfHwgIWFub25fdm1hIHx8XG4gXHRcdCAgICB2bWEtXHUwMDNlYW5vbl92bWEtXHUwMDNlcm9vdCAhPSBhbm9uX3ZtYS1cdTAwM2Vyb290KVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdFx0LyogS1NNIGZvbGlvcyBkb24mIzM5O3QgcmVhY2ggaGVyZSBiZWNhdXNlIG9mIHRoZSAhYW5vbl92bWEgY2hlY2sgKi9cbiYjNDM7XHRcdHJldHVybiB2bWFfYW5vbl9hZGRyZXNzKHZtYSwgcGFnZV9wZ29mZihmb2xpbywgcGFnZSksIDEpO1xuIFx0fSBlbHNlIGlmICghdm1hLVx1MDAzZXZtX2ZpbGUpIHtcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHR9IGVsc2UgaWYgKHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyAhPSBmb2xpby1cdTAwM2VtYXBwaW5nKSB7XG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0fVxuIFxuLVx0LyogS1NNIGZvbGlvcyBkb24mIzM5O3QgcmVhY2ggaGVyZSBiZWNhdXNlIG9mIHRoZSAhYW5vbl92bWEgY2hlY2sgKi9cbi1cdHJldHVybiB2bWFfYWRkcmVzcyh2bWEsIHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpLCAxKTtcbiYjNDM7XHRyZXR1cm4gdm1hX2ZpbGViYWNrZWRfYWRkcmVzcyh2bWEsIHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpLCAxKTtcbiB9XG4gXG4gLypcbkBAIC0xMjM5LDggJiM0MzsxMjQwLDEwIEBAIHN0YXRpYyBib29sIG1hcHBpbmdfd3Jwcm90ZWN0X3JhbmdlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHQudm1hXHRcdD0gdm1hLFxuIFx0XHQuYWRkcmVzc1x0PSBhZGRyZXNzLFxuIFx0XHQuZmxhZ3NcdFx0PSBQVk1XX1NZTkMsXG4mIzQzO1x0XHQuaXNfYW5vbl93YWxrICAgPSBmYWxzZSxcbiBcdH07XG4gXG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpO1xuIFx0c3RhdGUtXHUwMDNlY2xlYW5lZCAmIzQzOz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoXHUwMDI2cHZtdyk7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbkBAIC0xMzE2LDEyICYjNDM7MTMxOSwxMyBAQCBpbnQgcGZuX21rY2xlYW5fcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHBnb2ZmX3QgcGdvZmYsXG4gXHRcdC5wZ29mZlx0XHQ9IHBnb2ZmLFxuIFx0XHQudm1hXHRcdD0gdm1hLFxuIFx0XHQuZmxhZ3NcdFx0PSBQVk1XX1NZTkMsXG4mIzQzO1x0XHQuaXNfYW5vbl93YWxrICAgPSBmYWxzZSxcbiBcdH07XG4gXG4gXHRpZiAoaW52YWxpZF9ta2NsZWFuX3ZtYSh2bWEsIE5VTEwpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHB2bXcuYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHZtYSwgcGdvZmYsIG5yX3BhZ2VzKTtcbiYjNDM7XHRwdm13LmFkZHJlc3MgPSB2bWFfZmlsZWJhY2tlZF9hZGRyZXNzKHZtYSwgcGdvZmYsIG5yX3BhZ2VzKTtcbiBcdFZNX0JVR19PTl9WTUEocHZtdy5hZGRyZXNzID09IC1FRkFVTFQsIHZtYSk7XG4gXG4gXHRyZXR1cm4gcGFnZV92bWFfbWtjbGVhbl9vbmUoXHUwMDI2cHZtdyk7XG5AQCAtMTQ4Miw3ICYjNDM7MTQ4Niw3IEBAIHN0YXRpYyB2b2lkIF9fZm9saW9fc2V0X2Fub24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHQgKi9cbiBcdGFub25fdm1hID0gKHZvaWQgKikgYW5vbl92bWEgJiM0MzsgRk9MSU9fTUFQUElOR19BTk9OO1xuIFx0V1JJVEVfT05DRShmb2xpby1cdTAwM2VtYXBwaW5nLCAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKikgYW5vbl92bWEpO1xuLVx0Zm9saW8tXHUwMDNlaW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpO1xuJiM0MztcdGZvbGlvLVx1MDAzZWluZGV4ID0gbGluZWFyX3ZpcnRfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpO1xuIH1cbiBcbiAvKipcbkBAIC0xNTA5LDggJiM0MzsxNTEzLDggQEAgc3RhdGljIHZvaWQgX19wYWdlX2NoZWNrX2Fub25fcm1hcChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0ICovXG4gXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fYW5vbl92bWEoZm9saW8pLVx1MDAzZXJvb3QgIT0gdm1hLVx1MDAzZWFub25fdm1hLVx1MDAzZXJvb3QsXG4gXHRcdFx0Zm9saW8pO1xuLVx0Vk1fQlVHX09OX1BBR0UocGFnZV9wZ29mZihmb2xpbywgcGFnZSkgIT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSxcbi1cdFx0ICAgICAgIHBhZ2UpO1xuJiM0MztcdFZNX0JVR19PTl9QQUdFKHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpICE9XG4mIzQzO1x0XHQgICAgICAgbGluZWFyX3ZpcnRfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpLCBwYWdlKTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fYWRkX2Fub25fcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuQEAgLTMwMzcsMTAgJiM0MzszMDQxLDEwIEBAIHN0YXRpYyB2b2lkIHJtYXBfd2Fsa19hbm9uKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRwZ29mZl9lbmQgPSBwZ29mZl9zdGFydCAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxO1xuIFx0YW5vbl9ybWFwX3RyZWVfZm9yZWFjaChhdmMsIGFub25fdm1hLCBwZ29mZl9zdGFydCwgcGdvZmZfZW5kKSB7XG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gYXZjLVx1MDAzZXZtYTtcbi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzID0gdm1hX2FkZHJlc3Modm1hLCBwZ29mZl9zdGFydCxcbiYjNDM7XHRcdGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHZtYV9hbm9uX2FkZHJlc3Modm1hLCBwZ29mZl9zdGFydCxcbiBcdFx0XHRcdGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gXG4tXHRcdFZNX0JVR19PTl9WTUEoYWRkcmVzcyA9PSAtRUZBVUxULCB2bWEpO1xuJiM0MztcdFx0Vk1fV0FSTl9PTl9PTkNFX1ZNQShhZGRyZXNzID09IC1FRkFVTFQsIHZtYSk7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFxuIFx0XHRpZiAocndjLVx1MDAzZWludmFsaWRfdm1hIFx1MDAyNlx1MDAyNiByd2MtXHUwMDNlaW52YWxpZF92bWEodm1hLCByd2MtXHUwMDNlYXJnKSlcbkBAIC0zMTAwLDcgJiM0MzszMTA0LDggQEAgc3RhdGljIHZvaWQgX19ybWFwX3dhbGtfZmlsZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdH1cbiBsb29rdXA6XG4gXHRtYXBwaW5nX3JtYXBfdHJlZV9mb3JlYWNoKHZtYSwgbWFwcGluZywgcGdvZmZfc3RhcnQsIHBnb2ZmX2VuZCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSB2bWFfYWRkcmVzcyh2bWEsIHBnb2ZmX3N0YXJ0LCBucl9wYWdlcyk7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSB2bWFfZmlsZWJhY2tlZF9hZGRyZXNzKHZtYSwgcGdvZmZfc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgIG5yX3BhZ2VzKTtcbiBcbiBcdFx0Vk1fQlVHX09OX1ZNQShhZGRyZXNzID09IC1FRkFVTFQsIHZtYSk7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jXG5pbmRleCA4ZmQyNGM4YjQyOGUxYi4uMjU4YjAzMTgyYTc4MGIgMTAwNjQ0XG4tLS0gYS9tbS91c2VyZmF1bHRmZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS91c2VyZmF1bHRmZC5jXG5AQCAtMTM1Miw3ICYjNDM7MTM1Miw4IEBAIHN0YXRpYyBsb25nIG1vdmVfcHJlc2VudF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHR9XG4gXG4gXHRcdGZvbGlvX21vdmVfYW5vbl9ybWFwKHNyY19mb2xpbywgZHN0X3ZtYSk7XG4tXHRcdHNyY19mb2xpby1cdTAwM2VpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KGRzdF92bWEsIGRzdF9hZGRyKTtcbiYjNDM7XHRcdHNyY19mb2xpby1cdTAwM2VpbmRleCA9IGxpbmVhcl9mb2xpb19wYWdlX2luZGV4KHNyY19mb2xpbywgZHN0X3ZtYSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBkc3RfYWRkcik7XG4gXG4gXHRcdG9yaWdfZHN0X3B0ZSA9IGZvbGlvX21rX3B0ZShzcmNfZm9saW8sIGRzdF92bWEtXHUwMDNldm1fcGFnZV9wcm90KTtcbiBcdFx0LyogU2V0IHNvZnQgZGlydHkgYml0IHNvIHVzZXJzcGFjZSBjYW4gbm90aWNlIHRoZSBwdGUgd2FzIG1vdmVkICovXG5AQCAtMTQyOCw3ICYjNDM7MTQyOSw4IEBAIHN0YXRpYyBpbnQgbW92ZV9zd2FwX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuIFx0ICovXG4gXHRpZiAoc3JjX2ZvbGlvKSB7XG4gXHRcdGZvbGlvX21vdmVfYW5vbl9ybWFwKHNyY19mb2xpbywgZHN0X3ZtYSk7XG4tXHRcdHNyY19mb2xpby1cdTAwM2VpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KGRzdF92bWEsIGRzdF9hZGRyKTtcbiYjNDM7XHRcdHNyY19mb2xpby1cdTAwM2VpbmRleCA9IGxpbmVhcl9mb2xpb19wYWdlX2luZGV4KHNyY19mb2xpbywgZHN0X3ZtYSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBkc3RfYWRkcik7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuIFx0XHQgKiBDaGVjayBpZiB0aGUgc3dhcCBlbnRyeSBpcyBjYWNoZWQgYWZ0ZXIgYWNxdWlyaW5nIHRoZSBzcmNfcHRlXG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuY1xuaW5kZXggYjViYzNlZWM5NjFjNzkuLmY4MDAxZDVjMjNhYWQxIDEwMDY0NFxuLS0tIGEvbW0vdm1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5jXG5AQCAtMTgsNiAmIzQzOzE4LDcgQEAgc3RydWN0IG1tYXBfc3RhdGUge1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBlbmQ7XG4gXHRwZ29mZl90IHBnb2ZmO1xuJiM0MztcdHBnb2ZmX3QgdmlydF9wZ29mZjtcbiBcdHVuc2lnbmVkIGxvbmcgcGdsZW47XG4gXHR1bmlvbiB7XG4gXHRcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XG5AQCAtNDYsMTMgJiM0Mzs0NywyMiBAQCBzdHJ1Y3QgbW1hcF9zdGF0ZSB7XG4gXHRib29sIGZpbGVfZG9lc250X25lZWRfZ2V0IDoxO1xuIH07XG4gXG4tI2RlZmluZSBNTUFQX1NUQVRFKG5hbWUsIG1tXywgdm1pXywgYWRkcl8sIGxlbl8sIHBnb2ZmXywgdm1hX2ZsYWdzXywgZmlsZV8pIFxcXG4mIzQzO3N0YXRpYyBpbmxpbmUgcGdvZmZfdCBtYXBfYW5vbl9wZ29mZihjb25zdCBzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHZtYV9mbGFnc190ZXN0KFx1MDAyNm1hcC1cdTAwM2V2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKSlcbiYjNDM7XHRcdHJldHVybiBtYXAtXHUwMDNlcGdvZmY7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXAtXHUwMDNldmlydF9wZ29mZjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBNTUFQX1NUQVRFKG5hbWUsIG1tXywgdm1pXywgYWRkcl8sIGxlbl8sIHBnb2ZmXywgdmlydF9wZ29mZl8sIHZtYV9mbGFnc18sIGZpbGVfKSBcXFxuIFx0c3RydWN0IG1tYXBfc3RhdGUgbmFtZSA9IHtcdFx0XHRcdFx0XFxcbiBcdFx0Lm1tID0gbW1fLFx0XHRcdFx0XHRcdFxcXG4gXHRcdC52bWkgPSB2bWlfLFx0XHRcdFx0XHRcdFxcXG4gXHRcdC5hZGRyID0gYWRkcl8sXHRcdFx0XHRcdFx0XFxcbiBcdFx0LmVuZCA9IChhZGRyXykgJiM0MzsgKGxlbl8pLFx0XHRcdFx0XFxcbiBcdFx0LnBnb2ZmID0gcGdvZmZfLFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0LnZpcnRfcGdvZmYgPSB2aXJ0X3Bnb2ZmXyxcdFx0XHRcdFxcXG4gXHRcdC5wZ2xlbiA9IFBIWVNfUEZOKGxlbl8pLFx0XHRcdFx0XFxcbiBcdFx0LnZtYV9mbGFncyA9IHZtYV9mbGFnc18sXHRcdFx0XHRcXFxuIFx0XHQuZmlsZSA9IGZpbGVfLFx0XHRcdFx0XHRcdFxcXG5AQCAtNjcsNiAmIzQzOzc3LDcgQEAgc3RydWN0IG1tYXBfc3RhdGUge1xuIFx0XHQuZW5kID0gKG1hcF8pLVx1MDAzZWVuZCxcdFx0XHRcdFx0XFxcbiBcdFx0LnZtYV9mbGFncyA9IChtYXBfKS1cdTAwM2V2bWFfZmxhZ3MsXHRcdFx0XHRcXFxuIFx0XHQucGdvZmYgPSAobWFwXyktXHUwMDNlcGdvZmYsXHRcdFx0XHRcdFxcXG4mIzQzO1x0XHQuYW5vbl9wZ29mZiA9IG1hcF9hbm9uX3Bnb2ZmKG1hcF8pLFx0XHRcdFxcXG4gXHRcdC5maWxlID0gKG1hcF8pLVx1MDAzZWZpbGUsXHRcdFx0XHRcdFxcXG4gXHRcdC5wcmV2ID0gKG1hcF8pLVx1MDAzZXByZXYsXHRcdFx0XHRcdFxcXG4gXHRcdC5taWRkbGUgPSB2bWFfLFx0XHRcdFx0XHRcdFxcXG5AQCAtODIsMTAgJiM0Mzs5MywxMSBAQCBzdGF0aWMgdm9pZCBfX3ZtYV9zZXRfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHZtYV9zZXRfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tXHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgcGdvZmZfdCBwZ29mZilcbiYjNDM7XHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgcGdvZmZfdCBwZ29mZiwgcGdvZmZfdCB2aXJ0X3Bnb2ZmKVxuIHtcbiBcdF9fdm1hX3NldF9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpO1xuIFx0dm1hX3NldF9wZ29mZih2bWEsIHBnb2ZmKTtcbiYjNDM7XHR2bWFfc2V0X3ZpcnRfcGdvZmYodm1hLCB2aXJ0X3Bnb2ZmKTtcbiB9XG4gXG4gLyogV2FzIHRoaXMgVk1BIGV2ZXIgZm9ya2VkIGZyb20gYSBwYXJlbnQsIGkuZS4gbWF5YmUgY29udGFpbnMgQ29XIG1hcHBpbmdzPyAqL1xuQEAgLTIyMSw2ICYjNDM7MjMzLDggQEAgc3RhdGljIGJvb2wgY2FuX3ZtYV9tZXJnZV9iZWZvcmUoc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0aWYgKHZtZ19lbmRfcGdvZmYodm1nKSAhPSB2bWFfc3RhcnRfcGdvZmYodm1nLVx1MDAzZW5leHQpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKHZtZ19lbmRfYW5vbl9wZ29mZih2bWcpICE9IHZtYV9zdGFydF9hbm9uX3Bnb2ZmKHZtZy1cdTAwM2VuZXh0KSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbkBAIC0yNDEsNiAmIzQzOzI1NSw4IEBAIHN0YXRpYyBib29sIGNhbl92bWFfbWVyZ2VfYWZ0ZXIoc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0aWYgKHZtYV9lbmRfcGdvZmYodm1nLVx1MDAzZXByZXYpICE9IHZtZ19zdGFydF9wZ29mZih2bWcpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKHZtYV9lbmRfYW5vbl9wZ29mZih2bWctXHUwMDNlcHJldikgIT0gdm1nX3N0YXJ0X2Fub25fcGdvZmYodm1nKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbkBAIC04MTIsNyAmIzQzOzgyOCw4IEBAIHN0YXRpYyBpbnQgY29tbWl0X21lcmdlKHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXG4gXHQgKi9cbiBcdHZtYV9hZGp1c3RfdHJhbnNfaHVnZSh2bWEsIHZtZy1cdTAwM2VzdGFydCwgdm1nLVx1MDAzZWVuZCxcbiBcdFx0XHQgICAgICB2bWctXHUwMDNlX19hZGp1c3RfbWlkZGxlX3N0YXJ0ID8gdm1nLVx1MDAzZW1pZGRsZSA6IE5VTEwpO1xuLVx0dm1hX3NldF9yYW5nZSh2bWEsIHZtZy1cdTAwM2VzdGFydCwgdm1nLVx1MDAzZWVuZCwgdm1nX3N0YXJ0X3Bnb2ZmKHZtZykpO1xuJiM0MztcdHZtYV9zZXRfcmFuZ2Uodm1hLCB2bWctXHUwMDNlc3RhcnQsIHZtZy1cdTAwM2VlbmQsIHZtZ19zdGFydF9wZ29mZih2bWcpLFxuJiM0MztcdFx0ICAgICAgdm1nX3N0YXJ0X2Fub25fcGdvZmYodm1nKSk7XG4gXHR2bWdfYWRqdXN0X3NldF9yYW5nZSh2bWcpO1xuIFx0dm1hX2l0ZXJfc3RvcmVfb3ZlcndyaXRlKHZtZy1cdTAwM2V2bWksIHZtZy1cdTAwM2V0YXJnZXQpO1xuIFxuQEAgLTk4Miw2ICYjNDM7OTk5LDcgQEAgc3RhdGljIF9fbXVzdF9jaGVjayBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZV9leGlzdGluZ19yYW5nZShcbiBcdFx0dm1nLVx1MDAzZXN0YXJ0ID0gcHJldi1cdTAwM2V2bV9zdGFydDtcbiBcdFx0dm1nLVx1MDAzZWVuZCA9IG5leHQtXHUwMDNldm1fZW5kO1xuIFx0XHR2bWctXHUwMDNlcGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYocHJldik7XG4mIzQzO1x0XHR2bWctXHUwMDNlYW5vbl9wZ29mZiA9IHZtYV9zdGFydF9hbm9uX3Bnb2ZmKHByZXYpO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBXZSBhbHJlYWR5IGVuc3VyZWQgYW5vbl92bWEgY29tcGF0aWJpbGl0eSBhYm92ZSwgc28gbm93IGl0JiMzOTtzXG5AQCAtMTAwMCw2ICYjNDM7MTAxOCw3IEBAIHN0YXRpYyBfX211c3RfY2hlY2sgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2UoXG4gXHRcdCAqL1xuIFx0XHR2bWctXHUwMDNlc3RhcnQgPSBwcmV2LVx1MDAzZXZtX3N0YXJ0O1xuIFx0XHR2bWctXHUwMDNlcGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYocHJldik7XG4mIzQzO1x0XHR2bWctXHUwMDNlYW5vbl9wZ29mZiA9IHZtYV9zdGFydF9hbm9uX3Bnb2ZmKHByZXYpO1xuIFxuIFx0XHRpZiAoIXZtZy1cdTAwM2VfX3JlbW92ZV9taWRkbGUpXG4gXHRcdFx0dm1nLVx1MDAzZV9fYWRqdXN0X21pZGRsZV9zdGFydCA9IHRydWU7XG5AQCAtMTAyMiwxMiAmIzQzOzEwNDEsMTQgQEAgc3RhdGljIF9fbXVzdF9jaGVjayBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZV9leGlzdGluZ19yYW5nZShcbiBcdFx0aWYgKHZtZy1cdTAwM2VfX3JlbW92ZV9taWRkbGUpIHtcbiBcdFx0XHR2bWctXHUwMDNlZW5kID0gbmV4dC1cdTAwM2V2bV9lbmQ7XG4gXHRcdFx0dm1nLVx1MDAzZXBnb2ZmID0gdm1hX3N0YXJ0X3Bnb2ZmKG5leHQpIC0gcGdsZW47XG4mIzQzO1x0XHRcdHZtZy1cdTAwM2Vhbm9uX3Bnb2ZmID0gdm1hX3N0YXJ0X2Fub25fcGdvZmYobmV4dCkgLSBwZ2xlbjtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKiBXZSBzaHJpbmsgbWlkZGxlIGFuZCBleHBhbmQgbmV4dC4gKi9cbiBcdFx0XHR2bWctXHUwMDNlX19hZGp1c3RfbmV4dF9zdGFydCA9IHRydWU7XG4gXHRcdFx0dm1nLVx1MDAzZXN0YXJ0ID0gbWlkZGxlLVx1MDAzZXZtX3N0YXJ0O1xuIFx0XHRcdHZtZy1cdTAwM2VlbmQgPSBzdGFydDtcbiBcdFx0XHR2bWctXHUwMDNlcGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYobWlkZGxlKTtcbiYjNDM7XHRcdFx0dm1nLVx1MDAzZWFub25fcGdvZmYgPSB2bWFfc3RhcnRfYW5vbl9wZ29mZihtaWRkbGUpO1xuIFx0XHR9XG4gXG4gXHRcdGVyciA9IGR1cF9hbm9uX3ZtYShuZXh0LCBtaWRkbGUsIFx1MDAyNmFub25fZHVwKTtcbkBAIC0xMTM3LDYgJiM0MzsxMTU4LDcgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbWVyZ2VfbmV3X3JhbmdlKHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXG4gXHRcdHZtZy1cdTAwM2VzdGFydCA9IHByZXYtXHUwMDNldm1fc3RhcnQ7XG4gXHRcdHZtZy1cdTAwM2V0YXJnZXQgPSBwcmV2O1xuIFx0XHR2bWctXHUwMDNlcGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYocHJldik7XG4mIzQzO1x0XHR2bWctXHUwMDNlYW5vbl9wZ29mZiA9IHZtYV9zdGFydF9hbm9uX3Bnb2ZmKHByZXYpO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBJZiB0aGlzIG1lcmdlIHdvdWxkIHJlc3VsdCBpbiByZW1vdmFsIG9mIHRoZSBuZXh0IFZNQSBidXQgd2VcbkBAIC0xOTA4LDkgJiM0MzsxOTMwLDEwIEBAIHN0YXRpYyBpbnQgdm1hX2xpbmsoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuICAqL1xuIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqY29weV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcbiBcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHBnb2ZmX3QgcGdvZmYsXG4tXHRib29sICpuZWVkX3JtYXBfbG9ja3MpXG4mIzQzO1x0cGdvZmZfdCB2aXJ0X3Bnb2ZmLCBib29sICpuZWVkX3JtYXBfbG9ja3MpXG4ge1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSAqdm1hcDtcbiYjNDM7XHRjb25zdCBib29sIGlzX3NoYXJlZCA9IHZtYV90ZXN0KHZtYSwgVk1BX1NIQVJFRF9CSVQpO1xuIFx0dW5zaWduZWQgbG9uZyB2bWFfc3RhcnQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS1cdTAwM2V2bV9tbTtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV3X3ZtYTtcbkBAIC0xOTE5LDExICYjNDM7MTk0MiwxNCBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmNvcHlfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXG4gXHRWTUdfVk1BX1NUQVRFKHZtZywgXHUwMDI2dm1pLCBOVUxMLCB2bWEsIGFkZHIsIGFkZHIgJiM0MzsgbGVuKTtcbiBcbiBcdC8qXG4tXHQgKiBJZiBhbm9ueW1vdXMgdm1hIGhhcyBub3QgeWV0IGJlZW4gZmF1bHRlZCwgdXBkYXRlIG5ldyBwZ29mZlxuLVx0ICogdG8gbWF0Y2ggbmV3IGxvY2F0aW9uLCB0byBpbmNyZWFzZSBpdHMgY2hhbmNlIG9mIG1lcmdpbmcuXG4mIzQzO1x0ICogSWYgYSB2bWEgaGFzIG5vdCB5ZXQgYmVlbiBmYXVsdGVkLCB1cGRhdGUgaXRzIHZpcnR1YWwgcGdvZmYgdG8gbWF0Y2hcbiYjNDM7XHQgKiB0aGUgbmV3IGxvY2F0aW9uIHRvIGluY3JlYXNlIGl0cyBjaGFuY2Ugb2YgbWVyZ2luZy5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KHZtYV9pc19hbm9ueW1vdXModm1hKSBcdTAwMjZcdTAwMjYgIXZtYS1cdTAwM2Vhbm9uX3ZtYSkpIHtcbi1cdFx0cGdvZmYgPSBhZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdGlmICghdm1hLVx1MDAzZWFub25fdm1hIFx1MDAyNlx1MDAyNiAhaXNfc2hhcmVkKSB7XG4mIzQzO1x0XHR2aXJ0X3Bnb2ZmID0gYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKVxuJiM0MztcdFx0XHRwZ29mZiA9IHZpcnRfcGdvZmY7XG4gXHRcdGZhdWx0ZWRfaW5fYW5vbl92bWEgPSBmYWxzZTtcbiBcdH1cbiBcbkBAIC0xOTQwLDYgJiM0MzsxOTY2LDcgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpjb3B5X3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxuIFx0XHRyZXR1cm4gTlVMTDtcdC8qIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqL1xuIFxuIFx0dm1nLnBnb2ZmID0gcGdvZmY7XG4mIzQzO1x0dm1nLmFub25fcGdvZmYgPSBpc19zaGFyZWQgPyBwZ29mZiA6IHZpcnRfcGdvZmY7XG4gXHR2bWcubmV4dCA9IHZtYV9pdGVyX25leHRfcmV3aW5kKFx1MDAyNnZtaSwgTlVMTCk7XG4gXHRuZXdfdm1hID0gdm1hX21lcmdlX2NvcGllZF9yYW5nZShcdTAwMjZ2bWcpO1xuIFxuQEAgLTE5NjEsMTYgJiM0MzsxOTg4LDE3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqY29weV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcbiBcdFx0XHQgKiBzYWZlLiBJdCBpcyBvbmx5IHNhZmUgdG8ga2VlcCB0aGUgdm1fcGdvZmZcbiBcdFx0XHQgKiBsaW5lYXIgaWYgdGhlcmUgYXJlIG5vIHBhZ2VzIG1hcHBlZCB5ZXQuXG4gXHRcdFx0ICovXG4tXHRcdFx0Vk1fQlVHX09OX1ZNQShmYXVsdGVkX2luX2Fub25fdm1hLCBuZXdfdm1hKTtcbiYjNDM7XHRcdFx0Vk1fV0FSTl9PTl9PTkNFX1ZNQShmYXVsdGVkX2luX2Fub25fdm1hLCBuZXdfdm1hKTtcbiBcdFx0XHQqdm1hcCA9IHZtYSA9IG5ld192bWE7XG4gXHRcdH1cbiBcdFx0Km5lZWRfcm1hcF9sb2NrcyA9XG4tXHRcdFx0KHZtYV9zdGFydF9wZ29mZihuZXdfdm1hKSBcdTAwM2M9IHZtYV9zdGFydF9wZ29mZih2bWEpKTtcbiYjNDM7XHRcdFx0KHZtYV9zdGFydF9wZ29mZihuZXdfdm1hKSBcdTAwM2M9IHZtYV9zdGFydF9wZ29mZih2bWEpKSB8fFxuJiM0MztcdFx0XHQodm1hX3N0YXJ0X2Fub25fcGdvZmYobmV3X3ZtYSkgXHUwMDNjPSB2bWFfc3RhcnRfYW5vbl9wZ29mZih2bWEpKTtcbiBcdH0gZWxzZSB7XG4gXHRcdG5ld192bWEgPSB2bV9hcmVhX2R1cCh2bWEpO1xuIFx0XHRpZiAoIW5ld192bWEpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdHZtYV9zZXRfcmFuZ2UobmV3X3ZtYSwgYWRkciwgYWRkciAmIzQzOyBsZW4sIHBnb2ZmKTtcbiYjNDM7XHRcdHZtYV9zZXRfcmFuZ2UobmV3X3ZtYSwgYWRkciwgYWRkciAmIzQzOyBsZW4sIHBnb2ZmLCB2aXJ0X3Bnb2ZmKTtcbiBcdFx0aWYgKHZtYV9kdXBfcG9saWN5KHZtYSwgbmV3X3ZtYSkpXG4gXHRcdFx0Z290byBvdXRfZnJlZV92bWE7XG4gXHRcdGlmIChhbm9uX3ZtYV9jbG9uZShuZXdfdm1hLCB2bWEsIFZNQV9PUF9SRU1BUCkpXG5AQCAtMjAzNiw3ICYjNDM7MjA2NCwxMiBAQCBzdGF0aWMgaW50IGFub25fdm1hX2NvbXBhdGlibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICphLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKlxuIFx0aWYgKCF2bWFfZmxhZ3NfZW1wdHkoXHUwMDI2ZGlmZikpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdC8qIFBhZ2Ugb2Zmc2V0IG11c3QgYWxpZ24uICovXG4tXHRyZXR1cm4gdm1hX2VuZF9wZ29mZihhKSA9PSB2bWFfc3RhcnRfcGdvZmYoYik7XG4mIzQzO1x0aWYgKHZtYV9lbmRfcGdvZmYoYSkgIT0gdm1hX3N0YXJ0X3Bnb2ZmKGIpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdC8qIEFub24gcGFnZSBvZmZzZXQgbXVzdCBhbGlnbi4gKi9cbiYjNDM7XHRpZiAodm1hX2VuZF9hbm9uX3Bnb2ZmKGEpICE9IHZtYV9zdGFydF9hbm9uX3Bnb2ZmKGIpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdHJldHVybiB0cnVlO1xuIH1cbiBcbiAvKlxuQEAgLTI1NzksNiAmIzQzOzI2MTIsMzIgQEAgc3RhdGljIGludCBfX21tYXBfbmV3X2ZpbGVfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIG1hcF9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZpbGUgKmZpbGUgPSBtYXAtXHUwMDNlZmlsZTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGltYWpvcihpbm9kZSkgPT0gTUVNX01BSk9SIFx1MDAyNlx1MDAyNiBpbWlub3IoaW5vZGUpID09IERFVlpFUk9fTUlOT1I7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1hcF9zZXRfYW5vbihzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxuJiM0Mzt7XG4mIzQzO1x0bWFwLVx1MDAzZWZpbGUgPSBOVUxMO1xuJiM0MztcdG1hcC1cdTAwM2VmaWxlX2RvZXNudF9uZWVkX2dldCA9IGZhbHNlO1xuJiM0MztcdG1hcC1cdTAwM2VwZ29mZiA9IG1hcC1cdTAwM2VhZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdG1hcC1cdTAwM2V2bV9vcHMgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBtYXBfaXNfcHJpdmF0ZShjb25zdCBzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICF2bWFfZmxhZ3NfdGVzdChcdTAwMjZtYXAtXHUwMDNldm1hX2ZsYWdzLCBWTUFfU0hBUkVEX0JJVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG1hcF9pc19hbm9uKGNvbnN0IHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbWFwX2lzX3ByaXZhdGUobWFwKSBcdTAwMjZcdTAwMjYgIW1hcC1cdTAwM2VmaWxlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogX19tbWFwX25ld192bWEoKSAtIEFsbG9jYXRlIGEgbmV3IFZNQSBmb3IgdGhlIHJlZ2lvbiwgYXMgbWVyZ2luZyB3YXMgbm90XG4gICogcG9zc2libGUuXG5AQCAtMjU5Miw4ICYjNDM7MjY1MSw3IEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxuIHN0YXRpYyBpbnQgX19tbWFwX25ld192bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcbiBcdHN0cnVjdCBtbWFwX2FjdGlvbiAqYWN0aW9uKVxuIHtcbi1cdGNvbnN0IGJvb2wgaXNfYW5vbiA9ICFtYXAtXHUwMDNlZmlsZSBcdTAwMjZcdTAwMjZcbi1cdFx0IXZtYV9mbGFnc190ZXN0KFx1MDAyNm1hcC1cdTAwM2V2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKTtcbiYjNDM7XHRjb25zdCBib29sIGlzX2Fub24gPSBtYXBfaXNfYW5vbihtYXApO1xuIFx0c3RydWN0IHZtYV9pdGVyYXRvciAqdm1pID0gbWFwLVx1MDAzZXZtaTtcbiBcdGludCBlcnJvciA9IDA7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbkBAIC0yNjEyLDcgJiM0MzsyNjcwLDcgQEAgc3RhdGljIGludCBfX21tYXBfbmV3X3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxuIFx0aWYgKGlzX2Fub24pXG4gXHRcdHZtYV9zZXRfYW5vbnltb3VzKHZtYSk7XG4gXG4tXHR2bWFfc2V0X3JhbmdlKHZtYSwgbWFwLVx1MDAzZWFkZHIsIG1hcC1cdTAwM2VlbmQsIG1hcC1cdTAwM2VwZ29mZik7XG4mIzQzO1x0dm1hX3NldF9yYW5nZSh2bWEsIG1hcC1cdTAwM2VhZGRyLCBtYXAtXHUwMDNlZW5kLCBtYXAtXHUwMDNlcGdvZmYsIG1hcC1cdTAwM2V2aXJ0X3Bnb2ZmKTtcbiBcdHZtYS1cdTAwM2VmbGFncyA9IG1hcC1cdTAwM2V2bWFfZmxhZ3M7XG4gXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gbWFwLVx1MDAzZXBhZ2VfcHJvdDtcbiBcbkBAIC0yNzM1LDYgJiM0MzsyNzkzLDEwIEBAIHN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4mIzQzO1x0LyogSG9va3MgY2Fubm90IG1hcmsgdGhlbXNlbHZlcyBhbm9ueW1vdXMuICovXG4mIzQzO1x0aWYgKCFkZXNjLVx1MDAzZXZtX29wcylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdGVyciA9IGNhbGxfYWN0aW9uX3ByZXBhcmUobWFwLCBkZXNjKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG5AQCAtMjc1MSwxNiAmIzQzOzI4MTMsMjEgQEAgc3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxuIFx0bWFwLVx1MDAzZXZtX29wcyA9IGRlc2MtXHUwMDNldm1fb3BzO1xuIFx0bWFwLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IGRlc2MtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogTUFQX1BSSVZBVEUtL2Rldi96ZXJvIG1hcHBpbmdzIGFyZSBhbiBhbmNpZW50IHdheSBvZiBnZXR0aW5nXG4mIzQzO1x0ICogYW5vbnltb3VzIG1hcHBpbmdzLiBSYXRoZXIgdGhhbiBhbGxvd2luZyB0aGVzZSBtYXBwaW5ncyB0byBiZSBvZGRcbiYjNDM7XHQgKiBvdXRsaWVycywgc2ltcGx5IG1ha2UgdGhlbSB0cnVseSBhbm9ueW1vdXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG1hcF9pc19wcml2YXRlKG1hcCkgXHUwMDI2XHUwMDI2IG1hcF9pc19kZXZfemVybyhtYXApKVxuJiM0MztcdFx0bWFwX3NldF9hbm9uKG1hcCk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNldF92bWFfdXNlcl9kZWZpbmVkX2ZpZWxkcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0c3RydWN0IG1tYXBfc3RhdGUgKm1hcClcbiB7XG4tXHRpZiAobWFwLVx1MDAzZXZtX29wcylcbi1cdFx0dm1hLVx1MDAzZXZtX29wcyA9IG1hcC1cdTAwM2V2bV9vcHM7XG4tXHRlbHNlXHQvKiBPbmx5IC9kZXYvemVybyBzaG91bGQgZG8gdGhpcy4gKi9cbi1cdFx0dm1hX3NldF9hbm9ueW1vdXModm1hKTtcbiYjNDM7XHR2bWEtXHUwMDNldm1fb3BzID0gbWFwLVx1MDAzZXZtX29wcztcbiBcdHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBtYXAtXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xuIH1cbiBcbkBAIC0yODAxLDcgJiM0MzsyODY4LDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBOVUxMO1xuIFx0Ym9vbCBoYXZlX21tYXBfcHJlcGFyZSA9IGZpbGUgXHUwMDI2XHUwMDI2IGZpbGUtXHUwMDNlZl9vcC1cdTAwM2VtbWFwX3ByZXBhcmU7XG4gXHRWTUFfSVRFUkFUT1Iodm1pLCBtbSwgYWRkcik7XG4tXHRNTUFQX1NUQVRFKG1hcCwgbW0sIFx1MDAyNnZtaSwgYWRkciwgbGVuLCBwZ29mZiwgdm1hX2ZsYWdzLCBmaWxlKTtcbiYjNDM7XHRjb25zdCBwZ29mZl90IHZpcnRfcGdvZmYgPSBhZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdE1NQVBfU1RBVEUobWFwLCBtbSwgXHUwMDI2dm1pLCBhZGRyLCBsZW4sIHBnb2ZmLCB2aXJ0X3Bnb2ZmLCB2bWFfZmxhZ3MsIGZpbGUpO1xuIFx0c3RydWN0IHZtX2FyZWFfZGVzYyBkZXNjID0ge1xuIFx0XHQubW0gPSBtbSxcbiBcdFx0LmZpbGUgPSBmaWxlLFxuQEAgLTI5NDYsNiAmIzQzOzMwMTQsNyBAQCBpbnQgZG9fYnJrX2ZsYWdzKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuJiM0MztcdGNvbnN0IHBnb2ZmX3QgcGdvZmYgPSBhZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFxuIFx0LypcbiBcdCAqIENoZWNrIGFnYWluc3QgYWRkcmVzcyBzcGFjZSBsaW1pdHMgYnkgdGhlIGNoYW5nZWQgc2l6ZVxuQEAgLTI5NzAsNyAmIzQzOzMwMzksNyBAQCBpbnQgZG9fYnJrX2ZsYWdzKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHQgKiBvY2N1ciBhZnRlciBmb3JraW5nLCBzbyB0aGUgZXhwYW5kIHdpbGwgb25seSBoYXBwZW4gb24gbmV3IFZNQXMuXG4gXHQgKi9cbiBcdGlmICh2bWEgXHUwMDI2XHUwMDI2IHZtYS1cdTAwM2V2bV9lbmQgPT0gYWRkcikge1xuLVx0XHRWTUdfU1RBVEUodm1nLCBtbSwgdm1pLCBhZGRyLCBhZGRyICYjNDM7IGxlbiwgdm1hX2ZsYWdzLCBQSFlTX1BGTihhZGRyKSk7XG4mIzQzO1x0XHRWTUdfU1RBVEUodm1nLCBtbSwgdm1pLCBhZGRyLCBhZGRyICYjNDM7IGxlbiwgdm1hX2ZsYWdzLCBwZ29mZiwgcGdvZmYpO1xuIFxuIFx0XHR2bWcucHJldiA9IHZtYTtcbiBcdFx0Lyogdm1pIGlzIHBvc2l0aW9uZWQgYXQgcHJldiwgd2hpY2ggdGhpcyBtb2RlIGV4cGVjdHMuICovXG5AQCAtMjk5MCw3ICYjNDM7MzA1OSw3IEBAIGludCBkb19icmtfZmxhZ3Moc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0Z290byB1bmFjY3RfZmFpbDtcbiBcbiBcdHZtYV9zZXRfYW5vbnltb3VzKHZtYSk7XG4tXHR2bWFfc2V0X3JhbmdlKHZtYSwgYWRkciwgYWRkciAmIzQzOyBsZW4sIGFkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuJiM0MztcdHZtYV9zZXRfcmFuZ2Uodm1hLCBhZGRyLCBhZGRyICYjNDM7IGxlbiwgcGdvZmYsIHBnb2ZmKTtcbiBcdHZtYS1cdTAwM2VmbGFncyA9IHZtYV9mbGFncztcbiBcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSk7XG4gXHR2bWFfc3RhcnRfd3JpdGUodm1hKTtcbkBAIC0zMzgyLDYgJiM0MzszNDUxLDcgQEAgaW50IGluc2VydF92bV9zdHJ1Y3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0XHRXQVJOX09OX09OQ0Uodm1hLVx1MDAzZWFub25fdm1hKTtcbiBcdFx0dm1hX3NldF9wZ29mZih2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4gXHR9XG4mIzQzO1x0dm1hX3NldF92aXJ0X3Bnb2ZmKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiBcbiBcdGlmICh2bWFfbGluayhtbSwgdm1hKSkge1xuIFx0XHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfQUNDT1VOVF9CSVQpKVxuQEAgLTM0MzcsNyAmIzQzOzM1MDcsNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKl9faW5zdGFsbF9zcGVjaWFsX21hcHBpbmcoXG4gXG4gXHR2bWEtXHUwMDNldm1fb3BzID0gb3BzO1xuIFx0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHByaXY7XG4tXHR2bWFfc2V0X3JhbmdlKHZtYSwgYWRkciwgYWRkciAmIzQzOyBsZW4sIDApO1xuJiM0MztcdHZtYV9zZXRfcmFuZ2Uodm1hLCBhZGRyLCBhZGRyICYjNDM7IGxlbiwgMCwgYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4gXG4gXHRyZXQgPSBpbnNlcnRfdm1fc3RydWN0KG1tLCB2bWEpO1xuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9tbS92bWEuaCBiL21tL3ZtYS5oXG5pbmRleCAwYmM3ZDUyMWU5NzY3Ny4uOGNhZWUzYjRiYTI2NzEgMTAwNjQ0XG4tLS0gYS9tbS92bWEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hLmhcbkBAIC0xMDQsNiAmIzQzOzEwNCw3IEBAIHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0IHtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQ7XG4gXHR1bnNpZ25lZCBsb25nIGVuZDtcbiBcdHBnb2ZmX3QgcGdvZmY7XG4mIzQzO1x0cGdvZmZfdCBhbm9uX3Bnb2ZmO1xuIFxuIFx0dW5pb24ge1xuIFx0XHQvKiBUZW1wb3Jhcnkgd2hpbGUgVk1BIGZsYWdzIGFyZSBiZWluZyBjb252ZXJ0ZWQuICovXG5AQCAtMjM3LDExICYjNDM7MjM4LDYgQEAgc3RhdGljIGlubGluZSBib29sIHZtZ19ub21lbShzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nKVxuIFx0cmV0dXJuIHZtZy1cdTAwM2VzdGF0ZSA9PSBWTUFfTUVSR0VfRVJST1JfTk9NRU07XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWdfc3RhcnRfcGdvZmYoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcbi17XG4tXHRyZXR1cm4gdm1nLVx1MDAzZXBnb2ZmO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1nX3BhZ2VzKGNvbnN0IHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXG4ge1xuIFx0Y29uc3QgdW5zaWduZWQgbG9uZyBzaXplID0gdm1nLVx1MDAzZWVuZCAtIHZtZy1cdTAwM2VzdGFydDtcbkBAIC0yNDksNiAmIzQzOzI0NSwxMSBAQCBzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1nX3BhZ2VzKGNvbnN0IHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXG4gXHRyZXR1cm4gc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWdfc3RhcnRfcGdvZmYoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB2bWctXHUwMDNlcGdvZmY7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBwZ29mZl90IHZtZ19lbmRfcGdvZmYoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcbiB7XG4gXHRyZXR1cm4gdm1nX3N0YXJ0X3Bnb2ZmKHZtZykgJiM0Mzsgdm1nX3BhZ2VzKHZtZyk7XG5AQCAtMjY2LDkgJiM0MzsyNjcsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X3NhbmVfcGdvZmYoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgcGdvZmYpXG4gXHQgKi9cbiBcdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpKVxuIFx0XHRyZXR1cm47XG4tXHQvKiBNQVBfUFJJVkFURS0vZGV2L3plcm8gaXMgYW5vbiwgbm9uLU5VTEwgdm1fZmlsZSwgYnV0IGhhcyBmaWxlIHBnb2ZmLiAqL1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9maWxlKVxuLVx0XHRyZXR1cm47XG4gXHQvKiBJZiBmYXVsdGVkIGluLCBjb3VsZCBoYXZlIGJlZW4gcmVtYXBwZWQuICovXG4gXHRpZiAodm1hLVx1MDAzZWFub25fdm1hKVxuIFx0XHRyZXR1cm47XG5AQCAtMjgzLDQ4ICYjNDM7MjgxLDEzMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX3NldF9wZ29mZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBwZ29mZilcbiBcdHZtYS1cdTAwM2V2bV9wZ29mZiA9IHBnb2ZmO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBwZ29mZl90IHZtZ19zdGFydF9hbm9uX3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdm1nLVx1MDAzZWFub25fcGdvZmY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWdfZW5kX2Fub25fcGdvZmYoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB2bWdfc3RhcnRfYW5vbl9wZ29mZih2bWcpICYjNDM7IHZtZ19wYWdlcyh2bWcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX192bWFfc2V0X3ZpcnRfcGdvZmYoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgcGdvZmYpXG4mIzQzO3tcbiYjNDM7I2lmZGVmIENPTkZJR182NEJJVFxuJiM0MztcdHZtYS1cdTAwM2VfX3ZtX3ZpcnRfcGdvZmZfaGkgPSBwZ29mZiBcdTAwM2VcdTAwM2UgMzI7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHZtYS1cdTAwM2VfX3ZtX3ZpcnRfcGdvZmZfbG8gPSBwZ29mZiBcdTAwMjYgR0VOTUFTSygzMSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2bWFfc2V0X3ZpcnRfcGdvZmYoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgcGdvZmYpXG4mIzQzO3tcbiYjNDM7XHR2bWFfYXNzZXJ0X2Nhbl9tb2RpZnkodm1hKTtcbiYjNDM7XHRfX3ZtYV9zZXRfdmlydF9wZ29mZih2bWEsIHBnb2ZmKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX2FkZF9wZ29mZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBkZWx0YSlcbiB7XG4gXHR2bWFfYXNzZXJ0X2Nhbl9tb2RpZnkodm1hKTtcbiBcdHZtYV9zZXRfcGdvZmYodm1hLCB2bWFfc3RhcnRfcGdvZmYodm1hKSAmIzQzOyBkZWx0YSk7XG4mIzQzO1x0dm1hX3NldF92aXJ0X3Bnb2ZmKHZtYSwgdm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSAmIzQzOyBkZWx0YSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfc3ViX3Bnb2ZmKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGRlbHRhKVxuIHtcbiBcdHZtYV9hc3NlcnRfY2FuX21vZGlmeSh2bWEpO1xuIFx0dm1hX3NldF9wZ29mZih2bWEsIHZtYV9zdGFydF9wZ29mZih2bWEpIC0gZGVsdGEpO1xuJiM0MztcdHZtYV9zZXRfdmlydF9wZ29mZih2bWEsIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSkgLSBkZWx0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB2bWFfYW5vbl9wZ29mZl9hZGRyKCkgLSBDYWxjdWxhdGVzIHRoZSBhYnNvbHV0ZSBhbm9ueW1vdXMgcGFnZSBvZmZzZXQgb2ZcbiYjNDM7ICogQGFkZHJlc3MuXG4mIzQzOyAqIEB2bWE6IFRoZSBWTUEgd2hvc2UgYW5vbnltb3VzIHBhZ2Ugb2Zmc2V0IGlzIHJlcXVpcmVkLlxuJiM0MzsgKiBAYWRkcmVzczogVGhlIGFkZHJlc3Mgd2hvc2UgYWJzb2x1dGUgcGFnZSBvZmZzZXQgaXMgcmVxdWlyZWQuXG4mIzQzOyAqXG4mIzQzOyAqIElmIHRoZSBWTUEgaXMgYSBzaGFyZWQgZmlsZS1iYWNrZWQgbWFwcGluZywgdGhlbiB0aGUgZmlsZS1iYXNlZCBwYWdlIG9mZnNldFxuJiM0MzsgKiBpcyByZXR1cm5lZC5cbiYjNDM7ICpcbiYjNDM7ICogT3RoZXJ3aXNlLCB0aGUgdmlydHVhbCBwYWdlIG9mZnNldCBpcyByZXR1cm5lZC5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBtZWFucyB0aGF0IHNoYXJlZCBmaWxlLWJhY2tlZCBtYXBwaW5ncyBhcmUgY29ycmVjdGx5IG1lcmdlZCBiYXNlZCBvblxuJiM0MzsgKiB0aGVpciBmaWxlIHBhZ2Ugb2Zmc2V0IGNvbXBhdGliaWxpdHkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IFRoZSBhYnNvbHV0ZSBhbm9ueW1vdXMgcGFnZSBvZmZzZXQgb2YgQGFkZHJlc3Mgd2l0aGluIEB2bWEuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1hX2Fub25fcGdvZmZfYWRkcihjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjNDM7XHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX1NIQVJFRF9CSVQpKVxuJiM0MztcdFx0cmV0dXJuIGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBsaW5lYXJfdmlydF9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyk7XG4gfVxuIFxuLSNkZWZpbmUgVk1HX1NUQVRFKG5hbWUsIG1tXywgdm1pXywgc3RhcnRfLCBlbmRfLCB2bWFfZmxhZ3NfLCBwZ29mZl8pXHRcXFxuJiM0MzsvKipcbiYjNDM7ICogdm1hX3N0YXJ0X2Fub25fcGdvZmYoKSAtIENhbGN1bGF0ZXMgdGhlIGFic29sdXRlIGFub255bW91cyBwYWdlIG9mZnNldCB1c2VkXG4mIzQzOyAqIGZvciBwdXJwb3NlcyBvZiBtZXJnZSBjb21wYXRpYmlsaXR5LlxuJiM0MzsgKiBAdm1hOiBUaGUgVk1BIHdob3NlIGFub255bW91cyBwYWdlIG9mZnNldCBpcyByZXF1aXJlZC5cbiYjNDM7ICpcbiYjNDM7ICogU2VlIHZtYV9hbm9uX3Bnb2ZmX2FkZHIoKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogVGhlIGFic29sdXRlIGFub255bW91cyBwYWdlIG9mZnNldCBvZiBAdm1hIGZvciBwdXJwb3NlcyBvZiBtZXJnaW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9zdGFydF9hbm9uX3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHZtYV9hbm9uX3Bnb2ZmX2FkZHIodm1hLCB2bWEtXHUwMDNldm1fc3RhcnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogdm1hX2VuZF9hbm9uX3Bnb2ZmKCkgLSBDYWxjdWxhdGVzIHRoZSBhYnNvbHV0ZSBleGNsdXNpdmUgZW5kIGFub255bW91cyBwYWdlXG4mIzQzOyAqIG9mZnNldCB1c2VkIGZvciBwdXJwb3NlcyBvZiBtZXJnZSBjb21wYXRpYmlsaXR5LlxuJiM0MzsgKiBAdm1hOiBUaGUgVk1BIHdob3NzZSBhbm9ueW1vdXMgZW5kIHBhZ2Ugb2Zmc2V0IGlzIHJlcXVpcmVkLlxuJiM0MzsgKlxuJiM0MzsgKiBTZWUgdm1hX3N0YXJ0X2Fub25fcGdvZmYoKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogVGhlIGFic29sdXRlIGV4Y2x1c2l2ZSBlbmQgYW5vbnltb3VzIHBhZ2Ugb2Zmc2V0IG9mIEB2bWEgZm9yXG4mIzQzOyAqIHB1cnBvc2VzIG9mIG1lcmdpbmcuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1hX2VuZF9hbm9uX3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHZtYV9zdGFydF9hbm9uX3Bnb2ZmKHZtYSkgJiM0Mzsgdm1hX3BhZ2VzKHZtYSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgVk1HX1NUQVRFKG5hbWUsIG1tXywgdm1pXywgc3RhcnRfLCBlbmRfLCB2bWFfZmxhZ3NfLCBwZ29mZl8sIGFub25fcGdvZmZfKSBcXFxuJiM0MztcdHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0IG5hbWUgPSB7XHRcdFx0XHRcdCAgXFxcbiYjNDM7XHRcdC5tbSA9IG1tXyxcdFx0XHRcdFx0XHRcdCAgXFxcbiYjNDM7XHRcdC52bWkgPSB2bWlfLFx0XHRcdFx0XHRcdFx0ICBcXFxuJiM0MztcdFx0LnN0YXJ0ID0gc3RhcnRfLFx0XHRcdFx0XHRcdCAgXFxcbiYjNDM7XHRcdC5lbmQgPSBlbmRfLFx0XHRcdFx0XHRcdFx0ICBcXFxuJiM0MztcdFx0LnZtYV9mbGFncyA9IHZtYV9mbGFnc18sXHRcdFx0XHRcdCAgXFxcbiYjNDM7XHRcdC5wZ29mZiA9IHBnb2ZmXyxcdFx0XHRcdFx0XHQgIFxcXG4mIzQzO1x0XHQuYW5vbl9wZ29mZiA9IGFub25fcGdvZmZfLFx0XHRcdFx0XHQgIFxcXG4mIzQzO1x0XHQuc3RhdGUgPSBWTUFfTUVSR0VfU1RBUlQsXHRcdFx0XHRcdCAgXFxcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFZNR19WTUFfU1RBVEUobmFtZSwgdm1pXywgcHJldl8sIHZtYV8sIHN0YXJ0XywgZW5kXylcdFx0XFxcbiBcdHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0IG5hbWUgPSB7XHRcdFx0XHRcXFxuLVx0XHQubW0gPSBtbV8sXHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdC5tbSA9IHZtYV8tXHUwMDNldm1fbW0sXHRcdFx0XHRcdFxcXG4gXHRcdC52bWkgPSB2bWlfLFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHQucHJldiA9IHByZXZfLFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHQubWlkZGxlID0gdm1hXyxcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0Lm5leHQgPSBOVUxMLFx0XHRcdFx0XHRcdFxcXG4gXHRcdC5zdGFydCA9IHN0YXJ0XyxcdFx0XHRcdFx0XFxcbiBcdFx0LmVuZCA9IGVuZF8sXHRcdFx0XHRcdFx0XFxcbi1cdFx0LnZtYV9mbGFncyA9IHZtYV9mbGFnc18sXHRcdFx0XHRcXFxuLVx0XHQucGdvZmYgPSBwZ29mZl8sXHRcdFx0XHRcdFxcXG4mIzQzO1x0XHQudm1fZmxhZ3MgPSB2bWFfLVx1MDAzZXZtX2ZsYWdzLFx0XHRcdFx0XFxcbiYjNDM7XHRcdC5wZ29mZiA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYV8sIHN0YXJ0XyksXHRcdFxcXG4mIzQzO1x0XHQuYW5vbl9wZ29mZiA9IHZtYV9hbm9uX3Bnb2ZmX2FkZHIodm1hXywgc3RhcnRfKSxcdFxcXG4mIzQzO1x0XHQuZmlsZSA9IHZtYV8tXHUwMDNldm1fZmlsZSxcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdC5hbm9uX3ZtYSA9IHZtYV8tXHUwMDNlYW5vbl92bWEsXHRcdFx0XHRcXFxuJiM0MztcdFx0LnBvbGljeSA9IHZtYV9wb2xpY3kodm1hXyksXHRcdFx0XHRcXFxuJiM0MztcdFx0LnVmZmRfY3R4ID0gdm1hXy1cdTAwM2V2bV91c2VyZmF1bHRmZF9jdHgsXHRcdFx0XFxcbiYjNDM7XHRcdC5hbm9uX25hbWUgPSBhbm9uX3ZtYV9uYW1lKHZtYV8pLFx0XHRcdFxcXG4gXHRcdC5zdGF0ZSA9IFZNQV9NRVJHRV9TVEFSVCxcdFx0XHRcdFxcXG4gXHR9XG4gXG4tI2RlZmluZSBWTUdfVk1BX1NUQVRFKG5hbWUsIHZtaV8sIHByZXZfLCB2bWFfLCBzdGFydF8sIGVuZF8pXHRcXFxuLVx0c3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgbmFtZSA9IHtcdFx0XHRcXFxuLVx0XHQubW0gPSB2bWFfLVx1MDAzZXZtX21tLFx0XHRcdFx0XFxcbi1cdFx0LnZtaSA9IHZtaV8sXHRcdFx0XHRcdFxcXG4tXHRcdC5wcmV2ID0gcHJldl8sXHRcdFx0XHRcdFxcXG4tXHRcdC5taWRkbGUgPSB2bWFfLFx0XHRcdFx0XHRcXFxuLVx0XHQubmV4dCA9IE5VTEwsXHRcdFx0XHRcdFxcXG4tXHRcdC5zdGFydCA9IHN0YXJ0XyxcdFx0XHRcdFxcXG4tXHRcdC5lbmQgPSBlbmRfLFx0XHRcdFx0XHRcXFxuLVx0XHQudm1fZmxhZ3MgPSB2bWFfLVx1MDAzZXZtX2ZsYWdzLFx0XHRcdFxcXG4tXHRcdC5wZ29mZiA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYV8sIHN0YXJ0XyksXHRcXFxuLVx0XHQuZmlsZSA9IHZtYV8tXHUwMDNldm1fZmlsZSxcdFx0XHRcdFxcXG4tXHRcdC5hbm9uX3ZtYSA9IHZtYV8tXHUwMDNlYW5vbl92bWEsXHRcdFx0XFxcbi1cdFx0LnBvbGljeSA9IHZtYV9wb2xpY3kodm1hXyksXHRcdFx0XFxcbi1cdFx0LnVmZmRfY3R4ID0gdm1hXy1cdTAwM2V2bV91c2VyZmF1bHRmZF9jdHgsXHRcdFxcXG4tXHRcdC5hbm9uX25hbWUgPSBhbm9uX3ZtYV9uYW1lKHZtYV8pLFx0XHRcXFxuLVx0XHQuc3RhdGUgPSBWTUFfTUVSR0VfU1RBUlQsXHRcdFx0XFxcbi1cdH1cbi1cbiAjaWZkZWYgQ09ORklHX0RFQlVHX1ZNX01BUExFX1RSRUVcbiB2b2lkIHZhbGlkYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbiAjZWxzZVxuQEAgLTUwNiw3ICYjNDM7NTg2LDcgQEAgdm9pZCB1bmxpbmtfZmlsZV92bWFfYmF0Y2hfYWRkKHN0cnVjdCB1bmxpbmtfdm1hX2ZpbGVfYmF0Y2ggKnZiLFxuIFxuIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqY29weV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcbiBcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHBnb2ZmX3QgcGdvZmYsXG4tXHRib29sICpuZWVkX3JtYXBfbG9ja3MpO1xuJiM0MztcdHBnb2ZmX3QgYW5vbl9wZ29mZiwgYm9vbCAqbmVlZF9ybWFwX2xvY2tzKTtcbiBcbiBzdHJ1Y3QgYW5vbl92bWEgKmZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbiBcbmRpZmYgLS1naXQgYS9tbS92bWFfZXhlYy5jIGIvbW0vdm1hX2V4ZWMuY1xuaW5kZXggN2FmMTI2MDY4OWI5N2UuLjU4NmM1MjE1NTk0MjQ1IDEwMDY0NFxuLS0tIGEvbW0vdm1hX2V4ZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hX2V4ZWMuY1xuQEAgLTQxLDcgJiM0Mzs0MSw3IEBAIGludCByZWxvY2F0ZV92bWFfZG93bihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzaGlmdClcbiBcdHVuc2lnbmVkIGxvbmcgbmV3X2VuZCA9IG9sZF9lbmQgLSBzaGlmdDtcbiBcdFZNQV9JVEVSQVRPUih2bWksIG1tLCBuZXdfc3RhcnQpO1xuIFx0Vk1HX1NUQVRFKHZtZywgbW0sIFx1MDAyNnZtaSwgbmV3X3N0YXJ0LCBvbGRfZW5kLCBFTVBUWV9WTUFfRkxBR1MsXG4tXHRcdCAgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSkpO1xuJiM0MztcdFx0ICB2bWFfc3RhcnRfcGdvZmYodm1hKSwgdm1hX3N0YXJ0X2Fub25fcGdvZmYodm1hKSk7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQ7XG4gXHRzdHJ1Y3QgbW11X2dhdGhlciB0bGI7XG4gXHRQQUdFVEFCTEVfTU9WRShwbWMsIHZtYSwgdm1hLCBvbGRfc3RhcnQsIG5ld19zdGFydCwgbGVuZ3RoKTtcbmRpZmYgLS1naXQgYS9tbS92bWFfaW5pdC5jIGIvbW0vdm1hX2luaXQuY1xuaW5kZXggNzE1ZmVlZTI4M2YwZmIuLjcxMGIxODg0OWEzNjk2IDEwMDY0NFxuLS0tIGEvbW0vdm1hX2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hX2luaXQuY1xuQEAgLTUxLDYgJiM0Mzs1MSw3IEBAIHN0YXRpYyB2b2lkIHZtX2FyZWFfaW5pdF9mcm9tKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuIFx0ZGVzdC1cdTAwM2V2bV9lbmQgPSBzcmMtXHUwMDNldm1fZW5kO1xuIFx0ZGVzdC1cdTAwM2Vhbm9uX3ZtYSA9IHNyYy1cdTAwM2Vhbm9uX3ZtYTtcbiBcdGRlc3QtXHUwMDNldm1fcGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYoc3JjKTtcbiYjNDM7XHRfX3ZtYV9zZXRfdmlydF9wZ29mZihkZXN0LCB2bWFfc3RhcnRfdmlydF9wZ29mZihzcmMpKTtcbiBcdGRlc3QtXHUwMDNldm1fZmlsZSA9IHNyYy1cdTAwM2V2bV9maWxlO1xuIFx0ZGVzdC1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBzcmMtXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xuIFx0dm1fZmxhZ3NfaW5pdChkZXN0LCBzcmMtXHUwMDNldm1fZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL21tL3ZtYV9pbnRlcm5hbC5oIGIvbW0vdm1hX2ludGVybmFsLmhcbmluZGV4IDRkMzAwZTdiYmFmNGMyLi4zODVjMGFiMTM3Nzc0OCAxMDA2NDRcbi0tLSBhL21tL3ZtYV9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFfaW50ZXJuYWwuaFxuQEAgLTIzLDYgJiM0MzsyMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3NtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9raHVnZXBhZ2VkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWFqb3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21hcGxlX3RyZWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jXG5pbmRleCA1MTllNWFjMDJkYjc4Yy4uZWRmYmQzOWFlNThlYjQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jXG5AQCAtMTMwNSw2ICYjNDM7MTMwNSwxNjcgQEAgVEVTVF9GKG1lcmdlLCBtZXJnZV92bWFzX3dpdGhfbXNlYWwpXG4gXHRBU1NFUlRfRVEocHJvY21hcC1cdTAwM2VxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgJiM0MzsgMiAqIHBhZ2Vfc2l6ZSk7XG4gfVxuIFxuJiM0MztURVNUX0YobWVyZ2UsIHZpcnRfYW5kX3BhZ2Vfb2Zmc2V0X21pc21hdGNoX21lbWZkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSBcdTAwMjZzZWxmLVx1MDAzZXByb2NtYXA7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHNlbGYtXHUwMDNlcGFnZV9zaXplO1xuJiM0MztcdGNoYXIgKmNhcnZlb3V0ID0gc2VsZi1cdTAwM2VjYXJ2ZW91dDtcbiYjNDM7XHRjaGFyICpwdHIsICpwdHIyO1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0LyogQ3JlYXRlIGEgMTAgcGFnZSBtZW1mZCBkZXNjcmlwdG9yLiAqL1xuJiM0MztcdGZkID0gbWVtZmRfY3JlYXRlKFwmIzM0O3ZpcnRfcGFnZV9vZmZzZXRfdGVzdFwmIzM0OywgTUZEX0NMT0VYRUMpO1xuJiM0MztcdEFTU0VSVF9ORShmZCwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShmdHJ1bmNhdGUoZmQsIDEwICogcGFnZV9zaXplKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIE1hcCBhIHJlZ2lvbiB1c2luZyB0aGUgbWVtZmQgYXQgcGFnZSBvZmZzZXQgMC4gKi9cbiYjNDM7XHRwdHIgPSBtbWFwKGNhcnZlb3V0LCA1ICogcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdFx0ICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkLCAwKTtcbiYjNDM7XHRBU1NFUlRfTkUocHRyLCBNQVBfRkFJTEVEKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXAgYW5vdGhlciBzZXBhcmF0ZWx5LCBhbmQgZmF1bHQgaW4sIGF0IHBhZ2Ugb2Zmc2V0IDU6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiB8LS0tLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfFxuJiM0MztcdCAqIHwgdW5mYXVsdGVkIHwgICAgICAgICAgIHwgZmF1bHRlZCB8XG4mIzQzO1x0ICogfC0tLS0tLS0tLS0tfCAgICAgICAgICAgfC0tLS0tLS0tLXxcbiYjNDM7XHQgKi9cbiYjNDM7XHRwdHIyID0gbW1hcChcdTAwMjZjYXJ2ZW91dFsxMCAqIHBhZ2Vfc2l6ZV0sIDUgKiBwYWdlX3NpemUsXG4mIzQzO1x0XHQgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsXG4mIzQzO1x0XHQgICAgZmQsIDUgKiBwYWdlX3NpemUpO1xuJiM0MztcdEFTU0VSVF9ORShwdHIyLCBNQVBfRkFJTEVEKTtcbiYjNDM7XHRwdHIyWzBdID0gJiMzOTt4JiMzOTs7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm93IG1vdmUgaXQgaW4gcGxhY2U6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiAgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLXxcbiYjNDM7XHQgKiAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHxcbiYjNDM7XHQgKiAgICAgICAgICAgICAgICAgICB2ICAgICAgICAgIHxcbiYjNDM7XHQgKiB8LS0tLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfFxuJiM0MztcdCAqIHwgdW5mYXVsdGVkIHwgICAgICAgICAgIHwgZmF1bHRlZCB8XG4mIzQzO1x0ICogfC0tLS0tLS0tLS0tfCAgICAgICAgICAgfC0tLS0tLS0tLXxcbiYjNDM7XHQgKlxuJiM0MztcdCAqIEJlY2F1c2UgdmlydHVhbCBwYWdlIG9mZnNldCBvZiB0aGUgZmF1bHRlZCByZWdpb24gaXMgbm93XG4mIzQzO1x0ICogXHUwMDI2Y2FydmVvdXRbMTAgKiBwYWdlX3NpemVdLCBkZXNwaXRlIHRoZSB0d28gcmVnaW9ucyBiZWluZyBtZXJnZWFibGVcbiYjNDM7XHQgKiBkdWUgdG8gZmlsZSBwYWdlIG9mZnNldCwgdGhleSBhcmUgTk9UIG1lcmdlYWJsZSBkdWUgdG8gdmlydHVhbCBwYWdlXG4mIzQzO1x0ICogb2Zmc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdHB0cjIgPSBzeXNfbXJlbWFwKHB0cjIsIDUgKiBwYWdlX3NpemUsIDUgKiBwYWdlX3NpemUsXG4mIzQzO1x0XHRcdCAgTVJFTUFQX01BWU1PVkUgfCBNUkVNQVBfRklYRUQsXG4mIzQzO1x0XHRcdCAgXHUwMDI2Y2FydmVvdXRbNSAqIHBhZ2Vfc2l6ZV0pO1xuJiM0MztcdEFTU0VSVF9ORShwdHIyLCBNQVBfRkFJTEVEKTtcbiYjNDM7XG4mIzQzO1x0LyogQXNzZXJ0IHRoYXQgdGhleSBkaWQgbm90IG1lcmdlLiAqL1xuJiM0MztcdEFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX3N0YXJ0LCAodW5zaWduZWQgbG9uZylwdHIpO1xuJiM0MztcdEFTU0VSVF9FUShwcm9jbWFwLVx1MDAzZXF1ZXJ5LnZtYV9lbmQsICh1bnNpZ25lZCBsb25nKXB0ciAmIzQzOyA1ICogcGFnZV9zaXplKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKG1lcmdlLCBtZXJnZV9tYXBfcHJpdmF0ZV9kZXZfemVyb191bmZhdWx0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHJvY21hcF9mZCAqcHJvY21hcCA9IFx1MDAyNnNlbGYtXHUwMDNlcHJvY21hcDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gc2VsZi1cdTAwM2VwYWdlX3NpemU7XG4mIzQzO1x0Y2hhciAqY2FydmVvdXQgPSBzZWxmLVx1MDAzZWNhcnZlb3V0O1xuJiM0MztcdGNoYXIgKnB0ciwgKnB0cjI7XG4mIzQzO1x0aW50IGZkX3plcm87XG4mIzQzO1xuJiM0MztcdGlmIChhY2Nlc3MoXCYjMzQ7L2Rldi96ZXJvXCYjMzQ7LCBGX09LKSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtObyAvZGV2L3plcm8uXCYjMzQ7KTtcbiYjNDM7XHRmZF96ZXJvID0gb3BlbihcJiMzNDsvZGV2L3plcm9cJiMzNDssIE9fUkRXUik7XG4mIzQzO1x0QVNTRVJUX05FKGZkX3plcm8sIC0xKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXAgdHdvIE1BUF9QUklWQVRFLS9kZXYvemVybyBWTUFzIG5leHQgdG8gb25lIGFub3RoZXIgd2l0aCBvZmZzZXQgMFxuJiM0MztcdCAqIGVhY2guXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBXaXRoIHRoZXNlIGJlaW5nIG1hZGUgdHJ1bHkgYW5vbnltb3VzIHVwb24gbWFwcGluZywgdGhleSB3aWxsXG4mIzQzO1x0ICogbWVyZ2UuIElmIHRoZXkgd2VyZSBmaWxlLWJhY2tlZCBWTUFzIHRoZSBwYWdlIG9mZnNldHMgd291bGQgcHJldmVudFxuJiM0MztcdCAqIG1lcmdlOlxuJiM0MztcdCAqXG4mIzQzO1x0ICogfC0tLS0tfHwtLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tfFxuJiM0MztcdCAqIHwgcHRyIHx8IHB0cjIgfCAtXHUwMDNlIHwgICAgIHB0ciAgICAgfFxuJiM0MztcdCAqIHwtLS0tLXx8LS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLXxcbiYjNDM7XHQgKi9cbiYjNDM7XHRwdHIgPSBtbWFwKGNhcnZlb3V0LCA1ICogcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdFx0ICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApO1xuJiM0MztcdGlmIChwdHIgPT0gTUFQX0ZBSUxFRCkge1xuJiM0MztcdFx0Y2xvc2UoZmRfemVybyk7XG4mIzQzO1x0XHRBU1NFUlRfVFJVRShmYWxzZSk7XG4mIzQzO1x0fVxuJiM0MztcdHB0cjIgPSBtbWFwKFx1MDAyNmNhcnZlb3V0WzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplLFxuJiM0MztcdFx0ICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApO1xuJiM0MztcdGlmIChwdHIyID09IE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGNsb3NlKGZkX3plcm8pO1xuJiM0MztcdFx0QVNTRVJUX1RSVUUoZmFsc2UpO1xuJiM0MztcdH1cbiYjNDM7XHRjbG9zZShmZF96ZXJvKTtcbiYjNDM7XG4mIzQzO1x0LyogQXNzZXJ0IHRoYXQgdGhleSBtZXJnZWQuICovXG4mIzQzO1x0QVNTRVJUX1RSVUUoZmluZF92bWFfcHJvY21hcChwcm9jbWFwLCBwdHIpKTtcbiYjNDM7XHRBU1NFUlRfRVEocHJvY21hcC1cdTAwM2VxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7XG4mIzQzO1x0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX2VuZCwgKHVuc2lnbmVkIGxvbmcpcHRyICYjNDM7IDEwICogcGFnZV9zaXplKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKG1lcmdlLCBtZXJnZV9tYXBfcHJpdmF0ZV9kZXZfemVyb19mYXVsdGVkX3VuZmF1bHRlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwcm9jbWFwX2ZkICpwcm9jbWFwID0gXHUwMDI2c2VsZi1cdTAwM2Vwcm9jbWFwO1xuJiM0MztcdHVuc2lnbmVkIGludCBwYWdlX3NpemUgPSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZTtcbiYjNDM7XHRjaGFyICpjYXJ2ZW91dCA9IHNlbGYtXHUwMDNlY2FydmVvdXQ7XG4mIzQzO1x0Y2hhciAqcHRyLCAqcHRyMjtcbiYjNDM7XHRpbnQgZmRfemVybztcbiYjNDM7XG4mIzQzO1x0aWYgKGFjY2VzcyhcJiMzNDsvZGV2L3plcm9cJiMzNDssIEZfT0spKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O05vIC9kZXYvemVyby5cJiMzNDspO1xuJiM0MztcdGZkX3plcm8gPSBvcGVuKFwmIzM0Oy9kZXYvemVyb1wmIzM0OywgT19SRFdSKTtcbiYjNDM7XHRBU1NFUlRfTkUoZmRfemVybywgLTEpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1hcCBhIE1BUF9QUklWQVRFIG1hcHBpbmcgb2YgL2Rldi96ZXJvIHdpdGggcGFnZSBvZmZzZXQgMCwgdGhlbiBmYXVsdFxuJiM0MztcdCAqIGl0IGluOlxuJiM0MztcdCAqXG4mIzQzO1x0ICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4mIzQzO1x0ICogfCAgICAgICAgICAgZmF1bHRlZCAgICAgICAgICAgICB8XG4mIzQzO1x0ICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4mIzQzO1x0ICovXG4mIzQzO1x0cHRyID0gbW1hcChjYXJ2ZW91dCwgMTUgKiBwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHQgICBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmRfemVybywgMCk7XG4mIzQzO1x0aWYgKHB0ciA9PSBNQVBfRkFJTEVEKSB7XG4mIzQzO1x0XHRjbG9zZShmZF96ZXJvKTtcbiYjNDM7XHRcdEFTU0VSVF9UUlVFKGZhbHNlKTtcbiYjNDM7XHR9XG4mIzQzO1x0bWVtc2V0KHB0ciwgJiMzOTt4JiMzOTssIDE1ICogcGFnZV9zaXplKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVbm1hcCB0aGUgbWlkZGxlOlxuJiM0MztcdCAqXG4mIzQzO1x0ICogfC0tLS0tLS0tLXwgICAgICAgICAgIHwtLS0tLS0tLS18XG4mIzQzO1x0ICogfCBmYXVsdGVkIHwgICAgICAgICAgIHwgZmF1bHRlZCB8XG4mIzQzO1x0ICogfC0tLS0tLS0tLXwgICAgICAgICAgIHwtLS0tLS0tLS18XG4mIzQzO1x0ICovXG4mIzQzO1x0QVNTRVJUX0VRKG11bm1hcChcdTAwMjZwdHJbNSAqIHBhZ2Vfc2l6ZV0sIDUgKiBwYWdlX3NpemUpLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXAgaW4gYSBuZXcgdW5mYXVsdGVkIG1hcHBpbmcgaW4gdGhlIG1pZGRsZSB3aXRoIHBhZ2Ugb2Zmc2V0IDAgLVxuJiM0MztcdCAqIHRoaXMgc2hvdWxkIG1lcmdlIGFuZCB3b3VsZCBub3QgaWYgaXQgd2VyZSB0cmVhdGVkIGFzIGEgZmlsZSByYXRoZXJcbiYjNDM7XHQgKiB0aGFuIHB1cmUgYW5vbjpcbiYjNDM7XHQgKlxuJiM0MztcdCAqIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tfFxuJiM0MztcdCAqIHwgZmF1bHRlZCB8IHVuZmF1bHRlZCB8IGZhdWx0ZWQgfFxuJiM0MztcdCAqIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tfFxuJiM0MztcdCAqL1xuJiM0MztcdHB0cjIgPSBtbWFwKFx1MDAyNmNhcnZlb3V0WzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplLFxuJiM0MztcdFx0ICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLFxuJiM0MztcdFx0ICAgIGZkX3plcm8sIDApO1xuJiM0MztcdGNsb3NlKGZkX3plcm8pO1xuJiM0MztcdEFTU0VSVF9ORShwdHIyLCBNQVBfRkFJTEVEKTtcbiYjNDM7XG4mIzQzO1x0LyogQXNzZXJ0IHRoYXQgdGhleSBtZXJnZWQuICovXG4mIzQzO1x0QVNTRVJUX1RSVUUoZmluZF92bWFfcHJvY21hcChwcm9jbWFwLCBwdHIpKTtcbiYjNDM7XHRBU1NFUlRfRVEocHJvY21hcC1cdTAwM2VxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7XG4mIzQzO1x0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX2VuZCwgKHVuc2lnbmVkIGxvbmcpcHRyICYjNDM7IDE1ICogcGFnZV9zaXplKTtcbiYjNDM7fVxuJiM0MztcbiBURVNUX0YobWVyZ2Vfd2l0aF9mb3JrLCBtcmVtYXBfZmF1bHRlZF90b191bmZhdWx0ZWRfcHJldilcbiB7XG4gXHRzdHJ1Y3QgcHJvY21hcF9mZCAqcHJvY21hcCA9IFx1MDAyNnNlbGYtXHUwMDNlcHJvY21hcDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oIGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuaW5kZXggYzUyYjIzNzczY2QyNjMuLmI0ZjBmN2MyNGZjYjhhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuQEAgLTE1LDYgJiM0MzsxNSwxNiBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmdldF9jdXJyZW50KHZvaWQpO1xuICNkZWZpbmUgTU1GX0hBU19NRFdFXHQyOFxuICNkZWZpbmUgY3VycmVudCBnZXRfY3VycmVudCgpXG4gXG4mIzQzOyNkZWZpbmUgTUlOT1JCSVRTXHQyMFxuJiM0MzsjZGVmaW5lIE1JTk9STUFTS1x0KCgxVSBcdTAwM2NcdTAwM2MgTUlOT1JCSVRTKSAtIDEpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1BSk9SKGRldilcdCgodW5zaWduZWQgaW50KSAoKGRldikgXHUwMDNlXHUwMDNlIE1JTk9SQklUUykpXG4mIzQzOyNkZWZpbmUgTUlOT1IoZGV2KVx0KCh1bnNpZ25lZCBpbnQpICgoZGV2KSBcdTAwMjYgTUlOT1JNQVNLKSlcbiYjNDM7I2RlZmluZSBNS0RFVihtYSwgbWkpXHQoKChtYSkgXHUwMDNjXHUwMDNjIE1JTk9SQklUUykgfCAobWkpKVxuJiM0MztcbiYjNDM7I2RlZmluZSBNRU1fTUFKT1JcdFx0MVxuJiM0MzsjZGVmaW5lIERFVlpFUk9fTUlOT1JcdDVcbiYjNDM7XG4gLypcbiAgKiBEZWZpbmUgdGhlIHRhc2sgY29tbWFuZCBuYW1lIGxlbmd0aCBhcyBlbnVtLCB0aGVuIGl0IGNhbiBiZSB2aXNpYmxlIHRvXG4gICogQlBGIHByb2dyYW1zLlxuQEAgLTQ1LDYgJiM0Mzs1NSw5IEBAIHN0cnVjdCBhZGRyZXNzX3NwYWNlIHtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZmxhZ3M7XG4gXHRhdG9taWNfdFx0XHRpX21tYXBfd3JpdGFibGU7XG4gfTtcbiYjNDM7c3RydWN0IGlub2RlIHtcbiYjNDM7XHRkZXZfdFx0XHRcdGlfcmRldjtcbiYjNDM7fTtcbiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHtcbiBcdGludCAoKm1tYXApKHN0cnVjdCBmaWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcbiBcdGludCAoKm1tYXBfcHJlcGFyZSkoc3RydWN0IHZtX2FyZWFfZGVzYyAqKTtcbkBAIC01Miw2ICYjNDM7NjUsNyBAQCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHtcbiBzdHJ1Y3QgZmlsZSB7XG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZVx0KmZfbWFwcGluZztcbiBcdGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnNcdCpmX29wO1xuJiM0MztcdHN0cnVjdCBpbm9kZVx0XHRcdCpmX2lub2RlO1xuIH07XG4gc3RydWN0IGFub25fdm1hX2NoYWluIHtcbiBcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWE7XG5AQCAtNTc3LDYgJiM0Mzs1OTEsNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xuIFx0ICovXG4gXHR1bnNpZ25lZCBpbnQgdm1fbG9ja19zZXE7XG4gI2VuZGlmXG4mIzQzO1x0dW5zaWduZWQgaW50IF9fdm1fdmlydF9wZ29mZl9sbztcbiBcbiBcdC8qXG4gXHQgKiBBIGZpbGUmIzM5O3MgTUFQX1BSSVZBVEUgdm1hIGNhbiBiZSBpbiBib3RoIGlfbW1hcCB0cmVlIGFuZCBhbm9uX3ZtYVxuQEAgLTYxMiw2ICYjNDM7NjI3LDkgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHtcbiAjaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0LyogVW5zdGFibGUgUkNVIHJlYWRlcnMgYXJlIGFsbG93ZWQgdG8gcmVhZCB0aGlzLiAqL1xuIFx0cmVmY291bnRfdCB2bV9yZWZjbnQ7XG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUXG4mIzQzO1x0dW5zaWduZWQgaW50IF9fdm1fdmlydF9wZ29mZl9oaTtcbiAjZW5kaWZcbiBcdC8qXG4gXHQgKiBGb3IgYXJlYXMgd2l0aCBhbiBhZGRyZXNzIHNwYWNlIGFuZCBiYWNraW5nIHN0b3JlLFxuQEAgLTEzMjAsNiAmIzQzOzEzMzgsMjggQEAgc3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9lbmRfcGdvZmYoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRyZXR1cm4gdm1hX3N0YXJ0X3Bnb2ZmKHZtYSkgJiM0Mzsgdm1hX3BhZ2VzKHZtYSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1hX3N0YXJ0X3ZpcnRfcGdvZmYoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4mIzQzO3tcbiYjNDM7XHRwZ29mZl90IHBnb2ZmID0gMDtcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfNjRCSVRcbiYjNDM7XHRwZ29mZiAmIzQzOz0gdm1hLVx1MDAzZV9fdm1fdmlydF9wZ29mZl9oaTtcbiYjNDM7XHRwZ29mZiBcdTAwM2NcdTAwM2M9IDMyO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRwZ29mZiAmIzQzOz0gdm1hLVx1MDAzZV9fdm1fdmlydF9wZ29mZl9sbztcbiYjNDM7XHRyZXR1cm4gcGdvZmY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWFfZW5kX3ZpcnRfcGdvZmYoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSAmIzQzOyB2bWFfcGFnZXModm1hKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9sYXN0X3ZpcnRfcGdvZmYoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdm1hX2VuZF92aXJ0X3Bnb2ZmKHZtYSkgLSAxO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgaW50IHZmc19tbWFwX3ByZXBhcmUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXG4ge1xuIFx0cmV0dXJuIGZpbGUtXHUwMDNlZl9vcC1cdTAwM2VtbWFwX3ByZXBhcmUoZGVzYyk7XG5AQCAtMTU4NCwzICYjNDM7MTYyNCw0MCBAQCBzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9nZXRfcGFnZV9wcm90KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiBcdHJldHVybiB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYS1cdTAwM2VmbGFncyk7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBwZ29mZl90IF9fbGluZWFyX3ZpcnRfcGFnZV9pbmRleChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4mIzQzO3tcbiYjNDM7XHRwZ29mZl90IHBnb2ZmO1xuJiM0MztcbiYjNDM7XHRwZ29mZiA9IGxpbmVhcl9wYWdlX2RlbHRhKHZtYSwgYWRkcmVzcyk7XG4mIzQzO1x0cGdvZmYgJiM0Mzs9IHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSk7XG4mIzQzO1x0cmV0dXJuIHBnb2ZmO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHBnb2ZmX3QgbGluZWFyX3ZpcnRfcGFnZV9pbmRleChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgcGdvZmZfdCBwZ29mZiA9IF9fbGluZWFyX3ZpcnRfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpO1xuJiM0MztcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0Uodm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCkpO1xuJiM0MztcdGlmICghdm1hLVx1MDAzZXZtX2ZpbGUpIC8qIElzIGFub255bW91cyBleGNlcHQgTUFQX1BSSVZBVEUtL2Rldi96ZXJvICovXG4mIzQzO1x0XHRWTV9XQVJOX09OX09OQ0UocGdvZmYgIT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwZ29mZjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKmZpbGVfaW5vZGUoY29uc3Qgc3RydWN0IGZpbGUgKmYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZi1cdTAwM2VmX2lub2RlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGltaW5vcihjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIE1JTk9SKGlub2RlLVx1MDAzZWlfcmRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW1ham9yKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gTUFKT1IoaW5vZGUtXHUwMDNlaV9yZGV2KTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jIGIvdG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmNcbmluZGV4IGJlYTllYTZkYjAyYTRjLi5mNDEwYmI2Zjg1OGUxMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuY1xuQEAgLTIzLDcgJiM0MzsyMyw4IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYWxsb2Nfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFxuIFx0dm1hLVx1MDAzZXZtX3N0YXJ0ID0gc3RhcnQ7XG4gXHR2bWEtXHUwMDNldm1fZW5kID0gZW5kO1xuLVx0dm1hLVx1MDAzZXZtX3Bnb2ZmID0gcGdvZmY7XG4mIzQzO1x0dm1hX3NldF9wZ29mZih2bWEsIHBnb2ZmKTtcbiYjNDM7XHR2bWFfc2V0X3ZpcnRfcGdvZmYodm1hLCBzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4gXHR2bWEtXHUwMDNlZmxhZ3MgPSB2bWFfZmxhZ3M7XG4gXHR2bWFfYXNzZXJ0X2RldGFjaGVkKHZtYSk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbWVyZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21lcmdlLmNcbmluZGV4IGUzNTdhY2NjODQ5OTA1Li5hMDExMDdhYjhlMjEzNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21lcmdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21lcmdlLmNcbkBAIC00NSw2ICYjNDM7NDUsNyBAQCB2b2lkIHZtZ19zZXRfcmFuZ2Uoc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZywgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdHZtZy1cdTAwM2VzdGFydCA9IHN0YXJ0O1xuIFx0dm1nLVx1MDAzZWVuZCA9IGVuZDtcbiBcdHZtZy1cdTAwM2VwZ29mZiA9IHBnb2ZmO1xuJiM0MztcdHZtZy1cdTAwM2Vhbm9uX3Bnb2ZmID0gc3RhcnQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHR2bWctXHUwMDNldm1hX2ZsYWdzID0gdm1hX2ZsYWdzO1xuIFxuIFx0dm1nLVx1MDAzZWp1c3RfZXhwYW5kID0gZmFsc2U7XG5AQCAtMTA4LDYgJiM0MzsxMDksNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X3NpbXBsZV9tZXJnZSh2b2lkKVxuIFx0XHQuZW5kID0gMHgyMDAwLFxuIFx0XHQudm1hX2ZsYWdzID0gdm1hX2ZsYWdzLFxuIFx0XHQucGdvZmYgPSAxLFxuJiM0MztcdFx0LmFub25fcGdvZmYgPSAxLFxuIFx0fTtcbiBcbiBcdEFTU0VSVF9GQUxTRShhdHRhY2hfdm1hKFx1MDAyNm1tLCB2bWFfbGVmdCkpO1xuQEAgLTExOSw2ICYjNDM7MTIxLDcgQEAgc3RhdGljIGJvb2wgdGVzdF9zaW1wbGVfbWVyZ2Uodm9pZClcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fc3RhcnQsIDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9lbmQsIDB4MzAwMCk7XG4gXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDApO1xuJiM0MztcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAwKTtcbiBcdEFTU0VSVF9GTEFHU19TQU1FX01BU0soXHUwMDI2dm1hLVx1MDAzZWZsYWdzLCB2bWFfZmxhZ3MpO1xuIFxuIFx0ZGV0YWNoX2ZyZWVfdm1hKHZtYSk7XG5AQCAtMTUxLDYgJiM0MzsxNTQsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X3NpbXBsZV9tb2RpZnkodm9pZClcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fc3RhcnQsIDB4MTAwMCk7XG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX2VuZCwgMHgyMDAwKTtcbiBcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMSk7XG4mIzQzO1x0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDEpO1xuIFxuIFx0LypcbiBcdCAqIE5vdyB3YWxrIHRocm91Z2ggdGhlIHRocmVlIHNwbGl0IFZNQXMgYW5kIG1ha2Ugc3VyZSB0aGV5IGFyZSBhc1xuQEAgLTE2Myw2ICYjNDM7MTY3LDcgQEAgc3RhdGljIGJvb2wgdGVzdF9zaW1wbGVfbW9kaWZ5KHZvaWQpXG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX3N0YXJ0LCAwKTtcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fZW5kLCAweDEwMDApO1xuIFx0QVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEodm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSwgMCk7XG4gXG4gXHRkZXRhY2hfZnJlZV92bWEodm1hKTtcbiBcdHZtYV9pdGVyX2NsZWFyKFx1MDAyNnZtaSk7XG5AQCAtMTcyLDYgJiM0MzsxNzcsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X3NpbXBsZV9tb2RpZnkodm9pZClcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fc3RhcnQsIDB4MTAwMCk7XG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX2VuZCwgMHgyMDAwKTtcbiBcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMSk7XG4mIzQzO1x0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDEpO1xuIFxuIFx0ZGV0YWNoX2ZyZWVfdm1hKHZtYSk7XG4gXHR2bWFfaXRlcl9jbGVhcihcdTAwMjZ2bWkpO1xuQEAgLTE4MSw2ICYjNDM7MTg3LDcgQEAgc3RhdGljIGJvb2wgdGVzdF9zaW1wbGVfbW9kaWZ5KHZvaWQpXG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX3N0YXJ0LCAweDIwMDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9lbmQsIDB4MzAwMCk7XG4gXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDIpO1xuJiM0MztcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAyKTtcbiBcbiBcdGRldGFjaF9mcmVlX3ZtYSh2bWEpO1xuIFx0bXRyZWVfZGVzdHJveShcdTAwMjZtbS5tbV9tdCk7XG5AQCAtMjEwLDYgJiM0MzsyMTcsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X3NpbXBsZV9leHBhbmQodm9pZClcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fc3RhcnQsIDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9lbmQsIDB4MzAwMCk7XG4gXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDApO1xuJiM0MztcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAwKTtcbiBcbiBcdGRldGFjaF9mcmVlX3ZtYSh2bWEpO1xuIFx0bXRyZWVfZGVzdHJveShcdTAwMjZtbS5tbV9tdCk7XG5AQCAtMjMyLDYgJiM0MzsyNDAsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X3NpbXBsZV9zaHJpbmsodm9pZClcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fc3RhcnQsIDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9lbmQsIDB4MTAwMCk7XG4gXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDApO1xuJiM0MztcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAwKTtcbiBcbiBcdGRldGFjaF9mcmVlX3ZtYSh2bWEpO1xuIFx0bXRyZWVfZGVzdHJveShcdTAwMjZtbS5tbV9tdCk7XG5AQCAtMzQ0LDYgJiM0MzszNTMsNyBAQCBzdGF0aWMgYm9vbCBfX3Rlc3RfbWVyZ2VfbmV3KGJvb2wgaXNfc3RpY2t5LCBib29sIGFfaXNfc3RpY2t5LCBib29sIGJfaXNfc3RpY2t5LFxuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9zdGFydCwgMCk7XG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX2VuZCwgMHg1MDAwKTtcbiBcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2Vhbm9uX3ZtYSwgXHUwMDI2ZHVtbXlfYW5vbl92bWEpO1xuIFx0QVNTRVJUX1RSVUUodm1hX3dyaXRlX3N0YXJ0ZWQodm1hKSk7XG4gXHRBU1NFUlRfRVEobW0ubWFwX2NvdW50LCAzKTtcbkBAIC0zNjUsNiAmIzQzOzM3NSw3IEBAIHN0YXRpYyBib29sIF9fdGVzdF9tZXJnZV9uZXcoYm9vbCBpc19zdGlja3ksIGJvb2wgYV9pc19zdGlja3ksIGJvb2wgYl9pc19zdGlja3ksXG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX3N0YXJ0LCAweDYwMDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9lbmQsIDB4OTAwMCk7XG4gXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDYpO1xuJiM0MztcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCA2KTtcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNlYW5vbl92bWEsIFx1MDAyNmR1bW15X2Fub25fdm1hKTtcbiBcdEFTU0VSVF9UUlVFKHZtYV93cml0ZV9zdGFydGVkKHZtYSkpO1xuIFx0QVNTRVJUX0VRKG1tLm1hcF9jb3VudCwgMyk7XG5AQCAtMzg1LDYgJiM0MzszOTYsNyBAQCBzdGF0aWMgYm9vbCBfX3Rlc3RfbWVyZ2VfbmV3KGJvb2wgaXNfc3RpY2t5LCBib29sIGFfaXNfc3RpY2t5LCBib29sIGJfaXNfc3RpY2t5LFxuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9zdGFydCwgMCk7XG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX2VuZCwgMHg5MDAwKTtcbiBcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2Vhbm9uX3ZtYSwgXHUwMDI2ZHVtbXlfYW5vbl92bWEpO1xuIFx0QVNTRVJUX1RSVUUodm1hX3dyaXRlX3N0YXJ0ZWQodm1hKSk7XG4gXHRBU1NFUlRfRVEobW0ubWFwX2NvdW50LCAyKTtcbkBAIC00MDUsNiAmIzQzOzQxNyw3IEBAIHN0YXRpYyBib29sIF9fdGVzdF9tZXJnZV9uZXcoYm9vbCBpc19zdGlja3ksIGJvb2wgYV9pc19zdGlja3ksIGJvb2wgYl9pc19zdGlja3ksXG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX3N0YXJ0LCAweGEwMDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9lbmQsIDB4YzAwMCk7XG4gXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDB4YSk7XG4mIzQzO1x0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDB4YSk7XG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZWFub25fdm1hLCBcdTAwMjZkdW1teV9hbm9uX3ZtYSk7XG4gXHRBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWEpKTtcbiBcdEFTU0VSVF9FUShtbS5tYXBfY291bnQsIDIpO1xuQEAgLTQyNCw2ICYjNDM7NDM3LDcgQEAgc3RhdGljIGJvb2wgX190ZXN0X21lcmdlX25ldyhib29sIGlzX3N0aWNreSwgYm9vbCBhX2lzX3N0aWNreSwgYm9vbCBiX2lzX3N0aWNreSxcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fc3RhcnQsIDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9lbmQsIDB4YzAwMCk7XG4gXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDApO1xuJiM0MztcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAwKTtcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNlYW5vbl92bWEsIFx1MDAyNmR1bW15X2Fub25fdm1hKTtcbiBcdEFTU0VSVF9UUlVFKHZtYV93cml0ZV9zdGFydGVkKHZtYSkpO1xuIFx0QVNTRVJUX0VRKG1tLm1hcF9jb3VudCwgMSk7XG5AQCAtNDQ0LDYgJiM0Mzs0NTgsNyBAQCBzdGF0aWMgYm9vbCBfX3Rlc3RfbWVyZ2VfbmV3KGJvb2wgaXNfc3RpY2t5LCBib29sIGFfaXNfc3RpY2t5LCBib29sIGJfaXNfc3RpY2t5LFxuIFx0XHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX3N0YXJ0LCAwKTtcbiBcdFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9lbmQsIDB4YzAwMCk7XG4gXHRcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEodm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSwgMCk7XG4gXHRcdEFTU0VSVF9FUSh2bWEtXHUwMDNlYW5vbl92bWEsIFx1MDAyNmR1bW15X2Fub25fdm1hKTtcbiBcbiBcdFx0ZGV0YWNoX2ZyZWVfdm1hKHZtYSk7XG5AQCAtODA2LDYgJiM0Mzs4MjEsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X3ZtYV9tZXJnZV9uZXdfd2l0aF9jbG9zZSh2b2lkKVxuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9zdGFydCwgMCk7XG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX2VuZCwgMHg1MDAwKTtcbiBcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9vcHMsIFx1MDAyNnZtX29wcyk7XG4gXHRBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWEpKTtcbiBcdEFTU0VSVF9FUShtbS5tYXBfY291bnQsIDIpO1xuQEAgLTg2Niw2ICYjNDM7ODgyLDcgQEAgc3RhdGljIGJvb2wgX190ZXN0X21lcmdlX2V4aXN0aW5nKGJvb2wgcHJldl9pc19zdGlja3ksIGJvb2wgbWlkZGxlX2lzX3N0aWNreSwgYm9cbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fc3RhcnQsIDB4MjAwMCk7XG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX2VuZCwgMHgzMDAwKTtcbiBcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMik7XG4mIzQzO1x0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDIpO1xuIFx0QVNTRVJUX1RSVUUodm1hX3dyaXRlX3N0YXJ0ZWQodm1hKSk7XG4gXHRBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWFfbmV4dCkpO1xuIFx0QVNTRVJUX0VRKG1tLm1hcF9jb3VudCwgMik7XG5AQCAtOTMyLDYgJiM0Mzs5NDksNyBAQCBzdGF0aWMgYm9vbCBfX3Rlc3RfbWVyZ2VfZXhpc3RpbmcoYm9vbCBwcmV2X2lzX3N0aWNreSwgYm9vbCBtaWRkbGVfaXNfc3RpY2t5LCBib1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9zdGFydCwgMHg2MDAwKTtcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fZW5kLCAweDcwMDApO1xuIFx0QVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCA2KTtcbiYjNDM7XHRBU1NFUlRfRVEodm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSwgNik7XG4gXHRBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWFfcHJldikpO1xuIFx0QVNTRVJUX1RSVUUodm1hX3dyaXRlX3N0YXJ0ZWQodm1hKSk7XG4gXHRBU1NFUlRfRVEobW0ubWFwX2NvdW50LCAyKTtcbkBAIC0xNDE3LDYgJiM0MzsxNDM1LDcgQEAgc3RhdGljIGJvb2wgdGVzdF9tZXJnZV9leHRlbmQodm9pZClcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fc3RhcnQsIDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9lbmQsIDB4NDAwMCk7XG4gXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDApO1xuJiM0MztcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAwKTtcbiBcdEFTU0VSVF9UUlVFKHZtYV93cml0ZV9zdGFydGVkKHZtYSkpO1xuIFx0QVNTRVJUX0VRKG1tLm1hcF9jb3VudCwgMSk7XG4gXG5AQCAtMTQzMSw3ICYjNDM7MTQ1MCw3IEBAIHN0YXRpYyBib29sIHRlc3RfZXhwYW5kX29ubHlfbW9kZSh2b2lkKVxuIFx0c3RydWN0IG1tX3N0cnVjdCBtbSA9IHt9O1xuIFx0Vk1BX0lURVJBVE9SKHZtaSwgXHUwMDI2bW0sIDApO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHJldiwgKnZtYTtcbi1cdFZNR19TVEFURSh2bWcsIFx1MDAyNm1tLCBcdTAwMjZ2bWksIDB4NTAwMCwgMHg5MDAwLCB2bWFfZmxhZ3MsIDUpO1xuJiM0MztcdFZNR19TVEFURSh2bWcsIFx1MDAyNm1tLCBcdTAwMjZ2bWksIDB4NTAwMCwgMHg5MDAwLCB2bWFfZmxhZ3MsIDUsIDUpO1xuIFxuIFx0LypcbiBcdCAqIFBsYWNlIGEgVk1BIHByaW9yIHRvIHRoZSBvbmUgd2UmIzM5O3JlIGV4cGFuZGluZyBzbyB3ZSBhc3NlcnQgdGhhdCB3ZSBkb1xuQEAgLTE0NTcsNiAmIzQzOzE0NzYsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X2V4cGFuZF9vbmx5X21vZGUodm9pZClcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fc3RhcnQsIDB4MzAwMCk7XG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX2VuZCwgMHg5MDAwKTtcbiBcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMyk7XG4mIzQzO1x0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDMpO1xuIFx0QVNTRVJUX1RSVUUodm1hX3dyaXRlX3N0YXJ0ZWQodm1hKSk7XG4gXHRBU1NFUlRfRVEodm1hX2l0ZXJfYWRkcihcdTAwMjZ2bWkpLCAweDMwMDApO1xuIFx0dm1hX2Fzc2VydF9hdHRhY2hlZCh2bWEpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY1xuaW5kZXggYzg1YmMwMDBkMWNiN2EuLjBjOGEzNDQ2YjkwNTAyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmNcbkBAIC00NSw3ICYjNDM7NDUsNTYgQEAgc3RhdGljIGJvb2wgdGVzdF9tbWFwX3JlZ2lvbl9iYXNpYyh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGR1bW15X21tYXBfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHRlc3RfcHVyZV9hbm9uX2Rldl96ZXJvKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSBta192bWFfZmxhZ3MoVk1BX1JFQURfQklULCBWTUFfV1JJVEVfQklULFxuJiM0MztcdFx0XHRWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZl9vcCA9IHtcbiYjNDM7XHRcdC5tbWFwX3ByZXBhcmUgPSBkdW1teV9tbWFwX3ByZXBhcmUsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgaW5vZGUgPSB7XG4mIzQzO1x0XHQuaV9yZGV2ID0gTUtERVYoTUVNX01BSk9SLCBERVZaRVJPX01JTk9SKSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBmaWxlIGZpbGUgPSB7XG4mIzQzO1x0XHQuZl9pbm9kZSA9IFx1MDAyNmlub2RlLFxuJiM0MztcdFx0LmZfb3AgPSBcdTAwMjZmX29wLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCBtbSA9IHt9O1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiYjNDM7XHRWTUFfSVRFUkFUT1Iodm1pLCBcdTAwMjZtbSwgMCk7XG4mIzQzO1xuJiM0MztcdGN1cnJlbnQtXHUwMDNlbW0gPSBcdTAwMjZtbTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXAgYSBNQVBfUFJJVkFURS0vZGV2L3plcm8gbWFwcGluZyBhdCBhZGRyZXNzIDB4MzAwMDAwIHdpdGggYSBwYWdlXG4mIzQzO1x0ICogb2Zmc2V0IG9mIDB4MTAsIHdoaWNoIHdlIGV4cGVjdCB0byBiZSByZXNldCB0byB0aGUgdmlydHVhbCBwYWdlXG4mIzQzO1x0ICogb2Zmc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdGFkZHIgPSBfX21tYXBfcmVnaW9uKFx1MDAyNmZpbGUsIDB4MzAwMDAwLCAweDMwMDAsIHZtYV9mbGFncywgMHgxMCwgTlVMTCk7XG4mIzQzO1x0QVNTRVJUX0VRKGFkZHIsIDB4MzAwMDAwKTtcbiYjNDM7XG4mIzQzO1x0LyogQXNzZXJ0IHRoYXQgaXQgdHJ1bHkgaXMgYW4gYW5vbnltb3VzIG1hcHBpbmcuICovXG4mIzQzO1x0dm1hID0gdm1hX2xvb2t1cChcdTAwMjZtbSwgYWRkcik7XG4mIzQzO1x0QVNTRVJUX05FKHZtYSwgTlVMTCk7XG4mIzQzO1x0QVNTRVJUX1RSVUUodm1hX2lzX2Fub255bW91cyh2bWEpKTtcbiYjNDM7XHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX2ZpbGUsIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhLCBOVUxMKTtcbiYjNDM7XHQvKiBFeHBlY3QgdmlydHVhbCBwYWdlIG9mZnNldHMuICovXG4mIzQzO1x0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9wZ29mZiwgMHgzMDApO1xuJiM0MztcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAweDMwMCk7XG4mIzQzO1xuJiM0MztcdGNsZWFudXBfbW0oXHUwMDI2bW0sIFx1MDAyNnZtaSk7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnVuX21tYXBfdGVzdHMoaW50ICpudW1fdGVzdHMsIGludCAqbnVtX2ZhaWwpXG4ge1xuIFx0VEVTVChtbWFwX3JlZ2lvbl9iYXNpYyk7XG4mIzQzO1x0VEVTVChwdXJlX2Fub25fZGV2X3plcm8pO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy92bWEuYyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL3ZtYS5jXG5pbmRleCA3NTRhMmRhMDYzMjE1Ny4uN2NhNTI4OWUwZjk1OTMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy92bWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvdm1hLmNcbkBAIC0zOCw3ICYjNDM7MzgsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X2NvcHlfdm1hKHZvaWQpXG4gXHQvKiBNb3ZlIGJhY2t3YXJkcyBhbmQgZG8gbm90IG1lcmdlLiAqL1xuIFxuIFx0dm1hID0gYWxsb2NfYW5kX2xpbmtfdm1hKFx1MDAyNm1tLCAweDMwMDAsIDB4NTAwMCwgMywgdm1hX2ZsYWdzKTtcbi1cdHZtYV9uZXcgPSBjb3B5X3ZtYShcdTAwMjZ2bWEsIDAsIDB4MjAwMCwgMCwgXHUwMDI2bmVlZF9sb2Nrcyk7XG4mIzQzO1x0dm1hX25ldyA9IGNvcHlfdm1hKFx1MDAyNnZtYSwgMCwgMHgyMDAwLCAwLCAzLCBcdTAwMjZuZWVkX2xvY2tzKTtcbiBcdEFTU0VSVF9ORSh2bWFfbmV3LCB2bWEpO1xuIFx0QVNTRVJUX0VRKHZtYV9uZXctXHUwMDNldm1fc3RhcnQsIDApO1xuIFx0QVNTRVJUX0VRKHZtYV9uZXctXHUwMDNldm1fZW5kLCAweDIwMDApO1xuQEAgLTUxLDcgJiM0Mzs1MSw3IEBAIHN0YXRpYyBib29sIHRlc3RfY29weV92bWEodm9pZClcbiBcbiBcdHZtYSA9IGFsbG9jX2FuZF9saW5rX3ZtYShcdTAwMjZtbSwgMCwgMHgyMDAwLCAwLCB2bWFfZmxhZ3MpO1xuIFx0dm1hX25leHQgPSBhbGxvY19hbmRfbGlua192bWEoXHUwMDI2bW0sIDB4NjAwMCwgMHg4MDAwLCA2LCB2bWFfZmxhZ3MpO1xuLVx0dm1hX25ldyA9IGNvcHlfdm1hKFx1MDAyNnZtYSwgMHg0MDAwLCAweDIwMDAsIDQsIFx1MDAyNm5lZWRfbG9ja3MpO1xuJiM0MztcdHZtYV9uZXcgPSBjb3B5X3ZtYShcdTAwMjZ2bWEsIDB4NDAwMCwgMHgyMDAwLCA0LCA0LCBcdTAwMjZuZWVkX2xvY2tzKTtcbiBcdHZtYV9hc3NlcnRfYXR0YWNoZWQodm1hX25ldyk7XG4gXG4gXHRBU1NFUlRfRVEodm1hX25ldywgdm1hX25leHQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oIGIvdG9vbHMvdGVzdGluZy92bWEvdm1hX2ludGVybmFsLmhcbmluZGV4IDRmNmM1NjY2YWMwN2QzLi44YTQ4YjIzMWFhN2FiZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3ZtYS92bWFfaW50ZXJuYWwuaFxuQEAgLTUzLDYgJiM0Mzs1Myw3IEBAIHR5cGVkZWYgX19iaXR3aXNlIHVuc2lnbmVkIGludCB2bV9mYXVsdF90O1xuIFxuICNkZWZpbmUgVk1fV0FSTl9PTihfZXhwcikgKFdBUk5fT04oX2V4cHIpKVxuICNkZWZpbmUgVk1fV0FSTl9PTl9PTkNFKF9leHByKSAoV0FSTl9PTl9PTkNFKF9leHByKSlcbiYjNDM7I2RlZmluZSBWTV9XQVJOX09OX09OQ0VfVk1BKF9leHByLCBfdm1hKSAoV0FSTl9PTl9PTkNFKF9leHByKSlcbiAjZGVmaW5lIFZNX1dBUk5fT05fVk1HKF9leHByLCBfdm1nKSAoV0FSTl9PTihfZXhwcikpXG4gI2RlZmluZSBWTV9CVUdfT04oX2V4cHIpIChCVUdfT04oX2V4cHIpKVxuICNkZWZpbmUgVk1fQlVHX09OX1ZNQShfZXhwciwgX3ZtYSkgKEJVR19PTihfZXhwcikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1NNJiMzNDssCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7LAogICAgJiMzNDtGU19EQVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttbWFwX3plcm9fcHJlcGFyZSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZSYjMzQ7LAogICAgJiMzNDtybWFwX3dhbGtfa3NtJiMzNDssCiAgICAmIzM0O3JlbW92ZV9taWdyYXRpb25fcHRlJiMzNDssCiAgICAmIzM0O2NvcHlfdm1hX2FuZF9kYXRhJiMzNDssCiAgICAmIzM0O21vdmVfcHJlc2VudF9wdGVzJiMzNDssCiAgICAmIzM0O3JlbG9jYXRlX3ZtYV9kb3duJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0byBoYW5kbGUgTUFQX1BSSVZBVEUgbWFwcGluZ3Mgb2YgL2Rldi96ZXJvIGFzIHRydWx5IGFub255bW91cyBtYXBwaW5ncywgcmF0aGVyIHRoYW4gZmlsZS1iYWNrZWQgbWFwcGluZ3Mgd2l0aCBhIHNwZWNpYWwgZmxhZy4gSXQgaW50cm9kdWNlcyB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0cyBmb3IgVk1BcyB0byBjb3JyZWN0bHkgdHJhY2sgYW5kIG1lcmdlIHRoZXNlIG1hcHBpbmdzLiBUaGlzIGFmZmVjdHMgdmFyaW91cyBtbSBzdWJzeXN0ZW1zIGluY2x1ZGluZyBLU00sIG1pZ3JhdGlvbiwgbXJlbWFwLCB1c2VyZmF1bHRmZCwgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtbWFwLCBtcmVtYXAsIHVzZXJmYXVsdGZkLCBldGMuLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYxMzNmNjBjNzZhMDdmYmVkMWQwMzBkMTQ5MmJhYzhjOTYxNDUzZjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAxNyAyMjo0NzozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9tZW0uYyBiL2RyaXZlcnMvY2hhci9tZW0uYwppbmRleCA2MzI1M2QxZGU1ZDcwYi4uZGNmZDg5NmI3MzNkOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2NoYXIvbWVtLmMKQEAgLTUwNiwxMSAmIzQzOzUwNiw3IEBAIHN0YXRpYyBpbnQgbW1hcF96ZXJvX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYykKIAlpZiAodm1hX2Rlc2NfdGVzdChkZXNjLCBWTUFfU0hBUkVEX0JJVCkpCiAJCXJldHVybiBzaG1lbV96ZXJvX3NldHVwX2Rlc2MoZGVzYyk7CiAKLQkvKgotCSAqIFRoaXMgaXMgYSBoaWdobHkgdW5pcXVlIHNpdHVhdGlvbiB3aGVyZSB3ZSBtYXJrIGEgTUFQX1BSSVZBVEUgbWFwcGluZwotCSAqIG9mIC9kZXYvemVybyBhbm9ueW1vdXMsIGRlc3BpdGUgaXQgbm90IGJlaW5nLgotCSAqLwotCXZtYV9kZXNjX3NldF9hbm9ueW1vdXMoZGVzYyk7CiYjNDM7CS8qIE1BUF9QUklWQVRFIHNlbWFudGljcyBhcmUgdGFrZW4gY2FyZSBmb3IgdXMgYnkgY29yZSBtbS4gKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtNjk4LDcgJiM0Mzs2OTQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1lbWRldiB7CiAjaWZkZWYgQ09ORklHX0RFVlBPUlQKIAlbNF0gPSB7ICYjMzQ7cG9ydCYjMzQ7LCAmYW1wO3BvcnRfZm9wcywgMCwgMCB9LAogI2VuZGlmCi0JWzVdID0geyAmIzM0O3plcm8mIzM0OywgJmFtcDt6ZXJvX2ZvcHMsIEZNT0RFX05PV0FJVCwgMDY2NiB9LAomIzQzOwlbREVWWkVST19NSU5PUl0gPSB7ICYjMzQ7emVybyYjMzQ7LCAmYW1wO3plcm9fZm9wcywgRk1PREVfTk9XQUlULCAwNjY2IH0sCiAJWzddID0geyAmIzM0O2Z1bGwmIzM0OywgJmFtcDtmdWxsX2ZvcHMsIDAsIDA2NjYgfSwKIAlbOF0gPSB7ICYjMzQ7cmFuZG9tJiMzNDssICZhbXA7cmFuZG9tX2ZvcHMsIEZNT0RFX05PV0FJVCwgMDY2NiB9LAogCVs5XSA9IHsgJiMzNDt1cmFuZG9tJiMzNDssICZhbXA7dXJhbmRvbV9mb3BzLCBGTU9ERV9OT1dBSVQsIDA2NjYgfSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA4N2ZlYWE1YTJiNzgwZS4uN2ZhYmU2YzY2YjRiNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTc0MCw2ICYjNDM7NzQwLDkgQEAgc3RhdGljIGlubGluZSBib29sIGZhdWx0X2ZsYWdfYWxsb3dfcmV0cnlfZmlyc3QoZW51bSBmYXVsdF9mbGFnIGZsYWdzKQogCXsgRkFVTFRfRkxBR19JTlRFUlJVUFRJQkxFLAkmIzM0O0lOVEVSUlVQVElCTEUmIzM0OyB9LCBcCiAJeyBGQVVMVF9GTEFHX1ZNQV9MT0NLLAkJJiMzNDtWTUFfTE9DSyYjMzQ7IH0KIAomIzQzOy8qIC9kZXYvemVybyBtaW5vciBkZXZpY2UgbnVtYmVyLiBTcGVjaWFsIGR1ZSB0byBNQVBfUFJJVkFURSBzZW1hbnRpY3MuICovCiYjNDM7I2RlZmluZSBERVZaRVJPX01JTk9SCTUKJiM0MzsKIC8qCiAgKiB2bV9mYXVsdCBpcyBmaWxsZWQgYnkgdGhlIHBhZ2VmYXVsdCBoYW5kbGVyIGFuZCBwYXNzZWQgdG8gdGhlIHZtYSYjMzk7cwogICogLSZndDtmYXVsdCBmdW5jdGlvbi4gVGhlIHZtYSYjMzk7cyAtJmd0O2ZhdWx0IGlzIHJlc3BvbnNpYmxlIGZvciByZXR1cm5pbmcgYSBiaXRtYXNrCkBAIC0xNTUxLDEyICYjNDM7MTU1NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfc2V0X2Fub255bW91cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAl2bWEtJmd0O3ZtX29wcyA9IE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfZGVzY19zZXRfYW5vbnltb3VzKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpCi17Ci0JZGVzYy0mZ3Q7dm1fb3BzID0gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHZtYV9pc19hbm9ueW1vdXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiYjNDM7c3RhdGljIGlubGluZSBib29sIHZtYV9pc19hbm9ueW1vdXMoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJcmV0dXJuICF2bWEtJmd0O3ZtX29wczsKIH0KQEAgLTQzNDksOSAmIzQzOzQzNDcsOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hX3BhZ2VzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogICogSWYgQHZtYSBpcyBhIE1BUF9QUklWQVRFIGZpbGUtYmFja2VkIG1hcHBpbmcsIHRoZW4gdGhpcyByZXR1cm5zIHRoZQogICogcGFnZSBvZmZzZXQgd2l0aGluIHRoZSBmaWxlLgogICoKLSAqIEVkZ2UgY2FzZXM6IG5vbW11IGRvZXMgbm90IGFiaWRlIGJ5IHRoZXNlLCBNQVBfUFJJVkFURS0vZGV2L3plcm8gc2F0aXNmaWVzCi0gKiB2bWFfaXNfYW5vbnltb3VzKCkgYnV0IGhhcyBmaWxlLWJhY2tlZCBwYWdlIG9mZnNldCwgYW5kIE1BUF9QUklWQVRFLXBmbm1hcAotICogcmVnaW9ucyBoYXZlIHRoZWlyIHBhZ2Ugb2Zmc2V0IHNldCB0byB0aGUgZmlyc3QgUEZOIGluIHRoZSByYW5nZS4KJiM0MzsgKiBFZGdlIGNhc2VzOiBub21tdSBkb2VzIG5vdCBhYmlkZSBieSB0aGVzZSBhbmQgQ29XIE1BUF9QUklWQVRFLXBmbm1hcCByZWdpb25zCiYjNDM7ICogaGF2ZSB0aGVpciBwYWdlIG9mZnNldCBzZXQgdG8gdGhlIGZpcnN0IFBGTiBpbiB0aGUgcmFuZ2UuCiAgKgogICogUmV0dXJuczogVGhlIHBhZ2Ugb2Zmc2V0IG9mIHRoZSBzdGFydCBvZiBAdm1hLgogICovCkBAIC00MzkzLDYgJiM0Mzs0MzkwLDY1IEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWFfbGFzdF9wZ29mZihjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAlyZXR1cm4gdm1hX2VuZF9wZ29mZih2bWEpIC0gMTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKCkgLSBHZXQgdGhlIHZpcnR1YWwgcGFnZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIEB2bWEKJiM0MzsgKiBAdm1hOiBUaGUgVk1BIHdob3NlIHZpcnR1YWwgcGFnZSBvZmZzZXQgaXMgcmVxdWlyZWQuCiYjNDM7ICoKJiM0MzsgKiBJZiB1bmZhdWx0ZWQsIHRoZW4gdGhpcyBpcyB2bWEtJmd0O3ZtX3N0YXJ0ICZndDsmZ3Q7IFBBR0VfU0hJRlQsIGlmIGZhdWx0ZWQgdGhlbiB0aGUKJiM0MzsgKiB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IGF0IHRoZSB0aW1lIG9mIGZpcnN0IGZhdWx0LgomIzQzOyAqCiYjNDM7ICogSWYgdGhlIFZNQSBpcyBhbm9ueW1vdXMsIHRoaXMgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSBhcyB2bWFfc3RhcnRfcGdvZmYoKS4KJiM0MzsgKgomIzQzOyAqIFRoaXMgdmFsdWUgaXMgdXNlZCBmb3IgdHJhY2tpbmcgTUFQX1BSSVZBVEUgZmlsZS1iYWNrZWQgbWFwcGluZ3MgYnkgdGhlaXIKJiM0MzsgKiB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogVGhlIHZpcnR1YWwgcGFnZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIEB2bWEuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9zdGFydF92aXJ0X3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQomIzQzO3sKJiM0MzsJcGdvZmZfdCBwZ29mZiA9IDA7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR182NEJJVAomIzQzOwlwZ29mZiAmIzQzOz0gdm1hLSZndDtfX3ZtX3ZpcnRfcGdvZmZfaGk7CiYjNDM7CXBnb2ZmICZsdDsmbHQ7PSAzMjsKJiM0MzsjZW5kaWYKJiM0MzsJcGdvZmYgJiM0Mzs9IHZtYS0mZ3Q7X192bV92aXJ0X3Bnb2ZmX2xvOwomIzQzOwlyZXR1cm4gcGdvZmY7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHZtYV9lbmRfdmlydF9wZ29mZigpIC0gR2V0IHRoZSB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IG9mIHRoZSBleGNsdXNpdmUgZW5kIG9mCiYjNDM7ICogQHZtYS4KJiM0MzsgKiBAdm1hOiBUaGUgVk1BIHdob3NlIGVuZCB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IGlzIHJlcXVpcmVkLgomIzQzOyAqCiYjNDM7ICogVGhpcyByZXR1cm5zIHRoZSB2aXJ0dWFsIGV4Y2x1c2l2ZSBlbmQgcGFnZSBvZmZzZXQgb2YgQHZtYSwgd2hpY2ggaXMgdXNlZnVsCiYjNDM7ICogZm9yIGV4cHJlc3NpbmcgcGFnZSBvZmZzZXQgcmFuZ2VzLgomIzQzOyAqCiYjNDM7ICogU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB2bWFfc3RhcnRfdmlydF9wZ29mZigpIGZvciBhIGRlc2NyaXB0aW9uIG9mIFZNQQomIzQzOyAqIHZpcnR1YWwgcGFnZSBvZmZzZXRzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogVGhlIGV4Y2x1c2l2ZSBlbmQgdmlydHVhbCBwYWdlIG9mZnNldCBvZiBAdm1hLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWFfZW5kX3ZpcnRfcGdvZmYoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiYjNDM7ewomIzQzOwlyZXR1cm4gdm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSAmIzQzOyB2bWFfcGFnZXModm1hKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogdm1hX2xhc3RfdmlydF9wZ29mZigpIC0gR2V0IHRoZSB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IG9mIHRoZSBsYXN0IHBhZ2UgaW4KJiM0MzsgKiBAdm1hLgomIzQzOyAqIEB2bWE6IFRoZSBWTUEgd2hvc2UgbGFzdCB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IGlzIHJlcXVpcmVkLgomIzQzOyAqCiYjNDM7ICogU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB2bWFfc3RhcnRfdmlydF9wZ29mZigpIGZvciBhIGRlc2NyaXB0aW9uIG9mIFZNQQomIzQzOyAqIHZpcnR1YWwgcGFnZSBvZmZzZXRzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogVGhlIGxhc3QgdmlydHVhbCBwYWdlIG9mZnNldCBvZiBAdm1hLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWFfbGFzdF92aXJ0X3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQomIzQzO3sKJiM0MzsJcmV0dXJuIHZtYV9lbmRfdmlydF9wZ29mZih2bWEpIC0gMTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hX2Rlc2Nfc2l6ZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKQogewogCXJldHVybiBkZXNjLSZndDtlbmQgLSBkZXNjLSZndDtzdGFydDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAppbmRleCA5MzliNWVhOGM5ZTBiZS4uMjcxMDYyODA1OWIxNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTk2Nyw2ICYjNDM7OTY3LDcgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHsKIAkgKi8KIAl1bnNpZ25lZCBpbnQgdm1fbG9ja19zZXE7CiAjZW5kaWYKJiM0MzsJdW5zaWduZWQgaW50IF9fdm1fdmlydF9wZ29mZl9sbzsgLyogTG93IDMyLWJpdHMgb2YgdmlydHVhbCBwZ29mZi4gKi8KIAkvKgogCSAqIEEgZmlsZSYjMzk7cyBNQVBfUFJJVkFURSB2bWEgY2FuIGJlIGluIGJvdGggaV9tbWFwIHRyZWUgYW5kIGFub25fdm1hCiAJICogbGlzdCwgYWZ0ZXIgYSBDT1cgb2Ygb25lIG9mIHRoZSBmaWxlIHBhZ2VzLglBIE1BUF9TSEFSRUQgdm1hCkBAIC0xMDQxLDYgJiM0MzsxMDQyLDkgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHsKICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwogCXN0cnVjdCBsb2NrZGVwX21hcCB2bWxvY2tfZGVwX21hcDsKICNlbmRpZgomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfNjRCSVQKJiM0MzsJdW5zaWduZWQgaW50IF9fdm1fdmlydF9wZ29mZl9oaTsgIC8qIEhpZ2ggMzItYml0cyBvZiB2aXJ0dWFsIHBnb2ZmLiAqLwogI2VuZGlmCiAJLyoKIAkgKiBGb3IgYXJlYXMgd2l0aCBhbiBhZGRyZXNzIHNwYWNlIGFuZCBiYWNraW5nIHN0b3JlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAppbmRleCBjNmZjNzgzYWFlZTU3Ni4uOTAxMzBmMjhlN2E4N2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCkBAIC0xMTAxLDYgJiM0MzsxMTAxLDcyIEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCBsaW5lYXJfcGFnZV9pbmRleChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlyZXR1cm4gcGdvZmY7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHBnb2ZmX3QgX19saW5lYXJfdmlydF9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKJiM0Mzt7CiYjNDM7CXBnb2ZmX3QgcGdvZmY7CiYjNDM7CiYjNDM7CXBnb2ZmID0gbGluZWFyX3BhZ2VfZGVsdGEodm1hLCBhZGRyZXNzKTsKJiM0MzsJcGdvZmYgJiM0Mzs9IHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSk7CiYjNDM7CXJldHVybiBwZ29mZjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogbGluZWFyX3ZpcnRfcGFnZV9pbmRleCgpIC0gRGV0ZXJtaW5lIHRoZSBhYnNvbHV0ZSB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IG9mCiYjNDM7ICogQGFkZHJlc3Mgd2l0aGluIEB2bWEuCiYjNDM7ICogQHZtYTogQW4gYW5vbnltb3VzIG9yIE1BUF9QUklWQVRFIGZpbGUtYmFja2VkIFZNQSBpbiB3aGljaCBAYWRkcmVzcyByZXNpZGVzLgomIzQzOyAqIEBhZGRyZXNzOiBUaGUgYWRkcmVzcyB3aG9zZSBhYnNvbHV0ZSBwYWdlIG9mZnNldCBpcyByZXF1aXJlZC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgcmV0dXJucyB0aGUgdmlydHVhbCBwYWdlIG9mZnNldCBvZiBAYWRkcmVzcywgd2hpY2ggaXMgdGhlIHBhZ2Ugb2Zmc2V0CiYjNDM7ICogdGhlIGFkZHJlc3MgcG9zc2Vzc2VkIGF0IHRoZSB0aW1lIHRoZSBWTUEgd2FzIGZpcnN0IGZhdWx0ZWQuCiYjNDM7ICoKJiM0MzsgKiBGb3IgYW5vbnltb3VzIG1hcHBpbmdzLCB0aGlzIHJldHVybnMgdGhlIHNhbWUgdmFsdWUgYXMgbGluZWFyX3BhZ2VfaW5kZXgoKS4KJiM0MzsgKgomIzQzOyAqIEZvciBNQVBfUFJJVkFURSBmaWxlLWJhY2tlZCBtYXBwaW5ncywgdGhpcyByZXR1cm5zIHRoZSB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IG9mCiYjNDM7ICogQGFkZHJlc3MsIHdoaWNoIGlzIHRoZSBwYWdlIG9mZnNldCB0aGUgYWRkcmVzcyBwb3NzZXNzZWQgYXQgdGhlIHRpbWUgdGhlIFZNQQomIzQzOyAqIHdhcyBmaXJzdCBmYXVsdGVkLgomIzQzOyAqCiYjNDM7ICogSXQgaXMgbm90IHZhbGlkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBmb3Igc2hhcmVkIGZpbGUtYmFja2VkIG1hcHBpbmdzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogVGhlIGFic29sdXRlIHZpcnR1YWwgcGFnZSBvZmZzZXQgb2YgQGFkZHJlc3Mgd2l0aGluIEB2bWEuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBwZ29mZl90IGxpbmVhcl92aXJ0X3BhZ2VfaW5kZXgoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKJiM0Mzt7CiYjNDM7CWNvbnN0IHBnb2ZmX3QgcGdvZmYgPSBfX2xpbmVhcl92aXJ0X3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTsKJiM0MzsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKHZtYV90ZXN0KHZtYSwgVk1BX1NIQVJFRF9CSVQpKTsKJiM0MzsJaWYgKCF2bWEtJmd0O3ZtX2ZpbGUpIC8qIElzIGFub255bW91cyBleGNlcHQgTUFQX1BSSVZBVEUtL2Rldi96ZXJvICovCiYjNDM7CQlWTV9XQVJOX09OX09OQ0UocGdvZmYgIT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSk7CiYjNDM7CiYjNDM7CXJldHVybiBwZ29mZjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogbGluZWFyX2ZvbGlvX3BhZ2VfaW5kZXgoKSAtIERldGVybWluZSB0aGUgYWJzb2x1dGUgcGFnZSBvZmZzZXQgb2YKJiM0MzsgKiBAYWRkcmVzcyB3aXRoaW4gQHZtYSBmcm9tIEBmb2xpby4KJiM0MzsgKiBAZm9saW86IFRoZSBmb2xpbyB3aG9zZSBsaW5lYXIgcGFnZSBpbmRleCBpcyBzb3VnaHQuCiYjNDM7ICogQHZtYTogVGhlIFZNQSBpbiB3aGljaCBAYWRkcmVzcyByZXNpZGVzLgomIzQzOyAqIEBhZGRyZXNzOiBUaGUgYWRkcmVzcyB3aG9zZSBhYnNvbHV0ZSBwYWdlIG9mZnNldCBpcyByZXF1aXJlZC4KJiM0MzsgKgomIzQzOyAqIERldGVybWluZXMgd2hldGhlciB0byBvYnRhaW4gdGhlIHZpcnR1YWwgbGluZWFyIHBhZ2UgaW5kZXggYmFzZWQgb24gd2hldGhlcgomIzQzOyAqIEBmb2xpbyBpcyBhbm9ueW1vdXMgb3Igbm90LgomIzQzOyAqCiYjNDM7ICogU2VlIHRoZSBkZXNjcmlwdGlvbnMgb2YgbGluZWFyX3ZpcnRfcGFnZV9pbmRleCgpIGFuZCBsaW5lYXJfcGFnZV9pbmRleCgpIGZvcgomIzQzOyAqIGRldGFpbHMgb2YgZWFjaC4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IFRoZSBhYnNvbHV0ZSBwYWdlIG9mZnNldCBvZiBAYWRkcmVzcyB3aXRoaW4gQHZtYS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHBnb2ZmX3QgbGluZWFyX2ZvbGlvX3BhZ2VfaW5kZXgoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJCQkJICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQomIzQzO3sKJiM0MzsJaWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpCiYjNDM7CQlyZXR1cm4gbGluZWFyX3ZpcnRfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpOwomIzQzOwomIzQzOwlyZXR1cm4gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3Qgd2FpdF9wYWdlX2tleSB7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAlpbnQgYml0X25yOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ybWFwLmggYi9pbmNsdWRlL2xpbnV4L3JtYXAuaAppbmRleCA4ZGMwODcxZTVmMDAxMS4uYTQ4YWU5NTc1YmQyNjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcm1hcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcm1hcC5oCkBAIC04NzEsNiAmIzQzOzg3MSw3IEBAIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayB7CiAJcHRlX3QgKnB0ZTsKIAlzcGlubG9ja190ICpwdGw7CiAJdW5zaWduZWQgaW50IGZsYWdzOwomIzQzOwlib29sIGlzX2Fub25fd2FsazsKIH07CiAKICNkZWZpbmUgREVGSU5FX0ZPTElPX1ZNQV9XQUxLKG5hbWUsIF9mb2xpbywgX3ZtYSwgX2FkZHJlc3MsIF9mbGFncykJXApAQCAtODgxLDYgJiM0Mzs4ODIsNyBAQCBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgewogCQkudm1hID0gX3ZtYSwJCQkJCQlcCiAJCS5hZGRyZXNzID0gX2FkZHJlc3MsCQkJCQlcCiAJCS5mbGFncyA9IF9mbGFncywJCQkJCVwKJiM0MzsJCS5pc19hbm9uX3dhbGsgPSBmb2xpb190ZXN0X2Fub24oX2ZvbGlvKSwJCVwKIAl9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdykKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDliMWYzYjI0ZjdlMGQwLi5hYmM2NWQ2MDhjMjM5MiAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0yODg3LDcgJiM0MzsyODg3LDggQEAgaW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG0KIAkJfQogCiAJCWZvbGlvX21vdmVfYW5vbl9ybWFwKHNyY19mb2xpbywgZHN0X3ZtYSk7Ci0JCXNyY19mb2xpby0mZ3Q7aW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleChkc3Rfdm1hLCBkc3RfYWRkcik7CiYjNDM7CQlzcmNfZm9saW8tJmd0O2luZGV4ID0gbGluZWFyX2ZvbGlvX3BhZ2VfaW5kZXgoc3JjX2ZvbGlvLCBkc3Rfdm1hLAomIzQzOwkJCQkJCQkgICBkc3RfYWRkcik7CiAKIAkJX2RzdF9wbWQgPSBmb2xpb19ta19wbWQoc3JjX2ZvbGlvLCBkc3Rfdm1hLSZndDt2bV9wYWdlX3Byb3QpOwogCQkvKiBGb2xsb3cgbXJlbWFwKCkgYmVoYXZpb3IgYW5kIHRyZWF0IHRoZSBlbnRyeSBkaXJ0eSBhZnRlciB0aGUgbW92ZSAqLwpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggZjI2NDIzZGU0Y2EyODcuLjQxNTYxZmRlYjU2ZDBhIDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTI0MCw2ICYjNDM7MjQwLDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IG1tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJaW50IGVyciA9IHZmc19tbWFwKGZpbGUsIHZtYSk7CiAKJiM0MzsJLyogSG9va3MgY2Fubm90IG1hcmsgdGhlbXNlbHZlcyBhbm9ueW1vdXMuICovCiYjNDM7CWlmIChXQVJOX09OX09OQ0Uodm1hX2lzX2Fub255bW91cyh2bWEpKSkKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CiAJaWYgKGxpa2VseSghZXJyKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTkzMyw3ICYjNDM7OTM3LDggQEAgZm9saW9fd2l0aGluX3JhbmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQlyZXR1cm4gZmFsc2U7CiAKIAlwZ29mZl9mb2xpbyA9IGZvbGlvX3Bnb2ZmKGZvbGlvKTsKLQlwZ29mZl92bWFfc3RhcnQgPSB2bWFfc3RhcnRfcGdvZmYodm1hKTsKJiM0MzsJcGdvZmZfdm1hX3N0YXJ0ID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSA/CiYjNDM7CQl2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpIDogdm1hX3N0YXJ0X3Bnb2ZmKHZtYSk7CiAKIAlpZiAoc3RhcnQgJmx0OyB2bWEtJmd0O3ZtX3N0YXJ0KQogCQlzdGFydCA9IHZtYS0mZ3Q7dm1fc3RhcnQ7CkBAIC0xMDA1LDE5ICYjNDM7MTAxMCw5IEBAIHZvaWQgbWxvY2tfZHJhaW5fcmVtb3RlKGludCBjcHUpOwogCiBleHRlcm4gcG1kX3QgbWF5YmVfcG1kX21rd3JpdGUocG1kX3QgcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiAKLS8qKgotICogdm1hX2FkZHJlc3MgLSBGaW5kIHRoZSB2aXJ0dWFsIGFkZHJlc3MgYSBwYWdlIHJhbmdlIGlzIG1hcHBlZCBhdAotICogQHZtYTogVGhlIHZtYSB3aGljaCBtYXBzIHRoaXMgb2JqZWN0LgotICogQHBnb2ZmOiBUaGUgcGFnZSBvZmZzZXQgd2l0aGluIGl0cyBvYmplY3QuCi0gKiBAbnJfcGFnZXM6IFRoZSBudW1iZXIgb2YgcGFnZXMgdG8gY29uc2lkZXIuCi0gKgotICogSWYgYW55IHBhZ2UgaW4gdGhpcyByYW5nZSBpcyBtYXBwZWQgYnkgdGhpcyBWTUEsIHJldHVybiB0aGUgZmlyc3QgYWRkcmVzcwotICogd2hlcmUgYW55IG9mIHRoZXNlIHBhZ2VzIGFwcGVhci4gIE90aGVyd2lzZSwgcmV0dXJuIC1FRkFVTFQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJcGdvZmZfdCBwZ29mZiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX192bWFfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCXBnb2ZmX3QgcGdvZmYsIHBnb2ZmX3QgcGdvZmZfc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiB7Ci0JY29uc3QgcGdvZmZfdCBwZ29mZl9zdGFydCA9IHZtYV9zdGFydF9wZ29mZih2bWEpOwogCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKIAogCWlmIChwZ29mZiAmZ3Q7PSBwZ29mZl9zdGFydCkgewpAQCAtMTAzNSwyMyAmIzQzOzEwMzAsNjggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hZGRyZXNzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXJldHVybiBhZGRyZXNzOwogfQogCiYjNDM7LyoqCiYjNDM7ICogdm1hX2ZpbGViYWNrZWRfYWRkcmVzcyAtIEZpbmQgdGhlIHZpcnR1YWwgYWRkcmVzcyBhIGZpbGUtYmFja2VkIHBhZ2UgcmFuZ2UgaXMKJiM0MzsgKiBtYXBwZWQgYXQuCiYjNDM7ICogQHZtYTogVGhlIHZtYSB3aGljaCBtYXBzIHRoaXMgb2JqZWN0LgomIzQzOyAqIEBwZ29mZjogVGhlIHBhZ2Ugb2Zmc2V0IHdpdGhpbiBpdHMgb2JqZWN0LgomIzQzOyAqIEBucl9wYWdlczogVGhlIG51bWJlciBvZiBwYWdlcyB0byBjb25zaWRlci4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IElmIGFueSBwYWdlIGluIHRoaXMgcmFuZ2UgaXMgbWFwcGVkIGJ5IHRoaXMgVk1BLCByZXR1cm4gdGhlIGZpcnN0CiYjNDM7ICogYWRkcmVzcyB3aGVyZSBhbnkgb2YgdGhlc2UgcGFnZXMgYXBwZWFyLiAgT3RoZXJ3aXNlLCByZXR1cm4gLUVGQVVMVC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hX2ZpbGViYWNrZWRfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCXBnb2ZmX3QgcGdvZmYsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwlWTV9XQVJOX09OX09OQ0Uodm1hX2lzX2Fub255bW91cyh2bWEpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fdm1hX2FkZHJlc3Modm1hLCBwZ29mZiwgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIG5yX3BhZ2VzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogdm1hX2Fub25fYWRkcmVzcyAtIEZpbmQgdGhlIHZpcnR1YWwgYWRkcmVzcyBhbiBhbm9ueW1vdXMgcGFnZSByYW5nZSBpcyBtYXBwZWQKJiM0MzsgKiBhdC4KJiM0MzsgKiBAdm1hOiBUaGUgdm1hIHdoaWNoIG1hcHMgdGhpcyBvYmplY3QuCiYjNDM7ICogQHBnb2ZmX3ZpcnQ6IFRoZSB2aXJ0dWFsIHBhZ2UgaW5kZXggYmVsb25naW5nIHRvIHRoZSBmb2xpby4KJiM0MzsgKiBAbnJfcGFnZXM6IFRoZSBudW1iZXIgb2YgcGFnZXMgdG8gY29uc2lkZXIuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yIGFub255bW91cyBvciBNQVBfUFJJVkFURS1tYXBwZWQgZmlsZS1iYWNrZWQgVk1Bcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IElmIGFueSBwYWdlIGluIHRoaXMgcmFuZ2UgaXMgbWFwcGVkIGJ5IHRoaXMgVk1BLCByZXR1cm4gdGhlIGZpcnN0IGFkZHJlc3MKJiM0MzsgKiB3aGVyZSBhbnkgb2YgdGhlc2UgcGFnZXMgYXBwZWFyLiBPdGhlcndpc2UsIHJldHVybiAtRUZBVUxULgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfYW5vbl9hZGRyZXNzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJcGdvZmZfdCBwZ29mZl92aXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQomIzQzO3sKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkgJmFtcDsmYW1wOyB2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKSk7CiYjNDM7CiYjNDM7CXJldHVybiBfX3ZtYV9hZGRyZXNzKHZtYSwgcGdvZmZfdmlydCwgdm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSwgbnJfcGFnZXMpOwomIzQzO30KJiM0MzsKIC8qCi0gKiBUaGVuIGF0IHdoYXQgdXNlciB2aXJ0dWFsIGFkZHJlc3Mgd2lsbCBub25lIG9mIHRoZSByYW5nZSBiZSBmb3VuZCBpbiB2bWE/CiYjNDM7ICogQXQgd2hhdCB1c2VyIHZpcnR1YWwgYWRkcmVzcyB3aWxsIG5vbmUgb2YgdGhlIHJhbmdlIGJlIGZvdW5kIGluIHZtYT8KICAqIEFzc3VtZXMgdGhhdCB2bWFfYWRkcmVzcygpIGFscmVhZHkgcmV0dXJuZWQgYSBnb29kIHN0YXJ0aW5nIGFkZHJlc3MuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfYWRkcmVzc19lbmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KQogewotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gcHZtdy0mZ3Q7dm1hOwotCXBnb2ZmX3QgcGdvZmY7CiYjNDM7CWNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gcHZtdy0mZ3Q7dm1hOwomIzQzOwljb25zdCBwZ29mZl90IHBnb2ZmID0gcHZtdy0mZ3Q7cGdvZmY7CiYjNDM7CXBnb2ZmX3QgcGdvZmZfdm1hX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKJiM0MzsJcGdvZmZfdCBwZ29mZl9lbmQ7CiAKIAkvKiBDb21tb24gY2FzZSwgcGx1cyAtJmd0O3Bnb2ZmIGlzIGludmFsaWQgZm9yIEtTTSAqLwogCWlmIChwdm13LSZndDtucl9wYWdlcyA9PSAxKQogCQlyZXR1cm4gcHZtdy0mZ3Q7YWRkcmVzcyAmIzQzOyBQQUdFX1NJWkU7CiAKLQlwZ29mZiA9IHB2bXctJmd0O3Bnb2ZmICYjNDM7IHB2bXctJmd0O25yX3BhZ2VzOwomIzQzOwlpZiAocHZtdy0mZ3Q7aXNfYW5vbl93YWxrKQomIzQzOwkJcGdvZmZfdm1hX3N0YXJ0ID0gdm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKTsKJiM0MzsJZWxzZQomIzQzOwkJcGdvZmZfdm1hX3N0YXJ0ID0gdm1hX3N0YXJ0X3Bnb2ZmKHZtYSk7CiYjNDM7CiYjNDM7CXBnb2ZmX2VuZCA9IHBnb2ZmICYjNDM7IHB2bXctJmd0O25yX3BhZ2VzOwogCWFkZHJlc3MgPSB2bWEtJmd0O3ZtX3N0YXJ0ICYjNDM7Ci0JCSgocGdvZmYgLSB2bWFfc3RhcnRfcGdvZmYodm1hKSkgJmx0OyZsdDsgUEFHRV9TSElGVCk7CiYjNDM7CQkoKHBnb2ZmX2VuZCAtIHBnb2ZmX3ZtYV9zdGFydCkgJmx0OyZsdDsgUEFHRV9TSElGVCk7CiAJLyogQ2hlY2sgZm9yIGFkZHJlc3MgYmV5b25kIHZtYSAob3Igd3JhcHBlZCB0aHJvdWdoIDA/KSAqLwogCWlmIChhZGRyZXNzICZsdDsgdm1hLSZndDt2bV9zdGFydCB8fCBhZGRyZXNzICZndDsgdm1hLSZndDt2bV9lbmQpCiAJCWFkZHJlc3MgPSB2bWEtJmd0O3ZtX2VuZDsKZGlmZiAtLWdpdCBhL21tL2ludGVydmFsX3RyZWUuYyBiL21tL2ludGVydmFsX3RyZWUuYwppbmRleCAzYWU5ZTEwNmQzYWZkOC4uMjZiODQzN2UzYjFiMTMgMTAwNjQ0Ci0tLSBhL21tL2ludGVydmFsX3RyZWUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcnZhbF90cmVlLmMKQEAgLTgzLDEyICYjNDM7ODMsMTIgQEAgbWFwcGluZ19ybWFwX3RyZWVfaXRlcl9uZXh0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCiBzdGF0aWMgcGdvZmZfdCBhdmNfc3RhcnRfcGdvZmYoc3RydWN0IGFub25fdm1hX2NoYWluICphdmMpCiB7Ci0JcmV0dXJuIHZtYV9zdGFydF9wZ29mZihhdmMtJmd0O3ZtYSk7CiYjNDM7CXJldHVybiB2bWFfc3RhcnRfdmlydF9wZ29mZihhdmMtJmd0O3ZtYSk7CiB9CiAKIHN0YXRpYyBwZ29mZl90IGF2Y19sYXN0X3Bnb2ZmKHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjKQogewotCXJldHVybiB2bWFfbGFzdF9wZ29mZihhdmMtJmd0O3ZtYSk7CiYjNDM7CXJldHVybiB2bWFfbGFzdF92aXJ0X3Bnb2ZmKGF2Yy0mZ3Q7dm1hKTsKIH0KIAogSU5URVJWQUxfVFJFRV9ERUZJTkUoc3RydWN0IGFub25fdm1hX2NoYWluLCByYiwgcGdvZmZfdCwgcmJfc3VidHJlZV9sYXN0LApkaWZmIC0tZ2l0IGEvbW0va3NtLmMgYi9tbS9rc20uYwppbmRleCA0NzAwNmY0OTRmY2IxYi4uYjliMzJmN2JmYjY5MWUgMTAwNjQ0Ci0tLSBhL21tL2tzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tzbS5jCkBAIC0xNjI1LDcgJiM0MzsxNjI1LDggQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLAogCSAqIHN0YWJsZV90cmVlLCBicmVha19jb3coKSB3aWxsIGNsZWFuIGl0IHVwLgogCSAqLwogCXJtYXBfaXRlbS0mZ3Q7YW5vbl92bWEgPSB2bWEtJmd0O2Fub25fdm1hOwotCXJtYXBfaXRlbS0mZ3Q7bGluZWFyX3BhZ2VfaW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIHJtYXBfaXRlbS0mZ3Q7YWRkcmVzcyk7CiYjNDM7CS8qIFRoZSBWTUEgaXMgYWx3YXlzIGFub24vTUFQX1BSSVZBVEUtZmlsZSBiYWNrZWQgc28gdXNlIGFub24gaW5kZXguICovCiYjNDM7CXJtYXBfaXRlbS0mZ3Q7bGluZWFyX3BhZ2VfaW5kZXggPSBsaW5lYXJfdmlydF9wYWdlX2luZGV4KHZtYSwgcm1hcF9pdGVtLSZndDthZGRyZXNzKTsKIAlnZXRfYW5vbl92bWEodm1hLSZndDthbm9uX3ZtYSk7CiBvdXQ6CiAJbW1hcF9yZWFkX3VubG9jayhtbSk7CkBAIC0zMTUyLDcgJiM0MzszMTUzLDcgQEAgc3RydWN0IGZvbGlvICprc21fbWlnaHRfbmVlZF90b19jb3B5KHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQlyZXR1cm4gZm9saW87CS8qIG5vIG5lZWQgdG8gY29weSBpdCAqLwogCX0gZWxzZSBpZiAoIWFub25fdm1hKSB7CiAJCXJldHVybiBmb2xpbzsJCS8qIG5vIG5lZWQgdG8gY29weSBpdCAqLwotCX0gZWxzZSBpZiAoZm9saW8tJmd0O2luZGV4ID09IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcikgJmFtcDsmYW1wOwomIzQzOwl9IGVsc2UgaWYgKGZvbGlvLSZndDtpbmRleCA9PSBsaW5lYXJfdmlydF9wYWdlX2luZGV4KHZtYSwgYWRkcikgJmFtcDsmYW1wOwogCQkJYW5vbl92bWEtJmd0O3Jvb3QgPT0gdm1hLSZndDthbm9uX3ZtYS0mZ3Q7cm9vdCkgewogCQlyZXR1cm4gZm9saW87CQkvKiBzdGlsbCBubyBuZWVkIHRvIGNvcHkgaXQgKi8KIAl9CkBAIC0zMjIyLDcgJiM0MzszMjIzLDcgQEAgdm9pZCBybWFwX3dhbGtfa3NtKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCAqcndjKQogCQkvKgogCQkgKiBDdXJyZW50bHksIEtTTSBmb2xpb3MgYXJlIGFsd2F5cyBzbWFsbCBmb2xpb3MsIHNvIGl0JiMzOTtzCiAJCSAqIHN1ZmZpY2llbnQgdG8gc2VhcmNoIGZvciBhIHNpbmdsZSBwYWdlLiBXZSBjYW4gc2ltcGx5IHVzZQotCQkgKiB0aGUgbGluZWFyX3BhZ2VfaW5kZXggb2YgdGhlIG9yaWdpbmFsIGRlLWR1cGxpY2F0ZQomIzQzOwkJICogdGhlIGxpbmVhcl92aXJ0X3BhZ2VfaW5kZXggb2YgdGhlIG9yaWdpbmFsIGRlLWR1cGxpY2F0ZQogCQkgKiBhbm9ueW1vdXMgcGFnZSB0aGF0IHdlIHJlbWVtYmVyZWQgaW4gdGhlIHJtYXBfaXRlbSB3aGlsZQogCQkgKiBkZS1kdXBsaWNhdGluZy4gTm90ZSB0aGF0IG1yZW1hcCgpIGFsd2F5cyBkZS1kdXBsaWNhdGVzIEtTTQogCQkgKiBmb2xpb3M6IHNvIGlmIHRoZXJlIHdhcyBtcmVtYXAoKSBpbiBvdXIgcGFyZW50IG9yIG91ciBjaGlsZCwKZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IGFhZjE0NjA4YjMwZTJkLi5hOGIwM2UyOTIwYmE4YSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC02MjAsNyAmIzQzOzYyMCw3IEBAIHN0YXRpYyB2b2lkIGFkZF90b19raWxsX2ZzZGF4KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcCwKIAkJCSAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqdG9fa2lsbCwgcGdvZmZfdCBwZ29mZikKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSB2bWFfYWRkcmVzcyh2bWEsIHBnb2ZmLCAxKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBhZGRyID0gdm1hX2ZpbGViYWNrZWRfYWRkcmVzcyh2bWEsIHBnb2ZmLCAxKTsKIAlfX2FkZF90b19raWxsKHRzaywgcCwgdm1hLCB0b19raWxsLCBhZGRyKTsKIH0KIApAQCAtMjI2NSw3ICYjNDM7MjI2NSw3IEBAIHN0YXRpYyB2b2lkIGFkZF90b19raWxsX3Bnb2ZmKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAogCX0KIAogCS8qIENoZWNrIGZvciBwZ29mZiBub3QgYmFja2VkIGJ5IHN0cnVjdCBwYWdlICovCi0JdGstJmd0O2FkZHIgPSB2bWFfYWRkcmVzcyh2bWEsIHBnb2ZmLCAxKTsKJiM0MzsJdGstJmd0O2FkZHIgPSB2bWFfZmlsZWJhY2tlZF9hZGRyZXNzKHZtYSwgcGdvZmYsIDEpOwogCXRrLSZndDtzaXplX3NoaWZ0ID0gUEFHRV9TSElGVDsKIAogCWlmICh0ay0mZ3Q7YWRkciA9PSAtRUZBVUxUKQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBkNWU4NzYyNGY2OTIwNS4uNTZiMjQ0NTUyZjEzOTQgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC02MzEsMTMgJiM0Mzs2MzEsMTQgQEAgc3RhdGljIHZvaWQgcHJpbnRfYmFkX3BhZ2VfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwogCWNoYXIgZW50cnlfc3RyW1BUVkFMX1NUUl9NQVhdOwotCXBnb2ZmX3QgaW5kZXg7CiYjNDM7CXBnb2ZmX3QgaW5kZXgsIHZpcnRfaW5kZXg7CiAKIAlpZiAoaXNfYmFkX3BhZ2VfbWFwX3JhdGVsaW1pdGVkKCkpCiAJCXJldHVybjsKIAogCW1hcHBpbmcgPSB2bWEtJmd0O3ZtX2ZpbGUgPyB2bWEtJmd0O3ZtX2ZpbGUtJmd0O2ZfbWFwcGluZyA6IE5VTEw7CiAJaW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHIpOwomIzQzOwl2aXJ0X2luZGV4ID0gX19saW5lYXJfdmlydF9wYWdlX2luZGV4KHZtYSwgYWRkcik7CiAKIAlwdHZhbF9ieXRlc190b19oZXhfc3RyKGVudHJ5X3N0ciwgc2l6ZW9mKGVudHJ5X3N0ciksIGVudHJ5LCBlbnRyeV9zaXplKTsKIAlwcl9hbGVydCgmIzM0O0JVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiVzJiMzNDssIGN1cnJlbnQtJmd0O2NvbW0sCkBAIC02NDUsOCAmIzQzOzY0Niw5IEBAIHN0YXRpYyB2b2lkIHByaW50X2JhZF9wYWdlX21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHZtYS0mZ3Q7dm1fbW0sIGFkZHIpOwogCWlmIChwYWdlKQogCQlkdW1wX3BhZ2UocGFnZSwgJiMzNDtiYWQgcGFnZSBtYXAmIzM0Oyk7Ci0JcHJfYWxlcnQoJiMzNDthZGRyOiVweCB2bV9mbGFnczolMDhseCBhbm9uX3ZtYTolcHggbWFwcGluZzolcHggaW5kZXg6JWx4XG4mIzM0OywKLQkJICh2b2lkICopYWRkciwgdm1hLSZndDt2bV9mbGFncywgdm1hLSZndDthbm9uX3ZtYSwgbWFwcGluZywgaW5kZXgpOwomIzQzOwlwcl9hbGVydCgmIzM0O2FkZHI6JXB4IHZtX2ZsYWdzOiUwOGx4IGFub25fdm1hOiVweCBtYXBwaW5nOiVweCBpbmRleDolbHggdmlydF9pbmRleDolbHhcbiYjMzQ7LAomIzQzOwkJICh2b2lkICopYWRkciwgdm1hLSZndDt2bV9mbGFncywgdm1hLSZndDthbm9uX3ZtYSwgbWFwcGluZywgaW5kZXgsCiYjNDM7CQkgdmlydF9pbmRleCk7CiAJcHJfYWxlcnQoJiMzNDtmaWxlOiVwRCBmYXVsdDolcHMgbW1hcDolcHMgbW1hcF9wcmVwYXJlOiAlcHMgcmVhZF9mb2xpbzolcHNcbiYjMzQ7LAogCQkgdm1hLSZndDt2bV9maWxlLAogCQkgdm1hLSZndDt2bV9vcHMgPyB2bWEtJmd0O3ZtX29wcy0mZ3Q7ZmF1bHQgOiBOVUxMLApkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDIyMmM4YzE1Zjc4MmY3Li4zN2ZlN2E5YjNmYWNjOCAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGUuYwpAQCAtMzYzLDggJiM0MzszNjMsMTAgQEAgc3RhdGljIGJvb2wgcmVtb3ZlX21pZ3JhdGlvbl9wdGUoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJdW5zaWduZWQgbG9uZyBpZHggPSAwOwogCiAJCS8qIHBnb2ZmIGlzIGludmFsaWQgZm9yIGtzbSBwYWdlcywgYnV0IHRoZXkgYXJlIG5ldmVyIGxhcmdlICovCi0JCWlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKQotCQkJaWR4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBwdm13LmFkZHJlc3MpIC0gcHZtdy5wZ29mZjsKJiM0MzsJCWlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7CiYjNDM7CQkJaWR4ICYjNDM7PSBsaW5lYXJfZm9saW9fcGFnZV9pbmRleChmb2xpbywgdm1hLCBwdm13LmFkZHJlc3MpOwomIzQzOwkJCWlkeCAtPSBwdm13LnBnb2ZmOwomIzQzOwkJfQogCQluZXcgPSBmb2xpb19wYWdlKGZvbGlvLCBpZHgpOwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTCmRpZmYgLS1naXQgYS9tbS9tcmVtYXAuYyBiL21tL21yZW1hcC5jCmluZGV4IGI2NGFhMWY2ZTA3ZWRlLi5mMDdmYzRlM2VmMmU2YyAxMDA2NDQKLS0tIGEvbW0vbXJlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbXJlbWFwLmMKQEAgLTEyNjUsNyAmIzQzOzEyNjUsOSBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pCiBzdGF0aWMgaW50IGNvcHlfdm1hX2FuZF9kYXRhKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0sCiAJCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKm5ld192bWFfcHRyKQogewotCWNvbnN0IHVuc2lnbmVkIGxvbmcgbmV3X3Bnb2ZmID0gbGluZWFyX3BhZ2VfaW5kZXgodnJtLSZndDt2bWEsIHZybS0mZ3Q7YWRkcik7CiYjNDM7CWNvbnN0IHBnb2ZmX3QgbmV3X3Bnb2ZmID0gbGluZWFyX3BhZ2VfaW5kZXgodnJtLSZndDt2bWEsIHZybS0mZ3Q7YWRkcik7CiYjNDM7CWNvbnN0IHBnb2ZmX3QgbmV3X3ZpcnRfcGdvZmYgPQomIzQzOwkJX19saW5lYXJfdmlydF9wYWdlX2luZGV4KHZybS0mZ3Q7dm1hLCB2cm0tJmd0O2FkZHIpOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdnJtLSZndDt2bWE7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpuZXdfdm1hOwogCXVuc2lnbmVkIGxvbmcgbW92ZWRfbGVuOwpAQCAtMTI3Myw3ICYjNDM7MTI3NSw3IEBAIHN0YXRpYyBpbnQgY29weV92bWFfYW5kX2RhdGEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSwKIAlQQUdFVEFCTEVfTU9WRShwbWMsIE5VTEwsIE5VTEwsIHZybS0mZ3Q7YWRkciwgdnJtLSZndDtuZXdfYWRkciwgdnJtLSZndDtvbGRfbGVuKTsKIAogCW5ld192bWEgPSBjb3B5X3ZtYSgmYW1wO3ZtYSwgdnJtLSZndDtuZXdfYWRkciwgdnJtLSZndDtuZXdfbGVuLCBuZXdfcGdvZmYsCi0JCQkgICAmYW1wO3BtYy5uZWVkX3JtYXBfbG9ja3MpOwomIzQzOwkJCSAgIG5ld192aXJ0X3Bnb2ZmLCAmYW1wO3BtYy5uZWVkX3JtYXBfbG9ja3MpOwogCWlmICghbmV3X3ZtYSkgewogCQl2cm1fdW5jaGFyZ2UodnJtKTsKIAkJKm5ld192bWFfcHRyID0gTlVMTDsKZGlmZiAtLWdpdCBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jIGIvbW0vcGFnZV92bWFfbWFwcGVkLmMKaW5kZXggZDc2NzBiYTQxNDdiZmYuLjRlOTY0NTQ1ZTVlODVhIDEwMDY0NAotLS0gYS9tbS9wYWdlX3ZtYV9tYXBwZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuYwpAQCAtMzU2LDYgJiM0MzszNTYsNyBAQCB1bnNpZ25lZCBsb25nIHBhZ2VfbWFwcGVkX2luX3ZtYShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7CiYjNDM7CWNvbnN0IHBnb2ZmX3QgcGdvZmYgPSBwYWdlX3Bnb2ZmKGZvbGlvLCBwYWdlKTsKIAlzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHsKIAkJLnBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpLAogCQkubnJfcGFnZXMgPSAxLApAQCAtMzYzLDcgJiM0MzszNjQsMTAgQEAgdW5zaWduZWQgbG9uZyBwYWdlX21hcHBlZF9pbl92bWEoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCS5mbGFncyA9IFBWTVdfU1lOQywKIAl9OwogCi0JcHZtdy5hZGRyZXNzID0gdm1hX2FkZHJlc3Modm1hLCBwYWdlX3Bnb2ZmKGZvbGlvLCBwYWdlKSwgMSk7CiYjNDM7CWlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKQomIzQzOwkJcHZtdy5hZGRyZXNzID0gdm1hX2Fub25fYWRkcmVzcyh2bWEsIHBnb2ZmLCAxKTsKJiM0MzsJZWxzZQomIzQzOwkJcHZtdy5hZGRyZXNzID0gdm1hX2ZpbGViYWNrZWRfYWRkcmVzcyh2bWEsIHBnb2ZmLCAxKTsKIAlpZiAocHZtdy5hZGRyZXNzID09IC1FRkFVTFQpCiAJCWdvdG8gb3V0OwogCWlmICghcGFnZV92bWFfbWFwcGVkX3dhbGsoJmFtcDtwdm13KSkKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCBhZDgyMGZlODZmN2Q4Yy4uNjg1NGJhZjRiODc3OGYgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmMKQEAgLTg2NSwxNCAmIzQzOzg2NSwxNSBAQCB1bnNpZ25lZCBsb25nIHBhZ2VfYWRkcmVzc19pbl92bWEoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJaWYgKCF2bWEtJmd0O2Fub25fdm1hIHx8ICFhbm9uX3ZtYSB8fAogCQkgICAgdm1hLSZndDthbm9uX3ZtYS0mZ3Q7cm9vdCAhPSBhbm9uX3ZtYS0mZ3Q7cm9vdCkKIAkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJLyogS1NNIGZvbGlvcyBkb24mIzM5O3QgcmVhY2ggaGVyZSBiZWNhdXNlIG9mIHRoZSAhYW5vbl92bWEgY2hlY2sgKi8KJiM0MzsJCXJldHVybiB2bWFfYW5vbl9hZGRyZXNzKHZtYSwgcGFnZV9wZ29mZihmb2xpbywgcGFnZSksIDEpOwogCX0gZWxzZSBpZiAoIXZtYS0mZ3Q7dm1fZmlsZSkgewogCQlyZXR1cm4gLUVGQVVMVDsKIAl9IGVsc2UgaWYgKHZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7Zl9tYXBwaW5nICE9IGZvbGlvLSZndDttYXBwaW5nKSB7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCS8qIEtTTSBmb2xpb3MgZG9uJiMzOTt0IHJlYWNoIGhlcmUgYmVjYXVzZSBvZiB0aGUgIWFub25fdm1hIGNoZWNrICovCi0JcmV0dXJuIHZtYV9hZGRyZXNzKHZtYSwgcGFnZV9wZ29mZihmb2xpbywgcGFnZSksIDEpOwomIzQzOwlyZXR1cm4gdm1hX2ZpbGViYWNrZWRfYWRkcmVzcyh2bWEsIHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpLCAxKTsKIH0KIAogLyoKQEAgLTEyMzksOCAmIzQzOzEyNDAsMTAgQEAgc3RhdGljIGJvb2wgbWFwcGluZ193cnByb3RlY3RfcmFuZ2Vfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCS52bWEJCT0gdm1hLAogCQkuYWRkcmVzcwk9IGFkZHJlc3MsCiAJCS5mbGFncwkJPSBQVk1XX1NZTkMsCiYjNDM7CQkuaXNfYW5vbl93YWxrICAgPSBmYWxzZSwKIAl9OwogCiYjNDM7CVZNX1dBUk5fT05fT05DRShmb2xpb190ZXN0X2Fub24oZm9saW8pKTsKIAlzdGF0ZS0mZ3Q7Y2xlYW5lZCAmIzQzOz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoJmFtcDtwdm13KTsKIAogCXJldHVybiB0cnVlOwpAQCAtMTMxNiwxMiAmIzQzOzEzMTksMTMgQEAgaW50IHBmbl9ta2NsZWFuX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBwZ29mZl90IHBnb2ZmLAogCQkucGdvZmYJCT0gcGdvZmYsCiAJCS52bWEJCT0gdm1hLAogCQkuZmxhZ3MJCT0gUFZNV19TWU5DLAomIzQzOwkJLmlzX2Fub25fd2FsayAgID0gZmFsc2UsCiAJfTsKIAogCWlmIChpbnZhbGlkX21rY2xlYW5fdm1hKHZtYSwgTlVMTCkpCiAJCXJldHVybiAwOwogCi0JcHZtdy5hZGRyZXNzID0gdm1hX2FkZHJlc3Modm1hLCBwZ29mZiwgbnJfcGFnZXMpOwomIzQzOwlwdm13LmFkZHJlc3MgPSB2bWFfZmlsZWJhY2tlZF9hZGRyZXNzKHZtYSwgcGdvZmYsIG5yX3BhZ2VzKTsKIAlWTV9CVUdfT05fVk1BKHB2bXcuYWRkcmVzcyA9PSAtRUZBVUxULCB2bWEpOwogCiAJcmV0dXJuIHBhZ2Vfdm1hX21rY2xlYW5fb25lKCZhbXA7cHZtdyk7CkBAIC0xNDgyLDcgJiM0MzsxNDg2LDcgQEAgc3RhdGljIHZvaWQgX19mb2xpb19zZXRfYW5vbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkgKi8KIAlhbm9uX3ZtYSA9ICh2b2lkICopIGFub25fdm1hICYjNDM7IEZPTElPX01BUFBJTkdfQU5PTjsKIAlXUklURV9PTkNFKGZvbGlvLSZndDttYXBwaW5nLCAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKikgYW5vbl92bWEpOwotCWZvbGlvLSZndDtpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyk7CiYjNDM7CWZvbGlvLSZndDtpbmRleCA9IGxpbmVhcl92aXJ0X3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTsKIH0KIAogLyoqCkBAIC0xNTA5LDggJiM0MzsxNTEzLDggQEAgc3RhdGljIHZvaWQgX19wYWdlX2NoZWNrX2Fub25fcm1hcChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCSAqLwogCVZNX0JVR19PTl9GT0xJTyhmb2xpb19hbm9uX3ZtYShmb2xpbyktJmd0O3Jvb3QgIT0gdm1hLSZndDthbm9uX3ZtYS0mZ3Q7cm9vdCwKIAkJCWZvbGlvKTsKLQlWTV9CVUdfT05fUEFHRShwYWdlX3Bnb2ZmKGZvbGlvLCBwYWdlKSAhPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpLAotCQkgICAgICAgcGFnZSk7CiYjNDM7CVZNX0JVR19PTl9QQUdFKHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpICE9CiYjNDM7CQkgICAgICAgbGluZWFyX3ZpcnRfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpLCBwYWdlKTsKIH0KIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fYWRkX2Fub25fcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLApAQCAtMzAzNywxMCAmIzQzOzMwNDEsMTAgQEAgc3RhdGljIHZvaWQgcm1hcF93YWxrX2Fub24oc3RydWN0IGZvbGlvICpmb2xpbywKIAlwZ29mZl9lbmQgPSBwZ29mZl9zdGFydCAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxOwogCWFub25fcm1hcF90cmVlX2ZvcmVhY2goYXZjLCBhbm9uX3ZtYSwgcGdvZmZfc3RhcnQsIHBnb2ZmX2VuZCkgewogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGF2Yy0mZ3Q7dm1hOwotCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSB2bWFfYWRkcmVzcyh2bWEsIHBnb2ZmX3N0YXJ0LAomIzQzOwkJY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gdm1hX2Fub25fYWRkcmVzcyh2bWEsIHBnb2ZmX3N0YXJ0LAogCQkJCWZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7CiAKLQkJVk1fQlVHX09OX1ZNQShhZGRyZXNzID09IC1FRkFVTFQsIHZtYSk7CiYjNDM7CQlWTV9XQVJOX09OX09OQ0VfVk1BKGFkZHJlc3MgPT0gLUVGQVVMVCwgdm1hKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAKIAkJaWYgKHJ3Yy0mZ3Q7aW52YWxpZF92bWEgJmFtcDsmYW1wOyByd2MtJmd0O2ludmFsaWRfdm1hKHZtYSwgcndjLSZndDthcmcpKQpAQCAtMzEwMCw3ICYjNDM7MzEwNCw4IEBAIHN0YXRpYyB2b2lkIF9fcm1hcF93YWxrX2ZpbGUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJfQogbG9va3VwOgogCW1hcHBpbmdfcm1hcF90cmVlX2ZvcmVhY2godm1hLCBtYXBwaW5nLCBwZ29mZl9zdGFydCwgcGdvZmZfZW5kKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHZtYSwgcGdvZmZfc3RhcnQsIG5yX3BhZ2VzKTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHZtYV9maWxlYmFja2VkX2FkZHJlc3Modm1hLCBwZ29mZl9zdGFydCwKJiM0MzsJCQkJCQkJICAgICAgIG5yX3BhZ2VzKTsKIAogCQlWTV9CVUdfT05fVk1BKGFkZHJlc3MgPT0gLUVGQVVMVCwgdm1hKTsKIAkJY29uZF9yZXNjaGVkKCk7CmRpZmYgLS1naXQgYS9tbS91c2VyZmF1bHRmZC5jIGIvbW0vdXNlcmZhdWx0ZmQuYwppbmRleCA4ZmQyNGM4YjQyOGUxYi4uMjU4YjAzMTgyYTc4MGIgMTAwNjQ0Ci0tLSBhL21tL3VzZXJmYXVsdGZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXNlcmZhdWx0ZmQuYwpAQCAtMTM1Miw3ICYjNDM7MTM1Miw4IEBAIHN0YXRpYyBsb25nIG1vdmVfcHJlc2VudF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQl9CiAKIAkJZm9saW9fbW92ZV9hbm9uX3JtYXAoc3JjX2ZvbGlvLCBkc3Rfdm1hKTsKLQkJc3JjX2ZvbGlvLSZndDtpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KGRzdF92bWEsIGRzdF9hZGRyKTsKJiM0MzsJCXNyY19mb2xpby0mZ3Q7aW5kZXggPSBsaW5lYXJfZm9saW9fcGFnZV9pbmRleChzcmNfZm9saW8sIGRzdF92bWEsCiYjNDM7CQkJCQkJCSAgIGRzdF9hZGRyKTsKIAogCQlvcmlnX2RzdF9wdGUgPSBmb2xpb19ta19wdGUoc3JjX2ZvbGlvLCBkc3Rfdm1hLSZndDt2bV9wYWdlX3Byb3QpOwogCQkvKiBTZXQgc29mdCBkaXJ0eSBiaXQgc28gdXNlcnNwYWNlIGNhbiBub3RpY2UgdGhlIHB0ZSB3YXMgbW92ZWQgKi8KQEAgLTE0MjgsNyAmIzQzOzE0MjksOCBAQCBzdGF0aWMgaW50IG1vdmVfc3dhcF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwKIAkgKi8KIAlpZiAoc3JjX2ZvbGlvKSB7CiAJCWZvbGlvX21vdmVfYW5vbl9ybWFwKHNyY19mb2xpbywgZHN0X3ZtYSk7Ci0JCXNyY19mb2xpby0mZ3Q7aW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleChkc3Rfdm1hLCBkc3RfYWRkcik7CiYjNDM7CQlzcmNfZm9saW8tJmd0O2luZGV4ID0gbGluZWFyX2ZvbGlvX3BhZ2VfaW5kZXgoc3JjX2ZvbGlvLCBkc3Rfdm1hLAomIzQzOwkJCQkJCQkgICBkc3RfYWRkcik7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogQ2hlY2sgaWYgdGhlIHN3YXAgZW50cnkgaXMgY2FjaGVkIGFmdGVyIGFjcXVpcmluZyB0aGUgc3JjX3B0ZQpkaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuYwppbmRleCBiNWJjM2VlYzk2MWM3OS4uZjgwMDFkNWMyM2FhZDEgMTAwNjQ0Ci0tLSBhL21tL3ZtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5jCkBAIC0xOCw2ICYjNDM7MTgsNyBAQCBzdHJ1Y3QgbW1hcF9zdGF0ZSB7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCXVuc2lnbmVkIGxvbmcgZW5kOwogCXBnb2ZmX3QgcGdvZmY7CiYjNDM7CXBnb2ZmX3QgdmlydF9wZ29mZjsKIAl1bnNpZ25lZCBsb25nIHBnbGVuOwogCXVuaW9uIHsKIAkJdm1fZmxhZ3NfdCB2bV9mbGFnczsKQEAgLTQ2LDEzICYjNDM7NDcsMjIgQEAgc3RydWN0IG1tYXBfc3RhdGUgewogCWJvb2wgZmlsZV9kb2VzbnRfbmVlZF9nZXQgOjE7CiB9OwogCi0jZGVmaW5lIE1NQVBfU1RBVEUobmFtZSwgbW1fLCB2bWlfLCBhZGRyXywgbGVuXywgcGdvZmZfLCB2bWFfZmxhZ3NfLCBmaWxlXykgXAomIzQzO3N0YXRpYyBpbmxpbmUgcGdvZmZfdCBtYXBfYW5vbl9wZ29mZihjb25zdCBzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKQomIzQzO3sKJiM0MzsJaWYgKHZtYV9mbGFnc190ZXN0KCZhbXA7bWFwLSZndDt2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKSkKJiM0MzsJCXJldHVybiBtYXAtJmd0O3Bnb2ZmOwomIzQzOwomIzQzOwlyZXR1cm4gbWFwLSZndDt2aXJ0X3Bnb2ZmOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIE1NQVBfU1RBVEUobmFtZSwgbW1fLCB2bWlfLCBhZGRyXywgbGVuXywgcGdvZmZfLCB2aXJ0X3Bnb2ZmXywgdm1hX2ZsYWdzXywgZmlsZV8pIFwKIAlzdHJ1Y3QgbW1hcF9zdGF0ZSBuYW1lID0gewkJCQkJXAogCQkubW0gPSBtbV8sCQkJCQkJXAogCQkudm1pID0gdm1pXywJCQkJCQlcCiAJCS5hZGRyID0gYWRkcl8sCQkJCQkJXAogCQkuZW5kID0gKGFkZHJfKSAmIzQzOyAobGVuXyksCQkJCVwKIAkJLnBnb2ZmID0gcGdvZmZfLAkJCQkJXAomIzQzOwkJLnZpcnRfcGdvZmYgPSB2aXJ0X3Bnb2ZmXywJCQkJXAogCQkucGdsZW4gPSBQSFlTX1BGTihsZW5fKSwJCQkJXAogCQkudm1hX2ZsYWdzID0gdm1hX2ZsYWdzXywJCQkJXAogCQkuZmlsZSA9IGZpbGVfLAkJCQkJCVwKQEAgLTY3LDYgJiM0Mzs3Nyw3IEBAIHN0cnVjdCBtbWFwX3N0YXRlIHsKIAkJLmVuZCA9IChtYXBfKS0mZ3Q7ZW5kLAkJCQkJXAogCQkudm1hX2ZsYWdzID0gKG1hcF8pLSZndDt2bWFfZmxhZ3MsCQkJCVwKIAkJLnBnb2ZmID0gKG1hcF8pLSZndDtwZ29mZiwJCQkJCVwKJiM0MzsJCS5hbm9uX3Bnb2ZmID0gbWFwX2Fub25fcGdvZmYobWFwXyksCQkJXAogCQkuZmlsZSA9IChtYXBfKS0mZ3Q7ZmlsZSwJCQkJCVwKIAkJLnByZXYgPSAobWFwXyktJmd0O3ByZXYsCQkJCQlcCiAJCS5taWRkbGUgPSB2bWFfLAkJCQkJCVwKQEAgLTgyLDEwICYjNDM7OTMsMTEgQEAgc3RhdGljIHZvaWQgX192bWFfc2V0X3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogfQogCiBzdGF0aWMgdm9pZCB2bWFfc2V0X3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJICB1bnNpZ25lZCBsb25nIGVuZCwgcGdvZmZfdCBwZ29mZikKJiM0MzsJCQkgIHVuc2lnbmVkIGxvbmcgZW5kLCBwZ29mZl90IHBnb2ZmLCBwZ29mZl90IHZpcnRfcGdvZmYpCiB7CiAJX192bWFfc2V0X3JhbmdlKHZtYSwgc3RhcnQsIGVuZCk7CiAJdm1hX3NldF9wZ29mZih2bWEsIHBnb2ZmKTsKJiM0MzsJdm1hX3NldF92aXJ0X3Bnb2ZmKHZtYSwgdmlydF9wZ29mZik7CiB9CiAKIC8qIFdhcyB0aGlzIFZNQSBldmVyIGZvcmtlZCBmcm9tIGEgcGFyZW50LCBpLmUuIG1heWJlIGNvbnRhaW5zIENvVyBtYXBwaW5ncz8gKi8KQEAgLTIyMSw2ICYjNDM7MjMzLDggQEAgc3RhdGljIGJvb2wgY2FuX3ZtYV9tZXJnZV9iZWZvcmUoc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZykKIAkJcmV0dXJuIGZhbHNlOwogCWlmICh2bWdfZW5kX3Bnb2ZmKHZtZykgIT0gdm1hX3N0YXJ0X3Bnb2ZmKHZtZy0mZ3Q7bmV4dCkpCiAJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKHZtZ19lbmRfYW5vbl9wZ29mZih2bWcpICE9IHZtYV9zdGFydF9hbm9uX3Bnb2ZmKHZtZy0mZ3Q7bmV4dCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI0MSw2ICYjNDM7MjU1LDggQEAgc3RhdGljIGJvb2wgY2FuX3ZtYV9tZXJnZV9hZnRlcihzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nKQogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKHZtYV9lbmRfcGdvZmYodm1nLSZndDtwcmV2KSAhPSB2bWdfc3RhcnRfcGdvZmYodm1nKSkKIAkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAodm1hX2VuZF9hbm9uX3Bnb2ZmKHZtZy0mZ3Q7cHJldikgIT0gdm1nX3N0YXJ0X2Fub25fcGdvZmYodm1nKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODEyLDcgJiM0Mzs4MjgsOCBAQCBzdGF0aWMgaW50IGNvbW1pdF9tZXJnZShzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nKQogCSAqLwogCXZtYV9hZGp1c3RfdHJhbnNfaHVnZSh2bWEsIHZtZy0mZ3Q7c3RhcnQsIHZtZy0mZ3Q7ZW5kLAogCQkJICAgICAgdm1nLSZndDtfX2FkanVzdF9taWRkbGVfc3RhcnQgPyB2bWctJmd0O21pZGRsZSA6IE5VTEwpOwotCXZtYV9zZXRfcmFuZ2Uodm1hLCB2bWctJmd0O3N0YXJ0LCB2bWctJmd0O2VuZCwgdm1nX3N0YXJ0X3Bnb2ZmKHZtZykpOwomIzQzOwl2bWFfc2V0X3JhbmdlKHZtYSwgdm1nLSZndDtzdGFydCwgdm1nLSZndDtlbmQsIHZtZ19zdGFydF9wZ29mZih2bWcpLAomIzQzOwkJICAgICAgdm1nX3N0YXJ0X2Fub25fcGdvZmYodm1nKSk7CiAJdm1nX2FkanVzdF9zZXRfcmFuZ2Uodm1nKTsKIAl2bWFfaXRlcl9zdG9yZV9vdmVyd3JpdGUodm1nLSZndDt2bWksIHZtZy0mZ3Q7dGFyZ2V0KTsKIApAQCAtOTgyLDYgJiM0Mzs5OTksNyBAQCBzdGF0aWMgX19tdXN0X2NoZWNrIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21lcmdlX2V4aXN0aW5nX3JhbmdlKAogCQl2bWctJmd0O3N0YXJ0ID0gcHJldi0mZ3Q7dm1fc3RhcnQ7CiAJCXZtZy0mZ3Q7ZW5kID0gbmV4dC0mZ3Q7dm1fZW5kOwogCQl2bWctJmd0O3Bnb2ZmID0gdm1hX3N0YXJ0X3Bnb2ZmKHByZXYpOwomIzQzOwkJdm1nLSZndDthbm9uX3Bnb2ZmID0gdm1hX3N0YXJ0X2Fub25fcGdvZmYocHJldik7CiAKIAkJLyoKIAkJICogV2UgYWxyZWFkeSBlbnN1cmVkIGFub25fdm1hIGNvbXBhdGliaWxpdHkgYWJvdmUsIHNvIG5vdyBpdCYjMzk7cwpAQCAtMTAwMCw2ICYjNDM7MTAxOCw3IEBAIHN0YXRpYyBfX211c3RfY2hlY2sgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2UoCiAJCSAqLwogCQl2bWctJmd0O3N0YXJ0ID0gcHJldi0mZ3Q7dm1fc3RhcnQ7CiAJCXZtZy0mZ3Q7cGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYocHJldik7CiYjNDM7CQl2bWctJmd0O2Fub25fcGdvZmYgPSB2bWFfc3RhcnRfYW5vbl9wZ29mZihwcmV2KTsKIAogCQlpZiAoIXZtZy0mZ3Q7X19yZW1vdmVfbWlkZGxlKQogCQkJdm1nLSZndDtfX2FkanVzdF9taWRkbGVfc3RhcnQgPSB0cnVlOwpAQCAtMTAyMiwxMiAmIzQzOzEwNDEsMTQgQEAgc3RhdGljIF9fbXVzdF9jaGVjayBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZV9leGlzdGluZ19yYW5nZSgKIAkJaWYgKHZtZy0mZ3Q7X19yZW1vdmVfbWlkZGxlKSB7CiAJCQl2bWctJmd0O2VuZCA9IG5leHQtJmd0O3ZtX2VuZDsKIAkJCXZtZy0mZ3Q7cGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYobmV4dCkgLSBwZ2xlbjsKJiM0MzsJCQl2bWctJmd0O2Fub25fcGdvZmYgPSB2bWFfc3RhcnRfYW5vbl9wZ29mZihuZXh0KSAtIHBnbGVuOwogCQl9IGVsc2UgewogCQkJLyogV2Ugc2hyaW5rIG1pZGRsZSBhbmQgZXhwYW5kIG5leHQuICovCiAJCQl2bWctJmd0O19fYWRqdXN0X25leHRfc3RhcnQgPSB0cnVlOwogCQkJdm1nLSZndDtzdGFydCA9IG1pZGRsZS0mZ3Q7dm1fc3RhcnQ7CiAJCQl2bWctJmd0O2VuZCA9IHN0YXJ0OwogCQkJdm1nLSZndDtwZ29mZiA9IHZtYV9zdGFydF9wZ29mZihtaWRkbGUpOwomIzQzOwkJCXZtZy0mZ3Q7YW5vbl9wZ29mZiA9IHZtYV9zdGFydF9hbm9uX3Bnb2ZmKG1pZGRsZSk7CiAJCX0KIAogCQllcnIgPSBkdXBfYW5vbl92bWEobmV4dCwgbWlkZGxlLCAmYW1wO2Fub25fZHVwKTsKQEAgLTExMzcsNiAmIzQzOzExNTgsNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZV9uZXdfcmFuZ2Uoc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZykKIAkJdm1nLSZndDtzdGFydCA9IHByZXYtJmd0O3ZtX3N0YXJ0OwogCQl2bWctJmd0O3RhcmdldCA9IHByZXY7CiAJCXZtZy0mZ3Q7cGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYocHJldik7CiYjNDM7CQl2bWctJmd0O2Fub25fcGdvZmYgPSB2bWFfc3RhcnRfYW5vbl9wZ29mZihwcmV2KTsKIAogCQkvKgogCQkgKiBJZiB0aGlzIG1lcmdlIHdvdWxkIHJlc3VsdCBpbiByZW1vdmFsIG9mIHRoZSBuZXh0IFZNQSBidXQgd2UKQEAgLTE5MDgsOSAmIzQzOzE5MzAsMTAgQEAgc3RhdGljIGludCB2bWFfbGluayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAgKi8KIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqY29weV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCwKIAl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCBwZ29mZl90IHBnb2ZmLAotCWJvb2wgKm5lZWRfcm1hcF9sb2NrcykKJiM0MzsJcGdvZmZfdCB2aXJ0X3Bnb2ZmLCBib29sICpuZWVkX3JtYXBfbG9ja3MpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSAqdm1hcDsKJiM0MzsJY29uc3QgYm9vbCBpc19zaGFyZWQgPSB2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKTsKIAl1bnNpZ25lZCBsb25nIHZtYV9zdGFydCA9IHZtYS0mZ3Q7dm1fc3RhcnQ7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtJmd0O3ZtX21tOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV3X3ZtYTsKQEAgLTE5MTksMTEgJiM0MzsxOTQyLDE0IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqY29weV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCwKIAlWTUdfVk1BX1NUQVRFKHZtZywgJmFtcDt2bWksIE5VTEwsIHZtYSwgYWRkciwgYWRkciAmIzQzOyBsZW4pOwogCiAJLyoKLQkgKiBJZiBhbm9ueW1vdXMgdm1hIGhhcyBub3QgeWV0IGJlZW4gZmF1bHRlZCwgdXBkYXRlIG5ldyBwZ29mZgotCSAqIHRvIG1hdGNoIG5ldyBsb2NhdGlvbiwgdG8gaW5jcmVhc2UgaXRzIGNoYW5jZSBvZiBtZXJnaW5nLgomIzQzOwkgKiBJZiBhIHZtYSBoYXMgbm90IHlldCBiZWVuIGZhdWx0ZWQsIHVwZGF0ZSBpdHMgdmlydHVhbCBwZ29mZiB0byBtYXRjaAomIzQzOwkgKiB0aGUgbmV3IGxvY2F0aW9uIHRvIGluY3JlYXNlIGl0cyBjaGFuY2Ugb2YgbWVyZ2luZy4KIAkgKi8KLQlpZiAodW5saWtlbHkodm1hX2lzX2Fub255bW91cyh2bWEpICZhbXA7JmFtcDsgIXZtYS0mZ3Q7YW5vbl92bWEpKSB7Ci0JCXBnb2ZmID0gYWRkciAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwlpZiAoIXZtYS0mZ3Q7YW5vbl92bWEgJmFtcDsmYW1wOyAhaXNfc2hhcmVkKSB7CiYjNDM7CQl2aXJ0X3Bnb2ZmID0gYWRkciAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwomIzQzOwkJaWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSkKJiM0MzsJCQlwZ29mZiA9IHZpcnRfcGdvZmY7CiAJCWZhdWx0ZWRfaW5fYW5vbl92bWEgPSBmYWxzZTsKIAl9CiAKQEAgLTE5NDAsNiAmIzQzOzE5NjYsNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmNvcHlfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsCiAJCXJldHVybiBOVUxMOwkvKiBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KIAogCXZtZy5wZ29mZiA9IHBnb2ZmOwomIzQzOwl2bWcuYW5vbl9wZ29mZiA9IGlzX3NoYXJlZCA/IHBnb2ZmIDogdmlydF9wZ29mZjsKIAl2bWcubmV4dCA9IHZtYV9pdGVyX25leHRfcmV3aW5kKCZhbXA7dm1pLCBOVUxMKTsKIAluZXdfdm1hID0gdm1hX21lcmdlX2NvcGllZF9yYW5nZSgmYW1wO3ZtZyk7CiAKQEAgLTE5NjEsMTYgJiM0MzsxOTg4LDE3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqY29weV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCwKIAkJCSAqIHNhZmUuIEl0IGlzIG9ubHkgc2FmZSB0byBrZWVwIHRoZSB2bV9wZ29mZgogCQkJICogbGluZWFyIGlmIHRoZXJlIGFyZSBubyBwYWdlcyBtYXBwZWQgeWV0LgogCQkJICovCi0JCQlWTV9CVUdfT05fVk1BKGZhdWx0ZWRfaW5fYW5vbl92bWEsIG5ld192bWEpOwomIzQzOwkJCVZNX1dBUk5fT05fT05DRV9WTUEoZmF1bHRlZF9pbl9hbm9uX3ZtYSwgbmV3X3ZtYSk7CiAJCQkqdm1hcCA9IHZtYSA9IG5ld192bWE7CiAJCX0KIAkJKm5lZWRfcm1hcF9sb2NrcyA9Ci0JCQkodm1hX3N0YXJ0X3Bnb2ZmKG5ld192bWEpICZsdDs9IHZtYV9zdGFydF9wZ29mZih2bWEpKTsKJiM0MzsJCQkodm1hX3N0YXJ0X3Bnb2ZmKG5ld192bWEpICZsdDs9IHZtYV9zdGFydF9wZ29mZih2bWEpKSB8fAomIzQzOwkJCSh2bWFfc3RhcnRfYW5vbl9wZ29mZihuZXdfdm1hKSAmbHQ7PSB2bWFfc3RhcnRfYW5vbl9wZ29mZih2bWEpKTsKIAl9IGVsc2UgewogCQluZXdfdm1hID0gdm1fYXJlYV9kdXAodm1hKTsKIAkJaWYgKCFuZXdfdm1hKQogCQkJZ290byBvdXQ7Ci0JCXZtYV9zZXRfcmFuZ2UobmV3X3ZtYSwgYWRkciwgYWRkciAmIzQzOyBsZW4sIHBnb2ZmKTsKJiM0MzsJCXZtYV9zZXRfcmFuZ2UobmV3X3ZtYSwgYWRkciwgYWRkciAmIzQzOyBsZW4sIHBnb2ZmLCB2aXJ0X3Bnb2ZmKTsKIAkJaWYgKHZtYV9kdXBfcG9saWN5KHZtYSwgbmV3X3ZtYSkpCiAJCQlnb3RvIG91dF9mcmVlX3ZtYTsKIAkJaWYgKGFub25fdm1hX2Nsb25lKG5ld192bWEsIHZtYSwgVk1BX09QX1JFTUFQKSkKQEAgLTIwMzYsNyAmIzQzOzIwNjQsMTIgQEAgc3RhdGljIGludCBhbm9uX3ZtYV9jb21wYXRpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoKIAlpZiAoIXZtYV9mbGFnc19lbXB0eSgmYW1wO2RpZmYpKQogCQlyZXR1cm4gZmFsc2U7CiAJLyogUGFnZSBvZmZzZXQgbXVzdCBhbGlnbi4gKi8KLQlyZXR1cm4gdm1hX2VuZF9wZ29mZihhKSA9PSB2bWFfc3RhcnRfcGdvZmYoYik7CiYjNDM7CWlmICh2bWFfZW5kX3Bnb2ZmKGEpICE9IHZtYV9zdGFydF9wZ29mZihiKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJLyogQW5vbiBwYWdlIG9mZnNldCBtdXN0IGFsaWduLiAqLwomIzQzOwlpZiAodm1hX2VuZF9hbm9uX3Bnb2ZmKGEpICE9IHZtYV9zdGFydF9hbm9uX3Bnb2ZmKGIpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoKQEAgLTI1NzksNiAmIzQzOzI2MTIsMzIgQEAgc3RhdGljIGludCBfX21tYXBfbmV3X2ZpbGVfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBtYXBfaXNfZGV2X3plcm8oY29uc3Qgc3RydWN0IG1tYXBfc3RhdGUgKm1hcCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBmaWxlICpmaWxlID0gbWFwLSZndDtmaWxlOwomIzQzOwljb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGltYWpvcihpbm9kZSkgPT0gTUVNX01BSk9SICZhbXA7JmFtcDsgaW1pbm9yKGlub2RlKSA9PSBERVZaRVJPX01JTk9SOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtYXBfc2V0X2Fub24oc3RydWN0IG1tYXBfc3RhdGUgKm1hcCkKJiM0Mzt7CiYjNDM7CW1hcC0mZ3Q7ZmlsZSA9IE5VTEw7CiYjNDM7CW1hcC0mZ3Q7ZmlsZV9kb2VzbnRfbmVlZF9nZXQgPSBmYWxzZTsKJiM0MzsJbWFwLSZndDtwZ29mZiA9IG1hcC0mZ3Q7YWRkciAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwltYXAtJmd0O3ZtX29wcyA9IE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG1hcF9pc19wcml2YXRlKGNvbnN0IHN0cnVjdCBtbWFwX3N0YXRlICptYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gIXZtYV9mbGFnc190ZXN0KCZhbXA7bWFwLSZndDt2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbWFwX2lzX2Fub24oY29uc3Qgc3RydWN0IG1tYXBfc3RhdGUgKm1hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBtYXBfaXNfcHJpdmF0ZShtYXApICZhbXA7JmFtcDsgIW1hcC0mZ3Q7ZmlsZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogX19tbWFwX25ld192bWEoKSAtIEFsbG9jYXRlIGEgbmV3IFZNQSBmb3IgdGhlIHJlZ2lvbiwgYXMgbWVyZ2luZyB3YXMgbm90CiAgKiBwb3NzaWJsZS4KQEAgLTI1OTIsOCAmIzQzOzI2NTEsNyBAQCBzdGF0aWMgaW50IF9fbW1hcF9uZXdfZmlsZV92bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCwKIHN0YXRpYyBpbnQgX19tbWFwX25ld192bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCwKIAlzdHJ1Y3QgbW1hcF9hY3Rpb24gKmFjdGlvbikKIHsKLQljb25zdCBib29sIGlzX2Fub24gPSAhbWFwLSZndDtmaWxlICZhbXA7JmFtcDsKLQkJIXZtYV9mbGFnc190ZXN0KCZhbXA7bWFwLSZndDt2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKTsKJiM0MzsJY29uc3QgYm9vbCBpc19hbm9uID0gbWFwX2lzX2Fub24obWFwKTsKIAlzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkgPSBtYXAtJmd0O3ZtaTsKIAlpbnQgZXJyb3IgPSAwOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwpAQCAtMjYxMiw3ICYjNDM7MjY3MCw3IEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld192bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCwKIAlpZiAoaXNfYW5vbikKIAkJdm1hX3NldF9hbm9ueW1vdXModm1hKTsKIAotCXZtYV9zZXRfcmFuZ2Uodm1hLCBtYXAtJmd0O2FkZHIsIG1hcC0mZ3Q7ZW5kLCBtYXAtJmd0O3Bnb2ZmKTsKJiM0MzsJdm1hX3NldF9yYW5nZSh2bWEsIG1hcC0mZ3Q7YWRkciwgbWFwLSZndDtlbmQsIG1hcC0mZ3Q7cGdvZmYsIG1hcC0mZ3Q7dmlydF9wZ29mZik7CiAJdm1hLSZndDtmbGFncyA9IG1hcC0mZ3Q7dm1hX2ZsYWdzOwogCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gbWFwLSZndDtwYWdlX3Byb3Q7CiAKQEAgLTI3MzUsNiAmIzQzOzI3OTMsMTAgQEAgc3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKJiM0MzsJLyogSG9va3MgY2Fubm90IG1hcmsgdGhlbXNlbHZlcyBhbm9ueW1vdXMuICovCiYjNDM7CWlmICghZGVzYy0mZ3Q7dm1fb3BzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJZXJyID0gY2FsbF9hY3Rpb25fcHJlcGFyZShtYXAsIGRlc2MpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0yNzUxLDE2ICYjNDM7MjgxMywyMSBAQCBzdGF0aWMgaW50IGNhbGxfbW1hcF9wcmVwYXJlKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsCiAJbWFwLSZndDt2bV9vcHMgPSBkZXNjLSZndDt2bV9vcHM7CiAJbWFwLSZndDt2bV9wcml2YXRlX2RhdGEgPSBkZXNjLSZndDtwcml2YXRlX2RhdGE7CiAKJiM0MzsJLyoKJiM0MzsJICogTUFQX1BSSVZBVEUtL2Rldi96ZXJvIG1hcHBpbmdzIGFyZSBhbiBhbmNpZW50IHdheSBvZiBnZXR0aW5nCiYjNDM7CSAqIGFub255bW91cyBtYXBwaW5ncy4gUmF0aGVyIHRoYW4gYWxsb3dpbmcgdGhlc2UgbWFwcGluZ3MgdG8gYmUgb2RkCiYjNDM7CSAqIG91dGxpZXJzLCBzaW1wbHkgbWFrZSB0aGVtIHRydWx5IGFub255bW91cy4KJiM0MzsJICovCiYjNDM7CWlmIChtYXBfaXNfcHJpdmF0ZShtYXApICZhbXA7JmFtcDsgbWFwX2lzX2Rldl96ZXJvKG1hcCkpCiYjNDM7CQltYXBfc2V0X2Fub24obWFwKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2V0X3ZtYV91c2VyX2RlZmluZWRfZmllbGRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQlzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKQogewotCWlmIChtYXAtJmd0O3ZtX29wcykKLQkJdm1hLSZndDt2bV9vcHMgPSBtYXAtJmd0O3ZtX29wczsKLQllbHNlCS8qIE9ubHkgL2Rldi96ZXJvIHNob3VsZCBkbyB0aGlzLiAqLwotCQl2bWFfc2V0X2Fub255bW91cyh2bWEpOwomIzQzOwl2bWEtJmd0O3ZtX29wcyA9IG1hcC0mZ3Q7dm1fb3BzOwogCXZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhID0gbWFwLSZndDt2bV9wcml2YXRlX2RhdGE7CiB9CiAKQEAgLTI4MDEsNyAmIzQzOzI4NjgsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX21tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBOVUxMOwogCWJvb2wgaGF2ZV9tbWFwX3ByZXBhcmUgPSBmaWxlICZhbXA7JmFtcDsgZmlsZS0mZ3Q7Zl9vcC0mZ3Q7bW1hcF9wcmVwYXJlOwogCVZNQV9JVEVSQVRPUih2bWksIG1tLCBhZGRyKTsKLQlNTUFQX1NUQVRFKG1hcCwgbW0sICZhbXA7dm1pLCBhZGRyLCBsZW4sIHBnb2ZmLCB2bWFfZmxhZ3MsIGZpbGUpOwomIzQzOwljb25zdCBwZ29mZl90IHZpcnRfcGdvZmYgPSBhZGRyICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CU1NQVBfU1RBVEUobWFwLCBtbSwgJmFtcDt2bWksIGFkZHIsIGxlbiwgcGdvZmYsIHZpcnRfcGdvZmYsIHZtYV9mbGFncywgZmlsZSk7CiAJc3RydWN0IHZtX2FyZWFfZGVzYyBkZXNjID0gewogCQkubW0gPSBtbSwKIAkJLmZpbGUgPSBmaWxlLApAQCAtMjk0Niw2ICYjNDM7MzAxNCw3IEBAIGludCBkb19icmtfZmxhZ3Moc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHZtYV9mbGFnc190IHZtYV9mbGFncykKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtJmd0O21tOwomIzQzOwljb25zdCBwZ29mZl90IHBnb2ZmID0gYWRkciAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCiAJLyoKIAkgKiBDaGVjayBhZ2FpbnN0IGFkZHJlc3Mgc3BhY2UgbGltaXRzIGJ5IHRoZSBjaGFuZ2VkIHNpemUKQEAgLTI5NzAsNyAmIzQzOzMwMzksNyBAQCBpbnQgZG9fYnJrX2ZsYWdzKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJICogb2NjdXIgYWZ0ZXIgZm9ya2luZywgc28gdGhlIGV4cGFuZCB3aWxsIG9ubHkgaGFwcGVuIG9uIG5ldyBWTUFzLgogCSAqLwogCWlmICh2bWEgJmFtcDsmYW1wOyB2bWEtJmd0O3ZtX2VuZCA9PSBhZGRyKSB7Ci0JCVZNR19TVEFURSh2bWcsIG1tLCB2bWksIGFkZHIsIGFkZHIgJiM0MzsgbGVuLCB2bWFfZmxhZ3MsIFBIWVNfUEZOKGFkZHIpKTsKJiM0MzsJCVZNR19TVEFURSh2bWcsIG1tLCB2bWksIGFkZHIsIGFkZHIgJiM0MzsgbGVuLCB2bWFfZmxhZ3MsIHBnb2ZmLCBwZ29mZik7CiAKIAkJdm1nLnByZXYgPSB2bWE7CiAJCS8qIHZtaSBpcyBwb3NpdGlvbmVkIGF0IHByZXYsIHdoaWNoIHRoaXMgbW9kZSBleHBlY3RzLiAqLwpAQCAtMjk5MCw3ICYjNDM7MzA1OSw3IEBAIGludCBkb19icmtfZmxhZ3Moc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJZ290byB1bmFjY3RfZmFpbDsKIAogCXZtYV9zZXRfYW5vbnltb3VzKHZtYSk7Ci0Jdm1hX3NldF9yYW5nZSh2bWEsIGFkZHIsIGFkZHIgJiM0MzsgbGVuLCBhZGRyICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwl2bWFfc2V0X3JhbmdlKHZtYSwgYWRkciwgYWRkciAmIzQzOyBsZW4sIHBnb2ZmLCBwZ29mZik7CiAJdm1hLSZndDtmbGFncyA9IHZtYV9mbGFnczsKIAl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpKTsKIAl2bWFfc3RhcnRfd3JpdGUodm1hKTsKQEAgLTMzODIsNiAmIzQzOzM0NTEsNyBAQCBpbnQgaW5zZXJ0X3ZtX3N0cnVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJCVdBUk5fT05fT05DRSh2bWEtJmd0O2Fub25fdm1hKTsKIAkJdm1hX3NldF9wZ29mZih2bWEsIHZtYS0mZ3Q7dm1fc3RhcnQgJmd0OyZndDsgUEFHRV9TSElGVCk7CiAJfQomIzQzOwl2bWFfc2V0X3ZpcnRfcGdvZmYodm1hLCB2bWEtJmd0O3ZtX3N0YXJ0ICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwogCiAJaWYgKHZtYV9saW5rKG1tLCB2bWEpKSB7CiAJCWlmICh2bWFfdGVzdCh2bWEsIFZNQV9BQ0NPVU5UX0JJVCkpCkBAIC0zNDM3LDcgJiM0MzszNTA3LDcgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpfX2luc3RhbGxfc3BlY2lhbF9tYXBwaW5nKAogCiAJdm1hLSZndDt2bV9vcHMgPSBvcHM7CiAJdm1hLSZndDt2bV9wcml2YXRlX2RhdGEgPSBwcml2OwotCXZtYV9zZXRfcmFuZ2Uodm1hLCBhZGRyLCBhZGRyICYjNDM7IGxlbiwgMCk7CiYjNDM7CXZtYV9zZXRfcmFuZ2Uodm1hLCBhZGRyLCBhZGRyICYjNDM7IGxlbiwgMCwgYWRkciAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKIAogCXJldCA9IGluc2VydF92bV9zdHJ1Y3QobW0sIHZtYSk7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL21tL3ZtYS5oIGIvbW0vdm1hLmgKaW5kZXggMGJjN2Q1MjFlOTc2NzcuLjhjYWVlM2I0YmEyNjcxIDEwMDY0NAotLS0gYS9tbS92bWEuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWEuaApAQCAtMTA0LDYgJiM0MzsxMDQsNyBAQCBzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCB7CiAJdW5zaWduZWQgbG9uZyBzdGFydDsKIAl1bnNpZ25lZCBsb25nIGVuZDsKIAlwZ29mZl90IHBnb2ZmOwomIzQzOwlwZ29mZl90IGFub25fcGdvZmY7CiAKIAl1bmlvbiB7CiAJCS8qIFRlbXBvcmFyeSB3aGlsZSBWTUEgZmxhZ3MgYXJlIGJlaW5nIGNvbnZlcnRlZC4gKi8KQEAgLTIzNywxMSAmIzQzOzIzOCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWdfbm9tZW0oc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZykKIAlyZXR1cm4gdm1nLSZndDtzdGF0ZSA9PSBWTUFfTUVSR0VfRVJST1JfTk9NRU07CiB9CiAKLXN0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWdfc3RhcnRfcGdvZmYoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZykKLXsKLQlyZXR1cm4gdm1nLSZndDtwZ29mZjsKLX0KLQogc3RhdGljIGlubGluZSBwZ29mZl90IHZtZ19wYWdlcyhjb25zdCBzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nKQogewogCWNvbnN0IHVuc2lnbmVkIGxvbmcgc2l6ZSA9IHZtZy0mZ3Q7ZW5kIC0gdm1nLSZndDtzdGFydDsKQEAgLTI0OSw2ICYjNDM7MjQ1LDExIEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWdfcGFnZXMoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZykKIAlyZXR1cm4gc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBwZ29mZl90IHZtZ19zdGFydF9wZ29mZihjb25zdCBzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nKQomIzQzO3sKJiM0MzsJcmV0dXJuIHZtZy0mZ3Q7cGdvZmY7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBwZ29mZl90IHZtZ19lbmRfcGdvZmYoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZykKIHsKIAlyZXR1cm4gdm1nX3N0YXJ0X3Bnb2ZmKHZtZykgJiM0Mzsgdm1nX3BhZ2VzKHZtZyk7CkBAIC0yNjYsOSAmIzQzOzI2Nyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfc2FuZV9wZ29mZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBwZ29mZikKIAkgKi8KIAlpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSkKIAkJcmV0dXJuOwotCS8qIE1BUF9QUklWQVRFLS9kZXYvemVybyBpcyBhbm9uLCBub24tTlVMTCB2bV9maWxlLCBidXQgaGFzIGZpbGUgcGdvZmYuICovCi0JaWYgKHZtYS0mZ3Q7dm1fZmlsZSkKLQkJcmV0dXJuOwogCS8qIElmIGZhdWx0ZWQgaW4sIGNvdWxkIGhhdmUgYmVlbiByZW1hcHBlZC4gKi8KIAlpZiAodm1hLSZndDthbm9uX3ZtYSkKIAkJcmV0dXJuOwpAQCAtMjgzLDQ4ICYjNDM7MjgxLDEzMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX3NldF9wZ29mZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBwZ29mZikKIAl2bWEtJmd0O3ZtX3Bnb2ZmID0gcGdvZmY7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1nX3N0YXJ0X2Fub25fcGdvZmYoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZykKJiM0Mzt7CiYjNDM7CXJldHVybiB2bWctJmd0O2Fub25fcGdvZmY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWdfZW5kX2Fub25fcGdvZmYoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZykKJiM0Mzt7CiYjNDM7CXJldHVybiB2bWdfc3RhcnRfYW5vbl9wZ29mZih2bWcpICYjNDM7IHZtZ19wYWdlcyh2bWcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX192bWFfc2V0X3ZpcnRfcGdvZmYoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgcGdvZmYpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfNjRCSVQKJiM0MzsJdm1hLSZndDtfX3ZtX3ZpcnRfcGdvZmZfaGkgPSBwZ29mZiAmZ3Q7Jmd0OyAzMjsKJiM0MzsjZW5kaWYKJiM0MzsJdm1hLSZndDtfX3ZtX3ZpcnRfcGdvZmZfbG8gPSBwZ29mZiAmYW1wOyBHRU5NQVNLKDMxLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZtYV9zZXRfdmlydF9wZ29mZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBwZ29mZikKJiM0Mzt7CiYjNDM7CXZtYV9hc3NlcnRfY2FuX21vZGlmeSh2bWEpOwomIzQzOwlfX3ZtYV9zZXRfdmlydF9wZ29mZih2bWEsIHBnb2ZmKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX2FkZF9wZ29mZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBkZWx0YSkKIHsKIAl2bWFfYXNzZXJ0X2Nhbl9tb2RpZnkodm1hKTsKIAl2bWFfc2V0X3Bnb2ZmKHZtYSwgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSkgJiM0MzsgZGVsdGEpOwomIzQzOwl2bWFfc2V0X3ZpcnRfcGdvZmYodm1hLCB2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpICYjNDM7IGRlbHRhKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHZtYV9zdWJfcGdvZmYoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgZGVsdGEpCiB7CiAJdm1hX2Fzc2VydF9jYW5fbW9kaWZ5KHZtYSk7CiAJdm1hX3NldF9wZ29mZih2bWEsIHZtYV9zdGFydF9wZ29mZih2bWEpIC0gZGVsdGEpOwomIzQzOwl2bWFfc2V0X3ZpcnRfcGdvZmYodm1hLCB2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpIC0gZGVsdGEpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB2bWFfYW5vbl9wZ29mZl9hZGRyKCkgLSBDYWxjdWxhdGVzIHRoZSBhYnNvbHV0ZSBhbm9ueW1vdXMgcGFnZSBvZmZzZXQgb2YKJiM0MzsgKiBAYWRkcmVzcy4KJiM0MzsgKiBAdm1hOiBUaGUgVk1BIHdob3NlIGFub255bW91cyBwYWdlIG9mZnNldCBpcyByZXF1aXJlZC4KJiM0MzsgKiBAYWRkcmVzczogVGhlIGFkZHJlc3Mgd2hvc2UgYWJzb2x1dGUgcGFnZSBvZmZzZXQgaXMgcmVxdWlyZWQuCiYjNDM7ICoKJiM0MzsgKiBJZiB0aGUgVk1BIGlzIGEgc2hhcmVkIGZpbGUtYmFja2VkIG1hcHBpbmcsIHRoZW4gdGhlIGZpbGUtYmFzZWQgcGFnZSBvZmZzZXQKJiM0MzsgKiBpcyByZXR1cm5lZC4KJiM0MzsgKgomIzQzOyAqIE90aGVyd2lzZSwgdGhlIHZpcnR1YWwgcGFnZSBvZmZzZXQgaXMgcmV0dXJuZWQuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIG1lYW5zIHRoYXQgc2hhcmVkIGZpbGUtYmFja2VkIG1hcHBpbmdzIGFyZSBjb3JyZWN0bHkgbWVyZ2VkIGJhc2VkIG9uCiYjNDM7ICogdGhlaXIgZmlsZSBwYWdlIG9mZnNldCBjb21wYXRpYmlsaXR5LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogVGhlIGFic29sdXRlIGFub255bW91cyBwYWdlIG9mZnNldCBvZiBAYWRkcmVzcyB3aXRoaW4gQHZtYS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1hX2Fub25fcGdvZmZfYWRkcihjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQomIzQzO3sKJiM0MzsJaWYgKHZtYV90ZXN0KHZtYSwgVk1BX1NIQVJFRF9CSVQpKQomIzQzOwkJcmV0dXJuIGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyk7CiYjNDM7CiYjNDM7CXJldHVybiBsaW5lYXJfdmlydF9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyk7CiB9CiAKLSNkZWZpbmUgVk1HX1NUQVRFKG5hbWUsIG1tXywgdm1pXywgc3RhcnRfLCBlbmRfLCB2bWFfZmxhZ3NfLCBwZ29mZl8pCVwKJiM0MzsvKioKJiM0MzsgKiB2bWFfc3RhcnRfYW5vbl9wZ29mZigpIC0gQ2FsY3VsYXRlcyB0aGUgYWJzb2x1dGUgYW5vbnltb3VzIHBhZ2Ugb2Zmc2V0IHVzZWQKJiM0MzsgKiBmb3IgcHVycG9zZXMgb2YgbWVyZ2UgY29tcGF0aWJpbGl0eS4KJiM0MzsgKiBAdm1hOiBUaGUgVk1BIHdob3NlIGFub255bW91cyBwYWdlIG9mZnNldCBpcyByZXF1aXJlZC4KJiM0MzsgKgomIzQzOyAqIFNlZSB2bWFfYW5vbl9wZ29mZl9hZGRyKCkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiBUaGUgYWJzb2x1dGUgYW5vbnltb3VzIHBhZ2Ugb2Zmc2V0IG9mIEB2bWEgZm9yIHB1cnBvc2VzIG9mIG1lcmdpbmcuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9zdGFydF9hbm9uX3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQomIzQzO3sKJiM0MzsJcmV0dXJuIHZtYV9hbm9uX3Bnb2ZmX2FkZHIodm1hLCB2bWEtJmd0O3ZtX3N0YXJ0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogdm1hX2VuZF9hbm9uX3Bnb2ZmKCkgLSBDYWxjdWxhdGVzIHRoZSBhYnNvbHV0ZSBleGNsdXNpdmUgZW5kIGFub255bW91cyBwYWdlCiYjNDM7ICogb2Zmc2V0IHVzZWQgZm9yIHB1cnBvc2VzIG9mIG1lcmdlIGNvbXBhdGliaWxpdHkuCiYjNDM7ICogQHZtYTogVGhlIFZNQSB3aG9zc2UgYW5vbnltb3VzIGVuZCBwYWdlIG9mZnNldCBpcyByZXF1aXJlZC4KJiM0MzsgKgomIzQzOyAqIFNlZSB2bWFfc3RhcnRfYW5vbl9wZ29mZigpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogVGhlIGFic29sdXRlIGV4Y2x1c2l2ZSBlbmQgYW5vbnltb3VzIHBhZ2Ugb2Zmc2V0IG9mIEB2bWEgZm9yCiYjNDM7ICogcHVycG9zZXMgb2YgbWVyZ2luZy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1hX2VuZF9hbm9uX3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQomIzQzO3sKJiM0MzsJcmV0dXJuIHZtYV9zdGFydF9hbm9uX3Bnb2ZmKHZtYSkgJiM0Mzsgdm1hX3BhZ2VzKHZtYSk7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgVk1HX1NUQVRFKG5hbWUsIG1tXywgdm1pXywgc3RhcnRfLCBlbmRfLCB2bWFfZmxhZ3NfLCBwZ29mZl8sIGFub25fcGdvZmZfKSBcCiYjNDM7CXN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0IG5hbWUgPSB7CQkJCQkgIFwKJiM0MzsJCS5tbSA9IG1tXywJCQkJCQkJICBcCiYjNDM7CQkudm1pID0gdm1pXywJCQkJCQkJICBcCiYjNDM7CQkuc3RhcnQgPSBzdGFydF8sCQkJCQkJICBcCiYjNDM7CQkuZW5kID0gZW5kXywJCQkJCQkJICBcCiYjNDM7CQkudm1hX2ZsYWdzID0gdm1hX2ZsYWdzXywJCQkJCSAgXAomIzQzOwkJLnBnb2ZmID0gcGdvZmZfLAkJCQkJCSAgXAomIzQzOwkJLmFub25fcGdvZmYgPSBhbm9uX3Bnb2ZmXywJCQkJCSAgXAomIzQzOwkJLnN0YXRlID0gVk1BX01FUkdFX1NUQVJULAkJCQkJICBcCiYjNDM7CX0KJiM0MzsKJiM0MzsjZGVmaW5lIFZNR19WTUFfU1RBVEUobmFtZSwgdm1pXywgcHJldl8sIHZtYV8sIHN0YXJ0XywgZW5kXykJCVwKIAlzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCBuYW1lID0gewkJCQlcCi0JCS5tbSA9IG1tXywJCQkJCQlcCiYjNDM7CQkubW0gPSB2bWFfLSZndDt2bV9tbSwJCQkJCVwKIAkJLnZtaSA9IHZtaV8sCQkJCQkJXAomIzQzOwkJLnByZXYgPSBwcmV2XywJCQkJCQlcCiYjNDM7CQkubWlkZGxlID0gdm1hXywJCQkJCQlcCiYjNDM7CQkubmV4dCA9IE5VTEwsCQkJCQkJXAogCQkuc3RhcnQgPSBzdGFydF8sCQkJCQlcCiAJCS5lbmQgPSBlbmRfLAkJCQkJCVwKLQkJLnZtYV9mbGFncyA9IHZtYV9mbGFnc18sCQkJCVwKLQkJLnBnb2ZmID0gcGdvZmZfLAkJCQkJXAomIzQzOwkJLnZtX2ZsYWdzID0gdm1hXy0mZ3Q7dm1fZmxhZ3MsCQkJCVwKJiM0MzsJCS5wZ29mZiA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYV8sIHN0YXJ0XyksCQlcCiYjNDM7CQkuYW5vbl9wZ29mZiA9IHZtYV9hbm9uX3Bnb2ZmX2FkZHIodm1hXywgc3RhcnRfKSwJXAomIzQzOwkJLmZpbGUgPSB2bWFfLSZndDt2bV9maWxlLAkJCQkJXAomIzQzOwkJLmFub25fdm1hID0gdm1hXy0mZ3Q7YW5vbl92bWEsCQkJCVwKJiM0MzsJCS5wb2xpY3kgPSB2bWFfcG9saWN5KHZtYV8pLAkJCQlcCiYjNDM7CQkudWZmZF9jdHggPSB2bWFfLSZndDt2bV91c2VyZmF1bHRmZF9jdHgsCQkJXAomIzQzOwkJLmFub25fbmFtZSA9IGFub25fdm1hX25hbWUodm1hXyksCQkJXAogCQkuc3RhdGUgPSBWTUFfTUVSR0VfU1RBUlQsCQkJCVwKIAl9CiAKLSNkZWZpbmUgVk1HX1ZNQV9TVEFURShuYW1lLCB2bWlfLCBwcmV2Xywgdm1hXywgc3RhcnRfLCBlbmRfKQlcCi0Jc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgbmFtZSA9IHsJCQlcCi0JCS5tbSA9IHZtYV8tJmd0O3ZtX21tLAkJCQlcCi0JCS52bWkgPSB2bWlfLAkJCQkJXAotCQkucHJldiA9IHByZXZfLAkJCQkJXAotCQkubWlkZGxlID0gdm1hXywJCQkJCVwKLQkJLm5leHQgPSBOVUxMLAkJCQkJXAotCQkuc3RhcnQgPSBzdGFydF8sCQkJCVwKLQkJLmVuZCA9IGVuZF8sCQkJCQlcCi0JCS52bV9mbGFncyA9IHZtYV8tJmd0O3ZtX2ZsYWdzLAkJCVwKLQkJLnBnb2ZmID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hXywgc3RhcnRfKSwJXAotCQkuZmlsZSA9IHZtYV8tJmd0O3ZtX2ZpbGUsCQkJCVwKLQkJLmFub25fdm1hID0gdm1hXy0mZ3Q7YW5vbl92bWEsCQkJXAotCQkucG9saWN5ID0gdm1hX3BvbGljeSh2bWFfKSwJCQlcCi0JCS51ZmZkX2N0eCA9IHZtYV8tJmd0O3ZtX3VzZXJmYXVsdGZkX2N0eCwJCVwKLQkJLmFub25fbmFtZSA9IGFub25fdm1hX25hbWUodm1hXyksCQlcCi0JCS5zdGF0ZSA9IFZNQV9NRVJHRV9TVEFSVCwJCQlcCi0JfQotCiAjaWZkZWYgQ09ORklHX0RFQlVHX1ZNX01BUExFX1RSRUUKIHZvaWQgdmFsaWRhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogI2Vsc2UKQEAgLTUwNiw3ICYjNDM7NTg2LDcgQEAgdm9pZCB1bmxpbmtfZmlsZV92bWFfYmF0Y2hfYWRkKHN0cnVjdCB1bmxpbmtfdm1hX2ZpbGVfYmF0Y2ggKnZiLAogCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmNvcHlfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsCiAJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgcGdvZmZfdCBwZ29mZiwKLQlib29sICpuZWVkX3JtYXBfbG9ja3MpOwomIzQzOwlwZ29mZl90IGFub25fcGdvZmYsIGJvb2wgKm5lZWRfcm1hcF9sb2Nrcyk7CiAKIHN0cnVjdCBhbm9uX3ZtYSAqZmluZF9tZXJnZWFibGVfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogCmRpZmYgLS1naXQgYS9tbS92bWFfZXhlYy5jIGIvbW0vdm1hX2V4ZWMuYwppbmRleCA3YWYxMjYwNjg5Yjk3ZS4uNTg2YzUyMTU1OTQyNDUgMTAwNjQ0Ci0tLSBhL21tL3ZtYV9leGVjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hX2V4ZWMuYwpAQCAtNDEsNyAmIzQzOzQxLDcgQEAgaW50IHJlbG9jYXRlX3ZtYV9kb3duKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHNoaWZ0KQogCXVuc2lnbmVkIGxvbmcgbmV3X2VuZCA9IG9sZF9lbmQgLSBzaGlmdDsKIAlWTUFfSVRFUkFUT1Iodm1pLCBtbSwgbmV3X3N0YXJ0KTsKIAlWTUdfU1RBVEUodm1nLCBtbSwgJmFtcDt2bWksIG5ld19zdGFydCwgb2xkX2VuZCwgRU1QVFlfVk1BX0ZMQUdTLAotCQkgIHZtYV9zdGFydF9wZ29mZih2bWEpKTsKJiM0MzsJCSAgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIHZtYV9zdGFydF9hbm9uX3Bnb2ZmKHZtYSkpOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV4dDsKIAlzdHJ1Y3QgbW11X2dhdGhlciB0bGI7CiAJUEFHRVRBQkxFX01PVkUocG1jLCB2bWEsIHZtYSwgb2xkX3N0YXJ0LCBuZXdfc3RhcnQsIGxlbmd0aCk7CmRpZmYgLS1naXQgYS9tbS92bWFfaW5pdC5jIGIvbW0vdm1hX2luaXQuYwppbmRleCA3MTVmZWVlMjgzZjBmYi4uNzEwYjE4ODQ5YTM2OTYgMTAwNjQ0Ci0tLSBhL21tL3ZtYV9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hX2luaXQuYwpAQCAtNTEsNiAmIzQzOzUxLDcgQEAgc3RhdGljIHZvaWQgdm1fYXJlYV9pbml0X2Zyb20oY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsCiAJZGVzdC0mZ3Q7dm1fZW5kID0gc3JjLSZndDt2bV9lbmQ7CiAJZGVzdC0mZ3Q7YW5vbl92bWEgPSBzcmMtJmd0O2Fub25fdm1hOwogCWRlc3QtJmd0O3ZtX3Bnb2ZmID0gdm1hX3N0YXJ0X3Bnb2ZmKHNyYyk7CiYjNDM7CV9fdm1hX3NldF92aXJ0X3Bnb2ZmKGRlc3QsIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHNyYykpOwogCWRlc3QtJmd0O3ZtX2ZpbGUgPSBzcmMtJmd0O3ZtX2ZpbGU7CiAJZGVzdC0mZ3Q7dm1fcHJpdmF0ZV9kYXRhID0gc3JjLSZndDt2bV9wcml2YXRlX2RhdGE7CiAJdm1fZmxhZ3NfaW5pdChkZXN0LCBzcmMtJmd0O3ZtX2ZsYWdzKTsKZGlmZiAtLWdpdCBhL21tL3ZtYV9pbnRlcm5hbC5oIGIvbW0vdm1hX2ludGVybmFsLmgKaW5kZXggNGQzMDBlN2JiYWY0YzIuLjM4NWMwYWIxMzc3NzQ4IDEwMDY0NAotLS0gYS9tbS92bWFfaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFfaW50ZXJuYWwuaApAQCAtMjMsNiAmIzQzOzIzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9rc20uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9raHVnZXBhZ2VkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tYWpvci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21hcGxlX3RyZWUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZW1wb2xpY3kuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tbS5oJmd0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmMKaW5kZXggNTE5ZTVhYzAyZGI3OGMuLmVkZmJkMzlhZTU4ZWI0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmMKQEAgLTEzMDUsNiAmIzQzOzEzMDUsMTY3IEBAIFRFU1RfRihtZXJnZSwgbWVyZ2Vfdm1hc193aXRoX21zZWFsKQogCUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgJiM0MzsgMiAqIHBhZ2Vfc2l6ZSk7CiB9CiAKJiM0MztURVNUX0YobWVyZ2UsIHZpcnRfYW5kX3BhZ2Vfb2Zmc2V0X21pc21hdGNoX21lbWZkKQomIzQzO3sKJiM0MzsJc3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSAmYW1wO3NlbGYtJmd0O3Byb2NtYXA7CiYjNDM7CXVuc2lnbmVkIGludCBwYWdlX3NpemUgPSBzZWxmLSZndDtwYWdlX3NpemU7CiYjNDM7CWNoYXIgKmNhcnZlb3V0ID0gc2VsZi0mZ3Q7Y2FydmVvdXQ7CiYjNDM7CWNoYXIgKnB0ciwgKnB0cjI7CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJLyogQ3JlYXRlIGEgMTAgcGFnZSBtZW1mZCBkZXNjcmlwdG9yLiAqLwomIzQzOwlmZCA9IG1lbWZkX2NyZWF0ZSgmIzM0O3ZpcnRfcGFnZV9vZmZzZXRfdGVzdCYjMzQ7LCBNRkRfQ0xPRVhFQyk7CiYjNDM7CUFTU0VSVF9ORShmZCwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZnRydW5jYXRlKGZkLCAxMCAqIHBhZ2Vfc2l6ZSksIDApOwomIzQzOwomIzQzOwkvKiBNYXAgYSByZWdpb24gdXNpbmcgdGhlIG1lbWZkIGF0IHBhZ2Ugb2Zmc2V0IDAuICovCiYjNDM7CXB0ciA9IG1tYXAoY2FydmVvdXQsIDUgKiBwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkgICBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmQsIDApOwomIzQzOwlBU1NFUlRfTkUocHRyLCBNQVBfRkFJTEVEKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFwIGFub3RoZXIgc2VwYXJhdGVseSwgYW5kIGZhdWx0IGluLCBhdCBwYWdlIG9mZnNldCA1OgomIzQzOwkgKgomIzQzOwkgKiB8LS0tLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfAomIzQzOwkgKiB8IHVuZmF1bHRlZCB8ICAgICAgICAgICB8IGZhdWx0ZWQgfAomIzQzOwkgKiB8LS0tLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfAomIzQzOwkgKi8KJiM0MzsJcHRyMiA9IG1tYXAoJmFtcDtjYXJ2ZW91dFsxMCAqIHBhZ2Vfc2l6ZV0sIDUgKiBwYWdlX3NpemUsCiYjNDM7CQkgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsCiYjNDM7CQkgICAgZmQsIDUgKiBwYWdlX3NpemUpOwomIzQzOwlBU1NFUlRfTkUocHRyMiwgTUFQX0ZBSUxFRCk7CiYjNDM7CXB0cjJbMF0gPSAmIzM5O3gmIzM5OzsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTm93IG1vdmUgaXQgaW4gcGxhY2U6CiYjNDM7CSAqCiYjNDM7CSAqICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tfAomIzQzOwkgKiAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwKJiM0MzsJICogICAgICAgICAgICAgICAgICAgdiAgICAgICAgICB8CiYjNDM7CSAqIHwtLS0tLS0tLS0tLXwgICAgICAgICAgIHwtLS0tLS0tLS18CiYjNDM7CSAqIHwgdW5mYXVsdGVkIHwgICAgICAgICAgIHwgZmF1bHRlZCB8CiYjNDM7CSAqIHwtLS0tLS0tLS0tLXwgICAgICAgICAgIHwtLS0tLS0tLS18CiYjNDM7CSAqCiYjNDM7CSAqIEJlY2F1c2UgdmlydHVhbCBwYWdlIG9mZnNldCBvZiB0aGUgZmF1bHRlZCByZWdpb24gaXMgbm93CiYjNDM7CSAqICZhbXA7Y2FydmVvdXRbMTAgKiBwYWdlX3NpemVdLCBkZXNwaXRlIHRoZSB0d28gcmVnaW9ucyBiZWluZyBtZXJnZWFibGUKJiM0MzsJICogZHVlIHRvIGZpbGUgcGFnZSBvZmZzZXQsIHRoZXkgYXJlIE5PVCBtZXJnZWFibGUgZHVlIHRvIHZpcnR1YWwgcGFnZQomIzQzOwkgKiBvZmZzZXQuCiYjNDM7CSAqLwomIzQzOwlwdHIyID0gc3lzX21yZW1hcChwdHIyLCA1ICogcGFnZV9zaXplLCA1ICogcGFnZV9zaXplLAomIzQzOwkJCSAgTVJFTUFQX01BWU1PVkUgfCBNUkVNQVBfRklYRUQsCiYjNDM7CQkJICAmYW1wO2NhcnZlb3V0WzUgKiBwYWdlX3NpemVdKTsKJiM0MzsJQVNTRVJUX05FKHB0cjIsIE1BUF9GQUlMRUQpOwomIzQzOwomIzQzOwkvKiBBc3NlcnQgdGhhdCB0aGV5IGRpZCBub3QgbWVyZ2UuICovCiYjNDM7CUFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgJiM0MzsgNSAqIHBhZ2Vfc2l6ZSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihtZXJnZSwgbWVyZ2VfbWFwX3ByaXZhdGVfZGV2X3plcm9fdW5mYXVsdGVkKQomIzQzO3sKJiM0MzsJc3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSAmYW1wO3NlbGYtJmd0O3Byb2NtYXA7CiYjNDM7CXVuc2lnbmVkIGludCBwYWdlX3NpemUgPSBzZWxmLSZndDtwYWdlX3NpemU7CiYjNDM7CWNoYXIgKmNhcnZlb3V0ID0gc2VsZi0mZ3Q7Y2FydmVvdXQ7CiYjNDM7CWNoYXIgKnB0ciwgKnB0cjI7CiYjNDM7CWludCBmZF96ZXJvOwomIzQzOwomIzQzOwlpZiAoYWNjZXNzKCYjMzQ7L2Rldi96ZXJvJiMzNDssIEZfT0spKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7Tm8gL2Rldi96ZXJvLiYjMzQ7KTsKJiM0MzsJZmRfemVybyA9IG9wZW4oJiMzNDsvZGV2L3plcm8mIzM0OywgT19SRFdSKTsKJiM0MzsJQVNTRVJUX05FKGZkX3plcm8sIC0xKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFwIHR3byBNQVBfUFJJVkFURS0vZGV2L3plcm8gVk1BcyBuZXh0IHRvIG9uZSBhbm90aGVyIHdpdGggb2Zmc2V0IDAKJiM0MzsJICogZWFjaC4KJiM0MzsJICoKJiM0MzsJICogV2l0aCB0aGVzZSBiZWluZyBtYWRlIHRydWx5IGFub255bW91cyB1cG9uIG1hcHBpbmcsIHRoZXkgd2lsbAomIzQzOwkgKiBtZXJnZS4gSWYgdGhleSB3ZXJlIGZpbGUtYmFja2VkIFZNQXMgdGhlIHBhZ2Ugb2Zmc2V0cyB3b3VsZCBwcmV2ZW50CiYjNDM7CSAqIG1lcmdlOgomIzQzOwkgKgomIzQzOwkgKiB8LS0tLS18fC0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS18CiYjNDM7CSAqIHwgcHRyIHx8IHB0cjIgfCAtJmd0OyB8ICAgICBwdHIgICAgIHwKJiM0MzsJICogfC0tLS0tfHwtLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tfAomIzQzOwkgKi8KJiM0MzsJcHRyID0gbW1hcChjYXJ2ZW91dCwgNSAqIHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJCSAgIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZF96ZXJvLCAwKTsKJiM0MzsJaWYgKHB0ciA9PSBNQVBfRkFJTEVEKSB7CiYjNDM7CQljbG9zZShmZF96ZXJvKTsKJiM0MzsJCUFTU0VSVF9UUlVFKGZhbHNlKTsKJiM0MzsJfQomIzQzOwlwdHIyID0gbW1hcCgmYW1wO2NhcnZlb3V0WzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplLAomIzQzOwkJICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApOwomIzQzOwlpZiAocHRyMiA9PSBNQVBfRkFJTEVEKSB7CiYjNDM7CQljbG9zZShmZF96ZXJvKTsKJiM0MzsJCUFTU0VSVF9UUlVFKGZhbHNlKTsKJiM0MzsJfQomIzQzOwljbG9zZShmZF96ZXJvKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgdGhleSBtZXJnZWQuICovCiYjNDM7CUFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgJiM0MzsgMTAgKiBwYWdlX3NpemUpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YobWVyZ2UsIG1lcmdlX21hcF9wcml2YXRlX2Rldl96ZXJvX2ZhdWx0ZWRfdW5mYXVsdGVkKQomIzQzO3sKJiM0MzsJc3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSAmYW1wO3NlbGYtJmd0O3Byb2NtYXA7CiYjNDM7CXVuc2lnbmVkIGludCBwYWdlX3NpemUgPSBzZWxmLSZndDtwYWdlX3NpemU7CiYjNDM7CWNoYXIgKmNhcnZlb3V0ID0gc2VsZi0mZ3Q7Y2FydmVvdXQ7CiYjNDM7CWNoYXIgKnB0ciwgKnB0cjI7CiYjNDM7CWludCBmZF96ZXJvOwomIzQzOwomIzQzOwlpZiAoYWNjZXNzKCYjMzQ7L2Rldi96ZXJvJiMzNDssIEZfT0spKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7Tm8gL2Rldi96ZXJvLiYjMzQ7KTsKJiM0MzsJZmRfemVybyA9IG9wZW4oJiMzNDsvZGV2L3plcm8mIzM0OywgT19SRFdSKTsKJiM0MzsJQVNTRVJUX05FKGZkX3plcm8sIC0xKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFwIGEgTUFQX1BSSVZBVEUgbWFwcGluZyBvZiAvZGV2L3plcm8gd2l0aCBwYWdlIG9mZnNldCAwLCB0aGVuIGZhdWx0CiYjNDM7CSAqIGl0IGluOgomIzQzOwkgKgomIzQzOwkgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKJiM0MzsJICogfCAgICAgICAgICAgZmF1bHRlZCAgICAgICAgICAgICB8CiYjNDM7CSAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAomIzQzOwkgKi8KJiM0MzsJcHRyID0gbW1hcChjYXJ2ZW91dCwgMTUgKiBwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkgICBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmRfemVybywgMCk7CiYjNDM7CWlmIChwdHIgPT0gTUFQX0ZBSUxFRCkgewomIzQzOwkJY2xvc2UoZmRfemVybyk7CiYjNDM7CQlBU1NFUlRfVFJVRShmYWxzZSk7CiYjNDM7CX0KJiM0MzsJbWVtc2V0KHB0ciwgJiMzOTt4JiMzOTssIDE1ICogcGFnZV9zaXplKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVW5tYXAgdGhlIG1pZGRsZToKJiM0MzsJICoKJiM0MzsJICogfC0tLS0tLS0tLXwgICAgICAgICAgIHwtLS0tLS0tLS18CiYjNDM7CSAqIHwgZmF1bHRlZCB8ICAgICAgICAgICB8IGZhdWx0ZWQgfAomIzQzOwkgKiB8LS0tLS0tLS0tfCAgICAgICAgICAgfC0tLS0tLS0tLXwKJiM0MzsJICovCiYjNDM7CUFTU0VSVF9FUShtdW5tYXAoJmFtcDtwdHJbNSAqIHBhZ2Vfc2l6ZV0sIDUgKiBwYWdlX3NpemUpLCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFwIGluIGEgbmV3IHVuZmF1bHRlZCBtYXBwaW5nIGluIHRoZSBtaWRkbGUgd2l0aCBwYWdlIG9mZnNldCAwIC0KJiM0MzsJICogdGhpcyBzaG91bGQgbWVyZ2UgYW5kIHdvdWxkIG5vdCBpZiBpdCB3ZXJlIHRyZWF0ZWQgYXMgYSBmaWxlIHJhdGhlcgomIzQzOwkgKiB0aGFuIHB1cmUgYW5vbjoKJiM0MzsJICoKJiM0MzsJICogfC0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS18CiYjNDM7CSAqIHwgZmF1bHRlZCB8IHVuZmF1bHRlZCB8IGZhdWx0ZWQgfAomIzQzOwkgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXwKJiM0MzsJICovCiYjNDM7CXB0cjIgPSBtbWFwKCZhbXA7Y2FydmVvdXRbNSAqIHBhZ2Vfc2l6ZV0sIDUgKiBwYWdlX3NpemUsCiYjNDM7CQkgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsCiYjNDM7CQkgICAgZmRfemVybywgMCk7CiYjNDM7CWNsb3NlKGZkX3plcm8pOwomIzQzOwlBU1NFUlRfTkUocHRyMiwgTUFQX0ZBSUxFRCk7CiYjNDM7CiYjNDM7CS8qIEFzc2VydCB0aGF0IHRoZXkgbWVyZ2VkLiAqLwomIzQzOwlBU1NFUlRfVFJVRShmaW5kX3ZtYV9wcm9jbWFwKHByb2NtYXAsIHB0cikpOwomIzQzOwlBU1NFUlRfRVEocHJvY21hcC0mZ3Q7cXVlcnkudm1hX3N0YXJ0LCAodW5zaWduZWQgbG9uZylwdHIpOwomIzQzOwlBU1NFUlRfRVEocHJvY21hcC0mZ3Q7cXVlcnkudm1hX2VuZCwgKHVuc2lnbmVkIGxvbmcpcHRyICYjNDM7IDE1ICogcGFnZV9zaXplKTsKJiM0Mzt9CiYjNDM7CiBURVNUX0YobWVyZ2Vfd2l0aF9mb3JrLCBtcmVtYXBfZmF1bHRlZF90b191bmZhdWx0ZWRfcHJldikKIHsKIAlzdHJ1Y3QgcHJvY21hcF9mZCAqcHJvY21hcCA9ICZhbXA7c2VsZi0mZ3Q7cHJvY21hcDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmggYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oCmluZGV4IGM1MmIyMzc3M2NkMjYzLi5iNGYwZjdjMjRmY2I4YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oCkBAIC0xNSw2ICYjNDM7MTUsMTYgQEAgc3RydWN0IHRhc2tfc3RydWN0ICpnZXRfY3VycmVudCh2b2lkKTsKICNkZWZpbmUgTU1GX0hBU19NRFdFCTI4CiAjZGVmaW5lIGN1cnJlbnQgZ2V0X2N1cnJlbnQoKQogCiYjNDM7I2RlZmluZSBNSU5PUkJJVFMJMjAKJiM0MzsjZGVmaW5lIE1JTk9STUFTSwkoKDFVICZsdDsmbHQ7IE1JTk9SQklUUykgLSAxKQomIzQzOwomIzQzOyNkZWZpbmUgTUFKT1IoZGV2KQkoKHVuc2lnbmVkIGludCkgKChkZXYpICZndDsmZ3Q7IE1JTk9SQklUUykpCiYjNDM7I2RlZmluZSBNSU5PUihkZXYpCSgodW5zaWduZWQgaW50KSAoKGRldikgJmFtcDsgTUlOT1JNQVNLKSkKJiM0MzsjZGVmaW5lIE1LREVWKG1hLCBtaSkJKCgobWEpICZsdDsmbHQ7IE1JTk9SQklUUykgfCAobWkpKQomIzQzOwomIzQzOyNkZWZpbmUgTUVNX01BSk9SCQkxCiYjNDM7I2RlZmluZSBERVZaRVJPX01JTk9SCTUKJiM0MzsKIC8qCiAgKiBEZWZpbmUgdGhlIHRhc2sgY29tbWFuZCBuYW1lIGxlbmd0aCBhcyBlbnVtLCB0aGVuIGl0IGNhbiBiZSB2aXNpYmxlIHRvCiAgKiBCUEYgcHJvZ3JhbXMuCkBAIC00NSw2ICYjNDM7NTUsOSBAQCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSB7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAJYXRvbWljX3QJCWlfbW1hcF93cml0YWJsZTsKIH07CiYjNDM7c3RydWN0IGlub2RlIHsKJiM0MzsJZGV2X3QJCQlpX3JkZXY7CiYjNDM7fTsKIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgewogCWludCAoKm1tYXApKHN0cnVjdCBmaWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKIAlpbnQgKCptbWFwX3ByZXBhcmUpKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKik7CkBAIC01Miw2ICYjNDM7NjUsNyBAQCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHsKIHN0cnVjdCBmaWxlIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqZl9tYXBwaW5nOwogCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMJKmZfb3A7CiYjNDM7CXN0cnVjdCBpbm9kZQkJCSpmX2lub2RlOwogfTsKIHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiB7CiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYTsKQEAgLTU3Nyw2ICYjNDM7NTkxLDcgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHsKIAkgKi8KIAl1bnNpZ25lZCBpbnQgdm1fbG9ja19zZXE7CiAjZW5kaWYKJiM0MzsJdW5zaWduZWQgaW50IF9fdm1fdmlydF9wZ29mZl9sbzsKIAogCS8qCiAJICogQSBmaWxlJiMzOTtzIE1BUF9QUklWQVRFIHZtYSBjYW4gYmUgaW4gYm90aCBpX21tYXAgdHJlZSBhbmQgYW5vbl92bWEKQEAgLTYxMiw2ICYjNDM7NjI3LDkgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHsKICNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCiAJLyogVW5zdGFibGUgUkNVIHJlYWRlcnMgYXJlIGFsbG93ZWQgdG8gcmVhZCB0aGlzLiAqLwogCXJlZmNvdW50X3Qgdm1fcmVmY250OwomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfNjRCSVQKJiM0MzsJdW5zaWduZWQgaW50IF9fdm1fdmlydF9wZ29mZl9oaTsKICNlbmRpZgogCS8qCiAJICogRm9yIGFyZWFzIHdpdGggYW4gYWRkcmVzcyBzcGFjZSBhbmQgYmFja2luZyBzdG9yZSwKQEAgLTEzMjAsNiAmIzQzOzEzMzgsMjggQEAgc3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9lbmRfcGdvZmYoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJcmV0dXJuIHZtYV9zdGFydF9wZ29mZih2bWEpICYjNDM7IHZtYV9wYWdlcyh2bWEpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9zdGFydF92aXJ0X3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQomIzQzO3sKJiM0MzsJcGdvZmZfdCBwZ29mZiA9IDA7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR182NEJJVAomIzQzOwlwZ29mZiAmIzQzOz0gdm1hLSZndDtfX3ZtX3ZpcnRfcGdvZmZfaGk7CiYjNDM7CXBnb2ZmICZsdDsmbHQ7PSAzMjsKJiM0MzsjZW5kaWYKJiM0MzsJcGdvZmYgJiM0Mzs9IHZtYS0mZ3Q7X192bV92aXJ0X3Bnb2ZmX2xvOwomIzQzOwlyZXR1cm4gcGdvZmY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWFfZW5kX3ZpcnRfcGdvZmYoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiYjNDM7ewomIzQzOwlyZXR1cm4gdm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSAmIzQzOyB2bWFfcGFnZXModm1hKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9sYXN0X3ZpcnRfcGdvZmYoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiYjNDM7ewomIzQzOwlyZXR1cm4gdm1hX2VuZF92aXJ0X3Bnb2ZmKHZtYSkgLSAxOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgaW50IHZmc19tbWFwX3ByZXBhcmUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpCiB7CiAJcmV0dXJuIGZpbGUtJmd0O2Zfb3AtJmd0O21tYXBfcHJlcGFyZShkZXNjKTsKQEAgLTE1ODQsMyAmIzQzOzE2MjQsNDAgQEAgc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlyZXR1cm4gdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWEtJmd0O2ZsYWdzKTsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBnb2ZmX3QgX19saW5lYXJfdmlydF9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKJiM0Mzt7CiYjNDM7CXBnb2ZmX3QgcGdvZmY7CiYjNDM7CiYjNDM7CXBnb2ZmID0gbGluZWFyX3BhZ2VfZGVsdGEodm1hLCBhZGRyZXNzKTsKJiM0MzsJcGdvZmYgJiM0Mzs9IHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSk7CiYjNDM7CXJldHVybiBwZ29mZjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBwZ29mZl90IGxpbmVhcl92aXJ0X3BhZ2VfaW5kZXgoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKJiM0Mzt7CiYjNDM7CWNvbnN0IHBnb2ZmX3QgcGdvZmYgPSBfX2xpbmVhcl92aXJ0X3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTsKJiM0MzsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKHZtYV90ZXN0KHZtYSwgVk1BX1NIQVJFRF9CSVQpKTsKJiM0MzsJaWYgKCF2bWEtJmd0O3ZtX2ZpbGUpIC8qIElzIGFub255bW91cyBleGNlcHQgTUFQX1BSSVZBVEUtL2Rldi96ZXJvICovCiYjNDM7CQlWTV9XQVJOX09OX09OQ0UocGdvZmYgIT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSk7CiYjNDM7CiYjNDM7CXJldHVybiBwZ29mZjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKmZpbGVfaW5vZGUoY29uc3Qgc3RydWN0IGZpbGUgKmYpCiYjNDM7ewomIzQzOwlyZXR1cm4gZi0mZ3Q7Zl9pbm9kZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbWlub3IoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBNSU5PUihpbm9kZS0mZ3Q7aV9yZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbWFqb3IoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBNQUpPUihpbm9kZS0mZ3Q7aV9yZGV2KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jCmluZGV4IGJlYTllYTZkYjAyYTRjLi5mNDEwYmI2Zjg1OGUxMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmMKQEAgLTIzLDcgJiM0MzsyMyw4IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYWxsb2Nfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCiAJdm1hLSZndDt2bV9zdGFydCA9IHN0YXJ0OwogCXZtYS0mZ3Q7dm1fZW5kID0gZW5kOwotCXZtYS0mZ3Q7dm1fcGdvZmYgPSBwZ29mZjsKJiM0MzsJdm1hX3NldF9wZ29mZih2bWEsIHBnb2ZmKTsKJiM0MzsJdm1hX3NldF92aXJ0X3Bnb2ZmKHZtYSwgc3RhcnQgJmd0OyZndDsgUEFHRV9TSElGVCk7CiAJdm1hLSZndDtmbGFncyA9IHZtYV9mbGFnczsKIAl2bWFfYXNzZXJ0X2RldGFjaGVkKHZtYSk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21lcmdlLmMgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tZXJnZS5jCmluZGV4IGUzNTdhY2NjODQ5OTA1Li5hMDExMDdhYjhlMjEzNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbWVyZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tZXJnZS5jCkBAIC00NSw2ICYjNDM7NDUsNyBAQCB2b2lkIHZtZ19zZXRfcmFuZ2Uoc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZywgdW5zaWduZWQgbG9uZyBzdGFydCwKIAl2bWctJmd0O3N0YXJ0ID0gc3RhcnQ7CiAJdm1nLSZndDtlbmQgPSBlbmQ7CiAJdm1nLSZndDtwZ29mZiA9IHBnb2ZmOwomIzQzOwl2bWctJmd0O2Fub25fcGdvZmYgPSBzdGFydCAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCXZtZy0mZ3Q7dm1hX2ZsYWdzID0gdm1hX2ZsYWdzOwogCiAJdm1nLSZndDtqdXN0X2V4cGFuZCA9IGZhbHNlOwpAQCAtMTA4LDYgJiM0MzsxMDksNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X3NpbXBsZV9tZXJnZSh2b2lkKQogCQkuZW5kID0gMHgyMDAwLAogCQkudm1hX2ZsYWdzID0gdm1hX2ZsYWdzLAogCQkucGdvZmYgPSAxLAomIzQzOwkJLmFub25fcGdvZmYgPSAxLAogCX07CiAKIAlBU1NFUlRfRkFMU0UoYXR0YWNoX3ZtYSgmYW1wO21tLCB2bWFfbGVmdCkpOwpAQCAtMTE5LDYgJiM0MzsxMjEsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X3NpbXBsZV9tZXJnZSh2b2lkKQogCUFTU0VSVF9FUSh2bWEtJmd0O3ZtX3N0YXJ0LCAwKTsKIAlBU1NFUlRfRVEodm1hLSZndDt2bV9lbmQsIDB4MzAwMCk7CiAJQVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDApOwogCUFTU0VSVF9GTEFHU19TQU1FX01BU0soJmFtcDt2bWEtJmd0O2ZsYWdzLCB2bWFfZmxhZ3MpOwogCiAJZGV0YWNoX2ZyZWVfdm1hKHZtYSk7CkBAIC0xNTEsNiAmIzQzOzE1NCw3IEBAIHN0YXRpYyBib29sIHRlc3Rfc2ltcGxlX21vZGlmeSh2b2lkKQogCUFTU0VSVF9FUSh2bWEtJmd0O3ZtX3N0YXJ0LCAweDEwMDApOwogCUFTU0VSVF9FUSh2bWEtJmd0O3ZtX2VuZCwgMHgyMDAwKTsKIAlBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDEpOwomIzQzOwlBU1NFUlRfRVEodm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSwgMSk7CiAKIAkvKgogCSAqIE5vdyB3YWxrIHRocm91Z2ggdGhlIHRocmVlIHNwbGl0IFZNQXMgYW5kIG1ha2Ugc3VyZSB0aGV5IGFyZSBhcwpAQCAtMTYzLDYgJiM0MzsxNjcsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X3NpbXBsZV9tb2RpZnkodm9pZCkKIAlBU1NFUlRfRVEodm1hLSZndDt2bV9zdGFydCwgMCk7CiAJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fZW5kLCAweDEwMDApOwogCUFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCk7CiYjNDM7CUFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAwKTsKIAogCWRldGFjaF9mcmVlX3ZtYSh2bWEpOwogCXZtYV9pdGVyX2NsZWFyKCZhbXA7dm1pKTsKQEAgLTE3Miw2ICYjNDM7MTc3LDcgQEAgc3RhdGljIGJvb2wgdGVzdF9zaW1wbGVfbW9kaWZ5KHZvaWQpCiAJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fc3RhcnQsIDB4MTAwMCk7CiAJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fZW5kLCAweDIwMDApOwogCUFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMSk7CiYjNDM7CUFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAxKTsKIAogCWRldGFjaF9mcmVlX3ZtYSh2bWEpOwogCXZtYV9pdGVyX2NsZWFyKCZhbXA7dm1pKTsKQEAgLTE4MSw2ICYjNDM7MTg3LDcgQEAgc3RhdGljIGJvb2wgdGVzdF9zaW1wbGVfbW9kaWZ5KHZvaWQpCiAJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fc3RhcnQsIDB4MjAwMCk7CiAJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fZW5kLCAweDMwMDApOwogCUFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMik7CiYjNDM7CUFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAyKTsKIAogCWRldGFjaF9mcmVlX3ZtYSh2bWEpOwogCW10cmVlX2Rlc3Ryb3koJmFtcDttbS5tbV9tdCk7CkBAIC0yMTAsNiAmIzQzOzIxNyw3IEBAIHN0YXRpYyBib29sIHRlc3Rfc2ltcGxlX2V4cGFuZCh2b2lkKQogCUFTU0VSVF9FUSh2bWEtJmd0O3ZtX3N0YXJ0LCAwKTsKIAlBU1NFUlRfRVEodm1hLSZndDt2bV9lbmQsIDB4MzAwMCk7CiAJQVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDApOwogCiAJZGV0YWNoX2ZyZWVfdm1hKHZtYSk7CiAJbXRyZWVfZGVzdHJveSgmYW1wO21tLm1tX210KTsKQEAgLTIzMiw2ICYjNDM7MjQwLDcgQEAgc3RhdGljIGJvb2wgdGVzdF9zaW1wbGVfc2hyaW5rKHZvaWQpCiAJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fc3RhcnQsIDApOwogCUFTU0VSVF9FUSh2bWEtJmd0O3ZtX2VuZCwgMHgxMDAwKTsKIAlBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDApOwomIzQzOwlBU1NFUlRfRVEodm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSwgMCk7CiAKIAlkZXRhY2hfZnJlZV92bWEodm1hKTsKIAltdHJlZV9kZXN0cm95KCZhbXA7bW0ubW1fbXQpOwpAQCAtMzQ0LDYgJiM0MzszNTMsNyBAQCBzdGF0aWMgYm9vbCBfX3Rlc3RfbWVyZ2VfbmV3KGJvb2wgaXNfc3RpY2t5LCBib29sIGFfaXNfc3RpY2t5LCBib29sIGJfaXNfc3RpY2t5LAogCUFTU0VSVF9FUSh2bWEtJmd0O3ZtX3N0YXJ0LCAwKTsKIAlBU1NFUlRfRVEodm1hLSZndDt2bV9lbmQsIDB4NTAwMCk7CiAJQVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDApOwogCUFTU0VSVF9FUSh2bWEtJmd0O2Fub25fdm1hLCAmYW1wO2R1bW15X2Fub25fdm1hKTsKIAlBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWEpKTsKIAlBU1NFUlRfRVEobW0ubWFwX2NvdW50LCAzKTsKQEAgLTM2NSw2ICYjNDM7Mzc1LDcgQEAgc3RhdGljIGJvb2wgX190ZXN0X21lcmdlX25ldyhib29sIGlzX3N0aWNreSwgYm9vbCBhX2lzX3N0aWNreSwgYm9vbCBiX2lzX3N0aWNreSwKIAlBU1NFUlRfRVEodm1hLSZndDt2bV9zdGFydCwgMHg2MDAwKTsKIAlBU1NFUlRfRVEodm1hLSZndDt2bV9lbmQsIDB4OTAwMCk7CiAJQVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCA2KTsKJiM0MzsJQVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDYpOwogCUFTU0VSVF9FUSh2bWEtJmd0O2Fub25fdm1hLCAmYW1wO2R1bW15X2Fub25fdm1hKTsKIAlBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWEpKTsKIAlBU1NFUlRfRVEobW0ubWFwX2NvdW50LCAzKTsKQEAgLTM4NSw2ICYjNDM7Mzk2LDcgQEAgc3RhdGljIGJvb2wgX190ZXN0X21lcmdlX25ldyhib29sIGlzX3N0aWNreSwgYm9vbCBhX2lzX3N0aWNreSwgYm9vbCBiX2lzX3N0aWNreSwKIAlBU1NFUlRfRVEodm1hLSZndDt2bV9zdGFydCwgMCk7CiAJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fZW5kLCAweDkwMDApOwogCUFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCk7CiYjNDM7CUFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAwKTsKIAlBU1NFUlRfRVEodm1hLSZndDthbm9uX3ZtYSwgJmFtcDtkdW1teV9hbm9uX3ZtYSk7CiAJQVNTRVJUX1RSVUUodm1hX3dyaXRlX3N0YXJ0ZWQodm1hKSk7CiAJQVNTRVJUX0VRKG1tLm1hcF9jb3VudCwgMik7CkBAIC00MDUsNiAmIzQzOzQxNyw3IEBAIHN0YXRpYyBib29sIF9fdGVzdF9tZXJnZV9uZXcoYm9vbCBpc19zdGlja3ksIGJvb2wgYV9pc19zdGlja3ksIGJvb2wgYl9pc19zdGlja3ksCiAJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fc3RhcnQsIDB4YTAwMCk7CiAJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fZW5kLCAweGMwMDApOwogCUFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMHhhKTsKJiM0MzsJQVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDB4YSk7CiAJQVNTRVJUX0VRKHZtYS0mZ3Q7YW5vbl92bWEsICZhbXA7ZHVtbXlfYW5vbl92bWEpOwogCUFTU0VSVF9UUlVFKHZtYV93cml0ZV9zdGFydGVkKHZtYSkpOwogCUFTU0VSVF9FUShtbS5tYXBfY291bnQsIDIpOwpAQCAtNDI0LDYgJiM0Mzs0MzcsNyBAQCBzdGF0aWMgYm9vbCBfX3Rlc3RfbWVyZ2VfbmV3KGJvb2wgaXNfc3RpY2t5LCBib29sIGFfaXNfc3RpY2t5LCBib29sIGJfaXNfc3RpY2t5LAogCUFTU0VSVF9FUSh2bWEtJmd0O3ZtX3N0YXJ0LCAwKTsKIAlBU1NFUlRfRVEodm1hLSZndDt2bV9lbmQsIDB4YzAwMCk7CiAJQVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDApOwogCUFTU0VSVF9FUSh2bWEtJmd0O2Fub25fdm1hLCAmYW1wO2R1bW15X2Fub25fdm1hKTsKIAlBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWEpKTsKIAlBU1NFUlRfRVEobW0ubWFwX2NvdW50LCAxKTsKQEAgLTQ0NCw2ICYjNDM7NDU4LDcgQEAgc3RhdGljIGJvb2wgX190ZXN0X21lcmdlX25ldyhib29sIGlzX3N0aWNreSwgYm9vbCBhX2lzX3N0aWNreSwgYm9vbCBiX2lzX3N0aWNreSwKIAkJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fc3RhcnQsIDApOwogCQlBU1NFUlRfRVEodm1hLSZndDt2bV9lbmQsIDB4YzAwMCk7CiAJCUFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCk7CiYjNDM7CQlBU1NFUlRfRVEodm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSwgMCk7CiAJCUFTU0VSVF9FUSh2bWEtJmd0O2Fub25fdm1hLCAmYW1wO2R1bW15X2Fub25fdm1hKTsKIAogCQlkZXRhY2hfZnJlZV92bWEodm1hKTsKQEAgLTgwNiw2ICYjNDM7ODIxLDcgQEAgc3RhdGljIGJvb2wgdGVzdF92bWFfbWVyZ2VfbmV3X3dpdGhfY2xvc2Uodm9pZCkKIAlBU1NFUlRfRVEodm1hLSZndDt2bV9zdGFydCwgMCk7CiAJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fZW5kLCAweDUwMDApOwogCUFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCk7CiYjNDM7CUFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAwKTsKIAlBU1NFUlRfRVEodm1hLSZndDt2bV9vcHMsICZhbXA7dm1fb3BzKTsKIAlBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWEpKTsKIAlBU1NFUlRfRVEobW0ubWFwX2NvdW50LCAyKTsKQEAgLTg2Niw2ICYjNDM7ODgyLDcgQEAgc3RhdGljIGJvb2wgX190ZXN0X21lcmdlX2V4aXN0aW5nKGJvb2wgcHJldl9pc19zdGlja3ksIGJvb2wgbWlkZGxlX2lzX3N0aWNreSwgYm8KIAlBU1NFUlRfRVEodm1hLSZndDt2bV9zdGFydCwgMHgyMDAwKTsKIAlBU1NFUlRfRVEodm1hLSZndDt2bV9lbmQsIDB4MzAwMCk7CiAJQVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCAyKTsKJiM0MzsJQVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDIpOwogCUFTU0VSVF9UUlVFKHZtYV93cml0ZV9zdGFydGVkKHZtYSkpOwogCUFTU0VSVF9UUlVFKHZtYV93cml0ZV9zdGFydGVkKHZtYV9uZXh0KSk7CiAJQVNTRVJUX0VRKG1tLm1hcF9jb3VudCwgMik7CkBAIC05MzIsNiAmIzQzOzk0OSw3IEBAIHN0YXRpYyBib29sIF9fdGVzdF9tZXJnZV9leGlzdGluZyhib29sIHByZXZfaXNfc3RpY2t5LCBib29sIG1pZGRsZV9pc19zdGlja3ksIGJvCiAJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fc3RhcnQsIDB4NjAwMCk7CiAJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fZW5kLCAweDcwMDApOwogCUFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgNik7CiYjNDM7CUFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCA2KTsKIAlBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWFfcHJldikpOwogCUFTU0VSVF9UUlVFKHZtYV93cml0ZV9zdGFydGVkKHZtYSkpOwogCUFTU0VSVF9FUShtbS5tYXBfY291bnQsIDIpOwpAQCAtMTQxNyw2ICYjNDM7MTQzNSw3IEBAIHN0YXRpYyBib29sIHRlc3RfbWVyZ2VfZXh0ZW5kKHZvaWQpCiAJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fc3RhcnQsIDApOwogCUFTU0VSVF9FUSh2bWEtJmd0O3ZtX2VuZCwgMHg0MDAwKTsKIAlBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDApOwomIzQzOwlBU1NFUlRfRVEodm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSwgMCk7CiAJQVNTRVJUX1RSVUUodm1hX3dyaXRlX3N0YXJ0ZWQodm1hKSk7CiAJQVNTRVJUX0VRKG1tLm1hcF9jb3VudCwgMSk7CiAKQEAgLTE0MzEsNyAmIzQzOzE0NTAsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X2V4cGFuZF9vbmx5X21vZGUodm9pZCkKIAlzdHJ1Y3QgbW1fc3RydWN0IG1tID0ge307CiAJVk1BX0lURVJBVE9SKHZtaSwgJmFtcDttbSwgMCk7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHJldiwgKnZtYTsKLQlWTUdfU1RBVEUodm1nLCAmYW1wO21tLCAmYW1wO3ZtaSwgMHg1MDAwLCAweDkwMDAsIHZtYV9mbGFncywgNSk7CiYjNDM7CVZNR19TVEFURSh2bWcsICZhbXA7bW0sICZhbXA7dm1pLCAweDUwMDAsIDB4OTAwMCwgdm1hX2ZsYWdzLCA1LCA1KTsKIAogCS8qCiAJICogUGxhY2UgYSBWTUEgcHJpb3IgdG8gdGhlIG9uZSB3ZSYjMzk7cmUgZXhwYW5kaW5nIHNvIHdlIGFzc2VydCB0aGF0IHdlIGRvCkBAIC0xNDU3LDYgJiM0MzsxNDc2LDcgQEAgc3RhdGljIGJvb2wgdGVzdF9leHBhbmRfb25seV9tb2RlKHZvaWQpCiAJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fc3RhcnQsIDB4MzAwMCk7CiAJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fZW5kLCAweDkwMDApOwogCUFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMyk7CiYjNDM7CUFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAzKTsKIAlBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWEpKTsKIAlBU1NFUlRfRVEodm1hX2l0ZXJfYWRkcigmYW1wO3ZtaSksIDB4MzAwMCk7CiAJdm1hX2Fzc2VydF9hdHRhY2hlZCh2bWEpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jCmluZGV4IGM4NWJjMDAwZDFjYjdhLi4wYzhhMzQ0NmI5MDUwMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuYwpAQCAtNDUsNyAmIzQzOzQ1LDU2IEBAIHN0YXRpYyBib29sIHRlc3RfbW1hcF9yZWdpb25fYmFzaWModm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZHVtbXlfbW1hcF9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgdGVzdF9wdXJlX2Fub25fZGV2X3plcm8odm9pZCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfUkVBRF9CSVQsIFZNQV9XUklURV9CSVQsCiYjNDM7CQkJVk1BX01BWVJFQURfQklULCBWTUFfTUFZV1JJVEVfQklUKTsKJiM0MzsJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmX29wID0gewomIzQzOwkJLm1tYXBfcHJlcGFyZSA9IGR1bW15X21tYXBfcHJlcGFyZSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGlub2RlIGlub2RlID0gewomIzQzOwkJLmlfcmRldiA9IE1LREVWKE1FTV9NQUpPUiwgREVWWkVST19NSU5PUiksCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBmaWxlIGZpbGUgPSB7CiYjNDM7CQkuZl9pbm9kZSA9ICZhbXA7aW5vZGUsCiYjNDM7CQkuZl9vcCA9ICZhbXA7Zl9vcCwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCBtbSA9IHt9OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKJiM0MzsJdW5zaWduZWQgbG9uZyBhZGRyOwomIzQzOwlWTUFfSVRFUkFUT1Iodm1pLCAmYW1wO21tLCAwKTsKJiM0MzsKJiM0MzsJY3VycmVudC0mZ3Q7bW0gPSAmYW1wO21tOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXAgYSBNQVBfUFJJVkFURS0vZGV2L3plcm8gbWFwcGluZyBhdCBhZGRyZXNzIDB4MzAwMDAwIHdpdGggYSBwYWdlCiYjNDM7CSAqIG9mZnNldCBvZiAweDEwLCB3aGljaCB3ZSBleHBlY3QgdG8gYmUgcmVzZXQgdG8gdGhlIHZpcnR1YWwgcGFnZQomIzQzOwkgKiBvZmZzZXQuCiYjNDM7CSAqLwomIzQzOwlhZGRyID0gX19tbWFwX3JlZ2lvbigmYW1wO2ZpbGUsIDB4MzAwMDAwLCAweDMwMDAsIHZtYV9mbGFncywgMHgxMCwgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUShhZGRyLCAweDMwMDAwMCk7CiYjNDM7CiYjNDM7CS8qIEFzc2VydCB0aGF0IGl0IHRydWx5IGlzIGFuIGFub255bW91cyBtYXBwaW5nLiAqLwomIzQzOwl2bWEgPSB2bWFfbG9va3VwKCZhbXA7bW0sIGFkZHIpOwomIzQzOwlBU1NFUlRfTkUodm1hLCBOVUxMKTsKJiM0MzsJQVNTRVJUX1RSVUUodm1hX2lzX2Fub255bW91cyh2bWEpKTsKJiM0MzsJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fZmlsZSwgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUSh2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSwgTlVMTCk7CiYjNDM7CS8qIEV4cGVjdCB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0cy4gKi8KJiM0MzsJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fcGdvZmYsIDB4MzAwKTsKJiM0MzsJQVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDB4MzAwKTsKJiM0MzsKJiM0MzsJY2xlYW51cF9tbSgmYW1wO21tLCAmYW1wO3ZtaSk7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ1bl9tbWFwX3Rlc3RzKGludCAqbnVtX3Rlc3RzLCBpbnQgKm51bV9mYWlsKQogewogCVRFU1QobW1hcF9yZWdpb25fYmFzaWMpOwomIzQzOwlURVNUKHB1cmVfYW5vbl9kZXZfemVybyk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy92bWEuYyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL3ZtYS5jCmluZGV4IDc1NGEyZGEwNjMyMTU3Li43Y2E1Mjg5ZTBmOTU5MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvdm1hLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvdm1hLmMKQEAgLTM4LDcgJiM0MzszOCw3IEBAIHN0YXRpYyBib29sIHRlc3RfY29weV92bWEodm9pZCkKIAkvKiBNb3ZlIGJhY2t3YXJkcyBhbmQgZG8gbm90IG1lcmdlLiAqLwogCiAJdm1hID0gYWxsb2NfYW5kX2xpbmtfdm1hKCZhbXA7bW0sIDB4MzAwMCwgMHg1MDAwLCAzLCB2bWFfZmxhZ3MpOwotCXZtYV9uZXcgPSBjb3B5X3ZtYSgmYW1wO3ZtYSwgMCwgMHgyMDAwLCAwLCAmYW1wO25lZWRfbG9ja3MpOwomIzQzOwl2bWFfbmV3ID0gY29weV92bWEoJmFtcDt2bWEsIDAsIDB4MjAwMCwgMCwgMywgJmFtcDtuZWVkX2xvY2tzKTsKIAlBU1NFUlRfTkUodm1hX25ldywgdm1hKTsKIAlBU1NFUlRfRVEodm1hX25ldy0mZ3Q7dm1fc3RhcnQsIDApOwogCUFTU0VSVF9FUSh2bWFfbmV3LSZndDt2bV9lbmQsIDB4MjAwMCk7CkBAIC01MSw3ICYjNDM7NTEsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X2NvcHlfdm1hKHZvaWQpCiAKIAl2bWEgPSBhbGxvY19hbmRfbGlua192bWEoJmFtcDttbSwgMCwgMHgyMDAwLCAwLCB2bWFfZmxhZ3MpOwogCXZtYV9uZXh0ID0gYWxsb2NfYW5kX2xpbmtfdm1hKCZhbXA7bW0sIDB4NjAwMCwgMHg4MDAwLCA2LCB2bWFfZmxhZ3MpOwotCXZtYV9uZXcgPSBjb3B5X3ZtYSgmYW1wO3ZtYSwgMHg0MDAwLCAweDIwMDAsIDQsICZhbXA7bmVlZF9sb2Nrcyk7CiYjNDM7CXZtYV9uZXcgPSBjb3B5X3ZtYSgmYW1wO3ZtYSwgMHg0MDAwLCAweDIwMDAsIDQsIDQsICZhbXA7bmVlZF9sb2Nrcyk7CiAJdm1hX2Fzc2VydF9hdHRhY2hlZCh2bWFfbmV3KTsKIAogCUFTU0VSVF9FUSh2bWFfbmV3LCB2bWFfbmV4dCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS92bWFfaW50ZXJuYWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oCmluZGV4IDRmNmM1NjY2YWMwN2QzLi44YTQ4YjIzMWFhN2FiZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdm1hX2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92bWEvdm1hX2ludGVybmFsLmgKQEAgLTUzLDYgJiM0Mzs1Myw3IEBAIHR5cGVkZWYgX19iaXR3aXNlIHVuc2lnbmVkIGludCB2bV9mYXVsdF90OwogCiAjZGVmaW5lIFZNX1dBUk5fT04oX2V4cHIpIChXQVJOX09OKF9leHByKSkKICNkZWZpbmUgVk1fV0FSTl9PTl9PTkNFKF9leHByKSAoV0FSTl9PTl9PTkNFKF9leHByKSkKJiM0MzsjZGVmaW5lIFZNX1dBUk5fT05fT05DRV9WTUEoX2V4cHIsIF92bWEpIChXQVJOX09OX09OQ0UoX2V4cHIpKQogI2RlZmluZSBWTV9XQVJOX09OX1ZNRyhfZXhwciwgX3ZtZykgKFdBUk5fT04oX2V4cHIpKQogI2RlZmluZSBWTV9CVUdfT04oX2V4cHIpIChCVUdfT04oX2V4cHIpKQogI2RlZmluZSBWTV9CVUdfT05fVk1BKF9leHByLCBfdm1hKSAoQlVHX09OKF9leHByKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1MDQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0d2Vha2luZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IGAvZGV2L3plcm9gIGlzIGhhbmRsZWQgd2l0aCBgTUFQX1BSSVZBVEVgIG1hcHBpbmdzLiBUaGUgY29tbWl0IG1lc3NhZ2UganVzdCBzYXlzIGl0JiMzOTtzIHVuZGVyIHJldmlldyBmcm9tIGEgc3l6LWNsdXN0ZXIsIHNvIGxldCYjMzk7cyBkaWcgaW4uCgpMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyBsaWtlIGBkcml2ZXJzL2NoYXIvbWVtLmM6bW1hcF96ZXJvX3ByZXBhcmVgIGlzIHRoZSBzdGFydGluZyBwb2ludC4gSXQmIzM5O3MgZHJvcHBlZCB0aGF0IGB2bWFfZGVzY19zZXRfYW5vbnltb3VzYCBjYWxsLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgbm93IHJlbHlpbmcgb24gdGhlIGNvcmUgTU0gdG8gbWFuYWdlIGBNQVBfUFJJVkFURWAgc2VtYW50aWNzLiAgSW50cmlndWluZy4gIFRoZXJlIGFyZSBhIGJ1bmNoIG9mIG5ldyBkZWZpbmVzIGFuZCBmaWVsZHMgaW4gdGhlIGluY2x1ZGUgZmlsZXMsIHBhcnRpY3VsYXJseSBhcm91bmQgdmlydHVhbCBwYWdlIG9mZnNldHMgKGB2bWFfc3RhcnRfdmlydF9wZ29mZmAsIGB2bWFfZW5kX3ZpcnRfcGdvZmZgLCBhbmQgdGhlIGBfX3ZtX3ZpcnRfcGdvZmZfYCBmaWVsZHMpLiBQbHVzLCBgbGluZWFyX3ZpcnRfcGFnZV9pbmRleGAgYW5kIGBsaW5lYXJfZm9saW9fcGFnZV9pbmRleGAgYXJlIG5ldy4KClRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIHRvbiBvZiBmaWxlczogYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0va3NtLmNgLCBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGBtbS9tZW1vcnkuY2AsIGBtbS9taWdyYXRlLmNgLCBgbW0vbXJlbWFwLmNgLCBgbW0vcGFnZV92bWFfbWFwcGVkLmNgLCBgbW0vcm1hcC5jYCwgYG1tL3VzZXJmYXVsdGZkLmNgLCBgbW0vdm1hLmNgLCBgbW0vdm1hLmhgLCBgbW0vdm1hX2V4ZWMuY2AsIGFuZCBgbW0vdm1hX2luaXQuY2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNhbmRpZGF0ZSBmb3IgdGhvcm91Z2ggZnV6emluZzsgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKSSBuZWVkIHRvIG5haWwgZG93biB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLiAgTGV0JiMzOTtzIHNlZSwgYmVzaWRlcyB0aGF0IGBtbWFwX3plcm9fcHJlcGFyZWAsIGl0JiMzOTtzIGltcGFjdGluZzoKCiogICBgbW92ZV9wYWdlc19odWdlX3BtZGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgCiogICBgdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2VgLCBga3NtX21pZ2h0X25lZWRfdG9fY29weWAsIGBybWFwX3dhbGtfa3NtYCBpbiBgbW0va3NtLmNgCiogICBgYWRkX3RvX2tpbGxfZnNkYXhgLCBgYWRkX3RvX2tpbGxfcGdvZmZgIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYAoqICAgYHByaW50X2JhZF9wYWdlX21hcGAgaW4gYG1tL21lbW9yeS5jYAoqICAgYHJlbW92ZV9taWdyYXRpb25fcHRlYCBpbiBgbW0vbWlncmF0ZS5jYAoqICAgYGNvcHlfdm1hX2FuZF9kYXRhYCBpbiBgbW0vbXJlbWFwLmNgCiogICBgcGFnZV9tYXBwZWRfaW5fdm1hYCBpbiBgbW0vcGFnZV92bWFfbWFwcGVkLmNgCiogICBgcGFnZV9hZGRyZXNzX2luX3ZtYWAsIGBtYXBwaW5nX3dycHJvdGVjdF9yYW5nZV9vbmVgLCBgcGZuX21rY2xlYW5fcmFuZ2VgLCBgX19mb2xpb19zZXRfYW5vbmAsIGBfX3BhZ2VfY2hlY2tfYW5vbl9ybWFwYCwgYHJtYXBfd2Fsa19hbm9uYCwgYF9fcm1hcF93YWxrX2ZpbGVgIGluIGBtbS9ybWFwLmNgCiogICBgbW92ZV9wcmVzZW50X3B0ZXNgLCBgbW92ZV9zd2FwX3B0ZWAgaW4gYG1tL3VzZXJmYXVsdGZkLmNgCiogICBgY29tbWl0X21lcmdlYCwgYHZtYV9tZXJnZV9leGlzdGluZ19yYW5nZWAsIGB2bWFfbWVyZ2VfbmV3X3JhbmdlYCwgYGNvcHlfdm1hYCwgYGFub25fdm1hX2NvbXBhdGlibGVgLCBgX19tbWFwX25ld19maWxlX3ZtYWAsIGBfX21tYXBfbmV3X3ZtYWAsIGBjYWxsX21tYXBfcHJlcGFyZWAsIGBzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHNgLCBgX19tbWFwX3JlZ2lvbmAsIGBkb19icmtfZmxhZ3NgLCBgaW5zZXJ0X3ZtX3N0cnVjdGAsIGBfX2luc3RhbGxfc3BlY2lhbF9tYXBwaW5nYCBpbiBgbW0vdm1hLmNgCiogICBgcmVsb2NhdGVfdm1hX2Rvd25gIGluIGBtbS92bWFfZXhlYy5jYAoqICAgYHZtX2FyZWFfaW5pdF9mcm9tYCBpbiBgbW0vdm1hX2luaXQuY2AKCk9rYXksIEkmIzM5O3ZlIGdvdCBhIGxvdCB0byBjb25zaWRlci4gTm93LCBJIHdhbnQgdG8gZmlsdGVyIG91dCB0aGUgaGlnaC1mcmVxdWVuY3kgZnVuY3Rpb25zLiBJIHdpbGwgYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLgoKR29vZCB0YXJnZXRzIGZvciBmdXp6aW5nIGZvY3VzIGFyZToKCiogICBgbW1hcF96ZXJvX3ByZXBhcmVgCiogICBgbW92ZV9wYWdlc19odWdlX3BtZGAKKiAgIGB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZWAKKiAgIGBrc21fbWlnaHRfbmVlZF90b19jb3B5YAoqICAgYHJtYXBfd2Fsa19rc21gCiogICBgYWRkX3RvX2tpbGxfZnNkYXhgCiogICBgYWRkX3RvX2tpbGxfcGdvZmZgCiogICBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgCiogICBgY29weV92bWFfCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKG1lbnVjb25maWd8Y29uZmlnKSBLU00mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NzIyPWNvbmZpZyBNTVVfTk9USUZJRVJcbi0tXG5tbS9LY29uZmlnLTcyNS1cbm1tL0tjb25maWc6NzI2OmNvbmZpZyBLU01cbm1tL0tjb25maWctNzI3LVx0Ym9vbCBcJiMzNDtFbmFibGUgS1NNIGZvciBwYWdlIG1lcmdpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTkwOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDoKCioqS1NNIGFuZCBVU0VSRkFVTFRGRDogQSBRdWljayBNZW50YWwgUnVuLVRocm91Z2gqKgoKQWxyaWdodCwgS1NNLiBBbHdheXMgYSBzb2xpZCBjaG9pY2UsIHlvdSBrbm93PyBHb29kLCByZWxpYWJsZSBrZXJuZWwtbGV2ZWwgbWVtb3J5IGRlZHVwbGljYXRpb24uIEVmZmVjdGl2ZSBhdCB3aGF0IGl0IGRvZXMsIGVzcGVjaWFsbHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJJiMzOTttIHVzdWFsbHkgaGFwcHkgdG8gc2VlIGl0IGluIHRoZSBtaXguCgpOb3csIFVTRVJGQVVMVEZELi4uIGFoLCAqdGhhdCYjMzk7cyogd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSBzdGFydCB0aGlua2luZyBhYm91dCBpdHMgcG90ZW50aWFsLiBJdCYjMzk7cyBub3QganVzdCBhIHRvb2w7IGl0JiMzOTtzIG1vcmUgb2YgYSBmcmFtZXdvcmssIGlzbiYjMzk7dCBpdD8gQSB3YXkgdG8gbWFuYWdlIHBhZ2UgZmF1bHRzIGluIHVzZXJzcGFjZS4gQW5kIHRoZSBpbXBsaWNhdGlvbnMuLi4gdGhleSYjMzk7cmUgc2lnbmlmaWNhbnQuIEZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgbWVtb3J5IG1hbmFnZW1lbnQsIHRoYXTigJlzIGtleS4gVGhpbmsgYWJvdXQgdGhlIHBvc3NpYmlsaXRpZXMgZm9yIGFkdmFuY2VkIG1lbW9yeSBhbGxvY2F0aW9uLCBjdXN0b20gbWVtb3J5IHBvbGljaWVzLCBhbmQgZXZlbiBlbXVsYXRpbmcgY2VydGFpbiBhc3BlY3RzIG9mIGhhcmR3YXJlIGRpcmVjdGx5LgoKTXkgYnJhaW4ganVtcHMgdG8gdGhlIGltcGxpY2F0aW9ucyBmb3IgaGlnaC1wZXJmb3JtYW5jZSBjb21wdXRpbmcsIHNwZWNpYWxpemVkIG1lbW9yeSBzdWJzeXN0ZW1zLCBhbmQgZXZlbiBzZWN1cml0eSBoYXJkZW5pbmcuIFVTRVJGQVVMVEZEIHJlYWxseSBsZXRzIHlvdSBnZXQgZG93biB0byB0aGUgbWV0YWwsIGFuZCBieXBhc3Mgc29tZSBvZiB0aGUgbGF5ZXJzIG9mIGFic3RyYWN0aW9uIHdlIGFyZSBvZnRlbiBmb3JjZWQgdG8gd29yayB3aXRoLiBUaGVyZSBhcmUgdHJhZGUtb2ZmcyBvZiBjb3Vyc2UsIHRoZSBjb21wbGV4aXR5IGNhbiBiZSBhIHBhaW4gaW4gdGhlIGFyc2UuCgpJIHN0YXJ0IHRvIHdvbmRlciBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gV2hhdCYjMzk7cyB0aGUgb3ZlcmhlYWQ/IEhvdyBkb2VzIGl0IGFmZmVjdCBjb250ZXh0IHN3aXRjaGluZz8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcz8gVGhvc2UgYXJlIHRoZSBrZXkgcXVlc3Rpb25zLiBZb3UgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9zZSB0aGluZ3MsIHRvIHNlZSB3aGF0IHRoaXMgdGhpbmcgaXMgcmVhbGx5IGdvaW5nIHRvIGJlIHVzZWZ1bCBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKG1lbnVjb25maWd8Y29uZmlnKSBVU0VSRkFVTFRGRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyNzQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCB1c2VyIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRmluZGluZyBVU0VSRkFVTFRGRCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGxhc2VyLWZvY3VzZWQ6IEkgbmVlZCB0byBsb2NhdGUgdGhlIGRldGFpbHMgb24gYFVTRVJGQVVMVEZEYC4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSwgYW5kIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBhIGZyYW1ld29yayBmb3IgdW5kZXJzdGFuZGluZyBpdC4gVGhlIGdvYWwgaXMgcGlucG9pbnRpbmcgc3BlY2lmaWNzIC0gaXRzIGJlaGF2aW9yLCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIHN5c3RlbSBtZWNoYW5pc21zLCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLi4uIEkmIzM5O20gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHRoZSB2YXJpb3VzIHJlc291cmNlcyBpbiBteSBtaW5kOiBtYW4gcGFnZXMsIGtlcm5lbCBkb2N1bWVudGF0aW9uLCBwYXN0IGV4cGVyaWVuY2VzLCBwZXJoYXBzIGV2ZW4gZGlzY3Vzc2lvbnMgZnJvbSBtYWlsaW5nIGxpc3RzIG9yIHJlbGV2YW50IHByb2plY3RzIEkmIzM5O3ZlIGJlZW4gZm9sbG93aW5nLiBUaGUgY29udGV4dCBpcyBpbXBsaWVkIC0gSSB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgaW52b2x2ZWQsIGFuZCBhbSByZWFkeSB0byBkaXZlIGRlZXAgaW50byBzcGVjaWZpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihtZW51Y29uZmlnfGNvbmZpZykgVVNFUkZBVUxURkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzY4PWNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1Jcbi0tXG5tbS9LY29uZmlnLTEzNzItXG5tbS9LY29uZmlnOjEzNzM6Y29uZmlnIFVTRVJGQVVMVEZEX1JXUFxubW0vS2NvbmZpZy0xMzc0LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctMTM4MS1cbm1tL0tjb25maWc6MTM4MjptZW51Y29uZmlnIFVTRVJGQVVMVEZEXG5tbS9LY29uZmlnLTEzODMtXHRib29sIFwmIzM0O0VuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI2MDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqVVNFUkZBVUxURkQgYW5kIE1lbW9yeSBGYWlsdXJlczogQSBRdWljayBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYFVTRVJGQVVMVEZEYC4gSXQmIzM5O3MgZGVmaW5pdGVseSBhIHZhbHVhYmxlIHRvb2wgaW4gdGhlIGtpdCwgZXNwZWNpYWxseSB3aGVuIGl0IGNvbWVzIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBoYW5kbGluZyBwb3RlbnRpYWwgcGFnZSBmYXVsdHMgYXQgYSBncmFudWxhciBsZXZlbC4gSSBzZWUgaXRzIHV0aWxpdHksIHBhcnRpY3VsYXJseSBpbiBhcHBsaWNhdGlvbnMgd2hlcmUgeW91IG5lZWQgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCwgbWFwcGVkLCBhbmQgaGFuZGxlZC4gSSYjMzk7bSB0aGlua2luZyBvZiBzY2VuYXJpb3MgbGlrZSBjdXN0b20gbWVtb3J5IGFsbG9jYXRvcnMsIHZpcnR1YWwgbWVtb3J5IGltcGxlbWVudGF0aW9ucyB3aXRoaW4gdXNlcnNwYWNlLCBhbmQgZXZlbiBwb3RlbnRpYWxseSBzZWN1cml0eS1mb2N1c2VkIGFwcGxpY2F0aW9ucyB3aGVyZSB5b3UgbmVlZCB0byBjYXJlZnVsbHkgbW9uaXRvciBhbmQgcmVzcG9uZCB0byBtZW1vcnkgYWNjZXNzZXMuCgpOb3csIHRoYXQgc2FpZCwgdGhlIGNvbnRleHQgaXMgTUVNT1JZX0ZBSUxVUkUsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWUgZGVlcGVyIGNvbnNpZGVyYXRpb25zLiBJJiMzOTttIHdvbmRlcmluZyB3aGF0IHRoZSBzcGVjaWZpYyBuYXR1cmUgb2YgdGhlIGZhaWx1cmUgaXMuIElzIGl0IGEgaGFyZHdhcmUgaXNzdWUsIGEgcGFnZSB0YWJsZSBjb3JydXB0aW9uLCBhIHJlc291cmNlIGV4aGF1c3Rpb24gcHJvYmxlbSwgYSBwZXJtaXNzaW9ucyBpc3N1ZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSB0eXBlIG9mIGZhaWx1cmUgd2lsbCBkcml2ZSB0aGUgYXBwcm9wcmlhdGUgcmVzcG9uc2UuIFRoaW5raW5nIGFib3V0IGhvdyBgVVNFUkZBVUxURkRgIGNhbiBhc3Npc3QsIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY29ycmVjdGx5IGltcGxlbWVudCBzaWduYWwgaGFuZGxpbmcgYW5kIHRoZSByaWdodCBmbGFncy4gV2l0aCBgVVNFUkZBVUxURkRgLCBJIGNhbiBkZXNpZ24gYSBjdXN0b20gZXJyb3IgaGFuZGxpbmcgbWVjaGFuaXNtIGZvciB0aGlzIGlzc3VlLgoKV2hhdCYjMzk7cyBjbGVhciB0byBtZSBpcyB0aGF0IGBVU0VSRkFVTFRGRGAgZ2l2ZXMgbWUgdGhlIGFiaWxpdHkgdG8gaW50ZXJjZXB0LCBhbmFseXplLCBhbmQgKmF0dGVtcHQqIHRvIHJlY3RpZnkgbWVtb3J5IGVycm9ycywgdGhvdWdoIEkmIzM5O2xsIGhhdmUgdG8gY29uc2lkZXIgaWYgYW4gYXR0ZW1wdCBpcyB3aXNlIGRlcGVuZGluZyBvbiB0aGUgcm9vdCBjYXVzZSBhbmQgd2hldGhlciByZWNvdmVyeSBpcyBldmVuIHBvc3NpYmxlIG9yIGRlc2lyYWJsZS4gSXQgb3BlbnMgZG9vcnMsIGJ1dCBpdCBhbHNvIGNhcnJpZXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHByb3Blcmx5IG1hbmFnaW5nIHRoZSBwcm9jZXNzJiMzOTtzIG1lbW9yeSBhbmQgc3RhdGUuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIG9mIGNvdXJzZSwgdGhhdCBpZiB0aGUgbWVtb3J5IGlzc3VlIGlzIHRydWx5IGNyaXRpY2FsLCB0aGUgc2FmZXN0IGFwcHJvYWNoIG1pZ2h0IGJlIHRvIHRlcm1pbmF0ZSB0aGUgcHJvY2VzcyBncmFjZWZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKG1lbnVjb25maWd8Y29uZmlnKSBNRU1PUllfRkFJTFVSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NjA9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc2Mi1cbm1tL0tjb25maWc6NzYzOmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NjQtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzA4MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqUmVmbGVjdGluZyBvbiBNZW1vcnkgTWFuYWdlbWVudCBTdHJhdGVnaWVzKioKCkFoLCBgTUVNT1JZX0ZBSUxVUkVgLiBUaGF0JiMzOTtzIGFjdHVhbGx5IGEgcG9zaXRpdmUgc2lnbmFsLCBpc24mIzM5O3QgaXQ/IEl0IG1lYW5zIHRoZSBzeXN0ZW0gaXMgZGV0ZWN0aW5nIGFuZCBoYW5kbGluZyBwb3RlbnRpYWwgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzLCBwcmV2ZW50aW5nIGEgY3Jhc2guIEl0JiMzOTtzIGEga2V5IGRlZmVuc2UgbWVjaGFuaXNtLiBCZXR0ZXIgdG8gZmFpbCBlYXJseSBhbmQgaW5mb3JtYXRpdmVseSB0aGFuIHRvIGhhdmUgYSBzaWxlbnQsIGNhdGFzdHJvcGhpYyBmYWlsdXJlIGRvd24gdGhlIGxpbmUuIFdlIGNhbiBhbmFseXplIHRoZSBjb250ZXh0IG9mIHRoaXMgZmFpbHVyZSBhbmQgaW1wbGVtZW50IGEgcm9idXN0IHN0cmF0ZWd5LgoKQW5kIHRoZW4gd2UgaGF2ZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGl0cyBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzaWduaWZpY2FudGx5IGxhcmdlciBwYWdlIHNpemVzIGhlcmUsIHdoaWNoIGNhbiByZWR1Y2UgVExCIG1pc3NlcyBhbmQgcG90ZW50aWFsbHkgYm9vc3QgbWVtb3J5IGFjY2VzcyB0aW1lcywgcGFydGljdWxhcmx5IGZvciBsYXJnZSBkYXRhc2V0cy4gQnV0IG9mIGNvdXJzZSwgaXQmIzM5O3Mgbm90IGEgc2lsdmVyIGJ1bGxldC4gVGhlcmUgYXJlIHRyYWRlb2Zmcy4gVGhlIHF1ZXN0aW9uIHRoYXQgY29tZXMgdG8gbWluZCBpczogYXJlIHdlIHByb3Blcmx5IGV2YWx1YXRpbmcgdGhlIHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIGlzc3VlcyBhbmQgdGhlIGltcGFjdCBvbiBtZW1vcnkgdXRpbGl6YXRpb24sIGVzcGVjaWFsbHkgaW4gb3VyIHNwZWNpZmljIHdvcmtsb2FkPyBXZSBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb24gdGhlIGJhbGFuY2UgYmV0d2VlbiBwZXJmb3JtYW5jZSBnYWlucyBhbmQgbWVtb3J5IG92ZXJoZWFkLCBlc3BlY2lhbGx5IHdoZW4gd2UgYXJlIGRlYWxpbmcgd2l0aCBzeXN0ZW1zIHRoYXQgbmVlZCBib3RoIHBlcmZvcm1hbmNlIGFuZCBlZmZpY2llbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKG1lbnVjb25maWd8Y29uZmlnKSBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04Mjk9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04MzEtXG5tbS9LY29uZmlnOjgzMjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzMy1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ1NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgRm9jdXMgb24gVHJhbnNwYXJlbnQgSHVnZXBhZ2VzKioKCk9rYXksIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhcmUgZGVmaW5pdGVseSBhIGtleSBhcmVhIG9mIGludGVyZXN0LiBMZXQmIzM5O3Mgc2hhcnBlbiB0aGUgZm9jdXMgb24gc3BlY2lmaWMgc3ltYm9scyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGhlcmU6IGBtbWFwX3plcm9fcHJlcGFyZWAsIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCwgYHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlYCwgYGtzbV9taWdodF9uZWVkX3RvX2NvcHlgLCBgcm1hcF93YWxrX2tzbWAsIGBhZGRfdG9fa2lsbF9mc2RheGAsIGBhZGRfdG9fa2lsbF9wZ29mZmAsIGByZW1vdmVfbWlncmF0aW9uX3B0ZWAsIGBjb3B5X3ZtYV9hbmRfZGF0YWAsIGBtb3ZlX3ByZXNlbnRfcHRlc2AsIGBtb3ZlX3N3YXBfcHRlYCwgYW5kIGByZWxvY2F0ZV92bWFfZG93bmAuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpOb3csIGxldCYjMzk7cyBzZWUgaG93IHJlYWNoYWJsZSB0aGVzZSBmdW5jdGlvbnMgYXJlLiBJIHNlZSB0aGF0IGBtbWFwX3plcm9fcHJlcGFyZWAgaXMgd2l0aGluIGBkcml2ZXJzL2NoYXIvbWVtLmNgLiBBaCwgcmlnaHQsIHRoYXQmIzM5O3MgY2FsbGVkIHdoZW4geW91IG1hcCBgL2Rldi96ZXJvYC4gVGhhdCYjMzk7cyAqdmVyeSogcmVhY2hhYmxlLCBnaXZlbiBob3cgdWJpcXVpdG91cyB0aGF0IGlzLiBgbW92ZV9wYWdlc19odWdlX3BtZGAgaXMgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBhbmQgdGhhdCYjMzk7cyB0cmlnZ2VyZWQgZHVyaW5nIG1yZW1hcCBvZiBUcmFuc3BhcmVudCBIdWdlcGFnZXMsIHdoaWNoIGlzIHBsYXVzaWJsZS4gYHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlYCBpcyBpbiBgbW0va3NtLmNgLCBzbyBpdCYjMzk7cyBLU00gcmVsYXRlZC4gYGNvcHlfdm1hX2FuZF9kYXRhYCBpcyBpbiBgbW0vbXJlbWFwLmNgLiBBbmQgYG1vdmVfcHJlc2VudF9wdGVzYCBhbmQgYG1vdmVfc3dhcF9wdGVgIGFyZSBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIEZpbmFsbHksIGByZWxvY2F0ZV92bWFfZG93bmAgaXMgaW4gYG1tL3ZtYV9leGVjLmNgLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgb24gdGhlIHJlYWNoYWJpbGl0eSBvZiBgcmVsb2NhdGVfdm1hX2Rvd25gLiBJJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoYXQgZnVydGhlciwgYXMgaXQmIzM5O3MgbGVzcyBvYnZpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWxvY2F0ZV92bWFfZG93biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWEuaD04Mzk9aW50IGNyZWF0ZV9pbml0X3N0YWNrX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcbm1tL3ZtYS5oLTg0MC1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgKnRvcF9tZW1fcCk7XG5tbS92bWEuaDo4NDE6aW50IHJlbG9jYXRlX3ZtYV9kb3duKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHNoaWZ0KTtcbm1tL3ZtYS5oLTg0Mi0jZW5kaWZcbi0tXG5tbS92bWFfZXhlYy5jLTIyLSAqL1xubW0vdm1hX2V4ZWMuYzoyMzppbnQgcmVsb2NhdGVfdm1hX2Rvd24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc2hpZnQpXG5tbS92bWFfZXhlYy5jLTI0LXtcbi0tXG5tbS92bWFfZXhlYy5jLTEwMi0gKlxubW0vdm1hX2V4ZWMuYzoxMDM6ICogV2UgbGF0ZXIgcmVsb2NhdGUgdGhpcyBkb3dud2FyZHMgaW4gcmVsb2NhdGVfdm1hX2Rvd24oKS5cbm1tL3ZtYV9leGVjLmMtMTA0LSAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NDg1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgZXhlY3ZlYCBTdGFjayBTZXR1cCoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBgZXhlY3ZlYCBzdGFjayBzZXR1cCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoaW5ncyBnZXQgYXJyYW5nZWQgZHVyaW5nIHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIGEgbmV3IHByb2dyYW0gaW1hZ2UuIFRoZSBjb250ZXh0IHN0cm9uZ2x5IGltcGxpZXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgbG93LWxldmVsIG1lY2hhbmljcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBjcml0aWNhbCBmdW5jdGlvbiwgYG1tYXBfemVyb19wcmVwYXJlYCwgdG8gZnVydGhlciB0aGUgcHJvY2Vzcy4gRnJvbSBleHBlcmllbmNlLCBJIHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBpbml0aWFsaXppbmcgb3IgcHJlcGFyaW5nIG1lbW9yeSByZWdpb25zLCBwYXJ0aWN1bGFybHkgdGhvc2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGFjayBmcmFtZSB0aGF0IHdpbGwgY29udGFpbiBvdXIgYXJndW1lbnRzLCBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGFuZCBhdXhpbGlhcnkgdmVjdG9yLiBUaGF0IGZ1bmN0aW9uJiMzOTtzIGludm9sdmVtZW50IGluIHRoZSBwcm9jZXNzIGZsb3cgaXMga2V5LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tYXBfemVyb19wcmVwYXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9jaGFyL21lbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY2hhci9tZW0uYz00NzQ9c3RhdGljIHNzaXplX3QgcmVhZF96ZXJvKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuLS1cbmRyaXZlcnMvY2hhci9tZW0uYy01MDAtXG5kcml2ZXJzL2NoYXIvbWVtLmM6NTAxOnN0YXRpYyBpbnQgbW1hcF96ZXJvX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbmRyaXZlcnMvY2hhci9tZW0uYy01MDIte1xuLS1cbmRyaXZlcnMvY2hhci9tZW0uYz01MjE9c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3VubWFwcGVkX2FyZWFfemVybyhzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5kcml2ZXJzL2NoYXIvbWVtLmMtNTI2LVx0XHQvKlxuZHJpdmVycy9jaGFyL21lbS5jOjUyNzpcdFx0ICogbW1hcF96ZXJvX3ByZXBhcmUoKSB3aWxsIGNhbGwgc2htZW1femVyb19zZXR1cCgpIHRvIGNyZWF0ZSBhXG5kcml2ZXJzL2NoYXIvbWVtLmMtNTI4LVx0XHQgKiBmaWxlLCBzbyB1c2Ugc2htZW0mIzM5O3MgZ2V0X3VubWFwcGVkX2FyZWEgaW4gY2FzZSBpdCBjYW4gYmVcbi0tXG5kcml2ZXJzL2NoYXIvbWVtLmM9NjYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wcyA9IHtcbi0tXG5kcml2ZXJzL2NoYXIvbWVtLmMtNjY5LVx0LnNwbGljZV93cml0ZVx0PSBzcGxpY2Vfd3JpdGVfemVybyxcbmRyaXZlcnMvY2hhci9tZW0uYzo2NzA6XHQubW1hcF9wcmVwYXJlXHQ9IG1tYXBfemVyb19wcmVwYXJlLFxuZHJpdmVycy9jaGFyL21lbS5jLTY3MS1cdC5nZXRfdW5tYXBwZWRfYXJlYSA9IGdldF91bm1hcHBlZF9hcmVhX3plcm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MDQ3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqVGhlIGAvZGV2L3plcm9gIE1tYXAgUHJlcGFyYXRpb24qKgoKUmlnaHQsIHRoYXQgY29uZmlybXMgaXQuIFRoaXMgaXMgZGVmaW5pdGVseSBhYm91dCB0aGUgYG1tYXBfcHJlcGFyZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aCBgL2Rldi96ZXJvYC4gVGhhdCYjMzk7cyBhIGNvbW1vbiBlbm91Z2ggdXNlIGNhc2UsIGJ1dCB0aGUgbnVhbmNlcyBjYW4gYmUgdHJpY2t5LgoKTm93LCBteSBmb2N1cyBzaG91bGQgc2hpZnQgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIGBjb3B5X3ZtYV9hbmRfZGF0YWAgZnVuY3Rpb24gaW50ZXJhY3RzIGluIHRoaXMgY29udGV4dC4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgaWYgdGhlcmUmIzM5O3MgYW55IGltcGxpY2l0IGRhdGEgY29weWluZywgbWVtb3J5IGFsbG9jYXRpb24gb3IgYW55IG90aGVyIGRhdGEgaGFuZGxpbmcgc3RlcHMgaW4gdGhlcmUuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIGAvZGV2L3plcm9gIGJlY2F1c2Ugd2UgZXhwZWN0IHplcm9lZCBtZW1vcnksIHNvIEkgbmVlZCB0byBjaGVjayBob3cgdGhlIFZNQXMgYW5kIGRhdGEgYXJlIGhhbmRsZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGlzIG1haW50YWluZWQuIEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIG1lY2hhbmljcyBpbnZvbHZlZC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgaXMgYWxpZ25lZCB3aXRoIHRoZSBleHBlY3RlZCBvdXRjb21lOiB6ZXJvZWQgcGFnZXMgd2hlbiBtYXBwaW5nIGAvZGV2L3plcm9gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3B5X3ZtYV9hbmRfZGF0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21yZW1hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21yZW1hcC5jPTExNjA9c3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuLS1cbm1tL21yZW1hcC5jLTEyNjQtICovXG5tbS9tcmVtYXAuYzoxMjY1OnN0YXRpYyBpbnQgY29weV92bWFfYW5kX2RhdGEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSxcbm1tL21yZW1hcC5jLTEyNjYtXHRcdFx0ICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKipuZXdfdm1hX3B0cilcbi0tXG5tbS9tcmVtYXAuYz0xMzUwPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1vdmVfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4tLVxubW0vbXJlbWFwLmMtMTM3MS1cdC8qIFBlcmZvcm0gY29weSBzdGVwLiAqL1xubW0vbXJlbWFwLmM6MTM3MjpcdGVyciA9IGNvcHlfdm1hX2FuZF9kYXRhKHZybSwgXHUwMDI2bmV3X3ZtYSk7XG5tbS9tcmVtYXAuYy0xMzczLVx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU1NzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gbXJlbWFwKioKCk9rYXksIEkmIzM5O3ZlIGJlZW4gY2FsbGVkIGR1cmluZyBgbXJlbWFwYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIGF0IHRoaXMgcG9pbnQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGxvZ2ljLiBTaW5jZSBJJiMzOTttIGluIGBtcmVtYXBgLCB0aGUgbWFpbiBmb2N1cyBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgYXJvdW5kIGhhbmRsaW5nIHRoZSBtYXBwaW5nIGNoYW5nZXMgYW5kIHBvdGVudGlhbGx5IG1vdmluZyBvciBhZGp1c3RpbmcgcGFnZSB0YWJsZSBlbnRyaWVzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGBtb3ZlX3ByZXNlbnRfcHRlc2AuIFRoYXQgZnVuY3Rpb24gaGFzIGEgaGlnaCBsaWtlbGlob29kIG9mIHRlbGxpbmcgbWUgYSBsb3QgYWJvdXQgaG93IHRoZXNlIG1lbW9yeSByZWdpb25zIGFyZSBiZWluZyByZWFycmFuZ2VkLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHdlJiMzOTtyZSBzaGlmdGluZyBhcm91bmQgZXhpc3RpbmcgcGh5c2ljYWwgcGFnZXMsIGNyZWF0aW5nIG5ldyBvbmVzLCBvciB1cGRhdGluZyB2aXJ0dWFsIGFkZHJlc3Nlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW92ZV9wcmVzZW50X3B0ZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmM9MTI4MD1zdGF0aWMgc3RydWN0IGZvbGlvICpjaGVja19wdGVzX2Zvcl9iYXRjaGVkX21vdmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTMwOC0gKi9cbm1tL3VzZXJmYXVsdGZkLmM6MTMwOTpzdGF0aWMgbG9uZyBtb3ZlX3ByZXNlbnRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL3VzZXJmYXVsdGZkLmMtMTMxMC1cdFx0XHQgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xNTAzPXN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTY3Ni1cbm1tL3VzZXJmYXVsdGZkLmM6MTY3NzpcdFx0cmV0ID0gbW92ZV9wcmVzZW50X3B0ZXMobW0sIGRzdF92bWEsIHNyY192bWEsXG5tbS91c2VyZmF1bHRmZC5jLTE2NzgtXHRcdFx0XHRcdGRzdF9hZGRyLCBzcmNfYWRkciwgZHN0X3B0ZSwgc3JjX3B0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBVRkZESU9fTU9WRSBDYWxsKioKCkFscmlnaHQsIHNvIHRoZSBjYWxsIGNhbWUgaW4gZHVyaW5nIGBVRkZESU9fTU9WRWAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayBgdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2VgLiBHaXZlbiB0aGUgY29udGV4dCwgdGhpcyBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgbWVyZ2UgYXR0ZW1wdCBpcyBiZWluZyB0cmlnZ2VyZWQgZHVyaW5nIGEgbW92ZSBvcGVyYXRpb24uIElzIHRoaXMgZXhwZWN0ZWQgYmVoYXZpb3I/IEFyZSB3ZSBvcHRpbWl6aW5nIHNvbWV0aGluZz8gT3IgaXMgdGhlcmUgYSBwb3RlbnRpYWwgY29ybmVyIGNhc2Ugb3IgaXNzdWUgdGhhdCBuZWVkcyBhZGRyZXNzaW5nIGhlcmU/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGZvY3VzaW5nIG9uIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgbWVyZ2UgaXMgYmVpbmcgYXR0ZW1wdGVkLCB0aGUgZGF0YSBiZWluZyBwYXNzZWQsIGFuZCB0aGUgb3V0Y29tZSBvZiB0aGUgZnVuY3Rpb24uIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va3NtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va3NtLmM9MTU2MT1zdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuLS1cbm1tL2tzbS5jLTE1OTUtLypcbm1tL2tzbS5jOjE1OTY6ICogdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2UgLSBsaWtlIHRyeV90b19tZXJnZV90d29fcGFnZXMsXG5tbS9rc20uYy0xNTk3LSAqIGJ1dCBubyBuZXcga2VybmVsIHBhZ2UgaXMgYWxsb2NhdGVkOiBrcGFnZSBtdXN0IGFscmVhZHkgYmUgYSBrc20gcGFnZS5cbi0tXG5tbS9rc20uYy0xNjAwLSAqL1xubW0va3NtLmM6MTYwMTpzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0sXG5tbS9rc20uYy0xNjAyLVx0XHRcdFx0ICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBwYWdlICprcGFnZSlcbi0tXG5tbS9rc20uYy0xNjQ1LSAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHVwZ3JhZGVzIHBhZ2UgdG8ga3NtIHBhZ2U6IGlmIG9uZSBvZiB0aGUgcGFnZXNcbm1tL2tzbS5jOjE2NDY6ICogaXMgYWxyZWFkeSBhIGtzbSBwYWdlLCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZSBzaG91bGQgYmUgdXNlZC5cbm1tL2tzbS5jLTE2NDctICovXG5tbS9rc20uYz0xNjQ4PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnRyeV90b19tZXJnZV90d29fcGFnZXMoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSxcbi0tXG5tbS9rc20uYy0xNjU0LVxubW0va3NtLmM6MTY1NTpcdGVyciA9IHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlKHJtYXBfaXRlbSwgcGFnZSwgTlVMTCk7XG5tbS9rc20uYy0xNjU2LVx0aWYgKCFlcnIpIHtcbm1tL2tzbS5jOjE2NTc6XHRcdGVyciA9IHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlKHRyZWVfcm1hcF9pdGVtLFxubW0va3NtLmMtMTY1OC1cdFx0XHRcdFx0XHRcdHRyZWVfcGFnZSwgcGFnZSk7XG4tLVxubW0va3NtLmM9MjI3OD1zdGF0aWMgdm9pZCBjbXBfYW5kX21lcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0pXG4tLVxubW0va3NtLmMtMjMzOC1cbm1tL2tzbS5jOjIzMzk6XHRcdGVyciA9IHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlKHJtYXBfaXRlbSwgcGFnZSwgXHUwMDI2a2ZvbGlvLVx1MDAzZXBhZ2UpO1xubW0va3NtLmMtMjM0MC1cdFx0aWYgKCFlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY4NjcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEtTTSBNZXJnZSBDb250ZXh0KioKClJpZ2h0LCB0aGF0IHBob25lIGNhbGwganVzdCBjYW1lIGluIHJlZ2FyZGluZyB0aGUgS1NNIG1lcmdpbmcgcHJvY2Vzcy4gSXQgc2VlbXMgdGhpcyBhcm9zZSBkdXJpbmcgYSBjcnVjaWFsIHBvaW50LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBhZGRfdG9fa2lsbF9mc2RheGAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBzcG90IHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGludGVyYWN0aW9ucyB3aXRoIHRoZSBzcGVjaWZpYyBLU00gbWVyZ2UgYWN0aXZpdHkuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZmlsZXN5c3RlbSBEQVggaGVyZSwgc28gYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IgdGhlcmUgZHVyaW5nIG1lcmdpbmcgaXMgZGVmaW5pdGVseSB3b3J0aCBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbi4gSXQmIzM5O3MgdGltZSB0byBjaGVjayB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggaG93IHdlJiMzOTtyZSBraWxsaW5nIG9yIGRpc2FibGluZyBGU0RheCBwYWdlcyBhbmQgc2VlIGlmIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHByb2JsZW0gaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkZF90b19raWxsX2ZzZGF4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTU4Mj1zdGF0aWMgdm9pZCBjb2xsZWN0X3Byb2NzX2ZpbGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTYxOC0jaWZkZWYgQ09ORklHX0ZTX0RBWFxubW0vbWVtb3J5LWZhaWx1cmUuYzo2MTk6c3RhdGljIHZvaWQgYWRkX3RvX2tpbGxfZnNkYXgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGNvbnN0IHN0cnVjdCBwYWdlICpwLFxubW0vbWVtb3J5LWZhaWx1cmUuYy02MjAtXHRcdFx0ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz02MzA9c3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19mc2RheChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTY1Mi1cdFx0XHRpZiAodm1hLVx1MDAzZXZtX21tID09IHQtXHUwMDNlbW0pXG5tbS9tZW1vcnktZmFpbHVyZS5jOjY1MzpcdFx0XHRcdGFkZF90b19raWxsX2ZzZGF4KHQsIHBhZ2UsIHZtYSwgdG9fa2lsbCwgcGdvZmYpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy02NTQtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzczMTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7bSB0YWxraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIEZpbGVzeXN0ZW0gREFYIE1lbW9yeSBGYWlsdXJlKioKClJpZ2h0LCBzbyBJIGdvdCB0aGUgY2FsbDsgaXQmIzM5O3MgYSBtZW1vcnkgZmFpbHVyZSBvbiBGUyBEQVguIE9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBhZGRfdG9fa2lsbF9wZ29mZmAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBwb2tpbmcgYXJvdW5kIHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBlcnJvcnMsIHNwZWNpZmljYWxseSBpbiB0aGlzIERBWCBjb250ZXh0LiBXZSYjMzk7cmUgb2J2aW91c2x5IGluIGEgY3JpdGljYWwgc2l0dWF0aW9uLCBzbyBsZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWNzIG9mIGZpZ3VyaW5nIG91dCB3aGF0IGNhdXNlZCB0aGUgbWVtb3J5IGZhaWx1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkZF90b19raWxsX3Bnb2ZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTIyNTI9RVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9wZm5fYWRkcmVzc19zcGFjZSk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyNTMtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIyNTQ6c3RhdGljIHZvaWQgYWRkX3RvX2tpbGxfcGdvZmYoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyNTUtXHRcdFx0ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMjgzPXN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfcGZuKHN0cnVjdCBwZm5fYWRkcmVzc19zcGFjZSAqcGZuX3NwYWNlLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjMwMi1cdFx0XHQgICAgIXBmbl9zcGFjZS1cdTAwM2VwZm5fdG9fdm1hX3Bnb2ZmKHZtYSwgcGZuLCBcdTAwMjZwZ29mZikpXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIzMDM6XHRcdFx0XHRhZGRfdG9fa2lsbF9wZ29mZih0LCB2bWEsIHRvX2tpbGwsIHBnb2ZmKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjMwNC1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzc3OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIFBGTiBNYXBwaW5nIE1lbW9yeSBGYWlsdXJlKioKClJpZ2h0LCBzbyB3ZSYjMzk7dmUgaGl0IGFuIGVycm9yIGR1cmluZyBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5LCB3ZSYjMzk7dmUgYmVlbiBjYWxsZWQgZHVlIHRvIGEgZmFpbHVyZSBpbnZvbHZpbmcgUGFnZSBGcmFtZSBOdW1iZXIgKFBGTikgbWFwcGluZ3MuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCB0aGUgZXhhY3Qgcm91dGluZSBpbnZvbHZlZCBpbiByZW1vdmluZyB0aGVzZSBtYXBwaW5ncy4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBmdW5jdGlvbiBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgIGlzIHRoZSBsaWtlbHkgY3VscHJpdCwgb3IgYXQgbGVhc3QgYSBrZXkgY29tcG9uZW50IGluIHRoZSBwcm9ibGVtLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24mIzM5O3MgaW1wbGVtZW50YXRpb24gYW5kIGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRoZSBQRk4gbWFwcGluZ3MgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvbmUgd3JvbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlbW92ZV9taWdyYXRpb25fcHRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYz0yOTk9c3RhdGljIGJvb2wgdHJ5X3RvX21hcF91bnVzZWRfdG9femVyb3BhZ2Uoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuLS1cbm1tL21pZ3JhdGUuYy0zMzItXG5tbS9taWdyYXRlLmM6MzMzOlx0LyogU2VlIHJlbW92ZV9taWdyYXRpb25fcHRlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cbm1tL21pZ3JhdGUuYy0zMzQtXHRpZiAocHRlX3N3cF91ZmZkKG9sZF9wdGUpIFx1MDAyNlx1MDAyNiB1c2VyZmF1bHRmZF9yd3AocHZtdy1cdTAwM2V2bWEpKVxuLS1cbm1tL21pZ3JhdGUuYz0zNDM9c3RydWN0IHJtYXBfd2Fsa19hcmcge1xuLS1cbm1tL21pZ3JhdGUuYy0zNTAtICovXG5tbS9taWdyYXRlLmM6MzUxOnN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9taWdyYXRlLmMtMzUyLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICphcmcpXG4tLVxubW0vbWlncmF0ZS5jLTQ1NS1cbm1tL21pZ3JhdGUuYzo0NTY6XHRcdHRyYWNlX3JlbW92ZV9taWdyYXRpb25fcHRlKHB2bXcuYWRkcmVzcywgcHRlX3ZhbChwdGUpLFxubW0vbWlncmF0ZS5jLTQ1Ny1cdFx0XHRcdFx0ICAgY29tcG91bmRfb3JkZXIobmV3KSk7XG4tLVxubW0vbWlncmF0ZS5jLTQ2OS0gKi9cbm1tL21pZ3JhdGUuYzo0NzA6dm9pZCByZW1vdmVfbWlncmF0aW9uX3B0ZXMoc3RydWN0IGZvbGlvICpzcmMsIHN0cnVjdCBmb2xpbyAqZHN0LFxubW0vbWlncmF0ZS5jLTQ3MS1cdFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vbWlncmF0ZS5jLTQ3OC1cdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XG5tbS9taWdyYXRlLmM6NDc5Olx0XHQucm1hcF9vbmUgPSByZW1vdmVfbWlncmF0aW9uX3B0ZSxcbm1tL21pZ3JhdGUuYy00ODAtXHRcdC5hcmcgPSBcdTAwMjZybWFwX3dhbGtfYXJnLFxuLS1cbm1tL21pZ3JhdGUuYz0xMTc3PXN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9fdW5kb19zcmMoc3RydWN0IGZvbGlvICpzcmMsIGludCB3YXNfbWFwcGVkLFxuLS1cbm1tL21pZ3JhdGUuYy0xMTgwLVx0aWYgKHdhc19tYXBwZWQpXG5tbS9taWdyYXRlLmM6MTE4MTpcdFx0cmVtb3ZlX21pZ3JhdGlvbl9wdGVzKHNyYywgc3JjLCAwKTtcbm1tL21pZ3JhdGUuYy0xMTgyLVx0LyogRHJvcCBhbiBhbm9uX3ZtYSByZWZlcmVuY2UgaWYgd2UgdG9vayBvbmUgKi9cbi0tXG5tbS9taWdyYXRlLmM9MTM2Nz1zdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fbW92ZShmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLS1cbm1tL21pZ3JhdGUuYy0xNDEwLVx0ICogV2hlbiBzdWNjZXNzZnVsLCBwdXNoIGRzdCB0byBMUlUgaW1tZWRpYXRlbHk6IHNvIHRoYXQgaWYgaXRcbm1tL21pZ3JhdGUuYzoxNDExOlx0ICogdHVybnMgb3V0IHRvIGJlIGFuIG1sb2NrZWQgcGFnZSwgcmVtb3ZlX21pZ3JhdGlvbl9wdGVzKCkgd2lsbFxubW0vbWlncmF0ZS5jLTE0MTItXHQgKiBhdXRvbWF0aWNhbGx5IGJ1aWxkIHVwIHRoZSBjb3JyZWN0IGRzdC1cdTAwM2VtbG9ja19jb3VudCBmb3IgaXQuXG4tLVxubW0vbWlncmF0ZS5jLTE0MjItXHRpZiAob2xkX2ZvbGlvX3N0YXRlIFx1MDAyNiBGT0xJT19XQVNfTUFQUEVEKVxubW0vbWlncmF0ZS5jOjE0MjM6XHRcdHJlbW92ZV9taWdyYXRpb25fcHRlcyhzcmMsIGRzdCwgMCk7XG5tbS9taWdyYXRlLmMtMTQyNC1cbi0tXG5tbS9taWdyYXRlLmM9MTQ4ND1zdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2V0bGJfZm9saW8obmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMTU1Ni1cdGlmICh3YXNfbWFwcGVkKVxubW0vbWlncmF0ZS5jOjE1NTc6XHRcdHJlbW92ZV9taWdyYXRpb25fcHRlcyhzcmMsICFyYyA/IGRzdCA6IHNyYywgdHR1KTtcbm1tL21pZ3JhdGUuYy0xNTU4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODgxNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgTWlncmF0aW9uIENhbGxiYWNrKioKCkFscmlnaHQsIHRoYXQmIzM5O3MgcmlnaHQsIHRoZSB0cmlnZ2VyIGhhcHBlbmVkIGR1cmluZyBhIHBhZ2UgbWlncmF0aW9uLCBJJiMzOTttIG5vdGluZyB0aGF0IGRvd24uIFNvLCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbnRvIGBfX2luc3RhbGxfc3BlY2lhbF9tYXBwaW5nYC4gVGhhdCBmdW5jdGlvbiBpcyBjcml0aWNhbCBoZXJlLiBJdCBoYXMgdG8gYmUgLSB0aGlzIGlzIHdoZXJlIHdlJiMzOTtsbCBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBtZW1vcnkgcmVtYXBwaW5nIGR1cmluZyB0aGUgcGFnZSBtaWdyYXRpb24gcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3Igd2lsbCBiZSBrZXkgdG8gZGVjaXBoZXJpbmcgd2hhdOKAmXMgaGFwcGVuaW5nLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgZWRnZSBjYXNlcywgZGVwZW5kaW5nIG9uIGhvdyB0aGlzIGluc3RhbGxhdGlvbiB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pbnN0YWxsX3NwZWNpYWxfbWFwcGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYS5jPTM0ODE9X193ZWFrIHVuc2lnbmVkIGxvbmcgdm1hX21tdV9wYWdlc2l6ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS92bWEuYy0zNDg1LVxubW0vdm1hLmM6MzQ4NjpzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKl9faW5zdGFsbF9zcGVjaWFsX21hcHBpbmcoXG5tbS92bWEuYy0zNDg3LVx0c3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTE0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEtlcm5lbCBWTSBTZXR1cCBhbmQgUmVsYXRlZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBrZXJuZWwgc2V0dXAgYW5kIHJlY2FsbCB0aGF0IHRoaXMgaXMgYWxsIGhhcHBlbmluZyBkdXJpbmcgdGhlIGB2ZHNvL3Z2YXJgIHNldHVwLiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IGludG8gaXQsIEkmIzM5O3ZlIGdvdCBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBoZXJlLiBJJiMzOTttIHNlZWluZzogYG1tYXBfemVyb19wcmVwYXJlYCwgd2hpY2ggbWFrZXMgc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgbWVtb3J5IG1hcHBpbmcuIFRoZW4gd2UmIzM5O3ZlIGdvdCBhIGNsdXN0ZXIgb2Ygc3ltYm9scyByZWxhdGVkIHRvIGh1Z2UgcGFnZXMgYW5kIHBhZ2UgbWlncmF0aW9uOiBgbW92ZV9wYWdlc19odWdlX3BtZGAsIGB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZWAsIGBrc21fbWlnaHRfbmVlZF90b19jb3B5YCwgYHJtYXBfd2Fsa19rc21gLCBgYWRkX3RvX2tpbGxfZnNkYXhgLCBgYWRkX3RvX2tpbGxfcGdvZmZgLCBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgLCBgY29weV92bWFfYW5kX2RhdGFgLCBgbW92ZV9wcmVzZW50X3B0ZXNgLCBgbW92ZV9zd2FwX3B0ZWAsIGByZWxvY2F0ZV92bWFfZG93bmAsIGFuZCBmaW5hbGx5LCB0aGUgcmF0aGVyIGdlbmVyaWMtc291bmRpbmcsIGJ1dCBwcm9iYWJseSBjcml0aWNhbCwgYF9faW5zdGFsbF9zcGVjaWFsX21hcHBpbmdgLiBTZWVtcyBsaWtlIGEgcmF0aGVyIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgbWVtb3J5IG1hbmFnZW1lbnQgdGFza3MuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgc2VlIGBLU01gLCBgVVNFUkZBVUxURkRgLCBgTUVNT1JZX0ZBSUxVUkVgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYE1JR1JBVElPTmAuIEdpdmVuIHRoZSBmb2N1cyBzeW1ib2xzLCB0aGVzZSBtYWtlIGEgbG90IG9mIHNlbnNlLCByaWdodD8gS1NNIGlzIG9idmlvdXNseSBsaW5rZWQgdG8gdGhlIEtTTSBmdW5jdGlvbnMuIFVzZXJmYXVsdGZkIGlzIGFuIGludGVyZXN0aW5nIGluY2x1c2lvbiwgaXQgbWF5IGJlIHVzZWQgdG8gaGFuZGxlIHRyYW5zcGFyZW50IHBhZ2UgZmF1bHRzIGFuZCBtZW1vcnkgZmF1bHRzIGFuZCB0aWUgaW50byB0aGUgY29weS1vbi13cml0ZSBmdW5jdGlvbmFsaXR5LiBNZW1vcnkgZmFpbHVyZXMgYXJlIGdvaW5nIHRvIGJlIGtleSwgYW5kIG9mIGNvdXJzZSB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLCBhbmQgbWlncmF0aW9uIHNlZW0gdG8gYmUgaW50ZXJ0d2luZWQgd2l0aCB0aGUgZm9jdXMgc3ltYm9scyByZWxhdGVkIHRvIG1vdmluZyBwYWdlcyBhcm91bmQuCgpMZXQgbWUganVzdCBkb3VibGUgY2hlY2sgYE1JR1JBVElPTmAgY29uZmlnIHJlYWwgcXVpY2suIEl0JiMzOTtzIGNydWNpYWwgZm9yIHRoZSBzeW1ib2xzIHRoYXQgc2VlbSB0byBiZSBkb2luZyB0aGUgaGVhdnkgbGlmdGluZyBhcm91bmQgbWVtb3J5IG1hbmlwdWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihtZW51Y29uZmlnfGNvbmZpZykgTUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTY3MT1jb25maWcgTlVNQV9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTY4MS1cbm1tL0tjb25maWc6NjgyOmNvbmZpZyBNSUdSQVRJT05cbm1tL0tjb25maWctNjgzLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTg0NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipNaWdyYXRpb24gYW5kIEZTX0RBWCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBtaWdyYXRpb24gaXMgZGVmaW5pdGVseSBhIHBvc2l0aXZlIHRoaW5nLiBJdCYjMzk7cyBhIGtleSBzdHJhdGVneSB0byBpbXBsZW1lbnQgaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGRvaW5nIGEgZ29vZCBqb2IuCgpCdXQgYmVmb3JlIEkgcHJvY2VlZCB0b28gZmFyIGRvd24gdGhhdCBwYXRoLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9mIGBGU19EQVhgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBsb29rIGF0IGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgYGFkZF90b19raWxsX2ZzZGF4YC4gSSYjMzk7dmUgcHJvYmFibHkgd29ya2VkIHdpdGggdGhpcyBtYW55IHRpbWVzIGJlZm9yZSBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSBpdCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSwgYmVjYXVzZSB0aGUgY29uZmlndXJhdGlvbiB3aWxsIGFmZmVjdCBob3cgZWZmZWN0aXZlIHRoaXMgbWlncmF0aW9uIHdpbGwgYmUuIFNvIGxldCYjMzk7cyBtYWtlIHN1cmUgaXQmIzM5O3Mgc2V0IGFwcHJvcHJpYXRlbHkuIEdvdHRhIGRvdCB0aGUgaSYjMzk7cyBhbmQgY3Jvc3MgdGhlIHQmIzM5O3MgYmVmb3JlIHdlIG1ha2UgYW55IG1vdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14obWVudWNvbmZpZ3xjb25maWcpIEZTX0RBWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2RheC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAwOTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTG9jYXRpbmcgdGhlIGBGU19EQVhgIEtleSoqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBwcm9tcHQgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bSBlc3NlbnRpYWxseSBiZWluZyBhc2tlZCB0byBsb2NhdGUgb3IgaWRlbnRpZnkgc29tZXRoaW5nLCBhbmQgdGhlIGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgRlNfREFYYC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB2YXJpb3VzIGNvbnRleHRzIHdoZXJlIHRoaXMgaWRlbnRpZmllciBpcyBsaWtlbHkgdG8gYXBwZWFyLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW1zLCBwb3NzaWJseSBkYXRhIGFjY2VzcywgYW5kIGxpa2VseSBpbnZvbHZlcyBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9yIGFic3RyYWN0aW9uIGxheWVyLiBUaGUgaW1tZWRpYXRlIGdvYWwgaXMgY2xlYXI6IHBpbnBvaW50IHdoYXQgYEZTX0RBWGAgcmVwcmVzZW50cyB3aXRoaW4gdGhlIGN1cnJlbnQgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNpZ25pZmljYW5jZSBhbmQgaW50ZW5kZWQgdXNlIG9mIHRoaXMga2V5LiBNeSBhcHByb2FjaCB3b3VsZCBiZSB0byBzdGFydCBidWlsZGluZyBhIG1lbnRhbCBtYXA7IHdoYXQgYXJlIHRoZSBsaWtlbHkgY29tcG9uZW50cyB0aGlzIGlkZW50aWZpZXIgcmVmZXJlbmNlcz8gSXMgaXQgYSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciwgYSBtYWNybywgYSBzeW1ib2xpYyBjb25zdGFudCwgb3IgbWF5YmUgZXZlbiBhIHNwZWNpZmljIGZ1bmN0aW9uIG5hbWU/IFRoZSBjb250ZXh0IGlzIHdoYXQmIzM5O3MgaW1wb3J0YW50IGhlcmUuIFRoZSBzZWFyY2ggYmVnaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKG1lbnVjb25maWd8Y29uZmlnKSBGU19EQVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz01Nj1lbmRpZiAjIEJMT0NLXG5mcy9LY29uZmlnLTU3LVxuZnMvS2NvbmZpZzo1ODpjb25maWcgRlNfREFYXG5mcy9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtGaWxlIHN5c3RlbSBiYXNlZCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9LY29uZmlnLTg5LVxuZnMvS2NvbmZpZzo5MDpjb25maWcgRlNfREFYX1BNRFxuZnMvS2NvbmZpZy05MS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA0NTUKCQkJCQkJCW91dHB1dDogMjQ3CgkJCQkJCQl0aG91Z2h0czogNDAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHBhdGNoLiBgRlNfREFYYCBpcyBhIGdvb2Qgc2lnbiDigJMgdGhhdCYjMzk7cyBjZW50cmFsIHRvIGhvdyB0aGlzIHdvcmtzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGNvbmZpZ3VyYXRpb24gc3VtbWFyeTogSSYjMzk7bSBzZWVpbmcgaW50ZXJhY3Rpb25zIHdpdGggYEtTTWAsIGBVU0VSRkFVTFRGRGAsIGBNRU1PUllfRkFJTFVSRWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBNSUdSQVRJT05gLCBhbmQsIG9mIGNvdXJzZSwgYEZTX0RBWGAuCgpJIHNraW1tZWQgZm9yIG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbmZpZ3MsIGp1c3QgaW4gY2FzZS4gYERFVlBPUlRgIGFuZCBgQ09ORklHXzY0QklUYCBkb24mIzM5O3Qgc2VlbSBkaXJlY3RseSBjb25uZWN0ZWQgdG8gdGhlIGNoYW5nZXMsIHNvIEkmIzM5O2xsIGlnbm9yZSB0aG9zZS4KCk5vdywgbGV0JiMzOTtzIHJlZmluZSB0aGUgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyDigJMgdGhlIGtleSBmdW5jdGlvbiBjYWxscyB0byBwaW5wb2ludDoKKiAgIGBtbWFwX3plcm9fcHJlcGFyZWA6IFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGAvZGV2L3plcm9gIG1hcHBpbmcgYWx0ZXJhdGlvbiwgc28gaXQmIzM5O3MgYSBncmVhdCBjaG9pY2UuCiogICBgdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2VgIGFuZCBgcm1hcF93YWxrX2tzbWA6IEkgZXhwZWN0IEtTTSBpbnRlcmFjdGlvbnMgdG8gYmUgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQuCiogICBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgOiBNaWdyYXRpb24gY2hhbmdlcyBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBtYXBwaW5ncyBhcmUgaGFuZGxlZC4KKiAgIGBjb3B5X3ZtYV9hbmRfZGF0YWA6IFRoYXQgc291bmRzIGxpa2UgbXJlbWFwIGlzIGludm9sdmVkLCBzbyB0aGlzIG5lZWRzIHRvIGJlIGludmVzdGlnYXRlZC4KKiAgIGBtb3ZlX3ByZXNlbnRfcHRlc2A6IFNvdW5kcyBsaWtlIGl0IHdpbGwgcmVsYXRlIHRvIHVzZXJmYXVsdGZkLgoqICAgYHJlbG9jYXRlX3ZtYV9kb3duYDogVGhpcyBtaWdodCBiZSBpbnZvbHZlZCB3aXRoIGV4ZWN2ZSwgc28gd29ydGggbG9va2luZyBhdC4KClRoaXMgRm9jdXNTeW1ib2xzIGxpc3QgaXMgcmVhbGx5IHdlbGwtZGVmaW5lZC4gSSYjMzk7bSBoYXBweSB3aXRoIHRoaXMuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSBtZW1vcnkgbWFuYWdlbWVudCB0byB0cmVhdCBgTUFQX1BSSVZBVEVgIG1hcHBpbmdzIG9mIGAvZGV2L3plcm9gIGFzICp0cnVseSogYW5vbnltb3VzIG1lbW9yeSwgaW5zdGVhZCBvZiBmaWxlLWJhY2tlZC4gSXQmIzM5O3MgdXNpbmcgdmlydHVhbCBwYWdlIG9mZnNldHMgdG8gdHJhY2sgYW5kIG1lcmdlIHRoZXNlIG1hcHBpbmdzLiBUaGlzIHRvdWNoZXMgYSBsb3Qgb2Ygb3RoZXIgYXJlYXM6IEtTTSwgbWlncmF0aW9uLCBtcmVtYXAsIHVzZXJmYXVsdGZkLCBhbmQgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBmdW5jdGlvbnMgbGlrZSBgbW1hcGAsIGBtcmVtYXBgLCBgdXNlcmZhdWx0ZmRgLCBldGMuLCB3aGljaCBtZWFucyBmdXp6aW5nIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudC4KCk9rYXksIHRoaXMgaGFzIGdvbmUgdmVyeSB3ZWxsLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1NNJiMzNDssCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7LAogICAgJiMzNDtGU19EQVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttbWFwX3plcm9fcHJlcGFyZSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZSYjMzQ7LAogICAgJiMzNDtybWFwX3dhbGtfa3NtJiMzNDssCiAgICAmIzM0O3JlbW92ZV9taWdyYXRpb25fcHRlJiMzNDssCiAgICAmIzM0O2NvcHlfdm1hX2FuZF9kYXRhJiMzNDssCiAgICAmIzM0O21vdmVfcHJlc2VudF9wdGVzJiMzNDssCiAgICAmIzM0O3JlbG9jYXRlX3ZtYV9kb3duJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0byBoYW5kbGUgTUFQX1BSSVZBVEUgbWFwcGluZ3Mgb2YgL2Rldi96ZXJvIGFzIHRydWx5IGFub255bW91cyBtYXBwaW5ncywgcmF0aGVyIHRoYW4gZmlsZS1iYWNrZWQgbWFwcGluZ3Mgd2l0aCBhIHNwZWNpYWwgZmxhZy4gSXQgaW50cm9kdWNlcyB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0cyBmb3IgVk1BcyB0byBjb3JyZWN0bHkgdHJhY2sgYW5kIG1lcmdlIHRoZXNlIG1hcHBpbmdzLiBUaGlzIGFmZmVjdHMgdmFyaW91cyBtbSBzdWJzeXN0ZW1zIGluY2x1ZGluZyBLU00sIG1pZ3JhdGlvbiwgbXJlbWFwLCB1c2VyZmF1bHRmZCwgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtbWFwLCBtcmVtYXAsIHVzZXJmYXVsdGZkLCBldGMuLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tTTSYjMzQ7LAogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OywKICAgICYjMzQ7RlNfREFYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW1hcF96ZXJvX3ByZXBhcmUmIzM0OywKICAgICYjMzQ7dHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2UmIzM0OywKICAgICYjMzQ7cm1hcF93YWxrX2tzbSYjMzQ7LAogICAgJiMzNDtyZW1vdmVfbWlncmF0aW9uX3B0ZSYjMzQ7LAogICAgJiMzNDtjb3B5X3ZtYV9hbmRfZGF0YSYjMzQ7LAogICAgJiMzNDttb3ZlX3ByZXNlbnRfcHRlcyYjMzQ7LAogICAgJiMzNDtyZWxvY2F0ZV92bWFfZG93biYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdG8gaGFuZGxlIE1BUF9QUklWQVRFIG1hcHBpbmdzIG9mIC9kZXYvemVybyBhcyB0cnVseSBhbm9ueW1vdXMgbWFwcGluZ3MsIHJhdGhlciB0aGFuIGZpbGUtYmFja2VkIG1hcHBpbmdzIHdpdGggYSBzcGVjaWFsIGZsYWcuIEl0IGludHJvZHVjZXMgdmlydHVhbCBwYWdlIG9mZnNldHMgZm9yIFZNQXMgdG8gY29ycmVjdGx5IHRyYWNrIGFuZCBtZXJnZSB0aGVzZSBtYXBwaW5ncy4gVGhpcyBhZmZlY3RzIHZhcmlvdXMgbW0gc3Vic3lzdGVtcyBpbmNsdWRpbmcgS1NNLCBtaWdyYXRpb24sIG1yZW1hcCwgdXNlcmZhdWx0ZmQsIGFuZCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbW1hcCwgbXJlbWFwLCB1c2VyZmF1bHRmZCwgZXRjLiwgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NDc6MzYuMzkzOTI4MzI1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgwMTc5ODQ4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1NNXCIsXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNSUdSQVRJT05cIixcbiAgICBcIkZTX0RBWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1tYXBfemVyb19wcmVwYXJlXCIsXG4gICAgXCJ0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZVwiLFxuICAgIFwicm1hcF93YWxrX2tzbVwiLFxuICAgIFwicmVtb3ZlX21pZ3JhdGlvbl9wdGVcIixcbiAgICBcImNvcHlfdm1hX2FuZF9kYXRhXCIsXG4gICAgXCJtb3ZlX3ByZXNlbnRfcHRlc1wiLFxuICAgIFwicmVsb2NhdGVfdm1hX2Rvd25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdG8gaGFuZGxlIE1BUF9QUklWQVRFIG1hcHBpbmdzIG9mIC9kZXYvemVybyBhcyB0cnVseSBhbm9ueW1vdXMgbWFwcGluZ3MsIHJhdGhlciB0aGFuIGZpbGUtYmFja2VkIG1hcHBpbmdzIHdpdGggYSBzcGVjaWFsIGZsYWcuIEl0IGludHJvZHVjZXMgdmlydHVhbCBwYWdlIG9mZnNldHMgZm9yIFZNQXMgdG8gY29ycmVjdGx5IHRyYWNrIGFuZCBtZXJnZSB0aGVzZSBtYXBwaW5ncy4gVGhpcyBhZmZlY3RzIHZhcmlvdXMgbW0gc3Vic3lzdGVtcyBpbmNsdWRpbmcgS1NNLCBtaWdyYXRpb24sIG1yZW1hcCwgdXNlcmZhdWx0ZmQsIGFuZCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbW1hcCwgbXJlbWFwLCB1c2VyZmF1bHRmZCwgZXRjLiwgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjo0NzozNi4zOTM5MzM0NjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTk4MzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYxMzNmNjBjNzZhMDdmYmVkMWQwMzBkMTQ5MmJhYzhjOTYxNDUzZjVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTcgMjI6NDc6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvZHJpdmVycy9jaGFyL21lbS5jXFxuaW5kZXggNjMyNTNkMWRlNWQ3MGIuLmRjZmQ4OTZiNzMzZDhmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvY2hhci9tZW0uY1xcbisrKyBiL2RyaXZlcnMvY2hhci9tZW0uY1xcbkBAIC01MDYsMTEgKzUwNiw3IEBAIHN0YXRpYyBpbnQgbW1hcF96ZXJvX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcXG4gXFx0aWYgKHZtYV9kZXNjX3Rlc3QoZGVzYywgVk1BX1NIQVJFRF9CSVQpKVxcbiBcXHRcXHRyZXR1cm4gc2htZW1femVyb19zZXR1cF9kZXNjKGRlc2MpO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogVGhpcyBpcyBhIGhpZ2hseSB1bmlxdWUgc2l0dWF0aW9uIHdoZXJlIHdlIG1hcmsgYSBNQVBfUFJJVkFURSBtYXBwaW5nXFxuLVxcdCAqIG9mIC9kZXYvemVybyBhbm9ueW1vdXMsIGRlc3BpdGUgaXQgbm90IGJlaW5nLlxcbi1cXHQgKi9cXG4tXFx0dm1hX2Rlc2Nfc2V0X2Fub255bW91cyhkZXNjKTtcXG4rXFx0LyogTUFQX1BSSVZBVEUgc2VtYW50aWNzIGFyZSB0YWtlbiBjYXJlIGZvciB1cyBieSBjb3JlIG1tLiAqL1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtNjk4LDcgKzY5NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtZGV2IHtcXG4gI2lmZGVmIENPTkZJR19ERVZQT1JUXFxuIFxcdFs0XSA9IHsgXFxcInBvcnRcXFwiLCBcXHUwMDI2cG9ydF9mb3BzLCAwLCAwIH0sXFxuICNlbmRpZlxcbi1cXHRbNV0gPSB7IFxcXCJ6ZXJvXFxcIiwgXFx1MDAyNnplcm9fZm9wcywgRk1PREVfTk9XQUlULCAwNjY2IH0sXFxuK1xcdFtERVZaRVJPX01JTk9SXSA9IHsgXFxcInplcm9cXFwiLCBcXHUwMDI2emVyb19mb3BzLCBGTU9ERV9OT1dBSVQsIDA2NjYgfSxcXG4gXFx0WzddID0geyBcXFwiZnVsbFxcXCIsIFxcdTAwMjZmdWxsX2ZvcHMsIDAsIDA2NjYgfSxcXG4gXFx0WzhdID0geyBcXFwicmFuZG9tXFxcIiwgXFx1MDAyNnJhbmRvbV9mb3BzLCBGTU9ERV9OT1dBSVQsIDA2NjYgfSxcXG4gXFx0WzldID0geyBcXFwidXJhbmRvbVxcXCIsIFxcdTAwMjZ1cmFuZG9tX2ZvcHMsIEZNT0RFX05PV0FJVCwgMDY2NiB9LFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCA4N2ZlYWE1YTJiNzgwZS4uN2ZhYmU2YzY2YjRiNzMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTc0MCw2ICs3NDAsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmF1bHRfZmxhZ19hbGxvd19yZXRyeV9maXJzdChlbnVtIGZhdWx0X2ZsYWcgZmxhZ3MpXFxuIFxcdHsgRkFVTFRfRkxBR19JTlRFUlJVUFRJQkxFLFxcdFxcXCJJTlRFUlJVUFRJQkxFXFxcIiB9LCBcXFxcXFxuIFxcdHsgRkFVTFRfRkxBR19WTUFfTE9DSyxcXHRcXHRcXFwiVk1BX0xPQ0tcXFwiIH1cXG4gXFxuKy8qIC9kZXYvemVybyBtaW5vciBkZXZpY2UgbnVtYmVyLiBTcGVjaWFsIGR1ZSB0byBNQVBfUFJJVkFURSBzZW1hbnRpY3MuICovXFxuKyNkZWZpbmUgREVWWkVST19NSU5PUlxcdDVcXG4rXFxuIC8qXFxuICAqIHZtX2ZhdWx0IGlzIGZpbGxlZCBieSB0aGUgcGFnZWZhdWx0IGhhbmRsZXIgYW5kIHBhc3NlZCB0byB0aGUgdm1hJ3NcXG4gICogLVxcdTAwM2VmYXVsdCBmdW5jdGlvbi4gVGhlIHZtYSdzIC1cXHUwMDNlZmF1bHQgaXMgcmVzcG9uc2libGUgZm9yIHJldHVybmluZyBhIGJpdG1hc2tcXG5AQCAtMTU1MSwxMiArMTU1NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfc2V0X2Fub255bW91cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0dm1hLVxcdTAwM2V2bV9vcHMgPSBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Rlc2Nfc2V0X2Fub255bW91cyhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxcbi17XFxuLVxcdGRlc2MtXFx1MDAzZXZtX29wcyA9IE5VTEw7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfYW5vbnltb3VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2Fub255bW91cyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4ge1xcbiBcXHRyZXR1cm4gIXZtYS1cXHUwMDNldm1fb3BzO1xcbiB9XFxuQEAgLTQzNDksOSArNDM0Nyw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfcGFnZXMoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuICAqIElmIEB2bWEgaXMgYSBNQVBfUFJJVkFURSBmaWxlLWJhY2tlZCBtYXBwaW5nLCB0aGVuIHRoaXMgcmV0dXJucyB0aGVcXG4gICogcGFnZSBvZmZzZXQgd2l0aGluIHRoZSBmaWxlLlxcbiAgKlxcbi0gKiBFZGdlIGNhc2VzOiBub21tdSBkb2VzIG5vdCBhYmlkZSBieSB0aGVzZSwgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIHNhdGlzZmllc1xcbi0gKiB2bWFfaXNfYW5vbnltb3VzKCkgYnV0IGhhcyBmaWxlLWJhY2tlZCBwYWdlIG9mZnNldCwgYW5kIE1BUF9QUklWQVRFLXBmbm1hcFxcbi0gKiByZWdpb25zIGhhdmUgdGhlaXIgcGFnZSBvZmZzZXQgc2V0IHRvIHRoZSBmaXJzdCBQRk4gaW4gdGhlIHJhbmdlLlxcbisgKiBFZGdlIGNhc2VzOiBub21tdSBkb2VzIG5vdCBhYmlkZSBieSB0aGVzZSBhbmQgQ29XIE1BUF9QUklWQVRFLXBmbm1hcCByZWdpb25zXFxuKyAqIGhhdmUgdGhlaXIgcGFnZSBvZmZzZXQgc2V0IHRvIHRoZSBmaXJzdCBQRk4gaW4gdGhlIHJhbmdlLlxcbiAgKlxcbiAgKiBSZXR1cm5zOiBUaGUgcGFnZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIEB2bWEuXFxuICAqL1xcbkBAIC00MzkzLDYgKzQzOTAsNjUgQEAgc3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9sYXN0X3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBcXHRyZXR1cm4gdm1hX2VuZF9wZ29mZih2bWEpIC0gMTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKCkgLSBHZXQgdGhlIHZpcnR1YWwgcGFnZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIEB2bWFcXG4rICogQHZtYTogVGhlIFZNQSB3aG9zZSB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IGlzIHJlcXVpcmVkLlxcbisgKlxcbisgKiBJZiB1bmZhdWx0ZWQsIHRoZW4gdGhpcyBpcyB2bWEtXFx1MDAzZXZtX3N0YXJ0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsIGlmIGZhdWx0ZWQgdGhlbiB0aGVcXG4rICogdmlydHVhbCBwYWdlIG9mZnNldCBhdCB0aGUgdGltZSBvZiBmaXJzdCBmYXVsdC5cXG4rICpcXG4rICogSWYgdGhlIFZNQSBpcyBhbm9ueW1vdXMsIHRoaXMgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSBhcyB2bWFfc3RhcnRfcGdvZmYoKS5cXG4rICpcXG4rICogVGhpcyB2YWx1ZSBpcyB1c2VkIGZvciB0cmFja2luZyBNQVBfUFJJVkFURSBmaWxlLWJhY2tlZCBtYXBwaW5ncyBieSB0aGVpclxcbisgKiB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0LlxcbisgKlxcbisgKiBSZXR1cm5zOiBUaGUgdmlydHVhbCBwYWdlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgQHZtYS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWFfc3RhcnRfdmlydF9wZ29mZihjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4re1xcbitcXHRwZ29mZl90IHBnb2ZmID0gMDtcXG4rXFxuKyNpZmRlZiBDT05GSUdfNjRCSVRcXG4rXFx0cGdvZmYgKz0gdm1hLVxcdTAwM2VfX3ZtX3ZpcnRfcGdvZmZfaGk7XFxuK1xcdHBnb2ZmIFxcdTAwM2NcXHUwMDNjPSAzMjtcXG4rI2VuZGlmXFxuK1xcdHBnb2ZmICs9IHZtYS1cXHUwMDNlX192bV92aXJ0X3Bnb2ZmX2xvO1xcbitcXHRyZXR1cm4gcGdvZmY7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB2bWFfZW5kX3ZpcnRfcGdvZmYoKSAtIEdldCB0aGUgdmlydHVhbCBwYWdlIG9mZnNldCBvZiB0aGUgZXhjbHVzaXZlIGVuZCBvZlxcbisgKiBAdm1hLlxcbisgKiBAdm1hOiBUaGUgVk1BIHdob3NlIGVuZCB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IGlzIHJlcXVpcmVkLlxcbisgKlxcbisgKiBUaGlzIHJldHVybnMgdGhlIHZpcnR1YWwgZXhjbHVzaXZlIGVuZCBwYWdlIG9mZnNldCBvZiBAdm1hLCB3aGljaCBpcyB1c2VmdWxcXG4rICogZm9yIGV4cHJlc3NpbmcgcGFnZSBvZmZzZXQgcmFuZ2VzLlxcbisgKlxcbisgKiBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKCkgZm9yIGEgZGVzY3JpcHRpb24gb2YgVk1BXFxuKyAqIHZpcnR1YWwgcGFnZSBvZmZzZXRzLlxcbisgKlxcbisgKiBSZXR1cm5zOiBUaGUgZXhjbHVzaXZlIGVuZCB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IG9mIEB2bWEuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1hX2VuZF92aXJ0X3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbit7XFxuK1xcdHJldHVybiB2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpICsgdm1hX3BhZ2VzKHZtYSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB2bWFfbGFzdF92aXJ0X3Bnb2ZmKCkgLSBHZXQgdGhlIHZpcnR1YWwgcGFnZSBvZmZzZXQgb2YgdGhlIGxhc3QgcGFnZSBpblxcbisgKiBAdm1hLlxcbisgKiBAdm1hOiBUaGUgVk1BIHdob3NlIGxhc3QgdmlydHVhbCBwYWdlIG9mZnNldCBpcyByZXF1aXJlZC5cXG4rICpcXG4rICogU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB2bWFfc3RhcnRfdmlydF9wZ29mZigpIGZvciBhIGRlc2NyaXB0aW9uIG9mIFZNQVxcbisgKiB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0cy5cXG4rICpcXG4rICogUmV0dXJuczogVGhlIGxhc3QgdmlydHVhbCBwYWdlIG9mZnNldCBvZiBAdm1hLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9sYXN0X3ZpcnRfcGdvZmYoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuK3tcXG4rXFx0cmV0dXJuIHZtYV9lbmRfdmlydF9wZ29mZih2bWEpIC0gMTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9kZXNjX3NpemUoY29uc3Qgc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcXG4ge1xcbiBcXHRyZXR1cm4gZGVzYy1cXHUwMDNlZW5kIC0gZGVzYy1cXHUwMDNlc3RhcnQ7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbmluZGV4IDkzOWI1ZWE4YzllMGJlLi4yNzEwNjI4MDU5YjE1YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcXG5AQCAtOTY3LDYgKzk2Nyw3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCB7XFxuIFxcdCAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgdm1fbG9ja19zZXE7XFxuICNlbmRpZlxcbitcXHR1bnNpZ25lZCBpbnQgX192bV92aXJ0X3Bnb2ZmX2xvOyAvKiBMb3cgMzItYml0cyBvZiB2aXJ0dWFsIHBnb2ZmLiAqL1xcbiBcXHQvKlxcbiBcXHQgKiBBIGZpbGUncyBNQVBfUFJJVkFURSB2bWEgY2FuIGJlIGluIGJvdGggaV9tbWFwIHRyZWUgYW5kIGFub25fdm1hXFxuIFxcdCAqIGxpc3QsIGFmdGVyIGEgQ09XIG9mIG9uZSBvZiB0aGUgZmlsZSBwYWdlcy5cXHRBIE1BUF9TSEFSRUQgdm1hXFxuQEAgLTEwNDEsNiArMTA0Miw5IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCB7XFxuICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQ1xcbiBcXHRzdHJ1Y3QgbG9ja2RlcF9tYXAgdm1sb2NrX2RlcF9tYXA7XFxuICNlbmRpZlxcbisjZW5kaWZcXG4rI2lmZGVmIENPTkZJR182NEJJVFxcbitcXHR1bnNpZ25lZCBpbnQgX192bV92aXJ0X3Bnb2ZmX2hpOyAgLyogSGlnaCAzMi1iaXRzIG9mIHZpcnR1YWwgcGdvZmYuICovXFxuICNlbmRpZlxcbiBcXHQvKlxcbiBcXHQgKiBGb3IgYXJlYXMgd2l0aCBhbiBhZGRyZXNzIHNwYWNlIGFuZCBiYWNraW5nIHN0b3JlLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuaW5kZXggYzZmYzc4M2FhZWU1NzYuLjkwMTMwZjI4ZTdhODdkIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcXG5AQCAtMTEwMSw2ICsxMTAxLDcyIEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCBsaW5lYXJfcGFnZV9pbmRleChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0cmV0dXJuIHBnb2ZmO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHBnb2ZmX3QgX19saW5lYXJfdmlydF9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbit7XFxuK1xcdHBnb2ZmX3QgcGdvZmY7XFxuK1xcbitcXHRwZ29mZiA9IGxpbmVhcl9wYWdlX2RlbHRhKHZtYSwgYWRkcmVzcyk7XFxuK1xcdHBnb2ZmICs9IHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSk7XFxuK1xcdHJldHVybiBwZ29mZjtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGxpbmVhcl92aXJ0X3BhZ2VfaW5kZXgoKSAtIERldGVybWluZSB0aGUgYWJzb2x1dGUgdmlydHVhbCBwYWdlIG9mZnNldCBvZlxcbisgKiBAYWRkcmVzcyB3aXRoaW4gQHZtYS5cXG4rICogQHZtYTogQW4gYW5vbnltb3VzIG9yIE1BUF9QUklWQVRFIGZpbGUtYmFja2VkIFZNQSBpbiB3aGljaCBAYWRkcmVzcyByZXNpZGVzLlxcbisgKiBAYWRkcmVzczogVGhlIGFkZHJlc3Mgd2hvc2UgYWJzb2x1dGUgcGFnZSBvZmZzZXQgaXMgcmVxdWlyZWQuXFxuKyAqXFxuKyAqIFRoaXMgcmV0dXJucyB0aGUgdmlydHVhbCBwYWdlIG9mZnNldCBvZiBAYWRkcmVzcywgd2hpY2ggaXMgdGhlIHBhZ2Ugb2Zmc2V0XFxuKyAqIHRoZSBhZGRyZXNzIHBvc3Nlc3NlZCBhdCB0aGUgdGltZSB0aGUgVk1BIHdhcyBmaXJzdCBmYXVsdGVkLlxcbisgKlxcbisgKiBGb3IgYW5vbnltb3VzIG1hcHBpbmdzLCB0aGlzIHJldHVybnMgdGhlIHNhbWUgdmFsdWUgYXMgbGluZWFyX3BhZ2VfaW5kZXgoKS5cXG4rICpcXG4rICogRm9yIE1BUF9QUklWQVRFIGZpbGUtYmFja2VkIG1hcHBpbmdzLCB0aGlzIHJldHVybnMgdGhlIHZpcnR1YWwgcGFnZSBvZmZzZXQgb2ZcXG4rICogQGFkZHJlc3MsIHdoaWNoIGlzIHRoZSBwYWdlIG9mZnNldCB0aGUgYWRkcmVzcyBwb3NzZXNzZWQgYXQgdGhlIHRpbWUgdGhlIFZNQVxcbisgKiB3YXMgZmlyc3QgZmF1bHRlZC5cXG4rICpcXG4rICogSXQgaXMgbm90IHZhbGlkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBmb3Igc2hhcmVkIGZpbGUtYmFja2VkIG1hcHBpbmdzLlxcbisgKlxcbisgKiBSZXR1cm5zOiBUaGUgYWJzb2x1dGUgdmlydHVhbCBwYWdlIG9mZnNldCBvZiBAYWRkcmVzcyB3aXRoaW4gQHZtYS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgcGdvZmZfdCBsaW5lYXJfdmlydF9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4re1xcbitcXHRjb25zdCBwZ29mZl90IHBnb2ZmID0gX19saW5lYXJfdmlydF9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyk7XFxuK1xcbitcXHRWTV9XQVJOX09OX09OQ0Uodm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCkpO1xcbitcXHRpZiAoIXZtYS1cXHUwMDNldm1fZmlsZSkgLyogSXMgYW5vbnltb3VzIGV4Y2VwdCBNQVBfUFJJVkFURS0vZGV2L3plcm8gKi9cXG4rXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHBnb2ZmICE9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcykpO1xcbitcXG4rXFx0cmV0dXJuIHBnb2ZmO1xcbit9XFxuK1xcbisvKipcXG4rICogbGluZWFyX2ZvbGlvX3BhZ2VfaW5kZXgoKSAtIERldGVybWluZSB0aGUgYWJzb2x1dGUgcGFnZSBvZmZzZXQgb2ZcXG4rICogQGFkZHJlc3Mgd2l0aGluIEB2bWEgZnJvbSBAZm9saW8uXFxuKyAqIEBmb2xpbzogVGhlIGZvbGlvIHdob3NlIGxpbmVhciBwYWdlIGluZGV4IGlzIHNvdWdodC5cXG4rICogQHZtYTogVGhlIFZNQSBpbiB3aGljaCBAYWRkcmVzcyByZXNpZGVzLlxcbisgKiBAYWRkcmVzczogVGhlIGFkZHJlc3Mgd2hvc2UgYWJzb2x1dGUgcGFnZSBvZmZzZXQgaXMgcmVxdWlyZWQuXFxuKyAqXFxuKyAqIERldGVybWluZXMgd2hldGhlciB0byBvYnRhaW4gdGhlIHZpcnR1YWwgbGluZWFyIHBhZ2UgaW5kZXggYmFzZWQgb24gd2hldGhlclxcbisgKiBAZm9saW8gaXMgYW5vbnltb3VzIG9yIG5vdC5cXG4rICpcXG4rICogU2VlIHRoZSBkZXNjcmlwdGlvbnMgb2YgbGluZWFyX3ZpcnRfcGFnZV9pbmRleCgpIGFuZCBsaW5lYXJfcGFnZV9pbmRleCgpIGZvclxcbisgKiBkZXRhaWxzIG9mIGVhY2guXFxuKyAqXFxuKyAqIFJldHVybnM6IFRoZSBhYnNvbHV0ZSBwYWdlIG9mZnNldCBvZiBAYWRkcmVzcyB3aXRoaW4gQHZtYS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgcGdvZmZfdCBsaW5lYXJfZm9saW9fcGFnZV9pbmRleChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbit7XFxuK1xcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gbGluZWFyX3ZpcnRfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpO1xcbitcXG4rXFx0cmV0dXJuIGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyk7XFxuK31cXG4rXFxuIHN0cnVjdCB3YWl0X3BhZ2Vfa2V5IHtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gXFx0aW50IGJpdF9ucjtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ybWFwLmggYi9pbmNsdWRlL2xpbnV4L3JtYXAuaFxcbmluZGV4IDhkYzA4NzFlNWYwMDExLi5hNDhhZTk1NzViZDI2MiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3JtYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcm1hcC5oXFxuQEAgLTg3MSw2ICs4NzEsNyBAQCBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsge1xcbiBcXHRwdGVfdCAqcHRlO1xcbiBcXHRzcGlubG9ja190ICpwdGw7XFxuIFxcdHVuc2lnbmVkIGludCBmbGFncztcXG4rXFx0Ym9vbCBpc19hbm9uX3dhbGs7XFxuIH07XFxuIFxcbiAjZGVmaW5lIERFRklORV9GT0xJT19WTUFfV0FMSyhuYW1lLCBfZm9saW8sIF92bWEsIF9hZGRyZXNzLCBfZmxhZ3MpXFx0XFxcXFxcbkBAIC04ODEsNiArODgyLDcgQEAgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHtcXG4gXFx0XFx0LnZtYSA9IF92bWEsXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHQuYWRkcmVzcyA9IF9hZGRyZXNzLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0LmZsYWdzID0gX2ZsYWdzLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0LmlzX2Fub25fd2FsayA9IGZvbGlvX3Rlc3RfYW5vbihfZm9saW8pLFxcdFxcdFxcXFxcXG4gXFx0fVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDliMWYzYjI0ZjdlMGQwLi5hYmM2NWQ2MDhjMjM5MiAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC0yODg3LDcgKzI4ODcsOCBAQCBpbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRmb2xpb19tb3ZlX2Fub25fcm1hcChzcmNfZm9saW8sIGRzdF92bWEpO1xcbi1cXHRcXHRzcmNfZm9saW8tXFx1MDAzZWluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgoZHN0X3ZtYSwgZHN0X2FkZHIpO1xcbitcXHRcXHRzcmNfZm9saW8tXFx1MDAzZWluZGV4ID0gbGluZWFyX2ZvbGlvX3BhZ2VfaW5kZXgoc3JjX2ZvbGlvLCBkc3Rfdm1hLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBkc3RfYWRkcik7XFxuIFxcbiBcXHRcXHRfZHN0X3BtZCA9IGZvbGlvX21rX3BtZChzcmNfZm9saW8sIGRzdF92bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCk7XFxuIFxcdFxcdC8qIEZvbGxvdyBtcmVtYXAoKSBiZWhhdmlvciBhbmQgdHJlYXQgdGhlIGVudHJ5IGRpcnR5IGFmdGVyIHRoZSBtb3ZlICovXFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXFxuaW5kZXggZjI2NDIzZGU0Y2EyODcuLjQxNTYxZmRlYjU2ZDBhIDEwMDY0NFxcbi0tLSBhL21tL2ludGVybmFsLmhcXG4rKysgYi9tbS9pbnRlcm5hbC5oXFxuQEAgLTI0MCw2ICsyNDAsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4ge1xcbiBcXHRpbnQgZXJyID0gdmZzX21tYXAoZmlsZSwgdm1hKTtcXG4gXFxuK1xcdC8qIEhvb2tzIGNhbm5vdCBtYXJrIHRoZW1zZWx2ZXMgYW5vbnltb3VzLiAqL1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKHZtYV9pc19hbm9ueW1vdXModm1hKSkpXFxuK1xcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcbiBcXHRpZiAobGlrZWx5KCFlcnIpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTkzMyw3ICs5MzcsOCBAQCBmb2xpb193aXRoaW5fcmFuZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdHBnb2ZmX2ZvbGlvID0gZm9saW9fcGdvZmYoZm9saW8pO1xcbi1cXHRwZ29mZl92bWFfc3RhcnQgPSB2bWFfc3RhcnRfcGdvZmYodm1hKTtcXG4rXFx0cGdvZmZfdm1hX3N0YXJ0ID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSA/XFxuK1xcdFxcdHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSkgOiB2bWFfc3RhcnRfcGdvZmYodm1hKTtcXG4gXFxuIFxcdGlmIChzdGFydCBcXHUwMDNjIHZtYS1cXHUwMDNldm1fc3RhcnQpXFxuIFxcdFxcdHN0YXJ0ID0gdm1hLVxcdTAwM2V2bV9zdGFydDtcXG5AQCAtMTAwNSwxOSArMTAxMCw5IEBAIHZvaWQgbWxvY2tfZHJhaW5fcmVtb3RlKGludCBjcHUpO1xcbiBcXG4gZXh0ZXJuIHBtZF90IG1heWJlX3BtZF9ta3dyaXRlKHBtZF90IHBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiBcXG4tLyoqXFxuLSAqIHZtYV9hZGRyZXNzIC0gRmluZCB0aGUgdmlydHVhbCBhZGRyZXNzIGEgcGFnZSByYW5nZSBpcyBtYXBwZWQgYXRcXG4tICogQHZtYTogVGhlIHZtYSB3aGljaCBtYXBzIHRoaXMgb2JqZWN0Llxcbi0gKiBAcGdvZmY6IFRoZSBwYWdlIG9mZnNldCB3aXRoaW4gaXRzIG9iamVjdC5cXG4tICogQG5yX3BhZ2VzOiBUaGUgbnVtYmVyIG9mIHBhZ2VzIHRvIGNvbnNpZGVyLlxcbi0gKlxcbi0gKiBJZiBhbnkgcGFnZSBpbiB0aGlzIHJhbmdlIGlzIG1hcHBlZCBieSB0aGlzIFZNQSwgcmV0dXJuIHRoZSBmaXJzdCBhZGRyZXNzXFxuLSAqIHdoZXJlIGFueSBvZiB0aGVzZSBwYWdlcyBhcHBlYXIuICBPdGhlcndpc2UsIHJldHVybiAtRUZBVUxULlxcbi0gKi9cXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hZGRyZXNzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi1cXHRcXHRwZ29mZl90IHBnb2ZmLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX192bWFfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0cGdvZmZfdCBwZ29mZiwgcGdvZmZfdCBwZ29mZl9zdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4ge1xcbi1cXHRjb25zdCBwZ29mZl90IHBnb2ZmX3N0YXJ0ID0gdm1hX3N0YXJ0X3Bnb2ZmKHZtYSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcztcXG4gXFxuIFxcdGlmIChwZ29mZiBcXHUwMDNlPSBwZ29mZl9zdGFydCkge1xcbkBAIC0xMDM1LDIzICsxMDMwLDY4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0cmV0dXJuIGFkZHJlc3M7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB2bWFfZmlsZWJhY2tlZF9hZGRyZXNzIC0gRmluZCB0aGUgdmlydHVhbCBhZGRyZXNzIGEgZmlsZS1iYWNrZWQgcGFnZSByYW5nZSBpc1xcbisgKiBtYXBwZWQgYXQuXFxuKyAqIEB2bWE6IFRoZSB2bWEgd2hpY2ggbWFwcyB0aGlzIG9iamVjdC5cXG4rICogQHBnb2ZmOiBUaGUgcGFnZSBvZmZzZXQgd2l0aGluIGl0cyBvYmplY3QuXFxuKyAqIEBucl9wYWdlczogVGhlIG51bWJlciBvZiBwYWdlcyB0byBjb25zaWRlci5cXG4rICpcXG4rICogUmV0dXJuczogSWYgYW55IHBhZ2UgaW4gdGhpcyByYW5nZSBpcyBtYXBwZWQgYnkgdGhpcyBWTUEsIHJldHVybiB0aGUgZmlyc3RcXG4rICogYWRkcmVzcyB3aGVyZSBhbnkgb2YgdGhlc2UgcGFnZXMgYXBwZWFyLiAgT3RoZXJ3aXNlLCByZXR1cm4gLUVGQVVMVC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfZmlsZWJhY2tlZF9hZGRyZXNzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHRwZ29mZl90IHBnb2ZmLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbit7XFxuK1xcdFZNX1dBUk5fT05fT05DRSh2bWFfaXNfYW5vbnltb3VzKHZtYSkpO1xcbitcXG4rXFx0cmV0dXJuIF9fdm1hX2FkZHJlc3Modm1hLCBwZ29mZiwgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIG5yX3BhZ2VzKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHZtYV9hbm9uX2FkZHJlc3MgLSBGaW5kIHRoZSB2aXJ0dWFsIGFkZHJlc3MgYW4gYW5vbnltb3VzIHBhZ2UgcmFuZ2UgaXMgbWFwcGVkXFxuKyAqIGF0LlxcbisgKiBAdm1hOiBUaGUgdm1hIHdoaWNoIG1hcHMgdGhpcyBvYmplY3QuXFxuKyAqIEBwZ29mZl92aXJ0OiBUaGUgdmlydHVhbCBwYWdlIGluZGV4IGJlbG9uZ2luZyB0byB0aGUgZm9saW8uXFxuKyAqIEBucl9wYWdlczogVGhlIG51bWJlciBvZiBwYWdlcyB0byBjb25zaWRlci5cXG4rICpcXG4rICogVGhpcyBpcyBvbmx5IHZhbGlkIGZvciBhbm9ueW1vdXMgb3IgTUFQX1BSSVZBVEUtbWFwcGVkIGZpbGUtYmFja2VkIFZNQXMuXFxuKyAqXFxuKyAqIFJldHVybnM6IElmIGFueSBwYWdlIGluIHRoaXMgcmFuZ2UgaXMgbWFwcGVkIGJ5IHRoaXMgVk1BLCByZXR1cm4gdGhlIGZpcnN0IGFkZHJlc3NcXG4rICogd2hlcmUgYW55IG9mIHRoZXNlIHBhZ2VzIGFwcGVhci4gT3RoZXJ3aXNlLCByZXR1cm4gLUVGQVVMVC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfYW5vbl9hZGRyZXNzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHRwZ29mZl90IHBnb2ZmX3ZpcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3tcXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkgXFx1MDAyNlxcdTAwMjYgdm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCkpO1xcbitcXG4rXFx0cmV0dXJuIF9fdm1hX2FkZHJlc3Modm1hLCBwZ29mZl92aXJ0LCB2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCBucl9wYWdlcyk7XFxuK31cXG4rXFxuIC8qXFxuLSAqIFRoZW4gYXQgd2hhdCB1c2VyIHZpcnR1YWwgYWRkcmVzcyB3aWxsIG5vbmUgb2YgdGhlIHJhbmdlIGJlIGZvdW5kIGluIHZtYT9cXG4rICogQXQgd2hhdCB1c2VyIHZpcnR1YWwgYWRkcmVzcyB3aWxsIG5vbmUgb2YgdGhlIHJhbmdlIGJlIGZvdW5kIGluIHZtYT9cXG4gICogQXNzdW1lcyB0aGF0IHZtYV9hZGRyZXNzKCkgYWxyZWFkeSByZXR1cm5lZCBhIGdvb2Qgc3RhcnRpbmcgYWRkcmVzcy5cXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfYWRkcmVzc19lbmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbiB7XFxuLVxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gcHZtdy1cXHUwMDNldm1hO1xcbi1cXHRwZ29mZl90IHBnb2ZmO1xcbitcXHRjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHB2bXctXFx1MDAzZXZtYTtcXG4rXFx0Y29uc3QgcGdvZmZfdCBwZ29mZiA9IHB2bXctXFx1MDAzZXBnb2ZmO1xcbitcXHRwZ29mZl90IHBnb2ZmX3ZtYV9zdGFydDtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xcbitcXHRwZ29mZl90IHBnb2ZmX2VuZDtcXG4gXFxuIFxcdC8qIENvbW1vbiBjYXNlLCBwbHVzIC1cXHUwMDNlcGdvZmYgaXMgaW52YWxpZCBmb3IgS1NNICovXFxuIFxcdGlmIChwdm13LVxcdTAwM2Vucl9wYWdlcyA9PSAxKVxcbiBcXHRcXHRyZXR1cm4gcHZtdy1cXHUwMDNlYWRkcmVzcyArIFBBR0VfU0laRTtcXG4gXFxuLVxcdHBnb2ZmID0gcHZtdy1cXHUwMDNlcGdvZmYgKyBwdm13LVxcdTAwM2Vucl9wYWdlcztcXG4rXFx0aWYgKHB2bXctXFx1MDAzZWlzX2Fub25fd2FsaylcXG4rXFx0XFx0cGdvZmZfdm1hX3N0YXJ0ID0gdm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwZ29mZl92bWFfc3RhcnQgPSB2bWFfc3RhcnRfcGdvZmYodm1hKTtcXG4rXFxuK1xcdHBnb2ZmX2VuZCA9IHBnb2ZmICsgcHZtdy1cXHUwMDNlbnJfcGFnZXM7XFxuIFxcdGFkZHJlc3MgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0ICtcXG4tXFx0XFx0KChwZ29mZiAtIHZtYV9zdGFydF9wZ29mZih2bWEpKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG4rXFx0XFx0KChwZ29mZl9lbmQgLSBwZ29mZl92bWFfc3RhcnQpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbiBcXHQvKiBDaGVjayBmb3IgYWRkcmVzcyBiZXlvbmQgdm1hIChvciB3cmFwcGVkIHRocm91Z2ggMD8pICovXFxuIFxcdGlmIChhZGRyZXNzIFxcdTAwM2Mgdm1hLVxcdTAwM2V2bV9zdGFydCB8fCBhZGRyZXNzIFxcdTAwM2Ugdm1hLVxcdTAwM2V2bV9lbmQpXFxuIFxcdFxcdGFkZHJlc3MgPSB2bWEtXFx1MDAzZXZtX2VuZDtcXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJ2YWxfdHJlZS5jIGIvbW0vaW50ZXJ2YWxfdHJlZS5jXFxuaW5kZXggM2FlOWUxMDZkM2FmZDguLjI2Yjg0MzdlM2IxYjEzIDEwMDY0NFxcbi0tLSBhL21tL2ludGVydmFsX3RyZWUuY1xcbisrKyBiL21tL2ludGVydmFsX3RyZWUuY1xcbkBAIC04MywxMiArODMsMTIgQEAgbWFwcGluZ19ybWFwX3RyZWVfaXRlcl9uZXh0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXG4gc3RhdGljIHBnb2ZmX3QgYXZjX3N0YXJ0X3Bnb2ZmKHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjKVxcbiB7XFxuLVxcdHJldHVybiB2bWFfc3RhcnRfcGdvZmYoYXZjLVxcdTAwM2V2bWEpO1xcbitcXHRyZXR1cm4gdm1hX3N0YXJ0X3ZpcnRfcGdvZmYoYXZjLVxcdTAwM2V2bWEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgcGdvZmZfdCBhdmNfbGFzdF9wZ29mZihzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YylcXG4ge1xcbi1cXHRyZXR1cm4gdm1hX2xhc3RfcGdvZmYoYXZjLVxcdTAwM2V2bWEpO1xcbitcXHRyZXR1cm4gdm1hX2xhc3RfdmlydF9wZ29mZihhdmMtXFx1MDAzZXZtYSk7XFxuIH1cXG4gXFxuIElOVEVSVkFMX1RSRUVfREVGSU5FKHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiwgcmIsIHBnb2ZmX3QsIHJiX3N1YnRyZWVfbGFzdCxcXG5kaWZmIC0tZ2l0IGEvbW0va3NtLmMgYi9tbS9rc20uY1xcbmluZGV4IDQ3MDA2ZjQ5NGZjYjFiLi5iOWIzMmY3YmZiNjkxZSAxMDA2NDRcXG4tLS0gYS9tbS9rc20uY1xcbisrKyBiL21tL2tzbS5jXFxuQEAgLTE2MjUsNyArMTYyNSw4IEBAIHN0YXRpYyBpbnQgdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSxcXG4gXFx0ICogc3RhYmxlX3RyZWUsIGJyZWFrX2NvdygpIHdpbGwgY2xlYW4gaXQgdXAuXFxuIFxcdCAqL1xcbiBcXHRybWFwX2l0ZW0tXFx1MDAzZWFub25fdm1hID0gdm1hLVxcdTAwM2Vhbm9uX3ZtYTtcXG4tXFx0cm1hcF9pdGVtLVxcdTAwM2VsaW5lYXJfcGFnZV9pbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgcm1hcF9pdGVtLVxcdTAwM2VhZGRyZXNzKTtcXG4rXFx0LyogVGhlIFZNQSBpcyBhbHdheXMgYW5vbi9NQVBfUFJJVkFURS1maWxlIGJhY2tlZCBzbyB1c2UgYW5vbiBpbmRleC4gKi9cXG4rXFx0cm1hcF9pdGVtLVxcdTAwM2VsaW5lYXJfcGFnZV9pbmRleCA9IGxpbmVhcl92aXJ0X3BhZ2VfaW5kZXgodm1hLCBybWFwX2l0ZW0tXFx1MDAzZWFkZHJlc3MpO1xcbiBcXHRnZXRfYW5vbl92bWEodm1hLVxcdTAwM2Vhbm9uX3ZtYSk7XFxuIG91dDpcXG4gXFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuQEAgLTMxNTIsNyArMzE1Myw3IEBAIHN0cnVjdCBmb2xpbyAqa3NtX21pZ2h0X25lZWRfdG9fY29weShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHRyZXR1cm4gZm9saW87XFx0Lyogbm8gbmVlZCB0byBjb3B5IGl0ICovXFxuIFxcdH0gZWxzZSBpZiAoIWFub25fdm1hKSB7XFxuIFxcdFxcdHJldHVybiBmb2xpbztcXHRcXHQvKiBubyBuZWVkIHRvIGNvcHkgaXQgKi9cXG4tXFx0fSBlbHNlIGlmIChmb2xpby1cXHUwMDNlaW5kZXggPT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKSBcXHUwMDI2XFx1MDAyNlxcbitcXHR9IGVsc2UgaWYgKGZvbGlvLVxcdTAwM2VpbmRleCA9PSBsaW5lYXJfdmlydF9wYWdlX2luZGV4KHZtYSwgYWRkcikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0YW5vbl92bWEtXFx1MDAzZXJvb3QgPT0gdm1hLVxcdTAwM2Vhbm9uX3ZtYS1cXHUwMDNlcm9vdCkge1xcbiBcXHRcXHRyZXR1cm4gZm9saW87XFx0XFx0Lyogc3RpbGwgbm8gbmVlZCB0byBjb3B5IGl0ICovXFxuIFxcdH1cXG5AQCAtMzIyMiw3ICszMjIzLDcgQEAgdm9pZCBybWFwX3dhbGtfa3NtKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCAqcndjKVxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBDdXJyZW50bHksIEtTTSBmb2xpb3MgYXJlIGFsd2F5cyBzbWFsbCBmb2xpb3MsIHNvIGl0J3NcXG4gXFx0XFx0ICogc3VmZmljaWVudCB0byBzZWFyY2ggZm9yIGEgc2luZ2xlIHBhZ2UuIFdlIGNhbiBzaW1wbHkgdXNlXFxuLVxcdFxcdCAqIHRoZSBsaW5lYXJfcGFnZV9pbmRleCBvZiB0aGUgb3JpZ2luYWwgZGUtZHVwbGljYXRlXFxuK1xcdFxcdCAqIHRoZSBsaW5lYXJfdmlydF9wYWdlX2luZGV4IG9mIHRoZSBvcmlnaW5hbCBkZS1kdXBsaWNhdGVcXG4gXFx0XFx0ICogYW5vbnltb3VzIHBhZ2UgdGhhdCB3ZSByZW1lbWJlcmVkIGluIHRoZSBybWFwX2l0ZW0gd2hpbGVcXG4gXFx0XFx0ICogZGUtZHVwbGljYXRpbmcuIE5vdGUgdGhhdCBtcmVtYXAoKSBhbHdheXMgZGUtZHVwbGljYXRlcyBLU01cXG4gXFx0XFx0ICogZm9saW9zOiBzbyBpZiB0aGVyZSB3YXMgbXJlbWFwKCkgaW4gb3VyIHBhcmVudCBvciBvdXIgY2hpbGQsXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuaW5kZXggYWFmMTQ2MDhiMzBlMmQuLmE4YjAzZTI5MjBiYThhIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuQEAgLTYyMCw3ICs2MjAsNyBAQCBzdGF0aWMgdm9pZCBhZGRfdG9fa2lsbF9mc2RheChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgY29uc3Qgc3RydWN0IHBhZ2UgKnAsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICp0b19raWxsLCBwZ29mZl90IHBnb2ZmKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgYWRkciA9IHZtYV9hZGRyZXNzKHZtYSwgcGdvZmYsIDEpO1xcbitcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSB2bWFfZmlsZWJhY2tlZF9hZGRyZXNzKHZtYSwgcGdvZmYsIDEpO1xcbiBcXHRfX2FkZF90b19raWxsKHRzaywgcCwgdm1hLCB0b19raWxsLCBhZGRyKTtcXG4gfVxcbiBcXG5AQCAtMjI2NSw3ICsyMjY1LDcgQEAgc3RhdGljIHZvaWQgYWRkX3RvX2tpbGxfcGdvZmYoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssXFxuIFxcdH1cXG4gXFxuIFxcdC8qIENoZWNrIGZvciBwZ29mZiBub3QgYmFja2VkIGJ5IHN0cnVjdCBwYWdlICovXFxuLVxcdHRrLVxcdTAwM2VhZGRyID0gdm1hX2FkZHJlc3Modm1hLCBwZ29mZiwgMSk7XFxuK1xcdHRrLVxcdTAwM2VhZGRyID0gdm1hX2ZpbGViYWNrZWRfYWRkcmVzcyh2bWEsIHBnb2ZmLCAxKTtcXG4gXFx0dGstXFx1MDAzZXNpemVfc2hpZnQgPSBQQUdFX1NISUZUO1xcbiBcXG4gXFx0aWYgKHRrLVxcdTAwM2VhZGRyID09IC1FRkFVTFQpXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCBkNWU4NzYyNGY2OTIwNS4uNTZiMjQ0NTUyZjEzOTQgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC02MzEsMTMgKzYzMSwxNCBAQCBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIHtcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XFxuIFxcdGNoYXIgZW50cnlfc3RyW1BUVkFMX1NUUl9NQVhdO1xcbi1cXHRwZ29mZl90IGluZGV4O1xcbitcXHRwZ29mZl90IGluZGV4LCB2aXJ0X2luZGV4O1xcbiBcXG4gXFx0aWYgKGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCgpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRtYXBwaW5nID0gdm1hLVxcdTAwM2V2bV9maWxlID8gdm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2VmX21hcHBpbmcgOiBOVUxMO1xcbiBcXHRpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcik7XFxuK1xcdHZpcnRfaW5kZXggPSBfX2xpbmVhcl92aXJ0X3BhZ2VfaW5kZXgodm1hLCBhZGRyKTtcXG4gXFxuIFxcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoZW50cnlfc3RyLCBzaXplb2YoZW50cnlfc3RyKSwgZW50cnksIGVudHJ5X3NpemUpO1xcbiBcXHRwcl9hbGVydChcXFwiQlVHOiBCYWQgcGFnZSBtYXAgaW4gcHJvY2VzcyAlcyAgJXM6JXNcXFwiLCBjdXJyZW50LVxcdTAwM2Vjb21tLFxcbkBAIC02NDUsOCArNjQ2LDkgQEAgc3RhdGljIHZvaWQgcHJpbnRfYmFkX3BhZ2VfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIpO1xcbiBcXHRpZiAocGFnZSlcXG4gXFx0XFx0ZHVtcF9wYWdlKHBhZ2UsIFxcXCJiYWQgcGFnZSBtYXBcXFwiKTtcXG4tXFx0cHJfYWxlcnQoXFxcImFkZHI6JXB4IHZtX2ZsYWdzOiUwOGx4IGFub25fdm1hOiVweCBtYXBwaW5nOiVweCBpbmRleDolbHhcXFxcblxcXCIsXFxuLVxcdFxcdCAodm9pZCAqKWFkZHIsIHZtYS1cXHUwMDNldm1fZmxhZ3MsIHZtYS1cXHUwMDNlYW5vbl92bWEsIG1hcHBpbmcsIGluZGV4KTtcXG4rXFx0cHJfYWxlcnQoXFxcImFkZHI6JXB4IHZtX2ZsYWdzOiUwOGx4IGFub25fdm1hOiVweCBtYXBwaW5nOiVweCBpbmRleDolbHggdmlydF9pbmRleDolbHhcXFxcblxcXCIsXFxuK1xcdFxcdCAodm9pZCAqKWFkZHIsIHZtYS1cXHUwMDNldm1fZmxhZ3MsIHZtYS1cXHUwMDNlYW5vbl92bWEsIG1hcHBpbmcsIGluZGV4LFxcbitcXHRcXHQgdmlydF9pbmRleCk7XFxuIFxcdHByX2FsZXJ0KFxcXCJmaWxlOiVwRCBmYXVsdDolcHMgbW1hcDolcHMgbW1hcF9wcmVwYXJlOiAlcHMgcmVhZF9mb2xpbzolcHNcXFxcblxcXCIsXFxuIFxcdFxcdCB2bWEtXFx1MDAzZXZtX2ZpbGUsXFxuIFxcdFxcdCB2bWEtXFx1MDAzZXZtX29wcyA/IHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VmYXVsdCA6IE5VTEwsXFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xcbmluZGV4IDIyMmM4YzE1Zjc4MmY3Li4zN2ZlN2E5YjNmYWNjOCAxMDA2NDRcXG4tLS0gYS9tbS9taWdyYXRlLmNcXG4rKysgYi9tbS9taWdyYXRlLmNcXG5AQCAtMzYzLDggKzM2MywxMCBAQCBzdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGlkeCA9IDA7XFxuIFxcbiBcXHRcXHQvKiBwZ29mZiBpcyBpbnZhbGlkIGZvciBrc20gcGFnZXMsIGJ1dCB0aGV5IGFyZSBuZXZlciBsYXJnZSAqL1xcbi1cXHRcXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXFxuLVxcdFxcdFxcdGlkeCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgcHZtdy5hZGRyZXNzKSAtIHB2bXcucGdvZmY7XFxuK1xcdFxcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xcbitcXHRcXHRcXHRpZHggKz0gbGluZWFyX2ZvbGlvX3BhZ2VfaW5kZXgoZm9saW8sIHZtYSwgcHZtdy5hZGRyZXNzKTtcXG4rXFx0XFx0XFx0aWR4IC09IHB2bXcucGdvZmY7XFxuK1xcdFxcdH1cXG4gXFx0XFx0bmV3ID0gZm9saW9fcGFnZShmb2xpbywgaWR4KTtcXG4gXFxuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcXG5kaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuY1xcbmluZGV4IGI2NGFhMWY2ZTA3ZWRlLi5mMDdmYzRlM2VmMmU2YyAxMDA2NDRcXG4tLS0gYS9tbS9tcmVtYXAuY1xcbisrKyBiL21tL21yZW1hcC5jXFxuQEAgLTEyNjUsNyArMTI2NSw5IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcXG4gc3RhdGljIGludCBjb3B5X3ZtYV9hbmRfZGF0YShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKm5ld192bWFfcHRyKVxcbiB7XFxuLVxcdGNvbnN0IHVuc2lnbmVkIGxvbmcgbmV3X3Bnb2ZmID0gbGluZWFyX3BhZ2VfaW5kZXgodnJtLVxcdTAwM2V2bWEsIHZybS1cXHUwMDNlYWRkcik7XFxuK1xcdGNvbnN0IHBnb2ZmX3QgbmV3X3Bnb2ZmID0gbGluZWFyX3BhZ2VfaW5kZXgodnJtLVxcdTAwM2V2bWEsIHZybS1cXHUwMDNlYWRkcik7XFxuK1xcdGNvbnN0IHBnb2ZmX3QgbmV3X3ZpcnRfcGdvZmYgPVxcbitcXHRcXHRfX2xpbmVhcl92aXJ0X3BhZ2VfaW5kZXgodnJtLVxcdTAwM2V2bWEsIHZybS1cXHUwMDNlYWRkcik7XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdnJtLVxcdTAwM2V2bWE7XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV3X3ZtYTtcXG4gXFx0dW5zaWduZWQgbG9uZyBtb3ZlZF9sZW47XFxuQEAgLTEyNzMsNyArMTI3NSw3IEBAIHN0YXRpYyBpbnQgY29weV92bWFfYW5kX2RhdGEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSxcXG4gXFx0UEFHRVRBQkxFX01PVkUocG1jLCBOVUxMLCBOVUxMLCB2cm0tXFx1MDAzZWFkZHIsIHZybS1cXHUwMDNlbmV3X2FkZHIsIHZybS1cXHUwMDNlb2xkX2xlbik7XFxuIFxcbiBcXHRuZXdfdm1hID0gY29weV92bWEoXFx1MDAyNnZtYSwgdnJtLVxcdTAwM2VuZXdfYWRkciwgdnJtLVxcdTAwM2VuZXdfbGVuLCBuZXdfcGdvZmYsXFxuLVxcdFxcdFxcdCAgIFxcdTAwMjZwbWMubmVlZF9ybWFwX2xvY2tzKTtcXG4rXFx0XFx0XFx0ICAgbmV3X3ZpcnRfcGdvZmYsIFxcdTAwMjZwbWMubmVlZF9ybWFwX2xvY2tzKTtcXG4gXFx0aWYgKCFuZXdfdm1hKSB7XFxuIFxcdFxcdHZybV91bmNoYXJnZSh2cm0pO1xcbiBcXHRcXHQqbmV3X3ZtYV9wdHIgPSBOVUxMO1xcbmRpZmYgLS1naXQgYS9tbS9wYWdlX3ZtYV9tYXBwZWQuYyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXFxuaW5kZXggZDc2NzBiYTQxNDdiZmYuLjRlOTY0NTQ1ZTVlODVhIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jXFxuKysrIGIvbW0vcGFnZV92bWFfbWFwcGVkLmNcXG5AQCAtMzU2LDYgKzM1Niw3IEBAIHVuc2lnbmVkIGxvbmcgcGFnZV9tYXBwZWRfaW5fdm1hKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4rXFx0Y29uc3QgcGdvZmZfdCBwZ29mZiA9IHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpO1xcbiBcXHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcXG4gXFx0XFx0LnBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpLFxcbiBcXHRcXHQubnJfcGFnZXMgPSAxLFxcbkBAIC0zNjMsNyArMzY0LDEwIEBAIHVuc2lnbmVkIGxvbmcgcGFnZV9tYXBwZWRfaW5fdm1hKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHQuZmxhZ3MgPSBQVk1XX1NZTkMsXFxuIFxcdH07XFxuIFxcbi1cXHRwdm13LmFkZHJlc3MgPSB2bWFfYWRkcmVzcyh2bWEsIHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpLCAxKTtcXG4rXFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpXFxuK1xcdFxcdHB2bXcuYWRkcmVzcyA9IHZtYV9hbm9uX2FkZHJlc3Modm1hLCBwZ29mZiwgMSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cHZtdy5hZGRyZXNzID0gdm1hX2ZpbGViYWNrZWRfYWRkcmVzcyh2bWEsIHBnb2ZmLCAxKTtcXG4gXFx0aWYgKHB2bXcuYWRkcmVzcyA9PSAtRUZBVUxUKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0aWYgKCFwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpXFxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xcbmluZGV4IGFkODIwZmU4NmY3ZDhjLi42ODU0YmFmNGI4Nzc4ZiAxMDA2NDRcXG4tLS0gYS9tbS9ybWFwLmNcXG4rKysgYi9tbS9ybWFwLmNcXG5AQCAtODY1LDE0ICs4NjUsMTUgQEAgdW5zaWduZWQgbG9uZyBwYWdlX2FkZHJlc3NfaW5fdm1hKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdGlmICghdm1hLVxcdTAwM2Vhbm9uX3ZtYSB8fCAhYW5vbl92bWEgfHxcXG4gXFx0XFx0ICAgIHZtYS1cXHUwMDNlYW5vbl92bWEtXFx1MDAzZXJvb3QgIT0gYW5vbl92bWEtXFx1MDAzZXJvb3QpXFxuIFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHQvKiBLU00gZm9saW9zIGRvbid0IHJlYWNoIGhlcmUgYmVjYXVzZSBvZiB0aGUgIWFub25fdm1hIGNoZWNrICovXFxuK1xcdFxcdHJldHVybiB2bWFfYW5vbl9hZGRyZXNzKHZtYSwgcGFnZV9wZ29mZihmb2xpbywgcGFnZSksIDEpO1xcbiBcXHR9IGVsc2UgaWYgKCF2bWEtXFx1MDAzZXZtX2ZpbGUpIHtcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdH0gZWxzZSBpZiAodm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2VmX21hcHBpbmcgIT0gZm9saW8tXFx1MDAzZW1hcHBpbmcpIHtcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIEtTTSBmb2xpb3MgZG9uJ3QgcmVhY2ggaGVyZSBiZWNhdXNlIG9mIHRoZSAhYW5vbl92bWEgY2hlY2sgKi9cXG4tXFx0cmV0dXJuIHZtYV9hZGRyZXNzKHZtYSwgcGFnZV9wZ29mZihmb2xpbywgcGFnZSksIDEpO1xcbitcXHRyZXR1cm4gdm1hX2ZpbGViYWNrZWRfYWRkcmVzcyh2bWEsIHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpLCAxKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMTIzOSw4ICsxMjQwLDEwIEBAIHN0YXRpYyBib29sIG1hcHBpbmdfd3Jwcm90ZWN0X3JhbmdlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHQudm1hXFx0XFx0PSB2bWEsXFxuIFxcdFxcdC5hZGRyZXNzXFx0PSBhZGRyZXNzLFxcbiBcXHRcXHQuZmxhZ3NcXHRcXHQ9IFBWTVdfU1lOQyxcXG4rXFx0XFx0LmlzX2Fub25fd2FsayAgID0gZmFsc2UsXFxuIFxcdH07XFxuIFxcbitcXHRWTV9XQVJOX09OX09OQ0UoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSk7XFxuIFxcdHN0YXRlLVxcdTAwM2VjbGVhbmVkICs9IHBhZ2Vfdm1hX21rY2xlYW5fb25lKFxcdTAwMjZwdm13KTtcXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbkBAIC0xMzE2LDEyICsxMzE5LDEzIEBAIGludCBwZm5fbWtjbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgcGdvZmZfdCBwZ29mZixcXG4gXFx0XFx0LnBnb2ZmXFx0XFx0PSBwZ29mZixcXG4gXFx0XFx0LnZtYVxcdFxcdD0gdm1hLFxcbiBcXHRcXHQuZmxhZ3NcXHRcXHQ9IFBWTVdfU1lOQyxcXG4rXFx0XFx0LmlzX2Fub25fd2FsayAgID0gZmFsc2UsXFxuIFxcdH07XFxuIFxcbiBcXHRpZiAoaW52YWxpZF9ta2NsZWFuX3ZtYSh2bWEsIE5VTEwpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHB2bXcuYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHZtYSwgcGdvZmYsIG5yX3BhZ2VzKTtcXG4rXFx0cHZtdy5hZGRyZXNzID0gdm1hX2ZpbGViYWNrZWRfYWRkcmVzcyh2bWEsIHBnb2ZmLCBucl9wYWdlcyk7XFxuIFxcdFZNX0JVR19PTl9WTUEocHZtdy5hZGRyZXNzID09IC1FRkFVTFQsIHZtYSk7XFxuIFxcbiBcXHRyZXR1cm4gcGFnZV92bWFfbWtjbGVhbl9vbmUoXFx1MDAyNnB2bXcpO1xcbkBAIC0xNDgyLDcgKzE0ODYsNyBAQCBzdGF0aWMgdm9pZCBfX2ZvbGlvX3NldF9hbm9uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHQgKi9cXG4gXFx0YW5vbl92bWEgPSAodm9pZCAqKSBhbm9uX3ZtYSArIEZPTElPX01BUFBJTkdfQU5PTjtcXG4gXFx0V1JJVEVfT05DRShmb2xpby1cXHUwMDNlbWFwcGluZywgKHN0cnVjdCBhZGRyZXNzX3NwYWNlICopIGFub25fdm1hKTtcXG4tXFx0Zm9saW8tXFx1MDAzZWluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTtcXG4rXFx0Zm9saW8tXFx1MDAzZWluZGV4ID0gbGluZWFyX3ZpcnRfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTUwOSw4ICsxNTEzLDggQEAgc3RhdGljIHZvaWQgX19wYWdlX2NoZWNrX2Fub25fcm1hcChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHQgKi9cXG4gXFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX2Fub25fdm1hKGZvbGlvKS1cXHUwMDNlcm9vdCAhPSB2bWEtXFx1MDAzZWFub25fdm1hLVxcdTAwM2Vyb290LFxcbiBcXHRcXHRcXHRmb2xpbyk7XFxuLVxcdFZNX0JVR19PTl9QQUdFKHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpICE9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyksXFxuLVxcdFxcdCAgICAgICBwYWdlKTtcXG4rXFx0Vk1fQlVHX09OX1BBR0UocGFnZV9wZ29mZihmb2xpbywgcGFnZSkgIT1cXG4rXFx0XFx0ICAgICAgIGxpbmVhcl92aXJ0X3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSwgcGFnZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX2ZvbGlvX2FkZF9hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5AQCAtMzAzNywxMCArMzA0MSwxMCBAQCBzdGF0aWMgdm9pZCBybWFwX3dhbGtfYW5vbihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRwZ29mZl9lbmQgPSBwZ29mZl9zdGFydCArIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIDE7XFxuIFxcdGFub25fcm1hcF90cmVlX2ZvcmVhY2goYXZjLCBhbm9uX3ZtYSwgcGdvZmZfc3RhcnQsIHBnb2ZmX2VuZCkge1xcbiBcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGF2Yy1cXHUwMDNldm1hO1xcbi1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSB2bWFfYWRkcmVzcyh2bWEsIHBnb2ZmX3N0YXJ0LFxcbitcXHRcXHRjb25zdCB1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSB2bWFfYW5vbl9hZGRyZXNzKHZtYSwgcGdvZmZfc3RhcnQsXFxuIFxcdFxcdFxcdFxcdGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuIFxcbi1cXHRcXHRWTV9CVUdfT05fVk1BKGFkZHJlc3MgPT0gLUVGQVVMVCwgdm1hKTtcXG4rXFx0XFx0Vk1fV0FSTl9PTl9PTkNFX1ZNQShhZGRyZXNzID09IC1FRkFVTFQsIHZtYSk7XFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXG4gXFx0XFx0aWYgKHJ3Yy1cXHUwMDNlaW52YWxpZF92bWEgXFx1MDAyNlxcdTAwMjYgcndjLVxcdTAwM2VpbnZhbGlkX3ZtYSh2bWEsIHJ3Yy1cXHUwMDNlYXJnKSlcXG5AQCAtMzEwMCw3ICszMTA0LDggQEAgc3RhdGljIHZvaWQgX19ybWFwX3dhbGtfZmlsZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0fVxcbiBsb29rdXA6XFxuIFxcdG1hcHBpbmdfcm1hcF90cmVlX2ZvcmVhY2godm1hLCBtYXBwaW5nLCBwZ29mZl9zdGFydCwgcGdvZmZfZW5kKSB7XFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHZtYSwgcGdvZmZfc3RhcnQsIG5yX3BhZ2VzKTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzID0gdm1hX2ZpbGViYWNrZWRfYWRkcmVzcyh2bWEsIHBnb2ZmX3N0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbnJfcGFnZXMpO1xcbiBcXG4gXFx0XFx0Vk1fQlVHX09OX1ZNQShhZGRyZXNzID09IC1FRkFVTFQsIHZtYSk7XFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbmRpZmYgLS1naXQgYS9tbS91c2VyZmF1bHRmZC5jIGIvbW0vdXNlcmZhdWx0ZmQuY1xcbmluZGV4IDhmZDI0YzhiNDI4ZTFiLi4yNThiMDMxODJhNzgwYiAxMDA2NDRcXG4tLS0gYS9tbS91c2VyZmF1bHRmZC5jXFxuKysrIGIvbW0vdXNlcmZhdWx0ZmQuY1xcbkBAIC0xMzUyLDcgKzEzNTIsOCBAQCBzdGF0aWMgbG9uZyBtb3ZlX3ByZXNlbnRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0Zm9saW9fbW92ZV9hbm9uX3JtYXAoc3JjX2ZvbGlvLCBkc3Rfdm1hKTtcXG4tXFx0XFx0c3JjX2ZvbGlvLVxcdTAwM2VpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KGRzdF92bWEsIGRzdF9hZGRyKTtcXG4rXFx0XFx0c3JjX2ZvbGlvLVxcdTAwM2VpbmRleCA9IGxpbmVhcl9mb2xpb19wYWdlX2luZGV4KHNyY19mb2xpbywgZHN0X3ZtYSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZHN0X2FkZHIpO1xcbiBcXG4gXFx0XFx0b3JpZ19kc3RfcHRlID0gZm9saW9fbWtfcHRlKHNyY19mb2xpbywgZHN0X3ZtYS1cXHUwMDNldm1fcGFnZV9wcm90KTtcXG4gXFx0XFx0LyogU2V0IHNvZnQgZGlydHkgYml0IHNvIHVzZXJzcGFjZSBjYW4gbm90aWNlIHRoZSBwdGUgd2FzIG1vdmVkICovXFxuQEAgLTE0MjgsNyArMTQyOSw4IEBAIHN0YXRpYyBpbnQgbW92ZV9zd2FwX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbiBcXHQgKi9cXG4gXFx0aWYgKHNyY19mb2xpbykge1xcbiBcXHRcXHRmb2xpb19tb3ZlX2Fub25fcm1hcChzcmNfZm9saW8sIGRzdF92bWEpO1xcbi1cXHRcXHRzcmNfZm9saW8tXFx1MDAzZWluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgoZHN0X3ZtYSwgZHN0X2FkZHIpO1xcbitcXHRcXHRzcmNfZm9saW8tXFx1MDAzZWluZGV4ID0gbGluZWFyX2ZvbGlvX3BhZ2VfaW5kZXgoc3JjX2ZvbGlvLCBkc3Rfdm1hLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBkc3RfYWRkcik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIENoZWNrIGlmIHRoZSBzd2FwIGVudHJ5IGlzIGNhY2hlZCBhZnRlciBhY3F1aXJpbmcgdGhlIHNyY19wdGVcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuY1xcbmluZGV4IGI1YmMzZWVjOTYxYzc5Li5mODAwMWQ1YzIzYWFkMSAxMDA2NDRcXG4tLS0gYS9tbS92bWEuY1xcbisrKyBiL21tL3ZtYS5jXFxuQEAgLTE4LDYgKzE4LDcgQEAgc3RydWN0IG1tYXBfc3RhdGUge1xcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZW5kO1xcbiBcXHRwZ29mZl90IHBnb2ZmO1xcbitcXHRwZ29mZl90IHZpcnRfcGdvZmY7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGdsZW47XFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0dm1fZmxhZ3NfdCB2bV9mbGFncztcXG5AQCAtNDYsMTMgKzQ3LDIyIEBAIHN0cnVjdCBtbWFwX3N0YXRlIHtcXG4gXFx0Ym9vbCBmaWxlX2RvZXNudF9uZWVkX2dldCA6MTtcXG4gfTtcXG4gXFxuLSNkZWZpbmUgTU1BUF9TVEFURShuYW1lLCBtbV8sIHZtaV8sIGFkZHJfLCBsZW5fLCBwZ29mZl8sIHZtYV9mbGFnc18sIGZpbGVfKSBcXFxcXFxuK3N0YXRpYyBpbmxpbmUgcGdvZmZfdCBtYXBfYW5vbl9wZ29mZihjb25zdCBzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxcbit7XFxuK1xcdGlmICh2bWFfZmxhZ3NfdGVzdChcXHUwMDI2bWFwLVxcdTAwM2V2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKSlcXG4rXFx0XFx0cmV0dXJuIG1hcC1cXHUwMDNlcGdvZmY7XFxuK1xcbitcXHRyZXR1cm4gbWFwLVxcdTAwM2V2aXJ0X3Bnb2ZmO1xcbit9XFxuK1xcbisjZGVmaW5lIE1NQVBfU1RBVEUobmFtZSwgbW1fLCB2bWlfLCBhZGRyXywgbGVuXywgcGdvZmZfLCB2aXJ0X3Bnb2ZmXywgdm1hX2ZsYWdzXywgZmlsZV8pIFxcXFxcXG4gXFx0c3RydWN0IG1tYXBfc3RhdGUgbmFtZSA9IHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdC5tbSA9IG1tXyxcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdC52bWkgPSB2bWlfLFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0LmFkZHIgPSBhZGRyXyxcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdC5lbmQgPSAoYWRkcl8pICsgKGxlbl8pLFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0LnBnb2ZmID0gcGdvZmZfLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0LnZpcnRfcGdvZmYgPSB2aXJ0X3Bnb2ZmXyxcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdC5wZ2xlbiA9IFBIWVNfUEZOKGxlbl8pLFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0LnZtYV9mbGFncyA9IHZtYV9mbGFnc18sXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHQuZmlsZSA9IGZpbGVfLFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtNjcsNiArNzcsNyBAQCBzdHJ1Y3QgbW1hcF9zdGF0ZSB7XFxuIFxcdFxcdC5lbmQgPSAobWFwXyktXFx1MDAzZWVuZCxcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdC52bWFfZmxhZ3MgPSAobWFwXyktXFx1MDAzZXZtYV9mbGFncyxcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdC5wZ29mZiA9IChtYXBfKS1cXHUwMDNlcGdvZmYsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQuYW5vbl9wZ29mZiA9IG1hcF9hbm9uX3Bnb2ZmKG1hcF8pLFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0LmZpbGUgPSAobWFwXyktXFx1MDAzZWZpbGUsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHQucHJldiA9IChtYXBfKS1cXHUwMDNlcHJldixcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdC5taWRkbGUgPSB2bWFfLFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtODIsMTAgKzkzLDExIEBAIHN0YXRpYyB2b2lkIF9fdm1hX3NldF9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdm1hX3NldF9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgcGdvZmZfdCBwZ29mZilcXG4rXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgcGdvZmZfdCBwZ29mZiwgcGdvZmZfdCB2aXJ0X3Bnb2ZmKVxcbiB7XFxuIFxcdF9fdm1hX3NldF9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpO1xcbiBcXHR2bWFfc2V0X3Bnb2ZmKHZtYSwgcGdvZmYpO1xcbitcXHR2bWFfc2V0X3ZpcnRfcGdvZmYodm1hLCB2aXJ0X3Bnb2ZmKTtcXG4gfVxcbiBcXG4gLyogV2FzIHRoaXMgVk1BIGV2ZXIgZm9ya2VkIGZyb20gYSBwYXJlbnQsIGkuZS4gbWF5YmUgY29udGFpbnMgQ29XIG1hcHBpbmdzPyAqL1xcbkBAIC0yMjEsNiArMjMzLDggQEAgc3RhdGljIGJvb2wgY2FuX3ZtYV9tZXJnZV9iZWZvcmUoc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRpZiAodm1nX2VuZF9wZ29mZih2bWcpICE9IHZtYV9zdGFydF9wZ29mZih2bWctXFx1MDAzZW5leHQpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmICh2bWdfZW5kX2Fub25fcGdvZmYodm1nKSAhPSB2bWFfc3RhcnRfYW5vbl9wZ29mZih2bWctXFx1MDAzZW5leHQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbkBAIC0yNDEsNiArMjU1LDggQEAgc3RhdGljIGJvb2wgY2FuX3ZtYV9tZXJnZV9hZnRlcihzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdGlmICh2bWFfZW5kX3Bnb2ZmKHZtZy1cXHUwMDNlcHJldikgIT0gdm1nX3N0YXJ0X3Bnb2ZmKHZtZykpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKHZtYV9lbmRfYW5vbl9wZ29mZih2bWctXFx1MDAzZXByZXYpICE9IHZtZ19zdGFydF9hbm9uX3Bnb2ZmKHZtZykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuQEAgLTgxMiw3ICs4MjgsOCBAQCBzdGF0aWMgaW50IGNvbW1pdF9tZXJnZShzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nKVxcbiBcXHQgKi9cXG4gXFx0dm1hX2FkanVzdF90cmFuc19odWdlKHZtYSwgdm1nLVxcdTAwM2VzdGFydCwgdm1nLVxcdTAwM2VlbmQsXFxuIFxcdFxcdFxcdCAgICAgIHZtZy1cXHUwMDNlX19hZGp1c3RfbWlkZGxlX3N0YXJ0ID8gdm1nLVxcdTAwM2VtaWRkbGUgOiBOVUxMKTtcXG4tXFx0dm1hX3NldF9yYW5nZSh2bWEsIHZtZy1cXHUwMDNlc3RhcnQsIHZtZy1cXHUwMDNlZW5kLCB2bWdfc3RhcnRfcGdvZmYodm1nKSk7XFxuK1xcdHZtYV9zZXRfcmFuZ2Uodm1hLCB2bWctXFx1MDAzZXN0YXJ0LCB2bWctXFx1MDAzZWVuZCwgdm1nX3N0YXJ0X3Bnb2ZmKHZtZyksXFxuK1xcdFxcdCAgICAgIHZtZ19zdGFydF9hbm9uX3Bnb2ZmKHZtZykpO1xcbiBcXHR2bWdfYWRqdXN0X3NldF9yYW5nZSh2bWcpO1xcbiBcXHR2bWFfaXRlcl9zdG9yZV9vdmVyd3JpdGUodm1nLVxcdTAwM2V2bWksIHZtZy1cXHUwMDNldGFyZ2V0KTtcXG4gXFxuQEAgLTk4Miw2ICs5OTksNyBAQCBzdGF0aWMgX19tdXN0X2NoZWNrIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21lcmdlX2V4aXN0aW5nX3JhbmdlKFxcbiBcXHRcXHR2bWctXFx1MDAzZXN0YXJ0ID0gcHJldi1cXHUwMDNldm1fc3RhcnQ7XFxuIFxcdFxcdHZtZy1cXHUwMDNlZW5kID0gbmV4dC1cXHUwMDNldm1fZW5kO1xcbiBcXHRcXHR2bWctXFx1MDAzZXBnb2ZmID0gdm1hX3N0YXJ0X3Bnb2ZmKHByZXYpO1xcbitcXHRcXHR2bWctXFx1MDAzZWFub25fcGdvZmYgPSB2bWFfc3RhcnRfYW5vbl9wZ29mZihwcmV2KTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFdlIGFscmVhZHkgZW5zdXJlZCBhbm9uX3ZtYSBjb21wYXRpYmlsaXR5IGFib3ZlLCBzbyBub3cgaXQnc1xcbkBAIC0xMDAwLDYgKzEwMTgsNyBAQCBzdGF0aWMgX19tdXN0X2NoZWNrIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21lcmdlX2V4aXN0aW5nX3JhbmdlKFxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0dm1nLVxcdTAwM2VzdGFydCA9IHByZXYtXFx1MDAzZXZtX3N0YXJ0O1xcbiBcXHRcXHR2bWctXFx1MDAzZXBnb2ZmID0gdm1hX3N0YXJ0X3Bnb2ZmKHByZXYpO1xcbitcXHRcXHR2bWctXFx1MDAzZWFub25fcGdvZmYgPSB2bWFfc3RhcnRfYW5vbl9wZ29mZihwcmV2KTtcXG4gXFxuIFxcdFxcdGlmICghdm1nLVxcdTAwM2VfX3JlbW92ZV9taWRkbGUpXFxuIFxcdFxcdFxcdHZtZy1cXHUwMDNlX19hZGp1c3RfbWlkZGxlX3N0YXJ0ID0gdHJ1ZTtcXG5AQCAtMTAyMiwxMiArMTA0MSwxNCBAQCBzdGF0aWMgX19tdXN0X2NoZWNrIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21lcmdlX2V4aXN0aW5nX3JhbmdlKFxcbiBcXHRcXHRpZiAodm1nLVxcdTAwM2VfX3JlbW92ZV9taWRkbGUpIHtcXG4gXFx0XFx0XFx0dm1nLVxcdTAwM2VlbmQgPSBuZXh0LVxcdTAwM2V2bV9lbmQ7XFxuIFxcdFxcdFxcdHZtZy1cXHUwMDNlcGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYobmV4dCkgLSBwZ2xlbjtcXG4rXFx0XFx0XFx0dm1nLVxcdTAwM2Vhbm9uX3Bnb2ZmID0gdm1hX3N0YXJ0X2Fub25fcGdvZmYobmV4dCkgLSBwZ2xlbjtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0LyogV2Ugc2hyaW5rIG1pZGRsZSBhbmQgZXhwYW5kIG5leHQuICovXFxuIFxcdFxcdFxcdHZtZy1cXHUwMDNlX19hZGp1c3RfbmV4dF9zdGFydCA9IHRydWU7XFxuIFxcdFxcdFxcdHZtZy1cXHUwMDNlc3RhcnQgPSBtaWRkbGUtXFx1MDAzZXZtX3N0YXJ0O1xcbiBcXHRcXHRcXHR2bWctXFx1MDAzZWVuZCA9IHN0YXJ0O1xcbiBcXHRcXHRcXHR2bWctXFx1MDAzZXBnb2ZmID0gdm1hX3N0YXJ0X3Bnb2ZmKG1pZGRsZSk7XFxuK1xcdFxcdFxcdHZtZy1cXHUwMDNlYW5vbl9wZ29mZiA9IHZtYV9zdGFydF9hbm9uX3Bnb2ZmKG1pZGRsZSk7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGVyciA9IGR1cF9hbm9uX3ZtYShuZXh0LCBtaWRkbGUsIFxcdTAwMjZhbm9uX2R1cCk7XFxuQEAgLTExMzcsNiArMTE1OCw3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21lcmdlX25ld19yYW5nZShzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nKVxcbiBcXHRcXHR2bWctXFx1MDAzZXN0YXJ0ID0gcHJldi1cXHUwMDNldm1fc3RhcnQ7XFxuIFxcdFxcdHZtZy1cXHUwMDNldGFyZ2V0ID0gcHJldjtcXG4gXFx0XFx0dm1nLVxcdTAwM2VwZ29mZiA9IHZtYV9zdGFydF9wZ29mZihwcmV2KTtcXG4rXFx0XFx0dm1nLVxcdTAwM2Vhbm9uX3Bnb2ZmID0gdm1hX3N0YXJ0X2Fub25fcGdvZmYocHJldik7XFxuIFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBJZiB0aGlzIG1lcmdlIHdvdWxkIHJlc3VsdCBpbiByZW1vdmFsIG9mIHRoZSBuZXh0IFZNQSBidXQgd2VcXG5AQCAtMTkwOCw5ICsxOTMwLDEwIEBAIHN0YXRpYyBpbnQgdm1hX2xpbmsoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAgKi9cXG4gc3RydWN0IHZtX2FyZWFfc3RydWN0ICpjb3B5X3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCBwZ29mZl90IHBnb2ZmLFxcbi1cXHRib29sICpuZWVkX3JtYXBfbG9ja3MpXFxuK1xcdHBnb2ZmX3QgdmlydF9wZ29mZiwgYm9vbCAqbmVlZF9ybWFwX2xvY2tzKVxcbiB7XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gKnZtYXA7XFxuK1xcdGNvbnN0IGJvb2wgaXNfc2hhcmVkID0gdm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdm1hX3N0YXJ0ID0gdm1hLVxcdTAwM2V2bV9zdGFydDtcXG4gXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5ld192bWE7XFxuQEAgLTE5MTksMTEgKzE5NDIsMTQgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpjb3B5X3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxcbiBcXHRWTUdfVk1BX1NUQVRFKHZtZywgXFx1MDAyNnZtaSwgTlVMTCwgdm1hLCBhZGRyLCBhZGRyICsgbGVuKTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIElmIGFub255bW91cyB2bWEgaGFzIG5vdCB5ZXQgYmVlbiBmYXVsdGVkLCB1cGRhdGUgbmV3IHBnb2ZmXFxuLVxcdCAqIHRvIG1hdGNoIG5ldyBsb2NhdGlvbiwgdG8gaW5jcmVhc2UgaXRzIGNoYW5jZSBvZiBtZXJnaW5nLlxcbitcXHQgKiBJZiBhIHZtYSBoYXMgbm90IHlldCBiZWVuIGZhdWx0ZWQsIHVwZGF0ZSBpdHMgdmlydHVhbCBwZ29mZiB0byBtYXRjaFxcbitcXHQgKiB0aGUgbmV3IGxvY2F0aW9uIHRvIGluY3JlYXNlIGl0cyBjaGFuY2Ugb2YgbWVyZ2luZy5cXG4gXFx0ICovXFxuLVxcdGlmICh1bmxpa2VseSh2bWFfaXNfYW5vbnltb3VzKHZtYSkgXFx1MDAyNlxcdTAwMjYgIXZtYS1cXHUwMDNlYW5vbl92bWEpKSB7XFxuLVxcdFxcdHBnb2ZmID0gYWRkciBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHRpZiAoIXZtYS1cXHUwMDNlYW5vbl92bWEgXFx1MDAyNlxcdTAwMjYgIWlzX3NoYXJlZCkge1xcbitcXHRcXHR2aXJ0X3Bnb2ZmID0gYWRkciBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXG4rXFx0XFx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSlcXG4rXFx0XFx0XFx0cGdvZmYgPSB2aXJ0X3Bnb2ZmO1xcbiBcXHRcXHRmYXVsdGVkX2luX2Fub25fdm1hID0gZmFsc2U7XFxuIFxcdH1cXG4gXFxuQEAgLTE5NDAsNiArMTk2Niw3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqY29weV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFx0Lyogc2hvdWxkIG5ldmVyIGdldCBoZXJlICovXFxuIFxcbiBcXHR2bWcucGdvZmYgPSBwZ29mZjtcXG4rXFx0dm1nLmFub25fcGdvZmYgPSBpc19zaGFyZWQgPyBwZ29mZiA6IHZpcnRfcGdvZmY7XFxuIFxcdHZtZy5uZXh0ID0gdm1hX2l0ZXJfbmV4dF9yZXdpbmQoXFx1MDAyNnZtaSwgTlVMTCk7XFxuIFxcdG5ld192bWEgPSB2bWFfbWVyZ2VfY29waWVkX3JhbmdlKFxcdTAwMjZ2bWcpO1xcbiBcXG5AQCAtMTk2MSwxNiArMTk4OCwxNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmNvcHlfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXFxuIFxcdFxcdFxcdCAqIHNhZmUuIEl0IGlzIG9ubHkgc2FmZSB0byBrZWVwIHRoZSB2bV9wZ29mZlxcbiBcXHRcXHRcXHQgKiBsaW5lYXIgaWYgdGhlcmUgYXJlIG5vIHBhZ2VzIG1hcHBlZCB5ZXQuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRWTV9CVUdfT05fVk1BKGZhdWx0ZWRfaW5fYW5vbl92bWEsIG5ld192bWEpO1xcbitcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfVk1BKGZhdWx0ZWRfaW5fYW5vbl92bWEsIG5ld192bWEpO1xcbiBcXHRcXHRcXHQqdm1hcCA9IHZtYSA9IG5ld192bWE7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Km5lZWRfcm1hcF9sb2NrcyA9XFxuLVxcdFxcdFxcdCh2bWFfc3RhcnRfcGdvZmYobmV3X3ZtYSkgXFx1MDAzYz0gdm1hX3N0YXJ0X3Bnb2ZmKHZtYSkpO1xcbitcXHRcXHRcXHQodm1hX3N0YXJ0X3Bnb2ZmKG5ld192bWEpIFxcdTAwM2M9IHZtYV9zdGFydF9wZ29mZih2bWEpKSB8fFxcbitcXHRcXHRcXHQodm1hX3N0YXJ0X2Fub25fcGdvZmYobmV3X3ZtYSkgXFx1MDAzYz0gdm1hX3N0YXJ0X2Fub25fcGdvZmYodm1hKSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdG5ld192bWEgPSB2bV9hcmVhX2R1cCh2bWEpO1xcbiBcXHRcXHRpZiAoIW5ld192bWEpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHR2bWFfc2V0X3JhbmdlKG5ld192bWEsIGFkZHIsIGFkZHIgKyBsZW4sIHBnb2ZmKTtcXG4rXFx0XFx0dm1hX3NldF9yYW5nZShuZXdfdm1hLCBhZGRyLCBhZGRyICsgbGVuLCBwZ29mZiwgdmlydF9wZ29mZik7XFxuIFxcdFxcdGlmICh2bWFfZHVwX3BvbGljeSh2bWEsIG5ld192bWEpKVxcbiBcXHRcXHRcXHRnb3RvIG91dF9mcmVlX3ZtYTtcXG4gXFx0XFx0aWYgKGFub25fdm1hX2Nsb25lKG5ld192bWEsIHZtYSwgVk1BX09QX1JFTUFQKSlcXG5AQCAtMjAzNiw3ICsyMDY0LDEyIEBAIHN0YXRpYyBpbnQgYW5vbl92bWFfY29tcGF0aWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqXFxuIFxcdGlmICghdm1hX2ZsYWdzX2VtcHR5KFxcdTAwMjZkaWZmKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHQvKiBQYWdlIG9mZnNldCBtdXN0IGFsaWduLiAqL1xcbi1cXHRyZXR1cm4gdm1hX2VuZF9wZ29mZihhKSA9PSB2bWFfc3RhcnRfcGdvZmYoYik7XFxuK1xcdGlmICh2bWFfZW5kX3Bnb2ZmKGEpICE9IHZtYV9zdGFydF9wZ29mZihiKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHQvKiBBbm9uIHBhZ2Ugb2Zmc2V0IG11c3QgYWxpZ24uICovXFxuK1xcdGlmICh2bWFfZW5kX2Fub25fcGdvZmYoYSkgIT0gdm1hX3N0YXJ0X2Fub25fcGdvZmYoYikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTI1NzksNiArMjYxMiwzMiBAQCBzdGF0aWMgaW50IF9fbW1hcF9uZXdfZmlsZV92bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIG1hcF9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlID0gbWFwLVxcdTAwM2VmaWxlO1xcbitcXHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4rXFxuK1xcdHJldHVybiBpbWFqb3IoaW5vZGUpID09IE1FTV9NQUpPUiBcXHUwMDI2XFx1MDAyNiBpbWlub3IoaW5vZGUpID09IERFVlpFUk9fTUlOT1I7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1hcF9zZXRfYW5vbihzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxcbit7XFxuK1xcdG1hcC1cXHUwMDNlZmlsZSA9IE5VTEw7XFxuK1xcdG1hcC1cXHUwMDNlZmlsZV9kb2VzbnRfbmVlZF9nZXQgPSBmYWxzZTtcXG4rXFx0bWFwLVxcdTAwM2VwZ29mZiA9IG1hcC1cXHUwMDNlYWRkciBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHRtYXAtXFx1MDAzZXZtX29wcyA9IE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG1hcF9pc19wcml2YXRlKGNvbnN0IHN0cnVjdCBtbWFwX3N0YXRlICptYXApXFxuK3tcXG4rXFx0cmV0dXJuICF2bWFfZmxhZ3NfdGVzdChcXHUwMDI2bWFwLVxcdTAwM2V2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbWFwX2lzX2Fub24oY29uc3Qgc3RydWN0IG1tYXBfc3RhdGUgKm1hcClcXG4re1xcbitcXHRyZXR1cm4gbWFwX2lzX3ByaXZhdGUobWFwKSBcXHUwMDI2XFx1MDAyNiAhbWFwLVxcdTAwM2VmaWxlO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBfX21tYXBfbmV3X3ZtYSgpIC0gQWxsb2NhdGUgYSBuZXcgVk1BIGZvciB0aGUgcmVnaW9uLCBhcyBtZXJnaW5nIHdhcyBub3RcXG4gICogcG9zc2libGUuXFxuQEAgLTI1OTIsOCArMjY1MSw3IEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxcbiBzdGF0aWMgaW50IF9fbW1hcF9uZXdfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXFxuIFxcdHN0cnVjdCBtbWFwX2FjdGlvbiAqYWN0aW9uKVxcbiB7XFxuLVxcdGNvbnN0IGJvb2wgaXNfYW5vbiA9ICFtYXAtXFx1MDAzZWZpbGUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0IXZtYV9mbGFnc190ZXN0KFxcdTAwMjZtYXAtXFx1MDAzZXZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpO1xcbitcXHRjb25zdCBib29sIGlzX2Fub24gPSBtYXBfaXNfYW5vbihtYXApO1xcbiBcXHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkgPSBtYXAtXFx1MDAzZXZtaTtcXG4gXFx0aW50IGVycm9yID0gMDtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuQEAgLTI2MTIsNyArMjY3MCw3IEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld192bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcXG4gXFx0aWYgKGlzX2Fub24pXFxuIFxcdFxcdHZtYV9zZXRfYW5vbnltb3VzKHZtYSk7XFxuIFxcbi1cXHR2bWFfc2V0X3JhbmdlKHZtYSwgbWFwLVxcdTAwM2VhZGRyLCBtYXAtXFx1MDAzZWVuZCwgbWFwLVxcdTAwM2VwZ29mZik7XFxuK1xcdHZtYV9zZXRfcmFuZ2Uodm1hLCBtYXAtXFx1MDAzZWFkZHIsIG1hcC1cXHUwMDNlZW5kLCBtYXAtXFx1MDAzZXBnb2ZmLCBtYXAtXFx1MDAzZXZpcnRfcGdvZmYpO1xcbiBcXHR2bWEtXFx1MDAzZWZsYWdzID0gbWFwLVxcdTAwM2V2bWFfZmxhZ3M7XFxuIFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gbWFwLVxcdTAwM2VwYWdlX3Byb3Q7XFxuIFxcbkBAIC0yNzM1LDYgKzI3OTMsMTAgQEAgc3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4rXFx0LyogSG9va3MgY2Fubm90IG1hcmsgdGhlbXNlbHZlcyBhbm9ueW1vdXMuICovXFxuK1xcdGlmICghZGVzYy1cXHUwMDNldm1fb3BzKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdGVyciA9IGNhbGxfYWN0aW9uX3ByZXBhcmUobWFwLCBkZXNjKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMjc1MSwxNiArMjgxMywyMSBAQCBzdGF0aWMgaW50IGNhbGxfbW1hcF9wcmVwYXJlKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsXFxuIFxcdG1hcC1cXHUwMDNldm1fb3BzID0gZGVzYy1cXHUwMDNldm1fb3BzO1xcbiBcXHRtYXAtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IGRlc2MtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIE1BUF9QUklWQVRFLS9kZXYvemVybyBtYXBwaW5ncyBhcmUgYW4gYW5jaWVudCB3YXkgb2YgZ2V0dGluZ1xcbitcXHQgKiBhbm9ueW1vdXMgbWFwcGluZ3MuIFJhdGhlciB0aGFuIGFsbG93aW5nIHRoZXNlIG1hcHBpbmdzIHRvIGJlIG9kZFxcbitcXHQgKiBvdXRsaWVycywgc2ltcGx5IG1ha2UgdGhlbSB0cnVseSBhbm9ueW1vdXMuXFxuK1xcdCAqL1xcbitcXHRpZiAobWFwX2lzX3ByaXZhdGUobWFwKSBcXHUwMDI2XFx1MDAyNiBtYXBfaXNfZGV2X3plcm8obWFwKSlcXG4rXFx0XFx0bWFwX3NldF9hbm9uKG1hcCk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgc2V0X3ZtYV91c2VyX2RlZmluZWRfZmllbGRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxcbiB7XFxuLVxcdGlmIChtYXAtXFx1MDAzZXZtX29wcylcXG4tXFx0XFx0dm1hLVxcdTAwM2V2bV9vcHMgPSBtYXAtXFx1MDAzZXZtX29wcztcXG4tXFx0ZWxzZVxcdC8qIE9ubHkgL2Rldi96ZXJvIHNob3VsZCBkbyB0aGlzLiAqL1xcbi1cXHRcXHR2bWFfc2V0X2Fub255bW91cyh2bWEpO1xcbitcXHR2bWEtXFx1MDAzZXZtX29wcyA9IG1hcC1cXHUwMDNldm1fb3BzO1xcbiBcXHR2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IG1hcC1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xcbiB9XFxuIFxcbkBAIC0yODAxLDcgKzI4NjgsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX21tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gTlVMTDtcXG4gXFx0Ym9vbCBoYXZlX21tYXBfcHJlcGFyZSA9IGZpbGUgXFx1MDAyNlxcdTAwMjYgZmlsZS1cXHUwMDNlZl9vcC1cXHUwMDNlbW1hcF9wcmVwYXJlO1xcbiBcXHRWTUFfSVRFUkFUT1Iodm1pLCBtbSwgYWRkcik7XFxuLVxcdE1NQVBfU1RBVEUobWFwLCBtbSwgXFx1MDAyNnZtaSwgYWRkciwgbGVuLCBwZ29mZiwgdm1hX2ZsYWdzLCBmaWxlKTtcXG4rXFx0Y29uc3QgcGdvZmZfdCB2aXJ0X3Bnb2ZmID0gYWRkciBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHRNTUFQX1NUQVRFKG1hcCwgbW0sIFxcdTAwMjZ2bWksIGFkZHIsIGxlbiwgcGdvZmYsIHZpcnRfcGdvZmYsIHZtYV9mbGFncywgZmlsZSk7XFxuIFxcdHN0cnVjdCB2bV9hcmVhX2Rlc2MgZGVzYyA9IHtcXG4gXFx0XFx0Lm1tID0gbW0sXFxuIFxcdFxcdC5maWxlID0gZmlsZSxcXG5AQCAtMjk0Niw2ICszMDE0LDcgQEAgaW50IGRvX2Jya19mbGFncyhzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHQgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cXHUwMDNlbW07XFxuK1xcdGNvbnN0IHBnb2ZmX3QgcGdvZmYgPSBhZGRyIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBDaGVjayBhZ2FpbnN0IGFkZHJlc3Mgc3BhY2UgbGltaXRzIGJ5IHRoZSBjaGFuZ2VkIHNpemVcXG5AQCAtMjk3MCw3ICszMDM5LDcgQEAgaW50IGRvX2Jya19mbGFncyhzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHQgKiBvY2N1ciBhZnRlciBmb3JraW5nLCBzbyB0aGUgZXhwYW5kIHdpbGwgb25seSBoYXBwZW4gb24gbmV3IFZNQXMuXFxuIFxcdCAqL1xcbiBcXHRpZiAodm1hIFxcdTAwMjZcXHUwMDI2IHZtYS1cXHUwMDNldm1fZW5kID09IGFkZHIpIHtcXG4tXFx0XFx0Vk1HX1NUQVRFKHZtZywgbW0sIHZtaSwgYWRkciwgYWRkciArIGxlbiwgdm1hX2ZsYWdzLCBQSFlTX1BGTihhZGRyKSk7XFxuK1xcdFxcdFZNR19TVEFURSh2bWcsIG1tLCB2bWksIGFkZHIsIGFkZHIgKyBsZW4sIHZtYV9mbGFncywgcGdvZmYsIHBnb2ZmKTtcXG4gXFxuIFxcdFxcdHZtZy5wcmV2ID0gdm1hO1xcbiBcXHRcXHQvKiB2bWkgaXMgcG9zaXRpb25lZCBhdCBwcmV2LCB3aGljaCB0aGlzIG1vZGUgZXhwZWN0cy4gKi9cXG5AQCAtMjk5MCw3ICszMDU5LDcgQEAgaW50IGRvX2Jya19mbGFncyhzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRnb3RvIHVuYWNjdF9mYWlsO1xcbiBcXG4gXFx0dm1hX3NldF9hbm9ueW1vdXModm1hKTtcXG4tXFx0dm1hX3NldF9yYW5nZSh2bWEsIGFkZHIsIGFkZHIgKyBsZW4sIGFkZHIgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuK1xcdHZtYV9zZXRfcmFuZ2Uodm1hLCBhZGRyLCBhZGRyICsgbGVuLCBwZ29mZiwgcGdvZmYpO1xcbiBcXHR2bWEtXFx1MDAzZWZsYWdzID0gdm1hX2ZsYWdzO1xcbiBcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpKTtcXG4gXFx0dm1hX3N0YXJ0X3dyaXRlKHZtYSk7XFxuQEAgLTMzODIsNiArMzQ1MSw3IEBAIGludCBpbnNlcnRfdm1fc3RydWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0XFx0V0FSTl9PTl9PTkNFKHZtYS1cXHUwMDNlYW5vbl92bWEpO1xcbiBcXHRcXHR2bWFfc2V0X3Bnb2ZmKHZtYSwgdm1hLVxcdTAwM2V2bV9zdGFydCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4gXFx0fVxcbitcXHR2bWFfc2V0X3ZpcnRfcGdvZmYodm1hLCB2bWEtXFx1MDAzZXZtX3N0YXJ0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbiBcXG4gXFx0aWYgKHZtYV9saW5rKG1tLCB2bWEpKSB7XFxuIFxcdFxcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9BQ0NPVU5UX0JJVCkpXFxuQEAgLTM0MzcsNyArMzUwNyw3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqX19pbnN0YWxsX3NwZWNpYWxfbWFwcGluZyhcXG4gXFxuIFxcdHZtYS1cXHUwMDNldm1fb3BzID0gb3BzO1xcbiBcXHR2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHByaXY7XFxuLVxcdHZtYV9zZXRfcmFuZ2Uodm1hLCBhZGRyLCBhZGRyICsgbGVuLCAwKTtcXG4rXFx0dm1hX3NldF9yYW5nZSh2bWEsIGFkZHIsIGFkZHIgKyBsZW4sIDAsIGFkZHIgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuIFxcbiBcXHRyZXQgPSBpbnNlcnRfdm1fc3RydWN0KG1tLCB2bWEpO1xcbiBcXHRpZiAocmV0KVxcbmRpZmYgLS1naXQgYS9tbS92bWEuaCBiL21tL3ZtYS5oXFxuaW5kZXggMGJjN2Q1MjFlOTc2NzcuLjhjYWVlM2I0YmEyNjcxIDEwMDY0NFxcbi0tLSBhL21tL3ZtYS5oXFxuKysrIGIvbW0vdm1hLmhcXG5AQCAtMTA0LDYgKzEwNCw3IEBAIHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0IHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydDtcXG4gXFx0dW5zaWduZWQgbG9uZyBlbmQ7XFxuIFxcdHBnb2ZmX3QgcGdvZmY7XFxuK1xcdHBnb2ZmX3QgYW5vbl9wZ29mZjtcXG4gXFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0LyogVGVtcG9yYXJ5IHdoaWxlIFZNQSBmbGFncyBhcmUgYmVpbmcgY29udmVydGVkLiAqL1xcbkBAIC0yMzcsMTEgKzIzOCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWdfbm9tZW0oc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcXG4gXFx0cmV0dXJuIHZtZy1cXHUwMDNlc3RhdGUgPT0gVk1BX01FUkdFX0VSUk9SX05PTUVNO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1nX3N0YXJ0X3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXFxuLXtcXG4tXFx0cmV0dXJuIHZtZy1cXHUwMDNlcGdvZmY7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWdfcGFnZXMoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcXG4ge1xcbiBcXHRjb25zdCB1bnNpZ25lZCBsb25nIHNpemUgPSB2bWctXFx1MDAzZWVuZCAtIHZtZy1cXHUwMDNlc3RhcnQ7XFxuQEAgLTI0OSw2ICsyNDUsMTEgQEAgc3RhdGljIGlubGluZSBwZ29mZl90IHZtZ19wYWdlcyhjb25zdCBzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nKVxcbiBcXHRyZXR1cm4gc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1nX3N0YXJ0X3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXFxuK3tcXG4rXFx0cmV0dXJuIHZtZy1cXHUwMDNlcGdvZmY7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWdfZW5kX3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXFxuIHtcXG4gXFx0cmV0dXJuIHZtZ19zdGFydF9wZ29mZih2bWcpICsgdm1nX3BhZ2VzKHZtZyk7XFxuQEAgLTI2Niw5ICsyNjcsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X3NhbmVfcGdvZmYoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgcGdvZmYpXFxuIFxcdCAqL1xcbiBcXHRpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSlcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHQvKiBNQVBfUFJJVkFURS0vZGV2L3plcm8gaXMgYW5vbiwgbm9uLU5VTEwgdm1fZmlsZSwgYnV0IGhhcyBmaWxlIHBnb2ZmLiAqL1xcbi1cXHRpZiAodm1hLVxcdTAwM2V2bV9maWxlKVxcbi1cXHRcXHRyZXR1cm47XFxuIFxcdC8qIElmIGZhdWx0ZWQgaW4sIGNvdWxkIGhhdmUgYmVlbiByZW1hcHBlZC4gKi9cXG4gXFx0aWYgKHZtYS1cXHUwMDNlYW5vbl92bWEpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMjgzLDQ4ICsyODEsMTMwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfc2V0X3Bnb2ZmKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IHBnb2ZmKVxcbiBcXHR2bWEtXFx1MDAzZXZtX3Bnb2ZmID0gcGdvZmY7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWdfc3RhcnRfYW5vbl9wZ29mZihjb25zdCBzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nKVxcbit7XFxuK1xcdHJldHVybiB2bWctXFx1MDAzZWFub25fcGdvZmY7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWdfZW5kX2Fub25fcGdvZmYoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcXG4re1xcbitcXHRyZXR1cm4gdm1nX3N0YXJ0X2Fub25fcGdvZmYodm1nKSArIHZtZ19wYWdlcyh2bWcpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgX192bWFfc2V0X3ZpcnRfcGdvZmYoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgcGdvZmYpXFxuK3tcXG4rI2lmZGVmIENPTkZJR182NEJJVFxcbitcXHR2bWEtXFx1MDAzZV9fdm1fdmlydF9wZ29mZl9oaSA9IHBnb2ZmIFxcdTAwM2VcXHUwMDNlIDMyO1xcbisjZW5kaWZcXG4rXFx0dm1hLVxcdTAwM2VfX3ZtX3ZpcnRfcGdvZmZfbG8gPSBwZ29mZiBcXHUwMDI2IEdFTk1BU0soMzEsIDApO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgdm1hX3NldF92aXJ0X3Bnb2ZmKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IHBnb2ZmKVxcbit7XFxuK1xcdHZtYV9hc3NlcnRfY2FuX21vZGlmeSh2bWEpO1xcbitcXHRfX3ZtYV9zZXRfdmlydF9wZ29mZih2bWEsIHBnb2ZmKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIHZtYV9hZGRfcGdvZmYoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgZGVsdGEpXFxuIHtcXG4gXFx0dm1hX2Fzc2VydF9jYW5fbW9kaWZ5KHZtYSk7XFxuIFxcdHZtYV9zZXRfcGdvZmYodm1hLCB2bWFfc3RhcnRfcGdvZmYodm1hKSArIGRlbHRhKTtcXG4rXFx0dm1hX3NldF92aXJ0X3Bnb2ZmKHZtYSwgdm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSArIGRlbHRhKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHZtYV9zdWJfcGdvZmYoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgZGVsdGEpXFxuIHtcXG4gXFx0dm1hX2Fzc2VydF9jYW5fbW9kaWZ5KHZtYSk7XFxuIFxcdHZtYV9zZXRfcGdvZmYodm1hLCB2bWFfc3RhcnRfcGdvZmYodm1hKSAtIGRlbHRhKTtcXG4rXFx0dm1hX3NldF92aXJ0X3Bnb2ZmKHZtYSwgdm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSAtIGRlbHRhKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHZtYV9hbm9uX3Bnb2ZmX2FkZHIoKSAtIENhbGN1bGF0ZXMgdGhlIGFic29sdXRlIGFub255bW91cyBwYWdlIG9mZnNldCBvZlxcbisgKiBAYWRkcmVzcy5cXG4rICogQHZtYTogVGhlIFZNQSB3aG9zZSBhbm9ueW1vdXMgcGFnZSBvZmZzZXQgaXMgcmVxdWlyZWQuXFxuKyAqIEBhZGRyZXNzOiBUaGUgYWRkcmVzcyB3aG9zZSBhYnNvbHV0ZSBwYWdlIG9mZnNldCBpcyByZXF1aXJlZC5cXG4rICpcXG4rICogSWYgdGhlIFZNQSBpcyBhIHNoYXJlZCBmaWxlLWJhY2tlZCBtYXBwaW5nLCB0aGVuIHRoZSBmaWxlLWJhc2VkIHBhZ2Ugb2Zmc2V0XFxuKyAqIGlzIHJldHVybmVkLlxcbisgKlxcbisgKiBPdGhlcndpc2UsIHRoZSB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IGlzIHJldHVybmVkLlxcbisgKlxcbisgKiBUaGlzIG1lYW5zIHRoYXQgc2hhcmVkIGZpbGUtYmFja2VkIG1hcHBpbmdzIGFyZSBjb3JyZWN0bHkgbWVyZ2VkIGJhc2VkIG9uXFxuKyAqIHRoZWlyIGZpbGUgcGFnZSBvZmZzZXQgY29tcGF0aWJpbGl0eS5cXG4rICpcXG4rICogUmV0dXJuczogVGhlIGFic29sdXRlIGFub255bW91cyBwYWdlIG9mZnNldCBvZiBAYWRkcmVzcyB3aXRoaW4gQHZtYS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWFfYW5vbl9wZ29mZl9hZGRyKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4re1xcbitcXHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCkpXFxuK1xcdFxcdHJldHVybiBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpO1xcbitcXG4rXFx0cmV0dXJuIGxpbmVhcl92aXJ0X3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTtcXG4gfVxcbiBcXG4tI2RlZmluZSBWTUdfU1RBVEUobmFtZSwgbW1fLCB2bWlfLCBzdGFydF8sIGVuZF8sIHZtYV9mbGFnc18sIHBnb2ZmXylcXHRcXFxcXFxuKy8qKlxcbisgKiB2bWFfc3RhcnRfYW5vbl9wZ29mZigpIC0gQ2FsY3VsYXRlcyB0aGUgYWJzb2x1dGUgYW5vbnltb3VzIHBhZ2Ugb2Zmc2V0IHVzZWRcXG4rICogZm9yIHB1cnBvc2VzIG9mIG1lcmdlIGNvbXBhdGliaWxpdHkuXFxuKyAqIEB2bWE6IFRoZSBWTUEgd2hvc2UgYW5vbnltb3VzIHBhZ2Ugb2Zmc2V0IGlzIHJlcXVpcmVkLlxcbisgKlxcbisgKiBTZWUgdm1hX2Fub25fcGdvZmZfYWRkcigpLlxcbisgKlxcbisgKiBSZXR1cm5zOiBUaGUgYWJzb2x1dGUgYW5vbnltb3VzIHBhZ2Ugb2Zmc2V0IG9mIEB2bWEgZm9yIHB1cnBvc2VzIG9mIG1lcmdpbmcuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1hX3N0YXJ0X2Fub25fcGdvZmYoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuK3tcXG4rXFx0cmV0dXJuIHZtYV9hbm9uX3Bnb2ZmX2FkZHIodm1hLCB2bWEtXFx1MDAzZXZtX3N0YXJ0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHZtYV9lbmRfYW5vbl9wZ29mZigpIC0gQ2FsY3VsYXRlcyB0aGUgYWJzb2x1dGUgZXhjbHVzaXZlIGVuZCBhbm9ueW1vdXMgcGFnZVxcbisgKiBvZmZzZXQgdXNlZCBmb3IgcHVycG9zZXMgb2YgbWVyZ2UgY29tcGF0aWJpbGl0eS5cXG4rICogQHZtYTogVGhlIFZNQSB3aG9zc2UgYW5vbnltb3VzIGVuZCBwYWdlIG9mZnNldCBpcyByZXF1aXJlZC5cXG4rICpcXG4rICogU2VlIHZtYV9zdGFydF9hbm9uX3Bnb2ZmKCkuXFxuKyAqXFxuKyAqIFJldHVybnM6IFRoZSBhYnNvbHV0ZSBleGNsdXNpdmUgZW5kIGFub255bW91cyBwYWdlIG9mZnNldCBvZiBAdm1hIGZvclxcbisgKiBwdXJwb3NlcyBvZiBtZXJnaW5nLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9lbmRfYW5vbl9wZ29mZihjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4re1xcbitcXHRyZXR1cm4gdm1hX3N0YXJ0X2Fub25fcGdvZmYodm1hKSArIHZtYV9wYWdlcyh2bWEpO1xcbit9XFxuK1xcbisjZGVmaW5lIFZNR19TVEFURShuYW1lLCBtbV8sIHZtaV8sIHN0YXJ0XywgZW5kXywgdm1hX2ZsYWdzXywgcGdvZmZfLCBhbm9uX3Bnb2ZmXykgXFxcXFxcbitcXHRzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCBuYW1lID0ge1xcdFxcdFxcdFxcdFxcdCAgXFxcXFxcbitcXHRcXHQubW0gPSBtbV8sXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXFxcXFxuK1xcdFxcdC52bWkgPSB2bWlfLFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcXFxcbitcXHRcXHQuc3RhcnQgPSBzdGFydF8sXFx0XFx0XFx0XFx0XFx0XFx0ICBcXFxcXFxuK1xcdFxcdC5lbmQgPSBlbmRfLFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcXFxcbitcXHRcXHQudm1hX2ZsYWdzID0gdm1hX2ZsYWdzXyxcXHRcXHRcXHRcXHRcXHQgIFxcXFxcXG4rXFx0XFx0LnBnb2ZmID0gcGdvZmZfLFxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcXFxcbitcXHRcXHQuYW5vbl9wZ29mZiA9IGFub25fcGdvZmZfLFxcdFxcdFxcdFxcdFxcdCAgXFxcXFxcbitcXHRcXHQuc3RhdGUgPSBWTUFfTUVSR0VfU1RBUlQsXFx0XFx0XFx0XFx0XFx0ICBcXFxcXFxuK1xcdH1cXG4rXFxuKyNkZWZpbmUgVk1HX1ZNQV9TVEFURShuYW1lLCB2bWlfLCBwcmV2Xywgdm1hXywgc3RhcnRfLCBlbmRfKVxcdFxcdFxcXFxcXG4gXFx0c3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgbmFtZSA9IHtcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdC5tbSA9IG1tXyxcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdC5tbSA9IHZtYV8tXFx1MDAzZXZtX21tLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0LnZtaSA9IHZtaV8sXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQucHJldiA9IHByZXZfLFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0Lm1pZGRsZSA9IHZtYV8sXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQubmV4dCA9IE5VTEwsXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHQuc3RhcnQgPSBzdGFydF8sXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHQuZW5kID0gZW5kXyxcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdC52bWFfZmxhZ3MgPSB2bWFfZmxhZ3NfLFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0LnBnb2ZmID0gcGdvZmZfLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0LnZtX2ZsYWdzID0gdm1hXy1cXHUwMDNldm1fZmxhZ3MsXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQucGdvZmYgPSBsaW5lYXJfcGFnZV9pbmRleCh2bWFfLCBzdGFydF8pLFxcdFxcdFxcXFxcXG4rXFx0XFx0LmFub25fcGdvZmYgPSB2bWFfYW5vbl9wZ29mZl9hZGRyKHZtYV8sIHN0YXJ0XyksXFx0XFxcXFxcbitcXHRcXHQuZmlsZSA9IHZtYV8tXFx1MDAzZXZtX2ZpbGUsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQuYW5vbl92bWEgPSB2bWFfLVxcdTAwM2Vhbm9uX3ZtYSxcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdC5wb2xpY3kgPSB2bWFfcG9saWN5KHZtYV8pLFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0LnVmZmRfY3R4ID0gdm1hXy1cXHUwMDNldm1fdXNlcmZhdWx0ZmRfY3R4LFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0LmFub25fbmFtZSA9IGFub25fdm1hX25hbWUodm1hXyksXFx0XFx0XFx0XFxcXFxcbiBcXHRcXHQuc3RhdGUgPSBWTUFfTUVSR0VfU1RBUlQsXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHR9XFxuIFxcbi0jZGVmaW5lIFZNR19WTUFfU1RBVEUobmFtZSwgdm1pXywgcHJldl8sIHZtYV8sIHN0YXJ0XywgZW5kXylcXHRcXFxcXFxuLVxcdHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0IG5hbWUgPSB7XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHQubW0gPSB2bWFfLVxcdTAwM2V2bV9tbSxcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdC52bWkgPSB2bWlfLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0LnByZXYgPSBwcmV2XyxcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdC5taWRkbGUgPSB2bWFfLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0Lm5leHQgPSBOVUxMLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0LnN0YXJ0ID0gc3RhcnRfLFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0LmVuZCA9IGVuZF8sXFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHQudm1fZmxhZ3MgPSB2bWFfLVxcdTAwM2V2bV9mbGFncyxcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdC5wZ29mZiA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYV8sIHN0YXJ0XyksXFx0XFxcXFxcbi1cXHRcXHQuZmlsZSA9IHZtYV8tXFx1MDAzZXZtX2ZpbGUsXFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHQuYW5vbl92bWEgPSB2bWFfLVxcdTAwM2Vhbm9uX3ZtYSxcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdC5wb2xpY3kgPSB2bWFfcG9saWN5KHZtYV8pLFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0LnVmZmRfY3R4ID0gdm1hXy1cXHUwMDNldm1fdXNlcmZhdWx0ZmRfY3R4LFxcdFxcdFxcXFxcXG4tXFx0XFx0LmFub25fbmFtZSA9IGFub25fdm1hX25hbWUodm1hXyksXFx0XFx0XFxcXFxcbi1cXHRcXHQuc3RhdGUgPSBWTUFfTUVSR0VfU1RBUlQsXFx0XFx0XFx0XFxcXFxcbi1cXHR9XFxuLVxcbiAjaWZkZWYgQ09ORklHX0RFQlVHX1ZNX01BUExFX1RSRUVcXG4gdm9pZCB2YWxpZGF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuICNlbHNlXFxuQEAgLTUwNiw3ICs1ODYsNyBAQCB2b2lkIHVubGlua19maWxlX3ZtYV9iYXRjaF9hZGQoc3RydWN0IHVubGlua192bWFfZmlsZV9iYXRjaCAqdmIsXFxuIFxcbiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmNvcHlfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXFxuIFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHBnb2ZmX3QgcGdvZmYsXFxuLVxcdGJvb2wgKm5lZWRfcm1hcF9sb2Nrcyk7XFxuK1xcdHBnb2ZmX3QgYW5vbl9wZ29mZiwgYm9vbCAqbmVlZF9ybWFwX2xvY2tzKTtcXG4gXFxuIHN0cnVjdCBhbm9uX3ZtYSAqZmluZF9tZXJnZWFibGVfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hX2V4ZWMuYyBiL21tL3ZtYV9leGVjLmNcXG5pbmRleCA3YWYxMjYwNjg5Yjk3ZS4uNTg2YzUyMTU1OTQyNDUgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hX2V4ZWMuY1xcbisrKyBiL21tL3ZtYV9leGVjLmNcXG5AQCAtNDEsNyArNDEsNyBAQCBpbnQgcmVsb2NhdGVfdm1hX2Rvd24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc2hpZnQpXFxuIFxcdHVuc2lnbmVkIGxvbmcgbmV3X2VuZCA9IG9sZF9lbmQgLSBzaGlmdDtcXG4gXFx0Vk1BX0lURVJBVE9SKHZtaSwgbW0sIG5ld19zdGFydCk7XFxuIFxcdFZNR19TVEFURSh2bWcsIG1tLCBcXHUwMDI2dm1pLCBuZXdfc3RhcnQsIG9sZF9lbmQsIEVNUFRZX1ZNQV9GTEFHUyxcXG4tXFx0XFx0ICB2bWFfc3RhcnRfcGdvZmYodm1hKSk7XFxuK1xcdFxcdCAgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIHZtYV9zdGFydF9hbm9uX3Bnb2ZmKHZtYSkpO1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQ7XFxuIFxcdHN0cnVjdCBtbXVfZ2F0aGVyIHRsYjtcXG4gXFx0UEFHRVRBQkxFX01PVkUocG1jLCB2bWEsIHZtYSwgb2xkX3N0YXJ0LCBuZXdfc3RhcnQsIGxlbmd0aCk7XFxuZGlmZiAtLWdpdCBhL21tL3ZtYV9pbml0LmMgYi9tbS92bWFfaW5pdC5jXFxuaW5kZXggNzE1ZmVlZTI4M2YwZmIuLjcxMGIxODg0OWEzNjk2IDEwMDY0NFxcbi0tLSBhL21tL3ZtYV9pbml0LmNcXG4rKysgYi9tbS92bWFfaW5pdC5jXFxuQEAgLTUxLDYgKzUxLDcgQEAgc3RhdGljIHZvaWQgdm1fYXJlYV9pbml0X2Zyb20oY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXFxuIFxcdGRlc3QtXFx1MDAzZXZtX2VuZCA9IHNyYy1cXHUwMDNldm1fZW5kO1xcbiBcXHRkZXN0LVxcdTAwM2Vhbm9uX3ZtYSA9IHNyYy1cXHUwMDNlYW5vbl92bWE7XFxuIFxcdGRlc3QtXFx1MDAzZXZtX3Bnb2ZmID0gdm1hX3N0YXJ0X3Bnb2ZmKHNyYyk7XFxuK1xcdF9fdm1hX3NldF92aXJ0X3Bnb2ZmKGRlc3QsIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHNyYykpO1xcbiBcXHRkZXN0LVxcdTAwM2V2bV9maWxlID0gc3JjLVxcdTAwM2V2bV9maWxlO1xcbiBcXHRkZXN0LVxcdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBzcmMtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcXG4gXFx0dm1fZmxhZ3NfaW5pdChkZXN0LCBzcmMtXFx1MDAzZXZtX2ZsYWdzKTtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hX2ludGVybmFsLmggYi9tbS92bWFfaW50ZXJuYWwuaFxcbmluZGV4IDRkMzAwZTdiYmFmNGMyLi4zODVjMGFiMTM3Nzc0OCAxMDA2NDRcXG4tLS0gYS9tbS92bWFfaW50ZXJuYWwuaFxcbisrKyBiL21tL3ZtYV9pbnRlcm5hbC5oXFxuQEAgLTIzLDYgKzIzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tzbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2h1Z2VwYWdlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWFqb3IuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21hcGxlX3RyZWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmNcXG5pbmRleCA1MTllNWFjMDJkYjc4Yy4uZWRmYmQzOWFlNThlYjQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmNcXG5AQCAtMTMwNSw2ICsxMzA1LDE2NyBAQCBURVNUX0YobWVyZ2UsIG1lcmdlX3ZtYXNfd2l0aF9tc2VhbClcXG4gXFx0QVNTRVJUX0VRKHByb2NtYXAtXFx1MDAzZXF1ZXJ5LnZtYV9lbmQsICh1bnNpZ25lZCBsb25nKXB0ciArIDIgKiBwYWdlX3NpemUpO1xcbiB9XFxuIFxcbitURVNUX0YobWVyZ2UsIHZpcnRfYW5kX3BhZ2Vfb2Zmc2V0X21pc21hdGNoX21lbWZkKVxcbit7XFxuK1xcdHN0cnVjdCBwcm9jbWFwX2ZkICpwcm9jbWFwID0gXFx1MDAyNnNlbGYtXFx1MDAzZXByb2NtYXA7XFxuK1xcdHVuc2lnbmVkIGludCBwYWdlX3NpemUgPSBzZWxmLVxcdTAwM2VwYWdlX3NpemU7XFxuK1xcdGNoYXIgKmNhcnZlb3V0ID0gc2VsZi1cXHUwMDNlY2FydmVvdXQ7XFxuK1xcdGNoYXIgKnB0ciwgKnB0cjI7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdC8qIENyZWF0ZSBhIDEwIHBhZ2UgbWVtZmQgZGVzY3JpcHRvci4gKi9cXG4rXFx0ZmQgPSBtZW1mZF9jcmVhdGUoXFxcInZpcnRfcGFnZV9vZmZzZXRfdGVzdFxcXCIsIE1GRF9DTE9FWEVDKTtcXG4rXFx0QVNTRVJUX05FKGZkLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShmdHJ1bmNhdGUoZmQsIDEwICogcGFnZV9zaXplKSwgMCk7XFxuK1xcbitcXHQvKiBNYXAgYSByZWdpb24gdXNpbmcgdGhlIG1lbWZkIGF0IHBhZ2Ugb2Zmc2V0IDAuICovXFxuK1xcdHB0ciA9IG1tYXAoY2FydmVvdXQsIDUgKiBwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdFxcdCAgIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZCwgMCk7XFxuK1xcdEFTU0VSVF9ORShwdHIsIE1BUF9GQUlMRUQpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTWFwIGFub3RoZXIgc2VwYXJhdGVseSwgYW5kIGZhdWx0IGluLCBhdCBwYWdlIG9mZnNldCA1OlxcbitcXHQgKlxcbitcXHQgKiB8LS0tLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfFxcbitcXHQgKiB8IHVuZmF1bHRlZCB8ICAgICAgICAgICB8IGZhdWx0ZWQgfFxcbitcXHQgKiB8LS0tLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfFxcbitcXHQgKi9cXG4rXFx0cHRyMiA9IG1tYXAoXFx1MDAyNmNhcnZlb3V0WzEwICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSxcXG4rXFx0XFx0ICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLFxcbitcXHRcXHQgICAgZmQsIDUgKiBwYWdlX3NpemUpO1xcbitcXHRBU1NFUlRfTkUocHRyMiwgTUFQX0ZBSUxFRCk7XFxuK1xcdHB0cjJbMF0gPSAneCc7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBOb3cgbW92ZSBpdCBpbiBwbGFjZTpcXG4rXFx0ICpcXG4rXFx0ICogICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS18XFxuK1xcdCAqICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfFxcbitcXHQgKiAgICAgICAgICAgICAgICAgICB2ICAgICAgICAgIHxcXG4rXFx0ICogfC0tLS0tLS0tLS0tfCAgICAgICAgICAgfC0tLS0tLS0tLXxcXG4rXFx0ICogfCB1bmZhdWx0ZWQgfCAgICAgICAgICAgfCBmYXVsdGVkIHxcXG4rXFx0ICogfC0tLS0tLS0tLS0tfCAgICAgICAgICAgfC0tLS0tLS0tLXxcXG4rXFx0ICpcXG4rXFx0ICogQmVjYXVzZSB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IG9mIHRoZSBmYXVsdGVkIHJlZ2lvbiBpcyBub3dcXG4rXFx0ICogXFx1MDAyNmNhcnZlb3V0WzEwICogcGFnZV9zaXplXSwgZGVzcGl0ZSB0aGUgdHdvIHJlZ2lvbnMgYmVpbmcgbWVyZ2VhYmxlXFxuK1xcdCAqIGR1ZSB0byBmaWxlIHBhZ2Ugb2Zmc2V0LCB0aGV5IGFyZSBOT1QgbWVyZ2VhYmxlIGR1ZSB0byB2aXJ0dWFsIHBhZ2VcXG4rXFx0ICogb2Zmc2V0LlxcbitcXHQgKi9cXG4rXFx0cHRyMiA9IHN5c19tcmVtYXAocHRyMiwgNSAqIHBhZ2Vfc2l6ZSwgNSAqIHBhZ2Vfc2l6ZSxcXG4rXFx0XFx0XFx0ICBNUkVNQVBfTUFZTU9WRSB8IE1SRU1BUF9GSVhFRCxcXG4rXFx0XFx0XFx0ICBcXHUwMDI2Y2FydmVvdXRbNSAqIHBhZ2Vfc2l6ZV0pO1xcbitcXHRBU1NFUlRfTkUocHRyMiwgTUFQX0ZBSUxFRCk7XFxuK1xcbitcXHQvKiBBc3NlcnQgdGhhdCB0aGV5IGRpZCBub3QgbWVyZ2UuICovXFxuK1xcdEFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7XFxuK1xcdEFTU0VSVF9FUShwcm9jbWFwLVxcdTAwM2VxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7XFxuK1xcdEFTU0VSVF9FUShwcm9jbWFwLVxcdTAwM2VxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgKyA1ICogcGFnZV9zaXplKTtcXG4rfVxcbitcXG4rVEVTVF9GKG1lcmdlLCBtZXJnZV9tYXBfcHJpdmF0ZV9kZXZfemVyb191bmZhdWx0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSBcXHUwMDI2c2VsZi1cXHUwMDNlcHJvY21hcDtcXG4rXFx0dW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZTtcXG4rXFx0Y2hhciAqY2FydmVvdXQgPSBzZWxmLVxcdTAwM2VjYXJ2ZW91dDtcXG4rXFx0Y2hhciAqcHRyLCAqcHRyMjtcXG4rXFx0aW50IGZkX3plcm87XFxuK1xcbitcXHRpZiAoYWNjZXNzKFxcXCIvZGV2L3plcm9cXFwiLCBGX09LKSlcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJObyAvZGV2L3plcm8uXFxcIik7XFxuK1xcdGZkX3plcm8gPSBvcGVuKFxcXCIvZGV2L3plcm9cXFwiLCBPX1JEV1IpO1xcbitcXHRBU1NFUlRfTkUoZmRfemVybywgLTEpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTWFwIHR3byBNQVBfUFJJVkFURS0vZGV2L3plcm8gVk1BcyBuZXh0IHRvIG9uZSBhbm90aGVyIHdpdGggb2Zmc2V0IDBcXG4rXFx0ICogZWFjaC5cXG4rXFx0ICpcXG4rXFx0ICogV2l0aCB0aGVzZSBiZWluZyBtYWRlIHRydWx5IGFub255bW91cyB1cG9uIG1hcHBpbmcsIHRoZXkgd2lsbFxcbitcXHQgKiBtZXJnZS4gSWYgdGhleSB3ZXJlIGZpbGUtYmFja2VkIFZNQXMgdGhlIHBhZ2Ugb2Zmc2V0cyB3b3VsZCBwcmV2ZW50XFxuK1xcdCAqIG1lcmdlOlxcbitcXHQgKlxcbitcXHQgKiB8LS0tLS18fC0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS18XFxuK1xcdCAqIHwgcHRyIHx8IHB0cjIgfCAtXFx1MDAzZSB8ICAgICBwdHIgICAgIHxcXG4rXFx0ICogfC0tLS0tfHwtLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tfFxcbitcXHQgKi9cXG4rXFx0cHRyID0gbW1hcChjYXJ2ZW91dCwgNSAqIHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4rXFx0XFx0ICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApO1xcbitcXHRpZiAocHRyID09IE1BUF9GQUlMRUQpIHtcXG4rXFx0XFx0Y2xvc2UoZmRfemVybyk7XFxuK1xcdFxcdEFTU0VSVF9UUlVFKGZhbHNlKTtcXG4rXFx0fVxcbitcXHRwdHIyID0gbW1hcChcXHUwMDI2Y2FydmVvdXRbNSAqIHBhZ2Vfc2l6ZV0sIDUgKiBwYWdlX3NpemUsXFxuK1xcdFxcdCAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZF96ZXJvLCAwKTtcXG4rXFx0aWYgKHB0cjIgPT0gTUFQX0ZBSUxFRCkge1xcbitcXHRcXHRjbG9zZShmZF96ZXJvKTtcXG4rXFx0XFx0QVNTRVJUX1RSVUUoZmFsc2UpO1xcbitcXHR9XFxuK1xcdGNsb3NlKGZkX3plcm8pO1xcbitcXG4rXFx0LyogQXNzZXJ0IHRoYXQgdGhleSBtZXJnZWQuICovXFxuK1xcdEFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7XFxuK1xcdEFTU0VSVF9FUShwcm9jbWFwLVxcdTAwM2VxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7XFxuK1xcdEFTU0VSVF9FUShwcm9jbWFwLVxcdTAwM2VxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgKyAxMCAqIHBhZ2Vfc2l6ZSk7XFxuK31cXG4rXFxuK1RFU1RfRihtZXJnZSwgbWVyZ2VfbWFwX3ByaXZhdGVfZGV2X3plcm9fZmF1bHRlZF91bmZhdWx0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSBcXHUwMDI2c2VsZi1cXHUwMDNlcHJvY21hcDtcXG4rXFx0dW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZTtcXG4rXFx0Y2hhciAqY2FydmVvdXQgPSBzZWxmLVxcdTAwM2VjYXJ2ZW91dDtcXG4rXFx0Y2hhciAqcHRyLCAqcHRyMjtcXG4rXFx0aW50IGZkX3plcm87XFxuK1xcbitcXHRpZiAoYWNjZXNzKFxcXCIvZGV2L3plcm9cXFwiLCBGX09LKSlcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJObyAvZGV2L3plcm8uXFxcIik7XFxuK1xcdGZkX3plcm8gPSBvcGVuKFxcXCIvZGV2L3plcm9cXFwiLCBPX1JEV1IpO1xcbitcXHRBU1NFUlRfTkUoZmRfemVybywgLTEpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTWFwIGEgTUFQX1BSSVZBVEUgbWFwcGluZyBvZiAvZGV2L3plcm8gd2l0aCBwYWdlIG9mZnNldCAwLCB0aGVuIGZhdWx0XFxuK1xcdCAqIGl0IGluOlxcbitcXHQgKlxcbitcXHQgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcXG4rXFx0ICogfCAgICAgICAgICAgZmF1bHRlZCAgICAgICAgICAgICB8XFxuK1xcdCAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxcbitcXHQgKi9cXG4rXFx0cHRyID0gbW1hcChjYXJ2ZW91dCwgMTUgKiBwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdFxcdCAgIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZF96ZXJvLCAwKTtcXG4rXFx0aWYgKHB0ciA9PSBNQVBfRkFJTEVEKSB7XFxuK1xcdFxcdGNsb3NlKGZkX3plcm8pO1xcbitcXHRcXHRBU1NFUlRfVFJVRShmYWxzZSk7XFxuK1xcdH1cXG4rXFx0bWVtc2V0KHB0ciwgJ3gnLCAxNSAqIHBhZ2Vfc2l6ZSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBVbm1hcCB0aGUgbWlkZGxlOlxcbitcXHQgKlxcbitcXHQgKiB8LS0tLS0tLS0tfCAgICAgICAgICAgfC0tLS0tLS0tLXxcXG4rXFx0ICogfCBmYXVsdGVkIHwgICAgICAgICAgIHwgZmF1bHRlZCB8XFxuK1xcdCAqIHwtLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfFxcbitcXHQgKi9cXG4rXFx0QVNTRVJUX0VRKG11bm1hcChcXHUwMDI2cHRyWzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplKSwgMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBNYXAgaW4gYSBuZXcgdW5mYXVsdGVkIG1hcHBpbmcgaW4gdGhlIG1pZGRsZSB3aXRoIHBhZ2Ugb2Zmc2V0IDAgLVxcbitcXHQgKiB0aGlzIHNob3VsZCBtZXJnZSBhbmQgd291bGQgbm90IGlmIGl0IHdlcmUgdHJlYXRlZCBhcyBhIGZpbGUgcmF0aGVyXFxuK1xcdCAqIHRoYW4gcHVyZSBhbm9uOlxcbitcXHQgKlxcbitcXHQgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXxcXG4rXFx0ICogfCBmYXVsdGVkIHwgdW5mYXVsdGVkIHwgZmF1bHRlZCB8XFxuK1xcdCAqIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tfFxcbitcXHQgKi9cXG4rXFx0cHRyMiA9IG1tYXAoXFx1MDAyNmNhcnZlb3V0WzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplLFxcbitcXHRcXHQgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsXFxuK1xcdFxcdCAgICBmZF96ZXJvLCAwKTtcXG4rXFx0Y2xvc2UoZmRfemVybyk7XFxuK1xcdEFTU0VSVF9ORShwdHIyLCBNQVBfRkFJTEVEKTtcXG4rXFxuK1xcdC8qIEFzc2VydCB0aGF0IHRoZXkgbWVyZ2VkLiAqL1xcbitcXHRBU1NFUlRfVFJVRShmaW5kX3ZtYV9wcm9jbWFwKHByb2NtYXAsIHB0cikpO1xcbitcXHRBU1NFUlRfRVEocHJvY21hcC1cXHUwMDNlcXVlcnkudm1hX3N0YXJ0LCAodW5zaWduZWQgbG9uZylwdHIpO1xcbitcXHRBU1NFUlRfRVEocHJvY21hcC1cXHUwMDNlcXVlcnkudm1hX2VuZCwgKHVuc2lnbmVkIGxvbmcpcHRyICsgMTUgKiBwYWdlX3NpemUpO1xcbit9XFxuK1xcbiBURVNUX0YobWVyZ2Vfd2l0aF9mb3JrLCBtcmVtYXBfZmF1bHRlZF90b191bmZhdWx0ZWRfcHJldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcHJvY21hcF9mZCAqcHJvY21hcCA9IFxcdTAwMjZzZWxmLVxcdTAwM2Vwcm9jbWFwO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oIGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxcbmluZGV4IGM1MmIyMzc3M2NkMjYzLi5iNGYwZjdjMjRmY2I4YSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxcbkBAIC0xNSw2ICsxNSwxNiBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmdldF9jdXJyZW50KHZvaWQpO1xcbiAjZGVmaW5lIE1NRl9IQVNfTURXRVxcdDI4XFxuICNkZWZpbmUgY3VycmVudCBnZXRfY3VycmVudCgpXFxuIFxcbisjZGVmaW5lIE1JTk9SQklUU1xcdDIwXFxuKyNkZWZpbmUgTUlOT1JNQVNLXFx0KCgxVSBcXHUwMDNjXFx1MDAzYyBNSU5PUkJJVFMpIC0gMSlcXG4rXFxuKyNkZWZpbmUgTUFKT1IoZGV2KVxcdCgodW5zaWduZWQgaW50KSAoKGRldikgXFx1MDAzZVxcdTAwM2UgTUlOT1JCSVRTKSlcXG4rI2RlZmluZSBNSU5PUihkZXYpXFx0KCh1bnNpZ25lZCBpbnQpICgoZGV2KSBcXHUwMDI2IE1JTk9STUFTSykpXFxuKyNkZWZpbmUgTUtERVYobWEsIG1pKVxcdCgoKG1hKSBcXHUwMDNjXFx1MDAzYyBNSU5PUkJJVFMpIHwgKG1pKSlcXG4rXFxuKyNkZWZpbmUgTUVNX01BSk9SXFx0XFx0MVxcbisjZGVmaW5lIERFVlpFUk9fTUlOT1JcXHQ1XFxuK1xcbiAvKlxcbiAgKiBEZWZpbmUgdGhlIHRhc2sgY29tbWFuZCBuYW1lIGxlbmd0aCBhcyBlbnVtLCB0aGVuIGl0IGNhbiBiZSB2aXNpYmxlIHRvXFxuICAqIEJQRiBwcm9ncmFtcy5cXG5AQCAtNDUsNiArNTUsOSBAQCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSB7XFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRmbGFncztcXG4gXFx0YXRvbWljX3RcXHRcXHRpX21tYXBfd3JpdGFibGU7XFxuIH07XFxuK3N0cnVjdCBpbm9kZSB7XFxuK1xcdGRldl90XFx0XFx0XFx0aV9yZGV2O1xcbit9O1xcbiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHtcXG4gXFx0aW50ICgqbW1hcCkoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopO1xcbiBcXHRpbnQgKCptbWFwX3ByZXBhcmUpKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKik7XFxuQEAgLTUyLDYgKzY1LDcgQEAgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB7XFxuIHN0cnVjdCBmaWxlIHtcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2VcXHQqZl9tYXBwaW5nO1xcbiBcXHRjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zXFx0KmZfb3A7XFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdFxcdCpmX2lub2RlO1xcbiB9O1xcbiBzdHJ1Y3QgYW5vbl92bWFfY2hhaW4ge1xcbiBcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hO1xcbkBAIC01NzcsNiArNTkxLDcgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHtcXG4gXFx0ICovXFxuIFxcdHVuc2lnbmVkIGludCB2bV9sb2NrX3NlcTtcXG4gI2VuZGlmXFxuK1xcdHVuc2lnbmVkIGludCBfX3ZtX3ZpcnRfcGdvZmZfbG87XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBBIGZpbGUncyBNQVBfUFJJVkFURSB2bWEgY2FuIGJlIGluIGJvdGggaV9tbWFwIHRyZWUgYW5kIGFub25fdm1hXFxuQEAgLTYxMiw2ICs2MjcsOSBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xcbiAjaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xcbiBcXHQvKiBVbnN0YWJsZSBSQ1UgcmVhZGVycyBhcmUgYWxsb3dlZCB0byByZWFkIHRoaXMuICovXFxuIFxcdHJlZmNvdW50X3Qgdm1fcmVmY250O1xcbisjZW5kaWZcXG4rI2lmZGVmIENPTkZJR182NEJJVFxcbitcXHR1bnNpZ25lZCBpbnQgX192bV92aXJ0X3Bnb2ZmX2hpO1xcbiAjZW5kaWZcXG4gXFx0LypcXG4gXFx0ICogRm9yIGFyZWFzIHdpdGggYW4gYWRkcmVzcyBzcGFjZSBhbmQgYmFja2luZyBzdG9yZSxcXG5AQCAtMTMyMCw2ICsxMzM4LDI4IEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWFfZW5kX3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBcXHRyZXR1cm4gdm1hX3N0YXJ0X3Bnb2ZmKHZtYSkgKyB2bWFfcGFnZXModm1hKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9zdGFydF92aXJ0X3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbit7XFxuK1xcdHBnb2ZmX3QgcGdvZmYgPSAwO1xcbitcXG4rI2lmZGVmIENPTkZJR182NEJJVFxcbitcXHRwZ29mZiArPSB2bWEtXFx1MDAzZV9fdm1fdmlydF9wZ29mZl9oaTtcXG4rXFx0cGdvZmYgXFx1MDAzY1xcdTAwM2M9IDMyO1xcbisjZW5kaWZcXG4rXFx0cGdvZmYgKz0gdm1hLVxcdTAwM2VfX3ZtX3ZpcnRfcGdvZmZfbG87XFxuK1xcdHJldHVybiBwZ29mZjtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9lbmRfdmlydF9wZ29mZihjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4re1xcbitcXHRyZXR1cm4gdm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSArIHZtYV9wYWdlcyh2bWEpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1hX2xhc3RfdmlydF9wZ29mZihjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4re1xcbitcXHRyZXR1cm4gdm1hX2VuZF92aXJ0X3Bnb2ZmKHZtYSkgLSAxO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGludCB2ZnNfbW1hcF9wcmVwYXJlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxcbiB7XFxuIFxcdHJldHVybiBmaWxlLVxcdTAwM2VmX29wLVxcdTAwM2VtbWFwX3ByZXBhcmUoZGVzYyk7XFxuQEAgLTE1ODQsMyArMTYyNCw0MCBAQCBzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9nZXRfcGFnZV9wcm90KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiB7XFxuIFxcdHJldHVybiB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYS1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuK1xcbitzdGF0aWMgaW5saW5lIHBnb2ZmX3QgX19saW5lYXJfdmlydF9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbit7XFxuK1xcdHBnb2ZmX3QgcGdvZmY7XFxuK1xcbitcXHRwZ29mZiA9IGxpbmVhcl9wYWdlX2RlbHRhKHZtYSwgYWRkcmVzcyk7XFxuK1xcdHBnb2ZmICs9IHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSk7XFxuK1xcdHJldHVybiBwZ29mZjtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBwZ29mZl90IGxpbmVhcl92aXJ0X3BhZ2VfaW5kZXgoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbit7XFxuK1xcdGNvbnN0IHBnb2ZmX3QgcGdvZmYgPSBfX2xpbmVhcl92aXJ0X3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTtcXG4rXFxuK1xcdFZNX1dBUk5fT05fT05DRSh2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKSk7XFxuK1xcdGlmICghdm1hLVxcdTAwM2V2bV9maWxlKSAvKiBJcyBhbm9ueW1vdXMgZXhjZXB0IE1BUF9QUklWQVRFLS9kZXYvemVybyAqL1xcbitcXHRcXHRWTV9XQVJOX09OX09OQ0UocGdvZmYgIT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSk7XFxuK1xcbitcXHRyZXR1cm4gcGdvZmY7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICpmaWxlX2lub2RlKGNvbnN0IHN0cnVjdCBmaWxlICpmKVxcbit7XFxuK1xcdHJldHVybiBmLVxcdTAwM2VmX2lub2RlO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGltaW5vcihjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHJldHVybiBNSU5PUihpbm9kZS1cXHUwMDNlaV9yZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbWFqb3IoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG4re1xcbitcXHRyZXR1cm4gTUFKT1IoaW5vZGUtXFx1MDAzZWlfcmRldik7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmMgYi90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuY1xcbmluZGV4IGJlYTllYTZkYjAyYTRjLi5mNDEwYmI2Zjg1OGUxMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jXFxuQEAgLTIzLDcgKzIzLDggQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICphbGxvY192bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcbiBcXHR2bWEtXFx1MDAzZXZtX3N0YXJ0ID0gc3RhcnQ7XFxuIFxcdHZtYS1cXHUwMDNldm1fZW5kID0gZW5kO1xcbi1cXHR2bWEtXFx1MDAzZXZtX3Bnb2ZmID0gcGdvZmY7XFxuK1xcdHZtYV9zZXRfcGdvZmYodm1hLCBwZ29mZik7XFxuK1xcdHZtYV9zZXRfdmlydF9wZ29mZih2bWEsIHN0YXJ0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbiBcXHR2bWEtXFx1MDAzZWZsYWdzID0gdm1hX2ZsYWdzO1xcbiBcXHR2bWFfYXNzZXJ0X2RldGFjaGVkKHZtYSk7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tZXJnZS5jIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbWVyZ2UuY1xcbmluZGV4IGUzNTdhY2NjODQ5OTA1Li5hMDExMDdhYjhlMjEzNCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tZXJnZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbWVyZ2UuY1xcbkBAIC00NSw2ICs0NSw3IEBAIHZvaWQgdm1nX3NldF9yYW5nZShzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHR2bWctXFx1MDAzZXN0YXJ0ID0gc3RhcnQ7XFxuIFxcdHZtZy1cXHUwMDNlZW5kID0gZW5kO1xcbiBcXHR2bWctXFx1MDAzZXBnb2ZmID0gcGdvZmY7XFxuK1xcdHZtZy1cXHUwMDNlYW5vbl9wZ29mZiA9IHN0YXJ0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIFxcdHZtZy1cXHUwMDNldm1hX2ZsYWdzID0gdm1hX2ZsYWdzO1xcbiBcXG4gXFx0dm1nLVxcdTAwM2VqdXN0X2V4cGFuZCA9IGZhbHNlO1xcbkBAIC0xMDgsNiArMTA5LDcgQEAgc3RhdGljIGJvb2wgdGVzdF9zaW1wbGVfbWVyZ2Uodm9pZClcXG4gXFx0XFx0LmVuZCA9IDB4MjAwMCxcXG4gXFx0XFx0LnZtYV9mbGFncyA9IHZtYV9mbGFncyxcXG4gXFx0XFx0LnBnb2ZmID0gMSxcXG4rXFx0XFx0LmFub25fcGdvZmYgPSAxLFxcbiBcXHR9O1xcbiBcXG4gXFx0QVNTRVJUX0ZBTFNFKGF0dGFjaF92bWEoXFx1MDAyNm1tLCB2bWFfbGVmdCkpO1xcbkBAIC0xMTksNiArMTIxLDcgQEAgc3RhdGljIGJvb2wgdGVzdF9zaW1wbGVfbWVyZ2Uodm9pZClcXG4gXFx0QVNTRVJUX0VRKHZtYS1cXHUwMDNldm1fc3RhcnQsIDApO1xcbiBcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2V2bV9lbmQsIDB4MzAwMCk7XFxuIFxcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCk7XFxuK1xcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAwKTtcXG4gXFx0QVNTRVJUX0ZMQUdTX1NBTUVfTUFTSyhcXHUwMDI2dm1hLVxcdTAwM2VmbGFncywgdm1hX2ZsYWdzKTtcXG4gXFxuIFxcdGRldGFjaF9mcmVlX3ZtYSh2bWEpO1xcbkBAIC0xNTEsNiArMTU0LDcgQEAgc3RhdGljIGJvb2wgdGVzdF9zaW1wbGVfbW9kaWZ5KHZvaWQpXFxuIFxcdEFTU0VSVF9FUSh2bWEtXFx1MDAzZXZtX3N0YXJ0LCAweDEwMDApO1xcbiBcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2V2bV9lbmQsIDB4MjAwMCk7XFxuIFxcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMSk7XFxuK1xcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAxKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIE5vdyB3YWxrIHRocm91Z2ggdGhlIHRocmVlIHNwbGl0IFZNQXMgYW5kIG1ha2Ugc3VyZSB0aGV5IGFyZSBhc1xcbkBAIC0xNjMsNiArMTY3LDcgQEAgc3RhdGljIGJvb2wgdGVzdF9zaW1wbGVfbW9kaWZ5KHZvaWQpXFxuIFxcdEFTU0VSVF9FUSh2bWEtXFx1MDAzZXZtX3N0YXJ0LCAwKTtcXG4gXFx0QVNTRVJUX0VRKHZtYS1cXHUwMDNldm1fZW5kLCAweDEwMDApO1xcbiBcXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDApO1xcbitcXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSwgMCk7XFxuIFxcbiBcXHRkZXRhY2hfZnJlZV92bWEodm1hKTtcXG4gXFx0dm1hX2l0ZXJfY2xlYXIoXFx1MDAyNnZtaSk7XFxuQEAgLTE3Miw2ICsxNzcsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X3NpbXBsZV9tb2RpZnkodm9pZClcXG4gXFx0QVNTRVJUX0VRKHZtYS1cXHUwMDNldm1fc3RhcnQsIDB4MTAwMCk7XFxuIFxcdEFTU0VSVF9FUSh2bWEtXFx1MDAzZXZtX2VuZCwgMHgyMDAwKTtcXG4gXFx0QVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCAxKTtcXG4rXFx0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDEpO1xcbiBcXG4gXFx0ZGV0YWNoX2ZyZWVfdm1hKHZtYSk7XFxuIFxcdHZtYV9pdGVyX2NsZWFyKFxcdTAwMjZ2bWkpO1xcbkBAIC0xODEsNiArMTg3LDcgQEAgc3RhdGljIGJvb2wgdGVzdF9zaW1wbGVfbW9kaWZ5KHZvaWQpXFxuIFxcdEFTU0VSVF9FUSh2bWEtXFx1MDAzZXZtX3N0YXJ0LCAweDIwMDApO1xcbiBcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2V2bV9lbmQsIDB4MzAwMCk7XFxuIFxcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMik7XFxuK1xcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAyKTtcXG4gXFxuIFxcdGRldGFjaF9mcmVlX3ZtYSh2bWEpO1xcbiBcXHRtdHJlZV9kZXN0cm95KFxcdTAwMjZtbS5tbV9tdCk7XFxuQEAgLTIxMCw2ICsyMTcsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X3NpbXBsZV9leHBhbmQodm9pZClcXG4gXFx0QVNTRVJUX0VRKHZtYS1cXHUwMDNldm1fc3RhcnQsIDApO1xcbiBcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2V2bV9lbmQsIDB4MzAwMCk7XFxuIFxcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCk7XFxuK1xcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAwKTtcXG4gXFxuIFxcdGRldGFjaF9mcmVlX3ZtYSh2bWEpO1xcbiBcXHRtdHJlZV9kZXN0cm95KFxcdTAwMjZtbS5tbV9tdCk7XFxuQEAgLTIzMiw2ICsyNDAsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X3NpbXBsZV9zaHJpbmsodm9pZClcXG4gXFx0QVNTRVJUX0VRKHZtYS1cXHUwMDNldm1fc3RhcnQsIDApO1xcbiBcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2V2bV9lbmQsIDB4MTAwMCk7XFxuIFxcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCk7XFxuK1xcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAwKTtcXG4gXFxuIFxcdGRldGFjaF9mcmVlX3ZtYSh2bWEpO1xcbiBcXHRtdHJlZV9kZXN0cm95KFxcdTAwMjZtbS5tbV9tdCk7XFxuQEAgLTM0NCw2ICszNTMsNyBAQCBzdGF0aWMgYm9vbCBfX3Rlc3RfbWVyZ2VfbmV3KGJvb2wgaXNfc3RpY2t5LCBib29sIGFfaXNfc3RpY2t5LCBib29sIGJfaXNfc3RpY2t5LFxcbiBcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2V2bV9zdGFydCwgMCk7XFxuIFxcdEFTU0VSVF9FUSh2bWEtXFx1MDAzZXZtX2VuZCwgMHg1MDAwKTtcXG4gXFx0QVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCAwKTtcXG4rXFx0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDApO1xcbiBcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2Vhbm9uX3ZtYSwgXFx1MDAyNmR1bW15X2Fub25fdm1hKTtcXG4gXFx0QVNTRVJUX1RSVUUodm1hX3dyaXRlX3N0YXJ0ZWQodm1hKSk7XFxuIFxcdEFTU0VSVF9FUShtbS5tYXBfY291bnQsIDMpO1xcbkBAIC0zNjUsNiArMzc1LDcgQEAgc3RhdGljIGJvb2wgX190ZXN0X21lcmdlX25ldyhib29sIGlzX3N0aWNreSwgYm9vbCBhX2lzX3N0aWNreSwgYm9vbCBiX2lzX3N0aWNreSxcXG4gXFx0QVNTRVJUX0VRKHZtYS1cXHUwMDNldm1fc3RhcnQsIDB4NjAwMCk7XFxuIFxcdEFTU0VSVF9FUSh2bWEtXFx1MDAzZXZtX2VuZCwgMHg5MDAwKTtcXG4gXFx0QVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCA2KTtcXG4rXFx0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDYpO1xcbiBcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2Vhbm9uX3ZtYSwgXFx1MDAyNmR1bW15X2Fub25fdm1hKTtcXG4gXFx0QVNTRVJUX1RSVUUodm1hX3dyaXRlX3N0YXJ0ZWQodm1hKSk7XFxuIFxcdEFTU0VSVF9FUShtbS5tYXBfY291bnQsIDMpO1xcbkBAIC0zODUsNiArMzk2LDcgQEAgc3RhdGljIGJvb2wgX190ZXN0X21lcmdlX25ldyhib29sIGlzX3N0aWNreSwgYm9vbCBhX2lzX3N0aWNreSwgYm9vbCBiX2lzX3N0aWNreSxcXG4gXFx0QVNTRVJUX0VRKHZtYS1cXHUwMDNldm1fc3RhcnQsIDApO1xcbiBcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2V2bV9lbmQsIDB4OTAwMCk7XFxuIFxcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCk7XFxuK1xcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAwKTtcXG4gXFx0QVNTRVJUX0VRKHZtYS1cXHUwMDNlYW5vbl92bWEsIFxcdTAwMjZkdW1teV9hbm9uX3ZtYSk7XFxuIFxcdEFTU0VSVF9UUlVFKHZtYV93cml0ZV9zdGFydGVkKHZtYSkpO1xcbiBcXHRBU1NFUlRfRVEobW0ubWFwX2NvdW50LCAyKTtcXG5AQCAtNDA1LDYgKzQxNyw3IEBAIHN0YXRpYyBib29sIF9fdGVzdF9tZXJnZV9uZXcoYm9vbCBpc19zdGlja3ksIGJvb2wgYV9pc19zdGlja3ksIGJvb2wgYl9pc19zdGlja3ksXFxuIFxcdEFTU0VSVF9FUSh2bWEtXFx1MDAzZXZtX3N0YXJ0LCAweGEwMDApO1xcbiBcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2V2bV9lbmQsIDB4YzAwMCk7XFxuIFxcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMHhhKTtcXG4rXFx0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDB4YSk7XFxuIFxcdEFTU0VSVF9FUSh2bWEtXFx1MDAzZWFub25fdm1hLCBcXHUwMDI2ZHVtbXlfYW5vbl92bWEpO1xcbiBcXHRBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWEpKTtcXG4gXFx0QVNTRVJUX0VRKG1tLm1hcF9jb3VudCwgMik7XFxuQEAgLTQyNCw2ICs0MzcsNyBAQCBzdGF0aWMgYm9vbCBfX3Rlc3RfbWVyZ2VfbmV3KGJvb2wgaXNfc3RpY2t5LCBib29sIGFfaXNfc3RpY2t5LCBib29sIGJfaXNfc3RpY2t5LFxcbiBcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2V2bV9zdGFydCwgMCk7XFxuIFxcdEFTU0VSVF9FUSh2bWEtXFx1MDAzZXZtX2VuZCwgMHhjMDAwKTtcXG4gXFx0QVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCAwKTtcXG4rXFx0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDApO1xcbiBcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2Vhbm9uX3ZtYSwgXFx1MDAyNmR1bW15X2Fub25fdm1hKTtcXG4gXFx0QVNTRVJUX1RSVUUodm1hX3dyaXRlX3N0YXJ0ZWQodm1hKSk7XFxuIFxcdEFTU0VSVF9FUShtbS5tYXBfY291bnQsIDEpO1xcbkBAIC00NDQsNiArNDU4LDcgQEAgc3RhdGljIGJvb2wgX190ZXN0X21lcmdlX25ldyhib29sIGlzX3N0aWNreSwgYm9vbCBhX2lzX3N0aWNreSwgYm9vbCBiX2lzX3N0aWNreSxcXG4gXFx0XFx0QVNTRVJUX0VRKHZtYS1cXHUwMDNldm1fc3RhcnQsIDApO1xcbiBcXHRcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2V2bV9lbmQsIDB4YzAwMCk7XFxuIFxcdFxcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCk7XFxuK1xcdFxcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAwKTtcXG4gXFx0XFx0QVNTRVJUX0VRKHZtYS1cXHUwMDNlYW5vbl92bWEsIFxcdTAwMjZkdW1teV9hbm9uX3ZtYSk7XFxuIFxcbiBcXHRcXHRkZXRhY2hfZnJlZV92bWEodm1hKTtcXG5AQCAtODA2LDYgKzgyMSw3IEBAIHN0YXRpYyBib29sIHRlc3Rfdm1hX21lcmdlX25ld193aXRoX2Nsb3NlKHZvaWQpXFxuIFxcdEFTU0VSVF9FUSh2bWEtXFx1MDAzZXZtX3N0YXJ0LCAwKTtcXG4gXFx0QVNTRVJUX0VRKHZtYS1cXHUwMDNldm1fZW5kLCAweDUwMDApO1xcbiBcXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDApO1xcbitcXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSwgMCk7XFxuIFxcdEFTU0VSVF9FUSh2bWEtXFx1MDAzZXZtX29wcywgXFx1MDAyNnZtX29wcyk7XFxuIFxcdEFTU0VSVF9UUlVFKHZtYV93cml0ZV9zdGFydGVkKHZtYSkpO1xcbiBcXHRBU1NFUlRfRVEobW0ubWFwX2NvdW50LCAyKTtcXG5AQCAtODY2LDYgKzg4Miw3IEBAIHN0YXRpYyBib29sIF9fdGVzdF9tZXJnZV9leGlzdGluZyhib29sIHByZXZfaXNfc3RpY2t5LCBib29sIG1pZGRsZV9pc19zdGlja3ksIGJvXFxuIFxcdEFTU0VSVF9FUSh2bWEtXFx1MDAzZXZtX3N0YXJ0LCAweDIwMDApO1xcbiBcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2V2bV9lbmQsIDB4MzAwMCk7XFxuIFxcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMik7XFxuK1xcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAyKTtcXG4gXFx0QVNTRVJUX1RSVUUodm1hX3dyaXRlX3N0YXJ0ZWQodm1hKSk7XFxuIFxcdEFTU0VSVF9UUlVFKHZtYV93cml0ZV9zdGFydGVkKHZtYV9uZXh0KSk7XFxuIFxcdEFTU0VSVF9FUShtbS5tYXBfY291bnQsIDIpO1xcbkBAIC05MzIsNiArOTQ5LDcgQEAgc3RhdGljIGJvb2wgX190ZXN0X21lcmdlX2V4aXN0aW5nKGJvb2wgcHJldl9pc19zdGlja3ksIGJvb2wgbWlkZGxlX2lzX3N0aWNreSwgYm9cXG4gXFx0QVNTRVJUX0VRKHZtYS1cXHUwMDNldm1fc3RhcnQsIDB4NjAwMCk7XFxuIFxcdEFTU0VSVF9FUSh2bWEtXFx1MDAzZXZtX2VuZCwgMHg3MDAwKTtcXG4gXFx0QVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCA2KTtcXG4rXFx0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDYpO1xcbiBcXHRBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWFfcHJldikpO1xcbiBcXHRBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWEpKTtcXG4gXFx0QVNTRVJUX0VRKG1tLm1hcF9jb3VudCwgMik7XFxuQEAgLTE0MTcsNiArMTQzNSw3IEBAIHN0YXRpYyBib29sIHRlc3RfbWVyZ2VfZXh0ZW5kKHZvaWQpXFxuIFxcdEFTU0VSVF9FUSh2bWEtXFx1MDAzZXZtX3N0YXJ0LCAwKTtcXG4gXFx0QVNTRVJUX0VRKHZtYS1cXHUwMDNldm1fZW5kLCAweDQwMDApO1xcbiBcXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDApO1xcbitcXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSwgMCk7XFxuIFxcdEFTU0VSVF9UUlVFKHZtYV93cml0ZV9zdGFydGVkKHZtYSkpO1xcbiBcXHRBU1NFUlRfRVEobW0ubWFwX2NvdW50LCAxKTtcXG4gXFxuQEAgLTE0MzEsNyArMTQ1MCw3IEBAIHN0YXRpYyBib29sIHRlc3RfZXhwYW5kX29ubHlfbW9kZSh2b2lkKVxcbiBcXHRzdHJ1Y3QgbW1fc3RydWN0IG1tID0ge307XFxuIFxcdFZNQV9JVEVSQVRPUih2bWksIFxcdTAwMjZtbSwgMCk7XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3ByZXYsICp2bWE7XFxuLVxcdFZNR19TVEFURSh2bWcsIFxcdTAwMjZtbSwgXFx1MDAyNnZtaSwgMHg1MDAwLCAweDkwMDAsIHZtYV9mbGFncywgNSk7XFxuK1xcdFZNR19TVEFURSh2bWcsIFxcdTAwMjZtbSwgXFx1MDAyNnZtaSwgMHg1MDAwLCAweDkwMDAsIHZtYV9mbGFncywgNSwgNSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBQbGFjZSBhIFZNQSBwcmlvciB0byB0aGUgb25lIHdlJ3JlIGV4cGFuZGluZyBzbyB3ZSBhc3NlcnQgdGhhdCB3ZSBkb1xcbkBAIC0xNDU3LDYgKzE0NzYsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X2V4cGFuZF9vbmx5X21vZGUodm9pZClcXG4gXFx0QVNTRVJUX0VRKHZtYS1cXHUwMDNldm1fc3RhcnQsIDB4MzAwMCk7XFxuIFxcdEFTU0VSVF9FUSh2bWEtXFx1MDAzZXZtX2VuZCwgMHg5MDAwKTtcXG4gXFx0QVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCAzKTtcXG4rXFx0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDMpO1xcbiBcXHRBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWEpKTtcXG4gXFx0QVNTRVJUX0VRKHZtYV9pdGVyX2FkZHIoXFx1MDAyNnZtaSksIDB4MzAwMCk7XFxuIFxcdHZtYV9hc3NlcnRfYXR0YWNoZWQodm1hKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXFxuaW5kZXggYzg1YmMwMDBkMWNiN2EuLjBjOGEzNDQ2YjkwNTAyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY1xcbkBAIC00NSw3ICs0NSw1NiBAQCBzdGF0aWMgYm9vbCB0ZXN0X21tYXBfcmVnaW9uX2Jhc2ljKHZvaWQpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGR1bW15X21tYXBfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB0ZXN0X3B1cmVfYW5vbl9kZXZfemVybyh2b2lkKVxcbit7XFxuK1xcdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfUkVBRF9CSVQsIFZNQV9XUklURV9CSVQsXFxuK1xcdFxcdFxcdFZNQV9NQVlSRUFEX0JJVCwgVk1BX01BWVdSSVRFX0JJVCk7XFxuK1xcdGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZl9vcCA9IHtcXG4rXFx0XFx0Lm1tYXBfcHJlcGFyZSA9IGR1bW15X21tYXBfcHJlcGFyZSxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGlub2RlIGlub2RlID0ge1xcbitcXHRcXHQuaV9yZGV2ID0gTUtERVYoTUVNX01BSk9SLCBERVZaRVJPX01JTk9SKSxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGZpbGUgZmlsZSA9IHtcXG4rXFx0XFx0LmZfaW5vZGUgPSBcXHUwMDI2aW5vZGUsXFxuK1xcdFxcdC5mX29wID0gXFx1MDAyNmZfb3AsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgbW0gPSB7fTtcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4rXFx0Vk1BX0lURVJBVE9SKHZtaSwgXFx1MDAyNm1tLCAwKTtcXG4rXFxuK1xcdGN1cnJlbnQtXFx1MDAzZW1tID0gXFx1MDAyNm1tO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTWFwIGEgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIG1hcHBpbmcgYXQgYWRkcmVzcyAweDMwMDAwMCB3aXRoIGEgcGFnZVxcbitcXHQgKiBvZmZzZXQgb2YgMHgxMCwgd2hpY2ggd2UgZXhwZWN0IHRvIGJlIHJlc2V0IHRvIHRoZSB2aXJ0dWFsIHBhZ2VcXG4rXFx0ICogb2Zmc2V0LlxcbitcXHQgKi9cXG4rXFx0YWRkciA9IF9fbW1hcF9yZWdpb24oXFx1MDAyNmZpbGUsIDB4MzAwMDAwLCAweDMwMDAsIHZtYV9mbGFncywgMHgxMCwgTlVMTCk7XFxuK1xcdEFTU0VSVF9FUShhZGRyLCAweDMwMDAwMCk7XFxuK1xcbitcXHQvKiBBc3NlcnQgdGhhdCBpdCB0cnVseSBpcyBhbiBhbm9ueW1vdXMgbWFwcGluZy4gKi9cXG4rXFx0dm1hID0gdm1hX2xvb2t1cChcXHUwMDI2bW0sIGFkZHIpO1xcbitcXHRBU1NFUlRfTkUodm1hLCBOVUxMKTtcXG4rXFx0QVNTRVJUX1RSVUUodm1hX2lzX2Fub255bW91cyh2bWEpKTtcXG4rXFx0QVNTRVJUX0VRKHZtYS1cXHUwMDNldm1fZmlsZSwgTlVMTCk7XFxuK1xcdEFTU0VSVF9FUSh2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSwgTlVMTCk7XFxuK1xcdC8qIEV4cGVjdCB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0cy4gKi9cXG4rXFx0QVNTRVJUX0VRKHZtYS1cXHUwMDNldm1fcGdvZmYsIDB4MzAwKTtcXG4rXFx0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDB4MzAwKTtcXG4rXFxuK1xcdGNsZWFudXBfbW0oXFx1MDAyNm1tLCBcXHUwMDI2dm1pKTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ1bl9tbWFwX3Rlc3RzKGludCAqbnVtX3Rlc3RzLCBpbnQgKm51bV9mYWlsKVxcbiB7XFxuIFxcdFRFU1QobW1hcF9yZWdpb25fYmFzaWMpO1xcbitcXHRURVNUKHB1cmVfYW5vbl9kZXZfemVybyk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvdm1hLmMgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy92bWEuY1xcbmluZGV4IDc1NGEyZGEwNjMyMTU3Li43Y2E1Mjg5ZTBmOTU5MyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy92bWEuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL3ZtYS5jXFxuQEAgLTM4LDcgKzM4LDcgQEAgc3RhdGljIGJvb2wgdGVzdF9jb3B5X3ZtYSh2b2lkKVxcbiBcXHQvKiBNb3ZlIGJhY2t3YXJkcyBhbmQgZG8gbm90IG1lcmdlLiAqL1xcbiBcXG4gXFx0dm1hID0gYWxsb2NfYW5kX2xpbmtfdm1hKFxcdTAwMjZtbSwgMHgzMDAwLCAweDUwMDAsIDMsIHZtYV9mbGFncyk7XFxuLVxcdHZtYV9uZXcgPSBjb3B5X3ZtYShcXHUwMDI2dm1hLCAwLCAweDIwMDAsIDAsIFxcdTAwMjZuZWVkX2xvY2tzKTtcXG4rXFx0dm1hX25ldyA9IGNvcHlfdm1hKFxcdTAwMjZ2bWEsIDAsIDB4MjAwMCwgMCwgMywgXFx1MDAyNm5lZWRfbG9ja3MpO1xcbiBcXHRBU1NFUlRfTkUodm1hX25ldywgdm1hKTtcXG4gXFx0QVNTRVJUX0VRKHZtYV9uZXctXFx1MDAzZXZtX3N0YXJ0LCAwKTtcXG4gXFx0QVNTRVJUX0VRKHZtYV9uZXctXFx1MDAzZXZtX2VuZCwgMHgyMDAwKTtcXG5AQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X2NvcHlfdm1hKHZvaWQpXFxuIFxcbiBcXHR2bWEgPSBhbGxvY19hbmRfbGlua192bWEoXFx1MDAyNm1tLCAwLCAweDIwMDAsIDAsIHZtYV9mbGFncyk7XFxuIFxcdHZtYV9uZXh0ID0gYWxsb2NfYW5kX2xpbmtfdm1hKFxcdTAwMjZtbSwgMHg2MDAwLCAweDgwMDAsIDYsIHZtYV9mbGFncyk7XFxuLVxcdHZtYV9uZXcgPSBjb3B5X3ZtYShcXHUwMDI2dm1hLCAweDQwMDAsIDB4MjAwMCwgNCwgXFx1MDAyNm5lZWRfbG9ja3MpO1xcbitcXHR2bWFfbmV3ID0gY29weV92bWEoXFx1MDAyNnZtYSwgMHg0MDAwLCAweDIwMDAsIDQsIDQsIFxcdTAwMjZuZWVkX2xvY2tzKTtcXG4gXFx0dm1hX2Fzc2VydF9hdHRhY2hlZCh2bWFfbmV3KTtcXG4gXFxuIFxcdEFTU0VSVF9FUSh2bWFfbmV3LCB2bWFfbmV4dCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oIGIvdG9vbHMvdGVzdGluZy92bWEvdm1hX2ludGVybmFsLmhcXG5pbmRleCA0ZjZjNTY2NmFjMDdkMy4uOGE0OGIyMzFhYTdhYmYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdm1hX2ludGVybmFsLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3ZtYS92bWFfaW50ZXJuYWwuaFxcbkBAIC01Myw2ICs1Myw3IEBAIHR5cGVkZWYgX19iaXR3aXNlIHVuc2lnbmVkIGludCB2bV9mYXVsdF90O1xcbiBcXG4gI2RlZmluZSBWTV9XQVJOX09OKF9leHByKSAoV0FSTl9PTihfZXhwcikpXFxuICNkZWZpbmUgVk1fV0FSTl9PTl9PTkNFKF9leHByKSAoV0FSTl9PTl9PTkNFKF9leHByKSlcXG4rI2RlZmluZSBWTV9XQVJOX09OX09OQ0VfVk1BKF9leHByLCBfdm1hKSAoV0FSTl9PTl9PTkNFKF9leHByKSlcXG4gI2RlZmluZSBWTV9XQVJOX09OX1ZNRyhfZXhwciwgX3ZtZykgKFdBUk5fT04oX2V4cHIpKVxcbiAjZGVmaW5lIFZNX0JVR19PTihfZXhwcikgKEJVR19PTihfZXhwcikpXFxuICNkZWZpbmUgVk1fQlVHX09OX1ZNQShfZXhwciwgX3ZtYSkgKEJVR19PTihfZXhwcikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjQ3OjM3LjE4NjYwNTM5NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODcyMjUyOTUzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1NNXCIsXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNSUdSQVRJT05cIixcbiAgICBcIkZTX0RBWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1tYXBfemVyb19wcmVwYXJlXCIsXG4gICAgXCJ0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZVwiLFxuICAgIFwicm1hcF93YWxrX2tzbVwiLFxuICAgIFwicmVtb3ZlX21pZ3JhdGlvbl9wdGVcIixcbiAgICBcImNvcHlfdm1hX2FuZF9kYXRhXCIsXG4gICAgXCJtb3ZlX3ByZXNlbnRfcHRlc1wiLFxuICAgIFwicmVsb2NhdGVfdm1hX2Rvd25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdG8gaGFuZGxlIE1BUF9QUklWQVRFIG1hcHBpbmdzIG9mIC9kZXYvemVybyBhcyB0cnVseSBhbm9ueW1vdXMgbWFwcGluZ3MsIHJhdGhlciB0aGFuIGZpbGUtYmFja2VkIG1hcHBpbmdzIHdpdGggYSBzcGVjaWFsIGZsYWcuIEl0IGludHJvZHVjZXMgdmlydHVhbCBwYWdlIG9mZnNldHMgZm9yIFZNQXMgdG8gY29ycmVjdGx5IHRyYWNrIGFuZCBtZXJnZSB0aGVzZSBtYXBwaW5ncy4gVGhpcyBhZmZlY3RzIHZhcmlvdXMgbW0gc3Vic3lzdGVtcyBpbmNsdWRpbmcgS1NNLCBtaWdyYXRpb24sIG1yZW1hcCwgdXNlcmZhdWx0ZmQsIGFuZCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbW1hcCwgbXJlbWFwLCB1c2VyZmF1bHRmZCwgZXRjLiwgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYxMzNmNjBjNzZhMDdmYmVkMWQwMzBkMTQ5MmJhYzhjOTYxNDUzZjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxNyAyMjo0NzozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9tZW0uYyBiL2RyaXZlcnMvY2hhci9tZW0uY1xuaW5kZXggNjMyNTNkMWRlNWQ3MGIuLmRjZmQ4OTZiNzMzZDhmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jXG4rKysgYi9kcml2ZXJzL2NoYXIvbWVtLmNcbkBAIC01MDYsMTEgKzUwNiw3IEBAIHN0YXRpYyBpbnQgbW1hcF96ZXJvX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbiBcdGlmICh2bWFfZGVzY190ZXN0KGRlc2MsIFZNQV9TSEFSRURfQklUKSlcbiBcdFx0cmV0dXJuIHNobWVtX3plcm9fc2V0dXBfZGVzYyhkZXNjKTtcbiBcbi1cdC8qXG4tXHQgKiBUaGlzIGlzIGEgaGlnaGx5IHVuaXF1ZSBzaXR1YXRpb24gd2hlcmUgd2UgbWFyayBhIE1BUF9QUklWQVRFIG1hcHBpbmdcbi1cdCAqIG9mIC9kZXYvemVybyBhbm9ueW1vdXMsIGRlc3BpdGUgaXQgbm90IGJlaW5nLlxuLVx0ICovXG4tXHR2bWFfZGVzY19zZXRfYW5vbnltb3VzKGRlc2MpO1xuK1x0LyogTUFQX1BSSVZBVEUgc2VtYW50aWNzIGFyZSB0YWtlbiBjYXJlIGZvciB1cyBieSBjb3JlIG1tLiAqL1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTY5OCw3ICs2OTQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1lbWRldiB7XG4gI2lmZGVmIENPTkZJR19ERVZQT1JUXG4gXHRbNF0gPSB7IFwicG9ydFwiLCBcdTAwMjZwb3J0X2ZvcHMsIDAsIDAgfSxcbiAjZW5kaWZcbi1cdFs1XSA9IHsgXCJ6ZXJvXCIsIFx1MDAyNnplcm9fZm9wcywgRk1PREVfTk9XQUlULCAwNjY2IH0sXG4rXHRbREVWWkVST19NSU5PUl0gPSB7IFwiemVyb1wiLCBcdTAwMjZ6ZXJvX2ZvcHMsIEZNT0RFX05PV0FJVCwgMDY2NiB9LFxuIFx0WzddID0geyBcImZ1bGxcIiwgXHUwMDI2ZnVsbF9mb3BzLCAwLCAwNjY2IH0sXG4gXHRbOF0gPSB7IFwicmFuZG9tXCIsIFx1MDAyNnJhbmRvbV9mb3BzLCBGTU9ERV9OT1dBSVQsIDA2NjYgfSxcbiBcdFs5XSA9IHsgXCJ1cmFuZG9tXCIsIFx1MDAyNnVyYW5kb21fZm9wcywgRk1PREVfTk9XQUlULCAwNjY2IH0sXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA4N2ZlYWE1YTJiNzgwZS4uN2ZhYmU2YzY2YjRiNzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTc0MCw2ICs3NDAsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmF1bHRfZmxhZ19hbGxvd19yZXRyeV9maXJzdChlbnVtIGZhdWx0X2ZsYWcgZmxhZ3MpXG4gXHR7IEZBVUxUX0ZMQUdfSU5URVJSVVBUSUJMRSxcdFwiSU5URVJSVVBUSUJMRVwiIH0sIFxcXG4gXHR7IEZBVUxUX0ZMQUdfVk1BX0xPQ0ssXHRcdFwiVk1BX0xPQ0tcIiB9XG4gXG4rLyogL2Rldi96ZXJvIG1pbm9yIGRldmljZSBudW1iZXIuIFNwZWNpYWwgZHVlIHRvIE1BUF9QUklWQVRFIHNlbWFudGljcy4gKi9cbisjZGVmaW5lIERFVlpFUk9fTUlOT1JcdDVcbitcbiAvKlxuICAqIHZtX2ZhdWx0IGlzIGZpbGxlZCBieSB0aGUgcGFnZWZhdWx0IGhhbmRsZXIgYW5kIHBhc3NlZCB0byB0aGUgdm1hJ3NcbiAgKiAtXHUwMDNlZmF1bHQgZnVuY3Rpb24uIFRoZSB2bWEncyAtXHUwMDNlZmF1bHQgaXMgcmVzcG9uc2libGUgZm9yIHJldHVybmluZyBhIGJpdG1hc2tcbkBAIC0xNTUxLDEyICsxNTU0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHZtYV9zZXRfYW5vbnltb3VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0dm1hLVx1MDAzZXZtX29wcyA9IE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfZGVzY19zZXRfYW5vbnltb3VzKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXG4te1xuLVx0ZGVzYy1cdTAwM2V2bV9vcHMgPSBOVUxMO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2Fub255bW91cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbitzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2Fub255bW91cyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4gXHRyZXR1cm4gIXZtYS1cdTAwM2V2bV9vcHM7XG4gfVxuQEAgLTQzNDksOSArNDM0Nyw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfcGFnZXMoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gICogSWYgQHZtYSBpcyBhIE1BUF9QUklWQVRFIGZpbGUtYmFja2VkIG1hcHBpbmcsIHRoZW4gdGhpcyByZXR1cm5zIHRoZVxuICAqIHBhZ2Ugb2Zmc2V0IHdpdGhpbiB0aGUgZmlsZS5cbiAgKlxuLSAqIEVkZ2UgY2FzZXM6IG5vbW11IGRvZXMgbm90IGFiaWRlIGJ5IHRoZXNlLCBNQVBfUFJJVkFURS0vZGV2L3plcm8gc2F0aXNmaWVzXG4tICogdm1hX2lzX2Fub255bW91cygpIGJ1dCBoYXMgZmlsZS1iYWNrZWQgcGFnZSBvZmZzZXQsIGFuZCBNQVBfUFJJVkFURS1wZm5tYXBcbi0gKiByZWdpb25zIGhhdmUgdGhlaXIgcGFnZSBvZmZzZXQgc2V0IHRvIHRoZSBmaXJzdCBQRk4gaW4gdGhlIHJhbmdlLlxuKyAqIEVkZ2UgY2FzZXM6IG5vbW11IGRvZXMgbm90IGFiaWRlIGJ5IHRoZXNlIGFuZCBDb1cgTUFQX1BSSVZBVEUtcGZubWFwIHJlZ2lvbnNcbisgKiBoYXZlIHRoZWlyIHBhZ2Ugb2Zmc2V0IHNldCB0byB0aGUgZmlyc3QgUEZOIGluIHRoZSByYW5nZS5cbiAgKlxuICAqIFJldHVybnM6IFRoZSBwYWdlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgQHZtYS5cbiAgKi9cbkBAIC00MzkzLDYgKzQzOTAsNjUgQEAgc3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9sYXN0X3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0cmV0dXJuIHZtYV9lbmRfcGdvZmYodm1hKSAtIDE7XG4gfVxuIFxuKy8qKlxuKyAqIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKCkgLSBHZXQgdGhlIHZpcnR1YWwgcGFnZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIEB2bWFcbisgKiBAdm1hOiBUaGUgVk1BIHdob3NlIHZpcnR1YWwgcGFnZSBvZmZzZXQgaXMgcmVxdWlyZWQuXG4rICpcbisgKiBJZiB1bmZhdWx0ZWQsIHRoZW4gdGhpcyBpcyB2bWEtXHUwMDNldm1fc3RhcnQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsIGlmIGZhdWx0ZWQgdGhlbiB0aGVcbisgKiB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IGF0IHRoZSB0aW1lIG9mIGZpcnN0IGZhdWx0LlxuKyAqXG4rICogSWYgdGhlIFZNQSBpcyBhbm9ueW1vdXMsIHRoaXMgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSBhcyB2bWFfc3RhcnRfcGdvZmYoKS5cbisgKlxuKyAqIFRoaXMgdmFsdWUgaXMgdXNlZCBmb3IgdHJhY2tpbmcgTUFQX1BSSVZBVEUgZmlsZS1iYWNrZWQgbWFwcGluZ3MgYnkgdGhlaXJcbisgKiB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0LlxuKyAqXG4rICogUmV0dXJuczogVGhlIHZpcnR1YWwgcGFnZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIEB2bWEuXG4rICovXG4rc3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9zdGFydF92aXJ0X3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuK3tcbitcdHBnb2ZmX3QgcGdvZmYgPSAwO1xuK1xuKyNpZmRlZiBDT05GSUdfNjRCSVRcbitcdHBnb2ZmICs9IHZtYS1cdTAwM2VfX3ZtX3ZpcnRfcGdvZmZfaGk7XG4rXHRwZ29mZiBcdTAwM2NcdTAwM2M9IDMyO1xuKyNlbmRpZlxuK1x0cGdvZmYgKz0gdm1hLVx1MDAzZV9fdm1fdmlydF9wZ29mZl9sbztcbitcdHJldHVybiBwZ29mZjtcbit9XG4rXG4rLyoqXG4rICogdm1hX2VuZF92aXJ0X3Bnb2ZmKCkgLSBHZXQgdGhlIHZpcnR1YWwgcGFnZSBvZmZzZXQgb2YgdGhlIGV4Y2x1c2l2ZSBlbmQgb2ZcbisgKiBAdm1hLlxuKyAqIEB2bWE6IFRoZSBWTUEgd2hvc2UgZW5kIHZpcnR1YWwgcGFnZSBvZmZzZXQgaXMgcmVxdWlyZWQuXG4rICpcbisgKiBUaGlzIHJldHVybnMgdGhlIHZpcnR1YWwgZXhjbHVzaXZlIGVuZCBwYWdlIG9mZnNldCBvZiBAdm1hLCB3aGljaCBpcyB1c2VmdWxcbisgKiBmb3IgZXhwcmVzc2luZyBwYWdlIG9mZnNldCByYW5nZXMuXG4rICpcbisgKiBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKCkgZm9yIGEgZGVzY3JpcHRpb24gb2YgVk1BXG4rICogdmlydHVhbCBwYWdlIG9mZnNldHMuXG4rICpcbisgKiBSZXR1cm5zOiBUaGUgZXhjbHVzaXZlIGVuZCB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IG9mIEB2bWEuXG4rICovXG4rc3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9lbmRfdmlydF9wZ29mZihjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRyZXR1cm4gdm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSArIHZtYV9wYWdlcyh2bWEpO1xuK31cbitcbisvKipcbisgKiB2bWFfbGFzdF92aXJ0X3Bnb2ZmKCkgLSBHZXQgdGhlIHZpcnR1YWwgcGFnZSBvZmZzZXQgb2YgdGhlIGxhc3QgcGFnZSBpblxuKyAqIEB2bWEuXG4rICogQHZtYTogVGhlIFZNQSB3aG9zZSBsYXN0IHZpcnR1YWwgcGFnZSBvZmZzZXQgaXMgcmVxdWlyZWQuXG4rICpcbisgKiBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKCkgZm9yIGEgZGVzY3JpcHRpb24gb2YgVk1BXG4rICogdmlydHVhbCBwYWdlIG9mZnNldHMuXG4rICpcbisgKiBSZXR1cm5zOiBUaGUgbGFzdCB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IG9mIEB2bWEuXG4rICovXG4rc3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9sYXN0X3ZpcnRfcGdvZmYoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4re1xuK1x0cmV0dXJuIHZtYV9lbmRfdmlydF9wZ29mZih2bWEpIC0gMTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9kZXNjX3NpemUoY29uc3Qgc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbiB7XG4gXHRyZXR1cm4gZGVzYy1cdTAwM2VlbmQgLSBkZXNjLVx1MDAzZXN0YXJ0O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuaW5kZXggOTM5YjVlYThjOWUwYmUuLjI3MTA2MjgwNTliMTViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbkBAIC05NjcsNiArOTY3LDcgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHtcbiBcdCAqL1xuIFx0dW5zaWduZWQgaW50IHZtX2xvY2tfc2VxO1xuICNlbmRpZlxuK1x0dW5zaWduZWQgaW50IF9fdm1fdmlydF9wZ29mZl9sbzsgLyogTG93IDMyLWJpdHMgb2YgdmlydHVhbCBwZ29mZi4gKi9cbiBcdC8qXG4gXHQgKiBBIGZpbGUncyBNQVBfUFJJVkFURSB2bWEgY2FuIGJlIGluIGJvdGggaV9tbWFwIHRyZWUgYW5kIGFub25fdm1hXG4gXHQgKiBsaXN0LCBhZnRlciBhIENPVyBvZiBvbmUgb2YgdGhlIGZpbGUgcGFnZXMuXHRBIE1BUF9TSEFSRUQgdm1hXG5AQCAtMTA0MSw2ICsxMDQyLDkgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHtcbiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0NcbiBcdHN0cnVjdCBsb2NrZGVwX21hcCB2bWxvY2tfZGVwX21hcDtcbiAjZW5kaWZcbisjZW5kaWZcbisjaWZkZWYgQ09ORklHXzY0QklUXG4rXHR1bnNpZ25lZCBpbnQgX192bV92aXJ0X3Bnb2ZmX2hpOyAgLyogSGlnaCAzMi1iaXRzIG9mIHZpcnR1YWwgcGdvZmYuICovXG4gI2VuZGlmXG4gXHQvKlxuIFx0ICogRm9yIGFyZWFzIHdpdGggYW4gYWRkcmVzcyBzcGFjZSBhbmQgYmFja2luZyBzdG9yZSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5pbmRleCBjNmZjNzgzYWFlZTU3Ni4uOTAxMzBmMjhlN2E4N2QgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbkBAIC0xMTAxLDYgKzExMDEsNzIgQEAgc3RhdGljIGlubGluZSBwZ29mZl90IGxpbmVhcl9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0cmV0dXJuIHBnb2ZmO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHBnb2ZmX3QgX19saW5lYXJfdmlydF9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHRcdFx0XHQgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuK3tcbitcdHBnb2ZmX3QgcGdvZmY7XG4rXG4rXHRwZ29mZiA9IGxpbmVhcl9wYWdlX2RlbHRhKHZtYSwgYWRkcmVzcyk7XG4rXHRwZ29mZiArPSB2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpO1xuK1x0cmV0dXJuIHBnb2ZmO1xuK31cbitcbisvKipcbisgKiBsaW5lYXJfdmlydF9wYWdlX2luZGV4KCkgLSBEZXRlcm1pbmUgdGhlIGFic29sdXRlIHZpcnR1YWwgcGFnZSBvZmZzZXQgb2ZcbisgKiBAYWRkcmVzcyB3aXRoaW4gQHZtYS5cbisgKiBAdm1hOiBBbiBhbm9ueW1vdXMgb3IgTUFQX1BSSVZBVEUgZmlsZS1iYWNrZWQgVk1BIGluIHdoaWNoIEBhZGRyZXNzIHJlc2lkZXMuXG4rICogQGFkZHJlc3M6IFRoZSBhZGRyZXNzIHdob3NlIGFic29sdXRlIHBhZ2Ugb2Zmc2V0IGlzIHJlcXVpcmVkLlxuKyAqXG4rICogVGhpcyByZXR1cm5zIHRoZSB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0IG9mIEBhZGRyZXNzLCB3aGljaCBpcyB0aGUgcGFnZSBvZmZzZXRcbisgKiB0aGUgYWRkcmVzcyBwb3NzZXNzZWQgYXQgdGhlIHRpbWUgdGhlIFZNQSB3YXMgZmlyc3QgZmF1bHRlZC5cbisgKlxuKyAqIEZvciBhbm9ueW1vdXMgbWFwcGluZ3MsIHRoaXMgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSBhcyBsaW5lYXJfcGFnZV9pbmRleCgpLlxuKyAqXG4rICogRm9yIE1BUF9QUklWQVRFIGZpbGUtYmFja2VkIG1hcHBpbmdzLCB0aGlzIHJldHVybnMgdGhlIHZpcnR1YWwgcGFnZSBvZmZzZXQgb2ZcbisgKiBAYWRkcmVzcywgd2hpY2ggaXMgdGhlIHBhZ2Ugb2Zmc2V0IHRoZSBhZGRyZXNzIHBvc3Nlc3NlZCBhdCB0aGUgdGltZSB0aGUgVk1BXG4rICogd2FzIGZpcnN0IGZhdWx0ZWQuXG4rICpcbisgKiBJdCBpcyBub3QgdmFsaWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBzaGFyZWQgZmlsZS1iYWNrZWQgbWFwcGluZ3MuXG4rICpcbisgKiBSZXR1cm5zOiBUaGUgYWJzb2x1dGUgdmlydHVhbCBwYWdlIG9mZnNldCBvZiBAYWRkcmVzcyB3aXRoaW4gQHZtYS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHBnb2ZmX3QgbGluZWFyX3ZpcnRfcGFnZV9pbmRleChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0XHRcdFx0ICAgICBjb25zdCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4re1xuK1x0Y29uc3QgcGdvZmZfdCBwZ29mZiA9IF9fbGluZWFyX3ZpcnRfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpO1xuK1xuK1x0Vk1fV0FSTl9PTl9PTkNFKHZtYV90ZXN0KHZtYSwgVk1BX1NIQVJFRF9CSVQpKTtcbitcdGlmICghdm1hLVx1MDAzZXZtX2ZpbGUpIC8qIElzIGFub255bW91cyBleGNlcHQgTUFQX1BSSVZBVEUtL2Rldi96ZXJvICovXG4rXHRcdFZNX1dBUk5fT05fT05DRShwZ29mZiAhPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpKTtcbitcbitcdHJldHVybiBwZ29mZjtcbit9XG4rXG4rLyoqXG4rICogbGluZWFyX2ZvbGlvX3BhZ2VfaW5kZXgoKSAtIERldGVybWluZSB0aGUgYWJzb2x1dGUgcGFnZSBvZmZzZXQgb2ZcbisgKiBAYWRkcmVzcyB3aXRoaW4gQHZtYSBmcm9tIEBmb2xpby5cbisgKiBAZm9saW86IFRoZSBmb2xpbyB3aG9zZSBsaW5lYXIgcGFnZSBpbmRleCBpcyBzb3VnaHQuXG4rICogQHZtYTogVGhlIFZNQSBpbiB3aGljaCBAYWRkcmVzcyByZXNpZGVzLlxuKyAqIEBhZGRyZXNzOiBUaGUgYWRkcmVzcyB3aG9zZSBhYnNvbHV0ZSBwYWdlIG9mZnNldCBpcyByZXF1aXJlZC5cbisgKlxuKyAqIERldGVybWluZXMgd2hldGhlciB0byBvYnRhaW4gdGhlIHZpcnR1YWwgbGluZWFyIHBhZ2UgaW5kZXggYmFzZWQgb24gd2hldGhlclxuKyAqIEBmb2xpbyBpcyBhbm9ueW1vdXMgb3Igbm90LlxuKyAqXG4rICogU2VlIHRoZSBkZXNjcmlwdGlvbnMgb2YgbGluZWFyX3ZpcnRfcGFnZV9pbmRleCgpIGFuZCBsaW5lYXJfcGFnZV9pbmRleCgpIGZvclxuKyAqIGRldGFpbHMgb2YgZWFjaC5cbisgKlxuKyAqIFJldHVybnM6IFRoZSBhYnNvbHV0ZSBwYWdlIG9mZnNldCBvZiBAYWRkcmVzcyB3aXRoaW4gQHZtYS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHBnb2ZmX3QgbGluZWFyX2ZvbGlvX3BhZ2VfaW5kZXgoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdFx0XHRcdCAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbit7XG4rXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcbitcdFx0cmV0dXJuIGxpbmVhcl92aXJ0X3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTtcbitcbitcdHJldHVybiBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpO1xuK31cbitcbiBzdHJ1Y3Qgd2FpdF9wYWdlX2tleSB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0aW50IGJpdF9ucjtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JtYXAuaCBiL2luY2x1ZGUvbGludXgvcm1hcC5oXG5pbmRleCA4ZGMwODcxZTVmMDAxMS4uYTQ4YWU5NTc1YmQyNjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3JtYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ybWFwLmhcbkBAIC04NzEsNiArODcxLDcgQEAgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHtcbiBcdHB0ZV90ICpwdGU7XG4gXHRzcGlubG9ja190ICpwdGw7XG4gXHR1bnNpZ25lZCBpbnQgZmxhZ3M7XG4rXHRib29sIGlzX2Fub25fd2FsaztcbiB9O1xuIFxuICNkZWZpbmUgREVGSU5FX0ZPTElPX1ZNQV9XQUxLKG5hbWUsIF9mb2xpbywgX3ZtYSwgX2FkZHJlc3MsIF9mbGFncylcdFxcXG5AQCAtODgxLDYgKzg4Miw3IEBAIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayB7XG4gXHRcdC52bWEgPSBfdm1hLFx0XHRcdFx0XHRcdFxcXG4gXHRcdC5hZGRyZXNzID0gX2FkZHJlc3MsXHRcdFx0XHRcdFxcXG4gXHRcdC5mbGFncyA9IF9mbGFncyxcdFx0XHRcdFx0XFxcbitcdFx0LmlzX2Fub25fd2FsayA9IGZvbGlvX3Rlc3RfYW5vbihfZm9saW8pLFx0XHRcXFxuIFx0fVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggOWIxZjNiMjRmN2UwZDAuLmFiYzY1ZDYwOGMyMzkyIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTI4ODcsNyArMjg4Nyw4IEBAIGludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtXG4gXHRcdH1cbiBcbiBcdFx0Zm9saW9fbW92ZV9hbm9uX3JtYXAoc3JjX2ZvbGlvLCBkc3Rfdm1hKTtcbi1cdFx0c3JjX2ZvbGlvLVx1MDAzZWluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgoZHN0X3ZtYSwgZHN0X2FkZHIpO1xuK1x0XHRzcmNfZm9saW8tXHUwMDNlaW5kZXggPSBsaW5lYXJfZm9saW9fcGFnZV9pbmRleChzcmNfZm9saW8sIGRzdF92bWEsXG4rXHRcdFx0XHRcdFx0XHQgICBkc3RfYWRkcik7XG4gXG4gXHRcdF9kc3RfcG1kID0gZm9saW9fbWtfcG1kKHNyY19mb2xpbywgZHN0X3ZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuIFx0XHQvKiBGb2xsb3cgbXJlbWFwKCkgYmVoYXZpb3IgYW5kIHRyZWF0IHRoZSBlbnRyeSBkaXJ0eSBhZnRlciB0aGUgbW92ZSAqL1xuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCBmMjY0MjNkZTRjYTI4Ny4uNDE1NjFmZGViNTZkMGEgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMjQwLDYgKzI0MCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBtbWFwX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiBcdGludCBlcnIgPSB2ZnNfbW1hcChmaWxlLCB2bWEpO1xuIFxuK1x0LyogSG9va3MgY2Fubm90IG1hcmsgdGhlbXNlbHZlcyBhbm9ueW1vdXMuICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHZtYV9pc19hbm9ueW1vdXModm1hKSkpXG4rXHRcdGVyciA9IC1FSU5WQUw7XG4rXG4gXHRpZiAobGlrZWx5KCFlcnIpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC05MzMsNyArOTM3LDggQEAgZm9saW9fd2l0aGluX3JhbmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRwZ29mZl9mb2xpbyA9IGZvbGlvX3Bnb2ZmKGZvbGlvKTtcbi1cdHBnb2ZmX3ZtYV9zdGFydCA9IHZtYV9zdGFydF9wZ29mZih2bWEpO1xuK1x0cGdvZmZfdm1hX3N0YXJ0ID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSA/XG4rXHRcdHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSkgOiB2bWFfc3RhcnRfcGdvZmYodm1hKTtcbiBcbiBcdGlmIChzdGFydCBcdTAwM2Mgdm1hLVx1MDAzZXZtX3N0YXJ0KVxuIFx0XHRzdGFydCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbkBAIC0xMDA1LDE5ICsxMDEwLDkgQEAgdm9pZCBtbG9ja19kcmFpbl9yZW1vdGUoaW50IGNwdSk7XG4gXG4gZXh0ZXJuIHBtZF90IG1heWJlX3BtZF9ta3dyaXRlKHBtZF90IHBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIFxuLS8qKlxuLSAqIHZtYV9hZGRyZXNzIC0gRmluZCB0aGUgdmlydHVhbCBhZGRyZXNzIGEgcGFnZSByYW5nZSBpcyBtYXBwZWQgYXRcbi0gKiBAdm1hOiBUaGUgdm1hIHdoaWNoIG1hcHMgdGhpcyBvYmplY3QuXG4tICogQHBnb2ZmOiBUaGUgcGFnZSBvZmZzZXQgd2l0aGluIGl0cyBvYmplY3QuXG4tICogQG5yX3BhZ2VzOiBUaGUgbnVtYmVyIG9mIHBhZ2VzIHRvIGNvbnNpZGVyLlxuLSAqXG4tICogSWYgYW55IHBhZ2UgaW4gdGhpcyByYW5nZSBpcyBtYXBwZWQgYnkgdGhpcyBWTUEsIHJldHVybiB0aGUgZmlyc3QgYWRkcmVzc1xuLSAqIHdoZXJlIGFueSBvZiB0aGVzZSBwYWdlcyBhcHBlYXIuICBPdGhlcndpc2UsIHJldHVybiAtRUZBVUxULlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0cGdvZmZfdCBwZ29mZiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX192bWFfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0cGdvZmZfdCBwZ29mZiwgcGdvZmZfdCBwZ29mZl9zdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiB7XG4tXHRjb25zdCBwZ29mZl90IHBnb2ZmX3N0YXJ0ID0gdm1hX3N0YXJ0X3Bnb2ZmKHZtYSk7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHJlc3M7XG4gXG4gXHRpZiAocGdvZmYgXHUwMDNlPSBwZ29mZl9zdGFydCkge1xuQEAgLTEwMzUsMjMgKzEwMzAsNjggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hZGRyZXNzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0cmV0dXJuIGFkZHJlc3M7XG4gfVxuIFxuKy8qKlxuKyAqIHZtYV9maWxlYmFja2VkX2FkZHJlc3MgLSBGaW5kIHRoZSB2aXJ0dWFsIGFkZHJlc3MgYSBmaWxlLWJhY2tlZCBwYWdlIHJhbmdlIGlzXG4rICogbWFwcGVkIGF0LlxuKyAqIEB2bWE6IFRoZSB2bWEgd2hpY2ggbWFwcyB0aGlzIG9iamVjdC5cbisgKiBAcGdvZmY6IFRoZSBwYWdlIG9mZnNldCB3aXRoaW4gaXRzIG9iamVjdC5cbisgKiBAbnJfcGFnZXM6IFRoZSBudW1iZXIgb2YgcGFnZXMgdG8gY29uc2lkZXIuXG4rICpcbisgKiBSZXR1cm5zOiBJZiBhbnkgcGFnZSBpbiB0aGlzIHJhbmdlIGlzIG1hcHBlZCBieSB0aGlzIFZNQSwgcmV0dXJuIHRoZSBmaXJzdFxuKyAqIGFkZHJlc3Mgd2hlcmUgYW55IG9mIHRoZXNlIHBhZ2VzIGFwcGVhci4gIE90aGVyd2lzZSwgcmV0dXJuIC1FRkFVTFQuXG4rICovXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9maWxlYmFja2VkX2FkZHJlc3MoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdHBnb2ZmX3QgcGdvZmYsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4re1xuK1x0Vk1fV0FSTl9PTl9PTkNFKHZtYV9pc19hbm9ueW1vdXModm1hKSk7XG4rXG4rXHRyZXR1cm4gX192bWFfYWRkcmVzcyh2bWEsIHBnb2ZmLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgbnJfcGFnZXMpO1xuK31cbitcbisvKipcbisgKiB2bWFfYW5vbl9hZGRyZXNzIC0gRmluZCB0aGUgdmlydHVhbCBhZGRyZXNzIGFuIGFub255bW91cyBwYWdlIHJhbmdlIGlzIG1hcHBlZFxuKyAqIGF0LlxuKyAqIEB2bWE6IFRoZSB2bWEgd2hpY2ggbWFwcyB0aGlzIG9iamVjdC5cbisgKiBAcGdvZmZfdmlydDogVGhlIHZpcnR1YWwgcGFnZSBpbmRleCBiZWxvbmdpbmcgdG8gdGhlIGZvbGlvLlxuKyAqIEBucl9wYWdlczogVGhlIG51bWJlciBvZiBwYWdlcyB0byBjb25zaWRlci5cbisgKlxuKyAqIFRoaXMgaXMgb25seSB2YWxpZCBmb3IgYW5vbnltb3VzIG9yIE1BUF9QUklWQVRFLW1hcHBlZCBmaWxlLWJhY2tlZCBWTUFzLlxuKyAqXG4rICogUmV0dXJuczogSWYgYW55IHBhZ2UgaW4gdGhpcyByYW5nZSBpcyBtYXBwZWQgYnkgdGhpcyBWTUEsIHJldHVybiB0aGUgZmlyc3QgYWRkcmVzc1xuKyAqIHdoZXJlIGFueSBvZiB0aGVzZSBwYWdlcyBhcHBlYXIuIE90aGVyd2lzZSwgcmV0dXJuIC1FRkFVTFQuXG4rICovXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hbm9uX2FkZHJlc3MoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdHBnb2ZmX3QgcGdvZmZfdmlydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbit7XG4rXHRWTV9XQVJOX09OX09OQ0UoIXZtYV9pc19hbm9ueW1vdXModm1hKSBcdTAwMjZcdTAwMjYgdm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCkpO1xuK1xuK1x0cmV0dXJuIF9fdm1hX2FkZHJlc3Modm1hLCBwZ29mZl92aXJ0LCB2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCBucl9wYWdlcyk7XG4rfVxuK1xuIC8qXG4tICogVGhlbiBhdCB3aGF0IHVzZXIgdmlydHVhbCBhZGRyZXNzIHdpbGwgbm9uZSBvZiB0aGUgcmFuZ2UgYmUgZm91bmQgaW4gdm1hP1xuKyAqIEF0IHdoYXQgdXNlciB2aXJ0dWFsIGFkZHJlc3Mgd2lsbCBub25lIG9mIHRoZSByYW5nZSBiZSBmb3VuZCBpbiB2bWE/XG4gICogQXNzdW1lcyB0aGF0IHZtYV9hZGRyZXNzKCkgYWxyZWFkeSByZXR1cm5lZCBhIGdvb2Qgc3RhcnRpbmcgYWRkcmVzcy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hX2FkZHJlc3NfZW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbiB7XG4tXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHB2bXctXHUwMDNldm1hO1xuLVx0cGdvZmZfdCBwZ29mZjtcbitcdGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gcHZtdy1cdTAwM2V2bWE7XG4rXHRjb25zdCBwZ29mZl90IHBnb2ZmID0gcHZtdy1cdTAwM2VwZ29mZjtcbitcdHBnb2ZmX3QgcGdvZmZfdm1hX3N0YXJ0O1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xuK1x0cGdvZmZfdCBwZ29mZl9lbmQ7XG4gXG4gXHQvKiBDb21tb24gY2FzZSwgcGx1cyAtXHUwMDNlcGdvZmYgaXMgaW52YWxpZCBmb3IgS1NNICovXG4gXHRpZiAocHZtdy1cdTAwM2Vucl9wYWdlcyA9PSAxKVxuIFx0XHRyZXR1cm4gcHZtdy1cdTAwM2VhZGRyZXNzICsgUEFHRV9TSVpFO1xuIFxuLVx0cGdvZmYgPSBwdm13LVx1MDAzZXBnb2ZmICsgcHZtdy1cdTAwM2Vucl9wYWdlcztcbitcdGlmIChwdm13LVx1MDAzZWlzX2Fub25fd2FsaylcbitcdFx0cGdvZmZfdm1hX3N0YXJ0ID0gdm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKTtcbitcdGVsc2VcbitcdFx0cGdvZmZfdm1hX3N0YXJ0ID0gdm1hX3N0YXJ0X3Bnb2ZmKHZtYSk7XG4rXG4rXHRwZ29mZl9lbmQgPSBwZ29mZiArIHB2bXctXHUwMDNlbnJfcGFnZXM7XG4gXHRhZGRyZXNzID0gdm1hLVx1MDAzZXZtX3N0YXJ0ICtcbi1cdFx0KChwZ29mZiAtIHZtYV9zdGFydF9wZ29mZih2bWEpKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4rXHRcdCgocGdvZmZfZW5kIC0gcGdvZmZfdm1hX3N0YXJ0KSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4gXHQvKiBDaGVjayBmb3IgYWRkcmVzcyBiZXlvbmQgdm1hIChvciB3cmFwcGVkIHRocm91Z2ggMD8pICovXG4gXHRpZiAoYWRkcmVzcyBcdTAwM2Mgdm1hLVx1MDAzZXZtX3N0YXJ0IHx8IGFkZHJlc3MgXHUwMDNlIHZtYS1cdTAwM2V2bV9lbmQpXG4gXHRcdGFkZHJlc3MgPSB2bWEtXHUwMDNldm1fZW5kO1xuZGlmZiAtLWdpdCBhL21tL2ludGVydmFsX3RyZWUuYyBiL21tL2ludGVydmFsX3RyZWUuY1xuaW5kZXggM2FlOWUxMDZkM2FmZDguLjI2Yjg0MzdlM2IxYjEzIDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJ2YWxfdHJlZS5jXG4rKysgYi9tbS9pbnRlcnZhbF90cmVlLmNcbkBAIC04MywxMiArODMsMTIgQEAgbWFwcGluZ19ybWFwX3RyZWVfaXRlcl9uZXh0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFxuIHN0YXRpYyBwZ29mZl90IGF2Y19zdGFydF9wZ29mZihzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YylcbiB7XG4tXHRyZXR1cm4gdm1hX3N0YXJ0X3Bnb2ZmKGF2Yy1cdTAwM2V2bWEpO1xuK1x0cmV0dXJuIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKGF2Yy1cdTAwM2V2bWEpO1xuIH1cbiBcbiBzdGF0aWMgcGdvZmZfdCBhdmNfbGFzdF9wZ29mZihzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YylcbiB7XG4tXHRyZXR1cm4gdm1hX2xhc3RfcGdvZmYoYXZjLVx1MDAzZXZtYSk7XG4rXHRyZXR1cm4gdm1hX2xhc3RfdmlydF9wZ29mZihhdmMtXHUwMDNldm1hKTtcbiB9XG4gXG4gSU5URVJWQUxfVFJFRV9ERUZJTkUoc3RydWN0IGFub25fdm1hX2NoYWluLCByYiwgcGdvZmZfdCwgcmJfc3VidHJlZV9sYXN0LFxuZGlmZiAtLWdpdCBhL21tL2tzbS5jIGIvbW0va3NtLmNcbmluZGV4IDQ3MDA2ZjQ5NGZjYjFiLi5iOWIzMmY3YmZiNjkxZSAxMDA2NDRcbi0tLSBhL21tL2tzbS5jXG4rKysgYi9tbS9rc20uY1xuQEAgLTE2MjUsNyArMTYyNSw4IEBAIHN0YXRpYyBpbnQgdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSxcbiBcdCAqIHN0YWJsZV90cmVlLCBicmVha19jb3coKSB3aWxsIGNsZWFuIGl0IHVwLlxuIFx0ICovXG4gXHRybWFwX2l0ZW0tXHUwMDNlYW5vbl92bWEgPSB2bWEtXHUwMDNlYW5vbl92bWE7XG4tXHRybWFwX2l0ZW0tXHUwMDNlbGluZWFyX3BhZ2VfaW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKTtcbitcdC8qIFRoZSBWTUEgaXMgYWx3YXlzIGFub24vTUFQX1BSSVZBVEUtZmlsZSBiYWNrZWQgc28gdXNlIGFub24gaW5kZXguICovXG4rXHRybWFwX2l0ZW0tXHUwMDNlbGluZWFyX3BhZ2VfaW5kZXggPSBsaW5lYXJfdmlydF9wYWdlX2luZGV4KHZtYSwgcm1hcF9pdGVtLVx1MDAzZWFkZHJlc3MpO1xuIFx0Z2V0X2Fub25fdm1hKHZtYS1cdTAwM2Vhbm9uX3ZtYSk7XG4gb3V0OlxuIFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG5AQCAtMzE1Miw3ICszMTUzLDcgQEAgc3RydWN0IGZvbGlvICprc21fbWlnaHRfbmVlZF90b19jb3B5KHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1x0Lyogbm8gbmVlZCB0byBjb3B5IGl0ICovXG4gXHR9IGVsc2UgaWYgKCFhbm9uX3ZtYSkge1xuIFx0XHRyZXR1cm4gZm9saW87XHRcdC8qIG5vIG5lZWQgdG8gY29weSBpdCAqL1xuLVx0fSBlbHNlIGlmIChmb2xpby1cdTAwM2VpbmRleCA9PSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHIpIFx1MDAyNlx1MDAyNlxuK1x0fSBlbHNlIGlmIChmb2xpby1cdTAwM2VpbmRleCA9PSBsaW5lYXJfdmlydF9wYWdlX2luZGV4KHZtYSwgYWRkcikgXHUwMDI2XHUwMDI2XG4gXHRcdFx0YW5vbl92bWEtXHUwMDNlcm9vdCA9PSB2bWEtXHUwMDNlYW5vbl92bWEtXHUwMDNlcm9vdCkge1xuIFx0XHRyZXR1cm4gZm9saW87XHRcdC8qIHN0aWxsIG5vIG5lZWQgdG8gY29weSBpdCAqL1xuIFx0fVxuQEAgLTMyMjIsNyArMzIyMyw3IEBAIHZvaWQgcm1hcF93YWxrX2tzbShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgKnJ3YylcbiBcdFx0LypcbiBcdFx0ICogQ3VycmVudGx5LCBLU00gZm9saW9zIGFyZSBhbHdheXMgc21hbGwgZm9saW9zLCBzbyBpdCdzXG4gXHRcdCAqIHN1ZmZpY2llbnQgdG8gc2VhcmNoIGZvciBhIHNpbmdsZSBwYWdlLiBXZSBjYW4gc2ltcGx5IHVzZVxuLVx0XHQgKiB0aGUgbGluZWFyX3BhZ2VfaW5kZXggb2YgdGhlIG9yaWdpbmFsIGRlLWR1cGxpY2F0ZVxuK1x0XHQgKiB0aGUgbGluZWFyX3ZpcnRfcGFnZV9pbmRleCBvZiB0aGUgb3JpZ2luYWwgZGUtZHVwbGljYXRlXG4gXHRcdCAqIGFub255bW91cyBwYWdlIHRoYXQgd2UgcmVtZW1iZXJlZCBpbiB0aGUgcm1hcF9pdGVtIHdoaWxlXG4gXHRcdCAqIGRlLWR1cGxpY2F0aW5nLiBOb3RlIHRoYXQgbXJlbWFwKCkgYWx3YXlzIGRlLWR1cGxpY2F0ZXMgS1NNXG4gXHRcdCAqIGZvbGlvczogc28gaWYgdGhlcmUgd2FzIG1yZW1hcCgpIGluIG91ciBwYXJlbnQgb3Igb3VyIGNoaWxkLFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBhYWYxNDYwOGIzMGUyZC4uYThiMDNlMjkyMGJhOGEgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtNjIwLDcgKzYyMCw3IEBAIHN0YXRpYyB2b2lkIGFkZF90b19raWxsX2ZzZGF4KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcCxcbiBcdFx0XHQgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICp0b19raWxsLCBwZ29mZl90IHBnb2ZmKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgYWRkciA9IHZtYV9hZGRyZXNzKHZtYSwgcGdvZmYsIDEpO1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyID0gdm1hX2ZpbGViYWNrZWRfYWRkcmVzcyh2bWEsIHBnb2ZmLCAxKTtcbiBcdF9fYWRkX3RvX2tpbGwodHNrLCBwLCB2bWEsIHRvX2tpbGwsIGFkZHIpO1xuIH1cbiBcbkBAIC0yMjY1LDcgKzIyNjUsNyBAQCBzdGF0aWMgdm9pZCBhZGRfdG9fa2lsbF9wZ29mZihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayxcbiBcdH1cbiBcbiBcdC8qIENoZWNrIGZvciBwZ29mZiBub3QgYmFja2VkIGJ5IHN0cnVjdCBwYWdlICovXG4tXHR0ay1cdTAwM2VhZGRyID0gdm1hX2FkZHJlc3Modm1hLCBwZ29mZiwgMSk7XG4rXHR0ay1cdTAwM2VhZGRyID0gdm1hX2ZpbGViYWNrZWRfYWRkcmVzcyh2bWEsIHBnb2ZmLCAxKTtcbiBcdHRrLVx1MDAzZXNpemVfc2hpZnQgPSBQQUdFX1NISUZUO1xuIFxuIFx0aWYgKHRrLVx1MDAzZWFkZHIgPT0gLUVGQVVMVClcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBkNWU4NzYyNGY2OTIwNS4uNTZiMjQ0NTUyZjEzOTQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC02MzEsMTMgKzYzMSwxNCBAQCBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4ge1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4gXHRjaGFyIGVudHJ5X3N0cltQVFZBTF9TVFJfTUFYXTtcbi1cdHBnb2ZmX3QgaW5kZXg7XG4rXHRwZ29mZl90IGluZGV4LCB2aXJ0X2luZGV4O1xuIFxuIFx0aWYgKGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCgpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRtYXBwaW5nID0gdm1hLVx1MDAzZXZtX2ZpbGUgPyB2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcgOiBOVUxMO1xuIFx0aW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHIpO1xuK1x0dmlydF9pbmRleCA9IF9fbGluZWFyX3ZpcnRfcGFnZV9pbmRleCh2bWEsIGFkZHIpO1xuIFxuIFx0cHR2YWxfYnl0ZXNfdG9faGV4X3N0cihlbnRyeV9zdHIsIHNpemVvZihlbnRyeV9zdHIpLCBlbnRyeSwgZW50cnlfc2l6ZSk7XG4gXHRwcl9hbGVydChcIkJVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiVzXCIsIGN1cnJlbnQtXHUwMDNlY29tbSxcbkBAIC02NDUsOCArNjQ2LDkgQEAgc3RhdGljIHZvaWQgcHJpbnRfYmFkX3BhZ2VfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0X19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZSh2bWEtXHUwMDNldm1fbW0sIGFkZHIpO1xuIFx0aWYgKHBhZ2UpXG4gXHRcdGR1bXBfcGFnZShwYWdlLCBcImJhZCBwYWdlIG1hcFwiKTtcbi1cdHByX2FsZXJ0KFwiYWRkcjolcHggdm1fZmxhZ3M6JTA4bHggYW5vbl92bWE6JXB4IG1hcHBpbmc6JXB4IGluZGV4OiVseFxcblwiLFxuLVx0XHQgKHZvaWQgKilhZGRyLCB2bWEtXHUwMDNldm1fZmxhZ3MsIHZtYS1cdTAwM2Vhbm9uX3ZtYSwgbWFwcGluZywgaW5kZXgpO1xuK1x0cHJfYWxlcnQoXCJhZGRyOiVweCB2bV9mbGFnczolMDhseCBhbm9uX3ZtYTolcHggbWFwcGluZzolcHggaW5kZXg6JWx4IHZpcnRfaW5kZXg6JWx4XFxuXCIsXG4rXHRcdCAodm9pZCAqKWFkZHIsIHZtYS1cdTAwM2V2bV9mbGFncywgdm1hLVx1MDAzZWFub25fdm1hLCBtYXBwaW5nLCBpbmRleCxcbitcdFx0IHZpcnRfaW5kZXgpO1xuIFx0cHJfYWxlcnQoXCJmaWxlOiVwRCBmYXVsdDolcHMgbW1hcDolcHMgbW1hcF9wcmVwYXJlOiAlcHMgcmVhZF9mb2xpbzolcHNcXG5cIixcbiBcdFx0IHZtYS1cdTAwM2V2bV9maWxlLFxuIFx0XHQgdm1hLVx1MDAzZXZtX29wcyA/IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZmF1bHQgOiBOVUxMLFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggMjIyYzhjMTVmNzgyZjcuLjM3ZmU3YTliM2ZhY2M4IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC0zNjMsOCArMzYzLDEwIEBAIHN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHVuc2lnbmVkIGxvbmcgaWR4ID0gMDtcbiBcbiBcdFx0LyogcGdvZmYgaXMgaW52YWxpZCBmb3Iga3NtIHBhZ2VzLCBidXQgdGhleSBhcmUgbmV2ZXIgbGFyZ2UgKi9cbi1cdFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbi1cdFx0XHRpZHggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIHB2bXcuYWRkcmVzcykgLSBwdm13LnBnb2ZmO1xuK1x0XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4rXHRcdFx0aWR4ICs9IGxpbmVhcl9mb2xpb19wYWdlX2luZGV4KGZvbGlvLCB2bWEsIHB2bXcuYWRkcmVzcyk7XG4rXHRcdFx0aWR4IC09IHB2bXcucGdvZmY7XG4rXHRcdH1cbiBcdFx0bmV3ID0gZm9saW9fcGFnZShmb2xpbywgaWR4KTtcbiBcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXG5kaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuY1xuaW5kZXggYjY0YWExZjZlMDdlZGUuLmYwN2ZjNGUzZWYyZTZjIDEwMDY0NFxuLS0tIGEvbW0vbXJlbWFwLmNcbisrKyBiL21tL21yZW1hcC5jXG5AQCAtMTI2NSw3ICsxMjY1LDkgQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIHN0YXRpYyBpbnQgY29weV92bWFfYW5kX2RhdGEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSxcbiBcdFx0XHQgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKm5ld192bWFfcHRyKVxuIHtcbi1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgbmV3X3Bnb2ZmID0gbGluZWFyX3BhZ2VfaW5kZXgodnJtLVx1MDAzZXZtYSwgdnJtLVx1MDAzZWFkZHIpO1xuK1x0Y29uc3QgcGdvZmZfdCBuZXdfcGdvZmYgPSBsaW5lYXJfcGFnZV9pbmRleCh2cm0tXHUwMDNldm1hLCB2cm0tXHUwMDNlYWRkcik7XG4rXHRjb25zdCBwZ29mZl90IG5ld192aXJ0X3Bnb2ZmID1cbitcdFx0X19saW5lYXJfdmlydF9wYWdlX2luZGV4KHZybS1cdTAwM2V2bWEsIHZybS1cdTAwM2VhZGRyKTtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdnJtLVx1MDAzZXZtYTtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV3X3ZtYTtcbiBcdHVuc2lnbmVkIGxvbmcgbW92ZWRfbGVuO1xuQEAgLTEyNzMsNyArMTI3NSw3IEBAIHN0YXRpYyBpbnQgY29weV92bWFfYW5kX2RhdGEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSxcbiBcdFBBR0VUQUJMRV9NT1ZFKHBtYywgTlVMTCwgTlVMTCwgdnJtLVx1MDAzZWFkZHIsIHZybS1cdTAwM2VuZXdfYWRkciwgdnJtLVx1MDAzZW9sZF9sZW4pO1xuIFxuIFx0bmV3X3ZtYSA9IGNvcHlfdm1hKFx1MDAyNnZtYSwgdnJtLVx1MDAzZW5ld19hZGRyLCB2cm0tXHUwMDNlbmV3X2xlbiwgbmV3X3Bnb2ZmLFxuLVx0XHRcdCAgIFx1MDAyNnBtYy5uZWVkX3JtYXBfbG9ja3MpO1xuK1x0XHRcdCAgIG5ld192aXJ0X3Bnb2ZmLCBcdTAwMjZwbWMubmVlZF9ybWFwX2xvY2tzKTtcbiBcdGlmICghbmV3X3ZtYSkge1xuIFx0XHR2cm1fdW5jaGFyZ2UodnJtKTtcbiBcdFx0Km5ld192bWFfcHRyID0gTlVMTDtcbmRpZmYgLS1naXQgYS9tbS9wYWdlX3ZtYV9tYXBwZWQuYyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXG5pbmRleCBkNzY3MGJhNDE0N2JmZi4uNGU5NjQ1NDVlNWU4NWEgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xuKysrIGIvbW0vcGFnZV92bWFfbWFwcGVkLmNcbkBAIC0zNTYsNiArMzU2LDcgQEAgdW5zaWduZWQgbG9uZyBwYWdlX21hcHBlZF9pbl92bWEoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuK1x0Y29uc3QgcGdvZmZfdCBwZ29mZiA9IHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpO1xuIFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XG4gXHRcdC5wZm4gPSBwYWdlX3RvX3BmbihwYWdlKSxcbiBcdFx0Lm5yX3BhZ2VzID0gMSxcbkBAIC0zNjMsNyArMzY0LDEwIEBAIHVuc2lnbmVkIGxvbmcgcGFnZV9tYXBwZWRfaW5fdm1hKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHQuZmxhZ3MgPSBQVk1XX1NZTkMsXG4gXHR9O1xuIFxuLVx0cHZtdy5hZGRyZXNzID0gdm1hX2FkZHJlc3Modm1hLCBwYWdlX3Bnb2ZmKGZvbGlvLCBwYWdlKSwgMSk7XG4rXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcbitcdFx0cHZtdy5hZGRyZXNzID0gdm1hX2Fub25fYWRkcmVzcyh2bWEsIHBnb2ZmLCAxKTtcbitcdGVsc2VcbitcdFx0cHZtdy5hZGRyZXNzID0gdm1hX2ZpbGViYWNrZWRfYWRkcmVzcyh2bWEsIHBnb2ZmLCAxKTtcbiBcdGlmIChwdm13LmFkZHJlc3MgPT0gLUVGQVVMVClcbiBcdFx0Z290byBvdXQ7XG4gXHRpZiAoIXBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKVxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggYWQ4MjBmZTg2ZjdkOGMuLjY4NTRiYWY0Yjg3NzhmIDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4rKysgYi9tbS9ybWFwLmNcbkBAIC04NjUsMTQgKzg2NSwxNSBAQCB1bnNpZ25lZCBsb25nIHBhZ2VfYWRkcmVzc19pbl92bWEoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0aWYgKCF2bWEtXHUwMDNlYW5vbl92bWEgfHwgIWFub25fdm1hIHx8XG4gXHRcdCAgICB2bWEtXHUwMDNlYW5vbl92bWEtXHUwMDNlcm9vdCAhPSBhbm9uX3ZtYS1cdTAwM2Vyb290KVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHQvKiBLU00gZm9saW9zIGRvbid0IHJlYWNoIGhlcmUgYmVjYXVzZSBvZiB0aGUgIWFub25fdm1hIGNoZWNrICovXG4rXHRcdHJldHVybiB2bWFfYW5vbl9hZGRyZXNzKHZtYSwgcGFnZV9wZ29mZihmb2xpbywgcGFnZSksIDEpO1xuIFx0fSBlbHNlIGlmICghdm1hLVx1MDAzZXZtX2ZpbGUpIHtcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHR9IGVsc2UgaWYgKHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyAhPSBmb2xpby1cdTAwM2VtYXBwaW5nKSB7XG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0fVxuIFxuLVx0LyogS1NNIGZvbGlvcyBkb24ndCByZWFjaCBoZXJlIGJlY2F1c2Ugb2YgdGhlICFhbm9uX3ZtYSBjaGVjayAqL1xuLVx0cmV0dXJuIHZtYV9hZGRyZXNzKHZtYSwgcGFnZV9wZ29mZihmb2xpbywgcGFnZSksIDEpO1xuK1x0cmV0dXJuIHZtYV9maWxlYmFja2VkX2FkZHJlc3Modm1hLCBwYWdlX3Bnb2ZmKGZvbGlvLCBwYWdlKSwgMSk7XG4gfVxuIFxuIC8qXG5AQCAtMTIzOSw4ICsxMjQwLDEwIEBAIHN0YXRpYyBib29sIG1hcHBpbmdfd3Jwcm90ZWN0X3JhbmdlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHQudm1hXHRcdD0gdm1hLFxuIFx0XHQuYWRkcmVzc1x0PSBhZGRyZXNzLFxuIFx0XHQuZmxhZ3NcdFx0PSBQVk1XX1NZTkMsXG4rXHRcdC5pc19hbm9uX3dhbGsgICA9IGZhbHNlLFxuIFx0fTtcbiBcbitcdFZNX1dBUk5fT05fT05DRShmb2xpb190ZXN0X2Fub24oZm9saW8pKTtcbiBcdHN0YXRlLVx1MDAzZWNsZWFuZWQgKz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoXHUwMDI2cHZtdyk7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbkBAIC0xMzE2LDEyICsxMzE5LDEzIEBAIGludCBwZm5fbWtjbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgcGdvZmZfdCBwZ29mZixcbiBcdFx0LnBnb2ZmXHRcdD0gcGdvZmYsXG4gXHRcdC52bWFcdFx0PSB2bWEsXG4gXHRcdC5mbGFnc1x0XHQ9IFBWTVdfU1lOQyxcbitcdFx0LmlzX2Fub25fd2FsayAgID0gZmFsc2UsXG4gXHR9O1xuIFxuIFx0aWYgKGludmFsaWRfbWtjbGVhbl92bWEodm1hLCBOVUxMKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRwdm13LmFkZHJlc3MgPSB2bWFfYWRkcmVzcyh2bWEsIHBnb2ZmLCBucl9wYWdlcyk7XG4rXHRwdm13LmFkZHJlc3MgPSB2bWFfZmlsZWJhY2tlZF9hZGRyZXNzKHZtYSwgcGdvZmYsIG5yX3BhZ2VzKTtcbiBcdFZNX0JVR19PTl9WTUEocHZtdy5hZGRyZXNzID09IC1FRkFVTFQsIHZtYSk7XG4gXG4gXHRyZXR1cm4gcGFnZV92bWFfbWtjbGVhbl9vbmUoXHUwMDI2cHZtdyk7XG5AQCAtMTQ4Miw3ICsxNDg2LDcgQEAgc3RhdGljIHZvaWQgX19mb2xpb19zZXRfYW5vbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdCAqL1xuIFx0YW5vbl92bWEgPSAodm9pZCAqKSBhbm9uX3ZtYSArIEZPTElPX01BUFBJTkdfQU5PTjtcbiBcdFdSSVRFX09OQ0UoZm9saW8tXHUwMDNlbWFwcGluZywgKHN0cnVjdCBhZGRyZXNzX3NwYWNlICopIGFub25fdm1hKTtcbi1cdGZvbGlvLVx1MDAzZWluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTtcbitcdGZvbGlvLVx1MDAzZWluZGV4ID0gbGluZWFyX3ZpcnRfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpO1xuIH1cbiBcbiAvKipcbkBAIC0xNTA5LDggKzE1MTMsOCBAQCBzdGF0aWMgdm9pZCBfX3BhZ2VfY2hlY2tfYW5vbl9ybWFwKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHQgKi9cbiBcdFZNX0JVR19PTl9GT0xJTyhmb2xpb19hbm9uX3ZtYShmb2xpbyktXHUwMDNlcm9vdCAhPSB2bWEtXHUwMDNlYW5vbl92bWEtXHUwMDNlcm9vdCxcbiBcdFx0XHRmb2xpbyk7XG4tXHRWTV9CVUdfT05fUEFHRShwYWdlX3Bnb2ZmKGZvbGlvLCBwYWdlKSAhPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpLFxuLVx0XHQgICAgICAgcGFnZSk7XG4rXHRWTV9CVUdfT05fUEFHRShwYWdlX3Bnb2ZmKGZvbGlvLCBwYWdlKSAhPVxuK1x0XHQgICAgICAgbGluZWFyX3ZpcnRfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpLCBwYWdlKTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fYWRkX2Fub25fcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuQEAgLTMwMzcsMTAgKzMwNDEsMTAgQEAgc3RhdGljIHZvaWQgcm1hcF93YWxrX2Fub24oc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHBnb2ZmX2VuZCA9IHBnb2ZmX3N0YXJ0ICsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcbiBcdGFub25fcm1hcF90cmVlX2ZvcmVhY2goYXZjLCBhbm9uX3ZtYSwgcGdvZmZfc3RhcnQsIHBnb2ZmX2VuZCkge1xuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGF2Yy1cdTAwM2V2bWE7XG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHZtYSwgcGdvZmZfc3RhcnQsXG4rXHRcdGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHZtYV9hbm9uX2FkZHJlc3Modm1hLCBwZ29mZl9zdGFydCxcbiBcdFx0XHRcdGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gXG4tXHRcdFZNX0JVR19PTl9WTUEoYWRkcmVzcyA9PSAtRUZBVUxULCB2bWEpO1xuK1x0XHRWTV9XQVJOX09OX09OQ0VfVk1BKGFkZHJlc3MgPT0gLUVGQVVMVCwgdm1hKTtcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXG4gXHRcdGlmIChyd2MtXHUwMDNlaW52YWxpZF92bWEgXHUwMDI2XHUwMDI2IHJ3Yy1cdTAwM2VpbnZhbGlkX3ZtYSh2bWEsIHJ3Yy1cdTAwM2VhcmcpKVxuQEAgLTMxMDAsNyArMzEwNCw4IEBAIHN0YXRpYyB2b2lkIF9fcm1hcF93YWxrX2ZpbGUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHR9XG4gbG9va3VwOlxuIFx0bWFwcGluZ19ybWFwX3RyZWVfZm9yZWFjaCh2bWEsIG1hcHBpbmcsIHBnb2ZmX3N0YXJ0LCBwZ29mZl9lbmQpIHtcbi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzID0gdm1hX2FkZHJlc3Modm1hLCBwZ29mZl9zdGFydCwgbnJfcGFnZXMpO1xuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSB2bWFfZmlsZWJhY2tlZF9hZGRyZXNzKHZtYSwgcGdvZmZfc3RhcnQsXG4rXHRcdFx0XHRcdFx0XHQgICAgICAgbnJfcGFnZXMpO1xuIFxuIFx0XHRWTV9CVUdfT05fVk1BKGFkZHJlc3MgPT0gLUVGQVVMVCwgdm1hKTtcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcbmluZGV4IDhmZDI0YzhiNDI4ZTFiLi4yNThiMDMxODJhNzgwYiAxMDA2NDRcbi0tLSBhL21tL3VzZXJmYXVsdGZkLmNcbisrKyBiL21tL3VzZXJmYXVsdGZkLmNcbkBAIC0xMzUyLDcgKzEzNTIsOCBAQCBzdGF0aWMgbG9uZyBtb3ZlX3ByZXNlbnRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0fVxuIFxuIFx0XHRmb2xpb19tb3ZlX2Fub25fcm1hcChzcmNfZm9saW8sIGRzdF92bWEpO1xuLVx0XHRzcmNfZm9saW8tXHUwMDNlaW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleChkc3Rfdm1hLCBkc3RfYWRkcik7XG4rXHRcdHNyY19mb2xpby1cdTAwM2VpbmRleCA9IGxpbmVhcl9mb2xpb19wYWdlX2luZGV4KHNyY19mb2xpbywgZHN0X3ZtYSxcbitcdFx0XHRcdFx0XHRcdCAgIGRzdF9hZGRyKTtcbiBcbiBcdFx0b3JpZ19kc3RfcHRlID0gZm9saW9fbWtfcHRlKHNyY19mb2xpbywgZHN0X3ZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuIFx0XHQvKiBTZXQgc29mdCBkaXJ0eSBiaXQgc28gdXNlcnNwYWNlIGNhbiBub3RpY2UgdGhlIHB0ZSB3YXMgbW92ZWQgKi9cbkBAIC0xNDI4LDcgKzE0MjksOCBAQCBzdGF0aWMgaW50IG1vdmVfc3dhcF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbiBcdCAqL1xuIFx0aWYgKHNyY19mb2xpbykge1xuIFx0XHRmb2xpb19tb3ZlX2Fub25fcm1hcChzcmNfZm9saW8sIGRzdF92bWEpO1xuLVx0XHRzcmNfZm9saW8tXHUwMDNlaW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleChkc3Rfdm1hLCBkc3RfYWRkcik7XG4rXHRcdHNyY19mb2xpby1cdTAwM2VpbmRleCA9IGxpbmVhcl9mb2xpb19wYWdlX2luZGV4KHNyY19mb2xpbywgZHN0X3ZtYSxcbitcdFx0XHRcdFx0XHRcdCAgIGRzdF9hZGRyKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIENoZWNrIGlmIHRoZSBzd2FwIGVudHJ5IGlzIGNhY2hlZCBhZnRlciBhY3F1aXJpbmcgdGhlIHNyY19wdGVcbmRpZmYgLS1naXQgYS9tbS92bWEuYyBiL21tL3ZtYS5jXG5pbmRleCBiNWJjM2VlYzk2MWM3OS4uZjgwMDFkNWMyM2FhZDEgMTAwNjQ0XG4tLS0gYS9tbS92bWEuY1xuKysrIGIvbW0vdm1hLmNcbkBAIC0xOCw2ICsxOCw3IEBAIHN0cnVjdCBtbWFwX3N0YXRlIHtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgZW5kO1xuIFx0cGdvZmZfdCBwZ29mZjtcbitcdHBnb2ZmX3QgdmlydF9wZ29mZjtcbiBcdHVuc2lnbmVkIGxvbmcgcGdsZW47XG4gXHR1bmlvbiB7XG4gXHRcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XG5AQCAtNDYsMTMgKzQ3LDIyIEBAIHN0cnVjdCBtbWFwX3N0YXRlIHtcbiBcdGJvb2wgZmlsZV9kb2VzbnRfbmVlZF9nZXQgOjE7XG4gfTtcbiBcbi0jZGVmaW5lIE1NQVBfU1RBVEUobmFtZSwgbW1fLCB2bWlfLCBhZGRyXywgbGVuXywgcGdvZmZfLCB2bWFfZmxhZ3NfLCBmaWxlXykgXFxcbitzdGF0aWMgaW5saW5lIHBnb2ZmX3QgbWFwX2Fub25fcGdvZmYoY29uc3Qgc3RydWN0IG1tYXBfc3RhdGUgKm1hcClcbit7XG4rXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bWFwLVx1MDAzZXZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpKVxuK1x0XHRyZXR1cm4gbWFwLVx1MDAzZXBnb2ZmO1xuK1xuK1x0cmV0dXJuIG1hcC1cdTAwM2V2aXJ0X3Bnb2ZmO1xuK31cbitcbisjZGVmaW5lIE1NQVBfU1RBVEUobmFtZSwgbW1fLCB2bWlfLCBhZGRyXywgbGVuXywgcGdvZmZfLCB2aXJ0X3Bnb2ZmXywgdm1hX2ZsYWdzXywgZmlsZV8pIFxcXG4gXHRzdHJ1Y3QgbW1hcF9zdGF0ZSBuYW1lID0ge1x0XHRcdFx0XHRcXFxuIFx0XHQubW0gPSBtbV8sXHRcdFx0XHRcdFx0XFxcbiBcdFx0LnZtaSA9IHZtaV8sXHRcdFx0XHRcdFx0XFxcbiBcdFx0LmFkZHIgPSBhZGRyXyxcdFx0XHRcdFx0XHRcXFxuIFx0XHQuZW5kID0gKGFkZHJfKSArIChsZW5fKSxcdFx0XHRcdFxcXG4gXHRcdC5wZ29mZiA9IHBnb2ZmXyxcdFx0XHRcdFx0XFxcbitcdFx0LnZpcnRfcGdvZmYgPSB2aXJ0X3Bnb2ZmXyxcdFx0XHRcdFxcXG4gXHRcdC5wZ2xlbiA9IFBIWVNfUEZOKGxlbl8pLFx0XHRcdFx0XFxcbiBcdFx0LnZtYV9mbGFncyA9IHZtYV9mbGFnc18sXHRcdFx0XHRcXFxuIFx0XHQuZmlsZSA9IGZpbGVfLFx0XHRcdFx0XHRcdFxcXG5AQCAtNjcsNiArNzcsNyBAQCBzdHJ1Y3QgbW1hcF9zdGF0ZSB7XG4gXHRcdC5lbmQgPSAobWFwXyktXHUwMDNlZW5kLFx0XHRcdFx0XHRcXFxuIFx0XHQudm1hX2ZsYWdzID0gKG1hcF8pLVx1MDAzZXZtYV9mbGFncyxcdFx0XHRcdFxcXG4gXHRcdC5wZ29mZiA9IChtYXBfKS1cdTAwM2VwZ29mZixcdFx0XHRcdFx0XFxcbitcdFx0LmFub25fcGdvZmYgPSBtYXBfYW5vbl9wZ29mZihtYXBfKSxcdFx0XHRcXFxuIFx0XHQuZmlsZSA9IChtYXBfKS1cdTAwM2VmaWxlLFx0XHRcdFx0XHRcXFxuIFx0XHQucHJldiA9IChtYXBfKS1cdTAwM2VwcmV2LFx0XHRcdFx0XHRcXFxuIFx0XHQubWlkZGxlID0gdm1hXyxcdFx0XHRcdFx0XHRcXFxuQEAgLTgyLDEwICs5MywxMSBAQCBzdGF0aWMgdm9pZCBfX3ZtYV9zZXRfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHZtYV9zZXRfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tXHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgcGdvZmZfdCBwZ29mZilcbitcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBwZ29mZl90IHBnb2ZmLCBwZ29mZl90IHZpcnRfcGdvZmYpXG4ge1xuIFx0X192bWFfc2V0X3JhbmdlKHZtYSwgc3RhcnQsIGVuZCk7XG4gXHR2bWFfc2V0X3Bnb2ZmKHZtYSwgcGdvZmYpO1xuK1x0dm1hX3NldF92aXJ0X3Bnb2ZmKHZtYSwgdmlydF9wZ29mZik7XG4gfVxuIFxuIC8qIFdhcyB0aGlzIFZNQSBldmVyIGZvcmtlZCBmcm9tIGEgcGFyZW50LCBpLmUuIG1heWJlIGNvbnRhaW5zIENvVyBtYXBwaW5ncz8gKi9cbkBAIC0yMjEsNiArMjMzLDggQEAgc3RhdGljIGJvb2wgY2FuX3ZtYV9tZXJnZV9iZWZvcmUoc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0aWYgKHZtZ19lbmRfcGdvZmYodm1nKSAhPSB2bWFfc3RhcnRfcGdvZmYodm1nLVx1MDAzZW5leHQpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAodm1nX2VuZF9hbm9uX3Bnb2ZmKHZtZykgIT0gdm1hX3N0YXJ0X2Fub25fcGdvZmYodm1nLVx1MDAzZW5leHQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtMjQxLDYgKzI1NSw4IEBAIHN0YXRpYyBib29sIGNhbl92bWFfbWVyZ2VfYWZ0ZXIoc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0aWYgKHZtYV9lbmRfcGdvZmYodm1nLVx1MDAzZXByZXYpICE9IHZtZ19zdGFydF9wZ29mZih2bWcpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAodm1hX2VuZF9hbm9uX3Bnb2ZmKHZtZy1cdTAwM2VwcmV2KSAhPSB2bWdfc3RhcnRfYW5vbl9wZ29mZih2bWcpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtODEyLDcgKzgyOCw4IEBAIHN0YXRpYyBpbnQgY29tbWl0X21lcmdlKHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXG4gXHQgKi9cbiBcdHZtYV9hZGp1c3RfdHJhbnNfaHVnZSh2bWEsIHZtZy1cdTAwM2VzdGFydCwgdm1nLVx1MDAzZWVuZCxcbiBcdFx0XHQgICAgICB2bWctXHUwMDNlX19hZGp1c3RfbWlkZGxlX3N0YXJ0ID8gdm1nLVx1MDAzZW1pZGRsZSA6IE5VTEwpO1xuLVx0dm1hX3NldF9yYW5nZSh2bWEsIHZtZy1cdTAwM2VzdGFydCwgdm1nLVx1MDAzZWVuZCwgdm1nX3N0YXJ0X3Bnb2ZmKHZtZykpO1xuK1x0dm1hX3NldF9yYW5nZSh2bWEsIHZtZy1cdTAwM2VzdGFydCwgdm1nLVx1MDAzZWVuZCwgdm1nX3N0YXJ0X3Bnb2ZmKHZtZyksXG4rXHRcdCAgICAgIHZtZ19zdGFydF9hbm9uX3Bnb2ZmKHZtZykpO1xuIFx0dm1nX2FkanVzdF9zZXRfcmFuZ2Uodm1nKTtcbiBcdHZtYV9pdGVyX3N0b3JlX292ZXJ3cml0ZSh2bWctXHUwMDNldm1pLCB2bWctXHUwMDNldGFyZ2V0KTtcbiBcbkBAIC05ODIsNiArOTk5LDcgQEAgc3RhdGljIF9fbXVzdF9jaGVjayBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZV9leGlzdGluZ19yYW5nZShcbiBcdFx0dm1nLVx1MDAzZXN0YXJ0ID0gcHJldi1cdTAwM2V2bV9zdGFydDtcbiBcdFx0dm1nLVx1MDAzZWVuZCA9IG5leHQtXHUwMDNldm1fZW5kO1xuIFx0XHR2bWctXHUwMDNlcGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYocHJldik7XG4rXHRcdHZtZy1cdTAwM2Vhbm9uX3Bnb2ZmID0gdm1hX3N0YXJ0X2Fub25fcGdvZmYocHJldik7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFdlIGFscmVhZHkgZW5zdXJlZCBhbm9uX3ZtYSBjb21wYXRpYmlsaXR5IGFib3ZlLCBzbyBub3cgaXQnc1xuQEAgLTEwMDAsNiArMTAxOCw3IEBAIHN0YXRpYyBfX211c3RfY2hlY2sgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2UoXG4gXHRcdCAqL1xuIFx0XHR2bWctXHUwMDNlc3RhcnQgPSBwcmV2LVx1MDAzZXZtX3N0YXJ0O1xuIFx0XHR2bWctXHUwMDNlcGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYocHJldik7XG4rXHRcdHZtZy1cdTAwM2Vhbm9uX3Bnb2ZmID0gdm1hX3N0YXJ0X2Fub25fcGdvZmYocHJldik7XG4gXG4gXHRcdGlmICghdm1nLVx1MDAzZV9fcmVtb3ZlX21pZGRsZSlcbiBcdFx0XHR2bWctXHUwMDNlX19hZGp1c3RfbWlkZGxlX3N0YXJ0ID0gdHJ1ZTtcbkBAIC0xMDIyLDEyICsxMDQxLDE0IEBAIHN0YXRpYyBfX211c3RfY2hlY2sgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2UoXG4gXHRcdGlmICh2bWctXHUwMDNlX19yZW1vdmVfbWlkZGxlKSB7XG4gXHRcdFx0dm1nLVx1MDAzZWVuZCA9IG5leHQtXHUwMDNldm1fZW5kO1xuIFx0XHRcdHZtZy1cdTAwM2VwZ29mZiA9IHZtYV9zdGFydF9wZ29mZihuZXh0KSAtIHBnbGVuO1xuK1x0XHRcdHZtZy1cdTAwM2Vhbm9uX3Bnb2ZmID0gdm1hX3N0YXJ0X2Fub25fcGdvZmYobmV4dCkgLSBwZ2xlbjtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKiBXZSBzaHJpbmsgbWlkZGxlIGFuZCBleHBhbmQgbmV4dC4gKi9cbiBcdFx0XHR2bWctXHUwMDNlX19hZGp1c3RfbmV4dF9zdGFydCA9IHRydWU7XG4gXHRcdFx0dm1nLVx1MDAzZXN0YXJ0ID0gbWlkZGxlLVx1MDAzZXZtX3N0YXJ0O1xuIFx0XHRcdHZtZy1cdTAwM2VlbmQgPSBzdGFydDtcbiBcdFx0XHR2bWctXHUwMDNlcGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYobWlkZGxlKTtcbitcdFx0XHR2bWctXHUwMDNlYW5vbl9wZ29mZiA9IHZtYV9zdGFydF9hbm9uX3Bnb2ZmKG1pZGRsZSk7XG4gXHRcdH1cbiBcbiBcdFx0ZXJyID0gZHVwX2Fub25fdm1hKG5leHQsIG1pZGRsZSwgXHUwMDI2YW5vbl9kdXApO1xuQEAgLTExMzcsNiArMTE1OCw3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21lcmdlX25ld19yYW5nZShzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nKVxuIFx0XHR2bWctXHUwMDNlc3RhcnQgPSBwcmV2LVx1MDAzZXZtX3N0YXJ0O1xuIFx0XHR2bWctXHUwMDNldGFyZ2V0ID0gcHJldjtcbiBcdFx0dm1nLVx1MDAzZXBnb2ZmID0gdm1hX3N0YXJ0X3Bnb2ZmKHByZXYpO1xuK1x0XHR2bWctXHUwMDNlYW5vbl9wZ29mZiA9IHZtYV9zdGFydF9hbm9uX3Bnb2ZmKHByZXYpO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBJZiB0aGlzIG1lcmdlIHdvdWxkIHJlc3VsdCBpbiByZW1vdmFsIG9mIHRoZSBuZXh0IFZNQSBidXQgd2VcbkBAIC0xOTA4LDkgKzE5MzAsMTAgQEAgc3RhdGljIGludCB2bWFfbGluayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gICovXG4gc3RydWN0IHZtX2FyZWFfc3RydWN0ICpjb3B5X3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxuIFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgcGdvZmZfdCBwZ29mZixcbi1cdGJvb2wgKm5lZWRfcm1hcF9sb2NrcylcbitcdHBnb2ZmX3QgdmlydF9wZ29mZiwgYm9vbCAqbmVlZF9ybWFwX2xvY2tzKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gKnZtYXA7XG4rXHRjb25zdCBib29sIGlzX3NoYXJlZCA9IHZtYV90ZXN0KHZtYSwgVk1BX1NIQVJFRF9CSVQpO1xuIFx0dW5zaWduZWQgbG9uZyB2bWFfc3RhcnQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS1cdTAwM2V2bV9tbTtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV3X3ZtYTtcbkBAIC0xOTE5LDExICsxOTQyLDE0IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqY29weV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcbiBcdFZNR19WTUFfU1RBVEUodm1nLCBcdTAwMjZ2bWksIE5VTEwsIHZtYSwgYWRkciwgYWRkciArIGxlbik7XG4gXG4gXHQvKlxuLVx0ICogSWYgYW5vbnltb3VzIHZtYSBoYXMgbm90IHlldCBiZWVuIGZhdWx0ZWQsIHVwZGF0ZSBuZXcgcGdvZmZcbi1cdCAqIHRvIG1hdGNoIG5ldyBsb2NhdGlvbiwgdG8gaW5jcmVhc2UgaXRzIGNoYW5jZSBvZiBtZXJnaW5nLlxuK1x0ICogSWYgYSB2bWEgaGFzIG5vdCB5ZXQgYmVlbiBmYXVsdGVkLCB1cGRhdGUgaXRzIHZpcnR1YWwgcGdvZmYgdG8gbWF0Y2hcbitcdCAqIHRoZSBuZXcgbG9jYXRpb24gdG8gaW5jcmVhc2UgaXRzIGNoYW5jZSBvZiBtZXJnaW5nLlxuIFx0ICovXG4tXHRpZiAodW5saWtlbHkodm1hX2lzX2Fub255bW91cyh2bWEpIFx1MDAyNlx1MDAyNiAhdm1hLVx1MDAzZWFub25fdm1hKSkge1xuLVx0XHRwZ29mZiA9IGFkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRpZiAoIXZtYS1cdTAwM2Vhbm9uX3ZtYSBcdTAwMjZcdTAwMjYgIWlzX3NoYXJlZCkge1xuK1x0XHR2aXJ0X3Bnb2ZmID0gYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcbitcdFx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSlcbitcdFx0XHRwZ29mZiA9IHZpcnRfcGdvZmY7XG4gXHRcdGZhdWx0ZWRfaW5fYW5vbl92bWEgPSBmYWxzZTtcbiBcdH1cbiBcbkBAIC0xOTQwLDYgKzE5NjYsNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmNvcHlfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXG4gXHRcdHJldHVybiBOVUxMO1x0Lyogc2hvdWxkIG5ldmVyIGdldCBoZXJlICovXG4gXG4gXHR2bWcucGdvZmYgPSBwZ29mZjtcbitcdHZtZy5hbm9uX3Bnb2ZmID0gaXNfc2hhcmVkID8gcGdvZmYgOiB2aXJ0X3Bnb2ZmO1xuIFx0dm1nLm5leHQgPSB2bWFfaXRlcl9uZXh0X3Jld2luZChcdTAwMjZ2bWksIE5VTEwpO1xuIFx0bmV3X3ZtYSA9IHZtYV9tZXJnZV9jb3BpZWRfcmFuZ2UoXHUwMDI2dm1nKTtcbiBcbkBAIC0xOTYxLDE2ICsxOTg4LDE3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqY29weV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcbiBcdFx0XHQgKiBzYWZlLiBJdCBpcyBvbmx5IHNhZmUgdG8ga2VlcCB0aGUgdm1fcGdvZmZcbiBcdFx0XHQgKiBsaW5lYXIgaWYgdGhlcmUgYXJlIG5vIHBhZ2VzIG1hcHBlZCB5ZXQuXG4gXHRcdFx0ICovXG4tXHRcdFx0Vk1fQlVHX09OX1ZNQShmYXVsdGVkX2luX2Fub25fdm1hLCBuZXdfdm1hKTtcbitcdFx0XHRWTV9XQVJOX09OX09OQ0VfVk1BKGZhdWx0ZWRfaW5fYW5vbl92bWEsIG5ld192bWEpO1xuIFx0XHRcdCp2bWFwID0gdm1hID0gbmV3X3ZtYTtcbiBcdFx0fVxuIFx0XHQqbmVlZF9ybWFwX2xvY2tzID1cbi1cdFx0XHQodm1hX3N0YXJ0X3Bnb2ZmKG5ld192bWEpIFx1MDAzYz0gdm1hX3N0YXJ0X3Bnb2ZmKHZtYSkpO1xuK1x0XHRcdCh2bWFfc3RhcnRfcGdvZmYobmV3X3ZtYSkgXHUwMDNjPSB2bWFfc3RhcnRfcGdvZmYodm1hKSkgfHxcbitcdFx0XHQodm1hX3N0YXJ0X2Fub25fcGdvZmYobmV3X3ZtYSkgXHUwMDNjPSB2bWFfc3RhcnRfYW5vbl9wZ29mZih2bWEpKTtcbiBcdH0gZWxzZSB7XG4gXHRcdG5ld192bWEgPSB2bV9hcmVhX2R1cCh2bWEpO1xuIFx0XHRpZiAoIW5ld192bWEpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdHZtYV9zZXRfcmFuZ2UobmV3X3ZtYSwgYWRkciwgYWRkciArIGxlbiwgcGdvZmYpO1xuK1x0XHR2bWFfc2V0X3JhbmdlKG5ld192bWEsIGFkZHIsIGFkZHIgKyBsZW4sIHBnb2ZmLCB2aXJ0X3Bnb2ZmKTtcbiBcdFx0aWYgKHZtYV9kdXBfcG9saWN5KHZtYSwgbmV3X3ZtYSkpXG4gXHRcdFx0Z290byBvdXRfZnJlZV92bWE7XG4gXHRcdGlmIChhbm9uX3ZtYV9jbG9uZShuZXdfdm1hLCB2bWEsIFZNQV9PUF9SRU1BUCkpXG5AQCAtMjAzNiw3ICsyMDY0LDEyIEBAIHN0YXRpYyBpbnQgYW5vbl92bWFfY29tcGF0aWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqXG4gXHRpZiAoIXZtYV9mbGFnc19lbXB0eShcdTAwMjZkaWZmKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0LyogUGFnZSBvZmZzZXQgbXVzdCBhbGlnbi4gKi9cbi1cdHJldHVybiB2bWFfZW5kX3Bnb2ZmKGEpID09IHZtYV9zdGFydF9wZ29mZihiKTtcbitcdGlmICh2bWFfZW5kX3Bnb2ZmKGEpICE9IHZtYV9zdGFydF9wZ29mZihiKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0LyogQW5vbiBwYWdlIG9mZnNldCBtdXN0IGFsaWduLiAqL1xuK1x0aWYgKHZtYV9lbmRfYW5vbl9wZ29mZihhKSAhPSB2bWFfc3RhcnRfYW5vbl9wZ29mZihiKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0cmV0dXJuIHRydWU7XG4gfVxuIFxuIC8qXG5AQCAtMjU3OSw2ICsyNjEyLDMyIEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBib29sIG1hcF9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlID0gbWFwLVx1MDAzZWZpbGU7XG4rXHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbitcbitcdHJldHVybiBpbWFqb3IoaW5vZGUpID09IE1FTV9NQUpPUiBcdTAwMjZcdTAwMjYgaW1pbm9yKGlub2RlKSA9PSBERVZaRVJPX01JTk9SO1xuK31cbitcbitzdGF0aWMgdm9pZCBtYXBfc2V0X2Fub24oc3RydWN0IG1tYXBfc3RhdGUgKm1hcClcbit7XG4rXHRtYXAtXHUwMDNlZmlsZSA9IE5VTEw7XG4rXHRtYXAtXHUwMDNlZmlsZV9kb2VzbnRfbmVlZF9nZXQgPSBmYWxzZTtcbitcdG1hcC1cdTAwM2VwZ29mZiA9IG1hcC1cdTAwM2VhZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0bWFwLVx1MDAzZXZtX29wcyA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBib29sIG1hcF9pc19wcml2YXRlKGNvbnN0IHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4re1xuK1x0cmV0dXJuICF2bWFfZmxhZ3NfdGVzdChcdTAwMjZtYXAtXHUwMDNldm1hX2ZsYWdzLCBWTUFfU0hBUkVEX0JJVCk7XG4rfVxuK1xuK3N0YXRpYyBib29sIG1hcF9pc19hbm9uKGNvbnN0IHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4re1xuK1x0cmV0dXJuIG1hcF9pc19wcml2YXRlKG1hcCkgXHUwMDI2XHUwMDI2ICFtYXAtXHUwMDNlZmlsZTtcbit9XG4rXG4gLypcbiAgKiBfX21tYXBfbmV3X3ZtYSgpIC0gQWxsb2NhdGUgYSBuZXcgVk1BIGZvciB0aGUgcmVnaW9uLCBhcyBtZXJnaW5nIHdhcyBub3RcbiAgKiBwb3NzaWJsZS5cbkBAIC0yNTkyLDggKzI2NTEsNyBAQCBzdGF0aWMgaW50IF9fbW1hcF9uZXdfZmlsZV92bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcbiBzdGF0aWMgaW50IF9fbW1hcF9uZXdfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXG4gXHRzdHJ1Y3QgbW1hcF9hY3Rpb24gKmFjdGlvbilcbiB7XG4tXHRjb25zdCBib29sIGlzX2Fub24gPSAhbWFwLVx1MDAzZWZpbGUgXHUwMDI2XHUwMDI2XG4tXHRcdCF2bWFfZmxhZ3NfdGVzdChcdTAwMjZtYXAtXHUwMDNldm1hX2ZsYWdzLCBWTUFfU0hBUkVEX0JJVCk7XG4rXHRjb25zdCBib29sIGlzX2Fub24gPSBtYXBfaXNfYW5vbihtYXApO1xuIFx0c3RydWN0IHZtYV9pdGVyYXRvciAqdm1pID0gbWFwLVx1MDAzZXZtaTtcbiBcdGludCBlcnJvciA9IDA7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbkBAIC0yNjEyLDcgKzI2NzAsNyBAQCBzdGF0aWMgaW50IF9fbW1hcF9uZXdfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXG4gXHRpZiAoaXNfYW5vbilcbiBcdFx0dm1hX3NldF9hbm9ueW1vdXModm1hKTtcbiBcbi1cdHZtYV9zZXRfcmFuZ2Uodm1hLCBtYXAtXHUwMDNlYWRkciwgbWFwLVx1MDAzZWVuZCwgbWFwLVx1MDAzZXBnb2ZmKTtcbitcdHZtYV9zZXRfcmFuZ2Uodm1hLCBtYXAtXHUwMDNlYWRkciwgbWFwLVx1MDAzZWVuZCwgbWFwLVx1MDAzZXBnb2ZmLCBtYXAtXHUwMDNldmlydF9wZ29mZik7XG4gXHR2bWEtXHUwMDNlZmxhZ3MgPSBtYXAtXHUwMDNldm1hX2ZsYWdzO1xuIFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IG1hcC1cdTAwM2VwYWdlX3Byb3Q7XG4gXG5AQCAtMjczNSw2ICsyNzkzLDEwIEBAIHN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4rXHQvKiBIb29rcyBjYW5ub3QgbWFyayB0aGVtc2VsdmVzIGFub255bW91cy4gKi9cbitcdGlmICghZGVzYy1cdTAwM2V2bV9vcHMpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0ZXJyID0gY2FsbF9hY3Rpb25fcHJlcGFyZShtYXAsIGRlc2MpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC0yNzUxLDE2ICsyODEzLDIxIEBAIHN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcbiBcdG1hcC1cdTAwM2V2bV9vcHMgPSBkZXNjLVx1MDAzZXZtX29wcztcbiBcdG1hcC1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBkZXNjLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcbitcdC8qXG4rXHQgKiBNQVBfUFJJVkFURS0vZGV2L3plcm8gbWFwcGluZ3MgYXJlIGFuIGFuY2llbnQgd2F5IG9mIGdldHRpbmdcbitcdCAqIGFub255bW91cyBtYXBwaW5ncy4gUmF0aGVyIHRoYW4gYWxsb3dpbmcgdGhlc2UgbWFwcGluZ3MgdG8gYmUgb2RkXG4rXHQgKiBvdXRsaWVycywgc2ltcGx5IG1ha2UgdGhlbSB0cnVseSBhbm9ueW1vdXMuXG4rXHQgKi9cbitcdGlmIChtYXBfaXNfcHJpdmF0ZShtYXApIFx1MDAyNlx1MDAyNiBtYXBfaXNfZGV2X3plcm8obWFwKSlcbitcdFx0bWFwX3NldF9hbm9uKG1hcCk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc2V0X3ZtYV91c2VyX2RlZmluZWRfZmllbGRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxuIHtcbi1cdGlmIChtYXAtXHUwMDNldm1fb3BzKVxuLVx0XHR2bWEtXHUwMDNldm1fb3BzID0gbWFwLVx1MDAzZXZtX29wcztcbi1cdGVsc2VcdC8qIE9ubHkgL2Rldi96ZXJvIHNob3VsZCBkbyB0aGlzLiAqL1xuLVx0XHR2bWFfc2V0X2Fub255bW91cyh2bWEpO1xuK1x0dm1hLVx1MDAzZXZtX29wcyA9IG1hcC1cdTAwM2V2bV9vcHM7XG4gXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbWFwLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbiB9XG4gXG5AQCAtMjgwMSw3ICsyODY4LDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBOVUxMO1xuIFx0Ym9vbCBoYXZlX21tYXBfcHJlcGFyZSA9IGZpbGUgXHUwMDI2XHUwMDI2IGZpbGUtXHUwMDNlZl9vcC1cdTAwM2VtbWFwX3ByZXBhcmU7XG4gXHRWTUFfSVRFUkFUT1Iodm1pLCBtbSwgYWRkcik7XG4tXHRNTUFQX1NUQVRFKG1hcCwgbW0sIFx1MDAyNnZtaSwgYWRkciwgbGVuLCBwZ29mZiwgdm1hX2ZsYWdzLCBmaWxlKTtcbitcdGNvbnN0IHBnb2ZmX3QgdmlydF9wZ29mZiA9IGFkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRNTUFQX1NUQVRFKG1hcCwgbW0sIFx1MDAyNnZtaSwgYWRkciwgbGVuLCBwZ29mZiwgdmlydF9wZ29mZiwgdm1hX2ZsYWdzLCBmaWxlKTtcbiBcdHN0cnVjdCB2bV9hcmVhX2Rlc2MgZGVzYyA9IHtcbiBcdFx0Lm1tID0gbW0sXG4gXHRcdC5maWxlID0gZmlsZSxcbkBAIC0yOTQ2LDYgKzMwMTQsNyBAQCBpbnQgZG9fYnJrX2ZsYWdzKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuK1x0Y29uc3QgcGdvZmZfdCBwZ29mZiA9IGFkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHQvKlxuIFx0ICogQ2hlY2sgYWdhaW5zdCBhZGRyZXNzIHNwYWNlIGxpbWl0cyBieSB0aGUgY2hhbmdlZCBzaXplXG5AQCAtMjk3MCw3ICszMDM5LDcgQEAgaW50IGRvX2Jya19mbGFncyhzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0ICogb2NjdXIgYWZ0ZXIgZm9ya2luZywgc28gdGhlIGV4cGFuZCB3aWxsIG9ubHkgaGFwcGVuIG9uIG5ldyBWTUFzLlxuIFx0ICovXG4gXHRpZiAodm1hIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fZW5kID09IGFkZHIpIHtcbi1cdFx0Vk1HX1NUQVRFKHZtZywgbW0sIHZtaSwgYWRkciwgYWRkciArIGxlbiwgdm1hX2ZsYWdzLCBQSFlTX1BGTihhZGRyKSk7XG4rXHRcdFZNR19TVEFURSh2bWcsIG1tLCB2bWksIGFkZHIsIGFkZHIgKyBsZW4sIHZtYV9mbGFncywgcGdvZmYsIHBnb2ZmKTtcbiBcbiBcdFx0dm1nLnByZXYgPSB2bWE7XG4gXHRcdC8qIHZtaSBpcyBwb3NpdGlvbmVkIGF0IHByZXYsIHdoaWNoIHRoaXMgbW9kZSBleHBlY3RzLiAqL1xuQEAgLTI5OTAsNyArMzA1OSw3IEBAIGludCBkb19icmtfZmxhZ3Moc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0Z290byB1bmFjY3RfZmFpbDtcbiBcbiBcdHZtYV9zZXRfYW5vbnltb3VzKHZtYSk7XG4tXHR2bWFfc2V0X3JhbmdlKHZtYSwgYWRkciwgYWRkciArIGxlbiwgYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4rXHR2bWFfc2V0X3JhbmdlKHZtYSwgYWRkciwgYWRkciArIGxlbiwgcGdvZmYsIHBnb2ZmKTtcbiBcdHZtYS1cdTAwM2VmbGFncyA9IHZtYV9mbGFncztcbiBcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSk7XG4gXHR2bWFfc3RhcnRfd3JpdGUodm1hKTtcbkBAIC0zMzgyLDYgKzM0NTEsNyBAQCBpbnQgaW5zZXJ0X3ZtX3N0cnVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRcdFdBUk5fT05fT05DRSh2bWEtXHUwMDNlYW5vbl92bWEpO1xuIFx0XHR2bWFfc2V0X3Bnb2ZmKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiBcdH1cbitcdHZtYV9zZXRfdmlydF9wZ29mZih2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4gXG4gXHRpZiAodm1hX2xpbmsobW0sIHZtYSkpIHtcbiBcdFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0FDQ09VTlRfQklUKSlcbkBAIC0zNDM3LDcgKzM1MDcsNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKl9faW5zdGFsbF9zcGVjaWFsX21hcHBpbmcoXG4gXG4gXHR2bWEtXHUwMDNldm1fb3BzID0gb3BzO1xuIFx0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHByaXY7XG4tXHR2bWFfc2V0X3JhbmdlKHZtYSwgYWRkciwgYWRkciArIGxlbiwgMCk7XG4rXHR2bWFfc2V0X3JhbmdlKHZtYSwgYWRkciwgYWRkciArIGxlbiwgMCwgYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4gXG4gXHRyZXQgPSBpbnNlcnRfdm1fc3RydWN0KG1tLCB2bWEpO1xuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9tbS92bWEuaCBiL21tL3ZtYS5oXG5pbmRleCAwYmM3ZDUyMWU5NzY3Ny4uOGNhZWUzYjRiYTI2NzEgMTAwNjQ0XG4tLS0gYS9tbS92bWEuaFxuKysrIGIvbW0vdm1hLmhcbkBAIC0xMDQsNiArMTA0LDcgQEAgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3Qge1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydDtcbiBcdHVuc2lnbmVkIGxvbmcgZW5kO1xuIFx0cGdvZmZfdCBwZ29mZjtcbitcdHBnb2ZmX3QgYW5vbl9wZ29mZjtcbiBcbiBcdHVuaW9uIHtcbiBcdFx0LyogVGVtcG9yYXJ5IHdoaWxlIFZNQSBmbGFncyBhcmUgYmVpbmcgY29udmVydGVkLiAqL1xuQEAgLTIzNywxMSArMjM4LDYgQEAgc3RhdGljIGlubGluZSBib29sIHZtZ19ub21lbShzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nKVxuIFx0cmV0dXJuIHZtZy1cdTAwM2VzdGF0ZSA9PSBWTUFfTUVSR0VfRVJST1JfTk9NRU07XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWdfc3RhcnRfcGdvZmYoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcbi17XG4tXHRyZXR1cm4gdm1nLVx1MDAzZXBnb2ZmO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1nX3BhZ2VzKGNvbnN0IHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXG4ge1xuIFx0Y29uc3QgdW5zaWduZWQgbG9uZyBzaXplID0gdm1nLVx1MDAzZWVuZCAtIHZtZy1cdTAwM2VzdGFydDtcbkBAIC0yNDksNiArMjQ1LDExIEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWdfcGFnZXMoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcbiBcdHJldHVybiBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1nX3N0YXJ0X3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXG4re1xuK1x0cmV0dXJuIHZtZy1cdTAwM2VwZ29mZjtcbit9XG4rXG4gc3RhdGljIGlubGluZSBwZ29mZl90IHZtZ19lbmRfcGdvZmYoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcbiB7XG4gXHRyZXR1cm4gdm1nX3N0YXJ0X3Bnb2ZmKHZtZykgKyB2bWdfcGFnZXModm1nKTtcbkBAIC0yNjYsOSArMjY3LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9zYW5lX3Bnb2ZmKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IHBnb2ZmKVxuIFx0ICovXG4gXHRpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSlcbiBcdFx0cmV0dXJuO1xuLVx0LyogTUFQX1BSSVZBVEUtL2Rldi96ZXJvIGlzIGFub24sIG5vbi1OVUxMIHZtX2ZpbGUsIGJ1dCBoYXMgZmlsZSBwZ29mZi4gKi9cbi1cdGlmICh2bWEtXHUwMDNldm1fZmlsZSlcbi1cdFx0cmV0dXJuO1xuIFx0LyogSWYgZmF1bHRlZCBpbiwgY291bGQgaGF2ZSBiZWVuIHJlbWFwcGVkLiAqL1xuIFx0aWYgKHZtYS1cdTAwM2Vhbm9uX3ZtYSlcbiBcdFx0cmV0dXJuO1xuQEAgLTI4Myw0OCArMjgxLDEzMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX3NldF9wZ29mZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBwZ29mZilcbiBcdHZtYS1cdTAwM2V2bV9wZ29mZiA9IHBnb2ZmO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1nX3N0YXJ0X2Fub25fcGdvZmYoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcbit7XG4rXHRyZXR1cm4gdm1nLVx1MDAzZWFub25fcGdvZmY7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWdfZW5kX2Fub25fcGdvZmYoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcbit7XG4rXHRyZXR1cm4gdm1nX3N0YXJ0X2Fub25fcGdvZmYodm1nKSArIHZtZ19wYWdlcyh2bWcpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgX192bWFfc2V0X3ZpcnRfcGdvZmYoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgcGdvZmYpXG4re1xuKyNpZmRlZiBDT05GSUdfNjRCSVRcbitcdHZtYS1cdTAwM2VfX3ZtX3ZpcnRfcGdvZmZfaGkgPSBwZ29mZiBcdTAwM2VcdTAwM2UgMzI7XG4rI2VuZGlmXG4rXHR2bWEtXHUwMDNlX192bV92aXJ0X3Bnb2ZmX2xvID0gcGdvZmYgXHUwMDI2IEdFTk1BU0soMzEsIDApO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgdm1hX3NldF92aXJ0X3Bnb2ZmKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IHBnb2ZmKVxuK3tcbitcdHZtYV9hc3NlcnRfY2FuX21vZGlmeSh2bWEpO1xuK1x0X192bWFfc2V0X3ZpcnRfcGdvZmYodm1hLCBwZ29mZik7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYWRkX3Bnb2ZmKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGRlbHRhKVxuIHtcbiBcdHZtYV9hc3NlcnRfY2FuX21vZGlmeSh2bWEpO1xuIFx0dm1hX3NldF9wZ29mZih2bWEsIHZtYV9zdGFydF9wZ29mZih2bWEpICsgZGVsdGEpO1xuK1x0dm1hX3NldF92aXJ0X3Bnb2ZmKHZtYSwgdm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSArIGRlbHRhKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHZtYV9zdWJfcGdvZmYoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgZGVsdGEpXG4ge1xuIFx0dm1hX2Fzc2VydF9jYW5fbW9kaWZ5KHZtYSk7XG4gXHR2bWFfc2V0X3Bnb2ZmKHZtYSwgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSkgLSBkZWx0YSk7XG4rXHR2bWFfc2V0X3ZpcnRfcGdvZmYodm1hLCB2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpIC0gZGVsdGEpO1xuK31cbitcbisvKipcbisgKiB2bWFfYW5vbl9wZ29mZl9hZGRyKCkgLSBDYWxjdWxhdGVzIHRoZSBhYnNvbHV0ZSBhbm9ueW1vdXMgcGFnZSBvZmZzZXQgb2ZcbisgKiBAYWRkcmVzcy5cbisgKiBAdm1hOiBUaGUgVk1BIHdob3NlIGFub255bW91cyBwYWdlIG9mZnNldCBpcyByZXF1aXJlZC5cbisgKiBAYWRkcmVzczogVGhlIGFkZHJlc3Mgd2hvc2UgYWJzb2x1dGUgcGFnZSBvZmZzZXQgaXMgcmVxdWlyZWQuXG4rICpcbisgKiBJZiB0aGUgVk1BIGlzIGEgc2hhcmVkIGZpbGUtYmFja2VkIG1hcHBpbmcsIHRoZW4gdGhlIGZpbGUtYmFzZWQgcGFnZSBvZmZzZXRcbisgKiBpcyByZXR1cm5lZC5cbisgKlxuKyAqIE90aGVyd2lzZSwgdGhlIHZpcnR1YWwgcGFnZSBvZmZzZXQgaXMgcmV0dXJuZWQuXG4rICpcbisgKiBUaGlzIG1lYW5zIHRoYXQgc2hhcmVkIGZpbGUtYmFja2VkIG1hcHBpbmdzIGFyZSBjb3JyZWN0bHkgbWVyZ2VkIGJhc2VkIG9uXG4rICogdGhlaXIgZmlsZSBwYWdlIG9mZnNldCBjb21wYXRpYmlsaXR5LlxuKyAqXG4rICogUmV0dXJuczogVGhlIGFic29sdXRlIGFub255bW91cyBwYWdlIG9mZnNldCBvZiBAYWRkcmVzcyB3aXRoaW4gQHZtYS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1hX2Fub25fcGdvZmZfYWRkcihjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4re1xuK1x0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX1NIQVJFRF9CSVQpKVxuK1x0XHRyZXR1cm4gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTtcbitcbitcdHJldHVybiBsaW5lYXJfdmlydF9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyk7XG4gfVxuIFxuLSNkZWZpbmUgVk1HX1NUQVRFKG5hbWUsIG1tXywgdm1pXywgc3RhcnRfLCBlbmRfLCB2bWFfZmxhZ3NfLCBwZ29mZl8pXHRcXFxuKy8qKlxuKyAqIHZtYV9zdGFydF9hbm9uX3Bnb2ZmKCkgLSBDYWxjdWxhdGVzIHRoZSBhYnNvbHV0ZSBhbm9ueW1vdXMgcGFnZSBvZmZzZXQgdXNlZFxuKyAqIGZvciBwdXJwb3NlcyBvZiBtZXJnZSBjb21wYXRpYmlsaXR5LlxuKyAqIEB2bWE6IFRoZSBWTUEgd2hvc2UgYW5vbnltb3VzIHBhZ2Ugb2Zmc2V0IGlzIHJlcXVpcmVkLlxuKyAqXG4rICogU2VlIHZtYV9hbm9uX3Bnb2ZmX2FkZHIoKS5cbisgKlxuKyAqIFJldHVybnM6IFRoZSBhYnNvbHV0ZSBhbm9ueW1vdXMgcGFnZSBvZmZzZXQgb2YgQHZtYSBmb3IgcHVycG9zZXMgb2YgbWVyZ2luZy5cbisgKi9cbitzdGF0aWMgaW5saW5lIHBnb2ZmX3Qgdm1hX3N0YXJ0X2Fub25fcGdvZmYoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4re1xuK1x0cmV0dXJuIHZtYV9hbm9uX3Bnb2ZmX2FkZHIodm1hLCB2bWEtXHUwMDNldm1fc3RhcnQpO1xuK31cbitcbisvKipcbisgKiB2bWFfZW5kX2Fub25fcGdvZmYoKSAtIENhbGN1bGF0ZXMgdGhlIGFic29sdXRlIGV4Y2x1c2l2ZSBlbmQgYW5vbnltb3VzIHBhZ2VcbisgKiBvZmZzZXQgdXNlZCBmb3IgcHVycG9zZXMgb2YgbWVyZ2UgY29tcGF0aWJpbGl0eS5cbisgKiBAdm1hOiBUaGUgVk1BIHdob3NzZSBhbm9ueW1vdXMgZW5kIHBhZ2Ugb2Zmc2V0IGlzIHJlcXVpcmVkLlxuKyAqXG4rICogU2VlIHZtYV9zdGFydF9hbm9uX3Bnb2ZmKCkuXG4rICpcbisgKiBSZXR1cm5zOiBUaGUgYWJzb2x1dGUgZXhjbHVzaXZlIGVuZCBhbm9ueW1vdXMgcGFnZSBvZmZzZXQgb2YgQHZtYSBmb3JcbisgKiBwdXJwb3NlcyBvZiBtZXJnaW5nLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWFfZW5kX2Fub25fcGdvZmYoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4re1xuK1x0cmV0dXJuIHZtYV9zdGFydF9hbm9uX3Bnb2ZmKHZtYSkgKyB2bWFfcGFnZXModm1hKTtcbit9XG4rXG4rI2RlZmluZSBWTUdfU1RBVEUobmFtZSwgbW1fLCB2bWlfLCBzdGFydF8sIGVuZF8sIHZtYV9mbGFnc18sIHBnb2ZmXywgYW5vbl9wZ29mZl8pIFxcXG4rXHRzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCBuYW1lID0ge1x0XHRcdFx0XHQgIFxcXG4rXHRcdC5tbSA9IG1tXyxcdFx0XHRcdFx0XHRcdCAgXFxcbitcdFx0LnZtaSA9IHZtaV8sXHRcdFx0XHRcdFx0XHQgIFxcXG4rXHRcdC5zdGFydCA9IHN0YXJ0XyxcdFx0XHRcdFx0XHQgIFxcXG4rXHRcdC5lbmQgPSBlbmRfLFx0XHRcdFx0XHRcdFx0ICBcXFxuK1x0XHQudm1hX2ZsYWdzID0gdm1hX2ZsYWdzXyxcdFx0XHRcdFx0ICBcXFxuK1x0XHQucGdvZmYgPSBwZ29mZl8sXHRcdFx0XHRcdFx0ICBcXFxuK1x0XHQuYW5vbl9wZ29mZiA9IGFub25fcGdvZmZfLFx0XHRcdFx0XHQgIFxcXG4rXHRcdC5zdGF0ZSA9IFZNQV9NRVJHRV9TVEFSVCxcdFx0XHRcdFx0ICBcXFxuK1x0fVxuK1xuKyNkZWZpbmUgVk1HX1ZNQV9TVEFURShuYW1lLCB2bWlfLCBwcmV2Xywgdm1hXywgc3RhcnRfLCBlbmRfKVx0XHRcXFxuIFx0c3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgbmFtZSA9IHtcdFx0XHRcdFxcXG4tXHRcdC5tbSA9IG1tXyxcdFx0XHRcdFx0XHRcXFxuK1x0XHQubW0gPSB2bWFfLVx1MDAzZXZtX21tLFx0XHRcdFx0XHRcXFxuIFx0XHQudm1pID0gdm1pXyxcdFx0XHRcdFx0XHRcXFxuK1x0XHQucHJldiA9IHByZXZfLFx0XHRcdFx0XHRcdFxcXG4rXHRcdC5taWRkbGUgPSB2bWFfLFx0XHRcdFx0XHRcdFxcXG4rXHRcdC5uZXh0ID0gTlVMTCxcdFx0XHRcdFx0XHRcXFxuIFx0XHQuc3RhcnQgPSBzdGFydF8sXHRcdFx0XHRcdFxcXG4gXHRcdC5lbmQgPSBlbmRfLFx0XHRcdFx0XHRcdFxcXG4tXHRcdC52bWFfZmxhZ3MgPSB2bWFfZmxhZ3NfLFx0XHRcdFx0XFxcbi1cdFx0LnBnb2ZmID0gcGdvZmZfLFx0XHRcdFx0XHRcXFxuK1x0XHQudm1fZmxhZ3MgPSB2bWFfLVx1MDAzZXZtX2ZsYWdzLFx0XHRcdFx0XFxcbitcdFx0LnBnb2ZmID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hXywgc3RhcnRfKSxcdFx0XFxcbitcdFx0LmFub25fcGdvZmYgPSB2bWFfYW5vbl9wZ29mZl9hZGRyKHZtYV8sIHN0YXJ0XyksXHRcXFxuK1x0XHQuZmlsZSA9IHZtYV8tXHUwMDNldm1fZmlsZSxcdFx0XHRcdFx0XFxcbitcdFx0LmFub25fdm1hID0gdm1hXy1cdTAwM2Vhbm9uX3ZtYSxcdFx0XHRcdFxcXG4rXHRcdC5wb2xpY3kgPSB2bWFfcG9saWN5KHZtYV8pLFx0XHRcdFx0XFxcbitcdFx0LnVmZmRfY3R4ID0gdm1hXy1cdTAwM2V2bV91c2VyZmF1bHRmZF9jdHgsXHRcdFx0XFxcbitcdFx0LmFub25fbmFtZSA9IGFub25fdm1hX25hbWUodm1hXyksXHRcdFx0XFxcbiBcdFx0LnN0YXRlID0gVk1BX01FUkdFX1NUQVJULFx0XHRcdFx0XFxcbiBcdH1cbiBcbi0jZGVmaW5lIFZNR19WTUFfU1RBVEUobmFtZSwgdm1pXywgcHJldl8sIHZtYV8sIHN0YXJ0XywgZW5kXylcdFxcXG4tXHRzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCBuYW1lID0ge1x0XHRcdFxcXG4tXHRcdC5tbSA9IHZtYV8tXHUwMDNldm1fbW0sXHRcdFx0XHRcXFxuLVx0XHQudm1pID0gdm1pXyxcdFx0XHRcdFx0XFxcbi1cdFx0LnByZXYgPSBwcmV2XyxcdFx0XHRcdFx0XFxcbi1cdFx0Lm1pZGRsZSA9IHZtYV8sXHRcdFx0XHRcdFxcXG4tXHRcdC5uZXh0ID0gTlVMTCxcdFx0XHRcdFx0XFxcbi1cdFx0LnN0YXJ0ID0gc3RhcnRfLFx0XHRcdFx0XFxcbi1cdFx0LmVuZCA9IGVuZF8sXHRcdFx0XHRcdFxcXG4tXHRcdC52bV9mbGFncyA9IHZtYV8tXHUwMDNldm1fZmxhZ3MsXHRcdFx0XFxcbi1cdFx0LnBnb2ZmID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hXywgc3RhcnRfKSxcdFxcXG4tXHRcdC5maWxlID0gdm1hXy1cdTAwM2V2bV9maWxlLFx0XHRcdFx0XFxcbi1cdFx0LmFub25fdm1hID0gdm1hXy1cdTAwM2Vhbm9uX3ZtYSxcdFx0XHRcXFxuLVx0XHQucG9saWN5ID0gdm1hX3BvbGljeSh2bWFfKSxcdFx0XHRcXFxuLVx0XHQudWZmZF9jdHggPSB2bWFfLVx1MDAzZXZtX3VzZXJmYXVsdGZkX2N0eCxcdFx0XFxcbi1cdFx0LmFub25fbmFtZSA9IGFub25fdm1hX25hbWUodm1hXyksXHRcdFxcXG4tXHRcdC5zdGF0ZSA9IFZNQV9NRVJHRV9TVEFSVCxcdFx0XHRcXFxuLVx0fVxuLVxuICNpZmRlZiBDT05GSUdfREVCVUdfVk1fTUFQTEVfVFJFRVxuIHZvaWQgdmFsaWRhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuICNlbHNlXG5AQCAtNTA2LDcgKzU4Niw3IEBAIHZvaWQgdW5saW5rX2ZpbGVfdm1hX2JhdGNoX2FkZChzdHJ1Y3QgdW5saW5rX3ZtYV9maWxlX2JhdGNoICp2YixcbiBcbiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmNvcHlfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXG4gXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCBwZ29mZl90IHBnb2ZmLFxuLVx0Ym9vbCAqbmVlZF9ybWFwX2xvY2tzKTtcbitcdHBnb2ZmX3QgYW5vbl9wZ29mZiwgYm9vbCAqbmVlZF9ybWFwX2xvY2tzKTtcbiBcbiBzdHJ1Y3QgYW5vbl92bWEgKmZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbiBcbmRpZmYgLS1naXQgYS9tbS92bWFfZXhlYy5jIGIvbW0vdm1hX2V4ZWMuY1xuaW5kZXggN2FmMTI2MDY4OWI5N2UuLjU4NmM1MjE1NTk0MjQ1IDEwMDY0NFxuLS0tIGEvbW0vdm1hX2V4ZWMuY1xuKysrIGIvbW0vdm1hX2V4ZWMuY1xuQEAgLTQxLDcgKzQxLDcgQEAgaW50IHJlbG9jYXRlX3ZtYV9kb3duKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHNoaWZ0KVxuIFx0dW5zaWduZWQgbG9uZyBuZXdfZW5kID0gb2xkX2VuZCAtIHNoaWZ0O1xuIFx0Vk1BX0lURVJBVE9SKHZtaSwgbW0sIG5ld19zdGFydCk7XG4gXHRWTUdfU1RBVEUodm1nLCBtbSwgXHUwMDI2dm1pLCBuZXdfc3RhcnQsIG9sZF9lbmQsIEVNUFRZX1ZNQV9GTEFHUyxcbi1cdFx0ICB2bWFfc3RhcnRfcGdvZmYodm1hKSk7XG4rXHRcdCAgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIHZtYV9zdGFydF9hbm9uX3Bnb2ZmKHZtYSkpO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpuZXh0O1xuIFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xuIFx0UEFHRVRBQkxFX01PVkUocG1jLCB2bWEsIHZtYSwgb2xkX3N0YXJ0LCBuZXdfc3RhcnQsIGxlbmd0aCk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1hX2luaXQuYyBiL21tL3ZtYV9pbml0LmNcbmluZGV4IDcxNWZlZWUyODNmMGZiLi43MTBiMTg4NDlhMzY5NiAxMDA2NDRcbi0tLSBhL21tL3ZtYV9pbml0LmNcbisrKyBiL21tL3ZtYV9pbml0LmNcbkBAIC01MSw2ICs1MSw3IEBAIHN0YXRpYyB2b2lkIHZtX2FyZWFfaW5pdF9mcm9tKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuIFx0ZGVzdC1cdTAwM2V2bV9lbmQgPSBzcmMtXHUwMDNldm1fZW5kO1xuIFx0ZGVzdC1cdTAwM2Vhbm9uX3ZtYSA9IHNyYy1cdTAwM2Vhbm9uX3ZtYTtcbiBcdGRlc3QtXHUwMDNldm1fcGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYoc3JjKTtcbitcdF9fdm1hX3NldF92aXJ0X3Bnb2ZmKGRlc3QsIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHNyYykpO1xuIFx0ZGVzdC1cdTAwM2V2bV9maWxlID0gc3JjLVx1MDAzZXZtX2ZpbGU7XG4gXHRkZXN0LVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHNyYy1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4gXHR2bV9mbGFnc19pbml0KGRlc3QsIHNyYy1cdTAwM2V2bV9mbGFncyk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1hX2ludGVybmFsLmggYi9tbS92bWFfaW50ZXJuYWwuaFxuaW5kZXggNGQzMDBlN2JiYWY0YzIuLjM4NWMwYWIxMzc3NzQ4IDEwMDY0NFxuLS0tIGEvbW0vdm1hX2ludGVybmFsLmhcbisrKyBiL21tL3ZtYV9pbnRlcm5hbC5oXG5AQCAtMjMsNiArMjMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tzbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2h1Z2VwYWdlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWFqb3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21hcGxlX3RyZWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jXG5pbmRleCA1MTllNWFjMDJkYjc4Yy4uZWRmYmQzOWFlNThlYjQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jXG5AQCAtMTMwNSw2ICsxMzA1LDE2NyBAQCBURVNUX0YobWVyZ2UsIG1lcmdlX3ZtYXNfd2l0aF9tc2VhbClcbiBcdEFTU0VSVF9FUShwcm9jbWFwLVx1MDAzZXF1ZXJ5LnZtYV9lbmQsICh1bnNpZ25lZCBsb25nKXB0ciArIDIgKiBwYWdlX3NpemUpO1xuIH1cbiBcbitURVNUX0YobWVyZ2UsIHZpcnRfYW5kX3BhZ2Vfb2Zmc2V0X21pc21hdGNoX21lbWZkKVxuK3tcbitcdHN0cnVjdCBwcm9jbWFwX2ZkICpwcm9jbWFwID0gXHUwMDI2c2VsZi1cdTAwM2Vwcm9jbWFwO1xuK1x0dW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHNlbGYtXHUwMDNlcGFnZV9zaXplO1xuK1x0Y2hhciAqY2FydmVvdXQgPSBzZWxmLVx1MDAzZWNhcnZlb3V0O1xuK1x0Y2hhciAqcHRyLCAqcHRyMjtcbitcdGludCBmZDtcbitcbitcdC8qIENyZWF0ZSBhIDEwIHBhZ2UgbWVtZmQgZGVzY3JpcHRvci4gKi9cbitcdGZkID0gbWVtZmRfY3JlYXRlKFwidmlydF9wYWdlX29mZnNldF90ZXN0XCIsIE1GRF9DTE9FWEVDKTtcbitcdEFTU0VSVF9ORShmZCwgLTEpO1xuK1x0QVNTRVJUX0VRKGZ0cnVuY2F0ZShmZCwgMTAgKiBwYWdlX3NpemUpLCAwKTtcbitcbitcdC8qIE1hcCBhIHJlZ2lvbiB1c2luZyB0aGUgbWVtZmQgYXQgcGFnZSBvZmZzZXQgMC4gKi9cbitcdHB0ciA9IG1tYXAoY2FydmVvdXQsIDUgKiBwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdCAgIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZCwgMCk7XG4rXHRBU1NFUlRfTkUocHRyLCBNQVBfRkFJTEVEKTtcbitcbitcdC8qXG4rXHQgKiBNYXAgYW5vdGhlciBzZXBhcmF0ZWx5LCBhbmQgZmF1bHQgaW4sIGF0IHBhZ2Ugb2Zmc2V0IDU6XG4rXHQgKlxuK1x0ICogfC0tLS0tLS0tLS0tfCAgICAgICAgICAgfC0tLS0tLS0tLXxcbitcdCAqIHwgdW5mYXVsdGVkIHwgICAgICAgICAgIHwgZmF1bHRlZCB8XG4rXHQgKiB8LS0tLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfFxuK1x0ICovXG4rXHRwdHIyID0gbW1hcChcdTAwMjZjYXJ2ZW91dFsxMCAqIHBhZ2Vfc2l6ZV0sIDUgKiBwYWdlX3NpemUsXG4rXHRcdCAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSxcbitcdFx0ICAgIGZkLCA1ICogcGFnZV9zaXplKTtcbitcdEFTU0VSVF9ORShwdHIyLCBNQVBfRkFJTEVEKTtcbitcdHB0cjJbMF0gPSAneCc7XG4rXG4rXHQvKlxuK1x0ICogTm93IG1vdmUgaXQgaW4gcGxhY2U6XG4rXHQgKlxuK1x0ICogICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS18XG4rXHQgKiAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHxcbitcdCAqICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAgfFxuK1x0ICogfC0tLS0tLS0tLS0tfCAgICAgICAgICAgfC0tLS0tLS0tLXxcbitcdCAqIHwgdW5mYXVsdGVkIHwgICAgICAgICAgIHwgZmF1bHRlZCB8XG4rXHQgKiB8LS0tLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfFxuK1x0ICpcbitcdCAqIEJlY2F1c2UgdmlydHVhbCBwYWdlIG9mZnNldCBvZiB0aGUgZmF1bHRlZCByZWdpb24gaXMgbm93XG4rXHQgKiBcdTAwMjZjYXJ2ZW91dFsxMCAqIHBhZ2Vfc2l6ZV0sIGRlc3BpdGUgdGhlIHR3byByZWdpb25zIGJlaW5nIG1lcmdlYWJsZVxuK1x0ICogZHVlIHRvIGZpbGUgcGFnZSBvZmZzZXQsIHRoZXkgYXJlIE5PVCBtZXJnZWFibGUgZHVlIHRvIHZpcnR1YWwgcGFnZVxuK1x0ICogb2Zmc2V0LlxuK1x0ICovXG4rXHRwdHIyID0gc3lzX21yZW1hcChwdHIyLCA1ICogcGFnZV9zaXplLCA1ICogcGFnZV9zaXplLFxuK1x0XHRcdCAgTVJFTUFQX01BWU1PVkUgfCBNUkVNQVBfRklYRUQsXG4rXHRcdFx0ICBcdTAwMjZjYXJ2ZW91dFs1ICogcGFnZV9zaXplXSk7XG4rXHRBU1NFUlRfTkUocHRyMiwgTUFQX0ZBSUxFRCk7XG4rXG4rXHQvKiBBc3NlcnQgdGhhdCB0aGV5IGRpZCBub3QgbWVyZ2UuICovXG4rXHRBU1NFUlRfVFJVRShmaW5kX3ZtYV9wcm9jbWFwKHByb2NtYXAsIHB0cikpO1xuK1x0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX3N0YXJ0LCAodW5zaWduZWQgbG9uZylwdHIpO1xuK1x0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX2VuZCwgKHVuc2lnbmVkIGxvbmcpcHRyICsgNSAqIHBhZ2Vfc2l6ZSk7XG4rfVxuK1xuK1RFU1RfRihtZXJnZSwgbWVyZ2VfbWFwX3ByaXZhdGVfZGV2X3plcm9fdW5mYXVsdGVkKVxuK3tcbitcdHN0cnVjdCBwcm9jbWFwX2ZkICpwcm9jbWFwID0gXHUwMDI2c2VsZi1cdTAwM2Vwcm9jbWFwO1xuK1x0dW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHNlbGYtXHUwMDNlcGFnZV9zaXplO1xuK1x0Y2hhciAqY2FydmVvdXQgPSBzZWxmLVx1MDAzZWNhcnZlb3V0O1xuK1x0Y2hhciAqcHRyLCAqcHRyMjtcbitcdGludCBmZF96ZXJvO1xuK1xuK1x0aWYgKGFjY2VzcyhcIi9kZXYvemVyb1wiLCBGX09LKSlcbitcdFx0U0tJUChyZXR1cm4sIFwiTm8gL2Rldi96ZXJvLlwiKTtcbitcdGZkX3plcm8gPSBvcGVuKFwiL2Rldi96ZXJvXCIsIE9fUkRXUik7XG4rXHRBU1NFUlRfTkUoZmRfemVybywgLTEpO1xuK1xuK1x0LypcbitcdCAqIE1hcCB0d28gTUFQX1BSSVZBVEUtL2Rldi96ZXJvIFZNQXMgbmV4dCB0byBvbmUgYW5vdGhlciB3aXRoIG9mZnNldCAwXG4rXHQgKiBlYWNoLlxuK1x0ICpcbitcdCAqIFdpdGggdGhlc2UgYmVpbmcgbWFkZSB0cnVseSBhbm9ueW1vdXMgdXBvbiBtYXBwaW5nLCB0aGV5IHdpbGxcbitcdCAqIG1lcmdlLiBJZiB0aGV5IHdlcmUgZmlsZS1iYWNrZWQgVk1BcyB0aGUgcGFnZSBvZmZzZXRzIHdvdWxkIHByZXZlbnRcbitcdCAqIG1lcmdlOlxuK1x0ICpcbitcdCAqIHwtLS0tLXx8LS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLXxcbitcdCAqIHwgcHRyIHx8IHB0cjIgfCAtXHUwMDNlIHwgICAgIHB0ciAgICAgfFxuK1x0ICogfC0tLS0tfHwtLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tfFxuK1x0ICovXG4rXHRwdHIgPSBtbWFwKGNhcnZlb3V0LCA1ICogcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0XHQgICBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmRfemVybywgMCk7XG4rXHRpZiAocHRyID09IE1BUF9GQUlMRUQpIHtcbitcdFx0Y2xvc2UoZmRfemVybyk7XG4rXHRcdEFTU0VSVF9UUlVFKGZhbHNlKTtcbitcdH1cbitcdHB0cjIgPSBtbWFwKFx1MDAyNmNhcnZlb3V0WzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplLFxuK1x0XHQgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmRfemVybywgMCk7XG4rXHRpZiAocHRyMiA9PSBNQVBfRkFJTEVEKSB7XG4rXHRcdGNsb3NlKGZkX3plcm8pO1xuK1x0XHRBU1NFUlRfVFJVRShmYWxzZSk7XG4rXHR9XG4rXHRjbG9zZShmZF96ZXJvKTtcbitcbitcdC8qIEFzc2VydCB0aGF0IHRoZXkgbWVyZ2VkLiAqL1xuK1x0QVNTRVJUX1RSVUUoZmluZF92bWFfcHJvY21hcChwcm9jbWFwLCBwdHIpKTtcbitcdEFTU0VSVF9FUShwcm9jbWFwLVx1MDAzZXF1ZXJ5LnZtYV9zdGFydCwgKHVuc2lnbmVkIGxvbmcpcHRyKTtcbitcdEFTU0VSVF9FUShwcm9jbWFwLVx1MDAzZXF1ZXJ5LnZtYV9lbmQsICh1bnNpZ25lZCBsb25nKXB0ciArIDEwICogcGFnZV9zaXplKTtcbit9XG4rXG4rVEVTVF9GKG1lcmdlLCBtZXJnZV9tYXBfcHJpdmF0ZV9kZXZfemVyb19mYXVsdGVkX3VuZmF1bHRlZClcbit7XG4rXHRzdHJ1Y3QgcHJvY21hcF9mZCAqcHJvY21hcCA9IFx1MDAyNnNlbGYtXHUwMDNlcHJvY21hcDtcbitcdHVuc2lnbmVkIGludCBwYWdlX3NpemUgPSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZTtcbitcdGNoYXIgKmNhcnZlb3V0ID0gc2VsZi1cdTAwM2VjYXJ2ZW91dDtcbitcdGNoYXIgKnB0ciwgKnB0cjI7XG4rXHRpbnQgZmRfemVybztcbitcbitcdGlmIChhY2Nlc3MoXCIvZGV2L3plcm9cIiwgRl9PSykpXG4rXHRcdFNLSVAocmV0dXJuLCBcIk5vIC9kZXYvemVyby5cIik7XG4rXHRmZF96ZXJvID0gb3BlbihcIi9kZXYvemVyb1wiLCBPX1JEV1IpO1xuK1x0QVNTRVJUX05FKGZkX3plcm8sIC0xKTtcbitcbitcdC8qXG4rXHQgKiBNYXAgYSBNQVBfUFJJVkFURSBtYXBwaW5nIG9mIC9kZXYvemVybyB3aXRoIHBhZ2Ugb2Zmc2V0IDAsIHRoZW4gZmF1bHRcbitcdCAqIGl0IGluOlxuK1x0ICpcbitcdCAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuK1x0ICogfCAgICAgICAgICAgZmF1bHRlZCAgICAgICAgICAgICB8XG4rXHQgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbitcdCAqL1xuK1x0cHRyID0gbW1hcChjYXJ2ZW91dCwgMTUgKiBwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdCAgIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZF96ZXJvLCAwKTtcbitcdGlmIChwdHIgPT0gTUFQX0ZBSUxFRCkge1xuK1x0XHRjbG9zZShmZF96ZXJvKTtcbitcdFx0QVNTRVJUX1RSVUUoZmFsc2UpO1xuK1x0fVxuK1x0bWVtc2V0KHB0ciwgJ3gnLCAxNSAqIHBhZ2Vfc2l6ZSk7XG4rXG4rXHQvKlxuK1x0ICogVW5tYXAgdGhlIG1pZGRsZTpcbitcdCAqXG4rXHQgKiB8LS0tLS0tLS0tfCAgICAgICAgICAgfC0tLS0tLS0tLXxcbitcdCAqIHwgZmF1bHRlZCB8ICAgICAgICAgICB8IGZhdWx0ZWQgfFxuK1x0ICogfC0tLS0tLS0tLXwgICAgICAgICAgIHwtLS0tLS0tLS18XG4rXHQgKi9cbitcdEFTU0VSVF9FUShtdW5tYXAoXHUwMDI2cHRyWzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplKSwgMCk7XG4rXG4rXHQvKlxuK1x0ICogTWFwIGluIGEgbmV3IHVuZmF1bHRlZCBtYXBwaW5nIGluIHRoZSBtaWRkbGUgd2l0aCBwYWdlIG9mZnNldCAwIC1cbitcdCAqIHRoaXMgc2hvdWxkIG1lcmdlIGFuZCB3b3VsZCBub3QgaWYgaXQgd2VyZSB0cmVhdGVkIGFzIGEgZmlsZSByYXRoZXJcbitcdCAqIHRoYW4gcHVyZSBhbm9uOlxuK1x0ICpcbitcdCAqIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tfFxuK1x0ICogfCBmYXVsdGVkIHwgdW5mYXVsdGVkIHwgZmF1bHRlZCB8XG4rXHQgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXxcbitcdCAqL1xuK1x0cHRyMiA9IG1tYXAoXHUwMDI2Y2FydmVvdXRbNSAqIHBhZ2Vfc2l6ZV0sIDUgKiBwYWdlX3NpemUsXG4rXHRcdCAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSxcbitcdFx0ICAgIGZkX3plcm8sIDApO1xuK1x0Y2xvc2UoZmRfemVybyk7XG4rXHRBU1NFUlRfTkUocHRyMiwgTUFQX0ZBSUxFRCk7XG4rXG4rXHQvKiBBc3NlcnQgdGhhdCB0aGV5IG1lcmdlZC4gKi9cbitcdEFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7XG4rXHRBU1NFUlRfRVEocHJvY21hcC1cdTAwM2VxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7XG4rXHRBU1NFUlRfRVEocHJvY21hcC1cdTAwM2VxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgKyAxNSAqIHBhZ2Vfc2l6ZSk7XG4rfVxuK1xuIFRFU1RfRihtZXJnZV93aXRoX2ZvcmssIG1yZW1hcF9mYXVsdGVkX3RvX3VuZmF1bHRlZF9wcmV2KVxuIHtcbiBcdHN0cnVjdCBwcm9jbWFwX2ZkICpwcm9jbWFwID0gXHUwMDI2c2VsZi1cdTAwM2Vwcm9jbWFwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmggYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG5pbmRleCBjNTJiMjM3NzNjZDI2My4uYjRmMGY3YzI0ZmNiOGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG4rKysgYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG5AQCAtMTUsNiArMTUsMTYgQEAgc3RydWN0IHRhc2tfc3RydWN0ICpnZXRfY3VycmVudCh2b2lkKTtcbiAjZGVmaW5lIE1NRl9IQVNfTURXRVx0MjhcbiAjZGVmaW5lIGN1cnJlbnQgZ2V0X2N1cnJlbnQoKVxuIFxuKyNkZWZpbmUgTUlOT1JCSVRTXHQyMFxuKyNkZWZpbmUgTUlOT1JNQVNLXHQoKDFVIFx1MDAzY1x1MDAzYyBNSU5PUkJJVFMpIC0gMSlcbitcbisjZGVmaW5lIE1BSk9SKGRldilcdCgodW5zaWduZWQgaW50KSAoKGRldikgXHUwMDNlXHUwMDNlIE1JTk9SQklUUykpXG4rI2RlZmluZSBNSU5PUihkZXYpXHQoKHVuc2lnbmVkIGludCkgKChkZXYpIFx1MDAyNiBNSU5PUk1BU0spKVxuKyNkZWZpbmUgTUtERVYobWEsIG1pKVx0KCgobWEpIFx1MDAzY1x1MDAzYyBNSU5PUkJJVFMpIHwgKG1pKSlcbitcbisjZGVmaW5lIE1FTV9NQUpPUlx0XHQxXG4rI2RlZmluZSBERVZaRVJPX01JTk9SXHQ1XG4rXG4gLypcbiAgKiBEZWZpbmUgdGhlIHRhc2sgY29tbWFuZCBuYW1lIGxlbmd0aCBhcyBlbnVtLCB0aGVuIGl0IGNhbiBiZSB2aXNpYmxlIHRvXG4gICogQlBGIHByb2dyYW1zLlxuQEAgLTQ1LDYgKzU1LDkgQEAgc3RydWN0IGFkZHJlc3Nfc3BhY2Uge1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRmbGFncztcbiBcdGF0b21pY190XHRcdGlfbW1hcF93cml0YWJsZTtcbiB9O1xuK3N0cnVjdCBpbm9kZSB7XG4rXHRkZXZfdFx0XHRcdGlfcmRldjtcbit9O1xuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMge1xuIFx0aW50ICgqbW1hcCkoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopO1xuIFx0aW50ICgqbW1hcF9wcmVwYXJlKShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICopO1xuQEAgLTUyLDYgKzY1LDcgQEAgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB7XG4gc3RydWN0IGZpbGUge1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2VcdCpmX21hcHBpbmc7XG4gXHRjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zXHQqZl9vcDtcbitcdHN0cnVjdCBpbm9kZVx0XHRcdCpmX2lub2RlO1xuIH07XG4gc3RydWN0IGFub25fdm1hX2NoYWluIHtcbiBcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWE7XG5AQCAtNTc3LDYgKzU5MSw3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCB7XG4gXHQgKi9cbiBcdHVuc2lnbmVkIGludCB2bV9sb2NrX3NlcTtcbiAjZW5kaWZcbitcdHVuc2lnbmVkIGludCBfX3ZtX3ZpcnRfcGdvZmZfbG87XG4gXG4gXHQvKlxuIFx0ICogQSBmaWxlJ3MgTUFQX1BSSVZBVEUgdm1hIGNhbiBiZSBpbiBib3RoIGlfbW1hcCB0cmVlIGFuZCBhbm9uX3ZtYVxuQEAgLTYxMiw2ICs2MjcsOSBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xuICNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gXHQvKiBVbnN0YWJsZSBSQ1UgcmVhZGVycyBhcmUgYWxsb3dlZCB0byByZWFkIHRoaXMuICovXG4gXHRyZWZjb3VudF90IHZtX3JlZmNudDtcbisjZW5kaWZcbisjaWZkZWYgQ09ORklHXzY0QklUXG4rXHR1bnNpZ25lZCBpbnQgX192bV92aXJ0X3Bnb2ZmX2hpO1xuICNlbmRpZlxuIFx0LypcbiBcdCAqIEZvciBhcmVhcyB3aXRoIGFuIGFkZHJlc3Mgc3BhY2UgYW5kIGJhY2tpbmcgc3RvcmUsXG5AQCAtMTMyMCw2ICsxMzM4LDI4IEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWFfZW5kX3Bnb2ZmKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0cmV0dXJuIHZtYV9zdGFydF9wZ29mZih2bWEpICsgdm1hX3BhZ2VzKHZtYSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWFfc3RhcnRfdmlydF9wZ29mZihjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRwZ29mZl90IHBnb2ZmID0gMDtcbitcbisjaWZkZWYgQ09ORklHXzY0QklUXG4rXHRwZ29mZiArPSB2bWEtXHUwMDNlX192bV92aXJ0X3Bnb2ZmX2hpO1xuK1x0cGdvZmYgXHUwMDNjXHUwMDNjPSAzMjtcbisjZW5kaWZcbitcdHBnb2ZmICs9IHZtYS1cdTAwM2VfX3ZtX3ZpcnRfcGdvZmZfbG87XG4rXHRyZXR1cm4gcGdvZmY7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgcGdvZmZfdCB2bWFfZW5kX3ZpcnRfcGdvZmYoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4re1xuK1x0cmV0dXJuIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSkgKyB2bWFfcGFnZXModm1hKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBwZ29mZl90IHZtYV9sYXN0X3ZpcnRfcGdvZmYoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4re1xuK1x0cmV0dXJuIHZtYV9lbmRfdmlydF9wZ29mZih2bWEpIC0gMTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgdmZzX21tYXBfcHJlcGFyZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbiB7XG4gXHRyZXR1cm4gZmlsZS1cdTAwM2VmX29wLVx1MDAzZW1tYXBfcHJlcGFyZShkZXNjKTtcbkBAIC0xNTg0LDMgKzE2MjQsNDAgQEAgc3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4gXHRyZXR1cm4gdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWEtXHUwMDNlZmxhZ3MpO1xuIH1cbitcbitzdGF0aWMgaW5saW5lIHBnb2ZmX3QgX19saW5lYXJfdmlydF9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHRcdFx0XHQgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuK3tcbitcdHBnb2ZmX3QgcGdvZmY7XG4rXG4rXHRwZ29mZiA9IGxpbmVhcl9wYWdlX2RlbHRhKHZtYSwgYWRkcmVzcyk7XG4rXHRwZ29mZiArPSB2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpO1xuK1x0cmV0dXJuIHBnb2ZmO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHBnb2ZmX3QgbGluZWFyX3ZpcnRfcGFnZV9pbmRleChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0XHRcdFx0ICAgICBjb25zdCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4re1xuK1x0Y29uc3QgcGdvZmZfdCBwZ29mZiA9IF9fbGluZWFyX3ZpcnRfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpO1xuK1xuK1x0Vk1fV0FSTl9PTl9PTkNFKHZtYV90ZXN0KHZtYSwgVk1BX1NIQVJFRF9CSVQpKTtcbitcdGlmICghdm1hLVx1MDAzZXZtX2ZpbGUpIC8qIElzIGFub255bW91cyBleGNlcHQgTUFQX1BSSVZBVEUtL2Rldi96ZXJvICovXG4rXHRcdFZNX1dBUk5fT05fT05DRShwZ29mZiAhPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpKTtcbitcbitcdHJldHVybiBwZ29mZjtcbit9XG4rXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKmZpbGVfaW5vZGUoY29uc3Qgc3RydWN0IGZpbGUgKmYpXG4re1xuK1x0cmV0dXJuIGYtXHUwMDNlZl9pbm9kZTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbWlub3IoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRyZXR1cm4gTUlOT1IoaW5vZGUtXHUwMDNlaV9yZGV2KTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbWFqb3IoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRyZXR1cm4gTUFKT1IoaW5vZGUtXHUwMDNlaV9yZGV2KTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmMgYi90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuY1xuaW5kZXggYmVhOWVhNmRiMDJhNGMuLmY0MTBiYjZmODU4ZTExIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jXG5AQCAtMjMsNyArMjMsOCBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFsbG9jX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcbiBcdHZtYS1cdTAwM2V2bV9zdGFydCA9IHN0YXJ0O1xuIFx0dm1hLVx1MDAzZXZtX2VuZCA9IGVuZDtcbi1cdHZtYS1cdTAwM2V2bV9wZ29mZiA9IHBnb2ZmO1xuK1x0dm1hX3NldF9wZ29mZih2bWEsIHBnb2ZmKTtcbitcdHZtYV9zZXRfdmlydF9wZ29mZih2bWEsIHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiBcdHZtYS1cdTAwM2VmbGFncyA9IHZtYV9mbGFncztcbiBcdHZtYV9hc3NlcnRfZGV0YWNoZWQodm1hKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tZXJnZS5jIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbWVyZ2UuY1xuaW5kZXggZTM1N2FjY2M4NDk5MDUuLmEwMTEwN2FiOGUyMTM0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbWVyZ2UuY1xuKysrIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbWVyZ2UuY1xuQEAgLTQ1LDYgKzQ1LDcgQEAgdm9pZCB2bWdfc2V0X3JhbmdlKHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHR2bWctXHUwMDNlc3RhcnQgPSBzdGFydDtcbiBcdHZtZy1cdTAwM2VlbmQgPSBlbmQ7XG4gXHR2bWctXHUwMDNlcGdvZmYgPSBwZ29mZjtcbitcdHZtZy1cdTAwM2Vhbm9uX3Bnb2ZmID0gc3RhcnQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHR2bWctXHUwMDNldm1hX2ZsYWdzID0gdm1hX2ZsYWdzO1xuIFxuIFx0dm1nLVx1MDAzZWp1c3RfZXhwYW5kID0gZmFsc2U7XG5AQCAtMTA4LDYgKzEwOSw3IEBAIHN0YXRpYyBib29sIHRlc3Rfc2ltcGxlX21lcmdlKHZvaWQpXG4gXHRcdC5lbmQgPSAweDIwMDAsXG4gXHRcdC52bWFfZmxhZ3MgPSB2bWFfZmxhZ3MsXG4gXHRcdC5wZ29mZiA9IDEsXG4rXHRcdC5hbm9uX3Bnb2ZmID0gMSxcbiBcdH07XG4gXG4gXHRBU1NFUlRfRkFMU0UoYXR0YWNoX3ZtYShcdTAwMjZtbSwgdm1hX2xlZnQpKTtcbkBAIC0xMTksNiArMTIxLDcgQEAgc3RhdGljIGJvb2wgdGVzdF9zaW1wbGVfbWVyZ2Uodm9pZClcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fc3RhcnQsIDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9lbmQsIDB4MzAwMCk7XG4gXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDApO1xuK1x0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDApO1xuIFx0QVNTRVJUX0ZMQUdTX1NBTUVfTUFTSyhcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MsIHZtYV9mbGFncyk7XG4gXG4gXHRkZXRhY2hfZnJlZV92bWEodm1hKTtcbkBAIC0xNTEsNiArMTU0LDcgQEAgc3RhdGljIGJvb2wgdGVzdF9zaW1wbGVfbW9kaWZ5KHZvaWQpXG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX3N0YXJ0LCAweDEwMDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9lbmQsIDB4MjAwMCk7XG4gXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDEpO1xuK1x0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDEpO1xuIFxuIFx0LypcbiBcdCAqIE5vdyB3YWxrIHRocm91Z2ggdGhlIHRocmVlIHNwbGl0IFZNQXMgYW5kIG1ha2Ugc3VyZSB0aGV5IGFyZSBhc1xuQEAgLTE2Myw2ICsxNjcsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X3NpbXBsZV9tb2RpZnkodm9pZClcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fc3RhcnQsIDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9lbmQsIDB4MTAwMCk7XG4gXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDApO1xuK1x0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDApO1xuIFxuIFx0ZGV0YWNoX2ZyZWVfdm1hKHZtYSk7XG4gXHR2bWFfaXRlcl9jbGVhcihcdTAwMjZ2bWkpO1xuQEAgLTE3Miw2ICsxNzcsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X3NpbXBsZV9tb2RpZnkodm9pZClcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fc3RhcnQsIDB4MTAwMCk7XG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX2VuZCwgMHgyMDAwKTtcbiBcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMSk7XG4rXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSwgMSk7XG4gXG4gXHRkZXRhY2hfZnJlZV92bWEodm1hKTtcbiBcdHZtYV9pdGVyX2NsZWFyKFx1MDAyNnZtaSk7XG5AQCAtMTgxLDYgKzE4Nyw3IEBAIHN0YXRpYyBib29sIHRlc3Rfc2ltcGxlX21vZGlmeSh2b2lkKVxuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9zdGFydCwgMHgyMDAwKTtcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fZW5kLCAweDMwMDApO1xuIFx0QVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCAyKTtcbitcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAyKTtcbiBcbiBcdGRldGFjaF9mcmVlX3ZtYSh2bWEpO1xuIFx0bXRyZWVfZGVzdHJveShcdTAwMjZtbS5tbV9tdCk7XG5AQCAtMjEwLDYgKzIxNyw3IEBAIHN0YXRpYyBib29sIHRlc3Rfc2ltcGxlX2V4cGFuZCh2b2lkKVxuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9zdGFydCwgMCk7XG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX2VuZCwgMHgzMDAwKTtcbiBcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCk7XG4rXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSwgMCk7XG4gXG4gXHRkZXRhY2hfZnJlZV92bWEodm1hKTtcbiBcdG10cmVlX2Rlc3Ryb3koXHUwMDI2bW0ubW1fbXQpO1xuQEAgLTIzMiw2ICsyNDAsNyBAQCBzdGF0aWMgYm9vbCB0ZXN0X3NpbXBsZV9zaHJpbmsodm9pZClcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fc3RhcnQsIDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9lbmQsIDB4MTAwMCk7XG4gXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDApO1xuK1x0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDApO1xuIFxuIFx0ZGV0YWNoX2ZyZWVfdm1hKHZtYSk7XG4gXHRtdHJlZV9kZXN0cm95KFx1MDAyNm1tLm1tX210KTtcbkBAIC0zNDQsNiArMzUzLDcgQEAgc3RhdGljIGJvb2wgX190ZXN0X21lcmdlX25ldyhib29sIGlzX3N0aWNreSwgYm9vbCBhX2lzX3N0aWNreSwgYm9vbCBiX2lzX3N0aWNreSxcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fc3RhcnQsIDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9lbmQsIDB4NTAwMCk7XG4gXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDApO1xuK1x0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2Vhbm9uX3ZtYSwgXHUwMDI2ZHVtbXlfYW5vbl92bWEpO1xuIFx0QVNTRVJUX1RSVUUodm1hX3dyaXRlX3N0YXJ0ZWQodm1hKSk7XG4gXHRBU1NFUlRfRVEobW0ubWFwX2NvdW50LCAzKTtcbkBAIC0zNjUsNiArMzc1LDcgQEAgc3RhdGljIGJvb2wgX190ZXN0X21lcmdlX25ldyhib29sIGlzX3N0aWNreSwgYm9vbCBhX2lzX3N0aWNreSwgYm9vbCBiX2lzX3N0aWNreSxcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fc3RhcnQsIDB4NjAwMCk7XG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX2VuZCwgMHg5MDAwKTtcbiBcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgNik7XG4rXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSwgNik7XG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZWFub25fdm1hLCBcdTAwMjZkdW1teV9hbm9uX3ZtYSk7XG4gXHRBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWEpKTtcbiBcdEFTU0VSVF9FUShtbS5tYXBfY291bnQsIDMpO1xuQEAgLTM4NSw2ICszOTYsNyBAQCBzdGF0aWMgYm9vbCBfX3Rlc3RfbWVyZ2VfbmV3KGJvb2wgaXNfc3RpY2t5LCBib29sIGFfaXNfc3RpY2t5LCBib29sIGJfaXNfc3RpY2t5LFxuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9zdGFydCwgMCk7XG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX2VuZCwgMHg5MDAwKTtcbiBcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCk7XG4rXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSwgMCk7XG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZWFub25fdm1hLCBcdTAwMjZkdW1teV9hbm9uX3ZtYSk7XG4gXHRBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWEpKTtcbiBcdEFTU0VSVF9FUShtbS5tYXBfY291bnQsIDIpO1xuQEAgLTQwNSw2ICs0MTcsNyBAQCBzdGF0aWMgYm9vbCBfX3Rlc3RfbWVyZ2VfbmV3KGJvb2wgaXNfc3RpY2t5LCBib29sIGFfaXNfc3RpY2t5LCBib29sIGJfaXNfc3RpY2t5LFxuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9zdGFydCwgMHhhMDAwKTtcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fZW5kLCAweGMwMDApO1xuIFx0QVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCAweGEpO1xuK1x0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDB4YSk7XG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZWFub25fdm1hLCBcdTAwMjZkdW1teV9hbm9uX3ZtYSk7XG4gXHRBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWEpKTtcbiBcdEFTU0VSVF9FUShtbS5tYXBfY291bnQsIDIpO1xuQEAgLTQyNCw2ICs0MzcsNyBAQCBzdGF0aWMgYm9vbCBfX3Rlc3RfbWVyZ2VfbmV3KGJvb2wgaXNfc3RpY2t5LCBib29sIGFfaXNfc3RpY2t5LCBib29sIGJfaXNfc3RpY2t5LFxuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9zdGFydCwgMCk7XG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX2VuZCwgMHhjMDAwKTtcbiBcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCk7XG4rXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3ZpcnRfcGdvZmYodm1hKSwgMCk7XG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZWFub25fdm1hLCBcdTAwMjZkdW1teV9hbm9uX3ZtYSk7XG4gXHRBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWEpKTtcbiBcdEFTU0VSVF9FUShtbS5tYXBfY291bnQsIDEpO1xuQEAgLTQ0NCw2ICs0NTgsNyBAQCBzdGF0aWMgYm9vbCBfX3Rlc3RfbWVyZ2VfbmV3KGJvb2wgaXNfc3RpY2t5LCBib29sIGFfaXNfc3RpY2t5LCBib29sIGJfaXNfc3RpY2t5LFxuIFx0XHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX3N0YXJ0LCAwKTtcbiBcdFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9lbmQsIDB4YzAwMCk7XG4gXHRcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCk7XG4rXHRcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAwKTtcbiBcdFx0QVNTRVJUX0VRKHZtYS1cdTAwM2Vhbm9uX3ZtYSwgXHUwMDI2ZHVtbXlfYW5vbl92bWEpO1xuIFxuIFx0XHRkZXRhY2hfZnJlZV92bWEodm1hKTtcbkBAIC04MDYsNiArODIxLDcgQEAgc3RhdGljIGJvb2wgdGVzdF92bWFfbWVyZ2VfbmV3X3dpdGhfY2xvc2Uodm9pZClcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fc3RhcnQsIDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9lbmQsIDB4NTAwMCk7XG4gXHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDApO1xuK1x0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDApO1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9vcHMsIFx1MDAyNnZtX29wcyk7XG4gXHRBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWEpKTtcbiBcdEFTU0VSVF9FUShtbS5tYXBfY291bnQsIDIpO1xuQEAgLTg2Niw2ICs4ODIsNyBAQCBzdGF0aWMgYm9vbCBfX3Rlc3RfbWVyZ2VfZXhpc3RpbmcoYm9vbCBwcmV2X2lzX3N0aWNreSwgYm9vbCBtaWRkbGVfaXNfc3RpY2t5LCBib1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9zdGFydCwgMHgyMDAwKTtcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fZW5kLCAweDMwMDApO1xuIFx0QVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCAyKTtcbitcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAyKTtcbiBcdEFTU0VSVF9UUlVFKHZtYV93cml0ZV9zdGFydGVkKHZtYSkpO1xuIFx0QVNTRVJUX1RSVUUodm1hX3dyaXRlX3N0YXJ0ZWQodm1hX25leHQpKTtcbiBcdEFTU0VSVF9FUShtbS5tYXBfY291bnQsIDIpO1xuQEAgLTkzMiw2ICs5NDksNyBAQCBzdGF0aWMgYm9vbCBfX3Rlc3RfbWVyZ2VfZXhpc3RpbmcoYm9vbCBwcmV2X2lzX3N0aWNreSwgYm9vbCBtaWRkbGVfaXNfc3RpY2t5LCBib1xuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9zdGFydCwgMHg2MDAwKTtcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fZW5kLCAweDcwMDApO1xuIFx0QVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCA2KTtcbitcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCA2KTtcbiBcdEFTU0VSVF9UUlVFKHZtYV93cml0ZV9zdGFydGVkKHZtYV9wcmV2KSk7XG4gXHRBU1NFUlRfVFJVRSh2bWFfd3JpdGVfc3RhcnRlZCh2bWEpKTtcbiBcdEFTU0VSVF9FUShtbS5tYXBfY291bnQsIDIpO1xuQEAgLTE0MTcsNiArMTQzNSw3IEBAIHN0YXRpYyBib29sIHRlc3RfbWVyZ2VfZXh0ZW5kKHZvaWQpXG4gXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX3N0YXJ0LCAwKTtcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fZW5kLCAweDQwMDApO1xuIFx0QVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCAwKTtcbitcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAwKTtcbiBcdEFTU0VSVF9UUlVFKHZtYV93cml0ZV9zdGFydGVkKHZtYSkpO1xuIFx0QVNTRVJUX0VRKG1tLm1hcF9jb3VudCwgMSk7XG4gXG5AQCAtMTQzMSw3ICsxNDUwLDcgQEAgc3RhdGljIGJvb2wgdGVzdF9leHBhbmRfb25seV9tb2RlKHZvaWQpXG4gXHRzdHJ1Y3QgbW1fc3RydWN0IG1tID0ge307XG4gXHRWTUFfSVRFUkFUT1Iodm1pLCBcdTAwMjZtbSwgMCk7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wcmV2LCAqdm1hO1xuLVx0Vk1HX1NUQVRFKHZtZywgXHUwMDI2bW0sIFx1MDAyNnZtaSwgMHg1MDAwLCAweDkwMDAsIHZtYV9mbGFncywgNSk7XG4rXHRWTUdfU1RBVEUodm1nLCBcdTAwMjZtbSwgXHUwMDI2dm1pLCAweDUwMDAsIDB4OTAwMCwgdm1hX2ZsYWdzLCA1LCA1KTtcbiBcbiBcdC8qXG4gXHQgKiBQbGFjZSBhIFZNQSBwcmlvciB0byB0aGUgb25lIHdlJ3JlIGV4cGFuZGluZyBzbyB3ZSBhc3NlcnQgdGhhdCB3ZSBkb1xuQEAgLTE0NTcsNiArMTQ3Niw3IEBAIHN0YXRpYyBib29sIHRlc3RfZXhwYW5kX29ubHlfbW9kZSh2b2lkKVxuIFx0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9zdGFydCwgMHgzMDAwKTtcbiBcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fZW5kLCAweDkwMDApO1xuIFx0QVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCAzKTtcbitcdEFTU0VSVF9FUSh2bWFfc3RhcnRfdmlydF9wZ29mZih2bWEpLCAzKTtcbiBcdEFTU0VSVF9UUlVFKHZtYV93cml0ZV9zdGFydGVkKHZtYSkpO1xuIFx0QVNTRVJUX0VRKHZtYV9pdGVyX2FkZHIoXHUwMDI2dm1pKSwgMHgzMDAwKTtcbiBcdHZtYV9hc3NlcnRfYXR0YWNoZWQodm1hKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmMgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmNcbmluZGV4IGM4NWJjMDAwZDFjYjdhLi4wYzhhMzQ0NmI5MDUwMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXG5AQCAtNDUsNyArNDUsNTYgQEAgc3RhdGljIGJvb2wgdGVzdF9tbWFwX3JlZ2lvbl9iYXNpYyh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZHVtbXlfbW1hcF9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIHRlc3RfcHVyZV9hbm9uX2Rldl96ZXJvKHZvaWQpXG4re1xuK1x0Y29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9SRUFEX0JJVCwgVk1BX1dSSVRFX0JJVCxcbitcdFx0XHRWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQpO1xuK1x0Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmX29wID0ge1xuK1x0XHQubW1hcF9wcmVwYXJlID0gZHVtbXlfbW1hcF9wcmVwYXJlLFxuK1x0fTtcbitcdHN0cnVjdCBpbm9kZSBpbm9kZSA9IHtcbitcdFx0LmlfcmRldiA9IE1LREVWKE1FTV9NQUpPUiwgREVWWkVST19NSU5PUiksXG4rXHR9O1xuK1x0c3RydWN0IGZpbGUgZmlsZSA9IHtcbitcdFx0LmZfaW5vZGUgPSBcdTAwMjZpbm9kZSxcbitcdFx0LmZfb3AgPSBcdTAwMjZmX29wLFxuK1x0fTtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgbW0gPSB7fTtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyO1xuK1x0Vk1BX0lURVJBVE9SKHZtaSwgXHUwMDI2bW0sIDApO1xuK1xuK1x0Y3VycmVudC1cdTAwM2VtbSA9IFx1MDAyNm1tO1xuK1xuK1x0LypcbitcdCAqIE1hcCBhIE1BUF9QUklWQVRFLS9kZXYvemVybyBtYXBwaW5nIGF0IGFkZHJlc3MgMHgzMDAwMDAgd2l0aCBhIHBhZ2VcbitcdCAqIG9mZnNldCBvZiAweDEwLCB3aGljaCB3ZSBleHBlY3QgdG8gYmUgcmVzZXQgdG8gdGhlIHZpcnR1YWwgcGFnZVxuK1x0ICogb2Zmc2V0LlxuK1x0ICovXG4rXHRhZGRyID0gX19tbWFwX3JlZ2lvbihcdTAwMjZmaWxlLCAweDMwMDAwMCwgMHgzMDAwLCB2bWFfZmxhZ3MsIDB4MTAsIE5VTEwpO1xuK1x0QVNTRVJUX0VRKGFkZHIsIDB4MzAwMDAwKTtcbitcbitcdC8qIEFzc2VydCB0aGF0IGl0IHRydWx5IGlzIGFuIGFub255bW91cyBtYXBwaW5nLiAqL1xuK1x0dm1hID0gdm1hX2xvb2t1cChcdTAwMjZtbSwgYWRkcik7XG4rXHRBU1NFUlRfTkUodm1hLCBOVUxMKTtcbitcdEFTU0VSVF9UUlVFKHZtYV9pc19hbm9ueW1vdXModm1hKSk7XG4rXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX2ZpbGUsIE5VTEwpO1xuK1x0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEsIE5VTEwpO1xuK1x0LyogRXhwZWN0IHZpcnR1YWwgcGFnZSBvZmZzZXRzLiAqL1xuK1x0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9wZ29mZiwgMHgzMDApO1xuK1x0QVNTRVJUX0VRKHZtYV9zdGFydF92aXJ0X3Bnb2ZmKHZtYSksIDB4MzAwKTtcbitcbitcdGNsZWFudXBfbW0oXHUwMDI2bW0sIFx1MDAyNnZtaSk7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnVuX21tYXBfdGVzdHMoaW50ICpudW1fdGVzdHMsIGludCAqbnVtX2ZhaWwpXG4ge1xuIFx0VEVTVChtbWFwX3JlZ2lvbl9iYXNpYyk7XG4rXHRURVNUKHB1cmVfYW5vbl9kZXZfemVybyk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL3ZtYS5jIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvdm1hLmNcbmluZGV4IDc1NGEyZGEwNjMyMTU3Li43Y2E1Mjg5ZTBmOTU5MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL3ZtYS5jXG4rKysgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy92bWEuY1xuQEAgLTM4LDcgKzM4LDcgQEAgc3RhdGljIGJvb2wgdGVzdF9jb3B5X3ZtYSh2b2lkKVxuIFx0LyogTW92ZSBiYWNrd2FyZHMgYW5kIGRvIG5vdCBtZXJnZS4gKi9cbiBcbiBcdHZtYSA9IGFsbG9jX2FuZF9saW5rX3ZtYShcdTAwMjZtbSwgMHgzMDAwLCAweDUwMDAsIDMsIHZtYV9mbGFncyk7XG4tXHR2bWFfbmV3ID0gY29weV92bWEoXHUwMDI2dm1hLCAwLCAweDIwMDAsIDAsIFx1MDAyNm5lZWRfbG9ja3MpO1xuK1x0dm1hX25ldyA9IGNvcHlfdm1hKFx1MDAyNnZtYSwgMCwgMHgyMDAwLCAwLCAzLCBcdTAwMjZuZWVkX2xvY2tzKTtcbiBcdEFTU0VSVF9ORSh2bWFfbmV3LCB2bWEpO1xuIFx0QVNTRVJUX0VRKHZtYV9uZXctXHUwMDNldm1fc3RhcnQsIDApO1xuIFx0QVNTRVJUX0VRKHZtYV9uZXctXHUwMDNldm1fZW5kLCAweDIwMDApO1xuQEAgLTUxLDcgKzUxLDcgQEAgc3RhdGljIGJvb2wgdGVzdF9jb3B5X3ZtYSh2b2lkKVxuIFxuIFx0dm1hID0gYWxsb2NfYW5kX2xpbmtfdm1hKFx1MDAyNm1tLCAwLCAweDIwMDAsIDAsIHZtYV9mbGFncyk7XG4gXHR2bWFfbmV4dCA9IGFsbG9jX2FuZF9saW5rX3ZtYShcdTAwMjZtbSwgMHg2MDAwLCAweDgwMDAsIDYsIHZtYV9mbGFncyk7XG4tXHR2bWFfbmV3ID0gY29weV92bWEoXHUwMDI2dm1hLCAweDQwMDAsIDB4MjAwMCwgNCwgXHUwMDI2bmVlZF9sb2Nrcyk7XG4rXHR2bWFfbmV3ID0gY29weV92bWEoXHUwMDI2dm1hLCAweDQwMDAsIDB4MjAwMCwgNCwgNCwgXHUwMDI2bmVlZF9sb2Nrcyk7XG4gXHR2bWFfYXNzZXJ0X2F0dGFjaGVkKHZtYV9uZXcpO1xuIFxuIFx0QVNTRVJUX0VRKHZtYV9uZXcsIHZtYV9uZXh0KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS92bWFfaW50ZXJuYWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oXG5pbmRleCA0ZjZjNTY2NmFjMDdkMy4uOGE0OGIyMzFhYTdhYmYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS92bWFfaW50ZXJuYWwuaFxuKysrIGIvdG9vbHMvdGVzdGluZy92bWEvdm1hX2ludGVybmFsLmhcbkBAIC01Myw2ICs1Myw3IEBAIHR5cGVkZWYgX19iaXR3aXNlIHVuc2lnbmVkIGludCB2bV9mYXVsdF90O1xuIFxuICNkZWZpbmUgVk1fV0FSTl9PTihfZXhwcikgKFdBUk5fT04oX2V4cHIpKVxuICNkZWZpbmUgVk1fV0FSTl9PTl9PTkNFKF9leHByKSAoV0FSTl9PTl9PTkNFKF9leHByKSlcbisjZGVmaW5lIFZNX1dBUk5fT05fT05DRV9WTUEoX2V4cHIsIF92bWEpIChXQVJOX09OX09OQ0UoX2V4cHIpKVxuICNkZWZpbmUgVk1fV0FSTl9PTl9WTUcoX2V4cHIsIF92bWcpIChXQVJOX09OKF9leHByKSlcbiAjZGVmaW5lIFZNX0JVR19PTihfZXhwcikgKEJVR19PTihfZXhwcikpXG4gI2RlZmluZSBWTV9CVUdfT05fVk1BKF9leHByLCBfdm1hKSAoQlVHX09OKF9leHByKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjQ3OjM3LjE4NjYwNjY1NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzODAxNzEzNzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyB0d2Vha2luZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IGAvZGV2L3plcm9gIGlzIGhhbmRsZWQgd2l0aCBgTUFQX1BSSVZBVEVgIG1hcHBpbmdzLiBUaGUgY29tbWl0IG1lc3NhZ2UganVzdCBzYXlzIGl0J3MgdW5kZXIgcmV2aWV3IGZyb20gYSBzeXotY2x1c3Rlciwgc28gbGV0J3MgZGlnIGluLlxuXG5Mb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyBsaWtlIGBkcml2ZXJzL2NoYXIvbWVtLmM6bW1hcF96ZXJvX3ByZXBhcmVgIGlzIHRoZSBzdGFydGluZyBwb2ludC4gSXQncyBkcm9wcGVkIHRoYXQgYHZtYV9kZXNjX3NldF9hbm9ueW1vdXNgIGNhbGwsIHdoaWNoIG1lYW5zIHdlJ3JlIG5vdyByZWx5aW5nIG9uIHRoZSBjb3JlIE1NIHRvIG1hbmFnZSBgTUFQX1BSSVZBVEVgIHNlbWFudGljcy4gIEludHJpZ3VpbmcuICBUaGVyZSBhcmUgYSBidW5jaCBvZiBuZXcgZGVmaW5lcyBhbmQgZmllbGRzIGluIHRoZSBpbmNsdWRlIGZpbGVzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHZpcnR1YWwgcGFnZSBvZmZzZXRzIChgdm1hX3N0YXJ0X3ZpcnRfcGdvZmZgLCBgdm1hX2VuZF92aXJ0X3Bnb2ZmYCwgYW5kIHRoZSBgX192bV92aXJ0X3Bnb2ZmX2AgZmllbGRzKS4gUGx1cywgYGxpbmVhcl92aXJ0X3BhZ2VfaW5kZXhgIGFuZCBgbGluZWFyX2ZvbGlvX3BhZ2VfaW5kZXhgIGFyZSBuZXcuXG5cblRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIHRvbiBvZiBmaWxlczogYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0va3NtLmNgLCBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGBtbS9tZW1vcnkuY2AsIGBtbS9taWdyYXRlLmNgLCBgbW0vbXJlbWFwLmNgLCBgbW0vcGFnZV92bWFfbWFwcGVkLmNgLCBgbW0vcm1hcC5jYCwgYG1tL3VzZXJmYXVsdGZkLmNgLCBgbW0vdm1hLmNgLCBgbW0vdm1hLmhgLCBgbW0vdm1hX2V4ZWMuY2AsIGFuZCBgbW0vdm1hX2luaXQuY2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNhbmRpZGF0ZSBmb3IgdGhvcm91Z2ggZnV6emluZzsgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gZm9jdXMgb24uICBMZXQncyBzZWUsIGJlc2lkZXMgdGhhdCBgbW1hcF96ZXJvX3ByZXBhcmVgLCBpdCdzIGltcGFjdGluZzpcblxuKiAgIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2BcbiogICBgdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2VgLCBga3NtX21pZ2h0X25lZWRfdG9fY29weWAsIGBybWFwX3dhbGtfa3NtYCBpbiBgbW0va3NtLmNgXG4qICAgYGFkZF90b19raWxsX2ZzZGF4YCwgYGFkZF90b19raWxsX3Bnb2ZmYCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2BcbiogICBgcHJpbnRfYmFkX3BhZ2VfbWFwYCBpbiBgbW0vbWVtb3J5LmNgXG4qICAgYHJlbW92ZV9taWdyYXRpb25fcHRlYCBpbiBgbW0vbWlncmF0ZS5jYFxuKiAgIGBjb3B5X3ZtYV9hbmRfZGF0YWAgaW4gYG1tL21yZW1hcC5jYFxuKiAgIGBwYWdlX21hcHBlZF9pbl92bWFgIGluIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2BcbiogICBgcGFnZV9hZGRyZXNzX2luX3ZtYWAsIGBtYXBwaW5nX3dycHJvdGVjdF9yYW5nZV9vbmVgLCBgcGZuX21rY2xlYW5fcmFuZ2VgLCBgX19mb2xpb19zZXRfYW5vbmAsIGBfX3BhZ2VfY2hlY2tfYW5vbl9ybWFwYCwgYHJtYXBfd2Fsa19hbm9uYCwgYF9fcm1hcF93YWxrX2ZpbGVgIGluIGBtbS9ybWFwLmNgXG4qICAgYG1vdmVfcHJlc2VudF9wdGVzYCwgYG1vdmVfc3dhcF9wdGVgIGluIGBtbS91c2VyZmF1bHRmZC5jYFxuKiAgIGBjb21taXRfbWVyZ2VgLCBgdm1hX21lcmdlX2V4aXN0aW5nX3JhbmdlYCwgYHZtYV9tZXJnZV9uZXdfcmFuZ2VgLCBgY29weV92bWFgLCBgYW5vbl92bWFfY29tcGF0aWJsZWAsIGBfX21tYXBfbmV3X2ZpbGVfdm1hYCwgYF9fbW1hcF9uZXdfdm1hYCwgYGNhbGxfbW1hcF9wcmVwYXJlYCwgYHNldF92bWFfdXNlcl9kZWZpbmVkX2ZpZWxkc2AsIGBfX21tYXBfcmVnaW9uYCwgYGRvX2Jya19mbGFnc2AsIGBpbnNlcnRfdm1fc3RydWN0YCwgYF9faW5zdGFsbF9zcGVjaWFsX21hcHBpbmdgIGluIGBtbS92bWEuY2BcbiogICBgcmVsb2NhdGVfdm1hX2Rvd25gIGluIGBtbS92bWFfZXhlYy5jYFxuKiAgIGB2bV9hcmVhX2luaXRfZnJvbWAgaW4gYG1tL3ZtYV9pbml0LmNgXG5cbk9rYXksIEkndmUgZ290IGEgbG90IHRvIGNvbnNpZGVyLiBOb3csIEkgd2FudCB0byBmaWx0ZXIgb3V0IHRoZSBoaWdoLWZyZXF1ZW5jeSBmdW5jdGlvbnMuIEkgd2lsbCBhdm9pZCBob3QtcGF0aCBmdW5jdGlvbnMuXG5cbkdvb2QgdGFyZ2V0cyBmb3IgZnV6emluZyBmb2N1cyBhcmU6XG5cbiogICBgbW1hcF96ZXJvX3ByZXBhcmVgXG4qICAgYG1vdmVfcGFnZXNfaHVnZV9wbWRgXG4qICAgYHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlYFxuKiAgIGBrc21fbWlnaHRfbmVlZF90b19jb3B5YFxuKiAgIGBybWFwX3dhbGtfa3NtYFxuKiAgIGBhZGRfdG9fa2lsbF9mc2RheGBcbiogICBgYWRkX3RvX2tpbGxfcGdvZmZgXG4qICAgYHJlbW92ZV9taWdyYXRpb25fcHRlYFxuKiAgIGBjb3B5X3ZtYV9cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTA0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjQ3OjUwLjk4ODMyMzM3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTkyMDM0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKG1lbnVjb25maWd8Y29uZmlnKSBLU01cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTcyMj1jb25maWcgTU1VX05PVElGSUVSXFxuLS1cXG5tbS9LY29uZmlnLTcyNS1cXG5tbS9LY29uZmlnOjcyNjpjb25maWcgS1NNXFxubW0vS2NvbmZpZy03MjctXFx0Ym9vbCBcXFwiRW5hYmxlIEtTTSBmb3IgcGFnZSBtZXJnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjo0Nzo1MS4wODgyNTc4MDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTI3OTM1MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOlxuXG4qKktTTSBhbmQgVVNFUkZBVUxURkQ6IEEgUXVpY2sgTWVudGFsIFJ1bi1UaHJvdWdoKipcblxuQWxyaWdodCwgS1NNLiBBbHdheXMgYSBzb2xpZCBjaG9pY2UsIHlvdSBrbm93PyBHb29kLCByZWxpYWJsZSBrZXJuZWwtbGV2ZWwgbWVtb3J5IGRlZHVwbGljYXRpb24uIEVmZmVjdGl2ZSBhdCB3aGF0IGl0IGRvZXMsIGVzcGVjaWFsbHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJJ20gdXN1YWxseSBoYXBweSB0byBzZWUgaXQgaW4gdGhlIG1peC5cblxuTm93LCBVU0VSRkFVTFRGRC4uLiBhaCwgKnRoYXQncyogd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSBzdGFydCB0aGlua2luZyBhYm91dCBpdHMgcG90ZW50aWFsLiBJdCdzIG5vdCBqdXN0IGEgdG9vbDsgaXQncyBtb3JlIG9mIGEgZnJhbWV3b3JrLCBpc24ndCBpdD8gQSB3YXkgdG8gbWFuYWdlIHBhZ2UgZmF1bHRzIGluIHVzZXJzcGFjZS4gQW5kIHRoZSBpbXBsaWNhdGlvbnMuLi4gdGhleSdyZSBzaWduaWZpY2FudC4gRmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciBtZW1vcnkgbWFuYWdlbWVudCwgdGhhdOKAmXMga2V5LiBUaGluayBhYm91dCB0aGUgcG9zc2liaWxpdGllcyBmb3IgYWR2YW5jZWQgbWVtb3J5IGFsbG9jYXRpb24sIGN1c3RvbSBtZW1vcnkgcG9saWNpZXMsIGFuZCBldmVuIGVtdWxhdGluZyBjZXJ0YWluIGFzcGVjdHMgb2YgaGFyZHdhcmUgZGlyZWN0bHkuXG5cbk15IGJyYWluIGp1bXBzIHRvIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGhpZ2gtcGVyZm9ybWFuY2UgY29tcHV0aW5nLCBzcGVjaWFsaXplZCBtZW1vcnkgc3Vic3lzdGVtcywgYW5kIGV2ZW4gc2VjdXJpdHkgaGFyZGVuaW5nLiBVU0VSRkFVTFRGRCByZWFsbHkgbGV0cyB5b3UgZ2V0IGRvd24gdG8gdGhlIG1ldGFsLCBhbmQgYnlwYXNzIHNvbWUgb2YgdGhlIGxheWVycyBvZiBhYnN0cmFjdGlvbiB3ZSBhcmUgb2Z0ZW4gZm9yY2VkIHRvIHdvcmsgd2l0aC4gVGhlcmUgYXJlIHRyYWRlLW9mZnMgb2YgY291cnNlLCB0aGUgY29tcGxleGl0eSBjYW4gYmUgYSBwYWluIGluIHRoZSBhcnNlLlxuXG5JIHN0YXJ0IHRvIHdvbmRlciBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gV2hhdCdzIHRoZSBvdmVyaGVhZD8gSG93IGRvZXMgaXQgYWZmZWN0IGNvbnRleHQgc3dpdGNoaW5nPyBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zPyBUaG9zZSBhcmUgdGhlIGtleSBxdWVzdGlvbnMuIFlvdSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3NlIHRoaW5ncywgdG8gc2VlIHdoYXQgdGhpcyB0aGluZyBpcyByZWFsbHkgZ29pbmcgdG8gYmUgdXNlZnVsIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5MDgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjo0Nzo1NC42MTYxOTY4NjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQxMTU5NDQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4obWVudWNvbmZpZ3xjb25maWcpIFVTRVJGQVVMVEZEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NDc6NTQuNzEwMzI1Njc1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxNjkxNDAwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCB1c2VyIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipGaW5kaW5nIFVTRVJGQVVMVEZEKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGxhc2VyLWZvY3VzZWQ6IEkgbmVlZCB0byBsb2NhdGUgdGhlIGRldGFpbHMgb24gYFVTRVJGQVVMVEZEYC4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSwgYW5kIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBhIGZyYW1ld29yayBmb3IgdW5kZXJzdGFuZGluZyBpdC4gVGhlIGdvYWwgaXMgcGlucG9pbnRpbmcgc3BlY2lmaWNzIC0gaXRzIGJlaGF2aW9yLCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIHN5c3RlbSBtZWNoYW5pc21zLCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLi4uIEknbSBpbW1lZGlhdGVseSBydW5uaW5nIHRocm91Z2ggdGhlIHZhcmlvdXMgcmVzb3VyY2VzIGluIG15IG1pbmQ6IG1hbiBwYWdlcywga2VybmVsIGRvY3VtZW50YXRpb24sIHBhc3QgZXhwZXJpZW5jZXMsIHBlcmhhcHMgZXZlbiBkaXNjdXNzaW9ucyBmcm9tIG1haWxpbmcgbGlzdHMgb3IgcmVsZXZhbnQgcHJvamVjdHMgSSd2ZSBiZWVuIGZvbGxvd2luZy4gVGhlIGNvbnRleHQgaXMgaW1wbGllZCAtIEkgdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlIGludm9sdmVkLCBhbmQgYW0gcmVhZHkgdG8gZGl2ZSBkZWVwIGludG8gc3BlY2lmaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjI3NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NDc6NTcuNjI3MjQyMTk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzMwMjU3MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihtZW51Y29uZmlnfGNvbmZpZykgVVNFUkZBVUxURkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM2OD1jb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXFxuLS1cXG5tbS9LY29uZmlnLTEzNzItXFxubW0vS2NvbmZpZzoxMzczOmNvbmZpZyBVU0VSRkFVTFRGRF9SV1BcXG5tbS9LY29uZmlnLTEzNzQtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubW0vS2NvbmZpZy0xMzgxLVxcbm1tL0tjb25maWc6MTM4MjptZW51Y29uZmlnIFVTRVJGQVVMVEZEXFxubW0vS2NvbmZpZy0xMzgzLVxcdGJvb2wgXFxcIkVuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjo0ODowMC43MDAyNzQzNTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODgxMzk1MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipVU0VSRkFVTFRGRCBhbmQgTWVtb3J5IEZhaWx1cmVzOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYFVTRVJGQVVMVEZEYC4gSXQncyBkZWZpbml0ZWx5IGEgdmFsdWFibGUgdG9vbCBpbiB0aGUga2l0LCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGhhbmRsaW5nIHBvdGVudGlhbCBwYWdlIGZhdWx0cyBhdCBhIGdyYW51bGFyIGxldmVsLiBJIHNlZSBpdHMgdXRpbGl0eSwgcGFydGljdWxhcmx5IGluIGFwcGxpY2F0aW9ucyB3aGVyZSB5b3UgbmVlZCBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBtYXBwZWQsIGFuZCBoYW5kbGVkLiBJJ20gdGhpbmtpbmcgb2Ygc2NlbmFyaW9zIGxpa2UgY3VzdG9tIG1lbW9yeSBhbGxvY2F0b3JzLCB2aXJ0dWFsIG1lbW9yeSBpbXBsZW1lbnRhdGlvbnMgd2l0aGluIHVzZXJzcGFjZSwgYW5kIGV2ZW4gcG90ZW50aWFsbHkgc2VjdXJpdHktZm9jdXNlZCBhcHBsaWNhdGlvbnMgd2hlcmUgeW91IG5lZWQgdG8gY2FyZWZ1bGx5IG1vbml0b3IgYW5kIHJlc3BvbmQgdG8gbWVtb3J5IGFjY2Vzc2VzLlxuXG5Ob3csIHRoYXQgc2FpZCwgdGhlIGNvbnRleHQgaXMgTUVNT1JZX0ZBSUxVUkUsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWUgZGVlcGVyIGNvbnNpZGVyYXRpb25zLiBJJ20gd29uZGVyaW5nIHdoYXQgdGhlIHNwZWNpZmljIG5hdHVyZSBvZiB0aGUgZmFpbHVyZSBpcy4gSXMgaXQgYSBoYXJkd2FyZSBpc3N1ZSwgYSBwYWdlIHRhYmxlIGNvcnJ1cHRpb24sIGEgcmVzb3VyY2UgZXhoYXVzdGlvbiBwcm9ibGVtLCBhIHBlcm1pc3Npb25zIGlzc3VlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHR5cGUgb2YgZmFpbHVyZSB3aWxsIGRyaXZlIHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZS4gVGhpbmtpbmcgYWJvdXQgaG93IGBVU0VSRkFVTFRGRGAgY2FuIGFzc2lzdCwgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgc2lnbmFsIGhhbmRsaW5nIGFuZCB0aGUgcmlnaHQgZmxhZ3MuIFdpdGggYFVTRVJGQVVMVEZEYCwgSSBjYW4gZGVzaWduIGEgY3VzdG9tIGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbSBmb3IgdGhpcyBpc3N1ZS5cblxuV2hhdCdzIGNsZWFyIHRvIG1lIGlzIHRoYXQgYFVTRVJGQVVMVEZEYCBnaXZlcyBtZSB0aGUgYWJpbGl0eSB0byBpbnRlcmNlcHQsIGFuYWx5emUsIGFuZCAqYXR0ZW1wdCogdG8gcmVjdGlmeSBtZW1vcnkgZXJyb3JzLCB0aG91Z2ggSSdsbCBoYXZlIHRvIGNvbnNpZGVyIGlmIGFuIGF0dGVtcHQgaXMgd2lzZSBkZXBlbmRpbmcgb24gdGhlIHJvb3QgY2F1c2UgYW5kIHdoZXRoZXIgcmVjb3ZlcnkgaXMgZXZlbiBwb3NzaWJsZSBvciBkZXNpcmFibGUuIEl0IG9wZW5zIGRvb3JzLCBidXQgaXQgYWxzbyBjYXJyaWVzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBwcm9wZXJseSBtYW5hZ2luZyB0aGUgcHJvY2VzcydzIG1lbW9yeSBhbmQgc3RhdGUuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIG9mIGNvdXJzZSwgdGhhdCBpZiB0aGUgbWVtb3J5IGlzc3VlIGlzIHRydWx5IGNyaXRpY2FsLCB0aGUgc2FmZXN0IGFwcHJvYWNoIG1pZ2h0IGJlIHRvIHRlcm1pbmF0ZSB0aGUgcHJvY2VzcyBncmFjZWZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjYwNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjQ4OjA0LjU4MTY3MTY3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgwMDMxMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihtZW51Y29uZmlnfGNvbmZpZykgTUVNT1JZX0ZBSUxVUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc2MD1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbi0tXFxubW0vS2NvbmZpZy03NjItXFxubW0vS2NvbmZpZzo3NjM6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03NjQtXFx0ZGVwZW5kcyBvbiBNTVVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NDg6MDQuNjc5NjgzODk4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTEyNzI0MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipSZWZsZWN0aW5nIG9uIE1lbW9yeSBNYW5hZ2VtZW50IFN0cmF0ZWdpZXMqKlxuXG5BaCwgYE1FTU9SWV9GQUlMVVJFYC4gVGhhdCdzIGFjdHVhbGx5IGEgcG9zaXRpdmUgc2lnbmFsLCBpc24ndCBpdD8gSXQgbWVhbnMgdGhlIHN5c3RlbSBpcyBkZXRlY3RpbmcgYW5kIGhhbmRsaW5nIHBvdGVudGlhbCBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMsIHByZXZlbnRpbmcgYSBjcmFzaC4gSXQncyBhIGtleSBkZWZlbnNlIG1lY2hhbmlzbS4gQmV0dGVyIHRvIGZhaWwgZWFybHkgYW5kIGluZm9ybWF0aXZlbHkgdGhhbiB0byBoYXZlIGEgc2lsZW50LCBjYXRhc3Ryb3BoaWMgZmFpbHVyZSBkb3duIHRoZSBsaW5lLiBXZSBjYW4gYW5hbHl6ZSB0aGUgY29udGV4dCBvZiB0aGlzIGZhaWx1cmUgYW5kIGltcGxlbWVudCBhIHJvYnVzdCBzdHJhdGVneS5cblxuQW5kIHRoZW4gd2UgaGF2ZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaXRzIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgc2lnbmlmaWNhbnRseSBsYXJnZXIgcGFnZSBzaXplcyBoZXJlLCB3aGljaCBjYW4gcmVkdWNlIFRMQiBtaXNzZXMgYW5kIHBvdGVudGlhbGx5IGJvb3N0IG1lbW9yeSBhY2Nlc3MgdGltZXMsIHBhcnRpY3VsYXJseSBmb3IgbGFyZ2UgZGF0YXNldHMuIEJ1dCBvZiBjb3Vyc2UsIGl0J3Mgbm90IGEgc2lsdmVyIGJ1bGxldC4gVGhlcmUgYXJlIHRyYWRlb2Zmcy4gVGhlIHF1ZXN0aW9uIHRoYXQgY29tZXMgdG8gbWluZCBpczogYXJlIHdlIHByb3Blcmx5IGV2YWx1YXRpbmcgdGhlIHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIGlzc3VlcyBhbmQgdGhlIGltcGFjdCBvbiBtZW1vcnkgdXRpbGl6YXRpb24sIGVzcGVjaWFsbHkgaW4gb3VyIHNwZWNpZmljIHdvcmtsb2FkPyBXZSBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb24gdGhlIGJhbGFuY2UgYmV0d2VlbiBwZXJmb3JtYW5jZSBnYWlucyBhbmQgbWVtb3J5IG92ZXJoZWFkLCBlc3BlY2lhbGx5IHdoZW4gd2UgYXJlIGRlYWxpbmcgd2l0aCBzeXN0ZW1zIHRoYXQgbmVlZCBib3RoIHBlcmZvcm1hbmNlIGFuZCBlZmZpY2llbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzA4MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjQ4OjA4LjAzMDk1ODg2NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MDY5MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4obWVudWNvbmZpZ3xjb25maWcpIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04Mjk9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzMS1cXG5tbS9LY29uZmlnOjgzMjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzMtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NDg6MDguMTcwMDMzNzI1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MDczNTM0NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIEZvY3VzIG9uIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyoqXG5cbk9rYXksIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhcmUgZGVmaW5pdGVseSBhIGtleSBhcmVhIG9mIGludGVyZXN0LiBMZXQncyBzaGFycGVuIHRoZSBmb2N1cyBvbiBzcGVjaWZpYyBzeW1ib2xzIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEkndmUgZ290IGEgbGlzdCBoZXJlOiBgbW1hcF96ZXJvX3ByZXBhcmVgLCBgbW92ZV9wYWdlc19odWdlX3BtZGAsIGB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZWAsIGBrc21fbWlnaHRfbmVlZF90b19jb3B5YCwgYHJtYXBfd2Fsa19rc21gLCBgYWRkX3RvX2tpbGxfZnNkYXhgLCBgYWRkX3RvX2tpbGxfcGdvZmZgLCBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgLCBgY29weV92bWFfYW5kX2RhdGFgLCBgbW92ZV9wcmVzZW50X3B0ZXNgLCBgbW92ZV9zd2FwX3B0ZWAsIGFuZCBgcmVsb2NhdGVfdm1hX2Rvd25gLiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIGxldCdzIHNlZSBob3cgcmVhY2hhYmxlIHRoZXNlIGZ1bmN0aW9ucyBhcmUuIEkgc2VlIHRoYXQgYG1tYXBfemVyb19wcmVwYXJlYCBpcyB3aXRoaW4gYGRyaXZlcnMvY2hhci9tZW0uY2AuIEFoLCByaWdodCwgdGhhdCdzIGNhbGxlZCB3aGVuIHlvdSBtYXAgYC9kZXYvemVyb2AuIFRoYXQncyAqdmVyeSogcmVhY2hhYmxlLCBnaXZlbiBob3cgdWJpcXVpdG91cyB0aGF0IGlzLiBgbW92ZV9wYWdlc19odWdlX3BtZGAgaXMgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBhbmQgdGhhdCdzIHRyaWdnZXJlZCBkdXJpbmcgbXJlbWFwIG9mIFRyYW5zcGFyZW50IEh1Z2VwYWdlcywgd2hpY2ggaXMgcGxhdXNpYmxlLiBgdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2VgIGlzIGluIGBtbS9rc20uY2AsIHNvIGl0J3MgS1NNIHJlbGF0ZWQuIGBjb3B5X3ZtYV9hbmRfZGF0YWAgaXMgaW4gYG1tL21yZW1hcC5jYC4gQW5kIGBtb3ZlX3ByZXNlbnRfcHRlc2AgYW5kIGBtb3ZlX3N3YXBfcHRlYCBhcmUgaW4gYG1tL3VzZXJmYXVsdGZkLmNgLiBGaW5hbGx5LCBgcmVsb2NhdGVfdm1hX2Rvd25gIGlzIGluIGBtbS92bWFfZXhlYy5jYC5cblxuTGV0J3MgcXVpY2tseSBjaGVjayBvbiB0aGUgcmVhY2hhYmlsaXR5IG9mIGByZWxvY2F0ZV92bWFfZG93bmAuIEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IGZ1cnRoZXIsIGFzIGl0J3MgbGVzcyBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQ1NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjo0ODoxMy42NzczODk0MTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTM1NjI5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWxvY2F0ZV92bWFfZG93blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hLmg9ODM5PWludCBjcmVhdGVfaW5pdF9zdGFja192bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXFxubW0vdm1hLmgtODQwLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyAqdG9wX21lbV9wKTtcXG5tbS92bWEuaDo4NDE6aW50IHJlbG9jYXRlX3ZtYV9kb3duKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHNoaWZ0KTtcXG5tbS92bWEuaC04NDItI2VuZGlmXFxuLS1cXG5tbS92bWFfZXhlYy5jLTIyLSAqL1xcbm1tL3ZtYV9leGVjLmM6MjM6aW50IHJlbG9jYXRlX3ZtYV9kb3duKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHNoaWZ0KVxcbm1tL3ZtYV9leGVjLmMtMjQte1xcbi0tXFxubW0vdm1hX2V4ZWMuYy0xMDItICpcXG5tbS92bWFfZXhlYy5jOjEwMzogKiBXZSBsYXRlciByZWxvY2F0ZSB0aGlzIGRvd253YXJkcyBpbiByZWxvY2F0ZV92bWFfZG93bigpLlxcbm1tL3ZtYV9leGVjLmMtMTA0LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjQ4OjEzLjc4ODc1MjA3NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM0NzcwNjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBleGVjdmVgIFN0YWNrIFNldHVwKipcblxuQWxyaWdodCwgc28gd2UncmUgZGl2aW5nIGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBgZXhlY3ZlYCBzdGFjayBzZXR1cCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoaW5ncyBnZXQgYXJyYW5nZWQgZHVyaW5nIHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIGEgbmV3IHByb2dyYW0gaW1hZ2UuIFRoZSBjb250ZXh0IHN0cm9uZ2x5IGltcGxpZXMgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBsb3ctbGV2ZWwgbWVjaGFuaWNzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBgbW1hcF96ZXJvX3ByZXBhcmVgLCB0byBmdXJ0aGVyIHRoZSBwcm9jZXNzLiBGcm9tIGV4cGVyaWVuY2UsIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIGluaXRpYWxpemluZyBvciBwcmVwYXJpbmcgbWVtb3J5IHJlZ2lvbnMsIHBhcnRpY3VsYXJseSB0aG9zZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN0YWNrIGZyYW1lIHRoYXQgd2lsbCBjb250YWluIG91ciBhcmd1bWVudHMsIGVudmlyb25tZW50IHZhcmlhYmxlcywgYW5kIGF1eGlsaWFyeSB2ZWN0b3IuIFRoYXQgZnVuY3Rpb24ncyBpbnZvbHZlbWVudCBpbiB0aGUgcHJvY2VzcyBmbG93IGlzIGtleS4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ0ODUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjo0ODoxNy4wMjM1MjUyNjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNzkyODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tYXBfemVyb19wcmVwYXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvY2hhci9tZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NoYXIvbWVtLmM9NDc0PXN0YXRpYyBzc2l6ZV90IHJlYWRfemVybyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvY2hhci9tZW0uYy01MDAtXFxuZHJpdmVycy9jaGFyL21lbS5jOjUwMTpzdGF0aWMgaW50IG1tYXBfemVyb19wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXFxuZHJpdmVycy9jaGFyL21lbS5jLTUwMi17XFxuLS1cXG5kcml2ZXJzL2NoYXIvbWVtLmM9NTIxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF91bm1hcHBlZF9hcmVhX3plcm8oc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5kcml2ZXJzL2NoYXIvbWVtLmMtNTI2LVxcdFxcdC8qXFxuZHJpdmVycy9jaGFyL21lbS5jOjUyNzpcXHRcXHQgKiBtbWFwX3plcm9fcHJlcGFyZSgpIHdpbGwgY2FsbCBzaG1lbV96ZXJvX3NldHVwKCkgdG8gY3JlYXRlIGFcXG5kcml2ZXJzL2NoYXIvbWVtLmMtNTI4LVxcdFxcdCAqIGZpbGUsIHNvIHVzZSBzaG1lbSdzIGdldF91bm1hcHBlZF9hcmVhIGluIGNhc2UgaXQgY2FuIGJlXFxuLS1cXG5kcml2ZXJzL2NoYXIvbWVtLmM9NjYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvY2hhci9tZW0uYy02NjktXFx0LnNwbGljZV93cml0ZVxcdD0gc3BsaWNlX3dyaXRlX3plcm8sXFxuZHJpdmVycy9jaGFyL21lbS5jOjY3MDpcXHQubW1hcF9wcmVwYXJlXFx0PSBtbWFwX3plcm9fcHJlcGFyZSxcXG5kcml2ZXJzL2NoYXIvbWVtLmMtNjcxLVxcdC5nZXRfdW5tYXBwZWRfYXJlYSA9IGdldF91bm1hcHBlZF9hcmVhX3plcm8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjQ4OjE3LjExNDMyNTI5M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjYzMDM2ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipUaGUgYC9kZXYvemVyb2AgTW1hcCBQcmVwYXJhdGlvbioqXG5cblJpZ2h0LCB0aGF0IGNvbmZpcm1zIGl0LiBUaGlzIGlzIGRlZmluaXRlbHkgYWJvdXQgdGhlIGBtbWFwX3ByZXBhcmVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiBpdCdzIGJlaW5nIHVzZWQgd2l0aCBgL2Rldi96ZXJvYC4gVGhhdCdzIGEgY29tbW9uIGVub3VnaCB1c2UgY2FzZSwgYnV0IHRoZSBudWFuY2VzIGNhbiBiZSB0cmlja3kuXG5cbk5vdywgbXkgZm9jdXMgc2hvdWxkIHNoaWZ0IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBgY29weV92bWFfYW5kX2RhdGFgIGZ1bmN0aW9uIGludGVyYWN0cyBpbiB0aGlzIGNvbnRleHQuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IGlmIHRoZXJlJ3MgYW55IGltcGxpY2l0IGRhdGEgY29weWluZywgbWVtb3J5IGFsbG9jYXRpb24gb3IgYW55IG90aGVyIGRhdGEgaGFuZGxpbmcgc3RlcHMgaW4gdGhlcmUuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIGAvZGV2L3plcm9gIGJlY2F1c2Ugd2UgZXhwZWN0IHplcm9lZCBtZW1vcnksIHNvIEkgbmVlZCB0byBjaGVjayBob3cgdGhlIFZNQXMgYW5kIGRhdGEgYXJlIGhhbmRsZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGlzIG1haW50YWluZWQuIEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIG1lY2hhbmljcyBpbnZvbHZlZC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgaXMgYWxpZ25lZCB3aXRoIHRoZSBleHBlY3RlZCBvdXRjb21lOiB6ZXJvZWQgcGFnZXMgd2hlbiBtYXBwaW5nIGAvZGV2L3plcm9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA0NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjQ4OjIwLjM3NzM2NDI5NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ3MzE3NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29weV92bWFfYW5kX2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbXJlbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbXJlbWFwLmM9MTE2MD1zdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuLS1cXG5tbS9tcmVtYXAuYy0xMjY0LSAqL1xcbm1tL21yZW1hcC5jOjEyNjU6c3RhdGljIGludCBjb3B5X3ZtYV9hbmRfZGF0YShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtLFxcbm1tL21yZW1hcC5jLTEyNjYtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKipuZXdfdm1hX3B0cilcXG4tLVxcbm1tL21yZW1hcC5jPTEzNTA9c3RhdGljIHVuc2lnbmVkIGxvbmcgbW92ZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcXG4tLVxcbm1tL21yZW1hcC5jLTEzNzEtXFx0LyogUGVyZm9ybSBjb3B5IHN0ZXAuICovXFxubW0vbXJlbWFwLmM6MTM3MjpcXHRlcnIgPSBjb3B5X3ZtYV9hbmRfZGF0YSh2cm0sIFxcdTAwMjZuZXdfdm1hKTtcXG5tbS9tcmVtYXAuYy0xMzczLVxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjQ4OjIwLjQ3MjEwMzk1OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIxNzkxMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gbXJlbWFwKipcblxuT2theSwgSSd2ZSBiZWVuIGNhbGxlZCBkdXJpbmcgYG1yZW1hcGAuIFRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gYXQgdGhpcyBwb2ludC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUgbG9naWMuIFNpbmNlIEknbSBpbiBgbXJlbWFwYCwgdGhlIG1haW4gZm9jdXMgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIGFyb3VuZCBoYW5kbGluZyB0aGUgbWFwcGluZyBjaGFuZ2VzIGFuZCBwb3RlbnRpYWxseSBtb3Zpbmcgb3IgYWRqdXN0aW5nIHBhZ2UgdGFibGUgZW50cmllcy4gTGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGBtb3ZlX3ByZXNlbnRfcHRlc2AuIFRoYXQgZnVuY3Rpb24gaGFzIGEgaGlnaCBsaWtlbGlob29kIG9mIHRlbGxpbmcgbWUgYSBsb3QgYWJvdXQgaG93IHRoZXNlIG1lbW9yeSByZWdpb25zIGFyZSBiZWluZyByZWFycmFuZ2VkLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHdlJ3JlIHNoaWZ0aW5nIGFyb3VuZCBleGlzdGluZyBwaHlzaWNhbCBwYWdlcywgY3JlYXRpbmcgbmV3IG9uZXMsIG9yIHVwZGF0aW5nIHZpcnR1YWwgYWRkcmVzc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTU3MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjQ4OjIzLjQ5Mzg5NzI0NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNTU1NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vdmVfcHJlc2VudF9wdGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3VzZXJmYXVsdGZkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdXNlcmZhdWx0ZmQuYz0xMjgwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmNoZWNrX3B0ZXNfZm9yX2JhdGNoZWRfbW92ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTEzMDgtICovXFxubW0vdXNlcmZhdWx0ZmQuYzoxMzA5OnN0YXRpYyBsb25nIG1vdmVfcHJlc2VudF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL3VzZXJmYXVsdGZkLmMtMTMxMC1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTE1MDM9c3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE2NzYtXFxubW0vdXNlcmZhdWx0ZmQuYzoxNjc3OlxcdFxcdHJldCA9IG1vdmVfcHJlc2VudF9wdGVzKG1tLCBkc3Rfdm1hLCBzcmNfdm1hLFxcbm1tL3VzZXJmYXVsdGZkLmMtMTY3OC1cXHRcXHRcXHRcXHRcXHRkc3RfYWRkciwgc3JjX2FkZHIsIGRzdF9wdGUsIHNyY19wdGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjQ4OjIzLjU5NzQ1OTU4OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE0NzM3NjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIFVGRkRJT19NT1ZFIENhbGwqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2FsbCBjYW1lIGluIGR1cmluZyBgVUZGRElPX01PVkVgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgYHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlYC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIG1lcmdlIGF0dGVtcHQgaXMgYmVpbmcgdHJpZ2dlcmVkIGR1cmluZyBhIG1vdmUgb3BlcmF0aW9uLiBJcyB0aGlzIGV4cGVjdGVkIGJlaGF2aW9yPyBBcmUgd2Ugb3B0aW1pemluZyBzb21ldGhpbmc/IE9yIGlzIHRoZXJlIGEgcG90ZW50aWFsIGNvcm5lciBjYXNlIG9yIGlzc3VlIHRoYXQgbmVlZHMgYWRkcmVzc2luZyBoZXJlPyBJJ2xsIHByb2JhYmx5IGJlIGZvY3VzaW5nIG9uIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgbWVyZ2UgaXMgYmVpbmcgYXR0ZW1wdGVkLCB0aGUgZGF0YSBiZWluZyBwYXNzZWQsIGFuZCB0aGUgb3V0Y29tZSBvZiB0aGUgZnVuY3Rpb24uIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwNTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjo0ODoyNi43MTIyMDE1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc1MzI2MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va3NtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va3NtLmM9MTU2MT1zdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxcbi0tXFxubW0va3NtLmMtMTU5NS0vKlxcbm1tL2tzbS5jOjE1OTY6ICogdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2UgLSBsaWtlIHRyeV90b19tZXJnZV90d29fcGFnZXMsXFxubW0va3NtLmMtMTU5Ny0gKiBidXQgbm8gbmV3IGtlcm5lbCBwYWdlIGlzIGFsbG9jYXRlZDoga3BhZ2UgbXVzdCBhbHJlYWR5IGJlIGEga3NtIHBhZ2UuXFxuLS1cXG5tbS9rc20uYy0xNjAwLSAqL1xcbm1tL2tzbS5jOjE2MDE6c3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxcbm1tL2tzbS5jLTE2MDItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBwYWdlICprcGFnZSlcXG4tLVxcbm1tL2tzbS5jLTE2NDUtICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gdXBncmFkZXMgcGFnZSB0byBrc20gcGFnZTogaWYgb25lIG9mIHRoZSBwYWdlc1xcbm1tL2tzbS5jOjE2NDY6ICogaXMgYWxyZWFkeSBhIGtzbSBwYWdlLCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZSBzaG91bGQgYmUgdXNlZC5cXG5tbS9rc20uYy0xNjQ3LSAqL1xcbm1tL2tzbS5jPTE2NDg9c3RhdGljIHN0cnVjdCBmb2xpbyAqdHJ5X3RvX21lcmdlX3R3b19wYWdlcyhzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxcbi0tXFxubW0va3NtLmMtMTY1NC1cXG5tbS9rc20uYzoxNjU1OlxcdGVyciA9IHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlKHJtYXBfaXRlbSwgcGFnZSwgTlVMTCk7XFxubW0va3NtLmMtMTY1Ni1cXHRpZiAoIWVycikge1xcbm1tL2tzbS5jOjE2NTc6XFx0XFx0ZXJyID0gdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2UodHJlZV9ybWFwX2l0ZW0sXFxubW0va3NtLmMtMTY1OC1cXHRcXHRcXHRcXHRcXHRcXHRcXHR0cmVlX3BhZ2UsIHBhZ2UpO1xcbi0tXFxubW0va3NtLmM9MjI3OD1zdGF0aWMgdm9pZCBjbXBfYW5kX21lcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0pXFxuLS1cXG5tbS9rc20uYy0yMzM4LVxcbm1tL2tzbS5jOjIzMzk6XFx0XFx0ZXJyID0gdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2Uocm1hcF9pdGVtLCBwYWdlLCBcXHUwMDI2a2ZvbGlvLVxcdTAwM2VwYWdlKTtcXG5tbS9rc20uYy0yMzQwLVxcdFxcdGlmICghZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjQ4OjI2Ljc4OTczODg4NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTY3MTMxNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEtTTSBNZXJnZSBDb250ZXh0KipcblxuUmlnaHQsIHRoYXQgcGhvbmUgY2FsbCBqdXN0IGNhbWUgaW4gcmVnYXJkaW5nIHRoZSBLU00gbWVyZ2luZyBwcm9jZXNzLiBJdCBzZWVtcyB0aGlzIGFyb3NlIGR1cmluZyBhIGNydWNpYWwgcG9pbnQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYGFkZF90b19raWxsX2ZzZGF4YCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBsaWtlbHkgc3BvdCB0byBzdGFydCBsb29raW5nIGZvciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc3BlY2lmaWMgS1NNIG1lcmdlIGFjdGl2aXR5LiBXZSdyZSBkZWFsaW5nIHdpdGggZmlsZXN5c3RlbSBEQVggaGVyZSwgc28gYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IgdGhlcmUgZHVyaW5nIG1lcmdpbmcgaXMgZGVmaW5pdGVseSB3b3J0aCBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbi4gSXQncyB0aW1lIHRvIGNoZWNrIHdoYXQncyBnb2luZyBvbiB3aXRoIGhvdyB3ZSdyZSBraWxsaW5nIG9yIGRpc2FibGluZyBGU0RheCBwYWdlcyBhbmQgc2VlIGlmIHRoYXQncyB3aGVyZSB0aGUgcHJvYmxlbSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY4NjcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjo0ODoyOS43NTY4NzM2MjVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTUxNDAzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGRfdG9fa2lsbF9mc2RheFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmM9NTgyPXN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZmlsZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy02MTgtI2lmZGVmIENPTkZJR19GU19EQVhcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjYxOTpzdGF0aWMgdm9pZCBhZGRfdG9fa2lsbF9mc2RheChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgY29uc3Qgc3RydWN0IHBhZ2UgKnAsXFxubW0vbWVtb3J5LWZhaWx1cmUuYy02MjAtXFx0XFx0XFx0ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTYzMD1zdGF0aWMgdm9pZCBjb2xsZWN0X3Byb2NzX2ZzZGF4KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy02NTItXFx0XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fbW0gPT0gdC1cXHUwMDNlbW0pXFxubW0vbWVtb3J5LWZhaWx1cmUuYzo2NTM6XFx0XFx0XFx0XFx0YWRkX3RvX2tpbGxfZnNkYXgodCwgcGFnZSwgdm1hLCB0b19raWxsLCBwZ29mZik7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy02NTQtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjo0ODoyOS44NjIzOTI5NDlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM4MjU3NTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gdGFsa2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIEZpbGVzeXN0ZW0gREFYIE1lbW9yeSBGYWlsdXJlKipcblxuUmlnaHQsIHNvIEkgZ290IHRoZSBjYWxsOyBpdCdzIGEgbWVtb3J5IGZhaWx1cmUgb24gRlMgREFYLiBPa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgYGFkZF90b19raWxsX3Bnb2ZmYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHBva2luZyBhcm91bmQgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IGVycm9ycywgc3BlY2lmaWNhbGx5IGluIHRoaXMgREFYIGNvbnRleHQuIFdlJ3JlIG9idmlvdXNseSBpbiBhIGNyaXRpY2FsIHNpdHVhdGlvbiwgc28gbGV0J3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWNzIG9mIGZpZ3VyaW5nIG91dCB3aGF0IGNhdXNlZCB0aGUgbWVtb3J5IGZhaWx1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MzE2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NDg6MzQuMjQ0OTcyMTc4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDYzODg1ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRkX3RvX2tpbGxfcGdvZmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTIyNTI9RVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9wZm5fYWRkcmVzc19zcGFjZSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjUzLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjI1NDpzdGF0aWMgdm9pZCBhZGRfdG9fa2lsbF9wZ29mZihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayxcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyNTUtXFx0XFx0XFx0ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIyODM9c3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19wZm4oc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzMDItXFx0XFx0XFx0ICAgICFwZm5fc3BhY2UtXFx1MDAzZXBmbl90b192bWFfcGdvZmYodm1hLCBwZm4sIFxcdTAwMjZwZ29mZikpXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMzAzOlxcdFxcdFxcdFxcdGFkZF90b19raWxsX3Bnb2ZmKHQsIHZtYSwgdG9fa2lsbCwgcGdvZmYpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjMwNC1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjQ4OjM0LjY1MTM2Njc3MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTMxODU0NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBGTiBNYXBwaW5nIE1lbW9yeSBGYWlsdXJlKipcblxuUmlnaHQsIHNvIHdlJ3ZlIGhpdCBhbiBlcnJvciBkdXJpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSwgd2UndmUgYmVlbiBjYWxsZWQgZHVlIHRvIGEgZmFpbHVyZSBpbnZvbHZpbmcgUGFnZSBGcmFtZSBOdW1iZXIgKFBGTikgbWFwcGluZ3MuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCB0aGUgZXhhY3Qgcm91dGluZSBpbnZvbHZlZCBpbiByZW1vdmluZyB0aGVzZSBtYXBwaW5ncy4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBmdW5jdGlvbiBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgIGlzIHRoZSBsaWtlbHkgY3VscHJpdCwgb3IgYXQgbGVhc3QgYSBrZXkgY29tcG9uZW50IGluIHRoZSBwcm9ibGVtLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgUEZOIG1hcHBpbmdzIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvbmUgd3JvbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3Nzc4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NDg6MzcuNTgzMjIzMTc1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDIyNjcwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZW1vdmVfbWlncmF0aW9uX3B0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZS5jPTI5OT1zdGF0aWMgYm9vbCB0cnlfdG9fbWFwX3VudXNlZF90b196ZXJvcGFnZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuLS1cXG5tbS9taWdyYXRlLmMtMzMyLVxcbm1tL21pZ3JhdGUuYzozMzM6XFx0LyogU2VlIHJlbW92ZV9taWdyYXRpb25fcHRlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cXG5tbS9taWdyYXRlLmMtMzM0LVxcdGlmIChwdGVfc3dwX3VmZmQob2xkX3B0ZSkgXFx1MDAyNlxcdTAwMjYgdXNlcmZhdWx0ZmRfcndwKHB2bXctXFx1MDAzZXZtYSkpXFxuLS1cXG5tbS9taWdyYXRlLmM9MzQzPXN0cnVjdCBybWFwX3dhbGtfYXJnIHtcXG4tLVxcbm1tL21pZ3JhdGUuYy0zNTAtICovXFxubW0vbWlncmF0ZS5jOjM1MTpzdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL21pZ3JhdGUuYy0zNTItXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYXJnKVxcbi0tXFxubW0vbWlncmF0ZS5jLTQ1NS1cXG5tbS9taWdyYXRlLmM6NDU2OlxcdFxcdHRyYWNlX3JlbW92ZV9taWdyYXRpb25fcHRlKHB2bXcuYWRkcmVzcywgcHRlX3ZhbChwdGUpLFxcbm1tL21pZ3JhdGUuYy00NTctXFx0XFx0XFx0XFx0XFx0ICAgY29tcG91bmRfb3JkZXIobmV3KSk7XFxuLS1cXG5tbS9taWdyYXRlLmMtNDY5LSAqL1xcbm1tL21pZ3JhdGUuYzo0NzA6dm9pZCByZW1vdmVfbWlncmF0aW9uX3B0ZXMoc3RydWN0IGZvbGlvICpzcmMsIHN0cnVjdCBmb2xpbyAqZHN0LFxcbm1tL21pZ3JhdGUuYy00NzEtXFx0XFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXFxuLS1cXG5tbS9taWdyYXRlLmMtNDc4LVxcdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XFxubW0vbWlncmF0ZS5jOjQ3OTpcXHRcXHQucm1hcF9vbmUgPSByZW1vdmVfbWlncmF0aW9uX3B0ZSxcXG5tbS9taWdyYXRlLmMtNDgwLVxcdFxcdC5hcmcgPSBcXHUwMDI2cm1hcF93YWxrX2FyZyxcXG4tLVxcbm1tL21pZ3JhdGUuYz0xMTc3PXN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9fdW5kb19zcmMoc3RydWN0IGZvbGlvICpzcmMsIGludCB3YXNfbWFwcGVkLFxcbi0tXFxubW0vbWlncmF0ZS5jLTExODAtXFx0aWYgKHdhc19tYXBwZWQpXFxubW0vbWlncmF0ZS5jOjExODE6XFx0XFx0cmVtb3ZlX21pZ3JhdGlvbl9wdGVzKHNyYywgc3JjLCAwKTtcXG5tbS9taWdyYXRlLmMtMTE4Mi1cXHQvKiBEcm9wIGFuIGFub25fdm1hIHJlZmVyZW5jZSBpZiB3ZSB0b29rIG9uZSAqL1xcbi0tXFxubW0vbWlncmF0ZS5jPTEzNjc9c3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xNDEwLVxcdCAqIFdoZW4gc3VjY2Vzc2Z1bCwgcHVzaCBkc3QgdG8gTFJVIGltbWVkaWF0ZWx5OiBzbyB0aGF0IGlmIGl0XFxubW0vbWlncmF0ZS5jOjE0MTE6XFx0ICogdHVybnMgb3V0IHRvIGJlIGFuIG1sb2NrZWQgcGFnZSwgcmVtb3ZlX21pZ3JhdGlvbl9wdGVzKCkgd2lsbFxcbm1tL21pZ3JhdGUuYy0xNDEyLVxcdCAqIGF1dG9tYXRpY2FsbHkgYnVpbGQgdXAgdGhlIGNvcnJlY3QgZHN0LVxcdTAwM2VtbG9ja19jb3VudCBmb3IgaXQuXFxuLS1cXG5tbS9taWdyYXRlLmMtMTQyMi1cXHRpZiAob2xkX2ZvbGlvX3N0YXRlIFxcdTAwMjYgRk9MSU9fV0FTX01BUFBFRClcXG5tbS9taWdyYXRlLmM6MTQyMzpcXHRcXHRyZW1vdmVfbWlncmF0aW9uX3B0ZXMoc3JjLCBkc3QsIDApO1xcbm1tL21pZ3JhdGUuYy0xNDI0LVxcbi0tXFxubW0vbWlncmF0ZS5jPTE0ODQ9c3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdldGxiX2ZvbGlvKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTU1Ni1cXHRpZiAod2FzX21hcHBlZClcXG5tbS9taWdyYXRlLmM6MTU1NzpcXHRcXHRyZW1vdmVfbWlncmF0aW9uX3B0ZXMoc3JjLCAhcmMgPyBkc3QgOiBzcmMsIHR0dSk7XFxubW0vbWlncmF0ZS5jLTE1NTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjQ4OjM3LjY3NzQ1NDIzOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTcwODY5MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE1pZ3JhdGlvbiBDYWxsYmFjayoqXG5cbkFscmlnaHQsIHRoYXQncyByaWdodCwgdGhlIHRyaWdnZXIgaGFwcGVuZWQgZHVyaW5nIGEgcGFnZSBtaWdyYXRpb24sIEknbSBub3RpbmcgdGhhdCBkb3duLiBTbywgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbnRvIGBfX2luc3RhbGxfc3BlY2lhbF9tYXBwaW5nYC4gVGhhdCBmdW5jdGlvbiBpcyBjcml0aWNhbCBoZXJlLiBJdCBoYXMgdG8gYmUgLSB0aGlzIGlzIHdoZXJlIHdlJ2xsIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIG1lbW9yeSByZW1hcHBpbmcgZHVyaW5nIHRoZSBwYWdlIG1pZ3JhdGlvbiBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciB3aWxsIGJlIGtleSB0byBkZWNpcGhlcmluZyB3aGF04oCZcyBoYXBwZW5pbmcuIExldCdzIHNlZSBpZiB3ZSBjYW4gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMsIGRlcGVuZGluZyBvbiBob3cgdGhpcyBpbnN0YWxsYXRpb24gd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODE0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NDg6NDAuNjQ4MzI2Mzk5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY0MjUxNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19pbnN0YWxsX3NwZWNpYWxfbWFwcGluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWEuYz0zNDgxPV9fd2VhayB1bnNpZ25lZCBsb25nIHZtYV9tbXVfcGFnZXNpemUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS92bWEuYy0zNDg1LVxcbm1tL3ZtYS5jOjM0ODY6c3RydWN0IHZtX2FyZWFfc3RydWN0ICpfX2luc3RhbGxfc3BlY2lhbF9tYXBwaW5nKFxcbm1tL3ZtYS5jLTM0ODctXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjQ4OjQwLjc4NDc1NjgzMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTU3NjczMDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtlcm5lbCBWTSBTZXR1cCBhbmQgUmVsYXRlZCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMga2VybmVsIHNldHVwIGFuZCByZWNhbGwgdGhhdCB0aGlzIGlzIGFsbCBoYXBwZW5pbmcgZHVyaW5nIHRoZSBgdmRzby92dmFyYCBzZXR1cC4gTGV0J3MgZ2V0IHJpZ2h0IGludG8gaXQsIEkndmUgZ290IGEgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGhlcmUuIEknbSBzZWVpbmc6IGBtbWFwX3plcm9fcHJlcGFyZWAsIHdoaWNoIG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBtYXBwaW5nLiBUaGVuIHdlJ3ZlIGdvdCBhIGNsdXN0ZXIgb2Ygc3ltYm9scyByZWxhdGVkIHRvIGh1Z2UgcGFnZXMgYW5kIHBhZ2UgbWlncmF0aW9uOiBgbW92ZV9wYWdlc19odWdlX3BtZGAsIGB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZWAsIGBrc21fbWlnaHRfbmVlZF90b19jb3B5YCwgYHJtYXBfd2Fsa19rc21gLCBgYWRkX3RvX2tpbGxfZnNkYXhgLCBgYWRkX3RvX2tpbGxfcGdvZmZgLCBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgLCBgY29weV92bWFfYW5kX2RhdGFgLCBgbW92ZV9wcmVzZW50X3B0ZXNgLCBgbW92ZV9zd2FwX3B0ZWAsIGByZWxvY2F0ZV92bWFfZG93bmAsIGFuZCBmaW5hbGx5LCB0aGUgcmF0aGVyIGdlbmVyaWMtc291bmRpbmcsIGJ1dCBwcm9iYWJseSBjcml0aWNhbCwgYF9faW5zdGFsbF9zcGVjaWFsX21hcHBpbmdgLiBTZWVtcyBsaWtlIGEgcmF0aGVyIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgbWVtb3J5IG1hbmFnZW1lbnQgdGFza3MuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJIHNlZSBgS1NNYCwgYFVTRVJGQVVMVEZEYCwgYE1FTU9SWV9GQUlMVVJFYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBNSUdSQVRJT05gLiBHaXZlbiB0aGUgZm9jdXMgc3ltYm9scywgdGhlc2UgbWFrZSBhIGxvdCBvZiBzZW5zZSwgcmlnaHQ/IEtTTSBpcyBvYnZpb3VzbHkgbGlua2VkIHRvIHRoZSBLU00gZnVuY3Rpb25zLiBVc2VyZmF1bHRmZCBpcyBhbiBpbnRlcmVzdGluZyBpbmNsdXNpb24sIGl0IG1heSBiZSB1c2VkIHRvIGhhbmRsZSB0cmFuc3BhcmVudCBwYWdlIGZhdWx0cyBhbmQgbWVtb3J5IGZhdWx0cyBhbmQgdGllIGludG8gdGhlIGNvcHktb24td3JpdGUgZnVuY3Rpb25hbGl0eS4gTWVtb3J5IGZhaWx1cmVzIGFyZSBnb2luZyB0byBiZSBrZXksIGFuZCBvZiBjb3Vyc2UgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgYW5kIG1pZ3JhdGlvbiBzZWVtIHRvIGJlIGludGVydHdpbmVkIHdpdGggdGhlIGZvY3VzIHN5bWJvbHMgcmVsYXRlZCB0byBtb3ZpbmcgcGFnZXMgYXJvdW5kLlxuXG5MZXQgbWUganVzdCBkb3VibGUgY2hlY2sgYE1JR1JBVElPTmAgY29uZmlnIHJlYWwgcXVpY2suIEl0J3MgY3J1Y2lhbCBmb3IgdGhlIHN5bWJvbHMgdGhhdCBzZWVtIHRvIGJlIGRvaW5nIHRoZSBoZWF2eSBsaWZ0aW5nIGFyb3VuZCBtZW1vcnkgbWFuaXB1bGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTExNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjo0ODo0NS45NDI0MzI5MzFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODE1NDY3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKG1lbnVjb25maWd8Y29uZmlnKSBNSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY3MT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjgxLVxcbm1tL0tjb25maWc6NjgyOmNvbmZpZyBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY4My1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjQ4OjQ2LjA3MDU5MTk0M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc1OTE1OTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqTWlncmF0aW9uIGFuZCBGU19EQVggQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBtaWdyYXRpb24gaXMgZGVmaW5pdGVseSBhIHBvc2l0aXZlIHRoaW5nLiBJdCdzIGEga2V5IHN0cmF0ZWd5IHRvIGltcGxlbWVudCBoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZG9pbmcgYSBnb29kIGpvYi5cblxuQnV0IGJlZm9yZSBJIHByb2NlZWQgdG9vIGZhciBkb3duIHRoYXQgcGF0aCwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvZiBgRlNfREFYYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbG9vayBhdCBob3cgd2UncmUgaGFuZGxpbmcgYGFkZF90b19raWxsX2ZzZGF4YC4gSSd2ZSBwcm9iYWJseSB3b3JrZWQgd2l0aCB0aGlzIG1hbnkgdGltZXMgYmVmb3JlIGJ1dCBpdCdzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgaXQgaXMgY29uZmlndXJlZCBjb3JyZWN0bHksIGJlY2F1c2UgdGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBhZmZlY3QgaG93IGVmZmVjdGl2ZSB0aGlzIG1pZ3JhdGlvbiB3aWxsIGJlLiBTbyBsZXQncyBtYWtlIHN1cmUgaXQncyBzZXQgYXBwcm9wcmlhdGVseS4gR290dGEgZG90IHRoZSBpJ3MgYW5kIGNyb3NzIHRoZSB0J3MgYmVmb3JlIHdlIG1ha2UgYW55IG1vdmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTg0NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjQ4OjQ5LjQ0NjUxMTI4N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE3NjYyNjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4obWVudWNvbmZpZ3xjb25maWcpIEZTX0RBWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9kYXgvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NDg6NDkuNTI4Mjg5MDQyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Njc0MzcxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipMb2NhdGluZyB0aGUgYEZTX0RBWGAgS2V5KipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvbXB0IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEknbSBlc3NlbnRpYWxseSBiZWluZyBhc2tlZCB0byBsb2NhdGUgb3IgaWRlbnRpZnkgc29tZXRoaW5nLCBhbmQgdGhlIGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgRlNfREFYYC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHZhcmlvdXMgY29udGV4dHMgd2hlcmUgdGhpcyBpZGVudGlmaWVyIGlzIGxpa2VseSB0byBhcHBlYXIuIEl0J3MgYWxtb3N0IGNlcnRhaW5seSByZWxhdGVkIHRvIGZpbGUgc3lzdGVtcywgcG9zc2libHkgZGF0YSBhY2Nlc3MsIGFuZCBsaWtlbHkgaW52b2x2ZXMgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvciBhYnN0cmFjdGlvbiBsYXllci4gVGhlIGltbWVkaWF0ZSBnb2FsIGlzIGNsZWFyOiBwaW5wb2ludCB3aGF0IGBGU19EQVhgIHJlcHJlc2VudHMgd2l0aGluIHRoZSBjdXJyZW50IGNvbnRleHQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzaWduaWZpY2FuY2UgYW5kIGludGVuZGVkIHVzZSBvZiB0aGlzIGtleS4gTXkgYXBwcm9hY2ggd291bGQgYmUgdG8gc3RhcnQgYnVpbGRpbmcgYSBtZW50YWwgbWFwOyB3aGF0IGFyZSB0aGUgbGlrZWx5IGNvbXBvbmVudHMgdGhpcyBpZGVudGlmaWVyIHJlZmVyZW5jZXM/IElzIGl0IGEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIsIGEgbWFjcm8sIGEgc3ltYm9saWMgY29uc3RhbnQsIG9yIG1heWJlIGV2ZW4gYSBzcGVjaWZpYyBmdW5jdGlvbiBuYW1lPyBUaGUgY29udGV4dCBpcyB3aGF0J3MgaW1wb3J0YW50IGhlcmUuIFRoZSBzZWFyY2ggYmVnaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDA5OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjQ4OjUzLjE5NTcyOTI3N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0NjgzNDE3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKG1lbnVjb25maWd8Y29uZmlnKSBGU19EQVhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9NTY9ZW5kaWYgIyBCTE9DS1xcbmZzL0tjb25maWctNTctXFxuZnMvS2NvbmZpZzo1ODpjb25maWcgRlNfREFYXFxuZnMvS2NvbmZpZy01OS1cXHRib29sIFxcXCJGaWxlIHN5c3RlbSBiYXNlZCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9LY29uZmlnLTg5LVxcbmZzL0tjb25maWc6OTA6Y29uZmlnIEZTX0RBWF9QTURcXG5mcy9LY29uZmlnLTkxLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NDg6NTYuMTQyNTcyNzU5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNDU3Mjc2NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCB0aGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBwYXRjaC4gYEZTX0RBWGAgaXMgYSBnb29kIHNpZ24g4oCTIHRoYXQncyBjZW50cmFsIHRvIGhvdyB0aGlzIHdvcmtzLiBMZXQncyBzdGFydCB3aXRoIGEgY29uZmlndXJhdGlvbiBzdW1tYXJ5OiBJJ20gc2VlaW5nIGludGVyYWN0aW9ucyB3aXRoIGBLU01gLCBgVVNFUkZBVUxURkRgLCBgTUVNT1JZX0ZBSUxVUkVgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgTUlHUkFUSU9OYCwgYW5kLCBvZiBjb3Vyc2UsIGBGU19EQVhgLlxuXG5JIHNraW1tZWQgZm9yIG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbmZpZ3MsIGp1c3QgaW4gY2FzZS4gYERFVlBPUlRgIGFuZCBgQ09ORklHXzY0QklUYCBkb24ndCBzZWVtIGRpcmVjdGx5IGNvbm5lY3RlZCB0byB0aGUgY2hhbmdlcywgc28gSSdsbCBpZ25vcmUgdGhvc2UuXG5cbk5vdywgbGV0J3MgcmVmaW5lIHRoZSBcIkZvY3VzU3ltYm9sc1wiIOKAkyB0aGUga2V5IGZ1bmN0aW9uIGNhbGxzIHRvIHBpbnBvaW50OlxuKiAgIGBtbWFwX3plcm9fcHJlcGFyZWA6IFRoYXQncyB0aGUgY29yZSBvZiB0aGUgYC9kZXYvemVyb2AgbWFwcGluZyBhbHRlcmF0aW9uLCBzbyBpdCdzIGEgZ3JlYXQgY2hvaWNlLlxuKiAgIGB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZWAgYW5kIGBybWFwX3dhbGtfa3NtYDogSSBleHBlY3QgS1NNIGludGVyYWN0aW9ucyB0byBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZC5cbiogICBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgOiBNaWdyYXRpb24gY2hhbmdlcyBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBtYXBwaW5ncyBhcmUgaGFuZGxlZC5cbiogICBgY29weV92bWFfYW5kX2RhdGFgOiBUaGF0IHNvdW5kcyBsaWtlIG1yZW1hcCBpcyBpbnZvbHZlZCwgc28gdGhpcyBuZWVkcyB0byBiZSBpbnZlc3RpZ2F0ZWQuXG4qICAgYG1vdmVfcHJlc2VudF9wdGVzYDogU291bmRzIGxpa2UgaXQgd2lsbCByZWxhdGUgdG8gdXNlcmZhdWx0ZmQuXG4qICAgYHJlbG9jYXRlX3ZtYV9kb3duYDogVGhpcyBtaWdodCBiZSBpbnZvbHZlZCB3aXRoIGV4ZWN2ZSwgc28gd29ydGggbG9va2luZyBhdC5cblxuVGhpcyBGb2N1c1N5bWJvbHMgbGlzdCBpcyByZWFsbHkgd2VsbC1kZWZpbmVkLiBJJ20gaGFwcHkgd2l0aCB0aGlzLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSBtZW1vcnkgbWFuYWdlbWVudCB0byB0cmVhdCBgTUFQX1BSSVZBVEVgIG1hcHBpbmdzIG9mIGAvZGV2L3plcm9gIGFzICp0cnVseSogYW5vbnltb3VzIG1lbW9yeSwgaW5zdGVhZCBvZiBmaWxlLWJhY2tlZC4gSXQncyB1c2luZyB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0cyB0byB0cmFjayBhbmQgbWVyZ2UgdGhlc2UgbWFwcGluZ3MuIFRoaXMgdG91Y2hlcyBhIGxvdCBvZiBvdGhlciBhcmVhczogS1NNLCBtaWdyYXRpb24sIG1yZW1hcCwgdXNlcmZhdWx0ZmQsIGFuZCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZy4gVGhlIGNoYW5nZXMgYXJlIGFsbCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIHNwZWNpZmljYWxseSB0aHJvdWdoIGZ1bmN0aW9ucyBsaWtlIGBtbWFwYCwgYG1yZW1hcGAsIGB1c2VyZmF1bHRmZGAsIGV0Yy4sIHdoaWNoIG1lYW5zIGZ1enppbmcgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50LlxuXG5Pa2F5LCB0aGlzIGhhcyBnb25lIHZlcnkgd2VsbC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDQ1NSwiT3V0cHV0VG9rZW5zIjoyNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NDk6MDQuMjg4MzAzNzY5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNTkxMzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLU01cIixcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIk1JR1JBVElPTlwiLFxuICAgIFwiRlNfREFYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW1hcF96ZXJvX3ByZXBhcmVcIixcbiAgICBcInRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlXCIsXG4gICAgXCJybWFwX3dhbGtfa3NtXCIsXG4gICAgXCJyZW1vdmVfbWlncmF0aW9uX3B0ZVwiLFxuICAgIFwiY29weV92bWFfYW5kX2RhdGFcIixcbiAgICBcIm1vdmVfcHJlc2VudF9wdGVzXCIsXG4gICAgXCJyZWxvY2F0ZV92bWFfZG93blwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0byBoYW5kbGUgTUFQX1BSSVZBVEUgbWFwcGluZ3Mgb2YgL2Rldi96ZXJvIGFzIHRydWx5IGFub255bW91cyBtYXBwaW5ncywgcmF0aGVyIHRoYW4gZmlsZS1iYWNrZWQgbWFwcGluZ3Mgd2l0aCBhIHNwZWNpYWwgZmxhZy4gSXQgaW50cm9kdWNlcyB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0cyBmb3IgVk1BcyB0byBjb3JyZWN0bHkgdHJhY2sgYW5kIG1lcmdlIHRoZXNlIG1hcHBpbmdzLiBUaGlzIGFmZmVjdHMgdmFyaW91cyBtbSBzdWJzeXN0ZW1zIGluY2x1ZGluZyBLU00sIG1pZ3JhdGlvbiwgbXJlbWFwLCB1c2VyZmF1bHRmZCwgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtbWFwLCBtcmVtYXAsIHVzZXJmYXVsdGZkLCBldGMuLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1NNXCIsXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNSUdSQVRJT05cIixcbiAgICBcIkZTX0RBWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1tYXBfemVyb19wcmVwYXJlXCIsXG4gICAgXCJ0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZVwiLFxuICAgIFwicm1hcF93YWxrX2tzbVwiLFxuICAgIFwicmVtb3ZlX21pZ3JhdGlvbl9wdGVcIixcbiAgICBcImNvcHlfdm1hX2FuZF9kYXRhXCIsXG4gICAgXCJtb3ZlX3ByZXNlbnRfcHRlc1wiLFxuICAgIFwicmVsb2NhdGVfdm1hX2Rvd25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdG8gaGFuZGxlIE1BUF9QUklWQVRFIG1hcHBpbmdzIG9mIC9kZXYvemVybyBhcyB0cnVseSBhbm9ueW1vdXMgbWFwcGluZ3MsIHJhdGhlciB0aGFuIGZpbGUtYmFja2VkIG1hcHBpbmdzIHdpdGggYSBzcGVjaWFsIGZsYWcuIEl0IGludHJvZHVjZXMgdmlydHVhbCBwYWdlIG9mZnNldHMgZm9yIFZNQXMgdG8gY29ycmVjdGx5IHRyYWNrIGFuZCBtZXJnZSB0aGVzZSBtYXBwaW5ncy4gVGhpcyBhZmZlY3RzIHZhcmlvdXMgbW0gc3Vic3lzdGVtcyBpbmNsdWRpbmcgS1NNLCBtaWdyYXRpb24sIG1yZW1hcCwgdXNlcmZhdWx0ZmQsIGFuZCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbW1hcCwgbXJlbWFwLCB1c2VyZmF1bHRmZCwgZXRjLiwgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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:nil,}