Name: series-workflowzslzq Phase: Succeeded StartedAt: 2026-08-22 20:20:13 +0000 UTC FinishedAt: 2026-08-23 00:14:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[0] Phase: Succeeded StartedAt: 2026-08-22 20:20:13 +0000 UTC FinishedAt: 2026-08-22 20:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[0].run-triage Phase: Succeeded StartedAt: 2026-08-22 20:20:13 +0000 UTC FinishedAt: 2026-08-22 20:33:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_AO", "NET_VRF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_AO", "NET_VRF" ], "series_id": "d0b79e97-cc8d-4a66-8cf3-ad737baf3a92" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_parse_ao", "tcp_v4_parse_ao", "tcp_v6_parse_ao" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9BTyYjMzQ7LAogICAgJiMzNDtORVRfVlJGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3BhcnNlX2FvJiMzNDssCiAgICAmIzM0O3RjcF92NF9wYXJzZV9hbyYjMzQ7LAogICAgJiMzNDt0Y3BfdjZfcGFyc2VfYW8mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGZ1bmN0aW9uYWwgYnVnIGluIGB0Y3BfYW9fZGVsX2NtZGAgd2hlcmUgdGhlIGBpZmluZGV4YCBmaWVsZCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIGB0Y3BfYW9fZGVsYCBzdHJ1Y3R1cmUgd2FzIGlnbm9yZWQgd2hlbiBkZWxldGluZyBhIFRDUC1BTyBrZXkuIFRoZSBgY21kYCBzdHJ1Y3R1cmUgaXMgc2FmZWx5IHBvcHVsYXRlZCBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cigpYCwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKGVpdGhlciBieSBjb3B5aW5nIGZyb20gdXNlciBzcGFjZSBvciB6ZXJvLXBhZGRpbmcpLiBUaGUgcGF0Y2ggc2ltcGx5IHJlYWRzIHRoZSBpbml0aWFsaXplZCBgY21kLmlmaW5kZXhgIGZpZWxkIGFuZCBhc3NpZ25zIGl0IHRvIGBsM2luZGV4YCBpZiB0aGUgYFRDUF9BT19LRVlGX0lGSU5ERVhgIGZsYWcgaXMgc2V0LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIFRDUC1BTyBrZXkgZGVsZXRpb24gd2hlcmUgdGhlIGludGVyZmFjZSBpbmRleCAoVlJGKSB3YXMgbm90IHByb3Blcmx5IGV4dHJhY3RlZCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIGNvbW1hbmQgd2hlbiB0aGUgVENQX0FPX0tFWUZfSUZJTkRFWCBmbGFnIHdhcyBzZXQuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgVENQIHNldHNvY2tvcHQgbG9naWMgZm9yIFRDUF9BT19ERUxfS0VZLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGMwMmNiYWY5NWIxNjRiNmM5ZWEyYWI4MTA1MzA3ZTI5ODVhY2QxOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDIyIDIwOjIzOjM2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9hby5jIGIvbmV0L2lwdjQvdGNwX2FvLmNcbmluZGV4IDUwOTQyNjc0NDdhZWUuLjI2ODY0NjIxZTZkZWYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2FvLmNcbkBAIC0xODM0LDYgJiM0MzsxODM0LDkgQEAgc3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4gXHRpZiAoY21kLmlmaW5kZXggXHUwMDI2XHUwMDI2ICEoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0aWYgKGNtZC5rZXlmbGFncyBcdTAwMjYgVENQX0FPX0tFWUZfSUZJTkRFWClcbiYjNDM7XHRcdGwzaW5kZXggPSBjbWQuaWZpbmRleDtcbiYjNDM7XG4gXHRhb19pbmZvID0gc2V0c29ja29wdF9hb19pbmZvKHNrKTtcbiBcdGlmIChJU19FUlIoYW9faW5mbykpXG4gXHRcdHJldHVybiBQVFJfRVJSKGFvX2luZm8pO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xuaW5kZXggZDg2YmIzODBiNzlmNy4uMDQ1MWY5MmY0NjQ1ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jXG5AQCAtNjMsOCAmIzQzOzYzLDggQEAgc3RhdGljIGludCBwcmVwYXJlX2xzayh1bmlvbiB0Y3BfYWRkciAqYWRkciwgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZClcbiBcdHJldHVybiBzaztcbiB9XG4gXG4tc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxuLVx0XHRcdGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSlcbiYjNDM7c3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBpbnQgaWZpbmRleCxcbiYjNDM7XHRcdFx0Ym9vbCBhc3luYywgaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5KVxuIHtcbiBcdHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgYW9faW5mbyA9IHt9O1xuIFx0c3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0IGtleSA9IHt9O1xuQEAgLTc2LDYgJiM0Mzs3NiwxMCBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXG4gXHRkZWwucHJlZml4ID0gREVGQVVMVF9URVNUX1BSRUZJWDtcbiBcdGRlbC5zbmRpZCA9IHNuZGlkO1xuIFx0ZGVsLnJjdmlkID0gcmN2aWQ7XG4mIzQzO1x0aWYgKGlmaW5kZXgpIHtcbiYjNDM7XHRcdGRlbC5rZXlmbGFncyA9IFRDUF9BT19LRVlGX0lGSU5ERVg7XG4mIzQzO1x0XHRkZWwuaWZpbmRleCA9IGlmaW5kZXg7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKGN1cnJlbnRfa2V5IFx1MDAzZT0gMCkge1xuIFx0XHRkZWwuc2V0X2N1cnJlbnQgPSAxO1xuQEAgLTk1LDcgJiM0Mzs5OSw4IEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbiBcbiBcdHRjcF9hZGRyX3RvX3NvY2thZGRyX2luKFx1MDAyNnNvY2thZGRyLCBcdTAwMjZ0aGlzX2lwX2Rlc3QsIDApO1xuIFx0ZXJyID0gdGVzdF9nZXRfb25lX2FvKHNrLCBcdTAwMjZrZXksIFx1MDAyNnNvY2thZGRyLCBzaXplb2Yoc29ja2FkZHIpLFxuLVx0XHRcdCAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCk7XG4mIzQzO1x0XHRcdCAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCxcbiYjNDM7XHRcdFx0ICAgICAgZGVsLmtleWZsYWdzLCBkZWwuaWZpbmRleCk7XG4gXHRpZiAoIWVycilcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRpZiAoZXJyICE9IC1FMkJJRylcbkBAIC0xMTIsMTIgJiM0MzsxMTcsMTIgQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxuIH1cbiBcbiBzdGF0aWMgdm9pZCB0cnlfZGVsZXRlX2tleShjaGFyICp0c3RfbmFtZSwgaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLFxuLVx0XHRcdCAgIGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSxcbiYjNDM7XHRcdFx0ICAgaW50IGlmaW5kZXgsIGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSxcbiBcdFx0XHQgICBmYXVsdF90IGluailcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTtcbiYjNDM7XHRlcnIgPSB0ZXN0X2RlbF9rZXkoc2ssIHNuZGlkLCByY3ZpZCwgaWZpbmRleCwgYXN5bmMsIGN1cnJlbnRfa2V5LCBybmV4dF9rZXkpO1xuIFx0aWYgKChlcnIgPT0gLUVCVVNZIFx1MDAyNlx1MDAyNiBmYXVsdChCVVNZKSkgfHwgKGVyciA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBmYXVsdChDVVJSTkVYVCkpKSB7XG4gXHRcdHRlc3Rfb2soXCYjMzQ7JXM6IGtleSBkZWxldGlvbiB3YXMgcHJldmVudGVkXCYjMzQ7LCB0c3RfbmFtZSk7XG4gXHRcdHJldHVybjtcbkBAIC0yMzYsMTUgJiM0MzsyNDEsMTUgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKVxuIFx0aW50IHNrO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5XCYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCAwKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXlcJiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCAwKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbiBcdGlmICh0ZXN0X3NldF9rZXkoc2ssIDEwMCwgMjAwKSlcbiBcdFx0dGVzdF9lcnJvcihcJiMzNDtmYWlsZWQgdG8gc2V0IGN1cnJlbnQvcm5leHQga2V5c1wmIzM0Oyk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXlcJiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgcm5leHQga2V5XCYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRzayA9IHByZXBhcmVfc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG5AQCAtMjU0LDEwICYjNDM7MjU5LDEyIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcbiBcdGlmICh0ZXN0X2FkZF9rZXkoc2ssIFwmIzM0O0dsb3J5IHRvIFVrcmFpbmUhXCYjMzQ7LCB0aGlzX2lwX2Rlc3QsXG4gXHRcdFx0IERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpXG4gXHRcdHRlc3RfZXJyb3IoXCYjMzQ7dGVzdF9hZGRfa2V5KClcJiMzNDspO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5ICYjNDM7IHNldCBjdXJyZW50L3JuZXh0XCYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIDEwLCAxMywgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLCAxMCwgMTEsIDAsIDIwMCwgLTEsIDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleVwmIzM0Oywgc2ssIDEyLCAxMywgMCwgLTEsIDIwMCwgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCYjNDM7cm5leHQga2V5XCYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4mIzQzO1x0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5ICYjNDM7IHNldCBjdXJyZW50L3JuZXh0XCYjMzQ7LCBzayxcbiYjNDM7XHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCAwKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLCAxMCwgMTEsIDAsIDAsIDIwMCwgLTEsIDApO1xuJiM0MztcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBybmV4dCBrZXlcJiMzNDssIHNrLCAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIDApO1xuJiM0MztcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50JiM0MztybmV4dCBrZXlcJiMzNDssIHNrLFxuJiM0MztcdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuQEAgLTI3Miw2ICYjNDM7Mjc5LDE4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcbiBcdFx0XHRcdCAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLFxuIFx0XHRcdFx0ICBmYWxzZSwgdHJ1ZSwgMjAsIDEwLCAwKTtcbiBcdGNsb3NlKHNrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzaG91bGRfc2tpcF90ZXN0KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGFkZCAmIzQzOyBkZWxldGUgVlJGLXNjb3BlZCBrZXlcJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIEtDT05GSUdfTkVUX1ZSRikpIHtcbiYjNDM7XHRcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbiYjNDM7XHRcdGlmICh0ZXN0X2FkZF9rZXlfdnJmKHNrLCBTRUNPTkRfUEFTU1dPUkQsIFRDUF9BT19LRVlGX0lGSU5ERVgsXG4mIzQzO1x0XHRcdFx0ICAgICB0aGlzX2lwX2Rlc3QsIERFRkFVTFRfVEVTVF9QUkVGSVgsXG4mIzQzO1x0XHRcdFx0ICAgICB0ZXN0X3ZyZl9pZmluZGV4LCAyMDEsIDIwMSkpXG4mIzQzO1x0XHRcdHRlc3RfZXJyb3IoXCYjMzQ7dGVzdF9hZGRfa2V5X3ZyZigpXCYjMzQ7KTtcbiYjNDM7XHRcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGFkZCAmIzQzOyBkZWxldGUgVlJGLXNjb3BlZCBrZXlcJiMzNDssIHNrLCAyMDEsIDIwMSxcbiYjNDM7XHRcdFx0ICAgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDAsIC0xLCAtMSwgMCk7XG4mIzQzO1x0XHRjbG9zZShzayk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBhc3NlcnRfbm9fY3VycmVudF9ybmV4dChjb25zdCBjaGFyICp0c3RfbXNnLCBpbnQgc2spXG5AQCAtMzIyLDggJiM0MzszNDEsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRpbnQgc2ssIGVycjtcbiBcbiBcdHNrID0gcHJlcGFyZV9sc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXlcJiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApO1xuJiM0MztcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVwmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xuJiM0MztcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIDApO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX2xzayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0zNDUsOCAmIzQzOzM2NCwxMCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRpZiAobGlzdGVuKHNrLCAxMCkpXG4gXHRcdHRlc3RfZXJyb3IoXCYjMzQ7bGlzdGVuKClcJiMzNDspO1xuIFx0YXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoXCYjMzQ7bGlzdGVuKCkgYWZ0ZXIgY3VycmVudC9ybmV4dCBrZXlzIHNldFwmIzM0Oywgc2spO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXCYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKVwmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcJiMzNDssIHNrLFxuJiM0MztcdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgcm5leHQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXCYjMzQ7LCBzayxcbiYjNDM7XHRcdCAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRhc3NlcnRfbm9fdGNwX3JlcGFpcigpO1xuQEAgLTM1OSwxMyAmIzQzOzM4MCwxMyBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRcdFx0IERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpXG4gXHRcdHRlc3RfZXJyb3IoXCYjMzQ7dGVzdF9hZGRfa2V5KClcJiMzNDspO1xuIFx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5ICYjNDM7IHNldCBjdXJyZW50L3JuZXh0XCYjMzQ7LCBzayxcbi1cdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTtcbiYjNDM7XHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCBGQVVMVF9DVVJSTkVYVCk7XG4gXHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLFxuLVx0XHQgICAgICAgMTAsIDExLCAwLCAyMDAsIC0xLCBGQVVMVF9DVVJSTkVYVCk7XG4mIzQzO1x0XHQgICAgICAgMTAsIDExLCAwLCAwLCAyMDAsIC0xLCBGQVVMVF9DVVJSTkVYVCk7XG4gXHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5XCYjMzQ7LCBzayxcbi1cdFx0ICAgICAgIDEyLCAxMywgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpO1xuJiM0MztcdFx0ICAgICAgIDEyLCAxMywgMCwgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpO1xuIFx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5XCYjMzQ7LCBzayxcbi1cdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApO1xuJiM0MztcdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX2xzayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0xMTMxLDcgJiM0MzsxMTUyLDYgQEAgc3RhdGljIHZvaWQgY2hlY2tfZXN0YWJsaXNoZWRfc29ja2V0KHZvaWQpXG4ge1xuIFx0dW5zaWduZWQgaW50IHBvcnQgPSB0ZXN0X3NlcnZlcl9wb3J0O1xuIFxuLVx0c2V0dXBfdnJmcygpO1xuIFx0dHJ5X2NsaWVudF9ydW4oXCYjMzQ7Y2xpZW50OiBDaGVjayBjdXJyZW50L3JuZXh0IGtleXMgdW5zZXQgYmVmb3JlIGNvbm5lY3QoKVwmIzM0OyxcbiBcdFx0ICAgICAgIHBvcnQmIzQzOyYjNDM7LCAyMCwgLTEsIC0xKTtcbiBcdHRyeV9jbGllbnRfcnVuKFwmIzM0O2NsaWVudDogQ2hlY2sgY3VycmVudC9ybmV4dCBrZXlzIHNldCBiZWZvcmUgY29ubmVjdCgpXCYjMzQ7LFxuQEAgLTExNTAsNiAmIzQzOzExNzAsNyBAQCBzdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcbiB7XG4gXHRpZiAoaW5ldF9wdG9uKFRFU1RfRkFNSUxZLCBURVNUX1dST05HX0lQLCBcdTAwMjZ3cm9uZ19hZGRyKSAhPSAxKVxuIFx0XHR0ZXN0X2Vycm9yKFwmIzM0O0NhbiYjMzk7dCBjb252ZXJ0IGlwIGFkZHJlc3MgJXNcJiMzNDssIFRFU1RfV1JPTkdfSVApO1xuJiM0MztcdHNldHVwX3ZyZnMoKTtcbiBcdGNoZWNrX2Nsb3NlZF9zb2NrZXQoKTtcbiBcdGNoZWNrX2xpc3Rlbl9zb2NrZXQoKTtcbiBcdGNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCgpO1xuQEAgLTExNTgsNiAmIzQzOzExNzksNiBAQCBzdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcbiBcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIHtcbi1cdHRlc3RfaW5pdCgxMjEsIHNlcnZlcl9mbiwgY2xpZW50X2ZuKTtcbiYjNDM7XHR0ZXN0X2luaXQoMTIyLCBzZXJ2ZXJfZm4sIGNsaWVudF9mbik7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmhcbmluZGV4IGViYjI4OTljMTJmZTAuLjUzYmUxNzQ0MjM3ZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXG5AQCAtNDA0LDcgJiM0Mzs0MDQsOCBAQCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3ByZXBhcmVfZGVmX2tleShzdHJ1Y3QgdGNwX2FvX2FkZCAqYW8sXG4gXG4gZXh0ZXJuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcbiBcdFx0XHQgICB2b2lkICphZGRyLCBzaXplX3QgYWRkcl9zeixcbi1cdFx0XHQgICB1aW50OF90IHByZWZpeCwgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCk7XG4mIzQzO1x0XHRcdCAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLFxuJiM0MztcdFx0XHQgICB1aW50OF90IGtleWZsYWdzLCBpbnQgaWZpbmRleCk7XG4gZXh0ZXJuIGludCB0ZXN0X2dldF9hb19pbmZvKGludCBzaywgc3RydWN0IHRjcF9hb19pbmZvX29wdCAqb3V0KTtcbiBleHRlcm4gaW50IHRlc3Rfc2V0X2FvX2luZm8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0ICppbik7XG4gZXh0ZXJuIGludCB0ZXN0X2NtcF9nZXRzb2Nrb3B0X3NldHNvY2tvcHQoY29uc3Qgc3RydWN0IHRjcF9hb19hZGQgKmEsXG5AQCAtNDE4LDcgJiM0Mzs0MTksOCBAQCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3ZlcmlmeV9zb2NrZXRfa2V5KGludCBzaywgc3RydWN0IHRjcF9hb19hZGQgKmtleSlcbiBcdGludCBlcnI7XG4gXG4gXHRlcnIgPSB0ZXN0X2dldF9vbmVfYW8oc2ssIFx1MDAyNmtleTIsIFx1MDAyNmtleS1cdTAwM2VhZGRyLCBzaXplb2Yoa2V5LVx1MDAzZWFkZHIpLFxuLVx0XHRcdCAgICAgIGtleS1cdTAwM2VwcmVmaXgsIGtleS1cdTAwM2VzbmRpZCwga2V5LVx1MDAzZXJjdmlkKTtcbiYjNDM7XHRcdFx0ICAgICAga2V5LVx1MDAzZXByZWZpeCwga2V5LVx1MDAzZXNuZGlkLCBrZXktXHUwMDNlcmN2aWQsXG4mIzQzO1x0XHRcdCAgICAgIGtleS1cdTAwM2VrZXlmbGFncywga2V5LVx1MDAzZWlmaW5kZXgpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcbmluZGV4IGVmOGU5MDMxZDQ3YTMuLjJlN2IwNmExYTE1NjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suY1xuQEAgLTI1Miw3ICYjNDM7MjUyLDcgQEAgc3RhdGljIGludCB0ZXN0X2dldF9hb19rZXlzX25yKGludCBzaylcbiBcbiBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsXG4gXHRcdHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LCB1aW50OF90IHByZWZpeCxcbi1cdFx0dWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZClcbiYjNDM7XHRcdHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KVxuIHtcbiBcdHN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCB0bXAgPSB7fTtcbiBcdHNvY2tsZW5fdCB0bXBfc3ogPSBzaXplb2YodG1wKTtcbkBAIC0yNjIsNiAmIzQzOzI2Miw4IEBAIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcbiBcdHRtcC5wcmVmaXggPSBwcmVmaXg7XG4gXHR0bXAuc25kaWQgID0gc25kaWQ7XG4gXHR0bXAucmN2aWQgID0gcmN2aWQ7XG4mIzQzO1x0dG1wLmtleWZsYWdzID0ga2V5ZmxhZ3M7XG4mIzQzO1x0dG1wLmlmaW5kZXggPSBpZmluZGV4O1xuIFx0dG1wLm5rZXlzICA9IDE7XG4gXG4gXHRyZXQgPSBnZXRzb2Nrb3B0KHNrLCBJUFBST1RPX1RDUCwgVENQX0FPX0dFVF9LRVlTLCBcdTAwMjZ0bXAsIFx1MDAyNnRtcF9zeik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9BTyYjMzQ7LAogICAgJiMzNDtORVRfVlJGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3BhcnNlX2FvJiMzNDssCiAgICAmIzM0O3RjcF92NF9wYXJzZV9hbyYjMzQ7LAogICAgJiMzNDt0Y3BfdjZfcGFyc2VfYW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gVENQLUFPIGtleSBkZWxldGlvbiB3aGVyZSB0aGUgaW50ZXJmYWNlIGluZGV4IChWUkYpIHdhcyBub3QgcHJvcGVybHkgZXh0cmFjdGVkIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgY29tbWFuZCB3aGVuIHRoZSBUQ1BfQU9fS0VZRl9JRklOREVYIGZsYWcgd2FzIHNldC4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBUQ1Agc2V0c29ja29wdCBsb2dpYyBmb3IgVENQX0FPX0RFTF9LRVkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YzAyY2JhZjk1YjE2NGI2YzllYTJhYjgxMDUzMDdlMjk4NWFjZDE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjIgMjA6MjM6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYW8uYyBiL25ldC9pcHY0L3RjcF9hby5jCmluZGV4IDUwOTQyNjc0NDdhZWUuLjI2ODY0NjIxZTZkZWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9hby5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9hby5jCkBAIC0xODM0LDYgJiM0MzsxODM0LDkgQEAgc3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksCiAJaWYgKGNtZC5pZmluZGV4ICZhbXA7JmFtcDsgIShjbWQua2V5ZmxhZ3MgJmFtcDsgVENQX0FPX0tFWUZfSUZJTkRFWCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CWlmIChjbWQua2V5ZmxhZ3MgJmFtcDsgVENQX0FPX0tFWUZfSUZJTkRFWCkKJiM0MzsJCWwzaW5kZXggPSBjbWQuaWZpbmRleDsKJiM0MzsKIAlhb19pbmZvID0gc2V0c29ja29wdF9hb19pbmZvKHNrKTsKIAlpZiAoSVNfRVJSKGFvX2luZm8pKQogCQlyZXR1cm4gUFRSX0VSUihhb19pbmZvKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYwppbmRleCBkODZiYjM4MGI3OWY3Li4wNDUxZjkyZjQ2NDVkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jCkBAIC02Myw4ICYjNDM7NjMsOCBAQCBzdGF0aWMgaW50IHByZXBhcmVfbHNrKHVuaW9uIHRjcF9hZGRyICphZGRyLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKQogCXJldHVybiBzazsKIH0KIAotc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLAotCQkJaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5KQomIzQzO3N0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgaW50IGlmaW5kZXgsCiYjNDM7CQkJYm9vbCBhc3luYywgaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5KQogewogCXN0cnVjdCB0Y3BfYW9faW5mb19vcHQgYW9faW5mbyA9IHt9OwogCXN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCBrZXkgPSB7fTsKQEAgLTc2LDYgJiM0Mzs3NiwxMCBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsCiAJZGVsLnByZWZpeCA9IERFRkFVTFRfVEVTVF9QUkVGSVg7CiAJZGVsLnNuZGlkID0gc25kaWQ7CiAJZGVsLnJjdmlkID0gcmN2aWQ7CiYjNDM7CWlmIChpZmluZGV4KSB7CiYjNDM7CQlkZWwua2V5ZmxhZ3MgPSBUQ1BfQU9fS0VZRl9JRklOREVYOwomIzQzOwkJZGVsLmlmaW5kZXggPSBpZmluZGV4OwomIzQzOwl9CiAKIAlpZiAoY3VycmVudF9rZXkgJmd0Oz0gMCkgewogCQlkZWwuc2V0X2N1cnJlbnQgPSAxOwpAQCAtOTUsNyAmIzQzOzk5LDggQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLAogCiAJdGNwX2FkZHJfdG9fc29ja2FkZHJfaW4oJmFtcDtzb2NrYWRkciwgJmFtcDt0aGlzX2lwX2Rlc3QsIDApOwogCWVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgJmFtcDtrZXksICZhbXA7c29ja2FkZHIsIHNpemVvZihzb2NrYWRkciksCi0JCQkgICAgICBERUZBVUxUX1RFU1RfUFJFRklYLCBzbmRpZCwgcmN2aWQpOwomIzQzOwkJCSAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCwKJiM0MzsJCQkgICAgICBkZWwua2V5ZmxhZ3MsIGRlbC5pZmluZGV4KTsKIAlpZiAoIWVycikKIAkJcmV0dXJuIC1FRVhJU1Q7CiAJaWYgKGVyciAhPSAtRTJCSUcpCkBAIC0xMTIsMTIgJiM0MzsxMTcsMTIgQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLAogfQogCiBzdGF0aWMgdm9pZCB0cnlfZGVsZXRlX2tleShjaGFyICp0c3RfbmFtZSwgaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLAotCQkJICAgYm9vbCBhc3luYywgaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5LAomIzQzOwkJCSAgIGludCBpZmluZGV4LCBib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXksCiAJCQkgICBmYXVsdF90IGluaikKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTsKJiM0MzsJZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGlmaW5kZXgsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTsKIAlpZiAoKGVyciA9PSAtRUJVU1kgJmFtcDsmYW1wOyBmYXVsdChCVVNZKSkgfHwgKGVyciA9PSAtRUlOVkFMICZhbXA7JmFtcDsgZmF1bHQoQ1VSUk5FWFQpKSkgewogCQl0ZXN0X29rKCYjMzQ7JXM6IGtleSBkZWxldGlvbiB3YXMgcHJldmVudGVkJiMzNDssIHRzdF9uYW1lKTsKIAkJcmV0dXJuOwpAQCAtMjM2LDE1ICYjNDM7MjQxLDE1IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZCkKIAlpbnQgc2s7CiAKIAlzayA9IHByZXBhcmVfc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXMmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTsKIAljbG9zZShzayk7CiAKIAlzayA9IHByZXBhcmVfc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKIAlpZiAodGVzdF9zZXRfa2V5KHNrLCAxMDAsIDIwMCkpCiAJCXRlc3RfZXJyb3IoJiMzNDtmYWlsZWQgdG8gc2V0IGN1cnJlbnQvcm5leHQga2V5cyYjMzQ7KTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleSYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgcm5leHQga2V5JiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9zaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMjU0LDEwICYjNDM7MjU5LDEyIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZCkKIAlpZiAodGVzdF9hZGRfa2V5KHNrLCAmIzM0O0dsb3J5IHRvIFVrcmFpbmUhJiMzNDssIHRoaXNfaXBfZGVzdCwKIAkJCSBERUZBVUxUX1RFU1RfUFJFRklYLCAxMiwgMTMpKQogCQl0ZXN0X2Vycm9yKCYjMzQ7dGVzdF9hZGRfa2V5KCkmIzM0Oyk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXkgJiM0Mzsgc2V0IGN1cnJlbnQvcm5leHQmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAxMCwgMTMsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5JiMzNDssIHNrLCAxMCwgMTEsIDAsIDIwMCwgLTEsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleSYjMzQ7LCBzaywgMTIsIDEzLCAwLCAtMSwgMjAwLCAwKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50JiM0MztybmV4dCBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSAmIzQzOyBzZXQgY3VycmVudC9ybmV4dCYjMzQ7LCBzaywKJiM0MzsJCSAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssIDEwLCAxMSwgMCwgMCwgMjAwLCAtMSwgMCk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleSYjMzQ7LCBzaywgMTIsIDEzLCAwLCAwLCAtMSwgMjAwLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCYjNDM7cm5leHQga2V5JiMzNDssIHNrLAomIzQzOwkJICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9zaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMjcyLDYgJiM0MzsyNzksMTggQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKQogCQkJCSAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLAogCQkJCSAgZmFsc2UsIHRydWUsIDIwLCAxMCwgMCk7CiAJY2xvc2Uoc2spOwomIzQzOwomIzQzOwlpZiAoIXNob3VsZF9za2lwX3Rlc3QoJiMzNDtjbG9zZWQgc29ja2V0LCBhZGQgJiM0MzsgZGVsZXRlIFZSRi1zY29wZWQga2V5JiMzNDssCiYjNDM7CQkJICAgICAgS0NPTkZJR19ORVRfVlJGKSkgewomIzQzOwkJc2sgPSBwcmVwYXJlX3NrKCZhbXA7dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7CiYjNDM7CQlpZiAodGVzdF9hZGRfa2V5X3ZyZihzaywgU0VDT05EX1BBU1NXT1JELCBUQ1BfQU9fS0VZRl9JRklOREVYLAomIzQzOwkJCQkgICAgIHRoaXNfaXBfZGVzdCwgREVGQVVMVF9URVNUX1BSRUZJWCwKJiM0MzsJCQkJICAgICB0ZXN0X3ZyZl9pZmluZGV4LCAyMDEsIDIwMSkpCiYjNDM7CQkJdGVzdF9lcnJvcigmIzM0O3Rlc3RfYWRkX2tleV92cmYoKSYjMzQ7KTsKJiM0MzsJCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgYWRkICYjNDM7IGRlbGV0ZSBWUkYtc2NvcGVkIGtleSYjMzQ7LCBzaywgMjAxLCAyMDEsCiYjNDM7CQkJICAgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDAsIC0xLCAtMSwgMCk7CiYjNDM7CQljbG9zZShzayk7CiYjNDM7CX0KIH0KIAogc3RhdGljIHZvaWQgYXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoY29uc3QgY2hhciAqdHN0X21zZywgaW50IHNrKQpAQCAtMzIyLDggJiM0MzszNDEsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpCiAJaW50IHNrLCBlcnI7CiAKIAlzayA9IHByZXBhcmVfbHNrKCZhbXA7dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5cyYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgMCk7CiAJY2xvc2Uoc2spOwogCiAJc2sgPSBwcmVwYXJlX2xzaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMzQ1LDggJiM0MzszNjQsMTAgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKQogCWlmIChsaXN0ZW4oc2ssIDEwKSkKIAkJdGVzdF9lcnJvcigmIzM0O2xpc3RlbigpJiMzNDspOwogCWFzc2VydF9ub19jdXJyZW50X3JuZXh0KCYjMzQ7bGlzdGVuKCkgYWZ0ZXIgY3VycmVudC9ybmV4dCBrZXlzIHNldCYjMzQ7LCBzayk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssCiYjNDM7CQkgICAgICAgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssCiYjNDM7CQkgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpOwogCWNsb3NlKHNrKTsKIAogCWFzc2VydF9ub190Y3BfcmVwYWlyKCk7CkBAIC0zNTksMTMgJiM0MzszODAsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKQogCQkJIERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpCiAJCXRlc3RfZXJyb3IoJiMzNDt0ZXN0X2FkZF9rZXkoKSYjMzQ7KTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSAmIzQzOyBzZXQgY3VycmVudC9ybmV4dCYjMzQ7LCBzaywKLQkJICAgICAgIDEwMCwgMTAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTsKJiM0MzsJCSAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCBGQVVMVF9DVVJSTkVYVCk7CiAJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssCi0JCSAgICAgICAxMCwgMTEsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTsKJiM0MzsJCSAgICAgICAxMCwgMTEsIDAsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBybmV4dCBrZXkmIzM0Oywgc2ssCi0JCSAgICAgICAxMiwgMTMsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTsKJiM0MzsJCSAgICAgICAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywKLQkJICAgICAgIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwkJICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9sc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKQEAgLTExMzEsNyAmIzQzOzExNTIsNiBAQCBzdGF0aWMgdm9pZCBjaGVja19lc3RhYmxpc2hlZF9zb2NrZXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgcG9ydCA9IHRlc3Rfc2VydmVyX3BvcnQ7CiAKLQlzZXR1cF92cmZzKCk7CiAJdHJ5X2NsaWVudF9ydW4oJiMzNDtjbGllbnQ6IENoZWNrIGN1cnJlbnQvcm5leHQga2V5cyB1bnNldCBiZWZvcmUgY29ubmVjdCgpJiMzNDssCiAJCSAgICAgICBwb3J0JiM0MzsmIzQzOywgMjAsIC0xLCAtMSk7CiAJdHJ5X2NsaWVudF9ydW4oJiMzNDtjbGllbnQ6IENoZWNrIGN1cnJlbnQvcm5leHQga2V5cyBzZXQgYmVmb3JlIGNvbm5lY3QoKSYjMzQ7LApAQCAtMTE1MCw2ICYjNDM7MTE3MCw3IEBAIHN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKQogewogCWlmIChpbmV0X3B0b24oVEVTVF9GQU1JTFksIFRFU1RfV1JPTkdfSVAsICZhbXA7d3JvbmdfYWRkcikgIT0gMSkKIAkJdGVzdF9lcnJvcigmIzM0O0NhbiYjMzk7dCBjb252ZXJ0IGlwIGFkZHJlc3MgJXMmIzM0OywgVEVTVF9XUk9OR19JUCk7CiYjNDM7CXNldHVwX3ZyZnMoKTsKIAljaGVja19jbG9zZWRfc29ja2V0KCk7CiAJY2hlY2tfbGlzdGVuX3NvY2tldCgpOwogCWNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCgpOwpAQCAtMTE1OCw2ICYjNDM7MTE3OSw2IEBAIHN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCXRlc3RfaW5pdCgxMjEsIHNlcnZlcl9mbiwgY2xpZW50X2ZuKTsKJiM0MzsJdGVzdF9pbml0KDEyMiwgc2VydmVyX2ZuLCBjbGllbnRfZm4pOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmgKaW5kZXggZWJiMjg5OWMxMmZlMC4uNTNiZTE3NDQyMzdlZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oCkBAIC00MDQsNyAmIzQzOzQwNCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfcHJlcGFyZV9kZWZfa2V5KHN0cnVjdCB0Y3BfYW9fYWRkICphbywKIAogZXh0ZXJuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCwKIAkJCSAgIHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LAotCQkJICAgdWludDhfdCBwcmVmaXgsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpOwomIzQzOwkJCSAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLAomIzQzOwkJCSAgIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KTsKIGV4dGVybiBpbnQgdGVzdF9nZXRfYW9faW5mbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgKm91dCk7CiBleHRlcm4gaW50IHRlc3Rfc2V0X2FvX2luZm8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0ICppbik7CiBleHRlcm4gaW50IHRlc3RfY21wX2dldHNvY2tvcHRfc2V0c29ja29wdChjb25zdCBzdHJ1Y3QgdGNwX2FvX2FkZCAqYSwKQEAgLTQxOCw3ICYjNDM7NDE5LDggQEAgc3RhdGljIGlubGluZSBpbnQgdGVzdF92ZXJpZnlfc29ja2V0X2tleShpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fYWRkICprZXkpCiAJaW50IGVycjsKIAogCWVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgJmFtcDtrZXkyLCAmYW1wO2tleS0mZ3Q7YWRkciwgc2l6ZW9mKGtleS0mZ3Q7YWRkciksCi0JCQkgICAgICBrZXktJmd0O3ByZWZpeCwga2V5LSZndDtzbmRpZCwga2V5LSZndDtyY3ZpZCk7CiYjNDM7CQkJICAgICAga2V5LSZndDtwcmVmaXgsIGtleS0mZ3Q7c25kaWQsIGtleS0mZ3Q7cmN2aWQsCiYjNDM7CQkJICAgICAga2V5LSZndDtrZXlmbGFncywga2V5LSZndDtpZmluZGV4KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMKaW5kZXggZWY4ZTkwMzFkNDdhMy4uMmU3YjA2YTFhMTU2NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYwpAQCAtMjUyLDcgJiM0MzsyNTIsNyBAQCBzdGF0aWMgaW50IHRlc3RfZ2V0X2FvX2tleXNfbnIoaW50IHNrKQogCiBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsCiAJCXZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LCB1aW50OF90IHByZWZpeCwKLQkJdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCkKJiM0MzsJCXVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KQogewogCXN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCB0bXAgPSB7fTsKIAlzb2NrbGVuX3QgdG1wX3N6ID0gc2l6ZW9mKHRtcCk7CkBAIC0yNjIsNiAmIzQzOzI2Miw4IEBAIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCwKIAl0bXAucHJlZml4ID0gcHJlZml4OwogCXRtcC5zbmRpZCAgPSBzbmRpZDsKIAl0bXAucmN2aWQgID0gcmN2aWQ7CiYjNDM7CXRtcC5rZXlmbGFncyA9IGtleWZsYWdzOwomIzQzOwl0bXAuaWZpbmRleCA9IGlmaW5kZXg7CiAJdG1wLm5rZXlzICA9IDE7CiAKIAlyZXQgPSBnZXRzb2Nrb3B0KHNrLCBJUFBST1RPX1RDUCwgVENQX0FPX0dFVF9LRVlTLCAmYW1wO3RtcCwgJmFtcDt0bXBfc3opOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDE4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQLUFPIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjYXJlZnVsbHkgZXZhbHVhdGUgdGhlIG1vZGlmaWNhdGlvbnMsIGVzcGVjaWFsbHkgc2luY2UgaXQgdG91Y2hlcyBgbmV0L2lwdjQvdGNwX2FvLmNgLCB3aGljaCBpcyBhIGNvcmUgY29tcG9uZW50IGZvciBUQ1AgQXV0aGVudGljYXRpb24gT3B0aW9uLCBhbmQgaW5jbHVkZXMgc2VsZnRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2AuCgpGb2N1c2luZyBvbiB0aGUgYG5ldC9pcHY0L3RjcF9hby5jYCBjaGFuZ2UsIGl0IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbmFsIGZpeCB3aXRoaW4gYHRjcF9hb19kZWxfY21kYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBzbmlwcGV0IHJldmVhbHMgdGhlIGFkZGl0aW9uIG9mIGEgY29uZGl0aW9uYWwgY2hlY2sgYW5kIGFzc2lnbm1lbnQ6ICBgaWYgKGNtZC5rZXlmbGFncyAmYW1wOyBUQ1BfQU9fS0VZRl9JRklOREVYKSBsM2luZGV4ID0gY21kLmlmaW5kZXg7YC4KCkZyb20gbXkgdW5kZXJzdGFuZGluZyBvZiBUQ1AtQU8sIHRoaXMgaXMgY3J1Y2lhbC4gSXTigJlzIGFsbG93aW5nIHVzIHRvIHByb3Blcmx5IGRlbGV0ZSBWUkYtc2NvcGVkIGtleXMgYnkgY29ycmVjdGx5IG1hdGNoaW5nIHRoZSBpZmluZGV4LiAgVGhlIGluY2x1c2lvbiBvZiBgVENQX0FPX0tFWUZfSUZJTkRFWGAgaW4gYGNtZC5rZXlmbGFnc2AgYWN0cyBhcyBhIGZsYWcuIElmIHRoYXQgZmxhZyBpcyBzZXQsIHRoZSBmdW5jdGlvbiBhc3NpZ25zIHRoZSBwcm92aWRlZCBpbnRlcmZhY2UgaW5kZXggdG8gYGwzaW5kZXhgLiBJdCBzZWVtcyB0aGF0IHdpdGhvdXQgdGhpcyBjaGVjaywgZGVsZXRpbmcgYSBrZXkgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgVlJGIG1heSBiZSBjaGFsbGVuZ2luZywgb3Igd29yc2UsIGluY29ycmVjdC4gIEkgbmVlZCB0byBjb25maXJtIHRoaXMgaXMgaW5kZWVkIHRoZSBpbnRlbnRpb24gYW5kIHRoYXQgaXQgaGFuZGxlcyBhbGwgdGhlIHJlbGV2YW50IGVkZ2UgY2FzZXMuIFRoaXMgbmVlZHMgYSBkZWVwZXIgbG9vayB0byBtYWtlIHN1cmUgaXQgZnVuY3Rpb25zIGFzIGV4cGVjdGVkIGluIGFsbCBzY2VuYXJpb3MuIEkgd2lsbCBjaGVjayB0aGUgYHRjcF9hb19kZWxfY21kYCBmdW5jdGlvbiBpbiB0aGUgc291cmNlIGZpbGUgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYW9fZGVsX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jPTk5MD10Y3BfaW5ib3VuZF9hb19oYXNoKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU1LVx0XHRcdGlmIChrZXkpXG5uZXQvaXB2NC90Y3BfYW8uYzoxMDU2Olx0XHRcdFx0LyogcGFpcnMgd2l0aCB0Y3BfYW9fZGVsX2NtZCAqL1xubmV0L2lwdjQvdGNwX2FvLmMtMTA1Ny1cdFx0XHRcdFdSSVRFX09OQ0UoaW5mby1cdTAwM2VjdXJyZW50X2tleSwga2V5KTtcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDY4LVx0ICogLSByZXF1ZXN0IHNvY2tldHMgd291bGQgcmFjZSBvbiB0aG9zZSBrZXkgcG9pbnRlcnNcbm5ldC9pcHY0L3RjcF9hby5jOjEwNjk6XHQgKiAtIHRjcF9hb19kZWxfY21kKCkgYWxsb3dzIGFzeW5jIGtleSByZW1vdmFsXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDcwLVx0ICovXG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTc0Nj1zdGF0aWMgaW50IHRjcF9hb19kZWxldGVfa2V5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9hb19pbmZvICphb19pbmZvLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTE3OTktI2RlZmluZSBUQ1BfQU9fREVMX0tFWUZfQUxMIChUQ1BfQU9fS0VZRl9JRklOREVYKVxubmV0L2lwdjQvdGNwX2FvLmM6MTgwMDpzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbm5ldC9pcHY0L3RjcF9hby5jLTE4MDEtXHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTIwMzg9aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMjA0Ny1cdGNhc2UgVENQX0FPX0RFTF9LRVk6XG5uZXQvaXB2NC90Y3BfYW8uYzoyMDQ4Olx0XHRyZXR1cm4gdGNwX2FvX2RlbF9jbWQoc2ssIGZhbWlseSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L2lwdjQvdGNwX2FvLmMtMjA0OS1cdGNhc2UgVENQX0FPX0lORk86XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYwNAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoYXQgY29kZSBzbmlwcGV0OgoKKipEZWVwIERpdmUgaW50byBgdGNwX2FvX2RlbF9jbWRgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgdGNwX2FvX2RlbF9jbWRgLiBUaGUgY29tbWVudCB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGlzIHNwZWNpZmljYWxseSB0cmlnZ2VyZWQgYnkgYHRjcF9wYXJzZV9hb2AgKndoZW4qIHRoZSBjb21tYW5kIHZhbHVlLCBgY21kYCwgaXMgc2V0IHRvIGBUQ1BfQU9fREVMX0tFWWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGEgZGVsZXRlIG9wZXJhdGlvbi4gTm93LCBgdGNwX3BhcnNlX2FvYCBpdHNlbGYgaXMgY2FsbGVkIGZyb20sIGFuZCB0aGlzIGlzIGltcG9ydGFudCwgYGRvX3RjcF9zZXRzb2Nrb3B0YCwgd2hpY2ggbGl2ZXMgc29tZXdoZXJlIGluIHRoZSBgbmV0L2lwdjQvdGNwLmNgIGZpbGUg4oCTIG9yIGEgc2ltaWxhciBsb2NhdGlvbiBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uLiBTbywgSSBoYXZlIHRvIGZpbmQgdGhlIGNhbGxlcnMgb2YgYHRjcF9wYXJzZV9hb2AuIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSB0cmFpbCBvZiBob3cgYSBUQ1Agc29ja2V0IG9wdGlvbiBkZWxldGUgZ2V0cyBoYW5kbGVkLiBUaGF0IHNob3VsZCBuYXJyb3cgZG93biBteSBmb2N1cyB0byB3aGVyZSB0aGUgQU8ga2V5IGRlbGV0aW9uIGlzIGluaXRpYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfcGFyc2VfYW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwX2FvLmg9MTk2PWludCB0Y3BfYW9faGFzaF9za2IodW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbi0tXG5pbmNsdWRlL25ldC90Y3BfYW8uaC0xOTktXHRcdCAgICBjb25zdCB1OCAqdGtleSwgaW50IGhhc2hfb2Zmc2V0LCB1MzIgc25lKTtcbmluY2x1ZGUvbmV0L3RjcF9hby5oOjIwMDppbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbmluY2x1ZGUvbmV0L3RjcF9hby5oLTIwMS1cdFx0IHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pO1xuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTE5NDk9c3RhdGljIGludCB0Y3BfYW9faW5mb19jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTIwMzctXG5uZXQvaXB2NC90Y3BfYW8uYzoyMDM4OmludCB0Y3BfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxubmV0L2lwdjQvdGNwX2FvLmMtMjAzOS1cdFx0IHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MjA1Nz1pbnQgdGNwX3Y0X3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcbm5ldC9pcHY0L3RjcF9hby5jLTIwNTgte1xubmV0L2lwdjQvdGNwX2FvLmM6MjA1OTpcdHJldHVybiB0Y3BfcGFyc2VfYW8oc2ssIGNtZCwgQUZfSU5FVCwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L2lwdjQvdGNwX2FvLmMtMjA2MC19XG4tLVxubmV0L2lwdjYvdGNwX2FvLmM9MTI3PWludCB0Y3BfdjZfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLFxuLS1cbm5ldC9pcHY2L3RjcF9hby5jLTEyOS17XG5uZXQvaXB2Ni90Y3BfYW8uYzoxMzA6XHRyZXR1cm4gdGNwX3BhcnNlX2FvKHNrLCBjbWQsIEFGX0lORVQ2LCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvaXB2Ni90Y3BfYW8uYy0xMzEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzOTUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkludGVybmFsIFJldmlldyBvZiBUQ1B2NC92NiBQYXJzZXIgTG9naWMqKgoKUmlnaHQsIGxldCBtZSBzZWUuLi4gSSYjMzk7bSBsb29raW5nIGF0IGB0Y3BfdjRfcGFyc2VfYW9gIGFuZCBgdGNwX3Y2X3BhcnNlX2FvYC4gVGhvc2UgbmFtZXMgYXJlIHByZXR0eSBjbGVhciDigJMgdGhleSYjMzk7cmUgdGhlIHBhcnNpbmcgZnVuY3Rpb25zIGZvciBUQ1Agb3B0aW9ucyB3aXRoaW4gSVB2NCBhbmQgSVB2NiB0cmFmZmljLCByZXNwZWN0aXZlbHkuIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBJJiMzOTttIHByb2JhYmx5IHJldmlld2luZyBjb2RlLCBkZWJ1Z2dpbmcsIG9yIHBlcmhhcHMgb3B0aW1pemluZy4gVGhlIHByZXNlbmNlIG9mIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBzaWduYWxzIGEgZm9jdXMgb24gVENQIG9wdGlvbnMsIHdoaWNoIGNhbiBnZXQgY29tcGxpY2F0ZWQgZmFzdC4gSSYjMzk7bSBsaWtlbHkgY29uY2VybmVkIHdpdGggaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IG9wdGlvbiB0eXBlcywgbGVuZ3RocywgYWxpZ25tZW50LCBhbmQgdGhlIG92ZXJhbGwgdmFsaWRpdHkgY2hlY2tzIHRvIGVuc3VyZSB0aGUgc3RhY2sgaGFuZGxlcyBhbGwgcG9zc2libGUgY29uZmlndXJhdGlvbnMuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gSVB2NCBhbmQgSVB2NiBpbXBsZW1lbnRhdGlvbnMgaXMgYSBzdWJ0bGUsIGJ1dCBpbXBvcnRhbnQgb25lLCBhcyBib3RoIHByb3RvY29scyBoYXZlIGRpZmZlcmVudCBsaW1pdGF0aW9ucyBhbmQgc3BlY2lhbCByZXF1aXJlbWVudHMgdGhhdCBtdXN0IGJlIGhhbmRsZWQuIEkgYW0gZm9jdXNpbmcgb24gdGhlIHBhcnNlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLCBpbiBpc29sYXRpb24gdG8gYmV0dGVyIHVuZGVyc3RhbmQgd2hlcmUgdGhlIGlzc3VlcyBtaWdodCBiZS4gVGhpcyBpcyBhbGwgc3RhbmRhcmQgc3R1ZmYsIGp1c3QgbWFraW5nIHN1cmUgdGhlIGZ1bmRhbWVudGFscyBhcmUgc291bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3Y0X3BhcnNlX2FvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcF9hby5oPTIzMD1pbnQgdGNwX2FvX3ByZXBhcmVfcmVzZXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbmV0L3RjcF9hby5oLTIzNS0vKiBpcHY0IHNwZWNpZmljIGZ1bmN0aW9ucyAqL1xuaW5jbHVkZS9uZXQvdGNwX2FvLmg6MjM2OmludCB0Y3BfdjRfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKTtcbmluY2x1ZGUvbmV0L3RjcF9hby5oLTIzNy1zdHJ1Y3QgdGNwX2FvX2tleSAqdGNwX3Y0X2FvX2xvb2t1cChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICphZGRyX3NrLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTIwMzg9aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMjA1Ni1cbm5ldC9pcHY0L3RjcF9hby5jOjIwNTc6aW50IHRjcF92NF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDU4LXtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTIzNzE9c3RhdGljIGNvbnN0IHN0cnVjdCB0Y3Bfc29ja19hZl9vcHMgdGNwX3NvY2tfaXB2NF9zcGVjaWZpYyA9IHtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzNzktXHQuY2FsY19hb19oYXNoXHRcdD0gdGNwX3Y0X2FvX2hhc2hfc2tiLFxubmV0L2lwdjQvdGNwX2lwdjQuYzoyMzgwOlx0LmFvX3BhcnNlXHRcdD0gdGNwX3Y0X3BhcnNlX2FvLFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMzgxLVx0LmFvX2NhbGNfa2V5X3NrXHRcdD0gdGNwX3Y0X2FvX2NhbGNfa2V5X3NrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgQ29yZTogQSBGdXp6aW5nIE9wcG9ydHVuaXR5KioKCk9rYXksIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBJIHNlZSB0aGlzIHBhdGNoIHRhcmdldHMgYSBwYXJ0IG9mIHRoZSBrZXJuZWwgbG9naWMgdGhhdCYjMzk7cyB0cnVseSByZWFjaGFibGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFRDUCBgc2V0c29ja29wdGAgcGF0aC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGZpbmRpbmcgc29tZXRoaW5nIGV4cGxvaXRhYmxlLiBUaGUgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGNoYW5nZSBhcHBlYXJzIHNvdW5kLCBzbyB0aGUgcG90ZW50aWFsIHJld2FyZCBmcm9tIGZ1enppbmcgaXMgZGVmaW5pdGVseSB0aGVyZS4KCk15IGltbWVkaWF0ZSBmb2N1cyBzaGlmdHMgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50cmljYWNpZXMgb2YgYHRjcF9hb19kZWxfY21kYCwgYW5kIHRoZW4gYWxzbyB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgYHRjcF9wYXJzZV9hb2AgYW5kIGB0Y3BfdjRfcGFyc2VfYW9gLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGtleSBhcmVhcyB0aGF0IG5lZWQgdGhlIGNsb3Nlc3QgZXhhbWluYXRpb24uIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYENPTkZJR2Agb3B0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvIGVuYWJsZSBUQ1AtQU8gaW4gdGhlIGZpcnN0IHBsYWNlLCBvciBpZiB0aGV5JiMzOTtyZSBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIEkgY2FuIGVuc3VyZSBJJiMzOTttIHRlc3RpbmcgdGhlIHJpZ2h0IGJ1aWxkcy4gVGhhdCYjMzk7cyBteSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RDUF9BTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz03Mjk9Y29uZmlnIERFRkFVTFRfVENQX0NPTkdcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTc0My1cbm5ldC9pcHY0L0tjb25maWc6NzQ0OmNvbmZpZyBUQ1BfQU9cbm5ldC9pcHY0L0tjb25maWctNzQ1LVx0Ym9vbCBcJiMzNDtUQ1A6IEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoUkZDNTkyNSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUwNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbjogVENQX0FPIGFuZCBCZXlvbmQqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgVENQX0FPYCBhcyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLCBnb3QgaXQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGltbWVkaWF0ZWx5IGFzc2VzcyB0aGUgYnJvYWRlciBsYW5kc2NhcGUuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgVENQX0FPYCBpcyAqdGhlKiBjb25maWd1cmF0aW9uIHdlJiMzOTtyZSBjb25jZXJuZWQgd2l0aCwgb3IgaWYgaXQmIzM5O3MgcGFydCBvZiBhIGxhcmdlciBzZXQgb2YgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoaXMgc3lzdGVtLiBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB0eXBpY2FsIHBsYWNlcyBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBFc3NlbnRpYWxseSwgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBwZXJmb3JtIGEgcmFwaWQgc2FuaXR5IGNoZWNrIHRvIHJ1bGUgb3V0IG90aGVyIHJlbGV2YW50IHNldHRpbmdzLCByZWxhdGVkIGNvbmZpZ3MsIG9yIGFueSB1cHN0cmVhbSBvciBkb3duc3RyZWFtIGRlcGVuZGVuY2llcy4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtJcyB0aGlzIGEgc2luZ2xlLXBvaW50IGNvbmZpZ3VyYXRpb24gb3IgaXMgaXQgbmVzdGVkIHdpdGhpbiBhIGJyb2FkZXIgY29uZmlndXJhdGlvbiBzY2hlbWU/IElzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCB3b3VsZCBiZSBvZiBpbnRlcmVzdCBpbiB0aGlzIGNhc2U/JiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRDUF9BTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz03Mjk9Y29uZmlnIERFRkFVTFRfVENQX0NPTkdcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTc0My1cbm5ldC9pcHY0L0tjb25maWc6NzQ0OmNvbmZpZyBUQ1BfQU9cbm5ldC9pcHY0L0tjb25maWctNzQ1LVx0Ym9vbCBcJiMzNDtUQ1A6IEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoUkZDNTkyNSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgzOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBUQ1BfQU8gS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUgZm9yIFRDUF9BTy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCBzcGVjaWZpY2FsbHkgYXJlIHdlIGFpbWluZyB0byB1bmRlcnN0YW5kIGhlcmU/JiMzNDsgQXJlIHdlIGxvb2tpbmcgYXQgdGhlIGNvcmUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCBvciBwb3RlbnRpYWwgYnVpbGQtdGltZSBpbXBsaWNhdGlvbnM/IElzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUsIG9yIGEgZ2VuZXJhbCBwbGF0Zm9ybSBjb25jZXJuPwoKRmlyc3QsIEkmIzM5O2xsIHNjYW4gZm9yIHRoZSBtYWluIHN5bWJvbCBkZWZpbml0aW9uIG9mIGBUQ1BfQU9gIGl0c2VsZi4gVGhlbiwgSSYjMzk7bGwgcGF5IGF0dGVudGlvbiB0byBhbnkgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMuIFRoZXNlIGNvbmRpdGlvbnMgYXJlIGtleTsgdGhleSYjMzk7bGwgcXVpY2tseSBoaWdobGlnaHQgdGhlIGZ1bmRhbWVudGFsIHByZS1yZXF1aXNpdGVzIG9yIG90aGVyIGZlYXR1cmVzIHRoaXMgb3B0aW9uIHJlbGllcyBvbi4gSSBleHBlY3QgdG8gc2VlIGRlcGVuZGVuY2llcyBvbiB0aGUgVENQIHN0YWNrLCBvZiBjb3Vyc2UsIGFuZCBwZXJoYXBzIHJlbGF0ZWQgc2VjdXJpdHkgb3IgY3J5cHRvZ3JhcGhpYyBtb2R1bGVzIGlmIEFPIGlzIHVzaW5nIGFueS4KCk5leHQsIEkmIzM5O2xsIGNoZWNrIGZvciBgZGVmYXVsdGAgdmFsdWVzLiBJcyBpdCBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQ/IEEgZGVmYXVsdC1lbmFibGVkIG9wdGlvbiBtaWdodCBpbmRpY2F0ZSB0aGF0IGl0IGlzIGEgY29tbW9uIG9yIHJlY29tbWVuZGVkIGNvbmZpZ3VyYXRpb24sIHdoaWxlIGEgZGVmYXVsdC1kaXNhYmxlZCBvbmUgcHJvYmFibHkgaW1wbGllcyB0aGF0IGl0IGlzIGZvciBzcGVjaWFsaXplZCBkZXBsb3ltZW50cyBvciBleHBlcmltZW50YWwgc2V0dGluZ3MuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBgZGVmYXVsdGAgc3RhdGVtZW50cywgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZSBpcyBzZWxlY3RlZCBieSB0aGUgdGFyZ2V0IGVudmlyb25tZW50LgoKSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgYGhlbHBgIHRleHQuIEdvb2QgZG9jdW1lbnRhdGlvbiwgZXZlbiBpZiBicmllZiwgY2FuIHJldmVhbCB0aGUgaW50ZW5kZWQgdXNlIGNhc2UsIHRoZSBiZW5lZml0cywgYW5kIHRoZSBwb3RlbnRpYWwgZHJhd2JhY2tzIG9mIGVuYWJsaW5nIGBUQ1BfQU9gLiBXaGF0IHByb2JsZW0gaXMgaXQgZGVzaWduZWQgdG8gc29sdmU/IElzIHRoZXJlIGFueSB3YXJuaW5nIGFib3V0IHRoZSBwZXJmb3JtYW5jZSBvdmVyaGVhZD8KCkZpbmFsbHksIEkmIzM5O2xsIG5vdGUgYW55IG1lbnUgc3RydWN0dXJlIG9yIHN1Yi1vcHRpb25zLiBBcmUgdGhlcmUgZnVydGhlciBjb25maWd1cmF0aW9uIGZsYWdzIHdpdGhpbiBgVENQX0FPYCwgc3VjaCBhcyBzZWN1cml0eSBrZXkgc2l6ZSwgY2lwaGVyIHN1aXRlcywgb3Igc3BlY2lmaWMgcHJvdG9jb2wgdmVyc2lvbnM/IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBsZXZlbCBvZiBjb25maWd1cmFiaWxpdHkgdGhlIGRldmVsb3BlciBwcm92aWRlZC4gQWxzbywgSSYjMzk7bGwgbG9vayBmb3IgYW55IGBzZWxlY3RgIHN0YXRlbWVudHMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggc3ltYm9scyB0aGV5IHB1bGwgaW4uIFVsdGltYXRlbHksIHRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGhvdyBUQ1BfQU8gaW50ZWdyYXRlcyBpbnRvIHRoZSBsYXJnZXIga2VybmVsIFRDUCBpbmZyYXN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NDA6XHRcdGRlZmF1bHQgXCYjMzQ7Y2RnXCYjMzQ7IGlmIERFRkFVTFRfQ0RHXG4gNzQxOlx0XHRkZWZhdWx0IFwmIzM0O2JiclwmIzM0OyBpZiBERUZBVUxUX0JCUlxuIDc0MjpcdFx0ZGVmYXVsdCBcJiMzNDtjdWJpY1wmIzM0O1xuIDc0MzpcdFxuIDc0NDpcdGNvbmZpZyBUQ1BfQU9cbiA3NDU6XHRcdGJvb2wgXCYjMzQ7VENQOiBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFJGQzU5MjUpXCYjMzQ7XG4gNzQ2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcbiA3NDc6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcbiA3NDg6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuIDc0OTpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiA3NTA6XHRcdGRlcGVuZHMgb24gNjRCSVQgIyBzZXEtbnVtYmVyIGV4dGVuc2lvbiBuZWVkcyBXUklURV9PTkNFKHU2NClcbiA3NTE6XHRcdGhlbHBcbiA3NTI6XHRcdCAgVENQLUFPIHNwZWNpZmllcyB0aGUgdXNlIG9mIHN0cm9uZ2VyIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZXMgKE1BQ3MpLFxuIDc1MzpcdFx0ICBwcm90ZWN0cyBhZ2FpbnN0IHJlcGxheXMgZm9yIGxvbmctbGl2ZWQgVENQIGNvbm5lY3Rpb25zLCBhbmRcbiA3NTQ6XHRcdCAgcHJvdmlkZXMgbW9yZSBkZXRhaWxzIG9uIHRoZSBhc3NvY2lhdGlvbiBvZiBzZWN1cml0eSB3aXRoIFRDUFxuIDc1NTpcdFx0ICBjb25uZWN0aW9ucyB0aGFuIFRDUCBNRDUgKFNlZSBSRkM1OTI1KVxuIDc1NjpcdFxuIDc1NzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDc1ODpcdFxuIDc1OTpcdGNvbmZpZyBUQ1BfTUQ1U0lHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjIxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1BfQU8gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpbiBwbGF5IGhlcmUgaXMgZGVmaW5pdGVseSBgVENQX0FPYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb246IGB0Y3BfYW9fZGVsX2NtZGAsIGB0Y3BfcGFyc2VfYW9gLCBgdGNwX3Y0X3BhcnNlX2FvYCwgYW5kIGB0Y3BfdjZfcGFyc2VfYW9gLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIG9yIGF0IGxlYXN0IHRoZSBvbmVzIEkmIzM5O20gaW5pdGlhbGx5IGludGVyZXN0ZWQgaW4uIFdhaXQgYSBtaW51dGUuLi4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGB0Y3BfYW9fZGVsX2NtZGAgaXMgYWN0dWFsbHkgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIGhhcyBpbXBvcnRhbnQgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoYXQmIzM5O3MgdGhlIGNhc2UuIEl0IGFmZmVjdHMgdGhlIGxpbmthZ2UgYW5kIHNjb3BlLCB3aGljaCBpbiB0dXJuIGltcGFjdHMgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0sIGFuZCB0aGF0IGlzIGltcG9ydGFudCB0byBob3cgdG8gYmVzdCBpbnRlcnByZXQgdGhlIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGNoZWNrIHRoYXQgc3BlY2lmaWNhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYW9fZGVsX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jPTk5MD10Y3BfaW5ib3VuZF9hb19oYXNoKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU1LVx0XHRcdGlmIChrZXkpXG5uZXQvaXB2NC90Y3BfYW8uYzoxMDU2Olx0XHRcdFx0LyogcGFpcnMgd2l0aCB0Y3BfYW9fZGVsX2NtZCAqL1xubmV0L2lwdjQvdGNwX2FvLmMtMTA1Ny1cdFx0XHRcdFdSSVRFX09OQ0UoaW5mby1cdTAwM2VjdXJyZW50X2tleSwga2V5KTtcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDY4LVx0ICogLSByZXF1ZXN0IHNvY2tldHMgd291bGQgcmFjZSBvbiB0aG9zZSBrZXkgcG9pbnRlcnNcbm5ldC9pcHY0L3RjcF9hby5jOjEwNjk6XHQgKiAtIHRjcF9hb19kZWxfY21kKCkgYWxsb3dzIGFzeW5jIGtleSByZW1vdmFsXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDcwLVx0ICovXG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTc0Nj1zdGF0aWMgaW50IHRjcF9hb19kZWxldGVfa2V5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9hb19pbmZvICphb19pbmZvLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTE3OTktI2RlZmluZSBUQ1BfQU9fREVMX0tFWUZfQUxMIChUQ1BfQU9fS0VZRl9JRklOREVYKVxubmV0L2lwdjQvdGNwX2FvLmM6MTgwMDpzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbm5ldC9pcHY0L3RjcF9hby5jLTE4MDEtXHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTIwMzg9aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMjA0Ny1cdGNhc2UgVENQX0FPX0RFTF9LRVk6XG5uZXQvaXB2NC90Y3BfYW8uYzoyMDQ4Olx0XHRyZXR1cm4gdGNwX2FvX2RlbF9jbWQoc2ssIGZhbWlseSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L2lwdjQvdGNwX2FvLmMtMjA0OS1cdGNhc2UgVENQX0FPX0lORk86XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDMyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1AgQU8gUGFyc2luZyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggdGhlIFRDUCBBdXRoZW50aWNhdGlvbiBPcHRpb24gKEFPKSBwYXJzaW5nIGxvZ2ljLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgY29uZmlybWVkOiBgdGNwX2FvX2RlbF9jbWRgIGlzIGluZGVlZCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgYmVjYXVzZSBpdCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGlzIG1vZHVsZS4gTm93LCBnaXZlbiB0aGF0IGNvbmZpcm1hdGlvbiwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHBhcnNpbmcgdGhlIEFPIGRhdGEgaXRzZWxmLiBUaGUgb2J2aW91cyBjYW5kaWRhdGVzIGFyZSBgdGNwX3BhcnNlX2FvYCwgYHRjcF92NF9wYXJzZV9hb2AsIGFuZCBgdGNwX3Y2X3BhcnNlX2FvYC4gVGhleSBoYW5kbGUgdGhlIGdlbmVyaWMgYW5kIElQdjQvSVB2NiBzcGVjaWZpYyBwYXJzaW5nLCByZXNwZWN0aXZlbHkuIE15IG5leHQgc3RlcCwgYW5kIGl0JiMzOTtzIGEgY3JpdGljYWwgb25lLCBpcyB0byBkZXRlcm1pbmUgaWYgYHRjcF9wYXJzZV9hb2AgaXMgYWxzbyBzdGF0aWMsIG9yIGlmIGl0IG1pZ2h0IGJlIGV4cG9zZWQgZWxzZXdoZXJlIGluIHRoZSBjb2RlYmFzZS4gVW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgd2lsbCByZWFsbHkgaGVscCB3aXRoIHRoZSBvbmdvaW5nIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfcGFyc2VfYW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYW8uYz0xOTQ5PXN0YXRpYyBpbnQgdGNwX2FvX2luZm9fY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDM3LVxubmV0L2lwdjQvdGNwX2FvLmM6MjAzODppbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbm5ldC9pcHY0L3RjcF9hby5jLTIwMzktXHRcdCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTIwNTc9aW50IHRjcF92NF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDU4LXtcbm5ldC9pcHY0L3RjcF9hby5jOjIwNTk6XHRyZXR1cm4gdGNwX3BhcnNlX2FvKHNrLCBjbWQsIEFGX0lORVQsIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9pcHY0L3RjcF9hby5jLTIwNjAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk2NQoJCQkJCQkJb3V0cHV0OiAxMzQKCQkJCQkJCXRob3VnaHRzOiAyOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBUQ1AtQU8gS2V5IERlbGV0aW9uIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBidWcgd2l0aGluIHRoZSBUQ1AtQU8ga2V5IGRlbGV0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSB3aGVuIHVzaW5nIGBzZXRzb2Nrb3B0YCB3aXRoIGBUQ1BfQU9fREVMX0tFWWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBmdW5jdGlvbiBgdGNwX3BhcnNlX2FvYCBpc24mIzM5O3Qgc3RhdGljLCBhbGxvd2luZyBmb3IgdmFyaWF0aW9ucyBsaWtlIGB0Y3BfdjRfcGFyc2VfYW9gIGFuZCBgdGNwX3Y2X3BhcnNlX2FvYCwgd2hpY2ggaXMgZ29vZCBmb3IgaGFuZGxpbmcgZGlmZmVyZW50IGFkZHJlc3MgZmFtaWxpZXMuCgpUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZy4gQmFzaWNhbGx5LCB0aGUgYGwzaW5kZXhgIGZpZWxkLCBjcml0aWNhbCBmb3IgaWRlbnRpZnlpbmcgdGhlIGNvcnJlY3QgaW50ZXJmYWNlIChhbmQgVlJGIGluIG15IHdvcmxkKSwgd2FzbiYjMzk7dCBiZWluZyBjb3JyZWN0bHkgcG9wdWxhdGVkIGZyb20gdGhlIHVzZXImIzM5O3MgaW5wdXQgKGBjbWQuaWZpbmRleGApIGR1cmluZyBrZXkgZGVsZXRpb24uIFRoaXMgbWVhbnMgdGhlIHN5c3RlbSBtaWdodCBiZSBkZWxldGluZyB0aGUgKndyb25nKiBrZXksIGEgY3JpdGljYWwgZmxhdy4KClRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCByZXF1aXJpbmcgdGhvcm91Z2ggZnV6emluZyB0byBlbnN1cmUgaXQmIzM5O3Mgcm9idXN0LiBUaGUgZm9jdXMgaGVyZSBpcyBvbiBgdGNwX3BhcnNlX2FvYCwgYHRjcF92NF9wYXJzZV9hb2AsIGFuZCBgdGNwX3Y2X3BhcnNlX2FvYCwgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBwYXJzaW5nIHRoaXMgVENQLUFPIGNvbmZpZ3VyYXRpb24gZGF0YS4KCkkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBhY2NvdW50aW5nIGZvciBldmVyeXRoaW5nLiBTaW5jZSBJIGFtIGNvbmNlcm5lZCBhYm91dCBWUkZzLCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGBUQ1BfQU9gIGRlcGVuZHMgb24gYE5FVF9WUkZgLiBXaGlsZSBpdCBkb2VzbiYjMzk7dCAqZGlyZWN0bHkqIGRlcGVuZCBvbiBpdCwgYW5kIHRoZSB0ZXN0cyByZWZlcmVuY2UgYEtDT05GSUdfTkVUX1ZSRmAsIHRoaXMgcGF0Y2ggaXMgZGlyZWN0bHkgbWFuaXB1bGF0aW5nIGBsM2luZGV4YCwgd2hpY2ggaXMgdXNlZCBmb3IgVlJGcy4gSXQmIzM5O3MgYmVzdCB0byBiZSBzYWZlLCBzbyBJJiMzOTtsbCBpbmNsdWRlIGBORVRfVlJGYCBhcyB3ZWxsIHRvIG1ha2Ugc3VyZSBJIGNhcHR1cmUgdGhlIGNvbXBsZXRlIGNvbnRleHQuIFRoaXMgbGV2ZWwgb2YgZGlsaWdlbmNlIHByZXZlbnRzIHJlZ3Jlc3Npb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VENQX0FPJiMzNDssCiAgICAmIzM0O05FVF9WUkYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfcGFyc2VfYW8mIzM0OywKICAgICYjMzQ7dGNwX3Y0X3BhcnNlX2FvJiMzNDssCiAgICAmIzM0O3RjcF92Nl9wYXJzZV9hbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBUQ1AtQU8ga2V5IGRlbGV0aW9uIHdoZXJlIHRoZSBpbnRlcmZhY2UgaW5kZXggKFZSRikgd2FzIG5vdCBwcm9wZXJseSBleHRyYWN0ZWQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBjb21tYW5kIHdoZW4gdGhlIFRDUF9BT19LRVlGX0lGSU5ERVggZmxhZyB3YXMgc2V0LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIFRDUCBzZXRzb2Nrb3B0IGxvZ2ljIGZvciBUQ1BfQU9fREVMX0tFWS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VENQX0FPJiMzNDssCiAgICAmIzM0O05FVF9WUkYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfcGFyc2VfYW8mIzM0OywKICAgICYjMzQ7dGNwX3Y0X3BhcnNlX2FvJiMzNDssCiAgICAmIzM0O3RjcF92Nl9wYXJzZV9hbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBUQ1AtQU8ga2V5IGRlbGV0aW9uIHdoZXJlIHRoZSBpbnRlcmZhY2UgaW5kZXggKFZSRikgd2FzIG5vdCBwcm9wZXJseSBleHRyYWN0ZWQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBjb21tYW5kIHdoZW4gdGhlIFRDUF9BT19LRVlGX0lGSU5ERVggZmxhZyB3YXMgc2V0LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIFRDUCBzZXRzb2Nrb3B0IGxvZ2ljIGZvciBUQ1BfQU9fREVMX0tFWS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGZ1bmN0aW9uYWwgYnVnIGluIGB0Y3BfYW9fZGVsX2NtZGAgd2hlcmUgdGhlIGBpZmluZGV4YCBmaWVsZCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIGB0Y3BfYW9fZGVsYCBzdHJ1Y3R1cmUgd2FzIGlnbm9yZWQgd2hlbiBkZWxldGluZyBhIFRDUC1BTyBrZXkuIFRoZSBgY21kYCBzdHJ1Y3R1cmUgaXMgc2FmZWx5IHBvcHVsYXRlZCBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cigpYCwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKGVpdGhlciBieSBjb3B5aW5nIGZyb20gdXNlciBzcGFjZSBvciB6ZXJvLXBhZGRpbmcpLiBUaGUgcGF0Y2ggc2ltcGx5IHJlYWRzIHRoZSBpbml0aWFsaXplZCBgY21kLmlmaW5kZXhgIGZpZWxkIGFuZCBhc3NpZ25zIGl0IHRvIGBsM2luZGV4YCBpZiB0aGUgYFRDUF9BT19LRVlGX0lGSU5ERVhgIGZsYWcgaXMgc2V0LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRjMDJjYmFmOTViMTY0YjZjOWVhMmFiODEwNTMwN2UyOTg1YWNkMTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyMiAyMDoyMzozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9hby5jIGIvbmV0L2lwdjQvdGNwX2FvLmMKaW5kZXggNTA5NDI2NzQ0N2FlZS4uMjY4NjQ2MjFlNmRlZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2FvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2FvLmMKQEAgLTE4MzQsNiAmIzQzOzE4MzQsOSBAQCBzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSwKIAlpZiAoY21kLmlmaW5kZXggJmFtcDsmYW1wOyAhKGNtZC5rZXlmbGFncyAmYW1wOyBUQ1BfQU9fS0VZRl9JRklOREVYKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKGNtZC5rZXlmbGFncyAmYW1wOyBUQ1BfQU9fS0VZRl9JRklOREVYKQomIzQzOwkJbDNpbmRleCA9IGNtZC5pZmluZGV4OwomIzQzOwogCWFvX2luZm8gPSBzZXRzb2Nrb3B0X2FvX2luZm8oc2spOwogCWlmIChJU19FUlIoYW9faW5mbykpCiAJCXJldHVybiBQVFJfRVJSKGFvX2luZm8pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jCmluZGV4IGQ4NmJiMzgwYjc5ZjcuLjA0NTFmOTJmNDY0NWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmMKQEAgLTYzLDggJiM0Mzs2Myw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9sc2sodW5pb24gdGNwX2FkZHIgKmFkZHIsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpCiAJcmV0dXJuIHNrOwogfQogCi1zdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsCi0JCQlpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXkpCiYjNDM7c3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBpbnQgaWZpbmRleCwKJiM0MzsJCQlib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXkpCiB7CiAJc3RydWN0IHRjcF9hb19pbmZvX29wdCBhb19pbmZvID0ge307CiAJc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0IGtleSA9IHt9OwpAQCAtNzYsNiAmIzQzOzc2LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYywKIAlkZWwucHJlZml4ID0gREVGQVVMVF9URVNUX1BSRUZJWDsKIAlkZWwuc25kaWQgPSBzbmRpZDsKIAlkZWwucmN2aWQgPSByY3ZpZDsKJiM0MzsJaWYgKGlmaW5kZXgpIHsKJiM0MzsJCWRlbC5rZXlmbGFncyA9IFRDUF9BT19LRVlGX0lGSU5ERVg7CiYjNDM7CQlkZWwuaWZpbmRleCA9IGlmaW5kZXg7CiYjNDM7CX0KIAogCWlmIChjdXJyZW50X2tleSAmZ3Q7PSAwKSB7CiAJCWRlbC5zZXRfY3VycmVudCA9IDE7CkBAIC05NSw3ICYjNDM7OTksOCBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsCiAKIAl0Y3BfYWRkcl90b19zb2NrYWRkcl9pbigmYW1wO3NvY2thZGRyLCAmYW1wO3RoaXNfaXBfZGVzdCwgMCk7CiAJZXJyID0gdGVzdF9nZXRfb25lX2FvKHNrLCAmYW1wO2tleSwgJmFtcDtzb2NrYWRkciwgc2l6ZW9mKHNvY2thZGRyKSwKLQkJCSAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCk7CiYjNDM7CQkJICAgICAgREVGQVVMVF9URVNUX1BSRUZJWCwgc25kaWQsIHJjdmlkLAomIzQzOwkJCSAgICAgIGRlbC5rZXlmbGFncywgZGVsLmlmaW5kZXgpOwogCWlmICghZXJyKQogCQlyZXR1cm4gLUVFWElTVDsKIAlpZiAoZXJyICE9IC1FMkJJRykKQEAgLTExMiwxMiAmIzQzOzExNywxMiBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsCiB9CiAKIHN0YXRpYyB2b2lkIHRyeV9kZWxldGVfa2V5KGNoYXIgKnRzdF9uYW1lLCBpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsCi0JCQkgICBib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXksCiYjNDM7CQkJICAgaW50IGlmaW5kZXgsIGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSwKIAkJCSAgIGZhdWx0X3QgaW5qKQogewogCWludCBlcnI7CiAKLQllcnIgPSB0ZXN0X2RlbF9rZXkoc2ssIHNuZGlkLCByY3ZpZCwgYXN5bmMsIGN1cnJlbnRfa2V5LCBybmV4dF9rZXkpOwomIzQzOwllcnIgPSB0ZXN0X2RlbF9rZXkoc2ssIHNuZGlkLCByY3ZpZCwgaWZpbmRleCwgYXN5bmMsIGN1cnJlbnRfa2V5LCBybmV4dF9rZXkpOwogCWlmICgoZXJyID09IC1FQlVTWSAmYW1wOyZhbXA7IGZhdWx0KEJVU1kpKSB8fCAoZXJyID09IC1FSU5WQUwgJmFtcDsmYW1wOyBmYXVsdChDVVJSTkVYVCkpKSB7CiAJCXRlc3Rfb2soJiMzNDslczoga2V5IGRlbGV0aW9uIHdhcyBwcmV2ZW50ZWQmIzM0OywgdHN0X25hbWUpOwogCQlyZXR1cm47CkBAIC0yMzYsMTUgJiM0MzsyNDEsMTUgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKQogCWludCBzazsKIAogCXNrID0gcHJlcGFyZV9zaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5JiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCAwKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5cyYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgMCk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5JiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXMmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIDApOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9zaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwogCWlmICh0ZXN0X3NldF9rZXkoc2ssIDEwMCwgMjAwKSkKIAkJdGVzdF9lcnJvcigmIzM0O2ZhaWxlZCB0byBzZXQgY3VycmVudC9ybmV4dCBrZXlzJiMzNDspOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5JiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleSYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7CiAJY2xvc2Uoc2spOwogCiAJc2sgPSBwcmVwYXJlX3NrKCZhbXA7dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7CkBAIC0yNTQsMTAgJiM0MzsyNTksMTIgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKQogCWlmICh0ZXN0X2FkZF9rZXkoc2ssICYjMzQ7R2xvcnkgdG8gVWtyYWluZSEmIzM0OywgdGhpc19pcF9kZXN0LAogCQkJIERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpCiAJCXRlc3RfZXJyb3IoJiMzNDt0ZXN0X2FkZF9rZXkoKSYjMzQ7KTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSAmIzQzOyBzZXQgY3VycmVudC9ybmV4dCYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIDEwLCAxMywgMCk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssIDEwLCAxMSwgMCwgMjAwLCAtMSwgMCk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5JiMzNDssIHNrLCAxMiwgMTMsIDAsIC0xLCAyMDAsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQmIzQzO3JuZXh0IGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5ICYjNDM7IHNldCBjdXJyZW50L3JuZXh0JiMzNDssIHNrLAomIzQzOwkJICAgICAgIDEwMCwgMTAwLCAwLCAwLCAxMCwgMTMsIDApOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBjdXJyZW50IGtleSYjMzQ7LCBzaywgMTAsIDExLCAwLCAwLCAyMDAsIC0xLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5JiMzNDssIHNrLCAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIDApOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50JiM0MztybmV4dCBrZXkmIzM0Oywgc2ssCiYjNDM7CQkgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7CiAJY2xvc2Uoc2spOwogCiAJc2sgPSBwcmVwYXJlX3NrKCZhbXA7dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7CkBAIC0yNzIsNiAmIzQzOzI3OSwxOCBAQCBzdGF0aWMgdm9pZCBjaGVja19jbG9zZWRfc29ja2V0KHZvaWQpCiAJCQkJICB0aGlzX2lwX2Rlc3QsIERFRkFVTFRfVEVTVF9QUkVGSVgsCiAJCQkJICBmYWxzZSwgdHJ1ZSwgMjAsIDEwLCAwKTsKIAljbG9zZShzayk7CiYjNDM7CiYjNDM7CWlmICghc2hvdWxkX3NraXBfdGVzdCgmIzM0O2Nsb3NlZCBzb2NrZXQsIGFkZCAmIzQzOyBkZWxldGUgVlJGLXNjb3BlZCBrZXkmIzM0OywKJiM0MzsJCQkgICAgICBLQ09ORklHX05FVF9WUkYpKSB7CiYjNDM7CQlzayA9IHByZXBhcmVfc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKJiM0MzsJCWlmICh0ZXN0X2FkZF9rZXlfdnJmKHNrLCBTRUNPTkRfUEFTU1dPUkQsIFRDUF9BT19LRVlGX0lGSU5ERVgsCiYjNDM7CQkJCSAgICAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLAomIzQzOwkJCQkgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDIwMSwgMjAxKSkKJiM0MzsJCQl0ZXN0X2Vycm9yKCYjMzQ7dGVzdF9hZGRfa2V5X3ZyZigpJiMzNDspOwomIzQzOwkJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBhZGQgJiM0MzsgZGVsZXRlIFZSRi1zY29wZWQga2V5JiMzNDssIHNrLCAyMDEsIDIwMSwKJiM0MzsJCQkgICAgICAgdGVzdF92cmZfaWZpbmRleCwgMCwgLTEsIC0xLCAwKTsKJiM0MzsJCWNsb3NlKHNrKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBhc3NlcnRfbm9fY3VycmVudF9ybmV4dChjb25zdCBjaGFyICp0c3RfbXNnLCBpbnQgc2spCkBAIC0zMjIsOCAmIzQzOzM0MSw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2xpc3Rlbl9zb2NrZXQodm9pZCkKIAlpbnQgc2ssIGVycjsKIAogCXNrID0gcHJlcGFyZV9sc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgYWxsIGtleXMmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTsKIAljbG9zZShzayk7CiAKIAlzayA9IHByZXBhcmVfbHNrKCZhbXA7dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7CkBAIC0zNDUsOCAmIzQzOzM2NCwxMCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpCiAJaWYgKGxpc3RlbihzaywgMTApKQogCQl0ZXN0X2Vycm9yKCYjMzQ7bGlzdGVuKCkmIzM0Oyk7CiAJYXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoJiMzNDtsaXN0ZW4oKSBhZnRlciBjdXJyZW50L3JuZXh0IGtleXMgc2V0JiMzNDssIHNrKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKSYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKSYjMzQ7LCBzaywKJiM0MzsJCSAgICAgICAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKSYjMzQ7LCBzaywKJiM0MzsJCSAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7CiAJY2xvc2Uoc2spOwogCiAJYXNzZXJ0X25vX3RjcF9yZXBhaXIoKTsKQEAgLTM1OSwxMyAmIzQzOzM4MCwxMyBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpCiAJCQkgREVGQVVMVF9URVNUX1BSRUZJWCwgMTIsIDEzKSkKIAkJdGVzdF9lcnJvcigmIzM0O3Rlc3RfYWRkX2tleSgpJiMzNDspOwogCXRyeV9kZWxldGVfa2V5KCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5ICYjNDM7IHNldCBjdXJyZW50L3JuZXh0JiMzNDssIHNrLAotCQkgICAgICAgMTAwLCAxMDAsIDAsIDEwLCAxMywgRkFVTFRfQ1VSUk5FWFQpOwomIzQzOwkJICAgICAgIDEwMCwgMTAwLCAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBjdXJyZW50IGtleSYjMzQ7LCBzaywKLQkJICAgICAgIDEwLCAxMSwgMCwgMjAwLCAtMSwgRkFVTFRfQ1VSUk5FWFQpOwomIzQzOwkJICAgICAgIDEwLCAxMSwgMCwgMCwgMjAwLCAtMSwgRkFVTFRfQ1VSUk5FWFQpOwogCXRyeV9kZWxldGVfa2V5KCYjMzQ7bGlzdGVuIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleSYjMzQ7LCBzaywKLQkJICAgICAgIDEyLCAxMywgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpOwomIzQzOwkJICAgICAgIDEyLCAxMywgMCwgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpOwogCXRyeV9kZWxldGVfa2V5KCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5JiMzNDssIHNrLAotCQkgICAgICAgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7CiYjNDM7CQkgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7CiAJY2xvc2Uoc2spOwogCiAJc2sgPSBwcmVwYXJlX2xzaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMTEzMSw3ICYjNDM7MTE1Miw2IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCh2b2lkKQogewogCXVuc2lnbmVkIGludCBwb3J0ID0gdGVzdF9zZXJ2ZXJfcG9ydDsKIAotCXNldHVwX3ZyZnMoKTsKIAl0cnlfY2xpZW50X3J1bigmIzM0O2NsaWVudDogQ2hlY2sgY3VycmVudC9ybmV4dCBrZXlzIHVuc2V0IGJlZm9yZSBjb25uZWN0KCkmIzM0OywKIAkJICAgICAgIHBvcnQmIzQzOyYjNDM7LCAyMCwgLTEsIC0xKTsKIAl0cnlfY2xpZW50X3J1bigmIzM0O2NsaWVudDogQ2hlY2sgY3VycmVudC9ybmV4dCBrZXlzIHNldCBiZWZvcmUgY29ubmVjdCgpJiMzNDssCkBAIC0xMTUwLDYgJiM0MzsxMTcwLDcgQEAgc3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpCiB7CiAJaWYgKGluZXRfcHRvbihURVNUX0ZBTUlMWSwgVEVTVF9XUk9OR19JUCwgJmFtcDt3cm9uZ19hZGRyKSAhPSAxKQogCQl0ZXN0X2Vycm9yKCYjMzQ7Q2FuJiMzOTt0IGNvbnZlcnQgaXAgYWRkcmVzcyAlcyYjMzQ7LCBURVNUX1dST05HX0lQKTsKJiM0MzsJc2V0dXBfdnJmcygpOwogCWNoZWNrX2Nsb3NlZF9zb2NrZXQoKTsKIAljaGVja19saXN0ZW5fc29ja2V0KCk7CiAJY2hlY2tfZXN0YWJsaXNoZWRfc29ja2V0KCk7CkBAIC0xMTU4LDYgJiM0MzsxMTc5LDYgQEAgc3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpCiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7Ci0JdGVzdF9pbml0KDEyMSwgc2VydmVyX2ZuLCBjbGllbnRfZm4pOwomIzQzOwl0ZXN0X2luaXQoMTIyLCBzZXJ2ZXJfZm4sIGNsaWVudF9mbik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaAppbmRleCBlYmIyODk5YzEyZmUwLi41M2JlMTc0NDIzN2VlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmgKQEAgLTQwNCw3ICYjNDM7NDA0LDggQEAgc3RhdGljIGlubGluZSBpbnQgdGVzdF9wcmVwYXJlX2RlZl9rZXkoc3RydWN0IHRjcF9hb19hZGQgKmFvLAogCiBleHRlcm4gaW50IHRlc3RfZ2V0X29uZV9hbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCAqb3V0LAogCQkJICAgdm9pZCAqYWRkciwgc2l6ZV90IGFkZHJfc3osCi0JCQkgICB1aW50OF90IHByZWZpeCwgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCk7CiYjNDM7CQkJICAgdWludDhfdCBwcmVmaXgsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsCiYjNDM7CQkJICAgdWludDhfdCBrZXlmbGFncywgaW50IGlmaW5kZXgpOwogZXh0ZXJuIGludCB0ZXN0X2dldF9hb19pbmZvKGludCBzaywgc3RydWN0IHRjcF9hb19pbmZvX29wdCAqb3V0KTsKIGV4dGVybiBpbnQgdGVzdF9zZXRfYW9faW5mbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgKmluKTsKIGV4dGVybiBpbnQgdGVzdF9jbXBfZ2V0c29ja29wdF9zZXRzb2Nrb3B0KGNvbnN0IHN0cnVjdCB0Y3BfYW9fYWRkICphLApAQCAtNDE4LDcgJiM0Mzs0MTksOCBAQCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3ZlcmlmeV9zb2NrZXRfa2V5KGludCBzaywgc3RydWN0IHRjcF9hb19hZGQgKmtleSkKIAlpbnQgZXJyOwogCiAJZXJyID0gdGVzdF9nZXRfb25lX2FvKHNrLCAmYW1wO2tleTIsICZhbXA7a2V5LSZndDthZGRyLCBzaXplb2Yoa2V5LSZndDthZGRyKSwKLQkJCSAgICAgIGtleS0mZ3Q7cHJlZml4LCBrZXktJmd0O3NuZGlkLCBrZXktJmd0O3JjdmlkKTsKJiM0MzsJCQkgICAgICBrZXktJmd0O3ByZWZpeCwga2V5LSZndDtzbmRpZCwga2V5LSZndDtyY3ZpZCwKJiM0MzsJCQkgICAgICBrZXktJmd0O2tleWZsYWdzLCBrZXktJmd0O2lmaW5kZXgpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYwppbmRleCBlZjhlOTAzMWQ0N2EzLi4yZTdiMDZhMWExNTY3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jCkBAIC0yNTIsNyAmIzQzOzI1Miw3IEBAIHN0YXRpYyBpbnQgdGVzdF9nZXRfYW9fa2V5c19ucihpbnQgc2spCiAKIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCwKIAkJdm9pZCAqYWRkciwgc2l6ZV90IGFkZHJfc3osIHVpbnQ4X3QgcHJlZml4LAotCQl1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKQomIzQzOwkJdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgdWludDhfdCBrZXlmbGFncywgaW50IGlmaW5kZXgpCiB7CiAJc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0IHRtcCA9IHt9OwogCXNvY2tsZW5fdCB0bXBfc3ogPSBzaXplb2YodG1wKTsKQEAgLTI2Miw2ICYjNDM7MjYyLDggQEAgaW50IHRlc3RfZ2V0X29uZV9hbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCAqb3V0LAogCXRtcC5wcmVmaXggPSBwcmVmaXg7CiAJdG1wLnNuZGlkICA9IHNuZGlkOwogCXRtcC5yY3ZpZCAgPSByY3ZpZDsKJiM0MzsJdG1wLmtleWZsYWdzID0ga2V5ZmxhZ3M7CiYjNDM7CXRtcC5pZmluZGV4ID0gaWZpbmRleDsKIAl0bXAubmtleXMgID0gMTsKIAogCXJldCA9IGdldHNvY2tvcHQoc2ssIElQUFJPVE9fVENQLCBUQ1BfQU9fR0VUX0tFWVMsICZhbXA7dG1wLCAmYW1wO3RtcF9zeik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDE1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRDUC1BTyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYG5ldC9pcHY0L3RjcF9hby5jYCBhbmQgc29tZSBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vYC4gTGV0JiMzOTtzIGdldCByaWdodCB0byBpdCBhbmQgZm9jdXMgb24gYG5ldC9pcHY0L3RjcF9hby5jYC4gVGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gdG8gdGhlIGB0Y3BfYW9fZGVsX2NtZGAgZnVuY3Rpb24uCgpIbW0sIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGFkZGVkIHRoaXMgY2hlY2sgcmVsYXRlZCB0byBgaWZpbmRleGAgYW5kIGBjbWQua2V5ZmxhZ3NgLiBTcGVjaWZpY2FsbHksIHRoZXkgYXJlIG5vdyBzZXR0aW5nIGBsM2luZGV4YCBpZiBgVENQX0FPX0tFWUZfSUZJTkRFWGAgaXMgc2V0IGluIHRoZSBrZXlmbGFncy4gVGhlIGV4aXN0aW5nIGNvZGUgYWxyZWFkeSBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiBgaWZpbmRleGAsIGJ1dCB0aGlzIGFkZGl0aW9uIGRpcmVjdGx5IGFzc2lnbnMgaXQuIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgaGVyZSDigJMgd2hhdCBkb2VzIGBjbWRgIGFjdHVhbGx5IHJlcHJlc2VudD8gV2hlcmUgZG9lcyBpdCBjb21lIGZyb20/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgdG8gZnVsbHkgZ3Jhc3AgdGhpcyBjaGFuZ2UuCgpMZXQgbWUgdXNlIHRoZSBncmVwcGVyIEkmIzM5O3ZlIGdvdCBzZXQgdXAgdG8gc2VlIHdoZXJlIGB0Y3BfYW9fZGVsX2NtZGAgaXMgY2FsbGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBmdWxseSBncm9rIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9hb19kZWxfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2FvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2FvLmM9OTkwPXRjcF9pbmJvdW5kX2FvX2hhc2goc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTEwNTUtXHRcdFx0aWYgKGtleSlcbm5ldC9pcHY0L3RjcF9hby5jOjEwNTY6XHRcdFx0XHQvKiBwYWlycyB3aXRoIHRjcF9hb19kZWxfY21kICovXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU3LVx0XHRcdFx0V1JJVEVfT05DRShpbmZvLVx1MDAzZWN1cnJlbnRfa2V5LCBrZXkpO1xuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTEwNjgtXHQgKiAtIHJlcXVlc3Qgc29ja2V0cyB3b3VsZCByYWNlIG9uIHRob3NlIGtleSBwb2ludGVyc1xubmV0L2lwdjQvdGNwX2FvLmM6MTA2OTpcdCAqIC0gdGNwX2FvX2RlbF9jbWQoKSBhbGxvd3MgYXN5bmMga2V5IHJlbW92YWxcbm5ldC9pcHY0L3RjcF9hby5jLTEwNzAtXHQgKi9cbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0xNzQ2PXN0YXRpYyBpbnQgdGNwX2FvX2RlbGV0ZV9rZXkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvX2luZm8sXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMTc5OS0jZGVmaW5lIFRDUF9BT19ERUxfS0VZRl9BTEwgKFRDUF9BT19LRVlGX0lGSU5ERVgpXG5uZXQvaXB2NC90Y3BfYW8uYzoxODAwOnN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxubmV0L2lwdjQvdGNwX2FvLmMtMTgwMS1cdFx0XHQgIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MjAzOD1pbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDQ3LVx0Y2FzZSBUQ1BfQU9fREVMX0tFWTpcbm5ldC9pcHY0L3RjcF9hby5jOjIwNDg6XHRcdHJldHVybiB0Y3BfYW9fZGVsX2NtZChzaywgZmFtaWx5LCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvaXB2NC90Y3BfYW8uYy0yMDQ5LVx0Y2FzZSBUQ1BfQU9fSU5GTzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUwMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgdGNwX2FvX2RlbF9jbWRgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIFRDUCBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFRDUCBBTykgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGB0Y3BfYW9fZGVsX2NtZGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvaXB2NC90Y3BfYW8uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBUQ1AgQU8ga2V5cyBhcmUgcmVtb3ZlZCBvciBpbnZhbGlkYXRlZCwgYXMgdGhpcyBpcyBjcnVjaWFsIGZvciBzZWN1cml0eSBhbmQgc2Vzc2lvbiBtYW5hZ2VtZW50LiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBkZWxldGlvbiBvciBpbnZhbGlkYXRpb24gb2YgYXV0aGVudGljYXRpb24ga2V5cyBhc3NvY2lhdGVkIHdpdGggYSBUQ1AgY29ubmVjdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2V5IG1hbmFnZW1lbnQgc3RydWN0dXJlcywgd2hhdCBsb2NraW5nIG1lY2hhbmlzbXMgaXQgZW1wbG95cyB0byBlbnN1cmUgdGhyZWFkIHNhZmV0eSAobGlrZWx5IHNwaW5sb2NrcyBvciByZWFkL3dyaXRlIGxvY2tzLCBnaXZlbiBpdHMgcG90ZW50aWFsIGZvciBjb25jdXJyZW50IGFjY2VzcyksIGFuZCBob3cgaXQgY2xlYW5zIHVwIGFueSBhc3NvY2lhdGVkIHJlc291cmNlcy4gQXJlIHRoZXJlIGFueSByZWZlcmVuY2UgY291bnRzIGludm9sdmVkPyBXaGF0IGhhcHBlbnMgaWYgdGhlIGtleSBkZWxldGlvbiBmYWlscyBmb3Igc29tZSByZWFzb24/IERvZXMgdGhpcyB0cmlnZ2VyIGFueSBlcnJvciBjYWxsYmFja3Mgb3IgbG9nZ2luZz8gSSYjMzk7bGwgYWxzbyBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBsaWtlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbGVha3MsIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVsZXRpb24gcHJvY2VzcyBpdHNlbGYuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIG1haW50YWluaW5nIHRoZSBpbnRlZ3JpdHkgYW5kIHNlY3VyaXR5IG9mIHRoZSBBTyBzeXN0ZW0sIHNvIGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc5MDpcdFx0YXRvbWljX3N1Yih0Y3BfYW9fc2l6ZW9mX2tleShrZXkpLCBcdTAwMjZzay1cdTAwM2Vza19vbWVtX2FsbG9jKTtcbjE3OTE6XHRcdGNhbGxfcmN1KFx1MDAyNmtleS1cdTAwM2VyY3UsIHRjcF9hb19rZXlfZnJlZV9yY3UpO1xuMTc5MjpcdFxuMTc5MzpcdFx0cmV0dXJuIDA7XG4xNzk0Olx0YWRkX2tleTpcbjE3OTU6XHRcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZrZXktXHUwMDNlbm9kZSwgXHUwMDI2YW9faW5mby1cdTAwM2VoZWFkKTtcbjE3OTY6XHRcdHJldHVybiBlcnI7XG4xNzk3Olx0fVxuMTc5ODpcdFxuMTc5OTpcdCNkZWZpbmUgVENQX0FPX0RFTF9LRVlGX0FMTCAoVENQX0FPX0tFWUZfSUZJTkRFWClcbjE4MDA6XHRzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbjE4MDE6XHRcdFx0XHQgIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4xODAyOlx0e1xuMTgwMzpcdFx0c3RydWN0IHRjcF9hb19rZXkgKmtleSwgKm5ld19jdXJyZW50ID0gTlVMTCwgKm5ld19ybmV4dCA9IE5VTEw7XG4xODA0Olx0XHRpbnQgZXJyLCBhZGRyX2xlbiwgbDNpbmRleCA9IDA7XG4xODA1Olx0XHRzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvX2luZm87XG4xODA2Olx0XHR1bmlvbiB0Y3BfYW9fYWRkciAqYWRkcjtcbjE4MDc6XHRcdHN0cnVjdCB0Y3BfYW9fZGVsIGNtZDtcbjE4MDg6XHRcdF9fdTggcHJlZml4O1xuMTgwOTpcdFx0dTE2IHBvcnQ7XG4xODEwOlx0XG4xODExOlx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoY21kKSlcbjE4MTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODEzOlx0XG4xODE0Olx0XHRlcnIgPSBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHIoXHUwMDI2Y21kLCBzaXplb2YoY21kKSwgb3B0dmFsLCBvcHRsZW4pO1xuMTgxNTpcdFx0aWYgKGVycilcbjE4MTY6XHRcdFx0cmV0dXJuIGVycjtcbjE4MTc6XHRcbjE4MTg6XHRcdGlmIChjbWQucmVzZXJ2ZWQgIT0gMCB8fCBjbWQucmVzZXJ2ZWQyICE9IDApXG4xODE5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTgyMDpcdFxuMTgyMTpcdFx0aWYgKGNtZC5zZXRfY3VycmVudCB8fCBjbWQuc2V0X3JuZXh0KSB7XG4xODIyOlx0XHRcdGlmICghdGNwX2FvX2Nhbl9zZXRfY3VycmVudF9ybmV4dChzaykpXG4xODIzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODI0Olx0XHR9XG4xODI1Olx0XG4xODI2Olx0XHRpZiAoY21kLmtleWZsYWdzIFx1MDAyNiB+VENQX0FPX0RFTF9LRVlGX0FMTClcbjE4Mjc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODI4Olx0XG4xODI5Olx0XHQvKiBObyBzYW5pdHkgY2hlY2sgZm9yIFRDUF9BT19LRVlGX0lGSU5ERVggYXMgaWYgYSBWUkZcbjE4MzA6XHRcdCAqIHdhcyBkZXN0cm95ZWQsIHRoZXJlIHN0aWxsIHNob3VsZCBiZSBhIHdheSB0byBkZWxldGUga2V5cyxcbjE4MzE6XHRcdCAqIHRoYXQgd2VyZSBib3VuZCB0byB0aGF0IGwzaW50Zi4gU28sIGZhaWwgbGF0ZSBhdCBsb29rdXAgc3RhZ2VcbjE4MzI6XHRcdCAqIGlmIHRoZXJlIGlzIG5vIGtleSBmb3IgdGhhdCBpZmluZGV4LlxuMTgzMzpcdFx0ICovXG4xODM0Olx0XHRpZiAoY21kLmlmaW5kZXggXHUwMDI2XHUwMDI2ICEoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKSlcbjE4MzU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODM2Olx0XG4xODM3Olx0XHRpZiAoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKVxuMTgzODpcdFx0XHRsM2luZGV4ID0gY21kLmlmaW5kZXg7XG4xODM5Olx0XG4xODQwOlx0XHRhb19pbmZvID0gc2V0c29ja29wdF9hb19pbmZvKHNrKTtcbjE4NDE6XHRcdGlmIChJU19FUlIoYW9faW5mbykpXG4xODQyOlx0XHRcdHJldHVybiBQVFJfRVJSKGFvX2luZm8pO1xuMTg0MzpcdFx0aWYgKCFhb19pbmZvKVxuMTg0NDpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbjE4NDU6XHRcbjE4NDY6XHRcdC8qIEZvciBzb2NrZXRzIGluIFRDUF9DTE9TRUQgaXQmIzM5O3MgcG9zc2libGUgc2V0IGtleXMgdGhhdCBhcmVuJiMzOTt0XG4xODQ3Olx0XHQgKiBtYXRjaGluZyB0aGUgZnV0dXJlIHBlZXIgKGFkZHJlc3MvVlJGL2V0YyksXG4xODQ4Olx0XHQgKiB0Y3BfYW9fY29ubmVjdF9pbml0KCkgd2lsbCBjaG9vc2UgYSBjb3JyZWN0IG1hdGNoaW5nIE1LVFxuMTg0OTpcdFx0ICogaWYgdGhlcmUmIzM5O3MgYW55LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODA2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQX0FPIEtleSBGbGFnIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIGl0IHNlZW1zIHdlJiMzOTtyZSBmaW5hbGx5IGFzc2lnbmluZyBgY21kLmlmaW5kZXhgIHRvIGBsM2luZGV4YCB3aGVuIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyBpcyBzZXQuJiMzNDsgQmVmb3JlIHRoaXMsIGBsM2luZGV4YCB3YXMganVzdCBpbml0aWFsaXplZCB0byB6ZXJvLCBidXQgdGhpcyBjcnVjaWFsIGFzc2lnbm1lbnQgd2FzIG1pc3NpbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcmVtZW1iZXIgaG93IGBjbWRgIGdldHMgcG9wdWxhdGVkIOKAkyB0aGF0JiMzOTtzIHJpZ2h0LCBpdCBjb21lcyBmcm9tIHVzZXJzcGFjZSB2aWEgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAuIFRoYXQgZnVuY3Rpb24mIzM5O3MgaW1wb3J0YW50IGJlY2F1c2UgaXQgY29waWVzIHRoZSBkYXRhIGFuZCB6ZXJvLXBhZHMgaWYgYG9wdGxlbmAgaXMgc21hbGxlciB0aGFuIHRoZSBgY21kYCBzdHJ1Y3QgaXRzZWxmLiBTbywgbm8gbWF0dGVyIHdoYXQsIGBjbWRgIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBlaXRoZXIgZnJvbSB1c2VyIHNwYWNlIG9yIHdpdGggemVyb3MuIFRoZW4sIGBsM2luZGV4YCBjb3JyZWN0bHkgZ2V0cyBpdHMgdmFsdWUuIFRoaXMgYWxsIG1lYW5zIGl0JiMzOTtzIGFuICppbnB1dCogZnJvbSB1c2VyIHNwYWNlLCBhbmQgdGhlcmUmIzM5O3Mgbm8gd2F5IHdlJiMzOTtyZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGxlYWtpbmcgc29tZXRoaW5nIHRvIHVzZXIgc3BhY2UuCgpUaGlzIHBhdGNoLCBpdCYjMzk7cyBjbGVhciBub3csIGZpeGVzIGEgYnVnIHdoZXJlIGBsM2luZGV4YCB3YXMgYmVpbmcgaWdub3JlZCBkdXJpbmcgYFRDUF9BT19ERUxfS0VZYCBgc2V0c29ja29wdGAuIFRoYXQmIzM5O3MgYSBnb29kIGZpeC4KCk5vdywgbXkgbWluZCBnb2VzIHRvIEtNU0FOIOKAkyB0aGUgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIuIElzIHRoaXMgcGF0Y2ggcmVsZXZhbnQ/IERvZXMgaXQgZXhwb3NlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHByb2JsZW0/IE5vLCBkZWZpbml0ZWx5IG5vdC4gYGNtZGAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhhdCBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyYCBmdW5jdGlvbi4gV2UgcmVhZCBgY21kLmlmaW5kZXhgIGZyb20gYGNtZGAsIGFuZCBgY21kYCBpcyBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBBbmQsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGVyZSBpcyBubyBrZXJuZWwgbWVtb3J5IGNvcGllZCB0byB1c2VyIHNwYWNlIGluIHRoaXMgcGF0Y2guIEFjdHVhbGx5LCB3YWl0IC0gSSBzaG91bGQgY2hlY2sgdGhlIHNlbGZ0ZXN0cy4gVGhvc2UgbWlnaHQgYmUgdGhlIGV4Y2VwdGlvbi4gQWgsIGJ1dCB0aGUgc2VsZnRlc3RzIGFyZSBqdXN0IHRlc3RpbmcgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBPa2F5LCBJ4oCZbSBnb29kIHRvIGdvLgoKVGltZSB0byBkb3VibGUtY2hlY2sgdGhhdCBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyYCBmdW5jdGlvbiwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvcHlfc3RydWN0X2Zyb21fc29ja3B0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc29ja3B0ci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc29ja3B0ci5oPTc3PXN0YXRpYyBpbmxpbmUgaW50IGNvcHlfc2FmZV9mcm9tX3NvY2twdHIodm9pZCAqZHN0LCBzaXplX3Qga3NpemUsXG4tLVxuaW5jbHVkZS9saW51eC9zb2NrcHRyLmgtODYtXG5pbmNsdWRlL2xpbnV4L3NvY2twdHIuaDo4NzpzdGF0aWMgaW5saW5lIGludCBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHIodm9pZCAqZHN0LCBzaXplX3Qga3NpemUsXG5pbmNsdWRlL2xpbnV4L3NvY2twdHIuaC04OC1cdFx0c29ja3B0cl90IHNyYywgc2l6ZV90IHVzaXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Nzg4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgOgoKKipEaXNzZWN0aW5nIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGdldHRpbmcgbXlzZWxmIGZhbWlsaWFyIHdpdGggYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAuIFRoYXQgbmFtZSBhbG9uZSBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY2FuIGltbWVkaWF0ZWx5IGluZmVyIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiwgdW5zdXJwcmlzaW5nbHksIGNvcHlpbmcgYSBzdHJ1Y3R1cmUgZnJvbSBhIHNvY2tldCBwb2ludGVyLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQuIFdoYXQga2luZCBvZiBzb2NrZXQ/IFdoYXQmIzM5O3MgdGhlIHNvdXJjZSBzdHJ1Y3R1cmU/IFdoYXQmIzM5O3MgdGhlIGRlc3RpbmF0aW9uPyBBcmUgdGhlcmUgYW55IGRhdGEgY29udmVyc2lvbnMgaGFwcGVuaW5nPyBBbnkgbWVtb3J5IGFsbG9jYXRpb24gY29uc2lkZXJhdGlvbnM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBzb2NrZXQgY29tbXVuaWNhdGlvbiwgYW5kIG1lbW9yeSBzYWZldHkuIE9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQ6IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGJvdW5kYXJ5IGNvbmRpdGlvbnMsIGFuZCBlcnJvciBoYW5kbGluZy4gSSYjMzk7bGwgc3RhcnQgYnkgbG9va2luZyBhdCBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgZGlmZmVyZW50IHNvY2tldCB0eXBlcywgZGF0YSBzaXplcywgYW5kIHBvdGVudGlhbCBlcnJvcnMgZHVyaW5nIHRoZSBkYXRhIHRyYW5zZmVyLiBJJiMzOTtsbCBiZSBzY3J1dGluaXppbmcgdGhlIHJldHVybiB2YWx1ZSBhcyB3ZWxsLiBXaGF0IGRvZXMgaXQgc2lnbmlmeSBpbiB0ZXJtcyBvZiBzdWNjZXNzIG9yIGZhaWx1cmU/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zb2NrcHRyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDc3Olx0c3RhdGljIGlubGluZSBpbnQgY29weV9zYWZlX2Zyb21fc29ja3B0cih2b2lkICpkc3QsIHNpemVfdCBrc2l6ZSxcbiAgNzg6XHRcdFx0XHRcdFx0IHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXG4gIDc5Olx0e1xuICA4MDpcdFx0aWYgKG9wdGxlbiBcdTAwM2Mga3NpemUpXG4gIDgxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA4MjpcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKGRzdCwgb3B0dmFsLCBrc2l6ZSkpXG4gIDgzOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuICA4NDpcdFx0cmV0dXJuIDA7XG4gIDg1Olx0fVxuICA4NjpcdFxuICA4NzpcdHN0YXRpYyBpbmxpbmUgaW50IGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cih2b2lkICpkc3QsIHNpemVfdCBrc2l6ZSxcbiAgODg6XHRcdFx0c29ja3B0cl90IHNyYywgc2l6ZV90IHVzaXplKVxuICA4OTpcdHtcbiAgOTA6XHRcdGlmICghc29ja3B0cl9pc19rZXJuZWwoc3JjKSlcbiAgOTE6XHRcdFx0cmV0dXJuIGNvcHlfc3RydWN0X2Zyb21fdXNlcihkc3QsIGtzaXplLCBzcmMudXNlciwgdXNpemUpO1xuICA5MjpcdFxuICA5MzpcdFx0cmV0dXJuIGNvcHlfc3RydWN0X2Zyb21fYm91bmNlX2J1ZmZlcihkc3QsIGtzaXplLCBzcmMua2VybmVsLCB1c2l6ZSk7XG4gIDk0Olx0fVxuICA5NTpcdFxuICA5NjpcdHN0YXRpYyBpbmxpbmUgaW50IGNvcHlfdG9fc29ja3B0cl9vZmZzZXQoc29ja3B0cl90IGRzdCwgc2l6ZV90IG9mZnNldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODUKCQkJCQkJCW91dHB1dDogMjI3CgkJCQkJCQl0aG91Z2h0czogMzM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRDUC1BT19ERUxfS0VZIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIGlzIHRoZSBmaXggZm9yIGBUQ1BfQU9fREVMX0tFWWAmIzM5O3MgYHNldHNvY2tvcHRgIGNhbGwuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIGNvbXBsZXRlbHkgaWdub3JpbmcgdGhlIGBpZmluZGV4YCBmaWVsZCBwcm92aWRlZCBpbiB0aGUgdXNlci1zdXBwbGllZCBgdGNwX2FvX2RlbGAgc3RydWN0dXJlIHdoZW4gZGVsZXRpbmcgYSBUQ1AtQU8ga2V5LCB3aGljaCBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBidWcuCgpNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgb3IgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAsIHRoZSBtZWNoYW5pc20gdXNlZCB0byBicmluZyBkYXRhIGZyb20gdXNlciBzcGFjZSBpbnRvIHRoZSBrZXJuZWwsIGlzIGluaGVyZW50bHkgc2FmZS4gSWYgdGhlIHVzZXItcHJvdmlkZWQgZGF0YSBpcyBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQsIHRoZSBmdW5jdGlvbiB6ZXJvZXMgb3V0IHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhlIGBjbWRgIHN0cnVjdC4gSWYgaXQmIzM5O3MgbGFyZ2VyLCBpdCBvbmx5IGNvcGllcyB0aGUgcmVxdWlyZWQgc2l6ZSBhbmQgdmVyaWZpZXMgdGhhdCB0aGUgcmVzdCBpcyB6ZXJvZWQgb3V0LiBUaGlzIG1lYW5zIGBjbWRgICppcyBhbHdheXMqIGZ1bGx5IGluaXRpYWxpemVkLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIGEgc2ltcGxlIGFzc2lnbm1lbnQgb2YgYGNtZC5pZmluZGV4YCB0byBgbDNpbmRleGAsICpidXQgb25seSogaWYgdGhlIGBUQ1BfQU9fS0VZRl9JRklOREVYYCBmbGFnIGlzIHNldC4gQ3JpdGljYWxseSwgdGhlcmUmIzM5O3Mgbm8gZmFuY3kgbWVtb3J5IG1hbmlwdWxhdGlvbiBnb2luZyBvbi4gVGhlcmUmIzM5O3Mgbm8gbmV3IGFsbG9jYXRpb24sIG5vIGNvcHlpbmcga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgbm8gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQmIzM5O3MganVzdCByZWFkaW5nIGZyb20gYW4gYWxyZWFkeSBpbml0aWFsaXplZCBzdHJ1Y3R1cmUgYW5kIGFzc2lnbmluZyBpdCB0byBhIGxvY2FsIHZhcmlhYmxlLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgaXMgZnVuY3Rpb25hbGx5IHNhZmUsIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgb3IgaW5mb3JtYXRpb24gbGVha3MgYmVpbmcgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJiMzOTt0IHdhcnJhbnRlZCBoZXJlLiBTdGFuZGFyZCBLQVNBTiwgYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMsIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZnVuY3Rpb25hbCBidWcgaW4gYHRjcF9hb19kZWxfY21kYCB3aGVyZSB0aGUgYGlmaW5kZXhgIGZpZWxkIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgYHRjcF9hb19kZWxgIHN0cnVjdHVyZSB3YXMgaWdub3JlZCB3aGVuIGRlbGV0aW5nIGEgVENQLUFPIGtleS4gVGhlIGBjbWRgIHN0cnVjdHVyZSBpcyBzYWZlbHkgcG9wdWxhdGVkIGZyb20gdXNlciBzcGFjZSB1c2luZyBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyKClgLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCAoZWl0aGVyIGJ5IGNvcHlpbmcgZnJvbSB1c2VyIHNwYWNlIG9yIHplcm8tcGFkZGluZykuIFRoZSBwYXRjaCBzaW1wbHkgcmVhZHMgdGhlIGluaXRpYWxpemVkIGBjbWQuaWZpbmRleGAgZmllbGQgYW5kIGFzc2lnbnMgaXQgdG8gYGwzaW5kZXhgIGlmIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyBpcyBzZXQuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZnVuY3Rpb25hbCBidWcgaW4gYHRjcF9hb19kZWxfY21kYCB3aGVyZSB0aGUgYGlmaW5kZXhgIGZpZWxkIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgYHRjcF9hb19kZWxgIHN0cnVjdHVyZSB3YXMgaWdub3JlZCB3aGVuIGRlbGV0aW5nIGEgVENQLUFPIGtleS4gVGhlIGBjbWRgIHN0cnVjdHVyZSBpcyBzYWZlbHkgcG9wdWxhdGVkIGZyb20gdXNlciBzcGFjZSB1c2luZyBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyKClgLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCAoZWl0aGVyIGJ5IGNvcHlpbmcgZnJvbSB1c2VyIHNwYWNlIG9yIHplcm8tcGFkZGluZykuIFRoZSBwYXRjaCBzaW1wbHkgcmVhZHMgdGhlIGluaXRpYWxpemVkIGBjbWQuaWZpbmRleGAgZmllbGQgYW5kIGFzc2lnbnMgaXQgdG8gYGwzaW5kZXhgIGlmIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyBpcyBzZXQuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6MjM6MzcuNzg3OTE1MjgyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk4NjI2MjgwMjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRDUF9BT1wiLFxuICAgIFwiTkVUX1ZSRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9wYXJzZV9hb1wiLFxuICAgIFwidGNwX3Y0X3BhcnNlX2FvXCIsXG4gICAgXCJ0Y3BfdjZfcGFyc2VfYW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZnVuY3Rpb25hbCBidWcgaW4gYHRjcF9hb19kZWxfY21kYCB3aGVyZSB0aGUgYGlmaW5kZXhgIGZpZWxkIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgYHRjcF9hb19kZWxgIHN0cnVjdHVyZSB3YXMgaWdub3JlZCB3aGVuIGRlbGV0aW5nIGEgVENQLUFPIGtleS4gVGhlIGBjbWRgIHN0cnVjdHVyZSBpcyBzYWZlbHkgcG9wdWxhdGVkIGZyb20gdXNlciBzcGFjZSB1c2luZyBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyKClgLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCAoZWl0aGVyIGJ5IGNvcHlpbmcgZnJvbSB1c2VyIHNwYWNlIG9yIHplcm8tcGFkZGluZykuIFRoZSBwYXRjaCBzaW1wbHkgcmVhZHMgdGhlIGluaXRpYWxpemVkIGBjbWQuaWZpbmRleGAgZmllbGQgYW5kIGFzc2lnbnMgaXQgdG8gYGwzaW5kZXhgIGlmIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyBpcyBzZXQuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBUQ1AtQU8ga2V5IGRlbGV0aW9uIHdoZXJlIHRoZSBpbnRlcmZhY2UgaW5kZXggKFZSRikgd2FzIG5vdCBwcm9wZXJseSBleHRyYWN0ZWQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBjb21tYW5kIHdoZW4gdGhlIFRDUF9BT19LRVlGX0lGSU5ERVggZmxhZyB3YXMgc2V0LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIFRDUCBzZXRzb2Nrb3B0IGxvZ2ljIGZvciBUQ1BfQU9fREVMX0tFWS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6MjM6MzcuNzg3OTE5NzIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc1ODg5MTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGMwMmNiYWY5NWIxNjRiNmM5ZWEyYWI4MTA1MzA3ZTI5ODVhY2QxOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyMiAyMDoyMzozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYW8uYyBiL25ldC9pcHY0L3RjcF9hby5jXFxuaW5kZXggNTA5NDI2NzQ0N2FlZS4uMjY4NjQ2MjFlNmRlZiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfYW8uY1xcbisrKyBiL25ldC9pcHY0L3RjcF9hby5jXFxuQEAgLTE4MzQsNiArMTgzNCw5IEBAIHN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbiBcXHRpZiAoY21kLmlmaW5kZXggXFx1MDAyNlxcdTAwMjYgIShjbWQua2V5ZmxhZ3MgXFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRpZiAoY21kLmtleWZsYWdzIFxcdTAwMjYgVENQX0FPX0tFWUZfSUZJTkRFWClcXG4rXFx0XFx0bDNpbmRleCA9IGNtZC5pZmluZGV4O1xcbitcXG4gXFx0YW9faW5mbyA9IHNldHNvY2tvcHRfYW9faW5mbyhzayk7XFxuIFxcdGlmIChJU19FUlIoYW9faW5mbykpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGFvX2luZm8pO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmNcXG5pbmRleCBkODZiYjM4MGI3OWY3Li4wNDUxZjkyZjQ2NDVkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xcbkBAIC02Myw4ICs2Myw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9sc2sodW5pb24gdGNwX2FkZHIgKmFkZHIsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpXFxuIFxcdHJldHVybiBzaztcXG4gfVxcbiBcXG4tc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxcbi1cXHRcXHRcXHRpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXkpXFxuK3N0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgaW50IGlmaW5kZXgsXFxuK1xcdFxcdFxcdGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0IGFvX2luZm8gPSB7fTtcXG4gXFx0c3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0IGtleSA9IHt9O1xcbkBAIC03Niw2ICs3NiwxMCBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXFxuIFxcdGRlbC5wcmVmaXggPSBERUZBVUxUX1RFU1RfUFJFRklYO1xcbiBcXHRkZWwuc25kaWQgPSBzbmRpZDtcXG4gXFx0ZGVsLnJjdmlkID0gcmN2aWQ7XFxuK1xcdGlmIChpZmluZGV4KSB7XFxuK1xcdFxcdGRlbC5rZXlmbGFncyA9IFRDUF9BT19LRVlGX0lGSU5ERVg7XFxuK1xcdFxcdGRlbC5pZmluZGV4ID0gaWZpbmRleDtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGN1cnJlbnRfa2V5IFxcdTAwM2U9IDApIHtcXG4gXFx0XFx0ZGVsLnNldF9jdXJyZW50ID0gMTtcXG5AQCAtOTUsNyArOTksOCBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXFxuIFxcbiBcXHR0Y3BfYWRkcl90b19zb2NrYWRkcl9pbihcXHUwMDI2c29ja2FkZHIsIFxcdTAwMjZ0aGlzX2lwX2Rlc3QsIDApO1xcbiBcXHRlcnIgPSB0ZXN0X2dldF9vbmVfYW8oc2ssIFxcdTAwMjZrZXksIFxcdTAwMjZzb2NrYWRkciwgc2l6ZW9mKHNvY2thZGRyKSxcXG4tXFx0XFx0XFx0ICAgICAgREVGQVVMVF9URVNUX1BSRUZJWCwgc25kaWQsIHJjdmlkKTtcXG4rXFx0XFx0XFx0ICAgICAgREVGQVVMVF9URVNUX1BSRUZJWCwgc25kaWQsIHJjdmlkLFxcbitcXHRcXHRcXHQgICAgICBkZWwua2V5ZmxhZ3MsIGRlbC5pZmluZGV4KTtcXG4gXFx0aWYgKCFlcnIpXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXHRpZiAoZXJyICE9IC1FMkJJRylcXG5AQCAtMTEyLDEyICsxMTcsMTIgQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB0cnlfZGVsZXRlX2tleShjaGFyICp0c3RfbmFtZSwgaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLFxcbi1cXHRcXHRcXHQgICBib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXksXFxuK1xcdFxcdFxcdCAgIGludCBpZmluZGV4LCBib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXksXFxuIFxcdFxcdFxcdCAgIGZhdWx0X3QgaW5qKVxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRlcnIgPSB0ZXN0X2RlbF9rZXkoc2ssIHNuZGlkLCByY3ZpZCwgYXN5bmMsIGN1cnJlbnRfa2V5LCBybmV4dF9rZXkpO1xcbitcXHRlcnIgPSB0ZXN0X2RlbF9rZXkoc2ssIHNuZGlkLCByY3ZpZCwgaWZpbmRleCwgYXN5bmMsIGN1cnJlbnRfa2V5LCBybmV4dF9rZXkpO1xcbiBcXHRpZiAoKGVyciA9PSAtRUJVU1kgXFx1MDAyNlxcdTAwMjYgZmF1bHQoQlVTWSkpIHx8IChlcnIgPT0gLUVJTlZBTCBcXHUwMDI2XFx1MDAyNiBmYXVsdChDVVJSTkVYVCkpKSB7XFxuIFxcdFxcdHRlc3Rfb2soXFxcIiVzOiBrZXkgZGVsZXRpb24gd2FzIHByZXZlbnRlZFxcXCIsIHRzdF9uYW1lKTtcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0yMzYsMTUgKzI0MSwxNSBAQCBzdGF0aWMgdm9pZCBjaGVja19jbG9zZWRfc29ja2V0KHZvaWQpXFxuIFxcdGludCBzaztcXG4gXFxuIFxcdHNrID0gcHJlcGFyZV9zayhcXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XFxuLVxcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXlcXFwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7XFxuLVxcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcXFwiLCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgMCk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXlcXFwiLCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcXFwiLCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgMCk7XFxuIFxcdGNsb3NlKHNrKTtcXG4gXFxuIFxcdHNrID0gcHJlcGFyZV9zayhcXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XFxuIFxcdGlmICh0ZXN0X3NldF9rZXkoc2ssIDEwMCwgMjAwKSlcXG4gXFx0XFx0dGVzdF9lcnJvcihcXFwiZmFpbGVkIHRvIHNldCBjdXJyZW50L3JuZXh0IGtleXNcXFwiKTtcXG4tXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleVxcXCIsIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcXG4tXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXlcXFwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXlcXFwiLCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgcm5leHQga2V5XFxcIiwgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xcbiBcXHRjbG9zZShzayk7XFxuIFxcbiBcXHRzayA9IHByZXBhcmVfc2soXFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xcbkBAIC0yNTQsMTAgKzI1OSwxMiBAQCBzdGF0aWMgdm9pZCBjaGVja19jbG9zZWRfc29ja2V0KHZvaWQpXFxuIFxcdGlmICh0ZXN0X2FkZF9rZXkoc2ssIFxcXCJHbG9yeSB0byBVa3JhaW5lIVxcXCIsIHRoaXNfaXBfZGVzdCxcXG4gXFx0XFx0XFx0IERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpXFxuIFxcdFxcdHRlc3RfZXJyb3IoXFxcInRlc3RfYWRkX2tleSgpXFxcIik7XFxuLVxcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXkgKyBzZXQgY3VycmVudC9ybmV4dFxcXCIsIHNrLCAxMDAsIDEwMCwgMCwgMTAsIDEzLCAwKTtcXG4tXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBjdXJyZW50IGtleVxcXCIsIHNrLCAxMCwgMTEsIDAsIDIwMCwgLTEsIDApO1xcbi1cXHR0cnlfZGVsZXRlX2tleShcXFwiY2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleVxcXCIsIHNrLCAxMiwgMTMsIDAsIC0xLCAyMDAsIDApO1xcbi1cXHR0cnlfZGVsZXRlX2tleShcXFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQrcm5leHQga2V5XFxcIiwgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xcbitcXHR0cnlfZGVsZXRlX2tleShcXFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5ICsgc2V0IGN1cnJlbnQvcm5leHRcXFwiLCBzayxcXG4rXFx0XFx0ICAgICAgIDEwMCwgMTAwLCAwLCAwLCAxMCwgMTMsIDApO1xcbitcXHR0cnlfZGVsZXRlX2tleShcXFwiY2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5XFxcIiwgc2ssIDEwLCAxMSwgMCwgMCwgMjAwLCAtMSwgMCk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5XFxcIiwgc2ssIDEyLCAxMywgMCwgMCwgLTEsIDIwMCwgMCk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCtybmV4dCBrZXlcXFwiLCBzayxcXG4rXFx0XFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xcbiBcXHRjbG9zZShzayk7XFxuIFxcbiBcXHRzayA9IHByZXBhcmVfc2soXFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xcbkBAIC0yNzIsNiArMjc5LDE4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcXG4gXFx0XFx0XFx0XFx0ICB0aGlzX2lwX2Rlc3QsIERFRkFVTFRfVEVTVF9QUkVGSVgsXFxuIFxcdFxcdFxcdFxcdCAgZmFsc2UsIHRydWUsIDIwLCAxMCwgMCk7XFxuIFxcdGNsb3NlKHNrKTtcXG4rXFxuK1xcdGlmICghc2hvdWxkX3NraXBfdGVzdChcXFwiY2xvc2VkIHNvY2tldCwgYWRkICsgZGVsZXRlIFZSRi1zY29wZWQga2V5XFxcIixcXG4rXFx0XFx0XFx0ICAgICAgS0NPTkZJR19ORVRfVlJGKSkge1xcbitcXHRcXHRzayA9IHByZXBhcmVfc2soXFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xcbitcXHRcXHRpZiAodGVzdF9hZGRfa2V5X3ZyZihzaywgU0VDT05EX1BBU1NXT1JELCBUQ1BfQU9fS0VZRl9JRklOREVYLFxcbitcXHRcXHRcXHRcXHQgICAgIHRoaXNfaXBfZGVzdCwgREVGQVVMVF9URVNUX1BSRUZJWCxcXG4rXFx0XFx0XFx0XFx0ICAgICB0ZXN0X3ZyZl9pZmluZGV4LCAyMDEsIDIwMSkpXFxuK1xcdFxcdFxcdHRlc3RfZXJyb3IoXFxcInRlc3RfYWRkX2tleV92cmYoKVxcXCIpO1xcbitcXHRcXHR0cnlfZGVsZXRlX2tleShcXFwiY2xvc2VkIHNvY2tldCwgYWRkICsgZGVsZXRlIFZSRi1zY29wZWQga2V5XFxcIiwgc2ssIDIwMSwgMjAxLFxcbitcXHRcXHRcXHQgICAgICAgdGVzdF92cmZfaWZpbmRleCwgMCwgLTEsIC0xLCAwKTtcXG4rXFx0XFx0Y2xvc2Uoc2spO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGFzc2VydF9ub19jdXJyZW50X3JuZXh0KGNvbnN0IGNoYXIgKnRzdF9tc2csIGludCBzaylcXG5AQCAtMzIyLDggKzM0MSw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2xpc3Rlbl9zb2NrZXQodm9pZClcXG4gXFx0aW50IHNrLCBlcnI7XFxuIFxcbiBcXHRzayA9IHByZXBhcmVfbHNrKFxcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcXG4tXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVxcXCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCAwKTtcXG4tXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1xcXCIsIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCAwKTtcXG4rXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVxcXCIsIHNrLCAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCAwKTtcXG4rXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1xcXCIsIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTtcXG4gXFx0Y2xvc2Uoc2spO1xcbiBcXG4gXFx0c2sgPSBwcmVwYXJlX2xzayhcXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XFxuQEAgLTM0NSw4ICszNjQsMTAgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKVxcbiBcXHRpZiAobGlzdGVuKHNrLCAxMCkpXFxuIFxcdFxcdHRlc3RfZXJyb3IoXFxcImxpc3RlbigpXFxcIik7XFxuIFxcdGFzc2VydF9ub19jdXJyZW50X3JuZXh0KFxcXCJsaXN0ZW4oKSBhZnRlciBjdXJyZW50L3JuZXh0IGtleXMgc2V0XFxcIiwgc2spO1xcbi1cXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXFxcIiwgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcXG4tXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcXFwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpO1xcbitcXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXFxcIiwgc2ssXFxuK1xcdFxcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgcm5leHQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXFxcIiwgc2ssXFxuK1xcdFxcdCAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XFxuIFxcdGNsb3NlKHNrKTtcXG4gXFxuIFxcdGFzc2VydF9ub190Y3BfcmVwYWlyKCk7XFxuQEAgLTM1OSwxMyArMzgwLDEzIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2xpc3Rlbl9zb2NrZXQodm9pZClcXG4gXFx0XFx0XFx0IERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpXFxuIFxcdFxcdHRlc3RfZXJyb3IoXFxcInRlc3RfYWRkX2tleSgpXFxcIik7XFxuIFxcdHRyeV9kZWxldGVfa2V5KFxcXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXkgKyBzZXQgY3VycmVudC9ybmV4dFxcXCIsIHNrLFxcbi1cXHRcXHQgICAgICAgMTAwLCAxMDAsIDAsIDEwLCAxMywgRkFVTFRfQ1VSUk5FWFQpO1xcbitcXHRcXHQgICAgICAgMTAwLCAxMDAsIDAsIDAsIDEwLCAxMywgRkFVTFRfQ1VSUk5FWFQpO1xcbiBcXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5XFxcIiwgc2ssXFxuLVxcdFxcdCAgICAgICAxMCwgMTEsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTtcXG4rXFx0XFx0ICAgICAgIDEwLCAxMSwgMCwgMCwgMjAwLCAtMSwgRkFVTFRfQ1VSUk5FWFQpO1xcbiBcXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleVxcXCIsIHNrLFxcbi1cXHRcXHQgICAgICAgMTIsIDEzLCAwLCAtMSwgMjAwLCBGQVVMVF9DVVJSTkVYVCk7XFxuK1xcdFxcdCAgICAgICAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTtcXG4gXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVxcXCIsIHNrLFxcbi1cXHRcXHQgICAgICAgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7XFxuK1xcdFxcdCAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCAwKTtcXG4gXFx0Y2xvc2Uoc2spO1xcbiBcXG4gXFx0c2sgPSBwcmVwYXJlX2xzayhcXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XFxuQEAgLTExMzEsNyArMTE1Miw2IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCh2b2lkKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBwb3J0ID0gdGVzdF9zZXJ2ZXJfcG9ydDtcXG4gXFxuLVxcdHNldHVwX3ZyZnMoKTtcXG4gXFx0dHJ5X2NsaWVudF9ydW4oXFxcImNsaWVudDogQ2hlY2sgY3VycmVudC9ybmV4dCBrZXlzIHVuc2V0IGJlZm9yZSBjb25uZWN0KClcXFwiLFxcbiBcXHRcXHQgICAgICAgcG9ydCsrLCAyMCwgLTEsIC0xKTtcXG4gXFx0dHJ5X2NsaWVudF9ydW4oXFxcImNsaWVudDogQ2hlY2sgY3VycmVudC9ybmV4dCBrZXlzIHNldCBiZWZvcmUgY29ubmVjdCgpXFxcIixcXG5AQCAtMTE1MCw2ICsxMTcwLDcgQEAgc3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpXFxuIHtcXG4gXFx0aWYgKGluZXRfcHRvbihURVNUX0ZBTUlMWSwgVEVTVF9XUk9OR19JUCwgXFx1MDAyNndyb25nX2FkZHIpICE9IDEpXFxuIFxcdFxcdHRlc3RfZXJyb3IoXFxcIkNhbid0IGNvbnZlcnQgaXAgYWRkcmVzcyAlc1xcXCIsIFRFU1RfV1JPTkdfSVApO1xcbitcXHRzZXR1cF92cmZzKCk7XFxuIFxcdGNoZWNrX2Nsb3NlZF9zb2NrZXQoKTtcXG4gXFx0Y2hlY2tfbGlzdGVuX3NvY2tldCgpO1xcbiBcXHRjaGVja19lc3RhYmxpc2hlZF9zb2NrZXQoKTtcXG5AQCAtMTE1OCw2ICsxMTc5LDYgQEAgc3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpXFxuIFxcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiB7XFxuLVxcdHRlc3RfaW5pdCgxMjEsIHNlcnZlcl9mbiwgY2xpZW50X2ZuKTtcXG4rXFx0dGVzdF9pbml0KDEyMiwgc2VydmVyX2ZuLCBjbGllbnRfZm4pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaFxcbmluZGV4IGViYjI4OTljMTJmZTAuLjUzYmUxNzQ0MjM3ZWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmhcXG5AQCAtNDA0LDcgKzQwNCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfcHJlcGFyZV9kZWZfa2V5KHN0cnVjdCB0Y3BfYW9fYWRkICphbyxcXG4gXFxuIGV4dGVybiBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsXFxuIFxcdFxcdFxcdCAgIHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LFxcbi1cXHRcXHRcXHQgICB1aW50OF90IHByZWZpeCwgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCk7XFxuK1xcdFxcdFxcdCAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLFxcbitcXHRcXHRcXHQgICB1aW50OF90IGtleWZsYWdzLCBpbnQgaWZpbmRleCk7XFxuIGV4dGVybiBpbnQgdGVzdF9nZXRfYW9faW5mbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgKm91dCk7XFxuIGV4dGVybiBpbnQgdGVzdF9zZXRfYW9faW5mbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgKmluKTtcXG4gZXh0ZXJuIGludCB0ZXN0X2NtcF9nZXRzb2Nrb3B0X3NldHNvY2tvcHQoY29uc3Qgc3RydWN0IHRjcF9hb19hZGQgKmEsXFxuQEAgLTQxOCw3ICs0MTksOCBAQCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3ZlcmlmeV9zb2NrZXRfa2V5KGludCBzaywgc3RydWN0IHRjcF9hb19hZGQgKmtleSlcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgXFx1MDAyNmtleTIsIFxcdTAwMjZrZXktXFx1MDAzZWFkZHIsIHNpemVvZihrZXktXFx1MDAzZWFkZHIpLFxcbi1cXHRcXHRcXHQgICAgICBrZXktXFx1MDAzZXByZWZpeCwga2V5LVxcdTAwM2VzbmRpZCwga2V5LVxcdTAwM2VyY3ZpZCk7XFxuK1xcdFxcdFxcdCAgICAgIGtleS1cXHUwMDNlcHJlZml4LCBrZXktXFx1MDAzZXNuZGlkLCBrZXktXFx1MDAzZXJjdmlkLFxcbitcXHRcXHRcXHQgICAgICBrZXktXFx1MDAzZWtleWZsYWdzLCBrZXktXFx1MDAzZWlmaW5kZXgpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jXFxuaW5kZXggZWY4ZTkwMzFkNDdhMy4uMmU3YjA2YTFhMTU2NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcXG5AQCAtMjUyLDcgKzI1Miw3IEBAIHN0YXRpYyBpbnQgdGVzdF9nZXRfYW9fa2V5c19ucihpbnQgc2spXFxuIFxcbiBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsXFxuIFxcdFxcdHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LCB1aW50OF90IHByZWZpeCxcXG4tXFx0XFx0dWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZClcXG4rXFx0XFx0dWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgdWludDhfdCBrZXlmbGFncywgaW50IGlmaW5kZXgpXFxuIHtcXG4gXFx0c3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0IHRtcCA9IHt9O1xcbiBcXHRzb2NrbGVuX3QgdG1wX3N6ID0gc2l6ZW9mKHRtcCk7XFxuQEAgLTI2Miw2ICsyNjIsOCBAQCBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsXFxuIFxcdHRtcC5wcmVmaXggPSBwcmVmaXg7XFxuIFxcdHRtcC5zbmRpZCAgPSBzbmRpZDtcXG4gXFx0dG1wLnJjdmlkICA9IHJjdmlkO1xcbitcXHR0bXAua2V5ZmxhZ3MgPSBrZXlmbGFncztcXG4rXFx0dG1wLmlmaW5kZXggPSBpZmluZGV4O1xcbiBcXHR0bXAubmtleXMgID0gMTtcXG4gXFxuIFxcdHJldCA9IGdldHNvY2tvcHQoc2ssIElQUFJPVE9fVENQLCBUQ1BfQU9fR0VUX0tFWVMsIFxcdTAwMjZ0bXAsIFxcdTAwMjZ0bXBfc3opO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDoyMzozOS4xNjQ0MzEzODhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1Njc1MjU2MzY4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0FPXCIsXG4gICAgXCJORVRfVlJGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3BhcnNlX2FvXCIsXG4gICAgXCJ0Y3BfdjRfcGFyc2VfYW9cIixcbiAgICBcInRjcF92Nl9wYXJzZV9hb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIFRDUC1BTyBrZXkgZGVsZXRpb24gd2hlcmUgdGhlIGludGVyZmFjZSBpbmRleCAoVlJGKSB3YXMgbm90IHByb3Blcmx5IGV4dHJhY3RlZCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIGNvbW1hbmQgd2hlbiB0aGUgVENQX0FPX0tFWUZfSUZJTkRFWCBmbGFnIHdhcyBzZXQuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgVENQIHNldHNvY2tvcHQgbG9naWMgZm9yIFRDUF9BT19ERUxfS0VZLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0YzAyY2JhZjk1YjE2NGI2YzllYTJhYjgxMDUzMDdlMjk4NWFjZDE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMjA6MjM6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYW8uYyBiL25ldC9pcHY0L3RjcF9hby5jXG5pbmRleCA1MDk0MjY3NDQ3YWVlLi4yNjg2NDYyMWU2ZGVmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2FvLmNcbisrKyBiL25ldC9pcHY0L3RjcF9hby5jXG5AQCAtMTgzNCw2ICsxODM0LDkgQEAgc3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4gXHRpZiAoY21kLmlmaW5kZXggXHUwMDI2XHUwMDI2ICEoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRpZiAoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKVxuK1x0XHRsM2luZGV4ID0gY21kLmlmaW5kZXg7XG4rXG4gXHRhb19pbmZvID0gc2V0c29ja29wdF9hb19pbmZvKHNrKTtcbiBcdGlmIChJU19FUlIoYW9faW5mbykpXG4gXHRcdHJldHVybiBQVFJfRVJSKGFvX2luZm8pO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xuaW5kZXggZDg2YmIzODBiNzlmNy4uMDQ1MWY5MmY0NjQ1ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jXG5AQCAtNjMsOCArNjMsOCBAQCBzdGF0aWMgaW50IHByZXBhcmVfbHNrKHVuaW9uIHRjcF9hZGRyICphZGRyLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKVxuIFx0cmV0dXJuIHNrO1xuIH1cbiBcbi1zdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXG4tXHRcdFx0aW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5KVxuK3N0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgaW50IGlmaW5kZXgsXG4rXHRcdFx0Ym9vbCBhc3luYywgaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5KVxuIHtcbiBcdHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgYW9faW5mbyA9IHt9O1xuIFx0c3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0IGtleSA9IHt9O1xuQEAgLTc2LDYgKzc2LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbiBcdGRlbC5wcmVmaXggPSBERUZBVUxUX1RFU1RfUFJFRklYO1xuIFx0ZGVsLnNuZGlkID0gc25kaWQ7XG4gXHRkZWwucmN2aWQgPSByY3ZpZDtcbitcdGlmIChpZmluZGV4KSB7XG4rXHRcdGRlbC5rZXlmbGFncyA9IFRDUF9BT19LRVlGX0lGSU5ERVg7XG4rXHRcdGRlbC5pZmluZGV4ID0gaWZpbmRleDtcbitcdH1cbiBcbiBcdGlmIChjdXJyZW50X2tleSBcdTAwM2U9IDApIHtcbiBcdFx0ZGVsLnNldF9jdXJyZW50ID0gMTtcbkBAIC05NSw3ICs5OSw4IEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbiBcbiBcdHRjcF9hZGRyX3RvX3NvY2thZGRyX2luKFx1MDAyNnNvY2thZGRyLCBcdTAwMjZ0aGlzX2lwX2Rlc3QsIDApO1xuIFx0ZXJyID0gdGVzdF9nZXRfb25lX2FvKHNrLCBcdTAwMjZrZXksIFx1MDAyNnNvY2thZGRyLCBzaXplb2Yoc29ja2FkZHIpLFxuLVx0XHRcdCAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCk7XG4rXHRcdFx0ICAgICAgREVGQVVMVF9URVNUX1BSRUZJWCwgc25kaWQsIHJjdmlkLFxuK1x0XHRcdCAgICAgIGRlbC5rZXlmbGFncywgZGVsLmlmaW5kZXgpO1xuIFx0aWYgKCFlcnIpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFx0aWYgKGVyciAhPSAtRTJCSUcpXG5AQCAtMTEyLDEyICsxMTcsMTIgQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxuIH1cbiBcbiBzdGF0aWMgdm9pZCB0cnlfZGVsZXRlX2tleShjaGFyICp0c3RfbmFtZSwgaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLFxuLVx0XHRcdCAgIGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSxcbitcdFx0XHQgICBpbnQgaWZpbmRleCwgYm9vbCBhc3luYywgaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5LFxuIFx0XHRcdCAgIGZhdWx0X3QgaW5qKVxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSB0ZXN0X2RlbF9rZXkoc2ssIHNuZGlkLCByY3ZpZCwgYXN5bmMsIGN1cnJlbnRfa2V5LCBybmV4dF9rZXkpO1xuK1x0ZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGlmaW5kZXgsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTtcbiBcdGlmICgoZXJyID09IC1FQlVTWSBcdTAwMjZcdTAwMjYgZmF1bHQoQlVTWSkpIHx8IChlcnIgPT0gLUVJTlZBTCBcdTAwMjZcdTAwMjYgZmF1bHQoQ1VSUk5FWFQpKSkge1xuIFx0XHR0ZXN0X29rKFwiJXM6IGtleSBkZWxldGlvbiB3YXMgcHJldmVudGVkXCIsIHRzdF9uYW1lKTtcbiBcdFx0cmV0dXJuO1xuQEAgLTIzNiwxNSArMjQxLDE1IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcbiBcdGludCBzaztcbiBcbiBcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5XCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzXCIsIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCAwKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5XCIsIHNrLCAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCAwKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzXCIsIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbiBcdGlmICh0ZXN0X3NldF9rZXkoc2ssIDEwMCwgMjAwKSlcbiBcdFx0dGVzdF9lcnJvcihcImZhaWxlZCB0byBzZXQgY3VycmVudC9ybmV4dCBrZXlzXCIpO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXlcIiwgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgcm5leHQga2V5XCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5XCIsIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleVwiLCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRzayA9IHByZXBhcmVfc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG5AQCAtMjU0LDEwICsyNTksMTIgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKVxuIFx0aWYgKHRlc3RfYWRkX2tleShzaywgXCJHbG9yeSB0byBVa3JhaW5lIVwiLCB0aGlzX2lwX2Rlc3QsXG4gXHRcdFx0IERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpXG4gXHRcdHRlc3RfZXJyb3IoXCJ0ZXN0X2FkZF9rZXkoKVwiKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5ICsgc2V0IGN1cnJlbnQvcm5leHRcIiwgc2ssIDEwMCwgMTAwLCAwLCAxMCwgMTMsIDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcIiwgc2ssIDEwLCAxMSwgMCwgMjAwLCAtMSwgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBybmV4dCBrZXlcIiwgc2ssIDEyLCAxMywgMCwgLTEsIDIwMCwgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50K3JuZXh0IGtleVwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4rXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSArIHNldCBjdXJyZW50L3JuZXh0XCIsIHNrLFxuK1x0XHQgICAgICAgMTAwLCAxMDAsIDAsIDAsIDEwLCAxMywgMCk7XG4rXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBjdXJyZW50IGtleVwiLCBzaywgMTAsIDExLCAwLCAwLCAyMDAsIC0xLCAwKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleVwiLCBzaywgMTIsIDEzLCAwLCAwLCAtMSwgMjAwLCAwKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQrcm5leHQga2V5XCIsIHNrLFxuK1x0XHQgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRzayA9IHByZXBhcmVfc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG5AQCAtMjcyLDYgKzI3OSwxOCBAQCBzdGF0aWMgdm9pZCBjaGVja19jbG9zZWRfc29ja2V0KHZvaWQpXG4gXHRcdFx0XHQgIHRoaXNfaXBfZGVzdCwgREVGQVVMVF9URVNUX1BSRUZJWCxcbiBcdFx0XHRcdCAgZmFsc2UsIHRydWUsIDIwLCAxMCwgMCk7XG4gXHRjbG9zZShzayk7XG4rXG4rXHRpZiAoIXNob3VsZF9za2lwX3Rlc3QoXCJjbG9zZWQgc29ja2V0LCBhZGQgKyBkZWxldGUgVlJGLXNjb3BlZCBrZXlcIixcbitcdFx0XHQgICAgICBLQ09ORklHX05FVF9WUkYpKSB7XG4rXHRcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbitcdFx0aWYgKHRlc3RfYWRkX2tleV92cmYoc2ssIFNFQ09ORF9QQVNTV09SRCwgVENQX0FPX0tFWUZfSUZJTkRFWCxcbitcdFx0XHRcdCAgICAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLFxuK1x0XHRcdFx0ICAgICB0ZXN0X3ZyZl9pZmluZGV4LCAyMDEsIDIwMSkpXG4rXHRcdFx0dGVzdF9lcnJvcihcInRlc3RfYWRkX2tleV92cmYoKVwiKTtcbitcdFx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBhZGQgKyBkZWxldGUgVlJGLXNjb3BlZCBrZXlcIiwgc2ssIDIwMSwgMjAxLFxuK1x0XHRcdCAgICAgICB0ZXN0X3ZyZl9pZmluZGV4LCAwLCAtMSwgLTEsIDApO1xuK1x0XHRjbG9zZShzayk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGFzc2VydF9ub19jdXJyZW50X3JuZXh0KGNvbnN0IGNoYXIgKnRzdF9tc2csIGludCBzaylcbkBAIC0zMjIsOCArMzQxLDggQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKVxuIFx0aW50IHNrLCBlcnI7XG4gXG4gXHRzayA9IHByZXBhcmVfbHNrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgYWxsIGtleXNcIiwgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgYWxsIGtleXNcIiwgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIDApO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX2xzayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0zNDUsOCArMzY0LDEwIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2xpc3Rlbl9zb2NrZXQodm9pZClcbiBcdGlmIChsaXN0ZW4oc2ssIDEwKSlcbiBcdFx0dGVzdF9lcnJvcihcImxpc3RlbigpXCIpO1xuIFx0YXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoXCJsaXN0ZW4oKSBhZnRlciBjdXJyZW50L3JuZXh0IGtleXMgc2V0XCIsIHNrKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXCIsIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XG4tXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcIiwgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcbitcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXCIsIHNrLFxuK1x0XHQgICAgICAgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgcm5leHQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXCIsIHNrLFxuK1x0XHQgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0YXNzZXJ0X25vX3RjcF9yZXBhaXIoKTtcbkBAIC0zNTksMTMgKzM4MCwxMyBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRcdFx0IERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpXG4gXHRcdHRlc3RfZXJyb3IoXCJ0ZXN0X2FkZF9rZXkoKVwiKTtcbiBcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5ICsgc2V0IGN1cnJlbnQvcm5leHRcIiwgc2ssXG4tXHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMTAsIDEzLCBGQVVMVF9DVVJSTkVYVCk7XG4rXHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCBGQVVMVF9DVVJSTkVYVCk7XG4gXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBjdXJyZW50IGtleVwiLCBzayxcbi1cdFx0ICAgICAgIDEwLCAxMSwgMCwgMjAwLCAtMSwgRkFVTFRfQ1VSUk5FWFQpO1xuK1x0XHQgICAgICAgMTAsIDExLCAwLCAwLCAyMDAsIC0xLCBGQVVMVF9DVVJSTkVYVCk7XG4gXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBybmV4dCBrZXlcIiwgc2ssXG4tXHRcdCAgICAgICAxMiwgMTMsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTtcbitcdFx0ICAgICAgIDEyLCAxMywgMCwgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpO1xuIFx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXlcIiwgc2ssXG4tXHRcdCAgICAgICAyMDAsIDIwMCwgMCwgLTEsIC0xLCAwKTtcbitcdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX2xzayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0xMTMxLDcgKzExNTIsNiBAQCBzdGF0aWMgdm9pZCBjaGVja19lc3RhYmxpc2hlZF9zb2NrZXQodm9pZClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgcG9ydCA9IHRlc3Rfc2VydmVyX3BvcnQ7XG4gXG4tXHRzZXR1cF92cmZzKCk7XG4gXHR0cnlfY2xpZW50X3J1bihcImNsaWVudDogQ2hlY2sgY3VycmVudC9ybmV4dCBrZXlzIHVuc2V0IGJlZm9yZSBjb25uZWN0KClcIixcbiBcdFx0ICAgICAgIHBvcnQrKywgMjAsIC0xLCAtMSk7XG4gXHR0cnlfY2xpZW50X3J1bihcImNsaWVudDogQ2hlY2sgY3VycmVudC9ybmV4dCBrZXlzIHNldCBiZWZvcmUgY29ubmVjdCgpXCIsXG5AQCAtMTE1MCw2ICsxMTcwLDcgQEAgc3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpXG4ge1xuIFx0aWYgKGluZXRfcHRvbihURVNUX0ZBTUlMWSwgVEVTVF9XUk9OR19JUCwgXHUwMDI2d3JvbmdfYWRkcikgIT0gMSlcbiBcdFx0dGVzdF9lcnJvcihcIkNhbid0IGNvbnZlcnQgaXAgYWRkcmVzcyAlc1wiLCBURVNUX1dST05HX0lQKTtcbitcdHNldHVwX3ZyZnMoKTtcbiBcdGNoZWNrX2Nsb3NlZF9zb2NrZXQoKTtcbiBcdGNoZWNrX2xpc3Rlbl9zb2NrZXQoKTtcbiBcdGNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCgpO1xuQEAgLTExNTgsNiArMTE3OSw2IEBAIHN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKVxuIFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuLVx0dGVzdF9pbml0KDEyMSwgc2VydmVyX2ZuLCBjbGllbnRfZm4pO1xuK1x0dGVzdF9pbml0KDEyMiwgc2VydmVyX2ZuLCBjbGllbnRfZm4pO1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXG5pbmRleCBlYmIyODk5YzEyZmUwLi41M2JlMTc0NDIzN2VlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaFxuQEAgLTQwNCw3ICs0MDQsOCBAQCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3ByZXBhcmVfZGVmX2tleShzdHJ1Y3QgdGNwX2FvX2FkZCAqYW8sXG4gXG4gZXh0ZXJuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcbiBcdFx0XHQgICB2b2lkICphZGRyLCBzaXplX3QgYWRkcl9zeixcbi1cdFx0XHQgICB1aW50OF90IHByZWZpeCwgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCk7XG4rXHRcdFx0ICAgdWludDhfdCBwcmVmaXgsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsXG4rXHRcdFx0ICAgdWludDhfdCBrZXlmbGFncywgaW50IGlmaW5kZXgpO1xuIGV4dGVybiBpbnQgdGVzdF9nZXRfYW9faW5mbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgKm91dCk7XG4gZXh0ZXJuIGludCB0ZXN0X3NldF9hb19pbmZvKGludCBzaywgc3RydWN0IHRjcF9hb19pbmZvX29wdCAqaW4pO1xuIGV4dGVybiBpbnQgdGVzdF9jbXBfZ2V0c29ja29wdF9zZXRzb2Nrb3B0KGNvbnN0IHN0cnVjdCB0Y3BfYW9fYWRkICphLFxuQEAgLTQxOCw3ICs0MTksOCBAQCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3ZlcmlmeV9zb2NrZXRfa2V5KGludCBzaywgc3RydWN0IHRjcF9hb19hZGQgKmtleSlcbiBcdGludCBlcnI7XG4gXG4gXHRlcnIgPSB0ZXN0X2dldF9vbmVfYW8oc2ssIFx1MDAyNmtleTIsIFx1MDAyNmtleS1cdTAwM2VhZGRyLCBzaXplb2Yoa2V5LVx1MDAzZWFkZHIpLFxuLVx0XHRcdCAgICAgIGtleS1cdTAwM2VwcmVmaXgsIGtleS1cdTAwM2VzbmRpZCwga2V5LVx1MDAzZXJjdmlkKTtcbitcdFx0XHQgICAgICBrZXktXHUwMDNlcHJlZml4LCBrZXktXHUwMDNlc25kaWQsIGtleS1cdTAwM2VyY3ZpZCxcbitcdFx0XHQgICAgICBrZXktXHUwMDNla2V5ZmxhZ3MsIGtleS1cdTAwM2VpZmluZGV4KTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jXG5pbmRleCBlZjhlOTAzMWQ0N2EzLi4yZTdiMDZhMWExNTY3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcbkBAIC0yNTIsNyArMjUyLDcgQEAgc3RhdGljIGludCB0ZXN0X2dldF9hb19rZXlzX25yKGludCBzaylcbiBcbiBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsXG4gXHRcdHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LCB1aW50OF90IHByZWZpeCxcbi1cdFx0dWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZClcbitcdFx0dWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgdWludDhfdCBrZXlmbGFncywgaW50IGlmaW5kZXgpXG4ge1xuIFx0c3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0IHRtcCA9IHt9O1xuIFx0c29ja2xlbl90IHRtcF9zeiA9IHNpemVvZih0bXApO1xuQEAgLTI2Miw2ICsyNjIsOCBAQCBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsXG4gXHR0bXAucHJlZml4ID0gcHJlZml4O1xuIFx0dG1wLnNuZGlkICA9IHNuZGlkO1xuIFx0dG1wLnJjdmlkICA9IHJjdmlkO1xuK1x0dG1wLmtleWZsYWdzID0ga2V5ZmxhZ3M7XG4rXHR0bXAuaWZpbmRleCA9IGlmaW5kZXg7XG4gXHR0bXAubmtleXMgID0gMTtcbiBcbiBcdHJldCA9IGdldHNvY2tvcHQoc2ssIElQUFJPVE9fVENQLCBUQ1BfQU9fR0VUX0tFWVMsIFx1MDAyNnRtcCwgXHUwMDI2dG1wX3N6KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjIzOjM5LjE2NDQzMjcxOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5NjM2NDYzMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQLUFPIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2FyZWZ1bGx5IGV2YWx1YXRlIHRoZSBtb2RpZmljYXRpb25zLCBlc3BlY2lhbGx5IHNpbmNlIGl0IHRvdWNoZXMgYG5ldC9pcHY0L3RjcF9hby5jYCwgd2hpY2ggaXMgYSBjb3JlIGNvbXBvbmVudCBmb3IgVENQIEF1dGhlbnRpY2F0aW9uIE9wdGlvbiwgYW5kIGluY2x1ZGVzIHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9gLlxuXG5Gb2N1c2luZyBvbiB0aGUgYG5ldC9pcHY0L3RjcF9hby5jYCBjaGFuZ2UsIGl0IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbmFsIGZpeCB3aXRoaW4gYHRjcF9hb19kZWxfY21kYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBzbmlwcGV0IHJldmVhbHMgdGhlIGFkZGl0aW9uIG9mIGEgY29uZGl0aW9uYWwgY2hlY2sgYW5kIGFzc2lnbm1lbnQ6ICBgaWYgKGNtZC5rZXlmbGFncyBcdTAwMjYgVENQX0FPX0tFWUZfSUZJTkRFWCkgbDNpbmRleCA9IGNtZC5pZmluZGV4O2AuXG5cbkZyb20gbXkgdW5kZXJzdGFuZGluZyBvZiBUQ1AtQU8sIHRoaXMgaXMgY3J1Y2lhbC4gSXTigJlzIGFsbG93aW5nIHVzIHRvIHByb3Blcmx5IGRlbGV0ZSBWUkYtc2NvcGVkIGtleXMgYnkgY29ycmVjdGx5IG1hdGNoaW5nIHRoZSBpZmluZGV4LiAgVGhlIGluY2x1c2lvbiBvZiBgVENQX0FPX0tFWUZfSUZJTkRFWGAgaW4gYGNtZC5rZXlmbGFnc2AgYWN0cyBhcyBhIGZsYWcuIElmIHRoYXQgZmxhZyBpcyBzZXQsIHRoZSBmdW5jdGlvbiBhc3NpZ25zIHRoZSBwcm92aWRlZCBpbnRlcmZhY2UgaW5kZXggdG8gYGwzaW5kZXhgLiBJdCBzZWVtcyB0aGF0IHdpdGhvdXQgdGhpcyBjaGVjaywgZGVsZXRpbmcgYSBrZXkgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgVlJGIG1heSBiZSBjaGFsbGVuZ2luZywgb3Igd29yc2UsIGluY29ycmVjdC4gIEkgbmVlZCB0byBjb25maXJtIHRoaXMgaXMgaW5kZWVkIHRoZSBpbnRlbnRpb24gYW5kIHRoYXQgaXQgaGFuZGxlcyBhbGwgdGhlIHJlbGV2YW50IGVkZ2UgY2FzZXMuIFRoaXMgbmVlZHMgYSBkZWVwZXIgbG9vayB0byBtYWtlIHN1cmUgaXQgZnVuY3Rpb25zIGFzIGV4cGVjdGVkIGluIGFsbCBzY2VuYXJpb3MuIEkgd2lsbCBjaGVjayB0aGUgYHRjcF9hb19kZWxfY21kYCBmdW5jdGlvbiBpbiB0aGUgc291cmNlIGZpbGUgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQxOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjIzOjU4LjgwMDg5OTgwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTE2NzUyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYW9fZGVsX2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYW8uYz05OTA9dGNwX2luYm91bmRfYW9faGFzaChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU1LVxcdFxcdFxcdGlmIChrZXkpXFxubmV0L2lwdjQvdGNwX2FvLmM6MTA1NjpcXHRcXHRcXHRcXHQvKiBwYWlycyB3aXRoIHRjcF9hb19kZWxfY21kICovXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA1Ny1cXHRcXHRcXHRcXHRXUklURV9PTkNFKGluZm8tXFx1MDAzZWN1cnJlbnRfa2V5LCBrZXkpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA2OC1cXHQgKiAtIHJlcXVlc3Qgc29ja2V0cyB3b3VsZCByYWNlIG9uIHRob3NlIGtleSBwb2ludGVyc1xcbm5ldC9pcHY0L3RjcF9hby5jOjEwNjk6XFx0ICogLSB0Y3BfYW9fZGVsX2NtZCgpIGFsbG93cyBhc3luYyBrZXkgcmVtb3ZhbFxcbm5ldC9pcHY0L3RjcF9hby5jLTEwNzAtXFx0ICovXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0xNzQ2PXN0YXRpYyBpbnQgdGNwX2FvX2RlbGV0ZV9rZXkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvX2luZm8sXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xNzk5LSNkZWZpbmUgVENQX0FPX0RFTF9LRVlGX0FMTCAoVENQX0FPX0tFWUZfSUZJTkRFWClcXG5uZXQvaXB2NC90Y3BfYW8uYzoxODAwOnN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbm5ldC9pcHY0L3RjcF9hby5jLTE4MDEtXFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MjAzOD1pbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTIwNDctXFx0Y2FzZSBUQ1BfQU9fREVMX0tFWTpcXG5uZXQvaXB2NC90Y3BfYW8uYzoyMDQ4OlxcdFxcdHJldHVybiB0Y3BfYW9fZGVsX2NtZChzaywgZmFtaWx5LCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvdGNwX2FvLmMtMjA0OS1cXHRjYXNlIFRDUF9BT19JTkZPOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDoyMzo1OC44NTYwNzQwMjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDAyMzkzODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhhdCBjb2RlIHNuaXBwZXQ6XG5cbioqRGVlcCBEaXZlIGludG8gYHRjcF9hb19kZWxfY21kYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB0Y3BfYW9fZGVsX2NtZGAuIFRoZSBjb21tZW50IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgc3BlY2lmaWNhbGx5IHRyaWdnZXJlZCBieSBgdGNwX3BhcnNlX2FvYCAqd2hlbiogdGhlIGNvbW1hbmQgdmFsdWUsIGBjbWRgLCBpcyBzZXQgdG8gYFRDUF9BT19ERUxfS0VZYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBhIGRlbGV0ZSBvcGVyYXRpb24uIE5vdywgYHRjcF9wYXJzZV9hb2AgaXRzZWxmIGlzIGNhbGxlZCBmcm9tLCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIGBkb190Y3Bfc2V0c29ja29wdGAsIHdoaWNoIGxpdmVzIHNvbWV3aGVyZSBpbiB0aGUgYG5ldC9pcHY0L3RjcC5jYCBmaWxlIOKAkyBvciBhIHNpbWlsYXIgbG9jYXRpb24gZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgdmVyc2lvbi4gU28sIEkgaGF2ZSB0byBmaW5kIHRoZSBjYWxsZXJzIG9mIGB0Y3BfcGFyc2VfYW9gLiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSB0cmFpbCBvZiBob3cgYSBUQ1Agc29ja2V0IG9wdGlvbiBkZWxldGUgZ2V0cyBoYW5kbGVkLiBUaGF0IHNob3VsZCBuYXJyb3cgZG93biBteSBmb2N1cyB0byB3aGVyZSB0aGUgQU8ga2V5IGRlbGV0aW9uIGlzIGluaXRpYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYwNCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjI0OjAyLjg1ODQ3NTEyNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYyMTQ2NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9wYXJzZV9hb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3BfYW8uaD0xOTY9aW50IHRjcF9hb19oYXNoX3NrYih1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwX2FvLmgtMTk5LVxcdFxcdCAgICBjb25zdCB1OCAqdGtleSwgaW50IGhhc2hfb2Zmc2V0LCB1MzIgc25lKTtcXG5pbmNsdWRlL25ldC90Y3BfYW8uaDoyMDA6aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuaW5jbHVkZS9uZXQvdGNwX2FvLmgtMjAxLVxcdFxcdCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTE5NDk9c3RhdGljIGludCB0Y3BfYW9faW5mb19jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMjAzNy1cXG5uZXQvaXB2NC90Y3BfYW8uYzoyMDM4OmludCB0Y3BfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbm5ldC9pcHY0L3RjcF9hby5jLTIwMzktXFx0XFx0IHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0yMDU3PWludCB0Y3BfdjRfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbm5ldC9pcHY0L3RjcF9hby5jLTIwNTgte1xcbm5ldC9pcHY0L3RjcF9hby5jOjIwNTk6XFx0cmV0dXJuIHRjcF9wYXJzZV9hbyhzaywgY21kLCBBRl9JTkVULCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvdGNwX2FvLmMtMjA2MC19XFxuLS1cXG5uZXQvaXB2Ni90Y3BfYW8uYz0xMjc9aW50IHRjcF92Nl9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsXFxuLS1cXG5uZXQvaXB2Ni90Y3BfYW8uYy0xMjkte1xcbm5ldC9pcHY2L3RjcF9hby5jOjEzMDpcXHRyZXR1cm4gdGNwX3BhcnNlX2FvKHNrLCBjbWQsIEFGX0lORVQ2LCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjYvdGNwX2FvLmMtMTMxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6MjQ6MDQuNDIwNjI2NDQyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4Nzc1NDY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipJbnRlcm5hbCBSZXZpZXcgb2YgVENQdjQvdjYgUGFyc2VyIExvZ2ljKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgYHRjcF92NF9wYXJzZV9hb2AgYW5kIGB0Y3BfdjZfcGFyc2VfYW9gLiBUaG9zZSBuYW1lcyBhcmUgcHJldHR5IGNsZWFyIOKAkyB0aGV5J3JlIHRoZSBwYXJzaW5nIGZ1bmN0aW9ucyBmb3IgVENQIG9wdGlvbnMgd2l0aGluIElQdjQgYW5kIElQdjYgdHJhZmZpYywgcmVzcGVjdGl2ZWx5LiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gSSdtIHByb2JhYmx5IHJldmlld2luZyBjb2RlLCBkZWJ1Z2dpbmcsIG9yIHBlcmhhcHMgb3B0aW1pemluZy4gVGhlIHByZXNlbmNlIG9mIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBzaWduYWxzIGEgZm9jdXMgb24gVENQIG9wdGlvbnMsIHdoaWNoIGNhbiBnZXQgY29tcGxpY2F0ZWQgZmFzdC4gSSdtIGxpa2VseSBjb25jZXJuZWQgd2l0aCBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgb3B0aW9uIHR5cGVzLCBsZW5ndGhzLCBhbGlnbm1lbnQsIGFuZCB0aGUgb3ZlcmFsbCB2YWxpZGl0eSBjaGVja3MgdG8gZW5zdXJlIHRoZSBzdGFjayBoYW5kbGVzIGFsbCBwb3NzaWJsZSBjb25maWd1cmF0aW9ucy4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBJUHY0IGFuZCBJUHY2IGltcGxlbWVudGF0aW9ucyBpcyBhIHN1YnRsZSwgYnV0IGltcG9ydGFudCBvbmUsIGFzIGJvdGggcHJvdG9jb2xzIGhhdmUgZGlmZmVyZW50IGxpbWl0YXRpb25zIGFuZCBzcGVjaWFsIHJlcXVpcmVtZW50cyB0aGF0IG11c3QgYmUgaGFuZGxlZC4gSSBhbSBmb2N1c2luZyBvbiB0aGUgcGFyc2UgZnVuY3Rpb25zIHRoZW1zZWx2ZXMsIGluIGlzb2xhdGlvbiB0byBiZXR0ZXIgdW5kZXJzdGFuZCB3aGVyZSB0aGUgaXNzdWVzIG1pZ2h0IGJlLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBzdHVmZiwganVzdCBtYWtpbmcgc3VyZSB0aGUgZnVuZGFtZW50YWxzIGFyZSBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM5NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjI0OjA3LjgwODM4MzA5MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgxODMzMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF92NF9wYXJzZV9hb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3BfYW8uaD0yMzA9aW50IHRjcF9hb19wcmVwYXJlX3Jlc2V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcF9hby5oLTIzNS0vKiBpcHY0IHNwZWNpZmljIGZ1bmN0aW9ucyAqL1xcbmluY2x1ZGUvbmV0L3RjcF9hby5oOjIzNjppbnQgdGNwX3Y0X3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbik7XFxuaW5jbHVkZS9uZXQvdGNwX2FvLmgtMjM3LXN0cnVjdCB0Y3BfYW9fa2V5ICp0Y3BfdjRfYW9fbG9va3VwKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKmFkZHJfc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0yMDM4PWludCB0Y3BfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMjA1Ni1cXG5uZXQvaXB2NC90Y3BfYW8uYzoyMDU3OmludCB0Y3BfdjRfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbm5ldC9pcHY0L3RjcF9hby5jLTIwNTgte1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0yMzcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGNwX3NvY2tfYWZfb3BzIHRjcF9zb2NrX2lwdjRfc3BlY2lmaWMgPSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzNzktXFx0LmNhbGNfYW9faGFzaFxcdFxcdD0gdGNwX3Y0X2FvX2hhc2hfc2tiLFxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MjM4MDpcXHQuYW9fcGFyc2VcXHRcXHQ9IHRjcF92NF9wYXJzZV9hbyxcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzODEtXFx0LmFvX2NhbGNfa2V5X3NrXFx0XFx0PSB0Y3BfdjRfYW9fY2FsY19rZXlfc2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjI0OjA5LjM5MDIyMjc5MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyOTg4NzI5OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIENvcmU6IEEgRnV6emluZyBPcHBvcnR1bml0eSoqXG5cbk9rYXksIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBJIHNlZSB0aGlzIHBhdGNoIHRhcmdldHMgYSBwYXJ0IG9mIHRoZSBrZXJuZWwgbG9naWMgdGhhdCdzIHRydWx5IHJlYWNoYWJsZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgVENQIGBzZXRzb2Nrb3B0YCBwYXRoLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmaW5kaW5nIHNvbWV0aGluZyBleHBsb2l0YWJsZS4gVGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBjaGFuZ2UgYXBwZWFycyBzb3VuZCwgc28gdGhlIHBvdGVudGlhbCByZXdhcmQgZnJvbSBmdXp6aW5nIGlzIGRlZmluaXRlbHkgdGhlcmUuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyBzaGlmdHMgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50cmljYWNpZXMgb2YgYHRjcF9hb19kZWxfY21kYCwgYW5kIHRoZW4gYWxzbyB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgYHRjcF9wYXJzZV9hb2AgYW5kIGB0Y3BfdjRfcGFyc2VfYW9gLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGtleSBhcmVhcyB0aGF0IG5lZWQgdGhlIGNsb3Nlc3QgZXhhbWluYXRpb24uIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYENPTkZJR2Agb3B0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvIGVuYWJsZSBUQ1AtQU8gaW4gdGhlIGZpcnN0IHBsYWNlLCBvciBpZiB0aGV5J3JlIGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gSSBjYW4gZW5zdXJlIEknbSB0ZXN0aW5nIHRoZSByaWdodCBidWlsZHMuIFRoYXQncyBteSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDoyNDoxNy42ODkwOTg1MjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDY0NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRDUF9BT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NzI5PWNvbmZpZyBERUZBVUxUX1RDUF9DT05HXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTc0My1cXG5uZXQvaXB2NC9LY29uZmlnOjc0NDpjb25maWcgVENQX0FPXFxubmV0L2lwdjQvS2NvbmZpZy03NDUtXFx0Ym9vbCBcXFwiVENQOiBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFJGQzU5MjUpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDoyNDoxNy43MzMxNjU5NDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4NDEzMTE4MjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbmZpZ3VyYXRpb24gRXhwbG9yYXRpb246IFRDUF9BTyBhbmQgQmV5b25kKipcblxuQWxyaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIGBUQ1BfQU9gIGFzIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIGdvdCBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gaW1tZWRpYXRlbHkgYXNzZXNzIHRoZSBicm9hZGVyIGxhbmRzY2FwZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBUQ1BfQU9gIGlzICp0aGUqIGNvbmZpZ3VyYXRpb24gd2UncmUgY29uY2VybmVkIHdpdGgsIG9yIGlmIGl0J3MgcGFydCBvZiBhIGxhcmdlciBzZXQgb2YgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoaXMgc3lzdGVtLiBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHR5cGljYWwgcGxhY2VzIEknZCBleHBlY3QgdG8gZmluZCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcy4gRXNzZW50aWFsbHksIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gcGVyZm9ybSBhIHJhcGlkIHNhbml0eSBjaGVjayB0byBydWxlIG91dCBvdGhlciByZWxldmFudCBzZXR0aW5ncywgcmVsYXRlZCBjb25maWdzLCBvciBhbnkgdXBzdHJlYW0gb3IgZG93bnN0cmVhbSBkZXBlbmRlbmNpZXMuIEknbSB0aGlua2luZywgXCJJcyB0aGlzIGEgc2luZ2xlLXBvaW50IGNvbmZpZ3VyYXRpb24gb3IgaXMgaXQgbmVzdGVkIHdpdGhpbiBhIGJyb2FkZXIgY29uZmlndXJhdGlvbiBzY2hlbWU/IElzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCB3b3VsZCBiZSBvZiBpbnRlcmVzdCBpbiB0aGlzIGNhc2U/XCJcblxuXG4iLCJJbnB1dFRva2VucyI6OTUwNywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMxOjE2LjE0NjI4ODU2MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MDE4NDAyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVENQX0FPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz03Mjk9Y29uZmlnIERFRkFVTFRfVENQX0NPTkdcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNzQzLVxcbm5ldC9pcHY0L0tjb25maWc6NzQ0OmNvbmZpZyBUQ1BfQU9cXG5uZXQvaXB2NC9LY29uZmlnLTc0NS1cXHRib29sIFxcXCJUQ1A6IEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoUkZDNTkyNSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMxOjE3LjY5NjQ3ODcyOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTAxOTE1Njg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFRDUF9BTyBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUgZm9yIFRDUF9BTy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCBzcGVjaWZpY2FsbHkgYXJlIHdlIGFpbWluZyB0byB1bmRlcnN0YW5kIGhlcmU/XCIgQXJlIHdlIGxvb2tpbmcgYXQgdGhlIGNvcmUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCBvciBwb3RlbnRpYWwgYnVpbGQtdGltZSBpbXBsaWNhdGlvbnM/IElzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUsIG9yIGEgZ2VuZXJhbCBwbGF0Zm9ybSBjb25jZXJuP1xuXG5GaXJzdCwgSSdsbCBzY2FuIGZvciB0aGUgbWFpbiBzeW1ib2wgZGVmaW5pdGlvbiBvZiBgVENQX0FPYCBpdHNlbGYuIFRoZW4sIEknbGwgcGF5IGF0dGVudGlvbiB0byBhbnkgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMuIFRoZXNlIGNvbmRpdGlvbnMgYXJlIGtleTsgdGhleSdsbCBxdWlja2x5IGhpZ2hsaWdodCB0aGUgZnVuZGFtZW50YWwgcHJlLXJlcXVpc2l0ZXMgb3Igb3RoZXIgZmVhdHVyZXMgdGhpcyBvcHRpb24gcmVsaWVzIG9uLiBJIGV4cGVjdCB0byBzZWUgZGVwZW5kZW5jaWVzIG9uIHRoZSBUQ1Agc3RhY2ssIG9mIGNvdXJzZSwgYW5kIHBlcmhhcHMgcmVsYXRlZCBzZWN1cml0eSBvciBjcnlwdG9ncmFwaGljIG1vZHVsZXMgaWYgQU8gaXMgdXNpbmcgYW55LlxuXG5OZXh0LCBJJ2xsIGNoZWNrIGZvciBgZGVmYXVsdGAgdmFsdWVzLiBJcyBpdCBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQ/IEEgZGVmYXVsdC1lbmFibGVkIG9wdGlvbiBtaWdodCBpbmRpY2F0ZSB0aGF0IGl0IGlzIGEgY29tbW9uIG9yIHJlY29tbWVuZGVkIGNvbmZpZ3VyYXRpb24sIHdoaWxlIGEgZGVmYXVsdC1kaXNhYmxlZCBvbmUgcHJvYmFibHkgaW1wbGllcyB0aGF0IGl0IGlzIGZvciBzcGVjaWFsaXplZCBkZXBsb3ltZW50cyBvciBleHBlcmltZW50YWwgc2V0dGluZ3MuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBgZGVmYXVsdGAgc3RhdGVtZW50cywgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lIGlzIHNlbGVjdGVkIGJ5IHRoZSB0YXJnZXQgZW52aXJvbm1lbnQuXG5cbkknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgYGhlbHBgIHRleHQuIEdvb2QgZG9jdW1lbnRhdGlvbiwgZXZlbiBpZiBicmllZiwgY2FuIHJldmVhbCB0aGUgaW50ZW5kZWQgdXNlIGNhc2UsIHRoZSBiZW5lZml0cywgYW5kIHRoZSBwb3RlbnRpYWwgZHJhd2JhY2tzIG9mIGVuYWJsaW5nIGBUQ1BfQU9gLiBXaGF0IHByb2JsZW0gaXMgaXQgZGVzaWduZWQgdG8gc29sdmU/IElzIHRoZXJlIGFueSB3YXJuaW5nIGFib3V0IHRoZSBwZXJmb3JtYW5jZSBvdmVyaGVhZD9cblxuRmluYWxseSwgSSdsbCBub3RlIGFueSBtZW51IHN0cnVjdHVyZSBvciBzdWItb3B0aW9ucy4gQXJlIHRoZXJlIGZ1cnRoZXIgY29uZmlndXJhdGlvbiBmbGFncyB3aXRoaW4gYFRDUF9BT2AsIHN1Y2ggYXMgc2VjdXJpdHkga2V5IHNpemUsIGNpcGhlciBzdWl0ZXMsIG9yIHNwZWNpZmljIHByb3RvY29sIHZlcnNpb25zPyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbGV2ZWwgb2YgY29uZmlndXJhYmlsaXR5IHRoZSBkZXZlbG9wZXIgcHJvdmlkZWQuIEFsc28sIEknbGwgbG9vayBmb3IgYW55IGBzZWxlY3RgIHN0YXRlbWVudHMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggc3ltYm9scyB0aGV5IHB1bGwgaW4uIFVsdGltYXRlbHksIHRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGhvdyBUQ1BfQU8gaW50ZWdyYXRlcyBpbnRvIHRoZSBsYXJnZXIga2VybmVsIFRDUCBpbmZyYXN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgzOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMyOjQ4LjcxNTYzOTY4NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NDA6XFx0XFx0ZGVmYXVsdCBcXFwiY2RnXFxcIiBpZiBERUZBVUxUX0NER1xcbiA3NDE6XFx0XFx0ZGVmYXVsdCBcXFwiYmJyXFxcIiBpZiBERUZBVUxUX0JCUlxcbiA3NDI6XFx0XFx0ZGVmYXVsdCBcXFwiY3ViaWNcXFwiXFxuIDc0MzpcXHRcXG4gNzQ0OlxcdGNvbmZpZyBUQ1BfQU9cXG4gNzQ1OlxcdFxcdGJvb2wgXFxcIlRDUDogQXV0aGVudGljYXRpb24gT3B0aW9uIChSRkM1OTI1KVxcXCJcXG4gNzQ2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xcbiA3NDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbiA3NDg6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuIDc0OTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiA3NTA6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVCAjIHNlcS1udW1iZXIgZXh0ZW5zaW9uIG5lZWRzIFdSSVRFX09OQ0UodTY0KVxcbiA3NTE6XFx0XFx0aGVscFxcbiA3NTI6XFx0XFx0ICBUQ1AtQU8gc3BlY2lmaWVzIHRoZSB1c2Ugb2Ygc3Ryb25nZXIgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlcyAoTUFDcyksXFxuIDc1MzpcXHRcXHQgIHByb3RlY3RzIGFnYWluc3QgcmVwbGF5cyBmb3IgbG9uZy1saXZlZCBUQ1AgY29ubmVjdGlvbnMsIGFuZFxcbiA3NTQ6XFx0XFx0ICBwcm92aWRlcyBtb3JlIGRldGFpbHMgb24gdGhlIGFzc29jaWF0aW9uIG9mIHNlY3VyaXR5IHdpdGggVENQXFxuIDc1NTpcXHRcXHQgIGNvbm5lY3Rpb25zIHRoYW4gVENQIE1ENSAoU2VlIFJGQzU5MjUpXFxuIDc1NjpcXHRcXG4gNzU3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gNzU4OlxcdFxcbiA3NTk6XFx0Y29uZmlnIFRDUF9NRDVTSUdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6MzI6NDguNzE1NzgzMDU1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NDQ1NDk3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1BfQU8gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGluIHBsYXkgaGVyZSBpcyBkZWZpbml0ZWx5IGBUQ1BfQU9gLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGludGVyYWN0aW5nIHdpdGggdGhpcy4gSSd2ZSBnb3QgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb246IGB0Y3BfYW9fZGVsX2NtZGAsIGB0Y3BfcGFyc2VfYW9gLCBgdGNwX3Y0X3BhcnNlX2FvYCwgYW5kIGB0Y3BfdjZfcGFyc2VfYW9gLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIG9yIGF0IGxlYXN0IHRoZSBvbmVzIEknbSBpbml0aWFsbHkgaW50ZXJlc3RlZCBpbi4gV2FpdCBhIG1pbnV0ZS4uLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgYHRjcF9hb19kZWxfY21kYCBpcyBhY3R1YWxseSBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgaGFzIGltcG9ydGFudCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCdzIHRoZSBjYXNlLiBJdCBhZmZlY3RzIHRoZSBsaW5rYWdlIGFuZCBzY29wZSwgd2hpY2ggaW4gdHVybiBpbXBhY3RzIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBhbmQgdGhhdCBpcyBpbXBvcnRhbnQgdG8gaG93IHRvIGJlc3QgaW50ZXJwcmV0IHRoZSBpbXBsZW1lbnRhdGlvbi4gVGltZSB0byBjaGVjayB0aGF0IHNwZWNpZmljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMyOjU0LjE2MDMzNTUzOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNzI0NDg5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYW9fZGVsX2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYW8uYz05OTA9dGNwX2luYm91bmRfYW9faGFzaChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU1LVxcdFxcdFxcdGlmIChrZXkpXFxubmV0L2lwdjQvdGNwX2FvLmM6MTA1NjpcXHRcXHRcXHRcXHQvKiBwYWlycyB3aXRoIHRjcF9hb19kZWxfY21kICovXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA1Ny1cXHRcXHRcXHRcXHRXUklURV9PTkNFKGluZm8tXFx1MDAzZWN1cnJlbnRfa2V5LCBrZXkpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA2OC1cXHQgKiAtIHJlcXVlc3Qgc29ja2V0cyB3b3VsZCByYWNlIG9uIHRob3NlIGtleSBwb2ludGVyc1xcbm5ldC9pcHY0L3RjcF9hby5jOjEwNjk6XFx0ICogLSB0Y3BfYW9fZGVsX2NtZCgpIGFsbG93cyBhc3luYyBrZXkgcmVtb3ZhbFxcbm5ldC9pcHY0L3RjcF9hby5jLTEwNzAtXFx0ICovXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0xNzQ2PXN0YXRpYyBpbnQgdGNwX2FvX2RlbGV0ZV9rZXkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvX2luZm8sXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xNzk5LSNkZWZpbmUgVENQX0FPX0RFTF9LRVlGX0FMTCAoVENQX0FPX0tFWUZfSUZJTkRFWClcXG5uZXQvaXB2NC90Y3BfYW8uYzoxODAwOnN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbm5ldC9pcHY0L3RjcF9hby5jLTE4MDEtXFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MjAzOD1pbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTIwNDctXFx0Y2FzZSBUQ1BfQU9fREVMX0tFWTpcXG5uZXQvaXB2NC90Y3BfYW8uYzoyMDQ4OlxcdFxcdHJldHVybiB0Y3BfYW9fZGVsX2NtZChzaywgZmFtaWx5LCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvdGNwX2FvLmMtMjA0OS1cXHRjYXNlIFRDUF9BT19JTkZPOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDozMjo1NS42ODc1ODQ0MjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxMzQ4MzczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUCBBTyBQYXJzaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggdGhlIFRDUCBBdXRoZW50aWNhdGlvbiBPcHRpb24gKEFPKSBwYXJzaW5nIGxvZ2ljLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgY29uZmlybWVkOiBgdGNwX2FvX2RlbF9jbWRgIGlzIGluZGVlZCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgYmVjYXVzZSBpdCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGlzIG1vZHVsZS4gTm93LCBnaXZlbiB0aGF0IGNvbmZpcm1hdGlvbiwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHBhcnNpbmcgdGhlIEFPIGRhdGEgaXRzZWxmLiBUaGUgb2J2aW91cyBjYW5kaWRhdGVzIGFyZSBgdGNwX3BhcnNlX2FvYCwgYHRjcF92NF9wYXJzZV9hb2AsIGFuZCBgdGNwX3Y2X3BhcnNlX2FvYC4gVGhleSBoYW5kbGUgdGhlIGdlbmVyaWMgYW5kIElQdjQvSVB2NiBzcGVjaWZpYyBwYXJzaW5nLCByZXNwZWN0aXZlbHkuIE15IG5leHQgc3RlcCwgYW5kIGl0J3MgYSBjcml0aWNhbCBvbmUsIGlzIHRvIGRldGVybWluZSBpZiBgdGNwX3BhcnNlX2FvYCBpcyBhbHNvIHN0YXRpYywgb3IgaWYgaXQgbWlnaHQgYmUgZXhwb3NlZCBlbHNld2hlcmUgaW4gdGhlIGNvZGViYXNlLiBVbmRlcnN0YW5kaW5nIGl0cyBzY29wZSB3aWxsIHJlYWxseSBoZWxwIHdpdGggdGhlIG9uZ29pbmcgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDMyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6MzI6NTkuNDAxMDcxNDc0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzU4MzI5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfcGFyc2VfYW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2FvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2FvLmM9MTk0OT1zdGF0aWMgaW50IHRjcF9hb19pbmZvX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDM3LVxcbm5ldC9pcHY0L3RjcF9hby5jOjIwMzg6aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxubmV0L2lwdjQvdGNwX2FvLmMtMjAzOS1cXHRcXHQgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTIwNTc9aW50IHRjcF92NF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxubmV0L2lwdjQvdGNwX2FvLmMtMjA1OC17XFxubmV0L2lwdjQvdGNwX2FvLmM6MjA1OTpcXHRyZXR1cm4gdGNwX3BhcnNlX2FvKHNrLCBjbWQsIEFGX0lORVQsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDYwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6MzI6NTkuNDk0NjYwNDM3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNjM5MDIwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBUQ1AtQU8gS2V5IERlbGV0aW9uIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJ1ZyB3aXRoaW4gdGhlIFRDUC1BTyBrZXkgZGVsZXRpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHdoZW4gdXNpbmcgYHNldHNvY2tvcHRgIHdpdGggYFRDUF9BT19ERUxfS0VZYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIGZ1bmN0aW9uIGB0Y3BfcGFyc2VfYW9gIGlzbid0IHN0YXRpYywgYWxsb3dpbmcgZm9yIHZhcmlhdGlvbnMgbGlrZSBgdGNwX3Y0X3BhcnNlX2FvYCBhbmQgYHRjcF92Nl9wYXJzZV9hb2AsIHdoaWNoIGlzIGdvb2QgZm9yIGhhbmRsaW5nIGRpZmZlcmVudCBhZGRyZXNzIGZhbWlsaWVzLlxuXG5UaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZy4gQmFzaWNhbGx5LCB0aGUgYGwzaW5kZXhgIGZpZWxkLCBjcml0aWNhbCBmb3IgaWRlbnRpZnlpbmcgdGhlIGNvcnJlY3QgaW50ZXJmYWNlIChhbmQgVlJGIGluIG15IHdvcmxkKSwgd2Fzbid0IGJlaW5nIGNvcnJlY3RseSBwb3B1bGF0ZWQgZnJvbSB0aGUgdXNlcidzIGlucHV0IChgY21kLmlmaW5kZXhgKSBkdXJpbmcga2V5IGRlbGV0aW9uLiBUaGlzIG1lYW5zIHRoZSBzeXN0ZW0gbWlnaHQgYmUgZGVsZXRpbmcgdGhlICp3cm9uZyoga2V5LCBhIGNyaXRpY2FsIGZsYXcuXG5cblRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCByZXF1aXJpbmcgdGhvcm91Z2ggZnV6emluZyB0byBlbnN1cmUgaXQncyByb2J1c3QuIFRoZSBmb2N1cyBoZXJlIGlzIG9uIGB0Y3BfcGFyc2VfYW9gLCBgdGNwX3Y0X3BhcnNlX2FvYCwgYW5kIGB0Y3BfdjZfcGFyc2VfYW9gLCB0aGUgZnVuY3Rpb25zIGludm9sdmVkIGluIHBhcnNpbmcgdGhpcyBUQ1AtQU8gY29uZmlndXJhdGlvbiBkYXRhLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgZXZlcnl0aGluZy4gU2luY2UgSSBhbSBjb25jZXJuZWQgYWJvdXQgVlJGcywgSSBzaG91bGQgY2hlY2sgd2hldGhlciBgVENQX0FPYCBkZXBlbmRzIG9uIGBORVRfVlJGYC4gV2hpbGUgaXQgZG9lc24ndCAqZGlyZWN0bHkqIGRlcGVuZCBvbiBpdCwgYW5kIHRoZSB0ZXN0cyByZWZlcmVuY2UgYEtDT05GSUdfTkVUX1ZSRmAsIHRoaXMgcGF0Y2ggaXMgZGlyZWN0bHkgbWFuaXB1bGF0aW5nIGBsM2luZGV4YCwgd2hpY2ggaXMgdXNlZCBmb3IgVlJGcy4gSXQncyBiZXN0IHRvIGJlIHNhZmUsIHNvIEknbGwgaW5jbHVkZSBgTkVUX1ZSRmAgYXMgd2VsbCB0byBtYWtlIHN1cmUgSSBjYXB0dXJlIHRoZSBjb21wbGV0ZSBjb250ZXh0LiBUaGlzIGxldmVsIG9mIGRpbGlnZW5jZSBwcmV2ZW50cyByZWdyZXNzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NjUsIk91dHB1dFRva2VucyI6MTM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMzOjA2LjU1ODU2NTU1NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTQ5OTk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0FPXCIsXG4gICAgXCJORVRfVlJGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3BhcnNlX2FvXCIsXG4gICAgXCJ0Y3BfdjRfcGFyc2VfYW9cIixcbiAgICBcInRjcF92Nl9wYXJzZV9hb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIFRDUC1BTyBrZXkgZGVsZXRpb24gd2hlcmUgdGhlIGludGVyZmFjZSBpbmRleCAoVlJGKSB3YXMgbm90IHByb3Blcmx5IGV4dHJhY3RlZCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIGNvbW1hbmQgd2hlbiB0aGUgVENQX0FPX0tFWUZfSUZJTkRFWCBmbGFnIHdhcyBzZXQuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgVENQIHNldHNvY2tvcHQgbG9naWMgZm9yIFRDUF9BT19ERUxfS0VZLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRDUF9BT1wiLFxuICAgIFwiTkVUX1ZSRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9wYXJzZV9hb1wiLFxuICAgIFwidGNwX3Y0X3BhcnNlX2FvXCIsXG4gICAgXCJ0Y3BfdjZfcGFyc2VfYW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBUQ1AtQU8ga2V5IGRlbGV0aW9uIHdoZXJlIHRoZSBpbnRlcmZhY2UgaW5kZXggKFZSRikgd2FzIG5vdCBwcm9wZXJseSBleHRyYWN0ZWQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBjb21tYW5kIHdoZW4gdGhlIFRDUF9BT19LRVlGX0lGSU5ERVggZmxhZyB3YXMgc2V0LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIFRDUCBzZXRzb2Nrb3B0IGxvZ2ljIGZvciBUQ1BfQU9fREVMX0tFWS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6MzM6MDYuNjkwMDcxNTEzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTcyNDEwOTU3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMzOjA2LjY5MDUwMTY4M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyOTcyMzY3NDUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyBpbiBgdGNwX2FvX2RlbF9jbWRgIHdoZXJlIHRoZSBgaWZpbmRleGAgZmllbGQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBgdGNwX2FvX2RlbGAgc3RydWN0dXJlIHdhcyBpZ25vcmVkIHdoZW4gZGVsZXRpbmcgYSBUQ1AtQU8ga2V5LiBUaGUgYGNtZGAgc3RydWN0dXJlIGlzIHNhZmVseSBwb3B1bGF0ZWQgZnJvbSB1c2VyIHNwYWNlIHVzaW5nIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHIoKWAsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkIChlaXRoZXIgYnkgY29weWluZyBmcm9tIHVzZXIgc3BhY2Ugb3IgemVyby1wYWRkaW5nKS4gVGhlIHBhdGNoIHNpbXBseSByZWFkcyB0aGUgaW5pdGlhbGl6ZWQgYGNtZC5pZmluZGV4YCBmaWVsZCBhbmQgYXNzaWducyBpdCB0byBgbDNpbmRleGAgaWYgdGhlIGBUQ1BfQU9fS0VZRl9JRklOREVYYCBmbGFnIGlzIHNldC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjMDJjYmFmOTViMTY0YjZjOWVhMmFiODEwNTMwN2UyOTg1YWNkMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAyMDoyMzozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9hby5jIGIvbmV0L2lwdjQvdGNwX2FvLmNcbmluZGV4IDUwOTQyNjc0NDdhZWUuLjI2ODY0NjIxZTZkZWYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYW8uY1xuKysrIGIvbmV0L2lwdjQvdGNwX2FvLmNcbkBAIC0xODM0LDYgKzE4MzQsOSBAQCBzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbiBcdGlmIChjbWQuaWZpbmRleCBcdTAwMjZcdTAwMjYgIShjbWQua2V5ZmxhZ3MgXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdGlmIChjbWQua2V5ZmxhZ3MgXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpXG4rXHRcdGwzaW5kZXggPSBjbWQuaWZpbmRleDtcbitcbiBcdGFvX2luZm8gPSBzZXRzb2Nrb3B0X2FvX2luZm8oc2spO1xuIFx0aWYgKElTX0VSUihhb19pbmZvKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoYW9faW5mbyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jXG5pbmRleCBkODZiYjM4MGI3OWY3Li4wNDUxZjkyZjQ2NDVkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmNcbkBAIC02Myw4ICs2Myw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9sc2sodW5pb24gdGNwX2FkZHIgKmFkZHIsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpXG4gXHRyZXR1cm4gc2s7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbi1cdFx0XHRpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXkpXG4rc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBpbnQgaWZpbmRleCxcbitcdFx0XHRib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXkpXG4ge1xuIFx0c3RydWN0IHRjcF9hb19pbmZvX29wdCBhb19pbmZvID0ge307XG4gXHRzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQga2V5ID0ge307XG5AQCAtNzYsNiArNzYsMTAgQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxuIFx0ZGVsLnByZWZpeCA9IERFRkFVTFRfVEVTVF9QUkVGSVg7XG4gXHRkZWwuc25kaWQgPSBzbmRpZDtcbiBcdGRlbC5yY3ZpZCA9IHJjdmlkO1xuK1x0aWYgKGlmaW5kZXgpIHtcbitcdFx0ZGVsLmtleWZsYWdzID0gVENQX0FPX0tFWUZfSUZJTkRFWDtcbitcdFx0ZGVsLmlmaW5kZXggPSBpZmluZGV4O1xuK1x0fVxuIFxuIFx0aWYgKGN1cnJlbnRfa2V5IFx1MDAzZT0gMCkge1xuIFx0XHRkZWwuc2V0X2N1cnJlbnQgPSAxO1xuQEAgLTk1LDcgKzk5LDggQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxuIFxuIFx0dGNwX2FkZHJfdG9fc29ja2FkZHJfaW4oXHUwMDI2c29ja2FkZHIsIFx1MDAyNnRoaXNfaXBfZGVzdCwgMCk7XG4gXHRlcnIgPSB0ZXN0X2dldF9vbmVfYW8oc2ssIFx1MDAyNmtleSwgXHUwMDI2c29ja2FkZHIsIHNpemVvZihzb2NrYWRkciksXG4tXHRcdFx0ICAgICAgREVGQVVMVF9URVNUX1BSRUZJWCwgc25kaWQsIHJjdmlkKTtcbitcdFx0XHQgICAgICBERUZBVUxUX1RFU1RfUFJFRklYLCBzbmRpZCwgcmN2aWQsXG4rXHRcdFx0ICAgICAgZGVsLmtleWZsYWdzLCBkZWwuaWZpbmRleCk7XG4gXHRpZiAoIWVycilcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRpZiAoZXJyICE9IC1FMkJJRylcbkBAIC0xMTIsMTIgKzExNywxMiBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHRyeV9kZWxldGVfa2V5KGNoYXIgKnRzdF9uYW1lLCBpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsXG4tXHRcdFx0ICAgYm9vbCBhc3luYywgaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5LFxuK1x0XHRcdCAgIGludCBpZmluZGV4LCBib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXksXG4gXHRcdFx0ICAgZmF1bHRfdCBpbmopXG4ge1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IHRlc3RfZGVsX2tleShzaywgc25kaWQsIHJjdmlkLCBhc3luYywgY3VycmVudF9rZXksIHJuZXh0X2tleSk7XG4rXHRlcnIgPSB0ZXN0X2RlbF9rZXkoc2ssIHNuZGlkLCByY3ZpZCwgaWZpbmRleCwgYXN5bmMsIGN1cnJlbnRfa2V5LCBybmV4dF9rZXkpO1xuIFx0aWYgKChlcnIgPT0gLUVCVVNZIFx1MDAyNlx1MDAyNiBmYXVsdChCVVNZKSkgfHwgKGVyciA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBmYXVsdChDVVJSTkVYVCkpKSB7XG4gXHRcdHRlc3Rfb2soXCIlczoga2V5IGRlbGV0aW9uIHdhcyBwcmV2ZW50ZWRcIiwgdHN0X25hbWUpO1xuIFx0XHRyZXR1cm47XG5AQCAtMjM2LDE1ICsyNDEsMTUgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKVxuIFx0aW50IHNrO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcIiwgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcIiwgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIDApO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuIFx0aWYgKHRlc3Rfc2V0X2tleShzaywgMTAwLCAyMDApKVxuIFx0XHR0ZXN0X2Vycm9yKFwiZmFpbGVkIHRvIHNldCBjdXJyZW50L3JuZXh0IGtleXNcIik7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleVwiLCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXlcIiwgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgcm5leHQga2V5XCIsIHNrLCAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0yNTQsMTAgKzI1OSwxMiBAQCBzdGF0aWMgdm9pZCBjaGVja19jbG9zZWRfc29ja2V0KHZvaWQpXG4gXHRpZiAodGVzdF9hZGRfa2V5KHNrLCBcIkdsb3J5IHRvIFVrcmFpbmUhXCIsIHRoaXNfaXBfZGVzdCxcbiBcdFx0XHQgREVGQVVMVF9URVNUX1BSRUZJWCwgMTIsIDEzKSlcbiBcdFx0dGVzdF9lcnJvcihcInRlc3RfYWRkX2tleSgpXCIpO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXkgKyBzZXQgY3VycmVudC9ybmV4dFwiLCBzaywgMTAwLCAxMDAsIDAsIDEwLCAxMywgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBjdXJyZW50IGtleVwiLCBzaywgMTAsIDExLCAwLCAyMDAsIC0xLCAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleVwiLCBzaywgMTIsIDEzLCAwLCAtMSwgMjAwLCAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQrcm5leHQga2V5XCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5ICsgc2V0IGN1cnJlbnQvcm5leHRcIiwgc2ssXG4rXHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCAwKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5XCIsIHNrLCAxMCwgMTEsIDAsIDAsIDIwMCwgLTEsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5XCIsIHNrLCAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCtybmV4dCBrZXlcIiwgc2ssXG4rXHRcdCAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0yNzIsNiArMjc5LDE4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcbiBcdFx0XHRcdCAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLFxuIFx0XHRcdFx0ICBmYWxzZSwgdHJ1ZSwgMjAsIDEwLCAwKTtcbiBcdGNsb3NlKHNrKTtcbitcbitcdGlmICghc2hvdWxkX3NraXBfdGVzdChcImNsb3NlZCBzb2NrZXQsIGFkZCArIGRlbGV0ZSBWUkYtc2NvcGVkIGtleVwiLFxuK1x0XHRcdCAgICAgIEtDT05GSUdfTkVUX1ZSRikpIHtcbitcdFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuK1x0XHRpZiAodGVzdF9hZGRfa2V5X3ZyZihzaywgU0VDT05EX1BBU1NXT1JELCBUQ1BfQU9fS0VZRl9JRklOREVYLFxuK1x0XHRcdFx0ICAgICB0aGlzX2lwX2Rlc3QsIERFRkFVTFRfVEVTVF9QUkVGSVgsXG4rXHRcdFx0XHQgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDIwMSwgMjAxKSlcbitcdFx0XHR0ZXN0X2Vycm9yKFwidGVzdF9hZGRfa2V5X3ZyZigpXCIpO1xuK1x0XHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGFkZCArIGRlbGV0ZSBWUkYtc2NvcGVkIGtleVwiLCBzaywgMjAxLCAyMDEsXG4rXHRcdFx0ICAgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDAsIC0xLCAtMSwgMCk7XG4rXHRcdGNsb3NlKHNrKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgYXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoY29uc3QgY2hhciAqdHN0X21zZywgaW50IHNrKVxuQEAgLTMyMiw4ICszNDEsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRpbnQgc2ssIGVycjtcbiBcbiBcdHNrID0gcHJlcGFyZV9sc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wiLCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgMCk7XG4rXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVwiLCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7XG4rXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wiLCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgMCk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRzayA9IHByZXBhcmVfbHNrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuQEAgLTM0NSw4ICszNjQsMTAgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKVxuIFx0aWYgKGxpc3RlbihzaywgMTApKVxuIFx0XHR0ZXN0X2Vycm9yKFwibGlzdGVuKClcIik7XG4gXHRhc3NlcnRfbm9fY3VycmVudF9ybmV4dChcImxpc3RlbigpIGFmdGVyIGN1cnJlbnQvcm5leHQga2V5cyBzZXRcIiwgc2spO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcIiwgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKVwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcIiwgc2ssXG4rXHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XG4rXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcIiwgc2ssXG4rXHRcdCAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRhc3NlcnRfbm9fdGNwX3JlcGFpcigpO1xuQEAgLTM1OSwxMyArMzgwLDEzIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2xpc3Rlbl9zb2NrZXQodm9pZClcbiBcdFx0XHQgREVGQVVMVF9URVNUX1BSRUZJWCwgMTIsIDEzKSlcbiBcdFx0dGVzdF9lcnJvcihcInRlc3RfYWRkX2tleSgpXCIpO1xuIFx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXkgKyBzZXQgY3VycmVudC9ybmV4dFwiLCBzayxcbi1cdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTtcbitcdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTtcbiBcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5XCIsIHNrLFxuLVx0XHQgICAgICAgMTAsIDExLCAwLCAyMDAsIC0xLCBGQVVMVF9DVVJSTkVYVCk7XG4rXHRcdCAgICAgICAxMCwgMTEsIDAsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTtcbiBcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleVwiLCBzayxcbi1cdFx0ICAgICAgIDEyLCAxMywgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpO1xuK1x0XHQgICAgICAgMTIsIDEzLCAwLCAwLCAtMSwgMjAwLCBGQVVMVF9DVVJSTkVYVCk7XG4gXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVwiLCBzayxcbi1cdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApO1xuK1x0XHQgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRzayA9IHByZXBhcmVfbHNrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuQEAgLTExMzEsNyArMTE1Miw2IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGludCBwb3J0ID0gdGVzdF9zZXJ2ZXJfcG9ydDtcbiBcbi1cdHNldHVwX3ZyZnMoKTtcbiBcdHRyeV9jbGllbnRfcnVuKFwiY2xpZW50OiBDaGVjayBjdXJyZW50L3JuZXh0IGtleXMgdW5zZXQgYmVmb3JlIGNvbm5lY3QoKVwiLFxuIFx0XHQgICAgICAgcG9ydCsrLCAyMCwgLTEsIC0xKTtcbiBcdHRyeV9jbGllbnRfcnVuKFwiY2xpZW50OiBDaGVjayBjdXJyZW50L3JuZXh0IGtleXMgc2V0IGJlZm9yZSBjb25uZWN0KClcIixcbkBAIC0xMTUwLDYgKzExNzAsNyBAQCBzdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcbiB7XG4gXHRpZiAoaW5ldF9wdG9uKFRFU1RfRkFNSUxZLCBURVNUX1dST05HX0lQLCBcdTAwMjZ3cm9uZ19hZGRyKSAhPSAxKVxuIFx0XHR0ZXN0X2Vycm9yKFwiQ2FuJ3QgY29udmVydCBpcCBhZGRyZXNzICVzXCIsIFRFU1RfV1JPTkdfSVApO1xuK1x0c2V0dXBfdnJmcygpO1xuIFx0Y2hlY2tfY2xvc2VkX3NvY2tldCgpO1xuIFx0Y2hlY2tfbGlzdGVuX3NvY2tldCgpO1xuIFx0Y2hlY2tfZXN0YWJsaXNoZWRfc29ja2V0KCk7XG5AQCAtMTE1OCw2ICsxMTc5LDYgQEAgc3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpXG4gXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiB7XG4tXHR0ZXN0X2luaXQoMTIxLCBzZXJ2ZXJfZm4sIGNsaWVudF9mbik7XG4rXHR0ZXN0X2luaXQoMTIyLCBzZXJ2ZXJfZm4sIGNsaWVudF9mbik7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmhcbmluZGV4IGViYjI4OTljMTJmZTAuLjUzYmUxNzQ0MjM3ZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXG5AQCAtNDA0LDcgKzQwNCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfcHJlcGFyZV9kZWZfa2V5KHN0cnVjdCB0Y3BfYW9fYWRkICphbyxcbiBcbiBleHRlcm4gaW50IHRlc3RfZ2V0X29uZV9hbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCAqb3V0LFxuIFx0XHRcdCAgIHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LFxuLVx0XHRcdCAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKTtcbitcdFx0XHQgICB1aW50OF90IHByZWZpeCwgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCxcbitcdFx0XHQgICB1aW50OF90IGtleWZsYWdzLCBpbnQgaWZpbmRleCk7XG4gZXh0ZXJuIGludCB0ZXN0X2dldF9hb19pbmZvKGludCBzaywgc3RydWN0IHRjcF9hb19pbmZvX29wdCAqb3V0KTtcbiBleHRlcm4gaW50IHRlc3Rfc2V0X2FvX2luZm8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0ICppbik7XG4gZXh0ZXJuIGludCB0ZXN0X2NtcF9nZXRzb2Nrb3B0X3NldHNvY2tvcHQoY29uc3Qgc3RydWN0IHRjcF9hb19hZGQgKmEsXG5AQCAtNDE4LDcgKzQxOSw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfdmVyaWZ5X3NvY2tldF9rZXkoaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2FkZCAqa2V5KVxuIFx0aW50IGVycjtcbiBcbiBcdGVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgXHUwMDI2a2V5MiwgXHUwMDI2a2V5LVx1MDAzZWFkZHIsIHNpemVvZihrZXktXHUwMDNlYWRkciksXG4tXHRcdFx0ICAgICAga2V5LVx1MDAzZXByZWZpeCwga2V5LVx1MDAzZXNuZGlkLCBrZXktXHUwMDNlcmN2aWQpO1xuK1x0XHRcdCAgICAgIGtleS1cdTAwM2VwcmVmaXgsIGtleS1cdTAwM2VzbmRpZCwga2V5LVx1MDAzZXJjdmlkLFxuK1x0XHRcdCAgICAgIGtleS1cdTAwM2VrZXlmbGFncywga2V5LVx1MDAzZWlmaW5kZXgpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcbmluZGV4IGVmOGU5MDMxZDQ3YTMuLjJlN2IwNmExYTE1NjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suY1xuQEAgLTI1Miw3ICsyNTIsNyBAQCBzdGF0aWMgaW50IHRlc3RfZ2V0X2FvX2tleXNfbnIoaW50IHNrKVxuIFxuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcbiBcdFx0dm9pZCAqYWRkciwgc2l6ZV90IGFkZHJfc3osIHVpbnQ4X3QgcHJlZml4LFxuLVx0XHR1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKVxuK1x0XHR1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCB1aW50OF90IGtleWZsYWdzLCBpbnQgaWZpbmRleClcbiB7XG4gXHRzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgdG1wID0ge307XG4gXHRzb2NrbGVuX3QgdG1wX3N6ID0gc2l6ZW9mKHRtcCk7XG5AQCAtMjYyLDYgKzI2Miw4IEBAIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcbiBcdHRtcC5wcmVmaXggPSBwcmVmaXg7XG4gXHR0bXAuc25kaWQgID0gc25kaWQ7XG4gXHR0bXAucmN2aWQgID0gcmN2aWQ7XG4rXHR0bXAua2V5ZmxhZ3MgPSBrZXlmbGFncztcbitcdHRtcC5pZmluZGV4ID0gaWZpbmRleDtcbiBcdHRtcC5ua2V5cyAgPSAxO1xuIFxuIFx0cmV0ID0gZ2V0c29ja29wdChzaywgSVBQUk9UT19UQ1AsIFRDUF9BT19HRVRfS0VZUywgXHUwMDI2dG1wLCBcdTAwMjZ0bXBfc3opO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6MzM6MDYuNjkwNTAyODEzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxOTkyOTE0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVENQLUFPIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYG5ldC9pcHY0L3RjcF9hby5jYCBhbmQgc29tZSBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vYC4gTGV0J3MgZ2V0IHJpZ2h0IHRvIGl0IGFuZCBmb2N1cyBvbiBgbmV0L2lwdjQvdGNwX2FvLmNgLiBUaGUgZGlmZiBzaG93cyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgYHRjcF9hb19kZWxfY21kYCBmdW5jdGlvbi5cblxuSG1tLCBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIGFkZGVkIHRoaXMgY2hlY2sgcmVsYXRlZCB0byBgaWZpbmRleGAgYW5kIGBjbWQua2V5ZmxhZ3NgLiBTcGVjaWZpY2FsbHksIHRoZXkgYXJlIG5vdyBzZXR0aW5nIGBsM2luZGV4YCBpZiBgVENQX0FPX0tFWUZfSUZJTkRFWGAgaXMgc2V0IGluIHRoZSBrZXlmbGFncy4gVGhlIGV4aXN0aW5nIGNvZGUgYWxyZWFkeSBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiBgaWZpbmRleGAsIGJ1dCB0aGlzIGFkZGl0aW9uIGRpcmVjdGx5IGFzc2lnbnMgaXQuIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBoZXJlIOKAkyB3aGF0IGRvZXMgYGNtZGAgYWN0dWFsbHkgcmVwcmVzZW50PyBXaGVyZSBkb2VzIGl0IGNvbWUgZnJvbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyB0byBmdWxseSBncmFzcCB0aGlzIGNoYW5nZS5cblxuTGV0IG1lIHVzZSB0aGUgZ3JlcHBlciBJJ3ZlIGdvdCBzZXQgdXAgdG8gc2VlIHdoZXJlIGB0Y3BfYW9fZGVsX2NtZGAgaXMgY2FsbGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBmdWxseSBncm9rIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDozMzoxMS44ODk3OTYzODNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NzU1NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9hb19kZWxfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9hby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9hby5jPTk5MD10Y3BfaW5ib3VuZF9hb19oYXNoKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTEwNTUtXFx0XFx0XFx0aWYgKGtleSlcXG5uZXQvaXB2NC90Y3BfYW8uYzoxMDU2OlxcdFxcdFxcdFxcdC8qIHBhaXJzIHdpdGggdGNwX2FvX2RlbF9jbWQgKi9cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU3LVxcdFxcdFxcdFxcdFdSSVRFX09OQ0UoaW5mby1cXHUwMDNlY3VycmVudF9rZXksIGtleSk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDY4LVxcdCAqIC0gcmVxdWVzdCBzb2NrZXRzIHdvdWxkIHJhY2Ugb24gdGhvc2Uga2V5IHBvaW50ZXJzXFxubmV0L2lwdjQvdGNwX2FvLmM6MTA2OTpcXHQgKiAtIHRjcF9hb19kZWxfY21kKCkgYWxsb3dzIGFzeW5jIGtleSByZW1vdmFsXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA3MC1cXHQgKi9cXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTE3NDY9c3RhdGljIGludCB0Y3BfYW9fZGVsZXRlX2tleShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfYW9faW5mbyAqYW9faW5mbyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTE3OTktI2RlZmluZSBUQ1BfQU9fREVMX0tFWUZfQUxMIChUQ1BfQU9fS0VZRl9JRklOREVYKVxcbm5ldC9pcHY0L3RjcF9hby5jOjE4MDA6c3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxubmV0L2lwdjQvdGNwX2FvLmMtMTgwMS1cXHRcXHRcXHQgIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0yMDM4PWludCB0Y3BfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMjA0Ny1cXHRjYXNlIFRDUF9BT19ERUxfS0VZOlxcbm5ldC9pcHY0L3RjcF9hby5jOjIwNDg6XFx0XFx0cmV0dXJuIHRjcF9hb19kZWxfY21kKHNrLCBmYW1pbHksIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDQ5LVxcdGNhc2UgVENQX0FPX0lORk86XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMzOjExLjk4ODU1ODg4NloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTA1NTY4NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYHRjcF9hb19kZWxfY21kYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgVENQIEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoVENQIEFPKSBpbXBsZW1lbnRhdGlvbi4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgdGNwX2FvX2RlbF9jbWRgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2FvLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVENQIEFPIGtleXMgYXJlIHJlbW92ZWQgb3IgaW52YWxpZGF0ZWQsIGFzIHRoaXMgaXMgY3J1Y2lhbCBmb3Igc2VjdXJpdHkgYW5kIHNlc3Npb24gbWFuYWdlbWVudC4gSSdtIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBkZWxldGlvbiBvciBpbnZhbGlkYXRpb24gb2YgYXV0aGVudGljYXRpb24ga2V5cyBhc3NvY2lhdGVkIHdpdGggYSBUQ1AgY29ubmVjdGlvbi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBrZXkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLCB3aGF0IGxvY2tpbmcgbWVjaGFuaXNtcyBpdCBlbXBsb3lzIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5IChsaWtlbHkgc3BpbmxvY2tzIG9yIHJlYWQvd3JpdGUgbG9ja3MsIGdpdmVuIGl0cyBwb3RlbnRpYWwgZm9yIGNvbmN1cnJlbnQgYWNjZXNzKSwgYW5kIGhvdyBpdCBjbGVhbnMgdXAgYW55IGFzc29jaWF0ZWQgcmVzb3VyY2VzLiBBcmUgdGhlcmUgYW55IHJlZmVyZW5jZSBjb3VudHMgaW52b2x2ZWQ/IFdoYXQgaGFwcGVucyBpZiB0aGUga2V5IGRlbGV0aW9uIGZhaWxzIGZvciBzb21lIHJlYXNvbj8gRG9lcyB0aGlzIHRyaWdnZXIgYW55IGVycm9yIGNhbGxiYWNrcyBvciBsb2dnaW5nPyBJJ2xsIGFsc28gYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgbGlrZSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IGxlYWtzLCBhc3NvY2lhdGVkIHdpdGggdGhlIGRlbGV0aW9uIHByb2Nlc3MgaXRzZWxmLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBtYWludGFpbmluZyB0aGUgaW50ZWdyaXR5IGFuZCBzZWN1cml0eSBvZiB0aGUgQU8gc3lzdGVtLCBzbyBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MDEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDozMzoxNS44OTQxMzAwMjVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9hby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3OTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3OTA6XFx0XFx0YXRvbWljX3N1Yih0Y3BfYW9fc2l6ZW9mX2tleShrZXkpLCBcXHUwMDI2c2stXFx1MDAzZXNrX29tZW1fYWxsb2MpO1xcbjE3OTE6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNmtleS1cXHUwMDNlcmN1LCB0Y3BfYW9fa2V5X2ZyZWVfcmN1KTtcXG4xNzkyOlxcdFxcbjE3OTM6XFx0XFx0cmV0dXJuIDA7XFxuMTc5NDpcXHRhZGRfa2V5OlxcbjE3OTU6XFx0XFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZrZXktXFx1MDAzZW5vZGUsIFxcdTAwMjZhb19pbmZvLVxcdTAwM2VoZWFkKTtcXG4xNzk2OlxcdFxcdHJldHVybiBlcnI7XFxuMTc5NzpcXHR9XFxuMTc5ODpcXHRcXG4xNzk5OlxcdCNkZWZpbmUgVENQX0FPX0RFTF9LRVlGX0FMTCAoVENQX0FPX0tFWUZfSUZJTkRFWClcXG4xODAwOlxcdHN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbjE4MDE6XFx0XFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbjE4MDI6XFx0e1xcbjE4MDM6XFx0XFx0c3RydWN0IHRjcF9hb19rZXkgKmtleSwgKm5ld19jdXJyZW50ID0gTlVMTCwgKm5ld19ybmV4dCA9IE5VTEw7XFxuMTgwNDpcXHRcXHRpbnQgZXJyLCBhZGRyX2xlbiwgbDNpbmRleCA9IDA7XFxuMTgwNTpcXHRcXHRzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvX2luZm87XFxuMTgwNjpcXHRcXHR1bmlvbiB0Y3BfYW9fYWRkciAqYWRkcjtcXG4xODA3OlxcdFxcdHN0cnVjdCB0Y3BfYW9fZGVsIGNtZDtcXG4xODA4OlxcdFxcdF9fdTggcHJlZml4O1xcbjE4MDk6XFx0XFx0dTE2IHBvcnQ7XFxuMTgxMDpcXHRcXG4xODExOlxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoY21kKSlcXG4xODEyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4MTM6XFx0XFxuMTgxNDpcXHRcXHRlcnIgPSBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHIoXFx1MDAyNmNtZCwgc2l6ZW9mKGNtZCksIG9wdHZhbCwgb3B0bGVuKTtcXG4xODE1OlxcdFxcdGlmIChlcnIpXFxuMTgxNjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE4MTc6XFx0XFxuMTgxODpcXHRcXHRpZiAoY21kLnJlc2VydmVkICE9IDAgfHwgY21kLnJlc2VydmVkMiAhPSAwKVxcbjE4MTk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTgyMDpcXHRcXG4xODIxOlxcdFxcdGlmIChjbWQuc2V0X2N1cnJlbnQgfHwgY21kLnNldF9ybmV4dCkge1xcbjE4MjI6XFx0XFx0XFx0aWYgKCF0Y3BfYW9fY2FuX3NldF9jdXJyZW50X3JuZXh0KHNrKSlcXG4xODIzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4MjQ6XFx0XFx0fVxcbjE4MjU6XFx0XFxuMTgyNjpcXHRcXHRpZiAoY21kLmtleWZsYWdzIFxcdTAwMjYgflRDUF9BT19ERUxfS0VZRl9BTEwpXFxuMTgyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODI4OlxcdFxcbjE4Mjk6XFx0XFx0LyogTm8gc2FuaXR5IGNoZWNrIGZvciBUQ1BfQU9fS0VZRl9JRklOREVYIGFzIGlmIGEgVlJGXFxuMTgzMDpcXHRcXHQgKiB3YXMgZGVzdHJveWVkLCB0aGVyZSBzdGlsbCBzaG91bGQgYmUgYSB3YXkgdG8gZGVsZXRlIGtleXMsXFxuMTgzMTpcXHRcXHQgKiB0aGF0IHdlcmUgYm91bmQgdG8gdGhhdCBsM2ludGYuIFNvLCBmYWlsIGxhdGUgYXQgbG9va3VwIHN0YWdlXFxuMTgzMjpcXHRcXHQgKiBpZiB0aGVyZSBpcyBubyBrZXkgZm9yIHRoYXQgaWZpbmRleC5cXG4xODMzOlxcdFxcdCAqL1xcbjE4MzQ6XFx0XFx0aWYgKGNtZC5pZmluZGV4IFxcdTAwMjZcXHUwMDI2ICEoY21kLmtleWZsYWdzIFxcdTAwMjYgVENQX0FPX0tFWUZfSUZJTkRFWCkpXFxuMTgzNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODM2OlxcdFxcbjE4Mzc6XFx0XFx0aWYgKGNtZC5rZXlmbGFncyBcXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpXFxuMTgzODpcXHRcXHRcXHRsM2luZGV4ID0gY21kLmlmaW5kZXg7XFxuMTgzOTpcXHRcXG4xODQwOlxcdFxcdGFvX2luZm8gPSBzZXRzb2Nrb3B0X2FvX2luZm8oc2spO1xcbjE4NDE6XFx0XFx0aWYgKElTX0VSUihhb19pbmZvKSlcXG4xODQyOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGFvX2luZm8pO1xcbjE4NDM6XFx0XFx0aWYgKCFhb19pbmZvKVxcbjE4NDQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMTg0NTpcXHRcXG4xODQ2OlxcdFxcdC8qIEZvciBzb2NrZXRzIGluIFRDUF9DTE9TRUQgaXQncyBwb3NzaWJsZSBzZXQga2V5cyB0aGF0IGFyZW4ndFxcbjE4NDc6XFx0XFx0ICogbWF0Y2hpbmcgdGhlIGZ1dHVyZSBwZWVyIChhZGRyZXNzL1ZSRi9ldGMpLFxcbjE4NDg6XFx0XFx0ICogdGNwX2FvX2Nvbm5lY3RfaW5pdCgpIHdpbGwgY2hvb3NlIGEgY29ycmVjdCBtYXRjaGluZyBNS1RcXG4xODQ5OlxcdFxcdCAqIGlmIHRoZXJlJ3MgYW55LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDozMzoxNS44OTQzMTk1NDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk3OTAwNTM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUF9BTyBLZXkgRmxhZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgaXQgc2VlbXMgd2UncmUgZmluYWxseSBhc3NpZ25pbmcgYGNtZC5pZmluZGV4YCB0byBgbDNpbmRleGAgd2hlbiB0aGUgYFRDUF9BT19LRVlGX0lGSU5ERVhgIGZsYWcgaXMgc2V0LlwiIEJlZm9yZSB0aGlzLCBgbDNpbmRleGAgd2FzIGp1c3QgaW5pdGlhbGl6ZWQgdG8gemVybywgYnV0IHRoaXMgY3J1Y2lhbCBhc3NpZ25tZW50IHdhcyBtaXNzaW5nLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcmVtZW1iZXIgaG93IGBjbWRgIGdldHMgcG9wdWxhdGVkIOKAkyB0aGF0J3MgcmlnaHQsIGl0IGNvbWVzIGZyb20gdXNlcnNwYWNlIHZpYSBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyYC4gVGhhdCBmdW5jdGlvbidzIGltcG9ydGFudCBiZWNhdXNlIGl0IGNvcGllcyB0aGUgZGF0YSBhbmQgemVyby1wYWRzIGlmIGBvcHRsZW5gIGlzIHNtYWxsZXIgdGhhbiB0aGUgYGNtZGAgc3RydWN0IGl0c2VsZi4gU28sIG5vIG1hdHRlciB3aGF0LCBgY21kYCBpcyBmdWxseSBpbml0aWFsaXplZCwgZWl0aGVyIGZyb20gdXNlciBzcGFjZSBvciB3aXRoIHplcm9zLiBUaGVuLCBgbDNpbmRleGAgY29ycmVjdGx5IGdldHMgaXRzIHZhbHVlLiBUaGlzIGFsbCBtZWFucyBpdCdzIGFuICppbnB1dCogZnJvbSB1c2VyIHNwYWNlLCBhbmQgdGhlcmUncyBubyB3YXkgd2UncmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIHNvbWV0aGluZyB0byB1c2VyIHNwYWNlLlxuXG5UaGlzIHBhdGNoLCBpdCdzIGNsZWFyIG5vdywgZml4ZXMgYSBidWcgd2hlcmUgYGwzaW5kZXhgIHdhcyBiZWluZyBpZ25vcmVkIGR1cmluZyBgVENQX0FPX0RFTF9LRVlgIGBzZXRzb2Nrb3B0YC4gVGhhdCdzIGEgZ29vZCBmaXguXG5cbk5vdywgbXkgbWluZCBnb2VzIHRvIEtNU0FOIOKAkyB0aGUgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIuIElzIHRoaXMgcGF0Y2ggcmVsZXZhbnQ/IERvZXMgaXQgZXhwb3NlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHByb2JsZW0/IE5vLCBkZWZpbml0ZWx5IG5vdC4gYGNtZGAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhhdCBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyYCBmdW5jdGlvbi4gV2UgcmVhZCBgY21kLmlmaW5kZXhgIGZyb20gYGNtZGAsIGFuZCBgY21kYCBpcyBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBBbmQsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGVyZSBpcyBubyBrZXJuZWwgbWVtb3J5IGNvcGllZCB0byB1c2VyIHNwYWNlIGluIHRoaXMgcGF0Y2guIEFjdHVhbGx5LCB3YWl0IC0gSSBzaG91bGQgY2hlY2sgdGhlIHNlbGZ0ZXN0cy4gVGhvc2UgbWlnaHQgYmUgdGhlIGV4Y2VwdGlvbi4gQWgsIGJ1dCB0aGUgc2VsZnRlc3RzIGFyZSBqdXN0IHRlc3RpbmcgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBPa2F5LCBJ4oCZbSBnb29kIHRvIGdvLlxuXG5UaW1lIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgIGZ1bmN0aW9uLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgwNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMzOjIzLjg3MzMyODQ4NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU0Mzc5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc29ja3B0ci5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc29ja3B0ci5oPTc3PXN0YXRpYyBpbmxpbmUgaW50IGNvcHlfc2FmZV9mcm9tX3NvY2twdHIodm9pZCAqZHN0LCBzaXplX3Qga3NpemUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NvY2twdHIuaC04Ni1cXG5pbmNsdWRlL2xpbnV4L3NvY2twdHIuaDo4NzpzdGF0aWMgaW5saW5lIGludCBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHIodm9pZCAqZHN0LCBzaXplX3Qga3NpemUsXFxuaW5jbHVkZS9saW51eC9zb2NrcHRyLmgtODgtXFx0XFx0c29ja3B0cl90IHNyYywgc2l6ZV90IHVzaXplKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDozMzoyMy45Mzg3NzExNTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0OTIzNzY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgOlxuXG4qKkRpc3NlY3RpbmcgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIGdldHRpbmcgbXlzZWxmIGZhbWlsaWFyIHdpdGggYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAuIFRoYXQgbmFtZSBhbG9uZSBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY2FuIGltbWVkaWF0ZWx5IGluZmVyIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiwgdW5zdXJwcmlzaW5nbHksIGNvcHlpbmcgYSBzdHJ1Y3R1cmUgZnJvbSBhIHNvY2tldCBwb2ludGVyLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gV2hhdCBraW5kIG9mIHNvY2tldD8gV2hhdCdzIHRoZSBzb3VyY2Ugc3RydWN0dXJlPyBXaGF0J3MgdGhlIGRlc3RpbmF0aW9uPyBBcmUgdGhlcmUgYW55IGRhdGEgY29udmVyc2lvbnMgaGFwcGVuaW5nPyBBbnkgbWVtb3J5IGFsbG9jYXRpb24gY29uc2lkZXJhdGlvbnM/IEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHNvY2tldCBjb21tdW5pY2F0aW9uLCBhbmQgbWVtb3J5IHNhZmV0eS4gT2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgSSdtIHRoaW5raW5nIGFib3V0OiBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBib3VuZGFyeSBjb25kaXRpb25zLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEknbGwgc3RhcnQgYnkgbG9va2luZyBhdCBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgZGlmZmVyZW50IHNvY2tldCB0eXBlcywgZGF0YSBzaXplcywgYW5kIHBvdGVudGlhbCBlcnJvcnMgZHVyaW5nIHRoZSBkYXRhIHRyYW5zZmVyLiBJJ2xsIGJlIHNjcnV0aW5pemluZyB0aGUgcmV0dXJuIHZhbHVlIGFzIHdlbGwuIFdoYXQgZG9lcyBpdCBzaWduaWZ5IGluIHRlcm1zIG9mIHN1Y2Nlc3Mgb3IgZmFpbHVyZT9cblxuXG4iLCJJbnB1dFRva2VucyI6OTc4OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMzOjI3LjY4ODAxMDczMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NvY2twdHIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA3NyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3NzpcXHRzdGF0aWMgaW5saW5lIGludCBjb3B5X3NhZmVfZnJvbV9zb2NrcHRyKHZvaWQgKmRzdCwgc2l6ZV90IGtzaXplLFxcbiAgNzg6XFx0XFx0XFx0XFx0XFx0XFx0IHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuICA3OTpcXHR7XFxuICA4MDpcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mga3NpemUpXFxuICA4MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDgyOlxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihkc3QsIG9wdHZhbCwga3NpemUpKVxcbiAgODM6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuICA4NDpcXHRcXHRyZXR1cm4gMDtcXG4gIDg1OlxcdH1cXG4gIDg2OlxcdFxcbiAgODc6XFx0c3RhdGljIGlubGluZSBpbnQgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyKHZvaWQgKmRzdCwgc2l6ZV90IGtzaXplLFxcbiAgODg6XFx0XFx0XFx0c29ja3B0cl90IHNyYywgc2l6ZV90IHVzaXplKVxcbiAgODk6XFx0e1xcbiAgOTA6XFx0XFx0aWYgKCFzb2NrcHRyX2lzX2tlcm5lbChzcmMpKVxcbiAgOTE6XFx0XFx0XFx0cmV0dXJuIGNvcHlfc3RydWN0X2Zyb21fdXNlcihkc3QsIGtzaXplLCBzcmMudXNlciwgdXNpemUpO1xcbiAgOTI6XFx0XFxuICA5MzpcXHRcXHRyZXR1cm4gY29weV9zdHJ1Y3RfZnJvbV9ib3VuY2VfYnVmZmVyKGRzdCwga3NpemUsIHNyYy5rZXJuZWwsIHVzaXplKTtcXG4gIDk0OlxcdH1cXG4gIDk1OlxcdFxcbiAgOTY6XFx0c3RhdGljIGlubGluZSBpbnQgY29weV90b19zb2NrcHRyX29mZnNldChzb2NrcHRyX3QgZHN0LCBzaXplX3Qgb2Zmc2V0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDozMzoyNy42ODgwNzQ3NzFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODcyNjA2NjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUQ1AtQU9fREVMX0tFWSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgaXMgdGhlIGZpeCBmb3IgYFRDUF9BT19ERUxfS0VZYCdzIGBzZXRzb2Nrb3B0YCBjYWxsLiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBjb21wbGV0ZWx5IGlnbm9yaW5nIHRoZSBgaWZpbmRleGAgZmllbGQgcHJvdmlkZWQgaW4gdGhlIHVzZXItc3VwcGxpZWQgYHRjcF9hb19kZWxgIHN0cnVjdHVyZSB3aGVuIGRlbGV0aW5nIGEgVENQLUFPIGtleSwgd2hpY2ggaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgYnVnLlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgb3IgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAsIHRoZSBtZWNoYW5pc20gdXNlZCB0byBicmluZyBkYXRhIGZyb20gdXNlciBzcGFjZSBpbnRvIHRoZSBrZXJuZWwsIGlzIGluaGVyZW50bHkgc2FmZS4gSWYgdGhlIHVzZXItcHJvdmlkZWQgZGF0YSBpcyBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQsIHRoZSBmdW5jdGlvbiB6ZXJvZXMgb3V0IHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhlIGBjbWRgIHN0cnVjdC4gSWYgaXQncyBsYXJnZXIsIGl0IG9ubHkgY29waWVzIHRoZSByZXF1aXJlZCBzaXplIGFuZCB2ZXJpZmllcyB0aGF0IHRoZSByZXN0IGlzIHplcm9lZCBvdXQuIFRoaXMgbWVhbnMgYGNtZGAgKmlzIGFsd2F5cyogZnVsbHkgaW5pdGlhbGl6ZWQuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgc3RyYWlnaHRmb3J3YXJkOiBpdCdzIGEgc2ltcGxlIGFzc2lnbm1lbnQgb2YgYGNtZC5pZmluZGV4YCB0byBgbDNpbmRleGAsICpidXQgb25seSogaWYgdGhlIGBUQ1BfQU9fS0VZRl9JRklOREVYYCBmbGFnIGlzIHNldC4gQ3JpdGljYWxseSwgdGhlcmUncyBubyBmYW5jeSBtZW1vcnkgbWFuaXB1bGF0aW9uIGdvaW5nIG9uLiBUaGVyZSdzIG5vIG5ldyBhbGxvY2F0aW9uLCBubyBjb3B5aW5nIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0J3MganVzdCByZWFkaW5nIGZyb20gYW4gYWxyZWFkeSBpbml0aWFsaXplZCBzdHJ1Y3R1cmUgYW5kIGFzc2lnbmluZyBpdCB0byBhIGxvY2FsIHZhcmlhYmxlLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBpcyBmdW5jdGlvbmFsbHkgc2FmZSwgSSBkb24ndCBzZWUgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGJlaW5nIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbid0IHdhcnJhbnRlZCBoZXJlLiBTdGFuZGFyZCBLQVNBTiwgYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMsIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzg1LCJPdXRwdXRUb2tlbnMiOjIyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMzOjM2LjQxNDE0MzcxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGZ1bmN0aW9uYWwgYnVnIGluIGB0Y3BfYW9fZGVsX2NtZGAgd2hlcmUgdGhlIGBpZmluZGV4YCBmaWVsZCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIGB0Y3BfYW9fZGVsYCBzdHJ1Y3R1cmUgd2FzIGlnbm9yZWQgd2hlbiBkZWxldGluZyBhIFRDUC1BTyBrZXkuIFRoZSBgY21kYCBzdHJ1Y3R1cmUgaXMgc2FmZWx5IHBvcHVsYXRlZCBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cigpYCwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKGVpdGhlciBieSBjb3B5aW5nIGZyb20gdXNlciBzcGFjZSBvciB6ZXJvLXBhZGRpbmcpLiBUaGUgcGF0Y2ggc2ltcGx5IHJlYWRzIHRoZSBpbml0aWFsaXplZCBgY21kLmlmaW5kZXhgIGZpZWxkIGFuZCBhc3NpZ25zIGl0IHRvIGBsM2luZGV4YCBpZiB0aGUgYFRDUF9BT19LRVlGX0lGSU5ERVhgIGZsYWcgaXMgc2V0LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyBpbiBgdGNwX2FvX2RlbF9jbWRgIHdoZXJlIHRoZSBgaWZpbmRleGAgZmllbGQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBgdGNwX2FvX2RlbGAgc3RydWN0dXJlIHdhcyBpZ25vcmVkIHdoZW4gZGVsZXRpbmcgYSBUQ1AtQU8ga2V5LiBUaGUgYGNtZGAgc3RydWN0dXJlIGlzIHNhZmVseSBwb3B1bGF0ZWQgZnJvbSB1c2VyIHNwYWNlIHVzaW5nIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHIoKWAsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkIChlaXRoZXIgYnkgY29weWluZyBmcm9tIHVzZXIgc3BhY2Ugb3IgemVyby1wYWRkaW5nKS4gVGhlIHBhdGNoIHNpbXBseSByZWFkcyB0aGUgaW5pdGlhbGl6ZWQgYGNtZC5pZmluZGV4YCBmaWVsZCBhbmQgYXNzaWducyBpdCB0byBgbDNpbmRleGAgaWYgdGhlIGBUQ1BfQU9fS0VZRl9JRklOREVYYCBmbGFnIGlzIHNldC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowzslzq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-22 20:20:13 +0000 UTC FinishedAt: 2026-08-22 20:33:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_AO", "NET_VRF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_AO", "NET_VRF" ], "series_id": "d0b79e97-cc8d-4a66-8cf3-ad737baf3a92" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_parse_ao", "tcp_v4_parse_ao", "tcp_v6_parse_ao" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9BTyYjMzQ7LAogICAgJiMzNDtORVRfVlJGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3BhcnNlX2FvJiMzNDssCiAgICAmIzM0O3RjcF92NF9wYXJzZV9hbyYjMzQ7LAogICAgJiMzNDt0Y3BfdjZfcGFyc2VfYW8mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGZ1bmN0aW9uYWwgYnVnIGluIGB0Y3BfYW9fZGVsX2NtZGAgd2hlcmUgdGhlIGBpZmluZGV4YCBmaWVsZCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIGB0Y3BfYW9fZGVsYCBzdHJ1Y3R1cmUgd2FzIGlnbm9yZWQgd2hlbiBkZWxldGluZyBhIFRDUC1BTyBrZXkuIFRoZSBgY21kYCBzdHJ1Y3R1cmUgaXMgc2FmZWx5IHBvcHVsYXRlZCBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cigpYCwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKGVpdGhlciBieSBjb3B5aW5nIGZyb20gdXNlciBzcGFjZSBvciB6ZXJvLXBhZGRpbmcpLiBUaGUgcGF0Y2ggc2ltcGx5IHJlYWRzIHRoZSBpbml0aWFsaXplZCBgY21kLmlmaW5kZXhgIGZpZWxkIGFuZCBhc3NpZ25zIGl0IHRvIGBsM2luZGV4YCBpZiB0aGUgYFRDUF9BT19LRVlGX0lGSU5ERVhgIGZsYWcgaXMgc2V0LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIFRDUC1BTyBrZXkgZGVsZXRpb24gd2hlcmUgdGhlIGludGVyZmFjZSBpbmRleCAoVlJGKSB3YXMgbm90IHByb3Blcmx5IGV4dHJhY3RlZCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIGNvbW1hbmQgd2hlbiB0aGUgVENQX0FPX0tFWUZfSUZJTkRFWCBmbGFnIHdhcyBzZXQuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgVENQIHNldHNvY2tvcHQgbG9naWMgZm9yIFRDUF9BT19ERUxfS0VZLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGMwMmNiYWY5NWIxNjRiNmM5ZWEyYWI4MTA1MzA3ZTI5ODVhY2QxOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDIyIDIwOjIzOjM2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9hby5jIGIvbmV0L2lwdjQvdGNwX2FvLmNcbmluZGV4IDUwOTQyNjc0NDdhZWUuLjI2ODY0NjIxZTZkZWYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2FvLmNcbkBAIC0xODM0LDYgJiM0MzsxODM0LDkgQEAgc3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4gXHRpZiAoY21kLmlmaW5kZXggXHUwMDI2XHUwMDI2ICEoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0aWYgKGNtZC5rZXlmbGFncyBcdTAwMjYgVENQX0FPX0tFWUZfSUZJTkRFWClcbiYjNDM7XHRcdGwzaW5kZXggPSBjbWQuaWZpbmRleDtcbiYjNDM7XG4gXHRhb19pbmZvID0gc2V0c29ja29wdF9hb19pbmZvKHNrKTtcbiBcdGlmIChJU19FUlIoYW9faW5mbykpXG4gXHRcdHJldHVybiBQVFJfRVJSKGFvX2luZm8pO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xuaW5kZXggZDg2YmIzODBiNzlmNy4uMDQ1MWY5MmY0NjQ1ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jXG5AQCAtNjMsOCAmIzQzOzYzLDggQEAgc3RhdGljIGludCBwcmVwYXJlX2xzayh1bmlvbiB0Y3BfYWRkciAqYWRkciwgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZClcbiBcdHJldHVybiBzaztcbiB9XG4gXG4tc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxuLVx0XHRcdGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSlcbiYjNDM7c3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBpbnQgaWZpbmRleCxcbiYjNDM7XHRcdFx0Ym9vbCBhc3luYywgaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5KVxuIHtcbiBcdHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgYW9faW5mbyA9IHt9O1xuIFx0c3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0IGtleSA9IHt9O1xuQEAgLTc2LDYgJiM0Mzs3NiwxMCBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXG4gXHRkZWwucHJlZml4ID0gREVGQVVMVF9URVNUX1BSRUZJWDtcbiBcdGRlbC5zbmRpZCA9IHNuZGlkO1xuIFx0ZGVsLnJjdmlkID0gcmN2aWQ7XG4mIzQzO1x0aWYgKGlmaW5kZXgpIHtcbiYjNDM7XHRcdGRlbC5rZXlmbGFncyA9IFRDUF9BT19LRVlGX0lGSU5ERVg7XG4mIzQzO1x0XHRkZWwuaWZpbmRleCA9IGlmaW5kZXg7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKGN1cnJlbnRfa2V5IFx1MDAzZT0gMCkge1xuIFx0XHRkZWwuc2V0X2N1cnJlbnQgPSAxO1xuQEAgLTk1LDcgJiM0Mzs5OSw4IEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbiBcbiBcdHRjcF9hZGRyX3RvX3NvY2thZGRyX2luKFx1MDAyNnNvY2thZGRyLCBcdTAwMjZ0aGlzX2lwX2Rlc3QsIDApO1xuIFx0ZXJyID0gdGVzdF9nZXRfb25lX2FvKHNrLCBcdTAwMjZrZXksIFx1MDAyNnNvY2thZGRyLCBzaXplb2Yoc29ja2FkZHIpLFxuLVx0XHRcdCAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCk7XG4mIzQzO1x0XHRcdCAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCxcbiYjNDM7XHRcdFx0ICAgICAgZGVsLmtleWZsYWdzLCBkZWwuaWZpbmRleCk7XG4gXHRpZiAoIWVycilcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRpZiAoZXJyICE9IC1FMkJJRylcbkBAIC0xMTIsMTIgJiM0MzsxMTcsMTIgQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxuIH1cbiBcbiBzdGF0aWMgdm9pZCB0cnlfZGVsZXRlX2tleShjaGFyICp0c3RfbmFtZSwgaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLFxuLVx0XHRcdCAgIGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSxcbiYjNDM7XHRcdFx0ICAgaW50IGlmaW5kZXgsIGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSxcbiBcdFx0XHQgICBmYXVsdF90IGluailcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTtcbiYjNDM7XHRlcnIgPSB0ZXN0X2RlbF9rZXkoc2ssIHNuZGlkLCByY3ZpZCwgaWZpbmRleCwgYXN5bmMsIGN1cnJlbnRfa2V5LCBybmV4dF9rZXkpO1xuIFx0aWYgKChlcnIgPT0gLUVCVVNZIFx1MDAyNlx1MDAyNiBmYXVsdChCVVNZKSkgfHwgKGVyciA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBmYXVsdChDVVJSTkVYVCkpKSB7XG4gXHRcdHRlc3Rfb2soXCYjMzQ7JXM6IGtleSBkZWxldGlvbiB3YXMgcHJldmVudGVkXCYjMzQ7LCB0c3RfbmFtZSk7XG4gXHRcdHJldHVybjtcbkBAIC0yMzYsMTUgJiM0MzsyNDEsMTUgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKVxuIFx0aW50IHNrO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5XCYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCAwKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXlcJiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCAwKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbiBcdGlmICh0ZXN0X3NldF9rZXkoc2ssIDEwMCwgMjAwKSlcbiBcdFx0dGVzdF9lcnJvcihcJiMzNDtmYWlsZWQgdG8gc2V0IGN1cnJlbnQvcm5leHQga2V5c1wmIzM0Oyk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXlcJiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgcm5leHQga2V5XCYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRzayA9IHByZXBhcmVfc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG5AQCAtMjU0LDEwICYjNDM7MjU5LDEyIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcbiBcdGlmICh0ZXN0X2FkZF9rZXkoc2ssIFwmIzM0O0dsb3J5IHRvIFVrcmFpbmUhXCYjMzQ7LCB0aGlzX2lwX2Rlc3QsXG4gXHRcdFx0IERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpXG4gXHRcdHRlc3RfZXJyb3IoXCYjMzQ7dGVzdF9hZGRfa2V5KClcJiMzNDspO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5ICYjNDM7IHNldCBjdXJyZW50L3JuZXh0XCYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIDEwLCAxMywgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLCAxMCwgMTEsIDAsIDIwMCwgLTEsIDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleVwmIzM0Oywgc2ssIDEyLCAxMywgMCwgLTEsIDIwMCwgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCYjNDM7cm5leHQga2V5XCYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4mIzQzO1x0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5ICYjNDM7IHNldCBjdXJyZW50L3JuZXh0XCYjMzQ7LCBzayxcbiYjNDM7XHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCAwKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLCAxMCwgMTEsIDAsIDAsIDIwMCwgLTEsIDApO1xuJiM0MztcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBybmV4dCBrZXlcJiMzNDssIHNrLCAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIDApO1xuJiM0MztcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50JiM0MztybmV4dCBrZXlcJiMzNDssIHNrLFxuJiM0MztcdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuQEAgLTI3Miw2ICYjNDM7Mjc5LDE4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcbiBcdFx0XHRcdCAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLFxuIFx0XHRcdFx0ICBmYWxzZSwgdHJ1ZSwgMjAsIDEwLCAwKTtcbiBcdGNsb3NlKHNrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzaG91bGRfc2tpcF90ZXN0KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGFkZCAmIzQzOyBkZWxldGUgVlJGLXNjb3BlZCBrZXlcJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIEtDT05GSUdfTkVUX1ZSRikpIHtcbiYjNDM7XHRcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbiYjNDM7XHRcdGlmICh0ZXN0X2FkZF9rZXlfdnJmKHNrLCBTRUNPTkRfUEFTU1dPUkQsIFRDUF9BT19LRVlGX0lGSU5ERVgsXG4mIzQzO1x0XHRcdFx0ICAgICB0aGlzX2lwX2Rlc3QsIERFRkFVTFRfVEVTVF9QUkVGSVgsXG4mIzQzO1x0XHRcdFx0ICAgICB0ZXN0X3ZyZl9pZmluZGV4LCAyMDEsIDIwMSkpXG4mIzQzO1x0XHRcdHRlc3RfZXJyb3IoXCYjMzQ7dGVzdF9hZGRfa2V5X3ZyZigpXCYjMzQ7KTtcbiYjNDM7XHRcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGFkZCAmIzQzOyBkZWxldGUgVlJGLXNjb3BlZCBrZXlcJiMzNDssIHNrLCAyMDEsIDIwMSxcbiYjNDM7XHRcdFx0ICAgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDAsIC0xLCAtMSwgMCk7XG4mIzQzO1x0XHRjbG9zZShzayk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBhc3NlcnRfbm9fY3VycmVudF9ybmV4dChjb25zdCBjaGFyICp0c3RfbXNnLCBpbnQgc2spXG5AQCAtMzIyLDggJiM0MzszNDEsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRpbnQgc2ssIGVycjtcbiBcbiBcdHNrID0gcHJlcGFyZV9sc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXlcJiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApO1xuJiM0MztcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVwmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xuJiM0MztcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIDApO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX2xzayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0zNDUsOCAmIzQzOzM2NCwxMCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRpZiAobGlzdGVuKHNrLCAxMCkpXG4gXHRcdHRlc3RfZXJyb3IoXCYjMzQ7bGlzdGVuKClcJiMzNDspO1xuIFx0YXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoXCYjMzQ7bGlzdGVuKCkgYWZ0ZXIgY3VycmVudC9ybmV4dCBrZXlzIHNldFwmIzM0Oywgc2spO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXCYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKVwmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcJiMzNDssIHNrLFxuJiM0MztcdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgcm5leHQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXCYjMzQ7LCBzayxcbiYjNDM7XHRcdCAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRhc3NlcnRfbm9fdGNwX3JlcGFpcigpO1xuQEAgLTM1OSwxMyAmIzQzOzM4MCwxMyBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRcdFx0IERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpXG4gXHRcdHRlc3RfZXJyb3IoXCYjMzQ7dGVzdF9hZGRfa2V5KClcJiMzNDspO1xuIFx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5ICYjNDM7IHNldCBjdXJyZW50L3JuZXh0XCYjMzQ7LCBzayxcbi1cdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTtcbiYjNDM7XHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCBGQVVMVF9DVVJSTkVYVCk7XG4gXHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLFxuLVx0XHQgICAgICAgMTAsIDExLCAwLCAyMDAsIC0xLCBGQVVMVF9DVVJSTkVYVCk7XG4mIzQzO1x0XHQgICAgICAgMTAsIDExLCAwLCAwLCAyMDAsIC0xLCBGQVVMVF9DVVJSTkVYVCk7XG4gXHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5XCYjMzQ7LCBzayxcbi1cdFx0ICAgICAgIDEyLCAxMywgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpO1xuJiM0MztcdFx0ICAgICAgIDEyLCAxMywgMCwgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpO1xuIFx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5XCYjMzQ7LCBzayxcbi1cdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApO1xuJiM0MztcdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX2xzayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0xMTMxLDcgJiM0MzsxMTUyLDYgQEAgc3RhdGljIHZvaWQgY2hlY2tfZXN0YWJsaXNoZWRfc29ja2V0KHZvaWQpXG4ge1xuIFx0dW5zaWduZWQgaW50IHBvcnQgPSB0ZXN0X3NlcnZlcl9wb3J0O1xuIFxuLVx0c2V0dXBfdnJmcygpO1xuIFx0dHJ5X2NsaWVudF9ydW4oXCYjMzQ7Y2xpZW50OiBDaGVjayBjdXJyZW50L3JuZXh0IGtleXMgdW5zZXQgYmVmb3JlIGNvbm5lY3QoKVwmIzM0OyxcbiBcdFx0ICAgICAgIHBvcnQmIzQzOyYjNDM7LCAyMCwgLTEsIC0xKTtcbiBcdHRyeV9jbGllbnRfcnVuKFwmIzM0O2NsaWVudDogQ2hlY2sgY3VycmVudC9ybmV4dCBrZXlzIHNldCBiZWZvcmUgY29ubmVjdCgpXCYjMzQ7LFxuQEAgLTExNTAsNiAmIzQzOzExNzAsNyBAQCBzdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcbiB7XG4gXHRpZiAoaW5ldF9wdG9uKFRFU1RfRkFNSUxZLCBURVNUX1dST05HX0lQLCBcdTAwMjZ3cm9uZ19hZGRyKSAhPSAxKVxuIFx0XHR0ZXN0X2Vycm9yKFwmIzM0O0NhbiYjMzk7dCBjb252ZXJ0IGlwIGFkZHJlc3MgJXNcJiMzNDssIFRFU1RfV1JPTkdfSVApO1xuJiM0MztcdHNldHVwX3ZyZnMoKTtcbiBcdGNoZWNrX2Nsb3NlZF9zb2NrZXQoKTtcbiBcdGNoZWNrX2xpc3Rlbl9zb2NrZXQoKTtcbiBcdGNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCgpO1xuQEAgLTExNTgsNiAmIzQzOzExNzksNiBAQCBzdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcbiBcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIHtcbi1cdHRlc3RfaW5pdCgxMjEsIHNlcnZlcl9mbiwgY2xpZW50X2ZuKTtcbiYjNDM7XHR0ZXN0X2luaXQoMTIyLCBzZXJ2ZXJfZm4sIGNsaWVudF9mbik7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmhcbmluZGV4IGViYjI4OTljMTJmZTAuLjUzYmUxNzQ0MjM3ZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXG5AQCAtNDA0LDcgJiM0Mzs0MDQsOCBAQCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3ByZXBhcmVfZGVmX2tleShzdHJ1Y3QgdGNwX2FvX2FkZCAqYW8sXG4gXG4gZXh0ZXJuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcbiBcdFx0XHQgICB2b2lkICphZGRyLCBzaXplX3QgYWRkcl9zeixcbi1cdFx0XHQgICB1aW50OF90IHByZWZpeCwgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCk7XG4mIzQzO1x0XHRcdCAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLFxuJiM0MztcdFx0XHQgICB1aW50OF90IGtleWZsYWdzLCBpbnQgaWZpbmRleCk7XG4gZXh0ZXJuIGludCB0ZXN0X2dldF9hb19pbmZvKGludCBzaywgc3RydWN0IHRjcF9hb19pbmZvX29wdCAqb3V0KTtcbiBleHRlcm4gaW50IHRlc3Rfc2V0X2FvX2luZm8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0ICppbik7XG4gZXh0ZXJuIGludCB0ZXN0X2NtcF9nZXRzb2Nrb3B0X3NldHNvY2tvcHQoY29uc3Qgc3RydWN0IHRjcF9hb19hZGQgKmEsXG5AQCAtNDE4LDcgJiM0Mzs0MTksOCBAQCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3ZlcmlmeV9zb2NrZXRfa2V5KGludCBzaywgc3RydWN0IHRjcF9hb19hZGQgKmtleSlcbiBcdGludCBlcnI7XG4gXG4gXHRlcnIgPSB0ZXN0X2dldF9vbmVfYW8oc2ssIFx1MDAyNmtleTIsIFx1MDAyNmtleS1cdTAwM2VhZGRyLCBzaXplb2Yoa2V5LVx1MDAzZWFkZHIpLFxuLVx0XHRcdCAgICAgIGtleS1cdTAwM2VwcmVmaXgsIGtleS1cdTAwM2VzbmRpZCwga2V5LVx1MDAzZXJjdmlkKTtcbiYjNDM7XHRcdFx0ICAgICAga2V5LVx1MDAzZXByZWZpeCwga2V5LVx1MDAzZXNuZGlkLCBrZXktXHUwMDNlcmN2aWQsXG4mIzQzO1x0XHRcdCAgICAgIGtleS1cdTAwM2VrZXlmbGFncywga2V5LVx1MDAzZWlmaW5kZXgpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcbmluZGV4IGVmOGU5MDMxZDQ3YTMuLjJlN2IwNmExYTE1NjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suY1xuQEAgLTI1Miw3ICYjNDM7MjUyLDcgQEAgc3RhdGljIGludCB0ZXN0X2dldF9hb19rZXlzX25yKGludCBzaylcbiBcbiBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsXG4gXHRcdHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LCB1aW50OF90IHByZWZpeCxcbi1cdFx0dWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZClcbiYjNDM7XHRcdHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KVxuIHtcbiBcdHN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCB0bXAgPSB7fTtcbiBcdHNvY2tsZW5fdCB0bXBfc3ogPSBzaXplb2YodG1wKTtcbkBAIC0yNjIsNiAmIzQzOzI2Miw4IEBAIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcbiBcdHRtcC5wcmVmaXggPSBwcmVmaXg7XG4gXHR0bXAuc25kaWQgID0gc25kaWQ7XG4gXHR0bXAucmN2aWQgID0gcmN2aWQ7XG4mIzQzO1x0dG1wLmtleWZsYWdzID0ga2V5ZmxhZ3M7XG4mIzQzO1x0dG1wLmlmaW5kZXggPSBpZmluZGV4O1xuIFx0dG1wLm5rZXlzICA9IDE7XG4gXG4gXHRyZXQgPSBnZXRzb2Nrb3B0KHNrLCBJUFBST1RPX1RDUCwgVENQX0FPX0dFVF9LRVlTLCBcdTAwMjZ0bXAsIFx1MDAyNnRtcF9zeik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9BTyYjMzQ7LAogICAgJiMzNDtORVRfVlJGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3BhcnNlX2FvJiMzNDssCiAgICAmIzM0O3RjcF92NF9wYXJzZV9hbyYjMzQ7LAogICAgJiMzNDt0Y3BfdjZfcGFyc2VfYW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gVENQLUFPIGtleSBkZWxldGlvbiB3aGVyZSB0aGUgaW50ZXJmYWNlIGluZGV4IChWUkYpIHdhcyBub3QgcHJvcGVybHkgZXh0cmFjdGVkIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgY29tbWFuZCB3aGVuIHRoZSBUQ1BfQU9fS0VZRl9JRklOREVYIGZsYWcgd2FzIHNldC4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBUQ1Agc2V0c29ja29wdCBsb2dpYyBmb3IgVENQX0FPX0RFTF9LRVkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YzAyY2JhZjk1YjE2NGI2YzllYTJhYjgxMDUzMDdlMjk4NWFjZDE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjIgMjA6MjM6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYW8uYyBiL25ldC9pcHY0L3RjcF9hby5jCmluZGV4IDUwOTQyNjc0NDdhZWUuLjI2ODY0NjIxZTZkZWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9hby5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9hby5jCkBAIC0xODM0LDYgJiM0MzsxODM0LDkgQEAgc3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksCiAJaWYgKGNtZC5pZmluZGV4ICZhbXA7JmFtcDsgIShjbWQua2V5ZmxhZ3MgJmFtcDsgVENQX0FPX0tFWUZfSUZJTkRFWCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CWlmIChjbWQua2V5ZmxhZ3MgJmFtcDsgVENQX0FPX0tFWUZfSUZJTkRFWCkKJiM0MzsJCWwzaW5kZXggPSBjbWQuaWZpbmRleDsKJiM0MzsKIAlhb19pbmZvID0gc2V0c29ja29wdF9hb19pbmZvKHNrKTsKIAlpZiAoSVNfRVJSKGFvX2luZm8pKQogCQlyZXR1cm4gUFRSX0VSUihhb19pbmZvKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYwppbmRleCBkODZiYjM4MGI3OWY3Li4wNDUxZjkyZjQ2NDVkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jCkBAIC02Myw4ICYjNDM7NjMsOCBAQCBzdGF0aWMgaW50IHByZXBhcmVfbHNrKHVuaW9uIHRjcF9hZGRyICphZGRyLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKQogCXJldHVybiBzazsKIH0KIAotc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLAotCQkJaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5KQomIzQzO3N0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgaW50IGlmaW5kZXgsCiYjNDM7CQkJYm9vbCBhc3luYywgaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5KQogewogCXN0cnVjdCB0Y3BfYW9faW5mb19vcHQgYW9faW5mbyA9IHt9OwogCXN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCBrZXkgPSB7fTsKQEAgLTc2LDYgJiM0Mzs3NiwxMCBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsCiAJZGVsLnByZWZpeCA9IERFRkFVTFRfVEVTVF9QUkVGSVg7CiAJZGVsLnNuZGlkID0gc25kaWQ7CiAJZGVsLnJjdmlkID0gcmN2aWQ7CiYjNDM7CWlmIChpZmluZGV4KSB7CiYjNDM7CQlkZWwua2V5ZmxhZ3MgPSBUQ1BfQU9fS0VZRl9JRklOREVYOwomIzQzOwkJZGVsLmlmaW5kZXggPSBpZmluZGV4OwomIzQzOwl9CiAKIAlpZiAoY3VycmVudF9rZXkgJmd0Oz0gMCkgewogCQlkZWwuc2V0X2N1cnJlbnQgPSAxOwpAQCAtOTUsNyAmIzQzOzk5LDggQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLAogCiAJdGNwX2FkZHJfdG9fc29ja2FkZHJfaW4oJmFtcDtzb2NrYWRkciwgJmFtcDt0aGlzX2lwX2Rlc3QsIDApOwogCWVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgJmFtcDtrZXksICZhbXA7c29ja2FkZHIsIHNpemVvZihzb2NrYWRkciksCi0JCQkgICAgICBERUZBVUxUX1RFU1RfUFJFRklYLCBzbmRpZCwgcmN2aWQpOwomIzQzOwkJCSAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCwKJiM0MzsJCQkgICAgICBkZWwua2V5ZmxhZ3MsIGRlbC5pZmluZGV4KTsKIAlpZiAoIWVycikKIAkJcmV0dXJuIC1FRVhJU1Q7CiAJaWYgKGVyciAhPSAtRTJCSUcpCkBAIC0xMTIsMTIgJiM0MzsxMTcsMTIgQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLAogfQogCiBzdGF0aWMgdm9pZCB0cnlfZGVsZXRlX2tleShjaGFyICp0c3RfbmFtZSwgaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLAotCQkJICAgYm9vbCBhc3luYywgaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5LAomIzQzOwkJCSAgIGludCBpZmluZGV4LCBib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXksCiAJCQkgICBmYXVsdF90IGluaikKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTsKJiM0MzsJZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGlmaW5kZXgsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTsKIAlpZiAoKGVyciA9PSAtRUJVU1kgJmFtcDsmYW1wOyBmYXVsdChCVVNZKSkgfHwgKGVyciA9PSAtRUlOVkFMICZhbXA7JmFtcDsgZmF1bHQoQ1VSUk5FWFQpKSkgewogCQl0ZXN0X29rKCYjMzQ7JXM6IGtleSBkZWxldGlvbiB3YXMgcHJldmVudGVkJiMzNDssIHRzdF9uYW1lKTsKIAkJcmV0dXJuOwpAQCAtMjM2LDE1ICYjNDM7MjQxLDE1IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZCkKIAlpbnQgc2s7CiAKIAlzayA9IHByZXBhcmVfc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXMmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTsKIAljbG9zZShzayk7CiAKIAlzayA9IHByZXBhcmVfc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKIAlpZiAodGVzdF9zZXRfa2V5KHNrLCAxMDAsIDIwMCkpCiAJCXRlc3RfZXJyb3IoJiMzNDtmYWlsZWQgdG8gc2V0IGN1cnJlbnQvcm5leHQga2V5cyYjMzQ7KTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleSYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgcm5leHQga2V5JiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9zaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMjU0LDEwICYjNDM7MjU5LDEyIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZCkKIAlpZiAodGVzdF9hZGRfa2V5KHNrLCAmIzM0O0dsb3J5IHRvIFVrcmFpbmUhJiMzNDssIHRoaXNfaXBfZGVzdCwKIAkJCSBERUZBVUxUX1RFU1RfUFJFRklYLCAxMiwgMTMpKQogCQl0ZXN0X2Vycm9yKCYjMzQ7dGVzdF9hZGRfa2V5KCkmIzM0Oyk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXkgJiM0Mzsgc2V0IGN1cnJlbnQvcm5leHQmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAxMCwgMTMsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5JiMzNDssIHNrLCAxMCwgMTEsIDAsIDIwMCwgLTEsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleSYjMzQ7LCBzaywgMTIsIDEzLCAwLCAtMSwgMjAwLCAwKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50JiM0MztybmV4dCBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSAmIzQzOyBzZXQgY3VycmVudC9ybmV4dCYjMzQ7LCBzaywKJiM0MzsJCSAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssIDEwLCAxMSwgMCwgMCwgMjAwLCAtMSwgMCk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleSYjMzQ7LCBzaywgMTIsIDEzLCAwLCAwLCAtMSwgMjAwLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCYjNDM7cm5leHQga2V5JiMzNDssIHNrLAomIzQzOwkJICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9zaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMjcyLDYgJiM0MzsyNzksMTggQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKQogCQkJCSAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLAogCQkJCSAgZmFsc2UsIHRydWUsIDIwLCAxMCwgMCk7CiAJY2xvc2Uoc2spOwomIzQzOwomIzQzOwlpZiAoIXNob3VsZF9za2lwX3Rlc3QoJiMzNDtjbG9zZWQgc29ja2V0LCBhZGQgJiM0MzsgZGVsZXRlIFZSRi1zY29wZWQga2V5JiMzNDssCiYjNDM7CQkJICAgICAgS0NPTkZJR19ORVRfVlJGKSkgewomIzQzOwkJc2sgPSBwcmVwYXJlX3NrKCZhbXA7dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7CiYjNDM7CQlpZiAodGVzdF9hZGRfa2V5X3ZyZihzaywgU0VDT05EX1BBU1NXT1JELCBUQ1BfQU9fS0VZRl9JRklOREVYLAomIzQzOwkJCQkgICAgIHRoaXNfaXBfZGVzdCwgREVGQVVMVF9URVNUX1BSRUZJWCwKJiM0MzsJCQkJICAgICB0ZXN0X3ZyZl9pZmluZGV4LCAyMDEsIDIwMSkpCiYjNDM7CQkJdGVzdF9lcnJvcigmIzM0O3Rlc3RfYWRkX2tleV92cmYoKSYjMzQ7KTsKJiM0MzsJCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgYWRkICYjNDM7IGRlbGV0ZSBWUkYtc2NvcGVkIGtleSYjMzQ7LCBzaywgMjAxLCAyMDEsCiYjNDM7CQkJICAgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDAsIC0xLCAtMSwgMCk7CiYjNDM7CQljbG9zZShzayk7CiYjNDM7CX0KIH0KIAogc3RhdGljIHZvaWQgYXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoY29uc3QgY2hhciAqdHN0X21zZywgaW50IHNrKQpAQCAtMzIyLDggJiM0MzszNDEsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpCiAJaW50IHNrLCBlcnI7CiAKIAlzayA9IHByZXBhcmVfbHNrKCZhbXA7dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5cyYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgMCk7CiAJY2xvc2Uoc2spOwogCiAJc2sgPSBwcmVwYXJlX2xzaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMzQ1LDggJiM0MzszNjQsMTAgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKQogCWlmIChsaXN0ZW4oc2ssIDEwKSkKIAkJdGVzdF9lcnJvcigmIzM0O2xpc3RlbigpJiMzNDspOwogCWFzc2VydF9ub19jdXJyZW50X3JuZXh0KCYjMzQ7bGlzdGVuKCkgYWZ0ZXIgY3VycmVudC9ybmV4dCBrZXlzIHNldCYjMzQ7LCBzayk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssCiYjNDM7CQkgICAgICAgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssCiYjNDM7CQkgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpOwogCWNsb3NlKHNrKTsKIAogCWFzc2VydF9ub190Y3BfcmVwYWlyKCk7CkBAIC0zNTksMTMgJiM0MzszODAsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKQogCQkJIERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpCiAJCXRlc3RfZXJyb3IoJiMzNDt0ZXN0X2FkZF9rZXkoKSYjMzQ7KTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSAmIzQzOyBzZXQgY3VycmVudC9ybmV4dCYjMzQ7LCBzaywKLQkJICAgICAgIDEwMCwgMTAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTsKJiM0MzsJCSAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCBGQVVMVF9DVVJSTkVYVCk7CiAJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssCi0JCSAgICAgICAxMCwgMTEsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTsKJiM0MzsJCSAgICAgICAxMCwgMTEsIDAsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBybmV4dCBrZXkmIzM0Oywgc2ssCi0JCSAgICAgICAxMiwgMTMsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTsKJiM0MzsJCSAgICAgICAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywKLQkJICAgICAgIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwkJICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9sc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKQEAgLTExMzEsNyAmIzQzOzExNTIsNiBAQCBzdGF0aWMgdm9pZCBjaGVja19lc3RhYmxpc2hlZF9zb2NrZXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgcG9ydCA9IHRlc3Rfc2VydmVyX3BvcnQ7CiAKLQlzZXR1cF92cmZzKCk7CiAJdHJ5X2NsaWVudF9ydW4oJiMzNDtjbGllbnQ6IENoZWNrIGN1cnJlbnQvcm5leHQga2V5cyB1bnNldCBiZWZvcmUgY29ubmVjdCgpJiMzNDssCiAJCSAgICAgICBwb3J0JiM0MzsmIzQzOywgMjAsIC0xLCAtMSk7CiAJdHJ5X2NsaWVudF9ydW4oJiMzNDtjbGllbnQ6IENoZWNrIGN1cnJlbnQvcm5leHQga2V5cyBzZXQgYmVmb3JlIGNvbm5lY3QoKSYjMzQ7LApAQCAtMTE1MCw2ICYjNDM7MTE3MCw3IEBAIHN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKQogewogCWlmIChpbmV0X3B0b24oVEVTVF9GQU1JTFksIFRFU1RfV1JPTkdfSVAsICZhbXA7d3JvbmdfYWRkcikgIT0gMSkKIAkJdGVzdF9lcnJvcigmIzM0O0NhbiYjMzk7dCBjb252ZXJ0IGlwIGFkZHJlc3MgJXMmIzM0OywgVEVTVF9XUk9OR19JUCk7CiYjNDM7CXNldHVwX3ZyZnMoKTsKIAljaGVja19jbG9zZWRfc29ja2V0KCk7CiAJY2hlY2tfbGlzdGVuX3NvY2tldCgpOwogCWNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCgpOwpAQCAtMTE1OCw2ICYjNDM7MTE3OSw2IEBAIHN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCXRlc3RfaW5pdCgxMjEsIHNlcnZlcl9mbiwgY2xpZW50X2ZuKTsKJiM0MzsJdGVzdF9pbml0KDEyMiwgc2VydmVyX2ZuLCBjbGllbnRfZm4pOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmgKaW5kZXggZWJiMjg5OWMxMmZlMC4uNTNiZTE3NDQyMzdlZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oCkBAIC00MDQsNyAmIzQzOzQwNCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfcHJlcGFyZV9kZWZfa2V5KHN0cnVjdCB0Y3BfYW9fYWRkICphbywKIAogZXh0ZXJuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCwKIAkJCSAgIHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LAotCQkJICAgdWludDhfdCBwcmVmaXgsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpOwomIzQzOwkJCSAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLAomIzQzOwkJCSAgIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KTsKIGV4dGVybiBpbnQgdGVzdF9nZXRfYW9faW5mbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgKm91dCk7CiBleHRlcm4gaW50IHRlc3Rfc2V0X2FvX2luZm8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0ICppbik7CiBleHRlcm4gaW50IHRlc3RfY21wX2dldHNvY2tvcHRfc2V0c29ja29wdChjb25zdCBzdHJ1Y3QgdGNwX2FvX2FkZCAqYSwKQEAgLTQxOCw3ICYjNDM7NDE5LDggQEAgc3RhdGljIGlubGluZSBpbnQgdGVzdF92ZXJpZnlfc29ja2V0X2tleShpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fYWRkICprZXkpCiAJaW50IGVycjsKIAogCWVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgJmFtcDtrZXkyLCAmYW1wO2tleS0mZ3Q7YWRkciwgc2l6ZW9mKGtleS0mZ3Q7YWRkciksCi0JCQkgICAgICBrZXktJmd0O3ByZWZpeCwga2V5LSZndDtzbmRpZCwga2V5LSZndDtyY3ZpZCk7CiYjNDM7CQkJICAgICAga2V5LSZndDtwcmVmaXgsIGtleS0mZ3Q7c25kaWQsIGtleS0mZ3Q7cmN2aWQsCiYjNDM7CQkJICAgICAga2V5LSZndDtrZXlmbGFncywga2V5LSZndDtpZmluZGV4KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMKaW5kZXggZWY4ZTkwMzFkNDdhMy4uMmU3YjA2YTFhMTU2NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYwpAQCAtMjUyLDcgJiM0MzsyNTIsNyBAQCBzdGF0aWMgaW50IHRlc3RfZ2V0X2FvX2tleXNfbnIoaW50IHNrKQogCiBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsCiAJCXZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LCB1aW50OF90IHByZWZpeCwKLQkJdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCkKJiM0MzsJCXVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KQogewogCXN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCB0bXAgPSB7fTsKIAlzb2NrbGVuX3QgdG1wX3N6ID0gc2l6ZW9mKHRtcCk7CkBAIC0yNjIsNiAmIzQzOzI2Miw4IEBAIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCwKIAl0bXAucHJlZml4ID0gcHJlZml4OwogCXRtcC5zbmRpZCAgPSBzbmRpZDsKIAl0bXAucmN2aWQgID0gcmN2aWQ7CiYjNDM7CXRtcC5rZXlmbGFncyA9IGtleWZsYWdzOwomIzQzOwl0bXAuaWZpbmRleCA9IGlmaW5kZXg7CiAJdG1wLm5rZXlzICA9IDE7CiAKIAlyZXQgPSBnZXRzb2Nrb3B0KHNrLCBJUFBST1RPX1RDUCwgVENQX0FPX0dFVF9LRVlTLCAmYW1wO3RtcCwgJmFtcDt0bXBfc3opOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDE4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQLUFPIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjYXJlZnVsbHkgZXZhbHVhdGUgdGhlIG1vZGlmaWNhdGlvbnMsIGVzcGVjaWFsbHkgc2luY2UgaXQgdG91Y2hlcyBgbmV0L2lwdjQvdGNwX2FvLmNgLCB3aGljaCBpcyBhIGNvcmUgY29tcG9uZW50IGZvciBUQ1AgQXV0aGVudGljYXRpb24gT3B0aW9uLCBhbmQgaW5jbHVkZXMgc2VsZnRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2AuCgpGb2N1c2luZyBvbiB0aGUgYG5ldC9pcHY0L3RjcF9hby5jYCBjaGFuZ2UsIGl0IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbmFsIGZpeCB3aXRoaW4gYHRjcF9hb19kZWxfY21kYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBzbmlwcGV0IHJldmVhbHMgdGhlIGFkZGl0aW9uIG9mIGEgY29uZGl0aW9uYWwgY2hlY2sgYW5kIGFzc2lnbm1lbnQ6ICBgaWYgKGNtZC5rZXlmbGFncyAmYW1wOyBUQ1BfQU9fS0VZRl9JRklOREVYKSBsM2luZGV4ID0gY21kLmlmaW5kZXg7YC4KCkZyb20gbXkgdW5kZXJzdGFuZGluZyBvZiBUQ1AtQU8sIHRoaXMgaXMgY3J1Y2lhbC4gSXTigJlzIGFsbG93aW5nIHVzIHRvIHByb3Blcmx5IGRlbGV0ZSBWUkYtc2NvcGVkIGtleXMgYnkgY29ycmVjdGx5IG1hdGNoaW5nIHRoZSBpZmluZGV4LiAgVGhlIGluY2x1c2lvbiBvZiBgVENQX0FPX0tFWUZfSUZJTkRFWGAgaW4gYGNtZC5rZXlmbGFnc2AgYWN0cyBhcyBhIGZsYWcuIElmIHRoYXQgZmxhZyBpcyBzZXQsIHRoZSBmdW5jdGlvbiBhc3NpZ25zIHRoZSBwcm92aWRlZCBpbnRlcmZhY2UgaW5kZXggdG8gYGwzaW5kZXhgLiBJdCBzZWVtcyB0aGF0IHdpdGhvdXQgdGhpcyBjaGVjaywgZGVsZXRpbmcgYSBrZXkgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgVlJGIG1heSBiZSBjaGFsbGVuZ2luZywgb3Igd29yc2UsIGluY29ycmVjdC4gIEkgbmVlZCB0byBjb25maXJtIHRoaXMgaXMgaW5kZWVkIHRoZSBpbnRlbnRpb24gYW5kIHRoYXQgaXQgaGFuZGxlcyBhbGwgdGhlIHJlbGV2YW50IGVkZ2UgY2FzZXMuIFRoaXMgbmVlZHMgYSBkZWVwZXIgbG9vayB0byBtYWtlIHN1cmUgaXQgZnVuY3Rpb25zIGFzIGV4cGVjdGVkIGluIGFsbCBzY2VuYXJpb3MuIEkgd2lsbCBjaGVjayB0aGUgYHRjcF9hb19kZWxfY21kYCBmdW5jdGlvbiBpbiB0aGUgc291cmNlIGZpbGUgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYW9fZGVsX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jPTk5MD10Y3BfaW5ib3VuZF9hb19oYXNoKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU1LVx0XHRcdGlmIChrZXkpXG5uZXQvaXB2NC90Y3BfYW8uYzoxMDU2Olx0XHRcdFx0LyogcGFpcnMgd2l0aCB0Y3BfYW9fZGVsX2NtZCAqL1xubmV0L2lwdjQvdGNwX2FvLmMtMTA1Ny1cdFx0XHRcdFdSSVRFX09OQ0UoaW5mby1cdTAwM2VjdXJyZW50X2tleSwga2V5KTtcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDY4LVx0ICogLSByZXF1ZXN0IHNvY2tldHMgd291bGQgcmFjZSBvbiB0aG9zZSBrZXkgcG9pbnRlcnNcbm5ldC9pcHY0L3RjcF9hby5jOjEwNjk6XHQgKiAtIHRjcF9hb19kZWxfY21kKCkgYWxsb3dzIGFzeW5jIGtleSByZW1vdmFsXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDcwLVx0ICovXG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTc0Nj1zdGF0aWMgaW50IHRjcF9hb19kZWxldGVfa2V5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9hb19pbmZvICphb19pbmZvLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTE3OTktI2RlZmluZSBUQ1BfQU9fREVMX0tFWUZfQUxMIChUQ1BfQU9fS0VZRl9JRklOREVYKVxubmV0L2lwdjQvdGNwX2FvLmM6MTgwMDpzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbm5ldC9pcHY0L3RjcF9hby5jLTE4MDEtXHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTIwMzg9aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMjA0Ny1cdGNhc2UgVENQX0FPX0RFTF9LRVk6XG5uZXQvaXB2NC90Y3BfYW8uYzoyMDQ4Olx0XHRyZXR1cm4gdGNwX2FvX2RlbF9jbWQoc2ssIGZhbWlseSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L2lwdjQvdGNwX2FvLmMtMjA0OS1cdGNhc2UgVENQX0FPX0lORk86XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYwNAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoYXQgY29kZSBzbmlwcGV0OgoKKipEZWVwIERpdmUgaW50byBgdGNwX2FvX2RlbF9jbWRgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgdGNwX2FvX2RlbF9jbWRgLiBUaGUgY29tbWVudCB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGlzIHNwZWNpZmljYWxseSB0cmlnZ2VyZWQgYnkgYHRjcF9wYXJzZV9hb2AgKndoZW4qIHRoZSBjb21tYW5kIHZhbHVlLCBgY21kYCwgaXMgc2V0IHRvIGBUQ1BfQU9fREVMX0tFWWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGEgZGVsZXRlIG9wZXJhdGlvbi4gTm93LCBgdGNwX3BhcnNlX2FvYCBpdHNlbGYgaXMgY2FsbGVkIGZyb20sIGFuZCB0aGlzIGlzIGltcG9ydGFudCwgYGRvX3RjcF9zZXRzb2Nrb3B0YCwgd2hpY2ggbGl2ZXMgc29tZXdoZXJlIGluIHRoZSBgbmV0L2lwdjQvdGNwLmNgIGZpbGUg4oCTIG9yIGEgc2ltaWxhciBsb2NhdGlvbiBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uLiBTbywgSSBoYXZlIHRvIGZpbmQgdGhlIGNhbGxlcnMgb2YgYHRjcF9wYXJzZV9hb2AuIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSB0cmFpbCBvZiBob3cgYSBUQ1Agc29ja2V0IG9wdGlvbiBkZWxldGUgZ2V0cyBoYW5kbGVkLiBUaGF0IHNob3VsZCBuYXJyb3cgZG93biBteSBmb2N1cyB0byB3aGVyZSB0aGUgQU8ga2V5IGRlbGV0aW9uIGlzIGluaXRpYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfcGFyc2VfYW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwX2FvLmg9MTk2PWludCB0Y3BfYW9faGFzaF9za2IodW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbi0tXG5pbmNsdWRlL25ldC90Y3BfYW8uaC0xOTktXHRcdCAgICBjb25zdCB1OCAqdGtleSwgaW50IGhhc2hfb2Zmc2V0LCB1MzIgc25lKTtcbmluY2x1ZGUvbmV0L3RjcF9hby5oOjIwMDppbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbmluY2x1ZGUvbmV0L3RjcF9hby5oLTIwMS1cdFx0IHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pO1xuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTE5NDk9c3RhdGljIGludCB0Y3BfYW9faW5mb19jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTIwMzctXG5uZXQvaXB2NC90Y3BfYW8uYzoyMDM4OmludCB0Y3BfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxubmV0L2lwdjQvdGNwX2FvLmMtMjAzOS1cdFx0IHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MjA1Nz1pbnQgdGNwX3Y0X3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcbm5ldC9pcHY0L3RjcF9hby5jLTIwNTgte1xubmV0L2lwdjQvdGNwX2FvLmM6MjA1OTpcdHJldHVybiB0Y3BfcGFyc2VfYW8oc2ssIGNtZCwgQUZfSU5FVCwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L2lwdjQvdGNwX2FvLmMtMjA2MC19XG4tLVxubmV0L2lwdjYvdGNwX2FvLmM9MTI3PWludCB0Y3BfdjZfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLFxuLS1cbm5ldC9pcHY2L3RjcF9hby5jLTEyOS17XG5uZXQvaXB2Ni90Y3BfYW8uYzoxMzA6XHRyZXR1cm4gdGNwX3BhcnNlX2FvKHNrLCBjbWQsIEFGX0lORVQ2LCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvaXB2Ni90Y3BfYW8uYy0xMzEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzOTUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkludGVybmFsIFJldmlldyBvZiBUQ1B2NC92NiBQYXJzZXIgTG9naWMqKgoKUmlnaHQsIGxldCBtZSBzZWUuLi4gSSYjMzk7bSBsb29raW5nIGF0IGB0Y3BfdjRfcGFyc2VfYW9gIGFuZCBgdGNwX3Y2X3BhcnNlX2FvYC4gVGhvc2UgbmFtZXMgYXJlIHByZXR0eSBjbGVhciDigJMgdGhleSYjMzk7cmUgdGhlIHBhcnNpbmcgZnVuY3Rpb25zIGZvciBUQ1Agb3B0aW9ucyB3aXRoaW4gSVB2NCBhbmQgSVB2NiB0cmFmZmljLCByZXNwZWN0aXZlbHkuIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBJJiMzOTttIHByb2JhYmx5IHJldmlld2luZyBjb2RlLCBkZWJ1Z2dpbmcsIG9yIHBlcmhhcHMgb3B0aW1pemluZy4gVGhlIHByZXNlbmNlIG9mIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBzaWduYWxzIGEgZm9jdXMgb24gVENQIG9wdGlvbnMsIHdoaWNoIGNhbiBnZXQgY29tcGxpY2F0ZWQgZmFzdC4gSSYjMzk7bSBsaWtlbHkgY29uY2VybmVkIHdpdGggaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IG9wdGlvbiB0eXBlcywgbGVuZ3RocywgYWxpZ25tZW50LCBhbmQgdGhlIG92ZXJhbGwgdmFsaWRpdHkgY2hlY2tzIHRvIGVuc3VyZSB0aGUgc3RhY2sgaGFuZGxlcyBhbGwgcG9zc2libGUgY29uZmlndXJhdGlvbnMuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gSVB2NCBhbmQgSVB2NiBpbXBsZW1lbnRhdGlvbnMgaXMgYSBzdWJ0bGUsIGJ1dCBpbXBvcnRhbnQgb25lLCBhcyBib3RoIHByb3RvY29scyBoYXZlIGRpZmZlcmVudCBsaW1pdGF0aW9ucyBhbmQgc3BlY2lhbCByZXF1aXJlbWVudHMgdGhhdCBtdXN0IGJlIGhhbmRsZWQuIEkgYW0gZm9jdXNpbmcgb24gdGhlIHBhcnNlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLCBpbiBpc29sYXRpb24gdG8gYmV0dGVyIHVuZGVyc3RhbmQgd2hlcmUgdGhlIGlzc3VlcyBtaWdodCBiZS4gVGhpcyBpcyBhbGwgc3RhbmRhcmQgc3R1ZmYsIGp1c3QgbWFraW5nIHN1cmUgdGhlIGZ1bmRhbWVudGFscyBhcmUgc291bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3Y0X3BhcnNlX2FvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcF9hby5oPTIzMD1pbnQgdGNwX2FvX3ByZXBhcmVfcmVzZXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbmV0L3RjcF9hby5oLTIzNS0vKiBpcHY0IHNwZWNpZmljIGZ1bmN0aW9ucyAqL1xuaW5jbHVkZS9uZXQvdGNwX2FvLmg6MjM2OmludCB0Y3BfdjRfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKTtcbmluY2x1ZGUvbmV0L3RjcF9hby5oLTIzNy1zdHJ1Y3QgdGNwX2FvX2tleSAqdGNwX3Y0X2FvX2xvb2t1cChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICphZGRyX3NrLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTIwMzg9aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMjA1Ni1cbm5ldC9pcHY0L3RjcF9hby5jOjIwNTc6aW50IHRjcF92NF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDU4LXtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTIzNzE9c3RhdGljIGNvbnN0IHN0cnVjdCB0Y3Bfc29ja19hZl9vcHMgdGNwX3NvY2tfaXB2NF9zcGVjaWZpYyA9IHtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzNzktXHQuY2FsY19hb19oYXNoXHRcdD0gdGNwX3Y0X2FvX2hhc2hfc2tiLFxubmV0L2lwdjQvdGNwX2lwdjQuYzoyMzgwOlx0LmFvX3BhcnNlXHRcdD0gdGNwX3Y0X3BhcnNlX2FvLFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMzgxLVx0LmFvX2NhbGNfa2V5X3NrXHRcdD0gdGNwX3Y0X2FvX2NhbGNfa2V5X3NrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgQ29yZTogQSBGdXp6aW5nIE9wcG9ydHVuaXR5KioKCk9rYXksIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBJIHNlZSB0aGlzIHBhdGNoIHRhcmdldHMgYSBwYXJ0IG9mIHRoZSBrZXJuZWwgbG9naWMgdGhhdCYjMzk7cyB0cnVseSByZWFjaGFibGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFRDUCBgc2V0c29ja29wdGAgcGF0aC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGZpbmRpbmcgc29tZXRoaW5nIGV4cGxvaXRhYmxlLiBUaGUgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGNoYW5nZSBhcHBlYXJzIHNvdW5kLCBzbyB0aGUgcG90ZW50aWFsIHJld2FyZCBmcm9tIGZ1enppbmcgaXMgZGVmaW5pdGVseSB0aGVyZS4KCk15IGltbWVkaWF0ZSBmb2N1cyBzaGlmdHMgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50cmljYWNpZXMgb2YgYHRjcF9hb19kZWxfY21kYCwgYW5kIHRoZW4gYWxzbyB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgYHRjcF9wYXJzZV9hb2AgYW5kIGB0Y3BfdjRfcGFyc2VfYW9gLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGtleSBhcmVhcyB0aGF0IG5lZWQgdGhlIGNsb3Nlc3QgZXhhbWluYXRpb24uIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYENPTkZJR2Agb3B0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvIGVuYWJsZSBUQ1AtQU8gaW4gdGhlIGZpcnN0IHBsYWNlLCBvciBpZiB0aGV5JiMzOTtyZSBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIEkgY2FuIGVuc3VyZSBJJiMzOTttIHRlc3RpbmcgdGhlIHJpZ2h0IGJ1aWxkcy4gVGhhdCYjMzk7cyBteSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RDUF9BTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz03Mjk9Y29uZmlnIERFRkFVTFRfVENQX0NPTkdcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTc0My1cbm5ldC9pcHY0L0tjb25maWc6NzQ0OmNvbmZpZyBUQ1BfQU9cbm5ldC9pcHY0L0tjb25maWctNzQ1LVx0Ym9vbCBcJiMzNDtUQ1A6IEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoUkZDNTkyNSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUwNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbjogVENQX0FPIGFuZCBCZXlvbmQqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgVENQX0FPYCBhcyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLCBnb3QgaXQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGltbWVkaWF0ZWx5IGFzc2VzcyB0aGUgYnJvYWRlciBsYW5kc2NhcGUuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgVENQX0FPYCBpcyAqdGhlKiBjb25maWd1cmF0aW9uIHdlJiMzOTtyZSBjb25jZXJuZWQgd2l0aCwgb3IgaWYgaXQmIzM5O3MgcGFydCBvZiBhIGxhcmdlciBzZXQgb2YgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoaXMgc3lzdGVtLiBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB0eXBpY2FsIHBsYWNlcyBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBFc3NlbnRpYWxseSwgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBwZXJmb3JtIGEgcmFwaWQgc2FuaXR5IGNoZWNrIHRvIHJ1bGUgb3V0IG90aGVyIHJlbGV2YW50IHNldHRpbmdzLCByZWxhdGVkIGNvbmZpZ3MsIG9yIGFueSB1cHN0cmVhbSBvciBkb3duc3RyZWFtIGRlcGVuZGVuY2llcy4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtJcyB0aGlzIGEgc2luZ2xlLXBvaW50IGNvbmZpZ3VyYXRpb24gb3IgaXMgaXQgbmVzdGVkIHdpdGhpbiBhIGJyb2FkZXIgY29uZmlndXJhdGlvbiBzY2hlbWU/IElzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCB3b3VsZCBiZSBvZiBpbnRlcmVzdCBpbiB0aGlzIGNhc2U/JiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRDUF9BTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz03Mjk9Y29uZmlnIERFRkFVTFRfVENQX0NPTkdcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTc0My1cbm5ldC9pcHY0L0tjb25maWc6NzQ0OmNvbmZpZyBUQ1BfQU9cbm5ldC9pcHY0L0tjb25maWctNzQ1LVx0Ym9vbCBcJiMzNDtUQ1A6IEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoUkZDNTkyNSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgzOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBUQ1BfQU8gS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUgZm9yIFRDUF9BTy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCBzcGVjaWZpY2FsbHkgYXJlIHdlIGFpbWluZyB0byB1bmRlcnN0YW5kIGhlcmU/JiMzNDsgQXJlIHdlIGxvb2tpbmcgYXQgdGhlIGNvcmUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCBvciBwb3RlbnRpYWwgYnVpbGQtdGltZSBpbXBsaWNhdGlvbnM/IElzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUsIG9yIGEgZ2VuZXJhbCBwbGF0Zm9ybSBjb25jZXJuPwoKRmlyc3QsIEkmIzM5O2xsIHNjYW4gZm9yIHRoZSBtYWluIHN5bWJvbCBkZWZpbml0aW9uIG9mIGBUQ1BfQU9gIGl0c2VsZi4gVGhlbiwgSSYjMzk7bGwgcGF5IGF0dGVudGlvbiB0byBhbnkgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMuIFRoZXNlIGNvbmRpdGlvbnMgYXJlIGtleTsgdGhleSYjMzk7bGwgcXVpY2tseSBoaWdobGlnaHQgdGhlIGZ1bmRhbWVudGFsIHByZS1yZXF1aXNpdGVzIG9yIG90aGVyIGZlYXR1cmVzIHRoaXMgb3B0aW9uIHJlbGllcyBvbi4gSSBleHBlY3QgdG8gc2VlIGRlcGVuZGVuY2llcyBvbiB0aGUgVENQIHN0YWNrLCBvZiBjb3Vyc2UsIGFuZCBwZXJoYXBzIHJlbGF0ZWQgc2VjdXJpdHkgb3IgY3J5cHRvZ3JhcGhpYyBtb2R1bGVzIGlmIEFPIGlzIHVzaW5nIGFueS4KCk5leHQsIEkmIzM5O2xsIGNoZWNrIGZvciBgZGVmYXVsdGAgdmFsdWVzLiBJcyBpdCBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQ/IEEgZGVmYXVsdC1lbmFibGVkIG9wdGlvbiBtaWdodCBpbmRpY2F0ZSB0aGF0IGl0IGlzIGEgY29tbW9uIG9yIHJlY29tbWVuZGVkIGNvbmZpZ3VyYXRpb24sIHdoaWxlIGEgZGVmYXVsdC1kaXNhYmxlZCBvbmUgcHJvYmFibHkgaW1wbGllcyB0aGF0IGl0IGlzIGZvciBzcGVjaWFsaXplZCBkZXBsb3ltZW50cyBvciBleHBlcmltZW50YWwgc2V0dGluZ3MuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBgZGVmYXVsdGAgc3RhdGVtZW50cywgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZSBpcyBzZWxlY3RlZCBieSB0aGUgdGFyZ2V0IGVudmlyb25tZW50LgoKSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgYGhlbHBgIHRleHQuIEdvb2QgZG9jdW1lbnRhdGlvbiwgZXZlbiBpZiBicmllZiwgY2FuIHJldmVhbCB0aGUgaW50ZW5kZWQgdXNlIGNhc2UsIHRoZSBiZW5lZml0cywgYW5kIHRoZSBwb3RlbnRpYWwgZHJhd2JhY2tzIG9mIGVuYWJsaW5nIGBUQ1BfQU9gLiBXaGF0IHByb2JsZW0gaXMgaXQgZGVzaWduZWQgdG8gc29sdmU/IElzIHRoZXJlIGFueSB3YXJuaW5nIGFib3V0IHRoZSBwZXJmb3JtYW5jZSBvdmVyaGVhZD8KCkZpbmFsbHksIEkmIzM5O2xsIG5vdGUgYW55IG1lbnUgc3RydWN0dXJlIG9yIHN1Yi1vcHRpb25zLiBBcmUgdGhlcmUgZnVydGhlciBjb25maWd1cmF0aW9uIGZsYWdzIHdpdGhpbiBgVENQX0FPYCwgc3VjaCBhcyBzZWN1cml0eSBrZXkgc2l6ZSwgY2lwaGVyIHN1aXRlcywgb3Igc3BlY2lmaWMgcHJvdG9jb2wgdmVyc2lvbnM/IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBsZXZlbCBvZiBjb25maWd1cmFiaWxpdHkgdGhlIGRldmVsb3BlciBwcm92aWRlZC4gQWxzbywgSSYjMzk7bGwgbG9vayBmb3IgYW55IGBzZWxlY3RgIHN0YXRlbWVudHMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggc3ltYm9scyB0aGV5IHB1bGwgaW4uIFVsdGltYXRlbHksIHRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGhvdyBUQ1BfQU8gaW50ZWdyYXRlcyBpbnRvIHRoZSBsYXJnZXIga2VybmVsIFRDUCBpbmZyYXN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NDA6XHRcdGRlZmF1bHQgXCYjMzQ7Y2RnXCYjMzQ7IGlmIERFRkFVTFRfQ0RHXG4gNzQxOlx0XHRkZWZhdWx0IFwmIzM0O2JiclwmIzM0OyBpZiBERUZBVUxUX0JCUlxuIDc0MjpcdFx0ZGVmYXVsdCBcJiMzNDtjdWJpY1wmIzM0O1xuIDc0MzpcdFxuIDc0NDpcdGNvbmZpZyBUQ1BfQU9cbiA3NDU6XHRcdGJvb2wgXCYjMzQ7VENQOiBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFJGQzU5MjUpXCYjMzQ7XG4gNzQ2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcbiA3NDc6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcbiA3NDg6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuIDc0OTpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiA3NTA6XHRcdGRlcGVuZHMgb24gNjRCSVQgIyBzZXEtbnVtYmVyIGV4dGVuc2lvbiBuZWVkcyBXUklURV9PTkNFKHU2NClcbiA3NTE6XHRcdGhlbHBcbiA3NTI6XHRcdCAgVENQLUFPIHNwZWNpZmllcyB0aGUgdXNlIG9mIHN0cm9uZ2VyIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZXMgKE1BQ3MpLFxuIDc1MzpcdFx0ICBwcm90ZWN0cyBhZ2FpbnN0IHJlcGxheXMgZm9yIGxvbmctbGl2ZWQgVENQIGNvbm5lY3Rpb25zLCBhbmRcbiA3NTQ6XHRcdCAgcHJvdmlkZXMgbW9yZSBkZXRhaWxzIG9uIHRoZSBhc3NvY2lhdGlvbiBvZiBzZWN1cml0eSB3aXRoIFRDUFxuIDc1NTpcdFx0ICBjb25uZWN0aW9ucyB0aGFuIFRDUCBNRDUgKFNlZSBSRkM1OTI1KVxuIDc1NjpcdFxuIDc1NzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDc1ODpcdFxuIDc1OTpcdGNvbmZpZyBUQ1BfTUQ1U0lHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjIxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1BfQU8gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpbiBwbGF5IGhlcmUgaXMgZGVmaW5pdGVseSBgVENQX0FPYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb246IGB0Y3BfYW9fZGVsX2NtZGAsIGB0Y3BfcGFyc2VfYW9gLCBgdGNwX3Y0X3BhcnNlX2FvYCwgYW5kIGB0Y3BfdjZfcGFyc2VfYW9gLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIG9yIGF0IGxlYXN0IHRoZSBvbmVzIEkmIzM5O20gaW5pdGlhbGx5IGludGVyZXN0ZWQgaW4uIFdhaXQgYSBtaW51dGUuLi4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGB0Y3BfYW9fZGVsX2NtZGAgaXMgYWN0dWFsbHkgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIGhhcyBpbXBvcnRhbnQgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoYXQmIzM5O3MgdGhlIGNhc2UuIEl0IGFmZmVjdHMgdGhlIGxpbmthZ2UgYW5kIHNjb3BlLCB3aGljaCBpbiB0dXJuIGltcGFjdHMgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0sIGFuZCB0aGF0IGlzIGltcG9ydGFudCB0byBob3cgdG8gYmVzdCBpbnRlcnByZXQgdGhlIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGNoZWNrIHRoYXQgc3BlY2lmaWNhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYW9fZGVsX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jPTk5MD10Y3BfaW5ib3VuZF9hb19oYXNoKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU1LVx0XHRcdGlmIChrZXkpXG5uZXQvaXB2NC90Y3BfYW8uYzoxMDU2Olx0XHRcdFx0LyogcGFpcnMgd2l0aCB0Y3BfYW9fZGVsX2NtZCAqL1xubmV0L2lwdjQvdGNwX2FvLmMtMTA1Ny1cdFx0XHRcdFdSSVRFX09OQ0UoaW5mby1cdTAwM2VjdXJyZW50X2tleSwga2V5KTtcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDY4LVx0ICogLSByZXF1ZXN0IHNvY2tldHMgd291bGQgcmFjZSBvbiB0aG9zZSBrZXkgcG9pbnRlcnNcbm5ldC9pcHY0L3RjcF9hby5jOjEwNjk6XHQgKiAtIHRjcF9hb19kZWxfY21kKCkgYWxsb3dzIGFzeW5jIGtleSByZW1vdmFsXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDcwLVx0ICovXG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTc0Nj1zdGF0aWMgaW50IHRjcF9hb19kZWxldGVfa2V5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9hb19pbmZvICphb19pbmZvLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTE3OTktI2RlZmluZSBUQ1BfQU9fREVMX0tFWUZfQUxMIChUQ1BfQU9fS0VZRl9JRklOREVYKVxubmV0L2lwdjQvdGNwX2FvLmM6MTgwMDpzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbm5ldC9pcHY0L3RjcF9hby5jLTE4MDEtXHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTIwMzg9aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMjA0Ny1cdGNhc2UgVENQX0FPX0RFTF9LRVk6XG5uZXQvaXB2NC90Y3BfYW8uYzoyMDQ4Olx0XHRyZXR1cm4gdGNwX2FvX2RlbF9jbWQoc2ssIGZhbWlseSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L2lwdjQvdGNwX2FvLmMtMjA0OS1cdGNhc2UgVENQX0FPX0lORk86XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDMyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1AgQU8gUGFyc2luZyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggdGhlIFRDUCBBdXRoZW50aWNhdGlvbiBPcHRpb24gKEFPKSBwYXJzaW5nIGxvZ2ljLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgY29uZmlybWVkOiBgdGNwX2FvX2RlbF9jbWRgIGlzIGluZGVlZCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgYmVjYXVzZSBpdCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGlzIG1vZHVsZS4gTm93LCBnaXZlbiB0aGF0IGNvbmZpcm1hdGlvbiwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHBhcnNpbmcgdGhlIEFPIGRhdGEgaXRzZWxmLiBUaGUgb2J2aW91cyBjYW5kaWRhdGVzIGFyZSBgdGNwX3BhcnNlX2FvYCwgYHRjcF92NF9wYXJzZV9hb2AsIGFuZCBgdGNwX3Y2X3BhcnNlX2FvYC4gVGhleSBoYW5kbGUgdGhlIGdlbmVyaWMgYW5kIElQdjQvSVB2NiBzcGVjaWZpYyBwYXJzaW5nLCByZXNwZWN0aXZlbHkuIE15IG5leHQgc3RlcCwgYW5kIGl0JiMzOTtzIGEgY3JpdGljYWwgb25lLCBpcyB0byBkZXRlcm1pbmUgaWYgYHRjcF9wYXJzZV9hb2AgaXMgYWxzbyBzdGF0aWMsIG9yIGlmIGl0IG1pZ2h0IGJlIGV4cG9zZWQgZWxzZXdoZXJlIGluIHRoZSBjb2RlYmFzZS4gVW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgd2lsbCByZWFsbHkgaGVscCB3aXRoIHRoZSBvbmdvaW5nIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfcGFyc2VfYW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYW8uYz0xOTQ5PXN0YXRpYyBpbnQgdGNwX2FvX2luZm9fY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDM3LVxubmV0L2lwdjQvdGNwX2FvLmM6MjAzODppbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbm5ldC9pcHY0L3RjcF9hby5jLTIwMzktXHRcdCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTIwNTc9aW50IHRjcF92NF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDU4LXtcbm5ldC9pcHY0L3RjcF9hby5jOjIwNTk6XHRyZXR1cm4gdGNwX3BhcnNlX2FvKHNrLCBjbWQsIEFGX0lORVQsIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9pcHY0L3RjcF9hby5jLTIwNjAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk2NQoJCQkJCQkJb3V0cHV0OiAxMzQKCQkJCQkJCXRob3VnaHRzOiAyOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBUQ1AtQU8gS2V5IERlbGV0aW9uIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBidWcgd2l0aGluIHRoZSBUQ1AtQU8ga2V5IGRlbGV0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSB3aGVuIHVzaW5nIGBzZXRzb2Nrb3B0YCB3aXRoIGBUQ1BfQU9fREVMX0tFWWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBmdW5jdGlvbiBgdGNwX3BhcnNlX2FvYCBpc24mIzM5O3Qgc3RhdGljLCBhbGxvd2luZyBmb3IgdmFyaWF0aW9ucyBsaWtlIGB0Y3BfdjRfcGFyc2VfYW9gIGFuZCBgdGNwX3Y2X3BhcnNlX2FvYCwgd2hpY2ggaXMgZ29vZCBmb3IgaGFuZGxpbmcgZGlmZmVyZW50IGFkZHJlc3MgZmFtaWxpZXMuCgpUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZy4gQmFzaWNhbGx5LCB0aGUgYGwzaW5kZXhgIGZpZWxkLCBjcml0aWNhbCBmb3IgaWRlbnRpZnlpbmcgdGhlIGNvcnJlY3QgaW50ZXJmYWNlIChhbmQgVlJGIGluIG15IHdvcmxkKSwgd2FzbiYjMzk7dCBiZWluZyBjb3JyZWN0bHkgcG9wdWxhdGVkIGZyb20gdGhlIHVzZXImIzM5O3MgaW5wdXQgKGBjbWQuaWZpbmRleGApIGR1cmluZyBrZXkgZGVsZXRpb24uIFRoaXMgbWVhbnMgdGhlIHN5c3RlbSBtaWdodCBiZSBkZWxldGluZyB0aGUgKndyb25nKiBrZXksIGEgY3JpdGljYWwgZmxhdy4KClRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCByZXF1aXJpbmcgdGhvcm91Z2ggZnV6emluZyB0byBlbnN1cmUgaXQmIzM5O3Mgcm9idXN0LiBUaGUgZm9jdXMgaGVyZSBpcyBvbiBgdGNwX3BhcnNlX2FvYCwgYHRjcF92NF9wYXJzZV9hb2AsIGFuZCBgdGNwX3Y2X3BhcnNlX2FvYCwgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBwYXJzaW5nIHRoaXMgVENQLUFPIGNvbmZpZ3VyYXRpb24gZGF0YS4KCkkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBhY2NvdW50aW5nIGZvciBldmVyeXRoaW5nLiBTaW5jZSBJIGFtIGNvbmNlcm5lZCBhYm91dCBWUkZzLCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGBUQ1BfQU9gIGRlcGVuZHMgb24gYE5FVF9WUkZgLiBXaGlsZSBpdCBkb2VzbiYjMzk7dCAqZGlyZWN0bHkqIGRlcGVuZCBvbiBpdCwgYW5kIHRoZSB0ZXN0cyByZWZlcmVuY2UgYEtDT05GSUdfTkVUX1ZSRmAsIHRoaXMgcGF0Y2ggaXMgZGlyZWN0bHkgbWFuaXB1bGF0aW5nIGBsM2luZGV4YCwgd2hpY2ggaXMgdXNlZCBmb3IgVlJGcy4gSXQmIzM5O3MgYmVzdCB0byBiZSBzYWZlLCBzbyBJJiMzOTtsbCBpbmNsdWRlIGBORVRfVlJGYCBhcyB3ZWxsIHRvIG1ha2Ugc3VyZSBJIGNhcHR1cmUgdGhlIGNvbXBsZXRlIGNvbnRleHQuIFRoaXMgbGV2ZWwgb2YgZGlsaWdlbmNlIHByZXZlbnRzIHJlZ3Jlc3Npb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VENQX0FPJiMzNDssCiAgICAmIzM0O05FVF9WUkYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfcGFyc2VfYW8mIzM0OywKICAgICYjMzQ7dGNwX3Y0X3BhcnNlX2FvJiMzNDssCiAgICAmIzM0O3RjcF92Nl9wYXJzZV9hbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBUQ1AtQU8ga2V5IGRlbGV0aW9uIHdoZXJlIHRoZSBpbnRlcmZhY2UgaW5kZXggKFZSRikgd2FzIG5vdCBwcm9wZXJseSBleHRyYWN0ZWQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBjb21tYW5kIHdoZW4gdGhlIFRDUF9BT19LRVlGX0lGSU5ERVggZmxhZyB3YXMgc2V0LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIFRDUCBzZXRzb2Nrb3B0IGxvZ2ljIGZvciBUQ1BfQU9fREVMX0tFWS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VENQX0FPJiMzNDssCiAgICAmIzM0O05FVF9WUkYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfcGFyc2VfYW8mIzM0OywKICAgICYjMzQ7dGNwX3Y0X3BhcnNlX2FvJiMzNDssCiAgICAmIzM0O3RjcF92Nl9wYXJzZV9hbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBUQ1AtQU8ga2V5IGRlbGV0aW9uIHdoZXJlIHRoZSBpbnRlcmZhY2UgaW5kZXggKFZSRikgd2FzIG5vdCBwcm9wZXJseSBleHRyYWN0ZWQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBjb21tYW5kIHdoZW4gdGhlIFRDUF9BT19LRVlGX0lGSU5ERVggZmxhZyB3YXMgc2V0LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIFRDUCBzZXRzb2Nrb3B0IGxvZ2ljIGZvciBUQ1BfQU9fREVMX0tFWS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGZ1bmN0aW9uYWwgYnVnIGluIGB0Y3BfYW9fZGVsX2NtZGAgd2hlcmUgdGhlIGBpZmluZGV4YCBmaWVsZCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIGB0Y3BfYW9fZGVsYCBzdHJ1Y3R1cmUgd2FzIGlnbm9yZWQgd2hlbiBkZWxldGluZyBhIFRDUC1BTyBrZXkuIFRoZSBgY21kYCBzdHJ1Y3R1cmUgaXMgc2FmZWx5IHBvcHVsYXRlZCBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cigpYCwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKGVpdGhlciBieSBjb3B5aW5nIGZyb20gdXNlciBzcGFjZSBvciB6ZXJvLXBhZGRpbmcpLiBUaGUgcGF0Y2ggc2ltcGx5IHJlYWRzIHRoZSBpbml0aWFsaXplZCBgY21kLmlmaW5kZXhgIGZpZWxkIGFuZCBhc3NpZ25zIGl0IHRvIGBsM2luZGV4YCBpZiB0aGUgYFRDUF9BT19LRVlGX0lGSU5ERVhgIGZsYWcgaXMgc2V0LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRjMDJjYmFmOTViMTY0YjZjOWVhMmFiODEwNTMwN2UyOTg1YWNkMTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyMiAyMDoyMzozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9hby5jIGIvbmV0L2lwdjQvdGNwX2FvLmMKaW5kZXggNTA5NDI2NzQ0N2FlZS4uMjY4NjQ2MjFlNmRlZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2FvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2FvLmMKQEAgLTE4MzQsNiAmIzQzOzE4MzQsOSBAQCBzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSwKIAlpZiAoY21kLmlmaW5kZXggJmFtcDsmYW1wOyAhKGNtZC5rZXlmbGFncyAmYW1wOyBUQ1BfQU9fS0VZRl9JRklOREVYKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKGNtZC5rZXlmbGFncyAmYW1wOyBUQ1BfQU9fS0VZRl9JRklOREVYKQomIzQzOwkJbDNpbmRleCA9IGNtZC5pZmluZGV4OwomIzQzOwogCWFvX2luZm8gPSBzZXRzb2Nrb3B0X2FvX2luZm8oc2spOwogCWlmIChJU19FUlIoYW9faW5mbykpCiAJCXJldHVybiBQVFJfRVJSKGFvX2luZm8pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jCmluZGV4IGQ4NmJiMzgwYjc5ZjcuLjA0NTFmOTJmNDY0NWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmMKQEAgLTYzLDggJiM0Mzs2Myw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9sc2sodW5pb24gdGNwX2FkZHIgKmFkZHIsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpCiAJcmV0dXJuIHNrOwogfQogCi1zdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsCi0JCQlpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXkpCiYjNDM7c3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBpbnQgaWZpbmRleCwKJiM0MzsJCQlib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXkpCiB7CiAJc3RydWN0IHRjcF9hb19pbmZvX29wdCBhb19pbmZvID0ge307CiAJc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0IGtleSA9IHt9OwpAQCAtNzYsNiAmIzQzOzc2LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYywKIAlkZWwucHJlZml4ID0gREVGQVVMVF9URVNUX1BSRUZJWDsKIAlkZWwuc25kaWQgPSBzbmRpZDsKIAlkZWwucmN2aWQgPSByY3ZpZDsKJiM0MzsJaWYgKGlmaW5kZXgpIHsKJiM0MzsJCWRlbC5rZXlmbGFncyA9IFRDUF9BT19LRVlGX0lGSU5ERVg7CiYjNDM7CQlkZWwuaWZpbmRleCA9IGlmaW5kZXg7CiYjNDM7CX0KIAogCWlmIChjdXJyZW50X2tleSAmZ3Q7PSAwKSB7CiAJCWRlbC5zZXRfY3VycmVudCA9IDE7CkBAIC05NSw3ICYjNDM7OTksOCBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsCiAKIAl0Y3BfYWRkcl90b19zb2NrYWRkcl9pbigmYW1wO3NvY2thZGRyLCAmYW1wO3RoaXNfaXBfZGVzdCwgMCk7CiAJZXJyID0gdGVzdF9nZXRfb25lX2FvKHNrLCAmYW1wO2tleSwgJmFtcDtzb2NrYWRkciwgc2l6ZW9mKHNvY2thZGRyKSwKLQkJCSAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCk7CiYjNDM7CQkJICAgICAgREVGQVVMVF9URVNUX1BSRUZJWCwgc25kaWQsIHJjdmlkLAomIzQzOwkJCSAgICAgIGRlbC5rZXlmbGFncywgZGVsLmlmaW5kZXgpOwogCWlmICghZXJyKQogCQlyZXR1cm4gLUVFWElTVDsKIAlpZiAoZXJyICE9IC1FMkJJRykKQEAgLTExMiwxMiAmIzQzOzExNywxMiBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsCiB9CiAKIHN0YXRpYyB2b2lkIHRyeV9kZWxldGVfa2V5KGNoYXIgKnRzdF9uYW1lLCBpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsCi0JCQkgICBib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXksCiYjNDM7CQkJICAgaW50IGlmaW5kZXgsIGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSwKIAkJCSAgIGZhdWx0X3QgaW5qKQogewogCWludCBlcnI7CiAKLQllcnIgPSB0ZXN0X2RlbF9rZXkoc2ssIHNuZGlkLCByY3ZpZCwgYXN5bmMsIGN1cnJlbnRfa2V5LCBybmV4dF9rZXkpOwomIzQzOwllcnIgPSB0ZXN0X2RlbF9rZXkoc2ssIHNuZGlkLCByY3ZpZCwgaWZpbmRleCwgYXN5bmMsIGN1cnJlbnRfa2V5LCBybmV4dF9rZXkpOwogCWlmICgoZXJyID09IC1FQlVTWSAmYW1wOyZhbXA7IGZhdWx0KEJVU1kpKSB8fCAoZXJyID09IC1FSU5WQUwgJmFtcDsmYW1wOyBmYXVsdChDVVJSTkVYVCkpKSB7CiAJCXRlc3Rfb2soJiMzNDslczoga2V5IGRlbGV0aW9uIHdhcyBwcmV2ZW50ZWQmIzM0OywgdHN0X25hbWUpOwogCQlyZXR1cm47CkBAIC0yMzYsMTUgJiM0MzsyNDEsMTUgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKQogCWludCBzazsKIAogCXNrID0gcHJlcGFyZV9zaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5JiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCAwKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5cyYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgMCk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5JiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXMmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIDApOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9zaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwogCWlmICh0ZXN0X3NldF9rZXkoc2ssIDEwMCwgMjAwKSkKIAkJdGVzdF9lcnJvcigmIzM0O2ZhaWxlZCB0byBzZXQgY3VycmVudC9ybmV4dCBrZXlzJiMzNDspOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5JiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleSYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7CiAJY2xvc2Uoc2spOwogCiAJc2sgPSBwcmVwYXJlX3NrKCZhbXA7dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7CkBAIC0yNTQsMTAgJiM0MzsyNTksMTIgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKQogCWlmICh0ZXN0X2FkZF9rZXkoc2ssICYjMzQ7R2xvcnkgdG8gVWtyYWluZSEmIzM0OywgdGhpc19pcF9kZXN0LAogCQkJIERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpCiAJCXRlc3RfZXJyb3IoJiMzNDt0ZXN0X2FkZF9rZXkoKSYjMzQ7KTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSAmIzQzOyBzZXQgY3VycmVudC9ybmV4dCYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIDEwLCAxMywgMCk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssIDEwLCAxMSwgMCwgMjAwLCAtMSwgMCk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5JiMzNDssIHNrLCAxMiwgMTMsIDAsIC0xLCAyMDAsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQmIzQzO3JuZXh0IGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5ICYjNDM7IHNldCBjdXJyZW50L3JuZXh0JiMzNDssIHNrLAomIzQzOwkJICAgICAgIDEwMCwgMTAwLCAwLCAwLCAxMCwgMTMsIDApOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBjdXJyZW50IGtleSYjMzQ7LCBzaywgMTAsIDExLCAwLCAwLCAyMDAsIC0xLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5JiMzNDssIHNrLCAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIDApOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50JiM0MztybmV4dCBrZXkmIzM0Oywgc2ssCiYjNDM7CQkgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7CiAJY2xvc2Uoc2spOwogCiAJc2sgPSBwcmVwYXJlX3NrKCZhbXA7dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7CkBAIC0yNzIsNiAmIzQzOzI3OSwxOCBAQCBzdGF0aWMgdm9pZCBjaGVja19jbG9zZWRfc29ja2V0KHZvaWQpCiAJCQkJICB0aGlzX2lwX2Rlc3QsIERFRkFVTFRfVEVTVF9QUkVGSVgsCiAJCQkJICBmYWxzZSwgdHJ1ZSwgMjAsIDEwLCAwKTsKIAljbG9zZShzayk7CiYjNDM7CiYjNDM7CWlmICghc2hvdWxkX3NraXBfdGVzdCgmIzM0O2Nsb3NlZCBzb2NrZXQsIGFkZCAmIzQzOyBkZWxldGUgVlJGLXNjb3BlZCBrZXkmIzM0OywKJiM0MzsJCQkgICAgICBLQ09ORklHX05FVF9WUkYpKSB7CiYjNDM7CQlzayA9IHByZXBhcmVfc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKJiM0MzsJCWlmICh0ZXN0X2FkZF9rZXlfdnJmKHNrLCBTRUNPTkRfUEFTU1dPUkQsIFRDUF9BT19LRVlGX0lGSU5ERVgsCiYjNDM7CQkJCSAgICAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLAomIzQzOwkJCQkgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDIwMSwgMjAxKSkKJiM0MzsJCQl0ZXN0X2Vycm9yKCYjMzQ7dGVzdF9hZGRfa2V5X3ZyZigpJiMzNDspOwomIzQzOwkJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBhZGQgJiM0MzsgZGVsZXRlIFZSRi1zY29wZWQga2V5JiMzNDssIHNrLCAyMDEsIDIwMSwKJiM0MzsJCQkgICAgICAgdGVzdF92cmZfaWZpbmRleCwgMCwgLTEsIC0xLCAwKTsKJiM0MzsJCWNsb3NlKHNrKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBhc3NlcnRfbm9fY3VycmVudF9ybmV4dChjb25zdCBjaGFyICp0c3RfbXNnLCBpbnQgc2spCkBAIC0zMjIsOCAmIzQzOzM0MSw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2xpc3Rlbl9zb2NrZXQodm9pZCkKIAlpbnQgc2ssIGVycjsKIAogCXNrID0gcHJlcGFyZV9sc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgYWxsIGtleXMmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTsKIAljbG9zZShzayk7CiAKIAlzayA9IHByZXBhcmVfbHNrKCZhbXA7dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7CkBAIC0zNDUsOCAmIzQzOzM2NCwxMCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpCiAJaWYgKGxpc3RlbihzaywgMTApKQogCQl0ZXN0X2Vycm9yKCYjMzQ7bGlzdGVuKCkmIzM0Oyk7CiAJYXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoJiMzNDtsaXN0ZW4oKSBhZnRlciBjdXJyZW50L3JuZXh0IGtleXMgc2V0JiMzNDssIHNrKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKSYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKSYjMzQ7LCBzaywKJiM0MzsJCSAgICAgICAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKSYjMzQ7LCBzaywKJiM0MzsJCSAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7CiAJY2xvc2Uoc2spOwogCiAJYXNzZXJ0X25vX3RjcF9yZXBhaXIoKTsKQEAgLTM1OSwxMyAmIzQzOzM4MCwxMyBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpCiAJCQkgREVGQVVMVF9URVNUX1BSRUZJWCwgMTIsIDEzKSkKIAkJdGVzdF9lcnJvcigmIzM0O3Rlc3RfYWRkX2tleSgpJiMzNDspOwogCXRyeV9kZWxldGVfa2V5KCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5ICYjNDM7IHNldCBjdXJyZW50L3JuZXh0JiMzNDssIHNrLAotCQkgICAgICAgMTAwLCAxMDAsIDAsIDEwLCAxMywgRkFVTFRfQ1VSUk5FWFQpOwomIzQzOwkJICAgICAgIDEwMCwgMTAwLCAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBjdXJyZW50IGtleSYjMzQ7LCBzaywKLQkJICAgICAgIDEwLCAxMSwgMCwgMjAwLCAtMSwgRkFVTFRfQ1VSUk5FWFQpOwomIzQzOwkJICAgICAgIDEwLCAxMSwgMCwgMCwgMjAwLCAtMSwgRkFVTFRfQ1VSUk5FWFQpOwogCXRyeV9kZWxldGVfa2V5KCYjMzQ7bGlzdGVuIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleSYjMzQ7LCBzaywKLQkJICAgICAgIDEyLCAxMywgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpOwomIzQzOwkJICAgICAgIDEyLCAxMywgMCwgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpOwogCXRyeV9kZWxldGVfa2V5KCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5JiMzNDssIHNrLAotCQkgICAgICAgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7CiYjNDM7CQkgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7CiAJY2xvc2Uoc2spOwogCiAJc2sgPSBwcmVwYXJlX2xzaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMTEzMSw3ICYjNDM7MTE1Miw2IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCh2b2lkKQogewogCXVuc2lnbmVkIGludCBwb3J0ID0gdGVzdF9zZXJ2ZXJfcG9ydDsKIAotCXNldHVwX3ZyZnMoKTsKIAl0cnlfY2xpZW50X3J1bigmIzM0O2NsaWVudDogQ2hlY2sgY3VycmVudC9ybmV4dCBrZXlzIHVuc2V0IGJlZm9yZSBjb25uZWN0KCkmIzM0OywKIAkJICAgICAgIHBvcnQmIzQzOyYjNDM7LCAyMCwgLTEsIC0xKTsKIAl0cnlfY2xpZW50X3J1bigmIzM0O2NsaWVudDogQ2hlY2sgY3VycmVudC9ybmV4dCBrZXlzIHNldCBiZWZvcmUgY29ubmVjdCgpJiMzNDssCkBAIC0xMTUwLDYgJiM0MzsxMTcwLDcgQEAgc3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpCiB7CiAJaWYgKGluZXRfcHRvbihURVNUX0ZBTUlMWSwgVEVTVF9XUk9OR19JUCwgJmFtcDt3cm9uZ19hZGRyKSAhPSAxKQogCQl0ZXN0X2Vycm9yKCYjMzQ7Q2FuJiMzOTt0IGNvbnZlcnQgaXAgYWRkcmVzcyAlcyYjMzQ7LCBURVNUX1dST05HX0lQKTsKJiM0MzsJc2V0dXBfdnJmcygpOwogCWNoZWNrX2Nsb3NlZF9zb2NrZXQoKTsKIAljaGVja19saXN0ZW5fc29ja2V0KCk7CiAJY2hlY2tfZXN0YWJsaXNoZWRfc29ja2V0KCk7CkBAIC0xMTU4LDYgJiM0MzsxMTc5LDYgQEAgc3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpCiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7Ci0JdGVzdF9pbml0KDEyMSwgc2VydmVyX2ZuLCBjbGllbnRfZm4pOwomIzQzOwl0ZXN0X2luaXQoMTIyLCBzZXJ2ZXJfZm4sIGNsaWVudF9mbik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaAppbmRleCBlYmIyODk5YzEyZmUwLi41M2JlMTc0NDIzN2VlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmgKQEAgLTQwNCw3ICYjNDM7NDA0LDggQEAgc3RhdGljIGlubGluZSBpbnQgdGVzdF9wcmVwYXJlX2RlZl9rZXkoc3RydWN0IHRjcF9hb19hZGQgKmFvLAogCiBleHRlcm4gaW50IHRlc3RfZ2V0X29uZV9hbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCAqb3V0LAogCQkJICAgdm9pZCAqYWRkciwgc2l6ZV90IGFkZHJfc3osCi0JCQkgICB1aW50OF90IHByZWZpeCwgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCk7CiYjNDM7CQkJICAgdWludDhfdCBwcmVmaXgsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsCiYjNDM7CQkJICAgdWludDhfdCBrZXlmbGFncywgaW50IGlmaW5kZXgpOwogZXh0ZXJuIGludCB0ZXN0X2dldF9hb19pbmZvKGludCBzaywgc3RydWN0IHRjcF9hb19pbmZvX29wdCAqb3V0KTsKIGV4dGVybiBpbnQgdGVzdF9zZXRfYW9faW5mbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgKmluKTsKIGV4dGVybiBpbnQgdGVzdF9jbXBfZ2V0c29ja29wdF9zZXRzb2Nrb3B0KGNvbnN0IHN0cnVjdCB0Y3BfYW9fYWRkICphLApAQCAtNDE4LDcgJiM0Mzs0MTksOCBAQCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3ZlcmlmeV9zb2NrZXRfa2V5KGludCBzaywgc3RydWN0IHRjcF9hb19hZGQgKmtleSkKIAlpbnQgZXJyOwogCiAJZXJyID0gdGVzdF9nZXRfb25lX2FvKHNrLCAmYW1wO2tleTIsICZhbXA7a2V5LSZndDthZGRyLCBzaXplb2Yoa2V5LSZndDthZGRyKSwKLQkJCSAgICAgIGtleS0mZ3Q7cHJlZml4LCBrZXktJmd0O3NuZGlkLCBrZXktJmd0O3JjdmlkKTsKJiM0MzsJCQkgICAgICBrZXktJmd0O3ByZWZpeCwga2V5LSZndDtzbmRpZCwga2V5LSZndDtyY3ZpZCwKJiM0MzsJCQkgICAgICBrZXktJmd0O2tleWZsYWdzLCBrZXktJmd0O2lmaW5kZXgpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYwppbmRleCBlZjhlOTAzMWQ0N2EzLi4yZTdiMDZhMWExNTY3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jCkBAIC0yNTIsNyAmIzQzOzI1Miw3IEBAIHN0YXRpYyBpbnQgdGVzdF9nZXRfYW9fa2V5c19ucihpbnQgc2spCiAKIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCwKIAkJdm9pZCAqYWRkciwgc2l6ZV90IGFkZHJfc3osIHVpbnQ4X3QgcHJlZml4LAotCQl1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKQomIzQzOwkJdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgdWludDhfdCBrZXlmbGFncywgaW50IGlmaW5kZXgpCiB7CiAJc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0IHRtcCA9IHt9OwogCXNvY2tsZW5fdCB0bXBfc3ogPSBzaXplb2YodG1wKTsKQEAgLTI2Miw2ICYjNDM7MjYyLDggQEAgaW50IHRlc3RfZ2V0X29uZV9hbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCAqb3V0LAogCXRtcC5wcmVmaXggPSBwcmVmaXg7CiAJdG1wLnNuZGlkICA9IHNuZGlkOwogCXRtcC5yY3ZpZCAgPSByY3ZpZDsKJiM0MzsJdG1wLmtleWZsYWdzID0ga2V5ZmxhZ3M7CiYjNDM7CXRtcC5pZmluZGV4ID0gaWZpbmRleDsKIAl0bXAubmtleXMgID0gMTsKIAogCXJldCA9IGdldHNvY2tvcHQoc2ssIElQUFJPVE9fVENQLCBUQ1BfQU9fR0VUX0tFWVMsICZhbXA7dG1wLCAmYW1wO3RtcF9zeik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDE1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRDUC1BTyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYG5ldC9pcHY0L3RjcF9hby5jYCBhbmQgc29tZSBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vYC4gTGV0JiMzOTtzIGdldCByaWdodCB0byBpdCBhbmQgZm9jdXMgb24gYG5ldC9pcHY0L3RjcF9hby5jYC4gVGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gdG8gdGhlIGB0Y3BfYW9fZGVsX2NtZGAgZnVuY3Rpb24uCgpIbW0sIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGFkZGVkIHRoaXMgY2hlY2sgcmVsYXRlZCB0byBgaWZpbmRleGAgYW5kIGBjbWQua2V5ZmxhZ3NgLiBTcGVjaWZpY2FsbHksIHRoZXkgYXJlIG5vdyBzZXR0aW5nIGBsM2luZGV4YCBpZiBgVENQX0FPX0tFWUZfSUZJTkRFWGAgaXMgc2V0IGluIHRoZSBrZXlmbGFncy4gVGhlIGV4aXN0aW5nIGNvZGUgYWxyZWFkeSBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiBgaWZpbmRleGAsIGJ1dCB0aGlzIGFkZGl0aW9uIGRpcmVjdGx5IGFzc2lnbnMgaXQuIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgaGVyZSDigJMgd2hhdCBkb2VzIGBjbWRgIGFjdHVhbGx5IHJlcHJlc2VudD8gV2hlcmUgZG9lcyBpdCBjb21lIGZyb20/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgdG8gZnVsbHkgZ3Jhc3AgdGhpcyBjaGFuZ2UuCgpMZXQgbWUgdXNlIHRoZSBncmVwcGVyIEkmIzM5O3ZlIGdvdCBzZXQgdXAgdG8gc2VlIHdoZXJlIGB0Y3BfYW9fZGVsX2NtZGAgaXMgY2FsbGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBmdWxseSBncm9rIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9hb19kZWxfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2FvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2FvLmM9OTkwPXRjcF9pbmJvdW5kX2FvX2hhc2goc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTEwNTUtXHRcdFx0aWYgKGtleSlcbm5ldC9pcHY0L3RjcF9hby5jOjEwNTY6XHRcdFx0XHQvKiBwYWlycyB3aXRoIHRjcF9hb19kZWxfY21kICovXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU3LVx0XHRcdFx0V1JJVEVfT05DRShpbmZvLVx1MDAzZWN1cnJlbnRfa2V5LCBrZXkpO1xuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTEwNjgtXHQgKiAtIHJlcXVlc3Qgc29ja2V0cyB3b3VsZCByYWNlIG9uIHRob3NlIGtleSBwb2ludGVyc1xubmV0L2lwdjQvdGNwX2FvLmM6MTA2OTpcdCAqIC0gdGNwX2FvX2RlbF9jbWQoKSBhbGxvd3MgYXN5bmMga2V5IHJlbW92YWxcbm5ldC9pcHY0L3RjcF9hby5jLTEwNzAtXHQgKi9cbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0xNzQ2PXN0YXRpYyBpbnQgdGNwX2FvX2RlbGV0ZV9rZXkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvX2luZm8sXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMTc5OS0jZGVmaW5lIFRDUF9BT19ERUxfS0VZRl9BTEwgKFRDUF9BT19LRVlGX0lGSU5ERVgpXG5uZXQvaXB2NC90Y3BfYW8uYzoxODAwOnN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxubmV0L2lwdjQvdGNwX2FvLmMtMTgwMS1cdFx0XHQgIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MjAzOD1pbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDQ3LVx0Y2FzZSBUQ1BfQU9fREVMX0tFWTpcbm5ldC9pcHY0L3RjcF9hby5jOjIwNDg6XHRcdHJldHVybiB0Y3BfYW9fZGVsX2NtZChzaywgZmFtaWx5LCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvaXB2NC90Y3BfYW8uYy0yMDQ5LVx0Y2FzZSBUQ1BfQU9fSU5GTzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUwMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgdGNwX2FvX2RlbF9jbWRgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIFRDUCBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFRDUCBBTykgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGB0Y3BfYW9fZGVsX2NtZGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvaXB2NC90Y3BfYW8uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBUQ1AgQU8ga2V5cyBhcmUgcmVtb3ZlZCBvciBpbnZhbGlkYXRlZCwgYXMgdGhpcyBpcyBjcnVjaWFsIGZvciBzZWN1cml0eSBhbmQgc2Vzc2lvbiBtYW5hZ2VtZW50LiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBkZWxldGlvbiBvciBpbnZhbGlkYXRpb24gb2YgYXV0aGVudGljYXRpb24ga2V5cyBhc3NvY2lhdGVkIHdpdGggYSBUQ1AgY29ubmVjdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2V5IG1hbmFnZW1lbnQgc3RydWN0dXJlcywgd2hhdCBsb2NraW5nIG1lY2hhbmlzbXMgaXQgZW1wbG95cyB0byBlbnN1cmUgdGhyZWFkIHNhZmV0eSAobGlrZWx5IHNwaW5sb2NrcyBvciByZWFkL3dyaXRlIGxvY2tzLCBnaXZlbiBpdHMgcG90ZW50aWFsIGZvciBjb25jdXJyZW50IGFjY2VzcyksIGFuZCBob3cgaXQgY2xlYW5zIHVwIGFueSBhc3NvY2lhdGVkIHJlc291cmNlcy4gQXJlIHRoZXJlIGFueSByZWZlcmVuY2UgY291bnRzIGludm9sdmVkPyBXaGF0IGhhcHBlbnMgaWYgdGhlIGtleSBkZWxldGlvbiBmYWlscyBmb3Igc29tZSByZWFzb24/IERvZXMgdGhpcyB0cmlnZ2VyIGFueSBlcnJvciBjYWxsYmFja3Mgb3IgbG9nZ2luZz8gSSYjMzk7bGwgYWxzbyBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBsaWtlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbGVha3MsIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVsZXRpb24gcHJvY2VzcyBpdHNlbGYuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIG1haW50YWluaW5nIHRoZSBpbnRlZ3JpdHkgYW5kIHNlY3VyaXR5IG9mIHRoZSBBTyBzeXN0ZW0sIHNvIGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc5MDpcdFx0YXRvbWljX3N1Yih0Y3BfYW9fc2l6ZW9mX2tleShrZXkpLCBcdTAwMjZzay1cdTAwM2Vza19vbWVtX2FsbG9jKTtcbjE3OTE6XHRcdGNhbGxfcmN1KFx1MDAyNmtleS1cdTAwM2VyY3UsIHRjcF9hb19rZXlfZnJlZV9yY3UpO1xuMTc5MjpcdFxuMTc5MzpcdFx0cmV0dXJuIDA7XG4xNzk0Olx0YWRkX2tleTpcbjE3OTU6XHRcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZrZXktXHUwMDNlbm9kZSwgXHUwMDI2YW9faW5mby1cdTAwM2VoZWFkKTtcbjE3OTY6XHRcdHJldHVybiBlcnI7XG4xNzk3Olx0fVxuMTc5ODpcdFxuMTc5OTpcdCNkZWZpbmUgVENQX0FPX0RFTF9LRVlGX0FMTCAoVENQX0FPX0tFWUZfSUZJTkRFWClcbjE4MDA6XHRzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbjE4MDE6XHRcdFx0XHQgIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4xODAyOlx0e1xuMTgwMzpcdFx0c3RydWN0IHRjcF9hb19rZXkgKmtleSwgKm5ld19jdXJyZW50ID0gTlVMTCwgKm5ld19ybmV4dCA9IE5VTEw7XG4xODA0Olx0XHRpbnQgZXJyLCBhZGRyX2xlbiwgbDNpbmRleCA9IDA7XG4xODA1Olx0XHRzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvX2luZm87XG4xODA2Olx0XHR1bmlvbiB0Y3BfYW9fYWRkciAqYWRkcjtcbjE4MDc6XHRcdHN0cnVjdCB0Y3BfYW9fZGVsIGNtZDtcbjE4MDg6XHRcdF9fdTggcHJlZml4O1xuMTgwOTpcdFx0dTE2IHBvcnQ7XG4xODEwOlx0XG4xODExOlx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoY21kKSlcbjE4MTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODEzOlx0XG4xODE0Olx0XHRlcnIgPSBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHIoXHUwMDI2Y21kLCBzaXplb2YoY21kKSwgb3B0dmFsLCBvcHRsZW4pO1xuMTgxNTpcdFx0aWYgKGVycilcbjE4MTY6XHRcdFx0cmV0dXJuIGVycjtcbjE4MTc6XHRcbjE4MTg6XHRcdGlmIChjbWQucmVzZXJ2ZWQgIT0gMCB8fCBjbWQucmVzZXJ2ZWQyICE9IDApXG4xODE5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTgyMDpcdFxuMTgyMTpcdFx0aWYgKGNtZC5zZXRfY3VycmVudCB8fCBjbWQuc2V0X3JuZXh0KSB7XG4xODIyOlx0XHRcdGlmICghdGNwX2FvX2Nhbl9zZXRfY3VycmVudF9ybmV4dChzaykpXG4xODIzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODI0Olx0XHR9XG4xODI1Olx0XG4xODI2Olx0XHRpZiAoY21kLmtleWZsYWdzIFx1MDAyNiB+VENQX0FPX0RFTF9LRVlGX0FMTClcbjE4Mjc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODI4Olx0XG4xODI5Olx0XHQvKiBObyBzYW5pdHkgY2hlY2sgZm9yIFRDUF9BT19LRVlGX0lGSU5ERVggYXMgaWYgYSBWUkZcbjE4MzA6XHRcdCAqIHdhcyBkZXN0cm95ZWQsIHRoZXJlIHN0aWxsIHNob3VsZCBiZSBhIHdheSB0byBkZWxldGUga2V5cyxcbjE4MzE6XHRcdCAqIHRoYXQgd2VyZSBib3VuZCB0byB0aGF0IGwzaW50Zi4gU28sIGZhaWwgbGF0ZSBhdCBsb29rdXAgc3RhZ2VcbjE4MzI6XHRcdCAqIGlmIHRoZXJlIGlzIG5vIGtleSBmb3IgdGhhdCBpZmluZGV4LlxuMTgzMzpcdFx0ICovXG4xODM0Olx0XHRpZiAoY21kLmlmaW5kZXggXHUwMDI2XHUwMDI2ICEoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKSlcbjE4MzU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODM2Olx0XG4xODM3Olx0XHRpZiAoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKVxuMTgzODpcdFx0XHRsM2luZGV4ID0gY21kLmlmaW5kZXg7XG4xODM5Olx0XG4xODQwOlx0XHRhb19pbmZvID0gc2V0c29ja29wdF9hb19pbmZvKHNrKTtcbjE4NDE6XHRcdGlmIChJU19FUlIoYW9faW5mbykpXG4xODQyOlx0XHRcdHJldHVybiBQVFJfRVJSKGFvX2luZm8pO1xuMTg0MzpcdFx0aWYgKCFhb19pbmZvKVxuMTg0NDpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbjE4NDU6XHRcbjE4NDY6XHRcdC8qIEZvciBzb2NrZXRzIGluIFRDUF9DTE9TRUQgaXQmIzM5O3MgcG9zc2libGUgc2V0IGtleXMgdGhhdCBhcmVuJiMzOTt0XG4xODQ3Olx0XHQgKiBtYXRjaGluZyB0aGUgZnV0dXJlIHBlZXIgKGFkZHJlc3MvVlJGL2V0YyksXG4xODQ4Olx0XHQgKiB0Y3BfYW9fY29ubmVjdF9pbml0KCkgd2lsbCBjaG9vc2UgYSBjb3JyZWN0IG1hdGNoaW5nIE1LVFxuMTg0OTpcdFx0ICogaWYgdGhlcmUmIzM5O3MgYW55LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODA2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQX0FPIEtleSBGbGFnIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIGl0IHNlZW1zIHdlJiMzOTtyZSBmaW5hbGx5IGFzc2lnbmluZyBgY21kLmlmaW5kZXhgIHRvIGBsM2luZGV4YCB3aGVuIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyBpcyBzZXQuJiMzNDsgQmVmb3JlIHRoaXMsIGBsM2luZGV4YCB3YXMganVzdCBpbml0aWFsaXplZCB0byB6ZXJvLCBidXQgdGhpcyBjcnVjaWFsIGFzc2lnbm1lbnQgd2FzIG1pc3NpbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcmVtZW1iZXIgaG93IGBjbWRgIGdldHMgcG9wdWxhdGVkIOKAkyB0aGF0JiMzOTtzIHJpZ2h0LCBpdCBjb21lcyBmcm9tIHVzZXJzcGFjZSB2aWEgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAuIFRoYXQgZnVuY3Rpb24mIzM5O3MgaW1wb3J0YW50IGJlY2F1c2UgaXQgY29waWVzIHRoZSBkYXRhIGFuZCB6ZXJvLXBhZHMgaWYgYG9wdGxlbmAgaXMgc21hbGxlciB0aGFuIHRoZSBgY21kYCBzdHJ1Y3QgaXRzZWxmLiBTbywgbm8gbWF0dGVyIHdoYXQsIGBjbWRgIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBlaXRoZXIgZnJvbSB1c2VyIHNwYWNlIG9yIHdpdGggemVyb3MuIFRoZW4sIGBsM2luZGV4YCBjb3JyZWN0bHkgZ2V0cyBpdHMgdmFsdWUuIFRoaXMgYWxsIG1lYW5zIGl0JiMzOTtzIGFuICppbnB1dCogZnJvbSB1c2VyIHNwYWNlLCBhbmQgdGhlcmUmIzM5O3Mgbm8gd2F5IHdlJiMzOTtyZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGxlYWtpbmcgc29tZXRoaW5nIHRvIHVzZXIgc3BhY2UuCgpUaGlzIHBhdGNoLCBpdCYjMzk7cyBjbGVhciBub3csIGZpeGVzIGEgYnVnIHdoZXJlIGBsM2luZGV4YCB3YXMgYmVpbmcgaWdub3JlZCBkdXJpbmcgYFRDUF9BT19ERUxfS0VZYCBgc2V0c29ja29wdGAuIFRoYXQmIzM5O3MgYSBnb29kIGZpeC4KCk5vdywgbXkgbWluZCBnb2VzIHRvIEtNU0FOIOKAkyB0aGUgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIuIElzIHRoaXMgcGF0Y2ggcmVsZXZhbnQ/IERvZXMgaXQgZXhwb3NlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHByb2JsZW0/IE5vLCBkZWZpbml0ZWx5IG5vdC4gYGNtZGAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhhdCBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyYCBmdW5jdGlvbi4gV2UgcmVhZCBgY21kLmlmaW5kZXhgIGZyb20gYGNtZGAsIGFuZCBgY21kYCBpcyBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBBbmQsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGVyZSBpcyBubyBrZXJuZWwgbWVtb3J5IGNvcGllZCB0byB1c2VyIHNwYWNlIGluIHRoaXMgcGF0Y2guIEFjdHVhbGx5LCB3YWl0IC0gSSBzaG91bGQgY2hlY2sgdGhlIHNlbGZ0ZXN0cy4gVGhvc2UgbWlnaHQgYmUgdGhlIGV4Y2VwdGlvbi4gQWgsIGJ1dCB0aGUgc2VsZnRlc3RzIGFyZSBqdXN0IHRlc3RpbmcgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBPa2F5LCBJ4oCZbSBnb29kIHRvIGdvLgoKVGltZSB0byBkb3VibGUtY2hlY2sgdGhhdCBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyYCBmdW5jdGlvbiwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvcHlfc3RydWN0X2Zyb21fc29ja3B0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc29ja3B0ci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc29ja3B0ci5oPTc3PXN0YXRpYyBpbmxpbmUgaW50IGNvcHlfc2FmZV9mcm9tX3NvY2twdHIodm9pZCAqZHN0LCBzaXplX3Qga3NpemUsXG4tLVxuaW5jbHVkZS9saW51eC9zb2NrcHRyLmgtODYtXG5pbmNsdWRlL2xpbnV4L3NvY2twdHIuaDo4NzpzdGF0aWMgaW5saW5lIGludCBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHIodm9pZCAqZHN0LCBzaXplX3Qga3NpemUsXG5pbmNsdWRlL2xpbnV4L3NvY2twdHIuaC04OC1cdFx0c29ja3B0cl90IHNyYywgc2l6ZV90IHVzaXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Nzg4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgOgoKKipEaXNzZWN0aW5nIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGdldHRpbmcgbXlzZWxmIGZhbWlsaWFyIHdpdGggYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAuIFRoYXQgbmFtZSBhbG9uZSBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY2FuIGltbWVkaWF0ZWx5IGluZmVyIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiwgdW5zdXJwcmlzaW5nbHksIGNvcHlpbmcgYSBzdHJ1Y3R1cmUgZnJvbSBhIHNvY2tldCBwb2ludGVyLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQuIFdoYXQga2luZCBvZiBzb2NrZXQ/IFdoYXQmIzM5O3MgdGhlIHNvdXJjZSBzdHJ1Y3R1cmU/IFdoYXQmIzM5O3MgdGhlIGRlc3RpbmF0aW9uPyBBcmUgdGhlcmUgYW55IGRhdGEgY29udmVyc2lvbnMgaGFwcGVuaW5nPyBBbnkgbWVtb3J5IGFsbG9jYXRpb24gY29uc2lkZXJhdGlvbnM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBzb2NrZXQgY29tbXVuaWNhdGlvbiwgYW5kIG1lbW9yeSBzYWZldHkuIE9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQ6IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGJvdW5kYXJ5IGNvbmRpdGlvbnMsIGFuZCBlcnJvciBoYW5kbGluZy4gSSYjMzk7bGwgc3RhcnQgYnkgbG9va2luZyBhdCBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgZGlmZmVyZW50IHNvY2tldCB0eXBlcywgZGF0YSBzaXplcywgYW5kIHBvdGVudGlhbCBlcnJvcnMgZHVyaW5nIHRoZSBkYXRhIHRyYW5zZmVyLiBJJiMzOTtsbCBiZSBzY3J1dGluaXppbmcgdGhlIHJldHVybiB2YWx1ZSBhcyB3ZWxsLiBXaGF0IGRvZXMgaXQgc2lnbmlmeSBpbiB0ZXJtcyBvZiBzdWNjZXNzIG9yIGZhaWx1cmU/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zb2NrcHRyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDc3Olx0c3RhdGljIGlubGluZSBpbnQgY29weV9zYWZlX2Zyb21fc29ja3B0cih2b2lkICpkc3QsIHNpemVfdCBrc2l6ZSxcbiAgNzg6XHRcdFx0XHRcdFx0IHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXG4gIDc5Olx0e1xuICA4MDpcdFx0aWYgKG9wdGxlbiBcdTAwM2Mga3NpemUpXG4gIDgxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA4MjpcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKGRzdCwgb3B0dmFsLCBrc2l6ZSkpXG4gIDgzOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuICA4NDpcdFx0cmV0dXJuIDA7XG4gIDg1Olx0fVxuICA4NjpcdFxuICA4NzpcdHN0YXRpYyBpbmxpbmUgaW50IGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cih2b2lkICpkc3QsIHNpemVfdCBrc2l6ZSxcbiAgODg6XHRcdFx0c29ja3B0cl90IHNyYywgc2l6ZV90IHVzaXplKVxuICA4OTpcdHtcbiAgOTA6XHRcdGlmICghc29ja3B0cl9pc19rZXJuZWwoc3JjKSlcbiAgOTE6XHRcdFx0cmV0dXJuIGNvcHlfc3RydWN0X2Zyb21fdXNlcihkc3QsIGtzaXplLCBzcmMudXNlciwgdXNpemUpO1xuICA5MjpcdFxuICA5MzpcdFx0cmV0dXJuIGNvcHlfc3RydWN0X2Zyb21fYm91bmNlX2J1ZmZlcihkc3QsIGtzaXplLCBzcmMua2VybmVsLCB1c2l6ZSk7XG4gIDk0Olx0fVxuICA5NTpcdFxuICA5NjpcdHN0YXRpYyBpbmxpbmUgaW50IGNvcHlfdG9fc29ja3B0cl9vZmZzZXQoc29ja3B0cl90IGRzdCwgc2l6ZV90IG9mZnNldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODUKCQkJCQkJCW91dHB1dDogMjI3CgkJCQkJCQl0aG91Z2h0czogMzM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRDUC1BT19ERUxfS0VZIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIGlzIHRoZSBmaXggZm9yIGBUQ1BfQU9fREVMX0tFWWAmIzM5O3MgYHNldHNvY2tvcHRgIGNhbGwuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIGNvbXBsZXRlbHkgaWdub3JpbmcgdGhlIGBpZmluZGV4YCBmaWVsZCBwcm92aWRlZCBpbiB0aGUgdXNlci1zdXBwbGllZCBgdGNwX2FvX2RlbGAgc3RydWN0dXJlIHdoZW4gZGVsZXRpbmcgYSBUQ1AtQU8ga2V5LCB3aGljaCBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBidWcuCgpNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgb3IgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAsIHRoZSBtZWNoYW5pc20gdXNlZCB0byBicmluZyBkYXRhIGZyb20gdXNlciBzcGFjZSBpbnRvIHRoZSBrZXJuZWwsIGlzIGluaGVyZW50bHkgc2FmZS4gSWYgdGhlIHVzZXItcHJvdmlkZWQgZGF0YSBpcyBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQsIHRoZSBmdW5jdGlvbiB6ZXJvZXMgb3V0IHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhlIGBjbWRgIHN0cnVjdC4gSWYgaXQmIzM5O3MgbGFyZ2VyLCBpdCBvbmx5IGNvcGllcyB0aGUgcmVxdWlyZWQgc2l6ZSBhbmQgdmVyaWZpZXMgdGhhdCB0aGUgcmVzdCBpcyB6ZXJvZWQgb3V0LiBUaGlzIG1lYW5zIGBjbWRgICppcyBhbHdheXMqIGZ1bGx5IGluaXRpYWxpemVkLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIGEgc2ltcGxlIGFzc2lnbm1lbnQgb2YgYGNtZC5pZmluZGV4YCB0byBgbDNpbmRleGAsICpidXQgb25seSogaWYgdGhlIGBUQ1BfQU9fS0VZRl9JRklOREVYYCBmbGFnIGlzIHNldC4gQ3JpdGljYWxseSwgdGhlcmUmIzM5O3Mgbm8gZmFuY3kgbWVtb3J5IG1hbmlwdWxhdGlvbiBnb2luZyBvbi4gVGhlcmUmIzM5O3Mgbm8gbmV3IGFsbG9jYXRpb24sIG5vIGNvcHlpbmcga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgbm8gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQmIzM5O3MganVzdCByZWFkaW5nIGZyb20gYW4gYWxyZWFkeSBpbml0aWFsaXplZCBzdHJ1Y3R1cmUgYW5kIGFzc2lnbmluZyBpdCB0byBhIGxvY2FsIHZhcmlhYmxlLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgaXMgZnVuY3Rpb25hbGx5IHNhZmUsIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgb3IgaW5mb3JtYXRpb24gbGVha3MgYmVpbmcgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJiMzOTt0IHdhcnJhbnRlZCBoZXJlLiBTdGFuZGFyZCBLQVNBTiwgYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMsIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZnVuY3Rpb25hbCBidWcgaW4gYHRjcF9hb19kZWxfY21kYCB3aGVyZSB0aGUgYGlmaW5kZXhgIGZpZWxkIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgYHRjcF9hb19kZWxgIHN0cnVjdHVyZSB3YXMgaWdub3JlZCB3aGVuIGRlbGV0aW5nIGEgVENQLUFPIGtleS4gVGhlIGBjbWRgIHN0cnVjdHVyZSBpcyBzYWZlbHkgcG9wdWxhdGVkIGZyb20gdXNlciBzcGFjZSB1c2luZyBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyKClgLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCAoZWl0aGVyIGJ5IGNvcHlpbmcgZnJvbSB1c2VyIHNwYWNlIG9yIHplcm8tcGFkZGluZykuIFRoZSBwYXRjaCBzaW1wbHkgcmVhZHMgdGhlIGluaXRpYWxpemVkIGBjbWQuaWZpbmRleGAgZmllbGQgYW5kIGFzc2lnbnMgaXQgdG8gYGwzaW5kZXhgIGlmIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyBpcyBzZXQuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZnVuY3Rpb25hbCBidWcgaW4gYHRjcF9hb19kZWxfY21kYCB3aGVyZSB0aGUgYGlmaW5kZXhgIGZpZWxkIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgYHRjcF9hb19kZWxgIHN0cnVjdHVyZSB3YXMgaWdub3JlZCB3aGVuIGRlbGV0aW5nIGEgVENQLUFPIGtleS4gVGhlIGBjbWRgIHN0cnVjdHVyZSBpcyBzYWZlbHkgcG9wdWxhdGVkIGZyb20gdXNlciBzcGFjZSB1c2luZyBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyKClgLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCAoZWl0aGVyIGJ5IGNvcHlpbmcgZnJvbSB1c2VyIHNwYWNlIG9yIHplcm8tcGFkZGluZykuIFRoZSBwYXRjaCBzaW1wbHkgcmVhZHMgdGhlIGluaXRpYWxpemVkIGBjbWQuaWZpbmRleGAgZmllbGQgYW5kIGFzc2lnbnMgaXQgdG8gYGwzaW5kZXhgIGlmIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyBpcyBzZXQuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6MjM6MzcuNzg3OTE1MjgyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk4NjI2MjgwMjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRDUF9BT1wiLFxuICAgIFwiTkVUX1ZSRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9wYXJzZV9hb1wiLFxuICAgIFwidGNwX3Y0X3BhcnNlX2FvXCIsXG4gICAgXCJ0Y3BfdjZfcGFyc2VfYW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZnVuY3Rpb25hbCBidWcgaW4gYHRjcF9hb19kZWxfY21kYCB3aGVyZSB0aGUgYGlmaW5kZXhgIGZpZWxkIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgYHRjcF9hb19kZWxgIHN0cnVjdHVyZSB3YXMgaWdub3JlZCB3aGVuIGRlbGV0aW5nIGEgVENQLUFPIGtleS4gVGhlIGBjbWRgIHN0cnVjdHVyZSBpcyBzYWZlbHkgcG9wdWxhdGVkIGZyb20gdXNlciBzcGFjZSB1c2luZyBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyKClgLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCAoZWl0aGVyIGJ5IGNvcHlpbmcgZnJvbSB1c2VyIHNwYWNlIG9yIHplcm8tcGFkZGluZykuIFRoZSBwYXRjaCBzaW1wbHkgcmVhZHMgdGhlIGluaXRpYWxpemVkIGBjbWQuaWZpbmRleGAgZmllbGQgYW5kIGFzc2lnbnMgaXQgdG8gYGwzaW5kZXhgIGlmIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyBpcyBzZXQuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBUQ1AtQU8ga2V5IGRlbGV0aW9uIHdoZXJlIHRoZSBpbnRlcmZhY2UgaW5kZXggKFZSRikgd2FzIG5vdCBwcm9wZXJseSBleHRyYWN0ZWQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBjb21tYW5kIHdoZW4gdGhlIFRDUF9BT19LRVlGX0lGSU5ERVggZmxhZyB3YXMgc2V0LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIFRDUCBzZXRzb2Nrb3B0IGxvZ2ljIGZvciBUQ1BfQU9fREVMX0tFWS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6MjM6MzcuNzg3OTE5NzIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc1ODg5MTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGMwMmNiYWY5NWIxNjRiNmM5ZWEyYWI4MTA1MzA3ZTI5ODVhY2QxOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyMiAyMDoyMzozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYW8uYyBiL25ldC9pcHY0L3RjcF9hby5jXFxuaW5kZXggNTA5NDI2NzQ0N2FlZS4uMjY4NjQ2MjFlNmRlZiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfYW8uY1xcbisrKyBiL25ldC9pcHY0L3RjcF9hby5jXFxuQEAgLTE4MzQsNiArMTgzNCw5IEBAIHN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbiBcXHRpZiAoY21kLmlmaW5kZXggXFx1MDAyNlxcdTAwMjYgIShjbWQua2V5ZmxhZ3MgXFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRpZiAoY21kLmtleWZsYWdzIFxcdTAwMjYgVENQX0FPX0tFWUZfSUZJTkRFWClcXG4rXFx0XFx0bDNpbmRleCA9IGNtZC5pZmluZGV4O1xcbitcXG4gXFx0YW9faW5mbyA9IHNldHNvY2tvcHRfYW9faW5mbyhzayk7XFxuIFxcdGlmIChJU19FUlIoYW9faW5mbykpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGFvX2luZm8pO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmNcXG5pbmRleCBkODZiYjM4MGI3OWY3Li4wNDUxZjkyZjQ2NDVkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xcbkBAIC02Myw4ICs2Myw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9sc2sodW5pb24gdGNwX2FkZHIgKmFkZHIsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpXFxuIFxcdHJldHVybiBzaztcXG4gfVxcbiBcXG4tc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxcbi1cXHRcXHRcXHRpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXkpXFxuK3N0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgaW50IGlmaW5kZXgsXFxuK1xcdFxcdFxcdGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0IGFvX2luZm8gPSB7fTtcXG4gXFx0c3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0IGtleSA9IHt9O1xcbkBAIC03Niw2ICs3NiwxMCBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXFxuIFxcdGRlbC5wcmVmaXggPSBERUZBVUxUX1RFU1RfUFJFRklYO1xcbiBcXHRkZWwuc25kaWQgPSBzbmRpZDtcXG4gXFx0ZGVsLnJjdmlkID0gcmN2aWQ7XFxuK1xcdGlmIChpZmluZGV4KSB7XFxuK1xcdFxcdGRlbC5rZXlmbGFncyA9IFRDUF9BT19LRVlGX0lGSU5ERVg7XFxuK1xcdFxcdGRlbC5pZmluZGV4ID0gaWZpbmRleDtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGN1cnJlbnRfa2V5IFxcdTAwM2U9IDApIHtcXG4gXFx0XFx0ZGVsLnNldF9jdXJyZW50ID0gMTtcXG5AQCAtOTUsNyArOTksOCBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXFxuIFxcbiBcXHR0Y3BfYWRkcl90b19zb2NrYWRkcl9pbihcXHUwMDI2c29ja2FkZHIsIFxcdTAwMjZ0aGlzX2lwX2Rlc3QsIDApO1xcbiBcXHRlcnIgPSB0ZXN0X2dldF9vbmVfYW8oc2ssIFxcdTAwMjZrZXksIFxcdTAwMjZzb2NrYWRkciwgc2l6ZW9mKHNvY2thZGRyKSxcXG4tXFx0XFx0XFx0ICAgICAgREVGQVVMVF9URVNUX1BSRUZJWCwgc25kaWQsIHJjdmlkKTtcXG4rXFx0XFx0XFx0ICAgICAgREVGQVVMVF9URVNUX1BSRUZJWCwgc25kaWQsIHJjdmlkLFxcbitcXHRcXHRcXHQgICAgICBkZWwua2V5ZmxhZ3MsIGRlbC5pZmluZGV4KTtcXG4gXFx0aWYgKCFlcnIpXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXHRpZiAoZXJyICE9IC1FMkJJRylcXG5AQCAtMTEyLDEyICsxMTcsMTIgQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB0cnlfZGVsZXRlX2tleShjaGFyICp0c3RfbmFtZSwgaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLFxcbi1cXHRcXHRcXHQgICBib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXksXFxuK1xcdFxcdFxcdCAgIGludCBpZmluZGV4LCBib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXksXFxuIFxcdFxcdFxcdCAgIGZhdWx0X3QgaW5qKVxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRlcnIgPSB0ZXN0X2RlbF9rZXkoc2ssIHNuZGlkLCByY3ZpZCwgYXN5bmMsIGN1cnJlbnRfa2V5LCBybmV4dF9rZXkpO1xcbitcXHRlcnIgPSB0ZXN0X2RlbF9rZXkoc2ssIHNuZGlkLCByY3ZpZCwgaWZpbmRleCwgYXN5bmMsIGN1cnJlbnRfa2V5LCBybmV4dF9rZXkpO1xcbiBcXHRpZiAoKGVyciA9PSAtRUJVU1kgXFx1MDAyNlxcdTAwMjYgZmF1bHQoQlVTWSkpIHx8IChlcnIgPT0gLUVJTlZBTCBcXHUwMDI2XFx1MDAyNiBmYXVsdChDVVJSTkVYVCkpKSB7XFxuIFxcdFxcdHRlc3Rfb2soXFxcIiVzOiBrZXkgZGVsZXRpb24gd2FzIHByZXZlbnRlZFxcXCIsIHRzdF9uYW1lKTtcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0yMzYsMTUgKzI0MSwxNSBAQCBzdGF0aWMgdm9pZCBjaGVja19jbG9zZWRfc29ja2V0KHZvaWQpXFxuIFxcdGludCBzaztcXG4gXFxuIFxcdHNrID0gcHJlcGFyZV9zayhcXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XFxuLVxcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXlcXFwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7XFxuLVxcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcXFwiLCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgMCk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXlcXFwiLCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcXFwiLCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgMCk7XFxuIFxcdGNsb3NlKHNrKTtcXG4gXFxuIFxcdHNrID0gcHJlcGFyZV9zayhcXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XFxuIFxcdGlmICh0ZXN0X3NldF9rZXkoc2ssIDEwMCwgMjAwKSlcXG4gXFx0XFx0dGVzdF9lcnJvcihcXFwiZmFpbGVkIHRvIHNldCBjdXJyZW50L3JuZXh0IGtleXNcXFwiKTtcXG4tXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleVxcXCIsIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcXG4tXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXlcXFwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXlcXFwiLCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgcm5leHQga2V5XFxcIiwgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xcbiBcXHRjbG9zZShzayk7XFxuIFxcbiBcXHRzayA9IHByZXBhcmVfc2soXFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xcbkBAIC0yNTQsMTAgKzI1OSwxMiBAQCBzdGF0aWMgdm9pZCBjaGVja19jbG9zZWRfc29ja2V0KHZvaWQpXFxuIFxcdGlmICh0ZXN0X2FkZF9rZXkoc2ssIFxcXCJHbG9yeSB0byBVa3JhaW5lIVxcXCIsIHRoaXNfaXBfZGVzdCxcXG4gXFx0XFx0XFx0IERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpXFxuIFxcdFxcdHRlc3RfZXJyb3IoXFxcInRlc3RfYWRkX2tleSgpXFxcIik7XFxuLVxcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXkgKyBzZXQgY3VycmVudC9ybmV4dFxcXCIsIHNrLCAxMDAsIDEwMCwgMCwgMTAsIDEzLCAwKTtcXG4tXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBjdXJyZW50IGtleVxcXCIsIHNrLCAxMCwgMTEsIDAsIDIwMCwgLTEsIDApO1xcbi1cXHR0cnlfZGVsZXRlX2tleShcXFwiY2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleVxcXCIsIHNrLCAxMiwgMTMsIDAsIC0xLCAyMDAsIDApO1xcbi1cXHR0cnlfZGVsZXRlX2tleShcXFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQrcm5leHQga2V5XFxcIiwgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xcbitcXHR0cnlfZGVsZXRlX2tleShcXFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5ICsgc2V0IGN1cnJlbnQvcm5leHRcXFwiLCBzayxcXG4rXFx0XFx0ICAgICAgIDEwMCwgMTAwLCAwLCAwLCAxMCwgMTMsIDApO1xcbitcXHR0cnlfZGVsZXRlX2tleShcXFwiY2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5XFxcIiwgc2ssIDEwLCAxMSwgMCwgMCwgMjAwLCAtMSwgMCk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5XFxcIiwgc2ssIDEyLCAxMywgMCwgMCwgLTEsIDIwMCwgMCk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCtybmV4dCBrZXlcXFwiLCBzayxcXG4rXFx0XFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xcbiBcXHRjbG9zZShzayk7XFxuIFxcbiBcXHRzayA9IHByZXBhcmVfc2soXFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xcbkBAIC0yNzIsNiArMjc5LDE4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcXG4gXFx0XFx0XFx0XFx0ICB0aGlzX2lwX2Rlc3QsIERFRkFVTFRfVEVTVF9QUkVGSVgsXFxuIFxcdFxcdFxcdFxcdCAgZmFsc2UsIHRydWUsIDIwLCAxMCwgMCk7XFxuIFxcdGNsb3NlKHNrKTtcXG4rXFxuK1xcdGlmICghc2hvdWxkX3NraXBfdGVzdChcXFwiY2xvc2VkIHNvY2tldCwgYWRkICsgZGVsZXRlIFZSRi1zY29wZWQga2V5XFxcIixcXG4rXFx0XFx0XFx0ICAgICAgS0NPTkZJR19ORVRfVlJGKSkge1xcbitcXHRcXHRzayA9IHByZXBhcmVfc2soXFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xcbitcXHRcXHRpZiAodGVzdF9hZGRfa2V5X3ZyZihzaywgU0VDT05EX1BBU1NXT1JELCBUQ1BfQU9fS0VZRl9JRklOREVYLFxcbitcXHRcXHRcXHRcXHQgICAgIHRoaXNfaXBfZGVzdCwgREVGQVVMVF9URVNUX1BSRUZJWCxcXG4rXFx0XFx0XFx0XFx0ICAgICB0ZXN0X3ZyZl9pZmluZGV4LCAyMDEsIDIwMSkpXFxuK1xcdFxcdFxcdHRlc3RfZXJyb3IoXFxcInRlc3RfYWRkX2tleV92cmYoKVxcXCIpO1xcbitcXHRcXHR0cnlfZGVsZXRlX2tleShcXFwiY2xvc2VkIHNvY2tldCwgYWRkICsgZGVsZXRlIFZSRi1zY29wZWQga2V5XFxcIiwgc2ssIDIwMSwgMjAxLFxcbitcXHRcXHRcXHQgICAgICAgdGVzdF92cmZfaWZpbmRleCwgMCwgLTEsIC0xLCAwKTtcXG4rXFx0XFx0Y2xvc2Uoc2spO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGFzc2VydF9ub19jdXJyZW50X3JuZXh0KGNvbnN0IGNoYXIgKnRzdF9tc2csIGludCBzaylcXG5AQCAtMzIyLDggKzM0MSw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2xpc3Rlbl9zb2NrZXQodm9pZClcXG4gXFx0aW50IHNrLCBlcnI7XFxuIFxcbiBcXHRzayA9IHByZXBhcmVfbHNrKFxcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcXG4tXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVxcXCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCAwKTtcXG4tXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1xcXCIsIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCAwKTtcXG4rXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVxcXCIsIHNrLCAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCAwKTtcXG4rXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1xcXCIsIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTtcXG4gXFx0Y2xvc2Uoc2spO1xcbiBcXG4gXFx0c2sgPSBwcmVwYXJlX2xzayhcXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XFxuQEAgLTM0NSw4ICszNjQsMTAgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKVxcbiBcXHRpZiAobGlzdGVuKHNrLCAxMCkpXFxuIFxcdFxcdHRlc3RfZXJyb3IoXFxcImxpc3RlbigpXFxcIik7XFxuIFxcdGFzc2VydF9ub19jdXJyZW50X3JuZXh0KFxcXCJsaXN0ZW4oKSBhZnRlciBjdXJyZW50L3JuZXh0IGtleXMgc2V0XFxcIiwgc2spO1xcbi1cXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXFxcIiwgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcXG4tXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcXFwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpO1xcbitcXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXFxcIiwgc2ssXFxuK1xcdFxcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgcm5leHQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXFxcIiwgc2ssXFxuK1xcdFxcdCAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XFxuIFxcdGNsb3NlKHNrKTtcXG4gXFxuIFxcdGFzc2VydF9ub190Y3BfcmVwYWlyKCk7XFxuQEAgLTM1OSwxMyArMzgwLDEzIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2xpc3Rlbl9zb2NrZXQodm9pZClcXG4gXFx0XFx0XFx0IERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpXFxuIFxcdFxcdHRlc3RfZXJyb3IoXFxcInRlc3RfYWRkX2tleSgpXFxcIik7XFxuIFxcdHRyeV9kZWxldGVfa2V5KFxcXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXkgKyBzZXQgY3VycmVudC9ybmV4dFxcXCIsIHNrLFxcbi1cXHRcXHQgICAgICAgMTAwLCAxMDAsIDAsIDEwLCAxMywgRkFVTFRfQ1VSUk5FWFQpO1xcbitcXHRcXHQgICAgICAgMTAwLCAxMDAsIDAsIDAsIDEwLCAxMywgRkFVTFRfQ1VSUk5FWFQpO1xcbiBcXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5XFxcIiwgc2ssXFxuLVxcdFxcdCAgICAgICAxMCwgMTEsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTtcXG4rXFx0XFx0ICAgICAgIDEwLCAxMSwgMCwgMCwgMjAwLCAtMSwgRkFVTFRfQ1VSUk5FWFQpO1xcbiBcXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleVxcXCIsIHNrLFxcbi1cXHRcXHQgICAgICAgMTIsIDEzLCAwLCAtMSwgMjAwLCBGQVVMVF9DVVJSTkVYVCk7XFxuK1xcdFxcdCAgICAgICAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTtcXG4gXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVxcXCIsIHNrLFxcbi1cXHRcXHQgICAgICAgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7XFxuK1xcdFxcdCAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCAwKTtcXG4gXFx0Y2xvc2Uoc2spO1xcbiBcXG4gXFx0c2sgPSBwcmVwYXJlX2xzayhcXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XFxuQEAgLTExMzEsNyArMTE1Miw2IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCh2b2lkKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBwb3J0ID0gdGVzdF9zZXJ2ZXJfcG9ydDtcXG4gXFxuLVxcdHNldHVwX3ZyZnMoKTtcXG4gXFx0dHJ5X2NsaWVudF9ydW4oXFxcImNsaWVudDogQ2hlY2sgY3VycmVudC9ybmV4dCBrZXlzIHVuc2V0IGJlZm9yZSBjb25uZWN0KClcXFwiLFxcbiBcXHRcXHQgICAgICAgcG9ydCsrLCAyMCwgLTEsIC0xKTtcXG4gXFx0dHJ5X2NsaWVudF9ydW4oXFxcImNsaWVudDogQ2hlY2sgY3VycmVudC9ybmV4dCBrZXlzIHNldCBiZWZvcmUgY29ubmVjdCgpXFxcIixcXG5AQCAtMTE1MCw2ICsxMTcwLDcgQEAgc3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpXFxuIHtcXG4gXFx0aWYgKGluZXRfcHRvbihURVNUX0ZBTUlMWSwgVEVTVF9XUk9OR19JUCwgXFx1MDAyNndyb25nX2FkZHIpICE9IDEpXFxuIFxcdFxcdHRlc3RfZXJyb3IoXFxcIkNhbid0IGNvbnZlcnQgaXAgYWRkcmVzcyAlc1xcXCIsIFRFU1RfV1JPTkdfSVApO1xcbitcXHRzZXR1cF92cmZzKCk7XFxuIFxcdGNoZWNrX2Nsb3NlZF9zb2NrZXQoKTtcXG4gXFx0Y2hlY2tfbGlzdGVuX3NvY2tldCgpO1xcbiBcXHRjaGVja19lc3RhYmxpc2hlZF9zb2NrZXQoKTtcXG5AQCAtMTE1OCw2ICsxMTc5LDYgQEAgc3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpXFxuIFxcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiB7XFxuLVxcdHRlc3RfaW5pdCgxMjEsIHNlcnZlcl9mbiwgY2xpZW50X2ZuKTtcXG4rXFx0dGVzdF9pbml0KDEyMiwgc2VydmVyX2ZuLCBjbGllbnRfZm4pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaFxcbmluZGV4IGViYjI4OTljMTJmZTAuLjUzYmUxNzQ0MjM3ZWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmhcXG5AQCAtNDA0LDcgKzQwNCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfcHJlcGFyZV9kZWZfa2V5KHN0cnVjdCB0Y3BfYW9fYWRkICphbyxcXG4gXFxuIGV4dGVybiBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsXFxuIFxcdFxcdFxcdCAgIHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LFxcbi1cXHRcXHRcXHQgICB1aW50OF90IHByZWZpeCwgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCk7XFxuK1xcdFxcdFxcdCAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLFxcbitcXHRcXHRcXHQgICB1aW50OF90IGtleWZsYWdzLCBpbnQgaWZpbmRleCk7XFxuIGV4dGVybiBpbnQgdGVzdF9nZXRfYW9faW5mbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgKm91dCk7XFxuIGV4dGVybiBpbnQgdGVzdF9zZXRfYW9faW5mbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgKmluKTtcXG4gZXh0ZXJuIGludCB0ZXN0X2NtcF9nZXRzb2Nrb3B0X3NldHNvY2tvcHQoY29uc3Qgc3RydWN0IHRjcF9hb19hZGQgKmEsXFxuQEAgLTQxOCw3ICs0MTksOCBAQCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3ZlcmlmeV9zb2NrZXRfa2V5KGludCBzaywgc3RydWN0IHRjcF9hb19hZGQgKmtleSlcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgXFx1MDAyNmtleTIsIFxcdTAwMjZrZXktXFx1MDAzZWFkZHIsIHNpemVvZihrZXktXFx1MDAzZWFkZHIpLFxcbi1cXHRcXHRcXHQgICAgICBrZXktXFx1MDAzZXByZWZpeCwga2V5LVxcdTAwM2VzbmRpZCwga2V5LVxcdTAwM2VyY3ZpZCk7XFxuK1xcdFxcdFxcdCAgICAgIGtleS1cXHUwMDNlcHJlZml4LCBrZXktXFx1MDAzZXNuZGlkLCBrZXktXFx1MDAzZXJjdmlkLFxcbitcXHRcXHRcXHQgICAgICBrZXktXFx1MDAzZWtleWZsYWdzLCBrZXktXFx1MDAzZWlmaW5kZXgpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jXFxuaW5kZXggZWY4ZTkwMzFkNDdhMy4uMmU3YjA2YTFhMTU2NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcXG5AQCAtMjUyLDcgKzI1Miw3IEBAIHN0YXRpYyBpbnQgdGVzdF9nZXRfYW9fa2V5c19ucihpbnQgc2spXFxuIFxcbiBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsXFxuIFxcdFxcdHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LCB1aW50OF90IHByZWZpeCxcXG4tXFx0XFx0dWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZClcXG4rXFx0XFx0dWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgdWludDhfdCBrZXlmbGFncywgaW50IGlmaW5kZXgpXFxuIHtcXG4gXFx0c3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0IHRtcCA9IHt9O1xcbiBcXHRzb2NrbGVuX3QgdG1wX3N6ID0gc2l6ZW9mKHRtcCk7XFxuQEAgLTI2Miw2ICsyNjIsOCBAQCBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsXFxuIFxcdHRtcC5wcmVmaXggPSBwcmVmaXg7XFxuIFxcdHRtcC5zbmRpZCAgPSBzbmRpZDtcXG4gXFx0dG1wLnJjdmlkICA9IHJjdmlkO1xcbitcXHR0bXAua2V5ZmxhZ3MgPSBrZXlmbGFncztcXG4rXFx0dG1wLmlmaW5kZXggPSBpZmluZGV4O1xcbiBcXHR0bXAubmtleXMgID0gMTtcXG4gXFxuIFxcdHJldCA9IGdldHNvY2tvcHQoc2ssIElQUFJPVE9fVENQLCBUQ1BfQU9fR0VUX0tFWVMsIFxcdTAwMjZ0bXAsIFxcdTAwMjZ0bXBfc3opO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDoyMzozOS4xNjQ0MzEzODhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1Njc1MjU2MzY4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0FPXCIsXG4gICAgXCJORVRfVlJGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3BhcnNlX2FvXCIsXG4gICAgXCJ0Y3BfdjRfcGFyc2VfYW9cIixcbiAgICBcInRjcF92Nl9wYXJzZV9hb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIFRDUC1BTyBrZXkgZGVsZXRpb24gd2hlcmUgdGhlIGludGVyZmFjZSBpbmRleCAoVlJGKSB3YXMgbm90IHByb3Blcmx5IGV4dHJhY3RlZCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIGNvbW1hbmQgd2hlbiB0aGUgVENQX0FPX0tFWUZfSUZJTkRFWCBmbGFnIHdhcyBzZXQuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgVENQIHNldHNvY2tvcHQgbG9naWMgZm9yIFRDUF9BT19ERUxfS0VZLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0YzAyY2JhZjk1YjE2NGI2YzllYTJhYjgxMDUzMDdlMjk4NWFjZDE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMjA6MjM6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYW8uYyBiL25ldC9pcHY0L3RjcF9hby5jXG5pbmRleCA1MDk0MjY3NDQ3YWVlLi4yNjg2NDYyMWU2ZGVmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2FvLmNcbisrKyBiL25ldC9pcHY0L3RjcF9hby5jXG5AQCAtMTgzNCw2ICsxODM0LDkgQEAgc3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4gXHRpZiAoY21kLmlmaW5kZXggXHUwMDI2XHUwMDI2ICEoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRpZiAoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKVxuK1x0XHRsM2luZGV4ID0gY21kLmlmaW5kZXg7XG4rXG4gXHRhb19pbmZvID0gc2V0c29ja29wdF9hb19pbmZvKHNrKTtcbiBcdGlmIChJU19FUlIoYW9faW5mbykpXG4gXHRcdHJldHVybiBQVFJfRVJSKGFvX2luZm8pO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xuaW5kZXggZDg2YmIzODBiNzlmNy4uMDQ1MWY5MmY0NjQ1ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jXG5AQCAtNjMsOCArNjMsOCBAQCBzdGF0aWMgaW50IHByZXBhcmVfbHNrKHVuaW9uIHRjcF9hZGRyICphZGRyLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKVxuIFx0cmV0dXJuIHNrO1xuIH1cbiBcbi1zdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXG4tXHRcdFx0aW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5KVxuK3N0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgaW50IGlmaW5kZXgsXG4rXHRcdFx0Ym9vbCBhc3luYywgaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5KVxuIHtcbiBcdHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgYW9faW5mbyA9IHt9O1xuIFx0c3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0IGtleSA9IHt9O1xuQEAgLTc2LDYgKzc2LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbiBcdGRlbC5wcmVmaXggPSBERUZBVUxUX1RFU1RfUFJFRklYO1xuIFx0ZGVsLnNuZGlkID0gc25kaWQ7XG4gXHRkZWwucmN2aWQgPSByY3ZpZDtcbitcdGlmIChpZmluZGV4KSB7XG4rXHRcdGRlbC5rZXlmbGFncyA9IFRDUF9BT19LRVlGX0lGSU5ERVg7XG4rXHRcdGRlbC5pZmluZGV4ID0gaWZpbmRleDtcbitcdH1cbiBcbiBcdGlmIChjdXJyZW50X2tleSBcdTAwM2U9IDApIHtcbiBcdFx0ZGVsLnNldF9jdXJyZW50ID0gMTtcbkBAIC05NSw3ICs5OSw4IEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbiBcbiBcdHRjcF9hZGRyX3RvX3NvY2thZGRyX2luKFx1MDAyNnNvY2thZGRyLCBcdTAwMjZ0aGlzX2lwX2Rlc3QsIDApO1xuIFx0ZXJyID0gdGVzdF9nZXRfb25lX2FvKHNrLCBcdTAwMjZrZXksIFx1MDAyNnNvY2thZGRyLCBzaXplb2Yoc29ja2FkZHIpLFxuLVx0XHRcdCAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCk7XG4rXHRcdFx0ICAgICAgREVGQVVMVF9URVNUX1BSRUZJWCwgc25kaWQsIHJjdmlkLFxuK1x0XHRcdCAgICAgIGRlbC5rZXlmbGFncywgZGVsLmlmaW5kZXgpO1xuIFx0aWYgKCFlcnIpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFx0aWYgKGVyciAhPSAtRTJCSUcpXG5AQCAtMTEyLDEyICsxMTcsMTIgQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxuIH1cbiBcbiBzdGF0aWMgdm9pZCB0cnlfZGVsZXRlX2tleShjaGFyICp0c3RfbmFtZSwgaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLFxuLVx0XHRcdCAgIGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSxcbitcdFx0XHQgICBpbnQgaWZpbmRleCwgYm9vbCBhc3luYywgaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5LFxuIFx0XHRcdCAgIGZhdWx0X3QgaW5qKVxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSB0ZXN0X2RlbF9rZXkoc2ssIHNuZGlkLCByY3ZpZCwgYXN5bmMsIGN1cnJlbnRfa2V5LCBybmV4dF9rZXkpO1xuK1x0ZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGlmaW5kZXgsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTtcbiBcdGlmICgoZXJyID09IC1FQlVTWSBcdTAwMjZcdTAwMjYgZmF1bHQoQlVTWSkpIHx8IChlcnIgPT0gLUVJTlZBTCBcdTAwMjZcdTAwMjYgZmF1bHQoQ1VSUk5FWFQpKSkge1xuIFx0XHR0ZXN0X29rKFwiJXM6IGtleSBkZWxldGlvbiB3YXMgcHJldmVudGVkXCIsIHRzdF9uYW1lKTtcbiBcdFx0cmV0dXJuO1xuQEAgLTIzNiwxNSArMjQxLDE1IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcbiBcdGludCBzaztcbiBcbiBcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5XCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzXCIsIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCAwKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5XCIsIHNrLCAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCAwKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzXCIsIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbiBcdGlmICh0ZXN0X3NldF9rZXkoc2ssIDEwMCwgMjAwKSlcbiBcdFx0dGVzdF9lcnJvcihcImZhaWxlZCB0byBzZXQgY3VycmVudC9ybmV4dCBrZXlzXCIpO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXlcIiwgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgcm5leHQga2V5XCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5XCIsIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleVwiLCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRzayA9IHByZXBhcmVfc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG5AQCAtMjU0LDEwICsyNTksMTIgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKVxuIFx0aWYgKHRlc3RfYWRkX2tleShzaywgXCJHbG9yeSB0byBVa3JhaW5lIVwiLCB0aGlzX2lwX2Rlc3QsXG4gXHRcdFx0IERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpXG4gXHRcdHRlc3RfZXJyb3IoXCJ0ZXN0X2FkZF9rZXkoKVwiKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5ICsgc2V0IGN1cnJlbnQvcm5leHRcIiwgc2ssIDEwMCwgMTAwLCAwLCAxMCwgMTMsIDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcIiwgc2ssIDEwLCAxMSwgMCwgMjAwLCAtMSwgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBybmV4dCBrZXlcIiwgc2ssIDEyLCAxMywgMCwgLTEsIDIwMCwgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50K3JuZXh0IGtleVwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4rXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSArIHNldCBjdXJyZW50L3JuZXh0XCIsIHNrLFxuK1x0XHQgICAgICAgMTAwLCAxMDAsIDAsIDAsIDEwLCAxMywgMCk7XG4rXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBjdXJyZW50IGtleVwiLCBzaywgMTAsIDExLCAwLCAwLCAyMDAsIC0xLCAwKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleVwiLCBzaywgMTIsIDEzLCAwLCAwLCAtMSwgMjAwLCAwKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQrcm5leHQga2V5XCIsIHNrLFxuK1x0XHQgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRzayA9IHByZXBhcmVfc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG5AQCAtMjcyLDYgKzI3OSwxOCBAQCBzdGF0aWMgdm9pZCBjaGVja19jbG9zZWRfc29ja2V0KHZvaWQpXG4gXHRcdFx0XHQgIHRoaXNfaXBfZGVzdCwgREVGQVVMVF9URVNUX1BSRUZJWCxcbiBcdFx0XHRcdCAgZmFsc2UsIHRydWUsIDIwLCAxMCwgMCk7XG4gXHRjbG9zZShzayk7XG4rXG4rXHRpZiAoIXNob3VsZF9za2lwX3Rlc3QoXCJjbG9zZWQgc29ja2V0LCBhZGQgKyBkZWxldGUgVlJGLXNjb3BlZCBrZXlcIixcbitcdFx0XHQgICAgICBLQ09ORklHX05FVF9WUkYpKSB7XG4rXHRcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbitcdFx0aWYgKHRlc3RfYWRkX2tleV92cmYoc2ssIFNFQ09ORF9QQVNTV09SRCwgVENQX0FPX0tFWUZfSUZJTkRFWCxcbitcdFx0XHRcdCAgICAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLFxuK1x0XHRcdFx0ICAgICB0ZXN0X3ZyZl9pZmluZGV4LCAyMDEsIDIwMSkpXG4rXHRcdFx0dGVzdF9lcnJvcihcInRlc3RfYWRkX2tleV92cmYoKVwiKTtcbitcdFx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBhZGQgKyBkZWxldGUgVlJGLXNjb3BlZCBrZXlcIiwgc2ssIDIwMSwgMjAxLFxuK1x0XHRcdCAgICAgICB0ZXN0X3ZyZl9pZmluZGV4LCAwLCAtMSwgLTEsIDApO1xuK1x0XHRjbG9zZShzayk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGFzc2VydF9ub19jdXJyZW50X3JuZXh0KGNvbnN0IGNoYXIgKnRzdF9tc2csIGludCBzaylcbkBAIC0zMjIsOCArMzQxLDggQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKVxuIFx0aW50IHNrLCBlcnI7XG4gXG4gXHRzayA9IHByZXBhcmVfbHNrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgYWxsIGtleXNcIiwgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgYWxsIGtleXNcIiwgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIDApO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX2xzayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0zNDUsOCArMzY0LDEwIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2xpc3Rlbl9zb2NrZXQodm9pZClcbiBcdGlmIChsaXN0ZW4oc2ssIDEwKSlcbiBcdFx0dGVzdF9lcnJvcihcImxpc3RlbigpXCIpO1xuIFx0YXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoXCJsaXN0ZW4oKSBhZnRlciBjdXJyZW50L3JuZXh0IGtleXMgc2V0XCIsIHNrKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXCIsIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XG4tXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcIiwgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcbitcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXCIsIHNrLFxuK1x0XHQgICAgICAgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgcm5leHQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXCIsIHNrLFxuK1x0XHQgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0YXNzZXJ0X25vX3RjcF9yZXBhaXIoKTtcbkBAIC0zNTksMTMgKzM4MCwxMyBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRcdFx0IERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpXG4gXHRcdHRlc3RfZXJyb3IoXCJ0ZXN0X2FkZF9rZXkoKVwiKTtcbiBcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5ICsgc2V0IGN1cnJlbnQvcm5leHRcIiwgc2ssXG4tXHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMTAsIDEzLCBGQVVMVF9DVVJSTkVYVCk7XG4rXHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCBGQVVMVF9DVVJSTkVYVCk7XG4gXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBjdXJyZW50IGtleVwiLCBzayxcbi1cdFx0ICAgICAgIDEwLCAxMSwgMCwgMjAwLCAtMSwgRkFVTFRfQ1VSUk5FWFQpO1xuK1x0XHQgICAgICAgMTAsIDExLCAwLCAwLCAyMDAsIC0xLCBGQVVMVF9DVVJSTkVYVCk7XG4gXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBybmV4dCBrZXlcIiwgc2ssXG4tXHRcdCAgICAgICAxMiwgMTMsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTtcbitcdFx0ICAgICAgIDEyLCAxMywgMCwgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpO1xuIFx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXlcIiwgc2ssXG4tXHRcdCAgICAgICAyMDAsIDIwMCwgMCwgLTEsIC0xLCAwKTtcbitcdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX2xzayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0xMTMxLDcgKzExNTIsNiBAQCBzdGF0aWMgdm9pZCBjaGVja19lc3RhYmxpc2hlZF9zb2NrZXQodm9pZClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgcG9ydCA9IHRlc3Rfc2VydmVyX3BvcnQ7XG4gXG4tXHRzZXR1cF92cmZzKCk7XG4gXHR0cnlfY2xpZW50X3J1bihcImNsaWVudDogQ2hlY2sgY3VycmVudC9ybmV4dCBrZXlzIHVuc2V0IGJlZm9yZSBjb25uZWN0KClcIixcbiBcdFx0ICAgICAgIHBvcnQrKywgMjAsIC0xLCAtMSk7XG4gXHR0cnlfY2xpZW50X3J1bihcImNsaWVudDogQ2hlY2sgY3VycmVudC9ybmV4dCBrZXlzIHNldCBiZWZvcmUgY29ubmVjdCgpXCIsXG5AQCAtMTE1MCw2ICsxMTcwLDcgQEAgc3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpXG4ge1xuIFx0aWYgKGluZXRfcHRvbihURVNUX0ZBTUlMWSwgVEVTVF9XUk9OR19JUCwgXHUwMDI2d3JvbmdfYWRkcikgIT0gMSlcbiBcdFx0dGVzdF9lcnJvcihcIkNhbid0IGNvbnZlcnQgaXAgYWRkcmVzcyAlc1wiLCBURVNUX1dST05HX0lQKTtcbitcdHNldHVwX3ZyZnMoKTtcbiBcdGNoZWNrX2Nsb3NlZF9zb2NrZXQoKTtcbiBcdGNoZWNrX2xpc3Rlbl9zb2NrZXQoKTtcbiBcdGNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCgpO1xuQEAgLTExNTgsNiArMTE3OSw2IEBAIHN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKVxuIFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuLVx0dGVzdF9pbml0KDEyMSwgc2VydmVyX2ZuLCBjbGllbnRfZm4pO1xuK1x0dGVzdF9pbml0KDEyMiwgc2VydmVyX2ZuLCBjbGllbnRfZm4pO1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXG5pbmRleCBlYmIyODk5YzEyZmUwLi41M2JlMTc0NDIzN2VlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaFxuQEAgLTQwNCw3ICs0MDQsOCBAQCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3ByZXBhcmVfZGVmX2tleShzdHJ1Y3QgdGNwX2FvX2FkZCAqYW8sXG4gXG4gZXh0ZXJuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcbiBcdFx0XHQgICB2b2lkICphZGRyLCBzaXplX3QgYWRkcl9zeixcbi1cdFx0XHQgICB1aW50OF90IHByZWZpeCwgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCk7XG4rXHRcdFx0ICAgdWludDhfdCBwcmVmaXgsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsXG4rXHRcdFx0ICAgdWludDhfdCBrZXlmbGFncywgaW50IGlmaW5kZXgpO1xuIGV4dGVybiBpbnQgdGVzdF9nZXRfYW9faW5mbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgKm91dCk7XG4gZXh0ZXJuIGludCB0ZXN0X3NldF9hb19pbmZvKGludCBzaywgc3RydWN0IHRjcF9hb19pbmZvX29wdCAqaW4pO1xuIGV4dGVybiBpbnQgdGVzdF9jbXBfZ2V0c29ja29wdF9zZXRzb2Nrb3B0KGNvbnN0IHN0cnVjdCB0Y3BfYW9fYWRkICphLFxuQEAgLTQxOCw3ICs0MTksOCBAQCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3ZlcmlmeV9zb2NrZXRfa2V5KGludCBzaywgc3RydWN0IHRjcF9hb19hZGQgKmtleSlcbiBcdGludCBlcnI7XG4gXG4gXHRlcnIgPSB0ZXN0X2dldF9vbmVfYW8oc2ssIFx1MDAyNmtleTIsIFx1MDAyNmtleS1cdTAwM2VhZGRyLCBzaXplb2Yoa2V5LVx1MDAzZWFkZHIpLFxuLVx0XHRcdCAgICAgIGtleS1cdTAwM2VwcmVmaXgsIGtleS1cdTAwM2VzbmRpZCwga2V5LVx1MDAzZXJjdmlkKTtcbitcdFx0XHQgICAgICBrZXktXHUwMDNlcHJlZml4LCBrZXktXHUwMDNlc25kaWQsIGtleS1cdTAwM2VyY3ZpZCxcbitcdFx0XHQgICAgICBrZXktXHUwMDNla2V5ZmxhZ3MsIGtleS1cdTAwM2VpZmluZGV4KTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jXG5pbmRleCBlZjhlOTAzMWQ0N2EzLi4yZTdiMDZhMWExNTY3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcbkBAIC0yNTIsNyArMjUyLDcgQEAgc3RhdGljIGludCB0ZXN0X2dldF9hb19rZXlzX25yKGludCBzaylcbiBcbiBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsXG4gXHRcdHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LCB1aW50OF90IHByZWZpeCxcbi1cdFx0dWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZClcbitcdFx0dWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgdWludDhfdCBrZXlmbGFncywgaW50IGlmaW5kZXgpXG4ge1xuIFx0c3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0IHRtcCA9IHt9O1xuIFx0c29ja2xlbl90IHRtcF9zeiA9IHNpemVvZih0bXApO1xuQEAgLTI2Miw2ICsyNjIsOCBAQCBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsXG4gXHR0bXAucHJlZml4ID0gcHJlZml4O1xuIFx0dG1wLnNuZGlkICA9IHNuZGlkO1xuIFx0dG1wLnJjdmlkICA9IHJjdmlkO1xuK1x0dG1wLmtleWZsYWdzID0ga2V5ZmxhZ3M7XG4rXHR0bXAuaWZpbmRleCA9IGlmaW5kZXg7XG4gXHR0bXAubmtleXMgID0gMTtcbiBcbiBcdHJldCA9IGdldHNvY2tvcHQoc2ssIElQUFJPVE9fVENQLCBUQ1BfQU9fR0VUX0tFWVMsIFx1MDAyNnRtcCwgXHUwMDI2dG1wX3N6KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjIzOjM5LjE2NDQzMjcxOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5NjM2NDYzMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQLUFPIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2FyZWZ1bGx5IGV2YWx1YXRlIHRoZSBtb2RpZmljYXRpb25zLCBlc3BlY2lhbGx5IHNpbmNlIGl0IHRvdWNoZXMgYG5ldC9pcHY0L3RjcF9hby5jYCwgd2hpY2ggaXMgYSBjb3JlIGNvbXBvbmVudCBmb3IgVENQIEF1dGhlbnRpY2F0aW9uIE9wdGlvbiwgYW5kIGluY2x1ZGVzIHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9gLlxuXG5Gb2N1c2luZyBvbiB0aGUgYG5ldC9pcHY0L3RjcF9hby5jYCBjaGFuZ2UsIGl0IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbmFsIGZpeCB3aXRoaW4gYHRjcF9hb19kZWxfY21kYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBzbmlwcGV0IHJldmVhbHMgdGhlIGFkZGl0aW9uIG9mIGEgY29uZGl0aW9uYWwgY2hlY2sgYW5kIGFzc2lnbm1lbnQ6ICBgaWYgKGNtZC5rZXlmbGFncyBcdTAwMjYgVENQX0FPX0tFWUZfSUZJTkRFWCkgbDNpbmRleCA9IGNtZC5pZmluZGV4O2AuXG5cbkZyb20gbXkgdW5kZXJzdGFuZGluZyBvZiBUQ1AtQU8sIHRoaXMgaXMgY3J1Y2lhbC4gSXTigJlzIGFsbG93aW5nIHVzIHRvIHByb3Blcmx5IGRlbGV0ZSBWUkYtc2NvcGVkIGtleXMgYnkgY29ycmVjdGx5IG1hdGNoaW5nIHRoZSBpZmluZGV4LiAgVGhlIGluY2x1c2lvbiBvZiBgVENQX0FPX0tFWUZfSUZJTkRFWGAgaW4gYGNtZC5rZXlmbGFnc2AgYWN0cyBhcyBhIGZsYWcuIElmIHRoYXQgZmxhZyBpcyBzZXQsIHRoZSBmdW5jdGlvbiBhc3NpZ25zIHRoZSBwcm92aWRlZCBpbnRlcmZhY2UgaW5kZXggdG8gYGwzaW5kZXhgLiBJdCBzZWVtcyB0aGF0IHdpdGhvdXQgdGhpcyBjaGVjaywgZGVsZXRpbmcgYSBrZXkgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgVlJGIG1heSBiZSBjaGFsbGVuZ2luZywgb3Igd29yc2UsIGluY29ycmVjdC4gIEkgbmVlZCB0byBjb25maXJtIHRoaXMgaXMgaW5kZWVkIHRoZSBpbnRlbnRpb24gYW5kIHRoYXQgaXQgaGFuZGxlcyBhbGwgdGhlIHJlbGV2YW50IGVkZ2UgY2FzZXMuIFRoaXMgbmVlZHMgYSBkZWVwZXIgbG9vayB0byBtYWtlIHN1cmUgaXQgZnVuY3Rpb25zIGFzIGV4cGVjdGVkIGluIGFsbCBzY2VuYXJpb3MuIEkgd2lsbCBjaGVjayB0aGUgYHRjcF9hb19kZWxfY21kYCBmdW5jdGlvbiBpbiB0aGUgc291cmNlIGZpbGUgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQxOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjIzOjU4LjgwMDg5OTgwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTE2NzUyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYW9fZGVsX2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYW8uYz05OTA9dGNwX2luYm91bmRfYW9faGFzaChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU1LVxcdFxcdFxcdGlmIChrZXkpXFxubmV0L2lwdjQvdGNwX2FvLmM6MTA1NjpcXHRcXHRcXHRcXHQvKiBwYWlycyB3aXRoIHRjcF9hb19kZWxfY21kICovXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA1Ny1cXHRcXHRcXHRcXHRXUklURV9PTkNFKGluZm8tXFx1MDAzZWN1cnJlbnRfa2V5LCBrZXkpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA2OC1cXHQgKiAtIHJlcXVlc3Qgc29ja2V0cyB3b3VsZCByYWNlIG9uIHRob3NlIGtleSBwb2ludGVyc1xcbm5ldC9pcHY0L3RjcF9hby5jOjEwNjk6XFx0ICogLSB0Y3BfYW9fZGVsX2NtZCgpIGFsbG93cyBhc3luYyBrZXkgcmVtb3ZhbFxcbm5ldC9pcHY0L3RjcF9hby5jLTEwNzAtXFx0ICovXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0xNzQ2PXN0YXRpYyBpbnQgdGNwX2FvX2RlbGV0ZV9rZXkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvX2luZm8sXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xNzk5LSNkZWZpbmUgVENQX0FPX0RFTF9LRVlGX0FMTCAoVENQX0FPX0tFWUZfSUZJTkRFWClcXG5uZXQvaXB2NC90Y3BfYW8uYzoxODAwOnN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbm5ldC9pcHY0L3RjcF9hby5jLTE4MDEtXFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MjAzOD1pbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTIwNDctXFx0Y2FzZSBUQ1BfQU9fREVMX0tFWTpcXG5uZXQvaXB2NC90Y3BfYW8uYzoyMDQ4OlxcdFxcdHJldHVybiB0Y3BfYW9fZGVsX2NtZChzaywgZmFtaWx5LCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvdGNwX2FvLmMtMjA0OS1cXHRjYXNlIFRDUF9BT19JTkZPOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDoyMzo1OC44NTYwNzQwMjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDAyMzkzODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhhdCBjb2RlIHNuaXBwZXQ6XG5cbioqRGVlcCBEaXZlIGludG8gYHRjcF9hb19kZWxfY21kYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB0Y3BfYW9fZGVsX2NtZGAuIFRoZSBjb21tZW50IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgc3BlY2lmaWNhbGx5IHRyaWdnZXJlZCBieSBgdGNwX3BhcnNlX2FvYCAqd2hlbiogdGhlIGNvbW1hbmQgdmFsdWUsIGBjbWRgLCBpcyBzZXQgdG8gYFRDUF9BT19ERUxfS0VZYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBhIGRlbGV0ZSBvcGVyYXRpb24uIE5vdywgYHRjcF9wYXJzZV9hb2AgaXRzZWxmIGlzIGNhbGxlZCBmcm9tLCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIGBkb190Y3Bfc2V0c29ja29wdGAsIHdoaWNoIGxpdmVzIHNvbWV3aGVyZSBpbiB0aGUgYG5ldC9pcHY0L3RjcC5jYCBmaWxlIOKAkyBvciBhIHNpbWlsYXIgbG9jYXRpb24gZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgdmVyc2lvbi4gU28sIEkgaGF2ZSB0byBmaW5kIHRoZSBjYWxsZXJzIG9mIGB0Y3BfcGFyc2VfYW9gLiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSB0cmFpbCBvZiBob3cgYSBUQ1Agc29ja2V0IG9wdGlvbiBkZWxldGUgZ2V0cyBoYW5kbGVkLiBUaGF0IHNob3VsZCBuYXJyb3cgZG93biBteSBmb2N1cyB0byB3aGVyZSB0aGUgQU8ga2V5IGRlbGV0aW9uIGlzIGluaXRpYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYwNCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjI0OjAyLjg1ODQ3NTEyNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYyMTQ2NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9wYXJzZV9hb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3BfYW8uaD0xOTY9aW50IHRjcF9hb19oYXNoX3NrYih1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwX2FvLmgtMTk5LVxcdFxcdCAgICBjb25zdCB1OCAqdGtleSwgaW50IGhhc2hfb2Zmc2V0LCB1MzIgc25lKTtcXG5pbmNsdWRlL25ldC90Y3BfYW8uaDoyMDA6aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuaW5jbHVkZS9uZXQvdGNwX2FvLmgtMjAxLVxcdFxcdCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTE5NDk9c3RhdGljIGludCB0Y3BfYW9faW5mb19jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMjAzNy1cXG5uZXQvaXB2NC90Y3BfYW8uYzoyMDM4OmludCB0Y3BfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbm5ldC9pcHY0L3RjcF9hby5jLTIwMzktXFx0XFx0IHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0yMDU3PWludCB0Y3BfdjRfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbm5ldC9pcHY0L3RjcF9hby5jLTIwNTgte1xcbm5ldC9pcHY0L3RjcF9hby5jOjIwNTk6XFx0cmV0dXJuIHRjcF9wYXJzZV9hbyhzaywgY21kLCBBRl9JTkVULCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvdGNwX2FvLmMtMjA2MC19XFxuLS1cXG5uZXQvaXB2Ni90Y3BfYW8uYz0xMjc9aW50IHRjcF92Nl9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsXFxuLS1cXG5uZXQvaXB2Ni90Y3BfYW8uYy0xMjkte1xcbm5ldC9pcHY2L3RjcF9hby5jOjEzMDpcXHRyZXR1cm4gdGNwX3BhcnNlX2FvKHNrLCBjbWQsIEFGX0lORVQ2LCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjYvdGNwX2FvLmMtMTMxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6MjQ6MDQuNDIwNjI2NDQyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4Nzc1NDY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipJbnRlcm5hbCBSZXZpZXcgb2YgVENQdjQvdjYgUGFyc2VyIExvZ2ljKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgYHRjcF92NF9wYXJzZV9hb2AgYW5kIGB0Y3BfdjZfcGFyc2VfYW9gLiBUaG9zZSBuYW1lcyBhcmUgcHJldHR5IGNsZWFyIOKAkyB0aGV5J3JlIHRoZSBwYXJzaW5nIGZ1bmN0aW9ucyBmb3IgVENQIG9wdGlvbnMgd2l0aGluIElQdjQgYW5kIElQdjYgdHJhZmZpYywgcmVzcGVjdGl2ZWx5LiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gSSdtIHByb2JhYmx5IHJldmlld2luZyBjb2RlLCBkZWJ1Z2dpbmcsIG9yIHBlcmhhcHMgb3B0aW1pemluZy4gVGhlIHByZXNlbmNlIG9mIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBzaWduYWxzIGEgZm9jdXMgb24gVENQIG9wdGlvbnMsIHdoaWNoIGNhbiBnZXQgY29tcGxpY2F0ZWQgZmFzdC4gSSdtIGxpa2VseSBjb25jZXJuZWQgd2l0aCBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgb3B0aW9uIHR5cGVzLCBsZW5ndGhzLCBhbGlnbm1lbnQsIGFuZCB0aGUgb3ZlcmFsbCB2YWxpZGl0eSBjaGVja3MgdG8gZW5zdXJlIHRoZSBzdGFjayBoYW5kbGVzIGFsbCBwb3NzaWJsZSBjb25maWd1cmF0aW9ucy4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBJUHY0IGFuZCBJUHY2IGltcGxlbWVudGF0aW9ucyBpcyBhIHN1YnRsZSwgYnV0IGltcG9ydGFudCBvbmUsIGFzIGJvdGggcHJvdG9jb2xzIGhhdmUgZGlmZmVyZW50IGxpbWl0YXRpb25zIGFuZCBzcGVjaWFsIHJlcXVpcmVtZW50cyB0aGF0IG11c3QgYmUgaGFuZGxlZC4gSSBhbSBmb2N1c2luZyBvbiB0aGUgcGFyc2UgZnVuY3Rpb25zIHRoZW1zZWx2ZXMsIGluIGlzb2xhdGlvbiB0byBiZXR0ZXIgdW5kZXJzdGFuZCB3aGVyZSB0aGUgaXNzdWVzIG1pZ2h0IGJlLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBzdHVmZiwganVzdCBtYWtpbmcgc3VyZSB0aGUgZnVuZGFtZW50YWxzIGFyZSBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM5NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjI0OjA3LjgwODM4MzA5MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgxODMzMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF92NF9wYXJzZV9hb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3BfYW8uaD0yMzA9aW50IHRjcF9hb19wcmVwYXJlX3Jlc2V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcF9hby5oLTIzNS0vKiBpcHY0IHNwZWNpZmljIGZ1bmN0aW9ucyAqL1xcbmluY2x1ZGUvbmV0L3RjcF9hby5oOjIzNjppbnQgdGNwX3Y0X3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbik7XFxuaW5jbHVkZS9uZXQvdGNwX2FvLmgtMjM3LXN0cnVjdCB0Y3BfYW9fa2V5ICp0Y3BfdjRfYW9fbG9va3VwKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKmFkZHJfc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0yMDM4PWludCB0Y3BfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMjA1Ni1cXG5uZXQvaXB2NC90Y3BfYW8uYzoyMDU3OmludCB0Y3BfdjRfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbm5ldC9pcHY0L3RjcF9hby5jLTIwNTgte1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0yMzcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGNwX3NvY2tfYWZfb3BzIHRjcF9zb2NrX2lwdjRfc3BlY2lmaWMgPSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzNzktXFx0LmNhbGNfYW9faGFzaFxcdFxcdD0gdGNwX3Y0X2FvX2hhc2hfc2tiLFxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MjM4MDpcXHQuYW9fcGFyc2VcXHRcXHQ9IHRjcF92NF9wYXJzZV9hbyxcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzODEtXFx0LmFvX2NhbGNfa2V5X3NrXFx0XFx0PSB0Y3BfdjRfYW9fY2FsY19rZXlfc2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjI0OjA5LjM5MDIyMjc5MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyOTg4NzI5OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIENvcmU6IEEgRnV6emluZyBPcHBvcnR1bml0eSoqXG5cbk9rYXksIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBJIHNlZSB0aGlzIHBhdGNoIHRhcmdldHMgYSBwYXJ0IG9mIHRoZSBrZXJuZWwgbG9naWMgdGhhdCdzIHRydWx5IHJlYWNoYWJsZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgVENQIGBzZXRzb2Nrb3B0YCBwYXRoLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmaW5kaW5nIHNvbWV0aGluZyBleHBsb2l0YWJsZS4gVGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBjaGFuZ2UgYXBwZWFycyBzb3VuZCwgc28gdGhlIHBvdGVudGlhbCByZXdhcmQgZnJvbSBmdXp6aW5nIGlzIGRlZmluaXRlbHkgdGhlcmUuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyBzaGlmdHMgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50cmljYWNpZXMgb2YgYHRjcF9hb19kZWxfY21kYCwgYW5kIHRoZW4gYWxzbyB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgYHRjcF9wYXJzZV9hb2AgYW5kIGB0Y3BfdjRfcGFyc2VfYW9gLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGtleSBhcmVhcyB0aGF0IG5lZWQgdGhlIGNsb3Nlc3QgZXhhbWluYXRpb24uIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYENPTkZJR2Agb3B0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvIGVuYWJsZSBUQ1AtQU8gaW4gdGhlIGZpcnN0IHBsYWNlLCBvciBpZiB0aGV5J3JlIGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gSSBjYW4gZW5zdXJlIEknbSB0ZXN0aW5nIHRoZSByaWdodCBidWlsZHMuIFRoYXQncyBteSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDoyNDoxNy42ODkwOTg1MjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDY0NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRDUF9BT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NzI5PWNvbmZpZyBERUZBVUxUX1RDUF9DT05HXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTc0My1cXG5uZXQvaXB2NC9LY29uZmlnOjc0NDpjb25maWcgVENQX0FPXFxubmV0L2lwdjQvS2NvbmZpZy03NDUtXFx0Ym9vbCBcXFwiVENQOiBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFJGQzU5MjUpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDoyNDoxNy43MzMxNjU5NDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4NDEzMTE4MjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbmZpZ3VyYXRpb24gRXhwbG9yYXRpb246IFRDUF9BTyBhbmQgQmV5b25kKipcblxuQWxyaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIGBUQ1BfQU9gIGFzIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIGdvdCBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gaW1tZWRpYXRlbHkgYXNzZXNzIHRoZSBicm9hZGVyIGxhbmRzY2FwZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBUQ1BfQU9gIGlzICp0aGUqIGNvbmZpZ3VyYXRpb24gd2UncmUgY29uY2VybmVkIHdpdGgsIG9yIGlmIGl0J3MgcGFydCBvZiBhIGxhcmdlciBzZXQgb2YgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoaXMgc3lzdGVtLiBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHR5cGljYWwgcGxhY2VzIEknZCBleHBlY3QgdG8gZmluZCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcy4gRXNzZW50aWFsbHksIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gcGVyZm9ybSBhIHJhcGlkIHNhbml0eSBjaGVjayB0byBydWxlIG91dCBvdGhlciByZWxldmFudCBzZXR0aW5ncywgcmVsYXRlZCBjb25maWdzLCBvciBhbnkgdXBzdHJlYW0gb3IgZG93bnN0cmVhbSBkZXBlbmRlbmNpZXMuIEknbSB0aGlua2luZywgXCJJcyB0aGlzIGEgc2luZ2xlLXBvaW50IGNvbmZpZ3VyYXRpb24gb3IgaXMgaXQgbmVzdGVkIHdpdGhpbiBhIGJyb2FkZXIgY29uZmlndXJhdGlvbiBzY2hlbWU/IElzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCB3b3VsZCBiZSBvZiBpbnRlcmVzdCBpbiB0aGlzIGNhc2U/XCJcblxuXG4iLCJJbnB1dFRva2VucyI6OTUwNywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMxOjE2LjE0NjI4ODU2MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MDE4NDAyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVENQX0FPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz03Mjk9Y29uZmlnIERFRkFVTFRfVENQX0NPTkdcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNzQzLVxcbm5ldC9pcHY0L0tjb25maWc6NzQ0OmNvbmZpZyBUQ1BfQU9cXG5uZXQvaXB2NC9LY29uZmlnLTc0NS1cXHRib29sIFxcXCJUQ1A6IEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoUkZDNTkyNSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMxOjE3LjY5NjQ3ODcyOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTAxOTE1Njg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFRDUF9BTyBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUgZm9yIFRDUF9BTy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCBzcGVjaWZpY2FsbHkgYXJlIHdlIGFpbWluZyB0byB1bmRlcnN0YW5kIGhlcmU/XCIgQXJlIHdlIGxvb2tpbmcgYXQgdGhlIGNvcmUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCBvciBwb3RlbnRpYWwgYnVpbGQtdGltZSBpbXBsaWNhdGlvbnM/IElzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUsIG9yIGEgZ2VuZXJhbCBwbGF0Zm9ybSBjb25jZXJuP1xuXG5GaXJzdCwgSSdsbCBzY2FuIGZvciB0aGUgbWFpbiBzeW1ib2wgZGVmaW5pdGlvbiBvZiBgVENQX0FPYCBpdHNlbGYuIFRoZW4sIEknbGwgcGF5IGF0dGVudGlvbiB0byBhbnkgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMuIFRoZXNlIGNvbmRpdGlvbnMgYXJlIGtleTsgdGhleSdsbCBxdWlja2x5IGhpZ2hsaWdodCB0aGUgZnVuZGFtZW50YWwgcHJlLXJlcXVpc2l0ZXMgb3Igb3RoZXIgZmVhdHVyZXMgdGhpcyBvcHRpb24gcmVsaWVzIG9uLiBJIGV4cGVjdCB0byBzZWUgZGVwZW5kZW5jaWVzIG9uIHRoZSBUQ1Agc3RhY2ssIG9mIGNvdXJzZSwgYW5kIHBlcmhhcHMgcmVsYXRlZCBzZWN1cml0eSBvciBjcnlwdG9ncmFwaGljIG1vZHVsZXMgaWYgQU8gaXMgdXNpbmcgYW55LlxuXG5OZXh0LCBJJ2xsIGNoZWNrIGZvciBgZGVmYXVsdGAgdmFsdWVzLiBJcyBpdCBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQ/IEEgZGVmYXVsdC1lbmFibGVkIG9wdGlvbiBtaWdodCBpbmRpY2F0ZSB0aGF0IGl0IGlzIGEgY29tbW9uIG9yIHJlY29tbWVuZGVkIGNvbmZpZ3VyYXRpb24sIHdoaWxlIGEgZGVmYXVsdC1kaXNhYmxlZCBvbmUgcHJvYmFibHkgaW1wbGllcyB0aGF0IGl0IGlzIGZvciBzcGVjaWFsaXplZCBkZXBsb3ltZW50cyBvciBleHBlcmltZW50YWwgc2V0dGluZ3MuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBgZGVmYXVsdGAgc3RhdGVtZW50cywgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lIGlzIHNlbGVjdGVkIGJ5IHRoZSB0YXJnZXQgZW52aXJvbm1lbnQuXG5cbkknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgYGhlbHBgIHRleHQuIEdvb2QgZG9jdW1lbnRhdGlvbiwgZXZlbiBpZiBicmllZiwgY2FuIHJldmVhbCB0aGUgaW50ZW5kZWQgdXNlIGNhc2UsIHRoZSBiZW5lZml0cywgYW5kIHRoZSBwb3RlbnRpYWwgZHJhd2JhY2tzIG9mIGVuYWJsaW5nIGBUQ1BfQU9gLiBXaGF0IHByb2JsZW0gaXMgaXQgZGVzaWduZWQgdG8gc29sdmU/IElzIHRoZXJlIGFueSB3YXJuaW5nIGFib3V0IHRoZSBwZXJmb3JtYW5jZSBvdmVyaGVhZD9cblxuRmluYWxseSwgSSdsbCBub3RlIGFueSBtZW51IHN0cnVjdHVyZSBvciBzdWItb3B0aW9ucy4gQXJlIHRoZXJlIGZ1cnRoZXIgY29uZmlndXJhdGlvbiBmbGFncyB3aXRoaW4gYFRDUF9BT2AsIHN1Y2ggYXMgc2VjdXJpdHkga2V5IHNpemUsIGNpcGhlciBzdWl0ZXMsIG9yIHNwZWNpZmljIHByb3RvY29sIHZlcnNpb25zPyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbGV2ZWwgb2YgY29uZmlndXJhYmlsaXR5IHRoZSBkZXZlbG9wZXIgcHJvdmlkZWQuIEFsc28sIEknbGwgbG9vayBmb3IgYW55IGBzZWxlY3RgIHN0YXRlbWVudHMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggc3ltYm9scyB0aGV5IHB1bGwgaW4uIFVsdGltYXRlbHksIHRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGhvdyBUQ1BfQU8gaW50ZWdyYXRlcyBpbnRvIHRoZSBsYXJnZXIga2VybmVsIFRDUCBpbmZyYXN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgzOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMyOjQ4LjcxNTYzOTY4NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NDA6XFx0XFx0ZGVmYXVsdCBcXFwiY2RnXFxcIiBpZiBERUZBVUxUX0NER1xcbiA3NDE6XFx0XFx0ZGVmYXVsdCBcXFwiYmJyXFxcIiBpZiBERUZBVUxUX0JCUlxcbiA3NDI6XFx0XFx0ZGVmYXVsdCBcXFwiY3ViaWNcXFwiXFxuIDc0MzpcXHRcXG4gNzQ0OlxcdGNvbmZpZyBUQ1BfQU9cXG4gNzQ1OlxcdFxcdGJvb2wgXFxcIlRDUDogQXV0aGVudGljYXRpb24gT3B0aW9uIChSRkM1OTI1KVxcXCJcXG4gNzQ2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xcbiA3NDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbiA3NDg6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuIDc0OTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiA3NTA6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVCAjIHNlcS1udW1iZXIgZXh0ZW5zaW9uIG5lZWRzIFdSSVRFX09OQ0UodTY0KVxcbiA3NTE6XFx0XFx0aGVscFxcbiA3NTI6XFx0XFx0ICBUQ1AtQU8gc3BlY2lmaWVzIHRoZSB1c2Ugb2Ygc3Ryb25nZXIgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlcyAoTUFDcyksXFxuIDc1MzpcXHRcXHQgIHByb3RlY3RzIGFnYWluc3QgcmVwbGF5cyBmb3IgbG9uZy1saXZlZCBUQ1AgY29ubmVjdGlvbnMsIGFuZFxcbiA3NTQ6XFx0XFx0ICBwcm92aWRlcyBtb3JlIGRldGFpbHMgb24gdGhlIGFzc29jaWF0aW9uIG9mIHNlY3VyaXR5IHdpdGggVENQXFxuIDc1NTpcXHRcXHQgIGNvbm5lY3Rpb25zIHRoYW4gVENQIE1ENSAoU2VlIFJGQzU5MjUpXFxuIDc1NjpcXHRcXG4gNzU3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gNzU4OlxcdFxcbiA3NTk6XFx0Y29uZmlnIFRDUF9NRDVTSUdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6MzI6NDguNzE1NzgzMDU1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NDQ1NDk3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1BfQU8gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGluIHBsYXkgaGVyZSBpcyBkZWZpbml0ZWx5IGBUQ1BfQU9gLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGludGVyYWN0aW5nIHdpdGggdGhpcy4gSSd2ZSBnb3QgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb246IGB0Y3BfYW9fZGVsX2NtZGAsIGB0Y3BfcGFyc2VfYW9gLCBgdGNwX3Y0X3BhcnNlX2FvYCwgYW5kIGB0Y3BfdjZfcGFyc2VfYW9gLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIG9yIGF0IGxlYXN0IHRoZSBvbmVzIEknbSBpbml0aWFsbHkgaW50ZXJlc3RlZCBpbi4gV2FpdCBhIG1pbnV0ZS4uLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgYHRjcF9hb19kZWxfY21kYCBpcyBhY3R1YWxseSBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgaGFzIGltcG9ydGFudCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCdzIHRoZSBjYXNlLiBJdCBhZmZlY3RzIHRoZSBsaW5rYWdlIGFuZCBzY29wZSwgd2hpY2ggaW4gdHVybiBpbXBhY3RzIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBhbmQgdGhhdCBpcyBpbXBvcnRhbnQgdG8gaG93IHRvIGJlc3QgaW50ZXJwcmV0IHRoZSBpbXBsZW1lbnRhdGlvbi4gVGltZSB0byBjaGVjayB0aGF0IHNwZWNpZmljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMyOjU0LjE2MDMzNTUzOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNzI0NDg5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYW9fZGVsX2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYW8uYz05OTA9dGNwX2luYm91bmRfYW9faGFzaChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU1LVxcdFxcdFxcdGlmIChrZXkpXFxubmV0L2lwdjQvdGNwX2FvLmM6MTA1NjpcXHRcXHRcXHRcXHQvKiBwYWlycyB3aXRoIHRjcF9hb19kZWxfY21kICovXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA1Ny1cXHRcXHRcXHRcXHRXUklURV9PTkNFKGluZm8tXFx1MDAzZWN1cnJlbnRfa2V5LCBrZXkpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA2OC1cXHQgKiAtIHJlcXVlc3Qgc29ja2V0cyB3b3VsZCByYWNlIG9uIHRob3NlIGtleSBwb2ludGVyc1xcbm5ldC9pcHY0L3RjcF9hby5jOjEwNjk6XFx0ICogLSB0Y3BfYW9fZGVsX2NtZCgpIGFsbG93cyBhc3luYyBrZXkgcmVtb3ZhbFxcbm5ldC9pcHY0L3RjcF9hby5jLTEwNzAtXFx0ICovXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0xNzQ2PXN0YXRpYyBpbnQgdGNwX2FvX2RlbGV0ZV9rZXkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvX2luZm8sXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xNzk5LSNkZWZpbmUgVENQX0FPX0RFTF9LRVlGX0FMTCAoVENQX0FPX0tFWUZfSUZJTkRFWClcXG5uZXQvaXB2NC90Y3BfYW8uYzoxODAwOnN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbm5ldC9pcHY0L3RjcF9hby5jLTE4MDEtXFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MjAzOD1pbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTIwNDctXFx0Y2FzZSBUQ1BfQU9fREVMX0tFWTpcXG5uZXQvaXB2NC90Y3BfYW8uYzoyMDQ4OlxcdFxcdHJldHVybiB0Y3BfYW9fZGVsX2NtZChzaywgZmFtaWx5LCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvdGNwX2FvLmMtMjA0OS1cXHRjYXNlIFRDUF9BT19JTkZPOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDozMjo1NS42ODc1ODQ0MjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxMzQ4MzczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUCBBTyBQYXJzaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggdGhlIFRDUCBBdXRoZW50aWNhdGlvbiBPcHRpb24gKEFPKSBwYXJzaW5nIGxvZ2ljLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgY29uZmlybWVkOiBgdGNwX2FvX2RlbF9jbWRgIGlzIGluZGVlZCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgYmVjYXVzZSBpdCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGlzIG1vZHVsZS4gTm93LCBnaXZlbiB0aGF0IGNvbmZpcm1hdGlvbiwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHBhcnNpbmcgdGhlIEFPIGRhdGEgaXRzZWxmLiBUaGUgb2J2aW91cyBjYW5kaWRhdGVzIGFyZSBgdGNwX3BhcnNlX2FvYCwgYHRjcF92NF9wYXJzZV9hb2AsIGFuZCBgdGNwX3Y2X3BhcnNlX2FvYC4gVGhleSBoYW5kbGUgdGhlIGdlbmVyaWMgYW5kIElQdjQvSVB2NiBzcGVjaWZpYyBwYXJzaW5nLCByZXNwZWN0aXZlbHkuIE15IG5leHQgc3RlcCwgYW5kIGl0J3MgYSBjcml0aWNhbCBvbmUsIGlzIHRvIGRldGVybWluZSBpZiBgdGNwX3BhcnNlX2FvYCBpcyBhbHNvIHN0YXRpYywgb3IgaWYgaXQgbWlnaHQgYmUgZXhwb3NlZCBlbHNld2hlcmUgaW4gdGhlIGNvZGViYXNlLiBVbmRlcnN0YW5kaW5nIGl0cyBzY29wZSB3aWxsIHJlYWxseSBoZWxwIHdpdGggdGhlIG9uZ29pbmcgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDMyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6MzI6NTkuNDAxMDcxNDc0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzU4MzI5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfcGFyc2VfYW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2FvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2FvLmM9MTk0OT1zdGF0aWMgaW50IHRjcF9hb19pbmZvX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDM3LVxcbm5ldC9pcHY0L3RjcF9hby5jOjIwMzg6aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxubmV0L2lwdjQvdGNwX2FvLmMtMjAzOS1cXHRcXHQgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTIwNTc9aW50IHRjcF92NF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxubmV0L2lwdjQvdGNwX2FvLmMtMjA1OC17XFxubmV0L2lwdjQvdGNwX2FvLmM6MjA1OTpcXHRyZXR1cm4gdGNwX3BhcnNlX2FvKHNrLCBjbWQsIEFGX0lORVQsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDYwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6MzI6NTkuNDk0NjYwNDM3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNjM5MDIwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBUQ1AtQU8gS2V5IERlbGV0aW9uIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJ1ZyB3aXRoaW4gdGhlIFRDUC1BTyBrZXkgZGVsZXRpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHdoZW4gdXNpbmcgYHNldHNvY2tvcHRgIHdpdGggYFRDUF9BT19ERUxfS0VZYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIGZ1bmN0aW9uIGB0Y3BfcGFyc2VfYW9gIGlzbid0IHN0YXRpYywgYWxsb3dpbmcgZm9yIHZhcmlhdGlvbnMgbGlrZSBgdGNwX3Y0X3BhcnNlX2FvYCBhbmQgYHRjcF92Nl9wYXJzZV9hb2AsIHdoaWNoIGlzIGdvb2QgZm9yIGhhbmRsaW5nIGRpZmZlcmVudCBhZGRyZXNzIGZhbWlsaWVzLlxuXG5UaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZy4gQmFzaWNhbGx5LCB0aGUgYGwzaW5kZXhgIGZpZWxkLCBjcml0aWNhbCBmb3IgaWRlbnRpZnlpbmcgdGhlIGNvcnJlY3QgaW50ZXJmYWNlIChhbmQgVlJGIGluIG15IHdvcmxkKSwgd2Fzbid0IGJlaW5nIGNvcnJlY3RseSBwb3B1bGF0ZWQgZnJvbSB0aGUgdXNlcidzIGlucHV0IChgY21kLmlmaW5kZXhgKSBkdXJpbmcga2V5IGRlbGV0aW9uLiBUaGlzIG1lYW5zIHRoZSBzeXN0ZW0gbWlnaHQgYmUgZGVsZXRpbmcgdGhlICp3cm9uZyoga2V5LCBhIGNyaXRpY2FsIGZsYXcuXG5cblRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCByZXF1aXJpbmcgdGhvcm91Z2ggZnV6emluZyB0byBlbnN1cmUgaXQncyByb2J1c3QuIFRoZSBmb2N1cyBoZXJlIGlzIG9uIGB0Y3BfcGFyc2VfYW9gLCBgdGNwX3Y0X3BhcnNlX2FvYCwgYW5kIGB0Y3BfdjZfcGFyc2VfYW9gLCB0aGUgZnVuY3Rpb25zIGludm9sdmVkIGluIHBhcnNpbmcgdGhpcyBUQ1AtQU8gY29uZmlndXJhdGlvbiBkYXRhLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgZXZlcnl0aGluZy4gU2luY2UgSSBhbSBjb25jZXJuZWQgYWJvdXQgVlJGcywgSSBzaG91bGQgY2hlY2sgd2hldGhlciBgVENQX0FPYCBkZXBlbmRzIG9uIGBORVRfVlJGYC4gV2hpbGUgaXQgZG9lc24ndCAqZGlyZWN0bHkqIGRlcGVuZCBvbiBpdCwgYW5kIHRoZSB0ZXN0cyByZWZlcmVuY2UgYEtDT05GSUdfTkVUX1ZSRmAsIHRoaXMgcGF0Y2ggaXMgZGlyZWN0bHkgbWFuaXB1bGF0aW5nIGBsM2luZGV4YCwgd2hpY2ggaXMgdXNlZCBmb3IgVlJGcy4gSXQncyBiZXN0IHRvIGJlIHNhZmUsIHNvIEknbGwgaW5jbHVkZSBgTkVUX1ZSRmAgYXMgd2VsbCB0byBtYWtlIHN1cmUgSSBjYXB0dXJlIHRoZSBjb21wbGV0ZSBjb250ZXh0LiBUaGlzIGxldmVsIG9mIGRpbGlnZW5jZSBwcmV2ZW50cyByZWdyZXNzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NjUsIk91dHB1dFRva2VucyI6MTM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMzOjA2LjU1ODU2NTU1NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTQ5OTk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0FPXCIsXG4gICAgXCJORVRfVlJGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3BhcnNlX2FvXCIsXG4gICAgXCJ0Y3BfdjRfcGFyc2VfYW9cIixcbiAgICBcInRjcF92Nl9wYXJzZV9hb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIFRDUC1BTyBrZXkgZGVsZXRpb24gd2hlcmUgdGhlIGludGVyZmFjZSBpbmRleCAoVlJGKSB3YXMgbm90IHByb3Blcmx5IGV4dHJhY3RlZCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIGNvbW1hbmQgd2hlbiB0aGUgVENQX0FPX0tFWUZfSUZJTkRFWCBmbGFnIHdhcyBzZXQuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgVENQIHNldHNvY2tvcHQgbG9naWMgZm9yIFRDUF9BT19ERUxfS0VZLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRDUF9BT1wiLFxuICAgIFwiTkVUX1ZSRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9wYXJzZV9hb1wiLFxuICAgIFwidGNwX3Y0X3BhcnNlX2FvXCIsXG4gICAgXCJ0Y3BfdjZfcGFyc2VfYW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBUQ1AtQU8ga2V5IGRlbGV0aW9uIHdoZXJlIHRoZSBpbnRlcmZhY2UgaW5kZXggKFZSRikgd2FzIG5vdCBwcm9wZXJseSBleHRyYWN0ZWQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBjb21tYW5kIHdoZW4gdGhlIFRDUF9BT19LRVlGX0lGSU5ERVggZmxhZyB3YXMgc2V0LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIFRDUCBzZXRzb2Nrb3B0IGxvZ2ljIGZvciBUQ1BfQU9fREVMX0tFWS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6MzM6MDYuNjkwMDcxNTEzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTcyNDEwOTU3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMzOjA2LjY5MDUwMTY4M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyOTcyMzY3NDUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyBpbiBgdGNwX2FvX2RlbF9jbWRgIHdoZXJlIHRoZSBgaWZpbmRleGAgZmllbGQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBgdGNwX2FvX2RlbGAgc3RydWN0dXJlIHdhcyBpZ25vcmVkIHdoZW4gZGVsZXRpbmcgYSBUQ1AtQU8ga2V5LiBUaGUgYGNtZGAgc3RydWN0dXJlIGlzIHNhZmVseSBwb3B1bGF0ZWQgZnJvbSB1c2VyIHNwYWNlIHVzaW5nIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHIoKWAsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkIChlaXRoZXIgYnkgY29weWluZyBmcm9tIHVzZXIgc3BhY2Ugb3IgemVyby1wYWRkaW5nKS4gVGhlIHBhdGNoIHNpbXBseSByZWFkcyB0aGUgaW5pdGlhbGl6ZWQgYGNtZC5pZmluZGV4YCBmaWVsZCBhbmQgYXNzaWducyBpdCB0byBgbDNpbmRleGAgaWYgdGhlIGBUQ1BfQU9fS0VZRl9JRklOREVYYCBmbGFnIGlzIHNldC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjMDJjYmFmOTViMTY0YjZjOWVhMmFiODEwNTMwN2UyOTg1YWNkMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAyMDoyMzozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9hby5jIGIvbmV0L2lwdjQvdGNwX2FvLmNcbmluZGV4IDUwOTQyNjc0NDdhZWUuLjI2ODY0NjIxZTZkZWYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYW8uY1xuKysrIGIvbmV0L2lwdjQvdGNwX2FvLmNcbkBAIC0xODM0LDYgKzE4MzQsOSBAQCBzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbiBcdGlmIChjbWQuaWZpbmRleCBcdTAwMjZcdTAwMjYgIShjbWQua2V5ZmxhZ3MgXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdGlmIChjbWQua2V5ZmxhZ3MgXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpXG4rXHRcdGwzaW5kZXggPSBjbWQuaWZpbmRleDtcbitcbiBcdGFvX2luZm8gPSBzZXRzb2Nrb3B0X2FvX2luZm8oc2spO1xuIFx0aWYgKElTX0VSUihhb19pbmZvKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoYW9faW5mbyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jXG5pbmRleCBkODZiYjM4MGI3OWY3Li4wNDUxZjkyZjQ2NDVkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmNcbkBAIC02Myw4ICs2Myw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9sc2sodW5pb24gdGNwX2FkZHIgKmFkZHIsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpXG4gXHRyZXR1cm4gc2s7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbi1cdFx0XHRpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXkpXG4rc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBpbnQgaWZpbmRleCxcbitcdFx0XHRib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXkpXG4ge1xuIFx0c3RydWN0IHRjcF9hb19pbmZvX29wdCBhb19pbmZvID0ge307XG4gXHRzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQga2V5ID0ge307XG5AQCAtNzYsNiArNzYsMTAgQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxuIFx0ZGVsLnByZWZpeCA9IERFRkFVTFRfVEVTVF9QUkVGSVg7XG4gXHRkZWwuc25kaWQgPSBzbmRpZDtcbiBcdGRlbC5yY3ZpZCA9IHJjdmlkO1xuK1x0aWYgKGlmaW5kZXgpIHtcbitcdFx0ZGVsLmtleWZsYWdzID0gVENQX0FPX0tFWUZfSUZJTkRFWDtcbitcdFx0ZGVsLmlmaW5kZXggPSBpZmluZGV4O1xuK1x0fVxuIFxuIFx0aWYgKGN1cnJlbnRfa2V5IFx1MDAzZT0gMCkge1xuIFx0XHRkZWwuc2V0X2N1cnJlbnQgPSAxO1xuQEAgLTk1LDcgKzk5LDggQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxuIFxuIFx0dGNwX2FkZHJfdG9fc29ja2FkZHJfaW4oXHUwMDI2c29ja2FkZHIsIFx1MDAyNnRoaXNfaXBfZGVzdCwgMCk7XG4gXHRlcnIgPSB0ZXN0X2dldF9vbmVfYW8oc2ssIFx1MDAyNmtleSwgXHUwMDI2c29ja2FkZHIsIHNpemVvZihzb2NrYWRkciksXG4tXHRcdFx0ICAgICAgREVGQVVMVF9URVNUX1BSRUZJWCwgc25kaWQsIHJjdmlkKTtcbitcdFx0XHQgICAgICBERUZBVUxUX1RFU1RfUFJFRklYLCBzbmRpZCwgcmN2aWQsXG4rXHRcdFx0ICAgICAgZGVsLmtleWZsYWdzLCBkZWwuaWZpbmRleCk7XG4gXHRpZiAoIWVycilcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRpZiAoZXJyICE9IC1FMkJJRylcbkBAIC0xMTIsMTIgKzExNywxMiBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHRyeV9kZWxldGVfa2V5KGNoYXIgKnRzdF9uYW1lLCBpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsXG4tXHRcdFx0ICAgYm9vbCBhc3luYywgaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5LFxuK1x0XHRcdCAgIGludCBpZmluZGV4LCBib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXksXG4gXHRcdFx0ICAgZmF1bHRfdCBpbmopXG4ge1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IHRlc3RfZGVsX2tleShzaywgc25kaWQsIHJjdmlkLCBhc3luYywgY3VycmVudF9rZXksIHJuZXh0X2tleSk7XG4rXHRlcnIgPSB0ZXN0X2RlbF9rZXkoc2ssIHNuZGlkLCByY3ZpZCwgaWZpbmRleCwgYXN5bmMsIGN1cnJlbnRfa2V5LCBybmV4dF9rZXkpO1xuIFx0aWYgKChlcnIgPT0gLUVCVVNZIFx1MDAyNlx1MDAyNiBmYXVsdChCVVNZKSkgfHwgKGVyciA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBmYXVsdChDVVJSTkVYVCkpKSB7XG4gXHRcdHRlc3Rfb2soXCIlczoga2V5IGRlbGV0aW9uIHdhcyBwcmV2ZW50ZWRcIiwgdHN0X25hbWUpO1xuIFx0XHRyZXR1cm47XG5AQCAtMjM2LDE1ICsyNDEsMTUgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKVxuIFx0aW50IHNrO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcIiwgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcIiwgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIDApO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuIFx0aWYgKHRlc3Rfc2V0X2tleShzaywgMTAwLCAyMDApKVxuIFx0XHR0ZXN0X2Vycm9yKFwiZmFpbGVkIHRvIHNldCBjdXJyZW50L3JuZXh0IGtleXNcIik7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleVwiLCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXlcIiwgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgcm5leHQga2V5XCIsIHNrLCAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0yNTQsMTAgKzI1OSwxMiBAQCBzdGF0aWMgdm9pZCBjaGVja19jbG9zZWRfc29ja2V0KHZvaWQpXG4gXHRpZiAodGVzdF9hZGRfa2V5KHNrLCBcIkdsb3J5IHRvIFVrcmFpbmUhXCIsIHRoaXNfaXBfZGVzdCxcbiBcdFx0XHQgREVGQVVMVF9URVNUX1BSRUZJWCwgMTIsIDEzKSlcbiBcdFx0dGVzdF9lcnJvcihcInRlc3RfYWRkX2tleSgpXCIpO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXkgKyBzZXQgY3VycmVudC9ybmV4dFwiLCBzaywgMTAwLCAxMDAsIDAsIDEwLCAxMywgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBjdXJyZW50IGtleVwiLCBzaywgMTAsIDExLCAwLCAyMDAsIC0xLCAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleVwiLCBzaywgMTIsIDEzLCAwLCAtMSwgMjAwLCAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQrcm5leHQga2V5XCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5ICsgc2V0IGN1cnJlbnQvcm5leHRcIiwgc2ssXG4rXHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCAwKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5XCIsIHNrLCAxMCwgMTEsIDAsIDAsIDIwMCwgLTEsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5XCIsIHNrLCAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCtybmV4dCBrZXlcIiwgc2ssXG4rXHRcdCAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0yNzIsNiArMjc5LDE4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcbiBcdFx0XHRcdCAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLFxuIFx0XHRcdFx0ICBmYWxzZSwgdHJ1ZSwgMjAsIDEwLCAwKTtcbiBcdGNsb3NlKHNrKTtcbitcbitcdGlmICghc2hvdWxkX3NraXBfdGVzdChcImNsb3NlZCBzb2NrZXQsIGFkZCArIGRlbGV0ZSBWUkYtc2NvcGVkIGtleVwiLFxuK1x0XHRcdCAgICAgIEtDT05GSUdfTkVUX1ZSRikpIHtcbitcdFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuK1x0XHRpZiAodGVzdF9hZGRfa2V5X3ZyZihzaywgU0VDT05EX1BBU1NXT1JELCBUQ1BfQU9fS0VZRl9JRklOREVYLFxuK1x0XHRcdFx0ICAgICB0aGlzX2lwX2Rlc3QsIERFRkFVTFRfVEVTVF9QUkVGSVgsXG4rXHRcdFx0XHQgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDIwMSwgMjAxKSlcbitcdFx0XHR0ZXN0X2Vycm9yKFwidGVzdF9hZGRfa2V5X3ZyZigpXCIpO1xuK1x0XHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGFkZCArIGRlbGV0ZSBWUkYtc2NvcGVkIGtleVwiLCBzaywgMjAxLCAyMDEsXG4rXHRcdFx0ICAgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDAsIC0xLCAtMSwgMCk7XG4rXHRcdGNsb3NlKHNrKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgYXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoY29uc3QgY2hhciAqdHN0X21zZywgaW50IHNrKVxuQEAgLTMyMiw4ICszNDEsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRpbnQgc2ssIGVycjtcbiBcbiBcdHNrID0gcHJlcGFyZV9sc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wiLCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgMCk7XG4rXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVwiLCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7XG4rXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wiLCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgMCk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRzayA9IHByZXBhcmVfbHNrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuQEAgLTM0NSw4ICszNjQsMTAgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKVxuIFx0aWYgKGxpc3RlbihzaywgMTApKVxuIFx0XHR0ZXN0X2Vycm9yKFwibGlzdGVuKClcIik7XG4gXHRhc3NlcnRfbm9fY3VycmVudF9ybmV4dChcImxpc3RlbigpIGFmdGVyIGN1cnJlbnQvcm5leHQga2V5cyBzZXRcIiwgc2spO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcIiwgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKVwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcIiwgc2ssXG4rXHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XG4rXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcIiwgc2ssXG4rXHRcdCAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRhc3NlcnRfbm9fdGNwX3JlcGFpcigpO1xuQEAgLTM1OSwxMyArMzgwLDEzIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2xpc3Rlbl9zb2NrZXQodm9pZClcbiBcdFx0XHQgREVGQVVMVF9URVNUX1BSRUZJWCwgMTIsIDEzKSlcbiBcdFx0dGVzdF9lcnJvcihcInRlc3RfYWRkX2tleSgpXCIpO1xuIFx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXkgKyBzZXQgY3VycmVudC9ybmV4dFwiLCBzayxcbi1cdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTtcbitcdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTtcbiBcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5XCIsIHNrLFxuLVx0XHQgICAgICAgMTAsIDExLCAwLCAyMDAsIC0xLCBGQVVMVF9DVVJSTkVYVCk7XG4rXHRcdCAgICAgICAxMCwgMTEsIDAsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTtcbiBcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleVwiLCBzayxcbi1cdFx0ICAgICAgIDEyLCAxMywgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpO1xuK1x0XHQgICAgICAgMTIsIDEzLCAwLCAwLCAtMSwgMjAwLCBGQVVMVF9DVVJSTkVYVCk7XG4gXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVwiLCBzayxcbi1cdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApO1xuK1x0XHQgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRzayA9IHByZXBhcmVfbHNrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuQEAgLTExMzEsNyArMTE1Miw2IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGludCBwb3J0ID0gdGVzdF9zZXJ2ZXJfcG9ydDtcbiBcbi1cdHNldHVwX3ZyZnMoKTtcbiBcdHRyeV9jbGllbnRfcnVuKFwiY2xpZW50OiBDaGVjayBjdXJyZW50L3JuZXh0IGtleXMgdW5zZXQgYmVmb3JlIGNvbm5lY3QoKVwiLFxuIFx0XHQgICAgICAgcG9ydCsrLCAyMCwgLTEsIC0xKTtcbiBcdHRyeV9jbGllbnRfcnVuKFwiY2xpZW50OiBDaGVjayBjdXJyZW50L3JuZXh0IGtleXMgc2V0IGJlZm9yZSBjb25uZWN0KClcIixcbkBAIC0xMTUwLDYgKzExNzAsNyBAQCBzdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcbiB7XG4gXHRpZiAoaW5ldF9wdG9uKFRFU1RfRkFNSUxZLCBURVNUX1dST05HX0lQLCBcdTAwMjZ3cm9uZ19hZGRyKSAhPSAxKVxuIFx0XHR0ZXN0X2Vycm9yKFwiQ2FuJ3QgY29udmVydCBpcCBhZGRyZXNzICVzXCIsIFRFU1RfV1JPTkdfSVApO1xuK1x0c2V0dXBfdnJmcygpO1xuIFx0Y2hlY2tfY2xvc2VkX3NvY2tldCgpO1xuIFx0Y2hlY2tfbGlzdGVuX3NvY2tldCgpO1xuIFx0Y2hlY2tfZXN0YWJsaXNoZWRfc29ja2V0KCk7XG5AQCAtMTE1OCw2ICsxMTc5LDYgQEAgc3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpXG4gXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiB7XG4tXHR0ZXN0X2luaXQoMTIxLCBzZXJ2ZXJfZm4sIGNsaWVudF9mbik7XG4rXHR0ZXN0X2luaXQoMTIyLCBzZXJ2ZXJfZm4sIGNsaWVudF9mbik7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmhcbmluZGV4IGViYjI4OTljMTJmZTAuLjUzYmUxNzQ0MjM3ZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXG5AQCAtNDA0LDcgKzQwNCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfcHJlcGFyZV9kZWZfa2V5KHN0cnVjdCB0Y3BfYW9fYWRkICphbyxcbiBcbiBleHRlcm4gaW50IHRlc3RfZ2V0X29uZV9hbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCAqb3V0LFxuIFx0XHRcdCAgIHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LFxuLVx0XHRcdCAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKTtcbitcdFx0XHQgICB1aW50OF90IHByZWZpeCwgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCxcbitcdFx0XHQgICB1aW50OF90IGtleWZsYWdzLCBpbnQgaWZpbmRleCk7XG4gZXh0ZXJuIGludCB0ZXN0X2dldF9hb19pbmZvKGludCBzaywgc3RydWN0IHRjcF9hb19pbmZvX29wdCAqb3V0KTtcbiBleHRlcm4gaW50IHRlc3Rfc2V0X2FvX2luZm8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0ICppbik7XG4gZXh0ZXJuIGludCB0ZXN0X2NtcF9nZXRzb2Nrb3B0X3NldHNvY2tvcHQoY29uc3Qgc3RydWN0IHRjcF9hb19hZGQgKmEsXG5AQCAtNDE4LDcgKzQxOSw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfdmVyaWZ5X3NvY2tldF9rZXkoaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2FkZCAqa2V5KVxuIFx0aW50IGVycjtcbiBcbiBcdGVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgXHUwMDI2a2V5MiwgXHUwMDI2a2V5LVx1MDAzZWFkZHIsIHNpemVvZihrZXktXHUwMDNlYWRkciksXG4tXHRcdFx0ICAgICAga2V5LVx1MDAzZXByZWZpeCwga2V5LVx1MDAzZXNuZGlkLCBrZXktXHUwMDNlcmN2aWQpO1xuK1x0XHRcdCAgICAgIGtleS1cdTAwM2VwcmVmaXgsIGtleS1cdTAwM2VzbmRpZCwga2V5LVx1MDAzZXJjdmlkLFxuK1x0XHRcdCAgICAgIGtleS1cdTAwM2VrZXlmbGFncywga2V5LVx1MDAzZWlmaW5kZXgpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcbmluZGV4IGVmOGU5MDMxZDQ3YTMuLjJlN2IwNmExYTE1NjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suY1xuQEAgLTI1Miw3ICsyNTIsNyBAQCBzdGF0aWMgaW50IHRlc3RfZ2V0X2FvX2tleXNfbnIoaW50IHNrKVxuIFxuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcbiBcdFx0dm9pZCAqYWRkciwgc2l6ZV90IGFkZHJfc3osIHVpbnQ4X3QgcHJlZml4LFxuLVx0XHR1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKVxuK1x0XHR1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCB1aW50OF90IGtleWZsYWdzLCBpbnQgaWZpbmRleClcbiB7XG4gXHRzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgdG1wID0ge307XG4gXHRzb2NrbGVuX3QgdG1wX3N6ID0gc2l6ZW9mKHRtcCk7XG5AQCAtMjYyLDYgKzI2Miw4IEBAIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcbiBcdHRtcC5wcmVmaXggPSBwcmVmaXg7XG4gXHR0bXAuc25kaWQgID0gc25kaWQ7XG4gXHR0bXAucmN2aWQgID0gcmN2aWQ7XG4rXHR0bXAua2V5ZmxhZ3MgPSBrZXlmbGFncztcbitcdHRtcC5pZmluZGV4ID0gaWZpbmRleDtcbiBcdHRtcC5ua2V5cyAgPSAxO1xuIFxuIFx0cmV0ID0gZ2V0c29ja29wdChzaywgSVBQUk9UT19UQ1AsIFRDUF9BT19HRVRfS0VZUywgXHUwMDI2dG1wLCBcdTAwMjZ0bXBfc3opO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6MzM6MDYuNjkwNTAyODEzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxOTkyOTE0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVENQLUFPIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYG5ldC9pcHY0L3RjcF9hby5jYCBhbmQgc29tZSBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vYC4gTGV0J3MgZ2V0IHJpZ2h0IHRvIGl0IGFuZCBmb2N1cyBvbiBgbmV0L2lwdjQvdGNwX2FvLmNgLiBUaGUgZGlmZiBzaG93cyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgYHRjcF9hb19kZWxfY21kYCBmdW5jdGlvbi5cblxuSG1tLCBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIGFkZGVkIHRoaXMgY2hlY2sgcmVsYXRlZCB0byBgaWZpbmRleGAgYW5kIGBjbWQua2V5ZmxhZ3NgLiBTcGVjaWZpY2FsbHksIHRoZXkgYXJlIG5vdyBzZXR0aW5nIGBsM2luZGV4YCBpZiBgVENQX0FPX0tFWUZfSUZJTkRFWGAgaXMgc2V0IGluIHRoZSBrZXlmbGFncy4gVGhlIGV4aXN0aW5nIGNvZGUgYWxyZWFkeSBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiBgaWZpbmRleGAsIGJ1dCB0aGlzIGFkZGl0aW9uIGRpcmVjdGx5IGFzc2lnbnMgaXQuIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBoZXJlIOKAkyB3aGF0IGRvZXMgYGNtZGAgYWN0dWFsbHkgcmVwcmVzZW50PyBXaGVyZSBkb2VzIGl0IGNvbWUgZnJvbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyB0byBmdWxseSBncmFzcCB0aGlzIGNoYW5nZS5cblxuTGV0IG1lIHVzZSB0aGUgZ3JlcHBlciBJJ3ZlIGdvdCBzZXQgdXAgdG8gc2VlIHdoZXJlIGB0Y3BfYW9fZGVsX2NtZGAgaXMgY2FsbGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBmdWxseSBncm9rIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDozMzoxMS44ODk3OTYzODNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NzU1NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9hb19kZWxfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9hby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9hby5jPTk5MD10Y3BfaW5ib3VuZF9hb19oYXNoKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTEwNTUtXFx0XFx0XFx0aWYgKGtleSlcXG5uZXQvaXB2NC90Y3BfYW8uYzoxMDU2OlxcdFxcdFxcdFxcdC8qIHBhaXJzIHdpdGggdGNwX2FvX2RlbF9jbWQgKi9cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU3LVxcdFxcdFxcdFxcdFdSSVRFX09OQ0UoaW5mby1cXHUwMDNlY3VycmVudF9rZXksIGtleSk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDY4LVxcdCAqIC0gcmVxdWVzdCBzb2NrZXRzIHdvdWxkIHJhY2Ugb24gdGhvc2Uga2V5IHBvaW50ZXJzXFxubmV0L2lwdjQvdGNwX2FvLmM6MTA2OTpcXHQgKiAtIHRjcF9hb19kZWxfY21kKCkgYWxsb3dzIGFzeW5jIGtleSByZW1vdmFsXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA3MC1cXHQgKi9cXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTE3NDY9c3RhdGljIGludCB0Y3BfYW9fZGVsZXRlX2tleShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfYW9faW5mbyAqYW9faW5mbyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTE3OTktI2RlZmluZSBUQ1BfQU9fREVMX0tFWUZfQUxMIChUQ1BfQU9fS0VZRl9JRklOREVYKVxcbm5ldC9pcHY0L3RjcF9hby5jOjE4MDA6c3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxubmV0L2lwdjQvdGNwX2FvLmMtMTgwMS1cXHRcXHRcXHQgIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0yMDM4PWludCB0Y3BfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMjA0Ny1cXHRjYXNlIFRDUF9BT19ERUxfS0VZOlxcbm5ldC9pcHY0L3RjcF9hby5jOjIwNDg6XFx0XFx0cmV0dXJuIHRjcF9hb19kZWxfY21kKHNrLCBmYW1pbHksIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDQ5LVxcdGNhc2UgVENQX0FPX0lORk86XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMzOjExLjk4ODU1ODg4NloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTA1NTY4NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYHRjcF9hb19kZWxfY21kYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgVENQIEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoVENQIEFPKSBpbXBsZW1lbnRhdGlvbi4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgdGNwX2FvX2RlbF9jbWRgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2FvLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVENQIEFPIGtleXMgYXJlIHJlbW92ZWQgb3IgaW52YWxpZGF0ZWQsIGFzIHRoaXMgaXMgY3J1Y2lhbCBmb3Igc2VjdXJpdHkgYW5kIHNlc3Npb24gbWFuYWdlbWVudC4gSSdtIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBkZWxldGlvbiBvciBpbnZhbGlkYXRpb24gb2YgYXV0aGVudGljYXRpb24ga2V5cyBhc3NvY2lhdGVkIHdpdGggYSBUQ1AgY29ubmVjdGlvbi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBrZXkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLCB3aGF0IGxvY2tpbmcgbWVjaGFuaXNtcyBpdCBlbXBsb3lzIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5IChsaWtlbHkgc3BpbmxvY2tzIG9yIHJlYWQvd3JpdGUgbG9ja3MsIGdpdmVuIGl0cyBwb3RlbnRpYWwgZm9yIGNvbmN1cnJlbnQgYWNjZXNzKSwgYW5kIGhvdyBpdCBjbGVhbnMgdXAgYW55IGFzc29jaWF0ZWQgcmVzb3VyY2VzLiBBcmUgdGhlcmUgYW55IHJlZmVyZW5jZSBjb3VudHMgaW52b2x2ZWQ/IFdoYXQgaGFwcGVucyBpZiB0aGUga2V5IGRlbGV0aW9uIGZhaWxzIGZvciBzb21lIHJlYXNvbj8gRG9lcyB0aGlzIHRyaWdnZXIgYW55IGVycm9yIGNhbGxiYWNrcyBvciBsb2dnaW5nPyBJJ2xsIGFsc28gYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgbGlrZSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IGxlYWtzLCBhc3NvY2lhdGVkIHdpdGggdGhlIGRlbGV0aW9uIHByb2Nlc3MgaXRzZWxmLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBtYWludGFpbmluZyB0aGUgaW50ZWdyaXR5IGFuZCBzZWN1cml0eSBvZiB0aGUgQU8gc3lzdGVtLCBzbyBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MDEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDozMzoxNS44OTQxMzAwMjVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9hby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3OTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3OTA6XFx0XFx0YXRvbWljX3N1Yih0Y3BfYW9fc2l6ZW9mX2tleShrZXkpLCBcXHUwMDI2c2stXFx1MDAzZXNrX29tZW1fYWxsb2MpO1xcbjE3OTE6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNmtleS1cXHUwMDNlcmN1LCB0Y3BfYW9fa2V5X2ZyZWVfcmN1KTtcXG4xNzkyOlxcdFxcbjE3OTM6XFx0XFx0cmV0dXJuIDA7XFxuMTc5NDpcXHRhZGRfa2V5OlxcbjE3OTU6XFx0XFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZrZXktXFx1MDAzZW5vZGUsIFxcdTAwMjZhb19pbmZvLVxcdTAwM2VoZWFkKTtcXG4xNzk2OlxcdFxcdHJldHVybiBlcnI7XFxuMTc5NzpcXHR9XFxuMTc5ODpcXHRcXG4xNzk5OlxcdCNkZWZpbmUgVENQX0FPX0RFTF9LRVlGX0FMTCAoVENQX0FPX0tFWUZfSUZJTkRFWClcXG4xODAwOlxcdHN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbjE4MDE6XFx0XFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbjE4MDI6XFx0e1xcbjE4MDM6XFx0XFx0c3RydWN0IHRjcF9hb19rZXkgKmtleSwgKm5ld19jdXJyZW50ID0gTlVMTCwgKm5ld19ybmV4dCA9IE5VTEw7XFxuMTgwNDpcXHRcXHRpbnQgZXJyLCBhZGRyX2xlbiwgbDNpbmRleCA9IDA7XFxuMTgwNTpcXHRcXHRzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvX2luZm87XFxuMTgwNjpcXHRcXHR1bmlvbiB0Y3BfYW9fYWRkciAqYWRkcjtcXG4xODA3OlxcdFxcdHN0cnVjdCB0Y3BfYW9fZGVsIGNtZDtcXG4xODA4OlxcdFxcdF9fdTggcHJlZml4O1xcbjE4MDk6XFx0XFx0dTE2IHBvcnQ7XFxuMTgxMDpcXHRcXG4xODExOlxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoY21kKSlcXG4xODEyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4MTM6XFx0XFxuMTgxNDpcXHRcXHRlcnIgPSBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHIoXFx1MDAyNmNtZCwgc2l6ZW9mKGNtZCksIG9wdHZhbCwgb3B0bGVuKTtcXG4xODE1OlxcdFxcdGlmIChlcnIpXFxuMTgxNjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE4MTc6XFx0XFxuMTgxODpcXHRcXHRpZiAoY21kLnJlc2VydmVkICE9IDAgfHwgY21kLnJlc2VydmVkMiAhPSAwKVxcbjE4MTk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTgyMDpcXHRcXG4xODIxOlxcdFxcdGlmIChjbWQuc2V0X2N1cnJlbnQgfHwgY21kLnNldF9ybmV4dCkge1xcbjE4MjI6XFx0XFx0XFx0aWYgKCF0Y3BfYW9fY2FuX3NldF9jdXJyZW50X3JuZXh0KHNrKSlcXG4xODIzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4MjQ6XFx0XFx0fVxcbjE4MjU6XFx0XFxuMTgyNjpcXHRcXHRpZiAoY21kLmtleWZsYWdzIFxcdTAwMjYgflRDUF9BT19ERUxfS0VZRl9BTEwpXFxuMTgyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODI4OlxcdFxcbjE4Mjk6XFx0XFx0LyogTm8gc2FuaXR5IGNoZWNrIGZvciBUQ1BfQU9fS0VZRl9JRklOREVYIGFzIGlmIGEgVlJGXFxuMTgzMDpcXHRcXHQgKiB3YXMgZGVzdHJveWVkLCB0aGVyZSBzdGlsbCBzaG91bGQgYmUgYSB3YXkgdG8gZGVsZXRlIGtleXMsXFxuMTgzMTpcXHRcXHQgKiB0aGF0IHdlcmUgYm91bmQgdG8gdGhhdCBsM2ludGYuIFNvLCBmYWlsIGxhdGUgYXQgbG9va3VwIHN0YWdlXFxuMTgzMjpcXHRcXHQgKiBpZiB0aGVyZSBpcyBubyBrZXkgZm9yIHRoYXQgaWZpbmRleC5cXG4xODMzOlxcdFxcdCAqL1xcbjE4MzQ6XFx0XFx0aWYgKGNtZC5pZmluZGV4IFxcdTAwMjZcXHUwMDI2ICEoY21kLmtleWZsYWdzIFxcdTAwMjYgVENQX0FPX0tFWUZfSUZJTkRFWCkpXFxuMTgzNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODM2OlxcdFxcbjE4Mzc6XFx0XFx0aWYgKGNtZC5rZXlmbGFncyBcXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpXFxuMTgzODpcXHRcXHRcXHRsM2luZGV4ID0gY21kLmlmaW5kZXg7XFxuMTgzOTpcXHRcXG4xODQwOlxcdFxcdGFvX2luZm8gPSBzZXRzb2Nrb3B0X2FvX2luZm8oc2spO1xcbjE4NDE6XFx0XFx0aWYgKElTX0VSUihhb19pbmZvKSlcXG4xODQyOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGFvX2luZm8pO1xcbjE4NDM6XFx0XFx0aWYgKCFhb19pbmZvKVxcbjE4NDQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMTg0NTpcXHRcXG4xODQ2OlxcdFxcdC8qIEZvciBzb2NrZXRzIGluIFRDUF9DTE9TRUQgaXQncyBwb3NzaWJsZSBzZXQga2V5cyB0aGF0IGFyZW4ndFxcbjE4NDc6XFx0XFx0ICogbWF0Y2hpbmcgdGhlIGZ1dHVyZSBwZWVyIChhZGRyZXNzL1ZSRi9ldGMpLFxcbjE4NDg6XFx0XFx0ICogdGNwX2FvX2Nvbm5lY3RfaW5pdCgpIHdpbGwgY2hvb3NlIGEgY29ycmVjdCBtYXRjaGluZyBNS1RcXG4xODQ5OlxcdFxcdCAqIGlmIHRoZXJlJ3MgYW55LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDozMzoxNS44OTQzMTk1NDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk3OTAwNTM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUF9BTyBLZXkgRmxhZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgaXQgc2VlbXMgd2UncmUgZmluYWxseSBhc3NpZ25pbmcgYGNtZC5pZmluZGV4YCB0byBgbDNpbmRleGAgd2hlbiB0aGUgYFRDUF9BT19LRVlGX0lGSU5ERVhgIGZsYWcgaXMgc2V0LlwiIEJlZm9yZSB0aGlzLCBgbDNpbmRleGAgd2FzIGp1c3QgaW5pdGlhbGl6ZWQgdG8gemVybywgYnV0IHRoaXMgY3J1Y2lhbCBhc3NpZ25tZW50IHdhcyBtaXNzaW5nLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcmVtZW1iZXIgaG93IGBjbWRgIGdldHMgcG9wdWxhdGVkIOKAkyB0aGF0J3MgcmlnaHQsIGl0IGNvbWVzIGZyb20gdXNlcnNwYWNlIHZpYSBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyYC4gVGhhdCBmdW5jdGlvbidzIGltcG9ydGFudCBiZWNhdXNlIGl0IGNvcGllcyB0aGUgZGF0YSBhbmQgemVyby1wYWRzIGlmIGBvcHRsZW5gIGlzIHNtYWxsZXIgdGhhbiB0aGUgYGNtZGAgc3RydWN0IGl0c2VsZi4gU28sIG5vIG1hdHRlciB3aGF0LCBgY21kYCBpcyBmdWxseSBpbml0aWFsaXplZCwgZWl0aGVyIGZyb20gdXNlciBzcGFjZSBvciB3aXRoIHplcm9zLiBUaGVuLCBgbDNpbmRleGAgY29ycmVjdGx5IGdldHMgaXRzIHZhbHVlLiBUaGlzIGFsbCBtZWFucyBpdCdzIGFuICppbnB1dCogZnJvbSB1c2VyIHNwYWNlLCBhbmQgdGhlcmUncyBubyB3YXkgd2UncmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIHNvbWV0aGluZyB0byB1c2VyIHNwYWNlLlxuXG5UaGlzIHBhdGNoLCBpdCdzIGNsZWFyIG5vdywgZml4ZXMgYSBidWcgd2hlcmUgYGwzaW5kZXhgIHdhcyBiZWluZyBpZ25vcmVkIGR1cmluZyBgVENQX0FPX0RFTF9LRVlgIGBzZXRzb2Nrb3B0YC4gVGhhdCdzIGEgZ29vZCBmaXguXG5cbk5vdywgbXkgbWluZCBnb2VzIHRvIEtNU0FOIOKAkyB0aGUgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIuIElzIHRoaXMgcGF0Y2ggcmVsZXZhbnQ/IERvZXMgaXQgZXhwb3NlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHByb2JsZW0/IE5vLCBkZWZpbml0ZWx5IG5vdC4gYGNtZGAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhhdCBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyYCBmdW5jdGlvbi4gV2UgcmVhZCBgY21kLmlmaW5kZXhgIGZyb20gYGNtZGAsIGFuZCBgY21kYCBpcyBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBBbmQsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGVyZSBpcyBubyBrZXJuZWwgbWVtb3J5IGNvcGllZCB0byB1c2VyIHNwYWNlIGluIHRoaXMgcGF0Y2guIEFjdHVhbGx5LCB3YWl0IC0gSSBzaG91bGQgY2hlY2sgdGhlIHNlbGZ0ZXN0cy4gVGhvc2UgbWlnaHQgYmUgdGhlIGV4Y2VwdGlvbi4gQWgsIGJ1dCB0aGUgc2VsZnRlc3RzIGFyZSBqdXN0IHRlc3RpbmcgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBPa2F5LCBJ4oCZbSBnb29kIHRvIGdvLlxuXG5UaW1lIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgIGZ1bmN0aW9uLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgwNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMzOjIzLjg3MzMyODQ4NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU0Mzc5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc29ja3B0ci5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc29ja3B0ci5oPTc3PXN0YXRpYyBpbmxpbmUgaW50IGNvcHlfc2FmZV9mcm9tX3NvY2twdHIodm9pZCAqZHN0LCBzaXplX3Qga3NpemUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NvY2twdHIuaC04Ni1cXG5pbmNsdWRlL2xpbnV4L3NvY2twdHIuaDo4NzpzdGF0aWMgaW5saW5lIGludCBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHIodm9pZCAqZHN0LCBzaXplX3Qga3NpemUsXFxuaW5jbHVkZS9saW51eC9zb2NrcHRyLmgtODgtXFx0XFx0c29ja3B0cl90IHNyYywgc2l6ZV90IHVzaXplKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDozMzoyMy45Mzg3NzExNTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0OTIzNzY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgOlxuXG4qKkRpc3NlY3RpbmcgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIGdldHRpbmcgbXlzZWxmIGZhbWlsaWFyIHdpdGggYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAuIFRoYXQgbmFtZSBhbG9uZSBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY2FuIGltbWVkaWF0ZWx5IGluZmVyIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiwgdW5zdXJwcmlzaW5nbHksIGNvcHlpbmcgYSBzdHJ1Y3R1cmUgZnJvbSBhIHNvY2tldCBwb2ludGVyLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gV2hhdCBraW5kIG9mIHNvY2tldD8gV2hhdCdzIHRoZSBzb3VyY2Ugc3RydWN0dXJlPyBXaGF0J3MgdGhlIGRlc3RpbmF0aW9uPyBBcmUgdGhlcmUgYW55IGRhdGEgY29udmVyc2lvbnMgaGFwcGVuaW5nPyBBbnkgbWVtb3J5IGFsbG9jYXRpb24gY29uc2lkZXJhdGlvbnM/IEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHNvY2tldCBjb21tdW5pY2F0aW9uLCBhbmQgbWVtb3J5IHNhZmV0eS4gT2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgSSdtIHRoaW5raW5nIGFib3V0OiBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBib3VuZGFyeSBjb25kaXRpb25zLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEknbGwgc3RhcnQgYnkgbG9va2luZyBhdCBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgZGlmZmVyZW50IHNvY2tldCB0eXBlcywgZGF0YSBzaXplcywgYW5kIHBvdGVudGlhbCBlcnJvcnMgZHVyaW5nIHRoZSBkYXRhIHRyYW5zZmVyLiBJJ2xsIGJlIHNjcnV0aW5pemluZyB0aGUgcmV0dXJuIHZhbHVlIGFzIHdlbGwuIFdoYXQgZG9lcyBpdCBzaWduaWZ5IGluIHRlcm1zIG9mIHN1Y2Nlc3Mgb3IgZmFpbHVyZT9cblxuXG4iLCJJbnB1dFRva2VucyI6OTc4OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMzOjI3LjY4ODAxMDczMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NvY2twdHIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA3NyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3NzpcXHRzdGF0aWMgaW5saW5lIGludCBjb3B5X3NhZmVfZnJvbV9zb2NrcHRyKHZvaWQgKmRzdCwgc2l6ZV90IGtzaXplLFxcbiAgNzg6XFx0XFx0XFx0XFx0XFx0XFx0IHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuICA3OTpcXHR7XFxuICA4MDpcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mga3NpemUpXFxuICA4MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDgyOlxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihkc3QsIG9wdHZhbCwga3NpemUpKVxcbiAgODM6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuICA4NDpcXHRcXHRyZXR1cm4gMDtcXG4gIDg1OlxcdH1cXG4gIDg2OlxcdFxcbiAgODc6XFx0c3RhdGljIGlubGluZSBpbnQgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyKHZvaWQgKmRzdCwgc2l6ZV90IGtzaXplLFxcbiAgODg6XFx0XFx0XFx0c29ja3B0cl90IHNyYywgc2l6ZV90IHVzaXplKVxcbiAgODk6XFx0e1xcbiAgOTA6XFx0XFx0aWYgKCFzb2NrcHRyX2lzX2tlcm5lbChzcmMpKVxcbiAgOTE6XFx0XFx0XFx0cmV0dXJuIGNvcHlfc3RydWN0X2Zyb21fdXNlcihkc3QsIGtzaXplLCBzcmMudXNlciwgdXNpemUpO1xcbiAgOTI6XFx0XFxuICA5MzpcXHRcXHRyZXR1cm4gY29weV9zdHJ1Y3RfZnJvbV9ib3VuY2VfYnVmZmVyKGRzdCwga3NpemUsIHNyYy5rZXJuZWwsIHVzaXplKTtcXG4gIDk0OlxcdH1cXG4gIDk1OlxcdFxcbiAgOTY6XFx0c3RhdGljIGlubGluZSBpbnQgY29weV90b19zb2NrcHRyX29mZnNldChzb2NrcHRyX3QgZHN0LCBzaXplX3Qgb2Zmc2V0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDozMzoyNy42ODgwNzQ3NzFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODcyNjA2NjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUQ1AtQU9fREVMX0tFWSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgaXMgdGhlIGZpeCBmb3IgYFRDUF9BT19ERUxfS0VZYCdzIGBzZXRzb2Nrb3B0YCBjYWxsLiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBjb21wbGV0ZWx5IGlnbm9yaW5nIHRoZSBgaWZpbmRleGAgZmllbGQgcHJvdmlkZWQgaW4gdGhlIHVzZXItc3VwcGxpZWQgYHRjcF9hb19kZWxgIHN0cnVjdHVyZSB3aGVuIGRlbGV0aW5nIGEgVENQLUFPIGtleSwgd2hpY2ggaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgYnVnLlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgb3IgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAsIHRoZSBtZWNoYW5pc20gdXNlZCB0byBicmluZyBkYXRhIGZyb20gdXNlciBzcGFjZSBpbnRvIHRoZSBrZXJuZWwsIGlzIGluaGVyZW50bHkgc2FmZS4gSWYgdGhlIHVzZXItcHJvdmlkZWQgZGF0YSBpcyBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQsIHRoZSBmdW5jdGlvbiB6ZXJvZXMgb3V0IHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhlIGBjbWRgIHN0cnVjdC4gSWYgaXQncyBsYXJnZXIsIGl0IG9ubHkgY29waWVzIHRoZSByZXF1aXJlZCBzaXplIGFuZCB2ZXJpZmllcyB0aGF0IHRoZSByZXN0IGlzIHplcm9lZCBvdXQuIFRoaXMgbWVhbnMgYGNtZGAgKmlzIGFsd2F5cyogZnVsbHkgaW5pdGlhbGl6ZWQuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgc3RyYWlnaHRmb3J3YXJkOiBpdCdzIGEgc2ltcGxlIGFzc2lnbm1lbnQgb2YgYGNtZC5pZmluZGV4YCB0byBgbDNpbmRleGAsICpidXQgb25seSogaWYgdGhlIGBUQ1BfQU9fS0VZRl9JRklOREVYYCBmbGFnIGlzIHNldC4gQ3JpdGljYWxseSwgdGhlcmUncyBubyBmYW5jeSBtZW1vcnkgbWFuaXB1bGF0aW9uIGdvaW5nIG9uLiBUaGVyZSdzIG5vIG5ldyBhbGxvY2F0aW9uLCBubyBjb3B5aW5nIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0J3MganVzdCByZWFkaW5nIGZyb20gYW4gYWxyZWFkeSBpbml0aWFsaXplZCBzdHJ1Y3R1cmUgYW5kIGFzc2lnbmluZyBpdCB0byBhIGxvY2FsIHZhcmlhYmxlLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBpcyBmdW5jdGlvbmFsbHkgc2FmZSwgSSBkb24ndCBzZWUgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGJlaW5nIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbid0IHdhcnJhbnRlZCBoZXJlLiBTdGFuZGFyZCBLQVNBTiwgYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMsIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzg1LCJPdXRwdXRUb2tlbnMiOjIyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjMzOjM2LjQxNDE0MzcxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGZ1bmN0aW9uYWwgYnVnIGluIGB0Y3BfYW9fZGVsX2NtZGAgd2hlcmUgdGhlIGBpZmluZGV4YCBmaWVsZCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIGB0Y3BfYW9fZGVsYCBzdHJ1Y3R1cmUgd2FzIGlnbm9yZWQgd2hlbiBkZWxldGluZyBhIFRDUC1BTyBrZXkuIFRoZSBgY21kYCBzdHJ1Y3R1cmUgaXMgc2FmZWx5IHBvcHVsYXRlZCBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cigpYCwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKGVpdGhlciBieSBjb3B5aW5nIGZyb20gdXNlciBzcGFjZSBvciB6ZXJvLXBhZGRpbmcpLiBUaGUgcGF0Y2ggc2ltcGx5IHJlYWRzIHRoZSBpbml0aWFsaXplZCBgY21kLmlmaW5kZXhgIGZpZWxkIGFuZCBhc3NpZ25zIGl0IHRvIGBsM2luZGV4YCBpZiB0aGUgYFRDUF9BT19LRVlGX0lGSU5ERVhgIGZsYWcgaXMgc2V0LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyBpbiBgdGNwX2FvX2RlbF9jbWRgIHdoZXJlIHRoZSBgaWZpbmRleGAgZmllbGQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBgdGNwX2FvX2RlbGAgc3RydWN0dXJlIHdhcyBpZ25vcmVkIHdoZW4gZGVsZXRpbmcgYSBUQ1AtQU8ga2V5LiBUaGUgYGNtZGAgc3RydWN0dXJlIGlzIHNhZmVseSBwb3B1bGF0ZWQgZnJvbSB1c2VyIHNwYWNlIHVzaW5nIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHIoKWAsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkIChlaXRoZXIgYnkgY29weWluZyBmcm9tIHVzZXIgc3BhY2Ugb3IgemVyby1wYWRkaW5nKS4gVGhlIHBhdGNoIHNpbXBseSByZWFkcyB0aGUgaW5pdGlhbGl6ZWQgYGNtZC5pZmluZGV4YCBmaWVsZCBhbmQgYXNzaWducyBpdCB0byBgbDNpbmRleGAgaWYgdGhlIGBUQ1BfQU9fS0VZRl9JRklOREVYYCBmbGFnIGlzIHNldC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowzslzq[1] Phase: Succeeded StartedAt: 2026-08-22 20:33:48 +0000 UTC FinishedAt: 2026-08-22 20:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-22 20:33:48 +0000 UTC FinishedAt: 2026-08-22 20:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2] Phase: Succeeded StartedAt: 2026-08-22 20:33:48 +0000 UTC FinishedAt: 2026-08-23 00:14:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-22 20:33:48 +0000 UTC FinishedAt: 2026-08-23 00:14:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-22 20:33:48 +0000 UTC FinishedAt: 2026-08-22 20:33:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-22 20:33:48 +0000 UTC FinishedAt: 2026-08-22 20:33:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowzslzq/series-workflowzslzq-convert-artifact-3945335317/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-22 20:33:58 +0000 UTC FinishedAt: 2026-08-22 20:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-22 20:33:58 +0000 UTC FinishedAt: 2026-08-22 20:50:18 +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:*1b5c2d7f-3044-4f09-b8bd-ab6658801788,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-workflowzslzq/series-workflowzslzq-convert-artifact-3945335317/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": "9246747a-a146-4410-8486-649452bc38e6", "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-workflowzslzq/series-workflowzslzq-build-action-602497659/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-22 20:33:58 +0000 UTC FinishedAt: 2026-08-22 20:50:08 +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:*1b5c2d7f-3044-4f09-b8bd-ab6658801788,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-workflowzslzq/series-workflowzslzq-convert-artifact-3945335317/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": "9246747a-a146-4410-8486-649452bc38e6", "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-workflowzslzq/series-workflowzslzq-build-action-602497659/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-22 20:50:18 +0000 UTC FinishedAt: 2026-08-22 20:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-22 20:50:18 +0000 UTC FinishedAt: 2026-08-22 20:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-22 20:50:18 +0000 UTC FinishedAt: 2026-08-22 20:50:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-22 20:50:18 +0000 UTC FinishedAt: 2026-08-22 20:50:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowzslzq/series-workflowzslzq-convert-artifact-3616882416/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-22 20:50:28 +0000 UTC FinishedAt: 2026-08-22 20:52:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-22 20:50:28 +0000 UTC FinishedAt: 2026-08-22 20:52:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9246747a-a146-4410-8486-649452bc38e6,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-workflowzslzq/series-workflowzslzq-build-action-602497659/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-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-22 20:52:30 +0000 UTC FinishedAt: 2026-08-22 20:52:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-22 20:52:30 +0000 UTC FinishedAt: 2026-08-22 20:52:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-22 20:52:30 +0000 UTC FinishedAt: 2026-08-22 21:09:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-22 20:52:30 +0000 UTC FinishedAt: 2026-08-22 21:09:08 +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:*1b5c2d7f-3044-4f09-b8bd-ab6658801788,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-workflowzslzq/series-workflowzslzq-convert-artifact-3616882416/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": "75ea02b7-b7a9-41bf-8a91-3d09801f4729", "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-workflowzslzq/series-workflowzslzq-build-action-1746903020/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-22 20:52:30 +0000 UTC FinishedAt: 2026-08-22 21:08:57 +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:*1b5c2d7f-3044-4f09-b8bd-ab6658801788,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-workflowzslzq/series-workflowzslzq-convert-artifact-3616882416/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": "75ea02b7-b7a9-41bf-8a91-3d09801f4729", "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-workflowzslzq/series-workflowzslzq-build-action-1746903020/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-22 21:09:08 +0000 UTC FinishedAt: 2026-08-22 21:09:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-22 21:09:08 +0000 UTC FinishedAt: 2026-08-22 21:09:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-22 21:09:08 +0000 UTC FinishedAt: 2026-08-22 21:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-22 21:09:08 +0000 UTC FinishedAt: 2026-08-22 21:10:54 +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:*75ea02b7-b7a9-41bf-8a91-3d09801f4729,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-workflowzslzq/series-workflowzslzq-build-action-1746903020/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-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-22 21:11:04 +0000 UTC FinishedAt: 2026-08-23 00:14:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-22 21:11:04 +0000 UTC FinishedAt: 2026-08-23 00:14:10 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},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:*9246747a-a146-4410-8486-649452bc38e6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*75ea02b7-b7a9-41bf-8a91-3d09801f4729,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-workflowzslzq/series-workflowzslzq-build-action-602497659/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-workflowzslzq/series-workflowzslzq-build-action-1746903020/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-22 21:11:04 +0000 UTC FinishedAt: 2026-08-22 21:11:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-22 21:11:04 +0000 UTC FinishedAt: 2026-08-22 21:11:09 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},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-workflowzslzq/series-workflowzslzq-convert-artifact-1086666601/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-22 21:11:04 +0000 UTC FinishedAt: 2026-08-22 21:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-22 21:11:04 +0000 UTC FinishedAt: 2026-08-22 21:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-22 21:11:04 +0000 UTC FinishedAt: 2026-08-22 21:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-22 21:11:14 +0000 UTC FinishedAt: 2026-08-23 00:14:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzslzq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"d0b79e97-cc8d-4a66-8cf3-ad737baf3a92","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-22 21:11:14 +0000 UTC FinishedAt: 2026-08-23 00:14:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9246747a-a146-4410-8486-649452bc38e6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*75ea02b7-b7a9-41bf-8a91-3d09801f4729,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-workflowzslzq/series-workflowzslzq-build-action-602497659/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-workflowzslzq/series-workflowzslzq-build-action-1746903020/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-workflowzslzq/series-workflowzslzq-convert-artifact-1086666601/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,}