Name: series-workflowd48gz Phase: Succeeded StartedAt: 2026-08-10 11:57:33 +0000 UTC FinishedAt: 2026-08-10 16:02:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[0] Phase: Succeeded StartedAt: 2026-08-10 11:57:33 +0000 UTC FinishedAt: 2026-08-10 12:23:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 11:57:33 +0000 UTC FinishedAt: 2026-08-10 12:23:09 +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": "17e5919bdca144d4e67337f53bf57d7811f62192", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GUP_TEST" ], "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": "17e5919bdca144d4e67337f53bf57d7811f62192", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GUP_TEST" ], "series_id": "c5ce1eb9-431a-4444-bf22-c09a9500ea50" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "gup_test_open", "gup_test_release", "gup_test_ioctl", "pin_longterm_test_ioctl" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dVUF9URVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3VwX3Rlc3Rfb3BlbiYjMzQ7LAogICAgJiMzNDtndXBfdGVzdF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2d1cF90ZXN0X2lvY3RsJiMzNDssCiAgICAmIzM0O3Bpbl9sb25ndGVybV90ZXN0X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgcGluX2xvbmd0ZXJtX3Rlc3RgIGluIGBtbS9ndXBfdGVzdC5jYCB0byB1c2UgYSBwZXItZmlsZSBkYXRhIHN0cnVjdHVyZSAoYHN0cnVjdCBndXBfdGVzdF9kYXRhYCkgaW5zdGVhZCBvZiBnbG9iYWwgdmFyaWFibGVzLCBhbGxvd2luZyBjb25jdXJyZW50IHVzZXJzIG9mIHRoZSBndXBfdGVzdCBpb2N0bC4gVGhlIG5ldyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgYWxsIGZpZWxkcy4gVGhlIGFycmF5IG9mIHBhZ2UgcG9pbnRlcnMgaXMgYWxsb2NhdGVkIHVzaW5nIGBrdmNhbGxvY2AsIHdoaWNoIGFsc28gemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5LiBUaGUgb25seSBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIHRoZSBjb250ZW50IG9mIHRoZSBwaW5uZWQgdXNlciBwYWdlcywgd2hpY2ggaXMgaWRlbnRpY2FsIHRvIHRoZSBwcmUtcGF0Y2ggYmVoYXZpb3IgYW5kIGRvZXMgbm90IGxlYWsga2VybmVsIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZ3VwX3Rlc3QgZGVidWdmcyBpbnRlcmZhY2UgdG8gdXNlIHBlci1maWxlIGRlc2NyaXB0b3Igc3RhdGUgaW5zdGVhZCBvZiBnbG9iYWwgc3RhdGUgZm9yIHRoZSBQSU5fTE9OR1RFUk1fVEVTVF8qIGlvY3RscywgZml4aW5nIGNvbmN1cnJlbmN5IGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGEgdGVzdCBtb2R1bGUgdGhhdCBleHBvc2VzIGtlcm5lbCBBUElzIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIGNvbmN1cnJlbmN5IGZpeCBpcyBjb3JyZWN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgbmV3IGlzc3VlcyBsaWtlIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI2YWY2Nzk1ZGE4OTE2NGJiOTFmMmJhOWJhNjM4ZWQ0YzNmNzU2MmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxMjoyMTo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9ndXBfdGVzdC5jIGIvbW0vZ3VwX3Rlc3QuY1xuaW5kZXggZWI0YzljZGExNmVkOC4uNDRjMWNkZmI5YzM3MSAxMDA2NDRcbi0tLSBhL21tL2d1cF90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2d1cF90ZXN0LmNcbkBAIC04LDYgJiM0Mzs4LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGlnaG1lbS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7Z3VwX3Rlc3QuaFwmIzM0O1xuIFxuJiM0MztzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSB7XG4mIzQzO1x0c3RydWN0IG11dGV4IGxvbmd0ZXJtX211dGV4O1xuJiM0MztcdHN0cnVjdCBwYWdlICoqbG9uZ3Rlcm1fcGFnZXM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsb25ndGVybV9ucl9wYWdlcztcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIHZvaWQgcHV0X2JhY2tfcGFnZXModW5zaWduZWQgaW50IGNtZCwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbiBcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCB1bnNpZ25lZCBpbnQgZ3VwX3Rlc3RfZmxhZ3MpXG4ge1xuQEAgLTIwOCwyMyAmIzQzOzIxNCwyMCBAQCBzdGF0aWMgaW50IF9fZ3VwX3Rlc3RfaW9jdGwodW5zaWduZWQgaW50IGNtZCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBERUZJTkVfTVVURVgocGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpO1xuLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKnBpbl9sb25ndGVybV90ZXN0X3BhZ2VzO1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzO1xuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKHZvaWQpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhKVxuIHtcbi1cdGlmIChwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcykge1xuLVx0XHRpZiAocGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMpXG4tXHRcdFx0dW5waW5fdXNlcl9wYWdlcyhwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcyxcbi1cdFx0XHRcdFx0IHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzKTtcbi1cdFx0a3ZmcmVlKHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzKTtcbi1cdFx0cGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMgPSBOVUxMO1xuLVx0XHRwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyA9IDA7XG4mIzQzO1x0aWYgKGRhdGEtXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpIHtcbiYjNDM7XHRcdGlmIChkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzKVxuJiM0MztcdFx0XHR1bnBpbl91c2VyX3BhZ2VzKGRhdGEtXHUwMDNlbG9uZ3Rlcm1fcGFnZXMsXG4mIzQzO1x0XHRcdFx0XHQgZGF0YS1cdTAwM2Vsb25ndGVybV9ucl9wYWdlcyk7XG4mIzQzO1x0XHRrdmZyZWUoZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcyk7XG4mIzQzO1x0XHRkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzID0gTlVMTDtcbiYjNDM7XHRcdGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgPSAwO1xuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydCh1bnNpZ25lZCBsb25nIGFyZylcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4gXHRsb25nIG5yX3BhZ2VzLCBjdXJfcGFnZXMsIGFkZHIsIHJlbWFpbmluZ19wYWdlcztcbiBcdGludCBndXBfZmxhZ3MgPSBGT0xMX0xPTkdURVJNO1xuQEAgLTIzMyw3ICYjNDM7MjM2LDcgQEAgc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpXG4gXHRpbnQgcmV0ID0gMDtcbiBcdGJvb2wgZmFzdDtcbiBcbi1cdGlmIChwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcylcbiYjNDM7XHRpZiAoZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YXJncywgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoYXJncykpKVxuQEAgLTI2MywxMiAmIzQzOzI2NiwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydCh1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0cmV0dXJuIC1FSU5UUjtcbiBcdH1cbiBcbi1cdHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzID0gcGFnZXM7XG4tXHRwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyA9IDA7XG4mIzQzO1x0ZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcyA9IHBhZ2VzO1xuJiM0MztcdGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgPSAwO1xuIFxuLVx0d2hpbGUgKG5yX3BhZ2VzIC0gcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMpIHtcbi1cdFx0cmVtYWluaW5nX3BhZ2VzID0gbnJfcGFnZXMgLSBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcztcbi1cdFx0YWRkciA9IGFyZ3MuYWRkciAmIzQzOyBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyAqIFBBR0VfU0laRTtcbiYjNDM7XHR3aGlsZSAobnJfcGFnZXMgLSBkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzKSB7XG4mIzQzO1x0XHRyZW1haW5pbmdfcGFnZXMgPSBucl9wYWdlcyAtIGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXM7XG4mIzQzO1x0XHRhZGRyID0gYXJncy5hZGRyICYjNDM7IGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgKiBQQUdFX1NJWkU7XG4gXG4gXHRcdGlmIChmYXN0KVxuIFx0XHRcdGN1cl9wYWdlcyA9IHBpbl91c2VyX3BhZ2VzX2Zhc3QoYWRkciwgcmVtYWluaW5nX3BhZ2VzLFxuQEAgLTI3NywxMSAmIzQzOzI4MCwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydCh1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0XHRjdXJfcGFnZXMgPSBwaW5fdXNlcl9wYWdlcyhhZGRyLCByZW1haW5pbmdfcGFnZXMsXG4gXHRcdFx0XHRcdFx0ICAgZ3VwX2ZsYWdzLCBwYWdlcyk7XG4gXHRcdGlmIChjdXJfcGFnZXMgXHUwMDNjIDApIHtcbi1cdFx0XHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKCk7XG4mIzQzO1x0XHRcdHBpbl9sb25ndGVybV90ZXN0X3N0b3AoZGF0YSk7XG4gXHRcdFx0cmV0ID0gY3VyX3BhZ2VzO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzICYjNDM7PSBjdXJfcGFnZXM7XG4mIzQzO1x0XHRkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzICYjNDM7PSBjdXJfcGFnZXM7XG4gXHRcdHBhZ2VzICYjNDM7PSBjdXJfcGFnZXM7XG4gXHR9XG4gXG5AQCAtMjkwLDE5ICYjNDM7MjkzLDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZCh1bnNpZ25lZCBsb25nIGFyZylcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZChzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbiBcdF9fdTY0IHVzZXJfYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbi1cdGlmICghcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpXG4mIzQzO1x0aWYgKCFkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ1c2VyX2FkZHIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKHVzZXJfYWRkcikpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR2b2lkICphZGRyID0ga21hcF9sb2NhbF9wYWdlKHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzW2ldKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dm9pZCAqYWRkciA9IGttYXBfbG9jYWxfcGFnZShkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzW2ldKTtcbiBcdFx0dW5zaWduZWQgbG9uZyByZXQ7XG4gXG4gXHRcdHJldCA9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyl1c2VyX2FkZHIsIGFkZHIsXG5AQCAtMzE4LDI1ICYjNDM7MzIyLDI2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3JlYWQodW5zaWduZWQgbG9uZyBhcmcpXG4gc3RhdGljIGxvbmcgcGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLFxuIFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSA9IGZpbGVwLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdGludCByZXQgPSAtRUlOVkFMO1xuIFxuLVx0aWYgKG11dGV4X2xvY2tfa2lsbGFibGUoXHUwMDI2cGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpKVxuJiM0MztcdGlmIChtdXRleF9sb2NrX2tpbGxhYmxlKFx1MDAyNmRhdGEtXHUwMDNlbG9uZ3Rlcm1fbXV0ZXgpKVxuIFx0XHRyZXR1cm4gLUVJTlRSO1xuIFxuIFx0c3dpdGNoIChjbWQpIHtcbiBcdGNhc2UgUElOX0xPTkdURVJNX1RFU1RfU1RBUlQ6XG4tXHRcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KGFyZyk7XG4mIzQzO1x0XHRyZXQgPSBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydChkYXRhLCBhcmcpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgUElOX0xPTkdURVJNX1RFU1RfU1RPUDpcbi1cdFx0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcCgpO1xuJiM0MztcdFx0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChkYXRhKTtcbiBcdFx0cmV0ID0gMDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFBJTl9MT05HVEVSTV9URVNUX1JFQUQ6XG4tXHRcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoYXJnKTtcbiYjNDM7XHRcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoZGF0YSwgYXJnKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2cGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZkYXRhLVx1MDAzZWxvbmd0ZXJtX211dGV4KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTM3NSwxNSAmIzQzOzM4MCw0MCBAQCBzdGF0aWMgbG9uZyBndXBfdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZ3VwX3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XG4mIzQzO1x0aWYgKCFkYXRhKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldCA9IG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGtmcmVlKGRhdGEpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2ZGF0YS1cdTAwM2Vsb25ndGVybV9tdXRleCk7XG4mIzQzO1x0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBkYXRhO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZ3VwX3Rlc3RfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKCk7XG4mIzQzO1x0c3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChkYXRhKTtcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNmRhdGEtXHUwMDNlbG9uZ3Rlcm1fbXV0ZXgpO1xuJiM0MztcdGtmcmVlKGRhdGEpO1xuJiM0MztcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gTlVMTDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBndXBfdGVzdF9mb3BzID0ge1xuLVx0Lm9wZW4gPSBub25zZWVrYWJsZV9vcGVuLFxuJiM0MztcdC5vcGVuID0gZ3VwX3Rlc3Rfb3BlbixcbiBcdC51bmxvY2tlZF9pb2N0bCA9IGd1cF90ZXN0X2lvY3RsLFxuIFx0LmNvbXBhdF9pb2N0bCA9IGNvbXBhdF9wdHJfaW9jdGwsXG4gXHQucmVsZWFzZSA9IGd1cF90ZXN0X3JlbGVhc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dVUF9URVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3VwX3Rlc3Rfb3BlbiYjMzQ7LAogICAgJiMzNDtndXBfdGVzdF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2d1cF90ZXN0X2lvY3RsJiMzNDssCiAgICAmIzM0O3Bpbl9sb25ndGVybV90ZXN0X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBndXBfdGVzdCBkZWJ1Z2ZzIGludGVyZmFjZSB0byB1c2UgcGVyLWZpbGUgZGVzY3JpcHRvciBzdGF0ZSBpbnN0ZWFkIG9mIGdsb2JhbCBzdGF0ZSBmb3IgdGhlIFBJTl9MT05HVEVSTV9URVNUXyogaW9jdGxzLCBmaXhpbmcgY29uY3VycmVuY3kgaXNzdWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gYSB0ZXN0IG1vZHVsZSB0aGF0IGV4cG9zZXMga2VybmVsIEFQSXMgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgY29uY3VycmVuY3kgZml4IGlzIGNvcnJlY3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBuZXcgaXNzdWVzIGxpa2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjZhZjY3OTVkYTg5MTY0YmI5MWYyYmE5YmE2MzhlZDRjM2Y3NTYyYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDEyOjIxOjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZ3VwX3Rlc3QuYyBiL21tL2d1cF90ZXN0LmMKaW5kZXggZWI0YzljZGExNmVkOC4uNDRjMWNkZmI5YzM3MSAxMDA2NDQKLS0tIGEvbW0vZ3VwX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ndXBfdGVzdC5jCkBAIC04LDYgJiM0Mzs4LDEyIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaGlnaG1lbS5oJmd0OwogI2luY2x1ZGUgJiMzNDtndXBfdGVzdC5oJiMzNDsKIAomIzQzO3N0cnVjdCBndXBfdGVzdF9kYXRhIHsKJiM0MzsJc3RydWN0IG11dGV4IGxvbmd0ZXJtX211dGV4OwomIzQzOwlzdHJ1Y3QgcGFnZSAqKmxvbmd0ZXJtX3BhZ2VzOwomIzQzOwl1bnNpZ25lZCBsb25nIGxvbmd0ZXJtX25yX3BhZ2VzOwomIzQzO307CiYjNDM7CiBzdGF0aWMgdm9pZCBwdXRfYmFja19wYWdlcyh1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAogCQkJICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgdW5zaWduZWQgaW50IGd1cF90ZXN0X2ZsYWdzKQogewpAQCAtMjA4LDIzICYjNDM7MjE0LDIwIEBAIHN0YXRpYyBpbnQgX19ndXBfdGVzdF9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBERUZJTkVfTVVURVgocGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpOwotc3RhdGljIHN0cnVjdCBwYWdlICoqcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXM7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlczsKLQotc3RhdGljIGlubGluZSB2b2lkIHBpbl9sb25ndGVybV90ZXN0X3N0b3Aodm9pZCkKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSkKIHsKLQlpZiAocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpIHsKLQkJaWYgKHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzKQotCQkJdW5waW5fdXNlcl9wYWdlcyhwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcywKLQkJCQkJIHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzKTsKLQkJa3ZmcmVlKHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzKTsKLQkJcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMgPSBOVUxMOwotCQlwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyA9IDA7CiYjNDM7CWlmIChkYXRhLSZndDtsb25ndGVybV9wYWdlcykgewomIzQzOwkJaWYgKGRhdGEtJmd0O2xvbmd0ZXJtX25yX3BhZ2VzKQomIzQzOwkJCXVucGluX3VzZXJfcGFnZXMoZGF0YS0mZ3Q7bG9uZ3Rlcm1fcGFnZXMsCiYjNDM7CQkJCQkgZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXMpOwomIzQzOwkJa3ZmcmVlKGRhdGEtJmd0O2xvbmd0ZXJtX3BhZ2VzKTsKJiM0MzsJCWRhdGEtJmd0O2xvbmd0ZXJtX3BhZ2VzID0gTlVMTDsKJiM0MzsJCWRhdGEtJmd0O2xvbmd0ZXJtX25yX3BhZ2VzID0gMDsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJbG9uZyBucl9wYWdlcywgY3VyX3BhZ2VzLCBhZGRyLCByZW1haW5pbmdfcGFnZXM7CiAJaW50IGd1cF9mbGFncyA9IEZPTExfTE9OR1RFUk07CkBAIC0yMzMsNyAmIzQzOzIzNiw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKQogCWludCByZXQgPSAwOwogCWJvb2wgZmFzdDsKIAotCWlmIChwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcykKJiM0MzsJaWYgKGRhdGEtJmd0O2xvbmd0ZXJtX3BhZ2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2FyZ3MsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGFyZ3MpKSkKQEAgLTI2MywxMiAmIzQzOzI2NiwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydCh1bnNpZ25lZCBsb25nIGFyZykKIAkJcmV0dXJuIC1FSU5UUjsKIAl9CiAKLQlwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcyA9IHBhZ2VzOwotCXBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzID0gMDsKJiM0MzsJZGF0YS0mZ3Q7bG9uZ3Rlcm1fcGFnZXMgPSBwYWdlczsKJiM0MzsJZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXMgPSAwOwogCi0Jd2hpbGUgKG5yX3BhZ2VzIC0gcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMpIHsKLQkJcmVtYWluaW5nX3BhZ2VzID0gbnJfcGFnZXMgLSBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlczsKLQkJYWRkciA9IGFyZ3MuYWRkciAmIzQzOyBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyAqIFBBR0VfU0laRTsKJiM0MzsJd2hpbGUgKG5yX3BhZ2VzIC0gZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXMpIHsKJiM0MzsJCXJlbWFpbmluZ19wYWdlcyA9IG5yX3BhZ2VzIC0gZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXM7CiYjNDM7CQlhZGRyID0gYXJncy5hZGRyICYjNDM7IGRhdGEtJmd0O2xvbmd0ZXJtX25yX3BhZ2VzICogUEFHRV9TSVpFOwogCiAJCWlmIChmYXN0KQogCQkJY3VyX3BhZ2VzID0gcGluX3VzZXJfcGFnZXNfZmFzdChhZGRyLCByZW1haW5pbmdfcGFnZXMsCkBAIC0yNzcsMTEgJiM0MzsyODAsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpCiAJCQljdXJfcGFnZXMgPSBwaW5fdXNlcl9wYWdlcyhhZGRyLCByZW1haW5pbmdfcGFnZXMsCiAJCQkJCQkgICBndXBfZmxhZ3MsIHBhZ2VzKTsKIAkJaWYgKGN1cl9wYWdlcyAmbHQ7IDApIHsKLQkJCXBpbl9sb25ndGVybV90ZXN0X3N0b3AoKTsKJiM0MzsJCQlwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpOwogCQkJcmV0ID0gY3VyX3BhZ2VzOwogCQkJYnJlYWs7CiAJCX0KLQkJcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMgJiM0Mzs9IGN1cl9wYWdlczsKJiM0MzsJCWRhdGEtJmd0O2xvbmd0ZXJtX25yX3BhZ2VzICYjNDM7PSBjdXJfcGFnZXM7CiAJCXBhZ2VzICYjNDM7PSBjdXJfcGFnZXM7CiAJfQogCkBAIC0yOTAsMTkgJiM0MzsyOTMsMjAgQEAgc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZCh1bnNpZ25lZCBsb25nIGFyZykKJiM0MztzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJX191NjQgdXNlcl9hZGRyOwogCXVuc2lnbmVkIGxvbmcgaTsKIAotCWlmICghcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpCiYjNDM7CWlmICghZGF0YS0mZ3Q7bG9uZ3Rlcm1fcGFnZXMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7dXNlcl9hZGRyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZih1c2VyX2FkZHIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXZvaWQgKmFkZHIgPSBrbWFwX2xvY2FsX3BhZ2UocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXNbaV0pOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl2b2lkICphZGRyID0ga21hcF9sb2NhbF9wYWdlKGRhdGEtJmd0O2xvbmd0ZXJtX3BhZ2VzW2ldKTsKIAkJdW5zaWduZWQgbG9uZyByZXQ7CiAKIAkJcmV0ID0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXVzZXJfYWRkciwgYWRkciwKQEAgLTMxOCwyNSAmIzQzOzMyMiwyNiBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHVuc2lnbmVkIGxvbmcgYXJnKQogc3RhdGljIGxvbmcgcGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKJiM0MzsJc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEgPSBmaWxlcC0mZ3Q7cHJpdmF0ZV9kYXRhOwogCWludCByZXQgPSAtRUlOVkFMOwogCi0JaWYgKG11dGV4X2xvY2tfa2lsbGFibGUoJmFtcDtwaW5fbG9uZ3Rlcm1fdGVzdF9tdXRleCkpCiYjNDM7CWlmIChtdXRleF9sb2NrX2tpbGxhYmxlKCZhbXA7ZGF0YS0mZ3Q7bG9uZ3Rlcm1fbXV0ZXgpKQogCQlyZXR1cm4gLUVJTlRSOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFBJTl9MT05HVEVSTV9URVNUX1NUQVJUOgotCQlyZXQgPSBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydChhcmcpOwomIzQzOwkJcmV0ID0gcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoZGF0YSwgYXJnKTsKIAkJYnJlYWs7CiAJY2FzZSBQSU5fTE9OR1RFUk1fVEVTVF9TVE9QOgotCQlwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKCk7CiYjNDM7CQlwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpOwogCQlyZXQgPSAwOwogCQlicmVhazsKIAljYXNlIFBJTl9MT05HVEVSTV9URVNUX1JFQUQ6Ci0JCXJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoYXJnKTsKJiM0MzsJCXJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoZGF0YSwgYXJnKTsKIAkJYnJlYWs7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZhbXA7cGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkYXRhLSZndDtsb25ndGVybV9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzc1LDE1ICYjNDM7MzgwLDQwIEBAIHN0YXRpYyBsb25nIGd1cF90ZXN0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZ3VwX3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkYXRhID0ga3phbGxvY19vYmooKmRhdGEpOwomIzQzOwlpZiAoIWRhdGEpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0ID0gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWtmcmVlKGRhdGEpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9pbml0KCZhbXA7ZGF0YS0mZ3Q7bG9uZ3Rlcm1fbXV0ZXgpOwomIzQzOwlmaWxlLSZndDtwcml2YXRlX2RhdGEgPSBkYXRhOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGd1cF90ZXN0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcCgpOwomIzQzOwlzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsKJiM0MzsJcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChkYXRhKTsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO2RhdGEtJmd0O2xvbmd0ZXJtX211dGV4KTsKJiM0MzsJa2ZyZWUoZGF0YSk7CiYjNDM7CWZpbGUtJmd0O3ByaXZhdGVfZGF0YSA9IE5VTEw7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3VwX3Rlc3RfZm9wcyA9IHsKLQkub3BlbiA9IG5vbnNlZWthYmxlX29wZW4sCiYjNDM7CS5vcGVuID0gZ3VwX3Rlc3Rfb3BlbiwKIAkudW5sb2NrZWRfaW9jdGwgPSBndXBfdGVzdF9pb2N0bCwKIAkuY29tcGF0X2lvY3RsID0gY29tcGF0X3B0cl9pb2N0bCwKIAkucmVsZWFzZSA9IGd1cF90ZXN0X3JlbGVhc2UsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHVVAgVGVzdCBNb2R1bGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vZ3VwX3Rlc3QuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHNoaWZ0aW5nIHNvbWUgZ2xvYmFsIHN0YXRlIHZhcmlhYmxlcywgYHBpbl9sb25ndGVybV90ZXN0X211dGV4YCwgYHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzYCwgYW5kIGBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlc2AsIGludG8gYSBwZXItZmlsZSBkZXNjcmlwdG9yIHN0cnVjdHVyZSwgYHN0cnVjdCBndXBfdGVzdF9kYXRhYCwgd2hpY2ggd2lsbCBub3cgcmVzaWRlIGluIGBmaWxlLSZndDtwcml2YXRlX2RhdGFgLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZyB0byBlbmFibGUgY29uY3VycmVudCBleGVjdXRpb24gb2YgdGhlIGBQSU5fTE9OR1RFUk1fVEVTVF8qYCBpb2N0bHMuIEVzc2VudGlhbGx5LCBpdCByZW1vdmVzIHRoZSBnbG9iYWwgbG9ja2luZyBib3R0bGVuZWNrLgoKU2luY2UgdGhpcyBpcyBhIHRlc3QgbW9kdWxlIChgZ3VwX3Rlc3QuY2ApLCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZSwgYW5kIGlzIGl0IHdvcnRoIGZ1enppbmc/IEkgbWVhbiwgd2UgdXN1YWxseSBkb24mIzM5O3QgcHJpb3JpdGl6ZSBmdXp6aW5nIHRlc3RzLiBCdXQgdGhpcyBtb2R1bGUgKmRvZXMqIGV4cG9zZSBrZXJuZWwgQVBJcyBsaWtlIGBwaW5fdXNlcl9wYWdlc2AsIGB1bnBpbl91c2VyX3BhZ2VzYCwgZXRjLiwgdG8gdXNlcnNwYWNlLiBUaGF0JiMzOTtzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcsIGFjdHVhbGx5LCBiZWNhdXNlIHRob3NlIEFQSXMgY2FuIGhhdmUgaW50ZXJlc3Rpbmcgc2lkZS1lZmZlY3RzIGFuZCBtaWdodCB1bmNvdmVyIHNvbWUgaGlkZGVuIG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3MuCgpXYWl0IGEgc2Vjb25k4oCmIGBndXBfdGVzdGAgaXMgYSBkZWJ1Z2ZzL3Rlc3QgaW50ZXJmYWNlISBUaGF0IGNoYW5nZXMgdGhpbmdzLiBMZXQmIzM5O3MgcHVsbCB1cCB0aGUga2VybmVsIHNvdXJjZSBpbiBgbW0vZ3VwX3Rlc3QuY2AgYW5kIGRpZyBhIGxpdHRsZSBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3VwX3Rlc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjkzPWNvbmZpZyBHVVBfVEVTVFxuLS1cbm1tL0tjb25maWctMTI5Ni1cdGhlbHBcbm1tL0tjb25maWc6MTI5NzpcdCAgUHJvdmlkZXMgL3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXMgYSB3YXlcbm1tL0tjb25maWctMTI5OC1cdCAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgZm9yXG4tLVxubW0vS2NvbmZpZy0xMzEwLVxubW0vS2NvbmZpZzoxMzExOlx0ICBTZWUgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xubW0vS2NvbmZpZy0xMzEyLVxuLS1cbm1tL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfQ0dST1VQX0hVR0VUTEIpICYjNDM7PSBodWdldGxiX2Nncm91cC5vXG5tbS9NYWtlZmlsZToxMTA6b2JqLSQoQ09ORklHX0dVUF9URVNUKSAmIzQzOz0gZ3VwX3Rlc3Qub1xubW0vTWFrZWZpbGUtMTExLW9iai0kKENPTkZJR19ETUFQT09MX1RFU1QpICYjNDM7PSBkbWFwb29sX3Rlc3Qub1xuLS1cbm1tL2d1cF90ZXN0LmMtOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9oaWdobWVtLmhcdTAwM2Vcbm1tL2d1cF90ZXN0LmM6OTojaW5jbHVkZSBcJiMzNDtndXBfdGVzdC5oXCYjMzQ7XG5tbS9ndXBfdGVzdC5jLTEwLVxubW0vZ3VwX3Rlc3QuYzoxMTpzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSB7XG5tbS9ndXBfdGVzdC5jLTEyLVx0c3RydWN0IG11dGV4IGxvbmd0ZXJtX211dGV4O1xuLS1cbm1tL2d1cF90ZXN0LmM9MTc9c3RhdGljIHZvaWQgcHV0X2JhY2tfcGFnZXModW5zaWduZWQgaW50IGNtZCwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbm1tL2d1cF90ZXN0LmM6MTg6XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgdW5zaWduZWQgaW50IGd1cF90ZXN0X2ZsYWdzKVxubW0vZ3VwX3Rlc3QuYy0xOS17XG4tLVxubW0vZ3VwX3Rlc3QuYy0zNC1cdGNhc2UgRFVNUF9VU0VSX1BBR0VTX1RFU1Q6XG5tbS9ndXBfdGVzdC5jOjM1Olx0XHRpZiAoZ3VwX3Rlc3RfZmxhZ3MgXHUwMDI2IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOKSB7XG5tbS9ndXBfdGVzdC5jLTM2LVx0XHRcdHVucGluX3VzZXJfcGFnZXMocGFnZXMsIG5yX3BhZ2VzKTtcbi0tXG5tbS9ndXBfdGVzdC5jPTQ2PXN0YXRpYyB2b2lkIHZlcmlmeV9kbWFfcGlubmVkKHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4tLVxubW0vZ3VwX3Rlc3QuYy02MS1cbm1tL2d1cF90ZXN0LmM6NjI6XHRcdFx0XHRkdW1wX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgXCYjMzQ7Z3VwX3Rlc3QgZmFpbHVyZVwmIzM0Oyk7XG5tbS9ndXBfdGVzdC5jLTYzLVx0XHRcdFx0YnJlYWs7XG4tLVxubW0vZ3VwX3Rlc3QuYy02Ny1cdFx0XHRcdCAgICAgaSkpIHtcbm1tL2d1cF90ZXN0LmM6Njg6XHRcdFx0XHRkdW1wX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgXCYjMzQ7Z3VwX3Rlc3QgZmFpbHVyZVwmIzM0Oyk7XG5tbS9ndXBfdGVzdC5jLTY5LVx0XHRcdFx0YnJlYWs7XG4tLVxubW0vZ3VwX3Rlc3QuYy03NS1cbm1tL2d1cF90ZXN0LmM6NzY6c3RhdGljIHZvaWQgZHVtcF9wYWdlc190ZXN0KHN0cnVjdCBndXBfdGVzdCAqZ3VwLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxubW0vZ3VwX3Rlc3QuYy03Ny1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbi0tXG5tbS9ndXBfdGVzdC5jLTEwMS1cdFx0XHRkdW1wX3BhZ2UocGFnZXNbaW5kZXhfdG9fZHVtcF0sXG5tbS9ndXBfdGVzdC5jOjEwMjpcdFx0XHRcdCAgXCYjMzQ7Z3VwX3Rlc3Q6IGR1bXBfcGFnZXMoKSB0ZXN0XCYjMzQ7KTtcbm1tL2d1cF90ZXN0LmMtMTAzLVx0XHR9XG4tLVxubW0vZ3VwX3Rlc3QuYy0xMDYtXG5tbS9ndXBfdGVzdC5jOjEwNzpzdGF0aWMgaW50IF9fZ3VwX3Rlc3RfaW9jdGwodW5zaWduZWQgaW50IGNtZCxcbm1tL2d1cF90ZXN0LmM6MTA4Olx0XHRzdHJ1Y3QgZ3VwX3Rlc3QgKmd1cClcbm1tL2d1cF90ZXN0LmMtMTA5LXtcbi0tXG5tbS9ndXBfdGVzdC5jLTIxNi1cbm1tL2d1cF90ZXN0LmM6MjE3OnN0YXRpYyBpbmxpbmUgdm9pZCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhKVxubW0vZ3VwX3Rlc3QuYy0yMTgte1xuLS1cbm1tL2d1cF90ZXN0LmMtMjI4LVxubW0vZ3VwX3Rlc3QuYzoyMjk6c3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEsXG5tbS9ndXBfdGVzdC5jLTIzMC1cdFx0dW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubW0vZ3VwX3Rlc3QuYy0yOTUtXG5tbS9ndXBfdGVzdC5jOjI5NjpzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhLFxubW0vZ3VwX3Rlc3QuYy0yOTctXHRcdHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbm1tL2d1cF90ZXN0LmM9MzIyPXN0YXRpYyBsb25nIHBpbl9sb25ndGVybV90ZXN0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5tbS9ndXBfdGVzdC5jLTMyNC17XG5tbS9ndXBfdGVzdC5jOjMyNTpcdHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhID0gZmlsZXAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xubW0vZ3VwX3Rlc3QuYy0zMjYtXHRpbnQgcmV0ID0gLUVJTlZBTDtcbi0tXG5tbS9ndXBfdGVzdC5jLTM0Ny1cbm1tL2d1cF90ZXN0LmM6MzQ4OnN0YXRpYyBsb25nIGd1cF90ZXN0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCxcbm1tL2d1cF90ZXN0LmMtMzQ5LVx0XHR1bnNpZ25lZCBsb25nIGFyZylcbm1tL2d1cF90ZXN0LmMtMzUwLXtcbm1tL2d1cF90ZXN0LmM6MzUxOlx0c3RydWN0IGd1cF90ZXN0IGd1cDtcbm1tL2d1cF90ZXN0LmMtMzUyLVx0aW50IHJldDtcbi0tXG5tbS9ndXBfdGVzdC5jLTM3Mi1cbm1tL2d1cF90ZXN0LmM6MzczOlx0cmV0ID0gX19ndXBfdGVzdF9pb2N0bChjbWQsIFx1MDAyNmd1cCk7XG5tbS9ndXBfdGVzdC5jLTM3NC1cdGlmIChyZXQpXG4tLVxubW0vZ3VwX3Rlc3QuYy0zODItXG5tbS9ndXBfdGVzdC5jOjM4MzpzdGF0aWMgaW50IGd1cF90ZXN0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5tbS9ndXBfdGVzdC5jLTM4NC17XG5tbS9ndXBfdGVzdC5jOjM4NTpcdHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhO1xubW0vZ3VwX3Rlc3QuYy0zODYtXHRpbnQgcmV0O1xuLS1cbm1tL2d1cF90ZXN0LmMtNDAyLVxubW0vZ3VwX3Rlc3QuYzo0MDM6c3RhdGljIGludCBndXBfdGVzdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxubW0vZ3VwX3Rlc3QuYy00MDQte1xubW0vZ3VwX3Rlc3QuYzo0MDU6XHRzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xubW0vZ3VwX3Rlc3QuYy00MDYtXG4tLVxubW0vZ3VwX3Rlc3QuYy00MTQtXG5tbS9ndXBfdGVzdC5jOjQxNTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBndXBfdGVzdF9mb3BzID0ge1xubW0vZ3VwX3Rlc3QuYzo0MTY6XHQub3BlbiA9IGd1cF90ZXN0X29wZW4sXG5tbS9ndXBfdGVzdC5jOjQxNzpcdC51bmxvY2tlZF9pb2N0bCA9IGd1cF90ZXN0X2lvY3RsLFxubW0vZ3VwX3Rlc3QuYy00MTgtXHQuY29tcGF0X2lvY3RsID0gY29tcGF0X3B0cl9pb2N0bCxcbm1tL2d1cF90ZXN0LmM6NDE5Olx0LnJlbGVhc2UgPSBndXBfdGVzdF9yZWxlYXNlLFxubW0vZ3VwX3Rlc3QuYy00MjAtfTtcbm1tL2d1cF90ZXN0LmMtNDIxLVxubW0vZ3VwX3Rlc3QuYzo0MjI6c3RhdGljIGludCBfX2luaXQgZ3VwX3Rlc3RfaW5pdCh2b2lkKVxubW0vZ3VwX3Rlc3QuYy00MjMte1xubW0vZ3VwX3Rlc3QuYzo0MjQ6XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX3Vuc2FmZShcJiMzNDtndXBfdGVzdFwmIzM0OywgMDYwMCwgTlVMTCwgTlVMTCxcbm1tL2d1cF90ZXN0LmM6NDI1Olx0XHRcdFx0ICAgXHUwMDI2Z3VwX3Rlc3RfZm9wcyk7XG5tbS9ndXBfdGVzdC5jLTQyNi1cbi0tXG5tbS9ndXBfdGVzdC5jLTQyOS1cbm1tL2d1cF90ZXN0LmM6NDMwOmxhdGVfaW5pdGNhbGwoZ3VwX3Rlc3RfaW5pdCk7XG4tLVxubW0vZ3VwX3Rlc3QuaC02LVxubW0vZ3VwX3Rlc3QuaDo3OiNkZWZpbmUgR1VQX0ZBU1RfQkVOQ0hNQVJLXHRfSU9XUigmIzM5O2cmIzM5OywgMSwgc3RydWN0IGd1cF90ZXN0KVxubW0vZ3VwX3Rlc3QuaDo4OiNkZWZpbmUgUElOX0ZBU1RfQkVOQ0hNQVJLXHRfSU9XUigmIzM5O2cmIzM5OywgMiwgc3RydWN0IGd1cF90ZXN0KVxubW0vZ3VwX3Rlc3QuaDo5OiNkZWZpbmUgUElOX0xPTkdURVJNX0JFTkNITUFSS1x0X0lPV1IoJiMzOTtnJiMzOTssIDMsIHN0cnVjdCBndXBfdGVzdClcbm1tL2d1cF90ZXN0Lmg6MTA6I2RlZmluZSBHVVBfQkFTSUNfVEVTVFx0XHRfSU9XUigmIzM5O2cmIzM5OywgNCwgc3RydWN0IGd1cF90ZXN0KVxubW0vZ3VwX3Rlc3QuaDoxMTojZGVmaW5lIFBJTl9CQVNJQ19URVNUXHRcdF9JT1dSKCYjMzk7ZyYjMzk7LCA1LCBzdHJ1Y3QgZ3VwX3Rlc3QpXG5tbS9ndXBfdGVzdC5oOjEyOiNkZWZpbmUgRFVNUF9VU0VSX1BBR0VTX1RFU1RcdF9JT1dSKCYjMzk7ZyYjMzk7LCA2LCBzdHJ1Y3QgZ3VwX3Rlc3QpXG5tbS9ndXBfdGVzdC5oLTEzLSNkZWZpbmUgUElOX0xPTkdURVJNX1RFU1RfU1RBUlRcdF9JT1coJiMzOTtnJiMzOTssIDcsIHN0cnVjdCBwaW5fbG9uZ3Rlcm1fdGVzdClcbi0tXG5tbS9ndXBfdGVzdC5oLTIwLVxubW0vZ3VwX3Rlc3QuaDoyMTpzdHJ1Y3QgZ3VwX3Rlc3Qge1xubW0vZ3VwX3Rlc3QuaC0yMi1cdF9fdTY0IGdldF9kZWx0YV91c2VjO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBndXBfdGVzdC5jIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbW0vZ3VwX3Rlc3QuY2AuIEl0JiMzOTtzIGEgZGVidWdmcyBpbnRlcmZhY2UsIHdoaWNoIGlzIGEgYmlnIGZsYWcgZm9yIG1lIHNpbmNlIHRoYXQgb2Z0ZW4gbWVhbnMgdXNlcnNwYWNlIGludGVyYWN0aW9uIGFuZCBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGZvciB0ZXN0aW5nIGBnZXRfdXNlcl9wYWdlc2AgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIOKAkyB0aGUgYENPTkZJR19HVVBfVEVTVGAgY29uZmlnIGlzIHRoZSBrZXkuIFRoZSBwcmltYXJ5IGNoYW5nZSBoZXJlIGlzIGZpeGluZyBhIGNvbmN1cnJlbmN5IGlzc3VlIHdpdGhpbiB0aGUgYFBJTl9MT05HVEVSTV9URVNUXypgIGlvY3Rscy4gVGhleSYjMzk7dmUgbW92ZWQgc29tZSBnbG9iYWwgc3RhdGUgaW50byBhIHBlci1maWxlIGRlc2NyaXB0b3Igc3RydWN0dXJlLCBgc3RydWN0IGd1cF90ZXN0X2RhdGFgLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2Ugd2l0aGluIHRoZSB0ZXN0IG1vZHVsZSBpdHNlbGYuCgpUaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgJiMzNDtJcyB0aGlzIGZ1enphYmxlPyYjMzQ7IFNpbmNlIHRoaXMgZXhwb3NlcyBrZXJuZWwgQVBJcyB0byB1c2Vyc3BhY2UsIGl0JiMzOTtzIGEgZGVmaW5pdGUgcG9zc2liaWxpdHksIGFuZCBwcm9iYWJseSBhIGdvb2QgaWRlYS4gVGhlIGxpc3RlZCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOiBgZ3VwX3Rlc3Rfb3BlbmAsIGBndXBfdGVzdF9yZWxlYXNlYCwgYHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0YCwgYHBpbl9sb25ndGVybV90ZXN0X3N0b3BgLCBgcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZGAsIGBwaW5fbG9uZ3Rlcm1fdGVzdF9pb2N0bGAsIGFuZCBgZ3VwX3Rlc3RfaW9jdGxgLgoKV2FpdCwgYGd1cF90ZXN0X29wZW5gIGFuZCBgZ3VwX3Rlc3RfcmVsZWFzZWAgYXJlICpuZXcqIGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIEFuZCBpdCBsb29rcyBsaWtlIGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydGAsIGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wYCwgYW5kIGBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkYCBhcmUgKm1vZGlmaWVkKi4gVGhlc2UgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zIHdoaWNoIGlzIGltcG9ydGFudC4gSG93ZXZlciwgYGd1cF90ZXN0X29wZW5gLCBgZ3VwX3Rlc3RfcmVsZWFzZWAsIGFuZCBgZ3VwX3Rlc3RfaW9jdGxgIGFyZSBleHBvc2VkIHZpYSBgZmlsZV9vcGVyYXRpb25zYCB3aGljaCBpcyBkaWZmZXJlbnQuIFRoZSBwcm9tcHQgc2F5cyB0aGF0IHdlIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4KCkhhbmcgb27igKYgbG9va2luZyBjbG9zZXIsIGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydGAgKmlzKiBpbmxpbmUuIFNvLCB0aGF0JiMzOTtzIG5vdCBhIGNsZWFyIGZ1enppbmcgdGFyZ2V0LCBidXQgdGhlIGBndXBfdGVzdF9vcGVuYCwgYW5kIGBndXBfdGVzdF9yZWxlYXNlYCwgYW5kIGBndXBfdGVzdF9pb2N0bGAgYXJlICpub3QqIGlubGluZS4gVGhlc2UgYXJlIGFjdHVhbGx5IHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyBpbiB0aGUgYGZpbGVfb3BlcmF0aW9uc2Agc3RydWN0LiBUaGlzIG1lYW5zIHRoZXkgY2Fubm90IGJlIGlubGluZWQsIGFuZCB3aWxsIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gU28sIHdlJiMzOTtyZSBkZWZpbml0ZWx5IGxvb2tpbmcgYXQgcG90ZW50aWFsIGZ1enppbmcgc3VyZmFjZSBoZXJlLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGd1cF90ZXN0X29wZW5gIGlzIHN0YXRpYy4gWWVzLCBpdCYjMzk7cyBzdGF0aWMsIGJ1dCB0aGlzIGlzIGxlc3MgaW1wb3J0YW50LCBpdCYjMzk7cyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBUaGlzIG1lYW5zIHRoZSBjb21waWxlciB3b24mIzM5O3QgaW5saW5lIGl0LiBTYW1lIHdpdGggYGd1cF90ZXN0X3JlbGVhc2VgLCBpdCBpcyBhbHNvIHN0YXRpYyBidXQgaXMgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXIuIFRoZW4gdGhlcmUmIzM5O3MgYGd1cF90ZXN0X2lvY3RsYCBhcyB3ZWxsISBBbmQgYHBpbl9sb25ndGVybV90ZXN0X2lvY3RsYCBpcyBjYWxsZWQgZnJvbSBgZ3VwX3Rlc3RfaW9jdGxgLiBUaGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIGZvciBgZ3VwX3Rlc3RfaW9jdGxgIGluIGBtbS9ndXBfdGVzdC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2d1cF90ZXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHR9XG4gMzIxOlx0XG4gMzIyOlx0c3RhdGljIGxvbmcgcGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLFxuIDMyMzpcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxuIDMyNDpcdHtcbiAzMjU6XHRcdHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhID0gZmlsZXAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIDMyNjpcdFx0aW50IHJldCA9IC1FSU5WQUw7XG4gMzI3Olx0XG4gMzI4Olx0XHRpZiAobXV0ZXhfbG9ja19raWxsYWJsZShcdTAwMjZkYXRhLVx1MDAzZWxvbmd0ZXJtX211dGV4KSlcbiAzMjk6XHRcdFx0cmV0dXJuIC1FSU5UUjtcbiAzMzA6XHRcbiAzMzE6XHRcdHN3aXRjaCAoY21kKSB7XG4gMzMyOlx0XHRjYXNlIFBJTl9MT05HVEVSTV9URVNUX1NUQVJUOlxuIDMzMzpcdFx0XHRyZXQgPSBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydChkYXRhLCBhcmcpO1xuIDMzNDpcdFx0XHRicmVhaztcbiAzMzU6XHRcdGNhc2UgUElOX0xPTkdURVJNX1RFU1RfU1RPUDpcbiAzMzY6XHRcdFx0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChkYXRhKTtcbiAzMzc6XHRcdFx0cmV0ID0gMDtcbiAzMzg6XHRcdFx0YnJlYWs7XG4gMzM5Olx0XHRjYXNlIFBJTl9MT05HVEVSTV9URVNUX1JFQUQ6XG4gMzQwOlx0XHRcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoZGF0YSwgYXJnKTtcbiAzNDE6XHRcdFx0YnJlYWs7XG4gMzQyOlx0XHR9XG4gMzQzOlx0XG4gMzQ0Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGF0YS1cdTAwM2Vsb25ndGVybV9tdXRleCk7XG4gMzQ1Olx0XHRyZXR1cm4gcmV0O1xuIDM0NjpcdH1cbiAzNDc6XHRcbiAzNDg6XHRzdGF0aWMgbG9uZyBndXBfdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsXG4gMzQ5Olx0XHRcdHVuc2lnbmVkIGxvbmcgYXJnKVxuIDM1MDpcdHtcbiAzNTE6XHRcdHN0cnVjdCBndXBfdGVzdCBndXA7XG4gMzUyOlx0XHRpbnQgcmV0O1xuIDM1MzpcdFxuIDM1NDpcdFx0c3dpdGNoIChjbWQpIHtcbiAzNTU6XHRcdGNhc2UgR1VQX0ZBU1RfQkVOQ0hNQVJLOlxuIDM1NjpcdFx0Y2FzZSBQSU5fRkFTVF9CRU5DSE1BUks6XG4gMzU3Olx0XHRjYXNlIFBJTl9MT05HVEVSTV9CRU5DSE1BUks6XG4gMzU4Olx0XHRjYXNlIEdVUF9CQVNJQ19URVNUOlxuIDM1OTpcdFx0Y2FzZSBQSU5fQkFTSUNfVEVTVDpcbiAzNjA6XHRcdGNhc2UgRFVNUF9VU0VSX1BBR0VTX1RFU1Q6XG4gMzYxOlx0XHRcdGJyZWFrO1xuIDM2MjpcdFx0Y2FzZSBQSU5fTE9OR1RFUk1fVEVTVF9TVEFSVDpcbiAzNjM6XHRcdGNhc2UgUElOX0xPTkdURVJNX1RFU1RfU1RPUDpcbiAzNjQ6XHRcdGNhc2UgUElOX0xPTkdURVJNX1RFU1RfUkVBRDpcbiAzNjU6XHRcdFx0cmV0dXJuIHBpbl9sb25ndGVybV90ZXN0X2lvY3RsKGZpbGVwLCBjbWQsIGFyZyk7XG4gMzY2Olx0XHRkZWZhdWx0OlxuIDM2NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNjg6XHRcdH1cbiAzNjk6XHRcbiAzNzA6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZndXAsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGd1cCkpKVxuIDM3MTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAzNzI6XHRcbiAzNzM6XHRcdHJldCA9IF9fZ3VwX3Rlc3RfaW9jdGwoY21kLCBcdTAwMjZndXApO1xuIDM3NDpcdFx0aWYgKHJldClcbiAzNzU6XHRcdFx0cmV0dXJuIHJldDtcbiAzNzY6XHRcbiAzNzc6XHRcdGlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCBcdTAwMjZndXAsIHNpemVvZihndXApKSlcbiAzNzg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMzc5Olx0XG4gMzgwOlx0XHRyZXR1cm4gMDtcbiAzODE6XHR9XG4gMzgyOlx0XG4gMzgzOlx0c3RhdGljIGludCBndXBfdGVzdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIDM4NDpcdHtcbiAzODU6XHRcdHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhO1xuIDM4NjpcdFx0aW50IHJldDtcbiAzODc6XHRcbiAzODg6XHRcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XG4gMzg5Olx0XHRpZiAoIWRhdGEpXG4gMzkwOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDM5MTpcdFxuIDM5MjpcdFx0cmV0ID0gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7XG4gMzkzOlx0XHRpZiAocmV0KSB7XG4gMzk0Olx0XHRcdGtmcmVlKGRhdGEpO1xuIDM5NTpcdFx0XHRyZXR1cm4gcmV0O1xuIDM5NjpcdFx0fVxuIDM5NzpcdFxuIDM5ODpcdFx0bXV0ZXhfaW5pdChcdTAwMjZkYXRhLVx1MDAzZWxvbmd0ZXJtX211dGV4KTtcbiAzOTk6XHRcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gZGF0YTtcbiA0MDA6XHRcdHJldHVybiAwO1xuIDQwMTpcdH1cbiA0MDI6XHRcbiA0MDM6XHRzdGF0aWMgaW50IGd1cF90ZXN0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gNDA0Olx0e1xuIDQwNTpcdFx0c3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiA0MDY6XHRcbiA0MDc6XHRcdHBpbl9sb25ndGVybV90ZXN0X3N0b3AoZGF0YSk7XG4gNDA4Olx0XHRtdXRleF9kZXN0cm95KFx1MDAyNmRhdGEtXHUwMDNlbG9uZ3Rlcm1fbXV0ZXgpO1xuIDQwOTpcdFx0a2ZyZWUoZGF0YSk7XG4gNDEwOlx0XHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IE5VTEw7XG4gNDExOlx0XG4gNDEyOlx0XHRyZXR1cm4gMDtcbiA0MTM6XHR9XG4gNDE0Olx0XG4gNDE1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3VwX3Rlc3RfZm9wcyA9IHtcbiA0MTY6XHRcdC5vcGVuID0gZ3VwX3Rlc3Rfb3BlbixcbiA0MTc6XHRcdC51bmxvY2tlZF9pb2N0bCA9IGd1cF90ZXN0X2lvY3RsLFxuIDQxODpcdFx0LmNvbXBhdF9pb2N0bCA9IGNvbXBhdF9wdHJfaW9jdGwsXG4gNDE5Olx0XHQucmVsZWFzZSA9IGd1cF90ZXN0X3JlbGVhc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ0OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWNlbnQgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSByZWNlbnQgbW9kaWZpY2F0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBhZGRpdGlvbiBvciBhbHRlcmF0aW9ucyBvZiB0aGUgZnVuY3Rpb25zIGBndXBfdGVzdF9vcGVuYCwgYGd1cF90ZXN0X3JlbGVhc2VgLCBgZ3VwX3Rlc3RfaW9jdGxgLCBhbmQgYHBpbl9sb25ndGVybV90ZXN0X2lvY3RsYC4gVGhleSBhcmVuJiMzOTt0IGlubGluZWQsIHdoaWNoIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBUaGUgb3ZlcmFsbCBjb25maWcgYmVpbmcgdXNlZCBpcyBgR1VQX1RFU1RgLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIGZ1bmN0aW9ucywgd2hpY2ggZGVhbCB3aXRoIElPQ1RMcyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgR1VQX1RFU1RgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgaW52b2x2ZWQgYW5kIHdoYXQgdGhlIHB1cnBvc2Ugb2YgYEdVUF9URVNUYCBhY3R1YWxseSBpcy4gVGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyOTA6XHRcdCAgaW5mb3JtYXRpb24gaW5jbHVkZXMgZ2xvYmFsIGFuZCBwZXIgY2h1bmsgc3RhdGlzdGljcywgd2hpY2ggY2FuXG4xMjkxOlx0XHQgIGJlIHVzZWQgdG8gaGVscCB1bmRlcnN0YW5kIHBlcmNwdSBtZW1vcnkgdXNhZ2UuXG4xMjkyOlx0XG4xMjkzOlx0Y29uZmlnIEdVUF9URVNUXG4xMjk0Olx0XHRib29sIFwmIzM0O0VuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHNcJiMzNDtcbjEyOTU6XHRcdGRlcGVuZHMgb24gREVCVUdfRlNcbjEyOTY6XHRcdGhlbHBcbjEyOTc6XHRcdCAgUHJvdmlkZXMgL3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXMgYSB3YXlcbjEyOTg6XHRcdCAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgZm9yXG4xMjk5Olx0XHQgIHRoZSBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCkgZmFtaWx5IG9mIEFQSSBjYWxscy5cbjEzMDA6XHRcbjEzMDE6XHRcdCAgVGhlc2UgdGVzdHMgaW5jbHVkZSBiZW5jaG1hcmsgdGVzdGluZyBvZiB0aGUgX2Zhc3QgdmFyaWFudHMgb2ZcbjEzMDI6XHRcdCAgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpLCBhcyB3ZWxsIGFzIHNtb2tlIHRlc3RzIG9mXG4xMzAzOlx0XHQgIHRoZSBub24tX2Zhc3QgdmFyaWFudHMuXG4xMzA0Olx0XG4xMzA1Olx0XHQgIFRoZXJlIGlzIGFsc28gYSBzdWItdGVzdCB0aGF0IGFsbG93cyBydW5uaW5nIGR1bXBfcGFnZSgpIG9uIGFueVxuMTMwNjpcdFx0ICBvZiB1cCB0byBlaWdodCBwYWdlcyAoc2VsZWN0ZWQgYnkgY29tbWFuZCBsaW5lIGFyZ3MpIHdpdGhpbiB0aGVcbjEzMDc6XHRcdCAgcmFuZ2Ugb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIFRoZXNlIHBhZ2VzIGFyZSBlaXRoZXIgcGlubmVkIHZpYVxuMTMwODpcdFx0ICBwaW5fdXNlcl9wYWdlcyooKSwgb3IgcGlubmVkIHZpYSBnZXRfdXNlcl9wYWdlcyooKSwgYXMgc3BlY2lmaWVkXG4xMzA5Olx0XHQgIGJ5IG90aGVyIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuXG4xMzEwOlx0XG4xMzExOlx0XHQgIFNlZSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4xMzEyOlx0XG4xMzEzOlx0Y29tbWVudCBcJiMzNDtHVVBfVEVTVCBuZWVkcyB0byBoYXZlIERFQlVHX0ZTIGVuYWJsZWRcJiMzNDtcbjEzMTQ6XHRcdGRlcGVuZHMgb24gIUdVUF9URVNUIFx1MDAyNlx1MDAyNiAhREVCVUdfRlNcbjEzMTU6XHRcbjEzMTY6XHRjb25maWcgR1VQX0dFVF9QWFhfTE9XX0hJR0hcbjEzMTc6XHRcdGJvb2xcbjEzMTg6XHRcbjEzMTk6XHRjb25maWcgRE1BUE9PTF9URVNUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMzkKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogNTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIGBndXBfdGVzdGAgTW9kdWxlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBJJiMzOTt2ZSBnb3QgYSBwbGFuIGZvciBmdXp6aW5nIGl0LiBUaGUga2V5IGhlcmUgaXMgdGhlIGBndXBfdGVzdGAgZGVidWdmcyBpbnRlcmZhY2UuIFRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyIC0gYERFQlVHX0ZTYCwgYW5kIHNpbmNlIGBHVVBfVEVTVGAgZW5hYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSwgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGluIHRoZSBjb25maWd1cmF0aW9uLgoKTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuICp3b3J0aCogZnV6emluZz8gQWJzb2x1dGVseSEgSXQmIzM5O3MgYSB0ZXN0IG1vZHVsZSwgeWVzLCBidXQgaXQgZXhwb3NlcyBrZXJuZWwgQVBJcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlLCBhbmQgY29uY3VycmVuY3kgYnVncyBhcmUgcHJlY2lzZWx5IHdoYXQgZnV6emVycyBleGNlbCBhdCB1bmNvdmVyaW5nIGFuZCB2YWxpZGF0aW5nIGZpeGVzIGZvci4gVGhpcyBpcyBhIGNsYXNzaWMgb3Bwb3J0dW5pdHkuCgpUaGUgZnVuY3Rpb25zIHRoYXQgYXJlIG1vc3QgbGlrZWx5IHRvIGJlIGludGVyZXN0aW5nIGFyZSBgZ3VwX3Rlc3Rfb3BlbmAsIGBndXBfdGVzdF9yZWxlYXNlYCwgYGd1cF90ZXN0X2lvY3RsYCwgYW5kIGBwaW5fbG9uZ3Rlcm1fdGVzdF9pb2N0bGAuIEkgaW5pdGlhbGx5IGhhZCBhIGNvbmNlcm4gYWJvdXQgYHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0YCwgYHBpbl9sb25ndGVybV90ZXN0X3N0b3BgLCBhbmQgYHBpbl9sb25ndGVybV90ZXN0X3JlYWRgIHNpbmNlIHRoZXkgYXJlIGlubGluZSBhbmQgd29uJiMzOTt0IGhhdmUgdGhlaXIgb3duIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIFNpbmNlIHRoaXMgaXMgYW4gaW9jdGwgYmFzZWQgaW50ZXJmYWNlLCBpdCBtYWtlcyBzZW5zZSB0byBmb2N1cyBvbiB0aGUgYCpfaW9jdGxgIGZ1bmN0aW9ucy4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGNoZWNrIG9uIHRoZSBgcGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGxgIGZ1bmN0aW9uIHNpbmNlIGl0IGNvdWxkIGJlIGlubGluZWQuIEFoLCB5ZXMsIGl0JiMzOTtzIGBzdGF0aWMgbG9uZyBwaW5fbG9uZ3Rlcm1fdGVzdF9pb2N0bCguLi4pYC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYGd1cF90ZXN0X2lvY3RsYCwgd2hpY2ggaXMgYWxzbyBgc3RhdGljIGxvbmcgZ3VwX3Rlc3RfaW9jdGwoLi4uKWAuIFNpbmNlIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gb25lIHBsYWNlLCB0aGUgY29tcGlsZXIgKm1pZ2h0KiBpbmxpbmUgaXQuIEhvd2V2ZXIsIGBndXBfdGVzdF9pb2N0bGAgaXMgbm90IGlubGluZWQgYmVjYXVzZSBpdCYjMzk7cyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBUaGVyZWZvcmUsIGBndXBfdGVzdF9pb2N0bGAgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0LiBMaWtld2lzZSwgYGd1cF90ZXN0X29wZW5gIGFuZCBgZ3VwX3Rlc3RfcmVsZWFzZWAgYXJlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB0b28uCgpTbywgdG8gc3VtbWFyaXplLCBJJiMzOTttIGxpc3Rpbmc6CiogICBgZ3VwX3Rlc3Rfb3BlbmAKKiAgIGBndXBfdGVzdF9yZWxlYXNlYAoqICAgYGd1cF90ZXN0X2lvY3RsYAoqICAgYHBpbl9sb25ndGVybV90ZXN0X2lvY3RsYAoKVGhlIGNvbmZpZyBuZWVkZWQgZm9yIHRoaXMgaXMgYEdVUF9URVNUYC4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSBgZ3VwX3Rlc3RgIGRlYnVnZnMgaW50ZXJmYWNlIHRvIHVzZSBwZXItZmlsZSBkZXNjcmlwdG9yIHN0YXRlIGZvciB0aGUgYFBJTl9MT05HVEVSTV9URVNUXypgIGlvY3RscywgZml4aW5nIGNvbmN1cnJlbmN5IHByb2JsZW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gYSB0ZXN0IG1vZHVsZSB0aGF0IGV4cG9zZXMga2VybmVsIEFQSXMgdG8gdXNlcnNwYWNlLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgY29uY3VycmVuY3kgZml4IGlzIGNvcnJlY3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGlzc3VlcyBzdWNoIGFzIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBOb3csIGxldCYjMzk7cyBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7R1VQX1RFU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtndXBfdGVzdF9vcGVuJiMzNDssCiAgICAmIzM0O2d1cF90ZXN0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7Z3VwX3Rlc3RfaW9jdGwmIzM0OywKICAgICYjMzQ7cGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGd1cF90ZXN0IGRlYnVnZnMgaW50ZXJmYWNlIHRvIHVzZSBwZXItZmlsZSBkZXNjcmlwdG9yIHN0YXRlIGluc3RlYWQgb2YgZ2xvYmFsIHN0YXRlIGZvciB0aGUgUElOX0xPTkdURVJNX1RFU1RfKiBpb2N0bHMsIGZpeGluZyBjb25jdXJyZW5jeSBpc3N1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBhIHRlc3QgbW9kdWxlIHRoYXQgZXhwb3NlcyBrZXJuZWwgQVBJcyB0byB1c2Vyc3BhY2UsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBjb25jdXJyZW5jeSBmaXggaXMgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG5ldyBpc3N1ZXMgbGlrZSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dVUF9URVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3VwX3Rlc3Rfb3BlbiYjMzQ7LAogICAgJiMzNDtndXBfdGVzdF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2d1cF90ZXN0X2lvY3RsJiMzNDssCiAgICAmIzM0O3Bpbl9sb25ndGVybV90ZXN0X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBndXBfdGVzdCBkZWJ1Z2ZzIGludGVyZmFjZSB0byB1c2UgcGVyLWZpbGUgZGVzY3JpcHRvciBzdGF0ZSBpbnN0ZWFkIG9mIGdsb2JhbCBzdGF0ZSBmb3IgdGhlIFBJTl9MT05HVEVSTV9URVNUXyogaW9jdGxzLCBmaXhpbmcgY29uY3VycmVuY3kgaXNzdWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gYSB0ZXN0IG1vZHVsZSB0aGF0IGV4cG9zZXMga2VybmVsIEFQSXMgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgY29uY3VycmVuY3kgZml4IGlzIGNvcnJlY3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBuZXcgaXNzdWVzIGxpa2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHBpbl9sb25ndGVybV90ZXN0YCBpbiBgbW0vZ3VwX3Rlc3QuY2AgdG8gdXNlIGEgcGVyLWZpbGUgZGF0YSBzdHJ1Y3R1cmUgKGBzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YWApIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcywgYWxsb3dpbmcgY29uY3VycmVudCB1c2VycyBvZiB0aGUgZ3VwX3Rlc3QgaW9jdGwuIFRoZSBuZXcgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIGFsbCBmaWVsZHMuIFRoZSBhcnJheSBvZiBwYWdlIHBvaW50ZXJzIGlzIGFsbG9jYXRlZCB1c2luZyBga3ZjYWxsb2NgLCB3aGljaCBhbHNvIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeS4gVGhlIG9ubHkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSBpcyB0aGUgY29udGVudCBvZiB0aGUgcGlubmVkIHVzZXIgcGFnZXMsIHdoaWNoIGlzIGlkZW50aWNhbCB0byB0aGUgcHJlLXBhdGNoIGJlaGF2aW9yIGFuZCBkb2VzIG5vdCBsZWFrIGtlcm5lbCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbWVtb3J5IGxlYWtzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjZhZjY3OTVkYTg5MTY0YmI5MWYyYmE5YmE2MzhlZDRjM2Y3NTYyYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDEyOjIxOjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZ3VwX3Rlc3QuYyBiL21tL2d1cF90ZXN0LmMKaW5kZXggZWI0YzljZGExNmVkOC4uNDRjMWNkZmI5YzM3MSAxMDA2NDQKLS0tIGEvbW0vZ3VwX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ndXBfdGVzdC5jCkBAIC04LDYgJiM0Mzs4LDEyIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaGlnaG1lbS5oJmd0OwogI2luY2x1ZGUgJiMzNDtndXBfdGVzdC5oJiMzNDsKIAomIzQzO3N0cnVjdCBndXBfdGVzdF9kYXRhIHsKJiM0MzsJc3RydWN0IG11dGV4IGxvbmd0ZXJtX211dGV4OwomIzQzOwlzdHJ1Y3QgcGFnZSAqKmxvbmd0ZXJtX3BhZ2VzOwomIzQzOwl1bnNpZ25lZCBsb25nIGxvbmd0ZXJtX25yX3BhZ2VzOwomIzQzO307CiYjNDM7CiBzdGF0aWMgdm9pZCBwdXRfYmFja19wYWdlcyh1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAogCQkJICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgdW5zaWduZWQgaW50IGd1cF90ZXN0X2ZsYWdzKQogewpAQCAtMjA4LDIzICYjNDM7MjE0LDIwIEBAIHN0YXRpYyBpbnQgX19ndXBfdGVzdF9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBERUZJTkVfTVVURVgocGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpOwotc3RhdGljIHN0cnVjdCBwYWdlICoqcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXM7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlczsKLQotc3RhdGljIGlubGluZSB2b2lkIHBpbl9sb25ndGVybV90ZXN0X3N0b3Aodm9pZCkKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSkKIHsKLQlpZiAocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpIHsKLQkJaWYgKHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzKQotCQkJdW5waW5fdXNlcl9wYWdlcyhwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcywKLQkJCQkJIHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzKTsKLQkJa3ZmcmVlKHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzKTsKLQkJcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMgPSBOVUxMOwotCQlwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyA9IDA7CiYjNDM7CWlmIChkYXRhLSZndDtsb25ndGVybV9wYWdlcykgewomIzQzOwkJaWYgKGRhdGEtJmd0O2xvbmd0ZXJtX25yX3BhZ2VzKQomIzQzOwkJCXVucGluX3VzZXJfcGFnZXMoZGF0YS0mZ3Q7bG9uZ3Rlcm1fcGFnZXMsCiYjNDM7CQkJCQkgZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXMpOwomIzQzOwkJa3ZmcmVlKGRhdGEtJmd0O2xvbmd0ZXJtX3BhZ2VzKTsKJiM0MzsJCWRhdGEtJmd0O2xvbmd0ZXJtX3BhZ2VzID0gTlVMTDsKJiM0MzsJCWRhdGEtJmd0O2xvbmd0ZXJtX25yX3BhZ2VzID0gMDsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJbG9uZyBucl9wYWdlcywgY3VyX3BhZ2VzLCBhZGRyLCByZW1haW5pbmdfcGFnZXM7CiAJaW50IGd1cF9mbGFncyA9IEZPTExfTE9OR1RFUk07CkBAIC0yMzMsNyAmIzQzOzIzNiw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKQogCWludCByZXQgPSAwOwogCWJvb2wgZmFzdDsKIAotCWlmIChwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcykKJiM0MzsJaWYgKGRhdGEtJmd0O2xvbmd0ZXJtX3BhZ2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2FyZ3MsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGFyZ3MpKSkKQEAgLTI2MywxMiAmIzQzOzI2NiwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydCh1bnNpZ25lZCBsb25nIGFyZykKIAkJcmV0dXJuIC1FSU5UUjsKIAl9CiAKLQlwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcyA9IHBhZ2VzOwotCXBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzID0gMDsKJiM0MzsJZGF0YS0mZ3Q7bG9uZ3Rlcm1fcGFnZXMgPSBwYWdlczsKJiM0MzsJZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXMgPSAwOwogCi0Jd2hpbGUgKG5yX3BhZ2VzIC0gcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMpIHsKLQkJcmVtYWluaW5nX3BhZ2VzID0gbnJfcGFnZXMgLSBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlczsKLQkJYWRkciA9IGFyZ3MuYWRkciAmIzQzOyBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyAqIFBBR0VfU0laRTsKJiM0MzsJd2hpbGUgKG5yX3BhZ2VzIC0gZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXMpIHsKJiM0MzsJCXJlbWFpbmluZ19wYWdlcyA9IG5yX3BhZ2VzIC0gZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXM7CiYjNDM7CQlhZGRyID0gYXJncy5hZGRyICYjNDM7IGRhdGEtJmd0O2xvbmd0ZXJtX25yX3BhZ2VzICogUEFHRV9TSVpFOwogCiAJCWlmIChmYXN0KQogCQkJY3VyX3BhZ2VzID0gcGluX3VzZXJfcGFnZXNfZmFzdChhZGRyLCByZW1haW5pbmdfcGFnZXMsCkBAIC0yNzcsMTEgJiM0MzsyODAsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpCiAJCQljdXJfcGFnZXMgPSBwaW5fdXNlcl9wYWdlcyhhZGRyLCByZW1haW5pbmdfcGFnZXMsCiAJCQkJCQkgICBndXBfZmxhZ3MsIHBhZ2VzKTsKIAkJaWYgKGN1cl9wYWdlcyAmbHQ7IDApIHsKLQkJCXBpbl9sb25ndGVybV90ZXN0X3N0b3AoKTsKJiM0MzsJCQlwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpOwogCQkJcmV0ID0gY3VyX3BhZ2VzOwogCQkJYnJlYWs7CiAJCX0KLQkJcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMgJiM0Mzs9IGN1cl9wYWdlczsKJiM0MzsJCWRhdGEtJmd0O2xvbmd0ZXJtX25yX3BhZ2VzICYjNDM7PSBjdXJfcGFnZXM7CiAJCXBhZ2VzICYjNDM7PSBjdXJfcGFnZXM7CiAJfQogCkBAIC0yOTAsMTkgJiM0MzsyOTMsMjAgQEAgc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZCh1bnNpZ25lZCBsb25nIGFyZykKJiM0MztzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJX191NjQgdXNlcl9hZGRyOwogCXVuc2lnbmVkIGxvbmcgaTsKIAotCWlmICghcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpCiYjNDM7CWlmICghZGF0YS0mZ3Q7bG9uZ3Rlcm1fcGFnZXMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7dXNlcl9hZGRyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZih1c2VyX2FkZHIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXZvaWQgKmFkZHIgPSBrbWFwX2xvY2FsX3BhZ2UocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXNbaV0pOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl2b2lkICphZGRyID0ga21hcF9sb2NhbF9wYWdlKGRhdGEtJmd0O2xvbmd0ZXJtX3BhZ2VzW2ldKTsKIAkJdW5zaWduZWQgbG9uZyByZXQ7CiAKIAkJcmV0ID0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXVzZXJfYWRkciwgYWRkciwKQEAgLTMxOCwyNSAmIzQzOzMyMiwyNiBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHVuc2lnbmVkIGxvbmcgYXJnKQogc3RhdGljIGxvbmcgcGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKJiM0MzsJc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEgPSBmaWxlcC0mZ3Q7cHJpdmF0ZV9kYXRhOwogCWludCByZXQgPSAtRUlOVkFMOwogCi0JaWYgKG11dGV4X2xvY2tfa2lsbGFibGUoJmFtcDtwaW5fbG9uZ3Rlcm1fdGVzdF9tdXRleCkpCiYjNDM7CWlmIChtdXRleF9sb2NrX2tpbGxhYmxlKCZhbXA7ZGF0YS0mZ3Q7bG9uZ3Rlcm1fbXV0ZXgpKQogCQlyZXR1cm4gLUVJTlRSOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFBJTl9MT05HVEVSTV9URVNUX1NUQVJUOgotCQlyZXQgPSBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydChhcmcpOwomIzQzOwkJcmV0ID0gcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoZGF0YSwgYXJnKTsKIAkJYnJlYWs7CiAJY2FzZSBQSU5fTE9OR1RFUk1fVEVTVF9TVE9QOgotCQlwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKCk7CiYjNDM7CQlwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpOwogCQlyZXQgPSAwOwogCQlicmVhazsKIAljYXNlIFBJTl9MT05HVEVSTV9URVNUX1JFQUQ6Ci0JCXJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoYXJnKTsKJiM0MzsJCXJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoZGF0YSwgYXJnKTsKIAkJYnJlYWs7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZhbXA7cGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkYXRhLSZndDtsb25ndGVybV9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzc1LDE1ICYjNDM7MzgwLDQwIEBAIHN0YXRpYyBsb25nIGd1cF90ZXN0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZ3VwX3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkYXRhID0ga3phbGxvY19vYmooKmRhdGEpOwomIzQzOwlpZiAoIWRhdGEpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0ID0gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWtmcmVlKGRhdGEpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9pbml0KCZhbXA7ZGF0YS0mZ3Q7bG9uZ3Rlcm1fbXV0ZXgpOwomIzQzOwlmaWxlLSZndDtwcml2YXRlX2RhdGEgPSBkYXRhOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGd1cF90ZXN0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcCgpOwomIzQzOwlzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsKJiM0MzsJcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChkYXRhKTsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO2RhdGEtJmd0O2xvbmd0ZXJtX211dGV4KTsKJiM0MzsJa2ZyZWUoZGF0YSk7CiYjNDM7CWZpbGUtJmd0O3ByaXZhdGVfZGF0YSA9IE5VTEw7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3VwX3Rlc3RfZm9wcyA9IHsKLQkub3BlbiA9IG5vbnNlZWthYmxlX29wZW4sCiYjNDM7CS5vcGVuID0gZ3VwX3Rlc3Rfb3BlbiwKIAkudW5sb2NrZWRfaW9jdGwgPSBndXBfdGVzdF9pb2N0bCwKIAkuY29tcGF0X2lvY3RsID0gY29tcGF0X3B0cl9pb2N0bCwKIAkucmVsZWFzZSA9IGd1cF90ZXN0X3JlbGVhc2UsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDIzCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIGBtbS9ndXBfdGVzdC5jYCBmb3IgQ29uY3VycmVudCBHVVAgVGVzdCBVc2FnZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGltcHJvdmluZyB0aGUgY29uY3VycmVuY3kgb2YgdGhlIGBndXBfdGVzdGAgaW9jdGwuIEN1cnJlbnRseSwgdGhlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYHBpbl9sb25ndGVybV90ZXN0YCBmdW5jdGlvbmFsaXR5LCByZWxpZXMgb24gZ2xvYmFsIHZhcmlhYmxlcy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYm90dGxlbmVjaywgZXNwZWNpYWxseSBpZiB3ZSB3YW50IHRvIGFsbG93IG11bHRpcGxlIHVzZXJzIHRvIHJ1biBgZ3VwX3Rlc3RgIGNvbmN1cnJlbnRseS4gU28sIHRoZSByZWZhY3RvciBpcyBhIGdvb2QgbW92ZS4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBob3cgdGhleeKAmXJlIGRvaW5nIGl0LiBUaGUga2V5IGlzIHVzaW5nIGEgcGVyLWZpbGUgZGF0YSBzdHJ1Y3R1cmUsIGBzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YWAsIHRvIHJlcGxhY2UgdGhvc2UgZ2xvYmFsIHZhcmlhYmxlczogYHBpbl9sb25ndGVybV90ZXN0X211dGV4YCwgYHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzYCwgYW5kIGBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlc2AuIFRoYXQmIzM5O3MgdGhlIHJpZ2h0IGFwcHJvYWNoOyBwZXItZmlsZSBsb2NraW5nIGFuZCBkYXRhIGlzIHRoZSBvYnZpb3VzIHNvbHV0aW9uIGhlcmUuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGUgY2hhbmdlcy4gRmlyc3QsIHRoZXkgZGVmaW5lIHRoZSBzdHJ1Y3R1cmUsIGBzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YWAuIEZpbmUsIHVuZGVyc3RhbmRhYmxlLgoKT2theSwgbm93IGxldCYjMzk7cyBzZWUgaG93IHRoaXMgc3RydWN0dXJlIGlzIGluc3RhbnRpYXRlZC4gQWgsIGluIGBndXBfdGVzdF9vcGVuYCwgaXQgbG9va3MgbGlrZSBgZGF0YWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigqZGF0YSlgLiBXYWl0LCBga3phbGxvY19vYmpgPyBUaGF0JiMzOTtzIG5vdCBhIHN0YW5kYXJkIGtlcm5lbCBmdW5jdGlvbiwgaXMgaXQ/IEl0JiMzOTtzIHVuZmFtaWxpYXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpc24mIzM5O3QgYSB0eXBvIG9yIHNvbWUgY3VzdG9tIG1hY3JvIHdpdGhpbiB0aGlzIHBhdGNoIG9yIHRoZSBsYXJnZXIgcHJvamVjdC4gSXQgc2VlbXMgb2RkLCBhcyB0aGUgdXN1YWwga2VybmVsIGFsbG9jYXRpb24gZnVuY3Rpb24gaXMgYGt6YWxsb2NgLiBVbmxlc3MgdGhpcyBpcyBhIHJlY2VudCBhZGRpdGlvbi4gT2theSwgbGV0JiMzOTtzIGFzc3VtZSBpdCYjMzk7cyBga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKWAgZm9yIG5vdywgYnV0IEkgbmVlZCB0byBjaGVjay4gSXQmIzM5O3MgYmVzdCBwcmFjdGljZSB0byBjb25maXJtIHRoZSBkZXRhaWxzLiBMZXQmIzM5O3Mgc2VlIGlmIGl0JiMzOTtzIGEgbWFjcm8gZGVmaW5lZCBzb21ld2hlcmUsIG9yIHBlcmhhcHMgYSB0eXBvLiBHcmVwcGluZyBmb3IgYGt6YWxsb2Nfb2JqYCBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t6YWxsb2Nfb2JqJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3OTEzOCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdD0xMDM9bGlzdDpcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTExNC1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q6MTE1OiAgICAgICAgICBncm9jayA9IGt6YWxsb2Nfb2JqKCpncm9jayk7XG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTExNi0gICAgICAgICAgaWYgKCFncm9jaylcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTEyNS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q6MTI2OiAgICAgICAgICBkaW1pdHJpID0ga3phbGxvY19vYmooKmRpbWl0cmkpO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMjctICAgICAgICAgIGlmICghZGltaXRyaSlcbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3Q9NDU9YSBtZXNzYWdlIGFuZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBBUEkgYW5kIHJldHVybiBpbW1lZGlhdGVseSkuXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0LTg5LVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0OjkwOlx0XHRkY19zeW5jID0ga3phbGxvY19vYmooKmRjX3N5bmMpO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0OjkxOlx0XHRkY19hc3luYyA9IGt6YWxsb2Nfb2JqKCpkY19hc3luYyk7XG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3QtOTItXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0PTI2PUV4YW1wbGU6XG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0LTQ0LVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0OjQ1Olx0XHRteV9maCA9IGt6YWxsb2Nfb2JqKCpteV9maCk7XG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3QtNDYtXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTM4PVRoZSBrZXJuZWwgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBnZW5lcmFsIHB1cnBvc2UgbWVtb3J5IGFsbG9jYXRvcnM6XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Mzk6a21hbGxvYygpLCBremFsbG9jKCksIGttYWxsb2Nfb2JqcygpLCBremFsbG9jX29ianMoKSwgdm1hbGxvYygpLCBhbmRcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0MC12emFsbG9jKCkuICBQbGVhc2UgcmVmZXIgdG8gdGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTY0PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgYWxsb2NhdGluZyBhIHplcm9lZCBhcnJheSBpcyB0aGUgZm9sbG93aW5nOlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2Ny1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk2ODpcdHAgPSBremFsbG9jX29ianMoKnAsIG4sIC4uLik7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjktXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM5OD1iZWNvbWUsIHJlc3BlY3RpdmVseTo6XG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMC1cdHB0ciA9IGttYWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMTpcdHB0ciA9IGt6YWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMi1cdHB0ciA9IGttYWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAzOlx0cHRyID0ga3phbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDQtXHRwdHIgPSBrbWFsbG9jX2ZsZXgoKnB0ciwgZmxleF9tZW1iZXIsIGNvdW50IFssIGdmcF0gKTtcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MjA4PXRvIGRldGFpbHMgZXhwbGFpbmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbi5cbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMjY4LSAgICAgICAgICAgICAgLyogYWxsb2NhdGUgYSBjaGlwLXNwZWNpZmljIGRhdGEgd2l0aCB6ZXJvIGZpbGxlZCAqL1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjI2OTogICAgICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMjcwLSAgICAgICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTClcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9NjIzPUFmdGVyIGFsbG9jYXRpbmcgYSBjYXJkIGluc3RhbmNlIHZpYSA6YzpmdW5jOmBzbmRfY2FyZF9uZXcoKWBcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNjMwLSAgLi4uLi5cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDo2MzE6ICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTYzMi1cbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9Njk4PWRlc3RydWN0b3IgYW5kIFBDSSBlbnRyaWVzLiBFeGFtcGxlIGNvZGUgaXMgc2hvd24gZmlyc3QsIGJlbG93Ojpcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNzQ5LVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0Ojc1MDogICAgICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNzUxLSAgICAgICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTCkge1xuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0zODIzPWNoaXAgZGF0YSBpbmRpdmlkdWFsbHk6OlxuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zODM1LSAgICAgICAgICAuLi4uXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MzgzNjogICAgICAgICAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zODM3LSAgICAgICAgICAuLi4uXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0PTc5ND1pbnQgbXlfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQtODAxLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0OjgwMjpcdG15X2ZoID0ga3phbGxvY19vYmooKm15X2ZoKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dC04MDMtXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM9NjQ9bW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGY2NF9FaGRyICpoZHIsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtOTUtXHRuc3ltcyA9IHN5bXRhYi1cdTAwM2VzaF9zaXplIC8gc2l6ZW9mKEVsZjY0X1N5bSk7XG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYzo5NjpcdGNoYWlucyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgZ290X2VudHJ5LCBuc3ltcyk7XG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy05Ny1cdGlmICghY2hhaW5zKSB7XG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYz0zOTA9cmVnaXN0ZXJfY3B1cyh2b2lkKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzk0LVx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM6Mzk1Olx0XHRzdHJ1Y3QgY3B1ICpwID0ga3phbGxvY19vYmooKnApO1xuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zOTYtXHRcdGlmICghcClcbi0tXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmM9MTEyMD1zdGF0aWMgaW50IGppdF9wcmVwYXJlX2ZpbmFsX21lbV9hbGxvYyhzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eClcbi0tXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmMtMTEzMS1cdGlmIChjdHgtXHUwMDNlbmVlZF9leHRyYV9wYXNzKSB7XG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmM6MTEzMjpcdFx0Y3R4LVx1MDAzZWppdF9kYXRhID0ga3phbGxvY19vYmooKmN0eC1cdTAwM2VqaXRfZGF0YSk7XG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmMtMTEzMy1cdFx0aWYgKCFjdHgtXHUwMDNlaml0X2RhdGEpXG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTIyMD1sb2NvbW9faW5pdF9vbmVfY2hpbGQoc3RydWN0IGxvY29tbyAqbGNoaXAsIHN0cnVjdCBsb2NvbW9fZGV2X2luZm8gKmluZm8pXG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTIyNC1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzoyMjU6XHRkZXYgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9jb21vX2Rldik7XG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjI2LVx0aWYgKCFkZXYpIHtcbi0tXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM9MzU2PV9fbG9jb21vX3Byb2JlKHN0cnVjdCBkZXZpY2UgKm1lLCBzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwgaW50IGlycSlcbi0tXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMzYyLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jOjM2MzpcdGxjaGlwID0ga3phbGxvY19vYmooc3RydWN0IGxvY29tbyk7XG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMzY0LVx0aWYgKCFsY2hpcClcbi0tXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM9NzMzPXNhMTExMV9pbml0X29uZV9jaGlsZChzdHJ1Y3Qgc2ExMTExICpzYWNoaXAsIHN0cnVjdCByZXNvdXJjZSAqcGFyZW50LFxuLS1cbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy03MzktXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM6NzQwOlx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IHNhMTExMV9kZXYpO1xuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTc0MS1cdGlmICghZGV2KSB7XG4tLVxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmM9MTc4PXN0YXRpYyBpbnQgc2Nvb3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYy0xODctXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYzoxODg6XHRkZXZwdHIgPSBremFsbG9jX29iaihzdHJ1Y3Qgc2Nvb3BfZGV2KTtcbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jLTE4OS1cdGlmICghZGV2cHRyKVxuLS1cbmFyY2gvYXJtL2tlcm5lbC9zbXAuYz0xMDg9c3RhdGljIGludCBzZWNvbmRhcnlfYmlnbGl0dGxlX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSlcbi0tXG5hcmNoL2FybS9rZXJuZWwvc21wLmMtMTEwLVx0aWYgKCFjcHVfdnRhYmxlW2NwdV0pXG5hcmNoL2FybS9rZXJuZWwvc21wLmM6MTExOlx0XHRjcHVfdnRhYmxlW2NwdV0gPSBremFsbG9jX29iaigqY3B1X3Z0YWJsZVtjcHVdKTtcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYy0xMTItXG4tLVxuYXJjaC9hcm0va2VybmVsL3Zkc28uYz0xNjk9c3RhdGljIGludCBfX2luaXQgdmRzb19pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0va2VybmVsL3Zkc28uYy0xODEtXHQvKiBBbGxvY2F0ZSB0aGUgVkRTTyB0ZXh0IHBhZ2VsaXN0ICovXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jOjE4MjpcdHZkc29fdGV4dF9wYWdlbGlzdCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB0ZXh0X3BhZ2VzKTtcbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmMtMTgzLVx0aWYgKHZkc29fdGV4dF9wYWdlbGlzdCA9PSBOVUxMKVxuLS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmM9MjYxPWludCBfX2luaXQgZGMyMTI4NV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cylcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jLTI2NC1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmM6MjY1Olx0cmVzID0ga3phbGxvY19vYmpzKHN0cnVjdCByZXNvdXJjZSwgMik7XG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jLTI2Ni1cdGlmICghcmVzKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYz02OT1zdGF0aWMgaW50IF9faW5pdCBlYnNhMjg1X2xlZHNfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmMtODYtXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jOjg3Olx0XHRsZWQgPSBremFsbG9jX29iaigqbGVkKTtcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmMtODgtXHRcdGlmICghbGVkKVxuLS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYz03MjA9c3RhdGljIGludCBfX2luaXQgbmV0d2luZGVyX2xlZHNfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYy03MjktXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmM6NzMwOlx0XHRsZWQgPSBremFsbG9jX29iaigqbGVkKTtcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYy03MzEtXHRcdGlmICghbGVkKVxuLS1cbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYz00NzM9c3RhdGljIGludCBpbXhfbW1kY19wZXJmX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdm9pZCBfX2lvbWVtICptbWRjX2Jhc2UsXG4tLVxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTQ3OS1cbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYzo0ODA6XHRwbXVfbW1kYyA9IGt6YWxsb2Nfb2JqKCpwbXVfbW1kYyk7XG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmMtNDgxLVx0aWYgKCFwbXVfbW1kYykge1xuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYz0xMTQ9c3RhdGljIHZvaWQgX19pbml0IGkyY19xdWlyayh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy0xMjktXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM6MTMwOlx0XHRuZXdfY29tcGF0ID0ga3phbGxvY19vYmooKm5ld19jb21wYXQpO1xuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTEzMS1cbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jPTE2Mz1zdGF0aWMgdm9pZCBfX2luaXQgYXJtYWRhXzM3NV8zODBfY29oZXJlbmN5X2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jLTE4Ny1cbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmM6MTg4Olx0XHRwID0ga3phbGxvY19vYmooKnApO1xuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYy0xODktXHRcdHAtXHUwMDNlbmFtZSA9IGtzdHJkdXAoXCYjMzQ7YXJtLGlvLWNvaGVyZW50XCYjMzQ7LCBHRlBfS0VSTkVMKTtcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jPTE0OD1zdGF0aWMgaW50IF9faW5pdCBtdmVidV9zb2NfZGV2aWNlKHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYy0xNTYtXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jOjE1NzpcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYy0xNTgtXHRpZiAoIXNvY19kZXZfYXR0cilcbi0tXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jPTM4MD1zdGF0aWMgdm9pZCBfX2luaXQgbXhzX21hY2hpbmVfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmMtMzg5LVxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYzozOTA6XHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmMtMzkxLVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYz0yOTQ9c3RhdGljIGludCBfX2luaXQgb21hcDFfc3lzdGVtX2RtYV9pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYy0zMjEtXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jOjMyMjpcdGQgPSBremFsbG9jX29iaigqZCk7XG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jLTMyMy1cdGlmICghZCkge1xuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYz0yOTI9c3RhdGljIHZvaWQgb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcoc3RydWN0IHJlc291cmNlICpyZXMsIGludCByZXNfY291bnQsXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jLTI5Ni1cbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYzoyOTc6XHRvbWFwX21jYnNwX2RldmljZXMgPSBremFsbG9jX29ianMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBzaXplKTtcbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYy0yOTgtXHRpZiAoIW9tYXBfbWNic3BfZGV2aWNlcykge1xuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYz01MT1zdGF0aWMgaW50IF9faW5pdCBvbWFwMV9kbV90aW1lcl9pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jLTEyNy1cbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYzoxMjg6XHRcdHBkYXRhID0ga3phbGxvY19vYmooKnBkYXRhKTtcbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYy0xMjktXHRcdGlmICghcGRhdGEpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYz0yMzA9dm9pZCBvbWFwMnh4eF9jbGt0X3Zwc19pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmMtMjM5LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmM6MjQwOlx0aHcgPSBremFsbG9jX29iaigqaHcpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmMtMjQxLVx0aWYgKCFodylcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmM9Nzg2PXZvaWQgX19pbml0IG9tYXBfc29jX2RldmljZV9pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jLTc5MC1cbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYzo3OTE6XHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYy03OTItXHRpZiAoIXNvY19kZXZfYXR0cilcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmM9MTMxPXN0YXRpYyBpbnQgb21hcF9kZXZpY2VfYnVpbGRfZnJvbV9kdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYy0xNTgtXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmM6MTU5Olx0aHdtb2RzID0ga3phbGxvY19vYmpzKHN0cnVjdCBvbWFwX2h3bW9kICosIG9oX2NudCk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMtMTYwLVx0aWYgKCFod21vZHMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYz0zMzgxPXN0YXRpYyBpbnQgb21hcF9od21vZF9hbGxvY2F0ZV9tb2R1bGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb21hcF9od21vZCAqb2gsXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzM5NC1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjMzOTU6XHRzeXNjID0ga3phbGxvY19vYmooKnN5c2MpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzM5Ni1cdGlmICghc3lzYylcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNDI0LVx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2b2gtXHUwMDNlc2xhdmVfcG9ydHMpKSB7XG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozNDI1Olx0XHRvaSA9IGt6YWxsb2Nfb2JqKCpvaSk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNDI2LVx0XHRpZiAoIW9pKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jPTM1MTM9aW50IG9tYXBfaHdtb2RfaW5pdF9tb2R1bGUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1MjctXHRpZiAoIW9oKSB7XG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozNTI4Olx0XHRvaCA9IGt6YWxsb2Nfb2JqKCpvaCk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTI5LVx0XHRpZiAoIW9oKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1MzgtXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozNTM5Olx0XHRvaC1cdTAwM2VjbGFzcyA9IGt6YWxsb2Nfb2JqKCpvaC1cdTAwM2VjbGFzcyk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTQwLVx0XHRpZiAoIW9oLVx1MDAzZWNsYXNzKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jPTM3OT1zdGF0aWMgaW50IF9faW5pdCBhbXgzX2lkbGVfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdV9ub2RlLCBpbnQgY3B1KVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYy00MTItXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmM6NDEzOlx0aWRsZV9zdGF0ZXMgPSBremFsbG9jX29ianMoKmlkbGVfc3RhdGVzLCBzdGF0ZV9jb3VudCk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmMtNDE0LVx0aWYgKCFpZGxlX3N0YXRlcylcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jPTMwPXN0YXRpYyB2b2lkIF9faW5pdCBzcl9zZXRfbnZhbHVlcyhzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgKnZvbHRfZGF0YSxcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jLTQxLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYzo0MjpcdG52YWx1ZV90YWJsZSA9IGt6YWxsb2Nfb2JqcygqbnZhbHVlX3RhYmxlLCBjb3VudCk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jLTQzLVx0aWYgKCFudmFsdWVfdGFibGUpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jPTEzOT1zdGF0aWMgaW50IF9faW5pdCBwY2llX3NldHVwKHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cylcbi0tXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtMTcxLVx0ICovXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM6MTcyOlx0cmVzID0ga3phbGxvY19vYmooc3RydWN0IHJlc291cmNlKTtcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy0xNzMtXHRpZiAoIXJlcylcbi0tXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM9NDY2PXN0YXRpYyBpbnQgX19pbml0IHBjaV9zZXR1cChzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTQ5Mi1cdCAqL1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jOjQ5MzpcdHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByZXNvdXJjZSk7XG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtNDk0LVx0aWYgKCFyZXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYz02ODk9c3RhdGljIHN0cnVjdCBleHBhbnNpb25fY2FyZCAqX19pbml0IGVjYXJkX2FsbG9jX2NhcmQoaW50IHR5cGUsIGludCBzbG90KVxuLS1cbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmMtNjk0LVxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYzo2OTU6XHRlYyA9IGt6YWxsb2Nfb2JqKGVjYXJkX3QpO1xuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYy02OTYtXHRpZiAoIWVjKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYz05Mz1pbnQgX19pbml0IHNhMTF4eF9jbGtfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTA5LVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYzoxMTA6XHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTExMS1cdGlmICghaHcpXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMzEtXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jOjEzMjpcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTMzLVx0aWYgKCFodylcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmM9MzE3PWludCBfX2luaXQgc2ExMXgwX3JlZ2lzdGVyX2ZpeGVkX3JlZ3VsYXRvcihpbnQgbixcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMtMzIzLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jOjMyNDpcdGNmZy1cdTAwM2Vpbml0X2RhdGEgPSBpZCA9IGt6YWxsb2Nfb2JqKCpjZmctXHUwMDNlaW5pdF9kYXRhKTtcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYy0zMjUtXHRpZiAoIWNmZy1cdTAwM2Vpbml0X2RhdGEpXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYz0yMjU9c3RhdGljIGludCBuZXBvbnNldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYy0yNzgtXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jOjI3OTpcdGQgPSBremFsbG9jX29iaigqZCk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jLTI4MC1cdGlmICghZCkge1xuLS1cbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jPTE0MT1zdGF0aWMgaW50IF9faW5pdCByY2FyX2dlbjJfcmVndWxhdG9yX3F1aXJrKHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmMtMTY2LVxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmM6MTY3Olx0XHRxdWlyayA9IGt6YWxsb2Nfb2JqKCpxdWlyayk7XG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYy0xNjgtXHRcdGlmICghcXVpcmspIHtcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYz0zOTM9c3RhdGljIGludCB2ZV9zcGNfcG9wdWxhdGVfb3Bwcyh1aW50MzJfdCBjbHVzdGVyKVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTM5Ny1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjM5ODpcdG9wcHMgPSBremFsbG9jX29ianMoKm9wcHMsIE1BWF9PUFBTKTtcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTM5OS1cdGlmICghb3Bwcylcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYz00NDI9aW50IF9faW5pdCB2ZV9zcGNfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2VhZGRyLCB1MzIgYTE1X2NsdXNpZCwgaW50IGlycSlcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy00NDQtXHRpbnQgcmV0O1xuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6NDQ1Olx0aW5mbyA9IGt6YWxsb2Nfb2JqKCppbmZvKTtcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTQ0Ni1cdGlmICghaW5mbylcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYz01MjM9c3RhdGljIHN0cnVjdCBjbGsgKnZlX3NwY19jbGtfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqY3B1X2Rldilcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy01MjctXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzo1Mjg6XHRzcGMgPSBremFsbG9jX29iaigqc3BjKTtcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTUyOS1cdGlmICghc3BjKVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jPTEyMz1zdGF0aWMgdm9pZCBfX2luaXQgdmVyc2F0aWxlX2R0X3BjaV9pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmMtMTQ0LVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmM6MTQ1Olx0bmV3cHJvcCA9IGt6YWxsb2Nfb2JqKCpuZXdwcm9wKTtcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jLTE0Ni1cdGlmICghbmV3cHJvcClcbi0tXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmM9MTA1PXN0YXRpYyB2b2lkIF9faW5pdCB6eW5xX2luaXRfbWFjaGluZSh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYy0xMTAtXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmM6MTExOlx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtMTEyLVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYz01MDM9c3RhdGljIF9faW5pdCBpbnQgbDJ4MF9wbXVfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmMtNTA5LVxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYzo1MTA6XHRsMngwX3BtdSA9IGt6YWxsb2Nfb2JqKCpsMngwX3BtdSk7XG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jLTUxMS1cdGlmICghbDJ4MF9wbXUpIHtcbi0tXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jPTMxNT1zdGF0aWMgaW50IF9faW5pdCBfX3VuaXBoaWVyX2NhY2hlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCxcbi0tXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jLTM0NC1cbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmM6MzQ1Olx0ZGF0YSA9IGt6YWxsb2Nfb2JqKCpkYXRhKTtcbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmMtMzQ2LVx0aWYgKCFkYXRhKVxuLS1cbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM9NTMzPXN0YXRpYyB2b2lkICpfX2RtYV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpoYW5kbGUsXG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy01NjAtXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jOjU2MTpcdGJ1ZiA9IGt6YWxsb2Nfb2JqKCpidWYsXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTU2Mi1cdFx0XHQgIGdmcCBcdTAwMjYgfihfX0dGUF9ETUEgfCBfX0dGUF9ETUEzMiB8IF9fR0ZQX0hJR0hNRU0pKTtcbi0tXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jPTE0ODc9YXJtX2lvbW11X2NyZWF0ZV9tYXBwaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBiYXNlLCB1NjQgc2l6ZSlcbi0tXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTE1MDYtXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jOjE1MDc6XHRtYXBwaW5nID0ga3phbGxvY19vYmooc3RydWN0IGRtYV9pb21tdV9tYXBwaW5nKTtcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtMTUwOC1cdGlmICghbWFwcGluZylcbi0tXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM9MzE2PWludCBfX2luaXQgYXJjaF94ZW5fdW5wb3B1bGF0ZWRfaW5pdChzdHJ1Y3QgcmVzb3VyY2UgKipyZXMpXG4tLVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM0My1cbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYzozNDQ6XHRyZWdzID0ga3phbGxvY19vYmpzKCpyZWdzLCBucl9yZWcpO1xuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM0NS1cdGlmICghcmVncykge1xuLS1cbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zODctXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM6Mzg4Olx0XHR0bXBfcmVzID0ga3phbGxvY19vYmooKnRtcF9yZXMpO1xuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM4OS1cdFx0aWYgKCF0bXBfcmVzKSB7XG4tLVxuYXJjaC9hcm0veGVuL3AybS5jPTE1MD1ib29sIF9fc2V0X3BoeXNfdG9fbWFjaGluZV9tdWx0aSh1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5hcmNoL2FybS94ZW4vcDJtLmMtMTc4LVxuYXJjaC9hcm0veGVuL3AybS5jOjE3OTpcdHAybV9lbnRyeSA9IGt6YWxsb2Nfb2JqKCpwMm1fZW50cnksIEdGUF9OT1dBSVQpO1xuYXJjaC9hcm0veGVuL3AybS5jLTE4MC1cdGlmICghcDJtX2VudHJ5KVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYz02OD1zdGF0aWMgaW50IF9faW5pdCBfX3Zkc29faW5pdChlbnVtIHZkc29fYWJpIGFiaSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMtODMtXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM6ODQ6XHR2ZHNvX3BhZ2VsaXN0ID0ga3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHZkc29faW5mb1thYmldLnZkc29fcGFnZXMpO1xuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTg1LVx0aWYgKHZkc29fcGFnZWxpc3QgPT0gTlVMTClcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz00ODA9c3RhdGljIGludCBzaGFyZV9wZm5faHlwKHU2NCBwZm4pXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtNDkyLVxuYXJjaC9hcm02NC9rdm0vbW11LmM6NDkzOlx0dGhpcyA9IGt6YWxsb2Nfb2JqKCp0aGlzKTtcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTQ5NC1cdGlmICghdGhpcykge1xuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTk4MT1pbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdHlwZSlcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMDA3LVxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTAwODpcdHBndCA9IGt6YWxsb2Nfb2JqKCpwZ3QsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMDA5LVx0aWYgKCFwZ3QpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9MTE4MD1pbnQgdG9wdXBfaHlwX21lbWNhY2hlKHN0cnVjdCBrdm1faHlwX21lbWNhY2hlICptYywgdW5zaWduZWQgbG9uZyBtaW5fcGFnZXMpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE4NS1cdGlmICghbWMtXHUwMDNlbWFwcGluZykge1xuYXJjaC9hcm02NC9rdm0vbW11LmM6MTE4NjpcdFx0bWMtXHUwMDNlbWFwcGluZyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBwa3ZtX21hcHBpbmcsXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTg3LVx0XHRcdFx0XHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9MjUxMD1pbnQgX19pbml0IGt2bV9tbXVfaW5pdCh1MzIgaHlwX3ZhX2JpdHMpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjU0My1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjI1NDQ6XHRoeXBfcGd0YWJsZSA9IGt6YWxsb2Nfb2JqKCpoeXBfcGd0YWJsZSk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNTQ1LVx0aWYgKCFoeXBfcGd0YWJsZSkge1xuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEzMjg9aW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzMzLVx0aWYgKCF2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGIpIHtcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEzMzQ6XHRcdHN0cnVjdCB2bmNyX3RsYiAqdnQgPSBremFsbG9jX29iaigqdmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiLFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMzNS1cdFx0XHRcdFx0XHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTc5Mz1pbnQga3ZtX2luaXRfbnZfc3lzcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwMi1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE4MDM6XHRrdm0tXHUwMDNlYXJjaC5zeXNyZWdfbWFza3MgPSBremFsbG9jX29iaigqKGt2bS1cdTAwM2VhcmNoLnN5c3JlZ19tYXNrcyksXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xODA0LVx0XHRcdFx0XHQgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tLVxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmM9MTE2PXN0YXRpYyBzdHJ1Y3Qga3ZtX3B0ZHVtcF9ndWVzdF9zdGF0ZSAqa3ZtX3B0ZHVtcF9wYXJzZXJfY3JlYXRlKHN0cnVjdCBrdm1fczJfbW11ICptbXUpXG4tLVxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmMtMTIxLVxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmM6MTIyOlx0c3QgPSBremFsbG9jX29iaihzdHJ1Y3Qga3ZtX3B0ZHVtcF9ndWVzdF9zdGF0ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTEyMy1cdGlmICghc3QpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz0yMDc9c3RhdGljIGludCBrdm1fdmdpY19kaXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgbnJfc3Bpcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTIxMy1cdGRpc3QtXHUwMDNlYWN0aXZlX3NwaXMgPSAoYXRvbWljX3QpQVRPTUlDX0lOSVQoMCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jOjIxNDpcdGRpc3QtXHUwMDNlc3BpcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdmdpY19pcnEsIG5yX3NwaXMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTIxNS1cdGlmICghZGlzdC1cdTAwM2VzcGlzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9MzE2PXN0YXRpYyBpbnQgdmdpY19hbGxvY2F0ZV9wcml2YXRlX2lycXNfbG9ja2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0zMzEtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jOjMzMjpcdHZnaWNfY3B1LVx1MDAzZXByaXZhdGVfaXJxcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdmdpY19pcnEsXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTMzMy1cdFx0XHRcdFx0ICAgICAgbnVtX3ByaXZhdGVfaXJxcyxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYz0xNDI9aW50IGt2bV92Z2ljX3NldHVwX2RlZmF1bHRfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTE0OC1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jOjE0OTpcdGVudHJpZXMgPSBremFsbG9jX29ianMoKmVudHJpZXMsIG5yLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmMtMTUwLVx0aWYgKCFlbnRyaWVzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz03Nj1zdGF0aWMgc3RydWN0IHZnaWNfaXJxICp2Z2ljX2FkZF9scGkoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW50aWQsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTg3LVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjg4Olx0aXJxID0ga3phbGxvY19vYmooc3RydWN0IHZnaWNfaXJxLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTg5LVx0aWYgKCFpcnEpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTk2Mj1zdGF0aWMgaW50IHZnaWNfaXRzX2FsbG9jX2NvbGxlY3Rpb24oc3RydWN0IHZnaWNfaXRzICppdHMsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTk2Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzo5Njg6XHRjb2xsZWN0aW9uID0ga3phbGxvY19vYmooKmNvbGxlY3Rpb24sIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtOTY5LVx0aWYgKCFjb2xsZWN0aW9uKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz0xMDA2PXN0YXRpYyBzdHJ1Y3QgaXRzX2l0ZSAqdmdpY19pdHNfYWxsb2NfaXRlKHN0cnVjdCBpdHNfZGV2aWNlICpkZXZpY2UsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTEwMTEtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTAxMjpcdGl0ZSA9IGt6YWxsb2Nfb2JqKCppdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTAxMy1cdGlmICghaXRlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz0xMTMzPXN0YXRpYyBzdHJ1Y3QgaXRzX2RldmljZSAqdmdpY19pdHNfYWxsb2NfZGV2aWNlKHN0cnVjdCB2Z2ljX2l0cyAqaXRzLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMTM4LVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjExMzk6XHRkZXZpY2UgPSBremFsbG9jX29iaigqZGV2aWNlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTExNDAtXHRpZiAoIWRldmljZSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTg0Nj1zdGF0aWMgaW50IHZnaWNfaXRzX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTg1My1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxODU0Olx0aXRzID0ga3phbGxvY19vYmooc3RydWN0IHZnaWNfaXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTE4NTUtXHRpZiAoIWl0cylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jPTg4Nj1zdGF0aWMgaW50IHZnaWNfdjNfYWxsb2NfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHVpbnQzMl90IGluZGV4LFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtOTMxLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYzo5MzI6XHRyZHJlZyA9IGt6YWxsb2Nfb2JqKCpyZHJlZywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtOTMzLVx0aWYgKCFyZHJlZylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYz0yNDI9aW50IHZnaWNfdjRfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmMtMjU4LVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmM6MjU5Olx0ZGlzdC1cdTAwM2VpdHNfdm0udnBlcyA9IGt6YWxsb2Nfb2JqcygqZGlzdC1cdTAwM2VpdHNfdm0udnBlcywgbnJfdmNwdXMsXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYy0yNjAtXHRcdFx0XHRcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTIwODA9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMTAxLVx0aWYgKCFqaXRfZGF0YSkge1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjEwMjpcdFx0aml0X2RhdGEgPSBremFsbG9jX29iaigqaml0X2RhdGEpO1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMy1cdFx0aWYgKCFqaXRfZGF0YSlcbi0tXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYz0xNz1zdGF0aWMgaW50IF9faW5pdCB2ZHNvX2luaXQodm9pZClcbi0tXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYy0yMi1cdHZkc29fcGFnZWxpc3QgPVxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmM6MjM6XHRcdGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX3BhZ2VzKTtcbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jLTI0LVx0aWYgKHVubGlrZWx5KHZkc29fcGFnZWxpc3QgPT0gTlVMTCkpIHtcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYz00NjY9c3RhdGljIGludCBfX2luaXQgYWRkX2xlZ2FjeV9pc2FfaW8oc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy00NzItXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYzo0NzM6XHRyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSwgR0ZQX0FUT01JQyk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy00NzQtXHRpZiAoIXJhbmdlKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmM9NDU9c3RhdGljIGludCBfX2luaXQgaW5pdF92ZHNvKHZvaWQpXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYy01NS1cdHZkc29faW5mby5jb2RlX21hcHBpbmcucGFnZXMgPVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYzo1NjpcdFx0a3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHZkc29faW5mby5zaXplIC8gUEFHRV9TSVpFKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmMtNTctXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jPTYxND1zdGF0aWMgaW50IGt2bV9laW9pbnRjX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtNjI0LVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjYyNTpcdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTYyNi1cdGlmICghcylcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYz0zOTQ9c3RhdGljIGludCBrdm1faXBpX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy00MTEtXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYzo0MTI6XHRzID0ga3phbGxvY19vYmooc3RydWN0IGxvb25nYXJjaF9pcGkpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtNDEzLVx0aWYgKCFzKVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjQ4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQ3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBHVVAgVGVzdCBEYXRhIFN0cnVjdHVyZSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIEkgc2VlIHRoZXkmIzM5O3JlIHN3YXBwaW5nIG91dCB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgdGhlIEdVUCB0ZXN0IHdpdGggYSBwZXItZmlsZSBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgYSBnb29kIGNoYW5nZSwgbWFrZXMgdGhpbmdzIGNsZWFuZXIgYW5kIHBvdGVudGlhbGx5IGFsbG93cyBmb3IgbXVsdGlwbGUgY29uY3VycmVudCB0ZXN0cywgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBnbG9iYWwgc3RhdGUuIFRoZSBrZXkgaGVyZSBpcyB0aGUgYGt6YWxsb2Nfb2JqYCBjYWxsIGluIGBndXBfdGVzdF9vcGVuYC4gVGhhdCYjMzk7cyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKWAuICBTbywgdGhhdCB6ZXJvLWluaXRpYWxpemVzIHRoZSBgZ3VwX3Rlc3RfZGF0YWAgc3RydWN0dXJlLCB3aGljaCBpcyBpbXBvcnRhbnQuIFRoaXMgZW5zdXJlcyBldmVyeXRoaW5nIHN0YXJ0cyBjbGVhbiwgd2hpY2ggYXZvaWRzIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGUgbXV0ZXggaXMgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCBgbXV0ZXhfaW5pdGAsIHdoaWNoIGlzIGNvcnJlY3QuIFRoZSBgZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhYCBhc3NpZ25tZW50IGlzIHN0YW5kYXJkIHByYWN0aWNlLCBhc3NvY2lhdGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUgd2l0aCB0aGUgZmlsZSBvcGVyYXRpb24uCgpUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludm9sdmUgbW92aW5nIHRoZSBwYWdlIGFycmF5IGFuZCBtdXRleCBmcm9tIGdsb2JhbCBzY29wZSB0byB0aGlzIHBlci1maWxlIHN0cnVjdHVyZS4gVGhlIGtleSBmdW5jdGlvbnMsIGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydGAgYW5kIGBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkYCwgbm93IHRha2UgYSBgc3RydWN0IGd1cF90ZXN0X2RhdGEgKmAgYXMgYW4gYXJndW1lbnQuICBMb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBJIGNhbiBzZWUgdGhhdCB0aGUgY29kZSBpcyBjb3JyZWN0bHkgdXBkYXRpbmcgdG8gdXNlIHRoZSBwZXItZmlsZSBkYXRhOyByZXBsYWNpbmcgYWxsIGluc3RhbmNlcyBvZiB0aGUgb2xkIGdsb2JhbCB2YXJpYWJsZSByZWZlcmVuY2VzIHRvIHRoZSBkYXRhIHN0cnVjdHVyZS4KClRoZSBwYXJ0IHRoYXQgY2F1Z2h0IG15IGF0dGVudGlvbiB3YXMgdGhlIGBjb3B5X3RvX3VzZXJgIGluIGBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkYC4gQnV0IGl0JiMzOTtzIHRyYW5zZmVycmluZyBkYXRhIHRoYXQgY2FtZSBmcm9tIHVzZXIgc3BhY2Ugb3JpZ2luYWxseS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgJiMzNDtyb3VuZC10cmlwcGluZyYjMzQ7IHVzZXIgZGF0YSBiYWNrIHRvIHVzZXIgc3BhY2UgdmlhIHRoZSBwaW5uZWQgcGFnZXMuIFRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgaW5mb3JtYXRpb24gbGVha3MsIGFzIHRoZSB1c2VyIG1lbW9yeSBpcyB0aGUgc291cmNlIG9mIHRoZSBkYXRhLCBhbmQgaXQmIzM5O3Mgc2ltcGx5IGNvcGllZCBiYWNrIHRvIHRoZSBzYW1lIGFkZHJlc3Mgc3BhY2UuICBJdCYjMzk7cyBqdXN0IHRoZSBzdG9yYWdlIGZvciB0aGF0IG1lbW9yeSAodGhlIHBhZ2UgcG9pbnRlcnMpIHRoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBhbGxvY2F0aW9ucy4gVGhlIGBwYWdlc2AgYXJyYXkgaXRzZWxmIGlzbiYjMzk7dCBkaXJlY3RseSBzaG93biBoZXJlLCBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGFyb3VuZCBgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnRgIGZvciB0aGF0LiBBaCwgaGVyZSBpdCBpczogdGhlIG1lbW9yeSBmb3IgdGhlIGBwYWdlc2AgYXJyYXkgaXMgYWxsb2NhdGVkIHdpdGggYGt2bWFsbG9jX2FycmF5YC4gVGhhdCYjMzk7cyBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBrZXJuZWwgbWVtb3J5IGFycmF5LiBJdCBtYWtlcyBzZW5zZSB0aGF0IGBrdmZyZWVgIGlzIHVzZWQgbGF0ZXIgb24gdG8gcmVsZWFzZSB0aGF0IGFsbG9jYXRpb24uCgpTbywgc3VtbWluZyB1cCwgdGhpcyBwYXRjaCBpcyBhIGNsZWFuIHJlZmFjdG9yaW5nLiBJdCBtb3ZlcyB0aGUgdGVzdCYjMzk7cyBzdGF0ZSBpbnRvIGEgcGVyLWZpbGUgc3RydWN0dXJlLCBwcm9wZXJseSBpbml0aWFsaXplcyB0aGF0IHN0cnVjdHVyZSB2aWEgYGt6YWxsb2Nfb2JqYCwgYW5kIGNvcnJlY3RseSBoYW5kbGVzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB0aGUgcm91bmQtdHJpcCBvZiB1c2VyIGRhdGEgdG8gdXNlciBzcGFjZS4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBiZWNhdXNlIG9mIHRoZSB6ZXJvaW5nIGFuZCBpbml0aWFsaXphdGlvbiwgYW5kIHRoZSBkYXRhIGJlaW5nIGNvcGllZCBpcyBvcmlnaW5hdGluZyBmcm9tIHVzZXIgc3BhY2UuIEl0JiMzOTtzIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtYWxsb2NfYXJyYXkuKnBhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZ3VwX3Rlc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzcwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEdVUCBMb25nLVRlcm0gVGVzdCBTdGFydCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbnRvIGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydGAgd2l0aGluIGBtbS9ndXBfdGVzdC5jYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgbG9uZy10ZXJtIHRlc3Qgc2VxdWVuY2UgYmVnaW5zIGZvciB0aGUgR1VQIChnZXRfdXNlcl9wYWdlcykgc3Vic3lzdGVtLiBXaGF0IGFyZSB0aGUgaW5pdGlhbCBzZXR1cCBzdGVwcz8gV2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBjb25maWd1cmVkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgdGhhdCBtaWdodCBiZSBwcm9uZSB0byBjb250ZW50aW9uIG9yIHJhY2UgY29uZGl0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mIGltbWVkaWF0ZWx5PyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZnJhbWV3b3JrIHRoaXMgdGVzdCB1dGlsaXplcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IHNldHMgdXAgdGhlIG1lbW9yeSByZWdpb25zLCBhbnkgdXNlIG9mIHNwZWNpYWxpemVkIHBhZ2Ugc3RydWN0dXJlcyBvciBtYXBwaW5ncywgYW5kIGhvdyB0aGUgdGVzdCBoYXJuZXNzZXMgdGhlIEdVUCBpbnRlcmZhY2UgdG8gc2ltdWxhdGUgcmVhbGlzdGljIG9yIHN0cmVzc2Z1bCBzY2VuYXJpb3MuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcHJvYmFibHkgdXNpbmcgYSBjb21iaW5hdGlvbiBvZiBkaXJlY3QgYW5kIGluZGlyZWN0IEdVUCBjYWxscywgcGVyaGFwcyB3aXRoIHBpbm5lZCBwYWdlcyB0byBtaW1pYyBzb21lIHJlYWwtd29ybGQgYXBwbGljYXRpb24gYmVoYXZpb3IuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZXN0YWJsaXNoIHRoZSBiYXNlbGluZSBhbmQgdGhlIHRlc3QgZW52aXJvbm1lbnQ7IHRoZW4sIGZyb20gdGhlcmUsIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9ndXBfdGVzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjIwOlx0XHRcdGlmIChkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzKVxuIDIyMTpcdFx0XHRcdHVucGluX3VzZXJfcGFnZXMoZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcyxcbiAyMjI6XHRcdFx0XHRcdFx0IGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMpO1xuIDIyMzpcdFx0XHRrdmZyZWUoZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcyk7XG4gMjI0Olx0XHRcdGRhdGEtXHUwMDNlbG9uZ3Rlcm1fcGFnZXMgPSBOVUxMO1xuIDIyNTpcdFx0XHRkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzID0gMDtcbiAyMjY6XHRcdH1cbiAyMjc6XHR9XG4gMjI4Olx0XG4gMjI5Olx0c3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEsXG4gMjMwOlx0XHRcdHVuc2lnbmVkIGxvbmcgYXJnKVxuIDIzMTpcdHtcbiAyMzI6XHRcdGxvbmcgbnJfcGFnZXMsIGN1cl9wYWdlcywgYWRkciwgcmVtYWluaW5nX3BhZ2VzO1xuIDIzMzpcdFx0aW50IGd1cF9mbGFncyA9IEZPTExfTE9OR1RFUk07XG4gMjM0Olx0XHRzdHJ1Y3QgcGluX2xvbmd0ZXJtX3Rlc3QgYXJncztcbiAyMzU6XHRcdHN0cnVjdCBwYWdlICoqcGFnZXM7XG4gMjM2Olx0XHRpbnQgcmV0ID0gMDtcbiAyMzc6XHRcdGJvb2wgZmFzdDtcbiAyMzg6XHRcbiAyMzk6XHRcdGlmIChkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzKVxuIDI0MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyNDE6XHRcbiAyNDI6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhcmdzLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihhcmdzKSkpXG4gMjQzOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDI0NDpcdFxuIDI0NTpcdFx0aWYgKGFyZ3MuZmxhZ3MgXHUwMDI2XG4gMjQ2Olx0XHQgICAgfihQSU5fTE9OR1RFUk1fVEVTVF9GTEFHX1VTRV9XUklURXxQSU5fTE9OR1RFUk1fVEVTVF9GTEFHX1VTRV9GQVNUKSlcbiAyNDc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjQ4Olx0XHRpZiAoIUlTX0FMSUdORUQoYXJncy5hZGRyIHwgYXJncy5zaXplLCBQQUdFX1NJWkUpKVxuIDI0OTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyNTA6XHRcdGlmIChhcmdzLnNpemUgXHUwMDNlIExPTkdfTUFYKVxuIDI1MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyNTI6XHRcdG5yX3BhZ2VzID0gYXJncy5zaXplIC8gUEFHRV9TSVpFO1xuIDI1MzpcdFx0aWYgKCFucl9wYWdlcylcbiAyNTQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjU1Olx0XG4gMjU2Olx0XHRwYWdlcyA9IGt2Y2FsbG9jKG5yX3BhZ2VzLCBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7XG4gMjU3Olx0XHRpZiAoIXBhZ2VzKVxuIDI1ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyNTk6XHRcbiAyNjA6XHRcdGlmIChhcmdzLmZsYWdzIFx1MDAyNiBQSU5fTE9OR1RFUk1fVEVTVF9GTEFHX1VTRV9XUklURSlcbiAyNjE6XHRcdFx0Z3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XG4gMjYyOlx0XHRmYXN0ID0gISEoYXJncy5mbGFncyBcdTAwMjYgUElOX0xPTkdURVJNX1RFU1RfRkxBR19VU0VfRkFTVCk7XG4gMjYzOlx0XG4gMjY0Olx0XHRpZiAoIWZhc3QgXHUwMDI2XHUwMDI2IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGN1cnJlbnQtXHUwMDNlbW0pKSB7XG4gMjY1Olx0XHRcdGt2ZnJlZShwYWdlcyk7XG4gMjY2Olx0XHRcdHJldHVybiAtRUlOVFI7XG4gMjY3Olx0XHR9XG4gMjY4Olx0XG4gMjY5Olx0XHRkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzID0gcGFnZXM7XG4gMjcwOlx0XHRkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzID0gMDtcbiAyNzE6XHRcbiAyNzI6XHRcdHdoaWxlIChucl9wYWdlcyAtIGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMpIHtcbiAyNzM6XHRcdFx0cmVtYWluaW5nX3BhZ2VzID0gbnJfcGFnZXMgLSBkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzO1xuIDI3NDpcdFx0XHRhZGRyID0gYXJncy5hZGRyICYjNDM7IGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgKiBQQUdFX1NJWkU7XG4gMjc1Olx0XG4gMjc2Olx0XHRcdGlmIChmYXN0KVxuIDI3NzpcdFx0XHRcdGN1cl9wYWdlcyA9IHBpbl91c2VyX3BhZ2VzX2Zhc3QoYWRkciwgcmVtYWluaW5nX3BhZ2VzLFxuIDI3ODpcdFx0XHRcdFx0XHRcdFx0Z3VwX2ZsYWdzLCBwYWdlcyk7XG4gMjc5Olx0XHRcdGVsc2VcbiAyODA6XHRcdFx0XHRjdXJfcGFnZXMgPSBwaW5fdXNlcl9wYWdlcyhhZGRyLCByZW1haW5pbmdfcGFnZXMsXG4gMjgxOlx0XHRcdFx0XHRcdFx0ICAgZ3VwX2ZsYWdzLCBwYWdlcyk7XG4gMjgyOlx0XHRcdGlmIChjdXJfcGFnZXMgXHUwMDNjIDApIHtcbiAyODM6XHRcdFx0XHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpO1xuIDI4NDpcdFx0XHRcdHJldCA9IGN1cl9wYWdlcztcbiAyODU6XHRcdFx0XHRicmVhaztcbiAyODY6XHRcdFx0fVxuIDI4NzpcdFx0XHRkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzICYjNDM7PSBjdXJfcGFnZXM7XG4gMjg4Olx0XHRcdHBhZ2VzICYjNDM7PSBjdXJfcGFnZXM7XG4gMjg5Olx0XHR9XG4gMjkwOlx0XG4gMjkxOlx0XHRpZiAoIWZhc3QpXG4gMjkyOlx0XHRcdG1tYXBfcmVhZF91bmxvY2soY3VycmVudC1cdTAwM2VtbSk7XG4gMjkzOlx0XHRyZXR1cm4gcmV0O1xuIDI5NDpcdH1cbiAyOTU6XHRcbiAyOTY6XHRzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhLFxuIDI5NzpcdFx0XHR1bnNpZ25lZCBsb25nIGFyZylcbiAyOTg6XHR7XG4gMjk5Olx0XHRfX3U2NCB1c2VyX2FkZHI7XG4gMzAwOlx0XHR1bnNpZ25lZCBsb25nIGk7XG4gMzAxOlx0XG4gMzAyOlx0XHRpZiAoIWRhdGEtXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpXG4gMzAzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMwNDpcdFxuIDMwNTpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnVzZXJfYWRkciwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YodXNlcl9hZGRyKSkpXG4gMzA2Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDMwNzpcdFxuIDMwODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGF0YS1cdTAwM2Vsb25ndGVybV9ucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbiAzMDk6XHRcdFx0dm9pZCAqYWRkciA9IGttYXBfbG9jYWxfcGFnZShkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzW2ldKTtcbiAzMTA6XHRcdFx0dW5zaWduZWQgbG9uZyByZXQ7XG4gMzExOlx0XG4gMzEyOlx0XHRcdHJldCA9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyl1c2VyX2FkZHIsIGFkZHIsXG4gMzEzOlx0XHRcdFx0XHQgICBQQUdFX1NJWkUpO1xuIDMxNDpcdFx0XHRrdW5tYXBfbG9jYWwoYWRkcik7XG4gMzE1Olx0XHRcdGlmIChyZXQpXG4gMzE2Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMzE3Olx0XHRcdHVzZXJfYWRkciAmIzQzOz0gUEFHRV9TSVpFO1xuIDMxODpcdFx0fVxuIDMxOTpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTQ5CgkJCQkJCQlvdXRwdXQ6IDIxNwoJCQkJCQkJdGhvdWdodHM6IDQwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIGFsbG9jYXRpb24gb2YgdGhlIGBwYWdlc2AgYXJyYXkgdXNpbmcgYGt2Y2FsbG9jYCBhbmQgdGhlIGBzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YWAgd2l0aCBga3phbGxvY19vYmpgLCB3aXRoIHRoZWlyIHplcm8taW5pdGlhbGl6YXRpb24sIGFyZSBnb29kIHNpZ25zLiBJdCBtZWFucyB3ZSYjMzk7cmUgc3RhcnRpbmcgY2xlYW4sIHdoaWNoIGhlbHBzIG1pdGlnYXRlIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gSSBjYW4gc2VlIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgaW4gdGhhdCBhcmVhLgoKVGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgZm9jdXNlZCBvbiBzdHJ1Y3R1cmFsIGNoYW5nZXMg4oCTIHNwZWNpZmljYWxseSwgbW92aW5nIGdsb2JhbCBzdGF0ZSB0byBhIHBlci1maWxlIGJhc2lzLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSByZWZhY3RvcmluZyBhcHByb2FjaCwgYnV0IGl0IGNhbiBzb21ldGltZXMgaW50cm9kdWNlIHN1YnRsZSBidWdzLiBIb3dldmVyLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlLCBhbnkgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlIGNoYW5nZSB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgZWl0aGVyIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgbWVtb3J5IGxlYWtzLgoKR2l2ZW4gdGhhdCB0aGVzZSBraW5kcyBvZiBidWdzIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGxlYWsgZGV0ZWN0b3JzLCBJIGRvbiYjMzk7dCBzZWUgYSBzdHJvbmcganVzdGlmaWNhdGlvbiBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGF0IHRoaXMgcG9pbnQuIEkmIzM5O20gcmVhc29uYWJseSBjb25maWRlbnQgdGhlIGV4aXN0aW5nIHRvb2xzIHdpbGwgY2F0Y2ggYW55IGlzc3Vlcy4KCkkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBndXBfdGVzdF9vcGVuYCBhbmQgYGd1cF90ZXN0X3JlbGVhc2VgIGZ1bmN0aW9ucyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG1pc3NlZCBpbml0aWFsaXphdGlvbnMgb3IgaW1wcm9wZXIgY2xlYW51cC4gSG1tLCBsZXQmIzM5O3Mgc2VlLi4uCgpZZXAsIGBndXBfdGVzdF9vcGVuYCBhbGxvY2F0ZXMgdGhlIGBkYXRhYCBzdHJ1Y3Qgd2l0aCBga3phbGxvY19vYmpgIGFuZCBpbml0aWFsaXplcyB0aGUgbXV0ZXgsIGFzc2lnbnMgYGRhdGFgIHRvIHRoZSBmaWxlJiMzOTtzIHByaXZhdGUgZGF0YSBmaWVsZC4gVGhlIGBndXBfdGVzdF9yZWxlYXNlYCBmdW5jdGlvbiBwcm9wZXJseSBjYWxscyB0aGUgYHBpbl9sb25ndGVybV90ZXN0X3N0b3BgLCBkZXN0cm95cyB0aGUgbXV0ZXgsIGFuZCBmcmVlcyB0aGUgZGF0YSBzdHJ1Y3R1cmUsIGFuZCBudWxscyB0aGUgcHJpdmF0ZSBkYXRhIGZpZWxkLiBFdmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseSBhbmQgZGVhbGxvY2F0ZWQgYXBwcm9wcmlhdGVseS4KCkFscmlnaHQsIGFmdGVyIHRoaXMgcXVpY2sgc2NhbiwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgbm8gS01TQU4gaXMgbmVlZGVkLiBUaGUgY29kZSBsb29rcyBzb3VuZCBhbmQgd2VsbC1tYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBwaW5fbG9uZ3Rlcm1fdGVzdGAgaW4gYG1tL2d1cF90ZXN0LmNgIHRvIHVzZSBhIHBlci1maWxlIGRhdGEgc3RydWN0dXJlIChgc3RydWN0IGd1cF90ZXN0X2RhdGFgKSBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMsIGFsbG93aW5nIGNvbmN1cnJlbnQgdXNlcnMgb2YgdGhlIGd1cF90ZXN0IGlvY3RsLiBUaGUgbmV3IHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyBhbGwgZmllbGRzLiBUaGUgYXJyYXkgb2YgcGFnZSBwb2ludGVycyBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt2Y2FsbG9jYCwgd2hpY2ggYWxzbyB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkuIFRoZSBvbmx5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIHBpbm5lZCB1c2VyIHBhZ2VzLCB3aGljaCBpcyBpZGVudGljYWwgdG8gdGhlIHByZS1wYXRjaCBiZWhhdmlvciBhbmQgZG9lcyBub3QgbGVhayBrZXJuZWwgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBwaW5fbG9uZ3Rlcm1fdGVzdGAgaW4gYG1tL2d1cF90ZXN0LmNgIHRvIHVzZSBhIHBlci1maWxlIGRhdGEgc3RydWN0dXJlIChgc3RydWN0IGd1cF90ZXN0X2RhdGFgKSBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMsIGFsbG93aW5nIGNvbmN1cnJlbnQgdXNlcnMgb2YgdGhlIGd1cF90ZXN0IGlvY3RsLiBUaGUgbmV3IHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyBhbGwgZmllbGRzLiBUaGUgYXJyYXkgb2YgcGFnZSBwb2ludGVycyBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt2Y2FsbG9jYCwgd2hpY2ggYWxzbyB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkuIFRoZSBvbmx5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIHBpbm5lZCB1c2VyIHBhZ2VzLCB3aGljaCBpcyBpZGVudGljYWwgdG8gdGhlIHByZS1wYXRjaCBiZWhhdmlvciBhbmQgZG9lcyBub3QgbGVhayBrZXJuZWwgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjIxOjUwLjY5MjE4NTU4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MTU2NjQ3MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdVUF9URVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3VwX3Rlc3Rfb3BlblwiLFxuICAgIFwiZ3VwX3Rlc3RfcmVsZWFzZVwiLFxuICAgIFwiZ3VwX3Rlc3RfaW9jdGxcIixcbiAgICBcInBpbl9sb25ndGVybV90ZXN0X2lvY3RsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBwaW5fbG9uZ3Rlcm1fdGVzdGAgaW4gYG1tL2d1cF90ZXN0LmNgIHRvIHVzZSBhIHBlci1maWxlIGRhdGEgc3RydWN0dXJlIChgc3RydWN0IGd1cF90ZXN0X2RhdGFgKSBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMsIGFsbG93aW5nIGNvbmN1cnJlbnQgdXNlcnMgb2YgdGhlIGd1cF90ZXN0IGlvY3RsLiBUaGUgbmV3IHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyBhbGwgZmllbGRzLiBUaGUgYXJyYXkgb2YgcGFnZSBwb2ludGVycyBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt2Y2FsbG9jYCwgd2hpY2ggYWxzbyB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkuIFRoZSBvbmx5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIHBpbm5lZCB1c2VyIHBhZ2VzLCB3aGljaCBpcyBpZGVudGljYWwgdG8gdGhlIHByZS1wYXRjaCBiZWhhdmlvciBhbmQgZG9lcyBub3QgbGVhayBrZXJuZWwgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGd1cF90ZXN0IGRlYnVnZnMgaW50ZXJmYWNlIHRvIHVzZSBwZXItZmlsZSBkZXNjcmlwdG9yIHN0YXRlIGluc3RlYWQgb2YgZ2xvYmFsIHN0YXRlIGZvciB0aGUgUElOX0xPTkdURVJNX1RFU1RfKiBpb2N0bHMsIGZpeGluZyBjb25jdXJyZW5jeSBpc3N1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBhIHRlc3QgbW9kdWxlIHRoYXQgZXhwb3NlcyBrZXJuZWwgQVBJcyB0byB1c2Vyc3BhY2UsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBjb25jdXJyZW5jeSBmaXggaXMgY29ycmVjdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgbmV3IGlzc3VlcyBsaWtlIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6MjE6NTAuNjkyMTkyODk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcyMjgyNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiNmFmNjc5NWRhODkxNjRiYjkxZjJiYTliYTYzOGVkNGMzZjc1NjJhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDEwIDEyOjIxOjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2d1cF90ZXN0LmMgYi9tbS9ndXBfdGVzdC5jXFxuaW5kZXggZWI0YzljZGExNmVkOC4uNDRjMWNkZmI5YzM3MSAxMDA2NDRcXG4tLS0gYS9tbS9ndXBfdGVzdC5jXFxuKysrIGIvbW0vZ3VwX3Rlc3QuY1xcbkBAIC04LDYgKzgsMTIgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hpZ2htZW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImd1cF90ZXN0LmhcXFwiXFxuIFxcbitzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSB7XFxuK1xcdHN0cnVjdCBtdXRleCBsb25ndGVybV9tdXRleDtcXG4rXFx0c3RydWN0IHBhZ2UgKipsb25ndGVybV9wYWdlcztcXG4rXFx0dW5zaWduZWQgbG9uZyBsb25ndGVybV9ucl9wYWdlcztcXG4rfTtcXG4rXFxuIHN0YXRpYyB2b2lkIHB1dF9iYWNrX3BhZ2VzKHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuIFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHVuc2lnbmVkIGludCBndXBfdGVzdF9mbGFncylcXG4ge1xcbkBAIC0yMDgsMjMgKzIxNCwyMCBAQCBzdGF0aWMgaW50IF9fZ3VwX3Rlc3RfaW9jdGwodW5zaWduZWQgaW50IGNtZCxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIERFRklORV9NVVRFWChwaW5fbG9uZ3Rlcm1fdGVzdF9tdXRleCk7XFxuLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKnBpbl9sb25ndGVybV90ZXN0X3BhZ2VzO1xcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcztcXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKHZvaWQpXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhKVxcbiB7XFxuLVxcdGlmIChwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcykge1xcbi1cXHRcXHRpZiAocGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMpXFxuLVxcdFxcdFxcdHVucGluX3VzZXJfcGFnZXMocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMsXFxuLVxcdFxcdFxcdFxcdFxcdCBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyk7XFxuLVxcdFxcdGt2ZnJlZShwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcyk7XFxuLVxcdFxcdHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzID0gTlVMTDtcXG4tXFx0XFx0cGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMgPSAwO1xcbitcXHRpZiAoZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpIHtcXG4rXFx0XFx0aWYgKGRhdGEtXFx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzKVxcbitcXHRcXHRcXHR1bnBpbl91c2VyX3BhZ2VzKGRhdGEtXFx1MDAzZWxvbmd0ZXJtX3BhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHQgZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMpO1xcbitcXHRcXHRrdmZyZWUoZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpO1xcbitcXHRcXHRkYXRhLVxcdTAwM2Vsb25ndGVybV9wYWdlcyA9IE5VTEw7XFxuK1xcdFxcdGRhdGEtXFx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzID0gMDtcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydCh1bnNpZ25lZCBsb25nIGFyZylcXG4rc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbiB7XFxuIFxcdGxvbmcgbnJfcGFnZXMsIGN1cl9wYWdlcywgYWRkciwgcmVtYWluaW5nX3BhZ2VzO1xcbiBcXHRpbnQgZ3VwX2ZsYWdzID0gRk9MTF9MT05HVEVSTTtcXG5AQCAtMjMzLDcgKzIzNiw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFx0Ym9vbCBmYXN0O1xcbiBcXG4tXFx0aWYgKHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzKVxcbitcXHRpZiAoZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZhcmdzLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihhcmdzKSkpXFxuQEAgLTI2MywxMiArMjY2LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiBcXHR9XFxuIFxcbi1cXHRwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcyA9IHBhZ2VzO1xcbi1cXHRwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyA9IDA7XFxuK1xcdGRhdGEtXFx1MDAzZWxvbmd0ZXJtX3BhZ2VzID0gcGFnZXM7XFxuK1xcdGRhdGEtXFx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzID0gMDtcXG4gXFxuLVxcdHdoaWxlIChucl9wYWdlcyAtIHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzKSB7XFxuLVxcdFxcdHJlbWFpbmluZ19wYWdlcyA9IG5yX3BhZ2VzIC0gcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXM7XFxuLVxcdFxcdGFkZHIgPSBhcmdzLmFkZHIgKyBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyAqIFBBR0VfU0laRTtcXG4rXFx0d2hpbGUgKG5yX3BhZ2VzIC0gZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMpIHtcXG4rXFx0XFx0cmVtYWluaW5nX3BhZ2VzID0gbnJfcGFnZXMgLSBkYXRhLVxcdTAwM2Vsb25ndGVybV9ucl9wYWdlcztcXG4rXFx0XFx0YWRkciA9IGFyZ3MuYWRkciArIGRhdGEtXFx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzICogUEFHRV9TSVpFO1xcbiBcXG4gXFx0XFx0aWYgKGZhc3QpXFxuIFxcdFxcdFxcdGN1cl9wYWdlcyA9IHBpbl91c2VyX3BhZ2VzX2Zhc3QoYWRkciwgcmVtYWluaW5nX3BhZ2VzLFxcbkBAIC0yNzcsMTEgKzI4MCwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydCh1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0XFx0XFx0Y3VyX3BhZ2VzID0gcGluX3VzZXJfcGFnZXMoYWRkciwgcmVtYWluaW5nX3BhZ2VzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBndXBfZmxhZ3MsIHBhZ2VzKTtcXG4gXFx0XFx0aWYgKGN1cl9wYWdlcyBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcCgpO1xcbitcXHRcXHRcXHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpO1xcbiBcXHRcXHRcXHRyZXQgPSBjdXJfcGFnZXM7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzICs9IGN1cl9wYWdlcztcXG4rXFx0XFx0ZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgKz0gY3VyX3BhZ2VzO1xcbiBcXHRcXHRwYWdlcyArPSBjdXJfcGFnZXM7XFxuIFxcdH1cXG4gXFxuQEAgLTI5MCwxOSArMjkzLDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHVuc2lnbmVkIGxvbmcgYXJnKVxcbitzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbiBcXHRfX3U2NCB1c2VyX2FkZHI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaTtcXG4gXFxuLVxcdGlmICghcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpXFxuK1xcdGlmICghZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZ1c2VyX2FkZHIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKHVzZXJfYWRkcikpKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlczsgaSsrKSB7XFxuLVxcdFxcdHZvaWQgKmFkZHIgPSBrbWFwX2xvY2FsX3BhZ2UocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXNbaV0pO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXM7IGkrKykge1xcbitcXHRcXHR2b2lkICphZGRyID0ga21hcF9sb2NhbF9wYWdlKGRhdGEtXFx1MDAzZWxvbmd0ZXJtX3BhZ2VzW2ldKTtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyByZXQ7XFxuIFxcbiBcXHRcXHRyZXQgPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpdXNlcl9hZGRyLCBhZGRyLFxcbkBAIC0zMTgsMjUgKzMyMiwyNiBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBzdGF0aWMgbG9uZyBwaW5fbG9uZ3Rlcm1fdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsXFxuIFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbitcXHRzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSA9IGZpbGVwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdGludCByZXQgPSAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKG11dGV4X2xvY2tfa2lsbGFibGUoXFx1MDAyNnBpbl9sb25ndGVybV90ZXN0X211dGV4KSlcXG4rXFx0aWYgKG11dGV4X2xvY2tfa2lsbGFibGUoXFx1MDAyNmRhdGEtXFx1MDAzZWxvbmd0ZXJtX211dGV4KSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4gXFxuIFxcdHN3aXRjaCAoY21kKSB7XFxuIFxcdGNhc2UgUElOX0xPTkdURVJNX1RFU1RfU1RBUlQ6XFxuLVxcdFxcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KGFyZyk7XFxuK1xcdFxcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KGRhdGEsIGFyZyk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIFBJTl9MT05HVEVSTV9URVNUX1NUT1A6XFxuLVxcdFxcdHBpbl9sb25ndGVybV90ZXN0X3N0b3AoKTtcXG4rXFx0XFx0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChkYXRhKTtcXG4gXFx0XFx0cmV0ID0gMDtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgUElOX0xPTkdURVJNX1RFU1RfUkVBRDpcXG4tXFx0XFx0cmV0ID0gcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZChhcmcpO1xcbitcXHRcXHRyZXQgPSBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKGRhdGEsIGFyZyk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnBpbl9sb25ndGVybV90ZXN0X211dGV4KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYXRhLVxcdTAwM2Vsb25ndGVybV9tdXRleCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTM3NSwxNSArMzgwLDQwIEBAIHN0YXRpYyBsb25nIGd1cF90ZXN0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZ3VwX3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XFxuK1xcdGlmICghZGF0YSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXQgPSBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRrZnJlZShkYXRhKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fbXV0ZXgpO1xcbitcXHRmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBkYXRhO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBndXBfdGVzdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiB7XFxuLVxcdHBpbl9sb25ndGVybV90ZXN0X3N0b3AoKTtcXG4rXFx0c3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcbitcXHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpO1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZkYXRhLVxcdTAwM2Vsb25ndGVybV9tdXRleCk7XFxuK1xcdGtmcmVlKGRhdGEpO1xcbitcXHRmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBOVUxMO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGd1cF90ZXN0X2ZvcHMgPSB7XFxuLVxcdC5vcGVuID0gbm9uc2Vla2FibGVfb3BlbixcXG4rXFx0Lm9wZW4gPSBndXBfdGVzdF9vcGVuLFxcbiBcXHQudW5sb2NrZWRfaW9jdGwgPSBndXBfdGVzdF9pb2N0bCxcXG4gXFx0LmNvbXBhdF9pb2N0bCA9IGNvbXBhdF9wdHJfaW9jdGwsXFxuIFxcdC5yZWxlYXNlID0gZ3VwX3Rlc3RfcmVsZWFzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6MjE6NTEuMTUwMjkwMzI2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mjk1NzkxMjE2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiR1VQX1RFU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJndXBfdGVzdF9vcGVuXCIsXG4gICAgXCJndXBfdGVzdF9yZWxlYXNlXCIsXG4gICAgXCJndXBfdGVzdF9pb2N0bFwiLFxuICAgIFwicGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZ3VwX3Rlc3QgZGVidWdmcyBpbnRlcmZhY2UgdG8gdXNlIHBlci1maWxlIGRlc2NyaXB0b3Igc3RhdGUgaW5zdGVhZCBvZiBnbG9iYWwgc3RhdGUgZm9yIHRoZSBQSU5fTE9OR1RFUk1fVEVTVF8qIGlvY3RscywgZml4aW5nIGNvbmN1cnJlbmN5IGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGEgdGVzdCBtb2R1bGUgdGhhdCBleHBvc2VzIGtlcm5lbCBBUElzIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIGNvbmN1cnJlbmN5IGZpeCBpcyBjb3JyZWN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSBuZXcgaXNzdWVzIGxpa2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNmFmNjc5NWRhODkxNjRiYjkxZjJiYTliYTYzOGVkNGMzZjc1NjJhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTI6MjE6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9ndXBfdGVzdC5jIGIvbW0vZ3VwX3Rlc3QuY1xuaW5kZXggZWI0YzljZGExNmVkOC4uNDRjMWNkZmI5YzM3MSAxMDA2NDRcbi0tLSBhL21tL2d1cF90ZXN0LmNcbisrKyBiL21tL2d1cF90ZXN0LmNcbkBAIC04LDYgKzgsMTIgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9oaWdobWVtLmhcdTAwM2VcbiAjaW5jbHVkZSBcImd1cF90ZXN0LmhcIlxuIFxuK3N0cnVjdCBndXBfdGVzdF9kYXRhIHtcbitcdHN0cnVjdCBtdXRleCBsb25ndGVybV9tdXRleDtcbitcdHN0cnVjdCBwYWdlICoqbG9uZ3Rlcm1fcGFnZXM7XG4rXHR1bnNpZ25lZCBsb25nIGxvbmd0ZXJtX25yX3BhZ2VzO1xuK307XG4rXG4gc3RhdGljIHZvaWQgcHV0X2JhY2tfcGFnZXModW5zaWduZWQgaW50IGNtZCwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbiBcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCB1bnNpZ25lZCBpbnQgZ3VwX3Rlc3RfZmxhZ3MpXG4ge1xuQEAgLTIwOCwyMyArMjE0LDIwIEBAIHN0YXRpYyBpbnQgX19ndXBfdGVzdF9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIERFRklORV9NVVRFWChwaW5fbG9uZ3Rlcm1fdGVzdF9tdXRleCk7XG4tc3RhdGljIHN0cnVjdCBwYWdlICoqcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXM7XG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXM7XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHBpbl9sb25ndGVybV90ZXN0X3N0b3Aodm9pZClcbitzdGF0aWMgaW5saW5lIHZvaWQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSlcbiB7XG4tXHRpZiAocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpIHtcbi1cdFx0aWYgKHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzKVxuLVx0XHRcdHVucGluX3VzZXJfcGFnZXMocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMsXG4tXHRcdFx0XHRcdCBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyk7XG4tXHRcdGt2ZnJlZShwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcyk7XG4tXHRcdHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzID0gTlVMTDtcbi1cdFx0cGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMgPSAwO1xuK1x0aWYgKGRhdGEtXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpIHtcbitcdFx0aWYgKGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMpXG4rXHRcdFx0dW5waW5fdXNlcl9wYWdlcyhkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzLFxuK1x0XHRcdFx0XHQgZGF0YS1cdTAwM2Vsb25ndGVybV9ucl9wYWdlcyk7XG4rXHRcdGt2ZnJlZShkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzKTtcbitcdFx0ZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcyA9IE5VTEw7XG4rXHRcdGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgPSAwO1xuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydCh1bnNpZ25lZCBsb25nIGFyZylcbitzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydChzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSxcbitcdFx0dW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuIFx0bG9uZyBucl9wYWdlcywgY3VyX3BhZ2VzLCBhZGRyLCByZW1haW5pbmdfcGFnZXM7XG4gXHRpbnQgZ3VwX2ZsYWdzID0gRk9MTF9MT05HVEVSTTtcbkBAIC0yMzMsNyArMjM2LDcgQEAgc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpXG4gXHRpbnQgcmV0ID0gMDtcbiBcdGJvb2wgZmFzdDtcbiBcbi1cdGlmIChwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcylcbitcdGlmIChkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhcmdzLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihhcmdzKSkpXG5AQCAtMjYzLDEyICsyNjYsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHJldHVybiAtRUlOVFI7XG4gXHR9XG4gXG4tXHRwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcyA9IHBhZ2VzO1xuLVx0cGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMgPSAwO1xuK1x0ZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcyA9IHBhZ2VzO1xuK1x0ZGF0YS1cdTAwM2Vsb25ndGVybV9ucl9wYWdlcyA9IDA7XG4gXG4tXHR3aGlsZSAobnJfcGFnZXMgLSBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcykge1xuLVx0XHRyZW1haW5pbmdfcGFnZXMgPSBucl9wYWdlcyAtIHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzO1xuLVx0XHRhZGRyID0gYXJncy5hZGRyICsgcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMgKiBQQUdFX1NJWkU7XG4rXHR3aGlsZSAobnJfcGFnZXMgLSBkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzKSB7XG4rXHRcdHJlbWFpbmluZ19wYWdlcyA9IG5yX3BhZ2VzIC0gZGF0YS1cdTAwM2Vsb25ndGVybV9ucl9wYWdlcztcbitcdFx0YWRkciA9IGFyZ3MuYWRkciArIGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgKiBQQUdFX1NJWkU7XG4gXG4gXHRcdGlmIChmYXN0KVxuIFx0XHRcdGN1cl9wYWdlcyA9IHBpbl91c2VyX3BhZ2VzX2Zhc3QoYWRkciwgcmVtYWluaW5nX3BhZ2VzLFxuQEAgLTI3NywxMSArMjgwLDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRcdGN1cl9wYWdlcyA9IHBpbl91c2VyX3BhZ2VzKGFkZHIsIHJlbWFpbmluZ19wYWdlcyxcbiBcdFx0XHRcdFx0XHQgICBndXBfZmxhZ3MsIHBhZ2VzKTtcbiBcdFx0aWYgKGN1cl9wYWdlcyBcdTAwM2MgMCkge1xuLVx0XHRcdHBpbl9sb25ndGVybV90ZXN0X3N0b3AoKTtcbitcdFx0XHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpO1xuIFx0XHRcdHJldCA9IGN1cl9wYWdlcztcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuLVx0XHRwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyArPSBjdXJfcGFnZXM7XG4rXHRcdGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgKz0gY3VyX3BhZ2VzO1xuIFx0XHRwYWdlcyArPSBjdXJfcGFnZXM7XG4gXHR9XG4gXG5AQCAtMjkwLDE5ICsyOTMsMjAgQEAgc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHVuc2lnbmVkIGxvbmcgYXJnKVxuK3N0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbiBcdF9fdTY0IHVzZXJfYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbi1cdGlmICghcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpXG4rXHRpZiAoIWRhdGEtXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnVzZXJfYWRkciwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YodXNlcl9hZGRyKSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXM7IGkrKykge1xuLVx0XHR2b2lkICphZGRyID0ga21hcF9sb2NhbF9wYWdlKHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzW2ldKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXM7IGkrKykge1xuK1x0XHR2b2lkICphZGRyID0ga21hcF9sb2NhbF9wYWdlKGRhdGEtXHUwMDNlbG9uZ3Rlcm1fcGFnZXNbaV0pO1xuIFx0XHR1bnNpZ25lZCBsb25nIHJldDtcbiBcbiBcdFx0cmV0ID0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXVzZXJfYWRkciwgYWRkcixcbkBAIC0zMTgsMjUgKzMyMiwyNiBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHVuc2lnbmVkIGxvbmcgYXJnKVxuIHN0YXRpYyBsb25nIHBpbl9sb25ndGVybV90ZXN0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCxcbiBcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4rXHRzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSA9IGZpbGVwLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdGludCByZXQgPSAtRUlOVkFMO1xuIFxuLVx0aWYgKG11dGV4X2xvY2tfa2lsbGFibGUoXHUwMDI2cGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpKVxuK1x0aWYgKG11dGV4X2xvY2tfa2lsbGFibGUoXHUwMDI2ZGF0YS1cdTAwM2Vsb25ndGVybV9tdXRleCkpXG4gXHRcdHJldHVybiAtRUlOVFI7XG4gXG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBQSU5fTE9OR1RFUk1fVEVTVF9TVEFSVDpcbi1cdFx0cmV0ID0gcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoYXJnKTtcbitcdFx0cmV0ID0gcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoZGF0YSwgYXJnKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFBJTl9MT05HVEVSTV9URVNUX1NUT1A6XG4tXHRcdHBpbl9sb25ndGVybV90ZXN0X3N0b3AoKTtcbitcdFx0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChkYXRhKTtcbiBcdFx0cmV0ID0gMDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFBJTl9MT05HVEVSTV9URVNUX1JFQUQ6XG4tXHRcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoYXJnKTtcbitcdFx0cmV0ID0gcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZChkYXRhLCBhcmcpO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwaW5fbG9uZ3Rlcm1fdGVzdF9tdXRleCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZGF0YS1cdTAwM2Vsb25ndGVybV9tdXRleCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0zNzUsMTUgKzM4MCw0MCBAQCBzdGF0aWMgbG9uZyBndXBfdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBndXBfdGVzdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhO1xuK1x0aW50IHJldDtcbitcbitcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XG4rXHRpZiAoIWRhdGEpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0ID0gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGtmcmVlKGRhdGEpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZkYXRhLVx1MDAzZWxvbmd0ZXJtX211dGV4KTtcbitcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gZGF0YTtcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IGd1cF90ZXN0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuLVx0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcCgpO1xuK1x0c3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcbitcdHBpbl9sb25ndGVybV90ZXN0X3N0b3AoZGF0YSk7XG4rXHRtdXRleF9kZXN0cm95KFx1MDAyNmRhdGEtXHUwMDNlbG9uZ3Rlcm1fbXV0ZXgpO1xuK1x0a2ZyZWUoZGF0YSk7XG4rXHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IE5VTEw7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3VwX3Rlc3RfZm9wcyA9IHtcbi1cdC5vcGVuID0gbm9uc2Vla2FibGVfb3BlbixcbitcdC5vcGVuID0gZ3VwX3Rlc3Rfb3BlbixcbiBcdC51bmxvY2tlZF9pb2N0bCA9IGd1cF90ZXN0X2lvY3RsLFxuIFx0LmNvbXBhdF9pb2N0bCA9IGNvbXBhdF9wdHJfaW9jdGwsXG4gXHQucmVsZWFzZSA9IGd1cF90ZXN0X3JlbGVhc2UsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMjoyMTo1MS4xNTAyOTE1NTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Njc1NzM5NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR1VQIFRlc3QgTW9kdWxlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vZ3VwX3Rlc3QuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHNoaWZ0aW5nIHNvbWUgZ2xvYmFsIHN0YXRlIHZhcmlhYmxlcywgYHBpbl9sb25ndGVybV90ZXN0X211dGV4YCwgYHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzYCwgYW5kIGBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlc2AsIGludG8gYSBwZXItZmlsZSBkZXNjcmlwdG9yIHN0cnVjdHVyZSwgYHN0cnVjdCBndXBfdGVzdF9kYXRhYCwgd2hpY2ggd2lsbCBub3cgcmVzaWRlIGluIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nIHRvIGVuYWJsZSBjb25jdXJyZW50IGV4ZWN1dGlvbiBvZiB0aGUgYFBJTl9MT05HVEVSTV9URVNUXypgIGlvY3Rscy4gRXNzZW50aWFsbHksIGl0IHJlbW92ZXMgdGhlIGdsb2JhbCBsb2NraW5nIGJvdHRsZW5lY2suXG5cblNpbmNlIHRoaXMgaXMgYSB0ZXN0IG1vZHVsZSAoYGd1cF90ZXN0LmNgKSwgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGUsIGFuZCBpcyBpdCB3b3J0aCBmdXp6aW5nPyBJIG1lYW4sIHdlIHVzdWFsbHkgZG9uJ3QgcHJpb3JpdGl6ZSBmdXp6aW5nIHRlc3RzLiBCdXQgdGhpcyBtb2R1bGUgKmRvZXMqIGV4cG9zZSBrZXJuZWwgQVBJcyBsaWtlIGBwaW5fdXNlcl9wYWdlc2AsIGB1bnBpbl91c2VyX3BhZ2VzYCwgZXRjLiwgdG8gdXNlcnNwYWNlLiBUaGF0J3MgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZywgYWN0dWFsbHksIGJlY2F1c2UgdGhvc2UgQVBJcyBjYW4gaGF2ZSBpbnRlcmVzdGluZyBzaWRlLWVmZmVjdHMgYW5kIG1pZ2h0IHVuY292ZXIgc29tZSBoaWRkZW4gbWVtb3J5IG1hbmFnZW1lbnQgYnVncy5cblxuV2FpdCBhIHNlY29uZOKApiBgZ3VwX3Rlc3RgIGlzIGEgZGVidWdmcy90ZXN0IGludGVyZmFjZSEgVGhhdCBjaGFuZ2VzIHRoaW5ncy4gTGV0J3MgcHVsbCB1cCB0aGUga2VybmVsIHNvdXJjZSBpbiBgbW0vZ3VwX3Rlc3QuY2AgYW5kIGRpZyBhIGxpdHRsZSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMjoyMTo1Ni44MjYwMzQ2N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQ3NDcwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndXBfdGVzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjkzPWNvbmZpZyBHVVBfVEVTVFxcbi0tXFxubW0vS2NvbmZpZy0xMjk2LVxcdGhlbHBcXG5tbS9LY29uZmlnOjEyOTc6XFx0ICBQcm92aWRlcyAvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdCwgd2hpY2ggaW4gdHVybiBwcm92aWRlcyBhIHdheVxcbm1tL0tjb25maWctMTI5OC1cXHQgIHRvIG1ha2UgaW9jdGwgY2FsbHMgdGhhdCBjYW4gbGF1bmNoIGtlcm5lbC1iYXNlZCB1bml0IHRlc3RzIGZvclxcbi0tXFxubW0vS2NvbmZpZy0xMzEwLVxcbm1tL0tjb25maWc6MTMxMTpcXHQgIFNlZSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXFxubW0vS2NvbmZpZy0xMzEyLVxcbi0tXFxubW0vTWFrZWZpbGU9MTA5PW9iai0kKENPTkZJR19DR1JPVVBfSFVHRVRMQikgKz0gaHVnZXRsYl9jZ3JvdXAub1xcbm1tL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfR1VQX1RFU1QpICs9IGd1cF90ZXN0Lm9cXG5tbS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0RNQVBPT0xfVEVTVCkgKz0gZG1hcG9vbF90ZXN0Lm9cXG4tLVxcbm1tL2d1cF90ZXN0LmMtOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvaGlnaG1lbS5oXFx1MDAzZVxcbm1tL2d1cF90ZXN0LmM6OTojaW5jbHVkZSBcXFwiZ3VwX3Rlc3QuaFxcXCJcXG5tbS9ndXBfdGVzdC5jLTEwLVxcbm1tL2d1cF90ZXN0LmM6MTE6c3RydWN0IGd1cF90ZXN0X2RhdGEge1xcbm1tL2d1cF90ZXN0LmMtMTItXFx0c3RydWN0IG11dGV4IGxvbmd0ZXJtX211dGV4O1xcbi0tXFxubW0vZ3VwX3Rlc3QuYz0xNz1zdGF0aWMgdm9pZCBwdXRfYmFja19wYWdlcyh1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbm1tL2d1cF90ZXN0LmM6MTg6XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgdW5zaWduZWQgaW50IGd1cF90ZXN0X2ZsYWdzKVxcbm1tL2d1cF90ZXN0LmMtMTkte1xcbi0tXFxubW0vZ3VwX3Rlc3QuYy0zNC1cXHRjYXNlIERVTVBfVVNFUl9QQUdFU19URVNUOlxcbm1tL2d1cF90ZXN0LmM6MzU6XFx0XFx0aWYgKGd1cF90ZXN0X2ZsYWdzIFxcdTAwMjYgR1VQX1RFU1RfRkxBR19EVU1QX1BBR0VTX1VTRV9QSU4pIHtcXG5tbS9ndXBfdGVzdC5jLTM2LVxcdFxcdFxcdHVucGluX3VzZXJfcGFnZXMocGFnZXMsIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL2d1cF90ZXN0LmM9NDY9c3RhdGljIHZvaWQgdmVyaWZ5X2RtYV9waW5uZWQodW5zaWduZWQgaW50IGNtZCwgc3RydWN0IHBhZ2UgKipwYWdlcyxcXG4tLVxcbm1tL2d1cF90ZXN0LmMtNjEtXFxubW0vZ3VwX3Rlc3QuYzo2MjpcXHRcXHRcXHRcXHRkdW1wX3BhZ2UoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBcXFwiZ3VwX3Rlc3QgZmFpbHVyZVxcXCIpO1xcbm1tL2d1cF90ZXN0LmMtNjMtXFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9ndXBfdGVzdC5jLTY3LVxcdFxcdFxcdFxcdCAgICAgaSkpIHtcXG5tbS9ndXBfdGVzdC5jOjY4OlxcdFxcdFxcdFxcdGR1bXBfcGFnZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIFxcXCJndXBfdGVzdCBmYWlsdXJlXFxcIik7XFxubW0vZ3VwX3Rlc3QuYy02OS1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL2d1cF90ZXN0LmMtNzUtXFxubW0vZ3VwX3Rlc3QuYzo3NjpzdGF0aWMgdm9pZCBkdW1wX3BhZ2VzX3Rlc3Qoc3RydWN0IGd1cF90ZXN0ICpndXAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXFxubW0vZ3VwX3Rlc3QuYy03Ny1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL2d1cF90ZXN0LmMtMTAxLVxcdFxcdFxcdGR1bXBfcGFnZShwYWdlc1tpbmRleF90b19kdW1wXSxcXG5tbS9ndXBfdGVzdC5jOjEwMjpcXHRcXHRcXHRcXHQgIFxcXCJndXBfdGVzdDogZHVtcF9wYWdlcygpIHRlc3RcXFwiKTtcXG5tbS9ndXBfdGVzdC5jLTEwMy1cXHRcXHR9XFxuLS1cXG5tbS9ndXBfdGVzdC5jLTEwNi1cXG5tbS9ndXBfdGVzdC5jOjEwNzpzdGF0aWMgaW50IF9fZ3VwX3Rlc3RfaW9jdGwodW5zaWduZWQgaW50IGNtZCxcXG5tbS9ndXBfdGVzdC5jOjEwODpcXHRcXHRzdHJ1Y3QgZ3VwX3Rlc3QgKmd1cClcXG5tbS9ndXBfdGVzdC5jLTEwOS17XFxuLS1cXG5tbS9ndXBfdGVzdC5jLTIxNi1cXG5tbS9ndXBfdGVzdC5jOjIxNzpzdGF0aWMgaW5saW5lIHZvaWQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSlcXG5tbS9ndXBfdGVzdC5jLTIxOC17XFxuLS1cXG5tbS9ndXBfdGVzdC5jLTIyOC1cXG5tbS9ndXBfdGVzdC5jOjIyOTpzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydChzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSxcXG5tbS9ndXBfdGVzdC5jLTIzMC1cXHRcXHR1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbm1tL2d1cF90ZXN0LmMtMjk1LVxcbm1tL2d1cF90ZXN0LmM6Mjk2OnN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEsXFxubW0vZ3VwX3Rlc3QuYy0yOTctXFx0XFx0dW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5tbS9ndXBfdGVzdC5jPTMyMj1zdGF0aWMgbG9uZyBwaW5fbG9uZ3Rlcm1fdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5tbS9ndXBfdGVzdC5jLTMyNC17XFxubW0vZ3VwX3Rlc3QuYzozMjU6XFx0c3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEgPSBmaWxlcC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbm1tL2d1cF90ZXN0LmMtMzI2LVxcdGludCByZXQgPSAtRUlOVkFMO1xcbi0tXFxubW0vZ3VwX3Rlc3QuYy0zNDctXFxubW0vZ3VwX3Rlc3QuYzozNDg6c3RhdGljIGxvbmcgZ3VwX3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLFxcbm1tL2d1cF90ZXN0LmMtMzQ5LVxcdFxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbm1tL2d1cF90ZXN0LmMtMzUwLXtcXG5tbS9ndXBfdGVzdC5jOjM1MTpcXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwO1xcbm1tL2d1cF90ZXN0LmMtMzUyLVxcdGludCByZXQ7XFxuLS1cXG5tbS9ndXBfdGVzdC5jLTM3Mi1cXG5tbS9ndXBfdGVzdC5jOjM3MzpcXHRyZXQgPSBfX2d1cF90ZXN0X2lvY3RsKGNtZCwgXFx1MDAyNmd1cCk7XFxubW0vZ3VwX3Rlc3QuYy0zNzQtXFx0aWYgKHJldClcXG4tLVxcbm1tL2d1cF90ZXN0LmMtMzgyLVxcbm1tL2d1cF90ZXN0LmM6MzgzOnN0YXRpYyBpbnQgZ3VwX3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5tbS9ndXBfdGVzdC5jLTM4NC17XFxubW0vZ3VwX3Rlc3QuYzozODU6XFx0c3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGE7XFxubW0vZ3VwX3Rlc3QuYy0zODYtXFx0aW50IHJldDtcXG4tLVxcbm1tL2d1cF90ZXN0LmMtNDAyLVxcbm1tL2d1cF90ZXN0LmM6NDAzOnN0YXRpYyBpbnQgZ3VwX3Rlc3RfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5tbS9ndXBfdGVzdC5jLTQwNC17XFxubW0vZ3VwX3Rlc3QuYzo0MDU6XFx0c3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxubW0vZ3VwX3Rlc3QuYy00MDYtXFxuLS1cXG5tbS9ndXBfdGVzdC5jLTQxNC1cXG5tbS9ndXBfdGVzdC5jOjQxNTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBndXBfdGVzdF9mb3BzID0ge1xcbm1tL2d1cF90ZXN0LmM6NDE2OlxcdC5vcGVuID0gZ3VwX3Rlc3Rfb3BlbixcXG5tbS9ndXBfdGVzdC5jOjQxNzpcXHQudW5sb2NrZWRfaW9jdGwgPSBndXBfdGVzdF9pb2N0bCxcXG5tbS9ndXBfdGVzdC5jLTQxOC1cXHQuY29tcGF0X2lvY3RsID0gY29tcGF0X3B0cl9pb2N0bCxcXG5tbS9ndXBfdGVzdC5jOjQxOTpcXHQucmVsZWFzZSA9IGd1cF90ZXN0X3JlbGVhc2UsXFxubW0vZ3VwX3Rlc3QuYy00MjAtfTtcXG5tbS9ndXBfdGVzdC5jLTQyMS1cXG5tbS9ndXBfdGVzdC5jOjQyMjpzdGF0aWMgaW50IF9faW5pdCBndXBfdGVzdF9pbml0KHZvaWQpXFxubW0vZ3VwX3Rlc3QuYy00MjMte1xcbm1tL2d1cF90ZXN0LmM6NDI0OlxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfdW5zYWZlKFxcXCJndXBfdGVzdFxcXCIsIDA2MDAsIE5VTEwsIE5VTEwsXFxubW0vZ3VwX3Rlc3QuYzo0MjU6XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmd1cF90ZXN0X2ZvcHMpO1xcbm1tL2d1cF90ZXN0LmMtNDI2LVxcbi0tXFxubW0vZ3VwX3Rlc3QuYy00MjktXFxubW0vZ3VwX3Rlc3QuYzo0MzA6bGF0ZV9pbml0Y2FsbChndXBfdGVzdF9pbml0KTtcXG4tLVxcbm1tL2d1cF90ZXN0LmgtNi1cXG5tbS9ndXBfdGVzdC5oOjc6I2RlZmluZSBHVVBfRkFTVF9CRU5DSE1BUktcXHRfSU9XUignZycsIDEsIHN0cnVjdCBndXBfdGVzdClcXG5tbS9ndXBfdGVzdC5oOjg6I2RlZmluZSBQSU5fRkFTVF9CRU5DSE1BUktcXHRfSU9XUignZycsIDIsIHN0cnVjdCBndXBfdGVzdClcXG5tbS9ndXBfdGVzdC5oOjk6I2RlZmluZSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXFx0X0lPV1IoJ2cnLCAzLCBzdHJ1Y3QgZ3VwX3Rlc3QpXFxubW0vZ3VwX3Rlc3QuaDoxMDojZGVmaW5lIEdVUF9CQVNJQ19URVNUXFx0XFx0X0lPV1IoJ2cnLCA0LCBzdHJ1Y3QgZ3VwX3Rlc3QpXFxubW0vZ3VwX3Rlc3QuaDoxMTojZGVmaW5lIFBJTl9CQVNJQ19URVNUXFx0XFx0X0lPV1IoJ2cnLCA1LCBzdHJ1Y3QgZ3VwX3Rlc3QpXFxubW0vZ3VwX3Rlc3QuaDoxMjojZGVmaW5lIERVTVBfVVNFUl9QQUdFU19URVNUXFx0X0lPV1IoJ2cnLCA2LCBzdHJ1Y3QgZ3VwX3Rlc3QpXFxubW0vZ3VwX3Rlc3QuaC0xMy0jZGVmaW5lIFBJTl9MT05HVEVSTV9URVNUX1NUQVJUXFx0X0lPVygnZycsIDcsIHN0cnVjdCBwaW5fbG9uZ3Rlcm1fdGVzdClcXG4tLVxcbm1tL2d1cF90ZXN0LmgtMjAtXFxubW0vZ3VwX3Rlc3QuaDoyMTpzdHJ1Y3QgZ3VwX3Rlc3Qge1xcbm1tL2d1cF90ZXN0LmgtMjItXFx0X191NjQgZ2V0X2RlbHRhX3VzZWM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjIxOjU2Ljg4MjUxNzIwNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNzc5MTIzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBndXBfdGVzdC5jIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYG1tL2d1cF90ZXN0LmNgLiBJdCdzIGEgZGVidWdmcyBpbnRlcmZhY2UsIHdoaWNoIGlzIGEgYmlnIGZsYWcgZm9yIG1lIHNpbmNlIHRoYXQgb2Z0ZW4gbWVhbnMgdXNlcnNwYWNlIGludGVyYWN0aW9uIGFuZCBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBTcGVjaWZpY2FsbHksIGl0J3MgZm9yIHRlc3RpbmcgYGdldF91c2VyX3BhZ2VzYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMg4oCTIHRoZSBgQ09ORklHX0dVUF9URVNUYCBjb25maWcgaXMgdGhlIGtleS4gVGhlIHByaW1hcnkgY2hhbmdlIGhlcmUgaXMgZml4aW5nIGEgY29uY3VycmVuY3kgaXNzdWUgd2l0aGluIHRoZSBgUElOX0xPTkdURVJNX1RFU1RfKmAgaW9jdGxzLiBUaGV5J3ZlIG1vdmVkIHNvbWUgZ2xvYmFsIHN0YXRlIGludG8gYSBwZXItZmlsZSBkZXNjcmlwdG9yIHN0cnVjdHVyZSwgYHN0cnVjdCBndXBfdGVzdF9kYXRhYC4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlIHdpdGhpbiB0aGUgdGVzdCBtb2R1bGUgaXRzZWxmLlxuXG5UaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgXCJJcyB0aGlzIGZ1enphYmxlP1wiIFNpbmNlIHRoaXMgZXhwb3NlcyBrZXJuZWwgQVBJcyB0byB1c2Vyc3BhY2UsIGl0J3MgYSBkZWZpbml0ZSBwb3NzaWJpbGl0eSwgYW5kIHByb2JhYmx5IGEgZ29vZCBpZGVhLiBUaGUgbGlzdGVkIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBndXBfdGVzdF9vcGVuYCwgYGd1cF90ZXN0X3JlbGVhc2VgLCBgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnRgLCBgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcGAsIGBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkYCwgYHBpbl9sb25ndGVybV90ZXN0X2lvY3RsYCwgYW5kIGBndXBfdGVzdF9pb2N0bGAuXG5cbldhaXQsIGBndXBfdGVzdF9vcGVuYCBhbmQgYGd1cF90ZXN0X3JlbGVhc2VgIGFyZSAqbmV3KiBmdW5jdGlvbnMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBBbmQgaXQgbG9va3MgbGlrZSBgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnRgLCBgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcGAsIGFuZCBgcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZGAgYXJlICptb2RpZmllZCouIFRoZXNlIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucyB3aGljaCBpcyBpbXBvcnRhbnQuIEhvd2V2ZXIsIGBndXBfdGVzdF9vcGVuYCwgYGd1cF90ZXN0X3JlbGVhc2VgLCBhbmQgYGd1cF90ZXN0X2lvY3RsYCBhcmUgZXhwb3NlZCB2aWEgYGZpbGVfb3BlcmF0aW9uc2Agd2hpY2ggaXMgZGlmZmVyZW50LiBUaGUgcHJvbXB0IHNheXMgdGhhdCB3ZSBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuXG5cbkhhbmcgb27igKYgbG9va2luZyBjbG9zZXIsIGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydGAgKmlzKiBpbmxpbmUuIFNvLCB0aGF0J3Mgbm90IGEgY2xlYXIgZnV6emluZyB0YXJnZXQsIGJ1dCB0aGUgYGd1cF90ZXN0X29wZW5gLCBhbmQgYGd1cF90ZXN0X3JlbGVhc2VgLCBhbmQgYGd1cF90ZXN0X2lvY3RsYCBhcmUgKm5vdCogaW5saW5lLiBUaGVzZSBhcmUgYWN0dWFsbHkgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIGluIHRoZSBgZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3QuIFRoaXMgbWVhbnMgdGhleSBjYW5ub3QgYmUgaW5saW5lZCwgYW5kIHdpbGwgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBTbywgd2UncmUgZGVmaW5pdGVseSBsb29raW5nIGF0IHBvdGVudGlhbCBmdXp6aW5nIHN1cmZhY2UgaGVyZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGd1cF90ZXN0X29wZW5gIGlzIHN0YXRpYy4gWWVzLCBpdCdzIHN0YXRpYywgYnV0IHRoaXMgaXMgbGVzcyBpbXBvcnRhbnQsIGl0J3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhpcyBtZWFucyB0aGUgY29tcGlsZXIgd29uJ3QgaW5saW5lIGl0LiBTYW1lIHdpdGggYGd1cF90ZXN0X3JlbGVhc2VgLCBpdCBpcyBhbHNvIHN0YXRpYyBidXQgaXMgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXIuIFRoZW4gdGhlcmUncyBgZ3VwX3Rlc3RfaW9jdGxgIGFzIHdlbGwhIEFuZCBgcGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGxgIGlzIGNhbGxlZCBmcm9tIGBndXBfdGVzdF9pb2N0bGAuIFRoaXMgd2FycmFudHMgYSBjbG9zZXIgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgZm9yIGBndXBfdGVzdF9pb2N0bGAgaW4gYG1tL2d1cF90ZXN0LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODY0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjIyOjA2LjE2MDQzMTg0OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9ndXBfdGVzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0fVxcbiAzMjE6XFx0XFxuIDMyMjpcXHRzdGF0aWMgbG9uZyBwaW5fbG9uZ3Rlcm1fdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsXFxuIDMyMzpcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXFxuIDMyNDpcXHR7XFxuIDMyNTpcXHRcXHRzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSA9IGZpbGVwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDMyNjpcXHRcXHRpbnQgcmV0ID0gLUVJTlZBTDtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0aWYgKG11dGV4X2xvY2tfa2lsbGFibGUoXFx1MDAyNmRhdGEtXFx1MDAzZWxvbmd0ZXJtX211dGV4KSlcXG4gMzI5OlxcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuIDMzMDpcXHRcXG4gMzMxOlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuIDMzMjpcXHRcXHRjYXNlIFBJTl9MT05HVEVSTV9URVNUX1NUQVJUOlxcbiAzMzM6XFx0XFx0XFx0cmV0ID0gcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoZGF0YSwgYXJnKTtcXG4gMzM0OlxcdFxcdFxcdGJyZWFrO1xcbiAzMzU6XFx0XFx0Y2FzZSBQSU5fTE9OR1RFUk1fVEVTVF9TVE9QOlxcbiAzMzY6XFx0XFx0XFx0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChkYXRhKTtcXG4gMzM3OlxcdFxcdFxcdHJldCA9IDA7XFxuIDMzODpcXHRcXHRcXHRicmVhaztcXG4gMzM5OlxcdFxcdGNhc2UgUElOX0xPTkdURVJNX1RFU1RfUkVBRDpcXG4gMzQwOlxcdFxcdFxcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoZGF0YSwgYXJnKTtcXG4gMzQxOlxcdFxcdFxcdGJyZWFrO1xcbiAzNDI6XFx0XFx0fVxcbiAzNDM6XFx0XFxuIDM0NDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhdGEtXFx1MDAzZWxvbmd0ZXJtX211dGV4KTtcXG4gMzQ1OlxcdFxcdHJldHVybiByZXQ7XFxuIDM0NjpcXHR9XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdHN0YXRpYyBsb25nIGd1cF90ZXN0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCxcXG4gMzQ5OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbiAzNTA6XFx0e1xcbiAzNTE6XFx0XFx0c3RydWN0IGd1cF90ZXN0IGd1cDtcXG4gMzUyOlxcdFxcdGludCByZXQ7XFxuIDM1MzpcXHRcXG4gMzU0OlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuIDM1NTpcXHRcXHRjYXNlIEdVUF9GQVNUX0JFTkNITUFSSzpcXG4gMzU2OlxcdFxcdGNhc2UgUElOX0ZBU1RfQkVOQ0hNQVJLOlxcbiAzNTc6XFx0XFx0Y2FzZSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLOlxcbiAzNTg6XFx0XFx0Y2FzZSBHVVBfQkFTSUNfVEVTVDpcXG4gMzU5OlxcdFxcdGNhc2UgUElOX0JBU0lDX1RFU1Q6XFxuIDM2MDpcXHRcXHRjYXNlIERVTVBfVVNFUl9QQUdFU19URVNUOlxcbiAzNjE6XFx0XFx0XFx0YnJlYWs7XFxuIDM2MjpcXHRcXHRjYXNlIFBJTl9MT05HVEVSTV9URVNUX1NUQVJUOlxcbiAzNjM6XFx0XFx0Y2FzZSBQSU5fTE9OR1RFUk1fVEVTVF9TVE9QOlxcbiAzNjQ6XFx0XFx0Y2FzZSBQSU5fTE9OR1RFUk1fVEVTVF9SRUFEOlxcbiAzNjU6XFx0XFx0XFx0cmV0dXJuIHBpbl9sb25ndGVybV90ZXN0X2lvY3RsKGZpbGVwLCBjbWQsIGFyZyk7XFxuIDM2NjpcXHRcXHRkZWZhdWx0OlxcbiAzNjc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDM2ODpcXHRcXHR9XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2Z3VwLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihndXApKSlcXG4gMzcxOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAzNzI6XFx0XFxuIDM3MzpcXHRcXHRyZXQgPSBfX2d1cF90ZXN0X2lvY3RsKGNtZCwgXFx1MDAyNmd1cCk7XFxuIDM3NDpcXHRcXHRpZiAocmV0KVxcbiAzNzU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzc2OlxcdFxcbiAzNzc6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsIFxcdTAwMjZndXAsIHNpemVvZihndXApKSlcXG4gMzc4OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAzNzk6XFx0XFxuIDM4MDpcXHRcXHRyZXR1cm4gMDtcXG4gMzgxOlxcdH1cXG4gMzgyOlxcdFxcbiAzODM6XFx0c3RhdGljIGludCBndXBfdGVzdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiAzODQ6XFx0e1xcbiAzODU6XFx0XFx0c3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGE7XFxuIDM4NjpcXHRcXHRpbnQgcmV0O1xcbiAzODc6XFx0XFxuIDM4ODpcXHRcXHRkYXRhID0ga3phbGxvY19vYmooKmRhdGEpO1xcbiAzODk6XFx0XFx0aWYgKCFkYXRhKVxcbiAzOTA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDM5MTpcXHRcXG4gMzkyOlxcdFxcdHJldCA9IG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpO1xcbiAzOTM6XFx0XFx0aWYgKHJldCkge1xcbiAzOTQ6XFx0XFx0XFx0a2ZyZWUoZGF0YSk7XFxuIDM5NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzOTY6XFx0XFx0fVxcbiAzOTc6XFx0XFxuIDM5ODpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZkYXRhLVxcdTAwM2Vsb25ndGVybV9tdXRleCk7XFxuIDM5OTpcXHRcXHRmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBkYXRhO1xcbiA0MDA6XFx0XFx0cmV0dXJuIDA7XFxuIDQwMTpcXHR9XFxuIDQwMjpcXHRcXG4gNDAzOlxcdHN0YXRpYyBpbnQgZ3VwX3Rlc3RfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gNDA0OlxcdHtcXG4gNDA1OlxcdFxcdHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiA0MDY6XFx0XFxuIDQwNzpcXHRcXHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpO1xcbiA0MDg6XFx0XFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2ZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fbXV0ZXgpO1xcbiA0MDk6XFx0XFx0a2ZyZWUoZGF0YSk7XFxuIDQxMDpcXHRcXHRmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBOVUxMO1xcbiA0MTE6XFx0XFxuIDQxMjpcXHRcXHRyZXR1cm4gMDtcXG4gNDEzOlxcdH1cXG4gNDE0OlxcdFxcbiA0MTU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3VwX3Rlc3RfZm9wcyA9IHtcXG4gNDE2OlxcdFxcdC5vcGVuID0gZ3VwX3Rlc3Rfb3BlbixcXG4gNDE3OlxcdFxcdC51bmxvY2tlZF9pb2N0bCA9IGd1cF90ZXN0X2lvY3RsLFxcbiA0MTg6XFx0XFx0LmNvbXBhdF9pb2N0bCA9IGNvbXBhdF9wdHJfaW9jdGwsXFxuIDQxOTpcXHRcXHQucmVsZWFzZSA9IGd1cF90ZXN0X3JlbGVhc2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjIyOjA2LjE2MDU1MDM0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwNDc5NTM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVjZW50IENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHJlY2VudCBtb2RpZmljYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGFkZGl0aW9uIG9yIGFsdGVyYXRpb25zIG9mIHRoZSBmdW5jdGlvbnMgYGd1cF90ZXN0X29wZW5gLCBgZ3VwX3Rlc3RfcmVsZWFzZWAsIGBndXBfdGVzdF9pb2N0bGAsIGFuZCBgcGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGxgLiBUaGV5IGFyZW4ndCBpbmxpbmVkLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gVGhlIG92ZXJhbGwgY29uZmlnIGJlaW5nIHVzZWQgaXMgYEdVUF9URVNUYC4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBmdW5jdGlvbnMsIHdoaWNoIGRlYWwgd2l0aCBJT0NUTHMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggYEdVUF9URVNUYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGJlIGludm9sdmVkIGFuZCB3aGF0IHRoZSBwdXJwb3NlIG9mIGBHVVBfVEVTVGAgYWN0dWFsbHkgaXMuIFRpbWUgdG8gZGlnIGludG8gdGhlIEtjb25maWchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjIyOjEwLjA2NTM0ODIwMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzE4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyOTA6XFx0XFx0ICBpbmZvcm1hdGlvbiBpbmNsdWRlcyBnbG9iYWwgYW5kIHBlciBjaHVuayBzdGF0aXN0aWNzLCB3aGljaCBjYW5cXG4xMjkxOlxcdFxcdCAgYmUgdXNlZCB0byBoZWxwIHVuZGVyc3RhbmQgcGVyY3B1IG1lbW9yeSB1c2FnZS5cXG4xMjkyOlxcdFxcbjEyOTM6XFx0Y29uZmlnIEdVUF9URVNUXFxuMTI5NDpcXHRcXHRib29sIFxcXCJFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzXFxcIlxcbjEyOTU6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19GU1xcbjEyOTY6XFx0XFx0aGVscFxcbjEyOTc6XFx0XFx0ICBQcm92aWRlcyAvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdCwgd2hpY2ggaW4gdHVybiBwcm92aWRlcyBhIHdheVxcbjEyOTg6XFx0XFx0ICB0byBtYWtlIGlvY3RsIGNhbGxzIHRoYXQgY2FuIGxhdW5jaCBrZXJuZWwtYmFzZWQgdW5pdCB0ZXN0cyBmb3JcXG4xMjk5OlxcdFxcdCAgdGhlIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSBmYW1pbHkgb2YgQVBJIGNhbGxzLlxcbjEzMDA6XFx0XFxuMTMwMTpcXHRcXHQgIFRoZXNlIHRlc3RzIGluY2x1ZGUgYmVuY2htYXJrIHRlc3Rpbmcgb2YgdGhlIF9mYXN0IHZhcmlhbnRzIG9mXFxuMTMwMjpcXHRcXHQgIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSwgYXMgd2VsbCBhcyBzbW9rZSB0ZXN0cyBvZlxcbjEzMDM6XFx0XFx0ICB0aGUgbm9uLV9mYXN0IHZhcmlhbnRzLlxcbjEzMDQ6XFx0XFxuMTMwNTpcXHRcXHQgIFRoZXJlIGlzIGFsc28gYSBzdWItdGVzdCB0aGF0IGFsbG93cyBydW5uaW5nIGR1bXBfcGFnZSgpIG9uIGFueVxcbjEzMDY6XFx0XFx0ICBvZiB1cCB0byBlaWdodCBwYWdlcyAoc2VsZWN0ZWQgYnkgY29tbWFuZCBsaW5lIGFyZ3MpIHdpdGhpbiB0aGVcXG4xMzA3OlxcdFxcdCAgcmFuZ2Ugb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIFRoZXNlIHBhZ2VzIGFyZSBlaXRoZXIgcGlubmVkIHZpYVxcbjEzMDg6XFx0XFx0ICBwaW5fdXNlcl9wYWdlcyooKSwgb3IgcGlubmVkIHZpYSBnZXRfdXNlcl9wYWdlcyooKSwgYXMgc3BlY2lmaWVkXFxuMTMwOTpcXHRcXHQgIGJ5IG90aGVyIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuXFxuMTMxMDpcXHRcXG4xMzExOlxcdFxcdCAgU2VlIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG4xMzEyOlxcdFxcbjEzMTM6XFx0Y29tbWVudCBcXFwiR1VQX1RFU1QgbmVlZHMgdG8gaGF2ZSBERUJVR19GUyBlbmFibGVkXFxcIlxcbjEzMTQ6XFx0XFx0ZGVwZW5kcyBvbiAhR1VQX1RFU1QgXFx1MDAyNlxcdTAwMjYgIURFQlVHX0ZTXFxuMTMxNTpcXHRcXG4xMzE2OlxcdGNvbmZpZyBHVVBfR0VUX1BYWF9MT1dfSElHSFxcbjEzMTc6XFx0XFx0Ym9vbFxcbjEzMTg6XFx0XFxuMTMxOTpcXHRjb25maWcgRE1BUE9PTF9URVNUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjIyOjEwLjA2NTQ2NjY4MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTEzNDE2NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIGBndXBfdGVzdGAgTW9kdWxlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgSSd2ZSBnb3QgYSBwbGFuIGZvciBmdXp6aW5nIGl0LiBUaGUga2V5IGhlcmUgaXMgdGhlIGBndXBfdGVzdGAgZGVidWdmcyBpbnRlcmZhY2UuIFRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyIC0gYERFQlVHX0ZTYCwgYW5kIHNpbmNlIGBHVVBfVEVTVGAgZW5hYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSwgdGhhdCdzIHdoYXQgSSdsbCBuZWVkIHRvIGVuYWJsZSBpbiB0aGUgY29uZmlndXJhdGlvbi5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuICp3b3J0aCogZnV6emluZz8gQWJzb2x1dGVseSEgSXQncyBhIHRlc3QgbW9kdWxlLCB5ZXMsIGJ1dCBpdCBleHBvc2VzIGtlcm5lbCBBUElzIHRvIHVzZXJzcGFjZS4gVGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUsIGFuZCBjb25jdXJyZW5jeSBidWdzIGFyZSBwcmVjaXNlbHkgd2hhdCBmdXp6ZXJzIGV4Y2VsIGF0IHVuY292ZXJpbmcgYW5kIHZhbGlkYXRpbmcgZml4ZXMgZm9yLiBUaGlzIGlzIGEgY2xhc3NpYyBvcHBvcnR1bml0eS5cblxuVGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb3N0IGxpa2VseSB0byBiZSBpbnRlcmVzdGluZyBhcmUgYGd1cF90ZXN0X29wZW5gLCBgZ3VwX3Rlc3RfcmVsZWFzZWAsIGBndXBfdGVzdF9pb2N0bGAsIGFuZCBgcGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGxgLiBJIGluaXRpYWxseSBoYWQgYSBjb25jZXJuIGFib3V0IGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydGAsIGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wYCwgYW5kIGBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkYCBzaW5jZSB0aGV5IGFyZSBpbmxpbmUgYW5kIHdvbid0IGhhdmUgdGhlaXIgb3duIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIFNpbmNlIHRoaXMgaXMgYW4gaW9jdGwgYmFzZWQgaW50ZXJmYWNlLCBpdCBtYWtlcyBzZW5zZSB0byBmb2N1cyBvbiB0aGUgYCpfaW9jdGxgIGZ1bmN0aW9ucy5cblxuTGV0J3MgZG8gYSBxdWljayBjaGVjayBvbiB0aGUgYHBpbl9sb25ndGVybV90ZXN0X2lvY3RsYCBmdW5jdGlvbiBzaW5jZSBpdCBjb3VsZCBiZSBpbmxpbmVkLiBBaCwgeWVzLCBpdCdzIGBzdGF0aWMgbG9uZyBwaW5fbG9uZ3Rlcm1fdGVzdF9pb2N0bCguLi4pYC4gSXQncyBjYWxsZWQgZnJvbSBgZ3VwX3Rlc3RfaW9jdGxgLCB3aGljaCBpcyBhbHNvIGBzdGF0aWMgbG9uZyBndXBfdGVzdF9pb2N0bCguLi4pYC4gU2luY2UgaXQncyBvbmx5IGNhbGxlZCBmcm9tIG9uZSBwbGFjZSwgdGhlIGNvbXBpbGVyICptaWdodCogaW5saW5lIGl0LiBIb3dldmVyLCBgZ3VwX3Rlc3RfaW9jdGxgIGlzIG5vdCBpbmxpbmVkIGJlY2F1c2UgaXQncyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBUaGVyZWZvcmUsIGBndXBfdGVzdF9pb2N0bGAgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0LiBMaWtld2lzZSwgYGd1cF90ZXN0X29wZW5gIGFuZCBgZ3VwX3Rlc3RfcmVsZWFzZWAgYXJlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB0b28uXG5cblNvLCB0byBzdW1tYXJpemUsIEknbSBsaXN0aW5nOlxuKiAgIGBndXBfdGVzdF9vcGVuYFxuKiAgIGBndXBfdGVzdF9yZWxlYXNlYFxuKiAgIGBndXBfdGVzdF9pb2N0bGBcbiogICBgcGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGxgXG5cblRoZSBjb25maWcgbmVlZGVkIGZvciB0aGlzIGlzIGBHVVBfVEVTVGAuXG5cbkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSBgZ3VwX3Rlc3RgIGRlYnVnZnMgaW50ZXJmYWNlIHRvIHVzZSBwZXItZmlsZSBkZXNjcmlwdG9yIHN0YXRlIGZvciB0aGUgYFBJTl9MT05HVEVSTV9URVNUXypgIGlvY3RscywgZml4aW5nIGNvbmN1cnJlbmN5IHByb2JsZW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gYSB0ZXN0IG1vZHVsZSB0aGF0IGV4cG9zZXMga2VybmVsIEFQSXMgdG8gdXNlcnNwYWNlLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgY29uY3VycmVuY3kgZml4IGlzIGNvcnJlY3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgaXNzdWVzIHN1Y2ggYXMgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIE5vdywgbGV0J3MgY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMzksIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6MjI6MjAuNTc4ODg2MTMxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNTIxODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJHVVBfVEVTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImd1cF90ZXN0X29wZW5cIixcbiAgICBcImd1cF90ZXN0X3JlbGVhc2VcIixcbiAgICBcImd1cF90ZXN0X2lvY3RsXCIsXG4gICAgXCJwaW5fbG9uZ3Rlcm1fdGVzdF9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBndXBfdGVzdCBkZWJ1Z2ZzIGludGVyZmFjZSB0byB1c2UgcGVyLWZpbGUgZGVzY3JpcHRvciBzdGF0ZSBpbnN0ZWFkIG9mIGdsb2JhbCBzdGF0ZSBmb3IgdGhlIFBJTl9MT05HVEVSTV9URVNUXyogaW9jdGxzLCBmaXhpbmcgY29uY3VycmVuY3kgaXNzdWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gYSB0ZXN0IG1vZHVsZSB0aGF0IGV4cG9zZXMga2VybmVsIEFQSXMgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgY29uY3VycmVuY3kgZml4IGlzIGNvcnJlY3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIG5ldyBpc3N1ZXMgbGlrZSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiR1VQX1RFU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJndXBfdGVzdF9vcGVuXCIsXG4gICAgXCJndXBfdGVzdF9yZWxlYXNlXCIsXG4gICAgXCJndXBfdGVzdF9pb2N0bFwiLFxuICAgIFwicGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZ3VwX3Rlc3QgZGVidWdmcyBpbnRlcmZhY2UgdG8gdXNlIHBlci1maWxlIGRlc2NyaXB0b3Igc3RhdGUgaW5zdGVhZCBvZiBnbG9iYWwgc3RhdGUgZm9yIHRoZSBQSU5fTE9OR1RFUk1fVEVTVF8qIGlvY3RscywgZml4aW5nIGNvbmN1cnJlbmN5IGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGEgdGVzdCBtb2R1bGUgdGhhdCBleHBvc2VzIGtlcm5lbCBBUElzIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIGNvbmN1cnJlbmN5IGZpeCBpcyBjb3JyZWN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSBuZXcgaXNzdWVzIGxpa2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMjoyMjoyMC43Mjk0MTY1OTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MTE5NDA2NjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6MjI6MjAuNzMwMDIyMDk1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM3MTE4Nzk3NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBwaW5fbG9uZ3Rlcm1fdGVzdGAgaW4gYG1tL2d1cF90ZXN0LmNgIHRvIHVzZSBhIHBlci1maWxlIGRhdGEgc3RydWN0dXJlIChgc3RydWN0IGd1cF90ZXN0X2RhdGFgKSBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMsIGFsbG93aW5nIGNvbmN1cnJlbnQgdXNlcnMgb2YgdGhlIGd1cF90ZXN0IGlvY3RsLiBUaGUgbmV3IHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyBhbGwgZmllbGRzLiBUaGUgYXJyYXkgb2YgcGFnZSBwb2ludGVycyBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt2Y2FsbG9jYCwgd2hpY2ggYWxzbyB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkuIFRoZSBvbmx5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIHBpbm5lZCB1c2VyIHBhZ2VzLCB3aGljaCBpcyBpZGVudGljYWwgdG8gdGhlIHByZS1wYXRjaCBiZWhhdmlvciBhbmQgZG9lcyBub3QgbGVhayBrZXJuZWwgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjZhZjY3OTVkYTg5MTY0YmI5MWYyYmE5YmE2MzhlZDRjM2Y3NTYyYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDEyOjIxOjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZ3VwX3Rlc3QuYyBiL21tL2d1cF90ZXN0LmNcbmluZGV4IGViNGM5Y2RhMTZlZDguLjQ0YzFjZGZiOWMzNzEgMTAwNjQ0XG4tLS0gYS9tbS9ndXBfdGVzdC5jXG4rKysgYi9tbS9ndXBfdGVzdC5jXG5AQCAtOCw2ICs4LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGlnaG1lbS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJndXBfdGVzdC5oXCJcbiBcbitzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSB7XG4rXHRzdHJ1Y3QgbXV0ZXggbG9uZ3Rlcm1fbXV0ZXg7XG4rXHRzdHJ1Y3QgcGFnZSAqKmxvbmd0ZXJtX3BhZ2VzO1xuK1x0dW5zaWduZWQgbG9uZyBsb25ndGVybV9ucl9wYWdlcztcbit9O1xuK1xuIHN0YXRpYyB2b2lkIHB1dF9iYWNrX3BhZ2VzKHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4gXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgdW5zaWduZWQgaW50IGd1cF90ZXN0X2ZsYWdzKVxuIHtcbkBAIC0yMDgsMjMgKzIxNCwyMCBAQCBzdGF0aWMgaW50IF9fZ3VwX3Rlc3RfaW9jdGwodW5zaWduZWQgaW50IGNtZCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBERUZJTkVfTVVURVgocGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpO1xuLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKnBpbl9sb25ndGVybV90ZXN0X3BhZ2VzO1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzO1xuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKHZvaWQpXG4rc3RhdGljIGlubGluZSB2b2lkIHBpbl9sb25ndGVybV90ZXN0X3N0b3Aoc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEpXG4ge1xuLVx0aWYgKHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzKSB7XG4tXHRcdGlmIChwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcylcbi1cdFx0XHR1bnBpbl91c2VyX3BhZ2VzKHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzLFxuLVx0XHRcdFx0XHQgcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMpO1xuLVx0XHRrdmZyZWUocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpO1xuLVx0XHRwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcyA9IE5VTEw7XG4tXHRcdHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzID0gMDtcbitcdGlmIChkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzKSB7XG4rXHRcdGlmIChkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzKVxuK1x0XHRcdHVucGluX3VzZXJfcGFnZXMoZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcyxcbitcdFx0XHRcdFx0IGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMpO1xuK1x0XHRrdmZyZWUoZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcyk7XG4rXHRcdGRhdGEtXHUwMDNlbG9uZ3Rlcm1fcGFnZXMgPSBOVUxMO1xuK1x0XHRkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzID0gMDtcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpXG4rc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbiBcdGxvbmcgbnJfcGFnZXMsIGN1cl9wYWdlcywgYWRkciwgcmVtYWluaW5nX3BhZ2VzO1xuIFx0aW50IGd1cF9mbGFncyA9IEZPTExfTE9OR1RFUk07XG5AQCAtMjMzLDcgKzIzNiw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0aW50IHJldCA9IDA7XG4gXHRib29sIGZhc3Q7XG4gXG4tXHRpZiAocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpXG4rXHRpZiAoZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YXJncywgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoYXJncykpKVxuQEAgLTI2MywxMiArMjY2LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyZXR1cm4gLUVJTlRSO1xuIFx0fVxuIFxuLVx0cGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMgPSBwYWdlcztcbi1cdHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzID0gMDtcbitcdGRhdGEtXHUwMDNlbG9uZ3Rlcm1fcGFnZXMgPSBwYWdlcztcbitcdGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgPSAwO1xuIFxuLVx0d2hpbGUgKG5yX3BhZ2VzIC0gcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMpIHtcbi1cdFx0cmVtYWluaW5nX3BhZ2VzID0gbnJfcGFnZXMgLSBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcztcbi1cdFx0YWRkciA9IGFyZ3MuYWRkciArIHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzICogUEFHRV9TSVpFO1xuK1x0d2hpbGUgKG5yX3BhZ2VzIC0gZGF0YS1cdTAwM2Vsb25ndGVybV9ucl9wYWdlcykge1xuK1x0XHRyZW1haW5pbmdfcGFnZXMgPSBucl9wYWdlcyAtIGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXM7XG4rXHRcdGFkZHIgPSBhcmdzLmFkZHIgKyBkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzICogUEFHRV9TSVpFO1xuIFxuIFx0XHRpZiAoZmFzdClcbiBcdFx0XHRjdXJfcGFnZXMgPSBwaW5fdXNlcl9wYWdlc19mYXN0KGFkZHIsIHJlbWFpbmluZ19wYWdlcyxcbkBAIC0yNzcsMTEgKzI4MCwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydCh1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0XHRjdXJfcGFnZXMgPSBwaW5fdXNlcl9wYWdlcyhhZGRyLCByZW1haW5pbmdfcGFnZXMsXG4gXHRcdFx0XHRcdFx0ICAgZ3VwX2ZsYWdzLCBwYWdlcyk7XG4gXHRcdGlmIChjdXJfcGFnZXMgXHUwMDNjIDApIHtcbi1cdFx0XHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKCk7XG4rXHRcdFx0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChkYXRhKTtcbiBcdFx0XHRyZXQgPSBjdXJfcGFnZXM7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbi1cdFx0cGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMgKz0gY3VyX3BhZ2VzO1xuK1x0XHRkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzICs9IGN1cl9wYWdlcztcbiBcdFx0cGFnZXMgKz0gY3VyX3BhZ2VzO1xuIFx0fVxuIFxuQEAgLTI5MCwxOSArMjkzLDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZCh1bnNpZ25lZCBsb25nIGFyZylcbitzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4gXHRfX3U2NCB1c2VyX2FkZHI7XG4gXHR1bnNpZ25lZCBsb25nIGk7XG4gXG4tXHRpZiAoIXBpbl9sb25ndGVybV90ZXN0X3BhZ2VzKVxuK1x0aWYgKCFkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ1c2VyX2FkZHIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKHVzZXJfYWRkcikpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzOyBpKyspIHtcbi1cdFx0dm9pZCAqYWRkciA9IGttYXBfbG9jYWxfcGFnZShwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlc1tpXSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzOyBpKyspIHtcbitcdFx0dm9pZCAqYWRkciA9IGttYXBfbG9jYWxfcGFnZShkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzW2ldKTtcbiBcdFx0dW5zaWduZWQgbG9uZyByZXQ7XG4gXG4gXHRcdHJldCA9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyl1c2VyX2FkZHIsIGFkZHIsXG5AQCAtMzE4LDI1ICszMjIsMjYgQEAgc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZCh1bnNpZ25lZCBsb25nIGFyZylcbiBzdGF0aWMgbG9uZyBwaW5fbG9uZ3Rlcm1fdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuK1x0c3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEgPSBmaWxlcC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHRpbnQgcmV0ID0gLUVJTlZBTDtcbiBcbi1cdGlmIChtdXRleF9sb2NrX2tpbGxhYmxlKFx1MDAyNnBpbl9sb25ndGVybV90ZXN0X211dGV4KSlcbitcdGlmIChtdXRleF9sb2NrX2tpbGxhYmxlKFx1MDAyNmRhdGEtXHUwMDNlbG9uZ3Rlcm1fbXV0ZXgpKVxuIFx0XHRyZXR1cm4gLUVJTlRSO1xuIFxuIFx0c3dpdGNoIChjbWQpIHtcbiBcdGNhc2UgUElOX0xPTkdURVJNX1RFU1RfU1RBUlQ6XG4tXHRcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KGFyZyk7XG4rXHRcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KGRhdGEsIGFyZyk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBQSU5fTE9OR1RFUk1fVEVTVF9TVE9QOlxuLVx0XHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKCk7XG4rXHRcdHBpbl9sb25ndGVybV90ZXN0X3N0b3AoZGF0YSk7XG4gXHRcdHJldCA9IDA7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBQSU5fTE9OR1RFUk1fVEVTVF9SRUFEOlxuLVx0XHRyZXQgPSBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKGFyZyk7XG4rXHRcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoZGF0YSwgYXJnKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2cGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhdGEtXHUwMDNlbG9uZ3Rlcm1fbXV0ZXgpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMzc1LDE1ICszODAsNDAgQEAgc3RhdGljIGxvbmcgZ3VwX3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZ3VwX3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YTtcbitcdGludCByZXQ7XG4rXG4rXHRkYXRhID0ga3phbGxvY19vYmooKmRhdGEpO1xuK1x0aWYgKCFkYXRhKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJldCA9IG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRrZnJlZShkYXRhKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdG11dGV4X2luaXQoXHUwMDI2ZGF0YS1cdTAwM2Vsb25ndGVybV9tdXRleCk7XG4rXHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IGRhdGE7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBndXBfdGVzdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbi1cdHBpbl9sb25ndGVybV90ZXN0X3N0b3AoKTtcbitcdHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXG4rXHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpO1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZkYXRhLVx1MDAzZWxvbmd0ZXJtX211dGV4KTtcbitcdGtmcmVlKGRhdGEpO1xuK1x0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBOVUxMO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGd1cF90ZXN0X2ZvcHMgPSB7XG4tXHQub3BlbiA9IG5vbnNlZWthYmxlX29wZW4sXG4rXHQub3BlbiA9IGd1cF90ZXN0X29wZW4sXG4gXHQudW5sb2NrZWRfaW9jdGwgPSBndXBfdGVzdF9pb2N0bCxcbiBcdC5jb21wYXRfaW9jdGwgPSBjb21wYXRfcHRyX2lvY3RsLFxuIFx0LnJlbGVhc2UgPSBndXBfdGVzdF9yZWxlYXNlLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6MjI6MjAuNzMwMDIzMDI2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MDQxODgyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgYG1tL2d1cF90ZXN0LmNgIGZvciBDb25jdXJyZW50IEdVUCBUZXN0IFVzYWdlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBpbXByb3ZpbmcgdGhlIGNvbmN1cnJlbmN5IG9mIHRoZSBgZ3VwX3Rlc3RgIGlvY3RsLiBDdXJyZW50bHksIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBwaW5fbG9uZ3Rlcm1fdGVzdGAgZnVuY3Rpb25hbGl0eSwgcmVsaWVzIG9uIGdsb2JhbCB2YXJpYWJsZXMuIFRoYXQncyBhIGNsYXNzaWMgYm90dGxlbmVjaywgZXNwZWNpYWxseSBpZiB3ZSB3YW50IHRvIGFsbG93IG11bHRpcGxlIHVzZXJzIHRvIHJ1biBgZ3VwX3Rlc3RgIGNvbmN1cnJlbnRseS4gU28sIHRoZSByZWZhY3RvciBpcyBhIGdvb2QgbW92ZS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGhvdyB0aGV54oCZcmUgZG9pbmcgaXQuIFRoZSBrZXkgaXMgdXNpbmcgYSBwZXItZmlsZSBkYXRhIHN0cnVjdHVyZSwgYHN0cnVjdCBndXBfdGVzdF9kYXRhYCwgdG8gcmVwbGFjZSB0aG9zZSBnbG9iYWwgdmFyaWFibGVzOiBgcGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXhgLCBgcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXNgLCBhbmQgYHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzYC4gVGhhdCdzIHRoZSByaWdodCBhcHByb2FjaDsgcGVyLWZpbGUgbG9ja2luZyBhbmQgZGF0YSBpcyB0aGUgb2J2aW91cyBzb2x1dGlvbiBoZXJlLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZSBjaGFuZ2VzLiBGaXJzdCwgdGhleSBkZWZpbmUgdGhlIHN0cnVjdHVyZSwgYHN0cnVjdCBndXBfdGVzdF9kYXRhYC4gRmluZSwgdW5kZXJzdGFuZGFibGUuXG5cbk9rYXksIG5vdyBsZXQncyBzZWUgaG93IHRoaXMgc3RydWN0dXJlIGlzIGluc3RhbnRpYXRlZC4gQWgsIGluIGBndXBfdGVzdF9vcGVuYCwgaXQgbG9va3MgbGlrZSBgZGF0YWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigqZGF0YSlgLiBXYWl0LCBga3phbGxvY19vYmpgPyBUaGF0J3Mgbm90IGEgc3RhbmRhcmQga2VybmVsIGZ1bmN0aW9uLCBpcyBpdD8gSXQncyB1bmZhbWlsaWFyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QgYSB0eXBvIG9yIHNvbWUgY3VzdG9tIG1hY3JvIHdpdGhpbiB0aGlzIHBhdGNoIG9yIHRoZSBsYXJnZXIgcHJvamVjdC4gSXQgc2VlbXMgb2RkLCBhcyB0aGUgdXN1YWwga2VybmVsIGFsbG9jYXRpb24gZnVuY3Rpb24gaXMgYGt6YWxsb2NgLiBVbmxlc3MgdGhpcyBpcyBhIHJlY2VudCBhZGRpdGlvbi4gT2theSwgbGV0J3MgYXNzdW1lIGl0J3MgYGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTClgIGZvciBub3csIGJ1dCBJIG5lZWQgdG8gY2hlY2suIEl0J3MgYmVzdCBwcmFjdGljZSB0byBjb25maXJtIHRoZSBkZXRhaWxzLiBMZXQncyBzZWUgaWYgaXQncyBhIG1hY3JvIGRlZmluZWQgc29tZXdoZXJlLCBvciBwZXJoYXBzIGEgdHlwby4gR3JlcHBpbmcgZm9yIGBremFsbG9jX29iamAgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDIzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6MjI6MjcuMTM0MjE1MzQzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzEzOTQwNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2Nfb2JqXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzkxMzggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q9MTAzPWxpc3Q6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTExNC1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjExNTogICAgICAgICAgZ3JvY2sgPSBremFsbG9jX29iaigqZ3JvY2spO1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTE2LSAgICAgICAgICBpZiAoIWdyb2NrKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMjUtXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdDoxMjY6ICAgICAgICAgIGRpbWl0cmkgPSBremFsbG9jX29iaigqZGltaXRyaSk7XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMjctICAgICAgICAgIGlmICghZGltaXRyaSlcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdD00NT1hIG1lc3NhZ2UgYW5kIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIEFQSSBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5KS5cXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdC04OS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3Q6OTA6XFx0XFx0ZGNfc3luYyA9IGt6YWxsb2Nfb2JqKCpkY19zeW5jKTtcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3Q6OTE6XFx0XFx0ZGNfYXN5bmMgPSBremFsbG9jX29iaigqZGNfYXN5bmMpO1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdC05Mi1cXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdD0yNj1FeGFtcGxlOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0LTQ0LVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdDo0NTpcXHRcXHRteV9maCA9IGt6YWxsb2Nfb2JqKCpteV9maCk7XFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0LTQ2LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTM4PVRoZSBrZXJuZWwgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBnZW5lcmFsIHB1cnBvc2UgbWVtb3J5IGFsbG9jYXRvcnM6XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQwLXZ6YWxsb2MoKS4gIFBsZWFzZSByZWZlciB0byB0aGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk2ND1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYSB6ZXJvZWQgYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2Ny1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Njg6XFx0cCA9IGt6YWxsb2Nfb2JqcygqcCwgbiwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q9Mzk4PWJlY29tZSwgcmVzcGVjdGl2ZWx5OjpcXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDAtXFx0cHRyID0ga21hbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMTpcXHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAyLVxcdHB0ciA9IGttYWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMzpcXHRwdHIgPSBremFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDQtXFx0cHRyID0ga21hbGxvY19mbGV4KCpwdHIsIGZsZXhfbWVtYmVyLCBjb3VudCBbLCBnZnBdICk7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MjA4PXRvIGRldGFpbHMgZXhwbGFpbmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbi5cXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0yNjgtICAgICAgICAgICAgICAvKiBhbGxvY2F0ZSBhIGNoaXAtc3BlY2lmaWMgZGF0YSB3aXRoIHplcm8gZmlsbGVkICovXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjI2OTogICAgICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI3MC0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9NjIzPUFmdGVyIGFsbG9jYXRpbmcgYSBjYXJkIGluc3RhbmNlIHZpYSA6YzpmdW5jOmBzbmRfY2FyZF9uZXcoKWBcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC02MzAtICAuLi4uLlxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDo2MzE6ICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC02MzItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9Njk4PWRlc3RydWN0b3IgYW5kIFBDSSBlbnRyaWVzLiBFeGFtcGxlIGNvZGUgaXMgc2hvd24gZmlyc3QsIGJlbG93OjpcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC03NDktXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0Ojc1MDogICAgICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc1MS0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpIHtcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0zODIzPWNoaXAgZGF0YSBpbmRpdmlkdWFsbHk6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTM4MzUtICAgICAgICAgIC4uLi5cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MzgzNjogICAgICAgICAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNy0gICAgICAgICAgLi4uLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0PTc5ND1pbnQgbXlfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dC04MDEtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0OjgwMjpcXHRteV9maCA9IGt6YWxsb2Nfb2JqKCpteV9maCk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0LTgwMy1cXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jPTY0PW1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmNjRfRWhkciAqaGRyLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtOTUtXFx0bnN5bXMgPSBzeW10YWItXFx1MDAzZXNoX3NpemUgLyBzaXplb2YoRWxmNjRfU3ltKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYzo5NjpcXHRjaGFpbnMgPSBremFsbG9jX29ianMoc3RydWN0IGdvdF9lbnRyeSwgbnN5bXMpO1xcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTk3LVxcdGlmICghY2hhaW5zKSB7XFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jPTM5MD1yZWdpc3Rlcl9jcHVzKHZvaWQpXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM5NC1cXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM6Mzk1OlxcdFxcdHN0cnVjdCBjcHUgKnAgPSBremFsbG9jX29iaigqcCk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zOTYtXFx0XFx0aWYgKCFwKVxcbi0tXFxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jPTExMjA9c3RhdGljIGludCBqaXRfcHJlcGFyZV9maW5hbF9tZW1fYWxsb2Moc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXFxuLS1cXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmMtMTEzMS1cXHRpZiAoY3R4LVxcdTAwM2VuZWVkX2V4dHJhX3Bhc3MpIHtcXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmM6MTEzMjpcXHRcXHRjdHgtXFx1MDAzZWppdF9kYXRhID0ga3phbGxvY19vYmooKmN0eC1cXHUwMDNlaml0X2RhdGEpO1xcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYy0xMTMzLVxcdFxcdGlmICghY3R4LVxcdTAwM2VqaXRfZGF0YSlcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0yMjA9bG9jb21vX2luaXRfb25lX2NoaWxkKHN0cnVjdCBsb2NvbW8gKmxjaGlwLCBzdHJ1Y3QgbG9jb21vX2Rldl9pbmZvICppbmZvKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTIyNC1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MjI1OlxcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW9fZGV2KTtcXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjI2LVxcdGlmICghZGV2KSB7XFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM9MzU2PV9fbG9jb21vX3Byb2JlKHN0cnVjdCBkZXZpY2UgKm1lLCBzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwgaW50IGlycSlcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0zNjItXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jOjM2MzpcXHRsY2hpcCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW8pO1xcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0zNjQtXFx0aWYgKCFsY2hpcClcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYz03MzM9c2ExMTExX2luaXRfb25lX2NoaWxkKHN0cnVjdCBzYTExMTEgKnNhY2hpcCwgc3RydWN0IHJlc291cmNlICpwYXJlbnQsXFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtNzM5LVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYzo3NDA6XFx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IHNhMTExMV9kZXYpO1xcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy03NDEtXFx0aWYgKCFkZXYpIHtcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jPTE3OD1zdGF0aWMgaW50IHNjb29wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYy0xODctXFxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmM6MTg4OlxcdGRldnB0ciA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzY29vcF9kZXYpO1xcbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jLTE4OS1cXHRpZiAoIWRldnB0cilcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYz0xMDg9c3RhdGljIGludCBzZWNvbmRhcnlfYmlnbGl0dGxlX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYy0xMTAtXFx0aWYgKCFjcHVfdnRhYmxlW2NwdV0pXFxuYXJjaC9hcm0va2VybmVsL3NtcC5jOjExMTpcXHRcXHRjcHVfdnRhYmxlW2NwdV0gPSBremFsbG9jX29iaigqY3B1X3Z0YWJsZVtjcHVdKTtcXG5hcmNoL2FybS9rZXJuZWwvc21wLmMtMTEyLVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3Zkc28uYz0xNjk9c3RhdGljIGludCBfX2luaXQgdmRzb19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jLTE4MS1cXHQvKiBBbGxvY2F0ZSB0aGUgVkRTTyB0ZXh0IHBhZ2VsaXN0ICovXFxuYXJjaC9hcm0va2VybmVsL3Zkc28uYzoxODI6XFx0dmRzb190ZXh0X3BhZ2VsaXN0ID0ga3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHRleHRfcGFnZXMpO1xcbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmMtMTgzLVxcdGlmICh2ZHNvX3RleHRfcGFnZWxpc3QgPT0gTlVMTClcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmM9MjYxPWludCBfX2luaXQgZGMyMTI4NV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cylcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMtMjY0LVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmM6MjY1OlxcdHJlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcmVzb3VyY2UsIDIpO1xcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMtMjY2LVxcdGlmICghcmVzKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jPTY5PXN0YXRpYyBpbnQgX19pbml0IGVic2EyODVfbGVkc19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg2LVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmM6ODc6XFx0XFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYy04OC1cXHRcXHRpZiAoIWxlZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYz03MjA9c3RhdGljIGludCBfX2luaXQgbmV0d2luZGVyX2xlZHNfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jLTcyOS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmM6NzMwOlxcdFxcdGxlZCA9IGt6YWxsb2Nfb2JqKCpsZWQpO1xcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYy03MzEtXFx0XFx0aWYgKCFsZWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM9NDczPXN0YXRpYyBpbnQgaW14X21tZGNfcGVyZl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgX19pb21lbSAqbW1kY19iYXNlLFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTQ3OS1cXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM6NDgwOlxcdHBtdV9tbWRjID0ga3phbGxvY19vYmooKnBtdV9tbWRjKTtcXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmMtNDgxLVxcdGlmICghcG11X21tZGMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYz0xMTQ9c3RhdGljIHZvaWQgX19pbml0IGkyY19xdWlyayh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTEyOS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM6MTMwOlxcdFxcdG5ld19jb21wYXQgPSBremFsbG9jX29iaigqbmV3X2NvbXBhdCk7XFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTEzMS1cXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmM9MTYzPXN0YXRpYyB2b2lkIF9faW5pdCBhcm1hZGFfMzc1XzM4MF9jb2hlcmVuY3lfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYy0xODctXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYzoxODg6XFx0XFx0cCA9IGt6YWxsb2Nfb2JqKCpwKTtcXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jLTE4OS1cXHRcXHRwLVxcdTAwM2VuYW1lID0ga3N0cmR1cChcXFwiYXJtLGlvLWNvaGVyZW50XFxcIiwgR0ZQX0tFUk5FTCk7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jPTE0OD1zdGF0aWMgaW50IF9faW5pdCBtdmVidV9zb2NfZGV2aWNlKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jLTE1Ni1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jOjE1NzpcXHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jLTE1OC1cXHRpZiAoIXNvY19kZXZfYXR0cilcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmM9MzgwPXN0YXRpYyB2b2lkIF9faW5pdCBteHNfbWFjaGluZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM4OS1cXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jOjM5MDpcXHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM5MS1cXHRpZiAoIXNvY19kZXZfYXR0cilcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmM9Mjk0PXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX3N5c3RlbV9kbWFfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYy0zMjEtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYzozMjI6XFx0ZCA9IGt6YWxsb2Nfb2JqKCpkKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jLTMyMy1cXHRpZiAoIWQpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYz0yOTI9c3RhdGljIHZvaWQgb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcoc3RydWN0IHJlc291cmNlICpyZXMsIGludCByZXNfY291bnQsXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMtMjk2LVxcbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYzoyOTc6XFx0b21hcF9tY2JzcF9kZXZpY2VzID0ga3phbGxvY19vYmpzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgc2l6ZSk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jLTI5OC1cXHRpZiAoIW9tYXBfbWNic3BfZGV2aWNlcykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jPTUxPXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX2RtX3RpbWVyX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYy0xMjctXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jOjEyODpcXHRcXHRwZGF0YSA9IGt6YWxsb2Nfb2JqKCpwZGF0YSk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jLTEyOS1cXHRcXHRpZiAoIXBkYXRhKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYz0yMzA9dm9pZCBvbWFwMnh4eF9jbGt0X3Zwc19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYy0yMzktXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmM6MjQwOlxcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYy0yNDEtXFx0aWYgKCFodylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYz03ODY9dm9pZCBfX2luaXQgb21hcF9zb2NfZGV2aWNlX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYy03OTAtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jOjc5MTpcXHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMtNzkyLVxcdGlmICghc29jX2Rldl9hdHRyKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jPTEzMT1zdGF0aWMgaW50IG9tYXBfZGV2aWNlX2J1aWxkX2Zyb21fZHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYy0xNTgtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jOjE1OTpcXHRod21vZHMgPSBremFsbG9jX29ianMoc3RydWN0IG9tYXBfaHdtb2QgKiwgb2hfY250KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMtMTYwLVxcdGlmICghaHdtb2RzKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYz0zMzgxPXN0YXRpYyBpbnQgb21hcF9od21vZF9hbGxvY2F0ZV9tb2R1bGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb21hcF9od21vZCAqb2gsXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zMzk0LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjMzOTU6XFx0c3lzYyA9IGt6YWxsb2Nfb2JqKCpzeXNjKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zMzk2LVxcdGlmICghc3lzYylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM0MjQtXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNm9oLVxcdTAwM2VzbGF2ZV9wb3J0cykpIHtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozNDI1OlxcdFxcdG9pID0ga3phbGxvY19vYmooKm9pKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNDI2LVxcdFxcdGlmICghb2kpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYz0zNTEzPWludCBvbWFwX2h3bW9kX2luaXRfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1MjctXFx0aWYgKCFvaCkge1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjM1Mjg6XFx0XFx0b2ggPSBremFsbG9jX29iaigqb2gpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1MjktXFx0XFx0aWYgKCFvaClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1MzgtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUzOTpcXHRcXHRvaC1cXHUwMDNlY2xhc3MgPSBremFsbG9jX29iaigqb2gtXFx1MDAzZWNsYXNzKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTQwLVxcdFxcdGlmICghb2gtXFx1MDAzZWNsYXNzKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmM9Mzc5PXN0YXRpYyBpbnQgX19pbml0IGFteDNfaWRsZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1X25vZGUsIGludCBjcHUpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmMtNDEyLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYzo0MTM6XFx0aWRsZV9zdGF0ZXMgPSBremFsbG9jX29ianMoKmlkbGVfc3RhdGVzLCBzdGF0ZV9jb3VudCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jLTQxNC1cXHRpZiAoIWlkbGVfc3RhdGVzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYz0zMD1zdGF0aWMgdm9pZCBfX2luaXQgc3Jfc2V0X252YWx1ZXMoc3RydWN0IG9tYXBfdm9sdF9kYXRhICp2b2x0X2RhdGEsXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jLTQxLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmM6NDI6XFx0bnZhbHVlX3RhYmxlID0ga3phbGxvY19vYmpzKCpudmFsdWVfdGFibGUsIGNvdW50KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jLTQzLVxcdGlmICghbnZhbHVlX3RhYmxlKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jPTEzOT1zdGF0aWMgaW50IF9faW5pdCBwY2llX3NldHVwKHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy0xNzEtXFx0ICovXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jOjE3MjpcXHRyZXMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmVzb3VyY2UpO1xcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy0xNzMtXFx0aWYgKCFyZXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM9NDY2PXN0YXRpYyBpbnQgX19pbml0IHBjaV9zZXR1cChzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtNDkyLVxcdCAqL1xcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYzo0OTM6XFx0cmVzID0ga3phbGxvY19vYmooc3RydWN0IHJlc291cmNlKTtcXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtNDk0LVxcdGlmICghcmVzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYz02ODk9c3RhdGljIHN0cnVjdCBleHBhbnNpb25fY2FyZCAqX19pbml0IGVjYXJkX2FsbG9jX2NhcmQoaW50IHR5cGUsIGludCBzbG90KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYy02OTQtXFxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYzo2OTU6XFx0ZWMgPSBremFsbG9jX29iaihlY2FyZF90KTtcXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jLTY5Ni1cXHRpZiAoIWVjKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jPTkzPWludCBfX2luaXQgc2ExMXh4X2Nsa19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEwOS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jOjExMDpcXHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMTEtXFx0aWYgKCFodylcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTMxLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM6MTMyOlxcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEzMy1cXHRpZiAoIWh3KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jPTMxNz1pbnQgX19pbml0IHNhMTF4MF9yZWdpc3Rlcl9maXhlZF9yZWd1bGF0b3IoaW50IG4sXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMtMzIzLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYzozMjQ6XFx0Y2ZnLVxcdTAwM2Vpbml0X2RhdGEgPSBpZCA9IGt6YWxsb2Nfb2JqKCpjZmctXFx1MDAzZWluaXRfZGF0YSk7XFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jLTMyNS1cXHRpZiAoIWNmZy1cXHUwMDNlaW5pdF9kYXRhKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYz0yMjU9c3RhdGljIGludCBuZXBvbnNldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jLTI3OC1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jOjI3OTpcXHRkID0ga3phbGxvY19vYmooKmQpO1xcbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMtMjgwLVxcdGlmICghZCkge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmM9MTQxPXN0YXRpYyBpbnQgX19pbml0IHJjYXJfZ2VuMl9yZWd1bGF0b3JfcXVpcmsodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jLTE2Ni1cXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYzoxNjc6XFx0XFx0cXVpcmsgPSBremFsbG9jX29iaigqcXVpcmspO1xcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jLTE2OC1cXHRcXHRpZiAoIXF1aXJrKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYz0zOTM9c3RhdGljIGludCB2ZV9zcGNfcG9wdWxhdGVfb3Bwcyh1aW50MzJfdCBjbHVzdGVyKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtMzk3LVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjM5ODpcXHRvcHBzID0ga3phbGxvY19vYmpzKCpvcHBzLCBNQVhfT1BQUyk7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtMzk5LVxcdGlmICghb3BwcylcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jPTQ0Mj1pbnQgX19pbml0IHZlX3NwY19pbml0KHZvaWQgX19pb21lbSAqYmFzZWFkZHIsIHUzMiBhMTVfY2x1c2lkLCBpbnQgaXJxKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNDQ0LVxcdGludCByZXQ7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6NDQ1OlxcdGluZm8gPSBremFsbG9jX29iaigqaW5mbyk7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNDQ2LVxcdGlmICghaW5mbylcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jPTUyMz1zdGF0aWMgc3RydWN0IGNsayAqdmVfc3BjX2Nsa19yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpjcHVfZGV2KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNTI3LVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjUyODpcXHRzcGMgPSBremFsbG9jX29iaigqc3BjKTtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy01MjktXFx0aWYgKCFzcGMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYz0xMjM9c3RhdGljIHZvaWQgX19pbml0IHZlcnNhdGlsZV9kdF9wY2lfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmMtMTQ0LVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jOjE0NTpcXHRuZXdwcm9wID0ga3phbGxvY19vYmooKm5ld3Byb3ApO1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jLTE0Ni1cXHRpZiAoIW5ld3Byb3ApXFxuLS1cXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmM9MTA1PXN0YXRpYyB2b2lkIF9faW5pdCB6eW5xX2luaXRfbWFjaGluZSh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTExMC1cXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmM6MTExOlxcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYy0xMTItXFx0aWYgKCFzb2NfZGV2X2F0dHIpXFxuLS1cXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jPTUwMz1zdGF0aWMgX19pbml0IGludCBsMngwX3BtdV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jLTUwOS1cXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jOjUxMDpcXHRsMngwX3BtdSA9IGt6YWxsb2Nfb2JqKCpsMngwX3BtdSk7XFxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYy01MTEtXFx0aWYgKCFsMngwX3BtdSkge1xcbi0tXFxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYz0zMTU9c3RhdGljIGludCBfX2luaXQgX191bmlwaGllcl9jYWNoZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuLS1cXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jLTM0NC1cXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jOjM0NTpcXHRkYXRhID0ga3phbGxvY19vYmooKmRhdGEpO1xcbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmMtMzQ2LVxcdGlmICghZGF0YSlcXG4tLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM9NTMzPXN0YXRpYyB2b2lkICpfX2RtYV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpoYW5kbGUsXFxuLS1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTU2MC1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jOjU2MTpcXHRidWYgPSBremFsbG9jX29iaigqYnVmLFxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtNTYyLVxcdFxcdFxcdCAgZ2ZwIFxcdTAwMjYgfihfX0dGUF9ETUEgfCBfX0dGUF9ETUEzMiB8IF9fR0ZQX0hJR0hNRU0pKTtcXG4tLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM9MTQ4Nz1hcm1faW9tbXVfY3JlYXRlX21hcHBpbmcoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGJhc2UsIHU2NCBzaXplKVxcbi0tXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy0xNTA2LVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM6MTUwNzpcXHRtYXBwaW5nID0ga3phbGxvY19vYmooc3RydWN0IGRtYV9pb21tdV9tYXBwaW5nKTtcXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTE1MDgtXFx0aWYgKCFtYXBwaW5nKVxcbi0tXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jPTMxNj1pbnQgX19pbml0IGFyY2hfeGVuX3VucG9wdWxhdGVkX2luaXQoc3RydWN0IHJlc291cmNlICoqcmVzKVxcbi0tXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM0My1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM6MzQ0OlxcdHJlZ3MgPSBremFsbG9jX29ianMoKnJlZ3MsIG5yX3JlZyk7XFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM0NS1cXHRpZiAoIXJlZ3MpIHtcXG4tLVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zODctXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jOjM4ODpcXHRcXHR0bXBfcmVzID0ga3phbGxvY19vYmooKnRtcF9yZXMpO1xcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zODktXFx0XFx0aWYgKCF0bXBfcmVzKSB7XFxuLS1cXG5hcmNoL2FybS94ZW4vcDJtLmM9MTUwPWJvb2wgX19zZXRfcGh5c190b19tYWNoaW5lX211bHRpKHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxuYXJjaC9hcm0veGVuL3AybS5jLTE3OC1cXG5hcmNoL2FybS94ZW4vcDJtLmM6MTc5OlxcdHAybV9lbnRyeSA9IGt6YWxsb2Nfb2JqKCpwMm1fZW50cnksIEdGUF9OT1dBSVQpO1xcbmFyY2gvYXJtL3hlbi9wMm0uYy0xODAtXFx0aWYgKCFwMm1fZW50cnkpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM9Njg9c3RhdGljIGludCBfX2luaXQgX192ZHNvX2luaXQoZW51bSB2ZHNvX2FiaSBhYmkpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMtODMtXFxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jOjg0OlxcdHZkc29fcGFnZWxpc3QgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19pbmZvW2FiaV0udmRzb19wYWdlcyk7XFxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTg1LVxcdGlmICh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz00ODA9c3RhdGljIGludCBzaGFyZV9wZm5faHlwKHU2NCBwZm4pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy00OTItXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6NDkzOlxcdHRoaXMgPSBremFsbG9jX29iaigqdGhpcyk7XFxuYXJjaC9hcm02NC9rdm0vbW11LmMtNDk0LVxcdGlmICghdGhpcykge1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9OTgxPWludCBrdm1faW5pdF9zdGFnZTJfbW11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgdW5zaWduZWQgbG9uZyB0eXBlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwNy1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMDA4OlxcdHBndCA9IGt6YWxsb2Nfb2JqKCpwZ3QsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwOS1cXHRpZiAoIXBndClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTExODA9aW50IHRvcHVwX2h5cF9tZW1jYWNoZShzdHJ1Y3Qga3ZtX2h5cF9tZW1jYWNoZSAqbWMsIHVuc2lnbmVkIGxvbmcgbWluX3BhZ2VzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE4NS1cXHRpZiAoIW1jLVxcdTAwM2VtYXBwaW5nKSB7XFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTE4NjpcXHRcXHRtYy1cXHUwMDNlbWFwcGluZyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBwa3ZtX21hcHBpbmcsXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE4Ny1cXHRcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yNTEwPWludCBfX2luaXQga3ZtX21tdV9pbml0KHUzMiBoeXBfdmFfYml0cylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI1NDMtXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjU0NDpcXHRoeXBfcGd0YWJsZSA9IGt6YWxsb2Nfb2JqKCpoeXBfcGd0YWJsZSk7XFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjU0NS1cXHRpZiAoIWh5cF9wZ3RhYmxlKSB7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMzI4PWludCBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzMzLVxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC52bmNyX3RsYikge1xcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEzMzQ6XFx0XFx0c3RydWN0IHZuY3JfdGxiICp2dCA9IGt6YWxsb2Nfb2JqKCp2Y3B1LVxcdTAwM2VhcmNoLnZuY3JfdGxiLFxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMzUtXFx0XFx0XFx0XFx0XFx0XFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTc5Mz1pbnQga3ZtX2luaXRfbnZfc3lzcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xODAyLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE4MDM6XFx0a3ZtLVxcdTAwM2VhcmNoLnN5c3JlZ19tYXNrcyA9IGt6YWxsb2Nfb2JqKCooa3ZtLVxcdTAwM2VhcmNoLnN5c3JlZ19tYXNrcyksXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwNC1cXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYz0xMTY9c3RhdGljIHN0cnVjdCBrdm1fcHRkdW1wX2d1ZXN0X3N0YXRlICprdm1fcHRkdW1wX3BhcnNlcl9jcmVhdGUoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTEyMS1cXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYzoxMjI6XFx0c3QgPSBremFsbG9jX29iaihzdHJ1Y3Qga3ZtX3B0ZHVtcF9ndWVzdF9zdGF0ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0xMjMtXFx0aWYgKCFzdClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9MjA3PXN0YXRpYyBpbnQga3ZtX3ZnaWNfZGlzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IG5yX3NwaXMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTIxMy1cXHRkaXN0LVxcdTAwM2VhY3RpdmVfc3BpcyA9IChhdG9taWNfdClBVE9NSUNfSU5JVCgwKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jOjIxNDpcXHRkaXN0LVxcdTAwM2VzcGlzID0ga3phbGxvY19vYmpzKHN0cnVjdCB2Z2ljX2lycSwgbnJfc3BpcywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTIxNS1cXHRpZiAoIWRpc3QtXFx1MDAzZXNwaXMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTMxNj1zdGF0aWMgaW50IHZnaWNfYWxsb2NhdGVfcHJpdmF0ZV9pcnFzX2xvY2tlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB0eXBlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0zMzEtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzozMzI6XFx0dmdpY19jcHUtXFx1MDAzZXByaXZhdGVfaXJxcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdmdpY19pcnEsXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0zMzMtXFx0XFx0XFx0XFx0XFx0ICAgICAgbnVtX3ByaXZhdGVfaXJxcyxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jPTE0Mj1pbnQga3ZtX3ZnaWNfc2V0dXBfZGVmYXVsdF9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xNDgtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM6MTQ5OlxcdGVudHJpZXMgPSBremFsbG9jX29ianMoKmVudHJpZXMsIG5yLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTE1MC1cXHRpZiAoIWVudHJpZXMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9NzY9c3RhdGljIHN0cnVjdCB2Z2ljX2lycSAqdmdpY19hZGRfbHBpKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGludGlkLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTg3LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzo4ODpcXHRpcnEgPSBremFsbG9jX29iaihzdHJ1Y3QgdmdpY19pcnEsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTg5LVxcdGlmICghaXJxKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTk2Mj1zdGF0aWMgaW50IHZnaWNfaXRzX2FsbG9jX2NvbGxlY3Rpb24oc3RydWN0IHZnaWNfaXRzICppdHMsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtOTY3LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzo5Njg6XFx0Y29sbGVjdGlvbiA9IGt6YWxsb2Nfb2JqKCpjb2xsZWN0aW9uLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy05NjktXFx0aWYgKCFjb2xsZWN0aW9uKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTEwMDY9c3RhdGljIHN0cnVjdCBpdHNfaXRlICp2Z2ljX2l0c19hbGxvY19pdGUoc3RydWN0IGl0c19kZXZpY2UgKmRldmljZSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMDExLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxMDEyOlxcdGl0ZSA9IGt6YWxsb2Nfb2JqKCppdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTEwMTMtXFx0aWYgKCFpdGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTEzMz1zdGF0aWMgc3RydWN0IGl0c19kZXZpY2UgKnZnaWNfaXRzX2FsbG9jX2RldmljZShzdHJ1Y3QgdmdpY19pdHMgKml0cyxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMTM4LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxMTM5OlxcdGRldmljZSA9IGt6YWxsb2Nfb2JqKCpkZXZpY2UsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTExNDAtXFx0aWYgKCFkZXZpY2UpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTg0Nj1zdGF0aWMgaW50IHZnaWNfaXRzX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xODUzLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxODU0OlxcdGl0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2l0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTg1NS1cXHRpZiAoIWl0cylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM9ODg2PXN0YXRpYyBpbnQgdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdWludDMyX3QgaW5kZXgsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jOjkzMjpcXHRyZHJlZyA9IGt6YWxsb2Nfb2JqKCpyZHJlZywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMy1cXHRpZiAoIXJkcmVnKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmM9MjQyPWludCB2Z2ljX3Y0X2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmMtMjU4LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jOjI1OTpcXHRkaXN0LVxcdTAwM2VpdHNfdm0udnBlcyA9IGt6YWxsb2Nfb2JqcygqZGlzdC1cXHUwMDNlaXRzX3ZtLnZwZXMsIG5yX3ZjcHVzLFxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jLTI2MC1cXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTIwODA9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDEtXFx0aWYgKCFqaXRfZGF0YSkge1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIxMDI6XFx0XFx0aml0X2RhdGEgPSBremFsbG9jX29iaigqaml0X2RhdGEpO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDMtXFx0XFx0aWYgKCFqaXRfZGF0YSlcXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jPTE3PXN0YXRpYyBpbnQgX19pbml0IHZkc29faW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmMtMjItXFx0dmRzb19wYWdlbGlzdCA9XFxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmM6MjM6XFx0XFx0a3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHZkc29fcGFnZXMpO1xcbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jLTI0LVxcdGlmICh1bmxpa2VseSh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpKSB7XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYz00NjY9c3RhdGljIGludCBfX2luaXQgYWRkX2xlZ2FjeV9pc2FfaW8oc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTQ3Mi1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYzo0NzM6XFx0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UsIEdGUF9BVE9NSUMpO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTQ3NC1cXHRpZiAoIXJhbmdlKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYz00NT1zdGF0aWMgaW50IF9faW5pdCBpbml0X3Zkc28odm9pZClcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmMtNTUtXFx0dmRzb19pbmZvLmNvZGVfbWFwcGluZy5wYWdlcyA9XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYzo1NjpcXHRcXHRremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19pbmZvLnNpemUgLyBQQUdFX1NJWkUpO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmMtNTctXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9NjE0PXN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTYyNC1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM6NjI1OlxcdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMpO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy02MjYtXFx0aWYgKCFzKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9Mzk0PXN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy00MTEtXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6NDEyOlxcdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9vbmdhcmNoX2lwaSk7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtNDEzLVxcdGlmICghcylcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6MjI6MjkuNDQ4MTYzMzczWiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1ODQ1MDg5MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEdVUCBUZXN0IERhdGEgU3RydWN0dXJlKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBJIHNlZSB0aGV5J3JlIHN3YXBwaW5nIG91dCB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgdGhlIEdVUCB0ZXN0IHdpdGggYSBwZXItZmlsZSBzdHJ1Y3R1cmUuIFRoYXQncyBhIGdvb2QgY2hhbmdlLCBtYWtlcyB0aGluZ3MgY2xlYW5lciBhbmQgcG90ZW50aWFsbHkgYWxsb3dzIGZvciBtdWx0aXBsZSBjb25jdXJyZW50IHRlc3RzLCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgZ2xvYmFsIHN0YXRlLiBUaGUga2V5IGhlcmUgaXMgdGhlIGBremFsbG9jX29iamAgY2FsbCBpbiBgZ3VwX3Rlc3Rfb3BlbmAuIFRoYXQncyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKWAuICBTbywgdGhhdCB6ZXJvLWluaXRpYWxpemVzIHRoZSBgZ3VwX3Rlc3RfZGF0YWAgc3RydWN0dXJlLCB3aGljaCBpcyBpbXBvcnRhbnQuIFRoaXMgZW5zdXJlcyBldmVyeXRoaW5nIHN0YXJ0cyBjbGVhbiwgd2hpY2ggYXZvaWRzIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZSBtdXRleCBpcyBiZWluZyBwcm9wZXJseSBpbml0aWFsaXplZCB3aXRoIGBtdXRleF9pbml0YCwgd2hpY2ggaXMgY29ycmVjdC4gVGhlIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAgYXNzaWdubWVudCBpcyBzdGFuZGFyZCBwcmFjdGljZSwgYXNzb2NpYXRpbmcgdGhlIGRhdGEgc3RydWN0dXJlIHdpdGggdGhlIGZpbGUgb3BlcmF0aW9uLlxuXG5UaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludm9sdmUgbW92aW5nIHRoZSBwYWdlIGFycmF5IGFuZCBtdXRleCBmcm9tIGdsb2JhbCBzY29wZSB0byB0aGlzIHBlci1maWxlIHN0cnVjdHVyZS4gVGhlIGtleSBmdW5jdGlvbnMsIGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydGAgYW5kIGBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkYCwgbm93IHRha2UgYSBgc3RydWN0IGd1cF90ZXN0X2RhdGEgKmAgYXMgYW4gYXJndW1lbnQuICBMb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBJIGNhbiBzZWUgdGhhdCB0aGUgY29kZSBpcyBjb3JyZWN0bHkgdXBkYXRpbmcgdG8gdXNlIHRoZSBwZXItZmlsZSBkYXRhOyByZXBsYWNpbmcgYWxsIGluc3RhbmNlcyBvZiB0aGUgb2xkIGdsb2JhbCB2YXJpYWJsZSByZWZlcmVuY2VzIHRvIHRoZSBkYXRhIHN0cnVjdHVyZS5cblxuVGhlIHBhcnQgdGhhdCBjYXVnaHQgbXkgYXR0ZW50aW9uIHdhcyB0aGUgYGNvcHlfdG9fdXNlcmAgaW4gYHBpbl9sb25ndGVybV90ZXN0X3JlYWRgLiBCdXQgaXQncyB0cmFuc2ZlcnJpbmcgZGF0YSB0aGF0IGNhbWUgZnJvbSB1c2VyIHNwYWNlIG9yaWdpbmFsbHkuIEl0J3MgZXNzZW50aWFsbHkgXCJyb3VuZC10cmlwcGluZ1wiIHVzZXIgZGF0YSBiYWNrIHRvIHVzZXIgc3BhY2UgdmlhIHRoZSBwaW5uZWQgcGFnZXMuIFRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBpbmZvcm1hdGlvbiBsZWFrcywgYXMgdGhlIHVzZXIgbWVtb3J5IGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGEsIGFuZCBpdCdzIHNpbXBseSBjb3BpZWQgYmFjayB0byB0aGUgc2FtZSBhZGRyZXNzIHNwYWNlLiAgSXQncyBqdXN0IHRoZSBzdG9yYWdlIGZvciB0aGF0IG1lbW9yeSAodGhlIHBhZ2UgcG9pbnRlcnMpIHRoYXQncyBiZWVuIGNoYW5nZWQuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBhbGxvY2F0aW9ucy4gVGhlIGBwYWdlc2AgYXJyYXkgaXRzZWxmIGlzbid0IGRpcmVjdGx5IHNob3duIGhlcmUsIEknbSBnb2luZyB0byBoYXZlIHRvIGRpZyBhcm91bmQgYHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0YCBmb3IgdGhhdC4gQWgsIGhlcmUgaXQgaXM6IHRoZSBtZW1vcnkgZm9yIHRoZSBgcGFnZXNgIGFycmF5IGlzIGFsbG9jYXRlZCB3aXRoIGBrdm1hbGxvY19hcnJheWAuIFRoYXQncyBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBrZXJuZWwgbWVtb3J5IGFycmF5LiBJdCBtYWtlcyBzZW5zZSB0aGF0IGBrdmZyZWVgIGlzIHVzZWQgbGF0ZXIgb24gdG8gcmVsZWFzZSB0aGF0IGFsbG9jYXRpb24uXG5cblNvLCBzdW1taW5nIHVwLCB0aGlzIHBhdGNoIGlzIGEgY2xlYW4gcmVmYWN0b3JpbmcuIEl0IG1vdmVzIHRoZSB0ZXN0J3Mgc3RhdGUgaW50byBhIHBlci1maWxlIHN0cnVjdHVyZSwgcHJvcGVybHkgaW5pdGlhbGl6ZXMgdGhhdCBzdHJ1Y3R1cmUgdmlhIGBremFsbG9jX29iamAsIGFuZCBjb3JyZWN0bHkgaGFuZGxlcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIHJvdW5kLXRyaXAgb2YgdXNlciBkYXRhIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBiZWNhdXNlIG9mIHRoZSB6ZXJvaW5nIGFuZCBpbml0aWFsaXphdGlvbiwgYW5kIHRoZSBkYXRhIGJlaW5nIGNvcGllZCBpcyBvcmlnaW5hdGluZyBmcm9tIHVzZXIgc3BhY2UuIEl0J3Mgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjIyOjQ1LjI5MzI1NTU1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MTgxMjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bWFsbG9jX2FycmF5LipwYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9ndXBfdGVzdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMjoyMjo0NS4zNDAwODE1ODFaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1OTI4MzQzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEdVUCBMb25nLVRlcm0gVGVzdCBTdGFydCoqXG5cbk9rYXksIGxldCdzIGRpdmUgc3RyYWlnaHQgaW50byBgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnRgIHdpdGhpbiBgbW0vZ3VwX3Rlc3QuY2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGxvbmctdGVybSB0ZXN0IHNlcXVlbmNlIGJlZ2lucyBmb3IgdGhlIEdVUCAoZ2V0X3VzZXJfcGFnZXMpIHN1YnN5c3RlbS4gV2hhdCBhcmUgdGhlIGluaXRpYWwgc2V0dXAgc3RlcHM/IFdoYXQgcGFyYW1ldGVycyBhcmUgYmVpbmcgY29uZmlndXJlZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIHRoYXQgbWlnaHQgYmUgcHJvbmUgdG8gY29udGVudGlvbiBvciByYWNlIGNvbmRpdGlvbnMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiBpbW1lZGlhdGVseT8gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZyYW1ld29yayB0aGlzIHRlc3QgdXRpbGl6ZXMuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IHNldHMgdXAgdGhlIG1lbW9yeSByZWdpb25zLCBhbnkgdXNlIG9mIHNwZWNpYWxpemVkIHBhZ2Ugc3RydWN0dXJlcyBvciBtYXBwaW5ncywgYW5kIGhvdyB0aGUgdGVzdCBoYXJuZXNzZXMgdGhlIEdVUCBpbnRlcmZhY2UgdG8gc2ltdWxhdGUgcmVhbGlzdGljIG9yIHN0cmVzc2Z1bCBzY2VuYXJpb3MuIEknbSBhc3N1bWluZyBpdCdzIHByb2JhYmx5IHVzaW5nIGEgY29tYmluYXRpb24gb2YgZGlyZWN0IGFuZCBpbmRpcmVjdCBHVVAgY2FsbHMsIHBlcmhhcHMgd2l0aCBwaW5uZWQgcGFnZXMgdG8gbWltaWMgc29tZSByZWFsLXdvcmxkIGFwcGxpY2F0aW9uIGJlaGF2aW9yLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGVzdGFibGlzaCB0aGUgYmFzZWxpbmUgYW5kIHRoZSB0ZXN0IGVudmlyb25tZW50OyB0aGVuLCBmcm9tIHRoZXJlLCBJIGNhbiBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzcwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6MjI6NDkuMjk5MzY4MjIxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9ndXBfdGVzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjA6XFx0XFx0XFx0aWYgKGRhdGEtXFx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzKVxcbiAyMjE6XFx0XFx0XFx0XFx0dW5waW5fdXNlcl9wYWdlcyhkYXRhLVxcdTAwM2Vsb25ndGVybV9wYWdlcyxcXG4gMjIyOlxcdFxcdFxcdFxcdFxcdFxcdCBkYXRhLVxcdTAwM2Vsb25ndGVybV9ucl9wYWdlcyk7XFxuIDIyMzpcXHRcXHRcXHRrdmZyZWUoZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpO1xcbiAyMjQ6XFx0XFx0XFx0ZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fcGFnZXMgPSBOVUxMO1xcbiAyMjU6XFx0XFx0XFx0ZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgPSAwO1xcbiAyMjY6XFx0XFx0fVxcbiAyMjc6XFx0fVxcbiAyMjg6XFx0XFxuIDIyOTpcXHRzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydChzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSxcXG4gMjMwOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbiAyMzE6XFx0e1xcbiAyMzI6XFx0XFx0bG9uZyBucl9wYWdlcywgY3VyX3BhZ2VzLCBhZGRyLCByZW1haW5pbmdfcGFnZXM7XFxuIDIzMzpcXHRcXHRpbnQgZ3VwX2ZsYWdzID0gRk9MTF9MT05HVEVSTTtcXG4gMjM0OlxcdFxcdHN0cnVjdCBwaW5fbG9uZ3Rlcm1fdGVzdCBhcmdzO1xcbiAyMzU6XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlcztcXG4gMjM2OlxcdFxcdGludCByZXQgPSAwO1xcbiAyMzc6XFx0XFx0Ym9vbCBmYXN0O1xcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRpZiAoZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpXFxuIDI0MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjQxOlxcdFxcbiAyNDI6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZhcmdzLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihhcmdzKSkpXFxuIDI0MzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0aWYgKGFyZ3MuZmxhZ3MgXFx1MDAyNlxcbiAyNDY6XFx0XFx0ICAgIH4oUElOX0xPTkdURVJNX1RFU1RfRkxBR19VU0VfV1JJVEV8UElOX0xPTkdURVJNX1RFU1RfRkxBR19VU0VfRkFTVCkpXFxuIDI0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjQ4OlxcdFxcdGlmICghSVNfQUxJR05FRChhcmdzLmFkZHIgfCBhcmdzLnNpemUsIFBBR0VfU0laRSkpXFxuIDI0OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjUwOlxcdFxcdGlmIChhcmdzLnNpemUgXFx1MDAzZSBMT05HX01BWClcXG4gMjUxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyNTI6XFx0XFx0bnJfcGFnZXMgPSBhcmdzLnNpemUgLyBQQUdFX1NJWkU7XFxuIDI1MzpcXHRcXHRpZiAoIW5yX3BhZ2VzKVxcbiAyNTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDI1NTpcXHRcXG4gMjU2OlxcdFxcdHBhZ2VzID0ga3ZjYWxsb2MobnJfcGFnZXMsIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMKTtcXG4gMjU3OlxcdFxcdGlmICghcGFnZXMpXFxuIDI1ODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjU5OlxcdFxcbiAyNjA6XFx0XFx0aWYgKGFyZ3MuZmxhZ3MgXFx1MDAyNiBQSU5fTE9OR1RFUk1fVEVTVF9GTEFHX1VTRV9XUklURSlcXG4gMjYxOlxcdFxcdFxcdGd1cF9mbGFncyB8PSBGT0xMX1dSSVRFO1xcbiAyNjI6XFx0XFx0ZmFzdCA9ICEhKGFyZ3MuZmxhZ3MgXFx1MDAyNiBQSU5fTE9OR1RFUk1fVEVTVF9GTEFHX1VTRV9GQVNUKTtcXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0aWYgKCFmYXN0IFxcdTAwMjZcXHUwMDI2IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGN1cnJlbnQtXFx1MDAzZW1tKSkge1xcbiAyNjU6XFx0XFx0XFx0a3ZmcmVlKHBhZ2VzKTtcXG4gMjY2OlxcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuIDI2NzpcXHRcXHR9XFxuIDI2ODpcXHRcXG4gMjY5OlxcdFxcdGRhdGEtXFx1MDAzZWxvbmd0ZXJtX3BhZ2VzID0gcGFnZXM7XFxuIDI3MDpcXHRcXHRkYXRhLVxcdTAwM2Vsb25ndGVybV9ucl9wYWdlcyA9IDA7XFxuIDI3MTpcXHRcXG4gMjcyOlxcdFxcdHdoaWxlIChucl9wYWdlcyAtIGRhdGEtXFx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzKSB7XFxuIDI3MzpcXHRcXHRcXHRyZW1haW5pbmdfcGFnZXMgPSBucl9wYWdlcyAtIGRhdGEtXFx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzO1xcbiAyNzQ6XFx0XFx0XFx0YWRkciA9IGFyZ3MuYWRkciArIGRhdGEtXFx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzICogUEFHRV9TSVpFO1xcbiAyNzU6XFx0XFxuIDI3NjpcXHRcXHRcXHRpZiAoZmFzdClcXG4gMjc3OlxcdFxcdFxcdFxcdGN1cl9wYWdlcyA9IHBpbl91c2VyX3BhZ2VzX2Zhc3QoYWRkciwgcmVtYWluaW5nX3BhZ2VzLFxcbiAyNzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Z3VwX2ZsYWdzLCBwYWdlcyk7XFxuIDI3OTpcXHRcXHRcXHRlbHNlXFxuIDI4MDpcXHRcXHRcXHRcXHRjdXJfcGFnZXMgPSBwaW5fdXNlcl9wYWdlcyhhZGRyLCByZW1haW5pbmdfcGFnZXMsXFxuIDI4MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBndXBfZmxhZ3MsIHBhZ2VzKTtcXG4gMjgyOlxcdFxcdFxcdGlmIChjdXJfcGFnZXMgXFx1MDAzYyAwKSB7XFxuIDI4MzpcXHRcXHRcXHRcXHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpO1xcbiAyODQ6XFx0XFx0XFx0XFx0cmV0ID0gY3VyX3BhZ2VzO1xcbiAyODU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI4NjpcXHRcXHRcXHR9XFxuIDI4NzpcXHRcXHRcXHRkYXRhLVxcdTAwM2Vsb25ndGVybV9ucl9wYWdlcyArPSBjdXJfcGFnZXM7XFxuIDI4ODpcXHRcXHRcXHRwYWdlcyArPSBjdXJfcGFnZXM7XFxuIDI4OTpcXHRcXHR9XFxuIDI5MDpcXHRcXG4gMjkxOlxcdFxcdGlmICghZmFzdClcXG4gMjkyOlxcdFxcdFxcdG1tYXBfcmVhZF91bmxvY2soY3VycmVudC1cXHUwMDNlbW0pO1xcbiAyOTM6XFx0XFx0cmV0dXJuIHJldDtcXG4gMjk0OlxcdH1cXG4gMjk1OlxcdFxcbiAyOTY6XFx0c3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZChzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSxcXG4gMjk3OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbiAyOTg6XFx0e1xcbiAyOTk6XFx0XFx0X191NjQgdXNlcl9hZGRyO1xcbiAzMDA6XFx0XFx0dW5zaWduZWQgbG9uZyBpO1xcbiAzMDE6XFx0XFxuIDMwMjpcXHRcXHRpZiAoIWRhdGEtXFx1MDAzZWxvbmd0ZXJtX3BhZ2VzKVxcbiAzMDM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMwNDpcXHRcXG4gMzA1OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2dXNlcl9hZGRyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZih1c2VyX2FkZHIpKSlcXG4gMzA2OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAzMDc6XFx0XFxuIDMwODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXM7IGkrKykge1xcbiAzMDk6XFx0XFx0XFx0dm9pZCAqYWRkciA9IGttYXBfbG9jYWxfcGFnZShkYXRhLVxcdTAwM2Vsb25ndGVybV9wYWdlc1tpXSk7XFxuIDMxMDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHJldDtcXG4gMzExOlxcdFxcbiAzMTI6XFx0XFx0XFx0cmV0ID0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXVzZXJfYWRkciwgYWRkcixcXG4gMzEzOlxcdFxcdFxcdFxcdFxcdCAgIFBBR0VfU0laRSk7XFxuIDMxNDpcXHRcXHRcXHRrdW5tYXBfbG9jYWwoYWRkcik7XFxuIDMxNTpcXHRcXHRcXHRpZiAocmV0KVxcbiAzMTY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDMxNzpcXHRcXHRcXHR1c2VyX2FkZHIgKz0gUEFHRV9TSVpFO1xcbiAzMTg6XFx0XFx0fVxcbiAzMTk6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjIyOjQ5LjI5OTQ5OTE0MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTQ5Mjk2MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIGFsbG9jYXRpb24gb2YgdGhlIGBwYWdlc2AgYXJyYXkgdXNpbmcgYGt2Y2FsbG9jYCBhbmQgdGhlIGBzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YWAgd2l0aCBga3phbGxvY19vYmpgLCB3aXRoIHRoZWlyIHplcm8taW5pdGlhbGl6YXRpb24sIGFyZSBnb29kIHNpZ25zLiBJdCBtZWFucyB3ZSdyZSBzdGFydGluZyBjbGVhbiwgd2hpY2ggaGVscHMgbWl0aWdhdGUgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBJIGNhbiBzZWUgbm8gaW1tZWRpYXRlIHJlZCBmbGFncyBpbiB0aGF0IGFyZWEuXG5cblRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGZvY3VzZWQgb24gc3RydWN0dXJhbCBjaGFuZ2VzIOKAkyBzcGVjaWZpY2FsbHksIG1vdmluZyBnbG9iYWwgc3RhdGUgdG8gYSBwZXItZmlsZSBiYXNpcy4gVGhhdCdzIGEgcmVhc29uYWJsZSByZWZhY3RvcmluZyBhcHByb2FjaCwgYnV0IGl0IGNhbiBzb21ldGltZXMgaW50cm9kdWNlIHN1YnRsZSBidWdzLiBIb3dldmVyLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlLCBhbnkgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlIGNoYW5nZSB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgZWl0aGVyIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgbWVtb3J5IGxlYWtzLlxuXG5HaXZlbiB0aGF0IHRoZXNlIGtpbmRzIG9mIGJ1Z3MgYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgbGVhayBkZXRlY3RvcnMsIEkgZG9uJ3Qgc2VlIGEgc3Ryb25nIGp1c3RpZmljYXRpb24gZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBhdCB0aGlzIHBvaW50LiBJJ20gcmVhc29uYWJseSBjb25maWRlbnQgdGhlIGV4aXN0aW5nIHRvb2xzIHdpbGwgY2F0Y2ggYW55IGlzc3Vlcy5cblxuSSdtIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgZ3VwX3Rlc3Rfb3BlbmAgYW5kIGBndXBfdGVzdF9yZWxlYXNlYCBmdW5jdGlvbnMgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBtaXNzZWQgaW5pdGlhbGl6YXRpb25zIG9yIGltcHJvcGVyIGNsZWFudXAuIEhtbSwgbGV0J3Mgc2VlLi4uXG5cblllcCwgYGd1cF90ZXN0X29wZW5gIGFsbG9jYXRlcyB0aGUgYGRhdGFgIHN0cnVjdCB3aXRoIGBremFsbG9jX29iamAgYW5kIGluaXRpYWxpemVzIHRoZSBtdXRleCwgYXNzaWducyBgZGF0YWAgdG8gdGhlIGZpbGUncyBwcml2YXRlIGRhdGEgZmllbGQuIFRoZSBgZ3VwX3Rlc3RfcmVsZWFzZWAgZnVuY3Rpb24gcHJvcGVybHkgY2FsbHMgdGhlIGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wYCwgZGVzdHJveXMgdGhlIG11dGV4LCBhbmQgZnJlZXMgdGhlIGRhdGEgc3RydWN0dXJlLCBhbmQgbnVsbHMgdGhlIHByaXZhdGUgZGF0YSBmaWVsZC4gRXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkgYW5kIGRlYWxsb2NhdGVkIGFwcHJvcHJpYXRlbHkuXG5cbkFscmlnaHQsIGFmdGVyIHRoaXMgcXVpY2sgc2NhbiwgSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCBubyBLTVNBTiBpcyBuZWVkZWQuIFRoZSBjb2RlIGxvb2tzIHNvdW5kIGFuZCB3ZWxsLW1hbmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTQ5LCJPdXRwdXRUb2tlbnMiOjIxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjIyOjU3Ljg0ODc5ODI0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgcGluX2xvbmd0ZXJtX3Rlc3RgIGluIGBtbS9ndXBfdGVzdC5jYCB0byB1c2UgYSBwZXItZmlsZSBkYXRhIHN0cnVjdHVyZSAoYHN0cnVjdCBndXBfdGVzdF9kYXRhYCkgaW5zdGVhZCBvZiBnbG9iYWwgdmFyaWFibGVzLCBhbGxvd2luZyBjb25jdXJyZW50IHVzZXJzIG9mIHRoZSBndXBfdGVzdCBpb2N0bC4gVGhlIG5ldyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgYWxsIGZpZWxkcy4gVGhlIGFycmF5IG9mIHBhZ2UgcG9pbnRlcnMgaXMgYWxsb2NhdGVkIHVzaW5nIGBrdmNhbGxvY2AsIHdoaWNoIGFsc28gemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5LiBUaGUgb25seSBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIHRoZSBjb250ZW50IG9mIHRoZSBwaW5uZWQgdXNlciBwYWdlcywgd2hpY2ggaXMgaWRlbnRpY2FsIHRvIHRoZSBwcmUtcGF0Y2ggYmVoYXZpb3IgYW5kIGRvZXMgbm90IGxlYWsga2VybmVsIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHBpbl9sb25ndGVybV90ZXN0YCBpbiBgbW0vZ3VwX3Rlc3QuY2AgdG8gdXNlIGEgcGVyLWZpbGUgZGF0YSBzdHJ1Y3R1cmUgKGBzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YWApIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcywgYWxsb3dpbmcgY29uY3VycmVudCB1c2VycyBvZiB0aGUgZ3VwX3Rlc3QgaW9jdGwuIFRoZSBuZXcgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIGFsbCBmaWVsZHMuIFRoZSBhcnJheSBvZiBwYWdlIHBvaW50ZXJzIGlzIGFsbG9jYXRlZCB1c2luZyBga3ZjYWxsb2NgLCB3aGljaCBhbHNvIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeS4gVGhlIG9ubHkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSBpcyB0aGUgY29udGVudCBvZiB0aGUgcGlubmVkIHVzZXIgcGFnZXMsIHdoaWNoIGlzIGlkZW50aWNhbCB0byB0aGUgcHJlLXBhdGNoIGJlaGF2aW9yIGFuZCBkb2VzIG5vdCBsZWFrIGtlcm5lbCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbWVtb3J5IGxlYWtzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd48gz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 11:57:33 +0000 UTC FinishedAt: 2026-08-10 12:23:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "17e5919bdca144d4e67337f53bf57d7811f62192", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GUP_TEST" ], "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": "17e5919bdca144d4e67337f53bf57d7811f62192", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GUP_TEST" ], "series_id": "c5ce1eb9-431a-4444-bf22-c09a9500ea50" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "gup_test_open", "gup_test_release", "gup_test_ioctl", "pin_longterm_test_ioctl" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dVUF9URVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3VwX3Rlc3Rfb3BlbiYjMzQ7LAogICAgJiMzNDtndXBfdGVzdF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2d1cF90ZXN0X2lvY3RsJiMzNDssCiAgICAmIzM0O3Bpbl9sb25ndGVybV90ZXN0X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgcGluX2xvbmd0ZXJtX3Rlc3RgIGluIGBtbS9ndXBfdGVzdC5jYCB0byB1c2UgYSBwZXItZmlsZSBkYXRhIHN0cnVjdHVyZSAoYHN0cnVjdCBndXBfdGVzdF9kYXRhYCkgaW5zdGVhZCBvZiBnbG9iYWwgdmFyaWFibGVzLCBhbGxvd2luZyBjb25jdXJyZW50IHVzZXJzIG9mIHRoZSBndXBfdGVzdCBpb2N0bC4gVGhlIG5ldyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgYWxsIGZpZWxkcy4gVGhlIGFycmF5IG9mIHBhZ2UgcG9pbnRlcnMgaXMgYWxsb2NhdGVkIHVzaW5nIGBrdmNhbGxvY2AsIHdoaWNoIGFsc28gemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5LiBUaGUgb25seSBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIHRoZSBjb250ZW50IG9mIHRoZSBwaW5uZWQgdXNlciBwYWdlcywgd2hpY2ggaXMgaWRlbnRpY2FsIHRvIHRoZSBwcmUtcGF0Y2ggYmVoYXZpb3IgYW5kIGRvZXMgbm90IGxlYWsga2VybmVsIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZ3VwX3Rlc3QgZGVidWdmcyBpbnRlcmZhY2UgdG8gdXNlIHBlci1maWxlIGRlc2NyaXB0b3Igc3RhdGUgaW5zdGVhZCBvZiBnbG9iYWwgc3RhdGUgZm9yIHRoZSBQSU5fTE9OR1RFUk1fVEVTVF8qIGlvY3RscywgZml4aW5nIGNvbmN1cnJlbmN5IGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGEgdGVzdCBtb2R1bGUgdGhhdCBleHBvc2VzIGtlcm5lbCBBUElzIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIGNvbmN1cnJlbmN5IGZpeCBpcyBjb3JyZWN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgbmV3IGlzc3VlcyBsaWtlIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI2YWY2Nzk1ZGE4OTE2NGJiOTFmMmJhOWJhNjM4ZWQ0YzNmNzU2MmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxMjoyMTo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9ndXBfdGVzdC5jIGIvbW0vZ3VwX3Rlc3QuY1xuaW5kZXggZWI0YzljZGExNmVkOC4uNDRjMWNkZmI5YzM3MSAxMDA2NDRcbi0tLSBhL21tL2d1cF90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2d1cF90ZXN0LmNcbkBAIC04LDYgJiM0Mzs4LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGlnaG1lbS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7Z3VwX3Rlc3QuaFwmIzM0O1xuIFxuJiM0MztzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSB7XG4mIzQzO1x0c3RydWN0IG11dGV4IGxvbmd0ZXJtX211dGV4O1xuJiM0MztcdHN0cnVjdCBwYWdlICoqbG9uZ3Rlcm1fcGFnZXM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsb25ndGVybV9ucl9wYWdlcztcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIHZvaWQgcHV0X2JhY2tfcGFnZXModW5zaWduZWQgaW50IGNtZCwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbiBcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCB1bnNpZ25lZCBpbnQgZ3VwX3Rlc3RfZmxhZ3MpXG4ge1xuQEAgLTIwOCwyMyAmIzQzOzIxNCwyMCBAQCBzdGF0aWMgaW50IF9fZ3VwX3Rlc3RfaW9jdGwodW5zaWduZWQgaW50IGNtZCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBERUZJTkVfTVVURVgocGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpO1xuLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKnBpbl9sb25ndGVybV90ZXN0X3BhZ2VzO1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzO1xuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKHZvaWQpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhKVxuIHtcbi1cdGlmIChwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcykge1xuLVx0XHRpZiAocGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMpXG4tXHRcdFx0dW5waW5fdXNlcl9wYWdlcyhwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcyxcbi1cdFx0XHRcdFx0IHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzKTtcbi1cdFx0a3ZmcmVlKHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzKTtcbi1cdFx0cGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMgPSBOVUxMO1xuLVx0XHRwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyA9IDA7XG4mIzQzO1x0aWYgKGRhdGEtXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpIHtcbiYjNDM7XHRcdGlmIChkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzKVxuJiM0MztcdFx0XHR1bnBpbl91c2VyX3BhZ2VzKGRhdGEtXHUwMDNlbG9uZ3Rlcm1fcGFnZXMsXG4mIzQzO1x0XHRcdFx0XHQgZGF0YS1cdTAwM2Vsb25ndGVybV9ucl9wYWdlcyk7XG4mIzQzO1x0XHRrdmZyZWUoZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcyk7XG4mIzQzO1x0XHRkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzID0gTlVMTDtcbiYjNDM7XHRcdGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgPSAwO1xuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydCh1bnNpZ25lZCBsb25nIGFyZylcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4gXHRsb25nIG5yX3BhZ2VzLCBjdXJfcGFnZXMsIGFkZHIsIHJlbWFpbmluZ19wYWdlcztcbiBcdGludCBndXBfZmxhZ3MgPSBGT0xMX0xPTkdURVJNO1xuQEAgLTIzMyw3ICYjNDM7MjM2LDcgQEAgc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpXG4gXHRpbnQgcmV0ID0gMDtcbiBcdGJvb2wgZmFzdDtcbiBcbi1cdGlmIChwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcylcbiYjNDM7XHRpZiAoZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YXJncywgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoYXJncykpKVxuQEAgLTI2MywxMiAmIzQzOzI2NiwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydCh1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0cmV0dXJuIC1FSU5UUjtcbiBcdH1cbiBcbi1cdHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzID0gcGFnZXM7XG4tXHRwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyA9IDA7XG4mIzQzO1x0ZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcyA9IHBhZ2VzO1xuJiM0MztcdGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgPSAwO1xuIFxuLVx0d2hpbGUgKG5yX3BhZ2VzIC0gcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMpIHtcbi1cdFx0cmVtYWluaW5nX3BhZ2VzID0gbnJfcGFnZXMgLSBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcztcbi1cdFx0YWRkciA9IGFyZ3MuYWRkciAmIzQzOyBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyAqIFBBR0VfU0laRTtcbiYjNDM7XHR3aGlsZSAobnJfcGFnZXMgLSBkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzKSB7XG4mIzQzO1x0XHRyZW1haW5pbmdfcGFnZXMgPSBucl9wYWdlcyAtIGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXM7XG4mIzQzO1x0XHRhZGRyID0gYXJncy5hZGRyICYjNDM7IGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgKiBQQUdFX1NJWkU7XG4gXG4gXHRcdGlmIChmYXN0KVxuIFx0XHRcdGN1cl9wYWdlcyA9IHBpbl91c2VyX3BhZ2VzX2Zhc3QoYWRkciwgcmVtYWluaW5nX3BhZ2VzLFxuQEAgLTI3NywxMSAmIzQzOzI4MCwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydCh1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0XHRjdXJfcGFnZXMgPSBwaW5fdXNlcl9wYWdlcyhhZGRyLCByZW1haW5pbmdfcGFnZXMsXG4gXHRcdFx0XHRcdFx0ICAgZ3VwX2ZsYWdzLCBwYWdlcyk7XG4gXHRcdGlmIChjdXJfcGFnZXMgXHUwMDNjIDApIHtcbi1cdFx0XHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKCk7XG4mIzQzO1x0XHRcdHBpbl9sb25ndGVybV90ZXN0X3N0b3AoZGF0YSk7XG4gXHRcdFx0cmV0ID0gY3VyX3BhZ2VzO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzICYjNDM7PSBjdXJfcGFnZXM7XG4mIzQzO1x0XHRkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzICYjNDM7PSBjdXJfcGFnZXM7XG4gXHRcdHBhZ2VzICYjNDM7PSBjdXJfcGFnZXM7XG4gXHR9XG4gXG5AQCAtMjkwLDE5ICYjNDM7MjkzLDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZCh1bnNpZ25lZCBsb25nIGFyZylcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZChzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbiBcdF9fdTY0IHVzZXJfYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbi1cdGlmICghcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpXG4mIzQzO1x0aWYgKCFkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ1c2VyX2FkZHIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKHVzZXJfYWRkcikpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR2b2lkICphZGRyID0ga21hcF9sb2NhbF9wYWdlKHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzW2ldKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dm9pZCAqYWRkciA9IGttYXBfbG9jYWxfcGFnZShkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzW2ldKTtcbiBcdFx0dW5zaWduZWQgbG9uZyByZXQ7XG4gXG4gXHRcdHJldCA9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyl1c2VyX2FkZHIsIGFkZHIsXG5AQCAtMzE4LDI1ICYjNDM7MzIyLDI2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3JlYWQodW5zaWduZWQgbG9uZyBhcmcpXG4gc3RhdGljIGxvbmcgcGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLFxuIFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSA9IGZpbGVwLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdGludCByZXQgPSAtRUlOVkFMO1xuIFxuLVx0aWYgKG11dGV4X2xvY2tfa2lsbGFibGUoXHUwMDI2cGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpKVxuJiM0MztcdGlmIChtdXRleF9sb2NrX2tpbGxhYmxlKFx1MDAyNmRhdGEtXHUwMDNlbG9uZ3Rlcm1fbXV0ZXgpKVxuIFx0XHRyZXR1cm4gLUVJTlRSO1xuIFxuIFx0c3dpdGNoIChjbWQpIHtcbiBcdGNhc2UgUElOX0xPTkdURVJNX1RFU1RfU1RBUlQ6XG4tXHRcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KGFyZyk7XG4mIzQzO1x0XHRyZXQgPSBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydChkYXRhLCBhcmcpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgUElOX0xPTkdURVJNX1RFU1RfU1RPUDpcbi1cdFx0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcCgpO1xuJiM0MztcdFx0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChkYXRhKTtcbiBcdFx0cmV0ID0gMDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFBJTl9MT05HVEVSTV9URVNUX1JFQUQ6XG4tXHRcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoYXJnKTtcbiYjNDM7XHRcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoZGF0YSwgYXJnKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2cGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZkYXRhLVx1MDAzZWxvbmd0ZXJtX211dGV4KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTM3NSwxNSAmIzQzOzM4MCw0MCBAQCBzdGF0aWMgbG9uZyBndXBfdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZ3VwX3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XG4mIzQzO1x0aWYgKCFkYXRhKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldCA9IG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGtmcmVlKGRhdGEpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2ZGF0YS1cdTAwM2Vsb25ndGVybV9tdXRleCk7XG4mIzQzO1x0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBkYXRhO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZ3VwX3Rlc3RfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKCk7XG4mIzQzO1x0c3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChkYXRhKTtcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNmRhdGEtXHUwMDNlbG9uZ3Rlcm1fbXV0ZXgpO1xuJiM0MztcdGtmcmVlKGRhdGEpO1xuJiM0MztcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gTlVMTDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBndXBfdGVzdF9mb3BzID0ge1xuLVx0Lm9wZW4gPSBub25zZWVrYWJsZV9vcGVuLFxuJiM0MztcdC5vcGVuID0gZ3VwX3Rlc3Rfb3BlbixcbiBcdC51bmxvY2tlZF9pb2N0bCA9IGd1cF90ZXN0X2lvY3RsLFxuIFx0LmNvbXBhdF9pb2N0bCA9IGNvbXBhdF9wdHJfaW9jdGwsXG4gXHQucmVsZWFzZSA9IGd1cF90ZXN0X3JlbGVhc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dVUF9URVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3VwX3Rlc3Rfb3BlbiYjMzQ7LAogICAgJiMzNDtndXBfdGVzdF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2d1cF90ZXN0X2lvY3RsJiMzNDssCiAgICAmIzM0O3Bpbl9sb25ndGVybV90ZXN0X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBndXBfdGVzdCBkZWJ1Z2ZzIGludGVyZmFjZSB0byB1c2UgcGVyLWZpbGUgZGVzY3JpcHRvciBzdGF0ZSBpbnN0ZWFkIG9mIGdsb2JhbCBzdGF0ZSBmb3IgdGhlIFBJTl9MT05HVEVSTV9URVNUXyogaW9jdGxzLCBmaXhpbmcgY29uY3VycmVuY3kgaXNzdWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gYSB0ZXN0IG1vZHVsZSB0aGF0IGV4cG9zZXMga2VybmVsIEFQSXMgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgY29uY3VycmVuY3kgZml4IGlzIGNvcnJlY3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBuZXcgaXNzdWVzIGxpa2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjZhZjY3OTVkYTg5MTY0YmI5MWYyYmE5YmE2MzhlZDRjM2Y3NTYyYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDEyOjIxOjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZ3VwX3Rlc3QuYyBiL21tL2d1cF90ZXN0LmMKaW5kZXggZWI0YzljZGExNmVkOC4uNDRjMWNkZmI5YzM3MSAxMDA2NDQKLS0tIGEvbW0vZ3VwX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ndXBfdGVzdC5jCkBAIC04LDYgJiM0Mzs4LDEyIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaGlnaG1lbS5oJmd0OwogI2luY2x1ZGUgJiMzNDtndXBfdGVzdC5oJiMzNDsKIAomIzQzO3N0cnVjdCBndXBfdGVzdF9kYXRhIHsKJiM0MzsJc3RydWN0IG11dGV4IGxvbmd0ZXJtX211dGV4OwomIzQzOwlzdHJ1Y3QgcGFnZSAqKmxvbmd0ZXJtX3BhZ2VzOwomIzQzOwl1bnNpZ25lZCBsb25nIGxvbmd0ZXJtX25yX3BhZ2VzOwomIzQzO307CiYjNDM7CiBzdGF0aWMgdm9pZCBwdXRfYmFja19wYWdlcyh1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAogCQkJICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgdW5zaWduZWQgaW50IGd1cF90ZXN0X2ZsYWdzKQogewpAQCAtMjA4LDIzICYjNDM7MjE0LDIwIEBAIHN0YXRpYyBpbnQgX19ndXBfdGVzdF9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBERUZJTkVfTVVURVgocGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpOwotc3RhdGljIHN0cnVjdCBwYWdlICoqcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXM7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlczsKLQotc3RhdGljIGlubGluZSB2b2lkIHBpbl9sb25ndGVybV90ZXN0X3N0b3Aodm9pZCkKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSkKIHsKLQlpZiAocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpIHsKLQkJaWYgKHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzKQotCQkJdW5waW5fdXNlcl9wYWdlcyhwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcywKLQkJCQkJIHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzKTsKLQkJa3ZmcmVlKHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzKTsKLQkJcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMgPSBOVUxMOwotCQlwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyA9IDA7CiYjNDM7CWlmIChkYXRhLSZndDtsb25ndGVybV9wYWdlcykgewomIzQzOwkJaWYgKGRhdGEtJmd0O2xvbmd0ZXJtX25yX3BhZ2VzKQomIzQzOwkJCXVucGluX3VzZXJfcGFnZXMoZGF0YS0mZ3Q7bG9uZ3Rlcm1fcGFnZXMsCiYjNDM7CQkJCQkgZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXMpOwomIzQzOwkJa3ZmcmVlKGRhdGEtJmd0O2xvbmd0ZXJtX3BhZ2VzKTsKJiM0MzsJCWRhdGEtJmd0O2xvbmd0ZXJtX3BhZ2VzID0gTlVMTDsKJiM0MzsJCWRhdGEtJmd0O2xvbmd0ZXJtX25yX3BhZ2VzID0gMDsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJbG9uZyBucl9wYWdlcywgY3VyX3BhZ2VzLCBhZGRyLCByZW1haW5pbmdfcGFnZXM7CiAJaW50IGd1cF9mbGFncyA9IEZPTExfTE9OR1RFUk07CkBAIC0yMzMsNyAmIzQzOzIzNiw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKQogCWludCByZXQgPSAwOwogCWJvb2wgZmFzdDsKIAotCWlmIChwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcykKJiM0MzsJaWYgKGRhdGEtJmd0O2xvbmd0ZXJtX3BhZ2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2FyZ3MsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGFyZ3MpKSkKQEAgLTI2MywxMiAmIzQzOzI2NiwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydCh1bnNpZ25lZCBsb25nIGFyZykKIAkJcmV0dXJuIC1FSU5UUjsKIAl9CiAKLQlwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcyA9IHBhZ2VzOwotCXBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzID0gMDsKJiM0MzsJZGF0YS0mZ3Q7bG9uZ3Rlcm1fcGFnZXMgPSBwYWdlczsKJiM0MzsJZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXMgPSAwOwogCi0Jd2hpbGUgKG5yX3BhZ2VzIC0gcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMpIHsKLQkJcmVtYWluaW5nX3BhZ2VzID0gbnJfcGFnZXMgLSBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlczsKLQkJYWRkciA9IGFyZ3MuYWRkciAmIzQzOyBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyAqIFBBR0VfU0laRTsKJiM0MzsJd2hpbGUgKG5yX3BhZ2VzIC0gZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXMpIHsKJiM0MzsJCXJlbWFpbmluZ19wYWdlcyA9IG5yX3BhZ2VzIC0gZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXM7CiYjNDM7CQlhZGRyID0gYXJncy5hZGRyICYjNDM7IGRhdGEtJmd0O2xvbmd0ZXJtX25yX3BhZ2VzICogUEFHRV9TSVpFOwogCiAJCWlmIChmYXN0KQogCQkJY3VyX3BhZ2VzID0gcGluX3VzZXJfcGFnZXNfZmFzdChhZGRyLCByZW1haW5pbmdfcGFnZXMsCkBAIC0yNzcsMTEgJiM0MzsyODAsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpCiAJCQljdXJfcGFnZXMgPSBwaW5fdXNlcl9wYWdlcyhhZGRyLCByZW1haW5pbmdfcGFnZXMsCiAJCQkJCQkgICBndXBfZmxhZ3MsIHBhZ2VzKTsKIAkJaWYgKGN1cl9wYWdlcyAmbHQ7IDApIHsKLQkJCXBpbl9sb25ndGVybV90ZXN0X3N0b3AoKTsKJiM0MzsJCQlwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpOwogCQkJcmV0ID0gY3VyX3BhZ2VzOwogCQkJYnJlYWs7CiAJCX0KLQkJcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMgJiM0Mzs9IGN1cl9wYWdlczsKJiM0MzsJCWRhdGEtJmd0O2xvbmd0ZXJtX25yX3BhZ2VzICYjNDM7PSBjdXJfcGFnZXM7CiAJCXBhZ2VzICYjNDM7PSBjdXJfcGFnZXM7CiAJfQogCkBAIC0yOTAsMTkgJiM0MzsyOTMsMjAgQEAgc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZCh1bnNpZ25lZCBsb25nIGFyZykKJiM0MztzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJX191NjQgdXNlcl9hZGRyOwogCXVuc2lnbmVkIGxvbmcgaTsKIAotCWlmICghcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpCiYjNDM7CWlmICghZGF0YS0mZ3Q7bG9uZ3Rlcm1fcGFnZXMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7dXNlcl9hZGRyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZih1c2VyX2FkZHIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXZvaWQgKmFkZHIgPSBrbWFwX2xvY2FsX3BhZ2UocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXNbaV0pOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl2b2lkICphZGRyID0ga21hcF9sb2NhbF9wYWdlKGRhdGEtJmd0O2xvbmd0ZXJtX3BhZ2VzW2ldKTsKIAkJdW5zaWduZWQgbG9uZyByZXQ7CiAKIAkJcmV0ID0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXVzZXJfYWRkciwgYWRkciwKQEAgLTMxOCwyNSAmIzQzOzMyMiwyNiBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHVuc2lnbmVkIGxvbmcgYXJnKQogc3RhdGljIGxvbmcgcGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKJiM0MzsJc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEgPSBmaWxlcC0mZ3Q7cHJpdmF0ZV9kYXRhOwogCWludCByZXQgPSAtRUlOVkFMOwogCi0JaWYgKG11dGV4X2xvY2tfa2lsbGFibGUoJmFtcDtwaW5fbG9uZ3Rlcm1fdGVzdF9tdXRleCkpCiYjNDM7CWlmIChtdXRleF9sb2NrX2tpbGxhYmxlKCZhbXA7ZGF0YS0mZ3Q7bG9uZ3Rlcm1fbXV0ZXgpKQogCQlyZXR1cm4gLUVJTlRSOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFBJTl9MT05HVEVSTV9URVNUX1NUQVJUOgotCQlyZXQgPSBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydChhcmcpOwomIzQzOwkJcmV0ID0gcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoZGF0YSwgYXJnKTsKIAkJYnJlYWs7CiAJY2FzZSBQSU5fTE9OR1RFUk1fVEVTVF9TVE9QOgotCQlwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKCk7CiYjNDM7CQlwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpOwogCQlyZXQgPSAwOwogCQlicmVhazsKIAljYXNlIFBJTl9MT05HVEVSTV9URVNUX1JFQUQ6Ci0JCXJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoYXJnKTsKJiM0MzsJCXJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoZGF0YSwgYXJnKTsKIAkJYnJlYWs7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZhbXA7cGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkYXRhLSZndDtsb25ndGVybV9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzc1LDE1ICYjNDM7MzgwLDQwIEBAIHN0YXRpYyBsb25nIGd1cF90ZXN0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZ3VwX3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkYXRhID0ga3phbGxvY19vYmooKmRhdGEpOwomIzQzOwlpZiAoIWRhdGEpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0ID0gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWtmcmVlKGRhdGEpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9pbml0KCZhbXA7ZGF0YS0mZ3Q7bG9uZ3Rlcm1fbXV0ZXgpOwomIzQzOwlmaWxlLSZndDtwcml2YXRlX2RhdGEgPSBkYXRhOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGd1cF90ZXN0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcCgpOwomIzQzOwlzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsKJiM0MzsJcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChkYXRhKTsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO2RhdGEtJmd0O2xvbmd0ZXJtX211dGV4KTsKJiM0MzsJa2ZyZWUoZGF0YSk7CiYjNDM7CWZpbGUtJmd0O3ByaXZhdGVfZGF0YSA9IE5VTEw7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3VwX3Rlc3RfZm9wcyA9IHsKLQkub3BlbiA9IG5vbnNlZWthYmxlX29wZW4sCiYjNDM7CS5vcGVuID0gZ3VwX3Rlc3Rfb3BlbiwKIAkudW5sb2NrZWRfaW9jdGwgPSBndXBfdGVzdF9pb2N0bCwKIAkuY29tcGF0X2lvY3RsID0gY29tcGF0X3B0cl9pb2N0bCwKIAkucmVsZWFzZSA9IGd1cF90ZXN0X3JlbGVhc2UsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHVVAgVGVzdCBNb2R1bGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vZ3VwX3Rlc3QuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHNoaWZ0aW5nIHNvbWUgZ2xvYmFsIHN0YXRlIHZhcmlhYmxlcywgYHBpbl9sb25ndGVybV90ZXN0X211dGV4YCwgYHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzYCwgYW5kIGBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlc2AsIGludG8gYSBwZXItZmlsZSBkZXNjcmlwdG9yIHN0cnVjdHVyZSwgYHN0cnVjdCBndXBfdGVzdF9kYXRhYCwgd2hpY2ggd2lsbCBub3cgcmVzaWRlIGluIGBmaWxlLSZndDtwcml2YXRlX2RhdGFgLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZyB0byBlbmFibGUgY29uY3VycmVudCBleGVjdXRpb24gb2YgdGhlIGBQSU5fTE9OR1RFUk1fVEVTVF8qYCBpb2N0bHMuIEVzc2VudGlhbGx5LCBpdCByZW1vdmVzIHRoZSBnbG9iYWwgbG9ja2luZyBib3R0bGVuZWNrLgoKU2luY2UgdGhpcyBpcyBhIHRlc3QgbW9kdWxlIChgZ3VwX3Rlc3QuY2ApLCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZSwgYW5kIGlzIGl0IHdvcnRoIGZ1enppbmc/IEkgbWVhbiwgd2UgdXN1YWxseSBkb24mIzM5O3QgcHJpb3JpdGl6ZSBmdXp6aW5nIHRlc3RzLiBCdXQgdGhpcyBtb2R1bGUgKmRvZXMqIGV4cG9zZSBrZXJuZWwgQVBJcyBsaWtlIGBwaW5fdXNlcl9wYWdlc2AsIGB1bnBpbl91c2VyX3BhZ2VzYCwgZXRjLiwgdG8gdXNlcnNwYWNlLiBUaGF0JiMzOTtzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcsIGFjdHVhbGx5LCBiZWNhdXNlIHRob3NlIEFQSXMgY2FuIGhhdmUgaW50ZXJlc3Rpbmcgc2lkZS1lZmZlY3RzIGFuZCBtaWdodCB1bmNvdmVyIHNvbWUgaGlkZGVuIG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3MuCgpXYWl0IGEgc2Vjb25k4oCmIGBndXBfdGVzdGAgaXMgYSBkZWJ1Z2ZzL3Rlc3QgaW50ZXJmYWNlISBUaGF0IGNoYW5nZXMgdGhpbmdzLiBMZXQmIzM5O3MgcHVsbCB1cCB0aGUga2VybmVsIHNvdXJjZSBpbiBgbW0vZ3VwX3Rlc3QuY2AgYW5kIGRpZyBhIGxpdHRsZSBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3VwX3Rlc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjkzPWNvbmZpZyBHVVBfVEVTVFxuLS1cbm1tL0tjb25maWctMTI5Ni1cdGhlbHBcbm1tL0tjb25maWc6MTI5NzpcdCAgUHJvdmlkZXMgL3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXMgYSB3YXlcbm1tL0tjb25maWctMTI5OC1cdCAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgZm9yXG4tLVxubW0vS2NvbmZpZy0xMzEwLVxubW0vS2NvbmZpZzoxMzExOlx0ICBTZWUgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xubW0vS2NvbmZpZy0xMzEyLVxuLS1cbm1tL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfQ0dST1VQX0hVR0VUTEIpICYjNDM7PSBodWdldGxiX2Nncm91cC5vXG5tbS9NYWtlZmlsZToxMTA6b2JqLSQoQ09ORklHX0dVUF9URVNUKSAmIzQzOz0gZ3VwX3Rlc3Qub1xubW0vTWFrZWZpbGUtMTExLW9iai0kKENPTkZJR19ETUFQT09MX1RFU1QpICYjNDM7PSBkbWFwb29sX3Rlc3Qub1xuLS1cbm1tL2d1cF90ZXN0LmMtOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9oaWdobWVtLmhcdTAwM2Vcbm1tL2d1cF90ZXN0LmM6OTojaW5jbHVkZSBcJiMzNDtndXBfdGVzdC5oXCYjMzQ7XG5tbS9ndXBfdGVzdC5jLTEwLVxubW0vZ3VwX3Rlc3QuYzoxMTpzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSB7XG5tbS9ndXBfdGVzdC5jLTEyLVx0c3RydWN0IG11dGV4IGxvbmd0ZXJtX211dGV4O1xuLS1cbm1tL2d1cF90ZXN0LmM9MTc9c3RhdGljIHZvaWQgcHV0X2JhY2tfcGFnZXModW5zaWduZWQgaW50IGNtZCwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbm1tL2d1cF90ZXN0LmM6MTg6XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgdW5zaWduZWQgaW50IGd1cF90ZXN0X2ZsYWdzKVxubW0vZ3VwX3Rlc3QuYy0xOS17XG4tLVxubW0vZ3VwX3Rlc3QuYy0zNC1cdGNhc2UgRFVNUF9VU0VSX1BBR0VTX1RFU1Q6XG5tbS9ndXBfdGVzdC5jOjM1Olx0XHRpZiAoZ3VwX3Rlc3RfZmxhZ3MgXHUwMDI2IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOKSB7XG5tbS9ndXBfdGVzdC5jLTM2LVx0XHRcdHVucGluX3VzZXJfcGFnZXMocGFnZXMsIG5yX3BhZ2VzKTtcbi0tXG5tbS9ndXBfdGVzdC5jPTQ2PXN0YXRpYyB2b2lkIHZlcmlmeV9kbWFfcGlubmVkKHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4tLVxubW0vZ3VwX3Rlc3QuYy02MS1cbm1tL2d1cF90ZXN0LmM6NjI6XHRcdFx0XHRkdW1wX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgXCYjMzQ7Z3VwX3Rlc3QgZmFpbHVyZVwmIzM0Oyk7XG5tbS9ndXBfdGVzdC5jLTYzLVx0XHRcdFx0YnJlYWs7XG4tLVxubW0vZ3VwX3Rlc3QuYy02Ny1cdFx0XHRcdCAgICAgaSkpIHtcbm1tL2d1cF90ZXN0LmM6Njg6XHRcdFx0XHRkdW1wX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgXCYjMzQ7Z3VwX3Rlc3QgZmFpbHVyZVwmIzM0Oyk7XG5tbS9ndXBfdGVzdC5jLTY5LVx0XHRcdFx0YnJlYWs7XG4tLVxubW0vZ3VwX3Rlc3QuYy03NS1cbm1tL2d1cF90ZXN0LmM6NzY6c3RhdGljIHZvaWQgZHVtcF9wYWdlc190ZXN0KHN0cnVjdCBndXBfdGVzdCAqZ3VwLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxubW0vZ3VwX3Rlc3QuYy03Ny1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbi0tXG5tbS9ndXBfdGVzdC5jLTEwMS1cdFx0XHRkdW1wX3BhZ2UocGFnZXNbaW5kZXhfdG9fZHVtcF0sXG5tbS9ndXBfdGVzdC5jOjEwMjpcdFx0XHRcdCAgXCYjMzQ7Z3VwX3Rlc3Q6IGR1bXBfcGFnZXMoKSB0ZXN0XCYjMzQ7KTtcbm1tL2d1cF90ZXN0LmMtMTAzLVx0XHR9XG4tLVxubW0vZ3VwX3Rlc3QuYy0xMDYtXG5tbS9ndXBfdGVzdC5jOjEwNzpzdGF0aWMgaW50IF9fZ3VwX3Rlc3RfaW9jdGwodW5zaWduZWQgaW50IGNtZCxcbm1tL2d1cF90ZXN0LmM6MTA4Olx0XHRzdHJ1Y3QgZ3VwX3Rlc3QgKmd1cClcbm1tL2d1cF90ZXN0LmMtMTA5LXtcbi0tXG5tbS9ndXBfdGVzdC5jLTIxNi1cbm1tL2d1cF90ZXN0LmM6MjE3OnN0YXRpYyBpbmxpbmUgdm9pZCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhKVxubW0vZ3VwX3Rlc3QuYy0yMTgte1xuLS1cbm1tL2d1cF90ZXN0LmMtMjI4LVxubW0vZ3VwX3Rlc3QuYzoyMjk6c3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEsXG5tbS9ndXBfdGVzdC5jLTIzMC1cdFx0dW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubW0vZ3VwX3Rlc3QuYy0yOTUtXG5tbS9ndXBfdGVzdC5jOjI5NjpzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhLFxubW0vZ3VwX3Rlc3QuYy0yOTctXHRcdHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbm1tL2d1cF90ZXN0LmM9MzIyPXN0YXRpYyBsb25nIHBpbl9sb25ndGVybV90ZXN0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5tbS9ndXBfdGVzdC5jLTMyNC17XG5tbS9ndXBfdGVzdC5jOjMyNTpcdHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhID0gZmlsZXAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xubW0vZ3VwX3Rlc3QuYy0zMjYtXHRpbnQgcmV0ID0gLUVJTlZBTDtcbi0tXG5tbS9ndXBfdGVzdC5jLTM0Ny1cbm1tL2d1cF90ZXN0LmM6MzQ4OnN0YXRpYyBsb25nIGd1cF90ZXN0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCxcbm1tL2d1cF90ZXN0LmMtMzQ5LVx0XHR1bnNpZ25lZCBsb25nIGFyZylcbm1tL2d1cF90ZXN0LmMtMzUwLXtcbm1tL2d1cF90ZXN0LmM6MzUxOlx0c3RydWN0IGd1cF90ZXN0IGd1cDtcbm1tL2d1cF90ZXN0LmMtMzUyLVx0aW50IHJldDtcbi0tXG5tbS9ndXBfdGVzdC5jLTM3Mi1cbm1tL2d1cF90ZXN0LmM6MzczOlx0cmV0ID0gX19ndXBfdGVzdF9pb2N0bChjbWQsIFx1MDAyNmd1cCk7XG5tbS9ndXBfdGVzdC5jLTM3NC1cdGlmIChyZXQpXG4tLVxubW0vZ3VwX3Rlc3QuYy0zODItXG5tbS9ndXBfdGVzdC5jOjM4MzpzdGF0aWMgaW50IGd1cF90ZXN0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5tbS9ndXBfdGVzdC5jLTM4NC17XG5tbS9ndXBfdGVzdC5jOjM4NTpcdHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhO1xubW0vZ3VwX3Rlc3QuYy0zODYtXHRpbnQgcmV0O1xuLS1cbm1tL2d1cF90ZXN0LmMtNDAyLVxubW0vZ3VwX3Rlc3QuYzo0MDM6c3RhdGljIGludCBndXBfdGVzdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxubW0vZ3VwX3Rlc3QuYy00MDQte1xubW0vZ3VwX3Rlc3QuYzo0MDU6XHRzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xubW0vZ3VwX3Rlc3QuYy00MDYtXG4tLVxubW0vZ3VwX3Rlc3QuYy00MTQtXG5tbS9ndXBfdGVzdC5jOjQxNTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBndXBfdGVzdF9mb3BzID0ge1xubW0vZ3VwX3Rlc3QuYzo0MTY6XHQub3BlbiA9IGd1cF90ZXN0X29wZW4sXG5tbS9ndXBfdGVzdC5jOjQxNzpcdC51bmxvY2tlZF9pb2N0bCA9IGd1cF90ZXN0X2lvY3RsLFxubW0vZ3VwX3Rlc3QuYy00MTgtXHQuY29tcGF0X2lvY3RsID0gY29tcGF0X3B0cl9pb2N0bCxcbm1tL2d1cF90ZXN0LmM6NDE5Olx0LnJlbGVhc2UgPSBndXBfdGVzdF9yZWxlYXNlLFxubW0vZ3VwX3Rlc3QuYy00MjAtfTtcbm1tL2d1cF90ZXN0LmMtNDIxLVxubW0vZ3VwX3Rlc3QuYzo0MjI6c3RhdGljIGludCBfX2luaXQgZ3VwX3Rlc3RfaW5pdCh2b2lkKVxubW0vZ3VwX3Rlc3QuYy00MjMte1xubW0vZ3VwX3Rlc3QuYzo0MjQ6XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX3Vuc2FmZShcJiMzNDtndXBfdGVzdFwmIzM0OywgMDYwMCwgTlVMTCwgTlVMTCxcbm1tL2d1cF90ZXN0LmM6NDI1Olx0XHRcdFx0ICAgXHUwMDI2Z3VwX3Rlc3RfZm9wcyk7XG5tbS9ndXBfdGVzdC5jLTQyNi1cbi0tXG5tbS9ndXBfdGVzdC5jLTQyOS1cbm1tL2d1cF90ZXN0LmM6NDMwOmxhdGVfaW5pdGNhbGwoZ3VwX3Rlc3RfaW5pdCk7XG4tLVxubW0vZ3VwX3Rlc3QuaC02LVxubW0vZ3VwX3Rlc3QuaDo3OiNkZWZpbmUgR1VQX0ZBU1RfQkVOQ0hNQVJLXHRfSU9XUigmIzM5O2cmIzM5OywgMSwgc3RydWN0IGd1cF90ZXN0KVxubW0vZ3VwX3Rlc3QuaDo4OiNkZWZpbmUgUElOX0ZBU1RfQkVOQ0hNQVJLXHRfSU9XUigmIzM5O2cmIzM5OywgMiwgc3RydWN0IGd1cF90ZXN0KVxubW0vZ3VwX3Rlc3QuaDo5OiNkZWZpbmUgUElOX0xPTkdURVJNX0JFTkNITUFSS1x0X0lPV1IoJiMzOTtnJiMzOTssIDMsIHN0cnVjdCBndXBfdGVzdClcbm1tL2d1cF90ZXN0Lmg6MTA6I2RlZmluZSBHVVBfQkFTSUNfVEVTVFx0XHRfSU9XUigmIzM5O2cmIzM5OywgNCwgc3RydWN0IGd1cF90ZXN0KVxubW0vZ3VwX3Rlc3QuaDoxMTojZGVmaW5lIFBJTl9CQVNJQ19URVNUXHRcdF9JT1dSKCYjMzk7ZyYjMzk7LCA1LCBzdHJ1Y3QgZ3VwX3Rlc3QpXG5tbS9ndXBfdGVzdC5oOjEyOiNkZWZpbmUgRFVNUF9VU0VSX1BBR0VTX1RFU1RcdF9JT1dSKCYjMzk7ZyYjMzk7LCA2LCBzdHJ1Y3QgZ3VwX3Rlc3QpXG5tbS9ndXBfdGVzdC5oLTEzLSNkZWZpbmUgUElOX0xPTkdURVJNX1RFU1RfU1RBUlRcdF9JT1coJiMzOTtnJiMzOTssIDcsIHN0cnVjdCBwaW5fbG9uZ3Rlcm1fdGVzdClcbi0tXG5tbS9ndXBfdGVzdC5oLTIwLVxubW0vZ3VwX3Rlc3QuaDoyMTpzdHJ1Y3QgZ3VwX3Rlc3Qge1xubW0vZ3VwX3Rlc3QuaC0yMi1cdF9fdTY0IGdldF9kZWx0YV91c2VjO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBndXBfdGVzdC5jIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbW0vZ3VwX3Rlc3QuY2AuIEl0JiMzOTtzIGEgZGVidWdmcyBpbnRlcmZhY2UsIHdoaWNoIGlzIGEgYmlnIGZsYWcgZm9yIG1lIHNpbmNlIHRoYXQgb2Z0ZW4gbWVhbnMgdXNlcnNwYWNlIGludGVyYWN0aW9uIGFuZCBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGZvciB0ZXN0aW5nIGBnZXRfdXNlcl9wYWdlc2AgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIOKAkyB0aGUgYENPTkZJR19HVVBfVEVTVGAgY29uZmlnIGlzIHRoZSBrZXkuIFRoZSBwcmltYXJ5IGNoYW5nZSBoZXJlIGlzIGZpeGluZyBhIGNvbmN1cnJlbmN5IGlzc3VlIHdpdGhpbiB0aGUgYFBJTl9MT05HVEVSTV9URVNUXypgIGlvY3Rscy4gVGhleSYjMzk7dmUgbW92ZWQgc29tZSBnbG9iYWwgc3RhdGUgaW50byBhIHBlci1maWxlIGRlc2NyaXB0b3Igc3RydWN0dXJlLCBgc3RydWN0IGd1cF90ZXN0X2RhdGFgLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2Ugd2l0aGluIHRoZSB0ZXN0IG1vZHVsZSBpdHNlbGYuCgpUaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgJiMzNDtJcyB0aGlzIGZ1enphYmxlPyYjMzQ7IFNpbmNlIHRoaXMgZXhwb3NlcyBrZXJuZWwgQVBJcyB0byB1c2Vyc3BhY2UsIGl0JiMzOTtzIGEgZGVmaW5pdGUgcG9zc2liaWxpdHksIGFuZCBwcm9iYWJseSBhIGdvb2QgaWRlYS4gVGhlIGxpc3RlZCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOiBgZ3VwX3Rlc3Rfb3BlbmAsIGBndXBfdGVzdF9yZWxlYXNlYCwgYHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0YCwgYHBpbl9sb25ndGVybV90ZXN0X3N0b3BgLCBgcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZGAsIGBwaW5fbG9uZ3Rlcm1fdGVzdF9pb2N0bGAsIGFuZCBgZ3VwX3Rlc3RfaW9jdGxgLgoKV2FpdCwgYGd1cF90ZXN0X29wZW5gIGFuZCBgZ3VwX3Rlc3RfcmVsZWFzZWAgYXJlICpuZXcqIGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIEFuZCBpdCBsb29rcyBsaWtlIGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydGAsIGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wYCwgYW5kIGBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkYCBhcmUgKm1vZGlmaWVkKi4gVGhlc2UgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zIHdoaWNoIGlzIGltcG9ydGFudC4gSG93ZXZlciwgYGd1cF90ZXN0X29wZW5gLCBgZ3VwX3Rlc3RfcmVsZWFzZWAsIGFuZCBgZ3VwX3Rlc3RfaW9jdGxgIGFyZSBleHBvc2VkIHZpYSBgZmlsZV9vcGVyYXRpb25zYCB3aGljaCBpcyBkaWZmZXJlbnQuIFRoZSBwcm9tcHQgc2F5cyB0aGF0IHdlIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4KCkhhbmcgb27igKYgbG9va2luZyBjbG9zZXIsIGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydGAgKmlzKiBpbmxpbmUuIFNvLCB0aGF0JiMzOTtzIG5vdCBhIGNsZWFyIGZ1enppbmcgdGFyZ2V0LCBidXQgdGhlIGBndXBfdGVzdF9vcGVuYCwgYW5kIGBndXBfdGVzdF9yZWxlYXNlYCwgYW5kIGBndXBfdGVzdF9pb2N0bGAgYXJlICpub3QqIGlubGluZS4gVGhlc2UgYXJlIGFjdHVhbGx5IHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyBpbiB0aGUgYGZpbGVfb3BlcmF0aW9uc2Agc3RydWN0LiBUaGlzIG1lYW5zIHRoZXkgY2Fubm90IGJlIGlubGluZWQsIGFuZCB3aWxsIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gU28sIHdlJiMzOTtyZSBkZWZpbml0ZWx5IGxvb2tpbmcgYXQgcG90ZW50aWFsIGZ1enppbmcgc3VyZmFjZSBoZXJlLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGd1cF90ZXN0X29wZW5gIGlzIHN0YXRpYy4gWWVzLCBpdCYjMzk7cyBzdGF0aWMsIGJ1dCB0aGlzIGlzIGxlc3MgaW1wb3J0YW50LCBpdCYjMzk7cyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBUaGlzIG1lYW5zIHRoZSBjb21waWxlciB3b24mIzM5O3QgaW5saW5lIGl0LiBTYW1lIHdpdGggYGd1cF90ZXN0X3JlbGVhc2VgLCBpdCBpcyBhbHNvIHN0YXRpYyBidXQgaXMgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXIuIFRoZW4gdGhlcmUmIzM5O3MgYGd1cF90ZXN0X2lvY3RsYCBhcyB3ZWxsISBBbmQgYHBpbl9sb25ndGVybV90ZXN0X2lvY3RsYCBpcyBjYWxsZWQgZnJvbSBgZ3VwX3Rlc3RfaW9jdGxgLiBUaGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIGZvciBgZ3VwX3Rlc3RfaW9jdGxgIGluIGBtbS9ndXBfdGVzdC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2d1cF90ZXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHR9XG4gMzIxOlx0XG4gMzIyOlx0c3RhdGljIGxvbmcgcGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLFxuIDMyMzpcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxuIDMyNDpcdHtcbiAzMjU6XHRcdHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhID0gZmlsZXAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIDMyNjpcdFx0aW50IHJldCA9IC1FSU5WQUw7XG4gMzI3Olx0XG4gMzI4Olx0XHRpZiAobXV0ZXhfbG9ja19raWxsYWJsZShcdTAwMjZkYXRhLVx1MDAzZWxvbmd0ZXJtX211dGV4KSlcbiAzMjk6XHRcdFx0cmV0dXJuIC1FSU5UUjtcbiAzMzA6XHRcbiAzMzE6XHRcdHN3aXRjaCAoY21kKSB7XG4gMzMyOlx0XHRjYXNlIFBJTl9MT05HVEVSTV9URVNUX1NUQVJUOlxuIDMzMzpcdFx0XHRyZXQgPSBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydChkYXRhLCBhcmcpO1xuIDMzNDpcdFx0XHRicmVhaztcbiAzMzU6XHRcdGNhc2UgUElOX0xPTkdURVJNX1RFU1RfU1RPUDpcbiAzMzY6XHRcdFx0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChkYXRhKTtcbiAzMzc6XHRcdFx0cmV0ID0gMDtcbiAzMzg6XHRcdFx0YnJlYWs7XG4gMzM5Olx0XHRjYXNlIFBJTl9MT05HVEVSTV9URVNUX1JFQUQ6XG4gMzQwOlx0XHRcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoZGF0YSwgYXJnKTtcbiAzNDE6XHRcdFx0YnJlYWs7XG4gMzQyOlx0XHR9XG4gMzQzOlx0XG4gMzQ0Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGF0YS1cdTAwM2Vsb25ndGVybV9tdXRleCk7XG4gMzQ1Olx0XHRyZXR1cm4gcmV0O1xuIDM0NjpcdH1cbiAzNDc6XHRcbiAzNDg6XHRzdGF0aWMgbG9uZyBndXBfdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsXG4gMzQ5Olx0XHRcdHVuc2lnbmVkIGxvbmcgYXJnKVxuIDM1MDpcdHtcbiAzNTE6XHRcdHN0cnVjdCBndXBfdGVzdCBndXA7XG4gMzUyOlx0XHRpbnQgcmV0O1xuIDM1MzpcdFxuIDM1NDpcdFx0c3dpdGNoIChjbWQpIHtcbiAzNTU6XHRcdGNhc2UgR1VQX0ZBU1RfQkVOQ0hNQVJLOlxuIDM1NjpcdFx0Y2FzZSBQSU5fRkFTVF9CRU5DSE1BUks6XG4gMzU3Olx0XHRjYXNlIFBJTl9MT05HVEVSTV9CRU5DSE1BUks6XG4gMzU4Olx0XHRjYXNlIEdVUF9CQVNJQ19URVNUOlxuIDM1OTpcdFx0Y2FzZSBQSU5fQkFTSUNfVEVTVDpcbiAzNjA6XHRcdGNhc2UgRFVNUF9VU0VSX1BBR0VTX1RFU1Q6XG4gMzYxOlx0XHRcdGJyZWFrO1xuIDM2MjpcdFx0Y2FzZSBQSU5fTE9OR1RFUk1fVEVTVF9TVEFSVDpcbiAzNjM6XHRcdGNhc2UgUElOX0xPTkdURVJNX1RFU1RfU1RPUDpcbiAzNjQ6XHRcdGNhc2UgUElOX0xPTkdURVJNX1RFU1RfUkVBRDpcbiAzNjU6XHRcdFx0cmV0dXJuIHBpbl9sb25ndGVybV90ZXN0X2lvY3RsKGZpbGVwLCBjbWQsIGFyZyk7XG4gMzY2Olx0XHRkZWZhdWx0OlxuIDM2NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNjg6XHRcdH1cbiAzNjk6XHRcbiAzNzA6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZndXAsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGd1cCkpKVxuIDM3MTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAzNzI6XHRcbiAzNzM6XHRcdHJldCA9IF9fZ3VwX3Rlc3RfaW9jdGwoY21kLCBcdTAwMjZndXApO1xuIDM3NDpcdFx0aWYgKHJldClcbiAzNzU6XHRcdFx0cmV0dXJuIHJldDtcbiAzNzY6XHRcbiAzNzc6XHRcdGlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCBcdTAwMjZndXAsIHNpemVvZihndXApKSlcbiAzNzg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMzc5Olx0XG4gMzgwOlx0XHRyZXR1cm4gMDtcbiAzODE6XHR9XG4gMzgyOlx0XG4gMzgzOlx0c3RhdGljIGludCBndXBfdGVzdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIDM4NDpcdHtcbiAzODU6XHRcdHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhO1xuIDM4NjpcdFx0aW50IHJldDtcbiAzODc6XHRcbiAzODg6XHRcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XG4gMzg5Olx0XHRpZiAoIWRhdGEpXG4gMzkwOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDM5MTpcdFxuIDM5MjpcdFx0cmV0ID0gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7XG4gMzkzOlx0XHRpZiAocmV0KSB7XG4gMzk0Olx0XHRcdGtmcmVlKGRhdGEpO1xuIDM5NTpcdFx0XHRyZXR1cm4gcmV0O1xuIDM5NjpcdFx0fVxuIDM5NzpcdFxuIDM5ODpcdFx0bXV0ZXhfaW5pdChcdTAwMjZkYXRhLVx1MDAzZWxvbmd0ZXJtX211dGV4KTtcbiAzOTk6XHRcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gZGF0YTtcbiA0MDA6XHRcdHJldHVybiAwO1xuIDQwMTpcdH1cbiA0MDI6XHRcbiA0MDM6XHRzdGF0aWMgaW50IGd1cF90ZXN0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gNDA0Olx0e1xuIDQwNTpcdFx0c3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiA0MDY6XHRcbiA0MDc6XHRcdHBpbl9sb25ndGVybV90ZXN0X3N0b3AoZGF0YSk7XG4gNDA4Olx0XHRtdXRleF9kZXN0cm95KFx1MDAyNmRhdGEtXHUwMDNlbG9uZ3Rlcm1fbXV0ZXgpO1xuIDQwOTpcdFx0a2ZyZWUoZGF0YSk7XG4gNDEwOlx0XHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IE5VTEw7XG4gNDExOlx0XG4gNDEyOlx0XHRyZXR1cm4gMDtcbiA0MTM6XHR9XG4gNDE0Olx0XG4gNDE1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3VwX3Rlc3RfZm9wcyA9IHtcbiA0MTY6XHRcdC5vcGVuID0gZ3VwX3Rlc3Rfb3BlbixcbiA0MTc6XHRcdC51bmxvY2tlZF9pb2N0bCA9IGd1cF90ZXN0X2lvY3RsLFxuIDQxODpcdFx0LmNvbXBhdF9pb2N0bCA9IGNvbXBhdF9wdHJfaW9jdGwsXG4gNDE5Olx0XHQucmVsZWFzZSA9IGd1cF90ZXN0X3JlbGVhc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ0OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWNlbnQgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSByZWNlbnQgbW9kaWZpY2F0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBhZGRpdGlvbiBvciBhbHRlcmF0aW9ucyBvZiB0aGUgZnVuY3Rpb25zIGBndXBfdGVzdF9vcGVuYCwgYGd1cF90ZXN0X3JlbGVhc2VgLCBgZ3VwX3Rlc3RfaW9jdGxgLCBhbmQgYHBpbl9sb25ndGVybV90ZXN0X2lvY3RsYC4gVGhleSBhcmVuJiMzOTt0IGlubGluZWQsIHdoaWNoIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBUaGUgb3ZlcmFsbCBjb25maWcgYmVpbmcgdXNlZCBpcyBgR1VQX1RFU1RgLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIGZ1bmN0aW9ucywgd2hpY2ggZGVhbCB3aXRoIElPQ1RMcyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgR1VQX1RFU1RgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgaW52b2x2ZWQgYW5kIHdoYXQgdGhlIHB1cnBvc2Ugb2YgYEdVUF9URVNUYCBhY3R1YWxseSBpcy4gVGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyOTA6XHRcdCAgaW5mb3JtYXRpb24gaW5jbHVkZXMgZ2xvYmFsIGFuZCBwZXIgY2h1bmsgc3RhdGlzdGljcywgd2hpY2ggY2FuXG4xMjkxOlx0XHQgIGJlIHVzZWQgdG8gaGVscCB1bmRlcnN0YW5kIHBlcmNwdSBtZW1vcnkgdXNhZ2UuXG4xMjkyOlx0XG4xMjkzOlx0Y29uZmlnIEdVUF9URVNUXG4xMjk0Olx0XHRib29sIFwmIzM0O0VuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHNcJiMzNDtcbjEyOTU6XHRcdGRlcGVuZHMgb24gREVCVUdfRlNcbjEyOTY6XHRcdGhlbHBcbjEyOTc6XHRcdCAgUHJvdmlkZXMgL3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXMgYSB3YXlcbjEyOTg6XHRcdCAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgZm9yXG4xMjk5Olx0XHQgIHRoZSBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCkgZmFtaWx5IG9mIEFQSSBjYWxscy5cbjEzMDA6XHRcbjEzMDE6XHRcdCAgVGhlc2UgdGVzdHMgaW5jbHVkZSBiZW5jaG1hcmsgdGVzdGluZyBvZiB0aGUgX2Zhc3QgdmFyaWFudHMgb2ZcbjEzMDI6XHRcdCAgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpLCBhcyB3ZWxsIGFzIHNtb2tlIHRlc3RzIG9mXG4xMzAzOlx0XHQgIHRoZSBub24tX2Zhc3QgdmFyaWFudHMuXG4xMzA0Olx0XG4xMzA1Olx0XHQgIFRoZXJlIGlzIGFsc28gYSBzdWItdGVzdCB0aGF0IGFsbG93cyBydW5uaW5nIGR1bXBfcGFnZSgpIG9uIGFueVxuMTMwNjpcdFx0ICBvZiB1cCB0byBlaWdodCBwYWdlcyAoc2VsZWN0ZWQgYnkgY29tbWFuZCBsaW5lIGFyZ3MpIHdpdGhpbiB0aGVcbjEzMDc6XHRcdCAgcmFuZ2Ugb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIFRoZXNlIHBhZ2VzIGFyZSBlaXRoZXIgcGlubmVkIHZpYVxuMTMwODpcdFx0ICBwaW5fdXNlcl9wYWdlcyooKSwgb3IgcGlubmVkIHZpYSBnZXRfdXNlcl9wYWdlcyooKSwgYXMgc3BlY2lmaWVkXG4xMzA5Olx0XHQgIGJ5IG90aGVyIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuXG4xMzEwOlx0XG4xMzExOlx0XHQgIFNlZSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4xMzEyOlx0XG4xMzEzOlx0Y29tbWVudCBcJiMzNDtHVVBfVEVTVCBuZWVkcyB0byBoYXZlIERFQlVHX0ZTIGVuYWJsZWRcJiMzNDtcbjEzMTQ6XHRcdGRlcGVuZHMgb24gIUdVUF9URVNUIFx1MDAyNlx1MDAyNiAhREVCVUdfRlNcbjEzMTU6XHRcbjEzMTY6XHRjb25maWcgR1VQX0dFVF9QWFhfTE9XX0hJR0hcbjEzMTc6XHRcdGJvb2xcbjEzMTg6XHRcbjEzMTk6XHRjb25maWcgRE1BUE9PTF9URVNUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMzkKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogNTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIGBndXBfdGVzdGAgTW9kdWxlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBJJiMzOTt2ZSBnb3QgYSBwbGFuIGZvciBmdXp6aW5nIGl0LiBUaGUga2V5IGhlcmUgaXMgdGhlIGBndXBfdGVzdGAgZGVidWdmcyBpbnRlcmZhY2UuIFRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyIC0gYERFQlVHX0ZTYCwgYW5kIHNpbmNlIGBHVVBfVEVTVGAgZW5hYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSwgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGluIHRoZSBjb25maWd1cmF0aW9uLgoKTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuICp3b3J0aCogZnV6emluZz8gQWJzb2x1dGVseSEgSXQmIzM5O3MgYSB0ZXN0IG1vZHVsZSwgeWVzLCBidXQgaXQgZXhwb3NlcyBrZXJuZWwgQVBJcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlLCBhbmQgY29uY3VycmVuY3kgYnVncyBhcmUgcHJlY2lzZWx5IHdoYXQgZnV6emVycyBleGNlbCBhdCB1bmNvdmVyaW5nIGFuZCB2YWxpZGF0aW5nIGZpeGVzIGZvci4gVGhpcyBpcyBhIGNsYXNzaWMgb3Bwb3J0dW5pdHkuCgpUaGUgZnVuY3Rpb25zIHRoYXQgYXJlIG1vc3QgbGlrZWx5IHRvIGJlIGludGVyZXN0aW5nIGFyZSBgZ3VwX3Rlc3Rfb3BlbmAsIGBndXBfdGVzdF9yZWxlYXNlYCwgYGd1cF90ZXN0X2lvY3RsYCwgYW5kIGBwaW5fbG9uZ3Rlcm1fdGVzdF9pb2N0bGAuIEkgaW5pdGlhbGx5IGhhZCBhIGNvbmNlcm4gYWJvdXQgYHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0YCwgYHBpbl9sb25ndGVybV90ZXN0X3N0b3BgLCBhbmQgYHBpbl9sb25ndGVybV90ZXN0X3JlYWRgIHNpbmNlIHRoZXkgYXJlIGlubGluZSBhbmQgd29uJiMzOTt0IGhhdmUgdGhlaXIgb3duIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIFNpbmNlIHRoaXMgaXMgYW4gaW9jdGwgYmFzZWQgaW50ZXJmYWNlLCBpdCBtYWtlcyBzZW5zZSB0byBmb2N1cyBvbiB0aGUgYCpfaW9jdGxgIGZ1bmN0aW9ucy4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGNoZWNrIG9uIHRoZSBgcGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGxgIGZ1bmN0aW9uIHNpbmNlIGl0IGNvdWxkIGJlIGlubGluZWQuIEFoLCB5ZXMsIGl0JiMzOTtzIGBzdGF0aWMgbG9uZyBwaW5fbG9uZ3Rlcm1fdGVzdF9pb2N0bCguLi4pYC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYGd1cF90ZXN0X2lvY3RsYCwgd2hpY2ggaXMgYWxzbyBgc3RhdGljIGxvbmcgZ3VwX3Rlc3RfaW9jdGwoLi4uKWAuIFNpbmNlIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gb25lIHBsYWNlLCB0aGUgY29tcGlsZXIgKm1pZ2h0KiBpbmxpbmUgaXQuIEhvd2V2ZXIsIGBndXBfdGVzdF9pb2N0bGAgaXMgbm90IGlubGluZWQgYmVjYXVzZSBpdCYjMzk7cyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBUaGVyZWZvcmUsIGBndXBfdGVzdF9pb2N0bGAgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0LiBMaWtld2lzZSwgYGd1cF90ZXN0X29wZW5gIGFuZCBgZ3VwX3Rlc3RfcmVsZWFzZWAgYXJlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB0b28uCgpTbywgdG8gc3VtbWFyaXplLCBJJiMzOTttIGxpc3Rpbmc6CiogICBgZ3VwX3Rlc3Rfb3BlbmAKKiAgIGBndXBfdGVzdF9yZWxlYXNlYAoqICAgYGd1cF90ZXN0X2lvY3RsYAoqICAgYHBpbl9sb25ndGVybV90ZXN0X2lvY3RsYAoKVGhlIGNvbmZpZyBuZWVkZWQgZm9yIHRoaXMgaXMgYEdVUF9URVNUYC4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSBgZ3VwX3Rlc3RgIGRlYnVnZnMgaW50ZXJmYWNlIHRvIHVzZSBwZXItZmlsZSBkZXNjcmlwdG9yIHN0YXRlIGZvciB0aGUgYFBJTl9MT05HVEVSTV9URVNUXypgIGlvY3RscywgZml4aW5nIGNvbmN1cnJlbmN5IHByb2JsZW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gYSB0ZXN0IG1vZHVsZSB0aGF0IGV4cG9zZXMga2VybmVsIEFQSXMgdG8gdXNlcnNwYWNlLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgY29uY3VycmVuY3kgZml4IGlzIGNvcnJlY3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGlzc3VlcyBzdWNoIGFzIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBOb3csIGxldCYjMzk7cyBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7R1VQX1RFU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtndXBfdGVzdF9vcGVuJiMzNDssCiAgICAmIzM0O2d1cF90ZXN0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7Z3VwX3Rlc3RfaW9jdGwmIzM0OywKICAgICYjMzQ7cGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGd1cF90ZXN0IGRlYnVnZnMgaW50ZXJmYWNlIHRvIHVzZSBwZXItZmlsZSBkZXNjcmlwdG9yIHN0YXRlIGluc3RlYWQgb2YgZ2xvYmFsIHN0YXRlIGZvciB0aGUgUElOX0xPTkdURVJNX1RFU1RfKiBpb2N0bHMsIGZpeGluZyBjb25jdXJyZW5jeSBpc3N1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBhIHRlc3QgbW9kdWxlIHRoYXQgZXhwb3NlcyBrZXJuZWwgQVBJcyB0byB1c2Vyc3BhY2UsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBjb25jdXJyZW5jeSBmaXggaXMgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG5ldyBpc3N1ZXMgbGlrZSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dVUF9URVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3VwX3Rlc3Rfb3BlbiYjMzQ7LAogICAgJiMzNDtndXBfdGVzdF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2d1cF90ZXN0X2lvY3RsJiMzNDssCiAgICAmIzM0O3Bpbl9sb25ndGVybV90ZXN0X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBndXBfdGVzdCBkZWJ1Z2ZzIGludGVyZmFjZSB0byB1c2UgcGVyLWZpbGUgZGVzY3JpcHRvciBzdGF0ZSBpbnN0ZWFkIG9mIGdsb2JhbCBzdGF0ZSBmb3IgdGhlIFBJTl9MT05HVEVSTV9URVNUXyogaW9jdGxzLCBmaXhpbmcgY29uY3VycmVuY3kgaXNzdWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gYSB0ZXN0IG1vZHVsZSB0aGF0IGV4cG9zZXMga2VybmVsIEFQSXMgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgY29uY3VycmVuY3kgZml4IGlzIGNvcnJlY3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBuZXcgaXNzdWVzIGxpa2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHBpbl9sb25ndGVybV90ZXN0YCBpbiBgbW0vZ3VwX3Rlc3QuY2AgdG8gdXNlIGEgcGVyLWZpbGUgZGF0YSBzdHJ1Y3R1cmUgKGBzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YWApIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcywgYWxsb3dpbmcgY29uY3VycmVudCB1c2VycyBvZiB0aGUgZ3VwX3Rlc3QgaW9jdGwuIFRoZSBuZXcgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIGFsbCBmaWVsZHMuIFRoZSBhcnJheSBvZiBwYWdlIHBvaW50ZXJzIGlzIGFsbG9jYXRlZCB1c2luZyBga3ZjYWxsb2NgLCB3aGljaCBhbHNvIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeS4gVGhlIG9ubHkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSBpcyB0aGUgY29udGVudCBvZiB0aGUgcGlubmVkIHVzZXIgcGFnZXMsIHdoaWNoIGlzIGlkZW50aWNhbCB0byB0aGUgcHJlLXBhdGNoIGJlaGF2aW9yIGFuZCBkb2VzIG5vdCBsZWFrIGtlcm5lbCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbWVtb3J5IGxlYWtzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjZhZjY3OTVkYTg5MTY0YmI5MWYyYmE5YmE2MzhlZDRjM2Y3NTYyYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDEyOjIxOjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZ3VwX3Rlc3QuYyBiL21tL2d1cF90ZXN0LmMKaW5kZXggZWI0YzljZGExNmVkOC4uNDRjMWNkZmI5YzM3MSAxMDA2NDQKLS0tIGEvbW0vZ3VwX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ndXBfdGVzdC5jCkBAIC04LDYgJiM0Mzs4LDEyIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaGlnaG1lbS5oJmd0OwogI2luY2x1ZGUgJiMzNDtndXBfdGVzdC5oJiMzNDsKIAomIzQzO3N0cnVjdCBndXBfdGVzdF9kYXRhIHsKJiM0MzsJc3RydWN0IG11dGV4IGxvbmd0ZXJtX211dGV4OwomIzQzOwlzdHJ1Y3QgcGFnZSAqKmxvbmd0ZXJtX3BhZ2VzOwomIzQzOwl1bnNpZ25lZCBsb25nIGxvbmd0ZXJtX25yX3BhZ2VzOwomIzQzO307CiYjNDM7CiBzdGF0aWMgdm9pZCBwdXRfYmFja19wYWdlcyh1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAogCQkJICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgdW5zaWduZWQgaW50IGd1cF90ZXN0X2ZsYWdzKQogewpAQCAtMjA4LDIzICYjNDM7MjE0LDIwIEBAIHN0YXRpYyBpbnQgX19ndXBfdGVzdF9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBERUZJTkVfTVVURVgocGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpOwotc3RhdGljIHN0cnVjdCBwYWdlICoqcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXM7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlczsKLQotc3RhdGljIGlubGluZSB2b2lkIHBpbl9sb25ndGVybV90ZXN0X3N0b3Aodm9pZCkKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSkKIHsKLQlpZiAocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpIHsKLQkJaWYgKHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzKQotCQkJdW5waW5fdXNlcl9wYWdlcyhwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcywKLQkJCQkJIHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzKTsKLQkJa3ZmcmVlKHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzKTsKLQkJcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMgPSBOVUxMOwotCQlwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyA9IDA7CiYjNDM7CWlmIChkYXRhLSZndDtsb25ndGVybV9wYWdlcykgewomIzQzOwkJaWYgKGRhdGEtJmd0O2xvbmd0ZXJtX25yX3BhZ2VzKQomIzQzOwkJCXVucGluX3VzZXJfcGFnZXMoZGF0YS0mZ3Q7bG9uZ3Rlcm1fcGFnZXMsCiYjNDM7CQkJCQkgZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXMpOwomIzQzOwkJa3ZmcmVlKGRhdGEtJmd0O2xvbmd0ZXJtX3BhZ2VzKTsKJiM0MzsJCWRhdGEtJmd0O2xvbmd0ZXJtX3BhZ2VzID0gTlVMTDsKJiM0MzsJCWRhdGEtJmd0O2xvbmd0ZXJtX25yX3BhZ2VzID0gMDsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJbG9uZyBucl9wYWdlcywgY3VyX3BhZ2VzLCBhZGRyLCByZW1haW5pbmdfcGFnZXM7CiAJaW50IGd1cF9mbGFncyA9IEZPTExfTE9OR1RFUk07CkBAIC0yMzMsNyAmIzQzOzIzNiw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKQogCWludCByZXQgPSAwOwogCWJvb2wgZmFzdDsKIAotCWlmIChwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcykKJiM0MzsJaWYgKGRhdGEtJmd0O2xvbmd0ZXJtX3BhZ2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2FyZ3MsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGFyZ3MpKSkKQEAgLTI2MywxMiAmIzQzOzI2NiwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydCh1bnNpZ25lZCBsb25nIGFyZykKIAkJcmV0dXJuIC1FSU5UUjsKIAl9CiAKLQlwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcyA9IHBhZ2VzOwotCXBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzID0gMDsKJiM0MzsJZGF0YS0mZ3Q7bG9uZ3Rlcm1fcGFnZXMgPSBwYWdlczsKJiM0MzsJZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXMgPSAwOwogCi0Jd2hpbGUgKG5yX3BhZ2VzIC0gcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMpIHsKLQkJcmVtYWluaW5nX3BhZ2VzID0gbnJfcGFnZXMgLSBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlczsKLQkJYWRkciA9IGFyZ3MuYWRkciAmIzQzOyBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyAqIFBBR0VfU0laRTsKJiM0MzsJd2hpbGUgKG5yX3BhZ2VzIC0gZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXMpIHsKJiM0MzsJCXJlbWFpbmluZ19wYWdlcyA9IG5yX3BhZ2VzIC0gZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXM7CiYjNDM7CQlhZGRyID0gYXJncy5hZGRyICYjNDM7IGRhdGEtJmd0O2xvbmd0ZXJtX25yX3BhZ2VzICogUEFHRV9TSVpFOwogCiAJCWlmIChmYXN0KQogCQkJY3VyX3BhZ2VzID0gcGluX3VzZXJfcGFnZXNfZmFzdChhZGRyLCByZW1haW5pbmdfcGFnZXMsCkBAIC0yNzcsMTEgJiM0MzsyODAsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpCiAJCQljdXJfcGFnZXMgPSBwaW5fdXNlcl9wYWdlcyhhZGRyLCByZW1haW5pbmdfcGFnZXMsCiAJCQkJCQkgICBndXBfZmxhZ3MsIHBhZ2VzKTsKIAkJaWYgKGN1cl9wYWdlcyAmbHQ7IDApIHsKLQkJCXBpbl9sb25ndGVybV90ZXN0X3N0b3AoKTsKJiM0MzsJCQlwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpOwogCQkJcmV0ID0gY3VyX3BhZ2VzOwogCQkJYnJlYWs7CiAJCX0KLQkJcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMgJiM0Mzs9IGN1cl9wYWdlczsKJiM0MzsJCWRhdGEtJmd0O2xvbmd0ZXJtX25yX3BhZ2VzICYjNDM7PSBjdXJfcGFnZXM7CiAJCXBhZ2VzICYjNDM7PSBjdXJfcGFnZXM7CiAJfQogCkBAIC0yOTAsMTkgJiM0MzsyOTMsMjAgQEAgc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZCh1bnNpZ25lZCBsb25nIGFyZykKJiM0MztzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJX191NjQgdXNlcl9hZGRyOwogCXVuc2lnbmVkIGxvbmcgaTsKIAotCWlmICghcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpCiYjNDM7CWlmICghZGF0YS0mZ3Q7bG9uZ3Rlcm1fcGFnZXMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7dXNlcl9hZGRyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZih1c2VyX2FkZHIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXZvaWQgKmFkZHIgPSBrbWFwX2xvY2FsX3BhZ2UocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXNbaV0pOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGF0YS0mZ3Q7bG9uZ3Rlcm1fbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl2b2lkICphZGRyID0ga21hcF9sb2NhbF9wYWdlKGRhdGEtJmd0O2xvbmd0ZXJtX3BhZ2VzW2ldKTsKIAkJdW5zaWduZWQgbG9uZyByZXQ7CiAKIAkJcmV0ID0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXVzZXJfYWRkciwgYWRkciwKQEAgLTMxOCwyNSAmIzQzOzMyMiwyNiBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHVuc2lnbmVkIGxvbmcgYXJnKQogc3RhdGljIGxvbmcgcGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKJiM0MzsJc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEgPSBmaWxlcC0mZ3Q7cHJpdmF0ZV9kYXRhOwogCWludCByZXQgPSAtRUlOVkFMOwogCi0JaWYgKG11dGV4X2xvY2tfa2lsbGFibGUoJmFtcDtwaW5fbG9uZ3Rlcm1fdGVzdF9tdXRleCkpCiYjNDM7CWlmIChtdXRleF9sb2NrX2tpbGxhYmxlKCZhbXA7ZGF0YS0mZ3Q7bG9uZ3Rlcm1fbXV0ZXgpKQogCQlyZXR1cm4gLUVJTlRSOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFBJTl9MT05HVEVSTV9URVNUX1NUQVJUOgotCQlyZXQgPSBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydChhcmcpOwomIzQzOwkJcmV0ID0gcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoZGF0YSwgYXJnKTsKIAkJYnJlYWs7CiAJY2FzZSBQSU5fTE9OR1RFUk1fVEVTVF9TVE9QOgotCQlwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKCk7CiYjNDM7CQlwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpOwogCQlyZXQgPSAwOwogCQlicmVhazsKIAljYXNlIFBJTl9MT05HVEVSTV9URVNUX1JFQUQ6Ci0JCXJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoYXJnKTsKJiM0MzsJCXJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoZGF0YSwgYXJnKTsKIAkJYnJlYWs7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZhbXA7cGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkYXRhLSZndDtsb25ndGVybV9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzc1LDE1ICYjNDM7MzgwLDQwIEBAIHN0YXRpYyBsb25nIGd1cF90ZXN0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZ3VwX3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkYXRhID0ga3phbGxvY19vYmooKmRhdGEpOwomIzQzOwlpZiAoIWRhdGEpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0ID0gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWtmcmVlKGRhdGEpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9pbml0KCZhbXA7ZGF0YS0mZ3Q7bG9uZ3Rlcm1fbXV0ZXgpOwomIzQzOwlmaWxlLSZndDtwcml2YXRlX2RhdGEgPSBkYXRhOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGd1cF90ZXN0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcCgpOwomIzQzOwlzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsKJiM0MzsJcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChkYXRhKTsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO2RhdGEtJmd0O2xvbmd0ZXJtX211dGV4KTsKJiM0MzsJa2ZyZWUoZGF0YSk7CiYjNDM7CWZpbGUtJmd0O3ByaXZhdGVfZGF0YSA9IE5VTEw7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3VwX3Rlc3RfZm9wcyA9IHsKLQkub3BlbiA9IG5vbnNlZWthYmxlX29wZW4sCiYjNDM7CS5vcGVuID0gZ3VwX3Rlc3Rfb3BlbiwKIAkudW5sb2NrZWRfaW9jdGwgPSBndXBfdGVzdF9pb2N0bCwKIAkuY29tcGF0X2lvY3RsID0gY29tcGF0X3B0cl9pb2N0bCwKIAkucmVsZWFzZSA9IGd1cF90ZXN0X3JlbGVhc2UsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDIzCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIGBtbS9ndXBfdGVzdC5jYCBmb3IgQ29uY3VycmVudCBHVVAgVGVzdCBVc2FnZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGltcHJvdmluZyB0aGUgY29uY3VycmVuY3kgb2YgdGhlIGBndXBfdGVzdGAgaW9jdGwuIEN1cnJlbnRseSwgdGhlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYHBpbl9sb25ndGVybV90ZXN0YCBmdW5jdGlvbmFsaXR5LCByZWxpZXMgb24gZ2xvYmFsIHZhcmlhYmxlcy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYm90dGxlbmVjaywgZXNwZWNpYWxseSBpZiB3ZSB3YW50IHRvIGFsbG93IG11bHRpcGxlIHVzZXJzIHRvIHJ1biBgZ3VwX3Rlc3RgIGNvbmN1cnJlbnRseS4gU28sIHRoZSByZWZhY3RvciBpcyBhIGdvb2QgbW92ZS4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBob3cgdGhleeKAmXJlIGRvaW5nIGl0LiBUaGUga2V5IGlzIHVzaW5nIGEgcGVyLWZpbGUgZGF0YSBzdHJ1Y3R1cmUsIGBzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YWAsIHRvIHJlcGxhY2UgdGhvc2UgZ2xvYmFsIHZhcmlhYmxlczogYHBpbl9sb25ndGVybV90ZXN0X211dGV4YCwgYHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzYCwgYW5kIGBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlc2AuIFRoYXQmIzM5O3MgdGhlIHJpZ2h0IGFwcHJvYWNoOyBwZXItZmlsZSBsb2NraW5nIGFuZCBkYXRhIGlzIHRoZSBvYnZpb3VzIHNvbHV0aW9uIGhlcmUuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGUgY2hhbmdlcy4gRmlyc3QsIHRoZXkgZGVmaW5lIHRoZSBzdHJ1Y3R1cmUsIGBzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YWAuIEZpbmUsIHVuZGVyc3RhbmRhYmxlLgoKT2theSwgbm93IGxldCYjMzk7cyBzZWUgaG93IHRoaXMgc3RydWN0dXJlIGlzIGluc3RhbnRpYXRlZC4gQWgsIGluIGBndXBfdGVzdF9vcGVuYCwgaXQgbG9va3MgbGlrZSBgZGF0YWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigqZGF0YSlgLiBXYWl0LCBga3phbGxvY19vYmpgPyBUaGF0JiMzOTtzIG5vdCBhIHN0YW5kYXJkIGtlcm5lbCBmdW5jdGlvbiwgaXMgaXQ/IEl0JiMzOTtzIHVuZmFtaWxpYXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpc24mIzM5O3QgYSB0eXBvIG9yIHNvbWUgY3VzdG9tIG1hY3JvIHdpdGhpbiB0aGlzIHBhdGNoIG9yIHRoZSBsYXJnZXIgcHJvamVjdC4gSXQgc2VlbXMgb2RkLCBhcyB0aGUgdXN1YWwga2VybmVsIGFsbG9jYXRpb24gZnVuY3Rpb24gaXMgYGt6YWxsb2NgLiBVbmxlc3MgdGhpcyBpcyBhIHJlY2VudCBhZGRpdGlvbi4gT2theSwgbGV0JiMzOTtzIGFzc3VtZSBpdCYjMzk7cyBga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKWAgZm9yIG5vdywgYnV0IEkgbmVlZCB0byBjaGVjay4gSXQmIzM5O3MgYmVzdCBwcmFjdGljZSB0byBjb25maXJtIHRoZSBkZXRhaWxzLiBMZXQmIzM5O3Mgc2VlIGlmIGl0JiMzOTtzIGEgbWFjcm8gZGVmaW5lZCBzb21ld2hlcmUsIG9yIHBlcmhhcHMgYSB0eXBvLiBHcmVwcGluZyBmb3IgYGt6YWxsb2Nfb2JqYCBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t6YWxsb2Nfb2JqJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3OTEzOCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdD0xMDM9bGlzdDpcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTExNC1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q6MTE1OiAgICAgICAgICBncm9jayA9IGt6YWxsb2Nfb2JqKCpncm9jayk7XG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTExNi0gICAgICAgICAgaWYgKCFncm9jaylcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTEyNS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q6MTI2OiAgICAgICAgICBkaW1pdHJpID0ga3phbGxvY19vYmooKmRpbWl0cmkpO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMjctICAgICAgICAgIGlmICghZGltaXRyaSlcbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3Q9NDU9YSBtZXNzYWdlIGFuZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBBUEkgYW5kIHJldHVybiBpbW1lZGlhdGVseSkuXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0LTg5LVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0OjkwOlx0XHRkY19zeW5jID0ga3phbGxvY19vYmooKmRjX3N5bmMpO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0OjkxOlx0XHRkY19hc3luYyA9IGt6YWxsb2Nfb2JqKCpkY19hc3luYyk7XG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3QtOTItXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0PTI2PUV4YW1wbGU6XG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0LTQ0LVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0OjQ1Olx0XHRteV9maCA9IGt6YWxsb2Nfb2JqKCpteV9maCk7XG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3QtNDYtXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTM4PVRoZSBrZXJuZWwgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBnZW5lcmFsIHB1cnBvc2UgbWVtb3J5IGFsbG9jYXRvcnM6XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Mzk6a21hbGxvYygpLCBremFsbG9jKCksIGttYWxsb2Nfb2JqcygpLCBremFsbG9jX29ianMoKSwgdm1hbGxvYygpLCBhbmRcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0MC12emFsbG9jKCkuICBQbGVhc2UgcmVmZXIgdG8gdGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTY0PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgYWxsb2NhdGluZyBhIHplcm9lZCBhcnJheSBpcyB0aGUgZm9sbG93aW5nOlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2Ny1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk2ODpcdHAgPSBremFsbG9jX29ianMoKnAsIG4sIC4uLik7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjktXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM5OD1iZWNvbWUsIHJlc3BlY3RpdmVseTo6XG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMC1cdHB0ciA9IGttYWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMTpcdHB0ciA9IGt6YWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMi1cdHB0ciA9IGttYWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAzOlx0cHRyID0ga3phbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDQtXHRwdHIgPSBrbWFsbG9jX2ZsZXgoKnB0ciwgZmxleF9tZW1iZXIsIGNvdW50IFssIGdmcF0gKTtcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MjA4PXRvIGRldGFpbHMgZXhwbGFpbmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbi5cbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMjY4LSAgICAgICAgICAgICAgLyogYWxsb2NhdGUgYSBjaGlwLXNwZWNpZmljIGRhdGEgd2l0aCB6ZXJvIGZpbGxlZCAqL1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjI2OTogICAgICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMjcwLSAgICAgICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTClcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9NjIzPUFmdGVyIGFsbG9jYXRpbmcgYSBjYXJkIGluc3RhbmNlIHZpYSA6YzpmdW5jOmBzbmRfY2FyZF9uZXcoKWBcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNjMwLSAgLi4uLi5cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDo2MzE6ICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTYzMi1cbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9Njk4PWRlc3RydWN0b3IgYW5kIFBDSSBlbnRyaWVzLiBFeGFtcGxlIGNvZGUgaXMgc2hvd24gZmlyc3QsIGJlbG93Ojpcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNzQ5LVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0Ojc1MDogICAgICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNzUxLSAgICAgICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTCkge1xuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0zODIzPWNoaXAgZGF0YSBpbmRpdmlkdWFsbHk6OlxuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zODM1LSAgICAgICAgICAuLi4uXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MzgzNjogICAgICAgICAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zODM3LSAgICAgICAgICAuLi4uXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0PTc5ND1pbnQgbXlfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQtODAxLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0OjgwMjpcdG15X2ZoID0ga3phbGxvY19vYmooKm15X2ZoKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dC04MDMtXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM9NjQ9bW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGY2NF9FaGRyICpoZHIsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtOTUtXHRuc3ltcyA9IHN5bXRhYi1cdTAwM2VzaF9zaXplIC8gc2l6ZW9mKEVsZjY0X1N5bSk7XG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYzo5NjpcdGNoYWlucyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgZ290X2VudHJ5LCBuc3ltcyk7XG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy05Ny1cdGlmICghY2hhaW5zKSB7XG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYz0zOTA9cmVnaXN0ZXJfY3B1cyh2b2lkKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzk0LVx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM6Mzk1Olx0XHRzdHJ1Y3QgY3B1ICpwID0ga3phbGxvY19vYmooKnApO1xuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zOTYtXHRcdGlmICghcClcbi0tXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmM9MTEyMD1zdGF0aWMgaW50IGppdF9wcmVwYXJlX2ZpbmFsX21lbV9hbGxvYyhzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eClcbi0tXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmMtMTEzMS1cdGlmIChjdHgtXHUwMDNlbmVlZF9leHRyYV9wYXNzKSB7XG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmM6MTEzMjpcdFx0Y3R4LVx1MDAzZWppdF9kYXRhID0ga3phbGxvY19vYmooKmN0eC1cdTAwM2VqaXRfZGF0YSk7XG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmMtMTEzMy1cdFx0aWYgKCFjdHgtXHUwMDNlaml0X2RhdGEpXG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTIyMD1sb2NvbW9faW5pdF9vbmVfY2hpbGQoc3RydWN0IGxvY29tbyAqbGNoaXAsIHN0cnVjdCBsb2NvbW9fZGV2X2luZm8gKmluZm8pXG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTIyNC1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzoyMjU6XHRkZXYgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9jb21vX2Rldik7XG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjI2LVx0aWYgKCFkZXYpIHtcbi0tXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM9MzU2PV9fbG9jb21vX3Byb2JlKHN0cnVjdCBkZXZpY2UgKm1lLCBzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwgaW50IGlycSlcbi0tXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMzYyLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jOjM2MzpcdGxjaGlwID0ga3phbGxvY19vYmooc3RydWN0IGxvY29tbyk7XG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMzY0LVx0aWYgKCFsY2hpcClcbi0tXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM9NzMzPXNhMTExMV9pbml0X29uZV9jaGlsZChzdHJ1Y3Qgc2ExMTExICpzYWNoaXAsIHN0cnVjdCByZXNvdXJjZSAqcGFyZW50LFxuLS1cbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy03MzktXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM6NzQwOlx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IHNhMTExMV9kZXYpO1xuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTc0MS1cdGlmICghZGV2KSB7XG4tLVxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmM9MTc4PXN0YXRpYyBpbnQgc2Nvb3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYy0xODctXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYzoxODg6XHRkZXZwdHIgPSBremFsbG9jX29iaihzdHJ1Y3Qgc2Nvb3BfZGV2KTtcbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jLTE4OS1cdGlmICghZGV2cHRyKVxuLS1cbmFyY2gvYXJtL2tlcm5lbC9zbXAuYz0xMDg9c3RhdGljIGludCBzZWNvbmRhcnlfYmlnbGl0dGxlX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSlcbi0tXG5hcmNoL2FybS9rZXJuZWwvc21wLmMtMTEwLVx0aWYgKCFjcHVfdnRhYmxlW2NwdV0pXG5hcmNoL2FybS9rZXJuZWwvc21wLmM6MTExOlx0XHRjcHVfdnRhYmxlW2NwdV0gPSBremFsbG9jX29iaigqY3B1X3Z0YWJsZVtjcHVdKTtcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYy0xMTItXG4tLVxuYXJjaC9hcm0va2VybmVsL3Zkc28uYz0xNjk9c3RhdGljIGludCBfX2luaXQgdmRzb19pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0va2VybmVsL3Zkc28uYy0xODEtXHQvKiBBbGxvY2F0ZSB0aGUgVkRTTyB0ZXh0IHBhZ2VsaXN0ICovXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jOjE4MjpcdHZkc29fdGV4dF9wYWdlbGlzdCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB0ZXh0X3BhZ2VzKTtcbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmMtMTgzLVx0aWYgKHZkc29fdGV4dF9wYWdlbGlzdCA9PSBOVUxMKVxuLS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmM9MjYxPWludCBfX2luaXQgZGMyMTI4NV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cylcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jLTI2NC1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmM6MjY1Olx0cmVzID0ga3phbGxvY19vYmpzKHN0cnVjdCByZXNvdXJjZSwgMik7XG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jLTI2Ni1cdGlmICghcmVzKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYz02OT1zdGF0aWMgaW50IF9faW5pdCBlYnNhMjg1X2xlZHNfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmMtODYtXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jOjg3Olx0XHRsZWQgPSBremFsbG9jX29iaigqbGVkKTtcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmMtODgtXHRcdGlmICghbGVkKVxuLS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYz03MjA9c3RhdGljIGludCBfX2luaXQgbmV0d2luZGVyX2xlZHNfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYy03MjktXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmM6NzMwOlx0XHRsZWQgPSBremFsbG9jX29iaigqbGVkKTtcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYy03MzEtXHRcdGlmICghbGVkKVxuLS1cbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYz00NzM9c3RhdGljIGludCBpbXhfbW1kY19wZXJmX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdm9pZCBfX2lvbWVtICptbWRjX2Jhc2UsXG4tLVxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTQ3OS1cbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYzo0ODA6XHRwbXVfbW1kYyA9IGt6YWxsb2Nfb2JqKCpwbXVfbW1kYyk7XG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmMtNDgxLVx0aWYgKCFwbXVfbW1kYykge1xuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYz0xMTQ9c3RhdGljIHZvaWQgX19pbml0IGkyY19xdWlyayh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy0xMjktXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM6MTMwOlx0XHRuZXdfY29tcGF0ID0ga3phbGxvY19vYmooKm5ld19jb21wYXQpO1xuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTEzMS1cbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jPTE2Mz1zdGF0aWMgdm9pZCBfX2luaXQgYXJtYWRhXzM3NV8zODBfY29oZXJlbmN5X2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jLTE4Ny1cbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmM6MTg4Olx0XHRwID0ga3phbGxvY19vYmooKnApO1xuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYy0xODktXHRcdHAtXHUwMDNlbmFtZSA9IGtzdHJkdXAoXCYjMzQ7YXJtLGlvLWNvaGVyZW50XCYjMzQ7LCBHRlBfS0VSTkVMKTtcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jPTE0OD1zdGF0aWMgaW50IF9faW5pdCBtdmVidV9zb2NfZGV2aWNlKHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYy0xNTYtXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jOjE1NzpcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYy0xNTgtXHRpZiAoIXNvY19kZXZfYXR0cilcbi0tXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jPTM4MD1zdGF0aWMgdm9pZCBfX2luaXQgbXhzX21hY2hpbmVfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmMtMzg5LVxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYzozOTA6XHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmMtMzkxLVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYz0yOTQ9c3RhdGljIGludCBfX2luaXQgb21hcDFfc3lzdGVtX2RtYV9pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYy0zMjEtXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jOjMyMjpcdGQgPSBremFsbG9jX29iaigqZCk7XG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jLTMyMy1cdGlmICghZCkge1xuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYz0yOTI9c3RhdGljIHZvaWQgb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcoc3RydWN0IHJlc291cmNlICpyZXMsIGludCByZXNfY291bnQsXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jLTI5Ni1cbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYzoyOTc6XHRvbWFwX21jYnNwX2RldmljZXMgPSBremFsbG9jX29ianMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBzaXplKTtcbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYy0yOTgtXHRpZiAoIW9tYXBfbWNic3BfZGV2aWNlcykge1xuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYz01MT1zdGF0aWMgaW50IF9faW5pdCBvbWFwMV9kbV90aW1lcl9pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jLTEyNy1cbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYzoxMjg6XHRcdHBkYXRhID0ga3phbGxvY19vYmooKnBkYXRhKTtcbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYy0xMjktXHRcdGlmICghcGRhdGEpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYz0yMzA9dm9pZCBvbWFwMnh4eF9jbGt0X3Zwc19pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmMtMjM5LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmM6MjQwOlx0aHcgPSBremFsbG9jX29iaigqaHcpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmMtMjQxLVx0aWYgKCFodylcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmM9Nzg2PXZvaWQgX19pbml0IG9tYXBfc29jX2RldmljZV9pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jLTc5MC1cbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYzo3OTE6XHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYy03OTItXHRpZiAoIXNvY19kZXZfYXR0cilcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmM9MTMxPXN0YXRpYyBpbnQgb21hcF9kZXZpY2VfYnVpbGRfZnJvbV9kdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYy0xNTgtXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmM6MTU5Olx0aHdtb2RzID0ga3phbGxvY19vYmpzKHN0cnVjdCBvbWFwX2h3bW9kICosIG9oX2NudCk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMtMTYwLVx0aWYgKCFod21vZHMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYz0zMzgxPXN0YXRpYyBpbnQgb21hcF9od21vZF9hbGxvY2F0ZV9tb2R1bGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb21hcF9od21vZCAqb2gsXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzM5NC1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjMzOTU6XHRzeXNjID0ga3phbGxvY19vYmooKnN5c2MpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzM5Ni1cdGlmICghc3lzYylcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNDI0LVx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2b2gtXHUwMDNlc2xhdmVfcG9ydHMpKSB7XG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozNDI1Olx0XHRvaSA9IGt6YWxsb2Nfb2JqKCpvaSk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNDI2LVx0XHRpZiAoIW9pKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jPTM1MTM9aW50IG9tYXBfaHdtb2RfaW5pdF9tb2R1bGUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1MjctXHRpZiAoIW9oKSB7XG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozNTI4Olx0XHRvaCA9IGt6YWxsb2Nfb2JqKCpvaCk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTI5LVx0XHRpZiAoIW9oKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1MzgtXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozNTM5Olx0XHRvaC1cdTAwM2VjbGFzcyA9IGt6YWxsb2Nfb2JqKCpvaC1cdTAwM2VjbGFzcyk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTQwLVx0XHRpZiAoIW9oLVx1MDAzZWNsYXNzKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jPTM3OT1zdGF0aWMgaW50IF9faW5pdCBhbXgzX2lkbGVfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdV9ub2RlLCBpbnQgY3B1KVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYy00MTItXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmM6NDEzOlx0aWRsZV9zdGF0ZXMgPSBremFsbG9jX29ianMoKmlkbGVfc3RhdGVzLCBzdGF0ZV9jb3VudCk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmMtNDE0LVx0aWYgKCFpZGxlX3N0YXRlcylcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jPTMwPXN0YXRpYyB2b2lkIF9faW5pdCBzcl9zZXRfbnZhbHVlcyhzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgKnZvbHRfZGF0YSxcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jLTQxLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYzo0MjpcdG52YWx1ZV90YWJsZSA9IGt6YWxsb2Nfb2JqcygqbnZhbHVlX3RhYmxlLCBjb3VudCk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jLTQzLVx0aWYgKCFudmFsdWVfdGFibGUpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jPTEzOT1zdGF0aWMgaW50IF9faW5pdCBwY2llX3NldHVwKHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cylcbi0tXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtMTcxLVx0ICovXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM6MTcyOlx0cmVzID0ga3phbGxvY19vYmooc3RydWN0IHJlc291cmNlKTtcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy0xNzMtXHRpZiAoIXJlcylcbi0tXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM9NDY2PXN0YXRpYyBpbnQgX19pbml0IHBjaV9zZXR1cChzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTQ5Mi1cdCAqL1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jOjQ5MzpcdHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByZXNvdXJjZSk7XG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtNDk0LVx0aWYgKCFyZXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYz02ODk9c3RhdGljIHN0cnVjdCBleHBhbnNpb25fY2FyZCAqX19pbml0IGVjYXJkX2FsbG9jX2NhcmQoaW50IHR5cGUsIGludCBzbG90KVxuLS1cbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmMtNjk0LVxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYzo2OTU6XHRlYyA9IGt6YWxsb2Nfb2JqKGVjYXJkX3QpO1xuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYy02OTYtXHRpZiAoIWVjKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYz05Mz1pbnQgX19pbml0IHNhMTF4eF9jbGtfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTA5LVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYzoxMTA6XHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTExMS1cdGlmICghaHcpXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMzEtXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jOjEzMjpcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTMzLVx0aWYgKCFodylcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmM9MzE3PWludCBfX2luaXQgc2ExMXgwX3JlZ2lzdGVyX2ZpeGVkX3JlZ3VsYXRvcihpbnQgbixcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMtMzIzLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jOjMyNDpcdGNmZy1cdTAwM2Vpbml0X2RhdGEgPSBpZCA9IGt6YWxsb2Nfb2JqKCpjZmctXHUwMDNlaW5pdF9kYXRhKTtcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYy0zMjUtXHRpZiAoIWNmZy1cdTAwM2Vpbml0X2RhdGEpXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYz0yMjU9c3RhdGljIGludCBuZXBvbnNldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYy0yNzgtXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jOjI3OTpcdGQgPSBremFsbG9jX29iaigqZCk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jLTI4MC1cdGlmICghZCkge1xuLS1cbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jPTE0MT1zdGF0aWMgaW50IF9faW5pdCByY2FyX2dlbjJfcmVndWxhdG9yX3F1aXJrKHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmMtMTY2LVxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmM6MTY3Olx0XHRxdWlyayA9IGt6YWxsb2Nfb2JqKCpxdWlyayk7XG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYy0xNjgtXHRcdGlmICghcXVpcmspIHtcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYz0zOTM9c3RhdGljIGludCB2ZV9zcGNfcG9wdWxhdGVfb3Bwcyh1aW50MzJfdCBjbHVzdGVyKVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTM5Ny1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjM5ODpcdG9wcHMgPSBremFsbG9jX29ianMoKm9wcHMsIE1BWF9PUFBTKTtcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTM5OS1cdGlmICghb3Bwcylcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYz00NDI9aW50IF9faW5pdCB2ZV9zcGNfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2VhZGRyLCB1MzIgYTE1X2NsdXNpZCwgaW50IGlycSlcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy00NDQtXHRpbnQgcmV0O1xuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6NDQ1Olx0aW5mbyA9IGt6YWxsb2Nfb2JqKCppbmZvKTtcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTQ0Ni1cdGlmICghaW5mbylcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYz01MjM9c3RhdGljIHN0cnVjdCBjbGsgKnZlX3NwY19jbGtfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqY3B1X2Rldilcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy01MjctXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzo1Mjg6XHRzcGMgPSBremFsbG9jX29iaigqc3BjKTtcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTUyOS1cdGlmICghc3BjKVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jPTEyMz1zdGF0aWMgdm9pZCBfX2luaXQgdmVyc2F0aWxlX2R0X3BjaV9pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmMtMTQ0LVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmM6MTQ1Olx0bmV3cHJvcCA9IGt6YWxsb2Nfb2JqKCpuZXdwcm9wKTtcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jLTE0Ni1cdGlmICghbmV3cHJvcClcbi0tXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmM9MTA1PXN0YXRpYyB2b2lkIF9faW5pdCB6eW5xX2luaXRfbWFjaGluZSh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYy0xMTAtXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmM6MTExOlx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtMTEyLVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYz01MDM9c3RhdGljIF9faW5pdCBpbnQgbDJ4MF9wbXVfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmMtNTA5LVxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYzo1MTA6XHRsMngwX3BtdSA9IGt6YWxsb2Nfb2JqKCpsMngwX3BtdSk7XG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jLTUxMS1cdGlmICghbDJ4MF9wbXUpIHtcbi0tXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jPTMxNT1zdGF0aWMgaW50IF9faW5pdCBfX3VuaXBoaWVyX2NhY2hlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCxcbi0tXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jLTM0NC1cbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmM6MzQ1Olx0ZGF0YSA9IGt6YWxsb2Nfb2JqKCpkYXRhKTtcbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmMtMzQ2LVx0aWYgKCFkYXRhKVxuLS1cbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM9NTMzPXN0YXRpYyB2b2lkICpfX2RtYV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpoYW5kbGUsXG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy01NjAtXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jOjU2MTpcdGJ1ZiA9IGt6YWxsb2Nfb2JqKCpidWYsXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTU2Mi1cdFx0XHQgIGdmcCBcdTAwMjYgfihfX0dGUF9ETUEgfCBfX0dGUF9ETUEzMiB8IF9fR0ZQX0hJR0hNRU0pKTtcbi0tXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jPTE0ODc9YXJtX2lvbW11X2NyZWF0ZV9tYXBwaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBiYXNlLCB1NjQgc2l6ZSlcbi0tXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTE1MDYtXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jOjE1MDc6XHRtYXBwaW5nID0ga3phbGxvY19vYmooc3RydWN0IGRtYV9pb21tdV9tYXBwaW5nKTtcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtMTUwOC1cdGlmICghbWFwcGluZylcbi0tXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM9MzE2PWludCBfX2luaXQgYXJjaF94ZW5fdW5wb3B1bGF0ZWRfaW5pdChzdHJ1Y3QgcmVzb3VyY2UgKipyZXMpXG4tLVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM0My1cbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYzozNDQ6XHRyZWdzID0ga3phbGxvY19vYmpzKCpyZWdzLCBucl9yZWcpO1xuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM0NS1cdGlmICghcmVncykge1xuLS1cbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zODctXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM6Mzg4Olx0XHR0bXBfcmVzID0ga3phbGxvY19vYmooKnRtcF9yZXMpO1xuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM4OS1cdFx0aWYgKCF0bXBfcmVzKSB7XG4tLVxuYXJjaC9hcm0veGVuL3AybS5jPTE1MD1ib29sIF9fc2V0X3BoeXNfdG9fbWFjaGluZV9tdWx0aSh1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5hcmNoL2FybS94ZW4vcDJtLmMtMTc4LVxuYXJjaC9hcm0veGVuL3AybS5jOjE3OTpcdHAybV9lbnRyeSA9IGt6YWxsb2Nfb2JqKCpwMm1fZW50cnksIEdGUF9OT1dBSVQpO1xuYXJjaC9hcm0veGVuL3AybS5jLTE4MC1cdGlmICghcDJtX2VudHJ5KVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYz02OD1zdGF0aWMgaW50IF9faW5pdCBfX3Zkc29faW5pdChlbnVtIHZkc29fYWJpIGFiaSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMtODMtXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM6ODQ6XHR2ZHNvX3BhZ2VsaXN0ID0ga3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHZkc29faW5mb1thYmldLnZkc29fcGFnZXMpO1xuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTg1LVx0aWYgKHZkc29fcGFnZWxpc3QgPT0gTlVMTClcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz00ODA9c3RhdGljIGludCBzaGFyZV9wZm5faHlwKHU2NCBwZm4pXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtNDkyLVxuYXJjaC9hcm02NC9rdm0vbW11LmM6NDkzOlx0dGhpcyA9IGt6YWxsb2Nfb2JqKCp0aGlzKTtcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTQ5NC1cdGlmICghdGhpcykge1xuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTk4MT1pbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdHlwZSlcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMDA3LVxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTAwODpcdHBndCA9IGt6YWxsb2Nfb2JqKCpwZ3QsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMDA5LVx0aWYgKCFwZ3QpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9MTE4MD1pbnQgdG9wdXBfaHlwX21lbWNhY2hlKHN0cnVjdCBrdm1faHlwX21lbWNhY2hlICptYywgdW5zaWduZWQgbG9uZyBtaW5fcGFnZXMpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE4NS1cdGlmICghbWMtXHUwMDNlbWFwcGluZykge1xuYXJjaC9hcm02NC9rdm0vbW11LmM6MTE4NjpcdFx0bWMtXHUwMDNlbWFwcGluZyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBwa3ZtX21hcHBpbmcsXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTg3LVx0XHRcdFx0XHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9MjUxMD1pbnQgX19pbml0IGt2bV9tbXVfaW5pdCh1MzIgaHlwX3ZhX2JpdHMpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjU0My1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjI1NDQ6XHRoeXBfcGd0YWJsZSA9IGt6YWxsb2Nfb2JqKCpoeXBfcGd0YWJsZSk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNTQ1LVx0aWYgKCFoeXBfcGd0YWJsZSkge1xuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEzMjg9aW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzMzLVx0aWYgKCF2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGIpIHtcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEzMzQ6XHRcdHN0cnVjdCB2bmNyX3RsYiAqdnQgPSBremFsbG9jX29iaigqdmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiLFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMzNS1cdFx0XHRcdFx0XHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTc5Mz1pbnQga3ZtX2luaXRfbnZfc3lzcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwMi1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE4MDM6XHRrdm0tXHUwMDNlYXJjaC5zeXNyZWdfbWFza3MgPSBremFsbG9jX29iaigqKGt2bS1cdTAwM2VhcmNoLnN5c3JlZ19tYXNrcyksXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xODA0LVx0XHRcdFx0XHQgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tLVxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmM9MTE2PXN0YXRpYyBzdHJ1Y3Qga3ZtX3B0ZHVtcF9ndWVzdF9zdGF0ZSAqa3ZtX3B0ZHVtcF9wYXJzZXJfY3JlYXRlKHN0cnVjdCBrdm1fczJfbW11ICptbXUpXG4tLVxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmMtMTIxLVxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmM6MTIyOlx0c3QgPSBremFsbG9jX29iaihzdHJ1Y3Qga3ZtX3B0ZHVtcF9ndWVzdF9zdGF0ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTEyMy1cdGlmICghc3QpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz0yMDc9c3RhdGljIGludCBrdm1fdmdpY19kaXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgbnJfc3Bpcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTIxMy1cdGRpc3QtXHUwMDNlYWN0aXZlX3NwaXMgPSAoYXRvbWljX3QpQVRPTUlDX0lOSVQoMCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jOjIxNDpcdGRpc3QtXHUwMDNlc3BpcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdmdpY19pcnEsIG5yX3NwaXMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTIxNS1cdGlmICghZGlzdC1cdTAwM2VzcGlzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9MzE2PXN0YXRpYyBpbnQgdmdpY19hbGxvY2F0ZV9wcml2YXRlX2lycXNfbG9ja2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0zMzEtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jOjMzMjpcdHZnaWNfY3B1LVx1MDAzZXByaXZhdGVfaXJxcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdmdpY19pcnEsXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTMzMy1cdFx0XHRcdFx0ICAgICAgbnVtX3ByaXZhdGVfaXJxcyxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYz0xNDI9aW50IGt2bV92Z2ljX3NldHVwX2RlZmF1bHRfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTE0OC1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jOjE0OTpcdGVudHJpZXMgPSBremFsbG9jX29ianMoKmVudHJpZXMsIG5yLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmMtMTUwLVx0aWYgKCFlbnRyaWVzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz03Nj1zdGF0aWMgc3RydWN0IHZnaWNfaXJxICp2Z2ljX2FkZF9scGkoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW50aWQsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTg3LVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjg4Olx0aXJxID0ga3phbGxvY19vYmooc3RydWN0IHZnaWNfaXJxLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTg5LVx0aWYgKCFpcnEpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTk2Mj1zdGF0aWMgaW50IHZnaWNfaXRzX2FsbG9jX2NvbGxlY3Rpb24oc3RydWN0IHZnaWNfaXRzICppdHMsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTk2Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzo5Njg6XHRjb2xsZWN0aW9uID0ga3phbGxvY19vYmooKmNvbGxlY3Rpb24sIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtOTY5LVx0aWYgKCFjb2xsZWN0aW9uKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz0xMDA2PXN0YXRpYyBzdHJ1Y3QgaXRzX2l0ZSAqdmdpY19pdHNfYWxsb2NfaXRlKHN0cnVjdCBpdHNfZGV2aWNlICpkZXZpY2UsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTEwMTEtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTAxMjpcdGl0ZSA9IGt6YWxsb2Nfb2JqKCppdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTAxMy1cdGlmICghaXRlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz0xMTMzPXN0YXRpYyBzdHJ1Y3QgaXRzX2RldmljZSAqdmdpY19pdHNfYWxsb2NfZGV2aWNlKHN0cnVjdCB2Z2ljX2l0cyAqaXRzLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMTM4LVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjExMzk6XHRkZXZpY2UgPSBremFsbG9jX29iaigqZGV2aWNlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTExNDAtXHRpZiAoIWRldmljZSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTg0Nj1zdGF0aWMgaW50IHZnaWNfaXRzX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTg1My1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxODU0Olx0aXRzID0ga3phbGxvY19vYmooc3RydWN0IHZnaWNfaXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTE4NTUtXHRpZiAoIWl0cylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jPTg4Nj1zdGF0aWMgaW50IHZnaWNfdjNfYWxsb2NfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHVpbnQzMl90IGluZGV4LFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtOTMxLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYzo5MzI6XHRyZHJlZyA9IGt6YWxsb2Nfb2JqKCpyZHJlZywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtOTMzLVx0aWYgKCFyZHJlZylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYz0yNDI9aW50IHZnaWNfdjRfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmMtMjU4LVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmM6MjU5Olx0ZGlzdC1cdTAwM2VpdHNfdm0udnBlcyA9IGt6YWxsb2Nfb2JqcygqZGlzdC1cdTAwM2VpdHNfdm0udnBlcywgbnJfdmNwdXMsXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYy0yNjAtXHRcdFx0XHRcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTIwODA9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMTAxLVx0aWYgKCFqaXRfZGF0YSkge1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjEwMjpcdFx0aml0X2RhdGEgPSBremFsbG9jX29iaigqaml0X2RhdGEpO1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMy1cdFx0aWYgKCFqaXRfZGF0YSlcbi0tXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYz0xNz1zdGF0aWMgaW50IF9faW5pdCB2ZHNvX2luaXQodm9pZClcbi0tXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYy0yMi1cdHZkc29fcGFnZWxpc3QgPVxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmM6MjM6XHRcdGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX3BhZ2VzKTtcbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jLTI0LVx0aWYgKHVubGlrZWx5KHZkc29fcGFnZWxpc3QgPT0gTlVMTCkpIHtcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYz00NjY9c3RhdGljIGludCBfX2luaXQgYWRkX2xlZ2FjeV9pc2FfaW8oc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy00NzItXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYzo0NzM6XHRyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSwgR0ZQX0FUT01JQyk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy00NzQtXHRpZiAoIXJhbmdlKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmM9NDU9c3RhdGljIGludCBfX2luaXQgaW5pdF92ZHNvKHZvaWQpXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYy01NS1cdHZkc29faW5mby5jb2RlX21hcHBpbmcucGFnZXMgPVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYzo1NjpcdFx0a3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHZkc29faW5mby5zaXplIC8gUEFHRV9TSVpFKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmMtNTctXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jPTYxND1zdGF0aWMgaW50IGt2bV9laW9pbnRjX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtNjI0LVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjYyNTpcdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTYyNi1cdGlmICghcylcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYz0zOTQ9c3RhdGljIGludCBrdm1faXBpX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy00MTEtXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYzo0MTI6XHRzID0ga3phbGxvY19vYmooc3RydWN0IGxvb25nYXJjaF9pcGkpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtNDEzLVx0aWYgKCFzKVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjQ4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQ3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBHVVAgVGVzdCBEYXRhIFN0cnVjdHVyZSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIEkgc2VlIHRoZXkmIzM5O3JlIHN3YXBwaW5nIG91dCB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgdGhlIEdVUCB0ZXN0IHdpdGggYSBwZXItZmlsZSBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgYSBnb29kIGNoYW5nZSwgbWFrZXMgdGhpbmdzIGNsZWFuZXIgYW5kIHBvdGVudGlhbGx5IGFsbG93cyBmb3IgbXVsdGlwbGUgY29uY3VycmVudCB0ZXN0cywgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBnbG9iYWwgc3RhdGUuIFRoZSBrZXkgaGVyZSBpcyB0aGUgYGt6YWxsb2Nfb2JqYCBjYWxsIGluIGBndXBfdGVzdF9vcGVuYC4gVGhhdCYjMzk7cyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKWAuICBTbywgdGhhdCB6ZXJvLWluaXRpYWxpemVzIHRoZSBgZ3VwX3Rlc3RfZGF0YWAgc3RydWN0dXJlLCB3aGljaCBpcyBpbXBvcnRhbnQuIFRoaXMgZW5zdXJlcyBldmVyeXRoaW5nIHN0YXJ0cyBjbGVhbiwgd2hpY2ggYXZvaWRzIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGUgbXV0ZXggaXMgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCBgbXV0ZXhfaW5pdGAsIHdoaWNoIGlzIGNvcnJlY3QuIFRoZSBgZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhYCBhc3NpZ25tZW50IGlzIHN0YW5kYXJkIHByYWN0aWNlLCBhc3NvY2lhdGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUgd2l0aCB0aGUgZmlsZSBvcGVyYXRpb24uCgpUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludm9sdmUgbW92aW5nIHRoZSBwYWdlIGFycmF5IGFuZCBtdXRleCBmcm9tIGdsb2JhbCBzY29wZSB0byB0aGlzIHBlci1maWxlIHN0cnVjdHVyZS4gVGhlIGtleSBmdW5jdGlvbnMsIGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydGAgYW5kIGBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkYCwgbm93IHRha2UgYSBgc3RydWN0IGd1cF90ZXN0X2RhdGEgKmAgYXMgYW4gYXJndW1lbnQuICBMb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBJIGNhbiBzZWUgdGhhdCB0aGUgY29kZSBpcyBjb3JyZWN0bHkgdXBkYXRpbmcgdG8gdXNlIHRoZSBwZXItZmlsZSBkYXRhOyByZXBsYWNpbmcgYWxsIGluc3RhbmNlcyBvZiB0aGUgb2xkIGdsb2JhbCB2YXJpYWJsZSByZWZlcmVuY2VzIHRvIHRoZSBkYXRhIHN0cnVjdHVyZS4KClRoZSBwYXJ0IHRoYXQgY2F1Z2h0IG15IGF0dGVudGlvbiB3YXMgdGhlIGBjb3B5X3RvX3VzZXJgIGluIGBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkYC4gQnV0IGl0JiMzOTtzIHRyYW5zZmVycmluZyBkYXRhIHRoYXQgY2FtZSBmcm9tIHVzZXIgc3BhY2Ugb3JpZ2luYWxseS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgJiMzNDtyb3VuZC10cmlwcGluZyYjMzQ7IHVzZXIgZGF0YSBiYWNrIHRvIHVzZXIgc3BhY2UgdmlhIHRoZSBwaW5uZWQgcGFnZXMuIFRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgaW5mb3JtYXRpb24gbGVha3MsIGFzIHRoZSB1c2VyIG1lbW9yeSBpcyB0aGUgc291cmNlIG9mIHRoZSBkYXRhLCBhbmQgaXQmIzM5O3Mgc2ltcGx5IGNvcGllZCBiYWNrIHRvIHRoZSBzYW1lIGFkZHJlc3Mgc3BhY2UuICBJdCYjMzk7cyBqdXN0IHRoZSBzdG9yYWdlIGZvciB0aGF0IG1lbW9yeSAodGhlIHBhZ2UgcG9pbnRlcnMpIHRoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBhbGxvY2F0aW9ucy4gVGhlIGBwYWdlc2AgYXJyYXkgaXRzZWxmIGlzbiYjMzk7dCBkaXJlY3RseSBzaG93biBoZXJlLCBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGFyb3VuZCBgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnRgIGZvciB0aGF0LiBBaCwgaGVyZSBpdCBpczogdGhlIG1lbW9yeSBmb3IgdGhlIGBwYWdlc2AgYXJyYXkgaXMgYWxsb2NhdGVkIHdpdGggYGt2bWFsbG9jX2FycmF5YC4gVGhhdCYjMzk7cyBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBrZXJuZWwgbWVtb3J5IGFycmF5LiBJdCBtYWtlcyBzZW5zZSB0aGF0IGBrdmZyZWVgIGlzIHVzZWQgbGF0ZXIgb24gdG8gcmVsZWFzZSB0aGF0IGFsbG9jYXRpb24uCgpTbywgc3VtbWluZyB1cCwgdGhpcyBwYXRjaCBpcyBhIGNsZWFuIHJlZmFjdG9yaW5nLiBJdCBtb3ZlcyB0aGUgdGVzdCYjMzk7cyBzdGF0ZSBpbnRvIGEgcGVyLWZpbGUgc3RydWN0dXJlLCBwcm9wZXJseSBpbml0aWFsaXplcyB0aGF0IHN0cnVjdHVyZSB2aWEgYGt6YWxsb2Nfb2JqYCwgYW5kIGNvcnJlY3RseSBoYW5kbGVzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB0aGUgcm91bmQtdHJpcCBvZiB1c2VyIGRhdGEgdG8gdXNlciBzcGFjZS4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBiZWNhdXNlIG9mIHRoZSB6ZXJvaW5nIGFuZCBpbml0aWFsaXphdGlvbiwgYW5kIHRoZSBkYXRhIGJlaW5nIGNvcGllZCBpcyBvcmlnaW5hdGluZyBmcm9tIHVzZXIgc3BhY2UuIEl0JiMzOTtzIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtYWxsb2NfYXJyYXkuKnBhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZ3VwX3Rlc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzcwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEdVUCBMb25nLVRlcm0gVGVzdCBTdGFydCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbnRvIGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydGAgd2l0aGluIGBtbS9ndXBfdGVzdC5jYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgbG9uZy10ZXJtIHRlc3Qgc2VxdWVuY2UgYmVnaW5zIGZvciB0aGUgR1VQIChnZXRfdXNlcl9wYWdlcykgc3Vic3lzdGVtLiBXaGF0IGFyZSB0aGUgaW5pdGlhbCBzZXR1cCBzdGVwcz8gV2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBjb25maWd1cmVkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgdGhhdCBtaWdodCBiZSBwcm9uZSB0byBjb250ZW50aW9uIG9yIHJhY2UgY29uZGl0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mIGltbWVkaWF0ZWx5PyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZnJhbWV3b3JrIHRoaXMgdGVzdCB1dGlsaXplcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IHNldHMgdXAgdGhlIG1lbW9yeSByZWdpb25zLCBhbnkgdXNlIG9mIHNwZWNpYWxpemVkIHBhZ2Ugc3RydWN0dXJlcyBvciBtYXBwaW5ncywgYW5kIGhvdyB0aGUgdGVzdCBoYXJuZXNzZXMgdGhlIEdVUCBpbnRlcmZhY2UgdG8gc2ltdWxhdGUgcmVhbGlzdGljIG9yIHN0cmVzc2Z1bCBzY2VuYXJpb3MuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcHJvYmFibHkgdXNpbmcgYSBjb21iaW5hdGlvbiBvZiBkaXJlY3QgYW5kIGluZGlyZWN0IEdVUCBjYWxscywgcGVyaGFwcyB3aXRoIHBpbm5lZCBwYWdlcyB0byBtaW1pYyBzb21lIHJlYWwtd29ybGQgYXBwbGljYXRpb24gYmVoYXZpb3IuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZXN0YWJsaXNoIHRoZSBiYXNlbGluZSBhbmQgdGhlIHRlc3QgZW52aXJvbm1lbnQ7IHRoZW4sIGZyb20gdGhlcmUsIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9ndXBfdGVzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjIwOlx0XHRcdGlmIChkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzKVxuIDIyMTpcdFx0XHRcdHVucGluX3VzZXJfcGFnZXMoZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcyxcbiAyMjI6XHRcdFx0XHRcdFx0IGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMpO1xuIDIyMzpcdFx0XHRrdmZyZWUoZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcyk7XG4gMjI0Olx0XHRcdGRhdGEtXHUwMDNlbG9uZ3Rlcm1fcGFnZXMgPSBOVUxMO1xuIDIyNTpcdFx0XHRkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzID0gMDtcbiAyMjY6XHRcdH1cbiAyMjc6XHR9XG4gMjI4Olx0XG4gMjI5Olx0c3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEsXG4gMjMwOlx0XHRcdHVuc2lnbmVkIGxvbmcgYXJnKVxuIDIzMTpcdHtcbiAyMzI6XHRcdGxvbmcgbnJfcGFnZXMsIGN1cl9wYWdlcywgYWRkciwgcmVtYWluaW5nX3BhZ2VzO1xuIDIzMzpcdFx0aW50IGd1cF9mbGFncyA9IEZPTExfTE9OR1RFUk07XG4gMjM0Olx0XHRzdHJ1Y3QgcGluX2xvbmd0ZXJtX3Rlc3QgYXJncztcbiAyMzU6XHRcdHN0cnVjdCBwYWdlICoqcGFnZXM7XG4gMjM2Olx0XHRpbnQgcmV0ID0gMDtcbiAyMzc6XHRcdGJvb2wgZmFzdDtcbiAyMzg6XHRcbiAyMzk6XHRcdGlmIChkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzKVxuIDI0MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyNDE6XHRcbiAyNDI6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhcmdzLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihhcmdzKSkpXG4gMjQzOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDI0NDpcdFxuIDI0NTpcdFx0aWYgKGFyZ3MuZmxhZ3MgXHUwMDI2XG4gMjQ2Olx0XHQgICAgfihQSU5fTE9OR1RFUk1fVEVTVF9GTEFHX1VTRV9XUklURXxQSU5fTE9OR1RFUk1fVEVTVF9GTEFHX1VTRV9GQVNUKSlcbiAyNDc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjQ4Olx0XHRpZiAoIUlTX0FMSUdORUQoYXJncy5hZGRyIHwgYXJncy5zaXplLCBQQUdFX1NJWkUpKVxuIDI0OTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyNTA6XHRcdGlmIChhcmdzLnNpemUgXHUwMDNlIExPTkdfTUFYKVxuIDI1MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyNTI6XHRcdG5yX3BhZ2VzID0gYXJncy5zaXplIC8gUEFHRV9TSVpFO1xuIDI1MzpcdFx0aWYgKCFucl9wYWdlcylcbiAyNTQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjU1Olx0XG4gMjU2Olx0XHRwYWdlcyA9IGt2Y2FsbG9jKG5yX3BhZ2VzLCBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7XG4gMjU3Olx0XHRpZiAoIXBhZ2VzKVxuIDI1ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyNTk6XHRcbiAyNjA6XHRcdGlmIChhcmdzLmZsYWdzIFx1MDAyNiBQSU5fTE9OR1RFUk1fVEVTVF9GTEFHX1VTRV9XUklURSlcbiAyNjE6XHRcdFx0Z3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XG4gMjYyOlx0XHRmYXN0ID0gISEoYXJncy5mbGFncyBcdTAwMjYgUElOX0xPTkdURVJNX1RFU1RfRkxBR19VU0VfRkFTVCk7XG4gMjYzOlx0XG4gMjY0Olx0XHRpZiAoIWZhc3QgXHUwMDI2XHUwMDI2IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGN1cnJlbnQtXHUwMDNlbW0pKSB7XG4gMjY1Olx0XHRcdGt2ZnJlZShwYWdlcyk7XG4gMjY2Olx0XHRcdHJldHVybiAtRUlOVFI7XG4gMjY3Olx0XHR9XG4gMjY4Olx0XG4gMjY5Olx0XHRkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzID0gcGFnZXM7XG4gMjcwOlx0XHRkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzID0gMDtcbiAyNzE6XHRcbiAyNzI6XHRcdHdoaWxlIChucl9wYWdlcyAtIGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMpIHtcbiAyNzM6XHRcdFx0cmVtYWluaW5nX3BhZ2VzID0gbnJfcGFnZXMgLSBkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzO1xuIDI3NDpcdFx0XHRhZGRyID0gYXJncy5hZGRyICYjNDM7IGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgKiBQQUdFX1NJWkU7XG4gMjc1Olx0XG4gMjc2Olx0XHRcdGlmIChmYXN0KVxuIDI3NzpcdFx0XHRcdGN1cl9wYWdlcyA9IHBpbl91c2VyX3BhZ2VzX2Zhc3QoYWRkciwgcmVtYWluaW5nX3BhZ2VzLFxuIDI3ODpcdFx0XHRcdFx0XHRcdFx0Z3VwX2ZsYWdzLCBwYWdlcyk7XG4gMjc5Olx0XHRcdGVsc2VcbiAyODA6XHRcdFx0XHRjdXJfcGFnZXMgPSBwaW5fdXNlcl9wYWdlcyhhZGRyLCByZW1haW5pbmdfcGFnZXMsXG4gMjgxOlx0XHRcdFx0XHRcdFx0ICAgZ3VwX2ZsYWdzLCBwYWdlcyk7XG4gMjgyOlx0XHRcdGlmIChjdXJfcGFnZXMgXHUwMDNjIDApIHtcbiAyODM6XHRcdFx0XHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpO1xuIDI4NDpcdFx0XHRcdHJldCA9IGN1cl9wYWdlcztcbiAyODU6XHRcdFx0XHRicmVhaztcbiAyODY6XHRcdFx0fVxuIDI4NzpcdFx0XHRkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzICYjNDM7PSBjdXJfcGFnZXM7XG4gMjg4Olx0XHRcdHBhZ2VzICYjNDM7PSBjdXJfcGFnZXM7XG4gMjg5Olx0XHR9XG4gMjkwOlx0XG4gMjkxOlx0XHRpZiAoIWZhc3QpXG4gMjkyOlx0XHRcdG1tYXBfcmVhZF91bmxvY2soY3VycmVudC1cdTAwM2VtbSk7XG4gMjkzOlx0XHRyZXR1cm4gcmV0O1xuIDI5NDpcdH1cbiAyOTU6XHRcbiAyOTY6XHRzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhLFxuIDI5NzpcdFx0XHR1bnNpZ25lZCBsb25nIGFyZylcbiAyOTg6XHR7XG4gMjk5Olx0XHRfX3U2NCB1c2VyX2FkZHI7XG4gMzAwOlx0XHR1bnNpZ25lZCBsb25nIGk7XG4gMzAxOlx0XG4gMzAyOlx0XHRpZiAoIWRhdGEtXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpXG4gMzAzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMwNDpcdFxuIDMwNTpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnVzZXJfYWRkciwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YodXNlcl9hZGRyKSkpXG4gMzA2Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDMwNzpcdFxuIDMwODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGF0YS1cdTAwM2Vsb25ndGVybV9ucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbiAzMDk6XHRcdFx0dm9pZCAqYWRkciA9IGttYXBfbG9jYWxfcGFnZShkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzW2ldKTtcbiAzMTA6XHRcdFx0dW5zaWduZWQgbG9uZyByZXQ7XG4gMzExOlx0XG4gMzEyOlx0XHRcdHJldCA9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyl1c2VyX2FkZHIsIGFkZHIsXG4gMzEzOlx0XHRcdFx0XHQgICBQQUdFX1NJWkUpO1xuIDMxNDpcdFx0XHRrdW5tYXBfbG9jYWwoYWRkcik7XG4gMzE1Olx0XHRcdGlmIChyZXQpXG4gMzE2Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMzE3Olx0XHRcdHVzZXJfYWRkciAmIzQzOz0gUEFHRV9TSVpFO1xuIDMxODpcdFx0fVxuIDMxOTpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTQ5CgkJCQkJCQlvdXRwdXQ6IDIxNwoJCQkJCQkJdGhvdWdodHM6IDQwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIGFsbG9jYXRpb24gb2YgdGhlIGBwYWdlc2AgYXJyYXkgdXNpbmcgYGt2Y2FsbG9jYCBhbmQgdGhlIGBzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YWAgd2l0aCBga3phbGxvY19vYmpgLCB3aXRoIHRoZWlyIHplcm8taW5pdGlhbGl6YXRpb24sIGFyZSBnb29kIHNpZ25zLiBJdCBtZWFucyB3ZSYjMzk7cmUgc3RhcnRpbmcgY2xlYW4sIHdoaWNoIGhlbHBzIG1pdGlnYXRlIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gSSBjYW4gc2VlIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgaW4gdGhhdCBhcmVhLgoKVGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgZm9jdXNlZCBvbiBzdHJ1Y3R1cmFsIGNoYW5nZXMg4oCTIHNwZWNpZmljYWxseSwgbW92aW5nIGdsb2JhbCBzdGF0ZSB0byBhIHBlci1maWxlIGJhc2lzLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSByZWZhY3RvcmluZyBhcHByb2FjaCwgYnV0IGl0IGNhbiBzb21ldGltZXMgaW50cm9kdWNlIHN1YnRsZSBidWdzLiBIb3dldmVyLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlLCBhbnkgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlIGNoYW5nZSB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgZWl0aGVyIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgbWVtb3J5IGxlYWtzLgoKR2l2ZW4gdGhhdCB0aGVzZSBraW5kcyBvZiBidWdzIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGxlYWsgZGV0ZWN0b3JzLCBJIGRvbiYjMzk7dCBzZWUgYSBzdHJvbmcganVzdGlmaWNhdGlvbiBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGF0IHRoaXMgcG9pbnQuIEkmIzM5O20gcmVhc29uYWJseSBjb25maWRlbnQgdGhlIGV4aXN0aW5nIHRvb2xzIHdpbGwgY2F0Y2ggYW55IGlzc3Vlcy4KCkkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBndXBfdGVzdF9vcGVuYCBhbmQgYGd1cF90ZXN0X3JlbGVhc2VgIGZ1bmN0aW9ucyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG1pc3NlZCBpbml0aWFsaXphdGlvbnMgb3IgaW1wcm9wZXIgY2xlYW51cC4gSG1tLCBsZXQmIzM5O3Mgc2VlLi4uCgpZZXAsIGBndXBfdGVzdF9vcGVuYCBhbGxvY2F0ZXMgdGhlIGBkYXRhYCBzdHJ1Y3Qgd2l0aCBga3phbGxvY19vYmpgIGFuZCBpbml0aWFsaXplcyB0aGUgbXV0ZXgsIGFzc2lnbnMgYGRhdGFgIHRvIHRoZSBmaWxlJiMzOTtzIHByaXZhdGUgZGF0YSBmaWVsZC4gVGhlIGBndXBfdGVzdF9yZWxlYXNlYCBmdW5jdGlvbiBwcm9wZXJseSBjYWxscyB0aGUgYHBpbl9sb25ndGVybV90ZXN0X3N0b3BgLCBkZXN0cm95cyB0aGUgbXV0ZXgsIGFuZCBmcmVlcyB0aGUgZGF0YSBzdHJ1Y3R1cmUsIGFuZCBudWxscyB0aGUgcHJpdmF0ZSBkYXRhIGZpZWxkLiBFdmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseSBhbmQgZGVhbGxvY2F0ZWQgYXBwcm9wcmlhdGVseS4KCkFscmlnaHQsIGFmdGVyIHRoaXMgcXVpY2sgc2NhbiwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgbm8gS01TQU4gaXMgbmVlZGVkLiBUaGUgY29kZSBsb29rcyBzb3VuZCBhbmQgd2VsbC1tYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBwaW5fbG9uZ3Rlcm1fdGVzdGAgaW4gYG1tL2d1cF90ZXN0LmNgIHRvIHVzZSBhIHBlci1maWxlIGRhdGEgc3RydWN0dXJlIChgc3RydWN0IGd1cF90ZXN0X2RhdGFgKSBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMsIGFsbG93aW5nIGNvbmN1cnJlbnQgdXNlcnMgb2YgdGhlIGd1cF90ZXN0IGlvY3RsLiBUaGUgbmV3IHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyBhbGwgZmllbGRzLiBUaGUgYXJyYXkgb2YgcGFnZSBwb2ludGVycyBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt2Y2FsbG9jYCwgd2hpY2ggYWxzbyB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkuIFRoZSBvbmx5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIHBpbm5lZCB1c2VyIHBhZ2VzLCB3aGljaCBpcyBpZGVudGljYWwgdG8gdGhlIHByZS1wYXRjaCBiZWhhdmlvciBhbmQgZG9lcyBub3QgbGVhayBrZXJuZWwgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBwaW5fbG9uZ3Rlcm1fdGVzdGAgaW4gYG1tL2d1cF90ZXN0LmNgIHRvIHVzZSBhIHBlci1maWxlIGRhdGEgc3RydWN0dXJlIChgc3RydWN0IGd1cF90ZXN0X2RhdGFgKSBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMsIGFsbG93aW5nIGNvbmN1cnJlbnQgdXNlcnMgb2YgdGhlIGd1cF90ZXN0IGlvY3RsLiBUaGUgbmV3IHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyBhbGwgZmllbGRzLiBUaGUgYXJyYXkgb2YgcGFnZSBwb2ludGVycyBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt2Y2FsbG9jYCwgd2hpY2ggYWxzbyB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkuIFRoZSBvbmx5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIHBpbm5lZCB1c2VyIHBhZ2VzLCB3aGljaCBpcyBpZGVudGljYWwgdG8gdGhlIHByZS1wYXRjaCBiZWhhdmlvciBhbmQgZG9lcyBub3QgbGVhayBrZXJuZWwgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjIxOjUwLjY5MjE4NTU4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MTU2NjQ3MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdVUF9URVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3VwX3Rlc3Rfb3BlblwiLFxuICAgIFwiZ3VwX3Rlc3RfcmVsZWFzZVwiLFxuICAgIFwiZ3VwX3Rlc3RfaW9jdGxcIixcbiAgICBcInBpbl9sb25ndGVybV90ZXN0X2lvY3RsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBwaW5fbG9uZ3Rlcm1fdGVzdGAgaW4gYG1tL2d1cF90ZXN0LmNgIHRvIHVzZSBhIHBlci1maWxlIGRhdGEgc3RydWN0dXJlIChgc3RydWN0IGd1cF90ZXN0X2RhdGFgKSBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMsIGFsbG93aW5nIGNvbmN1cnJlbnQgdXNlcnMgb2YgdGhlIGd1cF90ZXN0IGlvY3RsLiBUaGUgbmV3IHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyBhbGwgZmllbGRzLiBUaGUgYXJyYXkgb2YgcGFnZSBwb2ludGVycyBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt2Y2FsbG9jYCwgd2hpY2ggYWxzbyB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkuIFRoZSBvbmx5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIHBpbm5lZCB1c2VyIHBhZ2VzLCB3aGljaCBpcyBpZGVudGljYWwgdG8gdGhlIHByZS1wYXRjaCBiZWhhdmlvciBhbmQgZG9lcyBub3QgbGVhayBrZXJuZWwgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGd1cF90ZXN0IGRlYnVnZnMgaW50ZXJmYWNlIHRvIHVzZSBwZXItZmlsZSBkZXNjcmlwdG9yIHN0YXRlIGluc3RlYWQgb2YgZ2xvYmFsIHN0YXRlIGZvciB0aGUgUElOX0xPTkdURVJNX1RFU1RfKiBpb2N0bHMsIGZpeGluZyBjb25jdXJyZW5jeSBpc3N1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBhIHRlc3QgbW9kdWxlIHRoYXQgZXhwb3NlcyBrZXJuZWwgQVBJcyB0byB1c2Vyc3BhY2UsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBjb25jdXJyZW5jeSBmaXggaXMgY29ycmVjdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgbmV3IGlzc3VlcyBsaWtlIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6MjE6NTAuNjkyMTkyODk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcyMjgyNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiNmFmNjc5NWRhODkxNjRiYjkxZjJiYTliYTYzOGVkNGMzZjc1NjJhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDEwIDEyOjIxOjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2d1cF90ZXN0LmMgYi9tbS9ndXBfdGVzdC5jXFxuaW5kZXggZWI0YzljZGExNmVkOC4uNDRjMWNkZmI5YzM3MSAxMDA2NDRcXG4tLS0gYS9tbS9ndXBfdGVzdC5jXFxuKysrIGIvbW0vZ3VwX3Rlc3QuY1xcbkBAIC04LDYgKzgsMTIgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hpZ2htZW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImd1cF90ZXN0LmhcXFwiXFxuIFxcbitzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSB7XFxuK1xcdHN0cnVjdCBtdXRleCBsb25ndGVybV9tdXRleDtcXG4rXFx0c3RydWN0IHBhZ2UgKipsb25ndGVybV9wYWdlcztcXG4rXFx0dW5zaWduZWQgbG9uZyBsb25ndGVybV9ucl9wYWdlcztcXG4rfTtcXG4rXFxuIHN0YXRpYyB2b2lkIHB1dF9iYWNrX3BhZ2VzKHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuIFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHVuc2lnbmVkIGludCBndXBfdGVzdF9mbGFncylcXG4ge1xcbkBAIC0yMDgsMjMgKzIxNCwyMCBAQCBzdGF0aWMgaW50IF9fZ3VwX3Rlc3RfaW9jdGwodW5zaWduZWQgaW50IGNtZCxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIERFRklORV9NVVRFWChwaW5fbG9uZ3Rlcm1fdGVzdF9tdXRleCk7XFxuLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKnBpbl9sb25ndGVybV90ZXN0X3BhZ2VzO1xcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcztcXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKHZvaWQpXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhKVxcbiB7XFxuLVxcdGlmIChwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcykge1xcbi1cXHRcXHRpZiAocGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMpXFxuLVxcdFxcdFxcdHVucGluX3VzZXJfcGFnZXMocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMsXFxuLVxcdFxcdFxcdFxcdFxcdCBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyk7XFxuLVxcdFxcdGt2ZnJlZShwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcyk7XFxuLVxcdFxcdHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzID0gTlVMTDtcXG4tXFx0XFx0cGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMgPSAwO1xcbitcXHRpZiAoZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpIHtcXG4rXFx0XFx0aWYgKGRhdGEtXFx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzKVxcbitcXHRcXHRcXHR1bnBpbl91c2VyX3BhZ2VzKGRhdGEtXFx1MDAzZWxvbmd0ZXJtX3BhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHQgZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMpO1xcbitcXHRcXHRrdmZyZWUoZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpO1xcbitcXHRcXHRkYXRhLVxcdTAwM2Vsb25ndGVybV9wYWdlcyA9IE5VTEw7XFxuK1xcdFxcdGRhdGEtXFx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzID0gMDtcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydCh1bnNpZ25lZCBsb25nIGFyZylcXG4rc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbiB7XFxuIFxcdGxvbmcgbnJfcGFnZXMsIGN1cl9wYWdlcywgYWRkciwgcmVtYWluaW5nX3BhZ2VzO1xcbiBcXHRpbnQgZ3VwX2ZsYWdzID0gRk9MTF9MT05HVEVSTTtcXG5AQCAtMjMzLDcgKzIzNiw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFx0Ym9vbCBmYXN0O1xcbiBcXG4tXFx0aWYgKHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzKVxcbitcXHRpZiAoZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZhcmdzLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihhcmdzKSkpXFxuQEAgLTI2MywxMiArMjY2LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiBcXHR9XFxuIFxcbi1cXHRwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcyA9IHBhZ2VzO1xcbi1cXHRwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyA9IDA7XFxuK1xcdGRhdGEtXFx1MDAzZWxvbmd0ZXJtX3BhZ2VzID0gcGFnZXM7XFxuK1xcdGRhdGEtXFx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzID0gMDtcXG4gXFxuLVxcdHdoaWxlIChucl9wYWdlcyAtIHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzKSB7XFxuLVxcdFxcdHJlbWFpbmluZ19wYWdlcyA9IG5yX3BhZ2VzIC0gcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXM7XFxuLVxcdFxcdGFkZHIgPSBhcmdzLmFkZHIgKyBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyAqIFBBR0VfU0laRTtcXG4rXFx0d2hpbGUgKG5yX3BhZ2VzIC0gZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMpIHtcXG4rXFx0XFx0cmVtYWluaW5nX3BhZ2VzID0gbnJfcGFnZXMgLSBkYXRhLVxcdTAwM2Vsb25ndGVybV9ucl9wYWdlcztcXG4rXFx0XFx0YWRkciA9IGFyZ3MuYWRkciArIGRhdGEtXFx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzICogUEFHRV9TSVpFO1xcbiBcXG4gXFx0XFx0aWYgKGZhc3QpXFxuIFxcdFxcdFxcdGN1cl9wYWdlcyA9IHBpbl91c2VyX3BhZ2VzX2Zhc3QoYWRkciwgcmVtYWluaW5nX3BhZ2VzLFxcbkBAIC0yNzcsMTEgKzI4MCwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydCh1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0XFx0XFx0Y3VyX3BhZ2VzID0gcGluX3VzZXJfcGFnZXMoYWRkciwgcmVtYWluaW5nX3BhZ2VzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBndXBfZmxhZ3MsIHBhZ2VzKTtcXG4gXFx0XFx0aWYgKGN1cl9wYWdlcyBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcCgpO1xcbitcXHRcXHRcXHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpO1xcbiBcXHRcXHRcXHRyZXQgPSBjdXJfcGFnZXM7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzICs9IGN1cl9wYWdlcztcXG4rXFx0XFx0ZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgKz0gY3VyX3BhZ2VzO1xcbiBcXHRcXHRwYWdlcyArPSBjdXJfcGFnZXM7XFxuIFxcdH1cXG4gXFxuQEAgLTI5MCwxOSArMjkzLDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHVuc2lnbmVkIGxvbmcgYXJnKVxcbitzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbiBcXHRfX3U2NCB1c2VyX2FkZHI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaTtcXG4gXFxuLVxcdGlmICghcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpXFxuK1xcdGlmICghZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZ1c2VyX2FkZHIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKHVzZXJfYWRkcikpKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlczsgaSsrKSB7XFxuLVxcdFxcdHZvaWQgKmFkZHIgPSBrbWFwX2xvY2FsX3BhZ2UocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXNbaV0pO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXM7IGkrKykge1xcbitcXHRcXHR2b2lkICphZGRyID0ga21hcF9sb2NhbF9wYWdlKGRhdGEtXFx1MDAzZWxvbmd0ZXJtX3BhZ2VzW2ldKTtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyByZXQ7XFxuIFxcbiBcXHRcXHRyZXQgPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpdXNlcl9hZGRyLCBhZGRyLFxcbkBAIC0zMTgsMjUgKzMyMiwyNiBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBzdGF0aWMgbG9uZyBwaW5fbG9uZ3Rlcm1fdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsXFxuIFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbitcXHRzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSA9IGZpbGVwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdGludCByZXQgPSAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKG11dGV4X2xvY2tfa2lsbGFibGUoXFx1MDAyNnBpbl9sb25ndGVybV90ZXN0X211dGV4KSlcXG4rXFx0aWYgKG11dGV4X2xvY2tfa2lsbGFibGUoXFx1MDAyNmRhdGEtXFx1MDAzZWxvbmd0ZXJtX211dGV4KSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4gXFxuIFxcdHN3aXRjaCAoY21kKSB7XFxuIFxcdGNhc2UgUElOX0xPTkdURVJNX1RFU1RfU1RBUlQ6XFxuLVxcdFxcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KGFyZyk7XFxuK1xcdFxcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KGRhdGEsIGFyZyk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIFBJTl9MT05HVEVSTV9URVNUX1NUT1A6XFxuLVxcdFxcdHBpbl9sb25ndGVybV90ZXN0X3N0b3AoKTtcXG4rXFx0XFx0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChkYXRhKTtcXG4gXFx0XFx0cmV0ID0gMDtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgUElOX0xPTkdURVJNX1RFU1RfUkVBRDpcXG4tXFx0XFx0cmV0ID0gcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZChhcmcpO1xcbitcXHRcXHRyZXQgPSBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKGRhdGEsIGFyZyk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnBpbl9sb25ndGVybV90ZXN0X211dGV4KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYXRhLVxcdTAwM2Vsb25ndGVybV9tdXRleCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTM3NSwxNSArMzgwLDQwIEBAIHN0YXRpYyBsb25nIGd1cF90ZXN0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZ3VwX3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XFxuK1xcdGlmICghZGF0YSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXQgPSBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRrZnJlZShkYXRhKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fbXV0ZXgpO1xcbitcXHRmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBkYXRhO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBndXBfdGVzdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiB7XFxuLVxcdHBpbl9sb25ndGVybV90ZXN0X3N0b3AoKTtcXG4rXFx0c3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcbitcXHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpO1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZkYXRhLVxcdTAwM2Vsb25ndGVybV9tdXRleCk7XFxuK1xcdGtmcmVlKGRhdGEpO1xcbitcXHRmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBOVUxMO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGd1cF90ZXN0X2ZvcHMgPSB7XFxuLVxcdC5vcGVuID0gbm9uc2Vla2FibGVfb3BlbixcXG4rXFx0Lm9wZW4gPSBndXBfdGVzdF9vcGVuLFxcbiBcXHQudW5sb2NrZWRfaW9jdGwgPSBndXBfdGVzdF9pb2N0bCxcXG4gXFx0LmNvbXBhdF9pb2N0bCA9IGNvbXBhdF9wdHJfaW9jdGwsXFxuIFxcdC5yZWxlYXNlID0gZ3VwX3Rlc3RfcmVsZWFzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6MjE6NTEuMTUwMjkwMzI2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mjk1NzkxMjE2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiR1VQX1RFU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJndXBfdGVzdF9vcGVuXCIsXG4gICAgXCJndXBfdGVzdF9yZWxlYXNlXCIsXG4gICAgXCJndXBfdGVzdF9pb2N0bFwiLFxuICAgIFwicGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZ3VwX3Rlc3QgZGVidWdmcyBpbnRlcmZhY2UgdG8gdXNlIHBlci1maWxlIGRlc2NyaXB0b3Igc3RhdGUgaW5zdGVhZCBvZiBnbG9iYWwgc3RhdGUgZm9yIHRoZSBQSU5fTE9OR1RFUk1fVEVTVF8qIGlvY3RscywgZml4aW5nIGNvbmN1cnJlbmN5IGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGEgdGVzdCBtb2R1bGUgdGhhdCBleHBvc2VzIGtlcm5lbCBBUElzIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIGNvbmN1cnJlbmN5IGZpeCBpcyBjb3JyZWN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSBuZXcgaXNzdWVzIGxpa2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNmFmNjc5NWRhODkxNjRiYjkxZjJiYTliYTYzOGVkNGMzZjc1NjJhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTI6MjE6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9ndXBfdGVzdC5jIGIvbW0vZ3VwX3Rlc3QuY1xuaW5kZXggZWI0YzljZGExNmVkOC4uNDRjMWNkZmI5YzM3MSAxMDA2NDRcbi0tLSBhL21tL2d1cF90ZXN0LmNcbisrKyBiL21tL2d1cF90ZXN0LmNcbkBAIC04LDYgKzgsMTIgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9oaWdobWVtLmhcdTAwM2VcbiAjaW5jbHVkZSBcImd1cF90ZXN0LmhcIlxuIFxuK3N0cnVjdCBndXBfdGVzdF9kYXRhIHtcbitcdHN0cnVjdCBtdXRleCBsb25ndGVybV9tdXRleDtcbitcdHN0cnVjdCBwYWdlICoqbG9uZ3Rlcm1fcGFnZXM7XG4rXHR1bnNpZ25lZCBsb25nIGxvbmd0ZXJtX25yX3BhZ2VzO1xuK307XG4rXG4gc3RhdGljIHZvaWQgcHV0X2JhY2tfcGFnZXModW5zaWduZWQgaW50IGNtZCwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbiBcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCB1bnNpZ25lZCBpbnQgZ3VwX3Rlc3RfZmxhZ3MpXG4ge1xuQEAgLTIwOCwyMyArMjE0LDIwIEBAIHN0YXRpYyBpbnQgX19ndXBfdGVzdF9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIERFRklORV9NVVRFWChwaW5fbG9uZ3Rlcm1fdGVzdF9tdXRleCk7XG4tc3RhdGljIHN0cnVjdCBwYWdlICoqcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXM7XG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXM7XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHBpbl9sb25ndGVybV90ZXN0X3N0b3Aodm9pZClcbitzdGF0aWMgaW5saW5lIHZvaWQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSlcbiB7XG4tXHRpZiAocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpIHtcbi1cdFx0aWYgKHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzKVxuLVx0XHRcdHVucGluX3VzZXJfcGFnZXMocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMsXG4tXHRcdFx0XHRcdCBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyk7XG4tXHRcdGt2ZnJlZShwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcyk7XG4tXHRcdHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzID0gTlVMTDtcbi1cdFx0cGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMgPSAwO1xuK1x0aWYgKGRhdGEtXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpIHtcbitcdFx0aWYgKGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMpXG4rXHRcdFx0dW5waW5fdXNlcl9wYWdlcyhkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzLFxuK1x0XHRcdFx0XHQgZGF0YS1cdTAwM2Vsb25ndGVybV9ucl9wYWdlcyk7XG4rXHRcdGt2ZnJlZShkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzKTtcbitcdFx0ZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcyA9IE5VTEw7XG4rXHRcdGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgPSAwO1xuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydCh1bnNpZ25lZCBsb25nIGFyZylcbitzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydChzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSxcbitcdFx0dW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuIFx0bG9uZyBucl9wYWdlcywgY3VyX3BhZ2VzLCBhZGRyLCByZW1haW5pbmdfcGFnZXM7XG4gXHRpbnQgZ3VwX2ZsYWdzID0gRk9MTF9MT05HVEVSTTtcbkBAIC0yMzMsNyArMjM2LDcgQEAgc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpXG4gXHRpbnQgcmV0ID0gMDtcbiBcdGJvb2wgZmFzdDtcbiBcbi1cdGlmIChwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcylcbitcdGlmIChkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhcmdzLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihhcmdzKSkpXG5AQCAtMjYzLDEyICsyNjYsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHJldHVybiAtRUlOVFI7XG4gXHR9XG4gXG4tXHRwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcyA9IHBhZ2VzO1xuLVx0cGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMgPSAwO1xuK1x0ZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcyA9IHBhZ2VzO1xuK1x0ZGF0YS1cdTAwM2Vsb25ndGVybV9ucl9wYWdlcyA9IDA7XG4gXG4tXHR3aGlsZSAobnJfcGFnZXMgLSBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcykge1xuLVx0XHRyZW1haW5pbmdfcGFnZXMgPSBucl9wYWdlcyAtIHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzO1xuLVx0XHRhZGRyID0gYXJncy5hZGRyICsgcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMgKiBQQUdFX1NJWkU7XG4rXHR3aGlsZSAobnJfcGFnZXMgLSBkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzKSB7XG4rXHRcdHJlbWFpbmluZ19wYWdlcyA9IG5yX3BhZ2VzIC0gZGF0YS1cdTAwM2Vsb25ndGVybV9ucl9wYWdlcztcbitcdFx0YWRkciA9IGFyZ3MuYWRkciArIGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgKiBQQUdFX1NJWkU7XG4gXG4gXHRcdGlmIChmYXN0KVxuIFx0XHRcdGN1cl9wYWdlcyA9IHBpbl91c2VyX3BhZ2VzX2Zhc3QoYWRkciwgcmVtYWluaW5nX3BhZ2VzLFxuQEAgLTI3NywxMSArMjgwLDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRcdGN1cl9wYWdlcyA9IHBpbl91c2VyX3BhZ2VzKGFkZHIsIHJlbWFpbmluZ19wYWdlcyxcbiBcdFx0XHRcdFx0XHQgICBndXBfZmxhZ3MsIHBhZ2VzKTtcbiBcdFx0aWYgKGN1cl9wYWdlcyBcdTAwM2MgMCkge1xuLVx0XHRcdHBpbl9sb25ndGVybV90ZXN0X3N0b3AoKTtcbitcdFx0XHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpO1xuIFx0XHRcdHJldCA9IGN1cl9wYWdlcztcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuLVx0XHRwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcyArPSBjdXJfcGFnZXM7XG4rXHRcdGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgKz0gY3VyX3BhZ2VzO1xuIFx0XHRwYWdlcyArPSBjdXJfcGFnZXM7XG4gXHR9XG4gXG5AQCAtMjkwLDE5ICsyOTMsMjAgQEAgc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHVuc2lnbmVkIGxvbmcgYXJnKVxuK3N0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbiBcdF9fdTY0IHVzZXJfYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbi1cdGlmICghcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpXG4rXHRpZiAoIWRhdGEtXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnVzZXJfYWRkciwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YodXNlcl9hZGRyKSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXM7IGkrKykge1xuLVx0XHR2b2lkICphZGRyID0ga21hcF9sb2NhbF9wYWdlKHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzW2ldKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXM7IGkrKykge1xuK1x0XHR2b2lkICphZGRyID0ga21hcF9sb2NhbF9wYWdlKGRhdGEtXHUwMDNlbG9uZ3Rlcm1fcGFnZXNbaV0pO1xuIFx0XHR1bnNpZ25lZCBsb25nIHJldDtcbiBcbiBcdFx0cmV0ID0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXVzZXJfYWRkciwgYWRkcixcbkBAIC0zMTgsMjUgKzMyMiwyNiBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHVuc2lnbmVkIGxvbmcgYXJnKVxuIHN0YXRpYyBsb25nIHBpbl9sb25ndGVybV90ZXN0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCxcbiBcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4rXHRzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSA9IGZpbGVwLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdGludCByZXQgPSAtRUlOVkFMO1xuIFxuLVx0aWYgKG11dGV4X2xvY2tfa2lsbGFibGUoXHUwMDI2cGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpKVxuK1x0aWYgKG11dGV4X2xvY2tfa2lsbGFibGUoXHUwMDI2ZGF0YS1cdTAwM2Vsb25ndGVybV9tdXRleCkpXG4gXHRcdHJldHVybiAtRUlOVFI7XG4gXG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBQSU5fTE9OR1RFUk1fVEVTVF9TVEFSVDpcbi1cdFx0cmV0ID0gcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoYXJnKTtcbitcdFx0cmV0ID0gcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoZGF0YSwgYXJnKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFBJTl9MT05HVEVSTV9URVNUX1NUT1A6XG4tXHRcdHBpbl9sb25ndGVybV90ZXN0X3N0b3AoKTtcbitcdFx0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChkYXRhKTtcbiBcdFx0cmV0ID0gMDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFBJTl9MT05HVEVSTV9URVNUX1JFQUQ6XG4tXHRcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoYXJnKTtcbitcdFx0cmV0ID0gcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZChkYXRhLCBhcmcpO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwaW5fbG9uZ3Rlcm1fdGVzdF9tdXRleCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZGF0YS1cdTAwM2Vsb25ndGVybV9tdXRleCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0zNzUsMTUgKzM4MCw0MCBAQCBzdGF0aWMgbG9uZyBndXBfdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBndXBfdGVzdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhO1xuK1x0aW50IHJldDtcbitcbitcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XG4rXHRpZiAoIWRhdGEpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0ID0gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGtmcmVlKGRhdGEpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZkYXRhLVx1MDAzZWxvbmd0ZXJtX211dGV4KTtcbitcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gZGF0YTtcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IGd1cF90ZXN0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuLVx0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcCgpO1xuK1x0c3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcbitcdHBpbl9sb25ndGVybV90ZXN0X3N0b3AoZGF0YSk7XG4rXHRtdXRleF9kZXN0cm95KFx1MDAyNmRhdGEtXHUwMDNlbG9uZ3Rlcm1fbXV0ZXgpO1xuK1x0a2ZyZWUoZGF0YSk7XG4rXHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IE5VTEw7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3VwX3Rlc3RfZm9wcyA9IHtcbi1cdC5vcGVuID0gbm9uc2Vla2FibGVfb3BlbixcbitcdC5vcGVuID0gZ3VwX3Rlc3Rfb3BlbixcbiBcdC51bmxvY2tlZF9pb2N0bCA9IGd1cF90ZXN0X2lvY3RsLFxuIFx0LmNvbXBhdF9pb2N0bCA9IGNvbXBhdF9wdHJfaW9jdGwsXG4gXHQucmVsZWFzZSA9IGd1cF90ZXN0X3JlbGVhc2UsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMjoyMTo1MS4xNTAyOTE1NTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Njc1NzM5NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR1VQIFRlc3QgTW9kdWxlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vZ3VwX3Rlc3QuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHNoaWZ0aW5nIHNvbWUgZ2xvYmFsIHN0YXRlIHZhcmlhYmxlcywgYHBpbl9sb25ndGVybV90ZXN0X211dGV4YCwgYHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzYCwgYW5kIGBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlc2AsIGludG8gYSBwZXItZmlsZSBkZXNjcmlwdG9yIHN0cnVjdHVyZSwgYHN0cnVjdCBndXBfdGVzdF9kYXRhYCwgd2hpY2ggd2lsbCBub3cgcmVzaWRlIGluIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nIHRvIGVuYWJsZSBjb25jdXJyZW50IGV4ZWN1dGlvbiBvZiB0aGUgYFBJTl9MT05HVEVSTV9URVNUXypgIGlvY3Rscy4gRXNzZW50aWFsbHksIGl0IHJlbW92ZXMgdGhlIGdsb2JhbCBsb2NraW5nIGJvdHRsZW5lY2suXG5cblNpbmNlIHRoaXMgaXMgYSB0ZXN0IG1vZHVsZSAoYGd1cF90ZXN0LmNgKSwgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGUsIGFuZCBpcyBpdCB3b3J0aCBmdXp6aW5nPyBJIG1lYW4sIHdlIHVzdWFsbHkgZG9uJ3QgcHJpb3JpdGl6ZSBmdXp6aW5nIHRlc3RzLiBCdXQgdGhpcyBtb2R1bGUgKmRvZXMqIGV4cG9zZSBrZXJuZWwgQVBJcyBsaWtlIGBwaW5fdXNlcl9wYWdlc2AsIGB1bnBpbl91c2VyX3BhZ2VzYCwgZXRjLiwgdG8gdXNlcnNwYWNlLiBUaGF0J3MgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZywgYWN0dWFsbHksIGJlY2F1c2UgdGhvc2UgQVBJcyBjYW4gaGF2ZSBpbnRlcmVzdGluZyBzaWRlLWVmZmVjdHMgYW5kIG1pZ2h0IHVuY292ZXIgc29tZSBoaWRkZW4gbWVtb3J5IG1hbmFnZW1lbnQgYnVncy5cblxuV2FpdCBhIHNlY29uZOKApiBgZ3VwX3Rlc3RgIGlzIGEgZGVidWdmcy90ZXN0IGludGVyZmFjZSEgVGhhdCBjaGFuZ2VzIHRoaW5ncy4gTGV0J3MgcHVsbCB1cCB0aGUga2VybmVsIHNvdXJjZSBpbiBgbW0vZ3VwX3Rlc3QuY2AgYW5kIGRpZyBhIGxpdHRsZSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMjoyMTo1Ni44MjYwMzQ2N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQ3NDcwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndXBfdGVzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjkzPWNvbmZpZyBHVVBfVEVTVFxcbi0tXFxubW0vS2NvbmZpZy0xMjk2LVxcdGhlbHBcXG5tbS9LY29uZmlnOjEyOTc6XFx0ICBQcm92aWRlcyAvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdCwgd2hpY2ggaW4gdHVybiBwcm92aWRlcyBhIHdheVxcbm1tL0tjb25maWctMTI5OC1cXHQgIHRvIG1ha2UgaW9jdGwgY2FsbHMgdGhhdCBjYW4gbGF1bmNoIGtlcm5lbC1iYXNlZCB1bml0IHRlc3RzIGZvclxcbi0tXFxubW0vS2NvbmZpZy0xMzEwLVxcbm1tL0tjb25maWc6MTMxMTpcXHQgIFNlZSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXFxubW0vS2NvbmZpZy0xMzEyLVxcbi0tXFxubW0vTWFrZWZpbGU9MTA5PW9iai0kKENPTkZJR19DR1JPVVBfSFVHRVRMQikgKz0gaHVnZXRsYl9jZ3JvdXAub1xcbm1tL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfR1VQX1RFU1QpICs9IGd1cF90ZXN0Lm9cXG5tbS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0RNQVBPT0xfVEVTVCkgKz0gZG1hcG9vbF90ZXN0Lm9cXG4tLVxcbm1tL2d1cF90ZXN0LmMtOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvaGlnaG1lbS5oXFx1MDAzZVxcbm1tL2d1cF90ZXN0LmM6OTojaW5jbHVkZSBcXFwiZ3VwX3Rlc3QuaFxcXCJcXG5tbS9ndXBfdGVzdC5jLTEwLVxcbm1tL2d1cF90ZXN0LmM6MTE6c3RydWN0IGd1cF90ZXN0X2RhdGEge1xcbm1tL2d1cF90ZXN0LmMtMTItXFx0c3RydWN0IG11dGV4IGxvbmd0ZXJtX211dGV4O1xcbi0tXFxubW0vZ3VwX3Rlc3QuYz0xNz1zdGF0aWMgdm9pZCBwdXRfYmFja19wYWdlcyh1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbm1tL2d1cF90ZXN0LmM6MTg6XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgdW5zaWduZWQgaW50IGd1cF90ZXN0X2ZsYWdzKVxcbm1tL2d1cF90ZXN0LmMtMTkte1xcbi0tXFxubW0vZ3VwX3Rlc3QuYy0zNC1cXHRjYXNlIERVTVBfVVNFUl9QQUdFU19URVNUOlxcbm1tL2d1cF90ZXN0LmM6MzU6XFx0XFx0aWYgKGd1cF90ZXN0X2ZsYWdzIFxcdTAwMjYgR1VQX1RFU1RfRkxBR19EVU1QX1BBR0VTX1VTRV9QSU4pIHtcXG5tbS9ndXBfdGVzdC5jLTM2LVxcdFxcdFxcdHVucGluX3VzZXJfcGFnZXMocGFnZXMsIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL2d1cF90ZXN0LmM9NDY9c3RhdGljIHZvaWQgdmVyaWZ5X2RtYV9waW5uZWQodW5zaWduZWQgaW50IGNtZCwgc3RydWN0IHBhZ2UgKipwYWdlcyxcXG4tLVxcbm1tL2d1cF90ZXN0LmMtNjEtXFxubW0vZ3VwX3Rlc3QuYzo2MjpcXHRcXHRcXHRcXHRkdW1wX3BhZ2UoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBcXFwiZ3VwX3Rlc3QgZmFpbHVyZVxcXCIpO1xcbm1tL2d1cF90ZXN0LmMtNjMtXFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9ndXBfdGVzdC5jLTY3LVxcdFxcdFxcdFxcdCAgICAgaSkpIHtcXG5tbS9ndXBfdGVzdC5jOjY4OlxcdFxcdFxcdFxcdGR1bXBfcGFnZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIFxcXCJndXBfdGVzdCBmYWlsdXJlXFxcIik7XFxubW0vZ3VwX3Rlc3QuYy02OS1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL2d1cF90ZXN0LmMtNzUtXFxubW0vZ3VwX3Rlc3QuYzo3NjpzdGF0aWMgdm9pZCBkdW1wX3BhZ2VzX3Rlc3Qoc3RydWN0IGd1cF90ZXN0ICpndXAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXFxubW0vZ3VwX3Rlc3QuYy03Ny1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL2d1cF90ZXN0LmMtMTAxLVxcdFxcdFxcdGR1bXBfcGFnZShwYWdlc1tpbmRleF90b19kdW1wXSxcXG5tbS9ndXBfdGVzdC5jOjEwMjpcXHRcXHRcXHRcXHQgIFxcXCJndXBfdGVzdDogZHVtcF9wYWdlcygpIHRlc3RcXFwiKTtcXG5tbS9ndXBfdGVzdC5jLTEwMy1cXHRcXHR9XFxuLS1cXG5tbS9ndXBfdGVzdC5jLTEwNi1cXG5tbS9ndXBfdGVzdC5jOjEwNzpzdGF0aWMgaW50IF9fZ3VwX3Rlc3RfaW9jdGwodW5zaWduZWQgaW50IGNtZCxcXG5tbS9ndXBfdGVzdC5jOjEwODpcXHRcXHRzdHJ1Y3QgZ3VwX3Rlc3QgKmd1cClcXG5tbS9ndXBfdGVzdC5jLTEwOS17XFxuLS1cXG5tbS9ndXBfdGVzdC5jLTIxNi1cXG5tbS9ndXBfdGVzdC5jOjIxNzpzdGF0aWMgaW5saW5lIHZvaWQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSlcXG5tbS9ndXBfdGVzdC5jLTIxOC17XFxuLS1cXG5tbS9ndXBfdGVzdC5jLTIyOC1cXG5tbS9ndXBfdGVzdC5jOjIyOTpzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydChzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSxcXG5tbS9ndXBfdGVzdC5jLTIzMC1cXHRcXHR1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbm1tL2d1cF90ZXN0LmMtMjk1LVxcbm1tL2d1cF90ZXN0LmM6Mjk2OnN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEsXFxubW0vZ3VwX3Rlc3QuYy0yOTctXFx0XFx0dW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5tbS9ndXBfdGVzdC5jPTMyMj1zdGF0aWMgbG9uZyBwaW5fbG9uZ3Rlcm1fdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5tbS9ndXBfdGVzdC5jLTMyNC17XFxubW0vZ3VwX3Rlc3QuYzozMjU6XFx0c3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEgPSBmaWxlcC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbm1tL2d1cF90ZXN0LmMtMzI2LVxcdGludCByZXQgPSAtRUlOVkFMO1xcbi0tXFxubW0vZ3VwX3Rlc3QuYy0zNDctXFxubW0vZ3VwX3Rlc3QuYzozNDg6c3RhdGljIGxvbmcgZ3VwX3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLFxcbm1tL2d1cF90ZXN0LmMtMzQ5LVxcdFxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbm1tL2d1cF90ZXN0LmMtMzUwLXtcXG5tbS9ndXBfdGVzdC5jOjM1MTpcXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwO1xcbm1tL2d1cF90ZXN0LmMtMzUyLVxcdGludCByZXQ7XFxuLS1cXG5tbS9ndXBfdGVzdC5jLTM3Mi1cXG5tbS9ndXBfdGVzdC5jOjM3MzpcXHRyZXQgPSBfX2d1cF90ZXN0X2lvY3RsKGNtZCwgXFx1MDAyNmd1cCk7XFxubW0vZ3VwX3Rlc3QuYy0zNzQtXFx0aWYgKHJldClcXG4tLVxcbm1tL2d1cF90ZXN0LmMtMzgyLVxcbm1tL2d1cF90ZXN0LmM6MzgzOnN0YXRpYyBpbnQgZ3VwX3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5tbS9ndXBfdGVzdC5jLTM4NC17XFxubW0vZ3VwX3Rlc3QuYzozODU6XFx0c3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGE7XFxubW0vZ3VwX3Rlc3QuYy0zODYtXFx0aW50IHJldDtcXG4tLVxcbm1tL2d1cF90ZXN0LmMtNDAyLVxcbm1tL2d1cF90ZXN0LmM6NDAzOnN0YXRpYyBpbnQgZ3VwX3Rlc3RfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5tbS9ndXBfdGVzdC5jLTQwNC17XFxubW0vZ3VwX3Rlc3QuYzo0MDU6XFx0c3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxubW0vZ3VwX3Rlc3QuYy00MDYtXFxuLS1cXG5tbS9ndXBfdGVzdC5jLTQxNC1cXG5tbS9ndXBfdGVzdC5jOjQxNTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBndXBfdGVzdF9mb3BzID0ge1xcbm1tL2d1cF90ZXN0LmM6NDE2OlxcdC5vcGVuID0gZ3VwX3Rlc3Rfb3BlbixcXG5tbS9ndXBfdGVzdC5jOjQxNzpcXHQudW5sb2NrZWRfaW9jdGwgPSBndXBfdGVzdF9pb2N0bCxcXG5tbS9ndXBfdGVzdC5jLTQxOC1cXHQuY29tcGF0X2lvY3RsID0gY29tcGF0X3B0cl9pb2N0bCxcXG5tbS9ndXBfdGVzdC5jOjQxOTpcXHQucmVsZWFzZSA9IGd1cF90ZXN0X3JlbGVhc2UsXFxubW0vZ3VwX3Rlc3QuYy00MjAtfTtcXG5tbS9ndXBfdGVzdC5jLTQyMS1cXG5tbS9ndXBfdGVzdC5jOjQyMjpzdGF0aWMgaW50IF9faW5pdCBndXBfdGVzdF9pbml0KHZvaWQpXFxubW0vZ3VwX3Rlc3QuYy00MjMte1xcbm1tL2d1cF90ZXN0LmM6NDI0OlxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfdW5zYWZlKFxcXCJndXBfdGVzdFxcXCIsIDA2MDAsIE5VTEwsIE5VTEwsXFxubW0vZ3VwX3Rlc3QuYzo0MjU6XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmd1cF90ZXN0X2ZvcHMpO1xcbm1tL2d1cF90ZXN0LmMtNDI2LVxcbi0tXFxubW0vZ3VwX3Rlc3QuYy00MjktXFxubW0vZ3VwX3Rlc3QuYzo0MzA6bGF0ZV9pbml0Y2FsbChndXBfdGVzdF9pbml0KTtcXG4tLVxcbm1tL2d1cF90ZXN0LmgtNi1cXG5tbS9ndXBfdGVzdC5oOjc6I2RlZmluZSBHVVBfRkFTVF9CRU5DSE1BUktcXHRfSU9XUignZycsIDEsIHN0cnVjdCBndXBfdGVzdClcXG5tbS9ndXBfdGVzdC5oOjg6I2RlZmluZSBQSU5fRkFTVF9CRU5DSE1BUktcXHRfSU9XUignZycsIDIsIHN0cnVjdCBndXBfdGVzdClcXG5tbS9ndXBfdGVzdC5oOjk6I2RlZmluZSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXFx0X0lPV1IoJ2cnLCAzLCBzdHJ1Y3QgZ3VwX3Rlc3QpXFxubW0vZ3VwX3Rlc3QuaDoxMDojZGVmaW5lIEdVUF9CQVNJQ19URVNUXFx0XFx0X0lPV1IoJ2cnLCA0LCBzdHJ1Y3QgZ3VwX3Rlc3QpXFxubW0vZ3VwX3Rlc3QuaDoxMTojZGVmaW5lIFBJTl9CQVNJQ19URVNUXFx0XFx0X0lPV1IoJ2cnLCA1LCBzdHJ1Y3QgZ3VwX3Rlc3QpXFxubW0vZ3VwX3Rlc3QuaDoxMjojZGVmaW5lIERVTVBfVVNFUl9QQUdFU19URVNUXFx0X0lPV1IoJ2cnLCA2LCBzdHJ1Y3QgZ3VwX3Rlc3QpXFxubW0vZ3VwX3Rlc3QuaC0xMy0jZGVmaW5lIFBJTl9MT05HVEVSTV9URVNUX1NUQVJUXFx0X0lPVygnZycsIDcsIHN0cnVjdCBwaW5fbG9uZ3Rlcm1fdGVzdClcXG4tLVxcbm1tL2d1cF90ZXN0LmgtMjAtXFxubW0vZ3VwX3Rlc3QuaDoyMTpzdHJ1Y3QgZ3VwX3Rlc3Qge1xcbm1tL2d1cF90ZXN0LmgtMjItXFx0X191NjQgZ2V0X2RlbHRhX3VzZWM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjIxOjU2Ljg4MjUxNzIwNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNzc5MTIzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBndXBfdGVzdC5jIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYG1tL2d1cF90ZXN0LmNgLiBJdCdzIGEgZGVidWdmcyBpbnRlcmZhY2UsIHdoaWNoIGlzIGEgYmlnIGZsYWcgZm9yIG1lIHNpbmNlIHRoYXQgb2Z0ZW4gbWVhbnMgdXNlcnNwYWNlIGludGVyYWN0aW9uIGFuZCBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBTcGVjaWZpY2FsbHksIGl0J3MgZm9yIHRlc3RpbmcgYGdldF91c2VyX3BhZ2VzYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMg4oCTIHRoZSBgQ09ORklHX0dVUF9URVNUYCBjb25maWcgaXMgdGhlIGtleS4gVGhlIHByaW1hcnkgY2hhbmdlIGhlcmUgaXMgZml4aW5nIGEgY29uY3VycmVuY3kgaXNzdWUgd2l0aGluIHRoZSBgUElOX0xPTkdURVJNX1RFU1RfKmAgaW9jdGxzLiBUaGV5J3ZlIG1vdmVkIHNvbWUgZ2xvYmFsIHN0YXRlIGludG8gYSBwZXItZmlsZSBkZXNjcmlwdG9yIHN0cnVjdHVyZSwgYHN0cnVjdCBndXBfdGVzdF9kYXRhYC4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlIHdpdGhpbiB0aGUgdGVzdCBtb2R1bGUgaXRzZWxmLlxuXG5UaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgXCJJcyB0aGlzIGZ1enphYmxlP1wiIFNpbmNlIHRoaXMgZXhwb3NlcyBrZXJuZWwgQVBJcyB0byB1c2Vyc3BhY2UsIGl0J3MgYSBkZWZpbml0ZSBwb3NzaWJpbGl0eSwgYW5kIHByb2JhYmx5IGEgZ29vZCBpZGVhLiBUaGUgbGlzdGVkIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBndXBfdGVzdF9vcGVuYCwgYGd1cF90ZXN0X3JlbGVhc2VgLCBgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnRgLCBgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcGAsIGBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkYCwgYHBpbl9sb25ndGVybV90ZXN0X2lvY3RsYCwgYW5kIGBndXBfdGVzdF9pb2N0bGAuXG5cbldhaXQsIGBndXBfdGVzdF9vcGVuYCBhbmQgYGd1cF90ZXN0X3JlbGVhc2VgIGFyZSAqbmV3KiBmdW5jdGlvbnMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBBbmQgaXQgbG9va3MgbGlrZSBgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnRgLCBgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcGAsIGFuZCBgcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZGAgYXJlICptb2RpZmllZCouIFRoZXNlIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucyB3aGljaCBpcyBpbXBvcnRhbnQuIEhvd2V2ZXIsIGBndXBfdGVzdF9vcGVuYCwgYGd1cF90ZXN0X3JlbGVhc2VgLCBhbmQgYGd1cF90ZXN0X2lvY3RsYCBhcmUgZXhwb3NlZCB2aWEgYGZpbGVfb3BlcmF0aW9uc2Agd2hpY2ggaXMgZGlmZmVyZW50LiBUaGUgcHJvbXB0IHNheXMgdGhhdCB3ZSBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuXG5cbkhhbmcgb27igKYgbG9va2luZyBjbG9zZXIsIGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydGAgKmlzKiBpbmxpbmUuIFNvLCB0aGF0J3Mgbm90IGEgY2xlYXIgZnV6emluZyB0YXJnZXQsIGJ1dCB0aGUgYGd1cF90ZXN0X29wZW5gLCBhbmQgYGd1cF90ZXN0X3JlbGVhc2VgLCBhbmQgYGd1cF90ZXN0X2lvY3RsYCBhcmUgKm5vdCogaW5saW5lLiBUaGVzZSBhcmUgYWN0dWFsbHkgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIGluIHRoZSBgZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3QuIFRoaXMgbWVhbnMgdGhleSBjYW5ub3QgYmUgaW5saW5lZCwgYW5kIHdpbGwgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBTbywgd2UncmUgZGVmaW5pdGVseSBsb29raW5nIGF0IHBvdGVudGlhbCBmdXp6aW5nIHN1cmZhY2UgaGVyZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGd1cF90ZXN0X29wZW5gIGlzIHN0YXRpYy4gWWVzLCBpdCdzIHN0YXRpYywgYnV0IHRoaXMgaXMgbGVzcyBpbXBvcnRhbnQsIGl0J3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhpcyBtZWFucyB0aGUgY29tcGlsZXIgd29uJ3QgaW5saW5lIGl0LiBTYW1lIHdpdGggYGd1cF90ZXN0X3JlbGVhc2VgLCBpdCBpcyBhbHNvIHN0YXRpYyBidXQgaXMgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXIuIFRoZW4gdGhlcmUncyBgZ3VwX3Rlc3RfaW9jdGxgIGFzIHdlbGwhIEFuZCBgcGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGxgIGlzIGNhbGxlZCBmcm9tIGBndXBfdGVzdF9pb2N0bGAuIFRoaXMgd2FycmFudHMgYSBjbG9zZXIgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgZm9yIGBndXBfdGVzdF9pb2N0bGAgaW4gYG1tL2d1cF90ZXN0LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODY0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjIyOjA2LjE2MDQzMTg0OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9ndXBfdGVzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0fVxcbiAzMjE6XFx0XFxuIDMyMjpcXHRzdGF0aWMgbG9uZyBwaW5fbG9uZ3Rlcm1fdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsXFxuIDMyMzpcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXFxuIDMyNDpcXHR7XFxuIDMyNTpcXHRcXHRzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSA9IGZpbGVwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDMyNjpcXHRcXHRpbnQgcmV0ID0gLUVJTlZBTDtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0aWYgKG11dGV4X2xvY2tfa2lsbGFibGUoXFx1MDAyNmRhdGEtXFx1MDAzZWxvbmd0ZXJtX211dGV4KSlcXG4gMzI5OlxcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuIDMzMDpcXHRcXG4gMzMxOlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuIDMzMjpcXHRcXHRjYXNlIFBJTl9MT05HVEVSTV9URVNUX1NUQVJUOlxcbiAzMzM6XFx0XFx0XFx0cmV0ID0gcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoZGF0YSwgYXJnKTtcXG4gMzM0OlxcdFxcdFxcdGJyZWFrO1xcbiAzMzU6XFx0XFx0Y2FzZSBQSU5fTE9OR1RFUk1fVEVTVF9TVE9QOlxcbiAzMzY6XFx0XFx0XFx0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChkYXRhKTtcXG4gMzM3OlxcdFxcdFxcdHJldCA9IDA7XFxuIDMzODpcXHRcXHRcXHRicmVhaztcXG4gMzM5OlxcdFxcdGNhc2UgUElOX0xPTkdURVJNX1RFU1RfUkVBRDpcXG4gMzQwOlxcdFxcdFxcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoZGF0YSwgYXJnKTtcXG4gMzQxOlxcdFxcdFxcdGJyZWFrO1xcbiAzNDI6XFx0XFx0fVxcbiAzNDM6XFx0XFxuIDM0NDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhdGEtXFx1MDAzZWxvbmd0ZXJtX211dGV4KTtcXG4gMzQ1OlxcdFxcdHJldHVybiByZXQ7XFxuIDM0NjpcXHR9XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdHN0YXRpYyBsb25nIGd1cF90ZXN0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCxcXG4gMzQ5OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbiAzNTA6XFx0e1xcbiAzNTE6XFx0XFx0c3RydWN0IGd1cF90ZXN0IGd1cDtcXG4gMzUyOlxcdFxcdGludCByZXQ7XFxuIDM1MzpcXHRcXG4gMzU0OlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuIDM1NTpcXHRcXHRjYXNlIEdVUF9GQVNUX0JFTkNITUFSSzpcXG4gMzU2OlxcdFxcdGNhc2UgUElOX0ZBU1RfQkVOQ0hNQVJLOlxcbiAzNTc6XFx0XFx0Y2FzZSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLOlxcbiAzNTg6XFx0XFx0Y2FzZSBHVVBfQkFTSUNfVEVTVDpcXG4gMzU5OlxcdFxcdGNhc2UgUElOX0JBU0lDX1RFU1Q6XFxuIDM2MDpcXHRcXHRjYXNlIERVTVBfVVNFUl9QQUdFU19URVNUOlxcbiAzNjE6XFx0XFx0XFx0YnJlYWs7XFxuIDM2MjpcXHRcXHRjYXNlIFBJTl9MT05HVEVSTV9URVNUX1NUQVJUOlxcbiAzNjM6XFx0XFx0Y2FzZSBQSU5fTE9OR1RFUk1fVEVTVF9TVE9QOlxcbiAzNjQ6XFx0XFx0Y2FzZSBQSU5fTE9OR1RFUk1fVEVTVF9SRUFEOlxcbiAzNjU6XFx0XFx0XFx0cmV0dXJuIHBpbl9sb25ndGVybV90ZXN0X2lvY3RsKGZpbGVwLCBjbWQsIGFyZyk7XFxuIDM2NjpcXHRcXHRkZWZhdWx0OlxcbiAzNjc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDM2ODpcXHRcXHR9XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2Z3VwLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihndXApKSlcXG4gMzcxOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAzNzI6XFx0XFxuIDM3MzpcXHRcXHRyZXQgPSBfX2d1cF90ZXN0X2lvY3RsKGNtZCwgXFx1MDAyNmd1cCk7XFxuIDM3NDpcXHRcXHRpZiAocmV0KVxcbiAzNzU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzc2OlxcdFxcbiAzNzc6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsIFxcdTAwMjZndXAsIHNpemVvZihndXApKSlcXG4gMzc4OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAzNzk6XFx0XFxuIDM4MDpcXHRcXHRyZXR1cm4gMDtcXG4gMzgxOlxcdH1cXG4gMzgyOlxcdFxcbiAzODM6XFx0c3RhdGljIGludCBndXBfdGVzdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiAzODQ6XFx0e1xcbiAzODU6XFx0XFx0c3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGE7XFxuIDM4NjpcXHRcXHRpbnQgcmV0O1xcbiAzODc6XFx0XFxuIDM4ODpcXHRcXHRkYXRhID0ga3phbGxvY19vYmooKmRhdGEpO1xcbiAzODk6XFx0XFx0aWYgKCFkYXRhKVxcbiAzOTA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDM5MTpcXHRcXG4gMzkyOlxcdFxcdHJldCA9IG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpO1xcbiAzOTM6XFx0XFx0aWYgKHJldCkge1xcbiAzOTQ6XFx0XFx0XFx0a2ZyZWUoZGF0YSk7XFxuIDM5NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzOTY6XFx0XFx0fVxcbiAzOTc6XFx0XFxuIDM5ODpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZkYXRhLVxcdTAwM2Vsb25ndGVybV9tdXRleCk7XFxuIDM5OTpcXHRcXHRmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBkYXRhO1xcbiA0MDA6XFx0XFx0cmV0dXJuIDA7XFxuIDQwMTpcXHR9XFxuIDQwMjpcXHRcXG4gNDAzOlxcdHN0YXRpYyBpbnQgZ3VwX3Rlc3RfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gNDA0OlxcdHtcXG4gNDA1OlxcdFxcdHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiA0MDY6XFx0XFxuIDQwNzpcXHRcXHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpO1xcbiA0MDg6XFx0XFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2ZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fbXV0ZXgpO1xcbiA0MDk6XFx0XFx0a2ZyZWUoZGF0YSk7XFxuIDQxMDpcXHRcXHRmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBOVUxMO1xcbiA0MTE6XFx0XFxuIDQxMjpcXHRcXHRyZXR1cm4gMDtcXG4gNDEzOlxcdH1cXG4gNDE0OlxcdFxcbiA0MTU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3VwX3Rlc3RfZm9wcyA9IHtcXG4gNDE2OlxcdFxcdC5vcGVuID0gZ3VwX3Rlc3Rfb3BlbixcXG4gNDE3OlxcdFxcdC51bmxvY2tlZF9pb2N0bCA9IGd1cF90ZXN0X2lvY3RsLFxcbiA0MTg6XFx0XFx0LmNvbXBhdF9pb2N0bCA9IGNvbXBhdF9wdHJfaW9jdGwsXFxuIDQxOTpcXHRcXHQucmVsZWFzZSA9IGd1cF90ZXN0X3JlbGVhc2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjIyOjA2LjE2MDU1MDM0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwNDc5NTM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVjZW50IENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHJlY2VudCBtb2RpZmljYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGFkZGl0aW9uIG9yIGFsdGVyYXRpb25zIG9mIHRoZSBmdW5jdGlvbnMgYGd1cF90ZXN0X29wZW5gLCBgZ3VwX3Rlc3RfcmVsZWFzZWAsIGBndXBfdGVzdF9pb2N0bGAsIGFuZCBgcGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGxgLiBUaGV5IGFyZW4ndCBpbmxpbmVkLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gVGhlIG92ZXJhbGwgY29uZmlnIGJlaW5nIHVzZWQgaXMgYEdVUF9URVNUYC4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBmdW5jdGlvbnMsIHdoaWNoIGRlYWwgd2l0aCBJT0NUTHMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggYEdVUF9URVNUYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGJlIGludm9sdmVkIGFuZCB3aGF0IHRoZSBwdXJwb3NlIG9mIGBHVVBfVEVTVGAgYWN0dWFsbHkgaXMuIFRpbWUgdG8gZGlnIGludG8gdGhlIEtjb25maWchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjIyOjEwLjA2NTM0ODIwMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzE4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyOTA6XFx0XFx0ICBpbmZvcm1hdGlvbiBpbmNsdWRlcyBnbG9iYWwgYW5kIHBlciBjaHVuayBzdGF0aXN0aWNzLCB3aGljaCBjYW5cXG4xMjkxOlxcdFxcdCAgYmUgdXNlZCB0byBoZWxwIHVuZGVyc3RhbmQgcGVyY3B1IG1lbW9yeSB1c2FnZS5cXG4xMjkyOlxcdFxcbjEyOTM6XFx0Y29uZmlnIEdVUF9URVNUXFxuMTI5NDpcXHRcXHRib29sIFxcXCJFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzXFxcIlxcbjEyOTU6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19GU1xcbjEyOTY6XFx0XFx0aGVscFxcbjEyOTc6XFx0XFx0ICBQcm92aWRlcyAvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdCwgd2hpY2ggaW4gdHVybiBwcm92aWRlcyBhIHdheVxcbjEyOTg6XFx0XFx0ICB0byBtYWtlIGlvY3RsIGNhbGxzIHRoYXQgY2FuIGxhdW5jaCBrZXJuZWwtYmFzZWQgdW5pdCB0ZXN0cyBmb3JcXG4xMjk5OlxcdFxcdCAgdGhlIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSBmYW1pbHkgb2YgQVBJIGNhbGxzLlxcbjEzMDA6XFx0XFxuMTMwMTpcXHRcXHQgIFRoZXNlIHRlc3RzIGluY2x1ZGUgYmVuY2htYXJrIHRlc3Rpbmcgb2YgdGhlIF9mYXN0IHZhcmlhbnRzIG9mXFxuMTMwMjpcXHRcXHQgIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSwgYXMgd2VsbCBhcyBzbW9rZSB0ZXN0cyBvZlxcbjEzMDM6XFx0XFx0ICB0aGUgbm9uLV9mYXN0IHZhcmlhbnRzLlxcbjEzMDQ6XFx0XFxuMTMwNTpcXHRcXHQgIFRoZXJlIGlzIGFsc28gYSBzdWItdGVzdCB0aGF0IGFsbG93cyBydW5uaW5nIGR1bXBfcGFnZSgpIG9uIGFueVxcbjEzMDY6XFx0XFx0ICBvZiB1cCB0byBlaWdodCBwYWdlcyAoc2VsZWN0ZWQgYnkgY29tbWFuZCBsaW5lIGFyZ3MpIHdpdGhpbiB0aGVcXG4xMzA3OlxcdFxcdCAgcmFuZ2Ugb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIFRoZXNlIHBhZ2VzIGFyZSBlaXRoZXIgcGlubmVkIHZpYVxcbjEzMDg6XFx0XFx0ICBwaW5fdXNlcl9wYWdlcyooKSwgb3IgcGlubmVkIHZpYSBnZXRfdXNlcl9wYWdlcyooKSwgYXMgc3BlY2lmaWVkXFxuMTMwOTpcXHRcXHQgIGJ5IG90aGVyIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuXFxuMTMxMDpcXHRcXG4xMzExOlxcdFxcdCAgU2VlIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG4xMzEyOlxcdFxcbjEzMTM6XFx0Y29tbWVudCBcXFwiR1VQX1RFU1QgbmVlZHMgdG8gaGF2ZSBERUJVR19GUyBlbmFibGVkXFxcIlxcbjEzMTQ6XFx0XFx0ZGVwZW5kcyBvbiAhR1VQX1RFU1QgXFx1MDAyNlxcdTAwMjYgIURFQlVHX0ZTXFxuMTMxNTpcXHRcXG4xMzE2OlxcdGNvbmZpZyBHVVBfR0VUX1BYWF9MT1dfSElHSFxcbjEzMTc6XFx0XFx0Ym9vbFxcbjEzMTg6XFx0XFxuMTMxOTpcXHRjb25maWcgRE1BUE9PTF9URVNUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjIyOjEwLjA2NTQ2NjY4MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTEzNDE2NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIGBndXBfdGVzdGAgTW9kdWxlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgSSd2ZSBnb3QgYSBwbGFuIGZvciBmdXp6aW5nIGl0LiBUaGUga2V5IGhlcmUgaXMgdGhlIGBndXBfdGVzdGAgZGVidWdmcyBpbnRlcmZhY2UuIFRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyIC0gYERFQlVHX0ZTYCwgYW5kIHNpbmNlIGBHVVBfVEVTVGAgZW5hYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSwgdGhhdCdzIHdoYXQgSSdsbCBuZWVkIHRvIGVuYWJsZSBpbiB0aGUgY29uZmlndXJhdGlvbi5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuICp3b3J0aCogZnV6emluZz8gQWJzb2x1dGVseSEgSXQncyBhIHRlc3QgbW9kdWxlLCB5ZXMsIGJ1dCBpdCBleHBvc2VzIGtlcm5lbCBBUElzIHRvIHVzZXJzcGFjZS4gVGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUsIGFuZCBjb25jdXJyZW5jeSBidWdzIGFyZSBwcmVjaXNlbHkgd2hhdCBmdXp6ZXJzIGV4Y2VsIGF0IHVuY292ZXJpbmcgYW5kIHZhbGlkYXRpbmcgZml4ZXMgZm9yLiBUaGlzIGlzIGEgY2xhc3NpYyBvcHBvcnR1bml0eS5cblxuVGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb3N0IGxpa2VseSB0byBiZSBpbnRlcmVzdGluZyBhcmUgYGd1cF90ZXN0X29wZW5gLCBgZ3VwX3Rlc3RfcmVsZWFzZWAsIGBndXBfdGVzdF9pb2N0bGAsIGFuZCBgcGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGxgLiBJIGluaXRpYWxseSBoYWQgYSBjb25jZXJuIGFib3V0IGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydGAsIGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wYCwgYW5kIGBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkYCBzaW5jZSB0aGV5IGFyZSBpbmxpbmUgYW5kIHdvbid0IGhhdmUgdGhlaXIgb3duIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIFNpbmNlIHRoaXMgaXMgYW4gaW9jdGwgYmFzZWQgaW50ZXJmYWNlLCBpdCBtYWtlcyBzZW5zZSB0byBmb2N1cyBvbiB0aGUgYCpfaW9jdGxgIGZ1bmN0aW9ucy5cblxuTGV0J3MgZG8gYSBxdWljayBjaGVjayBvbiB0aGUgYHBpbl9sb25ndGVybV90ZXN0X2lvY3RsYCBmdW5jdGlvbiBzaW5jZSBpdCBjb3VsZCBiZSBpbmxpbmVkLiBBaCwgeWVzLCBpdCdzIGBzdGF0aWMgbG9uZyBwaW5fbG9uZ3Rlcm1fdGVzdF9pb2N0bCguLi4pYC4gSXQncyBjYWxsZWQgZnJvbSBgZ3VwX3Rlc3RfaW9jdGxgLCB3aGljaCBpcyBhbHNvIGBzdGF0aWMgbG9uZyBndXBfdGVzdF9pb2N0bCguLi4pYC4gU2luY2UgaXQncyBvbmx5IGNhbGxlZCBmcm9tIG9uZSBwbGFjZSwgdGhlIGNvbXBpbGVyICptaWdodCogaW5saW5lIGl0LiBIb3dldmVyLCBgZ3VwX3Rlc3RfaW9jdGxgIGlzIG5vdCBpbmxpbmVkIGJlY2F1c2UgaXQncyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBUaGVyZWZvcmUsIGBndXBfdGVzdF9pb2N0bGAgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0LiBMaWtld2lzZSwgYGd1cF90ZXN0X29wZW5gIGFuZCBgZ3VwX3Rlc3RfcmVsZWFzZWAgYXJlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB0b28uXG5cblNvLCB0byBzdW1tYXJpemUsIEknbSBsaXN0aW5nOlxuKiAgIGBndXBfdGVzdF9vcGVuYFxuKiAgIGBndXBfdGVzdF9yZWxlYXNlYFxuKiAgIGBndXBfdGVzdF9pb2N0bGBcbiogICBgcGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGxgXG5cblRoZSBjb25maWcgbmVlZGVkIGZvciB0aGlzIGlzIGBHVVBfVEVTVGAuXG5cbkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSBgZ3VwX3Rlc3RgIGRlYnVnZnMgaW50ZXJmYWNlIHRvIHVzZSBwZXItZmlsZSBkZXNjcmlwdG9yIHN0YXRlIGZvciB0aGUgYFBJTl9MT05HVEVSTV9URVNUXypgIGlvY3RscywgZml4aW5nIGNvbmN1cnJlbmN5IHByb2JsZW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gYSB0ZXN0IG1vZHVsZSB0aGF0IGV4cG9zZXMga2VybmVsIEFQSXMgdG8gdXNlcnNwYWNlLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgY29uY3VycmVuY3kgZml4IGlzIGNvcnJlY3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgaXNzdWVzIHN1Y2ggYXMgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIE5vdywgbGV0J3MgY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMzksIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6MjI6MjAuNTc4ODg2MTMxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNTIxODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJHVVBfVEVTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImd1cF90ZXN0X29wZW5cIixcbiAgICBcImd1cF90ZXN0X3JlbGVhc2VcIixcbiAgICBcImd1cF90ZXN0X2lvY3RsXCIsXG4gICAgXCJwaW5fbG9uZ3Rlcm1fdGVzdF9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBndXBfdGVzdCBkZWJ1Z2ZzIGludGVyZmFjZSB0byB1c2UgcGVyLWZpbGUgZGVzY3JpcHRvciBzdGF0ZSBpbnN0ZWFkIG9mIGdsb2JhbCBzdGF0ZSBmb3IgdGhlIFBJTl9MT05HVEVSTV9URVNUXyogaW9jdGxzLCBmaXhpbmcgY29uY3VycmVuY3kgaXNzdWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gYSB0ZXN0IG1vZHVsZSB0aGF0IGV4cG9zZXMga2VybmVsIEFQSXMgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgY29uY3VycmVuY3kgZml4IGlzIGNvcnJlY3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIG5ldyBpc3N1ZXMgbGlrZSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiR1VQX1RFU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJndXBfdGVzdF9vcGVuXCIsXG4gICAgXCJndXBfdGVzdF9yZWxlYXNlXCIsXG4gICAgXCJndXBfdGVzdF9pb2N0bFwiLFxuICAgIFwicGluX2xvbmd0ZXJtX3Rlc3RfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZ3VwX3Rlc3QgZGVidWdmcyBpbnRlcmZhY2UgdG8gdXNlIHBlci1maWxlIGRlc2NyaXB0b3Igc3RhdGUgaW5zdGVhZCBvZiBnbG9iYWwgc3RhdGUgZm9yIHRoZSBQSU5fTE9OR1RFUk1fVEVTVF8qIGlvY3RscywgZml4aW5nIGNvbmN1cnJlbmN5IGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGEgdGVzdCBtb2R1bGUgdGhhdCBleHBvc2VzIGtlcm5lbCBBUElzIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIGNvbmN1cnJlbmN5IGZpeCBpcyBjb3JyZWN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSBuZXcgaXNzdWVzIGxpa2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMjoyMjoyMC43Mjk0MTY1OTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MTE5NDA2NjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6MjI6MjAuNzMwMDIyMDk1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM3MTE4Nzk3NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBwaW5fbG9uZ3Rlcm1fdGVzdGAgaW4gYG1tL2d1cF90ZXN0LmNgIHRvIHVzZSBhIHBlci1maWxlIGRhdGEgc3RydWN0dXJlIChgc3RydWN0IGd1cF90ZXN0X2RhdGFgKSBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMsIGFsbG93aW5nIGNvbmN1cnJlbnQgdXNlcnMgb2YgdGhlIGd1cF90ZXN0IGlvY3RsLiBUaGUgbmV3IHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyBhbGwgZmllbGRzLiBUaGUgYXJyYXkgb2YgcGFnZSBwb2ludGVycyBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt2Y2FsbG9jYCwgd2hpY2ggYWxzbyB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkuIFRoZSBvbmx5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIHBpbm5lZCB1c2VyIHBhZ2VzLCB3aGljaCBpcyBpZGVudGljYWwgdG8gdGhlIHByZS1wYXRjaCBiZWhhdmlvciBhbmQgZG9lcyBub3QgbGVhayBrZXJuZWwgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjZhZjY3OTVkYTg5MTY0YmI5MWYyYmE5YmE2MzhlZDRjM2Y3NTYyYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDEyOjIxOjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZ3VwX3Rlc3QuYyBiL21tL2d1cF90ZXN0LmNcbmluZGV4IGViNGM5Y2RhMTZlZDguLjQ0YzFjZGZiOWMzNzEgMTAwNjQ0XG4tLS0gYS9tbS9ndXBfdGVzdC5jXG4rKysgYi9tbS9ndXBfdGVzdC5jXG5AQCAtOCw2ICs4LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGlnaG1lbS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJndXBfdGVzdC5oXCJcbiBcbitzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSB7XG4rXHRzdHJ1Y3QgbXV0ZXggbG9uZ3Rlcm1fbXV0ZXg7XG4rXHRzdHJ1Y3QgcGFnZSAqKmxvbmd0ZXJtX3BhZ2VzO1xuK1x0dW5zaWduZWQgbG9uZyBsb25ndGVybV9ucl9wYWdlcztcbit9O1xuK1xuIHN0YXRpYyB2b2lkIHB1dF9iYWNrX3BhZ2VzKHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4gXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgdW5zaWduZWQgaW50IGd1cF90ZXN0X2ZsYWdzKVxuIHtcbkBAIC0yMDgsMjMgKzIxNCwyMCBAQCBzdGF0aWMgaW50IF9fZ3VwX3Rlc3RfaW9jdGwodW5zaWduZWQgaW50IGNtZCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBERUZJTkVfTVVURVgocGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpO1xuLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKnBpbl9sb25ndGVybV90ZXN0X3BhZ2VzO1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzO1xuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKHZvaWQpXG4rc3RhdGljIGlubGluZSB2b2lkIHBpbl9sb25ndGVybV90ZXN0X3N0b3Aoc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEpXG4ge1xuLVx0aWYgKHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzKSB7XG4tXHRcdGlmIChwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcylcbi1cdFx0XHR1bnBpbl91c2VyX3BhZ2VzKHBpbl9sb25ndGVybV90ZXN0X3BhZ2VzLFxuLVx0XHRcdFx0XHQgcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMpO1xuLVx0XHRrdmZyZWUocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpO1xuLVx0XHRwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlcyA9IE5VTEw7XG4tXHRcdHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzID0gMDtcbitcdGlmIChkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzKSB7XG4rXHRcdGlmIChkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzKVxuK1x0XHRcdHVucGluX3VzZXJfcGFnZXMoZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcyxcbitcdFx0XHRcdFx0IGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMpO1xuK1x0XHRrdmZyZWUoZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcyk7XG4rXHRcdGRhdGEtXHUwMDNlbG9uZ3Rlcm1fcGFnZXMgPSBOVUxMO1xuK1x0XHRkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzID0gMDtcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpXG4rc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnQoc3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbiBcdGxvbmcgbnJfcGFnZXMsIGN1cl9wYWdlcywgYWRkciwgcmVtYWluaW5nX3BhZ2VzO1xuIFx0aW50IGd1cF9mbGFncyA9IEZPTExfTE9OR1RFUk07XG5AQCAtMjMzLDcgKzIzNiw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0aW50IHJldCA9IDA7XG4gXHRib29sIGZhc3Q7XG4gXG4tXHRpZiAocGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMpXG4rXHRpZiAoZGF0YS1cdTAwM2Vsb25ndGVybV9wYWdlcylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YXJncywgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoYXJncykpKVxuQEAgLTI2MywxMiArMjY2LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyZXR1cm4gLUVJTlRSO1xuIFx0fVxuIFxuLVx0cGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXMgPSBwYWdlcztcbi1cdHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzID0gMDtcbitcdGRhdGEtXHUwMDNlbG9uZ3Rlcm1fcGFnZXMgPSBwYWdlcztcbitcdGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgPSAwO1xuIFxuLVx0d2hpbGUgKG5yX3BhZ2VzIC0gcGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMpIHtcbi1cdFx0cmVtYWluaW5nX3BhZ2VzID0gbnJfcGFnZXMgLSBwaW5fbG9uZ3Rlcm1fdGVzdF9ucl9wYWdlcztcbi1cdFx0YWRkciA9IGFyZ3MuYWRkciArIHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzICogUEFHRV9TSVpFO1xuK1x0d2hpbGUgKG5yX3BhZ2VzIC0gZGF0YS1cdTAwM2Vsb25ndGVybV9ucl9wYWdlcykge1xuK1x0XHRyZW1haW5pbmdfcGFnZXMgPSBucl9wYWdlcyAtIGRhdGEtXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXM7XG4rXHRcdGFkZHIgPSBhcmdzLmFkZHIgKyBkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzICogUEFHRV9TSVpFO1xuIFxuIFx0XHRpZiAoZmFzdClcbiBcdFx0XHRjdXJfcGFnZXMgPSBwaW5fdXNlcl9wYWdlc19mYXN0KGFkZHIsIHJlbWFpbmluZ19wYWdlcyxcbkBAIC0yNzcsMTEgKzI4MCwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydCh1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0XHRjdXJfcGFnZXMgPSBwaW5fdXNlcl9wYWdlcyhhZGRyLCByZW1haW5pbmdfcGFnZXMsXG4gXHRcdFx0XHRcdFx0ICAgZ3VwX2ZsYWdzLCBwYWdlcyk7XG4gXHRcdGlmIChjdXJfcGFnZXMgXHUwMDNjIDApIHtcbi1cdFx0XHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKCk7XG4rXHRcdFx0cGluX2xvbmd0ZXJtX3Rlc3Rfc3RvcChkYXRhKTtcbiBcdFx0XHRyZXQgPSBjdXJfcGFnZXM7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbi1cdFx0cGluX2xvbmd0ZXJtX3Rlc3RfbnJfcGFnZXMgKz0gY3VyX3BhZ2VzO1xuK1x0XHRkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzICs9IGN1cl9wYWdlcztcbiBcdFx0cGFnZXMgKz0gY3VyX3BhZ2VzO1xuIFx0fVxuIFxuQEAgLTI5MCwxOSArMjkzLDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZCh1bnNpZ25lZCBsb25nIGFyZylcbitzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4gXHRfX3U2NCB1c2VyX2FkZHI7XG4gXHR1bnNpZ25lZCBsb25nIGk7XG4gXG4tXHRpZiAoIXBpbl9sb25ndGVybV90ZXN0X3BhZ2VzKVxuK1x0aWYgKCFkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ1c2VyX2FkZHIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKHVzZXJfYWRkcikpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzOyBpKyspIHtcbi1cdFx0dm9pZCAqYWRkciA9IGttYXBfbG9jYWxfcGFnZShwaW5fbG9uZ3Rlcm1fdGVzdF9wYWdlc1tpXSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkYXRhLVx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzOyBpKyspIHtcbitcdFx0dm9pZCAqYWRkciA9IGttYXBfbG9jYWxfcGFnZShkYXRhLVx1MDAzZWxvbmd0ZXJtX3BhZ2VzW2ldKTtcbiBcdFx0dW5zaWduZWQgbG9uZyByZXQ7XG4gXG4gXHRcdHJldCA9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyl1c2VyX2FkZHIsIGFkZHIsXG5AQCAtMzE4LDI1ICszMjIsMjYgQEAgc3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZCh1bnNpZ25lZCBsb25nIGFyZylcbiBzdGF0aWMgbG9uZyBwaW5fbG9uZ3Rlcm1fdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuK1x0c3RydWN0IGd1cF90ZXN0X2RhdGEgKmRhdGEgPSBmaWxlcC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHRpbnQgcmV0ID0gLUVJTlZBTDtcbiBcbi1cdGlmIChtdXRleF9sb2NrX2tpbGxhYmxlKFx1MDAyNnBpbl9sb25ndGVybV90ZXN0X211dGV4KSlcbitcdGlmIChtdXRleF9sb2NrX2tpbGxhYmxlKFx1MDAyNmRhdGEtXHUwMDNlbG9uZ3Rlcm1fbXV0ZXgpKVxuIFx0XHRyZXR1cm4gLUVJTlRSO1xuIFxuIFx0c3dpdGNoIChjbWQpIHtcbiBcdGNhc2UgUElOX0xPTkdURVJNX1RFU1RfU1RBUlQ6XG4tXHRcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KGFyZyk7XG4rXHRcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0KGRhdGEsIGFyZyk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBQSU5fTE9OR1RFUk1fVEVTVF9TVE9QOlxuLVx0XHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKCk7XG4rXHRcdHBpbl9sb25ndGVybV90ZXN0X3N0b3AoZGF0YSk7XG4gXHRcdHJldCA9IDA7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBQSU5fTE9OR1RFUk1fVEVTVF9SRUFEOlxuLVx0XHRyZXQgPSBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkKGFyZyk7XG4rXHRcdHJldCA9IHBpbl9sb25ndGVybV90ZXN0X3JlYWQoZGF0YSwgYXJnKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2cGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXgpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhdGEtXHUwMDNlbG9uZ3Rlcm1fbXV0ZXgpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMzc1LDE1ICszODAsNDAgQEAgc3RhdGljIGxvbmcgZ3VwX3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZ3VwX3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YTtcbitcdGludCByZXQ7XG4rXG4rXHRkYXRhID0ga3phbGxvY19vYmooKmRhdGEpO1xuK1x0aWYgKCFkYXRhKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJldCA9IG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRrZnJlZShkYXRhKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdG11dGV4X2luaXQoXHUwMDI2ZGF0YS1cdTAwM2Vsb25ndGVybV9tdXRleCk7XG4rXHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IGRhdGE7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBndXBfdGVzdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbi1cdHBpbl9sb25ndGVybV90ZXN0X3N0b3AoKTtcbitcdHN0cnVjdCBndXBfdGVzdF9kYXRhICpkYXRhID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXG4rXHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpO1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZkYXRhLVx1MDAzZWxvbmd0ZXJtX211dGV4KTtcbitcdGtmcmVlKGRhdGEpO1xuK1x0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBOVUxMO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGd1cF90ZXN0X2ZvcHMgPSB7XG4tXHQub3BlbiA9IG5vbnNlZWthYmxlX29wZW4sXG4rXHQub3BlbiA9IGd1cF90ZXN0X29wZW4sXG4gXHQudW5sb2NrZWRfaW9jdGwgPSBndXBfdGVzdF9pb2N0bCxcbiBcdC5jb21wYXRfaW9jdGwgPSBjb21wYXRfcHRyX2lvY3RsLFxuIFx0LnJlbGVhc2UgPSBndXBfdGVzdF9yZWxlYXNlLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6MjI6MjAuNzMwMDIzMDI2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MDQxODgyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgYG1tL2d1cF90ZXN0LmNgIGZvciBDb25jdXJyZW50IEdVUCBUZXN0IFVzYWdlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBpbXByb3ZpbmcgdGhlIGNvbmN1cnJlbmN5IG9mIHRoZSBgZ3VwX3Rlc3RgIGlvY3RsLiBDdXJyZW50bHksIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBwaW5fbG9uZ3Rlcm1fdGVzdGAgZnVuY3Rpb25hbGl0eSwgcmVsaWVzIG9uIGdsb2JhbCB2YXJpYWJsZXMuIFRoYXQncyBhIGNsYXNzaWMgYm90dGxlbmVjaywgZXNwZWNpYWxseSBpZiB3ZSB3YW50IHRvIGFsbG93IG11bHRpcGxlIHVzZXJzIHRvIHJ1biBgZ3VwX3Rlc3RgIGNvbmN1cnJlbnRseS4gU28sIHRoZSByZWZhY3RvciBpcyBhIGdvb2QgbW92ZS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGhvdyB0aGV54oCZcmUgZG9pbmcgaXQuIFRoZSBrZXkgaXMgdXNpbmcgYSBwZXItZmlsZSBkYXRhIHN0cnVjdHVyZSwgYHN0cnVjdCBndXBfdGVzdF9kYXRhYCwgdG8gcmVwbGFjZSB0aG9zZSBnbG9iYWwgdmFyaWFibGVzOiBgcGluX2xvbmd0ZXJtX3Rlc3RfbXV0ZXhgLCBgcGluX2xvbmd0ZXJtX3Rlc3RfcGFnZXNgLCBhbmQgYHBpbl9sb25ndGVybV90ZXN0X25yX3BhZ2VzYC4gVGhhdCdzIHRoZSByaWdodCBhcHByb2FjaDsgcGVyLWZpbGUgbG9ja2luZyBhbmQgZGF0YSBpcyB0aGUgb2J2aW91cyBzb2x1dGlvbiBoZXJlLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZSBjaGFuZ2VzLiBGaXJzdCwgdGhleSBkZWZpbmUgdGhlIHN0cnVjdHVyZSwgYHN0cnVjdCBndXBfdGVzdF9kYXRhYC4gRmluZSwgdW5kZXJzdGFuZGFibGUuXG5cbk9rYXksIG5vdyBsZXQncyBzZWUgaG93IHRoaXMgc3RydWN0dXJlIGlzIGluc3RhbnRpYXRlZC4gQWgsIGluIGBndXBfdGVzdF9vcGVuYCwgaXQgbG9va3MgbGlrZSBgZGF0YWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigqZGF0YSlgLiBXYWl0LCBga3phbGxvY19vYmpgPyBUaGF0J3Mgbm90IGEgc3RhbmRhcmQga2VybmVsIGZ1bmN0aW9uLCBpcyBpdD8gSXQncyB1bmZhbWlsaWFyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QgYSB0eXBvIG9yIHNvbWUgY3VzdG9tIG1hY3JvIHdpdGhpbiB0aGlzIHBhdGNoIG9yIHRoZSBsYXJnZXIgcHJvamVjdC4gSXQgc2VlbXMgb2RkLCBhcyB0aGUgdXN1YWwga2VybmVsIGFsbG9jYXRpb24gZnVuY3Rpb24gaXMgYGt6YWxsb2NgLiBVbmxlc3MgdGhpcyBpcyBhIHJlY2VudCBhZGRpdGlvbi4gT2theSwgbGV0J3MgYXNzdW1lIGl0J3MgYGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTClgIGZvciBub3csIGJ1dCBJIG5lZWQgdG8gY2hlY2suIEl0J3MgYmVzdCBwcmFjdGljZSB0byBjb25maXJtIHRoZSBkZXRhaWxzLiBMZXQncyBzZWUgaWYgaXQncyBhIG1hY3JvIGRlZmluZWQgc29tZXdoZXJlLCBvciBwZXJoYXBzIGEgdHlwby4gR3JlcHBpbmcgZm9yIGBremFsbG9jX29iamAgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDIzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6MjI6MjcuMTM0MjE1MzQzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzEzOTQwNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2Nfb2JqXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzkxMzggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q9MTAzPWxpc3Q6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTExNC1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjExNTogICAgICAgICAgZ3JvY2sgPSBremFsbG9jX29iaigqZ3JvY2spO1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTE2LSAgICAgICAgICBpZiAoIWdyb2NrKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMjUtXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdDoxMjY6ICAgICAgICAgIGRpbWl0cmkgPSBremFsbG9jX29iaigqZGltaXRyaSk7XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMjctICAgICAgICAgIGlmICghZGltaXRyaSlcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdD00NT1hIG1lc3NhZ2UgYW5kIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIEFQSSBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5KS5cXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdC04OS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3Q6OTA6XFx0XFx0ZGNfc3luYyA9IGt6YWxsb2Nfb2JqKCpkY19zeW5jKTtcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3Q6OTE6XFx0XFx0ZGNfYXN5bmMgPSBremFsbG9jX29iaigqZGNfYXN5bmMpO1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdC05Mi1cXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdD0yNj1FeGFtcGxlOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0LTQ0LVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdDo0NTpcXHRcXHRteV9maCA9IGt6YWxsb2Nfb2JqKCpteV9maCk7XFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0LTQ2LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTM4PVRoZSBrZXJuZWwgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBnZW5lcmFsIHB1cnBvc2UgbWVtb3J5IGFsbG9jYXRvcnM6XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQwLXZ6YWxsb2MoKS4gIFBsZWFzZSByZWZlciB0byB0aGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk2ND1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYSB6ZXJvZWQgYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2Ny1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Njg6XFx0cCA9IGt6YWxsb2Nfb2JqcygqcCwgbiwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q9Mzk4PWJlY29tZSwgcmVzcGVjdGl2ZWx5OjpcXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDAtXFx0cHRyID0ga21hbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMTpcXHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAyLVxcdHB0ciA9IGttYWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMzpcXHRwdHIgPSBremFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDQtXFx0cHRyID0ga21hbGxvY19mbGV4KCpwdHIsIGZsZXhfbWVtYmVyLCBjb3VudCBbLCBnZnBdICk7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MjA4PXRvIGRldGFpbHMgZXhwbGFpbmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbi5cXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0yNjgtICAgICAgICAgICAgICAvKiBhbGxvY2F0ZSBhIGNoaXAtc3BlY2lmaWMgZGF0YSB3aXRoIHplcm8gZmlsbGVkICovXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjI2OTogICAgICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI3MC0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9NjIzPUFmdGVyIGFsbG9jYXRpbmcgYSBjYXJkIGluc3RhbmNlIHZpYSA6YzpmdW5jOmBzbmRfY2FyZF9uZXcoKWBcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC02MzAtICAuLi4uLlxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDo2MzE6ICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC02MzItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9Njk4PWRlc3RydWN0b3IgYW5kIFBDSSBlbnRyaWVzLiBFeGFtcGxlIGNvZGUgaXMgc2hvd24gZmlyc3QsIGJlbG93OjpcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC03NDktXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0Ojc1MDogICAgICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc1MS0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpIHtcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0zODIzPWNoaXAgZGF0YSBpbmRpdmlkdWFsbHk6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTM4MzUtICAgICAgICAgIC4uLi5cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MzgzNjogICAgICAgICAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNy0gICAgICAgICAgLi4uLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0PTc5ND1pbnQgbXlfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dC04MDEtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0OjgwMjpcXHRteV9maCA9IGt6YWxsb2Nfb2JqKCpteV9maCk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0LTgwMy1cXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jPTY0PW1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmNjRfRWhkciAqaGRyLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtOTUtXFx0bnN5bXMgPSBzeW10YWItXFx1MDAzZXNoX3NpemUgLyBzaXplb2YoRWxmNjRfU3ltKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYzo5NjpcXHRjaGFpbnMgPSBremFsbG9jX29ianMoc3RydWN0IGdvdF9lbnRyeSwgbnN5bXMpO1xcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTk3LVxcdGlmICghY2hhaW5zKSB7XFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jPTM5MD1yZWdpc3Rlcl9jcHVzKHZvaWQpXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM5NC1cXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM6Mzk1OlxcdFxcdHN0cnVjdCBjcHUgKnAgPSBremFsbG9jX29iaigqcCk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zOTYtXFx0XFx0aWYgKCFwKVxcbi0tXFxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jPTExMjA9c3RhdGljIGludCBqaXRfcHJlcGFyZV9maW5hbF9tZW1fYWxsb2Moc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXFxuLS1cXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmMtMTEzMS1cXHRpZiAoY3R4LVxcdTAwM2VuZWVkX2V4dHJhX3Bhc3MpIHtcXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmM6MTEzMjpcXHRcXHRjdHgtXFx1MDAzZWppdF9kYXRhID0ga3phbGxvY19vYmooKmN0eC1cXHUwMDNlaml0X2RhdGEpO1xcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYy0xMTMzLVxcdFxcdGlmICghY3R4LVxcdTAwM2VqaXRfZGF0YSlcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0yMjA9bG9jb21vX2luaXRfb25lX2NoaWxkKHN0cnVjdCBsb2NvbW8gKmxjaGlwLCBzdHJ1Y3QgbG9jb21vX2Rldl9pbmZvICppbmZvKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTIyNC1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MjI1OlxcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW9fZGV2KTtcXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjI2LVxcdGlmICghZGV2KSB7XFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM9MzU2PV9fbG9jb21vX3Byb2JlKHN0cnVjdCBkZXZpY2UgKm1lLCBzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwgaW50IGlycSlcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0zNjItXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jOjM2MzpcXHRsY2hpcCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW8pO1xcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0zNjQtXFx0aWYgKCFsY2hpcClcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYz03MzM9c2ExMTExX2luaXRfb25lX2NoaWxkKHN0cnVjdCBzYTExMTEgKnNhY2hpcCwgc3RydWN0IHJlc291cmNlICpwYXJlbnQsXFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtNzM5LVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYzo3NDA6XFx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IHNhMTExMV9kZXYpO1xcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy03NDEtXFx0aWYgKCFkZXYpIHtcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jPTE3OD1zdGF0aWMgaW50IHNjb29wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYy0xODctXFxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmM6MTg4OlxcdGRldnB0ciA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzY29vcF9kZXYpO1xcbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jLTE4OS1cXHRpZiAoIWRldnB0cilcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYz0xMDg9c3RhdGljIGludCBzZWNvbmRhcnlfYmlnbGl0dGxlX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYy0xMTAtXFx0aWYgKCFjcHVfdnRhYmxlW2NwdV0pXFxuYXJjaC9hcm0va2VybmVsL3NtcC5jOjExMTpcXHRcXHRjcHVfdnRhYmxlW2NwdV0gPSBremFsbG9jX29iaigqY3B1X3Z0YWJsZVtjcHVdKTtcXG5hcmNoL2FybS9rZXJuZWwvc21wLmMtMTEyLVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3Zkc28uYz0xNjk9c3RhdGljIGludCBfX2luaXQgdmRzb19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jLTE4MS1cXHQvKiBBbGxvY2F0ZSB0aGUgVkRTTyB0ZXh0IHBhZ2VsaXN0ICovXFxuYXJjaC9hcm0va2VybmVsL3Zkc28uYzoxODI6XFx0dmRzb190ZXh0X3BhZ2VsaXN0ID0ga3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHRleHRfcGFnZXMpO1xcbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmMtMTgzLVxcdGlmICh2ZHNvX3RleHRfcGFnZWxpc3QgPT0gTlVMTClcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmM9MjYxPWludCBfX2luaXQgZGMyMTI4NV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cylcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMtMjY0LVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmM6MjY1OlxcdHJlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcmVzb3VyY2UsIDIpO1xcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMtMjY2LVxcdGlmICghcmVzKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jPTY5PXN0YXRpYyBpbnQgX19pbml0IGVic2EyODVfbGVkc19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg2LVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmM6ODc6XFx0XFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYy04OC1cXHRcXHRpZiAoIWxlZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYz03MjA9c3RhdGljIGludCBfX2luaXQgbmV0d2luZGVyX2xlZHNfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jLTcyOS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmM6NzMwOlxcdFxcdGxlZCA9IGt6YWxsb2Nfb2JqKCpsZWQpO1xcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYy03MzEtXFx0XFx0aWYgKCFsZWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM9NDczPXN0YXRpYyBpbnQgaW14X21tZGNfcGVyZl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgX19pb21lbSAqbW1kY19iYXNlLFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTQ3OS1cXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM6NDgwOlxcdHBtdV9tbWRjID0ga3phbGxvY19vYmooKnBtdV9tbWRjKTtcXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmMtNDgxLVxcdGlmICghcG11X21tZGMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYz0xMTQ9c3RhdGljIHZvaWQgX19pbml0IGkyY19xdWlyayh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTEyOS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM6MTMwOlxcdFxcdG5ld19jb21wYXQgPSBremFsbG9jX29iaigqbmV3X2NvbXBhdCk7XFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTEzMS1cXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmM9MTYzPXN0YXRpYyB2b2lkIF9faW5pdCBhcm1hZGFfMzc1XzM4MF9jb2hlcmVuY3lfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYy0xODctXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYzoxODg6XFx0XFx0cCA9IGt6YWxsb2Nfb2JqKCpwKTtcXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jLTE4OS1cXHRcXHRwLVxcdTAwM2VuYW1lID0ga3N0cmR1cChcXFwiYXJtLGlvLWNvaGVyZW50XFxcIiwgR0ZQX0tFUk5FTCk7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jPTE0OD1zdGF0aWMgaW50IF9faW5pdCBtdmVidV9zb2NfZGV2aWNlKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jLTE1Ni1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jOjE1NzpcXHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jLTE1OC1cXHRpZiAoIXNvY19kZXZfYXR0cilcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmM9MzgwPXN0YXRpYyB2b2lkIF9faW5pdCBteHNfbWFjaGluZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM4OS1cXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jOjM5MDpcXHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM5MS1cXHRpZiAoIXNvY19kZXZfYXR0cilcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmM9Mjk0PXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX3N5c3RlbV9kbWFfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYy0zMjEtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYzozMjI6XFx0ZCA9IGt6YWxsb2Nfb2JqKCpkKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jLTMyMy1cXHRpZiAoIWQpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYz0yOTI9c3RhdGljIHZvaWQgb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcoc3RydWN0IHJlc291cmNlICpyZXMsIGludCByZXNfY291bnQsXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMtMjk2LVxcbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYzoyOTc6XFx0b21hcF9tY2JzcF9kZXZpY2VzID0ga3phbGxvY19vYmpzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgc2l6ZSk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jLTI5OC1cXHRpZiAoIW9tYXBfbWNic3BfZGV2aWNlcykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jPTUxPXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX2RtX3RpbWVyX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYy0xMjctXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jOjEyODpcXHRcXHRwZGF0YSA9IGt6YWxsb2Nfb2JqKCpwZGF0YSk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jLTEyOS1cXHRcXHRpZiAoIXBkYXRhKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYz0yMzA9dm9pZCBvbWFwMnh4eF9jbGt0X3Zwc19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYy0yMzktXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmM6MjQwOlxcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYy0yNDEtXFx0aWYgKCFodylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYz03ODY9dm9pZCBfX2luaXQgb21hcF9zb2NfZGV2aWNlX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYy03OTAtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jOjc5MTpcXHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMtNzkyLVxcdGlmICghc29jX2Rldl9hdHRyKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jPTEzMT1zdGF0aWMgaW50IG9tYXBfZGV2aWNlX2J1aWxkX2Zyb21fZHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYy0xNTgtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jOjE1OTpcXHRod21vZHMgPSBremFsbG9jX29ianMoc3RydWN0IG9tYXBfaHdtb2QgKiwgb2hfY250KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMtMTYwLVxcdGlmICghaHdtb2RzKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYz0zMzgxPXN0YXRpYyBpbnQgb21hcF9od21vZF9hbGxvY2F0ZV9tb2R1bGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb21hcF9od21vZCAqb2gsXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zMzk0LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjMzOTU6XFx0c3lzYyA9IGt6YWxsb2Nfb2JqKCpzeXNjKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zMzk2LVxcdGlmICghc3lzYylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM0MjQtXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNm9oLVxcdTAwM2VzbGF2ZV9wb3J0cykpIHtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozNDI1OlxcdFxcdG9pID0ga3phbGxvY19vYmooKm9pKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNDI2LVxcdFxcdGlmICghb2kpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYz0zNTEzPWludCBvbWFwX2h3bW9kX2luaXRfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1MjctXFx0aWYgKCFvaCkge1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjM1Mjg6XFx0XFx0b2ggPSBremFsbG9jX29iaigqb2gpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1MjktXFx0XFx0aWYgKCFvaClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1MzgtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUzOTpcXHRcXHRvaC1cXHUwMDNlY2xhc3MgPSBremFsbG9jX29iaigqb2gtXFx1MDAzZWNsYXNzKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTQwLVxcdFxcdGlmICghb2gtXFx1MDAzZWNsYXNzKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmM9Mzc5PXN0YXRpYyBpbnQgX19pbml0IGFteDNfaWRsZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1X25vZGUsIGludCBjcHUpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmMtNDEyLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYzo0MTM6XFx0aWRsZV9zdGF0ZXMgPSBremFsbG9jX29ianMoKmlkbGVfc3RhdGVzLCBzdGF0ZV9jb3VudCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jLTQxNC1cXHRpZiAoIWlkbGVfc3RhdGVzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYz0zMD1zdGF0aWMgdm9pZCBfX2luaXQgc3Jfc2V0X252YWx1ZXMoc3RydWN0IG9tYXBfdm9sdF9kYXRhICp2b2x0X2RhdGEsXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jLTQxLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmM6NDI6XFx0bnZhbHVlX3RhYmxlID0ga3phbGxvY19vYmpzKCpudmFsdWVfdGFibGUsIGNvdW50KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jLTQzLVxcdGlmICghbnZhbHVlX3RhYmxlKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jPTEzOT1zdGF0aWMgaW50IF9faW5pdCBwY2llX3NldHVwKHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy0xNzEtXFx0ICovXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jOjE3MjpcXHRyZXMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmVzb3VyY2UpO1xcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy0xNzMtXFx0aWYgKCFyZXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM9NDY2PXN0YXRpYyBpbnQgX19pbml0IHBjaV9zZXR1cChzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtNDkyLVxcdCAqL1xcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYzo0OTM6XFx0cmVzID0ga3phbGxvY19vYmooc3RydWN0IHJlc291cmNlKTtcXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtNDk0LVxcdGlmICghcmVzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYz02ODk9c3RhdGljIHN0cnVjdCBleHBhbnNpb25fY2FyZCAqX19pbml0IGVjYXJkX2FsbG9jX2NhcmQoaW50IHR5cGUsIGludCBzbG90KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYy02OTQtXFxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYzo2OTU6XFx0ZWMgPSBremFsbG9jX29iaihlY2FyZF90KTtcXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jLTY5Ni1cXHRpZiAoIWVjKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jPTkzPWludCBfX2luaXQgc2ExMXh4X2Nsa19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEwOS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jOjExMDpcXHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMTEtXFx0aWYgKCFodylcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTMxLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM6MTMyOlxcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEzMy1cXHRpZiAoIWh3KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jPTMxNz1pbnQgX19pbml0IHNhMTF4MF9yZWdpc3Rlcl9maXhlZF9yZWd1bGF0b3IoaW50IG4sXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMtMzIzLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYzozMjQ6XFx0Y2ZnLVxcdTAwM2Vpbml0X2RhdGEgPSBpZCA9IGt6YWxsb2Nfb2JqKCpjZmctXFx1MDAzZWluaXRfZGF0YSk7XFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jLTMyNS1cXHRpZiAoIWNmZy1cXHUwMDNlaW5pdF9kYXRhKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYz0yMjU9c3RhdGljIGludCBuZXBvbnNldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jLTI3OC1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jOjI3OTpcXHRkID0ga3phbGxvY19vYmooKmQpO1xcbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMtMjgwLVxcdGlmICghZCkge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmM9MTQxPXN0YXRpYyBpbnQgX19pbml0IHJjYXJfZ2VuMl9yZWd1bGF0b3JfcXVpcmsodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jLTE2Ni1cXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYzoxNjc6XFx0XFx0cXVpcmsgPSBremFsbG9jX29iaigqcXVpcmspO1xcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jLTE2OC1cXHRcXHRpZiAoIXF1aXJrKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYz0zOTM9c3RhdGljIGludCB2ZV9zcGNfcG9wdWxhdGVfb3Bwcyh1aW50MzJfdCBjbHVzdGVyKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtMzk3LVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjM5ODpcXHRvcHBzID0ga3phbGxvY19vYmpzKCpvcHBzLCBNQVhfT1BQUyk7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtMzk5LVxcdGlmICghb3BwcylcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jPTQ0Mj1pbnQgX19pbml0IHZlX3NwY19pbml0KHZvaWQgX19pb21lbSAqYmFzZWFkZHIsIHUzMiBhMTVfY2x1c2lkLCBpbnQgaXJxKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNDQ0LVxcdGludCByZXQ7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6NDQ1OlxcdGluZm8gPSBremFsbG9jX29iaigqaW5mbyk7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNDQ2LVxcdGlmICghaW5mbylcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jPTUyMz1zdGF0aWMgc3RydWN0IGNsayAqdmVfc3BjX2Nsa19yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpjcHVfZGV2KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNTI3LVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjUyODpcXHRzcGMgPSBremFsbG9jX29iaigqc3BjKTtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy01MjktXFx0aWYgKCFzcGMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYz0xMjM9c3RhdGljIHZvaWQgX19pbml0IHZlcnNhdGlsZV9kdF9wY2lfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmMtMTQ0LVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jOjE0NTpcXHRuZXdwcm9wID0ga3phbGxvY19vYmooKm5ld3Byb3ApO1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jLTE0Ni1cXHRpZiAoIW5ld3Byb3ApXFxuLS1cXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmM9MTA1PXN0YXRpYyB2b2lkIF9faW5pdCB6eW5xX2luaXRfbWFjaGluZSh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTExMC1cXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmM6MTExOlxcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYy0xMTItXFx0aWYgKCFzb2NfZGV2X2F0dHIpXFxuLS1cXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jPTUwMz1zdGF0aWMgX19pbml0IGludCBsMngwX3BtdV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jLTUwOS1cXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jOjUxMDpcXHRsMngwX3BtdSA9IGt6YWxsb2Nfb2JqKCpsMngwX3BtdSk7XFxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYy01MTEtXFx0aWYgKCFsMngwX3BtdSkge1xcbi0tXFxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYz0zMTU9c3RhdGljIGludCBfX2luaXQgX191bmlwaGllcl9jYWNoZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuLS1cXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jLTM0NC1cXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jOjM0NTpcXHRkYXRhID0ga3phbGxvY19vYmooKmRhdGEpO1xcbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmMtMzQ2LVxcdGlmICghZGF0YSlcXG4tLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM9NTMzPXN0YXRpYyB2b2lkICpfX2RtYV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpoYW5kbGUsXFxuLS1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTU2MC1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jOjU2MTpcXHRidWYgPSBremFsbG9jX29iaigqYnVmLFxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtNTYyLVxcdFxcdFxcdCAgZ2ZwIFxcdTAwMjYgfihfX0dGUF9ETUEgfCBfX0dGUF9ETUEzMiB8IF9fR0ZQX0hJR0hNRU0pKTtcXG4tLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM9MTQ4Nz1hcm1faW9tbXVfY3JlYXRlX21hcHBpbmcoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGJhc2UsIHU2NCBzaXplKVxcbi0tXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy0xNTA2LVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM6MTUwNzpcXHRtYXBwaW5nID0ga3phbGxvY19vYmooc3RydWN0IGRtYV9pb21tdV9tYXBwaW5nKTtcXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTE1MDgtXFx0aWYgKCFtYXBwaW5nKVxcbi0tXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jPTMxNj1pbnQgX19pbml0IGFyY2hfeGVuX3VucG9wdWxhdGVkX2luaXQoc3RydWN0IHJlc291cmNlICoqcmVzKVxcbi0tXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM0My1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM6MzQ0OlxcdHJlZ3MgPSBremFsbG9jX29ianMoKnJlZ3MsIG5yX3JlZyk7XFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM0NS1cXHRpZiAoIXJlZ3MpIHtcXG4tLVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zODctXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jOjM4ODpcXHRcXHR0bXBfcmVzID0ga3phbGxvY19vYmooKnRtcF9yZXMpO1xcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zODktXFx0XFx0aWYgKCF0bXBfcmVzKSB7XFxuLS1cXG5hcmNoL2FybS94ZW4vcDJtLmM9MTUwPWJvb2wgX19zZXRfcGh5c190b19tYWNoaW5lX211bHRpKHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxuYXJjaC9hcm0veGVuL3AybS5jLTE3OC1cXG5hcmNoL2FybS94ZW4vcDJtLmM6MTc5OlxcdHAybV9lbnRyeSA9IGt6YWxsb2Nfb2JqKCpwMm1fZW50cnksIEdGUF9OT1dBSVQpO1xcbmFyY2gvYXJtL3hlbi9wMm0uYy0xODAtXFx0aWYgKCFwMm1fZW50cnkpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM9Njg9c3RhdGljIGludCBfX2luaXQgX192ZHNvX2luaXQoZW51bSB2ZHNvX2FiaSBhYmkpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMtODMtXFxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jOjg0OlxcdHZkc29fcGFnZWxpc3QgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19pbmZvW2FiaV0udmRzb19wYWdlcyk7XFxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTg1LVxcdGlmICh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz00ODA9c3RhdGljIGludCBzaGFyZV9wZm5faHlwKHU2NCBwZm4pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy00OTItXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6NDkzOlxcdHRoaXMgPSBremFsbG9jX29iaigqdGhpcyk7XFxuYXJjaC9hcm02NC9rdm0vbW11LmMtNDk0LVxcdGlmICghdGhpcykge1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9OTgxPWludCBrdm1faW5pdF9zdGFnZTJfbW11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgdW5zaWduZWQgbG9uZyB0eXBlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwNy1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMDA4OlxcdHBndCA9IGt6YWxsb2Nfb2JqKCpwZ3QsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwOS1cXHRpZiAoIXBndClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTExODA9aW50IHRvcHVwX2h5cF9tZW1jYWNoZShzdHJ1Y3Qga3ZtX2h5cF9tZW1jYWNoZSAqbWMsIHVuc2lnbmVkIGxvbmcgbWluX3BhZ2VzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE4NS1cXHRpZiAoIW1jLVxcdTAwM2VtYXBwaW5nKSB7XFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTE4NjpcXHRcXHRtYy1cXHUwMDNlbWFwcGluZyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBwa3ZtX21hcHBpbmcsXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE4Ny1cXHRcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yNTEwPWludCBfX2luaXQga3ZtX21tdV9pbml0KHUzMiBoeXBfdmFfYml0cylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI1NDMtXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjU0NDpcXHRoeXBfcGd0YWJsZSA9IGt6YWxsb2Nfb2JqKCpoeXBfcGd0YWJsZSk7XFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjU0NS1cXHRpZiAoIWh5cF9wZ3RhYmxlKSB7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMzI4PWludCBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzMzLVxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC52bmNyX3RsYikge1xcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEzMzQ6XFx0XFx0c3RydWN0IHZuY3JfdGxiICp2dCA9IGt6YWxsb2Nfb2JqKCp2Y3B1LVxcdTAwM2VhcmNoLnZuY3JfdGxiLFxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMzUtXFx0XFx0XFx0XFx0XFx0XFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTc5Mz1pbnQga3ZtX2luaXRfbnZfc3lzcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xODAyLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE4MDM6XFx0a3ZtLVxcdTAwM2VhcmNoLnN5c3JlZ19tYXNrcyA9IGt6YWxsb2Nfb2JqKCooa3ZtLVxcdTAwM2VhcmNoLnN5c3JlZ19tYXNrcyksXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwNC1cXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYz0xMTY9c3RhdGljIHN0cnVjdCBrdm1fcHRkdW1wX2d1ZXN0X3N0YXRlICprdm1fcHRkdW1wX3BhcnNlcl9jcmVhdGUoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTEyMS1cXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYzoxMjI6XFx0c3QgPSBremFsbG9jX29iaihzdHJ1Y3Qga3ZtX3B0ZHVtcF9ndWVzdF9zdGF0ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0xMjMtXFx0aWYgKCFzdClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9MjA3PXN0YXRpYyBpbnQga3ZtX3ZnaWNfZGlzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IG5yX3NwaXMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTIxMy1cXHRkaXN0LVxcdTAwM2VhY3RpdmVfc3BpcyA9IChhdG9taWNfdClBVE9NSUNfSU5JVCgwKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jOjIxNDpcXHRkaXN0LVxcdTAwM2VzcGlzID0ga3phbGxvY19vYmpzKHN0cnVjdCB2Z2ljX2lycSwgbnJfc3BpcywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTIxNS1cXHRpZiAoIWRpc3QtXFx1MDAzZXNwaXMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTMxNj1zdGF0aWMgaW50IHZnaWNfYWxsb2NhdGVfcHJpdmF0ZV9pcnFzX2xvY2tlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB0eXBlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0zMzEtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzozMzI6XFx0dmdpY19jcHUtXFx1MDAzZXByaXZhdGVfaXJxcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdmdpY19pcnEsXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0zMzMtXFx0XFx0XFx0XFx0XFx0ICAgICAgbnVtX3ByaXZhdGVfaXJxcyxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jPTE0Mj1pbnQga3ZtX3ZnaWNfc2V0dXBfZGVmYXVsdF9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xNDgtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM6MTQ5OlxcdGVudHJpZXMgPSBremFsbG9jX29ianMoKmVudHJpZXMsIG5yLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTE1MC1cXHRpZiAoIWVudHJpZXMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9NzY9c3RhdGljIHN0cnVjdCB2Z2ljX2lycSAqdmdpY19hZGRfbHBpKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGludGlkLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTg3LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzo4ODpcXHRpcnEgPSBremFsbG9jX29iaihzdHJ1Y3QgdmdpY19pcnEsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTg5LVxcdGlmICghaXJxKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTk2Mj1zdGF0aWMgaW50IHZnaWNfaXRzX2FsbG9jX2NvbGxlY3Rpb24oc3RydWN0IHZnaWNfaXRzICppdHMsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtOTY3LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzo5Njg6XFx0Y29sbGVjdGlvbiA9IGt6YWxsb2Nfb2JqKCpjb2xsZWN0aW9uLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy05NjktXFx0aWYgKCFjb2xsZWN0aW9uKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTEwMDY9c3RhdGljIHN0cnVjdCBpdHNfaXRlICp2Z2ljX2l0c19hbGxvY19pdGUoc3RydWN0IGl0c19kZXZpY2UgKmRldmljZSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMDExLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxMDEyOlxcdGl0ZSA9IGt6YWxsb2Nfb2JqKCppdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTEwMTMtXFx0aWYgKCFpdGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTEzMz1zdGF0aWMgc3RydWN0IGl0c19kZXZpY2UgKnZnaWNfaXRzX2FsbG9jX2RldmljZShzdHJ1Y3QgdmdpY19pdHMgKml0cyxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMTM4LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxMTM5OlxcdGRldmljZSA9IGt6YWxsb2Nfb2JqKCpkZXZpY2UsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTExNDAtXFx0aWYgKCFkZXZpY2UpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTg0Nj1zdGF0aWMgaW50IHZnaWNfaXRzX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xODUzLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxODU0OlxcdGl0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2l0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTg1NS1cXHRpZiAoIWl0cylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM9ODg2PXN0YXRpYyBpbnQgdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdWludDMyX3QgaW5kZXgsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jOjkzMjpcXHRyZHJlZyA9IGt6YWxsb2Nfb2JqKCpyZHJlZywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMy1cXHRpZiAoIXJkcmVnKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmM9MjQyPWludCB2Z2ljX3Y0X2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmMtMjU4LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jOjI1OTpcXHRkaXN0LVxcdTAwM2VpdHNfdm0udnBlcyA9IGt6YWxsb2Nfb2JqcygqZGlzdC1cXHUwMDNlaXRzX3ZtLnZwZXMsIG5yX3ZjcHVzLFxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jLTI2MC1cXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTIwODA9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDEtXFx0aWYgKCFqaXRfZGF0YSkge1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIxMDI6XFx0XFx0aml0X2RhdGEgPSBremFsbG9jX29iaigqaml0X2RhdGEpO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDMtXFx0XFx0aWYgKCFqaXRfZGF0YSlcXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jPTE3PXN0YXRpYyBpbnQgX19pbml0IHZkc29faW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmMtMjItXFx0dmRzb19wYWdlbGlzdCA9XFxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmM6MjM6XFx0XFx0a3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHZkc29fcGFnZXMpO1xcbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jLTI0LVxcdGlmICh1bmxpa2VseSh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpKSB7XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYz00NjY9c3RhdGljIGludCBfX2luaXQgYWRkX2xlZ2FjeV9pc2FfaW8oc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTQ3Mi1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYzo0NzM6XFx0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UsIEdGUF9BVE9NSUMpO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTQ3NC1cXHRpZiAoIXJhbmdlKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYz00NT1zdGF0aWMgaW50IF9faW5pdCBpbml0X3Zkc28odm9pZClcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmMtNTUtXFx0dmRzb19pbmZvLmNvZGVfbWFwcGluZy5wYWdlcyA9XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYzo1NjpcXHRcXHRremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19pbmZvLnNpemUgLyBQQUdFX1NJWkUpO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmMtNTctXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9NjE0PXN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTYyNC1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM6NjI1OlxcdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMpO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy02MjYtXFx0aWYgKCFzKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9Mzk0PXN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy00MTEtXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6NDEyOlxcdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9vbmdhcmNoX2lwaSk7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtNDEzLVxcdGlmICghcylcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6MjI6MjkuNDQ4MTYzMzczWiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1ODQ1MDg5MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEdVUCBUZXN0IERhdGEgU3RydWN0dXJlKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBJIHNlZSB0aGV5J3JlIHN3YXBwaW5nIG91dCB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgdGhlIEdVUCB0ZXN0IHdpdGggYSBwZXItZmlsZSBzdHJ1Y3R1cmUuIFRoYXQncyBhIGdvb2QgY2hhbmdlLCBtYWtlcyB0aGluZ3MgY2xlYW5lciBhbmQgcG90ZW50aWFsbHkgYWxsb3dzIGZvciBtdWx0aXBsZSBjb25jdXJyZW50IHRlc3RzLCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgZ2xvYmFsIHN0YXRlLiBUaGUga2V5IGhlcmUgaXMgdGhlIGBremFsbG9jX29iamAgY2FsbCBpbiBgZ3VwX3Rlc3Rfb3BlbmAuIFRoYXQncyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKWAuICBTbywgdGhhdCB6ZXJvLWluaXRpYWxpemVzIHRoZSBgZ3VwX3Rlc3RfZGF0YWAgc3RydWN0dXJlLCB3aGljaCBpcyBpbXBvcnRhbnQuIFRoaXMgZW5zdXJlcyBldmVyeXRoaW5nIHN0YXJ0cyBjbGVhbiwgd2hpY2ggYXZvaWRzIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZSBtdXRleCBpcyBiZWluZyBwcm9wZXJseSBpbml0aWFsaXplZCB3aXRoIGBtdXRleF9pbml0YCwgd2hpY2ggaXMgY29ycmVjdC4gVGhlIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAgYXNzaWdubWVudCBpcyBzdGFuZGFyZCBwcmFjdGljZSwgYXNzb2NpYXRpbmcgdGhlIGRhdGEgc3RydWN0dXJlIHdpdGggdGhlIGZpbGUgb3BlcmF0aW9uLlxuXG5UaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludm9sdmUgbW92aW5nIHRoZSBwYWdlIGFycmF5IGFuZCBtdXRleCBmcm9tIGdsb2JhbCBzY29wZSB0byB0aGlzIHBlci1maWxlIHN0cnVjdHVyZS4gVGhlIGtleSBmdW5jdGlvbnMsIGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydGAgYW5kIGBwaW5fbG9uZ3Rlcm1fdGVzdF9yZWFkYCwgbm93IHRha2UgYSBgc3RydWN0IGd1cF90ZXN0X2RhdGEgKmAgYXMgYW4gYXJndW1lbnQuICBMb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBJIGNhbiBzZWUgdGhhdCB0aGUgY29kZSBpcyBjb3JyZWN0bHkgdXBkYXRpbmcgdG8gdXNlIHRoZSBwZXItZmlsZSBkYXRhOyByZXBsYWNpbmcgYWxsIGluc3RhbmNlcyBvZiB0aGUgb2xkIGdsb2JhbCB2YXJpYWJsZSByZWZlcmVuY2VzIHRvIHRoZSBkYXRhIHN0cnVjdHVyZS5cblxuVGhlIHBhcnQgdGhhdCBjYXVnaHQgbXkgYXR0ZW50aW9uIHdhcyB0aGUgYGNvcHlfdG9fdXNlcmAgaW4gYHBpbl9sb25ndGVybV90ZXN0X3JlYWRgLiBCdXQgaXQncyB0cmFuc2ZlcnJpbmcgZGF0YSB0aGF0IGNhbWUgZnJvbSB1c2VyIHNwYWNlIG9yaWdpbmFsbHkuIEl0J3MgZXNzZW50aWFsbHkgXCJyb3VuZC10cmlwcGluZ1wiIHVzZXIgZGF0YSBiYWNrIHRvIHVzZXIgc3BhY2UgdmlhIHRoZSBwaW5uZWQgcGFnZXMuIFRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBpbmZvcm1hdGlvbiBsZWFrcywgYXMgdGhlIHVzZXIgbWVtb3J5IGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGEsIGFuZCBpdCdzIHNpbXBseSBjb3BpZWQgYmFjayB0byB0aGUgc2FtZSBhZGRyZXNzIHNwYWNlLiAgSXQncyBqdXN0IHRoZSBzdG9yYWdlIGZvciB0aGF0IG1lbW9yeSAodGhlIHBhZ2UgcG9pbnRlcnMpIHRoYXQncyBiZWVuIGNoYW5nZWQuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBhbGxvY2F0aW9ucy4gVGhlIGBwYWdlc2AgYXJyYXkgaXRzZWxmIGlzbid0IGRpcmVjdGx5IHNob3duIGhlcmUsIEknbSBnb2luZyB0byBoYXZlIHRvIGRpZyBhcm91bmQgYHBpbl9sb25ndGVybV90ZXN0X3N0YXJ0YCBmb3IgdGhhdC4gQWgsIGhlcmUgaXQgaXM6IHRoZSBtZW1vcnkgZm9yIHRoZSBgcGFnZXNgIGFycmF5IGlzIGFsbG9jYXRlZCB3aXRoIGBrdm1hbGxvY19hcnJheWAuIFRoYXQncyBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBrZXJuZWwgbWVtb3J5IGFycmF5LiBJdCBtYWtlcyBzZW5zZSB0aGF0IGBrdmZyZWVgIGlzIHVzZWQgbGF0ZXIgb24gdG8gcmVsZWFzZSB0aGF0IGFsbG9jYXRpb24uXG5cblNvLCBzdW1taW5nIHVwLCB0aGlzIHBhdGNoIGlzIGEgY2xlYW4gcmVmYWN0b3JpbmcuIEl0IG1vdmVzIHRoZSB0ZXN0J3Mgc3RhdGUgaW50byBhIHBlci1maWxlIHN0cnVjdHVyZSwgcHJvcGVybHkgaW5pdGlhbGl6ZXMgdGhhdCBzdHJ1Y3R1cmUgdmlhIGBremFsbG9jX29iamAsIGFuZCBjb3JyZWN0bHkgaGFuZGxlcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIHJvdW5kLXRyaXAgb2YgdXNlciBkYXRhIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBiZWNhdXNlIG9mIHRoZSB6ZXJvaW5nIGFuZCBpbml0aWFsaXphdGlvbiwgYW5kIHRoZSBkYXRhIGJlaW5nIGNvcGllZCBpcyBvcmlnaW5hdGluZyBmcm9tIHVzZXIgc3BhY2UuIEl0J3Mgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjIyOjQ1LjI5MzI1NTU1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MTgxMjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bWFsbG9jX2FycmF5LipwYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9ndXBfdGVzdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMjoyMjo0NS4zNDAwODE1ODFaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1OTI4MzQzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEdVUCBMb25nLVRlcm0gVGVzdCBTdGFydCoqXG5cbk9rYXksIGxldCdzIGRpdmUgc3RyYWlnaHQgaW50byBgcGluX2xvbmd0ZXJtX3Rlc3Rfc3RhcnRgIHdpdGhpbiBgbW0vZ3VwX3Rlc3QuY2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGxvbmctdGVybSB0ZXN0IHNlcXVlbmNlIGJlZ2lucyBmb3IgdGhlIEdVUCAoZ2V0X3VzZXJfcGFnZXMpIHN1YnN5c3RlbS4gV2hhdCBhcmUgdGhlIGluaXRpYWwgc2V0dXAgc3RlcHM/IFdoYXQgcGFyYW1ldGVycyBhcmUgYmVpbmcgY29uZmlndXJlZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIHRoYXQgbWlnaHQgYmUgcHJvbmUgdG8gY29udGVudGlvbiBvciByYWNlIGNvbmRpdGlvbnMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiBpbW1lZGlhdGVseT8gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZyYW1ld29yayB0aGlzIHRlc3QgdXRpbGl6ZXMuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IHNldHMgdXAgdGhlIG1lbW9yeSByZWdpb25zLCBhbnkgdXNlIG9mIHNwZWNpYWxpemVkIHBhZ2Ugc3RydWN0dXJlcyBvciBtYXBwaW5ncywgYW5kIGhvdyB0aGUgdGVzdCBoYXJuZXNzZXMgdGhlIEdVUCBpbnRlcmZhY2UgdG8gc2ltdWxhdGUgcmVhbGlzdGljIG9yIHN0cmVzc2Z1bCBzY2VuYXJpb3MuIEknbSBhc3N1bWluZyBpdCdzIHByb2JhYmx5IHVzaW5nIGEgY29tYmluYXRpb24gb2YgZGlyZWN0IGFuZCBpbmRpcmVjdCBHVVAgY2FsbHMsIHBlcmhhcHMgd2l0aCBwaW5uZWQgcGFnZXMgdG8gbWltaWMgc29tZSByZWFsLXdvcmxkIGFwcGxpY2F0aW9uIGJlaGF2aW9yLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGVzdGFibGlzaCB0aGUgYmFzZWxpbmUgYW5kIHRoZSB0ZXN0IGVudmlyb25tZW50OyB0aGVuLCBmcm9tIHRoZXJlLCBJIGNhbiBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzcwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6MjI6NDkuMjk5MzY4MjIxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9ndXBfdGVzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjA6XFx0XFx0XFx0aWYgKGRhdGEtXFx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzKVxcbiAyMjE6XFx0XFx0XFx0XFx0dW5waW5fdXNlcl9wYWdlcyhkYXRhLVxcdTAwM2Vsb25ndGVybV9wYWdlcyxcXG4gMjIyOlxcdFxcdFxcdFxcdFxcdFxcdCBkYXRhLVxcdTAwM2Vsb25ndGVybV9ucl9wYWdlcyk7XFxuIDIyMzpcXHRcXHRcXHRrdmZyZWUoZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpO1xcbiAyMjQ6XFx0XFx0XFx0ZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fcGFnZXMgPSBOVUxMO1xcbiAyMjU6XFx0XFx0XFx0ZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXMgPSAwO1xcbiAyMjY6XFx0XFx0fVxcbiAyMjc6XFx0fVxcbiAyMjg6XFx0XFxuIDIyOTpcXHRzdGF0aWMgaW5saW5lIGludCBwaW5fbG9uZ3Rlcm1fdGVzdF9zdGFydChzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSxcXG4gMjMwOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbiAyMzE6XFx0e1xcbiAyMzI6XFx0XFx0bG9uZyBucl9wYWdlcywgY3VyX3BhZ2VzLCBhZGRyLCByZW1haW5pbmdfcGFnZXM7XFxuIDIzMzpcXHRcXHRpbnQgZ3VwX2ZsYWdzID0gRk9MTF9MT05HVEVSTTtcXG4gMjM0OlxcdFxcdHN0cnVjdCBwaW5fbG9uZ3Rlcm1fdGVzdCBhcmdzO1xcbiAyMzU6XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlcztcXG4gMjM2OlxcdFxcdGludCByZXQgPSAwO1xcbiAyMzc6XFx0XFx0Ym9vbCBmYXN0O1xcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRpZiAoZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fcGFnZXMpXFxuIDI0MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjQxOlxcdFxcbiAyNDI6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZhcmdzLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihhcmdzKSkpXFxuIDI0MzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0aWYgKGFyZ3MuZmxhZ3MgXFx1MDAyNlxcbiAyNDY6XFx0XFx0ICAgIH4oUElOX0xPTkdURVJNX1RFU1RfRkxBR19VU0VfV1JJVEV8UElOX0xPTkdURVJNX1RFU1RfRkxBR19VU0VfRkFTVCkpXFxuIDI0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjQ4OlxcdFxcdGlmICghSVNfQUxJR05FRChhcmdzLmFkZHIgfCBhcmdzLnNpemUsIFBBR0VfU0laRSkpXFxuIDI0OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjUwOlxcdFxcdGlmIChhcmdzLnNpemUgXFx1MDAzZSBMT05HX01BWClcXG4gMjUxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyNTI6XFx0XFx0bnJfcGFnZXMgPSBhcmdzLnNpemUgLyBQQUdFX1NJWkU7XFxuIDI1MzpcXHRcXHRpZiAoIW5yX3BhZ2VzKVxcbiAyNTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDI1NTpcXHRcXG4gMjU2OlxcdFxcdHBhZ2VzID0ga3ZjYWxsb2MobnJfcGFnZXMsIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMKTtcXG4gMjU3OlxcdFxcdGlmICghcGFnZXMpXFxuIDI1ODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjU5OlxcdFxcbiAyNjA6XFx0XFx0aWYgKGFyZ3MuZmxhZ3MgXFx1MDAyNiBQSU5fTE9OR1RFUk1fVEVTVF9GTEFHX1VTRV9XUklURSlcXG4gMjYxOlxcdFxcdFxcdGd1cF9mbGFncyB8PSBGT0xMX1dSSVRFO1xcbiAyNjI6XFx0XFx0ZmFzdCA9ICEhKGFyZ3MuZmxhZ3MgXFx1MDAyNiBQSU5fTE9OR1RFUk1fVEVTVF9GTEFHX1VTRV9GQVNUKTtcXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0aWYgKCFmYXN0IFxcdTAwMjZcXHUwMDI2IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGN1cnJlbnQtXFx1MDAzZW1tKSkge1xcbiAyNjU6XFx0XFx0XFx0a3ZmcmVlKHBhZ2VzKTtcXG4gMjY2OlxcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuIDI2NzpcXHRcXHR9XFxuIDI2ODpcXHRcXG4gMjY5OlxcdFxcdGRhdGEtXFx1MDAzZWxvbmd0ZXJtX3BhZ2VzID0gcGFnZXM7XFxuIDI3MDpcXHRcXHRkYXRhLVxcdTAwM2Vsb25ndGVybV9ucl9wYWdlcyA9IDA7XFxuIDI3MTpcXHRcXG4gMjcyOlxcdFxcdHdoaWxlIChucl9wYWdlcyAtIGRhdGEtXFx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzKSB7XFxuIDI3MzpcXHRcXHRcXHRyZW1haW5pbmdfcGFnZXMgPSBucl9wYWdlcyAtIGRhdGEtXFx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzO1xcbiAyNzQ6XFx0XFx0XFx0YWRkciA9IGFyZ3MuYWRkciArIGRhdGEtXFx1MDAzZWxvbmd0ZXJtX25yX3BhZ2VzICogUEFHRV9TSVpFO1xcbiAyNzU6XFx0XFxuIDI3NjpcXHRcXHRcXHRpZiAoZmFzdClcXG4gMjc3OlxcdFxcdFxcdFxcdGN1cl9wYWdlcyA9IHBpbl91c2VyX3BhZ2VzX2Zhc3QoYWRkciwgcmVtYWluaW5nX3BhZ2VzLFxcbiAyNzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Z3VwX2ZsYWdzLCBwYWdlcyk7XFxuIDI3OTpcXHRcXHRcXHRlbHNlXFxuIDI4MDpcXHRcXHRcXHRcXHRjdXJfcGFnZXMgPSBwaW5fdXNlcl9wYWdlcyhhZGRyLCByZW1haW5pbmdfcGFnZXMsXFxuIDI4MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBndXBfZmxhZ3MsIHBhZ2VzKTtcXG4gMjgyOlxcdFxcdFxcdGlmIChjdXJfcGFnZXMgXFx1MDAzYyAwKSB7XFxuIDI4MzpcXHRcXHRcXHRcXHRwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wKGRhdGEpO1xcbiAyODQ6XFx0XFx0XFx0XFx0cmV0ID0gY3VyX3BhZ2VzO1xcbiAyODU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI4NjpcXHRcXHRcXHR9XFxuIDI4NzpcXHRcXHRcXHRkYXRhLVxcdTAwM2Vsb25ndGVybV9ucl9wYWdlcyArPSBjdXJfcGFnZXM7XFxuIDI4ODpcXHRcXHRcXHRwYWdlcyArPSBjdXJfcGFnZXM7XFxuIDI4OTpcXHRcXHR9XFxuIDI5MDpcXHRcXG4gMjkxOlxcdFxcdGlmICghZmFzdClcXG4gMjkyOlxcdFxcdFxcdG1tYXBfcmVhZF91bmxvY2soY3VycmVudC1cXHUwMDNlbW0pO1xcbiAyOTM6XFx0XFx0cmV0dXJuIHJldDtcXG4gMjk0OlxcdH1cXG4gMjk1OlxcdFxcbiAyOTY6XFx0c3RhdGljIGlubGluZSBpbnQgcGluX2xvbmd0ZXJtX3Rlc3RfcmVhZChzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YSAqZGF0YSxcXG4gMjk3OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbiAyOTg6XFx0e1xcbiAyOTk6XFx0XFx0X191NjQgdXNlcl9hZGRyO1xcbiAzMDA6XFx0XFx0dW5zaWduZWQgbG9uZyBpO1xcbiAzMDE6XFx0XFxuIDMwMjpcXHRcXHRpZiAoIWRhdGEtXFx1MDAzZWxvbmd0ZXJtX3BhZ2VzKVxcbiAzMDM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMwNDpcXHRcXG4gMzA1OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2dXNlcl9hZGRyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZih1c2VyX2FkZHIpKSlcXG4gMzA2OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAzMDc6XFx0XFxuIDMwODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGF0YS1cXHUwMDNlbG9uZ3Rlcm1fbnJfcGFnZXM7IGkrKykge1xcbiAzMDk6XFx0XFx0XFx0dm9pZCAqYWRkciA9IGttYXBfbG9jYWxfcGFnZShkYXRhLVxcdTAwM2Vsb25ndGVybV9wYWdlc1tpXSk7XFxuIDMxMDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHJldDtcXG4gMzExOlxcdFxcbiAzMTI6XFx0XFx0XFx0cmV0ID0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXVzZXJfYWRkciwgYWRkcixcXG4gMzEzOlxcdFxcdFxcdFxcdFxcdCAgIFBBR0VfU0laRSk7XFxuIDMxNDpcXHRcXHRcXHRrdW5tYXBfbG9jYWwoYWRkcik7XFxuIDMxNTpcXHRcXHRcXHRpZiAocmV0KVxcbiAzMTY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDMxNzpcXHRcXHRcXHR1c2VyX2FkZHIgKz0gUEFHRV9TSVpFO1xcbiAzMTg6XFx0XFx0fVxcbiAzMTk6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjIyOjQ5LjI5OTQ5OTE0MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTQ5Mjk2MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIGFsbG9jYXRpb24gb2YgdGhlIGBwYWdlc2AgYXJyYXkgdXNpbmcgYGt2Y2FsbG9jYCBhbmQgdGhlIGBzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YWAgd2l0aCBga3phbGxvY19vYmpgLCB3aXRoIHRoZWlyIHplcm8taW5pdGlhbGl6YXRpb24sIGFyZSBnb29kIHNpZ25zLiBJdCBtZWFucyB3ZSdyZSBzdGFydGluZyBjbGVhbiwgd2hpY2ggaGVscHMgbWl0aWdhdGUgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBJIGNhbiBzZWUgbm8gaW1tZWRpYXRlIHJlZCBmbGFncyBpbiB0aGF0IGFyZWEuXG5cblRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGZvY3VzZWQgb24gc3RydWN0dXJhbCBjaGFuZ2VzIOKAkyBzcGVjaWZpY2FsbHksIG1vdmluZyBnbG9iYWwgc3RhdGUgdG8gYSBwZXItZmlsZSBiYXNpcy4gVGhhdCdzIGEgcmVhc29uYWJsZSByZWZhY3RvcmluZyBhcHByb2FjaCwgYnV0IGl0IGNhbiBzb21ldGltZXMgaW50cm9kdWNlIHN1YnRsZSBidWdzLiBIb3dldmVyLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlLCBhbnkgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlIGNoYW5nZSB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgZWl0aGVyIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgbWVtb3J5IGxlYWtzLlxuXG5HaXZlbiB0aGF0IHRoZXNlIGtpbmRzIG9mIGJ1Z3MgYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgbGVhayBkZXRlY3RvcnMsIEkgZG9uJ3Qgc2VlIGEgc3Ryb25nIGp1c3RpZmljYXRpb24gZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBhdCB0aGlzIHBvaW50LiBJJ20gcmVhc29uYWJseSBjb25maWRlbnQgdGhlIGV4aXN0aW5nIHRvb2xzIHdpbGwgY2F0Y2ggYW55IGlzc3Vlcy5cblxuSSdtIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgZ3VwX3Rlc3Rfb3BlbmAgYW5kIGBndXBfdGVzdF9yZWxlYXNlYCBmdW5jdGlvbnMgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBtaXNzZWQgaW5pdGlhbGl6YXRpb25zIG9yIGltcHJvcGVyIGNsZWFudXAuIEhtbSwgbGV0J3Mgc2VlLi4uXG5cblllcCwgYGd1cF90ZXN0X29wZW5gIGFsbG9jYXRlcyB0aGUgYGRhdGFgIHN0cnVjdCB3aXRoIGBremFsbG9jX29iamAgYW5kIGluaXRpYWxpemVzIHRoZSBtdXRleCwgYXNzaWducyBgZGF0YWAgdG8gdGhlIGZpbGUncyBwcml2YXRlIGRhdGEgZmllbGQuIFRoZSBgZ3VwX3Rlc3RfcmVsZWFzZWAgZnVuY3Rpb24gcHJvcGVybHkgY2FsbHMgdGhlIGBwaW5fbG9uZ3Rlcm1fdGVzdF9zdG9wYCwgZGVzdHJveXMgdGhlIG11dGV4LCBhbmQgZnJlZXMgdGhlIGRhdGEgc3RydWN0dXJlLCBhbmQgbnVsbHMgdGhlIHByaXZhdGUgZGF0YSBmaWVsZC4gRXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkgYW5kIGRlYWxsb2NhdGVkIGFwcHJvcHJpYXRlbHkuXG5cbkFscmlnaHQsIGFmdGVyIHRoaXMgcXVpY2sgc2NhbiwgSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCBubyBLTVNBTiBpcyBuZWVkZWQuIFRoZSBjb2RlIGxvb2tzIHNvdW5kIGFuZCB3ZWxsLW1hbmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTQ5LCJPdXRwdXRUb2tlbnMiOjIxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjIyOjU3Ljg0ODc5ODI0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgcGluX2xvbmd0ZXJtX3Rlc3RgIGluIGBtbS9ndXBfdGVzdC5jYCB0byB1c2UgYSBwZXItZmlsZSBkYXRhIHN0cnVjdHVyZSAoYHN0cnVjdCBndXBfdGVzdF9kYXRhYCkgaW5zdGVhZCBvZiBnbG9iYWwgdmFyaWFibGVzLCBhbGxvd2luZyBjb25jdXJyZW50IHVzZXJzIG9mIHRoZSBndXBfdGVzdCBpb2N0bC4gVGhlIG5ldyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgYWxsIGZpZWxkcy4gVGhlIGFycmF5IG9mIHBhZ2UgcG9pbnRlcnMgaXMgYWxsb2NhdGVkIHVzaW5nIGBrdmNhbGxvY2AsIHdoaWNoIGFsc28gemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5LiBUaGUgb25seSBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIHRoZSBjb250ZW50IG9mIHRoZSBwaW5uZWQgdXNlciBwYWdlcywgd2hpY2ggaXMgaWRlbnRpY2FsIHRvIHRoZSBwcmUtcGF0Y2ggYmVoYXZpb3IgYW5kIGRvZXMgbm90IGxlYWsga2VybmVsIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHBpbl9sb25ndGVybV90ZXN0YCBpbiBgbW0vZ3VwX3Rlc3QuY2AgdG8gdXNlIGEgcGVyLWZpbGUgZGF0YSBzdHJ1Y3R1cmUgKGBzdHJ1Y3QgZ3VwX3Rlc3RfZGF0YWApIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcywgYWxsb3dpbmcgY29uY3VycmVudCB1c2VycyBvZiB0aGUgZ3VwX3Rlc3QgaW9jdGwuIFRoZSBuZXcgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIGFsbCBmaWVsZHMuIFRoZSBhcnJheSBvZiBwYWdlIHBvaW50ZXJzIGlzIGFsbG9jYXRlZCB1c2luZyBga3ZjYWxsb2NgLCB3aGljaCBhbHNvIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeS4gVGhlIG9ubHkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSBpcyB0aGUgY29udGVudCBvZiB0aGUgcGlubmVkIHVzZXIgcGFnZXMsIHdoaWNoIGlzIGlkZW50aWNhbCB0byB0aGUgcHJlLXBhdGNoIGJlaGF2aW9yIGFuZCBkb2VzIG5vdCBsZWFrIGtlcm5lbCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbWVtb3J5IGxlYWtzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd48gz[1] Phase: Succeeded StartedAt: 2026-08-10 12:23:09 +0000 UTC FinishedAt: 2026-08-10 12:23:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 12:23:09 +0000 UTC FinishedAt: 2026-08-10 12:23:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2] Phase: Succeeded StartedAt: 2026-08-10 12:23:09 +0000 UTC FinishedAt: 2026-08-10 16:02:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:23:09 +0000 UTC FinishedAt: 2026-08-10 16:02:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:23:09 +0000 UTC FinishedAt: 2026-08-10 12:23:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:23:09 +0000 UTC FinishedAt: 2026-08-10 12:23:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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-workflowd48gz/series-workflowd48gz-convert-artifact-2965434093/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:23:20 +0000 UTC FinishedAt: 2026-08-10 12:39:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:23:20 +0000 UTC FinishedAt: 2026-08-10 12:39:30 +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:*f67da0da-7aaf-4a7e-b212-d8c9b7d20362,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-workflowd48gz/series-workflowd48gz-convert-artifact-2965434093/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": "c8c5d30e-4472-4d59-8533-e97dcbf2b3b3", "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-workflowd48gz/series-workflowd48gz-build-action-658856163/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:23:20 +0000 UTC FinishedAt: 2026-08-10 12:39:20 +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:*f67da0da-7aaf-4a7e-b212-d8c9b7d20362,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-workflowd48gz/series-workflowd48gz-convert-artifact-2965434093/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": "c8c5d30e-4472-4d59-8533-e97dcbf2b3b3", "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-workflowd48gz/series-workflowd48gz-build-action-658856163/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:39:30 +0000 UTC FinishedAt: 2026-08-10 12:39:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:39:30 +0000 UTC FinishedAt: 2026-08-10 12:39:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:39:30 +0000 UTC FinishedAt: 2026-08-10 12:39:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:39:30 +0000 UTC FinishedAt: 2026-08-10 12:39:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-workflowd48gz/series-workflowd48gz-convert-artifact-2615908936/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:39:40 +0000 UTC FinishedAt: 2026-08-10 12:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:39:40 +0000 UTC FinishedAt: 2026-08-10 12:41:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c8c5d30e-4472-4d59-8533-e97dcbf2b3b3,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-workflowd48gz/series-workflowd48gz-build-action-658856163/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-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:41:36 +0000 UTC FinishedAt: 2026-08-10 12:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:41:36 +0000 UTC FinishedAt: 2026-08-10 12:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:41:36 +0000 UTC FinishedAt: 2026-08-10 12:58:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:41:36 +0000 UTC FinishedAt: 2026-08-10 12:58:09 +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:*f67da0da-7aaf-4a7e-b212-d8c9b7d20362,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-workflowd48gz/series-workflowd48gz-convert-artifact-2615908936/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": "ec1368e7-1094-474c-9800-853edcecc028", "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-workflowd48gz/series-workflowd48gz-build-action-534040308/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:41:36 +0000 UTC FinishedAt: 2026-08-10 12:57:59 +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:*f67da0da-7aaf-4a7e-b212-d8c9b7d20362,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-workflowd48gz/series-workflowd48gz-convert-artifact-2615908936/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": "ec1368e7-1094-474c-9800-853edcecc028", "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-workflowd48gz/series-workflowd48gz-build-action-534040308/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:58:09 +0000 UTC FinishedAt: 2026-08-10 12:58:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:58:09 +0000 UTC FinishedAt: 2026-08-10 12:58:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:58:09 +0000 UTC FinishedAt: 2026-08-10 13:00:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 12:58:09 +0000 UTC FinishedAt: 2026-08-10 13:00:09 +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:*ec1368e7-1094-474c-9800-853edcecc028,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-workflowd48gz/series-workflowd48gz-build-action-534040308/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-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 13:00:16 +0000 UTC FinishedAt: 2026-08-10 16:02:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 13:00:16 +0000 UTC FinishedAt: 2026-08-10 16:02:57 +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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"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:*c8c5d30e-4472-4d59-8533-e97dcbf2b3b3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ec1368e7-1094-474c-9800-853edcecc028,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-workflowd48gz/series-workflowd48gz-build-action-658856163/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-workflowd48gz/series-workflowd48gz-build-action-534040308/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 13:00:16 +0000 UTC FinishedAt: 2026-08-10 13:00:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 13:00:16 +0000 UTC FinishedAt: 2026-08-10 13:00:21 +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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"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-workflowd48gz/series-workflowd48gz-convert-artifact-2271538945/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 13:00:16 +0000 UTC FinishedAt: 2026-08-10 13:00:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 13:00:16 +0000 UTC FinishedAt: 2026-08-10 13:00:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 13:00:16 +0000 UTC FinishedAt: 2026-08-10 13:00:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 13:00:26 +0000 UTC FinishedAt: 2026-08-10 16:02:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd48gz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"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":["gup_test_open","gup_test_release","gup_test_ioctl","pin_longterm_test_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"17e5919bdca144d4e67337f53bf57d7811f62192","config_name":"upstream-apparmor-kasan.config","enable_configs":["GUP_TEST"],"series_id":"c5ce1eb9-431a-4444-bf22-c09a9500ea50","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-08-10 13:00:26 +0000 UTC FinishedAt: 2026-08-10 16:02:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c8c5d30e-4472-4d59-8533-e97dcbf2b3b3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ec1368e7-1094-474c-9800-853edcecc028,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-workflowd48gz/series-workflowd48gz-build-action-658856163/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-workflowd48gz/series-workflowd48gz-build-action-534040308/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-workflowd48gz/series-workflowd48gz-convert-artifact-2271538945/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,}