Name: series-workflow42lb8 Phase: Succeeded StartedAt: 2026-07-20 07:49:50 +0000 UTC FinishedAt: 2026-07-20 12:42:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[0] Phase: Succeeded StartedAt: 2026-07-20 07:49:50 +0000 UTC FinishedAt: 2026-07-20 08:26:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 07:49:50 +0000 UTC FinishedAt: 2026-07-20 08:26:36 +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": "56b9d68cf62f5e79ac9035dde02c3a68d0c6e091", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "PTE_MARKER_UFFD_WP" ], "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": "56b9d68cf62f5e79ac9035dde02c3a68d0c6e091", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "PTE_MARKER_UFFD_WP" ], "series_id": "ccd1f45f-baec-46b1-906f-e4446e3da6e4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "cond_install_uffd_wp_ptes", "try_to_unmap_one", "zap_pte_range" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1BURV9NQVJLRVJfVUZGRF9XUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMmIzM0OywKICAgICYjMzQ7dHJ5X3RvX3VubWFwX29uZSYjMzQ7LAogICAgJiMzNDt6YXBfcHRlX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdG8gc3VwcG9ydCBiYXRjaGluZyBvZiBQVEVzIHdoZW4gaW5zdGFsbGluZyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIG1hcmtlcnMgZHVyaW5nIHVubWFwIG9wZXJhdGlvbnMuIEl0IGludHJvZHVjZXMgYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgIHRvIGhhbmRsZSBtdWx0aXBsZSBQVEVzIGF0IG9uY2UgYW5kIHJlbW92ZXMgdGhlIHJlc3RyaWN0aW9uIGluIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgIHRoYXQgcHJldmVudGVkIGJhdGNoaW5nIGZvciB1c2VyZmF1bHRmZC1wcm90ZWN0ZWQgVk1Bcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ZjQwN2I1MDNhMTJjOTY1YTkyNmNiMWE0MDhlYjEwZGM3Zjc0NGE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMDg6MjM6NTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IGI1YzRkYzBmM2ZlMzI2Li42MjFjODY1M2Q4ZjdlYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbkBAIC01NjYsNTkgJiM0Mzs1NjYsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZV9tYXJrZXIgY29weV9wdGVfbWFya2VyKFxuIFx0cmV0dXJuIGRzdG07XG4gfVxuIFxuLS8qXG4tICogSWYgdGhpcyBwdGUgaXMgd3ItcHJvdGVjdGVkIGJ5IHVmZmQtd3AgaW4gYW55IGZvcm0sIGFybSB0aGUgc3BlY2lhbCBwdGUgdG9cbi0gKiByZXBsYWNlIGEgbm9uZSBwdGUuICBOT1RFISAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiAqcHRlIGlzIGFscmVhZHlcbi0gKiBjbGVhcmVkIHNvIHdlIHdpbGwgbmV2ZXIgYWNjaWRlbnRhbGx5IHJlcGxhY2Ugc29tZXRoaW5nIHZhbHVhYmxlLiAgTWVhbndoaWxlXG4tICogbm9uZSBwdGUgYWxzbyBtZWFucyB3ZSBhcmUgbm90IGRlbW90aW5nIHRoZSBwdGUgc28gdGxiIGZsdXNoZWQgaXMgbm90IG5lZWRlZC5cbi0gKiBFLmcuLCB3aGVuIHB0ZSBjbGVhcmVkIHRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgdGFrZW4gY2FyZSBvZiB0aGUgdGxiIGZsdXNoLlxuLSAqXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBwZ3RhYmxlIGxvY2sgaGVsZCBzbyB0aGF0IG5vIHRocmVhZCB3aWxsIHNlZSB0aGUgbm9uZVxuLSAqIHB0ZSwgYW5kIGlmIHRoZXkgc2VlIGl0LCB0aGV5JiMzOTtsbCBmYXVsdCBhbmQgc2VyaWFsaXplIGF0IHRoZSBwZ3RhYmxlIGxvY2suXG4tICpcbi0gKiBSZXR1cm5zIHRydWUgaWYgYW4gdWZmZC13cCBwdGUgd2FzIGluc3RhbGxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgYm9vbFxuLXB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0ICAgICAgcHRlX3QgKnB0ZSwgcHRlX3QgcHRldmFsKVxuLXtcbi1cdGJvb2wgYXJtX3VmZmRfcHRlID0gZmFsc2U7XG4tXG4tXHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdC8qIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcHRlIHNob3VsZCBiZSBcJiMzNDtjbGVhcmVkXCYjMzQ7IGJlZm9yZSBjYWxsaW5nICovXG4tXHRXQVJOX09OX09OQ0UoIXB0ZV9ub25lKHB0ZXBfZ2V0KHB0ZSkpKTtcbi1cbi1cdC8qXG4tXHQgKiBOT1RFOiB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZCgpIGRvZXNuJiMzOTt0IG5lZWQgdGhpcyB3aG9sZVxuLVx0ICogdGhpbmcsIGJlY2F1c2Ugd2hlbiB6YXBwaW5nIGVpdGhlciBpdCBtZWFucyBpdCYjMzk7cyBkcm9wcGluZyB0aGVcbi1cdCAqIHBhZ2UsIG9yIGluIFRUVSB3aGVyZSB0aGUgcHJlc2VudCBwdGUgd2lsbCBiZSBxdWlja2x5IHJlcGxhY2VkXG4tXHQgKiB3aXRoIGEgc3dhcCBwdGUuICBUaGVyZSYjMzk7cyBubyB3YXkgb2YgbGVha2luZyB0aGUgYml0LlxuLVx0ICovXG4tXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICF1c2VyZmF1bHRmZF93cCh2bWEpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHQvKiBBIHVmZmQtd3Agd3ItcHJvdGVjdGVkIG5vcm1hbCBwdGUgKi9cbi1cdGlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpIFx1MDAyNlx1MDAyNiBwdGVfdWZmZChwdGV2YWwpKSlcbi1cdFx0YXJtX3VmZmRfcHRlID0gdHJ1ZTtcbi1cbi1cdC8qXG4tXHQgKiBBIHVmZmQtd3Agd3ItcHJvdGVjdGVkIHN3YXAgcHRlLiAgTm90ZTogdGhpcyBzaG91bGQgZXZlbiBjb3ZlciBhblxuLVx0ICogZXhpc3RpbmcgcHRlIG1hcmtlciB3aXRoIHVmZmQtd3AgYml0IHNldC5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KHB0ZV9zd3BfdWZmZF9hbnkocHRldmFsKSkpXG4tXHRcdGFybV91ZmZkX3B0ZSA9IHRydWU7XG4tXG4tXHRpZiAodW5saWtlbHkoYXJtX3VmZmRfcHRlKSkge1xuLVx0XHRzZXRfcHRlX2F0KHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlLFxuLVx0XHRcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaGFzX3JlY2VuY3koY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX1NFUV9SRUFEIHwgVk1fUkFORF9SRUFEKSlcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggZjI2NDIzZGU0Y2EyODcuLjBmNDljZmY2N2EyYjg3IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaFxuQEAgLTI3Niw2ICYjNDM7Mjc2LDEwIEBAIHZvaWQgdW5tYXBfdm1hcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApO1xuIFxuICNpZmRlZiBDT05GSUdfTU1VXG4gXG4mIzQzO2Jvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbnJfcHRlcyk7XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSlcbiB7XG4gXHRhdG9taWNfaW5jKFx1MDAyNmFub25fdm1hLVx1MDAzZXJlZmNvdW50KTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBkNWU4NzYyNGY2OTIwNS4uZDJmMTRiYTIyNjFjZDAgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmNcbkBAIC0xNjc1LDQwICYjNDM7MTY3NSw4OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemFwX2Ryb3BfbWFya2VycyhzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXG4gXHRyZXR1cm4gZGV0YWlscy1cdTAwM2V6YXBfZmxhZ3MgXHUwMDI2IFpBUF9GTEFHX0RST1BfTUFSS0VSO1xuIH1cbiBcbi0vKlxuLSAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHdlJiMzOTtsbCByZXBsYWNlIHRoZSBub25lIHB0ZSB3aXRoIGFuIHVmZmQtd3Bcbi0gKiBzd2FwIHNwZWNpYWwgcHRlIG1hcmtlciB3aGVuIG5lY2Vzc2FyeS4gTXVzdCBiZSB3aXRoIHRoZSBwZ3RhYmxlIGxvY2sgaGVsZC5cbiYjNDM7LyoqXG4mIzQzOyAqIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMgLSBpbnN0YWxsIHVmZmQtd3AgbWFya2VycyBhZnRlciBjbGVhcmluZyBQVEVzXG4mIzQzOyAqIEB2bWE6IFRoZSBWTUEgdGhlIHBhZ2VzIGFyZSBtYXBwZWQgaW50by5cbiYjNDM7ICogQGFkZHI6IEFkZHJlc3MgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhpcyBiYXRjaCBpcyBtYXBwZWQgYXQuXG4mIzQzOyAqIEBwdGVwOiBQYWdlIHRhYmxlIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBlbnRyeSBvZiB0aGlzIGJhdGNoLlxuJiM0MzsgKiBAcHRlOiBPbGQgdmFsdWUgb2YgdGhlIGVudHJ5IHBvaW50ZWQgdG8gYnkgQHB0ZXAuXG4mIzQzOyAqIEBucl9wdGVzOiBOdW1iZXIgb2YgZW50cmllcyB0byBpbnN0YWxsLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGUgUFRFcyB3ZXJlIHdyaXRlLXByb3RlY3RlZCBieSB1ZmZkLXdwIGluIGFueSBmb3JtLCBhcm0gc3BlY2lhbCBQVEVzXG4mIzQzOyAqIHRvIHJlcGxhY2Ugbm9uZSBQVEVzLiBOT1RFISBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBQVEVzIGFyZVxuJiM0MzsgKiBhbHJlYWR5IGNsZWFyZWQgc28gd2Ugd2lsbCBuZXZlciBhY2NpZGVudGFsbHkgcmVwbGFjZSBzb21ldGhpbmcgdmFsdWFibGUuXG4mIzQzOyAqIE1lYW53aGlsZSBub25lIFBURXMgYWxzbyBtZWFuIHdlIGFyZSBub3QgZGVtb3RpbmcgdGhlIFBURXMgc28gYSBUTEIgZmx1c2ggaXNcbiYjNDM7ICogbm90IG5lZWRlZC4gRS5nLiwgd2hlbiB0aGUgUFRFcyB3ZXJlIGNsZWFyZWQsIHRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgdGFrZW5cbiYjNDM7ICogY2FyZSBvZiB0aGUgVExCIGZsdXNoLlxuJiM0MzsgKlxuJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBwYWdlIHRhYmxlIGxvY2sgaGVsZCBzbyB0aGF0IG5vIHRocmVhZCB3aWxsIHNlZSB0aGVcbiYjNDM7ICogbm9uZSBQVEVzLCBhbmQgaWYgdGhleSBzZWUgdGhlbSwgdGhleSYjMzk7bGwgZmF1bHQgYW5kIHNlcmlhbGl6ZSBhdCB0aGUgcGFnZSB0YWJsZVxuJiM0MzsgKiBsb2NrLlxuICAqXG4tICogUmV0dXJucyB0cnVlIGlmIHVmZmQtd3AgcHRlcyB3YXMgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuXG4mIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB1ZmZkLXdwIFBURXMgd2VyZSBpbnN0YWxsZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIGJvb2xcbi16YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGUsIGludCBucixcbi1cdFx0XHQgICAgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMsIHB0ZV90IHB0ZXZhbClcbiYjNDM7Ym9vbCBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBucl9wdGVzKVxuIHtcbi1cdGJvb2wgd2FzX2luc3RhbGxlZCA9IGZhbHNlO1xuJiM0MztcdGJvb2wgYXJtX3VmZmRfcHRlID0gZmFsc2U7XG4gXG4gXHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdC8qIFphcCBvbiBhbm9ueW1vdXMgYWx3YXlzIG1lYW5zIGRyb3BwaW5nIGV2ZXJ5dGhpbmcgKi9cbi1cdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4mIzQzO1x0LyogVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBwdGUgc2hvdWxkIGJlIFwmIzM0O2NsZWFyZWRcJiMzNDsgYmVmb3JlIGNhbGxpbmcgKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoIXB0ZV9ub25lKHB0ZXBfZ2V0KHB0ZXApKSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTk9URTogdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoKSBkb2VzbiYjMzk7dCBuZWVkIHRoaXMgd2hvbGVcbiYjNDM7XHQgKiB0aGluZywgYmVjYXVzZSB3aGVuIHphcHBpbmcgZWl0aGVyIGl0IG1lYW5zIGl0JiMzOTtzIGRyb3BwaW5nIHRoZVxuJiM0MztcdCAqIHBhZ2UsIG9yIGluIFRUVSB3aGVyZSB0aGUgcHJlc2VudCBwdGUgd2lsbCBiZSBxdWlja2x5IHJlcGxhY2VkXG4mIzQzO1x0ICogd2l0aCBhIHN3YXAgcHRlLiAgVGhlcmUmIzM5O3Mgbm8gd2F5IG9mIGxlYWtpbmcgdGhlIGJpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICF1c2VyZmF1bHRmZF93cCh2bWEpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAoemFwX2Ryb3BfbWFya2VycyhkZXRhaWxzKSlcbiYjNDM7XHQvKiBBIHVmZmQtd3Agd3ItcHJvdGVjdGVkIG5vcm1hbCBwdGUgKi9cbiYjNDM7XHRpZiAodW5saWtlbHkocHRlX3ByZXNlbnQocHRlKSBcdTAwMjZcdTAwMjYgcHRlX3VmZmQocHRlKSkpXG4mIzQzO1x0XHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgdWZmZC13cCB3ci1wcm90ZWN0ZWQgc3dhcCBwdGUuICBOb3RlOiB0aGlzIHNob3VsZCBldmVuIGNvdmVyIGFuXG4mIzQzO1x0ICogZXhpc3RpbmcgcHRlIG1hcmtlciB3aXRoIHVmZmQtd3AgYml0IHNldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodW5saWtlbHkocHRlX3N3cF91ZmZkX2FueShwdGUpKSlcbiYjNDM7XHRcdGFybV91ZmZkX3B0ZSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChsaWtlbHkoIWFybV91ZmZkX3B0ZSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGZvciAoOzspIHtcbi1cdFx0LyogdGhlIFBGTiBpbiB0aGUgUFRFIGlzIGlycmVsZXZhbnQuICovXG4tXHRcdGlmIChwdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCh2bWEsIGFkZHIsIHB0ZSwgcHRldmFsKSlcbi1cdFx0XHR3YXNfaW5zdGFsbGVkID0gdHJ1ZTtcbi1cdFx0aWYgKC0tbnIgPT0gMClcbiYjNDM7XHRcdHNldF9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLFxuJiM0MztcdFx0XHQgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7XG4mIzQzO1x0XHRpZiAoLS1ucl9wdGVzID09IDApXG4gXHRcdFx0YnJlYWs7XG4tXHRcdHB0ZSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRwdGVwJiM0MzsmIzQzOztcbiBcdFx0YWRkciAmIzQzOz0gUEFHRV9TSVpFO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHdhc19pbnN0YWxsZWQ7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHdlJiMzOTtsbCByZXBsYWNlIHRoZSBub25lIHB0ZSB3aXRoIGFuIHVmZmQtd3BcbiYjNDM7ICogc3dhcCBzcGVjaWFsIHB0ZSBtYXJrZXIgd2hlbiBuZWNlc3NhcnkuIE11c3QgYmUgd2l0aCB0aGUgcGd0YWJsZSBsb2NrIGhlbGQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB1ZmZkLXdwIHB0ZXMgd2FzIGluc3RhbGxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sXG4mIzQzO3phcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGUsIGludCBucixcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzLCBwdGVfdCBwdGV2YWwpXG4mIzQzO3tcbiYjNDM7XHRpZiAoemFwX2Ryb3BfbWFya2VycyhkZXRhaWxzKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCwgbnIpO1xuIH1cbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgemFwX3ByZXNlbnRfZm9saW9fcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggNzNjMmZlMmQxOTQ2MjUuLjU2ZWFkZGZjNjEwYjFjIDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmNcbkBAIC0xOTY4LDkgJiM0MzsxOTY4LDYgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRpZiAocHRlX3VudXNlZChwdGUpKVxuIFx0XHRyZXR1cm4gMTtcbiBcbi1cdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcbi1cdFx0cmV0dXJuIDE7XG4tXG4gXHQvKlxuIFx0ICogSWYgdW5tYXAgZmFpbHMsIHdlIG5lZWQgdG8gcmVzdG9yZSB0aGUgcHRlcy4gVG8gYXZvaWQgYWNjaWRlbnRhbGx5XG4gXHQgKiB1cGdyYWRpbmcgd3JpdGUgcGVybWlzc2lvbnMgZm9yIHB0ZXMgdGhhdCB3ZXJlIG5vdCBvcmlnaW5hbGx5XG5AQCAtMjM0OCw3ICYjNDM7MjM0NSw4IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdCAqIHdlIG1heSB3YW50IHRvIHJlcGxhY2UgYSBub25lIHB0ZSB3aXRoIGEgbWFya2VyIHB0ZSBpZlxuIFx0XHQgKiBpdCYjMzk7cyBmaWxlLWJhY2tlZCwgc28gd2UgZG9uJiMzOTt0IGxvc2UgdGhlIHRyYWNraW5nIGluZm8uXG4gXHRcdCAqL1xuLVx0XHRwdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCh2bWEsIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuJiM0MztcdFx0Y29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyh2bWEsIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsXG4mIzQzO1x0XHRcdFx0XHQgIG5yX3BhZ2VzKTtcbiBcbiBcdFx0LyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi9cbiBcdFx0dXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwODoyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7LAogICAgJiMzNDtQVEVfTUFSS0VSX1VGRkRfV1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzJiMzNDssCiAgICAmIzM0O3RyeV90b191bm1hcF9vbmUmIzM0OywKICAgICYjMzQ7emFwX3B0ZV9yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRvIHN1cHBvcnQgYmF0Y2hpbmcgb2YgUFRFcyB3aGVuIGluc3RhbGxpbmcgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBtYXJrZXJzIGR1cmluZyB1bm1hcCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCB0byBoYW5kbGUgbXVsdGlwbGUgUFRFcyBhdCBvbmNlIGFuZCByZW1vdmVzIHRoZSByZXN0cmljdGlvbiBpbiBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCB0aGF0IHByZXZlbnRlZCBiYXRjaGluZyBmb3IgdXNlcmZhdWx0ZmQtcHJvdGVjdGVkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZjQwN2I1MDNhMTJjOTY1YTkyNmNiMWE0MDhlYjEwZGM3Zjc0NGE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjAgMDg6MjM6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCBiNWM0ZGMwZjNmZTMyNi4uNjIxYzg2NTNkOGY3ZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaApAQCAtNTY2LDU5ICYjNDM7NTY2LDYgQEAgc3RhdGljIGlubGluZSBwdGVfbWFya2VyIGNvcHlfcHRlX21hcmtlcigKIAlyZXR1cm4gZHN0bTsKIH0KIAotLyoKLSAqIElmIHRoaXMgcHRlIGlzIHdyLXByb3RlY3RlZCBieSB1ZmZkLXdwIGluIGFueSBmb3JtLCBhcm0gdGhlIHNwZWNpYWwgcHRlIHRvCi0gKiByZXBsYWNlIGEgbm9uZSBwdGUuICBOT1RFISAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiAqcHRlIGlzIGFscmVhZHkKLSAqIGNsZWFyZWQgc28gd2Ugd2lsbCBuZXZlciBhY2NpZGVudGFsbHkgcmVwbGFjZSBzb21ldGhpbmcgdmFsdWFibGUuICBNZWFud2hpbGUKLSAqIG5vbmUgcHRlIGFsc28gbWVhbnMgd2UgYXJlIG5vdCBkZW1vdGluZyB0aGUgcHRlIHNvIHRsYiBmbHVzaGVkIGlzIG5vdCBuZWVkZWQuCi0gKiBFLmcuLCB3aGVuIHB0ZSBjbGVhcmVkIHRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgdGFrZW4gY2FyZSBvZiB0aGUgdGxiIGZsdXNoLgotICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggcGd0YWJsZSBsb2NrIGhlbGQgc28gdGhhdCBubyB0aHJlYWQgd2lsbCBzZWUgdGhlIG5vbmUKLSAqIHB0ZSwgYW5kIGlmIHRoZXkgc2VlIGl0LCB0aGV5JiMzOTtsbCBmYXVsdCBhbmQgc2VyaWFsaXplIGF0IHRoZSBwZ3RhYmxlIGxvY2suCi0gKgotICogUmV0dXJucyB0cnVlIGlmIGFuIHVmZmQtd3AgcHRlIHdhcyBpbnN0YWxsZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGlubGluZSBib29sCi1wdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICAgcHRlX3QgKnB0ZSwgcHRlX3QgcHRldmFsKQotewotCWJvb2wgYXJtX3VmZmRfcHRlID0gZmFsc2U7Ci0KLQlpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcHRlIHNob3VsZCBiZSAmIzM0O2NsZWFyZWQmIzM0OyBiZWZvcmUgY2FsbGluZyAqLwotCVdBUk5fT05fT05DRSghcHRlX25vbmUocHRlcF9nZXQocHRlKSkpOwotCi0JLyoKLQkgKiBOT1RFOiB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZCgpIGRvZXNuJiMzOTt0IG5lZWQgdGhpcyB3aG9sZQotCSAqIHRoaW5nLCBiZWNhdXNlIHdoZW4gemFwcGluZyBlaXRoZXIgaXQgbWVhbnMgaXQmIzM5O3MgZHJvcHBpbmcgdGhlCi0JICogcGFnZSwgb3IgaW4gVFRVIHdoZXJlIHRoZSBwcmVzZW50IHB0ZSB3aWxsIGJlIHF1aWNrbHkgcmVwbGFjZWQKLQkgKiB3aXRoIGEgc3dhcCBwdGUuICBUaGVyZSYjMzk7cyBubyB3YXkgb2YgbGVha2luZyB0aGUgYml0LgotCSAqLwotCWlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgIXVzZXJmYXVsdGZkX3dwKHZtYSkpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIEEgdWZmZC13cCB3ci1wcm90ZWN0ZWQgbm9ybWFsIHB0ZSAqLwotCWlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpICZhbXA7JmFtcDsgcHRlX3VmZmQocHRldmFsKSkpCi0JCWFybV91ZmZkX3B0ZSA9IHRydWU7Ci0KLQkvKgotCSAqIEEgdWZmZC13cCB3ci1wcm90ZWN0ZWQgc3dhcCBwdGUuICBOb3RlOiB0aGlzIHNob3VsZCBldmVuIGNvdmVyIGFuCi0JICogZXhpc3RpbmcgcHRlIG1hcmtlciB3aXRoIHVmZmQtd3AgYml0IHNldC4KLQkgKi8KLQlpZiAodW5saWtlbHkocHRlX3N3cF91ZmZkX2FueShwdGV2YWwpKSkKLQkJYXJtX3VmZmRfcHRlID0gdHJ1ZTsKLQotCWlmICh1bmxpa2VseShhcm1fdWZmZF9wdGUpKSB7Ci0JCXNldF9wdGVfYXQodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlLAotCQkJICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaGFzX3JlY2VuY3koY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgKFZNX1NFUV9SRUFEIHwgVk1fUkFORF9SRUFEKSkKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IGYyNjQyM2RlNGNhMjg3Li4wZjQ5Y2ZmNjdhMmI4NyAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC0yNzYsNiAmIzQzOzI3NiwxMCBAQCB2b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKTsKIAogI2lmZGVmIENPTkZJR19NTVUKIAomIzQzO2Jvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbnJfcHRlcyk7CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2Fub25fdm1hKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpCiB7CiAJYXRvbWljX2luYygmYW1wO2Fub25fdm1hLSZndDtyZWZjb3VudCk7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGQ1ZTg3NjI0ZjY5MjA1Li5kMmYxNGJhMjI2MWNkMCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTE2NzUsNDAgJiM0MzsxNjc1LDg5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6YXBfZHJvcF9tYXJrZXJzKHN0cnVjdCB6YXBfZGV0YWlscyAqZGV0YWlscykKIAlyZXR1cm4gZGV0YWlscy0mZ3Q7emFwX2ZsYWdzICZhbXA7IFpBUF9GTEFHX0RST1BfTUFSS0VSOwogfQogCi0vKgotICogVGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgd2UmIzM5O2xsIHJlcGxhY2UgdGhlIG5vbmUgcHRlIHdpdGggYW4gdWZmZC13cAotICogc3dhcCBzcGVjaWFsIHB0ZSBtYXJrZXIgd2hlbiBuZWNlc3NhcnkuIE11c3QgYmUgd2l0aCB0aGUgcGd0YWJsZSBsb2NrIGhlbGQuCiYjNDM7LyoqCiYjNDM7ICogY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyAtIGluc3RhbGwgdWZmZC13cCBtYXJrZXJzIGFmdGVyIGNsZWFyaW5nIFBURXMKJiM0MzsgKiBAdm1hOiBUaGUgVk1BIHRoZSBwYWdlcyBhcmUgbWFwcGVkIGludG8uCiYjNDM7ICogQGFkZHI6IEFkZHJlc3MgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhpcyBiYXRjaCBpcyBtYXBwZWQgYXQuCiYjNDM7ICogQHB0ZXA6IFBhZ2UgdGFibGUgcG9pbnRlciBmb3IgdGhlIGZpcnN0IGVudHJ5IG9mIHRoaXMgYmF0Y2guCiYjNDM7ICogQHB0ZTogT2xkIHZhbHVlIG9mIHRoZSBlbnRyeSBwb2ludGVkIHRvIGJ5IEBwdGVwLgomIzQzOyAqIEBucl9wdGVzOiBOdW1iZXIgb2YgZW50cmllcyB0byBpbnN0YWxsLgomIzQzOyAqCiYjNDM7ICogSWYgdGhlIFBURXMgd2VyZSB3cml0ZS1wcm90ZWN0ZWQgYnkgdWZmZC13cCBpbiBhbnkgZm9ybSwgYXJtIHNwZWNpYWwgUFRFcwomIzQzOyAqIHRvIHJlcGxhY2Ugbm9uZSBQVEVzLiBOT1RFISBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBQVEVzIGFyZQomIzQzOyAqIGFscmVhZHkgY2xlYXJlZCBzbyB3ZSB3aWxsIG5ldmVyIGFjY2lkZW50YWxseSByZXBsYWNlIHNvbWV0aGluZyB2YWx1YWJsZS4KJiM0MzsgKiBNZWFud2hpbGUgbm9uZSBQVEVzIGFsc28gbWVhbiB3ZSBhcmUgbm90IGRlbW90aW5nIHRoZSBQVEVzIHNvIGEgVExCIGZsdXNoIGlzCiYjNDM7ICogbm90IG5lZWRlZC4gRS5nLiwgd2hlbiB0aGUgUFRFcyB3ZXJlIGNsZWFyZWQsIHRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgdGFrZW4KJiM0MzsgKiBjYXJlIG9mIHRoZSBUTEIgZmx1c2guCiYjNDM7ICoKJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBwYWdlIHRhYmxlIGxvY2sgaGVsZCBzbyB0aGF0IG5vIHRocmVhZCB3aWxsIHNlZSB0aGUKJiM0MzsgKiBub25lIFBURXMsIGFuZCBpZiB0aGV5IHNlZSB0aGVtLCB0aGV5JiMzOTtsbCBmYXVsdCBhbmQgc2VyaWFsaXplIGF0IHRoZSBwYWdlIHRhYmxlCiYjNDM7ICogbG9jay4KICAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdWZmZC13cCBwdGVzIHdhcyBpbnN0YWxsZWQsIGZhbHNlIG90aGVyd2lzZS4KJiM0MzsgKiBSZXR1cm5zIHRydWUgaWYgdWZmZC13cCBQVEVzIHdlcmUgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbmxpbmUgYm9vbAotemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGUsIGludCBuciwKLQkJCSAgICAgIHN0cnVjdCB6YXBfZGV0YWlscyAqZGV0YWlscywgcHRlX3QgcHRldmFsKQomIzQzO2Jvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbnJfcHRlcykKIHsKLQlib29sIHdhc19pbnN0YWxsZWQgPSBmYWxzZTsKJiM0MzsJYm9vbCBhcm1fdWZmZF9wdGUgPSBmYWxzZTsKIAogCWlmICghdWZmZF9zdXBwb3J0c193cF9tYXJrZXIoKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JLyogWmFwIG9uIGFub255bW91cyBhbHdheXMgbWVhbnMgZHJvcHBpbmcgZXZlcnl0aGluZyAqLwotCWlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpCiYjNDM7CS8qIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcHRlIHNob3VsZCBiZSAmIzM0O2NsZWFyZWQmIzM0OyBiZWZvcmUgY2FsbGluZyAqLwomIzQzOwlXQVJOX09OX09OQ0UoIXB0ZV9ub25lKHB0ZXBfZ2V0KHB0ZXApKSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE5PVEU6IHVzZXJmYXVsdGZkX3dwX3VucG9wdWxhdGVkKCkgZG9lc24mIzM5O3QgbmVlZCB0aGlzIHdob2xlCiYjNDM7CSAqIHRoaW5nLCBiZWNhdXNlIHdoZW4gemFwcGluZyBlaXRoZXIgaXQgbWVhbnMgaXQmIzM5O3MgZHJvcHBpbmcgdGhlCiYjNDM7CSAqIHBhZ2UsIG9yIGluIFRUVSB3aGVyZSB0aGUgcHJlc2VudCBwdGUgd2lsbCBiZSBxdWlja2x5IHJlcGxhY2VkCiYjNDM7CSAqIHdpdGggYSBzd2FwIHB0ZS4gIFRoZXJlJiMzOTtzIG5vIHdheSBvZiBsZWFraW5nIHRoZSBiaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICF1c2VyZmF1bHRmZF93cCh2bWEpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlpZiAoemFwX2Ryb3BfbWFya2VycyhkZXRhaWxzKSkKJiM0MzsJLyogQSB1ZmZkLXdwIHdyLXByb3RlY3RlZCBub3JtYWwgcHRlICovCiYjNDM7CWlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGUpICZhbXA7JmFtcDsgcHRlX3VmZmQocHRlKSkpCiYjNDM7CQlhcm1fdWZmZF9wdGUgPSB0cnVlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBIHVmZmQtd3Agd3ItcHJvdGVjdGVkIHN3YXAgcHRlLiAgTm90ZTogdGhpcyBzaG91bGQgZXZlbiBjb3ZlciBhbgomIzQzOwkgKiBleGlzdGluZyBwdGUgbWFya2VyIHdpdGggdWZmZC13cCBiaXQgc2V0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KHB0ZV9zd3BfdWZmZF9hbnkocHRlKSkpCiYjNDM7CQlhcm1fdWZmZF9wdGUgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAobGlrZWx5KCFhcm1fdWZmZF9wdGUpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlmb3IgKDs7KSB7Ci0JCS8qIHRoZSBQRk4gaW4gdGhlIFBURSBpcyBpcnJlbGV2YW50LiAqLwotCQlpZiAocHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCkpCi0JCQl3YXNfaW5zdGFsbGVkID0gdHJ1ZTsKLQkJaWYgKC0tbnIgPT0gMCkKJiM0MzsJCXNldF9wdGVfYXQodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlcCwKJiM0MzsJCQkgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7CiYjNDM7CQlpZiAoLS1ucl9wdGVzID09IDApCiAJCQlicmVhazsKLQkJcHRlJiM0MzsmIzQzOzsKJiM0MzsJCXB0ZXAmIzQzOyYjNDM7OwogCQlhZGRyICYjNDM7PSBQQUdFX1NJWkU7CiAJfQogCi0JcmV0dXJuIHdhc19pbnN0YWxsZWQ7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHdlJiMzOTtsbCByZXBsYWNlIHRoZSBub25lIHB0ZSB3aXRoIGFuIHVmZmQtd3AKJiM0MzsgKiBzd2FwIHNwZWNpYWwgcHRlIG1hcmtlciB3aGVuIG5lY2Vzc2FyeS4gTXVzdCBiZSB3aXRoIHRoZSBwZ3RhYmxlIGxvY2sgaGVsZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB1ZmZkLXdwIHB0ZXMgd2FzIGluc3RhbGxlZCwgZmFsc2Ugb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3phcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSwgaW50IG5yLAomIzQzOwkJCSAgICAgIHN0cnVjdCB6YXBfZGV0YWlscyAqZGV0YWlscywgcHRlX3QgcHRldmFsKQomIzQzO3sKJiM0MzsJaWYgKHphcF9kcm9wX21hcmtlcnMoZGV0YWlscykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHZtYSwgYWRkciwgcHRlLCBwdGV2YWwsIG5yKTsKIH0KIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHphcF9wcmVzZW50X2ZvbGlvX3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCA3M2MyZmUyZDE5NDYyNS4uNTZlYWRkZmM2MTBiMWMgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmMKQEAgLTE5NjgsOSAmIzQzOzE5NjgsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbywKIAlpZiAocHRlX3VudXNlZChwdGUpKQogCQlyZXR1cm4gMTsKIAotCWlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSkKLQkJcmV0dXJuIDE7Ci0KIAkvKgogCSAqIElmIHVubWFwIGZhaWxzLCB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIHB0ZXMuIFRvIGF2b2lkIGFjY2lkZW50YWxseQogCSAqIHVwZ3JhZGluZyB3cml0ZSBwZXJtaXNzaW9ucyBmb3IgcHRlcyB0aGF0IHdlcmUgbm90IG9yaWdpbmFsbHkKQEAgLTIzNDgsNyAmIzQzOzIzNDUsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkgKiB3ZSBtYXkgd2FudCB0byByZXBsYWNlIGEgbm9uZSBwdGUgd2l0aCBhIG1hcmtlciBwdGUgaWYKIAkJICogaXQmIzM5O3MgZmlsZS1iYWNrZWQsIHNvIHdlIGRvbiYjMzk7dCBsb3NlIHRoZSB0cmFja2luZyBpbmZvLgogCQkgKi8KLQkJcHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTsKJiM0MzsJCWNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLAomIzQzOwkJCQkJICBucl9wYWdlcyk7CiAKIAkJLyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi8KIAkJdXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ3NAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHJlZmFjdG9yaW5nIGhvdyB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIGlzIGhhbmRsZWQgZHVyaW5nIHBhZ2UgdW5tYXBwaW5nLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGludHJvZHVjZWQgdGhpcyBuZXcgZnVuY3Rpb24sIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCwgYW5kIGl0JiMzOTtzIHJlcGxhY2luZyBgcHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRgLiBUaGUgbWFpbiBpbXBhY3QgaXMgd2l0aGluIGB0cnlfdG9fdW5tYXBfb25lYCB3aGVyZSB0aGUgbmV3IGJhdGNoLW9yaWVudGVkIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZC4gRXNzZW50aWFsbHksIGl0IG5vdyB1bm1hcHMgYmF0Y2hlcyBvZiBwYWdlcywgd2hpY2ggaXMgYSBrZXkgY2hhbmdlLgoKV2FpdCwgbG9va2luZyBhdCBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCBpbiBgbW0vcm1hcC5jYCBpcyBhbHNvIG1vZGlmaWVkLCB3aGVyZSBhIGNoZWNrIGB1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKWAgaXMgcmVtb3ZlZC4gVGhpcyBtZWFucyBgdHJ5X3RvX3VubWFwX29uZWAgY2FuIG5vdyB1bm1hcCBhIGJhdGNoIG9mIFBURXMsIGFuZCBpbnN0YWxsIHVmZmQtd3AgbWFya2VycyB1c2luZyB0aGUgbmV3IGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCwgZXZlbiBpZiB0aGUgVk1BIGlzIHVzZXJmYXVsdGZkLXByb3RlY3RlZC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0JiMzOTtzIHdpZGVuaW5nIHRoZSBzY29wZSBvZiB0aGUgdWZmZCB3cml0ZSBwcm90ZWN0aW9uIGFuZCBvcHRpbWl6aW5nIHRoZSB1bm1hcHBpbmcgcHJvY2Vzcy4KClRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiB0aGUgcm1hcCBhbmQgdXNlcmZhdWx0ZmQgYXJlYXMuIFRoaXMgbmVlZHMgY2FyZWZ1bCBhdHRlbnRpb24sIGFuZCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgaW4gb3JkZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHN5bWJvbHMgdG8gdGFyZ2V0IGZvciBhIGdvb2QgZnV6emluZyBzdHJhdGVneS4KCkkmIzM5O20gcHJldHR5IGNlcnRhaW4gYENPTkZJR19VU0VSRkFVTFRGRGAgaXMgcmVsZXZhbnQsIGFsb25nIHdpdGggYENPTkZJR19NTVVgIGdpdmVuIHRoZSB0b3VjaGVkIGZpbGVzLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoaXMsIGJ1dCBpdCBzZWVtcyBjb3JyZWN0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaXMgYWxsIHRoYXQmIzM5O3MgbmVlZGVkLiBGb3IgZm9jdXMgc3ltYm9scywgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBwcmlvcml0aXplIGB0cnlfdG9fdW5tYXBfb25lYCwgYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgLCBgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRgLCBhbmQgYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAuCgpMZXQmIzM5O3MgdXNlIGBncmVwcGVyYCB0byBjb25maXJtIHRoYXQgYFVTRVJGQVVMVEZEYCBpcyB0aGUgY29ycmVjdCBjb25maWcgYnkgY2hlY2tpbmcgZm9yIHJlbGV2YW50IHN5bWJvbHMgbGlrZSBgdXNlcmZhdWx0ZmRfcHJvdGVjdGVkYCBhbmQgYHVmZmRfc3VwcG9ydHNfd3BfbWFya2VyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZmF1bHRmZF9wcm90ZWN0ZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjIyPXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9yd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjI2LVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjI3OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9wcm90ZWN0ZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yMjgte1xuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTM2NT1zdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfcndwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTM2OS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjM3MDpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMzcxLXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE4MDk9c3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE4NTktXHRwZ3RhYmxlX3RyYW5zX2h1Z2VfZGVwb3NpdChkc3RfbW0sIGRzdF9wbWQsIHBndGFibGUpO1xubW0vaHVnZV9tZW1vcnkuYzoxODYwOlx0aWYgKCF1c2VyZmF1bHRmZF9wcm90ZWN0ZWQoZHN0X3ZtYSkpXG5tbS9odWdlX21lbW9yeS5jLTE4NjEtXHRcdHBtZCA9IHBtZF9zd3BfY2xlYXJfdWZmZChwbWQpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTg2NT1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE5NTYtXHQvKiBTZWUgX19jb3B5X3ByZXNlbnRfcHRlcygpOiByZXN0b3JlIGFjY2Vzc2libGUgcHJvdGVjdGlvbi4gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MTk1NzpcdGlmICghdXNlcmZhdWx0ZmRfcHJvdGVjdGVkKGRzdF92bWEpKSB7XG5tbS9odWdlX21lbW9yeS5jLTE5NTgtXHRcdGlmICh1c2VyZmF1bHRmZF9yd3Aoc3JjX3ZtYSkgXHUwMDI2XHUwMDI2IHBtZF91ZmZkKHBtZCkpXG4tLVxubW0vaHVnZXRsYi5jPTQ4Nzk9aHVnZXRsYl9pbnN0YWxsX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2h1Z2V0bGIuYy00ODg1LVx0aHVnZXRsYl9hZGRfbmV3X2Fub25fcm1hcChuZXdfZm9saW8sIHZtYSwgYWRkcik7XG5tbS9odWdldGxiLmM6NDg4NjpcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSBcdTAwMjZcdTAwMjYgaHVnZV9wdGVfdWZmZChvbGQpKSB7XG5tbS9odWdldGxiLmMtNDg4Ny1cdFx0bmV3cHRlID0gaHVnZV9wdGVfbWt1ZmZkKG5ld3B0ZSk7XG4tLVxubW0vaHVnZXRsYi5jPTQ5MDE9aW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLFxuLS1cbm1tL2h1Z2V0bGIuYy00OTg1LVx0XHRcdFx0ZW50cnkgPSBzd3BfZW50cnlfdG9fcHRlKHNvZnRsZWFmKTtcbm1tL2h1Z2V0bGIuYzo0OTg2Olx0XHRcdFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZChzcmNfdm1hKSBcdTAwMjZcdTAwMjYgdWZmZClcbm1tL2h1Z2V0bGIuYy00OTg3LVx0XHRcdFx0XHRlbnRyeSA9IHB0ZV9zd3BfbWt1ZmZkKGVudHJ5KTtcbi0tXG5tbS9odWdldGxiLmMtNDk4OS1cdFx0XHR9XG5tbS9odWdldGxiLmM6NDk5MDpcdFx0XHRpZiAoIXVzZXJmYXVsdGZkX3Byb3RlY3RlZChkc3Rfdm1hKSlcbm1tL2h1Z2V0bGIuYy00OTkxLVx0XHRcdFx0ZW50cnkgPSBwdGVfc3dwX2NsZWFyX3VmZmQoZW50cnkpO1xuLS1cbm1tL2h1Z2V0bGIuYy01MDU1LVx0XHRcdC8qIFNlZSBfX2NvcHlfcHJlc2VudF9wdGVzKCk6IHJlc3RvcmUgYWNjZXNzaWJsZSBwcm90ZWN0aW9uLiAqL1xubW0vaHVnZXRsYi5jOjUwNTY6XHRcdFx0aWYgKCF1c2VyZmF1bHRmZF9wcm90ZWN0ZWQoZHN0X3ZtYSkpIHtcbm1tL2h1Z2V0bGIuYy01MDU3LVx0XHRcdFx0aWYgKHVzZXJmYXVsdGZkX3J3cChzcmNfdm1hKSBcdTAwMjZcdTAwMjYgaHVnZV9wdGVfdWZmZChlbnRyeSkpIHtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTg1NT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTg5Ny1cdCAqL1xubW0va2h1Z2VwYWdlZC5jOjE4OTg6XHRpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpXG5tbS9raHVnZXBhZ2VkLmMtMTg5OS1cdFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIxMDA9c3RhdGljIGJvb2wgZmlsZV9iYWNrZWRfdm1hX2lzX3JldHJhY3RhYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2todWdlcGFnZWQuYy0yMTE3LVx0ICovXG5tbS9raHVnZXBhZ2VkLmM6MjExODpcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcbm1tL2todWdlcGFnZWQuYy0yMTE5LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vbWVtb3J5LmM9MTAwMT1jb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxuLS1cbm1tL21lbW9yeS5jLTEwOTYtXHR9XG5tbS9tZW1vcnkuYzoxMDk3Olx0aWYgKCF1c2VyZmF1bHRmZF9wcm90ZWN0ZWQoZHN0X3ZtYSkpXG5tbS9tZW1vcnkuYy0xMDk4LVx0XHRwdGUgPSBwdGVfc3dwX2NsZWFyX3VmZmQocHRlKTtcbi0tXG5tbS9tZW1vcnkuYz0xMTE2PWNvcHlfcHJlc2VudF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxuLS1cbm1tL21lbW9yeS5jLTExNDMtXHRwdGUgPSBtYXliZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KHB0ZSksIGRzdF92bWEpO1xubW0vbWVtb3J5LmM6MTE0NDpcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQoZHN0X3ZtYSkgXHUwMDI2XHUwMDI2IHB0ZV91ZmZkKHB0ZXBfZ2V0KHNyY19wdGUpKSkge1xubW0vbWVtb3J5LmMtMTE0NS1cdFx0LyogVGhlIHVmZmQgYml0IG5lZWRzIHRvIGJlIGRlbGl2ZXJlZCB0byB0aGUgZGVzdCBwdGUgYXMgd2VsbCAqL1xuLS1cbm1tL21lbW9yeS5jPTExNTU9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fY29weV9wcmVzZW50X3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLS1cbm1tL21lbW9yeS5jLTExNzYtXHQgKi9cbm1tL21lbW9yeS5jOjExNzc6XHRpZiAoIXVzZXJmYXVsdGZkX3Byb3RlY3RlZChkc3Rfdm1hKSkge1xubW0vbWVtb3J5LmMtMTE3OC1cdFx0aWYgKHVzZXJmYXVsdGZkX3J3cChzcmNfdm1hKSBcdTAwMjZcdTAwMjYgcHRlX3VmZmQocHRlKSlcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTIyNjA9c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdXNlcmZhdWx0ZmRfY2xlYXJfdm1hKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIyNzktXHQvKiBDbGVhciB0aGUgdWZmZCBiaXQgYW5kL29yIHJlc3RvcmUgcHJvdG5vbmUgUFRFcyAqL1xubW0vdXNlcmZhdWx0ZmQuYzoyMjgwOlx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKSB7XG5tbS91c2VyZmF1bHRmZC5jLTIyODEtXHRcdHVuc2lnbmVkIGludCBtbV9jcF9mbGFncyA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA2NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgVXNlcmZhdWx0ZmQgYW5kIFdyaXRlIFByb3RlY3Rpb24gTWFya2VycyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIHdoZXJlIGBDT05GSUdfVVNFUkZBVUxURkRgIGlzIGVuYWJsZWQuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBtZW1vcnkgbWFuYWdlbWVudCBtZWNoYW5pc20gdGhhdCBhbGxvd3MgdXNlci1zcGFjZSBwcm9jZXNzZXMgdG8gaGFuZGxlIHBhZ2UgZmF1bHRzLiBOb3csIHdoYXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGZvciB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgaG93IHdlbGwgaXQgaW50ZWdyYXRlcyB3aXRoIHdyaXRlIHByb3RlY3Rpb24gKFdQKSBtYXJrZXJzLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciB0aGUgc3lzdGVtIHN1cHBvcnRzIHRob3NlIG1hcmtlcnMgaW4gY29uanVuY3Rpb24gd2l0aCB1c2VyZmF1bHRmZCBiZWNhdXNlIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aG9zZSBmZWF0dXJlcyBpcyBhIGNvbW1vbiBhcmVhIG9mIGludGVyZXN0IGZvciBhZHZhbmNlZCBtZW1vcnkgbWFuYWdlbWVudCBvcHRpbWl6YXRpb24uIFNvLCB0aGUgbmV4dCBjaGVjayBJJiMzOTtsbCBkbyBpbnZvbHZlcyBjb25maXJtaW5nIHdoZXRoZXIgYHVmZmRfc3VwcG9ydHNfd3BfbWFya2VyYCBpcyBhbHNvIHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBzeXN0ZW0uIFRoYXQgZ2l2ZXMgYSBzb2xpZCBiYXNpcyBmb3IgYXNzZXNzaW5nIGhvdyB3ZSBjYW4gbGV2ZXJhZ2UgdGhlIHByb3RlY3Rpb24gZmVhdHVyZXMgYXZhaWxhYmxlIHRvIHVzIHdoZW4gYnVpbGRpbmcgb3VyIGFwcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZmZkX3N1cHBvcnRzX3dwX21hcmtlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oLTE1LVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaDoxNjpzdGF0aWMgaW5saW5lIGJvb2wgdWZmZF9zdXBwb3J0c193cF9tYXJrZXIodm9pZClcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmgtMTcte1xuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTMxMj1zdGF0aWMgaW5saW5lIGJvb2wgcHRlX3N3cF91ZmZkX2FueShwdGVfdCBwdGUpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0zMTMte1xuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MzE0Olx0aWYgKCF1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcigpKVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMzE1LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vbWVtb3J5LmM9MTY5OT1ib29sIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWVtb3J5LmMtMTcwNC1cbm1tL21lbW9yeS5jOjE3MDU6XHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpXG5tbS9tZW1vcnkuYy0xNzA2LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0yMTk1PXN0YXRpYyBib29sIHZtYV9jYW5fdXNlcmZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjIyMi1cdCAqL1xubW0vdXNlcmZhdWx0ZmQuYzoyMjIzOlx0aWYgKCF1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcigpIFx1MDAyNlx1MDAyNiAodm1fZmxhZ3MgXHUwMDI2IFZNX1VGRkRfV1ApIFx1MDAyNlx1MDAyNlxubW0vdXNlcmZhdWx0ZmQuYy0yMjI0LVx0ICAgICF2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00MzI0PXN0YXRpYyBfX3U2NCB1ZmZkX2FwaV9hdmFpbGFibGVfZmVhdHVyZXModm9pZClcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQzMzEtXHRcdGYgXHUwMDI2PSB+VUZGRF9GRUFUVVJFX1BBR0VGQVVMVF9GTEFHX1dQO1xubW0vdXNlcmZhdWx0ZmQuYzo0MzMyOlx0aWYgKCF1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcigpKVxubW0vdXNlcmZhdWx0ZmQuYy00MzMzLVx0XHRmIFx1MDAyNj0gfihVRkZEX0ZFQVRVUkVfV1BfSFVHRVRMQkZTX1NITUVNIHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODI1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBVc2VyZmF1bHRmZCAoVUZGRCkgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgdWZmZF9zdXBwb3J0c193cF9tYXJrZXJgIGlzIGRlZmluZWQgd2l0aGluIGBpbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIG1hcCBvdXQgdGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gcGljdHVyZSBhcm91bmQgdGhpcy4gT2J2aW91c2x5LCBgQ09ORklHX1VTRVJGQVVMVEZEYCBpcyB0aGUgZnVuZGFtZW50YWwgZW5hYmxpbmcgb3B0aW9uIOKAkyB0aGF0JiMzOTtzIGEgZ2l2ZW4uIEhvd2V2ZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcsIHNvIEkmIzM5O2xsIGFsc28gY29uZmlybSB0aGF0IGBDT05GSUdfTU1VYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQsIGFzIFVGRkQgcmVsaWVzIG9uIG1lbW9yeSBtYW5hZ2VtZW50IGNhcGFiaWxpdGllcy4gSG1tLCBJIGhhdmUgYSBuaWdnbGluZyBmZWVsaW5nIHRoZXJlIG1pZ2h0IGJlIGEgbW9yZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gd3JpdGUgcHJvdGVjdGlvbiAoV1ApIG1hcmtlcnMgaW4gVUZGRC4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGlmIGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYCBpcyBhIHZhbGlkIG9wdGlvbi4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UFRFX01BUktFUl9VRkZEX1dQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdXNlcmZhdWx0ZmQucnN0PTM5Mz1SV1AgbWFya2VyOiB0aGUgbmV4dCBhY2Nlc3MgcmUtcG9wdWxhdGVzIHRoZSByYW5nZSB3aXRob3V0IHByb3RlY3Rpb24uXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3VzZXJmYXVsdGZkLnJzdDozOTQ6VW5saWtlIFdQICh3aGljaCBwZXJzaXN0cyB2aWEgYGBQVEVfTUFSS0VSX1VGRkRfV1BgYCksIHRoZXJlIGlzIG5vXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3VzZXJmYXVsdGZkLnJzdC0zOTUtcGVyc2lzdGVudCBSV1AgbWFya2VyIHRvZGF5LiBUaGUgdXNlciBuZWVkcyB0byByZS1hcm0gdGhlIHJhbmdlIHdpdGhcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjUwMz1zdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNTEzLVx0XHRzZXRfcHRlX2F0KHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlLFxuZnMvcHJvYy90YXNrX21tdS5jOjI1MTQ6XHRcdFx0ICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpO1xuZnMvcHJvYy90YXNrX21tdS5jLTI1MTUtXHR9IGVsc2Uge1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0yNjM2PXN0YXRpYyB2b2lkIG1ha2VfdWZmZF93cF9odWdlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY0NC1cdFx0c2V0X2h1Z2VfcHRlX2F0KHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlcCxcbmZzL3Byb2MvdGFza19tbXUuYzoyNjQ1Olx0XHRcdFx0bWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCksIHBzaXplKTtcbmZzL3Byb2MvdGFza19tbXUuYy0yNjQ2LVx0XHRyZXR1cm47XG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaD0xNj1zdGF0aWMgaW5saW5lIGJvb2wgdWZmZF9zdXBwb3J0c193cF9tYXJrZXIodm9pZClcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmgtMTcte1xuaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaDoxODpcdHJldHVybiBwZ3RhYmxlX3N1cHBvcnRzX3VmZmQoKSBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQKTtcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmgtMTktfVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQ3Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdWZmZF93cF9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00ODAtXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo0ODE6XHRyZXR1cm4gc29mdGxlYWZfdG9fbWFya2VyKGVudHJ5KSBcdTAwMjYgUFRFX01BUktFUl9VRkZEX1dQO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDgyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTU1NT1zdGF0aWMgaW5saW5lIHB0ZV9tYXJrZXIgY29weV9wdGVfbWFya2VyKFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTYyLVx0LyogT25seSBjb3B5IFBURSBtYXJrZXJzIGlmIFVGRkQgcmVnaXN0ZXIgbWF0Y2hlcy4gKi9cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTYzOlx0aWYgKChzcmNtIFx1MDAyNiBQVEVfTUFSS0VSX1VGRkRfV1ApIFx1MDAyNlx1MDAyNiB1c2VyZmF1bHRmZF93cChkc3Rfdm1hKSlcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTY0Olx0XHRkc3RtIHw9IFBURV9NQVJLRVJfVUZGRF9XUDtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTY1LVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTI4MT10eXBlZGVmIHVuc2lnbmVkIGxvbmcgcHRlX21hcmtlcjtcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTI4Mi1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjI4MzojZGVmaW5lICBQVEVfTUFSS0VSX1VGRkRfV1BcdFx0XHRCSVQoMClcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTI4NC0vKlxuLS1cbm1tL0tjb25maWc9MTM4Mj1tZW51Y29uZmlnIFVTRVJGQVVMVEZEXG4tLVxubW0vS2NvbmZpZy0xMzg4LVxubW0vS2NvbmZpZzoxMzg5OmNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbm1tL0tjb25maWctMTM5MC1cdGJvb2wgXCYjMzQ7VXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBzdXBwb3J0IGZvciBzaG1lbS9odWdldGxiZnNcJiMzNDtcbi0tXG5tbS9odWdldGxiLmM9NTIxMz12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUyNzQtXHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB0ZXAsXG5tbS9odWdldGxiLmM6NTI3NTpcdFx0XHRcdFx0XHRtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSxcbm1tL2h1Z2V0bGIuYy01Mjc2LVx0XHRcdFx0XHRcdHN6KTtcbi0tXG5tbS9odWdldGxiLmMtNTMxMC1cdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB0ZXAsXG5tbS9odWdldGxiLmM6NTMxMTpcdFx0XHRcdFx0bWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCksXG5tbS9odWdldGxiLmMtNTMxMi1cdFx0XHRcdFx0c3opO1xuLS1cbm1tL2h1Z2V0bGIuYz02NDk2PWxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNjU3NC1cdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlcCxcbm1tL2h1Z2V0bGIuYzo2NTc1Olx0XHRcdFx0XHRcdG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApLFxubW0vaHVnZXRsYi5jLTY1NzYtXHRcdFx0XHRcdFx0cHNpemUpO1xuLS1cbm1tL21lbW9yeS5jPTE2OTk9Ym9vbCBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbW9yeS5jLTE3MzUtXHRcdHNldF9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLFxubW0vbWVtb3J5LmM6MTczNjpcdFx0XHQgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7XG5tbS9tZW1vcnkuYy0xNzM3LVx0XHRpZiAoLS1ucl9wdGVzID09IDApXG4tLVxubW0vbWVtb3J5LmM9NDY2OT1zdGF0aWMgdm1fZmF1bHRfdCBwdGVfbWFya2VyX2NsZWFyKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ2NzktXHQgKiBUaGlzIHNob3VsZCBhbHNvIGNvdmVyIHRoZSBjYXNlIHdoZXJlIGUuZy4gdGhlIHB0ZSBjaGFuZ2VkXG5tbS9tZW1vcnkuYzo0NjgwOlx0ICogcXVpY2tseSBmcm9tIGEgUFRFX01BUktFUl9VRkZEX1dQIGludG8gUFRFX01BUktFUl9QT0lTT05FRC5cbm1tL21lbW9yeS5jLTQ2ODEtXHQgKiBTbyBwdGVfaXNfbWFya2VyKCkgY2hlY2sgaXMgbm90IGVub3VnaCB0byBzYWZlbHkgZHJvcCB0aGUgcHRlLlxuLS1cbm1tL21wcm90ZWN0LmM9MzMxPXN0YXRpYyBsb25nIGNoYW5nZV9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tcHJvdGVjdC5jLTQyNy1cdFx0XHRcdHNldF9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUsXG5tbS9tcHJvdGVjdC5jOjQyODpcdFx0XHRcdFx0ICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpO1xubW0vbXByb3RlY3QuYy00MjktXHRcdFx0XHRwYWdlcyYjNDM7JiM0Mzs7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnPTI9Q09ORklHX1VTRVJGQVVMVEZEPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZzozOkNPTkZJR19QVEVfTUFSS0VSX1VGRkRfV1A9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnLTQtQ09ORklHX1RFU1RfVk1BTExPQz1tXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgyOAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYCBDb25maWd1cmF0aW9uIGFuZCBSZWxldmFudCBGdW5jdGlvbnMqKgoKT2theSwgc28gYENPTkZJR19QVEVfTUFSS0VSX1VGRkRfV1BgIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHdoaWNoIGltcGxpZXMgd2UmIzM5O3JlIGVuYWJsaW5nIGBVU0VSRkFVTFRGRGAgYWxvbmcgd2l0aCBgUFRFX01BUktFUl9VRkZEX1dQYC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoaXMuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBmb2N1cyBzeW1ib2xzLiBJJiMzOTt2ZSBnb3Q6IGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCwgYHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkYCwgYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAsIGFuZCBgdHJ5X3RvX3VubWFwX29uZWAuCgpBbHJpZ2h0LCBhcmUgdGhlc2UgZnVuY3Rpb25zIHJlYWNoYWJsZT8gWWVzLCB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgYG1tL21lbW9yeS5jYCBhbmQgYG1tL3JtYXAuY2AgZmlsZXMuIEdvb2QuIGB0cnlfdG9fdW5tYXBfb25lYCBsb29rcyB0byBiZSBhIGNvcmUgZnVuY3Rpb247IGl0JiMzOTtzIHRoZSB3b3JraG9yc2UgZm9yIHVubWFwcGluZyBwYWdlcy4gQW5kIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgIGlzIGRlZmluaXRlbHkgdXNlZCBpbnNpZGUgYHRyeV90b191bm1hcF9vbmVgLiBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2Agc2VlbXMgdG8gYmUgdGhlIG5ldyBraWQgb24gdGhlIGJsb2NrLgoKSG9sZCBvbiwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRgIGlzIHN0YXRpYyBhbmQgaW5saW5lLiBBaCwgeWVzLCBgc3RhdGljIGlubGluZSBib29sIHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkYC4gU2luY2UgaXQmIzM5O3MgaW5saW5lLCBpdCBtaWdodCBub3QgYmUgdGhlIG1vc3QgaWxsdW1pbmF0aW5nIHN5bWJvbCB0byBmb2N1cyBvbiBkaXJlY3RseS4gTm93LCBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AgaXMgZXhwb3J0ZWQgaW4gYG1tL2ludGVybmFsLmhgIGFuZCBkZWZpbmVkIGluIGBtbS9tZW1vcnkuY2AuIEl0JiMzOTtzIG5vdCBpbmxpbmUsIHdoaWNoIGlzIHVzZWZ1bC4gQXMgZm9yIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgLCBpdCYjMzk7cyBgc3RhdGljIGlubGluZWAgaW4gYG1tL3JtYXAuY2AuIEFsc28sIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBgc3RhdGljIGJvb2xgIGluIGBtbS9ybWFwLmNgLgoKT2theSwgSSYjMzk7bGwgbGlzdCBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AgYW5kIGB0cnlfdG9fdW5tYXBfb25lYC4KCldhaXQgYSBtaW51dGUsIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgIGlzIGBzdGF0aWMgaW5saW5lYC4gTm93LCBgdHJ5X3RvX3VubWFwX29uZWAgbWlnaHQgYmUgdG9vIGhvdCwgY29uc2lkZXJpbmcgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyBwYWdlIHJlY2xhaW0sIG1pZ3JhdGlvbiwgZXRjLiBJdCYjMzk7cyBwcm9iYWJseSB0aGUgbWFpbiBmdW5jdGlvbiB0aGF0JiMzOTtzIGNoYW5nZWQsIGJ1dCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrLiBJIHNob3VsZCBjaGVjayBgemFwX3ByZXNlbnRfZm9saW9fcHRlc2Agb3IgYHphcF9wdGVfcmFuZ2VgIHdoZXJlIGB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZGAgaXMgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9MTc1Mj1zdGF0aWMgaW5saW5lIGJvb2xcbm1tL21lbW9yeS5jOjE3NTM6emFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9tZW1vcnkuYy0xNzU0LVx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSwgaW50IG5yLFxuLS1cbm1tL21lbW9yeS5jPTE3NjM9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHphcF9wcmVzZW50X2ZvbGlvX3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0xNzkyLVx0aWYgKHVubGlrZWx5KHVzZXJmYXVsdGZkX3B0ZV93cCh2bWEsIHB0ZW50KSkpXG5tbS9tZW1vcnkuYzoxNzkzOlx0XHQqYW55X3NraXBwZWQgPSB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCh2bWEsIGFkZHIsIHB0ZSxcbm1tL21lbW9yeS5jLTE3OTQtXHRcdFx0XHRcdFx0XHQgICAgIG5yLCBkZXRhaWxzLCBwdGVudCk7XG4tLVxubW0vbWVtb3J5LmM9MTgxND1zdGF0aWMgaW5saW5lIGludCB6YXBfcHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMTgzMS1cdFx0aWYgKHVzZXJmYXVsdGZkX3B0ZV93cCh2bWEsIHB0ZW50KSlcbm1tL21lbW9yeS5jOjE4MzI6XHRcdFx0KmFueV9za2lwcGVkID0gemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLFxubW0vbWVtb3J5LmMtMTgzMy1cdFx0XHRcdFx0XHRwdGUsIDEsIGRldGFpbHMsIHB0ZW50KTtcbi0tXG5tbS9tZW1vcnkuYz0xODYwPXN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0xODgwLVx0XHQgKiBjb25zaWRlciB1ZmZkLXdwIGJpdCB3aGVuIHphcC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sXG5tbS9tZW1vcnkuYzoxODgxOlx0XHQgKiBzZWUgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoKS5cbm1tL21lbW9yeS5jLTE4ODItXHRcdCAqL1xuLS1cbm1tL21lbW9yeS5jLTE5MjUtXHRjbGVhcl9ub25wcmVzZW50X3B0ZXModm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUsIG5yKTtcbm1tL21lbW9yeS5jOjE5MjY6XHQqYW55X3NraXBwZWQgPSB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCh2bWEsIGFkZHIsIHB0ZSwgbnIsIGRldGFpbHMsIHB0ZW50KTtcbm1tL21lbW9yeS5jLTE5MjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDYwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIFBURSBaYXBwaW5nIEZ1bmN0aW9ucyoqCgpSaWdodCwgc28gSSBzZWUgdGhlc2UgYHphcF9wcmVzZW50X2ZvbGlvX3B0ZXNgLCBgemFwX3ByZXNlbnRfcHRlc2AsIGFuZCBgemFwX25vbnByZXNlbnRfcHRlc2AgZnVuY3Rpb25zIGFsbCBzZWVtIHRvIGJlIHV0aWxpemluZyBzb21ldGhpbmcgY2VudHJhbC4gVGhlIGZhY3QgdGhhdCB0aGV5JiMzOTtyZSBkZWZpbmVkIGFzIGBzdGF0aWMgaW5saW5lYCBvciBgc3RhdGljIF9fYWx3YXlzX2lubGluZWAgaXMgaW50ZXJlc3Rpbmc7IGxpa2VseSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgdG8gYXZvaWQgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZCB3aGVyZSBwb3NzaWJsZSwgd2hpY2ggaXMgc2Vuc2libGUgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZXkgYXJlIGFsc28gY2FsbGVkIGZyb20gYHphcF9wdGVfcmFuZ2VgLCB3aGljaCBoYXMgY2F1Z2h0IG15IGF0dGVudGlvbi4gVGhpcyBzdWdnZXN0cyB0aGF0IGB6YXBfcHRlX3JhbmdlYCBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGlzICYjMzQ7emFwcGluZyYjMzQ7IHByb2Nlc3MgaXMgb3JjaGVzdHJhdGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgemFwX3B0ZV9yYW5nZWAgaXMgZG9pbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIHByb2Nlc3MuIFRpbWUgdG8gY2hlY2sgYHphcF9wdGVfcmFuZ2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6YXBfcHRlX3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9NDQwPVRoZXJlIGlzIGFsc28gYSBmaWxlLXN5c3RlbSBzcGVjaWZpYyBsb2NrIG9yZGVyaW5nIGNvbW1lbnQgbG9jYXRlZCBhdCB0aGUgdG9wIG9mXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC00ODUtICAgIC1cdTAwM2Vpbm9kZS1cdTAwM2VpX2xvY2sgICAgICAgICAgICAgICAgICAgICAoZm9saW9fcmVtb3ZlX3JtYXBfcHRlLVx1MDAzZXNldF9wYWdlX2RpcnR5KVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo0ODY6ICAgIGJkaS53Yi1cdTAwM2VsaXN0X2xvY2sgICAgICAgICAgICAgICAgICAgKHphcF9wdGVfcmFuZ2UtXHUwMDNlc2V0X3BhZ2VfZGlydHkpXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjQ4NzogICAgLVx1MDAzZWlub2RlLVx1MDAzZWlfbG9jayAgICAgICAgICAgICAgICAgICAgICh6YXBfcHRlX3JhbmdlLVx1MDAzZXNldF9wYWdlX2RpcnR5KVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo0ODg6ICAgIC1cdTAwM2Vwcml2YXRlX2xvY2sgICAgICAgICAgICAgICAgICAgICAgKHphcF9wdGVfcmFuZ2UtXHUwMDNlYmxvY2tfZGlydHlfZm9saW8pXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTQ4OS1cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MzExMz1leHRlcm4gdm9pZCBwYWdlZmF1bHRfb3V0X29mX21lbW9yeSh2b2lkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMzExOC0vKlxuaW5jbHVkZS9saW51eC9tbS5oOjMxMTk6ICogUGFyYW1ldGVyIGJsb2NrIHBhc3NlZCBkb3duIHRvIHphcF9wdGVfcmFuZ2UgaW4gZXhjZXB0aW9uYWwgY2FzZXMuXG5pbmNsdWRlL2xpbnV4L21tLmgtMzEyMC0gKi9cbi0tXG5tbS9maWxlbWFwLmMtMTIzLSAqICAgIC1cdTAwM2Vpbm9kZS1cdTAwM2VpX2xvY2tcdFx0KGZvbGlvX3JlbW92ZV9ybWFwX3B0ZS1cdTAwM2VzZXRfcGFnZV9kaXJ0eSlcbm1tL2ZpbGVtYXAuYzoxMjQ6ICogICAgYmRpLndiLVx1MDAzZWxpc3RfbG9ja1x0XHQoemFwX3B0ZV9yYW5nZS1cdTAwM2VzZXRfcGFnZV9kaXJ0eSlcbm1tL2ZpbGVtYXAuYzoxMjU6ICogICAgLVx1MDAzZWlub2RlLVx1MDAzZWlfbG9ja1x0XHQoemFwX3B0ZV9yYW5nZS1cdTAwM2VzZXRfcGFnZV9kaXJ0eSlcbm1tL2ZpbGVtYXAuYzoxMjY6ICogICAgLVx1MDAzZXByaXZhdGVfbG9ja1x0XHQoemFwX3B0ZV9yYW5nZS1cdTAwM2VibG9ja19kaXJ0eV9mb2xpbylcbm1tL2ZpbGVtYXAuYy0xMjctICovXG4tLVxubW0vbWVtb3J5LmM9MTg2MD1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMTkzMC1cbm1tL21lbW9yeS5jOjE5MzE6c3RhdGljIGlubGluZSBpbnQgZG9femFwX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxubW0vbWVtb3J5LmMtMTkzMi1cdFx0XHRcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlLFxuLS1cbm1tL21lbW9yeS5jPTE5OTE9c3RhdGljIGJvb2wgemFwX3B0ZV90YWJsZV9pZl9lbXB0eShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCxcbi0tXG5tbS9tZW1vcnkuYy0yMDI0LVxubW0vbWVtb3J5LmM6MjAyNTpzdGF0aWMgdW5zaWduZWQgbG9uZyB6YXBfcHRlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG5tbS9tZW1vcnkuYy0yMDI2LVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vbWVtb3J5LmMtMjA1OC1cbm1tL21lbW9yeS5jOjIwNTk6XHRcdG5yID0gZG9femFwX3B0ZV9yYW5nZSh0bGIsIHZtYSwgcHRlLCBhZGRyLCBlbmQsIGRldGFpbHMsIHJzcyxcbm1tL21lbW9yeS5jLTIwNjAtXHRcdFx0XHQgICAgICBcdTAwMjZmb3JjZV9mbHVzaCwgXHUwMDI2Zm9yY2VfYnJlYWssIFx1MDAyNmFueV9za2lwcGVkKTtcbi0tXG5tbS9tZW1vcnkuYz0yMTE3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB6YXBfcG1kX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMjE0NC1cdFx0fVxubW0vbWVtb3J5LmM6MjE0NTpcdFx0YWRkciA9IHphcF9wdGVfcmFuZ2UodGxiLCB2bWEsIHBtZCwgYWRkciwgbmV4dCwgZGV0YWlscyk7XG5tbS9tZW1vcnkuYy0yMTQ2LVx0XHRpZiAoYWRkciAhPSBuZXh0KVxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9MjY2ND12b2lkIF9fZm9saW9fbWFya19kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI3MDAtICogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGlzIGRvZXNuJiMzOTt0IHJhY2Ugd2l0aCB0cnVuY2F0aW9uLiAgTW9zdCB3aWxsXG5tbS9wYWdlLXdyaXRlYmFjay5jOjI3MDE6ICogc2ltcGx5IGhvbGQgdGhlIGZvbGlvIGxvY2ssIGJ1dCBlLmcuIHphcF9wdGVfcmFuZ2UoKSBjYWxscyB3aXRoIHRoZVxubW0vcGFnZS13cml0ZWJhY2suYy0yNzAyLSAqIGZvbGlvIG1hcHBlZCBhbmQgdGhlIHB0ZSBsb2NrIGhlbGQsIHdoaWNoIGFsc28gbG9ja3Mgb3V0IHRydW5jYXRpb24uXG4tLVxubW0vcm1hcC5jPTEwMzE9c3RhdGljIGJvb2wgaW52YWxpZF9mb2xpb19yZWZlcmVuY2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYXJnKVxuLS1cbm1tL3JtYXAuYy0xMDM5LVx0ICogb3RoZXIgbWFwcGluZyBpcyBhbHJlYWR5IGdvbmUsIHRoZSB1bm1hcCBwYXRoIHdpbGwgaGF2ZSBzZXQgdGhlXG5tbS9ybWFwLmM6MTA0MDpcdCAqIHJlZmVyZW5jZWQgZmxhZyBvciBhY3RpdmF0ZWQgdGhlIGZvbGlvIGluIHphcF9wdGVfcmFuZ2UoKS5cbm1tL3JtYXAuYy0xMDQxLVx0ICovXG4tLVxubW0vcm1hcC5jPTIxOTg9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjIxMi1cdC8qXG5tbS9ybWFwLmM6MjIxMzpcdCAqIFdoZW4gcmFjaW5nIGFnYWluc3QgZS5nLiB6YXBfcHRlX3JhbmdlKCkgb24gYW5vdGhlciBjcHUsXG5tbS9ybWFwLmMtMjIxNC1cdCAqIGluIGJldHdlZW4gaXRzIHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKCkgYW5kIGZvbGlvX3JlbW92ZV9ybWFwXyooKSxcbi0tXG5tbS9ybWFwLmM9MjQ2Mj1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTI0NzUtXHQvKlxubW0vcm1hcC5jOjI0NzY6XHQgKiBXaGVuIHJhY2luZyBhZ2FpbnN0IGUuZy4gemFwX3B0ZV9yYW5nZSgpIG9uIGFub3RoZXIgY3B1LFxubW0vcm1hcC5jLTI0NzctXHQgKiBpbiBiZXR3ZWVuIGl0cyBwdGVwX2dldF9hbmRfY2xlYXJfZnVsbCgpIGFuZCBmb2xpb19yZW1vdmVfcm1hcF8qKCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTI4CgkJCQkJCQlvdXRwdXQ6IDE3NQoJCQkJCQkJdGhvdWdodHM6IDkwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFzb25pbmcgQWJvdXQgS2V5IFN5bWJvbHMgZm9yIEZ1enppbmcgdGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhlIGNvZGUgaWRlbnRpZmllZCBhIGZldyBwcm9taXNpbmcgY2FuZGlkYXRlczogYHphcF9wdGVfcmFuZ2VgLCBgZG9femFwX3B0ZV9yYW5nZWAsIGB0cnlfdG9fdW5tYXBfb25lYCwgYW5kIHRoaXMgbmV3IGZ1bmN0aW9uLCBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AuIE15IGdvYWwgaXMgdG8gcGlucG9pbnQgdGhlICptb3N0KiByZWxldmFudCBzeW1ib2xzIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nIHRoaXMgcGF0Y2ggZWZmZWN0aXZlbHkuCgpJIHF1aWNrbHkgZGlzbWlzc2VkIGB6YXBfcHRlX3JhbmdlYCBhcyBwb3RlbnRpYWxseSB0b28gYnJvYWRseSB1c2VkOyBpdCYjMzk7cyBsaWtlbHkgY2FsbGVkIGEgbG90LiBUaGF0IGxlYXZlcyBtZSB3aXRoIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCwgc3BlY2lmaWMgdG8gdGhpcyBjaGFuZ2UsIGFuZCBgdHJ5X3RvX3VubWFwX29uZWAsIHRoZSBvbmUgdGhhdCBkZWFscyB3aXRoIHRoZSBiYXRjaGluZyBsb2dpYyBtb2RpZmljYXRpb25zLgoKVGhlbiBJIHJlYWxpemVkIHRoZXJlIHdhcyBhIGNoYW5nZSB0byBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYC4gSSBuZWVkIHRvIGdvIGxvb2sgYXQgdGhpcyBvbmUgc2luY2UgdGhlIHBhdGNoIGFmZmVjdHMgaXQuIENoZWNraW5nIGl0cyBkZWZpbml0aW9uLCBpdCYjMzk7cyBgc3RhdGljIGlubGluZWAsIHNvIHN5emthbGxlciBtaWdodCB0cmFjZSBpdCwgYnV0IGl0JiMzOTtzIGJldHRlciB0byBwcm92aWRlIHRoZSBjYWxsZXIuIFRoYXQgY2FsbGVyIGlzIGB0cnlfdG9fdW5tYXBfb25lYCwgc28gdGhpcyBzb2xpZGlmaWVzIG15IGNob2ljZS4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiBgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRgIGlzIHJlbGV2YW50LiBJdCYjMzk7cyBzdGF0aWMgaW5saW5lIHRvbywgYW5kIGlzIGNhbGxlZCBieSBgemFwX3ByZXNlbnRfZm9saW9fcHRlc2AsIGB6YXBfcHJlc2VudF9wdGVzYCwgYW5kIGB6YXBfbm9ucHJlc2VudF9wdGVzYCwgd2hpY2ggYXJlIGNhbGxlZCBieSBgZG9femFwX3B0ZV9yYW5nZWAuIFNvLCBgZG9femFwX3B0ZV9yYW5nZWAgbWlnaHQgYmUgYW5vdGhlciBnb29kIHN5bWJvbC4gVGhpcyBpcyBhbHNvIHN0YXRpYyBpbmxpbmUsIGJ1dCBpdHMgY2FsbGVyIGB6YXBfcHRlX3JhbmdlYCBpcyBub3QsIHNvIGB6YXBfcHRlX3JhbmdlYCBpcyBhIGdvb2QgY2hvaWNlLgoKTXkgZmluYWwgbGlzdCwgYWZ0ZXIgdGhlc2UgY29uc2lkZXJhdGlvbnMsIGlzOgotIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYAotIGB0cnlfdG9fdW5tYXBfb25lYAotIGB6YXBfcHRlX3JhbmdlYAoKRm9yIGNvbmZpZ3VyYXRpb24sIEkmIzM5O20gY29uZmlkZW50IGFib3V0IGBVU0VSRkFVTFRGRGAgYW5kIGBQVEVfTUFSS0VSX1VGRkRfV1BgLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYFBURV9NQVJLRVJfVUZGRF9XUGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IG5hbWUgaW4gdGhlIEtjb25maWcuIFllcCwgY29uZmlybWVkLgoKSSB3aWxsIG5lZWQgdG8gY29uc2lkZXIgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHNpbmNlIHRoaXMgcGF0Y2ggaW5jbHVkZXMgYmF0Y2hpbmcgY2hhbmdlcyB0aGF0IGNvdWxkIGludm9sdmUgbGFyZ2UgcGFnZXMuIEJ1dCBgVVNFUkZBVUxURkRgIGlzIHRoZSBrZXkgY29uZmlnIGZvciB0aGUgZnVuY3Rpb25hbGl0eS4gYENPTkZJR19NTVVgIGlzIGFscmVhZHkgaW1wbGllZCwgb2YgY291cnNlLgoKVGhlIHBhdGNoIGl0c2VsZiBmb2N1c2VzIG9uIG1vZGlmeWluZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRvIGhhbmRsZSBQVEUgYmF0Y2hpbmcgd2hlbiBzZXR0aW5nIHVzZXJmYXVsdGZkIHdyaXRlLXByb3RlY3Rpb24gbWFya2VycyBkdXJpbmcgdW5tYXAgb3BlcmF0aW9ucy4gSXQgY2hhbmdlcyBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AgdG8gaGFuZGxlIG11bHRpcGxlIFBURXMgYXQgb25jZSBhbmQgcmVtb3ZlcyB0aGUgYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAgcmVzdHJpY3Rpb24sIGFsbG93aW5nIHRoZSBuZXcgYmF0Y2hpbmcgb24gcHJvdGVjdGVkIFZNQXMuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCB3YXJyYW50cyBmdXp6aW5nLgoKTm93LCBJJiMzOTttIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7LAogICAgJiMzNDtQVEVfTUFSS0VSX1VGRkRfV1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzJiMzNDssCiAgICAmIzM0O3RyeV90b191bm1hcF9vbmUmIzM0OywKICAgICYjMzQ7emFwX3B0ZV9yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRvIHN1cHBvcnQgYmF0Y2hpbmcgb2YgUFRFcyB3aGVuIGluc3RhbGxpbmcgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBtYXJrZXJzIGR1cmluZyB1bm1hcCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCB0byBoYW5kbGUgbXVsdGlwbGUgUFRFcyBhdCBvbmNlIGFuZCByZW1vdmVzIHRoZSByZXN0cmljdGlvbiBpbiBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCB0aGF0IHByZXZlbnRlZCBiYXRjaGluZyBmb3IgdXNlcmZhdWx0ZmQtcHJvdGVjdGVkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7LAogICAgJiMzNDtQVEVfTUFSS0VSX1VGRkRfV1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzJiMzNDssCiAgICAmIzM0O3RyeV90b191bm1hcF9vbmUmIzM0OywKICAgICYjMzQ7emFwX3B0ZV9yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRvIHN1cHBvcnQgYmF0Y2hpbmcgb2YgUFRFcyB3aGVuIGluc3RhbGxpbmcgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBtYXJrZXJzIGR1cmluZyB1bm1hcCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCB0byBoYW5kbGUgbXVsdGlwbGUgUFRFcyBhdCBvbmNlIGFuZCByZW1vdmVzIHRoZSByZXN0cmljdGlvbiBpbiBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCB0aGF0IHByZXZlbnRlZCBiYXRjaGluZyBmb3IgdXNlcmZhdWx0ZmQtcHJvdGVjdGVkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6MjQ6MDEuMDMyNzU5NzE3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5OTIxNjg0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlBURV9NQVJLRVJfVUZGRF9XUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNcIixcbiAgICBcInRyeV90b191bm1hcF9vbmVcIixcbiAgICBcInphcF9wdGVfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRvIHN1cHBvcnQgYmF0Y2hpbmcgb2YgUFRFcyB3aGVuIGluc3RhbGxpbmcgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBtYXJrZXJzIGR1cmluZyB1bm1hcCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCB0byBoYW5kbGUgbXVsdGlwbGUgUFRFcyBhdCBvbmNlIGFuZCByZW1vdmVzIHRoZSByZXN0cmljdGlvbiBpbiBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCB0aGF0IHByZXZlbnRlZCBiYXRjaGluZyBmb3IgdXNlcmZhdWx0ZmQtcHJvdGVjdGVkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODoyNDowMS4wMzI3NjYzOTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMDY0NTI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVmNDA3YjUwM2ExMmM5NjVhOTI2Y2IxYTQwOGViMTBkYzdmNzQ0YTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjAgMDg6MjM6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG5pbmRleCBiNWM0ZGMwZjNmZTMyNi4uNjIxYzg2NTNkOGY3ZWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG5AQCAtNTY2LDU5ICs1NjYsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZV9tYXJrZXIgY29weV9wdGVfbWFya2VyKFxcbiBcXHRyZXR1cm4gZHN0bTtcXG4gfVxcbiBcXG4tLypcXG4tICogSWYgdGhpcyBwdGUgaXMgd3ItcHJvdGVjdGVkIGJ5IHVmZmQtd3AgaW4gYW55IGZvcm0sIGFybSB0aGUgc3BlY2lhbCBwdGUgdG9cXG4tICogcmVwbGFjZSBhIG5vbmUgcHRlLiAgTk9URSEgIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gKnB0ZSBpcyBhbHJlYWR5XFxuLSAqIGNsZWFyZWQgc28gd2Ugd2lsbCBuZXZlciBhY2NpZGVudGFsbHkgcmVwbGFjZSBzb21ldGhpbmcgdmFsdWFibGUuICBNZWFud2hpbGVcXG4tICogbm9uZSBwdGUgYWxzbyBtZWFucyB3ZSBhcmUgbm90IGRlbW90aW5nIHRoZSBwdGUgc28gdGxiIGZsdXNoZWQgaXMgbm90IG5lZWRlZC5cXG4tICogRS5nLiwgd2hlbiBwdGUgY2xlYXJlZCB0aGUgY2FsbGVyIHNob3VsZCBoYXZlIHRha2VuIGNhcmUgb2YgdGhlIHRsYiBmbHVzaC5cXG4tICpcXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBwZ3RhYmxlIGxvY2sgaGVsZCBzbyB0aGF0IG5vIHRocmVhZCB3aWxsIHNlZSB0aGUgbm9uZVxcbi0gKiBwdGUsIGFuZCBpZiB0aGV5IHNlZSBpdCwgdGhleSdsbCBmYXVsdCBhbmQgc2VyaWFsaXplIGF0IHRoZSBwZ3RhYmxlIGxvY2suXFxuLSAqXFxuLSAqIFJldHVybnMgdHJ1ZSBpZiBhbiB1ZmZkLXdwIHB0ZSB3YXMgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuXFxuLSAqL1xcbi1zdGF0aWMgaW5saW5lIGJvb2xcXG4tcHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tXFx0XFx0XFx0ICAgICAgcHRlX3QgKnB0ZSwgcHRlX3QgcHRldmFsKVxcbi17XFxuLVxcdGJvb2wgYXJtX3VmZmRfcHRlID0gZmFsc2U7XFxuLVxcbi1cXHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFxuLVxcdC8qIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcHRlIHNob3VsZCBiZSBcXFwiY2xlYXJlZFxcXCIgYmVmb3JlIGNhbGxpbmcgKi9cXG4tXFx0V0FSTl9PTl9PTkNFKCFwdGVfbm9uZShwdGVwX2dldChwdGUpKSk7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBOT1RFOiB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZCgpIGRvZXNuJ3QgbmVlZCB0aGlzIHdob2xlXFxuLVxcdCAqIHRoaW5nLCBiZWNhdXNlIHdoZW4gemFwcGluZyBlaXRoZXIgaXQgbWVhbnMgaXQncyBkcm9wcGluZyB0aGVcXG4tXFx0ICogcGFnZSwgb3IgaW4gVFRVIHdoZXJlIHRoZSBwcmVzZW50IHB0ZSB3aWxsIGJlIHF1aWNrbHkgcmVwbGFjZWRcXG4tXFx0ICogd2l0aCBhIHN3YXAgcHRlLiAgVGhlcmUncyBubyB3YXkgb2YgbGVha2luZyB0aGUgYml0Llxcbi1cXHQgKi9cXG4tXFx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSB8fCAhdXNlcmZhdWx0ZmRfd3Aodm1hKSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXG4tXFx0LyogQSB1ZmZkLXdwIHdyLXByb3RlY3RlZCBub3JtYWwgcHRlICovXFxuLVxcdGlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpIFxcdTAwMjZcXHUwMDI2IHB0ZV91ZmZkKHB0ZXZhbCkpKVxcbi1cXHRcXHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogQSB1ZmZkLXdwIHdyLXByb3RlY3RlZCBzd2FwIHB0ZS4gIE5vdGU6IHRoaXMgc2hvdWxkIGV2ZW4gY292ZXIgYW5cXG4tXFx0ICogZXhpc3RpbmcgcHRlIG1hcmtlciB3aXRoIHVmZmQtd3AgYml0IHNldC5cXG4tXFx0ICovXFxuLVxcdGlmICh1bmxpa2VseShwdGVfc3dwX3VmZmRfYW55KHB0ZXZhbCkpKVxcbi1cXHRcXHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xcbi1cXG4tXFx0aWYgKHVubGlrZWx5KGFybV91ZmZkX3B0ZSkpIHtcXG4tXFx0XFx0c2V0X3B0ZV9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGUsXFxuLVxcdFxcdFxcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBmYWxzZTtcXG4tfVxcbi1cXG4gc3RhdGljIGlubGluZSBib29sIHZtYV9oYXNfcmVjZW5jeShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4ge1xcbiBcXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IChWTV9TRVFfUkVBRCB8IFZNX1JBTkRfUkVBRCkpXFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXFxuaW5kZXggZjI2NDIzZGU0Y2EyODcuLjBmNDljZmY2N2EyYjg3IDEwMDY0NFxcbi0tLSBhL21tL2ludGVybmFsLmhcXG4rKysgYi9tbS9pbnRlcm5hbC5oXFxuQEAgLTI3Niw2ICsyNzYsMTAgQEAgdm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB1bm1hcF9kZXNjICp1bm1hcCk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX01NVVxcbiBcXG4rYm9vbCBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcHRlcyk7XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2Fub25fdm1hKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXFxuIHtcXG4gXFx0YXRvbWljX2luYyhcXHUwMDI2YW5vbl92bWEtXFx1MDAzZXJlZmNvdW50KTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xcbmluZGV4IGQ1ZTg3NjI0ZjY5MjA1Li5kMmYxNGJhMjI2MWNkMCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnkuY1xcbisrKyBiL21tL21lbW9yeS5jXFxuQEAgLTE2NzUsNDAgKzE2NzUsODkgQEAgc3RhdGljIGlubGluZSBib29sIHphcF9kcm9wX21hcmtlcnMoc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKVxcbiBcXHRyZXR1cm4gZGV0YWlscy1cXHUwMDNlemFwX2ZsYWdzIFxcdTAwMjYgWkFQX0ZMQUdfRFJPUF9NQVJLRVI7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHdlJ2xsIHJlcGxhY2UgdGhlIG5vbmUgcHRlIHdpdGggYW4gdWZmZC13cFxcbi0gKiBzd2FwIHNwZWNpYWwgcHRlIG1hcmtlciB3aGVuIG5lY2Vzc2FyeS4gTXVzdCBiZSB3aXRoIHRoZSBwZ3RhYmxlIGxvY2sgaGVsZC5cXG4rLyoqXFxuKyAqIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMgLSBpbnN0YWxsIHVmZmQtd3AgbWFya2VycyBhZnRlciBjbGVhcmluZyBQVEVzXFxuKyAqIEB2bWE6IFRoZSBWTUEgdGhlIHBhZ2VzIGFyZSBtYXBwZWQgaW50by5cXG4rICogQGFkZHI6IEFkZHJlc3MgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhpcyBiYXRjaCBpcyBtYXBwZWQgYXQuXFxuKyAqIEBwdGVwOiBQYWdlIHRhYmxlIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBlbnRyeSBvZiB0aGlzIGJhdGNoLlxcbisgKiBAcHRlOiBPbGQgdmFsdWUgb2YgdGhlIGVudHJ5IHBvaW50ZWQgdG8gYnkgQHB0ZXAuXFxuKyAqIEBucl9wdGVzOiBOdW1iZXIgb2YgZW50cmllcyB0byBpbnN0YWxsLlxcbisgKlxcbisgKiBJZiB0aGUgUFRFcyB3ZXJlIHdyaXRlLXByb3RlY3RlZCBieSB1ZmZkLXdwIGluIGFueSBmb3JtLCBhcm0gc3BlY2lhbCBQVEVzXFxuKyAqIHRvIHJlcGxhY2Ugbm9uZSBQVEVzLiBOT1RFISBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBQVEVzIGFyZVxcbisgKiBhbHJlYWR5IGNsZWFyZWQgc28gd2Ugd2lsbCBuZXZlciBhY2NpZGVudGFsbHkgcmVwbGFjZSBzb21ldGhpbmcgdmFsdWFibGUuXFxuKyAqIE1lYW53aGlsZSBub25lIFBURXMgYWxzbyBtZWFuIHdlIGFyZSBub3QgZGVtb3RpbmcgdGhlIFBURXMgc28gYSBUTEIgZmx1c2ggaXNcXG4rICogbm90IG5lZWRlZC4gRS5nLiwgd2hlbiB0aGUgUFRFcyB3ZXJlIGNsZWFyZWQsIHRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgdGFrZW5cXG4rICogY2FyZSBvZiB0aGUgVExCIGZsdXNoLlxcbisgKlxcbisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBwYWdlIHRhYmxlIGxvY2sgaGVsZCBzbyB0aGF0IG5vIHRocmVhZCB3aWxsIHNlZSB0aGVcXG4rICogbm9uZSBQVEVzLCBhbmQgaWYgdGhleSBzZWUgdGhlbSwgdGhleSdsbCBmYXVsdCBhbmQgc2VyaWFsaXplIGF0IHRoZSBwYWdlIHRhYmxlXFxuKyAqIGxvY2suXFxuICAqXFxuLSAqIFJldHVybnMgdHJ1ZSBpZiB1ZmZkLXdwIHB0ZXMgd2FzIGluc3RhbGxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxcbisgKiBSZXR1cm5zIHRydWUgaWYgdWZmZC13cCBQVEVzIHdlcmUgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuXFxuICAqL1xcbi1zdGF0aWMgaW5saW5lIGJvb2xcXG4temFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSwgaW50IG5yLFxcbi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMsIHB0ZV90IHB0ZXZhbClcXG4rYm9vbCBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcHRlcylcXG4ge1xcbi1cXHRib29sIHdhc19pbnN0YWxsZWQgPSBmYWxzZTtcXG4rXFx0Ym9vbCBhcm1fdWZmZF9wdGUgPSBmYWxzZTtcXG4gXFxuIFxcdGlmICghdWZmZF9zdXBwb3J0c193cF9tYXJrZXIoKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0LyogWmFwIG9uIGFub255bW91cyBhbHdheXMgbWVhbnMgZHJvcHBpbmcgZXZlcnl0aGluZyAqL1xcbi1cXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKVxcbitcXHQvKiBUaGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHB0ZSBzaG91bGQgYmUgXFxcImNsZWFyZWRcXFwiIGJlZm9yZSBjYWxsaW5nICovXFxuK1xcdFdBUk5fT05fT05DRSghcHRlX25vbmUocHRlcF9nZXQocHRlcCkpKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE5PVEU6IHVzZXJmYXVsdGZkX3dwX3VucG9wdWxhdGVkKCkgZG9lc24ndCBuZWVkIHRoaXMgd2hvbGVcXG4rXFx0ICogdGhpbmcsIGJlY2F1c2Ugd2hlbiB6YXBwaW5nIGVpdGhlciBpdCBtZWFucyBpdCdzIGRyb3BwaW5nIHRoZVxcbitcXHQgKiBwYWdlLCBvciBpbiBUVFUgd2hlcmUgdGhlIHByZXNlbnQgcHRlIHdpbGwgYmUgcXVpY2tseSByZXBsYWNlZFxcbitcXHQgKiB3aXRoIGEgc3dhcCBwdGUuICBUaGVyZSdzIG5vIHdheSBvZiBsZWFraW5nIHRoZSBiaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICF1c2VyZmF1bHRmZF93cCh2bWEpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRpZiAoemFwX2Ryb3BfbWFya2VycyhkZXRhaWxzKSlcXG4rXFx0LyogQSB1ZmZkLXdwIHdyLXByb3RlY3RlZCBub3JtYWwgcHRlICovXFxuK1xcdGlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGUpIFxcdTAwMjZcXHUwMDI2IHB0ZV91ZmZkKHB0ZSkpKVxcbitcXHRcXHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQSB1ZmZkLXdwIHdyLXByb3RlY3RlZCBzd2FwIHB0ZS4gIE5vdGU6IHRoaXMgc2hvdWxkIGV2ZW4gY292ZXIgYW5cXG4rXFx0ICogZXhpc3RpbmcgcHRlIG1hcmtlciB3aXRoIHVmZmQtd3AgYml0IHNldC5cXG4rXFx0ICovXFxuK1xcdGlmICh1bmxpa2VseShwdGVfc3dwX3VmZmRfYW55KHB0ZSkpKVxcbitcXHRcXHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xcbitcXG4rXFx0aWYgKGxpa2VseSghYXJtX3VmZmRfcHRlKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0Zm9yICg7Oykge1xcbi1cXHRcXHQvKiB0aGUgUEZOIGluIHRoZSBQVEUgaXMgaXJyZWxldmFudC4gKi9cXG4tXFx0XFx0aWYgKHB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkciwgcHRlLCBwdGV2YWwpKVxcbi1cXHRcXHRcXHR3YXNfaW5zdGFsbGVkID0gdHJ1ZTtcXG4tXFx0XFx0aWYgKC0tbnIgPT0gMClcXG4rXFx0XFx0c2V0X3B0ZV9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLFxcbitcXHRcXHRcXHQgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7XFxuK1xcdFxcdGlmICgtLW5yX3B0ZXMgPT0gMClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdHB0ZSsrO1xcbitcXHRcXHRwdGVwKys7XFxuIFxcdFxcdGFkZHIgKz0gUEFHRV9TSVpFO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gd2FzX2luc3RhbGxlZDtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHdlJ2xsIHJlcGxhY2UgdGhlIG5vbmUgcHRlIHdpdGggYW4gdWZmZC13cFxcbisgKiBzd2FwIHNwZWNpYWwgcHRlIG1hcmtlciB3aGVuIG5lY2Vzc2FyeS4gTXVzdCBiZSB3aXRoIHRoZSBwZ3RhYmxlIGxvY2sgaGVsZC5cXG4rICpcXG4rICogUmV0dXJucyB0cnVlIGlmIHVmZmQtd3AgcHRlcyB3YXMgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2xcXG4remFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuK1xcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSwgaW50IG5yLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMsIHB0ZV90IHB0ZXZhbClcXG4re1xcbitcXHRpZiAoemFwX2Ryb3BfbWFya2VycyhkZXRhaWxzKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCwgbnIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgemFwX3ByZXNlbnRfZm9saW9fcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcXG5pbmRleCA3M2MyZmUyZDE5NDYyNS4uNTZlYWRkZmM2MTBiMWMgMTAwNjQ0XFxuLS0tIGEvbW0vcm1hcC5jXFxuKysrIGIvbW0vcm1hcC5jXFxuQEAgLTE5NjgsOSArMTk2OCw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRpZiAocHRlX3VudXNlZChwdGUpKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuLVxcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcXG4tXFx0XFx0cmV0dXJuIDE7XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBJZiB1bm1hcCBmYWlscywgd2UgbmVlZCB0byByZXN0b3JlIHRoZSBwdGVzLiBUbyBhdm9pZCBhY2NpZGVudGFsbHlcXG4gXFx0ICogdXBncmFkaW5nIHdyaXRlIHBlcm1pc3Npb25zIGZvciBwdGVzIHRoYXQgd2VyZSBub3Qgb3JpZ2luYWxseVxcbkBAIC0yMzQ4LDcgKzIzNDUsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHQgKiB3ZSBtYXkgd2FudCB0byByZXBsYWNlIGEgbm9uZSBwdGUgd2l0aCBhIG1hcmtlciBwdGUgaWZcXG4gXFx0XFx0ICogaXQncyBmaWxlLWJhY2tlZCwgc28gd2UgZG9uJ3QgbG9zZSB0aGUgdHJhY2tpbmcgaW5mby5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XFxuK1xcdFxcdGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLFxcbitcXHRcXHRcXHRcXHRcXHQgIG5yX3BhZ2VzKTtcXG4gXFxuIFxcdFxcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXFxuIFxcdFxcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA4OjI0OjAxLjg1NDgyMzQ0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExNzAwODMzMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlBURV9NQVJLRVJfVUZGRF9XUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNcIixcbiAgICBcInRyeV90b191bm1hcF9vbmVcIixcbiAgICBcInphcF9wdGVfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRvIHN1cHBvcnQgYmF0Y2hpbmcgb2YgUFRFcyB3aGVuIGluc3RhbGxpbmcgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBtYXJrZXJzIGR1cmluZyB1bm1hcCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCB0byBoYW5kbGUgbXVsdGlwbGUgUFRFcyBhdCBvbmNlIGFuZCByZW1vdmVzIHRoZSByZXN0cmljdGlvbiBpbiBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCB0aGF0IHByZXZlbnRlZCBiYXRjaGluZyBmb3IgdXNlcmZhdWx0ZmQtcHJvdGVjdGVkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVmNDA3YjUwM2ExMmM5NjVhOTI2Y2IxYTQwOGViMTBkYzdmNzQ0YTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAwODoyMzo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5pbmRleCBiNWM0ZGMwZjNmZTMyNi4uNjIxYzg2NTNkOGY3ZWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtNTY2LDU5ICs1NjYsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZV9tYXJrZXIgY29weV9wdGVfbWFya2VyKFxuIFx0cmV0dXJuIGRzdG07XG4gfVxuIFxuLS8qXG4tICogSWYgdGhpcyBwdGUgaXMgd3ItcHJvdGVjdGVkIGJ5IHVmZmQtd3AgaW4gYW55IGZvcm0sIGFybSB0aGUgc3BlY2lhbCBwdGUgdG9cbi0gKiByZXBsYWNlIGEgbm9uZSBwdGUuICBOT1RFISAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiAqcHRlIGlzIGFscmVhZHlcbi0gKiBjbGVhcmVkIHNvIHdlIHdpbGwgbmV2ZXIgYWNjaWRlbnRhbGx5IHJlcGxhY2Ugc29tZXRoaW5nIHZhbHVhYmxlLiAgTWVhbndoaWxlXG4tICogbm9uZSBwdGUgYWxzbyBtZWFucyB3ZSBhcmUgbm90IGRlbW90aW5nIHRoZSBwdGUgc28gdGxiIGZsdXNoZWQgaXMgbm90IG5lZWRlZC5cbi0gKiBFLmcuLCB3aGVuIHB0ZSBjbGVhcmVkIHRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgdGFrZW4gY2FyZSBvZiB0aGUgdGxiIGZsdXNoLlxuLSAqXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBwZ3RhYmxlIGxvY2sgaGVsZCBzbyB0aGF0IG5vIHRocmVhZCB3aWxsIHNlZSB0aGUgbm9uZVxuLSAqIHB0ZSwgYW5kIGlmIHRoZXkgc2VlIGl0LCB0aGV5J2xsIGZhdWx0IGFuZCBzZXJpYWxpemUgYXQgdGhlIHBndGFibGUgbG9jay5cbi0gKlxuLSAqIFJldHVybnMgdHJ1ZSBpZiBhbiB1ZmZkLXdwIHB0ZSB3YXMgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuXG4tICovXG4tc3RhdGljIGlubGluZSBib29sXG4tcHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgICBwdGVfdCAqcHRlLCBwdGVfdCBwdGV2YWwpXG4te1xuLVx0Ym9vbCBhcm1fdWZmZF9wdGUgPSBmYWxzZTtcbi1cbi1cdGlmICghdWZmZF9zdXBwb3J0c193cF9tYXJrZXIoKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0LyogVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBwdGUgc2hvdWxkIGJlIFwiY2xlYXJlZFwiIGJlZm9yZSBjYWxsaW5nICovXG4tXHRXQVJOX09OX09OQ0UoIXB0ZV9ub25lKHB0ZXBfZ2V0KHB0ZSkpKTtcbi1cbi1cdC8qXG4tXHQgKiBOT1RFOiB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZCgpIGRvZXNuJ3QgbmVlZCB0aGlzIHdob2xlXG4tXHQgKiB0aGluZywgYmVjYXVzZSB3aGVuIHphcHBpbmcgZWl0aGVyIGl0IG1lYW5zIGl0J3MgZHJvcHBpbmcgdGhlXG4tXHQgKiBwYWdlLCBvciBpbiBUVFUgd2hlcmUgdGhlIHByZXNlbnQgcHRlIHdpbGwgYmUgcXVpY2tseSByZXBsYWNlZFxuLVx0ICogd2l0aCBhIHN3YXAgcHRlLiAgVGhlcmUncyBubyB3YXkgb2YgbGVha2luZyB0aGUgYml0LlxuLVx0ICovXG4tXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICF1c2VyZmF1bHRmZF93cCh2bWEpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHQvKiBBIHVmZmQtd3Agd3ItcHJvdGVjdGVkIG5vcm1hbCBwdGUgKi9cbi1cdGlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpIFx1MDAyNlx1MDAyNiBwdGVfdWZmZChwdGV2YWwpKSlcbi1cdFx0YXJtX3VmZmRfcHRlID0gdHJ1ZTtcbi1cbi1cdC8qXG4tXHQgKiBBIHVmZmQtd3Agd3ItcHJvdGVjdGVkIHN3YXAgcHRlLiAgTm90ZTogdGhpcyBzaG91bGQgZXZlbiBjb3ZlciBhblxuLVx0ICogZXhpc3RpbmcgcHRlIG1hcmtlciB3aXRoIHVmZmQtd3AgYml0IHNldC5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KHB0ZV9zd3BfdWZmZF9hbnkocHRldmFsKSkpXG4tXHRcdGFybV91ZmZkX3B0ZSA9IHRydWU7XG4tXG4tXHRpZiAodW5saWtlbHkoYXJtX3VmZmRfcHRlKSkge1xuLVx0XHRzZXRfcHRlX2F0KHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlLFxuLVx0XHRcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaGFzX3JlY2VuY3koY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX1NFUV9SRUFEIHwgVk1fUkFORF9SRUFEKSlcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggZjI2NDIzZGU0Y2EyODcuLjBmNDljZmY2N2EyYjg3IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTI3Niw2ICsyNzYsMTAgQEAgdm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB1bm1hcF9kZXNjICp1bm1hcCk7XG4gXG4gI2lmZGVmIENPTkZJR19NTVVcbiBcbitib29sIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSxcbitcdFx0dW5zaWduZWQgbG9uZyBucl9wdGVzKTtcbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2Fub25fdm1hKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXG4ge1xuIFx0YXRvbWljX2luYyhcdTAwMjZhbm9uX3ZtYS1cdTAwM2VyZWZjb3VudCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZDVlODc2MjRmNjkyMDUuLmQyZjE0YmEyMjYxY2QwIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtMTY3NSw0MCArMTY3NSw4OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemFwX2Ryb3BfbWFya2VycyhzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXG4gXHRyZXR1cm4gZGV0YWlscy1cdTAwM2V6YXBfZmxhZ3MgXHUwMDI2IFpBUF9GTEFHX0RST1BfTUFSS0VSO1xuIH1cbiBcbi0vKlxuLSAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHdlJ2xsIHJlcGxhY2UgdGhlIG5vbmUgcHRlIHdpdGggYW4gdWZmZC13cFxuLSAqIHN3YXAgc3BlY2lhbCBwdGUgbWFya2VyIHdoZW4gbmVjZXNzYXJ5LiBNdXN0IGJlIHdpdGggdGhlIHBndGFibGUgbG9jayBoZWxkLlxuKy8qKlxuKyAqIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMgLSBpbnN0YWxsIHVmZmQtd3AgbWFya2VycyBhZnRlciBjbGVhcmluZyBQVEVzXG4rICogQHZtYTogVGhlIFZNQSB0aGUgcGFnZXMgYXJlIG1hcHBlZCBpbnRvLlxuKyAqIEBhZGRyOiBBZGRyZXNzIHRoZSBmaXJzdCBwYWdlIG9mIHRoaXMgYmF0Y2ggaXMgbWFwcGVkIGF0LlxuKyAqIEBwdGVwOiBQYWdlIHRhYmxlIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBlbnRyeSBvZiB0aGlzIGJhdGNoLlxuKyAqIEBwdGU6IE9sZCB2YWx1ZSBvZiB0aGUgZW50cnkgcG9pbnRlZCB0byBieSBAcHRlcC5cbisgKiBAbnJfcHRlczogTnVtYmVyIG9mIGVudHJpZXMgdG8gaW5zdGFsbC5cbisgKlxuKyAqIElmIHRoZSBQVEVzIHdlcmUgd3JpdGUtcHJvdGVjdGVkIGJ5IHVmZmQtd3AgaW4gYW55IGZvcm0sIGFybSBzcGVjaWFsIFBURXNcbisgKiB0byByZXBsYWNlIG5vbmUgUFRFcy4gTk9URSEgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgUFRFcyBhcmVcbisgKiBhbHJlYWR5IGNsZWFyZWQgc28gd2Ugd2lsbCBuZXZlciBhY2NpZGVudGFsbHkgcmVwbGFjZSBzb21ldGhpbmcgdmFsdWFibGUuXG4rICogTWVhbndoaWxlIG5vbmUgUFRFcyBhbHNvIG1lYW4gd2UgYXJlIG5vdCBkZW1vdGluZyB0aGUgUFRFcyBzbyBhIFRMQiBmbHVzaCBpc1xuKyAqIG5vdCBuZWVkZWQuIEUuZy4sIHdoZW4gdGhlIFBURXMgd2VyZSBjbGVhcmVkLCB0aGUgY2FsbGVyIHNob3VsZCBoYXZlIHRha2VuXG4rICogY2FyZSBvZiB0aGUgVExCIGZsdXNoLlxuKyAqXG4rICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgcGFnZSB0YWJsZSBsb2NrIGhlbGQgc28gdGhhdCBubyB0aHJlYWQgd2lsbCBzZWUgdGhlXG4rICogbm9uZSBQVEVzLCBhbmQgaWYgdGhleSBzZWUgdGhlbSwgdGhleSdsbCBmYXVsdCBhbmQgc2VyaWFsaXplIGF0IHRoZSBwYWdlIHRhYmxlXG4rICogbG9jay5cbiAgKlxuLSAqIFJldHVybnMgdHJ1ZSBpZiB1ZmZkLXdwIHB0ZXMgd2FzIGluc3RhbGxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuKyAqIFJldHVybnMgdHJ1ZSBpZiB1ZmZkLXdwIFBURXMgd2VyZSBpbnN0YWxsZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIGJvb2xcbi16YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGUsIGludCBucixcbi1cdFx0XHQgICAgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMsIHB0ZV90IHB0ZXZhbClcbitib29sIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSxcbitcdFx0dW5zaWduZWQgbG9uZyBucl9wdGVzKVxuIHtcbi1cdGJvb2wgd2FzX2luc3RhbGxlZCA9IGZhbHNlO1xuK1x0Ym9vbCBhcm1fdWZmZF9wdGUgPSBmYWxzZTtcbiBcbiBcdGlmICghdWZmZF9zdXBwb3J0c193cF9tYXJrZXIoKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0LyogWmFwIG9uIGFub255bW91cyBhbHdheXMgbWVhbnMgZHJvcHBpbmcgZXZlcnl0aGluZyAqL1xuLVx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSlcbitcdC8qIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcHRlIHNob3VsZCBiZSBcImNsZWFyZWRcIiBiZWZvcmUgY2FsbGluZyAqL1xuK1x0V0FSTl9PTl9PTkNFKCFwdGVfbm9uZShwdGVwX2dldChwdGVwKSkpO1xuK1xuK1x0LypcbitcdCAqIE5PVEU6IHVzZXJmYXVsdGZkX3dwX3VucG9wdWxhdGVkKCkgZG9lc24ndCBuZWVkIHRoaXMgd2hvbGVcbitcdCAqIHRoaW5nLCBiZWNhdXNlIHdoZW4gemFwcGluZyBlaXRoZXIgaXQgbWVhbnMgaXQncyBkcm9wcGluZyB0aGVcbitcdCAqIHBhZ2UsIG9yIGluIFRUVSB3aGVyZSB0aGUgcHJlc2VudCBwdGUgd2lsbCBiZSBxdWlja2x5IHJlcGxhY2VkXG4rXHQgKiB3aXRoIGEgc3dhcCBwdGUuICBUaGVyZSdzIG5vIHdheSBvZiBsZWFraW5nIHRoZSBiaXQuXG4rXHQgKi9cbitcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgIXVzZXJmYXVsdGZkX3dwKHZtYSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmICh6YXBfZHJvcF9tYXJrZXJzKGRldGFpbHMpKVxuK1x0LyogQSB1ZmZkLXdwIHdyLXByb3RlY3RlZCBub3JtYWwgcHRlICovXG4rXHRpZiAodW5saWtlbHkocHRlX3ByZXNlbnQocHRlKSBcdTAwMjZcdTAwMjYgcHRlX3VmZmQocHRlKSkpXG4rXHRcdGFybV91ZmZkX3B0ZSA9IHRydWU7XG4rXG4rXHQvKlxuK1x0ICogQSB1ZmZkLXdwIHdyLXByb3RlY3RlZCBzd2FwIHB0ZS4gIE5vdGU6IHRoaXMgc2hvdWxkIGV2ZW4gY292ZXIgYW5cbitcdCAqIGV4aXN0aW5nIHB0ZSBtYXJrZXIgd2l0aCB1ZmZkLXdwIGJpdCBzZXQuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShwdGVfc3dwX3VmZmRfYW55KHB0ZSkpKVxuK1x0XHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xuK1xuK1x0aWYgKGxpa2VseSghYXJtX3VmZmRfcHRlKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Zm9yICg7Oykge1xuLVx0XHQvKiB0aGUgUEZOIGluIHRoZSBQVEUgaXMgaXJyZWxldmFudC4gKi9cbi1cdFx0aWYgKHB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkciwgcHRlLCBwdGV2YWwpKVxuLVx0XHRcdHdhc19pbnN0YWxsZWQgPSB0cnVlO1xuLVx0XHRpZiAoLS1uciA9PSAwKVxuK1x0XHRzZXRfcHRlX2F0KHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlcCxcbitcdFx0XHQgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7XG4rXHRcdGlmICgtLW5yX3B0ZXMgPT0gMClcbiBcdFx0XHRicmVhaztcbi1cdFx0cHRlKys7XG4rXHRcdHB0ZXArKztcbiBcdFx0YWRkciArPSBQQUdFX1NJWkU7XG4gXHR9XG4gXG4tXHRyZXR1cm4gd2FzX2luc3RhbGxlZDtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKlxuKyAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHdlJ2xsIHJlcGxhY2UgdGhlIG5vbmUgcHRlIHdpdGggYW4gdWZmZC13cFxuKyAqIHN3YXAgc3BlY2lhbCBwdGUgbWFya2VyIHdoZW4gbmVjZXNzYXJ5LiBNdXN0IGJlIHdpdGggdGhlIHBndGFibGUgbG9jayBoZWxkLlxuKyAqXG4rICogUmV0dXJucyB0cnVlIGlmIHVmZmQtd3AgcHRlcyB3YXMgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuXG4rICovXG4rc3RhdGljIGlubGluZSBib29sXG4remFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBpbnQgbnIsXG4rXHRcdFx0ICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzLCBwdGVfdCBwdGV2YWwpXG4re1xuK1x0aWYgKHphcF9kcm9wX21hcmtlcnMoZGV0YWlscykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHZtYSwgYWRkciwgcHRlLCBwdGV2YWwsIG5yKTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHphcF9wcmVzZW50X2ZvbGlvX3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IDczYzJmZTJkMTk0NjI1Li41NmVhZGRmYzYxMGIxYyAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuKysrIGIvbW0vcm1hcC5jXG5AQCAtMTk2OCw5ICsxOTY4LDYgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRpZiAocHRlX3VudXNlZChwdGUpKVxuIFx0XHRyZXR1cm4gMTtcbiBcbi1cdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcbi1cdFx0cmV0dXJuIDE7XG4tXG4gXHQvKlxuIFx0ICogSWYgdW5tYXAgZmFpbHMsIHdlIG5lZWQgdG8gcmVzdG9yZSB0aGUgcHRlcy4gVG8gYXZvaWQgYWNjaWRlbnRhbGx5XG4gXHQgKiB1cGdyYWRpbmcgd3JpdGUgcGVybWlzc2lvbnMgZm9yIHB0ZXMgdGhhdCB3ZXJlIG5vdCBvcmlnaW5hbGx5XG5AQCAtMjM0OCw3ICsyMzQ1LDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0ICogd2UgbWF5IHdhbnQgdG8gcmVwbGFjZSBhIG5vbmUgcHRlIHdpdGggYSBtYXJrZXIgcHRlIGlmXG4gXHRcdCAqIGl0J3MgZmlsZS1iYWNrZWQsIHNvIHdlIGRvbid0IGxvc2UgdGhlIHRyYWNraW5nIGluZm8uXG4gXHRcdCAqL1xuLVx0XHRwdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCh2bWEsIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuK1x0XHRjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCxcbitcdFx0XHRcdFx0ICBucl9wYWdlcyk7XG4gXG4gXHRcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXG4gXHRcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODoyNDowMS44NTQ4Mjc5OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMDc2NzM4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyByZWZhY3RvcmluZyBob3cgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBpcyBoYW5kbGVkIGR1cmluZyBwYWdlIHVubWFwcGluZy4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIGludHJvZHVjZWQgdGhpcyBuZXcgZnVuY3Rpb24sIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCwgYW5kIGl0J3MgcmVwbGFjaW5nIGBwdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZGAuIFRoZSBtYWluIGltcGFjdCBpcyB3aXRoaW4gYHRyeV90b191bm1hcF9vbmVgIHdoZXJlIHRoZSBuZXcgYmF0Y2gtb3JpZW50ZWQgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLiBFc3NlbnRpYWxseSwgaXQgbm93IHVubWFwcyBiYXRjaGVzIG9mIHBhZ2VzLCB3aGljaCBpcyBhIGtleSBjaGFuZ2UuXG5cbldhaXQsIGxvb2tpbmcgYXQgYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAgaW4gYG1tL3JtYXAuY2AgaXMgYWxzbyBtb2RpZmllZCwgd2hlcmUgYSBjaGVjayBgdXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSlgIGlzIHJlbW92ZWQuIFRoaXMgbWVhbnMgYHRyeV90b191bm1hcF9vbmVgIGNhbiBub3cgdW5tYXAgYSBiYXRjaCBvZiBQVEVzLCBhbmQgaW5zdGFsbCB1ZmZkLXdwIG1hcmtlcnMgdXNpbmcgdGhlIG5ldyBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AsIGV2ZW4gaWYgdGhlIFZNQSBpcyB1c2VyZmF1bHRmZC1wcm90ZWN0ZWQuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCdzIHdpZGVuaW5nIHRoZSBzY29wZSBvZiB0aGUgdWZmZCB3cml0ZSBwcm90ZWN0aW9uIGFuZCBvcHRpbWl6aW5nIHRoZSB1bm1hcHBpbmcgcHJvY2Vzcy5cblxuVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIHRoZSBybWFwIGFuZCB1c2VyZmF1bHRmZCBhcmVhcy4gVGhpcyBuZWVkcyBjYXJlZnVsIGF0dGVudGlvbiwgYW5kIGZ1enppbmcgaXMgZGVmaW5pdGVseSBpbiBvcmRlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgc3ltYm9scyB0byB0YXJnZXQgZm9yIGEgZ29vZCBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5JJ20gcHJldHR5IGNlcnRhaW4gYENPTkZJR19VU0VSRkFVTFRGRGAgaXMgcmVsZXZhbnQsIGFsb25nIHdpdGggYENPTkZJR19NTVVgIGdpdmVuIHRoZSB0b3VjaGVkIGZpbGVzLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoaXMsIGJ1dCBpdCBzZWVtcyBjb3JyZWN0LiBMZXQncyBzZWUgaWYgdGhpcyBpcyBhbGwgdGhhdCdzIG5lZWRlZC4gRm9yIGZvY3VzIHN5bWJvbHMsIEknbSB0aGlua2luZyBJIHNob3VsZCBwcmlvcml0aXplIGB0cnlfdG9fdW5tYXBfb25lYCwgYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgLCBgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRgLCBhbmQgYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAuXG5cbkxldCdzIHVzZSBgZ3JlcHBlcmAgdG8gY29uZmlybSB0aGF0IGBVU0VSRkFVTFRGRGAgaXMgdGhlIGNvcnJlY3QgY29uZmlnIGJ5IGNoZWNraW5nIGZvciByZWxldmFudCBzeW1ib2xzIGxpa2UgYHVzZXJmYXVsdGZkX3Byb3RlY3RlZGAgYW5kIGB1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODoyNDowOC45NjI1MDUxNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA5ODM2Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJmYXVsdGZkX3Byb3RlY3RlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0yMjI9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3J3cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTIyNi1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyMjc6c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3Byb3RlY3RlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yMjgte1xcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MzY1PXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9yd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0zNjktXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MzcwOnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9wcm90ZWN0ZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMzcxLXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTgwOT1zdGF0aWMgdm9pZCBjb3B5X2h1Z2Vfbm9uX3ByZXNlbnRfcG1kKFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xODU5LVxcdHBndGFibGVfdHJhbnNfaHVnZV9kZXBvc2l0KGRzdF9tbSwgZHN0X3BtZCwgcGd0YWJsZSk7XFxubW0vaHVnZV9tZW1vcnkuYzoxODYwOlxcdGlmICghdXNlcmZhdWx0ZmRfcHJvdGVjdGVkKGRzdF92bWEpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTg2MS1cXHRcXHRwbWQgPSBwbWRfc3dwX2NsZWFyX3VmZmQocG1kKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTg2NT1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTk1Ni1cXHQvKiBTZWUgX19jb3B5X3ByZXNlbnRfcHRlcygpOiByZXN0b3JlIGFjY2Vzc2libGUgcHJvdGVjdGlvbi4gKi9cXG5tbS9odWdlX21lbW9yeS5jOjE5NTc6XFx0aWYgKCF1c2VyZmF1bHRmZF9wcm90ZWN0ZWQoZHN0X3ZtYSkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTE5NTgtXFx0XFx0aWYgKHVzZXJmYXVsdGZkX3J3cChzcmNfdm1hKSBcXHUwMDI2XFx1MDAyNiBwbWRfdWZmZChwbWQpKVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ4Nzk9aHVnZXRsYl9pbnN0YWxsX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vaHVnZXRsYi5jLTQ4ODUtXFx0aHVnZXRsYl9hZGRfbmV3X2Fub25fcm1hcChuZXdfZm9saW8sIHZtYSwgYWRkcik7XFxubW0vaHVnZXRsYi5jOjQ4ODY6XFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpIFxcdTAwMjZcXHUwMDI2IGh1Z2VfcHRlX3VmZmQob2xkKSkge1xcbm1tL2h1Z2V0bGIuYy00ODg3LVxcdFxcdG5ld3B0ZSA9IGh1Z2VfcHRlX21rdWZmZChuZXdwdGUpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTQ5MDE9aW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vaHVnZXRsYi5jLTQ5ODUtXFx0XFx0XFx0XFx0ZW50cnkgPSBzd3BfZW50cnlfdG9fcHRlKHNvZnRsZWFmKTtcXG5tbS9odWdldGxiLmM6NDk4NjpcXHRcXHRcXHRcXHRpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHNyY192bWEpIFxcdTAwMjZcXHUwMDI2IHVmZmQpXFxubW0vaHVnZXRsYi5jLTQ5ODctXFx0XFx0XFx0XFx0XFx0ZW50cnkgPSBwdGVfc3dwX21rdWZmZChlbnRyeSk7XFxuLS1cXG5tbS9odWdldGxiLmMtNDk4OS1cXHRcXHRcXHR9XFxubW0vaHVnZXRsYi5jOjQ5OTA6XFx0XFx0XFx0aWYgKCF1c2VyZmF1bHRmZF9wcm90ZWN0ZWQoZHN0X3ZtYSkpXFxubW0vaHVnZXRsYi5jLTQ5OTEtXFx0XFx0XFx0XFx0ZW50cnkgPSBwdGVfc3dwX2NsZWFyX3VmZmQoZW50cnkpO1xcbi0tXFxubW0vaHVnZXRsYi5jLTUwNTUtXFx0XFx0XFx0LyogU2VlIF9fY29weV9wcmVzZW50X3B0ZXMoKTogcmVzdG9yZSBhY2Nlc3NpYmxlIHByb3RlY3Rpb24uICovXFxubW0vaHVnZXRsYi5jOjUwNTY6XFx0XFx0XFx0aWYgKCF1c2VyZmF1bHRmZF9wcm90ZWN0ZWQoZHN0X3ZtYSkpIHtcXG5tbS9odWdldGxiLmMtNTA1Ny1cXHRcXHRcXHRcXHRpZiAodXNlcmZhdWx0ZmRfcndwKHNyY192bWEpIFxcdTAwMjZcXHUwMDI2IGh1Z2VfcHRlX3VmZmQoZW50cnkpKSB7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTg1NT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xODk3LVxcdCAqL1xcbm1tL2todWdlcGFnZWQuYzoxODk4OlxcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcXG5tbS9raHVnZXBhZ2VkLmMtMTg5OS1cXHRcXHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMTAwPXN0YXRpYyBib29sIGZpbGVfYmFja2VkX3ZtYV9pc19yZXRyYWN0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMTE3LVxcdCAqL1xcbm1tL2todWdlcGFnZWQuYzoyMTE4OlxcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcXG5tbS9raHVnZXBhZ2VkLmMtMjExOS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9tZW1vcnkuYz0xMDAxPWNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXFxuLS1cXG5tbS9tZW1vcnkuYy0xMDk2LVxcdH1cXG5tbS9tZW1vcnkuYzoxMDk3OlxcdGlmICghdXNlcmZhdWx0ZmRfcHJvdGVjdGVkKGRzdF92bWEpKVxcbm1tL21lbW9yeS5jLTEwOTgtXFx0XFx0cHRlID0gcHRlX3N3cF9jbGVhcl91ZmZkKHB0ZSk7XFxuLS1cXG5tbS9tZW1vcnkuYz0xMTE2PWNvcHlfcHJlc2VudF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtMTE0My1cXHRwdGUgPSBtYXliZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KHB0ZSksIGRzdF92bWEpO1xcbm1tL21lbW9yeS5jOjExNDQ6XFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZChkc3Rfdm1hKSBcXHUwMDI2XFx1MDAyNiBwdGVfdWZmZChwdGVwX2dldChzcmNfcHRlKSkpIHtcXG5tbS9tZW1vcnkuYy0xMTQ1LVxcdFxcdC8qIFRoZSB1ZmZkIGJpdCBuZWVkcyB0byBiZSBkZWxpdmVyZWQgdG8gdGhlIGRlc3QgcHRlIGFzIHdlbGwgKi9cXG4tLVxcbm1tL21lbW9yeS5jPTExNTU9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fY29weV9wcmVzZW50X3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtMTE3Ni1cXHQgKi9cXG5tbS9tZW1vcnkuYzoxMTc3OlxcdGlmICghdXNlcmZhdWx0ZmRfcHJvdGVjdGVkKGRzdF92bWEpKSB7XFxubW0vbWVtb3J5LmMtMTE3OC1cXHRcXHRpZiAodXNlcmZhdWx0ZmRfcndwKHNyY192bWEpIFxcdTAwMjZcXHUwMDI2IHB0ZV91ZmZkKHB0ZSkpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTIyNjA9c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdXNlcmZhdWx0ZmRfY2xlYXJfdm1hKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjI3OS1cXHQvKiBDbGVhciB0aGUgdWZmZCBiaXQgYW5kL29yIHJlc3RvcmUgcHJvdG5vbmUgUFRFcyAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MjI4MDpcXHRpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpIHtcXG5tbS91c2VyZmF1bHRmZC5jLTIyODEtXFx0XFx0dW5zaWduZWQgaW50IG1tX2NwX2ZsYWdzID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6MjQ6MTEuNzcyMzUxNTI1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2NDAwMzYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBVc2VyZmF1bHRmZCBhbmQgV3JpdGUgUHJvdGVjdGlvbiBNYXJrZXJzKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIHdoZXJlIGBDT05GSUdfVVNFUkZBVUxURkRgIGlzIGVuYWJsZWQuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgbG9va2luZyBhdCBhIG1lbW9yeSBtYW5hZ2VtZW50IG1lY2hhbmlzbSB0aGF0IGFsbG93cyB1c2VyLXNwYWNlIHByb2Nlc3NlcyB0byBoYW5kbGUgcGFnZSBmYXVsdHMuIE5vdywgd2hhdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBmb3IgdGhpcyBjb25maWd1cmF0aW9uIGlzIGhvdyB3ZWxsIGl0IGludGVncmF0ZXMgd2l0aCB3cml0ZSBwcm90ZWN0aW9uIChXUCkgbWFya2Vycy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHN5c3RlbSBzdXBwb3J0cyB0aG9zZSBtYXJrZXJzIGluIGNvbmp1bmN0aW9uIHdpdGggdXNlcmZhdWx0ZmQgYmVjYXVzZSB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhvc2UgZmVhdHVyZXMgaXMgYSBjb21tb24gYXJlYSBvZiBpbnRlcmVzdCBmb3IgYWR2YW5jZWQgbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW1pemF0aW9uLiBTbywgdGhlIG5leHQgY2hlY2sgSSdsbCBkbyBpbnZvbHZlcyBjb25maXJtaW5nIHdoZXRoZXIgYHVmZmRfc3VwcG9ydHNfd3BfbWFya2VyYCBpcyBhbHNvIHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBzeXN0ZW0uIFRoYXQgZ2l2ZXMgYSBzb2xpZCBiYXNpcyBmb3IgYXNzZXNzaW5nIGhvdyB3ZSBjYW4gbGV2ZXJhZ2UgdGhlIHByb3RlY3Rpb24gZmVhdHVyZXMgYXZhaWxhYmxlIHRvIHVzIHdoZW4gYnVpbGRpbmcgb3VyIGFwcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA4OjI0OjE1LjEzNjM3NDM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MzQ3NDUyNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWZmZF9zdXBwb3J0c193cF9tYXJrZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaC0xNS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oOjE2OnN0YXRpYyBpbmxpbmUgYm9vbCB1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcih2b2lkKVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmgtMTcte1xcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MzEyPXN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfc3dwX3VmZmRfYW55KHB0ZV90IHB0ZSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0zMTMte1xcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjMxNDpcXHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMzE1LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL21lbW9yeS5jPTE2OTk9Ym9vbCBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtMTcwNC1cXG5tbS9tZW1vcnkuYzoxNzA1OlxcdGlmICghdWZmZF9zdXBwb3J0c193cF9tYXJrZXIoKSlcXG5tbS9tZW1vcnkuYy0xNzA2LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MjE5NT1zdGF0aWMgYm9vbCB2bWFfY2FuX3VzZXJmYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjIyMi1cXHQgKi9cXG5tbS91c2VyZmF1bHRmZC5jOjIyMjM6XFx0aWYgKCF1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcigpIFxcdTAwMjZcXHUwMDI2ICh2bV9mbGFncyBcXHUwMDI2IFZNX1VGRkRfV1ApIFxcdTAwMjZcXHUwMDI2XFxubW0vdXNlcmZhdWx0ZmQuYy0yMjI0LVxcdCAgICAhdm1hX2lzX2Fub255bW91cyh2bWEpKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz00MzI0PXN0YXRpYyBfX3U2NCB1ZmZkX2FwaV9hdmFpbGFibGVfZmVhdHVyZXModm9pZClcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDMzMS1cXHRcXHRmIFxcdTAwMjY9IH5VRkZEX0ZFQVRVUkVfUEFHRUZBVUxUX0ZMQUdfV1A7XFxubW0vdXNlcmZhdWx0ZmQuYzo0MzMyOlxcdGlmICghdWZmZF9zdXBwb3J0c193cF9tYXJrZXIoKSlcXG5tbS91c2VyZmF1bHRmZC5jLTQzMzMtXFx0XFx0ZiBcXHUwMDI2PSB+KFVGRkRfRkVBVFVSRV9XUF9IVUdFVExCRlNfU0hNRU0gfFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODoyNDoxNy44NzExMjc5MTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTcwNjUxNTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgVXNlcmZhdWx0ZmQgKFVGRkQpIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgdWZmZF9zdXBwb3J0c193cF9tYXJrZXJgIGlzIGRlZmluZWQgd2l0aGluIGBpbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIG1hcCBvdXQgdGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gcGljdHVyZSBhcm91bmQgdGhpcy4gT2J2aW91c2x5LCBgQ09ORklHX1VTRVJGQVVMVEZEYCBpcyB0aGUgZnVuZGFtZW50YWwgZW5hYmxpbmcgb3B0aW9uIOKAkyB0aGF0J3MgYSBnaXZlbi4gSG93ZXZlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLCBzbyBJJ2xsIGFsc28gY29uZmlybSB0aGF0IGBDT05GSUdfTU1VYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQsIGFzIFVGRkQgcmVsaWVzIG9uIG1lbW9yeSBtYW5hZ2VtZW50IGNhcGFiaWxpdGllcy4gSG1tLCBJIGhhdmUgYSBuaWdnbGluZyBmZWVsaW5nIHRoZXJlIG1pZ2h0IGJlIGEgbW9yZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gd3JpdGUgcHJvdGVjdGlvbiAoV1ApIG1hcmtlcnMgaW4gVUZGRC4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGlmIGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYCBpcyBhIHZhbGlkIG9wdGlvbi4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MjUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODoyNDoyMS40NDE3ODIzOTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzMzA0MTA3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQVEVfTUFSS0VSX1VGRkRfV1BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS91c2VyZmF1bHRmZC5yc3Q9MzkzPVJXUCBtYXJrZXI6IHRoZSBuZXh0IGFjY2VzcyByZS1wb3B1bGF0ZXMgdGhlIHJhbmdlIHdpdGhvdXQgcHJvdGVjdGlvbi5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3VzZXJmYXVsdGZkLnJzdDozOTQ6VW5saWtlIFdQICh3aGljaCBwZXJzaXN0cyB2aWEgYGBQVEVfTUFSS0VSX1VGRkRfV1BgYCksIHRoZXJlIGlzIG5vXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS91c2VyZmF1bHRmZC5yc3QtMzk1LXBlcnNpc3RlbnQgUldQIG1hcmtlciB0b2RheS4gVGhlIHVzZXIgbmVlZHMgdG8gcmUtYXJtIHRoZSByYW5nZSB3aXRoXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjUwMz1zdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI1MTMtXFx0XFx0c2V0X3B0ZV9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGUsXFxuZnMvcHJvYy90YXNrX21tdS5jOjI1MTQ6XFx0XFx0XFx0ICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yNTE1LVxcdH0gZWxzZSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjYzNj1zdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfaHVnZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY0NC1cXHRcXHRzZXRfaHVnZV9wdGVfYXQodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlcCxcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjY0NTpcXHRcXHRcXHRcXHRtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSwgcHNpemUpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yNjQ2LVxcdFxcdHJldHVybjtcXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmg9MTY9c3RhdGljIGlubGluZSBib29sIHVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKHZvaWQpXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaC0xNy17XFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaDoxODpcXHRyZXR1cm4gcGd0YWJsZV9zdXBwb3J0c191ZmZkKCkgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQKTtcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oLTE5LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQ3Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdWZmZF93cF9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQ4MC1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo0ODE6XFx0cmV0dXJuIHNvZnRsZWFmX3RvX21hcmtlcihlbnRyeSkgXFx1MDAyNiBQVEVfTUFSS0VSX1VGRkRfV1A7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDgyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9NTU1PXN0YXRpYyBpbmxpbmUgcHRlX21hcmtlciBjb3B5X3B0ZV9tYXJrZXIoXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTU2Mi1cXHQvKiBPbmx5IGNvcHkgUFRFIG1hcmtlcnMgaWYgVUZGRCByZWdpc3RlciBtYXRjaGVzLiAqL1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTYzOlxcdGlmICgoc3JjbSBcXHUwMDI2IFBURV9NQVJLRVJfVUZGRF9XUCkgXFx1MDAyNlxcdTAwMjYgdXNlcmZhdWx0ZmRfd3AoZHN0X3ZtYSkpXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo1NjQ6XFx0XFx0ZHN0bSB8PSBQVEVfTUFSS0VSX1VGRkRfV1A7XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01NjUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0yODE9dHlwZWRlZiB1bnNpZ25lZCBsb25nIHB0ZV9tYXJrZXI7XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMjgyLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjI4MzojZGVmaW5lICBQVEVfTUFSS0VSX1VGRkRfV1BcXHRcXHRcXHRCSVQoMClcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0yODQtLypcXG4tLVxcbm1tL0tjb25maWc9MTM4Mj1tZW51Y29uZmlnIFVTRVJGQVVMVEZEXFxuLS1cXG5tbS9LY29uZmlnLTEzODgtXFxubW0vS2NvbmZpZzoxMzg5OmNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG5tbS9LY29uZmlnLTEzOTAtXFx0Ym9vbCBcXFwiVXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBzdXBwb3J0IGZvciBzaG1lbS9odWdldGxiZnNcXFwiXFxuLS1cXG5tbS9odWdldGxiLmM9NTIxMz12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTI3NC1cXHRcXHRcXHRcXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB0ZXAsXFxubW0vaHVnZXRsYi5jOjUyNzU6XFx0XFx0XFx0XFx0XFx0XFx0bWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCksXFxubW0vaHVnZXRsYi5jLTUyNzYtXFx0XFx0XFx0XFx0XFx0XFx0c3opO1xcbi0tXFxubW0vaHVnZXRsYi5jLTUzMTAtXFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdGVwLFxcbm1tL2h1Z2V0bGIuYzo1MzExOlxcdFxcdFxcdFxcdFxcdG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApLFxcbm1tL2h1Z2V0bGIuYy01MzEyLVxcdFxcdFxcdFxcdFxcdHN6KTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz02NDk2PWxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NTc0LVxcdFxcdFxcdFxcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlcCxcXG5tbS9odWdldGxiLmM6NjU3NTpcXHRcXHRcXHRcXHRcXHRcXHRtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSxcXG5tbS9odWdldGxiLmMtNjU3Ni1cXHRcXHRcXHRcXHRcXHRcXHRwc2l6ZSk7XFxuLS1cXG5tbS9tZW1vcnkuYz0xNjk5PWJvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21lbW9yeS5jLTE3MzUtXFx0XFx0c2V0X3B0ZV9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLFxcbm1tL21lbW9yeS5jOjE3MzY6XFx0XFx0XFx0ICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpO1xcbm1tL21lbW9yeS5jLTE3MzctXFx0XFx0aWYgKC0tbnJfcHRlcyA9PSAwKVxcbi0tXFxubW0vbWVtb3J5LmM9NDY2OT1zdGF0aWMgdm1fZmF1bHRfdCBwdGVfbWFya2VyX2NsZWFyKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDY3OS1cXHQgKiBUaGlzIHNob3VsZCBhbHNvIGNvdmVyIHRoZSBjYXNlIHdoZXJlIGUuZy4gdGhlIHB0ZSBjaGFuZ2VkXFxubW0vbWVtb3J5LmM6NDY4MDpcXHQgKiBxdWlja2x5IGZyb20gYSBQVEVfTUFSS0VSX1VGRkRfV1AgaW50byBQVEVfTUFSS0VSX1BPSVNPTkVELlxcbm1tL21lbW9yeS5jLTQ2ODEtXFx0ICogU28gcHRlX2lzX21hcmtlcigpIGNoZWNrIGlzIG5vdCBlbm91Z2ggdG8gc2FmZWx5IGRyb3AgdGhlIHB0ZS5cXG4tLVxcbm1tL21wcm90ZWN0LmM9MzMxPXN0YXRpYyBsb25nIGNoYW5nZV9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21wcm90ZWN0LmMtNDI3LVxcdFxcdFxcdFxcdHNldF9wdGVfYXQodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlLFxcbm1tL21wcm90ZWN0LmM6NDI4OlxcdFxcdFxcdFxcdFxcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcXG5tbS9tcHJvdGVjdC5jLTQyOS1cXHRcXHRcXHRcXHRwYWdlcysrO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnPTI9Q09ORklHX1VTRVJGQVVMVEZEPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc6MzpDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctNC1DT05GSUdfVEVTVF9WTUFMTE9DPW1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6MjQ6MjQuMjc0ODM3NjczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzczNjUzNTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYCBDb25maWd1cmF0aW9uIGFuZCBSZWxldmFudCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgQ09ORklHX1BURV9NQVJLRVJfVUZGRF9XUGAgaXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgd2hpY2ggaW1wbGllcyB3ZSdyZSBlbmFibGluZyBgVVNFUkZBVUxURkRgIGFsb25nIHdpdGggYFBURV9NQVJLRVJfVUZGRF9XUGAuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGZvY3VzIHN5bWJvbHMuIEkndmUgZ290OiBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AsIGB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZGAsIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgLCBhbmQgYHRyeV90b191bm1hcF9vbmVgLlxuXG5BbHJpZ2h0LCBhcmUgdGhlc2UgZnVuY3Rpb25zIHJlYWNoYWJsZT8gWWVzLCB0aGV5J3JlIGRlZmluaXRlbHkgd2l0aGluIHRoZSBgbW0vbWVtb3J5LmNgIGFuZCBgbW0vcm1hcC5jYCBmaWxlcy4gR29vZC4gYHRyeV90b191bm1hcF9vbmVgIGxvb2tzIHRvIGJlIGEgY29yZSBmdW5jdGlvbjsgaXQncyB0aGUgd29ya2hvcnNlIGZvciB1bm1hcHBpbmcgcGFnZXMuIEFuZCBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCBpcyBkZWZpbml0ZWx5IHVzZWQgaW5zaWRlIGB0cnlfdG9fdW5tYXBfb25lYC4gYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgIHNlZW1zIHRvIGJlIHRoZSBuZXcga2lkIG9uIHRoZSBibG9jay5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRgIGlzIHN0YXRpYyBhbmQgaW5saW5lLiBBaCwgeWVzLCBgc3RhdGljIGlubGluZSBib29sIHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkYC4gU2luY2UgaXQncyBpbmxpbmUsIGl0IG1pZ2h0IG5vdCBiZSB0aGUgbW9zdCBpbGx1bWluYXRpbmcgc3ltYm9sIHRvIGZvY3VzIG9uIGRpcmVjdGx5LiBOb3csIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCBpcyBleHBvcnRlZCBpbiBgbW0vaW50ZXJuYWwuaGAgYW5kIGRlZmluZWQgaW4gYG1tL21lbW9yeS5jYC4gSXQncyBub3QgaW5saW5lLCB3aGljaCBpcyB1c2VmdWwuIEFzIGZvciBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCwgaXQncyBgc3RhdGljIGlubGluZWAgaW4gYG1tL3JtYXAuY2AuIEFsc28sIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBgc3RhdGljIGJvb2xgIGluIGBtbS9ybWFwLmNgLlxuXG5Pa2F5LCBJJ2xsIGxpc3QgYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgIGFuZCBgdHJ5X3RvX3VubWFwX29uZWAuXG5cbldhaXQgYSBtaW51dGUsIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgIGlzIGBzdGF0aWMgaW5saW5lYC4gTm93LCBgdHJ5X3RvX3VubWFwX29uZWAgbWlnaHQgYmUgdG9vIGhvdCwgY29uc2lkZXJpbmcgaXQncyBjYWxsZWQgZHVyaW5nIHBhZ2UgcmVjbGFpbSwgbWlncmF0aW9uLCBldGMuIEl0J3MgcHJvYmFibHkgdGhlIG1haW4gZnVuY3Rpb24gdGhhdCdzIGNoYW5nZWQsIGJ1dCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrLiBJIHNob3VsZCBjaGVjayBgemFwX3ByZXNlbnRfZm9saW9fcHRlc2Agb3IgYHphcF9wdGVfcmFuZ2VgIHdoZXJlIGB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZGAgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgyOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODoyNDozMi4wMTEzNzYyMTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTcxOTMxNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LmM9MTc1Mj1zdGF0aWMgaW5saW5lIGJvb2xcXG5tbS9tZW1vcnkuYzoxNzUzOnphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL21lbW9yeS5jLTE3NTQtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBpbnQgbnIsXFxuLS1cXG5tbS9tZW1vcnkuYz0xNzYzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB6YXBfcHJlc2VudF9mb2xpb19wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xNzkyLVxcdGlmICh1bmxpa2VseSh1c2VyZmF1bHRmZF9wdGVfd3Aodm1hLCBwdGVudCkpKVxcbm1tL21lbW9yeS5jOjE3OTM6XFx0XFx0KmFueV9za2lwcGVkID0gemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsXFxubW0vbWVtb3J5LmMtMTc5NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG5yLCBkZXRhaWxzLCBwdGVudCk7XFxuLS1cXG5tbS9tZW1vcnkuYz0xODE0PXN0YXRpYyBpbmxpbmUgaW50IHphcF9wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21lbW9yeS5jLTE4MzEtXFx0XFx0aWYgKHVzZXJmYXVsdGZkX3B0ZV93cCh2bWEsIHB0ZW50KSlcXG5tbS9tZW1vcnkuYzoxODMyOlxcdFxcdFxcdCphbnlfc2tpcHBlZCA9IHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkcixcXG5tbS9tZW1vcnkuYy0xODMzLVxcdFxcdFxcdFxcdFxcdFxcdHB0ZSwgMSwgZGV0YWlscywgcHRlbnQpO1xcbi0tXFxubW0vbWVtb3J5LmM9MTg2MD1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xODgwLVxcdFxcdCAqIGNvbnNpZGVyIHVmZmQtd3AgYml0IHdoZW4gemFwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbixcXG5tbS9tZW1vcnkuYzoxODgxOlxcdFxcdCAqIHNlZSB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCgpLlxcbm1tL21lbW9yeS5jLTE4ODItXFx0XFx0ICovXFxuLS1cXG5tbS9tZW1vcnkuYy0xOTI1LVxcdGNsZWFyX25vbnByZXNlbnRfcHRlcyh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGUsIG5yKTtcXG5tbS9tZW1vcnkuYzoxOTI2OlxcdCphbnlfc2tpcHBlZCA9IHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkciwgcHRlLCBuciwgZGV0YWlscywgcHRlbnQpO1xcbm1tL21lbW9yeS5jLTE5MjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA4OjI0OjM0LjUyODU3NjI0NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjY1NjczMjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBQVEUgWmFwcGluZyBGdW5jdGlvbnMqKlxuXG5SaWdodCwgc28gSSBzZWUgdGhlc2UgYHphcF9wcmVzZW50X2ZvbGlvX3B0ZXNgLCBgemFwX3ByZXNlbnRfcHRlc2AsIGFuZCBgemFwX25vbnByZXNlbnRfcHRlc2AgZnVuY3Rpb25zIGFsbCBzZWVtIHRvIGJlIHV0aWxpemluZyBzb21ldGhpbmcgY2VudHJhbC4gVGhlIGZhY3QgdGhhdCB0aGV5J3JlIGRlZmluZWQgYXMgYHN0YXRpYyBpbmxpbmVgIG9yIGBzdGF0aWMgX19hbHdheXNfaW5saW5lYCBpcyBpbnRlcmVzdGluZzsgbGlrZWx5IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB0byBhdm9pZCBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkIHdoZXJlIHBvc3NpYmxlLCB3aGljaCBpcyBzZW5zaWJsZSBnaXZlbiB0aGUgY29udGV4dC4gVGhleSBhcmUgYWxzbyBjYWxsZWQgZnJvbSBgemFwX3B0ZV9yYW5nZWAsIHdoaWNoIGhhcyBjYXVnaHQgbXkgYXR0ZW50aW9uLiBUaGlzIHN1Z2dlc3RzIHRoYXQgYHphcF9wdGVfcmFuZ2VgIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoaXMgXCJ6YXBwaW5nXCIgcHJvY2VzcyBpcyBvcmNoZXN0cmF0ZWQuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHphcF9wdGVfcmFuZ2VgIGlzIGRvaW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBwcm9jZXNzLiBUaW1lIHRvIGNoZWNrIGB6YXBfcHRlX3JhbmdlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODoyNDozOC43OTQyNTMxMDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTM4Njc3NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemFwX3B0ZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTQ0MD1UaGVyZSBpcyBhbHNvIGEgZmlsZS1zeXN0ZW0gc3BlY2lmaWMgbG9jayBvcmRlcmluZyBjb21tZW50IGxvY2F0ZWQgYXQgdGhlIHRvcCBvZlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC00ODUtICAgIC1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfbG9jayAgICAgICAgICAgICAgICAgICAgIChmb2xpb19yZW1vdmVfcm1hcF9wdGUtXFx1MDAzZXNldF9wYWdlX2RpcnR5KVxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6NDg2OiAgICBiZGkud2ItXFx1MDAzZWxpc3RfbG9jayAgICAgICAgICAgICAgICAgICAoemFwX3B0ZV9yYW5nZS1cXHUwMDNlc2V0X3BhZ2VfZGlydHkpXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo0ODc6ICAgIC1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfbG9jayAgICAgICAgICAgICAgICAgICAgICh6YXBfcHRlX3JhbmdlLVxcdTAwM2VzZXRfcGFnZV9kaXJ0eSlcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjQ4ODogICAgLVxcdTAwM2Vwcml2YXRlX2xvY2sgICAgICAgICAgICAgICAgICAgICAgKHphcF9wdGVfcmFuZ2UtXFx1MDAzZWJsb2NrX2RpcnR5X2ZvbGlvKVxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNDg5LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTMxMTM9ZXh0ZXJuIHZvaWQgcGFnZWZhdWx0X291dF9vZl9tZW1vcnkodm9pZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMzExOC0vKlxcbmluY2x1ZGUvbGludXgvbW0uaDozMTE5OiAqIFBhcmFtZXRlciBibG9jayBwYXNzZWQgZG93biB0byB6YXBfcHRlX3JhbmdlIGluIGV4Y2VwdGlvbmFsIGNhc2VzLlxcbmluY2x1ZGUvbGludXgvbW0uaC0zMTIwLSAqL1xcbi0tXFxubW0vZmlsZW1hcC5jLTEyMy0gKiAgICAtXFx1MDAzZWlub2RlLVxcdTAwM2VpX2xvY2tcXHRcXHQoZm9saW9fcmVtb3ZlX3JtYXBfcHRlLVxcdTAwM2VzZXRfcGFnZV9kaXJ0eSlcXG5tbS9maWxlbWFwLmM6MTI0OiAqICAgIGJkaS53Yi1cXHUwMDNlbGlzdF9sb2NrXFx0XFx0KHphcF9wdGVfcmFuZ2UtXFx1MDAzZXNldF9wYWdlX2RpcnR5KVxcbm1tL2ZpbGVtYXAuYzoxMjU6ICogICAgLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9sb2NrXFx0XFx0KHphcF9wdGVfcmFuZ2UtXFx1MDAzZXNldF9wYWdlX2RpcnR5KVxcbm1tL2ZpbGVtYXAuYzoxMjY6ICogICAgLVxcdTAwM2Vwcml2YXRlX2xvY2tcXHRcXHQoemFwX3B0ZV9yYW5nZS1cXHUwMDNlYmxvY2tfZGlydHlfZm9saW8pXFxubW0vZmlsZW1hcC5jLTEyNy0gKi9cXG4tLVxcbm1tL21lbW9yeS5jPTE4NjA9c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMTkzMC1cXG5tbS9tZW1vcnkuYzoxOTMxOnN0YXRpYyBpbmxpbmUgaW50IGRvX3phcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG5tbS9tZW1vcnkuYy0xOTMyLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlLFxcbi0tXFxubW0vbWVtb3J5LmM9MTk5MT1zdGF0aWMgYm9vbCB6YXBfcHRlX3RhYmxlX2lmX2VtcHR5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vbWVtb3J5LmMtMjAyNC1cXG5tbS9tZW1vcnkuYzoyMDI1OnN0YXRpYyB1bnNpZ25lZCBsb25nIHphcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG5tbS9tZW1vcnkuYy0yMDI2LVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vbWVtb3J5LmMtMjA1OC1cXG5tbS9tZW1vcnkuYzoyMDU5OlxcdFxcdG5yID0gZG9femFwX3B0ZV9yYW5nZSh0bGIsIHZtYSwgcHRlLCBhZGRyLCBlbmQsIGRldGFpbHMsIHJzcyxcXG5tbS9tZW1vcnkuYy0yMDYwLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZmb3JjZV9mbHVzaCwgXFx1MDAyNmZvcmNlX2JyZWFrLCBcXHUwMDI2YW55X3NraXBwZWQpO1xcbi0tXFxubW0vbWVtb3J5LmM9MjExNz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgemFwX3BtZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMjE0NC1cXHRcXHR9XFxubW0vbWVtb3J5LmM6MjE0NTpcXHRcXHRhZGRyID0gemFwX3B0ZV9yYW5nZSh0bGIsIHZtYSwgcG1kLCBhZGRyLCBuZXh0LCBkZXRhaWxzKTtcXG5tbS9tZW1vcnkuYy0yMTQ2LVxcdFxcdGlmIChhZGRyICE9IG5leHQpXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jPTI2NjQ9dm9pZCBfX2ZvbGlvX21hcmtfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI3MDAtICogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGlzIGRvZXNuJ3QgcmFjZSB3aXRoIHRydW5jYXRpb24uICBNb3N0IHdpbGxcXG5tbS9wYWdlLXdyaXRlYmFjay5jOjI3MDE6ICogc2ltcGx5IGhvbGQgdGhlIGZvbGlvIGxvY2ssIGJ1dCBlLmcuIHphcF9wdGVfcmFuZ2UoKSBjYWxscyB3aXRoIHRoZVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjcwMi0gKiBmb2xpbyBtYXBwZWQgYW5kIHRoZSBwdGUgbG9jayBoZWxkLCB3aGljaCBhbHNvIGxvY2tzIG91dCB0cnVuY2F0aW9uLlxcbi0tXFxubW0vcm1hcC5jPTEwMzE9c3RhdGljIGJvb2wgaW52YWxpZF9mb2xpb19yZWZlcmVuY2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYXJnKVxcbi0tXFxubW0vcm1hcC5jLTEwMzktXFx0ICogb3RoZXIgbWFwcGluZyBpcyBhbHJlYWR5IGdvbmUsIHRoZSB1bm1hcCBwYXRoIHdpbGwgaGF2ZSBzZXQgdGhlXFxubW0vcm1hcC5jOjEwNDA6XFx0ICogcmVmZXJlbmNlZCBmbGFnIG9yIGFjdGl2YXRlZCB0aGUgZm9saW8gaW4gemFwX3B0ZV9yYW5nZSgpLlxcbm1tL3JtYXAuYy0xMDQxLVxcdCAqL1xcbi0tXFxubW0vcm1hcC5jPTIxOTg9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yMjEyLVxcdC8qXFxubW0vcm1hcC5jOjIyMTM6XFx0ICogV2hlbiByYWNpbmcgYWdhaW5zdCBlLmcuIHphcF9wdGVfcmFuZ2UoKSBvbiBhbm90aGVyIGNwdSxcXG5tbS9ybWFwLmMtMjIxNC1cXHQgKiBpbiBiZXR3ZWVuIGl0cyBwdGVwX2dldF9hbmRfY2xlYXJfZnVsbCgpIGFuZCBmb2xpb19yZW1vdmVfcm1hcF8qKCksXFxuLS1cXG5tbS9ybWFwLmM9MjQ2Mj1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjQ3NS1cXHQvKlxcbm1tL3JtYXAuYzoyNDc2OlxcdCAqIFdoZW4gcmFjaW5nIGFnYWluc3QgZS5nLiB6YXBfcHRlX3JhbmdlKCkgb24gYW5vdGhlciBjcHUsXFxubW0vcm1hcC5jLTI0NzctXFx0ICogaW4gYmV0d2VlbiBpdHMgcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwoKSBhbmQgZm9saW9fcmVtb3ZlX3JtYXBfKigpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODoyNDo0MS4xNDgxMzMwMjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3NDQwMzE0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhc29uaW5nIEFib3V0IEtleSBTeW1ib2xzIGZvciBGdXp6aW5nIHRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGUgY29kZSBpZGVudGlmaWVkIGEgZmV3IHByb21pc2luZyBjYW5kaWRhdGVzOiBgemFwX3B0ZV9yYW5nZWAsIGBkb196YXBfcHRlX3JhbmdlYCwgYHRyeV90b191bm1hcF9vbmVgLCBhbmQgdGhpcyBuZXcgZnVuY3Rpb24sIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYC4gTXkgZ29hbCBpcyB0byBwaW5wb2ludCB0aGUgKm1vc3QqIHJlbGV2YW50IHN5bWJvbHMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcgdGhpcyBwYXRjaCBlZmZlY3RpdmVseS5cblxuSSBxdWlja2x5IGRpc21pc3NlZCBgemFwX3B0ZV9yYW5nZWAgYXMgcG90ZW50aWFsbHkgdG9vIGJyb2FkbHkgdXNlZDsgaXQncyBsaWtlbHkgY2FsbGVkIGEgbG90LiBUaGF0IGxlYXZlcyBtZSB3aXRoIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCwgc3BlY2lmaWMgdG8gdGhpcyBjaGFuZ2UsIGFuZCBgdHJ5X3RvX3VubWFwX29uZWAsIHRoZSBvbmUgdGhhdCBkZWFscyB3aXRoIHRoZSBiYXRjaGluZyBsb2dpYyBtb2RpZmljYXRpb25zLlxuXG5UaGVuIEkgcmVhbGl6ZWQgdGhlcmUgd2FzIGEgY2hhbmdlIHRvIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgLiBJIG5lZWQgdG8gZ28gbG9vayBhdCB0aGlzIG9uZSBzaW5jZSB0aGUgcGF0Y2ggYWZmZWN0cyBpdC4gQ2hlY2tpbmcgaXRzIGRlZmluaXRpb24sIGl0J3MgYHN0YXRpYyBpbmxpbmVgLCBzbyBzeXprYWxsZXIgbWlnaHQgdHJhY2UgaXQsIGJ1dCBpdCdzIGJldHRlciB0byBwcm92aWRlIHRoZSBjYWxsZXIuIFRoYXQgY2FsbGVyIGlzIGB0cnlfdG9fdW5tYXBfb25lYCwgc28gdGhpcyBzb2xpZGlmaWVzIG15IGNob2ljZS5cblxuTm93LCBsZXQncyBzZWUgaWYgYHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkYCBpcyByZWxldmFudC4gSXQncyBzdGF0aWMgaW5saW5lIHRvbywgYW5kIGlzIGNhbGxlZCBieSBgemFwX3ByZXNlbnRfZm9saW9fcHRlc2AsIGB6YXBfcHJlc2VudF9wdGVzYCwgYW5kIGB6YXBfbm9ucHJlc2VudF9wdGVzYCwgd2hpY2ggYXJlIGNhbGxlZCBieSBgZG9femFwX3B0ZV9yYW5nZWAuIFNvLCBgZG9femFwX3B0ZV9yYW5nZWAgbWlnaHQgYmUgYW5vdGhlciBnb29kIHN5bWJvbC4gVGhpcyBpcyBhbHNvIHN0YXRpYyBpbmxpbmUsIGJ1dCBpdHMgY2FsbGVyIGB6YXBfcHRlX3JhbmdlYCBpcyBub3QsIHNvIGB6YXBfcHRlX3JhbmdlYCBpcyBhIGdvb2QgY2hvaWNlLlxuXG5NeSBmaW5hbCBsaXN0LCBhZnRlciB0aGVzZSBjb25zaWRlcmF0aW9ucywgaXM6XG4tIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYFxuLSBgdHJ5X3RvX3VubWFwX29uZWBcbi0gYHphcF9wdGVfcmFuZ2VgXG5cbkZvciBjb25maWd1cmF0aW9uLCBJJ20gY29uZmlkZW50IGFib3V0IGBVU0VSRkFVTFRGRGAgYW5kIGBQVEVfTUFSS0VSX1VGRkRfV1BgLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYFBURV9NQVJLRVJfVUZGRF9XUGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IG5hbWUgaW4gdGhlIEtjb25maWcuIFllcCwgY29uZmlybWVkLlxuXG5JIHdpbGwgbmVlZCB0byBjb25zaWRlciBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCwgc2luY2UgdGhpcyBwYXRjaCBpbmNsdWRlcyBiYXRjaGluZyBjaGFuZ2VzIHRoYXQgY291bGQgaW52b2x2ZSBsYXJnZSBwYWdlcy4gQnV0IGBVU0VSRkFVTFRGRGAgaXMgdGhlIGtleSBjb25maWcgZm9yIHRoZSBmdW5jdGlvbmFsaXR5LiBgQ09ORklHX01NVWAgaXMgYWxyZWFkeSBpbXBsaWVkLCBvZiBjb3Vyc2UuXG5cblRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiBtb2RpZnlpbmcgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0byBoYW5kbGUgUFRFIGJhdGNoaW5nIHdoZW4gc2V0dGluZyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIG1hcmtlcnMgZHVyaW5nIHVubWFwIG9wZXJhdGlvbnMuIEl0IGNoYW5nZXMgYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgIHRvIGhhbmRsZSBtdWx0aXBsZSBQVEVzIGF0IG9uY2UgYW5kIHJlbW92ZXMgdGhlIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgIHJlc3RyaWN0aW9uLCBhbGxvd2luZyB0aGUgbmV3IGJhdGNoaW5nIG9uIHByb3RlY3RlZCBWTUFzLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgd2FycmFudHMgZnV6emluZy5cblxuTm93LCBJJ20gcmVhZHkgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMjgsIk91dHB1dFRva2VucyI6MTc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA4OjI0OjUyLjg5MjE2Nzg5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjczMzg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlBURV9NQVJLRVJfVUZGRF9XUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNcIixcbiAgICBcInRyeV90b191bm1hcF9vbmVcIixcbiAgICBcInphcF9wdGVfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRvIHN1cHBvcnQgYmF0Y2hpbmcgb2YgUFRFcyB3aGVuIGluc3RhbGxpbmcgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBtYXJrZXJzIGR1cmluZyB1bm1hcCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCB0byBoYW5kbGUgbXVsdGlwbGUgUFRFcyBhdCBvbmNlIGFuZCByZW1vdmVzIHRoZSByZXN0cmljdGlvbiBpbiBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCB0aGF0IHByZXZlbnRlZCBiYXRjaGluZyBmb3IgdXNlcmZhdWx0ZmQtcHJvdGVjdGVkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJQVEVfTUFSS0VSX1VGRkRfV1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzXCIsXG4gICAgXCJ0cnlfdG9fdW5tYXBfb25lXCIsXG4gICAgXCJ6YXBfcHRlX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0byBzdXBwb3J0IGJhdGNoaW5nIG9mIFBURXMgd2hlbiBpbnN0YWxsaW5nIHVzZXJmYXVsdGZkIHdyaXRlLXByb3RlY3Rpb24gbWFya2VycyBkdXJpbmcgdW5tYXAgb3BlcmF0aW9ucy4gSXQgaW50cm9kdWNlcyBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AgdG8gaGFuZGxlIG11bHRpcGxlIFBURXMgYXQgb25jZSBhbmQgcmVtb3ZlcyB0aGUgcmVzdHJpY3Rpb24gaW4gYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAgdGhhdCBwcmV2ZW50ZWQgYmF0Y2hpbmcgZm9yIHVzZXJmYXVsdGZkLXByb3RlY3RlZCBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow42lb8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 07:49:50 +0000 UTC FinishedAt: 2026-07-20 08:24:55 +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": "56b9d68cf62f5e79ac9035dde02c3a68d0c6e091", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "PTE_MARKER_UFFD_WP" ], "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": "56b9d68cf62f5e79ac9035dde02c3a68d0c6e091", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "PTE_MARKER_UFFD_WP" ], "series_id": "ccd1f45f-baec-46b1-906f-e4446e3da6e4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "cond_install_uffd_wp_ptes", "try_to_unmap_one", "zap_pte_range" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1BURV9NQVJLRVJfVUZGRF9XUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMmIzM0OywKICAgICYjMzQ7dHJ5X3RvX3VubWFwX29uZSYjMzQ7LAogICAgJiMzNDt6YXBfcHRlX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdG8gc3VwcG9ydCBiYXRjaGluZyBvZiBQVEVzIHdoZW4gaW5zdGFsbGluZyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIG1hcmtlcnMgZHVyaW5nIHVubWFwIG9wZXJhdGlvbnMuIEl0IGludHJvZHVjZXMgYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgIHRvIGhhbmRsZSBtdWx0aXBsZSBQVEVzIGF0IG9uY2UgYW5kIHJlbW92ZXMgdGhlIHJlc3RyaWN0aW9uIGluIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgIHRoYXQgcHJldmVudGVkIGJhdGNoaW5nIGZvciB1c2VyZmF1bHRmZC1wcm90ZWN0ZWQgVk1Bcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ZjQwN2I1MDNhMTJjOTY1YTkyNmNiMWE0MDhlYjEwZGM3Zjc0NGE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMDg6MjM6NTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IGI1YzRkYzBmM2ZlMzI2Li42MjFjODY1M2Q4ZjdlYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbkBAIC01NjYsNTkgJiM0Mzs1NjYsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZV9tYXJrZXIgY29weV9wdGVfbWFya2VyKFxuIFx0cmV0dXJuIGRzdG07XG4gfVxuIFxuLS8qXG4tICogSWYgdGhpcyBwdGUgaXMgd3ItcHJvdGVjdGVkIGJ5IHVmZmQtd3AgaW4gYW55IGZvcm0sIGFybSB0aGUgc3BlY2lhbCBwdGUgdG9cbi0gKiByZXBsYWNlIGEgbm9uZSBwdGUuICBOT1RFISAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiAqcHRlIGlzIGFscmVhZHlcbi0gKiBjbGVhcmVkIHNvIHdlIHdpbGwgbmV2ZXIgYWNjaWRlbnRhbGx5IHJlcGxhY2Ugc29tZXRoaW5nIHZhbHVhYmxlLiAgTWVhbndoaWxlXG4tICogbm9uZSBwdGUgYWxzbyBtZWFucyB3ZSBhcmUgbm90IGRlbW90aW5nIHRoZSBwdGUgc28gdGxiIGZsdXNoZWQgaXMgbm90IG5lZWRlZC5cbi0gKiBFLmcuLCB3aGVuIHB0ZSBjbGVhcmVkIHRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgdGFrZW4gY2FyZSBvZiB0aGUgdGxiIGZsdXNoLlxuLSAqXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBwZ3RhYmxlIGxvY2sgaGVsZCBzbyB0aGF0IG5vIHRocmVhZCB3aWxsIHNlZSB0aGUgbm9uZVxuLSAqIHB0ZSwgYW5kIGlmIHRoZXkgc2VlIGl0LCB0aGV5JiMzOTtsbCBmYXVsdCBhbmQgc2VyaWFsaXplIGF0IHRoZSBwZ3RhYmxlIGxvY2suXG4tICpcbi0gKiBSZXR1cm5zIHRydWUgaWYgYW4gdWZmZC13cCBwdGUgd2FzIGluc3RhbGxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgYm9vbFxuLXB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0ICAgICAgcHRlX3QgKnB0ZSwgcHRlX3QgcHRldmFsKVxuLXtcbi1cdGJvb2wgYXJtX3VmZmRfcHRlID0gZmFsc2U7XG4tXG4tXHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdC8qIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcHRlIHNob3VsZCBiZSBcJiMzNDtjbGVhcmVkXCYjMzQ7IGJlZm9yZSBjYWxsaW5nICovXG4tXHRXQVJOX09OX09OQ0UoIXB0ZV9ub25lKHB0ZXBfZ2V0KHB0ZSkpKTtcbi1cbi1cdC8qXG4tXHQgKiBOT1RFOiB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZCgpIGRvZXNuJiMzOTt0IG5lZWQgdGhpcyB3aG9sZVxuLVx0ICogdGhpbmcsIGJlY2F1c2Ugd2hlbiB6YXBwaW5nIGVpdGhlciBpdCBtZWFucyBpdCYjMzk7cyBkcm9wcGluZyB0aGVcbi1cdCAqIHBhZ2UsIG9yIGluIFRUVSB3aGVyZSB0aGUgcHJlc2VudCBwdGUgd2lsbCBiZSBxdWlja2x5IHJlcGxhY2VkXG4tXHQgKiB3aXRoIGEgc3dhcCBwdGUuICBUaGVyZSYjMzk7cyBubyB3YXkgb2YgbGVha2luZyB0aGUgYml0LlxuLVx0ICovXG4tXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICF1c2VyZmF1bHRmZF93cCh2bWEpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHQvKiBBIHVmZmQtd3Agd3ItcHJvdGVjdGVkIG5vcm1hbCBwdGUgKi9cbi1cdGlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpIFx1MDAyNlx1MDAyNiBwdGVfdWZmZChwdGV2YWwpKSlcbi1cdFx0YXJtX3VmZmRfcHRlID0gdHJ1ZTtcbi1cbi1cdC8qXG4tXHQgKiBBIHVmZmQtd3Agd3ItcHJvdGVjdGVkIHN3YXAgcHRlLiAgTm90ZTogdGhpcyBzaG91bGQgZXZlbiBjb3ZlciBhblxuLVx0ICogZXhpc3RpbmcgcHRlIG1hcmtlciB3aXRoIHVmZmQtd3AgYml0IHNldC5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KHB0ZV9zd3BfdWZmZF9hbnkocHRldmFsKSkpXG4tXHRcdGFybV91ZmZkX3B0ZSA9IHRydWU7XG4tXG4tXHRpZiAodW5saWtlbHkoYXJtX3VmZmRfcHRlKSkge1xuLVx0XHRzZXRfcHRlX2F0KHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlLFxuLVx0XHRcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaGFzX3JlY2VuY3koY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX1NFUV9SRUFEIHwgVk1fUkFORF9SRUFEKSlcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggZjI2NDIzZGU0Y2EyODcuLjBmNDljZmY2N2EyYjg3IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaFxuQEAgLTI3Niw2ICYjNDM7Mjc2LDEwIEBAIHZvaWQgdW5tYXBfdm1hcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApO1xuIFxuICNpZmRlZiBDT05GSUdfTU1VXG4gXG4mIzQzO2Jvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbnJfcHRlcyk7XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSlcbiB7XG4gXHRhdG9taWNfaW5jKFx1MDAyNmFub25fdm1hLVx1MDAzZXJlZmNvdW50KTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBkNWU4NzYyNGY2OTIwNS4uZDJmMTRiYTIyNjFjZDAgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmNcbkBAIC0xNjc1LDQwICYjNDM7MTY3NSw4OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemFwX2Ryb3BfbWFya2VycyhzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXG4gXHRyZXR1cm4gZGV0YWlscy1cdTAwM2V6YXBfZmxhZ3MgXHUwMDI2IFpBUF9GTEFHX0RST1BfTUFSS0VSO1xuIH1cbiBcbi0vKlxuLSAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHdlJiMzOTtsbCByZXBsYWNlIHRoZSBub25lIHB0ZSB3aXRoIGFuIHVmZmQtd3Bcbi0gKiBzd2FwIHNwZWNpYWwgcHRlIG1hcmtlciB3aGVuIG5lY2Vzc2FyeS4gTXVzdCBiZSB3aXRoIHRoZSBwZ3RhYmxlIGxvY2sgaGVsZC5cbiYjNDM7LyoqXG4mIzQzOyAqIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMgLSBpbnN0YWxsIHVmZmQtd3AgbWFya2VycyBhZnRlciBjbGVhcmluZyBQVEVzXG4mIzQzOyAqIEB2bWE6IFRoZSBWTUEgdGhlIHBhZ2VzIGFyZSBtYXBwZWQgaW50by5cbiYjNDM7ICogQGFkZHI6IEFkZHJlc3MgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhpcyBiYXRjaCBpcyBtYXBwZWQgYXQuXG4mIzQzOyAqIEBwdGVwOiBQYWdlIHRhYmxlIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBlbnRyeSBvZiB0aGlzIGJhdGNoLlxuJiM0MzsgKiBAcHRlOiBPbGQgdmFsdWUgb2YgdGhlIGVudHJ5IHBvaW50ZWQgdG8gYnkgQHB0ZXAuXG4mIzQzOyAqIEBucl9wdGVzOiBOdW1iZXIgb2YgZW50cmllcyB0byBpbnN0YWxsLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGUgUFRFcyB3ZXJlIHdyaXRlLXByb3RlY3RlZCBieSB1ZmZkLXdwIGluIGFueSBmb3JtLCBhcm0gc3BlY2lhbCBQVEVzXG4mIzQzOyAqIHRvIHJlcGxhY2Ugbm9uZSBQVEVzLiBOT1RFISBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBQVEVzIGFyZVxuJiM0MzsgKiBhbHJlYWR5IGNsZWFyZWQgc28gd2Ugd2lsbCBuZXZlciBhY2NpZGVudGFsbHkgcmVwbGFjZSBzb21ldGhpbmcgdmFsdWFibGUuXG4mIzQzOyAqIE1lYW53aGlsZSBub25lIFBURXMgYWxzbyBtZWFuIHdlIGFyZSBub3QgZGVtb3RpbmcgdGhlIFBURXMgc28gYSBUTEIgZmx1c2ggaXNcbiYjNDM7ICogbm90IG5lZWRlZC4gRS5nLiwgd2hlbiB0aGUgUFRFcyB3ZXJlIGNsZWFyZWQsIHRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgdGFrZW5cbiYjNDM7ICogY2FyZSBvZiB0aGUgVExCIGZsdXNoLlxuJiM0MzsgKlxuJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBwYWdlIHRhYmxlIGxvY2sgaGVsZCBzbyB0aGF0IG5vIHRocmVhZCB3aWxsIHNlZSB0aGVcbiYjNDM7ICogbm9uZSBQVEVzLCBhbmQgaWYgdGhleSBzZWUgdGhlbSwgdGhleSYjMzk7bGwgZmF1bHQgYW5kIHNlcmlhbGl6ZSBhdCB0aGUgcGFnZSB0YWJsZVxuJiM0MzsgKiBsb2NrLlxuICAqXG4tICogUmV0dXJucyB0cnVlIGlmIHVmZmQtd3AgcHRlcyB3YXMgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuXG4mIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB1ZmZkLXdwIFBURXMgd2VyZSBpbnN0YWxsZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIGJvb2xcbi16YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGUsIGludCBucixcbi1cdFx0XHQgICAgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMsIHB0ZV90IHB0ZXZhbClcbiYjNDM7Ym9vbCBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBucl9wdGVzKVxuIHtcbi1cdGJvb2wgd2FzX2luc3RhbGxlZCA9IGZhbHNlO1xuJiM0MztcdGJvb2wgYXJtX3VmZmRfcHRlID0gZmFsc2U7XG4gXG4gXHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdC8qIFphcCBvbiBhbm9ueW1vdXMgYWx3YXlzIG1lYW5zIGRyb3BwaW5nIGV2ZXJ5dGhpbmcgKi9cbi1cdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4mIzQzO1x0LyogVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBwdGUgc2hvdWxkIGJlIFwmIzM0O2NsZWFyZWRcJiMzNDsgYmVmb3JlIGNhbGxpbmcgKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoIXB0ZV9ub25lKHB0ZXBfZ2V0KHB0ZXApKSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTk9URTogdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoKSBkb2VzbiYjMzk7dCBuZWVkIHRoaXMgd2hvbGVcbiYjNDM7XHQgKiB0aGluZywgYmVjYXVzZSB3aGVuIHphcHBpbmcgZWl0aGVyIGl0IG1lYW5zIGl0JiMzOTtzIGRyb3BwaW5nIHRoZVxuJiM0MztcdCAqIHBhZ2UsIG9yIGluIFRUVSB3aGVyZSB0aGUgcHJlc2VudCBwdGUgd2lsbCBiZSBxdWlja2x5IHJlcGxhY2VkXG4mIzQzO1x0ICogd2l0aCBhIHN3YXAgcHRlLiAgVGhlcmUmIzM5O3Mgbm8gd2F5IG9mIGxlYWtpbmcgdGhlIGJpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICF1c2VyZmF1bHRmZF93cCh2bWEpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAoemFwX2Ryb3BfbWFya2VycyhkZXRhaWxzKSlcbiYjNDM7XHQvKiBBIHVmZmQtd3Agd3ItcHJvdGVjdGVkIG5vcm1hbCBwdGUgKi9cbiYjNDM7XHRpZiAodW5saWtlbHkocHRlX3ByZXNlbnQocHRlKSBcdTAwMjZcdTAwMjYgcHRlX3VmZmQocHRlKSkpXG4mIzQzO1x0XHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgdWZmZC13cCB3ci1wcm90ZWN0ZWQgc3dhcCBwdGUuICBOb3RlOiB0aGlzIHNob3VsZCBldmVuIGNvdmVyIGFuXG4mIzQzO1x0ICogZXhpc3RpbmcgcHRlIG1hcmtlciB3aXRoIHVmZmQtd3AgYml0IHNldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodW5saWtlbHkocHRlX3N3cF91ZmZkX2FueShwdGUpKSlcbiYjNDM7XHRcdGFybV91ZmZkX3B0ZSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChsaWtlbHkoIWFybV91ZmZkX3B0ZSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGZvciAoOzspIHtcbi1cdFx0LyogdGhlIFBGTiBpbiB0aGUgUFRFIGlzIGlycmVsZXZhbnQuICovXG4tXHRcdGlmIChwdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCh2bWEsIGFkZHIsIHB0ZSwgcHRldmFsKSlcbi1cdFx0XHR3YXNfaW5zdGFsbGVkID0gdHJ1ZTtcbi1cdFx0aWYgKC0tbnIgPT0gMClcbiYjNDM7XHRcdHNldF9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLFxuJiM0MztcdFx0XHQgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7XG4mIzQzO1x0XHRpZiAoLS1ucl9wdGVzID09IDApXG4gXHRcdFx0YnJlYWs7XG4tXHRcdHB0ZSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRwdGVwJiM0MzsmIzQzOztcbiBcdFx0YWRkciAmIzQzOz0gUEFHRV9TSVpFO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHdhc19pbnN0YWxsZWQ7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHdlJiMzOTtsbCByZXBsYWNlIHRoZSBub25lIHB0ZSB3aXRoIGFuIHVmZmQtd3BcbiYjNDM7ICogc3dhcCBzcGVjaWFsIHB0ZSBtYXJrZXIgd2hlbiBuZWNlc3NhcnkuIE11c3QgYmUgd2l0aCB0aGUgcGd0YWJsZSBsb2NrIGhlbGQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB1ZmZkLXdwIHB0ZXMgd2FzIGluc3RhbGxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sXG4mIzQzO3phcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGUsIGludCBucixcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzLCBwdGVfdCBwdGV2YWwpXG4mIzQzO3tcbiYjNDM7XHRpZiAoemFwX2Ryb3BfbWFya2VycyhkZXRhaWxzKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCwgbnIpO1xuIH1cbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgemFwX3ByZXNlbnRfZm9saW9fcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggNzNjMmZlMmQxOTQ2MjUuLjU2ZWFkZGZjNjEwYjFjIDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmNcbkBAIC0xOTY4LDkgJiM0MzsxOTY4LDYgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRpZiAocHRlX3VudXNlZChwdGUpKVxuIFx0XHRyZXR1cm4gMTtcbiBcbi1cdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcbi1cdFx0cmV0dXJuIDE7XG4tXG4gXHQvKlxuIFx0ICogSWYgdW5tYXAgZmFpbHMsIHdlIG5lZWQgdG8gcmVzdG9yZSB0aGUgcHRlcy4gVG8gYXZvaWQgYWNjaWRlbnRhbGx5XG4gXHQgKiB1cGdyYWRpbmcgd3JpdGUgcGVybWlzc2lvbnMgZm9yIHB0ZXMgdGhhdCB3ZXJlIG5vdCBvcmlnaW5hbGx5XG5AQCAtMjM0OCw3ICYjNDM7MjM0NSw4IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdCAqIHdlIG1heSB3YW50IHRvIHJlcGxhY2UgYSBub25lIHB0ZSB3aXRoIGEgbWFya2VyIHB0ZSBpZlxuIFx0XHQgKiBpdCYjMzk7cyBmaWxlLWJhY2tlZCwgc28gd2UgZG9uJiMzOTt0IGxvc2UgdGhlIHRyYWNraW5nIGluZm8uXG4gXHRcdCAqL1xuLVx0XHRwdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCh2bWEsIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuJiM0MztcdFx0Y29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyh2bWEsIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsXG4mIzQzO1x0XHRcdFx0XHQgIG5yX3BhZ2VzKTtcbiBcbiBcdFx0LyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi9cbiBcdFx0dXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwODoyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7LAogICAgJiMzNDtQVEVfTUFSS0VSX1VGRkRfV1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzJiMzNDssCiAgICAmIzM0O3RyeV90b191bm1hcF9vbmUmIzM0OywKICAgICYjMzQ7emFwX3B0ZV9yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRvIHN1cHBvcnQgYmF0Y2hpbmcgb2YgUFRFcyB3aGVuIGluc3RhbGxpbmcgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBtYXJrZXJzIGR1cmluZyB1bm1hcCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCB0byBoYW5kbGUgbXVsdGlwbGUgUFRFcyBhdCBvbmNlIGFuZCByZW1vdmVzIHRoZSByZXN0cmljdGlvbiBpbiBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCB0aGF0IHByZXZlbnRlZCBiYXRjaGluZyBmb3IgdXNlcmZhdWx0ZmQtcHJvdGVjdGVkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZjQwN2I1MDNhMTJjOTY1YTkyNmNiMWE0MDhlYjEwZGM3Zjc0NGE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjAgMDg6MjM6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCBiNWM0ZGMwZjNmZTMyNi4uNjIxYzg2NTNkOGY3ZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaApAQCAtNTY2LDU5ICYjNDM7NTY2LDYgQEAgc3RhdGljIGlubGluZSBwdGVfbWFya2VyIGNvcHlfcHRlX21hcmtlcigKIAlyZXR1cm4gZHN0bTsKIH0KIAotLyoKLSAqIElmIHRoaXMgcHRlIGlzIHdyLXByb3RlY3RlZCBieSB1ZmZkLXdwIGluIGFueSBmb3JtLCBhcm0gdGhlIHNwZWNpYWwgcHRlIHRvCi0gKiByZXBsYWNlIGEgbm9uZSBwdGUuICBOT1RFISAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiAqcHRlIGlzIGFscmVhZHkKLSAqIGNsZWFyZWQgc28gd2Ugd2lsbCBuZXZlciBhY2NpZGVudGFsbHkgcmVwbGFjZSBzb21ldGhpbmcgdmFsdWFibGUuICBNZWFud2hpbGUKLSAqIG5vbmUgcHRlIGFsc28gbWVhbnMgd2UgYXJlIG5vdCBkZW1vdGluZyB0aGUgcHRlIHNvIHRsYiBmbHVzaGVkIGlzIG5vdCBuZWVkZWQuCi0gKiBFLmcuLCB3aGVuIHB0ZSBjbGVhcmVkIHRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgdGFrZW4gY2FyZSBvZiB0aGUgdGxiIGZsdXNoLgotICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggcGd0YWJsZSBsb2NrIGhlbGQgc28gdGhhdCBubyB0aHJlYWQgd2lsbCBzZWUgdGhlIG5vbmUKLSAqIHB0ZSwgYW5kIGlmIHRoZXkgc2VlIGl0LCB0aGV5JiMzOTtsbCBmYXVsdCBhbmQgc2VyaWFsaXplIGF0IHRoZSBwZ3RhYmxlIGxvY2suCi0gKgotICogUmV0dXJucyB0cnVlIGlmIGFuIHVmZmQtd3AgcHRlIHdhcyBpbnN0YWxsZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGlubGluZSBib29sCi1wdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICAgcHRlX3QgKnB0ZSwgcHRlX3QgcHRldmFsKQotewotCWJvb2wgYXJtX3VmZmRfcHRlID0gZmFsc2U7Ci0KLQlpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcHRlIHNob3VsZCBiZSAmIzM0O2NsZWFyZWQmIzM0OyBiZWZvcmUgY2FsbGluZyAqLwotCVdBUk5fT05fT05DRSghcHRlX25vbmUocHRlcF9nZXQocHRlKSkpOwotCi0JLyoKLQkgKiBOT1RFOiB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZCgpIGRvZXNuJiMzOTt0IG5lZWQgdGhpcyB3aG9sZQotCSAqIHRoaW5nLCBiZWNhdXNlIHdoZW4gemFwcGluZyBlaXRoZXIgaXQgbWVhbnMgaXQmIzM5O3MgZHJvcHBpbmcgdGhlCi0JICogcGFnZSwgb3IgaW4gVFRVIHdoZXJlIHRoZSBwcmVzZW50IHB0ZSB3aWxsIGJlIHF1aWNrbHkgcmVwbGFjZWQKLQkgKiB3aXRoIGEgc3dhcCBwdGUuICBUaGVyZSYjMzk7cyBubyB3YXkgb2YgbGVha2luZyB0aGUgYml0LgotCSAqLwotCWlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgIXVzZXJmYXVsdGZkX3dwKHZtYSkpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIEEgdWZmZC13cCB3ci1wcm90ZWN0ZWQgbm9ybWFsIHB0ZSAqLwotCWlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpICZhbXA7JmFtcDsgcHRlX3VmZmQocHRldmFsKSkpCi0JCWFybV91ZmZkX3B0ZSA9IHRydWU7Ci0KLQkvKgotCSAqIEEgdWZmZC13cCB3ci1wcm90ZWN0ZWQgc3dhcCBwdGUuICBOb3RlOiB0aGlzIHNob3VsZCBldmVuIGNvdmVyIGFuCi0JICogZXhpc3RpbmcgcHRlIG1hcmtlciB3aXRoIHVmZmQtd3AgYml0IHNldC4KLQkgKi8KLQlpZiAodW5saWtlbHkocHRlX3N3cF91ZmZkX2FueShwdGV2YWwpKSkKLQkJYXJtX3VmZmRfcHRlID0gdHJ1ZTsKLQotCWlmICh1bmxpa2VseShhcm1fdWZmZF9wdGUpKSB7Ci0JCXNldF9wdGVfYXQodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlLAotCQkJICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaGFzX3JlY2VuY3koY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgKFZNX1NFUV9SRUFEIHwgVk1fUkFORF9SRUFEKSkKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IGYyNjQyM2RlNGNhMjg3Li4wZjQ5Y2ZmNjdhMmI4NyAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC0yNzYsNiAmIzQzOzI3NiwxMCBAQCB2b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKTsKIAogI2lmZGVmIENPTkZJR19NTVUKIAomIzQzO2Jvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbnJfcHRlcyk7CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2Fub25fdm1hKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpCiB7CiAJYXRvbWljX2luYygmYW1wO2Fub25fdm1hLSZndDtyZWZjb3VudCk7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGQ1ZTg3NjI0ZjY5MjA1Li5kMmYxNGJhMjI2MWNkMCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTE2NzUsNDAgJiM0MzsxNjc1LDg5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6YXBfZHJvcF9tYXJrZXJzKHN0cnVjdCB6YXBfZGV0YWlscyAqZGV0YWlscykKIAlyZXR1cm4gZGV0YWlscy0mZ3Q7emFwX2ZsYWdzICZhbXA7IFpBUF9GTEFHX0RST1BfTUFSS0VSOwogfQogCi0vKgotICogVGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgd2UmIzM5O2xsIHJlcGxhY2UgdGhlIG5vbmUgcHRlIHdpdGggYW4gdWZmZC13cAotICogc3dhcCBzcGVjaWFsIHB0ZSBtYXJrZXIgd2hlbiBuZWNlc3NhcnkuIE11c3QgYmUgd2l0aCB0aGUgcGd0YWJsZSBsb2NrIGhlbGQuCiYjNDM7LyoqCiYjNDM7ICogY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyAtIGluc3RhbGwgdWZmZC13cCBtYXJrZXJzIGFmdGVyIGNsZWFyaW5nIFBURXMKJiM0MzsgKiBAdm1hOiBUaGUgVk1BIHRoZSBwYWdlcyBhcmUgbWFwcGVkIGludG8uCiYjNDM7ICogQGFkZHI6IEFkZHJlc3MgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhpcyBiYXRjaCBpcyBtYXBwZWQgYXQuCiYjNDM7ICogQHB0ZXA6IFBhZ2UgdGFibGUgcG9pbnRlciBmb3IgdGhlIGZpcnN0IGVudHJ5IG9mIHRoaXMgYmF0Y2guCiYjNDM7ICogQHB0ZTogT2xkIHZhbHVlIG9mIHRoZSBlbnRyeSBwb2ludGVkIHRvIGJ5IEBwdGVwLgomIzQzOyAqIEBucl9wdGVzOiBOdW1iZXIgb2YgZW50cmllcyB0byBpbnN0YWxsLgomIzQzOyAqCiYjNDM7ICogSWYgdGhlIFBURXMgd2VyZSB3cml0ZS1wcm90ZWN0ZWQgYnkgdWZmZC13cCBpbiBhbnkgZm9ybSwgYXJtIHNwZWNpYWwgUFRFcwomIzQzOyAqIHRvIHJlcGxhY2Ugbm9uZSBQVEVzLiBOT1RFISBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBQVEVzIGFyZQomIzQzOyAqIGFscmVhZHkgY2xlYXJlZCBzbyB3ZSB3aWxsIG5ldmVyIGFjY2lkZW50YWxseSByZXBsYWNlIHNvbWV0aGluZyB2YWx1YWJsZS4KJiM0MzsgKiBNZWFud2hpbGUgbm9uZSBQVEVzIGFsc28gbWVhbiB3ZSBhcmUgbm90IGRlbW90aW5nIHRoZSBQVEVzIHNvIGEgVExCIGZsdXNoIGlzCiYjNDM7ICogbm90IG5lZWRlZC4gRS5nLiwgd2hlbiB0aGUgUFRFcyB3ZXJlIGNsZWFyZWQsIHRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgdGFrZW4KJiM0MzsgKiBjYXJlIG9mIHRoZSBUTEIgZmx1c2guCiYjNDM7ICoKJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBwYWdlIHRhYmxlIGxvY2sgaGVsZCBzbyB0aGF0IG5vIHRocmVhZCB3aWxsIHNlZSB0aGUKJiM0MzsgKiBub25lIFBURXMsIGFuZCBpZiB0aGV5IHNlZSB0aGVtLCB0aGV5JiMzOTtsbCBmYXVsdCBhbmQgc2VyaWFsaXplIGF0IHRoZSBwYWdlIHRhYmxlCiYjNDM7ICogbG9jay4KICAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdWZmZC13cCBwdGVzIHdhcyBpbnN0YWxsZWQsIGZhbHNlIG90aGVyd2lzZS4KJiM0MzsgKiBSZXR1cm5zIHRydWUgaWYgdWZmZC13cCBQVEVzIHdlcmUgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbmxpbmUgYm9vbAotemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGUsIGludCBuciwKLQkJCSAgICAgIHN0cnVjdCB6YXBfZGV0YWlscyAqZGV0YWlscywgcHRlX3QgcHRldmFsKQomIzQzO2Jvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbnJfcHRlcykKIHsKLQlib29sIHdhc19pbnN0YWxsZWQgPSBmYWxzZTsKJiM0MzsJYm9vbCBhcm1fdWZmZF9wdGUgPSBmYWxzZTsKIAogCWlmICghdWZmZF9zdXBwb3J0c193cF9tYXJrZXIoKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JLyogWmFwIG9uIGFub255bW91cyBhbHdheXMgbWVhbnMgZHJvcHBpbmcgZXZlcnl0aGluZyAqLwotCWlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpCiYjNDM7CS8qIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcHRlIHNob3VsZCBiZSAmIzM0O2NsZWFyZWQmIzM0OyBiZWZvcmUgY2FsbGluZyAqLwomIzQzOwlXQVJOX09OX09OQ0UoIXB0ZV9ub25lKHB0ZXBfZ2V0KHB0ZXApKSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE5PVEU6IHVzZXJmYXVsdGZkX3dwX3VucG9wdWxhdGVkKCkgZG9lc24mIzM5O3QgbmVlZCB0aGlzIHdob2xlCiYjNDM7CSAqIHRoaW5nLCBiZWNhdXNlIHdoZW4gemFwcGluZyBlaXRoZXIgaXQgbWVhbnMgaXQmIzM5O3MgZHJvcHBpbmcgdGhlCiYjNDM7CSAqIHBhZ2UsIG9yIGluIFRUVSB3aGVyZSB0aGUgcHJlc2VudCBwdGUgd2lsbCBiZSBxdWlja2x5IHJlcGxhY2VkCiYjNDM7CSAqIHdpdGggYSBzd2FwIHB0ZS4gIFRoZXJlJiMzOTtzIG5vIHdheSBvZiBsZWFraW5nIHRoZSBiaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICF1c2VyZmF1bHRmZF93cCh2bWEpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlpZiAoemFwX2Ryb3BfbWFya2VycyhkZXRhaWxzKSkKJiM0MzsJLyogQSB1ZmZkLXdwIHdyLXByb3RlY3RlZCBub3JtYWwgcHRlICovCiYjNDM7CWlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGUpICZhbXA7JmFtcDsgcHRlX3VmZmQocHRlKSkpCiYjNDM7CQlhcm1fdWZmZF9wdGUgPSB0cnVlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBIHVmZmQtd3Agd3ItcHJvdGVjdGVkIHN3YXAgcHRlLiAgTm90ZTogdGhpcyBzaG91bGQgZXZlbiBjb3ZlciBhbgomIzQzOwkgKiBleGlzdGluZyBwdGUgbWFya2VyIHdpdGggdWZmZC13cCBiaXQgc2V0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KHB0ZV9zd3BfdWZmZF9hbnkocHRlKSkpCiYjNDM7CQlhcm1fdWZmZF9wdGUgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAobGlrZWx5KCFhcm1fdWZmZF9wdGUpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlmb3IgKDs7KSB7Ci0JCS8qIHRoZSBQRk4gaW4gdGhlIFBURSBpcyBpcnJlbGV2YW50LiAqLwotCQlpZiAocHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCkpCi0JCQl3YXNfaW5zdGFsbGVkID0gdHJ1ZTsKLQkJaWYgKC0tbnIgPT0gMCkKJiM0MzsJCXNldF9wdGVfYXQodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlcCwKJiM0MzsJCQkgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7CiYjNDM7CQlpZiAoLS1ucl9wdGVzID09IDApCiAJCQlicmVhazsKLQkJcHRlJiM0MzsmIzQzOzsKJiM0MzsJCXB0ZXAmIzQzOyYjNDM7OwogCQlhZGRyICYjNDM7PSBQQUdFX1NJWkU7CiAJfQogCi0JcmV0dXJuIHdhc19pbnN0YWxsZWQ7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHdlJiMzOTtsbCByZXBsYWNlIHRoZSBub25lIHB0ZSB3aXRoIGFuIHVmZmQtd3AKJiM0MzsgKiBzd2FwIHNwZWNpYWwgcHRlIG1hcmtlciB3aGVuIG5lY2Vzc2FyeS4gTXVzdCBiZSB3aXRoIHRoZSBwZ3RhYmxlIGxvY2sgaGVsZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB1ZmZkLXdwIHB0ZXMgd2FzIGluc3RhbGxlZCwgZmFsc2Ugb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3phcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSwgaW50IG5yLAomIzQzOwkJCSAgICAgIHN0cnVjdCB6YXBfZGV0YWlscyAqZGV0YWlscywgcHRlX3QgcHRldmFsKQomIzQzO3sKJiM0MzsJaWYgKHphcF9kcm9wX21hcmtlcnMoZGV0YWlscykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHZtYSwgYWRkciwgcHRlLCBwdGV2YWwsIG5yKTsKIH0KIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHphcF9wcmVzZW50X2ZvbGlvX3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCA3M2MyZmUyZDE5NDYyNS4uNTZlYWRkZmM2MTBiMWMgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmMKQEAgLTE5NjgsOSAmIzQzOzE5NjgsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbywKIAlpZiAocHRlX3VudXNlZChwdGUpKQogCQlyZXR1cm4gMTsKIAotCWlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSkKLQkJcmV0dXJuIDE7Ci0KIAkvKgogCSAqIElmIHVubWFwIGZhaWxzLCB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIHB0ZXMuIFRvIGF2b2lkIGFjY2lkZW50YWxseQogCSAqIHVwZ3JhZGluZyB3cml0ZSBwZXJtaXNzaW9ucyBmb3IgcHRlcyB0aGF0IHdlcmUgbm90IG9yaWdpbmFsbHkKQEAgLTIzNDgsNyAmIzQzOzIzNDUsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkgKiB3ZSBtYXkgd2FudCB0byByZXBsYWNlIGEgbm9uZSBwdGUgd2l0aCBhIG1hcmtlciBwdGUgaWYKIAkJICogaXQmIzM5O3MgZmlsZS1iYWNrZWQsIHNvIHdlIGRvbiYjMzk7dCBsb3NlIHRoZSB0cmFja2luZyBpbmZvLgogCQkgKi8KLQkJcHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTsKJiM0MzsJCWNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLAomIzQzOwkJCQkJICBucl9wYWdlcyk7CiAKIAkJLyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi8KIAkJdXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ3NAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHJlZmFjdG9yaW5nIGhvdyB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIGlzIGhhbmRsZWQgZHVyaW5nIHBhZ2UgdW5tYXBwaW5nLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGludHJvZHVjZWQgdGhpcyBuZXcgZnVuY3Rpb24sIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCwgYW5kIGl0JiMzOTtzIHJlcGxhY2luZyBgcHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRgLiBUaGUgbWFpbiBpbXBhY3QgaXMgd2l0aGluIGB0cnlfdG9fdW5tYXBfb25lYCB3aGVyZSB0aGUgbmV3IGJhdGNoLW9yaWVudGVkIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZC4gRXNzZW50aWFsbHksIGl0IG5vdyB1bm1hcHMgYmF0Y2hlcyBvZiBwYWdlcywgd2hpY2ggaXMgYSBrZXkgY2hhbmdlLgoKV2FpdCwgbG9va2luZyBhdCBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCBpbiBgbW0vcm1hcC5jYCBpcyBhbHNvIG1vZGlmaWVkLCB3aGVyZSBhIGNoZWNrIGB1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKWAgaXMgcmVtb3ZlZC4gVGhpcyBtZWFucyBgdHJ5X3RvX3VubWFwX29uZWAgY2FuIG5vdyB1bm1hcCBhIGJhdGNoIG9mIFBURXMsIGFuZCBpbnN0YWxsIHVmZmQtd3AgbWFya2VycyB1c2luZyB0aGUgbmV3IGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCwgZXZlbiBpZiB0aGUgVk1BIGlzIHVzZXJmYXVsdGZkLXByb3RlY3RlZC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0JiMzOTtzIHdpZGVuaW5nIHRoZSBzY29wZSBvZiB0aGUgdWZmZCB3cml0ZSBwcm90ZWN0aW9uIGFuZCBvcHRpbWl6aW5nIHRoZSB1bm1hcHBpbmcgcHJvY2Vzcy4KClRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiB0aGUgcm1hcCBhbmQgdXNlcmZhdWx0ZmQgYXJlYXMuIFRoaXMgbmVlZHMgY2FyZWZ1bCBhdHRlbnRpb24sIGFuZCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgaW4gb3JkZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHN5bWJvbHMgdG8gdGFyZ2V0IGZvciBhIGdvb2QgZnV6emluZyBzdHJhdGVneS4KCkkmIzM5O20gcHJldHR5IGNlcnRhaW4gYENPTkZJR19VU0VSRkFVTFRGRGAgaXMgcmVsZXZhbnQsIGFsb25nIHdpdGggYENPTkZJR19NTVVgIGdpdmVuIHRoZSB0b3VjaGVkIGZpbGVzLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoaXMsIGJ1dCBpdCBzZWVtcyBjb3JyZWN0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaXMgYWxsIHRoYXQmIzM5O3MgbmVlZGVkLiBGb3IgZm9jdXMgc3ltYm9scywgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBwcmlvcml0aXplIGB0cnlfdG9fdW5tYXBfb25lYCwgYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgLCBgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRgLCBhbmQgYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAuCgpMZXQmIzM5O3MgdXNlIGBncmVwcGVyYCB0byBjb25maXJtIHRoYXQgYFVTRVJGQVVMVEZEYCBpcyB0aGUgY29ycmVjdCBjb25maWcgYnkgY2hlY2tpbmcgZm9yIHJlbGV2YW50IHN5bWJvbHMgbGlrZSBgdXNlcmZhdWx0ZmRfcHJvdGVjdGVkYCBhbmQgYHVmZmRfc3VwcG9ydHNfd3BfbWFya2VyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZmF1bHRmZF9wcm90ZWN0ZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjIyPXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9yd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjI2LVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjI3OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9wcm90ZWN0ZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yMjgte1xuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTM2NT1zdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfcndwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTM2OS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjM3MDpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMzcxLXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE4MDk9c3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE4NTktXHRwZ3RhYmxlX3RyYW5zX2h1Z2VfZGVwb3NpdChkc3RfbW0sIGRzdF9wbWQsIHBndGFibGUpO1xubW0vaHVnZV9tZW1vcnkuYzoxODYwOlx0aWYgKCF1c2VyZmF1bHRmZF9wcm90ZWN0ZWQoZHN0X3ZtYSkpXG5tbS9odWdlX21lbW9yeS5jLTE4NjEtXHRcdHBtZCA9IHBtZF9zd3BfY2xlYXJfdWZmZChwbWQpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTg2NT1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE5NTYtXHQvKiBTZWUgX19jb3B5X3ByZXNlbnRfcHRlcygpOiByZXN0b3JlIGFjY2Vzc2libGUgcHJvdGVjdGlvbi4gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MTk1NzpcdGlmICghdXNlcmZhdWx0ZmRfcHJvdGVjdGVkKGRzdF92bWEpKSB7XG5tbS9odWdlX21lbW9yeS5jLTE5NTgtXHRcdGlmICh1c2VyZmF1bHRmZF9yd3Aoc3JjX3ZtYSkgXHUwMDI2XHUwMDI2IHBtZF91ZmZkKHBtZCkpXG4tLVxubW0vaHVnZXRsYi5jPTQ4Nzk9aHVnZXRsYl9pbnN0YWxsX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2h1Z2V0bGIuYy00ODg1LVx0aHVnZXRsYl9hZGRfbmV3X2Fub25fcm1hcChuZXdfZm9saW8sIHZtYSwgYWRkcik7XG5tbS9odWdldGxiLmM6NDg4NjpcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSBcdTAwMjZcdTAwMjYgaHVnZV9wdGVfdWZmZChvbGQpKSB7XG5tbS9odWdldGxiLmMtNDg4Ny1cdFx0bmV3cHRlID0gaHVnZV9wdGVfbWt1ZmZkKG5ld3B0ZSk7XG4tLVxubW0vaHVnZXRsYi5jPTQ5MDE9aW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLFxuLS1cbm1tL2h1Z2V0bGIuYy00OTg1LVx0XHRcdFx0ZW50cnkgPSBzd3BfZW50cnlfdG9fcHRlKHNvZnRsZWFmKTtcbm1tL2h1Z2V0bGIuYzo0OTg2Olx0XHRcdFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZChzcmNfdm1hKSBcdTAwMjZcdTAwMjYgdWZmZClcbm1tL2h1Z2V0bGIuYy00OTg3LVx0XHRcdFx0XHRlbnRyeSA9IHB0ZV9zd3BfbWt1ZmZkKGVudHJ5KTtcbi0tXG5tbS9odWdldGxiLmMtNDk4OS1cdFx0XHR9XG5tbS9odWdldGxiLmM6NDk5MDpcdFx0XHRpZiAoIXVzZXJmYXVsdGZkX3Byb3RlY3RlZChkc3Rfdm1hKSlcbm1tL2h1Z2V0bGIuYy00OTkxLVx0XHRcdFx0ZW50cnkgPSBwdGVfc3dwX2NsZWFyX3VmZmQoZW50cnkpO1xuLS1cbm1tL2h1Z2V0bGIuYy01MDU1LVx0XHRcdC8qIFNlZSBfX2NvcHlfcHJlc2VudF9wdGVzKCk6IHJlc3RvcmUgYWNjZXNzaWJsZSBwcm90ZWN0aW9uLiAqL1xubW0vaHVnZXRsYi5jOjUwNTY6XHRcdFx0aWYgKCF1c2VyZmF1bHRmZF9wcm90ZWN0ZWQoZHN0X3ZtYSkpIHtcbm1tL2h1Z2V0bGIuYy01MDU3LVx0XHRcdFx0aWYgKHVzZXJmYXVsdGZkX3J3cChzcmNfdm1hKSBcdTAwMjZcdTAwMjYgaHVnZV9wdGVfdWZmZChlbnRyeSkpIHtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTg1NT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTg5Ny1cdCAqL1xubW0va2h1Z2VwYWdlZC5jOjE4OTg6XHRpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpXG5tbS9raHVnZXBhZ2VkLmMtMTg5OS1cdFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIxMDA9c3RhdGljIGJvb2wgZmlsZV9iYWNrZWRfdm1hX2lzX3JldHJhY3RhYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2todWdlcGFnZWQuYy0yMTE3LVx0ICovXG5tbS9raHVnZXBhZ2VkLmM6MjExODpcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcbm1tL2todWdlcGFnZWQuYy0yMTE5LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vbWVtb3J5LmM9MTAwMT1jb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxuLS1cbm1tL21lbW9yeS5jLTEwOTYtXHR9XG5tbS9tZW1vcnkuYzoxMDk3Olx0aWYgKCF1c2VyZmF1bHRmZF9wcm90ZWN0ZWQoZHN0X3ZtYSkpXG5tbS9tZW1vcnkuYy0xMDk4LVx0XHRwdGUgPSBwdGVfc3dwX2NsZWFyX3VmZmQocHRlKTtcbi0tXG5tbS9tZW1vcnkuYz0xMTE2PWNvcHlfcHJlc2VudF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxuLS1cbm1tL21lbW9yeS5jLTExNDMtXHRwdGUgPSBtYXliZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KHB0ZSksIGRzdF92bWEpO1xubW0vbWVtb3J5LmM6MTE0NDpcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQoZHN0X3ZtYSkgXHUwMDI2XHUwMDI2IHB0ZV91ZmZkKHB0ZXBfZ2V0KHNyY19wdGUpKSkge1xubW0vbWVtb3J5LmMtMTE0NS1cdFx0LyogVGhlIHVmZmQgYml0IG5lZWRzIHRvIGJlIGRlbGl2ZXJlZCB0byB0aGUgZGVzdCBwdGUgYXMgd2VsbCAqL1xuLS1cbm1tL21lbW9yeS5jPTExNTU9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fY29weV9wcmVzZW50X3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLS1cbm1tL21lbW9yeS5jLTExNzYtXHQgKi9cbm1tL21lbW9yeS5jOjExNzc6XHRpZiAoIXVzZXJmYXVsdGZkX3Byb3RlY3RlZChkc3Rfdm1hKSkge1xubW0vbWVtb3J5LmMtMTE3OC1cdFx0aWYgKHVzZXJmYXVsdGZkX3J3cChzcmNfdm1hKSBcdTAwMjZcdTAwMjYgcHRlX3VmZmQocHRlKSlcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTIyNjA9c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdXNlcmZhdWx0ZmRfY2xlYXJfdm1hKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIyNzktXHQvKiBDbGVhciB0aGUgdWZmZCBiaXQgYW5kL29yIHJlc3RvcmUgcHJvdG5vbmUgUFRFcyAqL1xubW0vdXNlcmZhdWx0ZmQuYzoyMjgwOlx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKSB7XG5tbS91c2VyZmF1bHRmZC5jLTIyODEtXHRcdHVuc2lnbmVkIGludCBtbV9jcF9mbGFncyA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA2NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgVXNlcmZhdWx0ZmQgYW5kIFdyaXRlIFByb3RlY3Rpb24gTWFya2VycyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIHdoZXJlIGBDT05GSUdfVVNFUkZBVUxURkRgIGlzIGVuYWJsZWQuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBtZW1vcnkgbWFuYWdlbWVudCBtZWNoYW5pc20gdGhhdCBhbGxvd3MgdXNlci1zcGFjZSBwcm9jZXNzZXMgdG8gaGFuZGxlIHBhZ2UgZmF1bHRzLiBOb3csIHdoYXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGZvciB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgaG93IHdlbGwgaXQgaW50ZWdyYXRlcyB3aXRoIHdyaXRlIHByb3RlY3Rpb24gKFdQKSBtYXJrZXJzLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciB0aGUgc3lzdGVtIHN1cHBvcnRzIHRob3NlIG1hcmtlcnMgaW4gY29uanVuY3Rpb24gd2l0aCB1c2VyZmF1bHRmZCBiZWNhdXNlIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aG9zZSBmZWF0dXJlcyBpcyBhIGNvbW1vbiBhcmVhIG9mIGludGVyZXN0IGZvciBhZHZhbmNlZCBtZW1vcnkgbWFuYWdlbWVudCBvcHRpbWl6YXRpb24uIFNvLCB0aGUgbmV4dCBjaGVjayBJJiMzOTtsbCBkbyBpbnZvbHZlcyBjb25maXJtaW5nIHdoZXRoZXIgYHVmZmRfc3VwcG9ydHNfd3BfbWFya2VyYCBpcyBhbHNvIHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBzeXN0ZW0uIFRoYXQgZ2l2ZXMgYSBzb2xpZCBiYXNpcyBmb3IgYXNzZXNzaW5nIGhvdyB3ZSBjYW4gbGV2ZXJhZ2UgdGhlIHByb3RlY3Rpb24gZmVhdHVyZXMgYXZhaWxhYmxlIHRvIHVzIHdoZW4gYnVpbGRpbmcgb3VyIGFwcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZmZkX3N1cHBvcnRzX3dwX21hcmtlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oLTE1LVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaDoxNjpzdGF0aWMgaW5saW5lIGJvb2wgdWZmZF9zdXBwb3J0c193cF9tYXJrZXIodm9pZClcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmgtMTcte1xuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTMxMj1zdGF0aWMgaW5saW5lIGJvb2wgcHRlX3N3cF91ZmZkX2FueShwdGVfdCBwdGUpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0zMTMte1xuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MzE0Olx0aWYgKCF1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcigpKVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMzE1LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vbWVtb3J5LmM9MTY5OT1ib29sIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWVtb3J5LmMtMTcwNC1cbm1tL21lbW9yeS5jOjE3MDU6XHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpXG5tbS9tZW1vcnkuYy0xNzA2LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0yMTk1PXN0YXRpYyBib29sIHZtYV9jYW5fdXNlcmZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjIyMi1cdCAqL1xubW0vdXNlcmZhdWx0ZmQuYzoyMjIzOlx0aWYgKCF1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcigpIFx1MDAyNlx1MDAyNiAodm1fZmxhZ3MgXHUwMDI2IFZNX1VGRkRfV1ApIFx1MDAyNlx1MDAyNlxubW0vdXNlcmZhdWx0ZmQuYy0yMjI0LVx0ICAgICF2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00MzI0PXN0YXRpYyBfX3U2NCB1ZmZkX2FwaV9hdmFpbGFibGVfZmVhdHVyZXModm9pZClcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQzMzEtXHRcdGYgXHUwMDI2PSB+VUZGRF9GRUFUVVJFX1BBR0VGQVVMVF9GTEFHX1dQO1xubW0vdXNlcmZhdWx0ZmQuYzo0MzMyOlx0aWYgKCF1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcigpKVxubW0vdXNlcmZhdWx0ZmQuYy00MzMzLVx0XHRmIFx1MDAyNj0gfihVRkZEX0ZFQVRVUkVfV1BfSFVHRVRMQkZTX1NITUVNIHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODI1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBVc2VyZmF1bHRmZCAoVUZGRCkgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgdWZmZF9zdXBwb3J0c193cF9tYXJrZXJgIGlzIGRlZmluZWQgd2l0aGluIGBpbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIG1hcCBvdXQgdGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gcGljdHVyZSBhcm91bmQgdGhpcy4gT2J2aW91c2x5LCBgQ09ORklHX1VTRVJGQVVMVEZEYCBpcyB0aGUgZnVuZGFtZW50YWwgZW5hYmxpbmcgb3B0aW9uIOKAkyB0aGF0JiMzOTtzIGEgZ2l2ZW4uIEhvd2V2ZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcsIHNvIEkmIzM5O2xsIGFsc28gY29uZmlybSB0aGF0IGBDT05GSUdfTU1VYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQsIGFzIFVGRkQgcmVsaWVzIG9uIG1lbW9yeSBtYW5hZ2VtZW50IGNhcGFiaWxpdGllcy4gSG1tLCBJIGhhdmUgYSBuaWdnbGluZyBmZWVsaW5nIHRoZXJlIG1pZ2h0IGJlIGEgbW9yZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gd3JpdGUgcHJvdGVjdGlvbiAoV1ApIG1hcmtlcnMgaW4gVUZGRC4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGlmIGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYCBpcyBhIHZhbGlkIG9wdGlvbi4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UFRFX01BUktFUl9VRkZEX1dQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdXNlcmZhdWx0ZmQucnN0PTM5Mz1SV1AgbWFya2VyOiB0aGUgbmV4dCBhY2Nlc3MgcmUtcG9wdWxhdGVzIHRoZSByYW5nZSB3aXRob3V0IHByb3RlY3Rpb24uXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3VzZXJmYXVsdGZkLnJzdDozOTQ6VW5saWtlIFdQICh3aGljaCBwZXJzaXN0cyB2aWEgYGBQVEVfTUFSS0VSX1VGRkRfV1BgYCksIHRoZXJlIGlzIG5vXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3VzZXJmYXVsdGZkLnJzdC0zOTUtcGVyc2lzdGVudCBSV1AgbWFya2VyIHRvZGF5LiBUaGUgdXNlciBuZWVkcyB0byByZS1hcm0gdGhlIHJhbmdlIHdpdGhcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjUwMz1zdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNTEzLVx0XHRzZXRfcHRlX2F0KHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlLFxuZnMvcHJvYy90YXNrX21tdS5jOjI1MTQ6XHRcdFx0ICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpO1xuZnMvcHJvYy90YXNrX21tdS5jLTI1MTUtXHR9IGVsc2Uge1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0yNjM2PXN0YXRpYyB2b2lkIG1ha2VfdWZmZF93cF9odWdlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY0NC1cdFx0c2V0X2h1Z2VfcHRlX2F0KHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlcCxcbmZzL3Byb2MvdGFza19tbXUuYzoyNjQ1Olx0XHRcdFx0bWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCksIHBzaXplKTtcbmZzL3Byb2MvdGFza19tbXUuYy0yNjQ2LVx0XHRyZXR1cm47XG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaD0xNj1zdGF0aWMgaW5saW5lIGJvb2wgdWZmZF9zdXBwb3J0c193cF9tYXJrZXIodm9pZClcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmgtMTcte1xuaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaDoxODpcdHJldHVybiBwZ3RhYmxlX3N1cHBvcnRzX3VmZmQoKSBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQKTtcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmgtMTktfVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQ3Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdWZmZF93cF9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00ODAtXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo0ODE6XHRyZXR1cm4gc29mdGxlYWZfdG9fbWFya2VyKGVudHJ5KSBcdTAwMjYgUFRFX01BUktFUl9VRkZEX1dQO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDgyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTU1NT1zdGF0aWMgaW5saW5lIHB0ZV9tYXJrZXIgY29weV9wdGVfbWFya2VyKFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTYyLVx0LyogT25seSBjb3B5IFBURSBtYXJrZXJzIGlmIFVGRkQgcmVnaXN0ZXIgbWF0Y2hlcy4gKi9cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTYzOlx0aWYgKChzcmNtIFx1MDAyNiBQVEVfTUFSS0VSX1VGRkRfV1ApIFx1MDAyNlx1MDAyNiB1c2VyZmF1bHRmZF93cChkc3Rfdm1hKSlcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTY0Olx0XHRkc3RtIHw9IFBURV9NQVJLRVJfVUZGRF9XUDtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTY1LVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTI4MT10eXBlZGVmIHVuc2lnbmVkIGxvbmcgcHRlX21hcmtlcjtcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTI4Mi1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjI4MzojZGVmaW5lICBQVEVfTUFSS0VSX1VGRkRfV1BcdFx0XHRCSVQoMClcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTI4NC0vKlxuLS1cbm1tL0tjb25maWc9MTM4Mj1tZW51Y29uZmlnIFVTRVJGQVVMVEZEXG4tLVxubW0vS2NvbmZpZy0xMzg4LVxubW0vS2NvbmZpZzoxMzg5OmNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbm1tL0tjb25maWctMTM5MC1cdGJvb2wgXCYjMzQ7VXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBzdXBwb3J0IGZvciBzaG1lbS9odWdldGxiZnNcJiMzNDtcbi0tXG5tbS9odWdldGxiLmM9NTIxMz12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUyNzQtXHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB0ZXAsXG5tbS9odWdldGxiLmM6NTI3NTpcdFx0XHRcdFx0XHRtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSxcbm1tL2h1Z2V0bGIuYy01Mjc2LVx0XHRcdFx0XHRcdHN6KTtcbi0tXG5tbS9odWdldGxiLmMtNTMxMC1cdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB0ZXAsXG5tbS9odWdldGxiLmM6NTMxMTpcdFx0XHRcdFx0bWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCksXG5tbS9odWdldGxiLmMtNTMxMi1cdFx0XHRcdFx0c3opO1xuLS1cbm1tL2h1Z2V0bGIuYz02NDk2PWxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNjU3NC1cdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlcCxcbm1tL2h1Z2V0bGIuYzo2NTc1Olx0XHRcdFx0XHRcdG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApLFxubW0vaHVnZXRsYi5jLTY1NzYtXHRcdFx0XHRcdFx0cHNpemUpO1xuLS1cbm1tL21lbW9yeS5jPTE2OTk9Ym9vbCBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbW9yeS5jLTE3MzUtXHRcdHNldF9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLFxubW0vbWVtb3J5LmM6MTczNjpcdFx0XHQgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7XG5tbS9tZW1vcnkuYy0xNzM3LVx0XHRpZiAoLS1ucl9wdGVzID09IDApXG4tLVxubW0vbWVtb3J5LmM9NDY2OT1zdGF0aWMgdm1fZmF1bHRfdCBwdGVfbWFya2VyX2NsZWFyKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ2NzktXHQgKiBUaGlzIHNob3VsZCBhbHNvIGNvdmVyIHRoZSBjYXNlIHdoZXJlIGUuZy4gdGhlIHB0ZSBjaGFuZ2VkXG5tbS9tZW1vcnkuYzo0NjgwOlx0ICogcXVpY2tseSBmcm9tIGEgUFRFX01BUktFUl9VRkZEX1dQIGludG8gUFRFX01BUktFUl9QT0lTT05FRC5cbm1tL21lbW9yeS5jLTQ2ODEtXHQgKiBTbyBwdGVfaXNfbWFya2VyKCkgY2hlY2sgaXMgbm90IGVub3VnaCB0byBzYWZlbHkgZHJvcCB0aGUgcHRlLlxuLS1cbm1tL21wcm90ZWN0LmM9MzMxPXN0YXRpYyBsb25nIGNoYW5nZV9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tcHJvdGVjdC5jLTQyNy1cdFx0XHRcdHNldF9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUsXG5tbS9tcHJvdGVjdC5jOjQyODpcdFx0XHRcdFx0ICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpO1xubW0vbXByb3RlY3QuYy00MjktXHRcdFx0XHRwYWdlcyYjNDM7JiM0Mzs7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnPTI9Q09ORklHX1VTRVJGQVVMVEZEPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZzozOkNPTkZJR19QVEVfTUFSS0VSX1VGRkRfV1A9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnLTQtQ09ORklHX1RFU1RfVk1BTExPQz1tXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgyOAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYCBDb25maWd1cmF0aW9uIGFuZCBSZWxldmFudCBGdW5jdGlvbnMqKgoKT2theSwgc28gYENPTkZJR19QVEVfTUFSS0VSX1VGRkRfV1BgIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHdoaWNoIGltcGxpZXMgd2UmIzM5O3JlIGVuYWJsaW5nIGBVU0VSRkFVTFRGRGAgYWxvbmcgd2l0aCBgUFRFX01BUktFUl9VRkZEX1dQYC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoaXMuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBmb2N1cyBzeW1ib2xzLiBJJiMzOTt2ZSBnb3Q6IGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCwgYHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkYCwgYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAsIGFuZCBgdHJ5X3RvX3VubWFwX29uZWAuCgpBbHJpZ2h0LCBhcmUgdGhlc2UgZnVuY3Rpb25zIHJlYWNoYWJsZT8gWWVzLCB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgYG1tL21lbW9yeS5jYCBhbmQgYG1tL3JtYXAuY2AgZmlsZXMuIEdvb2QuIGB0cnlfdG9fdW5tYXBfb25lYCBsb29rcyB0byBiZSBhIGNvcmUgZnVuY3Rpb247IGl0JiMzOTtzIHRoZSB3b3JraG9yc2UgZm9yIHVubWFwcGluZyBwYWdlcy4gQW5kIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgIGlzIGRlZmluaXRlbHkgdXNlZCBpbnNpZGUgYHRyeV90b191bm1hcF9vbmVgLiBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2Agc2VlbXMgdG8gYmUgdGhlIG5ldyBraWQgb24gdGhlIGJsb2NrLgoKSG9sZCBvbiwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRgIGlzIHN0YXRpYyBhbmQgaW5saW5lLiBBaCwgeWVzLCBgc3RhdGljIGlubGluZSBib29sIHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkYC4gU2luY2UgaXQmIzM5O3MgaW5saW5lLCBpdCBtaWdodCBub3QgYmUgdGhlIG1vc3QgaWxsdW1pbmF0aW5nIHN5bWJvbCB0byBmb2N1cyBvbiBkaXJlY3RseS4gTm93LCBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AgaXMgZXhwb3J0ZWQgaW4gYG1tL2ludGVybmFsLmhgIGFuZCBkZWZpbmVkIGluIGBtbS9tZW1vcnkuY2AuIEl0JiMzOTtzIG5vdCBpbmxpbmUsIHdoaWNoIGlzIHVzZWZ1bC4gQXMgZm9yIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgLCBpdCYjMzk7cyBgc3RhdGljIGlubGluZWAgaW4gYG1tL3JtYXAuY2AuIEFsc28sIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBgc3RhdGljIGJvb2xgIGluIGBtbS9ybWFwLmNgLgoKT2theSwgSSYjMzk7bGwgbGlzdCBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AgYW5kIGB0cnlfdG9fdW5tYXBfb25lYC4KCldhaXQgYSBtaW51dGUsIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgIGlzIGBzdGF0aWMgaW5saW5lYC4gTm93LCBgdHJ5X3RvX3VubWFwX29uZWAgbWlnaHQgYmUgdG9vIGhvdCwgY29uc2lkZXJpbmcgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyBwYWdlIHJlY2xhaW0sIG1pZ3JhdGlvbiwgZXRjLiBJdCYjMzk7cyBwcm9iYWJseSB0aGUgbWFpbiBmdW5jdGlvbiB0aGF0JiMzOTtzIGNoYW5nZWQsIGJ1dCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrLiBJIHNob3VsZCBjaGVjayBgemFwX3ByZXNlbnRfZm9saW9fcHRlc2Agb3IgYHphcF9wdGVfcmFuZ2VgIHdoZXJlIGB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZGAgaXMgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9MTc1Mj1zdGF0aWMgaW5saW5lIGJvb2xcbm1tL21lbW9yeS5jOjE3NTM6emFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9tZW1vcnkuYy0xNzU0LVx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSwgaW50IG5yLFxuLS1cbm1tL21lbW9yeS5jPTE3NjM9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHphcF9wcmVzZW50X2ZvbGlvX3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0xNzkyLVx0aWYgKHVubGlrZWx5KHVzZXJmYXVsdGZkX3B0ZV93cCh2bWEsIHB0ZW50KSkpXG5tbS9tZW1vcnkuYzoxNzkzOlx0XHQqYW55X3NraXBwZWQgPSB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCh2bWEsIGFkZHIsIHB0ZSxcbm1tL21lbW9yeS5jLTE3OTQtXHRcdFx0XHRcdFx0XHQgICAgIG5yLCBkZXRhaWxzLCBwdGVudCk7XG4tLVxubW0vbWVtb3J5LmM9MTgxND1zdGF0aWMgaW5saW5lIGludCB6YXBfcHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMTgzMS1cdFx0aWYgKHVzZXJmYXVsdGZkX3B0ZV93cCh2bWEsIHB0ZW50KSlcbm1tL21lbW9yeS5jOjE4MzI6XHRcdFx0KmFueV9za2lwcGVkID0gemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLFxubW0vbWVtb3J5LmMtMTgzMy1cdFx0XHRcdFx0XHRwdGUsIDEsIGRldGFpbHMsIHB0ZW50KTtcbi0tXG5tbS9tZW1vcnkuYz0xODYwPXN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0xODgwLVx0XHQgKiBjb25zaWRlciB1ZmZkLXdwIGJpdCB3aGVuIHphcC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sXG5tbS9tZW1vcnkuYzoxODgxOlx0XHQgKiBzZWUgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoKS5cbm1tL21lbW9yeS5jLTE4ODItXHRcdCAqL1xuLS1cbm1tL21lbW9yeS5jLTE5MjUtXHRjbGVhcl9ub25wcmVzZW50X3B0ZXModm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUsIG5yKTtcbm1tL21lbW9yeS5jOjE5MjY6XHQqYW55X3NraXBwZWQgPSB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCh2bWEsIGFkZHIsIHB0ZSwgbnIsIGRldGFpbHMsIHB0ZW50KTtcbm1tL21lbW9yeS5jLTE5MjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDYwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIFBURSBaYXBwaW5nIEZ1bmN0aW9ucyoqCgpSaWdodCwgc28gSSBzZWUgdGhlc2UgYHphcF9wcmVzZW50X2ZvbGlvX3B0ZXNgLCBgemFwX3ByZXNlbnRfcHRlc2AsIGFuZCBgemFwX25vbnByZXNlbnRfcHRlc2AgZnVuY3Rpb25zIGFsbCBzZWVtIHRvIGJlIHV0aWxpemluZyBzb21ldGhpbmcgY2VudHJhbC4gVGhlIGZhY3QgdGhhdCB0aGV5JiMzOTtyZSBkZWZpbmVkIGFzIGBzdGF0aWMgaW5saW5lYCBvciBgc3RhdGljIF9fYWx3YXlzX2lubGluZWAgaXMgaW50ZXJlc3Rpbmc7IGxpa2VseSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgdG8gYXZvaWQgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZCB3aGVyZSBwb3NzaWJsZSwgd2hpY2ggaXMgc2Vuc2libGUgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZXkgYXJlIGFsc28gY2FsbGVkIGZyb20gYHphcF9wdGVfcmFuZ2VgLCB3aGljaCBoYXMgY2F1Z2h0IG15IGF0dGVudGlvbi4gVGhpcyBzdWdnZXN0cyB0aGF0IGB6YXBfcHRlX3JhbmdlYCBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGlzICYjMzQ7emFwcGluZyYjMzQ7IHByb2Nlc3MgaXMgb3JjaGVzdHJhdGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgemFwX3B0ZV9yYW5nZWAgaXMgZG9pbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIHByb2Nlc3MuIFRpbWUgdG8gY2hlY2sgYHphcF9wdGVfcmFuZ2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6YXBfcHRlX3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9NDQwPVRoZXJlIGlzIGFsc28gYSBmaWxlLXN5c3RlbSBzcGVjaWZpYyBsb2NrIG9yZGVyaW5nIGNvbW1lbnQgbG9jYXRlZCBhdCB0aGUgdG9wIG9mXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC00ODUtICAgIC1cdTAwM2Vpbm9kZS1cdTAwM2VpX2xvY2sgICAgICAgICAgICAgICAgICAgICAoZm9saW9fcmVtb3ZlX3JtYXBfcHRlLVx1MDAzZXNldF9wYWdlX2RpcnR5KVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo0ODY6ICAgIGJkaS53Yi1cdTAwM2VsaXN0X2xvY2sgICAgICAgICAgICAgICAgICAgKHphcF9wdGVfcmFuZ2UtXHUwMDNlc2V0X3BhZ2VfZGlydHkpXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjQ4NzogICAgLVx1MDAzZWlub2RlLVx1MDAzZWlfbG9jayAgICAgICAgICAgICAgICAgICAgICh6YXBfcHRlX3JhbmdlLVx1MDAzZXNldF9wYWdlX2RpcnR5KVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo0ODg6ICAgIC1cdTAwM2Vwcml2YXRlX2xvY2sgICAgICAgICAgICAgICAgICAgICAgKHphcF9wdGVfcmFuZ2UtXHUwMDNlYmxvY2tfZGlydHlfZm9saW8pXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTQ4OS1cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MzExMz1leHRlcm4gdm9pZCBwYWdlZmF1bHRfb3V0X29mX21lbW9yeSh2b2lkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMzExOC0vKlxuaW5jbHVkZS9saW51eC9tbS5oOjMxMTk6ICogUGFyYW1ldGVyIGJsb2NrIHBhc3NlZCBkb3duIHRvIHphcF9wdGVfcmFuZ2UgaW4gZXhjZXB0aW9uYWwgY2FzZXMuXG5pbmNsdWRlL2xpbnV4L21tLmgtMzEyMC0gKi9cbi0tXG5tbS9maWxlbWFwLmMtMTIzLSAqICAgIC1cdTAwM2Vpbm9kZS1cdTAwM2VpX2xvY2tcdFx0KGZvbGlvX3JlbW92ZV9ybWFwX3B0ZS1cdTAwM2VzZXRfcGFnZV9kaXJ0eSlcbm1tL2ZpbGVtYXAuYzoxMjQ6ICogICAgYmRpLndiLVx1MDAzZWxpc3RfbG9ja1x0XHQoemFwX3B0ZV9yYW5nZS1cdTAwM2VzZXRfcGFnZV9kaXJ0eSlcbm1tL2ZpbGVtYXAuYzoxMjU6ICogICAgLVx1MDAzZWlub2RlLVx1MDAzZWlfbG9ja1x0XHQoemFwX3B0ZV9yYW5nZS1cdTAwM2VzZXRfcGFnZV9kaXJ0eSlcbm1tL2ZpbGVtYXAuYzoxMjY6ICogICAgLVx1MDAzZXByaXZhdGVfbG9ja1x0XHQoemFwX3B0ZV9yYW5nZS1cdTAwM2VibG9ja19kaXJ0eV9mb2xpbylcbm1tL2ZpbGVtYXAuYy0xMjctICovXG4tLVxubW0vbWVtb3J5LmM9MTg2MD1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMTkzMC1cbm1tL21lbW9yeS5jOjE5MzE6c3RhdGljIGlubGluZSBpbnQgZG9femFwX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxubW0vbWVtb3J5LmMtMTkzMi1cdFx0XHRcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlLFxuLS1cbm1tL21lbW9yeS5jPTE5OTE9c3RhdGljIGJvb2wgemFwX3B0ZV90YWJsZV9pZl9lbXB0eShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCxcbi0tXG5tbS9tZW1vcnkuYy0yMDI0LVxubW0vbWVtb3J5LmM6MjAyNTpzdGF0aWMgdW5zaWduZWQgbG9uZyB6YXBfcHRlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG5tbS9tZW1vcnkuYy0yMDI2LVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vbWVtb3J5LmMtMjA1OC1cbm1tL21lbW9yeS5jOjIwNTk6XHRcdG5yID0gZG9femFwX3B0ZV9yYW5nZSh0bGIsIHZtYSwgcHRlLCBhZGRyLCBlbmQsIGRldGFpbHMsIHJzcyxcbm1tL21lbW9yeS5jLTIwNjAtXHRcdFx0XHQgICAgICBcdTAwMjZmb3JjZV9mbHVzaCwgXHUwMDI2Zm9yY2VfYnJlYWssIFx1MDAyNmFueV9za2lwcGVkKTtcbi0tXG5tbS9tZW1vcnkuYz0yMTE3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB6YXBfcG1kX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMjE0NC1cdFx0fVxubW0vbWVtb3J5LmM6MjE0NTpcdFx0YWRkciA9IHphcF9wdGVfcmFuZ2UodGxiLCB2bWEsIHBtZCwgYWRkciwgbmV4dCwgZGV0YWlscyk7XG5tbS9tZW1vcnkuYy0yMTQ2LVx0XHRpZiAoYWRkciAhPSBuZXh0KVxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9MjY2ND12b2lkIF9fZm9saW9fbWFya19kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI3MDAtICogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGlzIGRvZXNuJiMzOTt0IHJhY2Ugd2l0aCB0cnVuY2F0aW9uLiAgTW9zdCB3aWxsXG5tbS9wYWdlLXdyaXRlYmFjay5jOjI3MDE6ICogc2ltcGx5IGhvbGQgdGhlIGZvbGlvIGxvY2ssIGJ1dCBlLmcuIHphcF9wdGVfcmFuZ2UoKSBjYWxscyB3aXRoIHRoZVxubW0vcGFnZS13cml0ZWJhY2suYy0yNzAyLSAqIGZvbGlvIG1hcHBlZCBhbmQgdGhlIHB0ZSBsb2NrIGhlbGQsIHdoaWNoIGFsc28gbG9ja3Mgb3V0IHRydW5jYXRpb24uXG4tLVxubW0vcm1hcC5jPTEwMzE9c3RhdGljIGJvb2wgaW52YWxpZF9mb2xpb19yZWZlcmVuY2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYXJnKVxuLS1cbm1tL3JtYXAuYy0xMDM5LVx0ICogb3RoZXIgbWFwcGluZyBpcyBhbHJlYWR5IGdvbmUsIHRoZSB1bm1hcCBwYXRoIHdpbGwgaGF2ZSBzZXQgdGhlXG5tbS9ybWFwLmM6MTA0MDpcdCAqIHJlZmVyZW5jZWQgZmxhZyBvciBhY3RpdmF0ZWQgdGhlIGZvbGlvIGluIHphcF9wdGVfcmFuZ2UoKS5cbm1tL3JtYXAuYy0xMDQxLVx0ICovXG4tLVxubW0vcm1hcC5jPTIxOTg9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjIxMi1cdC8qXG5tbS9ybWFwLmM6MjIxMzpcdCAqIFdoZW4gcmFjaW5nIGFnYWluc3QgZS5nLiB6YXBfcHRlX3JhbmdlKCkgb24gYW5vdGhlciBjcHUsXG5tbS9ybWFwLmMtMjIxNC1cdCAqIGluIGJldHdlZW4gaXRzIHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKCkgYW5kIGZvbGlvX3JlbW92ZV9ybWFwXyooKSxcbi0tXG5tbS9ybWFwLmM9MjQ2Mj1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTI0NzUtXHQvKlxubW0vcm1hcC5jOjI0NzY6XHQgKiBXaGVuIHJhY2luZyBhZ2FpbnN0IGUuZy4gemFwX3B0ZV9yYW5nZSgpIG9uIGFub3RoZXIgY3B1LFxubW0vcm1hcC5jLTI0NzctXHQgKiBpbiBiZXR3ZWVuIGl0cyBwdGVwX2dldF9hbmRfY2xlYXJfZnVsbCgpIGFuZCBmb2xpb19yZW1vdmVfcm1hcF8qKCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTI4CgkJCQkJCQlvdXRwdXQ6IDE3NQoJCQkJCQkJdGhvdWdodHM6IDkwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFzb25pbmcgQWJvdXQgS2V5IFN5bWJvbHMgZm9yIEZ1enppbmcgdGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhlIGNvZGUgaWRlbnRpZmllZCBhIGZldyBwcm9taXNpbmcgY2FuZGlkYXRlczogYHphcF9wdGVfcmFuZ2VgLCBgZG9femFwX3B0ZV9yYW5nZWAsIGB0cnlfdG9fdW5tYXBfb25lYCwgYW5kIHRoaXMgbmV3IGZ1bmN0aW9uLCBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AuIE15IGdvYWwgaXMgdG8gcGlucG9pbnQgdGhlICptb3N0KiByZWxldmFudCBzeW1ib2xzIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nIHRoaXMgcGF0Y2ggZWZmZWN0aXZlbHkuCgpJIHF1aWNrbHkgZGlzbWlzc2VkIGB6YXBfcHRlX3JhbmdlYCBhcyBwb3RlbnRpYWxseSB0b28gYnJvYWRseSB1c2VkOyBpdCYjMzk7cyBsaWtlbHkgY2FsbGVkIGEgbG90LiBUaGF0IGxlYXZlcyBtZSB3aXRoIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCwgc3BlY2lmaWMgdG8gdGhpcyBjaGFuZ2UsIGFuZCBgdHJ5X3RvX3VubWFwX29uZWAsIHRoZSBvbmUgdGhhdCBkZWFscyB3aXRoIHRoZSBiYXRjaGluZyBsb2dpYyBtb2RpZmljYXRpb25zLgoKVGhlbiBJIHJlYWxpemVkIHRoZXJlIHdhcyBhIGNoYW5nZSB0byBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYC4gSSBuZWVkIHRvIGdvIGxvb2sgYXQgdGhpcyBvbmUgc2luY2UgdGhlIHBhdGNoIGFmZmVjdHMgaXQuIENoZWNraW5nIGl0cyBkZWZpbml0aW9uLCBpdCYjMzk7cyBgc3RhdGljIGlubGluZWAsIHNvIHN5emthbGxlciBtaWdodCB0cmFjZSBpdCwgYnV0IGl0JiMzOTtzIGJldHRlciB0byBwcm92aWRlIHRoZSBjYWxsZXIuIFRoYXQgY2FsbGVyIGlzIGB0cnlfdG9fdW5tYXBfb25lYCwgc28gdGhpcyBzb2xpZGlmaWVzIG15IGNob2ljZS4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiBgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRgIGlzIHJlbGV2YW50LiBJdCYjMzk7cyBzdGF0aWMgaW5saW5lIHRvbywgYW5kIGlzIGNhbGxlZCBieSBgemFwX3ByZXNlbnRfZm9saW9fcHRlc2AsIGB6YXBfcHJlc2VudF9wdGVzYCwgYW5kIGB6YXBfbm9ucHJlc2VudF9wdGVzYCwgd2hpY2ggYXJlIGNhbGxlZCBieSBgZG9femFwX3B0ZV9yYW5nZWAuIFNvLCBgZG9femFwX3B0ZV9yYW5nZWAgbWlnaHQgYmUgYW5vdGhlciBnb29kIHN5bWJvbC4gVGhpcyBpcyBhbHNvIHN0YXRpYyBpbmxpbmUsIGJ1dCBpdHMgY2FsbGVyIGB6YXBfcHRlX3JhbmdlYCBpcyBub3QsIHNvIGB6YXBfcHRlX3JhbmdlYCBpcyBhIGdvb2QgY2hvaWNlLgoKTXkgZmluYWwgbGlzdCwgYWZ0ZXIgdGhlc2UgY29uc2lkZXJhdGlvbnMsIGlzOgotIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYAotIGB0cnlfdG9fdW5tYXBfb25lYAotIGB6YXBfcHRlX3JhbmdlYAoKRm9yIGNvbmZpZ3VyYXRpb24sIEkmIzM5O20gY29uZmlkZW50IGFib3V0IGBVU0VSRkFVTFRGRGAgYW5kIGBQVEVfTUFSS0VSX1VGRkRfV1BgLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYFBURV9NQVJLRVJfVUZGRF9XUGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IG5hbWUgaW4gdGhlIEtjb25maWcuIFllcCwgY29uZmlybWVkLgoKSSB3aWxsIG5lZWQgdG8gY29uc2lkZXIgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHNpbmNlIHRoaXMgcGF0Y2ggaW5jbHVkZXMgYmF0Y2hpbmcgY2hhbmdlcyB0aGF0IGNvdWxkIGludm9sdmUgbGFyZ2UgcGFnZXMuIEJ1dCBgVVNFUkZBVUxURkRgIGlzIHRoZSBrZXkgY29uZmlnIGZvciB0aGUgZnVuY3Rpb25hbGl0eS4gYENPTkZJR19NTVVgIGlzIGFscmVhZHkgaW1wbGllZCwgb2YgY291cnNlLgoKVGhlIHBhdGNoIGl0c2VsZiBmb2N1c2VzIG9uIG1vZGlmeWluZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRvIGhhbmRsZSBQVEUgYmF0Y2hpbmcgd2hlbiBzZXR0aW5nIHVzZXJmYXVsdGZkIHdyaXRlLXByb3RlY3Rpb24gbWFya2VycyBkdXJpbmcgdW5tYXAgb3BlcmF0aW9ucy4gSXQgY2hhbmdlcyBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AgdG8gaGFuZGxlIG11bHRpcGxlIFBURXMgYXQgb25jZSBhbmQgcmVtb3ZlcyB0aGUgYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAgcmVzdHJpY3Rpb24sIGFsbG93aW5nIHRoZSBuZXcgYmF0Y2hpbmcgb24gcHJvdGVjdGVkIFZNQXMuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCB3YXJyYW50cyBmdXp6aW5nLgoKTm93LCBJJiMzOTttIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7LAogICAgJiMzNDtQVEVfTUFSS0VSX1VGRkRfV1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzJiMzNDssCiAgICAmIzM0O3RyeV90b191bm1hcF9vbmUmIzM0OywKICAgICYjMzQ7emFwX3B0ZV9yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRvIHN1cHBvcnQgYmF0Y2hpbmcgb2YgUFRFcyB3aGVuIGluc3RhbGxpbmcgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBtYXJrZXJzIGR1cmluZyB1bm1hcCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCB0byBoYW5kbGUgbXVsdGlwbGUgUFRFcyBhdCBvbmNlIGFuZCByZW1vdmVzIHRoZSByZXN0cmljdGlvbiBpbiBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCB0aGF0IHByZXZlbnRlZCBiYXRjaGluZyBmb3IgdXNlcmZhdWx0ZmQtcHJvdGVjdGVkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7LAogICAgJiMzNDtQVEVfTUFSS0VSX1VGRkRfV1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzJiMzNDssCiAgICAmIzM0O3RyeV90b191bm1hcF9vbmUmIzM0OywKICAgICYjMzQ7emFwX3B0ZV9yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRvIHN1cHBvcnQgYmF0Y2hpbmcgb2YgUFRFcyB3aGVuIGluc3RhbGxpbmcgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBtYXJrZXJzIGR1cmluZyB1bm1hcCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCB0byBoYW5kbGUgbXVsdGlwbGUgUFRFcyBhdCBvbmNlIGFuZCByZW1vdmVzIHRoZSByZXN0cmljdGlvbiBpbiBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCB0aGF0IHByZXZlbnRlZCBiYXRjaGluZyBmb3IgdXNlcmZhdWx0ZmQtcHJvdGVjdGVkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6MjQ6MDEuMDMyNzU5NzE3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5OTIxNjg0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlBURV9NQVJLRVJfVUZGRF9XUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNcIixcbiAgICBcInRyeV90b191bm1hcF9vbmVcIixcbiAgICBcInphcF9wdGVfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRvIHN1cHBvcnQgYmF0Y2hpbmcgb2YgUFRFcyB3aGVuIGluc3RhbGxpbmcgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBtYXJrZXJzIGR1cmluZyB1bm1hcCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCB0byBoYW5kbGUgbXVsdGlwbGUgUFRFcyBhdCBvbmNlIGFuZCByZW1vdmVzIHRoZSByZXN0cmljdGlvbiBpbiBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCB0aGF0IHByZXZlbnRlZCBiYXRjaGluZyBmb3IgdXNlcmZhdWx0ZmQtcHJvdGVjdGVkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODoyNDowMS4wMzI3NjYzOTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMDY0NTI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVmNDA3YjUwM2ExMmM5NjVhOTI2Y2IxYTQwOGViMTBkYzdmNzQ0YTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjAgMDg6MjM6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG5pbmRleCBiNWM0ZGMwZjNmZTMyNi4uNjIxYzg2NTNkOGY3ZWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG5AQCAtNTY2LDU5ICs1NjYsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZV9tYXJrZXIgY29weV9wdGVfbWFya2VyKFxcbiBcXHRyZXR1cm4gZHN0bTtcXG4gfVxcbiBcXG4tLypcXG4tICogSWYgdGhpcyBwdGUgaXMgd3ItcHJvdGVjdGVkIGJ5IHVmZmQtd3AgaW4gYW55IGZvcm0sIGFybSB0aGUgc3BlY2lhbCBwdGUgdG9cXG4tICogcmVwbGFjZSBhIG5vbmUgcHRlLiAgTk9URSEgIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gKnB0ZSBpcyBhbHJlYWR5XFxuLSAqIGNsZWFyZWQgc28gd2Ugd2lsbCBuZXZlciBhY2NpZGVudGFsbHkgcmVwbGFjZSBzb21ldGhpbmcgdmFsdWFibGUuICBNZWFud2hpbGVcXG4tICogbm9uZSBwdGUgYWxzbyBtZWFucyB3ZSBhcmUgbm90IGRlbW90aW5nIHRoZSBwdGUgc28gdGxiIGZsdXNoZWQgaXMgbm90IG5lZWRlZC5cXG4tICogRS5nLiwgd2hlbiBwdGUgY2xlYXJlZCB0aGUgY2FsbGVyIHNob3VsZCBoYXZlIHRha2VuIGNhcmUgb2YgdGhlIHRsYiBmbHVzaC5cXG4tICpcXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBwZ3RhYmxlIGxvY2sgaGVsZCBzbyB0aGF0IG5vIHRocmVhZCB3aWxsIHNlZSB0aGUgbm9uZVxcbi0gKiBwdGUsIGFuZCBpZiB0aGV5IHNlZSBpdCwgdGhleSdsbCBmYXVsdCBhbmQgc2VyaWFsaXplIGF0IHRoZSBwZ3RhYmxlIGxvY2suXFxuLSAqXFxuLSAqIFJldHVybnMgdHJ1ZSBpZiBhbiB1ZmZkLXdwIHB0ZSB3YXMgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuXFxuLSAqL1xcbi1zdGF0aWMgaW5saW5lIGJvb2xcXG4tcHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tXFx0XFx0XFx0ICAgICAgcHRlX3QgKnB0ZSwgcHRlX3QgcHRldmFsKVxcbi17XFxuLVxcdGJvb2wgYXJtX3VmZmRfcHRlID0gZmFsc2U7XFxuLVxcbi1cXHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFxuLVxcdC8qIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcHRlIHNob3VsZCBiZSBcXFwiY2xlYXJlZFxcXCIgYmVmb3JlIGNhbGxpbmcgKi9cXG4tXFx0V0FSTl9PTl9PTkNFKCFwdGVfbm9uZShwdGVwX2dldChwdGUpKSk7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBOT1RFOiB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZCgpIGRvZXNuJ3QgbmVlZCB0aGlzIHdob2xlXFxuLVxcdCAqIHRoaW5nLCBiZWNhdXNlIHdoZW4gemFwcGluZyBlaXRoZXIgaXQgbWVhbnMgaXQncyBkcm9wcGluZyB0aGVcXG4tXFx0ICogcGFnZSwgb3IgaW4gVFRVIHdoZXJlIHRoZSBwcmVzZW50IHB0ZSB3aWxsIGJlIHF1aWNrbHkgcmVwbGFjZWRcXG4tXFx0ICogd2l0aCBhIHN3YXAgcHRlLiAgVGhlcmUncyBubyB3YXkgb2YgbGVha2luZyB0aGUgYml0Llxcbi1cXHQgKi9cXG4tXFx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSB8fCAhdXNlcmZhdWx0ZmRfd3Aodm1hKSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXG4tXFx0LyogQSB1ZmZkLXdwIHdyLXByb3RlY3RlZCBub3JtYWwgcHRlICovXFxuLVxcdGlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpIFxcdTAwMjZcXHUwMDI2IHB0ZV91ZmZkKHB0ZXZhbCkpKVxcbi1cXHRcXHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogQSB1ZmZkLXdwIHdyLXByb3RlY3RlZCBzd2FwIHB0ZS4gIE5vdGU6IHRoaXMgc2hvdWxkIGV2ZW4gY292ZXIgYW5cXG4tXFx0ICogZXhpc3RpbmcgcHRlIG1hcmtlciB3aXRoIHVmZmQtd3AgYml0IHNldC5cXG4tXFx0ICovXFxuLVxcdGlmICh1bmxpa2VseShwdGVfc3dwX3VmZmRfYW55KHB0ZXZhbCkpKVxcbi1cXHRcXHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xcbi1cXG4tXFx0aWYgKHVubGlrZWx5KGFybV91ZmZkX3B0ZSkpIHtcXG4tXFx0XFx0c2V0X3B0ZV9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGUsXFxuLVxcdFxcdFxcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBmYWxzZTtcXG4tfVxcbi1cXG4gc3RhdGljIGlubGluZSBib29sIHZtYV9oYXNfcmVjZW5jeShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4ge1xcbiBcXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IChWTV9TRVFfUkVBRCB8IFZNX1JBTkRfUkVBRCkpXFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXFxuaW5kZXggZjI2NDIzZGU0Y2EyODcuLjBmNDljZmY2N2EyYjg3IDEwMDY0NFxcbi0tLSBhL21tL2ludGVybmFsLmhcXG4rKysgYi9tbS9pbnRlcm5hbC5oXFxuQEAgLTI3Niw2ICsyNzYsMTAgQEAgdm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB1bm1hcF9kZXNjICp1bm1hcCk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX01NVVxcbiBcXG4rYm9vbCBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcHRlcyk7XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2Fub25fdm1hKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXFxuIHtcXG4gXFx0YXRvbWljX2luYyhcXHUwMDI2YW5vbl92bWEtXFx1MDAzZXJlZmNvdW50KTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xcbmluZGV4IGQ1ZTg3NjI0ZjY5MjA1Li5kMmYxNGJhMjI2MWNkMCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnkuY1xcbisrKyBiL21tL21lbW9yeS5jXFxuQEAgLTE2NzUsNDAgKzE2NzUsODkgQEAgc3RhdGljIGlubGluZSBib29sIHphcF9kcm9wX21hcmtlcnMoc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKVxcbiBcXHRyZXR1cm4gZGV0YWlscy1cXHUwMDNlemFwX2ZsYWdzIFxcdTAwMjYgWkFQX0ZMQUdfRFJPUF9NQVJLRVI7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHdlJ2xsIHJlcGxhY2UgdGhlIG5vbmUgcHRlIHdpdGggYW4gdWZmZC13cFxcbi0gKiBzd2FwIHNwZWNpYWwgcHRlIG1hcmtlciB3aGVuIG5lY2Vzc2FyeS4gTXVzdCBiZSB3aXRoIHRoZSBwZ3RhYmxlIGxvY2sgaGVsZC5cXG4rLyoqXFxuKyAqIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMgLSBpbnN0YWxsIHVmZmQtd3AgbWFya2VycyBhZnRlciBjbGVhcmluZyBQVEVzXFxuKyAqIEB2bWE6IFRoZSBWTUEgdGhlIHBhZ2VzIGFyZSBtYXBwZWQgaW50by5cXG4rICogQGFkZHI6IEFkZHJlc3MgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhpcyBiYXRjaCBpcyBtYXBwZWQgYXQuXFxuKyAqIEBwdGVwOiBQYWdlIHRhYmxlIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBlbnRyeSBvZiB0aGlzIGJhdGNoLlxcbisgKiBAcHRlOiBPbGQgdmFsdWUgb2YgdGhlIGVudHJ5IHBvaW50ZWQgdG8gYnkgQHB0ZXAuXFxuKyAqIEBucl9wdGVzOiBOdW1iZXIgb2YgZW50cmllcyB0byBpbnN0YWxsLlxcbisgKlxcbisgKiBJZiB0aGUgUFRFcyB3ZXJlIHdyaXRlLXByb3RlY3RlZCBieSB1ZmZkLXdwIGluIGFueSBmb3JtLCBhcm0gc3BlY2lhbCBQVEVzXFxuKyAqIHRvIHJlcGxhY2Ugbm9uZSBQVEVzLiBOT1RFISBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBQVEVzIGFyZVxcbisgKiBhbHJlYWR5IGNsZWFyZWQgc28gd2Ugd2lsbCBuZXZlciBhY2NpZGVudGFsbHkgcmVwbGFjZSBzb21ldGhpbmcgdmFsdWFibGUuXFxuKyAqIE1lYW53aGlsZSBub25lIFBURXMgYWxzbyBtZWFuIHdlIGFyZSBub3QgZGVtb3RpbmcgdGhlIFBURXMgc28gYSBUTEIgZmx1c2ggaXNcXG4rICogbm90IG5lZWRlZC4gRS5nLiwgd2hlbiB0aGUgUFRFcyB3ZXJlIGNsZWFyZWQsIHRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgdGFrZW5cXG4rICogY2FyZSBvZiB0aGUgVExCIGZsdXNoLlxcbisgKlxcbisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBwYWdlIHRhYmxlIGxvY2sgaGVsZCBzbyB0aGF0IG5vIHRocmVhZCB3aWxsIHNlZSB0aGVcXG4rICogbm9uZSBQVEVzLCBhbmQgaWYgdGhleSBzZWUgdGhlbSwgdGhleSdsbCBmYXVsdCBhbmQgc2VyaWFsaXplIGF0IHRoZSBwYWdlIHRhYmxlXFxuKyAqIGxvY2suXFxuICAqXFxuLSAqIFJldHVybnMgdHJ1ZSBpZiB1ZmZkLXdwIHB0ZXMgd2FzIGluc3RhbGxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxcbisgKiBSZXR1cm5zIHRydWUgaWYgdWZmZC13cCBQVEVzIHdlcmUgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuXFxuICAqL1xcbi1zdGF0aWMgaW5saW5lIGJvb2xcXG4temFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSwgaW50IG5yLFxcbi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMsIHB0ZV90IHB0ZXZhbClcXG4rYm9vbCBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcHRlcylcXG4ge1xcbi1cXHRib29sIHdhc19pbnN0YWxsZWQgPSBmYWxzZTtcXG4rXFx0Ym9vbCBhcm1fdWZmZF9wdGUgPSBmYWxzZTtcXG4gXFxuIFxcdGlmICghdWZmZF9zdXBwb3J0c193cF9tYXJrZXIoKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0LyogWmFwIG9uIGFub255bW91cyBhbHdheXMgbWVhbnMgZHJvcHBpbmcgZXZlcnl0aGluZyAqL1xcbi1cXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKVxcbitcXHQvKiBUaGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHB0ZSBzaG91bGQgYmUgXFxcImNsZWFyZWRcXFwiIGJlZm9yZSBjYWxsaW5nICovXFxuK1xcdFdBUk5fT05fT05DRSghcHRlX25vbmUocHRlcF9nZXQocHRlcCkpKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE5PVEU6IHVzZXJmYXVsdGZkX3dwX3VucG9wdWxhdGVkKCkgZG9lc24ndCBuZWVkIHRoaXMgd2hvbGVcXG4rXFx0ICogdGhpbmcsIGJlY2F1c2Ugd2hlbiB6YXBwaW5nIGVpdGhlciBpdCBtZWFucyBpdCdzIGRyb3BwaW5nIHRoZVxcbitcXHQgKiBwYWdlLCBvciBpbiBUVFUgd2hlcmUgdGhlIHByZXNlbnQgcHRlIHdpbGwgYmUgcXVpY2tseSByZXBsYWNlZFxcbitcXHQgKiB3aXRoIGEgc3dhcCBwdGUuICBUaGVyZSdzIG5vIHdheSBvZiBsZWFraW5nIHRoZSBiaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICF1c2VyZmF1bHRmZF93cCh2bWEpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRpZiAoemFwX2Ryb3BfbWFya2VycyhkZXRhaWxzKSlcXG4rXFx0LyogQSB1ZmZkLXdwIHdyLXByb3RlY3RlZCBub3JtYWwgcHRlICovXFxuK1xcdGlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGUpIFxcdTAwMjZcXHUwMDI2IHB0ZV91ZmZkKHB0ZSkpKVxcbitcXHRcXHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQSB1ZmZkLXdwIHdyLXByb3RlY3RlZCBzd2FwIHB0ZS4gIE5vdGU6IHRoaXMgc2hvdWxkIGV2ZW4gY292ZXIgYW5cXG4rXFx0ICogZXhpc3RpbmcgcHRlIG1hcmtlciB3aXRoIHVmZmQtd3AgYml0IHNldC5cXG4rXFx0ICovXFxuK1xcdGlmICh1bmxpa2VseShwdGVfc3dwX3VmZmRfYW55KHB0ZSkpKVxcbitcXHRcXHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xcbitcXG4rXFx0aWYgKGxpa2VseSghYXJtX3VmZmRfcHRlKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0Zm9yICg7Oykge1xcbi1cXHRcXHQvKiB0aGUgUEZOIGluIHRoZSBQVEUgaXMgaXJyZWxldmFudC4gKi9cXG4tXFx0XFx0aWYgKHB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkciwgcHRlLCBwdGV2YWwpKVxcbi1cXHRcXHRcXHR3YXNfaW5zdGFsbGVkID0gdHJ1ZTtcXG4tXFx0XFx0aWYgKC0tbnIgPT0gMClcXG4rXFx0XFx0c2V0X3B0ZV9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLFxcbitcXHRcXHRcXHQgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7XFxuK1xcdFxcdGlmICgtLW5yX3B0ZXMgPT0gMClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdHB0ZSsrO1xcbitcXHRcXHRwdGVwKys7XFxuIFxcdFxcdGFkZHIgKz0gUEFHRV9TSVpFO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gd2FzX2luc3RhbGxlZDtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHdlJ2xsIHJlcGxhY2UgdGhlIG5vbmUgcHRlIHdpdGggYW4gdWZmZC13cFxcbisgKiBzd2FwIHNwZWNpYWwgcHRlIG1hcmtlciB3aGVuIG5lY2Vzc2FyeS4gTXVzdCBiZSB3aXRoIHRoZSBwZ3RhYmxlIGxvY2sgaGVsZC5cXG4rICpcXG4rICogUmV0dXJucyB0cnVlIGlmIHVmZmQtd3AgcHRlcyB3YXMgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2xcXG4remFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuK1xcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSwgaW50IG5yLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMsIHB0ZV90IHB0ZXZhbClcXG4re1xcbitcXHRpZiAoemFwX2Ryb3BfbWFya2VycyhkZXRhaWxzKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyLCBwdGUsIHB0ZXZhbCwgbnIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgemFwX3ByZXNlbnRfZm9saW9fcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcXG5pbmRleCA3M2MyZmUyZDE5NDYyNS4uNTZlYWRkZmM2MTBiMWMgMTAwNjQ0XFxuLS0tIGEvbW0vcm1hcC5jXFxuKysrIGIvbW0vcm1hcC5jXFxuQEAgLTE5NjgsOSArMTk2OCw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRpZiAocHRlX3VudXNlZChwdGUpKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuLVxcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcXG4tXFx0XFx0cmV0dXJuIDE7XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBJZiB1bm1hcCBmYWlscywgd2UgbmVlZCB0byByZXN0b3JlIHRoZSBwdGVzLiBUbyBhdm9pZCBhY2NpZGVudGFsbHlcXG4gXFx0ICogdXBncmFkaW5nIHdyaXRlIHBlcm1pc3Npb25zIGZvciBwdGVzIHRoYXQgd2VyZSBub3Qgb3JpZ2luYWxseVxcbkBAIC0yMzQ4LDcgKzIzNDUsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHQgKiB3ZSBtYXkgd2FudCB0byByZXBsYWNlIGEgbm9uZSBwdGUgd2l0aCBhIG1hcmtlciBwdGUgaWZcXG4gXFx0XFx0ICogaXQncyBmaWxlLWJhY2tlZCwgc28gd2UgZG9uJ3QgbG9zZSB0aGUgdHJhY2tpbmcgaW5mby5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XFxuK1xcdFxcdGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXModm1hLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLFxcbitcXHRcXHRcXHRcXHRcXHQgIG5yX3BhZ2VzKTtcXG4gXFxuIFxcdFxcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXFxuIFxcdFxcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA4OjI0OjAxLjg1NDgyMzQ0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExNzAwODMzMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlBURV9NQVJLRVJfVUZGRF9XUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNcIixcbiAgICBcInRyeV90b191bm1hcF9vbmVcIixcbiAgICBcInphcF9wdGVfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRvIHN1cHBvcnQgYmF0Y2hpbmcgb2YgUFRFcyB3aGVuIGluc3RhbGxpbmcgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBtYXJrZXJzIGR1cmluZyB1bm1hcCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCB0byBoYW5kbGUgbXVsdGlwbGUgUFRFcyBhdCBvbmNlIGFuZCByZW1vdmVzIHRoZSByZXN0cmljdGlvbiBpbiBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCB0aGF0IHByZXZlbnRlZCBiYXRjaGluZyBmb3IgdXNlcmZhdWx0ZmQtcHJvdGVjdGVkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVmNDA3YjUwM2ExMmM5NjVhOTI2Y2IxYTQwOGViMTBkYzdmNzQ0YTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAwODoyMzo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5pbmRleCBiNWM0ZGMwZjNmZTMyNi4uNjIxYzg2NTNkOGY3ZWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtNTY2LDU5ICs1NjYsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZV9tYXJrZXIgY29weV9wdGVfbWFya2VyKFxuIFx0cmV0dXJuIGRzdG07XG4gfVxuIFxuLS8qXG4tICogSWYgdGhpcyBwdGUgaXMgd3ItcHJvdGVjdGVkIGJ5IHVmZmQtd3AgaW4gYW55IGZvcm0sIGFybSB0aGUgc3BlY2lhbCBwdGUgdG9cbi0gKiByZXBsYWNlIGEgbm9uZSBwdGUuICBOT1RFISAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiAqcHRlIGlzIGFscmVhZHlcbi0gKiBjbGVhcmVkIHNvIHdlIHdpbGwgbmV2ZXIgYWNjaWRlbnRhbGx5IHJlcGxhY2Ugc29tZXRoaW5nIHZhbHVhYmxlLiAgTWVhbndoaWxlXG4tICogbm9uZSBwdGUgYWxzbyBtZWFucyB3ZSBhcmUgbm90IGRlbW90aW5nIHRoZSBwdGUgc28gdGxiIGZsdXNoZWQgaXMgbm90IG5lZWRlZC5cbi0gKiBFLmcuLCB3aGVuIHB0ZSBjbGVhcmVkIHRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgdGFrZW4gY2FyZSBvZiB0aGUgdGxiIGZsdXNoLlxuLSAqXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBwZ3RhYmxlIGxvY2sgaGVsZCBzbyB0aGF0IG5vIHRocmVhZCB3aWxsIHNlZSB0aGUgbm9uZVxuLSAqIHB0ZSwgYW5kIGlmIHRoZXkgc2VlIGl0LCB0aGV5J2xsIGZhdWx0IGFuZCBzZXJpYWxpemUgYXQgdGhlIHBndGFibGUgbG9jay5cbi0gKlxuLSAqIFJldHVybnMgdHJ1ZSBpZiBhbiB1ZmZkLXdwIHB0ZSB3YXMgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuXG4tICovXG4tc3RhdGljIGlubGluZSBib29sXG4tcHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgICBwdGVfdCAqcHRlLCBwdGVfdCBwdGV2YWwpXG4te1xuLVx0Ym9vbCBhcm1fdWZmZF9wdGUgPSBmYWxzZTtcbi1cbi1cdGlmICghdWZmZF9zdXBwb3J0c193cF9tYXJrZXIoKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0LyogVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBwdGUgc2hvdWxkIGJlIFwiY2xlYXJlZFwiIGJlZm9yZSBjYWxsaW5nICovXG4tXHRXQVJOX09OX09OQ0UoIXB0ZV9ub25lKHB0ZXBfZ2V0KHB0ZSkpKTtcbi1cbi1cdC8qXG4tXHQgKiBOT1RFOiB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZCgpIGRvZXNuJ3QgbmVlZCB0aGlzIHdob2xlXG4tXHQgKiB0aGluZywgYmVjYXVzZSB3aGVuIHphcHBpbmcgZWl0aGVyIGl0IG1lYW5zIGl0J3MgZHJvcHBpbmcgdGhlXG4tXHQgKiBwYWdlLCBvciBpbiBUVFUgd2hlcmUgdGhlIHByZXNlbnQgcHRlIHdpbGwgYmUgcXVpY2tseSByZXBsYWNlZFxuLVx0ICogd2l0aCBhIHN3YXAgcHRlLiAgVGhlcmUncyBubyB3YXkgb2YgbGVha2luZyB0aGUgYml0LlxuLVx0ICovXG4tXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICF1c2VyZmF1bHRmZF93cCh2bWEpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHQvKiBBIHVmZmQtd3Agd3ItcHJvdGVjdGVkIG5vcm1hbCBwdGUgKi9cbi1cdGlmICh1bmxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpIFx1MDAyNlx1MDAyNiBwdGVfdWZmZChwdGV2YWwpKSlcbi1cdFx0YXJtX3VmZmRfcHRlID0gdHJ1ZTtcbi1cbi1cdC8qXG4tXHQgKiBBIHVmZmQtd3Agd3ItcHJvdGVjdGVkIHN3YXAgcHRlLiAgTm90ZTogdGhpcyBzaG91bGQgZXZlbiBjb3ZlciBhblxuLVx0ICogZXhpc3RpbmcgcHRlIG1hcmtlciB3aXRoIHVmZmQtd3AgYml0IHNldC5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KHB0ZV9zd3BfdWZmZF9hbnkocHRldmFsKSkpXG4tXHRcdGFybV91ZmZkX3B0ZSA9IHRydWU7XG4tXG4tXHRpZiAodW5saWtlbHkoYXJtX3VmZmRfcHRlKSkge1xuLVx0XHRzZXRfcHRlX2F0KHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlLFxuLVx0XHRcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaGFzX3JlY2VuY3koY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX1NFUV9SRUFEIHwgVk1fUkFORF9SRUFEKSlcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggZjI2NDIzZGU0Y2EyODcuLjBmNDljZmY2N2EyYjg3IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTI3Niw2ICsyNzYsMTAgQEAgdm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB1bm1hcF9kZXNjICp1bm1hcCk7XG4gXG4gI2lmZGVmIENPTkZJR19NTVVcbiBcbitib29sIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSxcbitcdFx0dW5zaWduZWQgbG9uZyBucl9wdGVzKTtcbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2Fub25fdm1hKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXG4ge1xuIFx0YXRvbWljX2luYyhcdTAwMjZhbm9uX3ZtYS1cdTAwM2VyZWZjb3VudCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZDVlODc2MjRmNjkyMDUuLmQyZjE0YmEyMjYxY2QwIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtMTY3NSw0MCArMTY3NSw4OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemFwX2Ryb3BfbWFya2VycyhzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXG4gXHRyZXR1cm4gZGV0YWlscy1cdTAwM2V6YXBfZmxhZ3MgXHUwMDI2IFpBUF9GTEFHX0RST1BfTUFSS0VSO1xuIH1cbiBcbi0vKlxuLSAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHdlJ2xsIHJlcGxhY2UgdGhlIG5vbmUgcHRlIHdpdGggYW4gdWZmZC13cFxuLSAqIHN3YXAgc3BlY2lhbCBwdGUgbWFya2VyIHdoZW4gbmVjZXNzYXJ5LiBNdXN0IGJlIHdpdGggdGhlIHBndGFibGUgbG9jayBoZWxkLlxuKy8qKlxuKyAqIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMgLSBpbnN0YWxsIHVmZmQtd3AgbWFya2VycyBhZnRlciBjbGVhcmluZyBQVEVzXG4rICogQHZtYTogVGhlIFZNQSB0aGUgcGFnZXMgYXJlIG1hcHBlZCBpbnRvLlxuKyAqIEBhZGRyOiBBZGRyZXNzIHRoZSBmaXJzdCBwYWdlIG9mIHRoaXMgYmF0Y2ggaXMgbWFwcGVkIGF0LlxuKyAqIEBwdGVwOiBQYWdlIHRhYmxlIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBlbnRyeSBvZiB0aGlzIGJhdGNoLlxuKyAqIEBwdGU6IE9sZCB2YWx1ZSBvZiB0aGUgZW50cnkgcG9pbnRlZCB0byBieSBAcHRlcC5cbisgKiBAbnJfcHRlczogTnVtYmVyIG9mIGVudHJpZXMgdG8gaW5zdGFsbC5cbisgKlxuKyAqIElmIHRoZSBQVEVzIHdlcmUgd3JpdGUtcHJvdGVjdGVkIGJ5IHVmZmQtd3AgaW4gYW55IGZvcm0sIGFybSBzcGVjaWFsIFBURXNcbisgKiB0byByZXBsYWNlIG5vbmUgUFRFcy4gTk9URSEgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgUFRFcyBhcmVcbisgKiBhbHJlYWR5IGNsZWFyZWQgc28gd2Ugd2lsbCBuZXZlciBhY2NpZGVudGFsbHkgcmVwbGFjZSBzb21ldGhpbmcgdmFsdWFibGUuXG4rICogTWVhbndoaWxlIG5vbmUgUFRFcyBhbHNvIG1lYW4gd2UgYXJlIG5vdCBkZW1vdGluZyB0aGUgUFRFcyBzbyBhIFRMQiBmbHVzaCBpc1xuKyAqIG5vdCBuZWVkZWQuIEUuZy4sIHdoZW4gdGhlIFBURXMgd2VyZSBjbGVhcmVkLCB0aGUgY2FsbGVyIHNob3VsZCBoYXZlIHRha2VuXG4rICogY2FyZSBvZiB0aGUgVExCIGZsdXNoLlxuKyAqXG4rICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgcGFnZSB0YWJsZSBsb2NrIGhlbGQgc28gdGhhdCBubyB0aHJlYWQgd2lsbCBzZWUgdGhlXG4rICogbm9uZSBQVEVzLCBhbmQgaWYgdGhleSBzZWUgdGhlbSwgdGhleSdsbCBmYXVsdCBhbmQgc2VyaWFsaXplIGF0IHRoZSBwYWdlIHRhYmxlXG4rICogbG9jay5cbiAgKlxuLSAqIFJldHVybnMgdHJ1ZSBpZiB1ZmZkLXdwIHB0ZXMgd2FzIGluc3RhbGxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuKyAqIFJldHVybnMgdHJ1ZSBpZiB1ZmZkLXdwIFBURXMgd2VyZSBpbnN0YWxsZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIGJvb2xcbi16YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGUsIGludCBucixcbi1cdFx0XHQgICAgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMsIHB0ZV90IHB0ZXZhbClcbitib29sIGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSxcbitcdFx0dW5zaWduZWQgbG9uZyBucl9wdGVzKVxuIHtcbi1cdGJvb2wgd2FzX2luc3RhbGxlZCA9IGZhbHNlO1xuK1x0Ym9vbCBhcm1fdWZmZF9wdGUgPSBmYWxzZTtcbiBcbiBcdGlmICghdWZmZF9zdXBwb3J0c193cF9tYXJrZXIoKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0LyogWmFwIG9uIGFub255bW91cyBhbHdheXMgbWVhbnMgZHJvcHBpbmcgZXZlcnl0aGluZyAqL1xuLVx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSlcbitcdC8qIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcHRlIHNob3VsZCBiZSBcImNsZWFyZWRcIiBiZWZvcmUgY2FsbGluZyAqL1xuK1x0V0FSTl9PTl9PTkNFKCFwdGVfbm9uZShwdGVwX2dldChwdGVwKSkpO1xuK1xuK1x0LypcbitcdCAqIE5PVEU6IHVzZXJmYXVsdGZkX3dwX3VucG9wdWxhdGVkKCkgZG9lc24ndCBuZWVkIHRoaXMgd2hvbGVcbitcdCAqIHRoaW5nLCBiZWNhdXNlIHdoZW4gemFwcGluZyBlaXRoZXIgaXQgbWVhbnMgaXQncyBkcm9wcGluZyB0aGVcbitcdCAqIHBhZ2UsIG9yIGluIFRUVSB3aGVyZSB0aGUgcHJlc2VudCBwdGUgd2lsbCBiZSBxdWlja2x5IHJlcGxhY2VkXG4rXHQgKiB3aXRoIGEgc3dhcCBwdGUuICBUaGVyZSdzIG5vIHdheSBvZiBsZWFraW5nIHRoZSBiaXQuXG4rXHQgKi9cbitcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgIXVzZXJmYXVsdGZkX3dwKHZtYSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmICh6YXBfZHJvcF9tYXJrZXJzKGRldGFpbHMpKVxuK1x0LyogQSB1ZmZkLXdwIHdyLXByb3RlY3RlZCBub3JtYWwgcHRlICovXG4rXHRpZiAodW5saWtlbHkocHRlX3ByZXNlbnQocHRlKSBcdTAwMjZcdTAwMjYgcHRlX3VmZmQocHRlKSkpXG4rXHRcdGFybV91ZmZkX3B0ZSA9IHRydWU7XG4rXG4rXHQvKlxuK1x0ICogQSB1ZmZkLXdwIHdyLXByb3RlY3RlZCBzd2FwIHB0ZS4gIE5vdGU6IHRoaXMgc2hvdWxkIGV2ZW4gY292ZXIgYW5cbitcdCAqIGV4aXN0aW5nIHB0ZSBtYXJrZXIgd2l0aCB1ZmZkLXdwIGJpdCBzZXQuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShwdGVfc3dwX3VmZmRfYW55KHB0ZSkpKVxuK1x0XHRhcm1fdWZmZF9wdGUgPSB0cnVlO1xuK1xuK1x0aWYgKGxpa2VseSghYXJtX3VmZmRfcHRlKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Zm9yICg7Oykge1xuLVx0XHQvKiB0aGUgUEZOIGluIHRoZSBQVEUgaXMgaXJyZWxldmFudC4gKi9cbi1cdFx0aWYgKHB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkciwgcHRlLCBwdGV2YWwpKVxuLVx0XHRcdHdhc19pbnN0YWxsZWQgPSB0cnVlO1xuLVx0XHRpZiAoLS1uciA9PSAwKVxuK1x0XHRzZXRfcHRlX2F0KHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlcCxcbitcdFx0XHQgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7XG4rXHRcdGlmICgtLW5yX3B0ZXMgPT0gMClcbiBcdFx0XHRicmVhaztcbi1cdFx0cHRlKys7XG4rXHRcdHB0ZXArKztcbiBcdFx0YWRkciArPSBQQUdFX1NJWkU7XG4gXHR9XG4gXG4tXHRyZXR1cm4gd2FzX2luc3RhbGxlZDtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKlxuKyAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHdlJ2xsIHJlcGxhY2UgdGhlIG5vbmUgcHRlIHdpdGggYW4gdWZmZC13cFxuKyAqIHN3YXAgc3BlY2lhbCBwdGUgbWFya2VyIHdoZW4gbmVjZXNzYXJ5LiBNdXN0IGJlIHdpdGggdGhlIHBndGFibGUgbG9jayBoZWxkLlxuKyAqXG4rICogUmV0dXJucyB0cnVlIGlmIHVmZmQtd3AgcHRlcyB3YXMgaW5zdGFsbGVkLCBmYWxzZSBvdGhlcndpc2UuXG4rICovXG4rc3RhdGljIGlubGluZSBib29sXG4remFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBpbnQgbnIsXG4rXHRcdFx0ICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzLCBwdGVfdCBwdGV2YWwpXG4re1xuK1x0aWYgKHphcF9kcm9wX21hcmtlcnMoZGV0YWlscykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHZtYSwgYWRkciwgcHRlLCBwdGV2YWwsIG5yKTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHphcF9wcmVzZW50X2ZvbGlvX3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IDczYzJmZTJkMTk0NjI1Li41NmVhZGRmYzYxMGIxYyAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuKysrIGIvbW0vcm1hcC5jXG5AQCAtMTk2OCw5ICsxOTY4LDYgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRpZiAocHRlX3VudXNlZChwdGUpKVxuIFx0XHRyZXR1cm4gMTtcbiBcbi1cdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcbi1cdFx0cmV0dXJuIDE7XG4tXG4gXHQvKlxuIFx0ICogSWYgdW5tYXAgZmFpbHMsIHdlIG5lZWQgdG8gcmVzdG9yZSB0aGUgcHRlcy4gVG8gYXZvaWQgYWNjaWRlbnRhbGx5XG4gXHQgKiB1cGdyYWRpbmcgd3JpdGUgcGVybWlzc2lvbnMgZm9yIHB0ZXMgdGhhdCB3ZXJlIG5vdCBvcmlnaW5hbGx5XG5AQCAtMjM0OCw3ICsyMzQ1LDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0ICogd2UgbWF5IHdhbnQgdG8gcmVwbGFjZSBhIG5vbmUgcHRlIHdpdGggYSBtYXJrZXIgcHRlIGlmXG4gXHRcdCAqIGl0J3MgZmlsZS1iYWNrZWQsIHNvIHdlIGRvbid0IGxvc2UgdGhlIHRyYWNraW5nIGluZm8uXG4gXHRcdCAqL1xuLVx0XHRwdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCh2bWEsIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuK1x0XHRjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCxcbitcdFx0XHRcdFx0ICBucl9wYWdlcyk7XG4gXG4gXHRcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXG4gXHRcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODoyNDowMS44NTQ4Mjc5OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMDc2NzM4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyByZWZhY3RvcmluZyBob3cgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBpcyBoYW5kbGVkIGR1cmluZyBwYWdlIHVubWFwcGluZy4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIGludHJvZHVjZWQgdGhpcyBuZXcgZnVuY3Rpb24sIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCwgYW5kIGl0J3MgcmVwbGFjaW5nIGBwdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZGAuIFRoZSBtYWluIGltcGFjdCBpcyB3aXRoaW4gYHRyeV90b191bm1hcF9vbmVgIHdoZXJlIHRoZSBuZXcgYmF0Y2gtb3JpZW50ZWQgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLiBFc3NlbnRpYWxseSwgaXQgbm93IHVubWFwcyBiYXRjaGVzIG9mIHBhZ2VzLCB3aGljaCBpcyBhIGtleSBjaGFuZ2UuXG5cbldhaXQsIGxvb2tpbmcgYXQgYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAgaW4gYG1tL3JtYXAuY2AgaXMgYWxzbyBtb2RpZmllZCwgd2hlcmUgYSBjaGVjayBgdXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSlgIGlzIHJlbW92ZWQuIFRoaXMgbWVhbnMgYHRyeV90b191bm1hcF9vbmVgIGNhbiBub3cgdW5tYXAgYSBiYXRjaCBvZiBQVEVzLCBhbmQgaW5zdGFsbCB1ZmZkLXdwIG1hcmtlcnMgdXNpbmcgdGhlIG5ldyBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AsIGV2ZW4gaWYgdGhlIFZNQSBpcyB1c2VyZmF1bHRmZC1wcm90ZWN0ZWQuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCdzIHdpZGVuaW5nIHRoZSBzY29wZSBvZiB0aGUgdWZmZCB3cml0ZSBwcm90ZWN0aW9uIGFuZCBvcHRpbWl6aW5nIHRoZSB1bm1hcHBpbmcgcHJvY2Vzcy5cblxuVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIHRoZSBybWFwIGFuZCB1c2VyZmF1bHRmZCBhcmVhcy4gVGhpcyBuZWVkcyBjYXJlZnVsIGF0dGVudGlvbiwgYW5kIGZ1enppbmcgaXMgZGVmaW5pdGVseSBpbiBvcmRlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgc3ltYm9scyB0byB0YXJnZXQgZm9yIGEgZ29vZCBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5JJ20gcHJldHR5IGNlcnRhaW4gYENPTkZJR19VU0VSRkFVTFRGRGAgaXMgcmVsZXZhbnQsIGFsb25nIHdpdGggYENPTkZJR19NTVVgIGdpdmVuIHRoZSB0b3VjaGVkIGZpbGVzLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoaXMsIGJ1dCBpdCBzZWVtcyBjb3JyZWN0LiBMZXQncyBzZWUgaWYgdGhpcyBpcyBhbGwgdGhhdCdzIG5lZWRlZC4gRm9yIGZvY3VzIHN5bWJvbHMsIEknbSB0aGlua2luZyBJIHNob3VsZCBwcmlvcml0aXplIGB0cnlfdG9fdW5tYXBfb25lYCwgYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgLCBgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRgLCBhbmQgYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAuXG5cbkxldCdzIHVzZSBgZ3JlcHBlcmAgdG8gY29uZmlybSB0aGF0IGBVU0VSRkFVTFRGRGAgaXMgdGhlIGNvcnJlY3QgY29uZmlnIGJ5IGNoZWNraW5nIGZvciByZWxldmFudCBzeW1ib2xzIGxpa2UgYHVzZXJmYXVsdGZkX3Byb3RlY3RlZGAgYW5kIGB1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODoyNDowOC45NjI1MDUxNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA5ODM2Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJmYXVsdGZkX3Byb3RlY3RlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0yMjI9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3J3cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTIyNi1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyMjc6c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3Byb3RlY3RlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yMjgte1xcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MzY1PXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9yd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0zNjktXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MzcwOnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9wcm90ZWN0ZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMzcxLXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTgwOT1zdGF0aWMgdm9pZCBjb3B5X2h1Z2Vfbm9uX3ByZXNlbnRfcG1kKFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xODU5LVxcdHBndGFibGVfdHJhbnNfaHVnZV9kZXBvc2l0KGRzdF9tbSwgZHN0X3BtZCwgcGd0YWJsZSk7XFxubW0vaHVnZV9tZW1vcnkuYzoxODYwOlxcdGlmICghdXNlcmZhdWx0ZmRfcHJvdGVjdGVkKGRzdF92bWEpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTg2MS1cXHRcXHRwbWQgPSBwbWRfc3dwX2NsZWFyX3VmZmQocG1kKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTg2NT1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTk1Ni1cXHQvKiBTZWUgX19jb3B5X3ByZXNlbnRfcHRlcygpOiByZXN0b3JlIGFjY2Vzc2libGUgcHJvdGVjdGlvbi4gKi9cXG5tbS9odWdlX21lbW9yeS5jOjE5NTc6XFx0aWYgKCF1c2VyZmF1bHRmZF9wcm90ZWN0ZWQoZHN0X3ZtYSkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTE5NTgtXFx0XFx0aWYgKHVzZXJmYXVsdGZkX3J3cChzcmNfdm1hKSBcXHUwMDI2XFx1MDAyNiBwbWRfdWZmZChwbWQpKVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ4Nzk9aHVnZXRsYl9pbnN0YWxsX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vaHVnZXRsYi5jLTQ4ODUtXFx0aHVnZXRsYl9hZGRfbmV3X2Fub25fcm1hcChuZXdfZm9saW8sIHZtYSwgYWRkcik7XFxubW0vaHVnZXRsYi5jOjQ4ODY6XFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpIFxcdTAwMjZcXHUwMDI2IGh1Z2VfcHRlX3VmZmQob2xkKSkge1xcbm1tL2h1Z2V0bGIuYy00ODg3LVxcdFxcdG5ld3B0ZSA9IGh1Z2VfcHRlX21rdWZmZChuZXdwdGUpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTQ5MDE9aW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vaHVnZXRsYi5jLTQ5ODUtXFx0XFx0XFx0XFx0ZW50cnkgPSBzd3BfZW50cnlfdG9fcHRlKHNvZnRsZWFmKTtcXG5tbS9odWdldGxiLmM6NDk4NjpcXHRcXHRcXHRcXHRpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHNyY192bWEpIFxcdTAwMjZcXHUwMDI2IHVmZmQpXFxubW0vaHVnZXRsYi5jLTQ5ODctXFx0XFx0XFx0XFx0XFx0ZW50cnkgPSBwdGVfc3dwX21rdWZmZChlbnRyeSk7XFxuLS1cXG5tbS9odWdldGxiLmMtNDk4OS1cXHRcXHRcXHR9XFxubW0vaHVnZXRsYi5jOjQ5OTA6XFx0XFx0XFx0aWYgKCF1c2VyZmF1bHRmZF9wcm90ZWN0ZWQoZHN0X3ZtYSkpXFxubW0vaHVnZXRsYi5jLTQ5OTEtXFx0XFx0XFx0XFx0ZW50cnkgPSBwdGVfc3dwX2NsZWFyX3VmZmQoZW50cnkpO1xcbi0tXFxubW0vaHVnZXRsYi5jLTUwNTUtXFx0XFx0XFx0LyogU2VlIF9fY29weV9wcmVzZW50X3B0ZXMoKTogcmVzdG9yZSBhY2Nlc3NpYmxlIHByb3RlY3Rpb24uICovXFxubW0vaHVnZXRsYi5jOjUwNTY6XFx0XFx0XFx0aWYgKCF1c2VyZmF1bHRmZF9wcm90ZWN0ZWQoZHN0X3ZtYSkpIHtcXG5tbS9odWdldGxiLmMtNTA1Ny1cXHRcXHRcXHRcXHRpZiAodXNlcmZhdWx0ZmRfcndwKHNyY192bWEpIFxcdTAwMjZcXHUwMDI2IGh1Z2VfcHRlX3VmZmQoZW50cnkpKSB7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTg1NT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xODk3LVxcdCAqL1xcbm1tL2todWdlcGFnZWQuYzoxODk4OlxcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcXG5tbS9raHVnZXBhZ2VkLmMtMTg5OS1cXHRcXHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMTAwPXN0YXRpYyBib29sIGZpbGVfYmFja2VkX3ZtYV9pc19yZXRyYWN0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMTE3LVxcdCAqL1xcbm1tL2todWdlcGFnZWQuYzoyMTE4OlxcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcXG5tbS9raHVnZXBhZ2VkLmMtMjExOS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9tZW1vcnkuYz0xMDAxPWNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXFxuLS1cXG5tbS9tZW1vcnkuYy0xMDk2LVxcdH1cXG5tbS9tZW1vcnkuYzoxMDk3OlxcdGlmICghdXNlcmZhdWx0ZmRfcHJvdGVjdGVkKGRzdF92bWEpKVxcbm1tL21lbW9yeS5jLTEwOTgtXFx0XFx0cHRlID0gcHRlX3N3cF9jbGVhcl91ZmZkKHB0ZSk7XFxuLS1cXG5tbS9tZW1vcnkuYz0xMTE2PWNvcHlfcHJlc2VudF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtMTE0My1cXHRwdGUgPSBtYXliZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KHB0ZSksIGRzdF92bWEpO1xcbm1tL21lbW9yeS5jOjExNDQ6XFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZChkc3Rfdm1hKSBcXHUwMDI2XFx1MDAyNiBwdGVfdWZmZChwdGVwX2dldChzcmNfcHRlKSkpIHtcXG5tbS9tZW1vcnkuYy0xMTQ1LVxcdFxcdC8qIFRoZSB1ZmZkIGJpdCBuZWVkcyB0byBiZSBkZWxpdmVyZWQgdG8gdGhlIGRlc3QgcHRlIGFzIHdlbGwgKi9cXG4tLVxcbm1tL21lbW9yeS5jPTExNTU9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fY29weV9wcmVzZW50X3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtMTE3Ni1cXHQgKi9cXG5tbS9tZW1vcnkuYzoxMTc3OlxcdGlmICghdXNlcmZhdWx0ZmRfcHJvdGVjdGVkKGRzdF92bWEpKSB7XFxubW0vbWVtb3J5LmMtMTE3OC1cXHRcXHRpZiAodXNlcmZhdWx0ZmRfcndwKHNyY192bWEpIFxcdTAwMjZcXHUwMDI2IHB0ZV91ZmZkKHB0ZSkpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTIyNjA9c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdXNlcmZhdWx0ZmRfY2xlYXJfdm1hKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjI3OS1cXHQvKiBDbGVhciB0aGUgdWZmZCBiaXQgYW5kL29yIHJlc3RvcmUgcHJvdG5vbmUgUFRFcyAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MjI4MDpcXHRpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpIHtcXG5tbS91c2VyZmF1bHRmZC5jLTIyODEtXFx0XFx0dW5zaWduZWQgaW50IG1tX2NwX2ZsYWdzID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6MjQ6MTEuNzcyMzUxNTI1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2NDAwMzYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBVc2VyZmF1bHRmZCBhbmQgV3JpdGUgUHJvdGVjdGlvbiBNYXJrZXJzKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIHdoZXJlIGBDT05GSUdfVVNFUkZBVUxURkRgIGlzIGVuYWJsZWQuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgbG9va2luZyBhdCBhIG1lbW9yeSBtYW5hZ2VtZW50IG1lY2hhbmlzbSB0aGF0IGFsbG93cyB1c2VyLXNwYWNlIHByb2Nlc3NlcyB0byBoYW5kbGUgcGFnZSBmYXVsdHMuIE5vdywgd2hhdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBmb3IgdGhpcyBjb25maWd1cmF0aW9uIGlzIGhvdyB3ZWxsIGl0IGludGVncmF0ZXMgd2l0aCB3cml0ZSBwcm90ZWN0aW9uIChXUCkgbWFya2Vycy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHN5c3RlbSBzdXBwb3J0cyB0aG9zZSBtYXJrZXJzIGluIGNvbmp1bmN0aW9uIHdpdGggdXNlcmZhdWx0ZmQgYmVjYXVzZSB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhvc2UgZmVhdHVyZXMgaXMgYSBjb21tb24gYXJlYSBvZiBpbnRlcmVzdCBmb3IgYWR2YW5jZWQgbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW1pemF0aW9uLiBTbywgdGhlIG5leHQgY2hlY2sgSSdsbCBkbyBpbnZvbHZlcyBjb25maXJtaW5nIHdoZXRoZXIgYHVmZmRfc3VwcG9ydHNfd3BfbWFya2VyYCBpcyBhbHNvIHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBzeXN0ZW0uIFRoYXQgZ2l2ZXMgYSBzb2xpZCBiYXNpcyBmb3IgYXNzZXNzaW5nIGhvdyB3ZSBjYW4gbGV2ZXJhZ2UgdGhlIHByb3RlY3Rpb24gZmVhdHVyZXMgYXZhaWxhYmxlIHRvIHVzIHdoZW4gYnVpbGRpbmcgb3VyIGFwcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA4OjI0OjE1LjEzNjM3NDM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MzQ3NDUyNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWZmZF9zdXBwb3J0c193cF9tYXJrZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaC0xNS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oOjE2OnN0YXRpYyBpbmxpbmUgYm9vbCB1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcih2b2lkKVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmgtMTcte1xcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MzEyPXN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfc3dwX3VmZmRfYW55KHB0ZV90IHB0ZSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0zMTMte1xcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjMxNDpcXHRpZiAoIXVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKCkpXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMzE1LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL21lbW9yeS5jPTE2OTk9Ym9vbCBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtMTcwNC1cXG5tbS9tZW1vcnkuYzoxNzA1OlxcdGlmICghdWZmZF9zdXBwb3J0c193cF9tYXJrZXIoKSlcXG5tbS9tZW1vcnkuYy0xNzA2LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MjE5NT1zdGF0aWMgYm9vbCB2bWFfY2FuX3VzZXJmYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjIyMi1cXHQgKi9cXG5tbS91c2VyZmF1bHRmZC5jOjIyMjM6XFx0aWYgKCF1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcigpIFxcdTAwMjZcXHUwMDI2ICh2bV9mbGFncyBcXHUwMDI2IFZNX1VGRkRfV1ApIFxcdTAwMjZcXHUwMDI2XFxubW0vdXNlcmZhdWx0ZmQuYy0yMjI0LVxcdCAgICAhdm1hX2lzX2Fub255bW91cyh2bWEpKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz00MzI0PXN0YXRpYyBfX3U2NCB1ZmZkX2FwaV9hdmFpbGFibGVfZmVhdHVyZXModm9pZClcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDMzMS1cXHRcXHRmIFxcdTAwMjY9IH5VRkZEX0ZFQVRVUkVfUEFHRUZBVUxUX0ZMQUdfV1A7XFxubW0vdXNlcmZhdWx0ZmQuYzo0MzMyOlxcdGlmICghdWZmZF9zdXBwb3J0c193cF9tYXJrZXIoKSlcXG5tbS91c2VyZmF1bHRmZC5jLTQzMzMtXFx0XFx0ZiBcXHUwMDI2PSB+KFVGRkRfRkVBVFVSRV9XUF9IVUdFVExCRlNfU0hNRU0gfFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODoyNDoxNy44NzExMjc5MTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTcwNjUxNTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgVXNlcmZhdWx0ZmQgKFVGRkQpIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgdWZmZF9zdXBwb3J0c193cF9tYXJrZXJgIGlzIGRlZmluZWQgd2l0aGluIGBpbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIG1hcCBvdXQgdGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gcGljdHVyZSBhcm91bmQgdGhpcy4gT2J2aW91c2x5LCBgQ09ORklHX1VTRVJGQVVMVEZEYCBpcyB0aGUgZnVuZGFtZW50YWwgZW5hYmxpbmcgb3B0aW9uIOKAkyB0aGF0J3MgYSBnaXZlbi4gSG93ZXZlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLCBzbyBJJ2xsIGFsc28gY29uZmlybSB0aGF0IGBDT05GSUdfTU1VYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQsIGFzIFVGRkQgcmVsaWVzIG9uIG1lbW9yeSBtYW5hZ2VtZW50IGNhcGFiaWxpdGllcy4gSG1tLCBJIGhhdmUgYSBuaWdnbGluZyBmZWVsaW5nIHRoZXJlIG1pZ2h0IGJlIGEgbW9yZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gd3JpdGUgcHJvdGVjdGlvbiAoV1ApIG1hcmtlcnMgaW4gVUZGRC4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGlmIGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYCBpcyBhIHZhbGlkIG9wdGlvbi4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MjUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODoyNDoyMS40NDE3ODIzOTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzMzA0MTA3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQVEVfTUFSS0VSX1VGRkRfV1BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS91c2VyZmF1bHRmZC5yc3Q9MzkzPVJXUCBtYXJrZXI6IHRoZSBuZXh0IGFjY2VzcyByZS1wb3B1bGF0ZXMgdGhlIHJhbmdlIHdpdGhvdXQgcHJvdGVjdGlvbi5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3VzZXJmYXVsdGZkLnJzdDozOTQ6VW5saWtlIFdQICh3aGljaCBwZXJzaXN0cyB2aWEgYGBQVEVfTUFSS0VSX1VGRkRfV1BgYCksIHRoZXJlIGlzIG5vXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS91c2VyZmF1bHRmZC5yc3QtMzk1LXBlcnNpc3RlbnQgUldQIG1hcmtlciB0b2RheS4gVGhlIHVzZXIgbmVlZHMgdG8gcmUtYXJtIHRoZSByYW5nZSB3aXRoXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjUwMz1zdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI1MTMtXFx0XFx0c2V0X3B0ZV9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGUsXFxuZnMvcHJvYy90YXNrX21tdS5jOjI1MTQ6XFx0XFx0XFx0ICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yNTE1LVxcdH0gZWxzZSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjYzNj1zdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfaHVnZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY0NC1cXHRcXHRzZXRfaHVnZV9wdGVfYXQodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlcCxcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjY0NTpcXHRcXHRcXHRcXHRtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSwgcHNpemUpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yNjQ2LVxcdFxcdHJldHVybjtcXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmg9MTY9c3RhdGljIGlubGluZSBib29sIHVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKHZvaWQpXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaC0xNy17XFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaDoxODpcXHRyZXR1cm4gcGd0YWJsZV9zdXBwb3J0c191ZmZkKCkgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQKTtcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oLTE5LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQ3Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdWZmZF93cF9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQ4MC1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo0ODE6XFx0cmV0dXJuIHNvZnRsZWFmX3RvX21hcmtlcihlbnRyeSkgXFx1MDAyNiBQVEVfTUFSS0VSX1VGRkRfV1A7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDgyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9NTU1PXN0YXRpYyBpbmxpbmUgcHRlX21hcmtlciBjb3B5X3B0ZV9tYXJrZXIoXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTU2Mi1cXHQvKiBPbmx5IGNvcHkgUFRFIG1hcmtlcnMgaWYgVUZGRCByZWdpc3RlciBtYXRjaGVzLiAqL1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTYzOlxcdGlmICgoc3JjbSBcXHUwMDI2IFBURV9NQVJLRVJfVUZGRF9XUCkgXFx1MDAyNlxcdTAwMjYgdXNlcmZhdWx0ZmRfd3AoZHN0X3ZtYSkpXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo1NjQ6XFx0XFx0ZHN0bSB8PSBQVEVfTUFSS0VSX1VGRkRfV1A7XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01NjUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0yODE9dHlwZWRlZiB1bnNpZ25lZCBsb25nIHB0ZV9tYXJrZXI7XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMjgyLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjI4MzojZGVmaW5lICBQVEVfTUFSS0VSX1VGRkRfV1BcXHRcXHRcXHRCSVQoMClcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0yODQtLypcXG4tLVxcbm1tL0tjb25maWc9MTM4Mj1tZW51Y29uZmlnIFVTRVJGQVVMVEZEXFxuLS1cXG5tbS9LY29uZmlnLTEzODgtXFxubW0vS2NvbmZpZzoxMzg5OmNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG5tbS9LY29uZmlnLTEzOTAtXFx0Ym9vbCBcXFwiVXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBzdXBwb3J0IGZvciBzaG1lbS9odWdldGxiZnNcXFwiXFxuLS1cXG5tbS9odWdldGxiLmM9NTIxMz12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTI3NC1cXHRcXHRcXHRcXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB0ZXAsXFxubW0vaHVnZXRsYi5jOjUyNzU6XFx0XFx0XFx0XFx0XFx0XFx0bWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCksXFxubW0vaHVnZXRsYi5jLTUyNzYtXFx0XFx0XFx0XFx0XFx0XFx0c3opO1xcbi0tXFxubW0vaHVnZXRsYi5jLTUzMTAtXFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdGVwLFxcbm1tL2h1Z2V0bGIuYzo1MzExOlxcdFxcdFxcdFxcdFxcdG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApLFxcbm1tL2h1Z2V0bGIuYy01MzEyLVxcdFxcdFxcdFxcdFxcdHN6KTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz02NDk2PWxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NTc0LVxcdFxcdFxcdFxcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlcCxcXG5tbS9odWdldGxiLmM6NjU3NTpcXHRcXHRcXHRcXHRcXHRcXHRtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSxcXG5tbS9odWdldGxiLmMtNjU3Ni1cXHRcXHRcXHRcXHRcXHRcXHRwc2l6ZSk7XFxuLS1cXG5tbS9tZW1vcnkuYz0xNjk5PWJvb2wgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21lbW9yeS5jLTE3MzUtXFx0XFx0c2V0X3B0ZV9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLFxcbm1tL21lbW9yeS5jOjE3MzY6XFx0XFx0XFx0ICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpO1xcbm1tL21lbW9yeS5jLTE3MzctXFx0XFx0aWYgKC0tbnJfcHRlcyA9PSAwKVxcbi0tXFxubW0vbWVtb3J5LmM9NDY2OT1zdGF0aWMgdm1fZmF1bHRfdCBwdGVfbWFya2VyX2NsZWFyKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDY3OS1cXHQgKiBUaGlzIHNob3VsZCBhbHNvIGNvdmVyIHRoZSBjYXNlIHdoZXJlIGUuZy4gdGhlIHB0ZSBjaGFuZ2VkXFxubW0vbWVtb3J5LmM6NDY4MDpcXHQgKiBxdWlja2x5IGZyb20gYSBQVEVfTUFSS0VSX1VGRkRfV1AgaW50byBQVEVfTUFSS0VSX1BPSVNPTkVELlxcbm1tL21lbW9yeS5jLTQ2ODEtXFx0ICogU28gcHRlX2lzX21hcmtlcigpIGNoZWNrIGlzIG5vdCBlbm91Z2ggdG8gc2FmZWx5IGRyb3AgdGhlIHB0ZS5cXG4tLVxcbm1tL21wcm90ZWN0LmM9MzMxPXN0YXRpYyBsb25nIGNoYW5nZV9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21wcm90ZWN0LmMtNDI3LVxcdFxcdFxcdFxcdHNldF9wdGVfYXQodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlLFxcbm1tL21wcm90ZWN0LmM6NDI4OlxcdFxcdFxcdFxcdFxcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcXG5tbS9tcHJvdGVjdC5jLTQyOS1cXHRcXHRcXHRcXHRwYWdlcysrO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnPTI9Q09ORklHX1VTRVJGQVVMVEZEPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc6MzpDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctNC1DT05GSUdfVEVTVF9WTUFMTE9DPW1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6MjQ6MjQuMjc0ODM3NjczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzczNjUzNTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYCBDb25maWd1cmF0aW9uIGFuZCBSZWxldmFudCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgQ09ORklHX1BURV9NQVJLRVJfVUZGRF9XUGAgaXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgd2hpY2ggaW1wbGllcyB3ZSdyZSBlbmFibGluZyBgVVNFUkZBVUxURkRgIGFsb25nIHdpdGggYFBURV9NQVJLRVJfVUZGRF9XUGAuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGZvY3VzIHN5bWJvbHMuIEkndmUgZ290OiBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AsIGB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZGAsIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgLCBhbmQgYHRyeV90b191bm1hcF9vbmVgLlxuXG5BbHJpZ2h0LCBhcmUgdGhlc2UgZnVuY3Rpb25zIHJlYWNoYWJsZT8gWWVzLCB0aGV5J3JlIGRlZmluaXRlbHkgd2l0aGluIHRoZSBgbW0vbWVtb3J5LmNgIGFuZCBgbW0vcm1hcC5jYCBmaWxlcy4gR29vZC4gYHRyeV90b191bm1hcF9vbmVgIGxvb2tzIHRvIGJlIGEgY29yZSBmdW5jdGlvbjsgaXQncyB0aGUgd29ya2hvcnNlIGZvciB1bm1hcHBpbmcgcGFnZXMuIEFuZCBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCBpcyBkZWZpbml0ZWx5IHVzZWQgaW5zaWRlIGB0cnlfdG9fdW5tYXBfb25lYC4gYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgIHNlZW1zIHRvIGJlIHRoZSBuZXcga2lkIG9uIHRoZSBibG9jay5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRgIGlzIHN0YXRpYyBhbmQgaW5saW5lLiBBaCwgeWVzLCBgc3RhdGljIGlubGluZSBib29sIHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkYC4gU2luY2UgaXQncyBpbmxpbmUsIGl0IG1pZ2h0IG5vdCBiZSB0aGUgbW9zdCBpbGx1bWluYXRpbmcgc3ltYm9sIHRvIGZvY3VzIG9uIGRpcmVjdGx5LiBOb3csIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCBpcyBleHBvcnRlZCBpbiBgbW0vaW50ZXJuYWwuaGAgYW5kIGRlZmluZWQgaW4gYG1tL21lbW9yeS5jYC4gSXQncyBub3QgaW5saW5lLCB3aGljaCBpcyB1c2VmdWwuIEFzIGZvciBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCwgaXQncyBgc3RhdGljIGlubGluZWAgaW4gYG1tL3JtYXAuY2AuIEFsc28sIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBgc3RhdGljIGJvb2xgIGluIGBtbS9ybWFwLmNgLlxuXG5Pa2F5LCBJJ2xsIGxpc3QgYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgIGFuZCBgdHJ5X3RvX3VubWFwX29uZWAuXG5cbldhaXQgYSBtaW51dGUsIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgIGlzIGBzdGF0aWMgaW5saW5lYC4gTm93LCBgdHJ5X3RvX3VubWFwX29uZWAgbWlnaHQgYmUgdG9vIGhvdCwgY29uc2lkZXJpbmcgaXQncyBjYWxsZWQgZHVyaW5nIHBhZ2UgcmVjbGFpbSwgbWlncmF0aW9uLCBldGMuIEl0J3MgcHJvYmFibHkgdGhlIG1haW4gZnVuY3Rpb24gdGhhdCdzIGNoYW5nZWQsIGJ1dCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrLiBJIHNob3VsZCBjaGVjayBgemFwX3ByZXNlbnRfZm9saW9fcHRlc2Agb3IgYHphcF9wdGVfcmFuZ2VgIHdoZXJlIGB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZGAgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgyOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODoyNDozMi4wMTEzNzYyMTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTcxOTMxNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LmM9MTc1Mj1zdGF0aWMgaW5saW5lIGJvb2xcXG5tbS9tZW1vcnkuYzoxNzUzOnphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL21lbW9yeS5jLTE3NTQtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBpbnQgbnIsXFxuLS1cXG5tbS9tZW1vcnkuYz0xNzYzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB6YXBfcHJlc2VudF9mb2xpb19wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xNzkyLVxcdGlmICh1bmxpa2VseSh1c2VyZmF1bHRmZF9wdGVfd3Aodm1hLCBwdGVudCkpKVxcbm1tL21lbW9yeS5jOjE3OTM6XFx0XFx0KmFueV9za2lwcGVkID0gemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsXFxubW0vbWVtb3J5LmMtMTc5NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG5yLCBkZXRhaWxzLCBwdGVudCk7XFxuLS1cXG5tbS9tZW1vcnkuYz0xODE0PXN0YXRpYyBpbmxpbmUgaW50IHphcF9wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21lbW9yeS5jLTE4MzEtXFx0XFx0aWYgKHVzZXJmYXVsdGZkX3B0ZV93cCh2bWEsIHB0ZW50KSlcXG5tbS9tZW1vcnkuYzoxODMyOlxcdFxcdFxcdCphbnlfc2tpcHBlZCA9IHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkcixcXG5tbS9tZW1vcnkuYy0xODMzLVxcdFxcdFxcdFxcdFxcdFxcdHB0ZSwgMSwgZGV0YWlscywgcHRlbnQpO1xcbi0tXFxubW0vbWVtb3J5LmM9MTg2MD1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xODgwLVxcdFxcdCAqIGNvbnNpZGVyIHVmZmQtd3AgYml0IHdoZW4gemFwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbixcXG5tbS9tZW1vcnkuYzoxODgxOlxcdFxcdCAqIHNlZSB6YXBfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZCgpLlxcbm1tL21lbW9yeS5jLTE4ODItXFx0XFx0ICovXFxuLS1cXG5tbS9tZW1vcnkuYy0xOTI1LVxcdGNsZWFyX25vbnByZXNlbnRfcHRlcyh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGUsIG5yKTtcXG5tbS9tZW1vcnkuYzoxOTI2OlxcdCphbnlfc2tpcHBlZCA9IHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkciwgcHRlLCBuciwgZGV0YWlscywgcHRlbnQpO1xcbm1tL21lbW9yeS5jLTE5MjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA4OjI0OjM0LjUyODU3NjI0NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjY1NjczMjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBQVEUgWmFwcGluZyBGdW5jdGlvbnMqKlxuXG5SaWdodCwgc28gSSBzZWUgdGhlc2UgYHphcF9wcmVzZW50X2ZvbGlvX3B0ZXNgLCBgemFwX3ByZXNlbnRfcHRlc2AsIGFuZCBgemFwX25vbnByZXNlbnRfcHRlc2AgZnVuY3Rpb25zIGFsbCBzZWVtIHRvIGJlIHV0aWxpemluZyBzb21ldGhpbmcgY2VudHJhbC4gVGhlIGZhY3QgdGhhdCB0aGV5J3JlIGRlZmluZWQgYXMgYHN0YXRpYyBpbmxpbmVgIG9yIGBzdGF0aWMgX19hbHdheXNfaW5saW5lYCBpcyBpbnRlcmVzdGluZzsgbGlrZWx5IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB0byBhdm9pZCBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkIHdoZXJlIHBvc3NpYmxlLCB3aGljaCBpcyBzZW5zaWJsZSBnaXZlbiB0aGUgY29udGV4dC4gVGhleSBhcmUgYWxzbyBjYWxsZWQgZnJvbSBgemFwX3B0ZV9yYW5nZWAsIHdoaWNoIGhhcyBjYXVnaHQgbXkgYXR0ZW50aW9uLiBUaGlzIHN1Z2dlc3RzIHRoYXQgYHphcF9wdGVfcmFuZ2VgIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoaXMgXCJ6YXBwaW5nXCIgcHJvY2VzcyBpcyBvcmNoZXN0cmF0ZWQuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHphcF9wdGVfcmFuZ2VgIGlzIGRvaW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBwcm9jZXNzLiBUaW1lIHRvIGNoZWNrIGB6YXBfcHRlX3JhbmdlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODoyNDozOC43OTQyNTMxMDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTM4Njc3NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemFwX3B0ZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTQ0MD1UaGVyZSBpcyBhbHNvIGEgZmlsZS1zeXN0ZW0gc3BlY2lmaWMgbG9jayBvcmRlcmluZyBjb21tZW50IGxvY2F0ZWQgYXQgdGhlIHRvcCBvZlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC00ODUtICAgIC1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfbG9jayAgICAgICAgICAgICAgICAgICAgIChmb2xpb19yZW1vdmVfcm1hcF9wdGUtXFx1MDAzZXNldF9wYWdlX2RpcnR5KVxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6NDg2OiAgICBiZGkud2ItXFx1MDAzZWxpc3RfbG9jayAgICAgICAgICAgICAgICAgICAoemFwX3B0ZV9yYW5nZS1cXHUwMDNlc2V0X3BhZ2VfZGlydHkpXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo0ODc6ICAgIC1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfbG9jayAgICAgICAgICAgICAgICAgICAgICh6YXBfcHRlX3JhbmdlLVxcdTAwM2VzZXRfcGFnZV9kaXJ0eSlcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjQ4ODogICAgLVxcdTAwM2Vwcml2YXRlX2xvY2sgICAgICAgICAgICAgICAgICAgICAgKHphcF9wdGVfcmFuZ2UtXFx1MDAzZWJsb2NrX2RpcnR5X2ZvbGlvKVxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNDg5LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTMxMTM9ZXh0ZXJuIHZvaWQgcGFnZWZhdWx0X291dF9vZl9tZW1vcnkodm9pZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMzExOC0vKlxcbmluY2x1ZGUvbGludXgvbW0uaDozMTE5OiAqIFBhcmFtZXRlciBibG9jayBwYXNzZWQgZG93biB0byB6YXBfcHRlX3JhbmdlIGluIGV4Y2VwdGlvbmFsIGNhc2VzLlxcbmluY2x1ZGUvbGludXgvbW0uaC0zMTIwLSAqL1xcbi0tXFxubW0vZmlsZW1hcC5jLTEyMy0gKiAgICAtXFx1MDAzZWlub2RlLVxcdTAwM2VpX2xvY2tcXHRcXHQoZm9saW9fcmVtb3ZlX3JtYXBfcHRlLVxcdTAwM2VzZXRfcGFnZV9kaXJ0eSlcXG5tbS9maWxlbWFwLmM6MTI0OiAqICAgIGJkaS53Yi1cXHUwMDNlbGlzdF9sb2NrXFx0XFx0KHphcF9wdGVfcmFuZ2UtXFx1MDAzZXNldF9wYWdlX2RpcnR5KVxcbm1tL2ZpbGVtYXAuYzoxMjU6ICogICAgLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9sb2NrXFx0XFx0KHphcF9wdGVfcmFuZ2UtXFx1MDAzZXNldF9wYWdlX2RpcnR5KVxcbm1tL2ZpbGVtYXAuYzoxMjY6ICogICAgLVxcdTAwM2Vwcml2YXRlX2xvY2tcXHRcXHQoemFwX3B0ZV9yYW5nZS1cXHUwMDNlYmxvY2tfZGlydHlfZm9saW8pXFxubW0vZmlsZW1hcC5jLTEyNy0gKi9cXG4tLVxcbm1tL21lbW9yeS5jPTE4NjA9c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMTkzMC1cXG5tbS9tZW1vcnkuYzoxOTMxOnN0YXRpYyBpbmxpbmUgaW50IGRvX3phcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG5tbS9tZW1vcnkuYy0xOTMyLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlLFxcbi0tXFxubW0vbWVtb3J5LmM9MTk5MT1zdGF0aWMgYm9vbCB6YXBfcHRlX3RhYmxlX2lmX2VtcHR5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vbWVtb3J5LmMtMjAyNC1cXG5tbS9tZW1vcnkuYzoyMDI1OnN0YXRpYyB1bnNpZ25lZCBsb25nIHphcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG5tbS9tZW1vcnkuYy0yMDI2LVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vbWVtb3J5LmMtMjA1OC1cXG5tbS9tZW1vcnkuYzoyMDU5OlxcdFxcdG5yID0gZG9femFwX3B0ZV9yYW5nZSh0bGIsIHZtYSwgcHRlLCBhZGRyLCBlbmQsIGRldGFpbHMsIHJzcyxcXG5tbS9tZW1vcnkuYy0yMDYwLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZmb3JjZV9mbHVzaCwgXFx1MDAyNmZvcmNlX2JyZWFrLCBcXHUwMDI2YW55X3NraXBwZWQpO1xcbi0tXFxubW0vbWVtb3J5LmM9MjExNz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgemFwX3BtZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMjE0NC1cXHRcXHR9XFxubW0vbWVtb3J5LmM6MjE0NTpcXHRcXHRhZGRyID0gemFwX3B0ZV9yYW5nZSh0bGIsIHZtYSwgcG1kLCBhZGRyLCBuZXh0LCBkZXRhaWxzKTtcXG5tbS9tZW1vcnkuYy0yMTQ2LVxcdFxcdGlmIChhZGRyICE9IG5leHQpXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jPTI2NjQ9dm9pZCBfX2ZvbGlvX21hcmtfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI3MDAtICogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGlzIGRvZXNuJ3QgcmFjZSB3aXRoIHRydW5jYXRpb24uICBNb3N0IHdpbGxcXG5tbS9wYWdlLXdyaXRlYmFjay5jOjI3MDE6ICogc2ltcGx5IGhvbGQgdGhlIGZvbGlvIGxvY2ssIGJ1dCBlLmcuIHphcF9wdGVfcmFuZ2UoKSBjYWxscyB3aXRoIHRoZVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjcwMi0gKiBmb2xpbyBtYXBwZWQgYW5kIHRoZSBwdGUgbG9jayBoZWxkLCB3aGljaCBhbHNvIGxvY2tzIG91dCB0cnVuY2F0aW9uLlxcbi0tXFxubW0vcm1hcC5jPTEwMzE9c3RhdGljIGJvb2wgaW52YWxpZF9mb2xpb19yZWZlcmVuY2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYXJnKVxcbi0tXFxubW0vcm1hcC5jLTEwMzktXFx0ICogb3RoZXIgbWFwcGluZyBpcyBhbHJlYWR5IGdvbmUsIHRoZSB1bm1hcCBwYXRoIHdpbGwgaGF2ZSBzZXQgdGhlXFxubW0vcm1hcC5jOjEwNDA6XFx0ICogcmVmZXJlbmNlZCBmbGFnIG9yIGFjdGl2YXRlZCB0aGUgZm9saW8gaW4gemFwX3B0ZV9yYW5nZSgpLlxcbm1tL3JtYXAuYy0xMDQxLVxcdCAqL1xcbi0tXFxubW0vcm1hcC5jPTIxOTg9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yMjEyLVxcdC8qXFxubW0vcm1hcC5jOjIyMTM6XFx0ICogV2hlbiByYWNpbmcgYWdhaW5zdCBlLmcuIHphcF9wdGVfcmFuZ2UoKSBvbiBhbm90aGVyIGNwdSxcXG5tbS9ybWFwLmMtMjIxNC1cXHQgKiBpbiBiZXR3ZWVuIGl0cyBwdGVwX2dldF9hbmRfY2xlYXJfZnVsbCgpIGFuZCBmb2xpb19yZW1vdmVfcm1hcF8qKCksXFxuLS1cXG5tbS9ybWFwLmM9MjQ2Mj1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjQ3NS1cXHQvKlxcbm1tL3JtYXAuYzoyNDc2OlxcdCAqIFdoZW4gcmFjaW5nIGFnYWluc3QgZS5nLiB6YXBfcHRlX3JhbmdlKCkgb24gYW5vdGhlciBjcHUsXFxubW0vcm1hcC5jLTI0NzctXFx0ICogaW4gYmV0d2VlbiBpdHMgcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwoKSBhbmQgZm9saW9fcmVtb3ZlX3JtYXBfKigpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODoyNDo0MS4xNDgxMzMwMjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3NDQwMzE0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhc29uaW5nIEFib3V0IEtleSBTeW1ib2xzIGZvciBGdXp6aW5nIHRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGUgY29kZSBpZGVudGlmaWVkIGEgZmV3IHByb21pc2luZyBjYW5kaWRhdGVzOiBgemFwX3B0ZV9yYW5nZWAsIGBkb196YXBfcHRlX3JhbmdlYCwgYHRyeV90b191bm1hcF9vbmVgLCBhbmQgdGhpcyBuZXcgZnVuY3Rpb24sIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYC4gTXkgZ29hbCBpcyB0byBwaW5wb2ludCB0aGUgKm1vc3QqIHJlbGV2YW50IHN5bWJvbHMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcgdGhpcyBwYXRjaCBlZmZlY3RpdmVseS5cblxuSSBxdWlja2x5IGRpc21pc3NlZCBgemFwX3B0ZV9yYW5nZWAgYXMgcG90ZW50aWFsbHkgdG9vIGJyb2FkbHkgdXNlZDsgaXQncyBsaWtlbHkgY2FsbGVkIGEgbG90LiBUaGF0IGxlYXZlcyBtZSB3aXRoIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCwgc3BlY2lmaWMgdG8gdGhpcyBjaGFuZ2UsIGFuZCBgdHJ5X3RvX3VubWFwX29uZWAsIHRoZSBvbmUgdGhhdCBkZWFscyB3aXRoIHRoZSBiYXRjaGluZyBsb2dpYyBtb2RpZmljYXRpb25zLlxuXG5UaGVuIEkgcmVhbGl6ZWQgdGhlcmUgd2FzIGEgY2hhbmdlIHRvIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgLiBJIG5lZWQgdG8gZ28gbG9vayBhdCB0aGlzIG9uZSBzaW5jZSB0aGUgcGF0Y2ggYWZmZWN0cyBpdC4gQ2hlY2tpbmcgaXRzIGRlZmluaXRpb24sIGl0J3MgYHN0YXRpYyBpbmxpbmVgLCBzbyBzeXprYWxsZXIgbWlnaHQgdHJhY2UgaXQsIGJ1dCBpdCdzIGJldHRlciB0byBwcm92aWRlIHRoZSBjYWxsZXIuIFRoYXQgY2FsbGVyIGlzIGB0cnlfdG9fdW5tYXBfb25lYCwgc28gdGhpcyBzb2xpZGlmaWVzIG15IGNob2ljZS5cblxuTm93LCBsZXQncyBzZWUgaWYgYHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkYCBpcyByZWxldmFudC4gSXQncyBzdGF0aWMgaW5saW5lIHRvbywgYW5kIGlzIGNhbGxlZCBieSBgemFwX3ByZXNlbnRfZm9saW9fcHRlc2AsIGB6YXBfcHJlc2VudF9wdGVzYCwgYW5kIGB6YXBfbm9ucHJlc2VudF9wdGVzYCwgd2hpY2ggYXJlIGNhbGxlZCBieSBgZG9femFwX3B0ZV9yYW5nZWAuIFNvLCBgZG9femFwX3B0ZV9yYW5nZWAgbWlnaHQgYmUgYW5vdGhlciBnb29kIHN5bWJvbC4gVGhpcyBpcyBhbHNvIHN0YXRpYyBpbmxpbmUsIGJ1dCBpdHMgY2FsbGVyIGB6YXBfcHRlX3JhbmdlYCBpcyBub3QsIHNvIGB6YXBfcHRlX3JhbmdlYCBpcyBhIGdvb2QgY2hvaWNlLlxuXG5NeSBmaW5hbCBsaXN0LCBhZnRlciB0aGVzZSBjb25zaWRlcmF0aW9ucywgaXM6XG4tIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYFxuLSBgdHJ5X3RvX3VubWFwX29uZWBcbi0gYHphcF9wdGVfcmFuZ2VgXG5cbkZvciBjb25maWd1cmF0aW9uLCBJJ20gY29uZmlkZW50IGFib3V0IGBVU0VSRkFVTFRGRGAgYW5kIGBQVEVfTUFSS0VSX1VGRkRfV1BgLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYFBURV9NQVJLRVJfVUZGRF9XUGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IG5hbWUgaW4gdGhlIEtjb25maWcuIFllcCwgY29uZmlybWVkLlxuXG5JIHdpbGwgbmVlZCB0byBjb25zaWRlciBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCwgc2luY2UgdGhpcyBwYXRjaCBpbmNsdWRlcyBiYXRjaGluZyBjaGFuZ2VzIHRoYXQgY291bGQgaW52b2x2ZSBsYXJnZSBwYWdlcy4gQnV0IGBVU0VSRkFVTFRGRGAgaXMgdGhlIGtleSBjb25maWcgZm9yIHRoZSBmdW5jdGlvbmFsaXR5LiBgQ09ORklHX01NVWAgaXMgYWxyZWFkeSBpbXBsaWVkLCBvZiBjb3Vyc2UuXG5cblRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiBtb2RpZnlpbmcgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0byBoYW5kbGUgUFRFIGJhdGNoaW5nIHdoZW4gc2V0dGluZyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIG1hcmtlcnMgZHVyaW5nIHVubWFwIG9wZXJhdGlvbnMuIEl0IGNoYW5nZXMgYGNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNgIHRvIGhhbmRsZSBtdWx0aXBsZSBQVEVzIGF0IG9uY2UgYW5kIHJlbW92ZXMgdGhlIGBmb2xpb191bm1hcF9wdGVfYmF0Y2hgIHJlc3RyaWN0aW9uLCBhbGxvd2luZyB0aGUgbmV3IGJhdGNoaW5nIG9uIHByb3RlY3RlZCBWTUFzLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgd2FycmFudHMgZnV6emluZy5cblxuTm93LCBJJ20gcmVhZHkgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMjgsIk91dHB1dFRva2VucyI6MTc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA4OjI0OjUyLjg5MjE2Nzg5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjczMzg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlBURV9NQVJLRVJfVUZGRF9XUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbmRfaW5zdGFsbF91ZmZkX3dwX3B0ZXNcIixcbiAgICBcInRyeV90b191bm1hcF9vbmVcIixcbiAgICBcInphcF9wdGVfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRvIHN1cHBvcnQgYmF0Y2hpbmcgb2YgUFRFcyB3aGVuIGluc3RhbGxpbmcgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBtYXJrZXJzIGR1cmluZyB1bm1hcCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIGBjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzYCB0byBoYW5kbGUgbXVsdGlwbGUgUFRFcyBhdCBvbmNlIGFuZCByZW1vdmVzIHRoZSByZXN0cmljdGlvbiBpbiBgZm9saW9fdW5tYXBfcHRlX2JhdGNoYCB0aGF0IHByZXZlbnRlZCBiYXRjaGluZyBmb3IgdXNlcmZhdWx0ZmQtcHJvdGVjdGVkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJQVEVfTUFSS0VSX1VGRkRfV1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzXCIsXG4gICAgXCJ0cnlfdG9fdW5tYXBfb25lXCIsXG4gICAgXCJ6YXBfcHRlX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0byBzdXBwb3J0IGJhdGNoaW5nIG9mIFBURXMgd2hlbiBpbnN0YWxsaW5nIHVzZXJmYXVsdGZkIHdyaXRlLXByb3RlY3Rpb24gbWFya2VycyBkdXJpbmcgdW5tYXAgb3BlcmF0aW9ucy4gSXQgaW50cm9kdWNlcyBgY29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlc2AgdG8gaGFuZGxlIG11bHRpcGxlIFBURXMgYXQgb25jZSBhbmQgcmVtb3ZlcyB0aGUgcmVzdHJpY3Rpb24gaW4gYGZvbGlvX3VubWFwX3B0ZV9iYXRjaGAgdGhhdCBwcmV2ZW50ZWQgYmF0Y2hpbmcgZm9yIHVzZXJmYXVsdGZkLXByb3RlY3RlZCBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow42lb8[1] Phase: Succeeded StartedAt: 2026-07-20 08:26:36 +0000 UTC FinishedAt: 2026-07-20 08:26:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-20 08:26:36 +0000 UTC FinishedAt: 2026-07-20 08:26:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2] Phase: Succeeded StartedAt: 2026-07-20 08:26:36 +0000 UTC FinishedAt: 2026-07-20 12:42:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-20 08:26:36 +0000 UTC FinishedAt: 2026-07-20 12:42:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-20 08:26:36 +0000 UTC FinishedAt: 2026-07-20 08:26:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-20 08:26:36 +0000 UTC FinishedAt: 2026-07-20 08:26:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42lb8/series-workflow42lb8-convert-artifact-2501830717/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-20 08:26:56 +0000 UTC FinishedAt: 2026-07-20 08:56:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-20 08:26:56 +0000 UTC FinishedAt: 2026-07-20 08:56:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*61a91cad-795b-4d5a-94ef-2253fca08e80,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42lb8/series-workflow42lb8-convert-artifact-2501830717/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "be6fd95f-0d94-4b70-ac42-e737cb81d056", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42lb8/series-workflow42lb8-build-action-3078099315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-20 08:26:56 +0000 UTC FinishedAt: 2026-07-20 08:56:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*61a91cad-795b-4d5a-94ef-2253fca08e80,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42lb8/series-workflow42lb8-convert-artifact-2501830717/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "be6fd95f-0d94-4b70-ac42-e737cb81d056", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42lb8/series-workflow42lb8-build-action-3078099315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-20 08:56:51 +0000 UTC FinishedAt: 2026-07-20 08:56:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-20 08:56:51 +0000 UTC FinishedAt: 2026-07-20 08:56:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-20 08:56:51 +0000 UTC FinishedAt: 2026-07-20 08:57:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-20 08:56:51 +0000 UTC FinishedAt: 2026-07-20 08:56:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42lb8/series-workflow42lb8-convert-artifact-3079971736/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-20 08:57:01 +0000 UTC FinishedAt: 2026-07-20 08:59:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-20 08:57:01 +0000 UTC FinishedAt: 2026-07-20 08:59:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*be6fd95f-0d94-4b70-ac42-e737cb81d056,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42lb8/series-workflow42lb8-build-action-3078099315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-20 08:59:13 +0000 UTC FinishedAt: 2026-07-20 08:59:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-20 08:59:13 +0000 UTC FinishedAt: 2026-07-20 08:59:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-20 08:59:13 +0000 UTC FinishedAt: 2026-07-20 09:37:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-20 08:59:13 +0000 UTC FinishedAt: 2026-07-20 09:37:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*61a91cad-795b-4d5a-94ef-2253fca08e80,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42lb8/series-workflow42lb8-convert-artifact-3079971736/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "b114bd3a-db25-4dd3-ab0f-3d98716c695c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42lb8/series-workflow42lb8-build-action-1342700548/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-20 08:59:13 +0000 UTC FinishedAt: 2026-07-20 09:37:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*61a91cad-795b-4d5a-94ef-2253fca08e80,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42lb8/series-workflow42lb8-convert-artifact-3079971736/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "b114bd3a-db25-4dd3-ab0f-3d98716c695c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42lb8/series-workflow42lb8-build-action-1342700548/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-20 09:37:29 +0000 UTC FinishedAt: 2026-07-20 09:37:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-20 09:37:29 +0000 UTC FinishedAt: 2026-07-20 09:37:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-20 09:37:29 +0000 UTC FinishedAt: 2026-07-20 09:40:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-20 09:37:29 +0000 UTC FinishedAt: 2026-07-20 09:39:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b114bd3a-db25-4dd3-ab0f-3d98716c695c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42lb8/series-workflow42lb8-build-action-1342700548/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-20 09:40:00 +0000 UTC FinishedAt: 2026-07-20 12:42:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-20 09:40:00 +0000 UTC FinishedAt: 2026-07-20 12:42:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*be6fd95f-0d94-4b70-ac42-e737cb81d056,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b114bd3a-db25-4dd3-ab0f-3d98716c695c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42lb8/series-workflow42lb8-build-action-3078099315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42lb8/series-workflow42lb8-build-action-1342700548/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-20 09:40:00 +0000 UTC FinishedAt: 2026-07-20 09:40:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-20 09:40:00 +0000 UTC FinishedAt: 2026-07-20 09:40:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42lb8/series-workflow42lb8-convert-artifact-564441713/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-20 09:40:00 +0000 UTC FinishedAt: 2026-07-20 09:40:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-20 09:40:00 +0000 UTC FinishedAt: 2026-07-20 09:40:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-20 09:40:00 +0000 UTC FinishedAt: 2026-07-20 09:40:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-20 09:40:10 +0000 UTC FinishedAt: 2026-07-20 12:42:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42lb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cond_install_uffd_wp_ptes","try_to_unmap_one","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"56b9d68cf62f5e79ac9035dde02c3a68d0c6e091","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PTE_MARKER_UFFD_WP"],"series_id":"ccd1f45f-baec-46b1-906f-e4446e3da6e4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-20 09:40:10 +0000 UTC FinishedAt: 2026-07-20 12:42:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*be6fd95f-0d94-4b70-ac42-e737cb81d056,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b114bd3a-db25-4dd3-ab0f-3d98716c695c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42lb8/series-workflow42lb8-build-action-3078099315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42lb8/series-workflow42lb8-build-action-1342700548/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42lb8/series-workflow42lb8-convert-artifact-564441713/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}