Name: series-workflowknxgk Phase: Succeeded StartedAt: 2026-08-08 01:04:46 +0000 UTC FinishedAt: 2026-08-08 05:07:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[0] Phase: Succeeded StartedAt: 2026-08-08 01:04:46 +0000 UTC FinishedAt: 2026-08-08 01:21:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[0].run-triage Phase: Succeeded StartedAt: 2026-08-08 01:04:46 +0000 UTC FinishedAt: 2026-08-08 01:21:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ca10634ebcca850dec2f1507ad5bfe70b82a9c00", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTER_PREF", "IPV6_ROUTE_INFO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ca10634ebcca850dec2f1507ad5bfe70b82a9c00", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTER_PREF", "IPV6_ROUTE_INFO" ], "series_id": "fd08948c-592a-4cf1-9d31-0d95f8b47d19" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip6_del_rt_reason", "inet6_rt_del_notify", "fib6_del" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA4IDAxOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURVJfUFJFRiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFX0lORk8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDssCiAgICAmIzM0O2ZpYjZfZGVsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIHRvIHJlcG9ydCB0aGUgcmVhc29uIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9ucy4gVGhlIGRlbGV0aW9uIHJlYXNvbiBpcyBwYXNzZWQgdGhyb3VnaCB0aGUgcm91dGluZyBzdWJzeXN0ZW0gYXMgYW4gZXhwbGljaXQgYGVudW0gcnRfZGVsX3JlYXNvbmAgdmFsdWUgKGUuZy4sIGBSVF9ERUxfUkVBU09OX1VOU1BFQ2AsIGBSVF9ERUxfUkVBU09OX0VYUElSRURgLCBgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV05gKS4gVGhpcyB2YWx1ZSBpcyB0aGVuIHNlcmlhbGl6ZWQgaW50byB0aGUgbmV0bGluayBtZXNzYWdlIHVzaW5nIGBubGFfcHV0X3UzMigpYC4gXG5cblNpbmNlIHRoZSBgZGVsX3JlYXNvbmAgaXMgcGFzc2VkIGJ5IHZhbHVlIGFzIGFuIGV4cGxpY2l0IGNvbnN0YW50IGluIGFsbCBtb2RpZmllZCBjYWxsIHNpdGVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSBzdGFjaywgaGVhcCwgb3IgcGFkZGluZyBieXRlcy4gVGhlIG5ldGxpbmsgYXR0cmlidXRlIGNvbnN0cnVjdGlvbiB2aWEgYG5sYV9wdXRfdTMyKClgIHNhZmVseSBoYW5kbGVzIHRoZSBzZXJpYWxpemF0aW9uIHdpdGhvdXQgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAobGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSBpbiB0aGlzIGNvZGUsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIFJUQV9ERUxfUkVBU09OIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMsIG1vZGlmeWluZyBjb3JlIElQdjYgcm91dGluZyBhbmQgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSByb3V0ZSBleHBpcmF0aW9uLCByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMsIGFuZCBtYW51YWwgcm91dGUgZGVsZXRpb24sIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAxOjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2I0NDViZDAyZjRmODg0OTdlYmRhZDkxODc5OGI4YzgzZDE5NmE5MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMDE6MjA6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuaW5kZXggMzMxOTVkYjk2NzQ2Yy4uMjUzMDM3ZWE1MTc2YSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuQEAgLTc4LDYgJiM0Mzs3OCwyNyBAQCBkZWZpbml0aW9uczpcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBydGEtdXNlZFxuICAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgLVxuJiM0MzsgICAgbmFtZTogZGVsLXJlYXNvblxuJiM0MzsgICAgdHlwZTogZW51bVxuJiM0MzsgICAgbmFtZS1wcmVmaXg6IHJ0LWRlbC1yZWFzb24tXG4mIzQzOyAgICBlbnVtLW5hbWU6IHJ0LWRlbC1yZWFzb25cbiYjNDM7ICAgIGRvYzogfFxuJiM0MzsgICAgICBXaHkgdGhlIGtlcm5lbCBkZWxldGVkIGEgcm91dGUuIE5ldyBjYXVzZXMgbWF5IGJlIGFwcGVuZGVkLiBUaGVcbiYjNDM7ICAgICAgdmFsdWUgc3BhY2UgaXMgZmFtaWx5LWFnbm9zdGljLCBhIHZhbHVlIGlzIG5ldmVyIHJlaW50ZXJwcmV0ZWRcbiYjNDM7ICAgICAgcGVyIGFkZHJlc3MgZmFtaWx5LlxuJiM0MzsgICAgZW50cmllczpcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHVuc3BlY1xuJiM0MzsgICAgICAgIGRvYzogVGhlIGRlbGV0aW9uIHBhdGggZG9lcyBub3QgcmVjb3JkIGEgY2F1c2UuXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBleHBpcmVkXG4mIzQzOyAgICAgICAgZG9jOiBUaGUgUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCBhbmQgdGhlIHJvdXRlIHdhcyBnYXJiYWdlXG4mIzQzOyAgICAgICAgICBjb2xsZWN0ZWQuXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiByYS13aXRoZHJhd25cbiYjNDM7ICAgICAgICBkb2M6IEEgUm91dGVyIEFkdmVydGlzZW1lbnQgd2l0aGRyZXcgdGhlIHJvdXRlIHdpdGggYSB6ZXJvXG4mIzQzOyAgICAgICAgICBsaWZldGltZS5cbiBcbiBhdHRyaWJ1dGUtc2V0czpcbiAgIC1cbkBAIC0xODUsNiAmIzQzOzIwNiwxOCBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgYnl0ZS1vcmRlcjogYmlnLWVuZGlhblxuICAgICAgICAgZGlzcGxheS1oaW50OiBoZXhcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGRlbC1yZWFzb25cbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBlbnVtOiBkZWwtcmVhc29uXG4mIzQzOyAgICAgICAgZG9jOiB8XG4mIzQzOyAgICAgICAgICBFbWl0dGVkIG9ubHkgb24gUlRNX0RFTFJPVVRFIG5vdGlmaWNhdGlvbnMsIGFuZCBvbmx5IHdoZW4gdGhlXG4mIzQzOyAgICAgICAgICBkZWxldGlvbiBwYXRoIHJlY29yZHMgYSBjYXVzZS4gQW4gYWJzZW50IGF0dHJpYnV0ZSBtZWFuc1xuJiM0MzsgICAgICAgICAgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdFxuJiM0MzsgICAgICAgICAgcmVjb3JkIGl0cyBjYXVzZSwgY29uc3VtZXJzIG11c3QgdHJlYXQgYWJzZW50IGFuZCB1bnNwZWNcbiYjNDM7ICAgICAgICAgIGlkZW50aWNhbGx5LiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhXG4mIzQzOyAgICAgICAgICBjYXVzZS4gVGhlIGF0dHJpYnV0ZSBpcyBub3RpZmljYXRpb24tb25seSwgdGhlIGtlcm5lbCByZWplY3RzXG4mIzQzOyAgICAgICAgICBpdCBpbiByZXF1ZXN0cy5cbiAgIC1cbiAgICAgbmFtZTogbWV0cmljc1xuICAgICBuYW1lLXByZWZpeDogcnRheC1cbkBAIC0yOTksNiAmIzQzOzMzMiw3IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSBkcG9ydFxuICAgICAgICAgICAgIC0gbmgtaWRcbiAgICAgICAgICAgICAtIGZsb3dsYWJlbFxuJiM0MzsgICAgICAgICAgICAtIGRlbC1yZWFzb25cbiAgICAgICBkdW1wOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI2XG5AQCAtMzEzLDcgJiM0MzszNDcsMzUgQEAgb3BlcmF0aW9uczpcbiAgICAgICBkbzpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIHZhbHVlOiAyNFxuLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzXG4mIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOiBcdTAwMjZyb3V0ZS1yZXEtYXR0cnNcbiYjNDM7ICAgICAgICAgICAgLSBkc3RcbiYjNDM7ICAgICAgICAgICAgLSBzcmNcbiYjNDM7ICAgICAgICAgICAgLSBpaWZcbiYjNDM7ICAgICAgICAgICAgLSBvaWZcbiYjNDM7ICAgICAgICAgICAgLSBnYXRld2F5XG4mIzQzOyAgICAgICAgICAgIC0gcHJpb3JpdHlcbiYjNDM7ICAgICAgICAgICAgLSBwcmVmc3JjXG4mIzQzOyAgICAgICAgICAgIC0gbWV0cmljc1xuJiM0MzsgICAgICAgICAgICAtIG11bHRpcGF0aFxuJiM0MzsgICAgICAgICAgICAtIGZsb3dcbiYjNDM7ICAgICAgICAgICAgLSBjYWNoZWluZm9cbiYjNDM7ICAgICAgICAgICAgLSB0YWJsZVxuJiM0MzsgICAgICAgICAgICAtIG1hcmtcbiYjNDM7ICAgICAgICAgICAgLSBtZmMtc3RhdHNcbiYjNDM7ICAgICAgICAgICAgLSB2aWFcbiYjNDM7ICAgICAgICAgICAgLSBuZXdkc3RcbiYjNDM7ICAgICAgICAgICAgLSBwcmVmXG4mIzQzOyAgICAgICAgICAgIC0gZW5jYXAtdHlwZVxuJiM0MzsgICAgICAgICAgICAtIGVuY2FwXG4mIzQzOyAgICAgICAgICAgIC0gZXhwaXJlc1xuJiM0MzsgICAgICAgICAgICAtIHBhZFxuJiM0MzsgICAgICAgICAgICAtIHVpZFxuJiM0MzsgICAgICAgICAgICAtIHR0bC1wcm9wYWdhdGVcbiYjNDM7ICAgICAgICAgICAgLSBpcC1wcm90b1xuJiM0MzsgICAgICAgICAgICAtIHNwb3J0XG4mIzQzOyAgICAgICAgICAgIC0gZHBvcnRcbiYjNDM7ICAgICAgICAgICAgLSBuaC1pZFxuJiM0MzsgICAgICAgICAgICAtIGZsb3dsYWJlbFxuICAgICAtXG4gICAgICAgbmFtZTogZGVscm91dGVcbiAgICAgICBkb2M6IERlbGV0ZSBhbiBleGlzdGluZyByb3V0ZVxuQEAgLTMyMSw0ICYjNDM7MzgzLDIzIEBAIG9wZXJhdGlvbnM6XG4gICAgICAgZG86XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjVcbi0gICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRyc1xuJiM0MzsgICAgICAgICAgYXR0cmlidXRlczogKnJvdXRlLXJlcS1hdHRyc1xuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBuZXdyb3V0ZS1udGZcbiYjNDM7ICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBjcmVhdGVkIHJvdXRlLlxuJiM0MzsgICAgICB2YWx1ZTogMjRcbiYjNDM7ICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBkZWxyb3V0ZS1udGZcbiYjNDM7ICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBkZWxldGVkIHJvdXRlLlxuJiM0MzsgICAgICB2YWx1ZTogMjVcbiYjNDM7ICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxuJiM0MztcbiYjNDM7bWNhc3QtZ3JvdXBzOlxuJiM0MzsgIGxpc3Q6XG4mIzQzOyAgICAtXG4mIzQzOyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2NC1yb3V0ZVxuJiM0MzsgICAgICB2YWx1ZTogN1xuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBydG5sZ3JwLWlwdjYtcm91dGVcbiYjNDM7ICAgICAgdmFsdWU6IDExXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG5pbmRleCA5Y2QyN2UxYjliNjkyLi4yMzIyODliNDM5YzNjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcbkBAIC00NjgsNyAmIzQzOzQ2OCw4IEBAIHZvaWQgZmliNl9jbGVhbl9hbGxfc2tpcF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LFxuIFxuIGludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdCAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyk7XG4mIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0ICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4gXG4gc3RhdGljIGlubGluZVxuIHZvaWQgcnQ2X2dldF9wcmVmc3JjKGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQsIHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbkBAIC01MzIsNiAmIzQzOzUzMyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuICNlbmRpZlxuIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuIFx0XHQgICAgIHVuc2lnbmVkIGludCBmbGFncyk7XG4mIzQzO3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4gXG4gdm9pZCBmaWI2X2FnZV9leGNlcHRpb25zKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9nY19hcmdzICpnY19hcmdzLFxuIFx0XHRcdCB1bnNpZ25lZCBsb25nIG5vdyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggMDlmZmUwZjEzY2U3NS4uY2MwNDU3MDU4NjJkZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTEyNiw2ICYjNDM7MTI2LDggQEAgaW50IGlwdjZfcm91dGVfaW9jdGwoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgY21kLFxuIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXG4gXHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBpbnQgaXA2X2luc19ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSk7XG4mIzQzO2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcbiYjNDM7XHRcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSk7XG4gI2Vsc2VcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbmluZGV4IDI3MjY1ZmQzMWU1ZmMuLjM5ODhiNTFkYjUzOWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuQEAgLTM5OSw2ICYjNDM7Mzk5LDcgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcbiBcdFJUQV9EUE9SVCxcbiBcdFJUQV9OSF9JRCxcbiBcdFJUQV9GTE9XTEFCRUwsXG4mIzQzO1x0UlRBX0RFTF9SRUFTT04sXG4gXHRfX1JUQV9NQVhcbiB9O1xuIFxuQEAgLTQwNyw2ICYjNDM7NDA4LDMwIEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XG4gI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgJiM0MzsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBydG1zZykpKSlcbiAjZGVmaW5lIFJUTV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IHJ0bXNnKSlcbiBcbiYjNDM7LyogUlRBX0RFTF9SRUFTT046IHdoeSB0aGUga2VybmVsIGRlbGV0ZWQgdGhlIHJvdXRlLiB1MzIuXG4mIzQzOyAqIEVtaXR0ZWQgb25seSBvbiBSVE1fREVMUk9VVEUgbm90aWZpY2F0aW9ucywgYW5kIG9ubHkgd2hlbiB0aGUgZGVsZXRpb25cbiYjNDM7ICogcGF0aCByZWNvcmRzIGEgY2F1c2UuIEFic2VuY2UgbWVhbnMgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhXG4mIzQzOyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3RcbiYjNDM7ICogdHJlYXQgXCYjMzQ7YWJzZW50XCYjMzQ7IGFuZCBcJiMzNDt1bnNwZWNcJiMzNDsgaWRlbnRpY2FsbHkuIE5ldyBjYXVzZXMgbWF5IGJlIGFwcGVuZGVkLlxuJiM0MzsgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgYXR0cmlidXRlIGlzIG5vdGlmaWNhdGlvbi1vbmx5OiB0aGUga2VybmVsIHJlamVjdHMgaXQgaW5cbiYjNDM7ICogcmVxdWVzdHMsIHNvIGEgbm90aWZpY2F0aW9uIG11c3Qgbm90IGJlIGVjaG9lZCBiYWNrIHZlcmJhdGltLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgdmFsdWUgc3BhY2UgaXMgZmFtaWx5LWFnbm9zdGljOiBhIHZhbHVlIG11c3QgbmV2ZXIgYmVcbiYjNDM7ICogcmVpbnRlcnByZXRlZCBwZXIgYWRkcmVzcyBmYW1pbHkuIEEgY2F1c2UgdGhhdCBvbmx5IG9uZSBmYW1pbHkgY2FuXG4mIzQzOyAqIHByb2R1Y2Ugc3RpbGwgZ2V0cyBpdHMgb3duIHZhbHVlIHJhdGhlciB0aGFuIHJldXNpbmcgYW5vdGhlclxuJiM0MzsgKiBmYW1pbHkmIzM5O3MuXG4mIzQzOyAqL1xuJiM0MztlbnVtIHJ0X2RlbF9yZWFzb24ge1xuJiM0MztcdFJUX0RFTF9SRUFTT05fVU5TUEVDLFx0XHQvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi9cbiYjNDM7XHRSVF9ERUxfUkVBU09OX0VYUElSRUQsXHRcdC8qIFJURl9FWFBJUkVTIGxpZmV0aW1lIHJhbiBvdXQgKEdDKSAqL1xuJiM0MztcdFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOLFx0LyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqL1xuJiM0MztcdF9fUlRfREVMX1JFQVNPTl9NQVhcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUlRfREVMX1JFQVNPTl9NQVggKF9fUlRfREVMX1JFQVNPTl9NQVggLSAxKVxuJiM0MztcbiAvKiBSVE1fTVVMVElQQVRIIC0tLSBhcnJheSBvZiBzdHJ1Y3QgcnRuZXh0aG9wLlxuICAqXG4gICogXCYjMzQ7c3RydWN0IHJ0bmV4dGhvcFwmIzM0OyBkZXNjcmliZXMgYWxsIG5lY2Vzc2FyeSBuZXh0aG9wIGluZm9ybWF0aW9uLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5pbmRleCBmNmZhMjcxNWI0NTBiLi45ZDg5YmU3ZTA1NDRiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xuQEAgLTI4NzQsNyAmIzQzOzI4NzQsOCBAQCB2b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcbiBcdFx0aWYgKHJ0KSB7XG4gXHRcdFx0LyogQXV0b2NvbmYgcHJlZml4IHJvdXRlICovXG4gXHRcdFx0aWYgKHZhbGlkX2xmdCA9PSAwKSB7XG4tXHRcdFx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbiYjNDM7XHRcdFx0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LFxuJiM0MztcdFx0XHRcdFx0XHQgIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbiBcdFx0XHRcdHJ0ID0gTlVMTDtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuY1xuaW5kZXggZTlmYzY5MmQ0ZjNiMi4uM2UzODJiYTE1NzNlMyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X2ZpYi5jXG5AQCAtMTk2Nyw3ICYjNDM7MTk2Nyw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcbiB9XG4gXG4gc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbi1cdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdCAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBmaWI2X2luZm8gKmxlYWYsICpyZXBsYWNlX3J0ID0gTlVMTDtcbiBcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcbkBAIC0yMDU2LDEzICYjNDM7MjA1NywxNCBAQCBzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxuIFx0XHRcdGNhbGxfZmliNl9lbnRyeV9ub3RpZmllcnNfcmVwbGFjZShuZXQsIHJlcGxhY2VfcnQpO1xuIFx0fVxuIFx0aWYgKCFpbmZvLVx1MDAzZXNraXBfbm90aWZ5KVxuLVx0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCk7XG4mIzQzO1x0XHRpbmV0Nl9ydF9kZWxfbm90aWZ5KHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcbiBcdGZpYjZfaW5mb19yZWxlYXNlKHJ0KTtcbiB9XG4gXG4gLyogTmVlZCB0byBvd24gdGFibGUtXHUwMDNldGI2X2xvY2sgKi9cbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuJiM0MztpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuJiM0MztcdCAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwO1xuQEAgLTIwOTEsNyAmIzQzOzIwOTMsNyBAQCBpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFx0XHRpZiAocnQgPT0gY3VyKSB7XG4gXHRcdFx0aWYgKGZpYjZfcmVxdWlyZXNfc3JjKGN1cikpXG4gXHRcdFx0XHRmaWI2X3JvdXRlc19yZXF1aXJlX3NyY19kZWMoaW5mby1cdTAwM2VubF9uZXQpO1xuLVx0XHRcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvKTtcbiYjNDM7XHRcdFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHRcdHJ0cF9uZXh0ID0gXHUwMDI2Y3VyLVx1MDAzZWZpYjZfbmV4dDtcbkBAIC0yMjUzLDcgJiM0MzsyMjU1LDcgQEAgc3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxuIFx0XHRyZXMgPSBjLVx1MDAzZWZ1bmMocnQsIGMtXHUwMDNlYXJnKTtcbiBcdFx0aWYgKHJlcyA9PSAtMSkge1xuIFx0XHRcdHctXHUwMDNlbGVhZiA9IHJ0O1xuLVx0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRcdFx0cmVzID0gZmliNl9kZWwocnQsIFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRpZiAocmVzKSB7XG4gI2lmIFJUNl9ERUJVRyBcdTAwM2U9IDJcbiBcdFx0XHRcdHByX2RlYnVnKFwmIzM0OyVzOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcXG5cJiMzNDssXG5AQCAtMjQwMSw3ICYjNDM7MjQwMyw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LFxuIFxuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgbiwgXHUwMDI2dGI2LVx1MDAzZXRiNl9nY19obGlzdCwgZ2NfbGluaylcbiBcdFx0aWYgKGZpYjZfYWdlKHJ0LCBnY19hcmdzKSA9PSAtMSlcbi1cdFx0XHRmaWI2X2RlbChydCwgXHUwMDI2aW5mbyk7XG4mIzQzO1x0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX0VYUElSRUQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcbmluZGV4IGZlMzZiM2Y1MTI4NTAuLjExMTFjNGViYzYxZDkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZGlzYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZGlzYy5jXG5AQCAtMTM2MSw3ICYjNDM7MTM2MSw5IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRkZWZydHJfdXNyX21ldHJpYyA9IGluNl9kZXYtXHUwMDNlY25mLnJhX2RlZnJ0cl9tZXRyaWM7XG4gXHQvKiBkZWxldGUgdGhlIHJvdXRlIGlmIGxpZmV0aW1lIGlzIDAgb3IgaWYgbWV0cmljIG5lZWRzIGNoYW5nZSAqL1xuIFx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAobGlmZXRpbWUgPT0gMCB8fCBydC1cdTAwM2VmaWI2X21ldHJpYyAhPSBkZWZydHJfdXNyX21ldHJpYykpIHtcbi1cdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4mIzQzO1x0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LFxuJiM0MztcdFx0XHRcdCAgbGlmZXRpbWUgPT0gMCA/IFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOIDpcbiYjNDM7XHRcdFx0XHRcdFx0ICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdHJ0ID0gTlVMTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggZmM0MmQ2N2U1ODIyNi4uMTcwNDM1OWQzOTYwZCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC0xMTEsNyAmIzQzOzExMSw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuJiM0MztcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4gc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcbkBAIC0xMDIwLDcgJiM0MzsxMDIwLDcgQEAgaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcbiBcdFx0XHRcdFx0Z3dhZGRyLCBkZXYpO1xuIFxuIFx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAhbGlmZXRpbWUpIHtcbi1cdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4mIzQzO1x0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG4gXHRcdHJ0ID0gTlVMTDtcbiBcdH1cbiBcbkBAIC0zOTczLDcgJiM0MzszOTczLDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiYjNDM7c3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuJiM0MztcdFx0XHRlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTtcbkBAIC0zOTg2LDcgJiM0MzszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFxuIFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbiYjNDM7XHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gXG4gb3V0OlxuQEAgLTQwMDEsNyAmIzQzOzQwMDIsMTUgQEAgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcbiBcdFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnlcbiBcdH07XG4gXG4tXHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuJiM0MztcdFx0ICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmxfaW5mbyBpbmZvID0geyAubmxfbmV0ID0gbmV0IH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmluZm8sIGRlbF9yZWFzb24pO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXG5AQCAtNDAyOCw3ICYjNDM7NDAzNyw4IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcbiBcdFx0XHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsXG4gXHRcdFx0XHRcdCAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLFxuLVx0XHRcdFx0XHQgIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIDApIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdFx0XHQgIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIDAsXG4mIzQzO1x0XHRcdFx0XHQgIFJUX0RFTF9SRUFTT05fVU5TUEVDKSBcdTAwM2MgMCkge1xuIFx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0XHRza2IgPSBOVUxMO1xuIFx0XHRcdH0gZWxzZVxuQEAgLTQwNjQsMTMgJiM0Mzs0MDc0LDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZyxcbiBcdFx0XHRcdFx0IFx1MDAyNnJ0LVx1MDAzZWZpYjZfc2libGluZ3MsXG4gXHRcdFx0XHRcdCBmaWI2X3NpYmxpbmdzKSB7XG4tXHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbyk7XG4mIzQzO1x0XHRcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7XG4mIzQzO1x0ZXJyID0gZmliNl9kZWwocnQsIGluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBvdXRfdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGFibGUtXHUwMDNldGI2X2xvY2spO1xuIG91dF9wdXQ6XG5AQCAtNDE5Niw3ICYjNDM7NDIwNiw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcbiBcdFx0XHRcdGlmICghZmliNl9pbmZvX2hvbGRfc2FmZShydCkpXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdFx0ZXJyID0gIF9faXA2X2RlbF9ydChydCwgXHUwMDI2Y2ZnLVx1MDAzZWZjX25saW5mbyk7XG4mIzQzO1x0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvLFxuJiM0MztcdFx0XHRcdFx0XHQgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGNmZy1cdTAwM2VmY19uaF9pZClcbkBAIC00MjE1LDcgJiM0Mzs0MjI2LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFxuIFx0XHRcdC8qIGlmIGdhdGV3YXkgd2FzIHNwZWNpZmllZCBvbmx5IGRlbGV0ZSB0aGUgb25lIGhvcCAqL1xuIFx0XHRcdGlmIChjZmctXHUwMDNlZmNfZmxhZ3MgXHUwMDI2IFJURl9HQVRFV0FZKVxuLVx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnRfc2libGluZ3MocnQsIGNmZyk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtNTczOSw2ICYjNDM7NTc1MSw3IEBAIHN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxuIFx0ICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpXG4gXHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoVENQX0NBX05BTUVfTUFYKSAvKiBSVEFYX0NDX0FMR08gKi9cbiBcdCAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZSgxKSAvKiBSVEFfUFJFRiAqL1xuJiM0MztcdCAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfREVMX1JFQVNPTiAqL1xuIFx0ICAgICAgICYjNDM7IG5leHRob3BfbGVuO1xuIH1cbiBcbkBAIC01Nzc1LDcgJiM0Mzs1Nzg4LDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbiBcdFx0XHQgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYyxcbiBcdFx0XHQgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4tXHRcdFx0IHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7XHRcdFx0IHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IHJ0Nl9pbmZvICpydDYgPSBkc3RfcnQ2X2luZm8oZHN0KTtcbiBcdHN0cnVjdCBydDZrZXkgKnJ0Nl9kc3QsICpydDZfc3JjO1xuQEAgLTU5NTQsNiAmIzQzOzU5NjcsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCBkc3QsIDAsIGV4cGlyZXMsIGRzdCA/IGRzdC1cdTAwM2VlcnJvciA6IDApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiYjNDM7XHRpZiAoZGVsX3JlYXNvbiAhPSBSVF9ERUxfUkVBU09OX1VOU1BFQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbmxhX3B1dF91MzIoc2tiLCBSVEFfREVMX1JFQVNPTiwgZGVsX3JlYXNvbikpXG4mIzQzO1x0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjNDM7XG4gXHRpZiAobmxhX3B1dF91OChza2IsIFJUQV9QUkVGLCBJUFY2X0VYVFJBQ1RfUFJFRihydDZfZmxhZ3MpKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG5AQCAtNjA1NSw3ICYjNDM7NjA3Miw4IEBAIHN0YXRpYyBpbnQgcnQ2X25oX2R1bXBfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9uaCAqbmgsIHZvaWQgKmFyZylcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNnJ0Nl9leC1cdTAwM2VydDZpLVx1MDAzZWRzdCwgTlVMTCwgTlVMTCwgMCxcbiBcdFx0XHRcdFx0ICAgIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoZHVtcC1cdTAwM2VjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICAgIGR1bXAtXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgdy1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRcdFx0XHQgICAgZHVtcC1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCB3LVx1MDAzZWZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC02MTAzLDcgJiM0Mzs2MTIxLDggQEAgaW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApXG4gXHRcdFx0aWYgKHJ0Nl9maWxsX25vZGUobmV0LCBhcmctXHUwMDNlc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCxcbiBcdFx0XHRcdFx0ICAwLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgTkVUTElOS19DQihhcmctXHUwMDNlY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgYXJnLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzKSkge1xuJiM0MztcdFx0XHRcdFx0ICBhcmctXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHQgIFJUX0RFTF9SRUFTT05fVU5TUEVDKSkge1xuIFx0XHRcdFx0cmV0dXJuIDA7XG4gXHRcdFx0fVxuIFx0XHRcdGNvdW50JiM0MzsmIzQzOztcbkBAIC02MzM2LDEyICYjNDM7NjM1NSwxNCBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLFxuIFx0XHRcdFx0XHQgICAgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4mIzQzO1x0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBkc3QsIFx1MDAyNmZsNi5kYWRkcixcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4mIzQzO1x0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRlcnIgPSAtRU5FVFVOUkVBQ0g7XG4gXHR9XG5AQCAtNjM1Nyw4ICYjNDM7NjM3OCw5IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tXHRcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcbiYjNDM7c3RhdGljIHZvaWQgX19pbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsXG4mIzQzO1x0XHRcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbkBAIC02Mzc3LDcgJiM0Mzs2Mzk5LDcgQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXG4tXHRcdFx0ICAgIGV2ZW50LCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MpO1xuJiM0MztcdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncywgZGVsX3JlYXNvbik7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBuZWVkZWQgc3BhY2UgZ3JldyB1bmRlciB1cy4gKi9cbkBAIC02Mzk4LDYgJiM0Mzs2NDIwLDE4IEBAIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuIFx0cnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X1JPVVRFLCBlcnIpO1xuIH1cbiBcbiYjNDM7dm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0XHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRfX2luZXQ2X3J0X25vdGlmeShldmVudCwgcnQsIGluZm8sIG5sbV9mbGFncywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuJiM0MztcdFx0XHQgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4mIzQzO3tcbiYjNDM7XHRfX2luZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwLCBkZWxfcmVhc29uKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHRcdCAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiB7XG5AQCAtNjQxMCw3ICYjNDM7NjQ0NCw4IEBAIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgUlRNX05FV1JPVVRFLCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFKTtcbiYjNDM7XHRcdFx0ICAgIFJUTV9ORVdST1VURSwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgTkxNX0ZfUkVQTEFDRSxcbiYjNDM7XHRcdFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbkBAIC02NDYzLDcgJiM0Mzs2NDk4LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuIFx0fVxuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsXG4tXHRcdFx0ICAgIDAsIDApO1xuJiM0MztcdFx0XHQgICAgMCwgMCwgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqL1xuIFx0XHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG5pbmRleCBlNThiZGJkYzU4ZWVhLi4zNDkzNTg4NmI2YWRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuQEAgLTE3LDcgJiM0MzsxNyw3IEBAIGZyb20gLnV0aWxzIGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgZmRfcmVhZF90aW1lb3V0LCBjbWQsIGJrZywgZGVmZXIsIFxcXG4gICAgIHdhaXRfZmlsZSwgdG9vbCwgdGNcbiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHNcbiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcXFxuLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5XG4mIzQzOyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIC55bmwgaW1wb3J0IE5ldHNoYXBlckZhbWlseSwgRGV2bGlua0ZhbWlseSwgUFNQRmFtaWx5LCBOZXRsaW5rXG4gXG4gX19hbGxfXyA9IFtcJiMzNDtLU1JDXCYjMzQ7LFxuQEAgLTM0LDQgJiM0MzszNCw0IEBAIF9fYWxsX18gPSBbXCYjMzQ7S1NSQ1wmIzM0OyxcbiAgICAgICAgICAgIFwmIzM0O05ldGRldlNpbVwmIzM0OywgXCYjMzQ7TmV0ZGV2U2ltRGV2XCYjMzQ7LFxuICAgICAgICAgICAgXCYjMzQ7TmV0c2hhcGVyRmFtaWx5XCYjMzQ7LCBcJiMzNDtEZXZsaW5rRmFtaWx5XCYjMzQ7LCBcJiMzNDtQU1BGYW1pbHlcJiMzNDssIFwmIzM0O05sRXJyb3JcJiMzNDssXG4gICAgICAgICAgICBcJiMzNDtZbmxGYW1pbHlcJiMzNDssIFwmIzM0O0V0aHRvb2xGYW1pbHlcJiMzNDssIFwmIzM0O05ldGRldkZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEZhbWlseVwmIzM0Oyxcbi0gICAgICAgICAgIFwmIzM0O05sY3RybEZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEFkZHJGYW1pbHlcJiMzNDssIFwmIzM0O05ldGxpbmtcJiMzNDtdXG4mIzQzOyAgICAgICAgICAgXCYjMzQ7TmxjdHJsRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OywgXCYjMzQ7UnRubFJvdXRlRmFtaWx5XCYjMzQ7LCBcJiMzNDtOZXRsaW5rXCYjMzQ7XVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbmluZGV4IDJlNTY3MDYyYWE2Y2MuLjA4ZGVmZjc1NmYyOWIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbkBAIC0yOSw3ICYjNDM7MjksNyBAQCBleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvciBhcyBlOlxuIFxuIF9fYWxsX18gPSBbXG4gICAgIFwmIzM0O05sRXJyb3JcJiMzNDssIFwmIzM0O05sUG9saWN5XCYjMzQ7LCBcJiMzNDtOZXRsaW5rXCYjMzQ7LCBcJiMzNDtZbmxGYW1pbHlcJiMzNDssIFwmIzM0O1NQRUNfUEFUSFwmIzM0Oyxcbi0gICAgXCYjMzQ7RXRodG9vbEZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEFkZHJGYW1pbHlcJiMzNDssXG4mIzQzOyAgICBcJiMzNDtFdGh0b29sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OywgXCYjMzQ7UnRubFJvdXRlRmFtaWx5XCYjMzQ7LFxuICAgICBcJiMzNDtOZXRkZXZGYW1pbHlcJiMzNDssIFwmIzM0O05ldHNoYXBlckZhbWlseVwmIzM0OywgXCYjMzQ7TmxjdHJsRmFtaWx5XCYjMzQ7LCBcJiMzNDtEZXZsaW5rRmFtaWx5XCYjMzQ7LFxuICAgICBcJiMzNDtQU1BGYW1pbHlcJiMzNDssXG4gXVxuQEAgLTU0LDYgJiM0Mzs1NCwxMSBAQCBjbGFzcyBSdG5sQWRkckZhbWlseShZbmxGYW1pbHkpOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O3J0LWFkZHIueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPSYjMzk7JiMzOTssIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXG4gXG4mIzQzO2NsYXNzIFJ0bmxSb3V0ZUZhbWlseShZbmxGYW1pbHkpOlxuJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbiYjNDM7ICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7cnQtcm91dGUueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0mIzM5OyYjMzk7LCByZWN2X3NpemU9cmVjdl9zaXplKVxuJiM0MztcbiBjbGFzcyBOZXRkZXZGYW1pbHkoWW5sRmFtaWx5KTpcbiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJiMzOTtuZXRkZXYueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggMGM2N2M3YzAwZDg0MS4uNWNjM2ViZGNmMDhkZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbkBAIC01LDcgJiM0Mzs1LDkgQEAgaW1wb3J0IHNvY2tldFxuIGltcG9ydCBzdHJ1Y3RcbiBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcbi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseVxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgZGVmZXJcbiBcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtcXHhlMFxceDAwXFx4MDBcXHgwMSYjMzk7XG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1xceGVmXFx4MDFcXHgwMVxceDAxJiMzOTtcbkBAIC0xMzQsOCAmIzQzOzEzNiwxODkgQEAgZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXHUwMDNlIE5vbmU6XG4gICAgIGtzZnRfdHJ1ZShmXCYjMzQ7aW5ldCB7aWZuYW1lfSBmb3J3YXJkaW5nIG9uXCYjMzQ7IGluIGNtZF9vYmouc3Rkb3V0LFxuICAgICAgICAgICAgICAgZlwmIzM0O05vICYjMzk7Zm9yd2FyZGluZyBvbiYjMzk7IG5vdGlmaWNpYXRpb24gZm91bmQgZm9yIGludGVyZmFjZSB7aWZuYW1lfVwmIzM0OylcbiBcbiYjNDM7ZGVmIF9ydG5sX3JvdXRlX3N1YnNjcmliZShucyk6XG4mIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4mIzQzOyAgICAgICAgcnRubCA9IFJ0bmxSb3V0ZUZhbWlseSgpXG4mIzQzOyAgICBkZWZlcihydG5sLmNsb3NlKVxuJiM0MzsgICAgcnRubC5udGZfc3Vic2NyaWJlKFwmIzM0O3J0bmxncnAtaXB2Ni1yb3V0ZVwmIzM0OylcbiYjNDM7ICAgIHJldHVybiBydG5sXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF93YWl0X3JvdXRlX250ZihydG5sLCBuYW1lLCBkc3RfbGVuLCBkc3Q9Tm9uZSwgZGVhZGxpbmU9MTApOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UmV0dXJuIHRoZSBhdHRycyBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgbm90aWZpY2F0aW9uLCBOb25lIG9uIHRpbWVvdXQuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKTpcbiYjNDM7ICAgICAgICBpZiBtc2dbJiMzOTtuYW1lJiMzOTtdICE9IG5hbWU6XG4mIzQzOyAgICAgICAgICAgIGNvbnRpbnVlXG4mIzQzOyAgICAgICAgYXR0cnMgPSBtc2dbJiMzOTttc2cmIzM5O11cbiYjNDM7ICAgICAgICBpZiBhdHRyc1smIzM5O3J0bS1kc3QtbGVuJiMzOTtdICE9IGRzdF9sZW46XG4mIzQzOyAgICAgICAgICAgIGNvbnRpbnVlXG4mIzQzOyAgICAgICAgaWYgZHN0IGlzIG5vdCBOb25lIGFuZCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykgIT0gZHN0OlxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIHJldHVybiBhdHRyc1xuJiM0MzsgICAgcmV0dXJuIE5vbmVcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtHYXRoZXIgYXR0cnMgb2YgbWF0Y2hpbmcgbm90aWZpY2F0aW9ucywga2V5ZWQgYnkgKGRzdF9sZW4sIGRzdCkuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgc2VlbiA9IHt9XG4mIzQzOyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxuJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZTpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICBhdHRycyA9IG1zZ1smIzM5O21zZyYjMzk7XVxuJiM0MzsgICAgICAgIGtleSA9IChhdHRyc1smIzM5O3J0bS1kc3QtbGVuJiMzOTtdLCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykpXG4mIzQzOyAgICAgICAgaWYga2V5IGluIHdhbnQ6XG4mIzQzOyAgICAgICAgICAgIHNlZW5ba2V5XSA9IGF0dHJzXG4mIzQzOyAgICAgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XG4mIzQzOyAgICAgICAgICAgICAgICBicmVha1xuJiM0MzsgICAgcmV0dXJuIHNlZW5cbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3dyaXRlX2lwdjZfc3lzY3RsKG5hbWUsIHZhbHVlKTpcbiYjNDM7ICAgIHdpdGggb3BlbihmXCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY2L3tuYW1lfVwmIzM0OywgXCYjMzQ7d1wmIzM0OykgYXMgZjpcbiYjNDM7ICAgICAgICBmLndyaXRlKGZcJiMzNDt7dmFsdWV9XFxuXCYjMzQ7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCgpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O0FuIGV4cGlyZWQgcm91dGUgcmVwb3J0cyBSVEFfREVMX1JFQVNPTiA9PSBleHBpcmVkLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbiYjNDM7ICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxuJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcbiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwmIzM0O3JvdXRlL2djX2ludGVydmFsXCYjMzQ7LCAyKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcJiMzNDssIG5zPXN0cihucykpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7bGluayBzZXQgZGV2IGR1bW15MSB1cFwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDstNiByb3V0ZSBhZGQgMjAwMTpkYjg6Mjo6LzY0IGRldiBkdW1teTEgZXhwaXJlcyAyXCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MztcbiYjNDM7ICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAmIzM5O2RlbHJvdXRlLW50ZiYjMzk7LCA2NCwgJiMzOTsyMDAxOmRiODoyOjomIzM5OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZT0xNSlcbiYjNDM7ICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBcJiMzNDtubyBSVE1fREVMUk9VVEUgZm9yIHRoZSBleHBpcmVkIHJvdXRlXCYjMzQ7KVxuJiM0MzsgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgmIzM5O2RlbC1yZWFzb24mIzM5OyksICYjMzk7ZXhwaXJlZCYjMzk7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCBsaWZldGltZSwgcmlvPU5vbmUsIHBpbz1Ob25lKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1RoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgIyB0eXBlLCBjb2RlLCBja3N1bSwgaG9wIGxpbWl0LCBmbGFncywgcm91dGVyIGxpZmV0aW1lLFxuJiM0MzsgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lclxuJiM0MzsgICAgcmEgPSBzdHJ1Y3QucGFjaygmIzM5OyFCQkhCQkhJSSYjMzk7LCAxMzQsIDAsIDAsIDY0LCAwLCBsaWZldGltZSwgMCwgMClcbiYjNDM7ICAgIGlmIHJpbyBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICBwcmVmaXgsIHBsZW4sIHJpb19saWZldGltZSA9IHJpb1xuJiM0MzsgICAgICAgICMgUkZDIDQxOTEgcm91dGUgaW5mb3JtYXRpb24gb3B0aW9uLCAvNjQgcHJlZml4ICg4IGJ5dGVzKVxuJiM0MzsgICAgICAgIHJhICYjNDM7PSBzdHJ1Y3QucGFjaygmIzM5OyFCQkJCSSYjMzk7LCAyNCwgMiwgcGxlbiwgMCwgcmlvX2xpZmV0aW1lKVxuJiM0MzsgICAgICAgIHJhICYjNDM7PSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF1cbiYjNDM7ICAgIGlmIHBpbyBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICBwcmVmaXgsIHBsZW4sIHZhbGlkX2xmdCA9IHBpb1xuJiM0MzsgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcilcbiYjNDM7ICAgICAgICByYSAmIzQzOz0gc3RydWN0LnBhY2soJiMzOTshQkJCQklJSSYjMzk7LCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApXG4mIzQzOyAgICAgICAgcmEgJiM0Mzs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpXG4mIzQzOyAgICBzb2NrLnNlbmR0byhyYSwgKCYjMzk7ZmYwMjo6MSYjMzk7LCAwLCAwLCBpZmluZGV4KSlcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6XG4mIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcbiYjNDM7ICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpXG4mIzQzOyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpXG4mIzQzOyAgICAgICAgZGVmZXIoc29jay5jbG9zZSlcbiYjNDM7ICAgICAgICByZXR1cm4gc29jaywgc29ja2V0LmlmX25hbWV0b2luZGV4KGlmbmFtZSlcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgd2FudCwgKipyYV9vcHRzKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgU2VuZGluZyBmYWlscyB3aXRoIEVBRERSTk9UQVZBSUwgd2hpbGUgdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsXG4mIzQzOyAgICBhZGRyZXNzIGlzIHN0aWxsIHRlbnRhdGl2ZS4gYWRkcmNvbmZfZGFkX3N0YXJ0KCkgb25seSBxdWV1ZXNcbiYjNDM7ICAgIGFkZHJjb25mX2RhZF93b3JrKCksIGFuZCBJRkFfRl9URU5UQVRJVkUgaXMgY2xlYXJlZCB3aGVuIHRoYXQgd29ya1xuJiM0MzsgICAgaXRlbSBydW5zLCBzbyByZXRyeSB1bnRpbCBpdCBkb2VzLlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgc2VlbiA9IHt9XG4mIzQzOyAgICBmb3IgXyBpbiByYW5nZSgxMCk6XG4mIzQzOyAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAqKnJhX29wdHMpXG4mIzQzOyAgICAgICAgZXhjZXB0IE9TRXJyb3I6XG4mIzQzOyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKVxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIHNlZW4udXBkYXRlKF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJiMzOTtuZXdyb3V0ZS1udGYmIzM5OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZXQoc2Vlbi5rZXlzKCkpLCBkZWFkbGluZT0yKSlcbiYjNDM7ICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxuJiM0MzsgICAgICAgICAgICBicmVha1xuJiM0MzsgICAgcmV0dXJuIHNlZW5cbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgUm91dGVzIHdpdGhkcmF3biBieSBhIHplcm8tbGlmZXRpbWUgUkEgKHJvdXRlciBsaWZldGltZSwgUkZDIDQ4NjFcbiYjNDM7ICAgIFBJTywgUkZDIDQxOTEgUklPKSByZXBvcnQgUlRBX0RFTF9SRUFTT04gPT0gcmEtd2l0aGRyYXduLlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgIyAocnRtLWRzdC1sZW4sIGRzdCk7IHRoZSBkZWZhdWx0IHJvdXRlIGNhcnJpZXMgbm8gUlRBX0RTVFxuJiM0MzsgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7KSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7KX1cbiYjNDM7XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnNfaCwgTmV0TlMoKSBhcyBuc19yOlxuJiM0MzsgICAgICAgIGlwKGZcJiMzNDtsaW5rIGFkZCB2ZXRoMCBuZXRucyB7bnNfaH0gdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyB7bnNfcn1cJiMzNDspXG4mIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6XG4mIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcJiMzNDtjb25mL3ZldGgwL2FjY2VwdF9yYVwmIzM0OywgMilcbiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwmIzM0O2NvbmYvdmV0aDAvZm9yd2FyZGluZ1wmIzM0OywgMClcbiYjNDM7ICAgICAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW5cJiMzNDssIDY0KVxuJiM0MzsgICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6XG4mIzQzOyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O25vIENPTkZJR19JUFY2X1JPVVRFX0lORk9cJiMzNDspXG4mIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XG4mIzQzOyAgICAgICAgICAgICMgc2tpcCB0aGUgREFEIHByb2JlIHNvIHRoZSByb3V0ZXImIzM5O3MgbGluay1sb2NhbCBzb3VyY2Ugb25seVxuJiM0MzsgICAgICAgICAgICAjIGhhcyB0byB3YWl0IGZvciBhZGRyY29uZl9kYWRfd29yaygpIHRvIGNsZWFyIElGQV9GX1RFTlRBVElWRVxuJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCYjMzQ7Y29uZi92ZXRoMS9hY2NlcHRfZGFkXCYjMzQ7LCAwKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgc2V0IGRldiB2ZXRoMCB1cFwmIzM0OywgbnM9c3RyKG5zX2gpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgc2V0IGRldiB2ZXRoMSB1cFwmIzM0OywgbnM9c3RyKG5zX3IpKVxuJiM0MztcbiYjNDM7ICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zX2gpXG4mIzQzOyAgICAgICAgc29jaywgaWZpbmRleCA9IF9yYV9yb3V0ZXJfc29jayhuc19yLCBcJiMzNDt2ZXRoMVwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICAgICAgc2VlbiA9IF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHJvdXRlcyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWU9MTgwMCxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvPSgmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7LCA2NCwgNjAwKSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlvPSgmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7LCA2NCwgNjAwKSlcbiYjNDM7ICAgICAgICBrc2Z0X2VxKHNldChzZWVuKSwgcm91dGVzLCBcJiMzNDtub3QgYWxsIFJBIHJvdXRlcyB3ZXJlIGluc3RhbGxlZFwmIzM0OylcbiYjNDM7ICAgICAgICBpZiBzZXQoc2VlbikgIT0gcm91dGVzOlxuJiM0MzsgICAgICAgICAgICByZXR1cm5cbiYjNDM7XG4mIzQzOyAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgMCwgcmlvPSgmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7LCA2NCwgMCksXG4mIzQzOyAgICAgICAgICAgICAgICAgcGlvPSgmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7LCA2NCwgMCkpXG4mIzQzOyAgICAgICAgc2VlbiA9IF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5Oywgcm91dGVzKVxuJiM0MzsgICAgICAgIGZvciBrZXkgaW4gcm91dGVzOlxuJiM0MzsgICAgICAgICAgICBhdHRycyA9IHNlZW4uZ2V0KGtleSlcbiYjNDM7ICAgICAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgZlwmIzM0O25vIFJUTV9ERUxST1VURSBmb3Ige2tleX1cJiMzNDspXG4mIzQzOyAgICAgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJiMzOTtkZWwtcmVhc29uJiMzOTspLCAmIzM5O3JhLXdpdGhkcmF3biYjMzk7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBBIGRlbGV0aW9uIHBhdGggdGhhdCByZWNvcmRzIG5vIGNhdXNlIChoZXJlIGEgdXNlcnNwYWNlIHJlcXVlc3QpXG4mIzQzOyAgICBtdXN0IG5vdCBjYXJyeSBSVEFfREVMX1JFQVNPTiBhdCBhbGwuXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4mIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgc2V0IGRldiBkdW1teTEgdXBcJiMzNDssIG5zPXN0cihucykpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7LTYgcm91dGUgYWRkIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0Oy02IHJvdXRlIGRlbCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7XG4mIzQzOyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5OywgNjQsICYjMzk7MjAwMTpkYjg6MTo6JiMzOTspXG4mIzQzOyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXCYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciAyMDAxOmRiODoxOjovNjRcJiMzNDspXG4mIzQzOyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIGtzZnRfbm90X2luKCYjMzk7ZGVsLXJlYXNvbiYjMzk7LCBhdHRycyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7dXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uXCYjMzQ7KVxuJiM0MztcbiYjNDM7XG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4tICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSlcbiYjNDM7ICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LFxuJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxuJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXG4mIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXG4gICAgIGtzZnRfZXhpdCgpXG4gXG4gaWYgX19uYW1lX18gPT0gXCYjMzQ7X19tYWluX19cJiMzNDs6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDE6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURVJfUFJFRiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFX0lORk8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDssCiAgICAmIzM0O2ZpYjZfZGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgUlRBX0RFTF9SRUFTT04gZm9yIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucywgbW9kaWZ5aW5nIGNvcmUgSVB2NiByb3V0aW5nIGFuZCBuZXRsaW5rIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpcyByZWFjaGFibGUgdmlhIHJvdXRlIGV4cGlyYXRpb24sIHJvdXRlciBhZHZlcnRpc2VtZW50cywgYW5kIG1hbnVhbCByb3V0ZSBkZWxldGlvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YjQ0NWJkMDJmNGY4ODQ5N2ViZGFkOTE4Nzk4YjhjODNkMTk2YTkxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgOCAwMToyMDoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKaW5kZXggMzMxOTVkYjk2NzQ2Yy4uMjUzMDM3ZWE1MTc2YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKQEAgLTc4LDYgJiM0Mzs3OCwyNyBAQCBkZWZpbml0aW9uczoKICAgICAgIC0KICAgICAgICAgbmFtZTogcnRhLXVzZWQKICAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IGRlbC1yZWFzb24KJiM0MzsgICAgdHlwZTogZW51bQomIzQzOyAgICBuYW1lLXByZWZpeDogcnQtZGVsLXJlYXNvbi0KJiM0MzsgICAgZW51bS1uYW1lOiBydC1kZWwtcmVhc29uCiYjNDM7ICAgIGRvYzogfAomIzQzOyAgICAgIFdoeSB0aGUga2VybmVsIGRlbGV0ZWQgYSByb3V0ZS4gTmV3IGNhdXNlcyBtYXkgYmUgYXBwZW5kZWQuIFRoZQomIzQzOyAgICAgIHZhbHVlIHNwYWNlIGlzIGZhbWlseS1hZ25vc3RpYywgYSB2YWx1ZSBpcyBuZXZlciByZWludGVycHJldGVkCiYjNDM7ICAgICAgcGVyIGFkZHJlc3MgZmFtaWx5LgomIzQzOyAgICBlbnRyaWVzOgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHVuc3BlYwomIzQzOyAgICAgICAgZG9jOiBUaGUgZGVsZXRpb24gcGF0aCBkb2VzIG5vdCByZWNvcmQgYSBjYXVzZS4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBleHBpcmVkCiYjNDM7ICAgICAgICBkb2M6IFRoZSBSVEZfRVhQSVJFUyBsaWZldGltZSByYW4gb3V0IGFuZCB0aGUgcm91dGUgd2FzIGdhcmJhZ2UKJiM0MzsgICAgICAgICAgY29sbGVjdGVkLgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHJhLXdpdGhkcmF3bgomIzQzOyAgICAgICAgZG9jOiBBIFJvdXRlciBBZHZlcnRpc2VtZW50IHdpdGhkcmV3IHRoZSByb3V0ZSB3aXRoIGEgemVybwomIzQzOyAgICAgICAgICBsaWZldGltZS4KIAogYXR0cmlidXRlLXNldHM6CiAgIC0KQEAgLTE4NSw2ICYjNDM7MjA2LDE4IEBAIGF0dHJpYnV0ZS1zZXRzOgogICAgICAgICB0eXBlOiB1MzIKICAgICAgICAgYnl0ZS1vcmRlcjogYmlnLWVuZGlhbgogICAgICAgICBkaXNwbGF5LWhpbnQ6IGhleAomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGRlbC1yZWFzb24KJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZW51bTogZGVsLXJlYXNvbgomIzQzOyAgICAgICAgZG9jOiB8CiYjNDM7ICAgICAgICAgIEVtaXR0ZWQgb25seSBvbiBSVE1fREVMUk9VVEUgbm90aWZpY2F0aW9ucywgYW5kIG9ubHkgd2hlbiB0aGUKJiM0MzsgICAgICAgICAgZGVsZXRpb24gcGF0aCByZWNvcmRzIGEgY2F1c2UuIEFuIGFic2VudCBhdHRyaWJ1dGUgbWVhbnMKJiM0MzsgICAgICAgICAgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdAomIzQzOyAgICAgICAgICByZWNvcmQgaXRzIGNhdXNlLCBjb25zdW1lcnMgbXVzdCB0cmVhdCBhYnNlbnQgYW5kIHVuc3BlYwomIzQzOyAgICAgICAgICBpZGVudGljYWxseS4gQ3VycmVudGx5IG9ubHkgSVB2NiBkZWxldGlvbiBwYXRocyByZWNvcmQgYQomIzQzOyAgICAgICAgICBjYXVzZS4gVGhlIGF0dHJpYnV0ZSBpcyBub3RpZmljYXRpb24tb25seSwgdGhlIGtlcm5lbCByZWplY3RzCiYjNDM7ICAgICAgICAgIGl0IGluIHJlcXVlc3RzLgogICAtCiAgICAgbmFtZTogbWV0cmljcwogICAgIG5hbWUtcHJlZml4OiBydGF4LQpAQCAtMjk5LDYgJiM0MzszMzIsNyBAQCBvcGVyYXRpb25zOgogICAgICAgICAgICAgLSBkcG9ydAogICAgICAgICAgICAgLSBuaC1pZAogICAgICAgICAgICAgLSBmbG93bGFiZWwKJiM0MzsgICAgICAgICAgICAtIGRlbC1yZWFzb24KICAgICAgIGR1bXA6CiAgICAgICAgIHJlcXVlc3Q6CiAgICAgICAgICAgdmFsdWU6IDI2CkBAIC0zMTMsNyAmIzQzOzM0NywzNSBAQCBvcGVyYXRpb25zOgogICAgICAgZG86CiAgICAgICAgIHJlcXVlc3Q6CiAgICAgICAgICAgdmFsdWU6IDI0Ci0gICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRycwomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOiAmYW1wO3JvdXRlLXJlcS1hdHRycwomIzQzOyAgICAgICAgICAgIC0gZHN0CiYjNDM7ICAgICAgICAgICAgLSBzcmMKJiM0MzsgICAgICAgICAgICAtIGlpZgomIzQzOyAgICAgICAgICAgIC0gb2lmCiYjNDM7ICAgICAgICAgICAgLSBnYXRld2F5CiYjNDM7ICAgICAgICAgICAgLSBwcmlvcml0eQomIzQzOyAgICAgICAgICAgIC0gcHJlZnNyYwomIzQzOyAgICAgICAgICAgIC0gbWV0cmljcwomIzQzOyAgICAgICAgICAgIC0gbXVsdGlwYXRoCiYjNDM7ICAgICAgICAgICAgLSBmbG93CiYjNDM7ICAgICAgICAgICAgLSBjYWNoZWluZm8KJiM0MzsgICAgICAgICAgICAtIHRhYmxlCiYjNDM7ICAgICAgICAgICAgLSBtYXJrCiYjNDM7ICAgICAgICAgICAgLSBtZmMtc3RhdHMKJiM0MzsgICAgICAgICAgICAtIHZpYQomIzQzOyAgICAgICAgICAgIC0gbmV3ZHN0CiYjNDM7ICAgICAgICAgICAgLSBwcmVmCiYjNDM7ICAgICAgICAgICAgLSBlbmNhcC10eXBlCiYjNDM7ICAgICAgICAgICAgLSBlbmNhcAomIzQzOyAgICAgICAgICAgIC0gZXhwaXJlcwomIzQzOyAgICAgICAgICAgIC0gcGFkCiYjNDM7ICAgICAgICAgICAgLSB1aWQKJiM0MzsgICAgICAgICAgICAtIHR0bC1wcm9wYWdhdGUKJiM0MzsgICAgICAgICAgICAtIGlwLXByb3RvCiYjNDM7ICAgICAgICAgICAgLSBzcG9ydAomIzQzOyAgICAgICAgICAgIC0gZHBvcnQKJiM0MzsgICAgICAgICAgICAtIG5oLWlkCiYjNDM7ICAgICAgICAgICAgLSBmbG93bGFiZWwKICAgICAtCiAgICAgICBuYW1lOiBkZWxyb3V0ZQogICAgICAgZG9jOiBEZWxldGUgYW4gZXhpc3Rpbmcgcm91dGUKQEAgLTMyMSw0ICYjNDM7MzgzLDIzIEBAIG9wZXJhdGlvbnM6CiAgICAgICBkbzoKICAgICAgICAgcmVxdWVzdDoKICAgICAgICAgICB2YWx1ZTogMjUKLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzCiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6ICpyb3V0ZS1yZXEtYXR0cnMKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZgomIzQzOyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS4KJiM0MzsgICAgICB2YWx1ZTogMjQKJiM0MzsgICAgICBub3RpZnk6IGdldHJvdXRlCiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBkZWxyb3V0ZS1udGYKJiM0MzsgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuCiYjNDM7ICAgICAgdmFsdWU6IDI1CiYjNDM7ICAgICAgbm90aWZ5OiBnZXRyb3V0ZQomIzQzOwomIzQzO21jYXN0LWdyb3VwczoKJiM0MzsgIGxpc3Q6CiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGUKJiM0MzsgICAgICB2YWx1ZTogNwomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlCiYjNDM7ICAgICAgdmFsdWU6IDExCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmgKaW5kZXggOWNkMjdlMWI5YjY5Mi4uMjMyMjg5YjQzOWMzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaApAQCAtNDY4LDcgJiM0Mzs0NjgsOCBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwKIAogaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCSAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7Ci1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTsKJiM0MztpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTsKIAogc3RhdGljIGlubGluZQogdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKQpAQCAtNTMyLDYgJiM0Mzs1MzMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwKICNlbmRpZgogdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiAJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0Mzt2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkJCSBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7CiAKIHZvaWQgZmliNl9hZ2VfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncywKIAkJCSB1bnNpZ25lZCBsb25nIG5vdyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCmluZGV4IDA5ZmZlMGYxM2NlNzUuLmNjMDQ1NzA1ODYyZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCkBAIC0xMjYsNiAmIzQzOzEyNiw4IEBAIGludCBpcHY2X3JvdXRlX2lvY3RsKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCwKIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsCiAJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIGludCBpcDZfaW5zX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpKTsKJiM0MztpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksCiYjNDM7CQkgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTsKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKaW5kZXggMjcyNjVmZDMxZTVmYy4uMzk4OGI1MWRiNTM5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaApAQCAtMzk5LDYgJiM0MzszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3QgewogCVJUQV9EUE9SVCwKIAlSVEFfTkhfSUQsCiAJUlRBX0ZMT1dMQUJFTCwKJiM0MzsJUlRBX0RFTF9SRUFTT04sCiAJX19SVEFfTUFYCiB9OwogCkBAIC00MDcsNiAmIzQzOzQwOCwzMCBAQCBlbnVtIHJ0YXR0cl90eXBlX3QgewogI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgJiM0MzsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBydG1zZykpKSkKICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKQogCiYjNDM7LyogUlRBX0RFTF9SRUFTT046IHdoeSB0aGUga2VybmVsIGRlbGV0ZWQgdGhlIHJvdXRlLiB1MzIuCiYjNDM7ICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvbgomIzQzOyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYQomIzQzOyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3QKJiM0MzsgKiB0cmVhdCAmIzM0O2Fic2VudCYjMzQ7IGFuZCAmIzM0O3Vuc3BlYyYjMzQ7IGlkZW50aWNhbGx5LiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC4KJiM0MzsgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLgomIzQzOyAqCiYjNDM7ICogVGhlIGF0dHJpYnV0ZSBpcyBub3RpZmljYXRpb24tb25seTogdGhlIGtlcm5lbCByZWplY3RzIGl0IGluCiYjNDM7ICogcmVxdWVzdHMsIHNvIGEgbm90aWZpY2F0aW9uIG11c3Qgbm90IGJlIGVjaG9lZCBiYWNrIHZlcmJhdGltLgomIzQzOyAqCiYjNDM7ICogVGhlIHZhbHVlIHNwYWNlIGlzIGZhbWlseS1hZ25vc3RpYzogYSB2YWx1ZSBtdXN0IG5ldmVyIGJlCiYjNDM7ICogcmVpbnRlcnByZXRlZCBwZXIgYWRkcmVzcyBmYW1pbHkuIEEgY2F1c2UgdGhhdCBvbmx5IG9uZSBmYW1pbHkgY2FuCiYjNDM7ICogcHJvZHVjZSBzdGlsbCBnZXRzIGl0cyBvd24gdmFsdWUgcmF0aGVyIHRoYW4gcmV1c2luZyBhbm90aGVyCiYjNDM7ICogZmFtaWx5JiMzOTtzLgomIzQzOyAqLwomIzQzO2VudW0gcnRfZGVsX3JlYXNvbiB7CiYjNDM7CVJUX0RFTF9SRUFTT05fVU5TUEVDLAkJLyogY2F1c2Ugbm90IHJlY29yZGVkICovCiYjNDM7CVJUX0RFTF9SRUFTT05fRVhQSVJFRCwJCS8qIFJURl9FWFBJUkVTIGxpZmV0aW1lIHJhbiBvdXQgKEdDKSAqLwomIzQzOwlSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiwJLyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqLwomIzQzOwlfX1JUX0RFTF9SRUFTT05fTUFYCiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIFJUX0RFTF9SRUFTT05fTUFYIChfX1JUX0RFTF9SRUFTT05fTUFYIC0gMSkKJiM0MzsKIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuCiAgKgogICogJiMzNDtzdHJ1Y3QgcnRuZXh0aG9wJiMzNDsgZGVzY3JpYmVzIGFsbCBuZWNlc3NhcnkgbmV4dGhvcCBpbmZvcm1hdGlvbiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IGY2ZmEyNzE1YjQ1MGIuLjlkODliZTdlMDU0NGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMjg3NCw3ICYjNDM7Mjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKQogCQlpZiAocnQpIHsKIAkJCS8qIEF1dG9jb25mIHByZWZpeCByb3V0ZSAqLwogCQkJaWYgKHZhbGlkX2xmdCA9PSAwKSB7Ci0JCQkJaXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7CiYjNDM7CQkJCWlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsCiYjNDM7CQkJCQkJICBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7CiAJCQkJcnQgPSBOVUxMOwogCQkJfSBlbHNlIHsKIAkJCQl0YWJsZSA9IHJ0LSZndDtmaWI2X3RhYmxlOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2ZpYi5jIGIvbmV0L2lwdjYvaXA2X2ZpYi5jCmluZGV4IGU5ZmM2OTJkNGYzYjIuLjNlMzgyYmExNTczZTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9maWIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfZmliLmMKQEAgLTE5NjcsNyAmIzQzOzE5NjcsOCBAQCBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsCiB9CiAKIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sCi0JCQkgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKJiM0MzsJCQkgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCQkgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgZmliNl9pbmZvICpsZWFmLCAqcmVwbGFjZV9ydCA9IE5VTEw7CiAJc3RydWN0IGZpYjZfd2Fsa2VyICp3OwpAQCAtMjA1NiwxMyAmIzQzOzIwNTcsMTQgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbiwKIAkJCWNhbGxfZmliNl9lbnRyeV9ub3RpZmllcnNfcmVwbGFjZShuZXQsIHJlcGxhY2VfcnQpOwogCX0KIAlpZiAoIWluZm8tJmd0O3NraXBfbm90aWZ5KQotCQlpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCk7CiYjNDM7CQlpbmV0Nl9ydF9kZWxfbm90aWZ5KHJ0LCBpbmZvLCBkZWxfcmVhc29uKTsKIAogCWZpYjZfaW5mb19yZWxlYXNlKHJ0KTsKIH0KIAogLyogTmVlZCB0byBvd24gdGFibGUtJmd0O3RiNl9sb2NrICovCi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQomIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiYjNDM7CSAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gaW5mby0mZ3Q7bmxfbmV0OwogCXN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHA7CkBAIC0yMDkxLDcgJiM0MzsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKIAkJaWYgKHJ0ID09IGN1cikgewogCQkJaWYgKGZpYjZfcmVxdWlyZXNfc3JjKGN1cikpCiAJCQkJZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tJmd0O25sX25ldCk7Ci0JCQlmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7CiYjNDM7CQkJZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJcnRwX25leHQgPSAmYW1wO2N1ci0mZ3Q7ZmliNl9uZXh0OwpAQCAtMjI1Myw3ICYjNDM7MjI1NSw3IEBAIHN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlciAqdykKIAkJcmVzID0gYy0mZ3Q7ZnVuYyhydCwgYy0mZ3Q7YXJnKTsKIAkJaWYgKHJlcyA9PSAtMSkgewogCQkJdy0mZ3Q7bGVhZiA9IHJ0OwotCQkJcmVzID0gZmliNl9kZWwocnQsICZhbXA7aW5mbyk7CiYjNDM7CQkJcmVzID0gZmliNl9kZWwocnQsICZhbXA7aW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJaWYgKHJlcykgewogI2lmIFJUNl9ERUJVRyAmZ3Q7PSAyCiAJCQkJcHJfZGVidWcoJiMzNDslczogZGVsIGZhaWxlZDogcnQ9JXBAJXAgZXJyPSVkXG4mIzM0OywKQEAgLTI0MDEsNyAmIzQzOzI0MDMsNyBAQCBzdGF0aWMgdm9pZCBmaWI2X2djX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwKIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIG4sICZhbXA7dGI2LSZndDt0YjZfZ2NfaGxpc3QsIGdjX2xpbmspCiAJCWlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpCi0JCQlmaWI2X2RlbChydCwgJmFtcDtpbmZvKTsKJiM0MzsJCQlmaWI2X2RlbChydCwgJmFtcDtpbmZvLCBSVF9ERUxfUkVBU09OX0VYUElSRUQpOwogfQogCiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuYwppbmRleCBmZTM2YjNmNTEyODUwLi4xMTExYzRlYmM2MWQ5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTEzNjEsNyAmIzQzOzEzNjEsOSBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi0mZ3Q7Y25mLnJhX2RlZnJ0cl9tZXRyaWM7CiAJLyogZGVsZXRlIHRoZSByb3V0ZSBpZiBsaWZldGltZSBpcyAwIG9yIGlmIG1ldHJpYyBuZWVkcyBjaGFuZ2UgKi8KIAlpZiAocnQgJmFtcDsmYW1wOyAobGlmZXRpbWUgPT0gMCB8fCBydC0mZ3Q7ZmliNl9tZXRyaWMgIT0gZGVmcnRyX3Vzcl9tZXRyaWMpKSB7Ci0JCWlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpOwomIzQzOwkJaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwKJiM0MzsJCQkJICBsaWZldGltZSA9PSAwID8gUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04gOgomIzQzOwkJCQkJCSAgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQlydCA9IE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCBmYzQyZDY3ZTU4MjI2Li4xNzA0MzU5ZDM5NjBkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTExMSw3ICYjNDM7MTExLDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAogCQkJIHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsCiAJCQkgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsCi0JCQkgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0MzsJCQkgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7CiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpOwpAQCAtMTAyMCw3ICYjNDM7MTAyMCw3IEBAIGludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sCiAJCQkJCWd3YWRkciwgZGV2KTsKIAogCWlmIChydCAmYW1wOyZhbXA7ICFsaWZldGltZSkgewotCQlpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTsKJiM0MzsJCWlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTsKIAkJcnQgPSBOVUxMOwogCX0KIApAQCAtMzk3Myw3ICYjNDM7Mzk3Myw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQomIzQzO3N0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCQllbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLSZndDtubF9uZXQ7CiAJc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlOwpAQCAtMzk4Niw3ICYjNDM7Mzk4Nyw3IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKIAogCXRhYmxlID0gcnQtJmd0O2ZpYjZfdGFibGU7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7dGFibGUtJmd0O3RiNl9sb2NrKTsKLQllcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7CiYjNDM7CWVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBkZWxfcmVhc29uKTsKIAlzcGluX3VubG9ja19iaCgmYW1wO3RhYmxlLSZndDt0YjZfbG9jayk7CiAKIG91dDoKQEAgLTQwMDEsNyAmIzQzOzQwMDIsMTUgQEAgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSkKIAkJLnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnkKIAl9OwogCi0JcmV0dXJuIF9faXA2X2RlbF9ydChydCwgJmFtcDtpbmZvKTsKJiM0MzsJcmV0dXJuIF9faXA2X2RlbF9ydChydCwgJmFtcDtpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAomIzQzOwkJICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmxfaW5mbyBpbmZvID0geyAubmxfbmV0ID0gbmV0IH07CiYjNDM7CiYjNDM7CXJldHVybiBfX2lwNl9kZWxfcnQocnQsICZhbXA7aW5mbywgZGVsX3JlYXNvbik7CiB9CiAKIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKQEAgLTQwMjgsNyAmIzQzOzQwMzcsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpCiAKIAkJCWlmIChydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwKIAkJCQkJICBOVUxMLCBOVUxMLCAwLCBSVE1fREVMUk9VVEUsCi0JCQkJCSAgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIDApICZsdDsgMCkgewomIzQzOwkJCQkJICBpbmZvLSZndDtwb3J0aWQsIHNlcSwgMCwKJiM0MzsJCQkJCSAgUlRfREVMX1JFQVNPTl9VTlNQRUMpICZsdDsgMCkgewogCQkJCWtmcmVlX3NrYihza2IpOwogCQkJCXNrYiA9IE5VTEw7CiAJCQl9IGVsc2UKQEAgLTQwNjQsMTMgJiM0Mzs0MDc0LDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZywKIAkJCQkJICZhbXA7cnQtJmd0O2ZpYjZfc2libGluZ3MsCiAJCQkJCSBmaWI2X3NpYmxpbmdzKSB7Ci0JCQllcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvKTsKJiM0MzsJCQllcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCX0KIAotCWVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTsKJiM0MzsJZXJyID0gZmliNl9kZWwocnQsIGluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YWJsZS0mZ3Q7dGI2X2xvY2spOwogb3V0X3B1dDoKQEAgLTQxOTYsNyAmIzQzOzQyMDYsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsCiAJCQkJaWYgKCFmaWI2X2luZm9faG9sZF9zYWZlKHJ0KSkKIAkJCQkJY29udGludWU7CiAKLQkJCQllcnIgPSAgX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2NmZy0mZ3Q7ZmNfbmxpbmZvKTsKJiM0MzsJCQkJZXJyID0gX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2NmZy0mZ3Q7ZmNfbmxpbmZvLAomIzQzOwkJCQkJCSAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChjZmctJmd0O2ZjX25oX2lkKQpAQCAtNDIxNSw3ICYjNDM7NDIyNiw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywKIAogCQkJLyogaWYgZ2F0ZXdheSB3YXMgc3BlY2lmaWVkIG9ubHkgZGVsZXRlIHRoZSBvbmUgaG9wICovCiAJCQlpZiAoY2ZnLSZndDtmY19mbGFncyAmYW1wOyBSVEZfR0FURVdBWSkKLQkJCQllcnIgPSBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8pOwomIzQzOwkJCQllcnIgPSBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8sCiYjNDM7CQkJCQkJICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJZWxzZQogCQkJCWVyciA9IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhydCwgY2ZnKTsKIAkJCWJyZWFrOwpAQCAtNTczOSw2ICYjNDM7NTc1MSw3IEBAIHN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKQogCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHJ0YV9jYWNoZWluZm8pKQogCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShUQ1BfQ0FfTkFNRV9NQVgpIC8qIFJUQVhfQ0NfQUxHTyAqLwogCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZSgxKSAvKiBSVEFfUFJFRiAqLwomIzQzOwkgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX0RFTF9SRUFTT04gKi8KIAkgICAgICAgJiM0MzsgbmV4dGhvcF9sZW47CiB9CiAKQEAgLTU3NzUsNyAmIzQzOzU3ODgsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCiAJCQkgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywKIAkJCSBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSwKLQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7CQkJIHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiB7CiAJc3RydWN0IHJ0Nl9pbmZvICpydDYgPSBkc3RfcnQ2X2luZm8oZHN0KTsKIAlzdHJ1Y3QgcnQ2a2V5ICpydDZfZHN0LCAqcnQ2X3NyYzsKQEAgLTU5NTQsNiAmIzQzOzU5NjcsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAocnRubF9wdXRfY2FjaGVpbmZvKHNrYiwgZHN0LCAwLCBleHBpcmVzLCBkc3QgPyBkc3QtJmd0O2Vycm9yIDogMCkgJmx0OyAwKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAomIzQzOwlpZiAoZGVsX3JlYXNvbiAhPSBSVF9ERUxfUkVBU09OX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIFJUQV9ERUxfUkVBU09OLCBkZWxfcmVhc29uKSkKJiM0MzsJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwomIzQzOwogCWlmIChubGFfcHV0X3U4KHNrYiwgUlRBX1BSRUYsIElQVjZfRVhUUkFDVF9QUkVGKHJ0Nl9mbGFncykpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIApAQCAtNjA1NSw3ICYjNDM7NjA3Miw4IEBAIHN0YXRpYyBpbnQgcnQ2X25oX2R1bXBfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9uaCAqbmgsIHZvaWQgKmFyZykKIAkJCQkJICAgICZhbXA7cnQ2X2V4LSZndDtydDZpLSZndDtkc3QsIE5VTEwsIE5VTEwsIDAsCiAJCQkJCSAgICBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgICBORVRMSU5LX0NCKGR1bXAtJmd0O2NiLSZndDtza2IpLnBvcnRpZCwKLQkJCQkJICAgIGR1bXAtJmd0O2NiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgdy0mZ3Q7ZmxhZ3MpOwomIzQzOwkJCQkJICAgIGR1bXAtJmd0O2NiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgdy0mZ3Q7ZmxhZ3MsCiYjNDM7CQkJCQkgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCkBAIC02MTAzLDcgJiM0Mzs2MTIxLDggQEAgaW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApCiAJCQlpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy0mZ3Q7c2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCQkJICAwLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgTkVUTElOS19DQihhcmctJmd0O2NiLSZndDtza2IpLnBvcnRpZCwKLQkJCQkJICBhcmctJmd0O2NiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgZmxhZ3MpKSB7CiYjNDM7CQkJCQkgIGFyZy0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCBmbGFncywKJiM0MzsJCQkJCSAgUlRfREVMX1JFQVNPTl9VTlNQRUMpKSB7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQljb3VudCYjNDM7JiM0Mzs7CkBAIC02MzM2LDEyICYjNDM7NjM1NSwxNCBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsCiAJCQkJCSAgICBpaWYsIFJUTV9ORVdST1VURSwKIAkJCQkJICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsCi0JCQkJCSAgICBubGgtJmd0O25sbXNnX3NlcSwgMCk7CiYjNDM7CQkJCQkgICAgbmxoLSZndDtubG1zZ19zZXEsIDAsCiYjNDM7CQkJCQkgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQllbHNlCiAJCQllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBkc3QsICZhbXA7Zmw2LmRhZGRyLAogCQkJCQkgICAgJmFtcDtmbDYuc2FkZHIsIGlpZiwgUlRNX05FV1JPVVRFLAogCQkJCQkgICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCwKLQkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwKTsKJiM0MzsJCQkJCSAgICBubGgtJmd0O25sbXNnX3NlcSwgMCwKJiM0MzsJCQkJCSAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJfSBlbHNlIHsKIAkJZXJyID0gLUVORVRVTlJFQUNIOwogCX0KQEAgLTYzNTcsOCAmIzQzOzYzNzgsOSBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKLQkJICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKQomIzQzO3N0YXRpYyB2b2lkIF9faW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsCiYjNDM7CQkJICAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsCiYjNDM7CQkJICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gaW5mby0mZ3Q7bmxfbmV0OwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC02Mzc3LDcgJiM0Mzs2Mzk5LDcgQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiAJCWdvdG8gZXJyb3V0OwogCiAJZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsCi0JCQkgICAgZXZlbnQsIGluZm8tJmd0O3BvcnRpZCwgc2VxLCBubG1fZmxhZ3MpOwomIzQzOwkJCSAgICBldmVudCwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIG5sbV9mbGFncywgZGVsX3JlYXNvbik7CiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCS8qIC1FTVNHU0laRSBpbXBsaWVzIG5lZWRlZCBzcGFjZSBncmV3IHVuZGVyIHVzLiAqLwpAQCAtNjM5OCw2ICYjNDM7NjQyMCwxOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKIAlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfUk9VVEUsIGVycik7CiB9CiAKJiM0Mzt2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCSAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncykKJiM0Mzt7CiYjNDM7CV9faW5ldDZfcnRfbm90aWZ5KGV2ZW50LCBydCwgaW5mbywgbmxtX2ZsYWdzLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiYjNDM7CQkJIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQomIzQzO3sKJiM0MzsJX19pbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCwgZGVsX3JlYXNvbik7CiYjNDM7fQomIzQzOwogdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCQkgICAgc3RydWN0IG5sX2luZm8gKmluZm8pCiB7CkBAIC02NDEwLDcgJiM0Mzs2NDQ0LDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCQlnb3RvIGVycm91dDsKIAogCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLAotCQkJICAgIFJUTV9ORVdST1VURSwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpOwomIzQzOwkJCSAgICBSVE1fTkVXUk9VVEUsIGluZm8tJmd0O3BvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLAomIzQzOwkJCSAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJLyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi8KIAkJV0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTsKQEAgLTY0NjMsNyAmIzQzOzY0OTgsNyBAQCB2b2lkIGZpYjZfaW5mb19od19mbGFnc19zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksCiAJfQogCiAJZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsCi0JCQkgICAgMCwgMCk7CiYjNDM7CQkJICAgIDAsIDAsIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQkvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqLwogCQlXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkKaW5kZXggZTU4YmRiZGM1OGVlYS4uMzQ5MzU4ODZiNmFkZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5CkBAIC0xNyw3ICYjNDM7MTcsNyBAQCBmcm9tIC51dGlscyBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIGZkX3JlYWRfdGltZW91dCwgY21kLCBia2csIGRlZmVyLCBcCiAgICAgd2FpdF9maWxlLCB0b29sLCB0YwogZnJvbSAuYnBmIGltcG9ydCBicGZfbWFwX3NldCwgYnBmX21hcF9kdW1wLCBicGZfcHJvZ19tYXBfaWRzCiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcCi0gICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseQomIzQzOyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHkKIGZyb20gLnlubCBpbXBvcnQgTmV0c2hhcGVyRmFtaWx5LCBEZXZsaW5rRmFtaWx5LCBQU1BGYW1pbHksIE5ldGxpbmsKIAogX19hbGxfXyA9IFsmIzM0O0tTUkMmIzM0OywKQEAgLTM0LDQgJiM0MzszNCw0IEBAIF9fYWxsX18gPSBbJiMzNDtLU1JDJiMzNDssCiAgICAgICAgICAgICYjMzQ7TmV0ZGV2U2ltJiMzNDssICYjMzQ7TmV0ZGV2U2ltRGV2JiMzNDssCiAgICAgICAgICAgICYjMzQ7TmV0c2hhcGVyRmFtaWx5JiMzNDssICYjMzQ7RGV2bGlua0ZhbWlseSYjMzQ7LCAmIzM0O1BTUEZhbWlseSYjMzQ7LCAmIzM0O05sRXJyb3ImIzM0OywKICAgICAgICAgICAgJiMzNDtZbmxGYW1pbHkmIzM0OywgJiMzNDtFdGh0b29sRmFtaWx5JiMzNDssICYjMzQ7TmV0ZGV2RmFtaWx5JiMzNDssICYjMzQ7UnRubEZhbWlseSYjMzQ7LAotICAgICAgICAgICAmIzM0O05sY3RybEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssICYjMzQ7TmV0bGluayYjMzQ7XQomIzQzOyAgICAgICAgICAgJiMzNDtObGN0cmxGYW1pbHkmIzM0OywgJiMzNDtSdG5sQWRkckZhbWlseSYjMzQ7LCAmIzM0O1J0bmxSb3V0ZUZhbWlseSYjMzQ7LCAmIzM0O05ldGxpbmsmIzM0O10KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkKaW5kZXggMmU1NjcwNjJhYTZjYy4uMDhkZWZmNzU2ZjI5YiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkKQEAgLTI5LDcgJiM0MzsyOSw3IEBAIGV4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm9yIGFzIGU6CiAKIF9fYWxsX18gPSBbCiAgICAgJiMzNDtObEVycm9yJiMzNDssICYjMzQ7TmxQb2xpY3kmIzM0OywgJiMzNDtOZXRsaW5rJiMzNDssICYjMzQ7WW5sRmFtaWx5JiMzNDssICYjMzQ7U1BFQ19QQVRIJiMzNDssCi0gICAgJiMzNDtFdGh0b29sRmFtaWx5JiMzNDssICYjMzQ7UnRubEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssCiYjNDM7ICAgICYjMzQ7RXRodG9vbEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxGYW1pbHkmIzM0OywgJiMzNDtSdG5sQWRkckZhbWlseSYjMzQ7LCAmIzM0O1J0bmxSb3V0ZUZhbWlseSYjMzQ7LAogICAgICYjMzQ7TmV0ZGV2RmFtaWx5JiMzNDssICYjMzQ7TmV0c2hhcGVyRmFtaWx5JiMzNDssICYjMzQ7TmxjdHJsRmFtaWx5JiMzNDssICYjMzQ7RGV2bGlua0ZhbWlseSYjMzQ7LAogICAgICYjMzQ7UFNQRmFtaWx5JiMzNDssCiBdCkBAIC01NCw2ICYjNDM7NTQsMTEgQEAgY2xhc3MgUnRubEFkZHJGYW1pbHkoWW5sRmFtaWx5KToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O3J0LWFkZHIueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JiMzOTsmIzM5OywgcmVjdl9zaXplPXJlY3Zfc2l6ZSkKIAomIzQzO2NsYXNzIFJ0bmxSb3V0ZUZhbWlseShZbmxGYW1pbHkpOgomIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOgomIzQzOyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O3J0LXJvdXRlLnlhbWwmIzM5OykpLmFzX3Bvc2l4KCksCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0mIzM5OyYjMzk7LCByZWN2X3NpemU9cmVjdl9zaXplKQomIzQzOwogY2xhc3MgTmV0ZGV2RmFtaWx5KFlubEZhbWlseSk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O25ldGRldi55YW1sJiMzOTspKS5hc19wb3NpeCgpLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKaW5kZXggMGM2N2M3YzAwZDg0MS4uNWNjM2ViZGNmMDhkZSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CkBAIC01LDcgJiM0Mzs1LDkgQEAgaW1wb3J0IHNvY2tldAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHRpbWUKIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXgKLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBkZWZlcgogCiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtceGUwXHgwMFx4MDBceDAxJiMzOTsKIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJiMzOTtceGVmXHgwMVx4MDFceDAxJiMzOTsKQEAgLTEzNCw4ICYjNDM7MTM2LDE4OSBAQCBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC0mZ3Q7IE5vbmU6CiAgICAga3NmdF90cnVlKGYmIzM0O2luZXQge2lmbmFtZX0gZm9yd2FyZGluZyBvbiYjMzQ7IGluIGNtZF9vYmouc3Rkb3V0LAogICAgICAgICAgICAgICBmJiMzNDtObyAmIzM5O2ZvcndhcmRpbmcgb24mIzM5OyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX0mIzM0OykKIAomIzQzO2RlZiBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpOgomIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICBydG5sID0gUnRubFJvdXRlRmFtaWx5KCkKJiM0MzsgICAgZGVmZXIocnRubC5jbG9zZSkKJiM0MzsgICAgcnRubC5udGZfc3Vic2NyaWJlKCYjMzQ7cnRubGdycC1pcHY2LXJvdXRlJiMzNDspCiYjNDM7ICAgIHJldHVybiBydG5sCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF93YWl0X3JvdXRlX250ZihydG5sLCBuYW1lLCBkc3RfbGVuLCBkc3Q9Tm9uZSwgZGVhZGxpbmU9MTApOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKToKJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgYXR0cnMgPSBtc2dbJiMzOTttc2cmIzM5O10KJiM0MzsgICAgICAgIGlmIGF0dHJzWyYjMzk7cnRtLWRzdC1sZW4mIzM5O10gIT0gZHN0X2xlbjoKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgaWYgZHN0IGlzIG5vdCBOb25lIGFuZCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykgIT0gZHN0OgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICByZXR1cm4gYXR0cnMKJiM0MzsgICAgcmV0dXJuIE5vbmUKJiM0MzsKJiM0MzsKJiM0MztkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O0dhdGhlciBhdHRycyBvZiBtYXRjaGluZyBub3RpZmljYXRpb25zLCBrZXllZCBieSAoZHN0X2xlbiwgZHN0KS4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgc2VlbiA9IHt9CiYjNDM7ICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6CiYjNDM7ICAgICAgICBpZiBtc2dbJiMzOTtuYW1lJiMzOTtdICE9IG5hbWU6CiYjNDM7ICAgICAgICAgICAgY29udGludWUKJiM0MzsgICAgICAgIGF0dHJzID0gbXNnWyYjMzk7bXNnJiMzOTtdCiYjNDM7ICAgICAgICBrZXkgPSAoYXR0cnNbJiMzOTtydG0tZHN0LWxlbiYjMzk7XSwgYXR0cnMuZ2V0KCYjMzk7ZHN0JiMzOTspKQomIzQzOyAgICAgICAgaWYga2V5IGluIHdhbnQ6CiYjNDM7ICAgICAgICAgICAgc2VlbltrZXldID0gYXR0cnMKJiM0MzsgICAgICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOgomIzQzOyAgICAgICAgICAgICAgICBicmVhawomIzQzOyAgICByZXR1cm4gc2VlbgomIzQzOwomIzQzOwomIzQzO2RlZiBfd3JpdGVfaXB2Nl9zeXNjdGwobmFtZSwgdmFsdWUpOgomIzQzOyAgICB3aXRoIG9wZW4oZiYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY2L3tuYW1lfSYjMzQ7LCAmIzM0O3cmIzM0OykgYXMgZjoKJiM0MzsgICAgICAgIGYud3JpdGUoZiYjMzQ7e3ZhbHVlfVxuJiMzNDspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkKCkgLSZndDsgTm9uZToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7QW4gZXhwaXJlZCByb3V0ZSByZXBvcnRzIFJUQV9ERUxfUkVBU09OID09IGV4cGlyZWQuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczoKJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpCiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7cm91dGUvZ2NfaW50ZXJ2YWwmIzM0OywgMikKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teSYjMzQ7LCBucz1zdHIobnMpKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkZXYgZHVtbXkxIHVwJiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0Oy02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDImIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsKJiM0MzsgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIDY0LCAmIzM5OzIwMDE6ZGI4OjI6OiYjMzk7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmU9MTUpCiYjNDM7ICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCAmIzM0O25vIFJUTV9ERUxST1VURSBmb3IgdGhlIGV4cGlyZWQgcm91dGUmIzM0OykKJiM0MzsgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCYjMzk7ZGVsLXJlYXNvbiYjMzk7KSwgJiMzOTtleHBpcmVkJiMzOTspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIGxpZmV0aW1lLCByaW89Tm9uZSwgcGlvPU5vbmUpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtUaGUga2VybmVsIGZpbGxzIGluIHRoZSBJQ01QdjYgY2hlY2tzdW0gb24gcmF3IElDTVB2NiBzb2NrZXRzLiYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICAjIHR5cGUsIGNvZGUsIGNrc3VtLCBob3AgbGltaXQsIGZsYWdzLCByb3V0ZXIgbGlmZXRpbWUsCiYjNDM7ICAgICMgcmVhY2hhYmxlIHRpbWUsIHJldHJhbnMgdGltZXIKJiM0MzsgICAgcmEgPSBzdHJ1Y3QucGFjaygmIzM5OyFCQkhCQkhJSSYjMzk7LCAxMzQsIDAsIDAsIDY0LCAwLCBsaWZldGltZSwgMCwgMCkKJiM0MzsgICAgaWYgcmlvIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgcHJlZml4LCBwbGVuLCByaW9fbGlmZXRpbWUgPSByaW8KJiM0MzsgICAgICAgICMgUkZDIDQxOTEgcm91dGUgaW5mb3JtYXRpb24gb3B0aW9uLCAvNjQgcHJlZml4ICg4IGJ5dGVzKQomIzQzOyAgICAgICAgcmEgJiM0Mzs9IHN0cnVjdC5wYWNrKCYjMzk7IUJCQkJJJiMzOTssIDI0LCAyLCBwbGVuLCAwLCByaW9fbGlmZXRpbWUpCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClbOjhdCiYjNDM7ICAgIGlmIHBpbyBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgIHByZWZpeCwgcGxlbiwgdmFsaWRfbGZ0ID0gcGlvCiYjNDM7ICAgICAgICAjIFJGQyA0ODYxIHByZWZpeCBpbmZvcm1hdGlvbiBvcHRpb24sIG9uLWxpbmsgb25seSAoTCBzZXQsIEEgY2xlYXIpCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc3RydWN0LnBhY2soJiMzOTshQkJCQklJSSYjMzk7LCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeCkKJiM0MzsgICAgc29jay5zZW5kdG8ocmEsICgmIzM5O2ZmMDI6OjEmIzM5OywgMCwgMCwgaWZpbmRleCkpCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9yYV9yb3V0ZXJfc29jayhuc19yLCBpZm5hbWUpOgomIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKToKJiM0MzsgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQUFJPVE9fSUNNUFY2KQomIzQzOyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpCiYjNDM7ICAgICAgICBkZWZlcihzb2NrLmNsb3NlKQomIzQzOyAgICAgICAgcmV0dXJuIHNvY2ssIHNvY2tldC5pZl9uYW1ldG9pbmRleChpZm5hbWUpCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHdhbnQsICoqcmFfb3B0cyk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBTZW5kaW5nIGZhaWxzIHdpdGggRUFERFJOT1RBVkFJTCB3aGlsZSB0aGUgcm91dGVyJiMzOTtzIGxpbmstbG9jYWwKJiM0MzsgICAgYWRkcmVzcyBpcyBzdGlsbCB0ZW50YXRpdmUuIGFkZHJjb25mX2RhZF9zdGFydCgpIG9ubHkgcXVldWVzCiYjNDM7ICAgIGFkZHJjb25mX2RhZF93b3JrKCksIGFuZCBJRkFfRl9URU5UQVRJVkUgaXMgY2xlYXJlZCB3aGVuIHRoYXQgd29yawomIzQzOyAgICBpdGVtIHJ1bnMsIHNvIHJldHJ5IHVudGlsIGl0IGRvZXMuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBzZWVuID0ge30KJiM0MzsgICAgZm9yIF8gaW4gcmFuZ2UoMTApOgomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cykKJiM0MzsgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgomIzQzOyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKQomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7bmV3cm91dGUtbnRmJiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZXQoc2Vlbi5rZXlzKCkpLCBkZWFkbGluZT0yKSkKJiM0MzsgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6CiYjNDM7ICAgICAgICAgICAgYnJlYWsKJiM0MzsgICAgcmV0dXJuIHNlZW4KJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBSb3V0ZXMgd2l0aGRyYXduIGJ5IGEgemVyby1saWZldGltZSBSQSAocm91dGVyIGxpZmV0aW1lLCBSRkMgNDg2MQomIzQzOyAgICBQSU8sIFJGQyA0MTkxIFJJTykgcmVwb3J0IFJUQV9ERUxfUkVBU09OID09IHJhLXdpdGhkcmF3bi4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgICMgKHJ0bS1kc3QtbGVuLCBkc3QpOyB0aGUgZGVmYXVsdCByb3V0ZSBjYXJyaWVzIG5vIFJUQV9EU1QKJiM0MzsgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7KSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7KX0KJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjoKJiM0MzsgICAgICAgIGlwKGYmIzM0O2xpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfSYjMzQ7KQomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6CiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7Y29uZi92ZXRoMC9hY2NlcHRfcmEmIzM0OywgMikKJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtjb25mL3ZldGgwL2ZvcndhcmRpbmcmIzM0OywgMCkKJiM0MzsgICAgICAgICAgICB0cnk6CiYjNDM7ICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW4mIzM0OywgNjQpCiYjNDM7ICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgomIzQzOyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7bm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GTyYjMzQ7KQomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6CiYjNDM7ICAgICAgICAgICAgIyBza2lwIHRoZSBEQUQgcHJvYmUgc28gdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsIHNvdXJjZSBvbmx5CiYjNDM7ICAgICAgICAgICAgIyBoYXMgdG8gd2FpdCBmb3IgYWRkcmNvbmZfZGFkX3dvcmsoKSB0byBjbGVhciBJRkFfRl9URU5UQVRJVkUKJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtjb25mL3ZldGgxL2FjY2VwdF9kYWQmIzM0OywgMCkKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBzZXQgZGV2IHZldGgwIHVwJiMzNDssIG5zPXN0cihuc19oKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBzZXQgZGV2IHZldGgxIHVwJiMzNDssIG5zPXN0cihuc19yKSkKJiM0MzsKJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnNfaCkKJiM0MzsgICAgICAgIHNvY2ssIGlmaW5kZXggPSBfcmFfcm91dGVyX3NvY2sobnNfciwgJiMzNDt2ZXRoMSYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAgc2VlbiA9IF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHJvdXRlcywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZldGltZT0xODAwLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbz0oJiMzOTsyMDAxOmRiODo1OjomIzM5OywgNjQsIDYwMCksCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlvPSgmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7LCA2NCwgNjAwKSkKJiM0MzsgICAgICAgIGtzZnRfZXEoc2V0KHNlZW4pLCByb3V0ZXMsICYjMzQ7bm90IGFsbCBSQSByb3V0ZXMgd2VyZSBpbnN0YWxsZWQmIzM0OykKJiM0MzsgICAgICAgIGlmIHNldChzZWVuKSAhPSByb3V0ZXM6CiYjNDM7ICAgICAgICAgICAgcmV0dXJuCiYjNDM7CiYjNDM7ICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAwLCByaW89KCYjMzk7MjAwMTpkYjg6NTo6JiMzOTssIDY0LCAwKSwKJiM0MzsgICAgICAgICAgICAgICAgIHBpbz0oJiMzOTsyMDAxOmRiODo2OjomIzM5OywgNjQsIDApKQomIzQzOyAgICAgICAgc2VlbiA9IF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5Oywgcm91dGVzKQomIzQzOyAgICAgICAgZm9yIGtleSBpbiByb3V0ZXM6CiYjNDM7ICAgICAgICAgICAgYXR0cnMgPSBzZWVuLmdldChrZXkpCiYjNDM7ICAgICAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgZiYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciB7a2V5fSYjMzQ7KQomIzQzOyAgICAgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgmIzM5O2RlbC1yZWFzb24mIzM5OyksICYjMzk7cmEtd2l0aGRyYXduJiMzOTspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgQSBkZWxldGlvbiBwYXRoIHRoYXQgcmVjb3JkcyBubyBjYXVzZSAoaGVyZSBhIHVzZXJzcGFjZSByZXF1ZXN0KQomIzQzOyAgICBtdXN0IG5vdCBjYXJyeSBSVEFfREVMX1JFQVNPTiBhdCBhbGwuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6CiYjNDM7ICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15JiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGRldiBkdW1teTEgdXAmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7LTYgcm91dGUgYWRkIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxJiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0Oy02IHJvdXRlIGRlbCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MSYjMzQ7LCBucz1zdHIobnMpKQomIzQzOwomIzQzOyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5OywgNjQsICYjMzk7MjAwMTpkYjg6MTo6JiMzOTspCiYjNDM7ICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCAmIzM0O25vIFJUTV9ERUxST1VURSBmb3IgMjAwMTpkYjg6MTo6LzY0JiMzNDspCiYjNDM7ICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICBrc2Z0X25vdF9pbigmIzM5O2RlbC1yZWFzb24mIzM5OywgYXR0cnMsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDt1c2VyIGRlbGV0aW9uIG11c3Qgbm90IGNhcnJ5IGRlbC1yZWFzb24mIzM0OykKJiM0MzsKJiM0MzsKIGRlZiBtYWluKCkgLSZndDsgTm9uZToKLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pCiYjNDM7ICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LAomIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQsCiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLAomIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pCiAgICAga3NmdF9leGl0KCkKIAogaWYgX19uYW1lX18gPT0gJiMzNDtfX21haW5fXyYjMzQ7Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA1NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDcxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIENhbmRpZGF0ZTogSVB2NiBSb3V0ZSBEZWxldGlvbiBSZWFzb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdG8gcmV2aWV3LCBhbmQgdGhlIHRhc2sgaXMgdG8gZmlndXJlIG91dCBpZiBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUga2VybmVsIHRoYXQgd2FycmFudCBmdXp6aW5nLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgYSBidW5jaCBvZiBJUHY2IHJvdXRpbmcgY29kZSDigJMgYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sYCwgdmFyaW91cyBoZWFkZXIgZmlsZXMgKGBpcDZfZmliLmhgLCBgaXA2X3JvdXRlLmhgLCBgcnRuZXRsaW5rLmhgKSwgY29yZSBJUHY2IG5ldHdvcmsgZmlsZXMgKGBhZGRyY29uZi5jYCwgYGlwNl9maWIuY2AsIGBuZGlzYy5jYCwgYHJvdXRlLmNgKSwgYW5kIGV2ZW4gc29tZSBweXRob24gdGVzdHMuIFRoYXQmIzM5O3MgYSBzdHJvbmcgc2lnbmFsLCB0aGlzIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIGludGVyZXN0aW5nLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIHJldm9sdmVzIGFyb3VuZCBhZGRpbmcgYSBuZXcgTmV0bGluayBhdHRyaWJ1dGUsIGBSVEFfREVMX1JFQVNPTmAsIHNwZWNpZmljYWxseSBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLiBUaGV5JiMzOTtyZSBhZGRpbmcgYW4gYGVudW0gcnRfZGVsX3JlYXNvbmAgd2l0aCB2YWx1ZXMgdG8gc3BlY2lmeSB3aHkgdGhlIHJvdXRlIGlzIGJlaW5nIGRlbGV0ZWQ6IGBVTlNQRUNgLCBgRVhQSVJFRGAsIG9yIGBSQV9XSVRIRFJBV05gLiBUaGF0IGFsb25lIHRlbGxzIG1lIHRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHNpZ25pZmljYW50IG9uZSBhdCB0aGF0LiBJdCBhbHRlcnMgaG93IHdlIGNvbW11bmljYXRlIGFib3V0IHJvdXRlIGRlbGV0aW9ucyB0aHJvdWdoIE5ldGxpbmssIHdoaWNoIGlzIGNvcmUgdG8gdGhlIGNvbnRyb2wgcGxhbmUuCgpTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSwgYW5kIHNob3VsZCB3ZSBmdXp6IGl0PyBBYnNvbHV0ZWx5LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBJUHY2IHJvdXRlIGRlbGV0aW9ucyDigJMgdGhhdCYjMzk7cyBhICp2ZXJ5KiBjb21tb24gb3BlcmF0aW9uLiBSQSB3aXRoZHJhd2FsLCByb3V0ZSBleHBpcmF0aW9uLCBtYW51YWwgZGVsZXRpb24g4oCTIGFsbCBvZiB0aGVzZSBwYXRocyBub3cgbmVlZCB0byB0YWtlIHRoaXMgbmV3IGRlbGV0aW9uIHJlYXNvbiBpbnRvIGFjY291bnQuIFRoZSBwYXRjaCBpdHNlbGYgbW9kaWZpZXMgZnVuY3Rpb25zIGxpa2UgYGZpYjZfZGVsYCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYHJ0Nl9maWxsX25vZGVgLCBgaW5ldDZfcnRfbm90aWZ5YCwgaW1wbHlpbmcgdGhhdCBhIGdvb2QgcG9ydGlvbiBvZiB0aGUgSVB2NiBzdGFjayBpcyBiZWluZyBpbXBhY3RlZC4KCk5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzOiB3aGljaCBmdW5jdGlvbnMgc2hvdWxkIHdlIHByaW9yaXRpemUgZm9yIGZ1enppbmc/IExvb2tpbmcgYXQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBtb2RpZmllZCwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlOgoKKiAgIGBhZGRyY29uZl9wcmVmaXhfcmN2YAoqICAgYGZpYjZfZGVsYAoqICAgYGZpYjZfZGVsX3JvdXRlYAoqICAgYGZpYjZfY2xlYW5fbm9kZWAKKiAgIGBmaWI2X2djX3RhYmxlYAoqICAgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgCiogICBgcnQ2X3JvdXRlX3JjdmAKKiAgIGBpcDZfZGVsX3J0X3JlYXNvbmAKKiAgIGBfX2lwNl9kZWxfcnRgCiogICBgaXA2X2RlbF9ydGAKKiAgIGBfX2lwNl9kZWxfcnRfc2libGluZ3NgCiogICBgaXA2X3JvdXRlX2RlbGAKKiAgIGBydDZfbmxtc2dfc2l6ZWAKKiAgIGBydDZfZmlsbF9ub2RlYAoqICAgYHJ0Nl9uaF9kdW1wX2V4Y2VwdGlvbnNgCiogICBgcnQ2X2R1bXBfcm91dGVgCiogICBgaW5ldDZfcnRtX2dldHJvdXRlYAoqICAgYF9faW5ldDZfcnRfbm90aWZ5YAoqICAgYGluZXQ2X3J0X25vdGlmeWAKKiAgIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YAoqICAgYGZpYjZfcnRfdXBkYXRlYAoqICAgYGZpYjZfaW5mb19od19mbGFnc19zZXRgCgpOYXJyb3dpbmcgdGhpcyBmdXJ0aGVyLCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGUgc3BlY2lmaWMgc3ltYm9sczogYGlwNl9kZWxfcnRfcmVhc29uYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgLCBgcnQ2X2ZpbGxfbm9kZWAsIGFuZCBgcnQ2X25sbXNnX3NpemVgLiBUaGV5IGFyZSBjbGVhcmx5IGNyaXRpY2FsIGZvciBoYW5kbGluZyBhbmQgY29uc3RydWN0aW5nIHRoZSBuZXcgTmV0bGluayBtZXNzYWdlcy4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJIGFscmVhZHkga25vdyB0aGF0IGBDT05GSUdfSVBWNmAgaXMgcmVxdWlyZWQsIHdoaWNoIGlzIGEgZ2l2ZW4sIGJ1dCB0aGVyZeKAmXMgYSByZWZlcmVuY2UgdG8gYENPTkZJR19JUFY2X1JPVVRFX0lORk9gIGluIHRoZSB0ZXN0cy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYG5ldC9pcHY2L0tjb25maWdgIHRvIHNlZSB3aGF0IHRoYXQgYWN0dWFsbHkgY29udHJvbHMgYW5kIGlmIGl0JiMzOTtzIG5lY2Vzc2FyeSBmb3IgdGhpcyBwYXRjaCB0byB3b3JrLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGlzIHNldCB1cCBjb3JyZWN0bHkuCgpJbiBzaG9ydCwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFdlIGhhdmUgYSBuZXcgTmV0bGluayBhdHRyaWJ1dGUgYmVpbmcgYWRkZWQsIGFuZCB0aGF0IG1lYW5zIG5ldyBjb2RlIHBhdGhzLCBhbmQgbmV3IGxvZ2ljIGZvciBtZXNzYWdlIGNvbnN0cnVjdGlvbiwgYW5kIElQdjYgcm91dGluZyBvcGVyYXRpb25zIOKAkyBhbGwgb2Ygd2hpY2ggbmVlZHMgdG8gYmUgcmlnb3JvdXNseSB0ZXN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDE6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfUk9VVEVfSU5GTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz0yMT1jb25maWcgSVBWNl9ST1VURVJfUFJFRlxuLS1cbm5ldC9pcHY2L0tjb25maWctMzAtXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L0tjb25maWctMzItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAxOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODAyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgeW91ciBzdW1tYXJ5OgoKKipEaWdnaW5nIERlZXBlciBpbnRvIElQdjYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCwgZXNwZWNpYWxseSB3aXRoIElQdjYuIEkga25vdyB0aGUgYmFzaWNzLCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBMZXQmIzM5O3Mgbm90IGp1c3QgYXNzdW1lIEkmIzM5O3ZlIGNvdmVyZWQgYWxsIHRoZSBiYXNlcy4gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZvciBgSVBWNl9ST1VURVJfUFJFRmAuIFRoYXQgc2V0dGluZyYjMzk7cyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSByb3V0ZXIgcHJpb3JpdGl6ZXMgSVB2NiByb3V0ZXMsIGFuZCBpdCBjb3VsZCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgYW55IGNvbm5lY3Rpdml0eSBpc3N1ZXMgb3IgdW5leHBlY3RlZCByb3V0aW5nIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nLiBJdCYjMzk7cyB0b28gZWFzeSB0byBvdmVybG9vayB0aGUgZmluZXIgcG9pbnRzIHdoZW4geW91JiMzOTtyZSBmb2N1c2luZyBvbiB0aGUgZ2VuZXJhbCBzZXR1cC4gVGhpcyBjb3VsZCBleHBsYWluIGEgbG90LiBUaGlzIHNldHRpbmcgaXMgZnJlcXVlbnRseSBtaXNzZWQsIGFuZCBzaG91bGQgYWx3YXlzIGJlIGNvbnNpZGVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDE6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMTpcdGNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXG4gIDIyOlx0XHRib29sIFwmIzM0O0lQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBSb3V0ZXIgUHJlZmVyZW5jZSBpcyBhbiBvcHRpb25hbCBleHRlbnNpb24gdG8gdGhlIFJvdXRlclxuICAyNTpcdFx0ICBBZHZlcnRpc2VtZW50IG1lc3NhZ2Ugd2hpY2ggaW1wcm92ZXMgdGhlIGFiaWxpdHkgb2YgaG9zdHNcbiAgMjY6XHRcdCAgdG8gcGljayBhbiBhcHByb3ByaWF0ZSByb3V0ZXIsIGVzcGVjaWFsbHkgd2hlbiB0aGUgaG9zdHNcbiAgMjc6XHRcdCAgYXJlIHBsYWNlZCBpbiBhIG11bHRpLWhvbWVkIG5ldHdvcmsuXG4gIDI4Olx0XG4gIDI5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDMwOlx0XG4gIDMxOlx0Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xuICAzMjpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbiAgMzM6XHRcdGRlcGVuZHMgb24gSVBWNl9ST1VURVJfUFJFRlxuICAzNDpcdFx0aGVscFxuICAzNTpcdFx0ICBTdXBwb3J0IG9mIFJvdXRlIEluZm9ybWF0aW9uLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzODpcdFxuICAzOTpcdGNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXG4gIDQwOlx0XHRib29sIFwmIzM0O0lQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAxOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mjk0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgSVB2NiBSb3V0ZSBDb25maWd1cmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIElQdjYgcm91dGluZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYElQVjZfUk9VVEVfSU5GT2Agd2hpY2ggYXBwZWFycyB0byBiZSBsaW5rZWQgdG8gYElQVjZfUk9VVEVSX1BSRUZgLiBBbmQgb2YgY291cnNlLCB0aGUgdXNlIG9mIGBJUFY2YCBpcyBmdW5kYW1lbnRhbCB0byBhbGwgb2YgdGhpcy4KCkkmIzM5O20gZ2V0dGluZyB0aGUgc2Vuc2UgdGhlcmUgYXJlIGxpa2VseSBvdGhlciBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCBoZXJlLCBzbyBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIHRob3NlLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHRvdWNoaW5nIGNvcmUgSVB2NiBjb21wb25lbnRzOiBgbmV0L2lwdjYvYWRkcmNvbmYuY2AsIGBuZXQvaXB2Ni9pcDZfZmliLmNgLCBgbmV0L2lwdjYvbmRpc2MuY2AsIGFuZCBgbmV0L2lwdjYvcm91dGUuY2AuIFNvIHdlIGFyZSBkZWFsaW5nIHdpdGggcHJldHR5IGZ1bmRhbWVudGFsIGZ1bmN0aW9uYWxpdHkuCgpOb3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgdGhhdCB3aWxsIHRlbGwgdGhlIGNvcmUgc3Rvcnk6IHNwZWNpZmljYWxseSwgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBgaXA2X2RlbF9ydF9yZWFzb25gLCBgaW5ldDZfcnRfZGVsX25vdGlmeWAsIGBydDZfZmlsbF9ub2RlYCwgYW5kIGBydDZfbmxtc2dfc2l6ZWAuIFRoZXkgc2hvdWxkIHByb3ZpZGUgY29udGV4dCBmb3Igd2hhdCYjMzk7cyBnb2luZyBvbi4KCkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgcnQ2X2ZpbGxfbm9kZWAgaXMgbm90IHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydDZfZmlsbF9ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jPTEwOT1zdGF0aWMgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHN0cnVjdCBmaWI2X2luZm8gKmY2aSk7XG5uZXQvaXB2Ni9yb3V0ZS5jOjExMDpzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjYvcm91dGUuYy0xMTEtXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxubmV0L2lwdjYvcm91dGUuYz00MDE2PXN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTQwMzctXG5uZXQvaXB2Ni9yb3V0ZS5jOjQwMzg6XHRcdFx0aWYgKHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLFxubmV0L2lwdjYvcm91dGUuYy00MDM5LVx0XHRcdFx0XHQgIE5VTEwsIE5VTEwsIDAsIFJUTV9ERUxST1VURSxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTU3MTE9c3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpXG4tLVxubmV0L2lwdjYvcm91dGUuYy01NzU3LVxubmV0L2lwdjYvcm91dGUuYzo1NzU4OnN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZV9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXh0aG9wICpuaCxcbm5ldC9pcHY2L3JvdXRlLmMtNTc1OS1cdFx0XHRcdCB1bnNpZ25lZCBjaGFyICpmbGFncylcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTU3ODYtXG5uZXQvaXB2Ni9yb3V0ZS5jOjU3ODc6c3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3JvdXRlLmMtNTc4OC1cdFx0XHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTU5NDAtXHRcdGlmIChSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX25leHRob3BfY29tcGF0X21vZGUpIFx1MDAyNlx1MDAyNlxubmV0L2lwdjYvcm91dGUuYzo1OTQxOlx0XHQgICAgcnQ2X2ZpbGxfbm9kZV9uZXh0aG9wKHNrYiwgcnQtXHUwMDNlbmgsIFx1MDAyNm5oX2ZsYWdzKSBcdTAwM2MgMClcbm5ldC9pcHY2L3JvdXRlLmMtNTk0Mi1cdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTYwMzY9c3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNjA3MC1cbm5ldC9pcHY2L3JvdXRlLmM6NjA3MTpcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKGR1bXAtXHUwMDNlbmV0LCBkdW1wLVx1MDAzZXNrYiwgdy1cdTAwM2VydCxcbm5ldC9pcHY2L3JvdXRlLmMtNjA3Mi1cdFx0XHRcdFx0ICAgIFx1MDAyNnJ0Nl9leC1cdTAwM2VydDZpLVx1MDAzZWRzdCwgTlVMTCwgTlVMTCwgMCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTYwODk9aW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApXG4tLVxubmV0L2lwdjYvcm91dGUuYy02MTIwLVx0XHR9IGVsc2Uge1xubmV0L2lwdjYvcm91dGUuYzo2MTIxOlx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgYXJnLVx1MDAzZXNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsXG5uZXQvaXB2Ni9yb3V0ZS5jLTYxMjItXHRcdFx0XHRcdCAgMCwgUlRNX05FV1JPVVRFLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NjIzMj1zdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTYzNTQtXHRcdGlmIChmaWJtYXRjaClcbm5ldC9pcHY2L3JvdXRlLmM6NjM1NTpcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLFxubmV0L2lwdjYvcm91dGUuYy02MzU2LVx0XHRcdFx0XHQgICAgaWlmLCBSVE1fTkVXUk9VVEUsXG4tLVxubmV0L2lwdjYvcm91dGUuYy02MzYwLVx0XHRlbHNlXG5uZXQvaXB2Ni9yb3V0ZS5jOjYzNjE6XHRcdFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgZHN0LCBcdTAwMjZmbDYuZGFkZHIsXG5uZXQvaXB2Ni9yb3V0ZS5jLTYzNjItXHRcdFx0XHRcdCAgICBcdTAwMjZmbDYuc2FkZHIsIGlpZiwgUlRNX05FV1JPVVRFLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NjM4MT1zdGF0aWMgdm9pZCBfX2luZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNjQwMC1cbm5ldC9pcHY2L3JvdXRlLmM6NjQwMTpcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxubmV0L2lwdjYvcm91dGUuYy02NDAyLVx0XHRcdCAgICBldmVudCwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLCBkZWxfcmVhc29uKTtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTY0MzU9dm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNjQ0NS1cbm5ldC9pcHY2L3JvdXRlLmM6NjQ0NjpcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxubmV0L2lwdjYvcm91dGUuYy02NDQ3LVx0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsXG4tLVxubmV0L2lwdjYvcm91dGUuYz02NDYyPXZvaWQgZmliNl9pbmZvX2h3X2ZsYWdzX3NldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTY0OTktXG5uZXQvaXB2Ni9yb3V0ZS5jOjY1MDA6XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCxcbm5ldC9pcHY2L3JvdXRlLmMtNjUwMS1cdFx0XHQgICAgMCwgMCwgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAxOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjE2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKlJvdXRlIFRhYmxlIE1haW50ZW5hbmNlIC0gU3RhdGljIHZzLiBEeW5hbWljIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Ugcm91dGUgdGFibGUgZnVuY3Rpb25zIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgYW5kIGFjY2VzcyBsZXZlbHMuIGBydDZfZmlsbF9ub2RlYCBpcyBkZWZpbmVkIGFzIHN0YXRpYywgbWVhbmluZyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQgbWFrZXMgc2Vuc2UgZm9yIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMsIG5vdCBzb21ldGhpbmcgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZS4gSG93ZXZlciwgYGlwNl9kZWxfcnRfcmVhc29uYCBhbmQgYGluZXQ2X3J0X2RlbF9ub3RpZnlgIGFyZSBkZWZpbmVkIGFzICpleHBvcnRlZCosIG9yIG5vbi1zdGF0aWMsIGZ1bmN0aW9ucy4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBpbnRlbmRlZCB0byBiZSBjYWxsYWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEZpbmFsbHksIGBydDZfbmxtc2dfc2l6ZWAgaXMgc3RhdGljLCB3aGljaCBpcyBwcm9iYWJseSB1c2VkIHRvIHNpemUgdGhlIG5ldGxpbmsgbWVzc2FnZSBmb3IgdGhlIHJvdXRlLgoKR2l2ZW4gdGhpcyBpbml0aWFsIG9ic2VydmF0aW9uIGFib3V0IHRoZSBkaWZmZXJlbmNlIGluIHNjb3BpbmcsIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlc2UgZXhwb3J0ZWQgZnVuY3Rpb25zLCBgaXA2X2RlbF9ydF9yZWFzb25gIGFuZCBgaW5ldDZfcnRfZGVsX25vdGlmeWAsIGEgYml0IG1vcmUgY2xvc2VseSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZWlyIHB1cnBvc2Ugd2l0aGluIHRoZSBvdmVyYWxsIHJvdXRpbmcgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBtaWdodCBiZSBsZXZlcmFnaW5nIHRoZXNlIHBhcnRpY3VsYXIgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYz05NzA9aW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTEwMjItXHRpZiAocnQgXHUwMDI2XHUwMDI2ICFsaWZldGltZSkge1xubmV0L2lwdjYvcm91dGUuYzoxMDIzOlx0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG5uZXQvaXB2Ni9yb3V0ZS5jLTEwMjQtXHRcdHJ0ID0gTlVMTDtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTM5OTg9aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTQwMDctXG5uZXQvaXB2Ni9yb3V0ZS5jOjQwMDg6aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG5uZXQvaXB2Ni9yb3V0ZS5jLTQwMDktXHRcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNvbnNpZGVyaW5nIElQdjYgUm91dGluZyBUYWJsZSBVcGRhdGVzKioKCkhtbSwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcm91dGluZywgYW5kIHNwZWNpZmljYWxseSB0aGUgaW1wbGljYXRpb25zIG9mIGEgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgYmVoYXZpb3Igb2YgYGluZXQ2X3J0X2RlbF9ub3RpZnlgIGluIHRoaXMgc2NlbmFyaW8/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgZXhhY3QgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uLiBEb2VzIGl0IGRpcmVjdGx5IHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZm9yd2FyZGluZyBpbmZvcm1hdGlvbiBiYXNlIChGSUIpLCBvciBkb2VzIGl0IHNpZ25hbCBzb21lIG90aGVyIGNvbXBvbmVudD8gSSBuZWVkIHRvIGNvbnNpZGVyIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBJUHY2IHN0YWNrLCBpbmNsdWRpbmcgaW50ZXJhY3Rpb25zIHdpdGggbmVpZ2hib3IgZGlzY292ZXJ5LCBwcmVmaXggZGVsZWdhdGlvbiwgYW5kIHJvdXRlIGNhY2hpbmcuIEkgYWxzbyBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGxvY2tpbmcgd2l0aGluIHRoZSByb3V0aW5nIHRhYmxlIHVwZGF0ZSBwcm9jZXNzLiBBcmUgd2UgY29uc2lkZXJpbmcgYSBzY2VuYXJpbyBpbnZvbHZpbmcgZHluYW1pYyByb3V0aW5nIHByb3RvY29scz8gVGhlIGltcGxpY2F0aW9ucyBtaWdodCBkaWZmZXIgc2lnbmlmaWNhbnRseSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGlzIGEgc3RhdGljIHJvdXRlIGRlbGV0aW9uLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IGxpa2UgYSBCR1Agcm91dGUgd2l0aGRyYXdhbC4gTGV0JiMzOTtzIGRlbHZlIGRlZXBlciBpbnRvIHRoaXMgYXNwZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jPTY0MjM9dm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tLVxubmV0L2lwdjYvcm91dGUuYy02NDI4LVxubmV0L2lwdjYvcm91dGUuYzo2NDI5OnZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG5uZXQvaXB2Ni9yb3V0ZS5jLTY0MzAtXHRcdFx0IGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIyMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipUaGlua2luZyBUaHJvdWdoIEZ1bmN0aW9uIE11dGFiaWxpdHkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCBwb3RlbnRpYWwgZnVuY3Rpb24gc2lkZSBlZmZlY3RzLCBwYXJ0aWN1bGFybHkgZm9jdXNpbmcgb24gaG93IGR5bmFtaWMgdGhleSByZWFsbHkgYXJlLiBUaGUgY29kZSBhcHBlYXJzIHRvIHVzZSBgZmliNl9kZWxgIHdoaWNoIGhhcyBiZWVuIG1vZGlmaWVkLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGJleW9uZCB0aGlzLCBhbSBJIG1pc3NpbmcgYW55IG90aGVyIHBsYWNlcyB3aGVyZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWwgc3RhdGUgbWlnaHQgYmUgYWx0ZXJlZD8gSSBoYXZlIHRvIGJlIGV4aGF1c3RpdmUgaGVyZSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZnVuY3Rpb24gc3RhdGUgY2hhbmdlcyBpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZXJlIGNvdWxkIGJlIGhpZGRlbiBtdXRhYmxlIHN0YXRlLiBJZiBJIG1pc3MgZXZlbiBvbmUgcG9pbnQsIHRoaXMgb3ZlcnNpZ2h0IHdvdWxkIHVuZGVybWluZSBteSBlbnRpcmUgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAxOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYjZfZGVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2ZpYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9maWIuYz0xODQxPXN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTk2OC1cbm5ldC9pcHY2L2lwNl9maWIuYzoxOTY5OnN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTk3MC1cdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjA2NS0vKiBOZWVkIHRvIG93biB0YWJsZS1cdTAwM2V0YjZfbG9jayAqL1xubmV0L2lwdjYvaXA2X2ZpYi5jOjIwNjY6aW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDY3LVx0ICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjA5NS1cdFx0XHRcdGZpYjZfcm91dGVzX3JlcXVpcmVfc3JjX2RlYyhpbmZvLVx1MDAzZW5sX25ldCk7XG5uZXQvaXB2Ni9pcDZfZmliLmM6MjA5NjpcdFx0XHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbywgZGVsX3JlYXNvbik7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjA5Ny1cdFx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjEwNy0gKlx0Q2VydGFpbmx5LCBpdCBpcyBub3QgaW50ZXJydXB0IHNhZmUuXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjEwODogKlx0SG93ZXZlciwgaXQgaXMgaW50ZXJuYWxseSByZWVudGVyYWJsZSB3cnQgaXRzZWxmIGFuZCBmaWI2X2FkZC9maWI2X2RlbC5cbm5ldC9pcHY2L2lwNl9maWIuYy0yMTA5LSAqXHRJdCBtZWFucywgdGhhdCB3ZSBjYW4gbW9kaWZ5IHRyZWUgZHVyaW5nIHdhbGtpbmdcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjIzND1zdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyNTctXHRcdFx0dy1cdTAwM2VsZWFmID0gcnQ7XG5uZXQvaXB2Ni9pcDZfZmliLmM6MjI1ODpcdFx0XHRyZXMgPSBmaWI2X2RlbChydCwgXHUwMDI2aW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTIyNTktXHRcdFx0aWYgKHJlcykge1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yMzkzPXN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNDA1LVx0XHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI0MDY6XHRcdFx0ZmliNl9kZWwocnQsIFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fRVhQSVJFRCk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQwNy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAxOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTM3CgkJCQkJCQlvdXRwdXQ6IDE0NAoJCQkJCQkJdGhvdWdodHM6IDM5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBJUHY2IFJvdXRlIERlbGV0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgZmliNl9kZWxgIGlzbiYjMzk7dCBkZWNsYXJlZCBgc3RhdGljYCwgd2hpY2ggaXMgaW1wb3J0YW50IGNvbnRleHQuCgpNeSBjb3JlIGZvY3VzIGhlcmUgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgcmVsZXZhbnQgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBJUHY2IHJvdXRlIGRlbGV0aW9uLiBNeSBrZXkgc3ltYm9scyBhcmU6IGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCwgYW5kIGBmaWI2X2RlbGAuCgpOb3csIHJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgdGhlIGVzc2VudGlhbCBvbmVzIGFyZSBjbGVhcmx5IGBJUFY2YCwgYnV0IEkgbmVlZCB0byBjb25zaWRlciBvdGhlcnMuIGBJUFY2X1JPVVRFUl9QUkVGYCBhbmQgYElQVjZfUk9VVEVfSU5GT2AgYXJlIHNwZWNpZmljIGZvciB0ZXN0aW5nIFJvdXRlIEluZm9ybWF0aW9uIE9wdGlvbnMgKFJJT3MpIGluIHRoZSBQeXRob24gdGVzdCBzdWl0ZSwgc3BlY2lmaWNhbGx5IGZvciB0aGUgYFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOYCByZWFzb24uIEhvd2V2ZXIsIHRoZSBmb3VuZGF0aW9uYWwgYFJUQV9ERUxfUkVBU09OYCBmdW5jdGlvbmFsaXR5IGFjdHVhbGx5IHdvcmtzIHdpdGhvdXQgdGhvc2UgZmxhZ3MgLSBmb3IgdGhpbmdzIGxpa2UgZXhwaXJlZCByb3V0ZXMgb3IgcmVndWxhciBSb3V0ZXIgQWR2ZXJ0aXNlbWVudHMuIEl04oCZcyBkZWZpbml0ZWx5IGJlbmVmaWNpYWwgdG8gaGF2ZSB0aG9zZSBjb25maWdzIGVuYWJsZWQgZm9yIHRob3JvdWdoIHRlc3Rpbmcgb2YgdGhlIFJJTyBhc3BlY3RzIHRob3VnaC4gU28gdGhleSBhcmUgaW1wb3J0YW50IGZvciBjb21wbGV0ZW5lc3MuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBhbnkgb3RoZXIgY29uZmlncyBhcmUgcmVsZXZhbnQuIGBDT05GSUdfTkVUYCBpcyBhIGdpdmVuLCBidXQgd2hhdCBhYm91dCBgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTYD8gSSBkb24mIzM5O3QgdGhpbmsgdGhhdCYjMzk7cyBzdHJpY3RseSByZXF1aXJlZCBmb3IgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LgoKTmV4dCwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgc2lnbmF0dXJlcyBvZiB0aGVzZSBrZXkgZnVuY3Rpb25zIHRvIGVuc3VyZSB0aGV5IGFsaWduIHdpdGggbXkgdW5kZXJzdGFuZGluZy4KCiogICBgZmliNl9kZWxgOiBgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pYCAtIExvb2tzIGdvb2QuCiogICBgaXA2X2RlbF9ydF9yZWFzb25gOiBgaW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKWAgLSBBbHNvIGdvb2QuCiogICBgaW5ldDZfcnRfZGVsX25vdGlmeWA6IGB2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilgIC0gQ29ycmVjdC4KCkFscmlnaHQsIHRoZXNlIGZvY3VzIHN5bWJvbHMgYXJlIGFsbCBhbGlnbmVkIHdpdGggdGhlIGV4cGVjdGVkIGludGVyZmFjZXMuIEkmIzM5O20gbm93IHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDE6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURVJfUFJFRiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFX0lORk8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDssCiAgICAmIzM0O2ZpYjZfZGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgUlRBX0RFTF9SRUFTT04gZm9yIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucywgbW9kaWZ5aW5nIGNvcmUgSVB2NiByb3V0aW5nIGFuZCBuZXRsaW5rIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpcyByZWFjaGFibGUgdmlhIHJvdXRlIGV4cGlyYXRpb24sIHJvdXRlciBhZHZlcnRpc2VtZW50cywgYW5kIG1hbnVhbCByb3V0ZSBkZWxldGlvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURVJfUFJFRiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFX0lORk8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDssCiAgICAmIzM0O2ZpYjZfZGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgUlRBX0RFTF9SRUFTT04gZm9yIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucywgbW9kaWZ5aW5nIGNvcmUgSVB2NiByb3V0aW5nIGFuZCBuZXRsaW5rIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpcyByZWFjaGFibGUgdmlhIHJvdXRlIGV4cGlyYXRpb24sIHJvdXRlciBhZHZlcnRpc2VtZW50cywgYW5kIG1hbnVhbCByb3V0ZSBkZWxldGlvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAxOjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDE6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIHRvIHJlcG9ydCB0aGUgcmVhc29uIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9ucy4gVGhlIGRlbGV0aW9uIHJlYXNvbiBpcyBwYXNzZWQgdGhyb3VnaCB0aGUgcm91dGluZyBzdWJzeXN0ZW0gYXMgYW4gZXhwbGljaXQgYGVudW0gcnRfZGVsX3JlYXNvbmAgdmFsdWUgKGUuZy4sIGBSVF9ERUxfUkVBU09OX1VOU1BFQ2AsIGBSVF9ERUxfUkVBU09OX0VYUElSRURgLCBgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV05gKS4gVGhpcyB2YWx1ZSBpcyB0aGVuIHNlcmlhbGl6ZWQgaW50byB0aGUgbmV0bGluayBtZXNzYWdlIHVzaW5nIGBubGFfcHV0X3UzMigpYC4gXG5cblNpbmNlIHRoZSBgZGVsX3JlYXNvbmAgaXMgcGFzc2VkIGJ5IHZhbHVlIGFzIGFuIGV4cGxpY2l0IGNvbnN0YW50IGluIGFsbCBtb2RpZmllZCBjYWxsIHNpdGVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSBzdGFjaywgaGVhcCwgb3IgcGFkZGluZyBieXRlcy4gVGhlIG5ldGxpbmsgYXR0cmlidXRlIGNvbnN0cnVjdGlvbiB2aWEgYG5sYV9wdXRfdTMyKClgIHNhZmVseSBoYW5kbGVzIHRoZSBzZXJpYWxpemF0aW9uIHdpdGhvdXQgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAobGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSBpbiB0aGlzIGNvZGUsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YjQ0NWJkMDJmNGY4ODQ5N2ViZGFkOTE4Nzk4YjhjODNkMTk2YTkxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgOCAwMToyMDoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKaW5kZXggMzMxOTVkYjk2NzQ2Yy4uMjUzMDM3ZWE1MTc2YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKQEAgLTc4LDYgJiM0Mzs3OCwyNyBAQCBkZWZpbml0aW9uczoKICAgICAgIC0KICAgICAgICAgbmFtZTogcnRhLXVzZWQKICAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IGRlbC1yZWFzb24KJiM0MzsgICAgdHlwZTogZW51bQomIzQzOyAgICBuYW1lLXByZWZpeDogcnQtZGVsLXJlYXNvbi0KJiM0MzsgICAgZW51bS1uYW1lOiBydC1kZWwtcmVhc29uCiYjNDM7ICAgIGRvYzogfAomIzQzOyAgICAgIFdoeSB0aGUga2VybmVsIGRlbGV0ZWQgYSByb3V0ZS4gTmV3IGNhdXNlcyBtYXkgYmUgYXBwZW5kZWQuIFRoZQomIzQzOyAgICAgIHZhbHVlIHNwYWNlIGlzIGZhbWlseS1hZ25vc3RpYywgYSB2YWx1ZSBpcyBuZXZlciByZWludGVycHJldGVkCiYjNDM7ICAgICAgcGVyIGFkZHJlc3MgZmFtaWx5LgomIzQzOyAgICBlbnRyaWVzOgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHVuc3BlYwomIzQzOyAgICAgICAgZG9jOiBUaGUgZGVsZXRpb24gcGF0aCBkb2VzIG5vdCByZWNvcmQgYSBjYXVzZS4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBleHBpcmVkCiYjNDM7ICAgICAgICBkb2M6IFRoZSBSVEZfRVhQSVJFUyBsaWZldGltZSByYW4gb3V0IGFuZCB0aGUgcm91dGUgd2FzIGdhcmJhZ2UKJiM0MzsgICAgICAgICAgY29sbGVjdGVkLgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHJhLXdpdGhkcmF3bgomIzQzOyAgICAgICAgZG9jOiBBIFJvdXRlciBBZHZlcnRpc2VtZW50IHdpdGhkcmV3IHRoZSByb3V0ZSB3aXRoIGEgemVybwomIzQzOyAgICAgICAgICBsaWZldGltZS4KIAogYXR0cmlidXRlLXNldHM6CiAgIC0KQEAgLTE4NSw2ICYjNDM7MjA2LDE4IEBAIGF0dHJpYnV0ZS1zZXRzOgogICAgICAgICB0eXBlOiB1MzIKICAgICAgICAgYnl0ZS1vcmRlcjogYmlnLWVuZGlhbgogICAgICAgICBkaXNwbGF5LWhpbnQ6IGhleAomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGRlbC1yZWFzb24KJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZW51bTogZGVsLXJlYXNvbgomIzQzOyAgICAgICAgZG9jOiB8CiYjNDM7ICAgICAgICAgIEVtaXR0ZWQgb25seSBvbiBSVE1fREVMUk9VVEUgbm90aWZpY2F0aW9ucywgYW5kIG9ubHkgd2hlbiB0aGUKJiM0MzsgICAgICAgICAgZGVsZXRpb24gcGF0aCByZWNvcmRzIGEgY2F1c2UuIEFuIGFic2VudCBhdHRyaWJ1dGUgbWVhbnMKJiM0MzsgICAgICAgICAgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdAomIzQzOyAgICAgICAgICByZWNvcmQgaXRzIGNhdXNlLCBjb25zdW1lcnMgbXVzdCB0cmVhdCBhYnNlbnQgYW5kIHVuc3BlYwomIzQzOyAgICAgICAgICBpZGVudGljYWxseS4gQ3VycmVudGx5IG9ubHkgSVB2NiBkZWxldGlvbiBwYXRocyByZWNvcmQgYQomIzQzOyAgICAgICAgICBjYXVzZS4gVGhlIGF0dHJpYnV0ZSBpcyBub3RpZmljYXRpb24tb25seSwgdGhlIGtlcm5lbCByZWplY3RzCiYjNDM7ICAgICAgICAgIGl0IGluIHJlcXVlc3RzLgogICAtCiAgICAgbmFtZTogbWV0cmljcwogICAgIG5hbWUtcHJlZml4OiBydGF4LQpAQCAtMjk5LDYgJiM0MzszMzIsNyBAQCBvcGVyYXRpb25zOgogICAgICAgICAgICAgLSBkcG9ydAogICAgICAgICAgICAgLSBuaC1pZAogICAgICAgICAgICAgLSBmbG93bGFiZWwKJiM0MzsgICAgICAgICAgICAtIGRlbC1yZWFzb24KICAgICAgIGR1bXA6CiAgICAgICAgIHJlcXVlc3Q6CiAgICAgICAgICAgdmFsdWU6IDI2CkBAIC0zMTMsNyAmIzQzOzM0NywzNSBAQCBvcGVyYXRpb25zOgogICAgICAgZG86CiAgICAgICAgIHJlcXVlc3Q6CiAgICAgICAgICAgdmFsdWU6IDI0Ci0gICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRycwomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOiAmYW1wO3JvdXRlLXJlcS1hdHRycwomIzQzOyAgICAgICAgICAgIC0gZHN0CiYjNDM7ICAgICAgICAgICAgLSBzcmMKJiM0MzsgICAgICAgICAgICAtIGlpZgomIzQzOyAgICAgICAgICAgIC0gb2lmCiYjNDM7ICAgICAgICAgICAgLSBnYXRld2F5CiYjNDM7ICAgICAgICAgICAgLSBwcmlvcml0eQomIzQzOyAgICAgICAgICAgIC0gcHJlZnNyYwomIzQzOyAgICAgICAgICAgIC0gbWV0cmljcwomIzQzOyAgICAgICAgICAgIC0gbXVsdGlwYXRoCiYjNDM7ICAgICAgICAgICAgLSBmbG93CiYjNDM7ICAgICAgICAgICAgLSBjYWNoZWluZm8KJiM0MzsgICAgICAgICAgICAtIHRhYmxlCiYjNDM7ICAgICAgICAgICAgLSBtYXJrCiYjNDM7ICAgICAgICAgICAgLSBtZmMtc3RhdHMKJiM0MzsgICAgICAgICAgICAtIHZpYQomIzQzOyAgICAgICAgICAgIC0gbmV3ZHN0CiYjNDM7ICAgICAgICAgICAgLSBwcmVmCiYjNDM7ICAgICAgICAgICAgLSBlbmNhcC10eXBlCiYjNDM7ICAgICAgICAgICAgLSBlbmNhcAomIzQzOyAgICAgICAgICAgIC0gZXhwaXJlcwomIzQzOyAgICAgICAgICAgIC0gcGFkCiYjNDM7ICAgICAgICAgICAgLSB1aWQKJiM0MzsgICAgICAgICAgICAtIHR0bC1wcm9wYWdhdGUKJiM0MzsgICAgICAgICAgICAtIGlwLXByb3RvCiYjNDM7ICAgICAgICAgICAgLSBzcG9ydAomIzQzOyAgICAgICAgICAgIC0gZHBvcnQKJiM0MzsgICAgICAgICAgICAtIG5oLWlkCiYjNDM7ICAgICAgICAgICAgLSBmbG93bGFiZWwKICAgICAtCiAgICAgICBuYW1lOiBkZWxyb3V0ZQogICAgICAgZG9jOiBEZWxldGUgYW4gZXhpc3Rpbmcgcm91dGUKQEAgLTMyMSw0ICYjNDM7MzgzLDIzIEBAIG9wZXJhdGlvbnM6CiAgICAgICBkbzoKICAgICAgICAgcmVxdWVzdDoKICAgICAgICAgICB2YWx1ZTogMjUKLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzCiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6ICpyb3V0ZS1yZXEtYXR0cnMKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZgomIzQzOyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS4KJiM0MzsgICAgICB2YWx1ZTogMjQKJiM0MzsgICAgICBub3RpZnk6IGdldHJvdXRlCiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBkZWxyb3V0ZS1udGYKJiM0MzsgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuCiYjNDM7ICAgICAgdmFsdWU6IDI1CiYjNDM7ICAgICAgbm90aWZ5OiBnZXRyb3V0ZQomIzQzOwomIzQzO21jYXN0LWdyb3VwczoKJiM0MzsgIGxpc3Q6CiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGUKJiM0MzsgICAgICB2YWx1ZTogNwomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlCiYjNDM7ICAgICAgdmFsdWU6IDExCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmgKaW5kZXggOWNkMjdlMWI5YjY5Mi4uMjMyMjg5YjQzOWMzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaApAQCAtNDY4LDcgJiM0Mzs0NjgsOCBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwKIAogaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCSAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7Ci1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTsKJiM0MztpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTsKIAogc3RhdGljIGlubGluZQogdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKQpAQCAtNTMyLDYgJiM0Mzs1MzMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwKICNlbmRpZgogdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiAJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0Mzt2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkJCSBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7CiAKIHZvaWQgZmliNl9hZ2VfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncywKIAkJCSB1bnNpZ25lZCBsb25nIG5vdyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCmluZGV4IDA5ZmZlMGYxM2NlNzUuLmNjMDQ1NzA1ODYyZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCkBAIC0xMjYsNiAmIzQzOzEyNiw4IEBAIGludCBpcHY2X3JvdXRlX2lvY3RsKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCwKIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsCiAJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIGludCBpcDZfaW5zX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpKTsKJiM0MztpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksCiYjNDM7CQkgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTsKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKaW5kZXggMjcyNjVmZDMxZTVmYy4uMzk4OGI1MWRiNTM5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaApAQCAtMzk5LDYgJiM0MzszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3QgewogCVJUQV9EUE9SVCwKIAlSVEFfTkhfSUQsCiAJUlRBX0ZMT1dMQUJFTCwKJiM0MzsJUlRBX0RFTF9SRUFTT04sCiAJX19SVEFfTUFYCiB9OwogCkBAIC00MDcsNiAmIzQzOzQwOCwzMCBAQCBlbnVtIHJ0YXR0cl90eXBlX3QgewogI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgJiM0MzsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBydG1zZykpKSkKICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKQogCiYjNDM7LyogUlRBX0RFTF9SRUFTT046IHdoeSB0aGUga2VybmVsIGRlbGV0ZWQgdGhlIHJvdXRlLiB1MzIuCiYjNDM7ICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvbgomIzQzOyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYQomIzQzOyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3QKJiM0MzsgKiB0cmVhdCAmIzM0O2Fic2VudCYjMzQ7IGFuZCAmIzM0O3Vuc3BlYyYjMzQ7IGlkZW50aWNhbGx5LiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC4KJiM0MzsgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLgomIzQzOyAqCiYjNDM7ICogVGhlIGF0dHJpYnV0ZSBpcyBub3RpZmljYXRpb24tb25seTogdGhlIGtlcm5lbCByZWplY3RzIGl0IGluCiYjNDM7ICogcmVxdWVzdHMsIHNvIGEgbm90aWZpY2F0aW9uIG11c3Qgbm90IGJlIGVjaG9lZCBiYWNrIHZlcmJhdGltLgomIzQzOyAqCiYjNDM7ICogVGhlIHZhbHVlIHNwYWNlIGlzIGZhbWlseS1hZ25vc3RpYzogYSB2YWx1ZSBtdXN0IG5ldmVyIGJlCiYjNDM7ICogcmVpbnRlcnByZXRlZCBwZXIgYWRkcmVzcyBmYW1pbHkuIEEgY2F1c2UgdGhhdCBvbmx5IG9uZSBmYW1pbHkgY2FuCiYjNDM7ICogcHJvZHVjZSBzdGlsbCBnZXRzIGl0cyBvd24gdmFsdWUgcmF0aGVyIHRoYW4gcmV1c2luZyBhbm90aGVyCiYjNDM7ICogZmFtaWx5JiMzOTtzLgomIzQzOyAqLwomIzQzO2VudW0gcnRfZGVsX3JlYXNvbiB7CiYjNDM7CVJUX0RFTF9SRUFTT05fVU5TUEVDLAkJLyogY2F1c2Ugbm90IHJlY29yZGVkICovCiYjNDM7CVJUX0RFTF9SRUFTT05fRVhQSVJFRCwJCS8qIFJURl9FWFBJUkVTIGxpZmV0aW1lIHJhbiBvdXQgKEdDKSAqLwomIzQzOwlSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiwJLyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqLwomIzQzOwlfX1JUX0RFTF9SRUFTT05fTUFYCiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIFJUX0RFTF9SRUFTT05fTUFYIChfX1JUX0RFTF9SRUFTT05fTUFYIC0gMSkKJiM0MzsKIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuCiAgKgogICogJiMzNDtzdHJ1Y3QgcnRuZXh0aG9wJiMzNDsgZGVzY3JpYmVzIGFsbCBuZWNlc3NhcnkgbmV4dGhvcCBpbmZvcm1hdGlvbiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IGY2ZmEyNzE1YjQ1MGIuLjlkODliZTdlMDU0NGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMjg3NCw3ICYjNDM7Mjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKQogCQlpZiAocnQpIHsKIAkJCS8qIEF1dG9jb25mIHByZWZpeCByb3V0ZSAqLwogCQkJaWYgKHZhbGlkX2xmdCA9PSAwKSB7Ci0JCQkJaXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7CiYjNDM7CQkJCWlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsCiYjNDM7CQkJCQkJICBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7CiAJCQkJcnQgPSBOVUxMOwogCQkJfSBlbHNlIHsKIAkJCQl0YWJsZSA9IHJ0LSZndDtmaWI2X3RhYmxlOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2ZpYi5jIGIvbmV0L2lwdjYvaXA2X2ZpYi5jCmluZGV4IGU5ZmM2OTJkNGYzYjIuLjNlMzgyYmExNTczZTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9maWIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfZmliLmMKQEAgLTE5NjcsNyAmIzQzOzE5NjcsOCBAQCBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsCiB9CiAKIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sCi0JCQkgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKJiM0MzsJCQkgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCQkgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgZmliNl9pbmZvICpsZWFmLCAqcmVwbGFjZV9ydCA9IE5VTEw7CiAJc3RydWN0IGZpYjZfd2Fsa2VyICp3OwpAQCAtMjA1NiwxMyAmIzQzOzIwNTcsMTQgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbiwKIAkJCWNhbGxfZmliNl9lbnRyeV9ub3RpZmllcnNfcmVwbGFjZShuZXQsIHJlcGxhY2VfcnQpOwogCX0KIAlpZiAoIWluZm8tJmd0O3NraXBfbm90aWZ5KQotCQlpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCk7CiYjNDM7CQlpbmV0Nl9ydF9kZWxfbm90aWZ5KHJ0LCBpbmZvLCBkZWxfcmVhc29uKTsKIAogCWZpYjZfaW5mb19yZWxlYXNlKHJ0KTsKIH0KIAogLyogTmVlZCB0byBvd24gdGFibGUtJmd0O3RiNl9sb2NrICovCi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQomIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiYjNDM7CSAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gaW5mby0mZ3Q7bmxfbmV0OwogCXN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHA7CkBAIC0yMDkxLDcgJiM0MzsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKIAkJaWYgKHJ0ID09IGN1cikgewogCQkJaWYgKGZpYjZfcmVxdWlyZXNfc3JjKGN1cikpCiAJCQkJZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tJmd0O25sX25ldCk7Ci0JCQlmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7CiYjNDM7CQkJZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJcnRwX25leHQgPSAmYW1wO2N1ci0mZ3Q7ZmliNl9uZXh0OwpAQCAtMjI1Myw3ICYjNDM7MjI1NSw3IEBAIHN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlciAqdykKIAkJcmVzID0gYy0mZ3Q7ZnVuYyhydCwgYy0mZ3Q7YXJnKTsKIAkJaWYgKHJlcyA9PSAtMSkgewogCQkJdy0mZ3Q7bGVhZiA9IHJ0OwotCQkJcmVzID0gZmliNl9kZWwocnQsICZhbXA7aW5mbyk7CiYjNDM7CQkJcmVzID0gZmliNl9kZWwocnQsICZhbXA7aW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJaWYgKHJlcykgewogI2lmIFJUNl9ERUJVRyAmZ3Q7PSAyCiAJCQkJcHJfZGVidWcoJiMzNDslczogZGVsIGZhaWxlZDogcnQ9JXBAJXAgZXJyPSVkXG4mIzM0OywKQEAgLTI0MDEsNyAmIzQzOzI0MDMsNyBAQCBzdGF0aWMgdm9pZCBmaWI2X2djX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwKIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIG4sICZhbXA7dGI2LSZndDt0YjZfZ2NfaGxpc3QsIGdjX2xpbmspCiAJCWlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpCi0JCQlmaWI2X2RlbChydCwgJmFtcDtpbmZvKTsKJiM0MzsJCQlmaWI2X2RlbChydCwgJmFtcDtpbmZvLCBSVF9ERUxfUkVBU09OX0VYUElSRUQpOwogfQogCiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuYwppbmRleCBmZTM2YjNmNTEyODUwLi4xMTExYzRlYmM2MWQ5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTEzNjEsNyAmIzQzOzEzNjEsOSBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi0mZ3Q7Y25mLnJhX2RlZnJ0cl9tZXRyaWM7CiAJLyogZGVsZXRlIHRoZSByb3V0ZSBpZiBsaWZldGltZSBpcyAwIG9yIGlmIG1ldHJpYyBuZWVkcyBjaGFuZ2UgKi8KIAlpZiAocnQgJmFtcDsmYW1wOyAobGlmZXRpbWUgPT0gMCB8fCBydC0mZ3Q7ZmliNl9tZXRyaWMgIT0gZGVmcnRyX3Vzcl9tZXRyaWMpKSB7Ci0JCWlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpOwomIzQzOwkJaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwKJiM0MzsJCQkJICBsaWZldGltZSA9PSAwID8gUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04gOgomIzQzOwkJCQkJCSAgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQlydCA9IE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCBmYzQyZDY3ZTU4MjI2Li4xNzA0MzU5ZDM5NjBkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTExMSw3ICYjNDM7MTExLDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAogCQkJIHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsCiAJCQkgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsCi0JCQkgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0MzsJCQkgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7CiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpOwpAQCAtMTAyMCw3ICYjNDM7MTAyMCw3IEBAIGludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sCiAJCQkJCWd3YWRkciwgZGV2KTsKIAogCWlmIChydCAmYW1wOyZhbXA7ICFsaWZldGltZSkgewotCQlpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTsKJiM0MzsJCWlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTsKIAkJcnQgPSBOVUxMOwogCX0KIApAQCAtMzk3Myw3ICYjNDM7Mzk3Myw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQomIzQzO3N0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCQllbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLSZndDtubF9uZXQ7CiAJc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlOwpAQCAtMzk4Niw3ICYjNDM7Mzk4Nyw3IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKIAogCXRhYmxlID0gcnQtJmd0O2ZpYjZfdGFibGU7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7dGFibGUtJmd0O3RiNl9sb2NrKTsKLQllcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7CiYjNDM7CWVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBkZWxfcmVhc29uKTsKIAlzcGluX3VubG9ja19iaCgmYW1wO3RhYmxlLSZndDt0YjZfbG9jayk7CiAKIG91dDoKQEAgLTQwMDEsNyAmIzQzOzQwMDIsMTUgQEAgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSkKIAkJLnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnkKIAl9OwogCi0JcmV0dXJuIF9faXA2X2RlbF9ydChydCwgJmFtcDtpbmZvKTsKJiM0MzsJcmV0dXJuIF9faXA2X2RlbF9ydChydCwgJmFtcDtpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAomIzQzOwkJICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmxfaW5mbyBpbmZvID0geyAubmxfbmV0ID0gbmV0IH07CiYjNDM7CiYjNDM7CXJldHVybiBfX2lwNl9kZWxfcnQocnQsICZhbXA7aW5mbywgZGVsX3JlYXNvbik7CiB9CiAKIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKQEAgLTQwMjgsNyAmIzQzOzQwMzcsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpCiAKIAkJCWlmIChydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwKIAkJCQkJICBOVUxMLCBOVUxMLCAwLCBSVE1fREVMUk9VVEUsCi0JCQkJCSAgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIDApICZsdDsgMCkgewomIzQzOwkJCQkJICBpbmZvLSZndDtwb3J0aWQsIHNlcSwgMCwKJiM0MzsJCQkJCSAgUlRfREVMX1JFQVNPTl9VTlNQRUMpICZsdDsgMCkgewogCQkJCWtmcmVlX3NrYihza2IpOwogCQkJCXNrYiA9IE5VTEw7CiAJCQl9IGVsc2UKQEAgLTQwNjQsMTMgJiM0Mzs0MDc0LDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZywKIAkJCQkJICZhbXA7cnQtJmd0O2ZpYjZfc2libGluZ3MsCiAJCQkJCSBmaWI2X3NpYmxpbmdzKSB7Ci0JCQllcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvKTsKJiM0MzsJCQllcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCX0KIAotCWVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTsKJiM0MzsJZXJyID0gZmliNl9kZWwocnQsIGluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YWJsZS0mZ3Q7dGI2X2xvY2spOwogb3V0X3B1dDoKQEAgLTQxOTYsNyAmIzQzOzQyMDYsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsCiAJCQkJaWYgKCFmaWI2X2luZm9faG9sZF9zYWZlKHJ0KSkKIAkJCQkJY29udGludWU7CiAKLQkJCQllcnIgPSAgX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2NmZy0mZ3Q7ZmNfbmxpbmZvKTsKJiM0MzsJCQkJZXJyID0gX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2NmZy0mZ3Q7ZmNfbmxpbmZvLAomIzQzOwkJCQkJCSAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChjZmctJmd0O2ZjX25oX2lkKQpAQCAtNDIxNSw3ICYjNDM7NDIyNiw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywKIAogCQkJLyogaWYgZ2F0ZXdheSB3YXMgc3BlY2lmaWVkIG9ubHkgZGVsZXRlIHRoZSBvbmUgaG9wICovCiAJCQlpZiAoY2ZnLSZndDtmY19mbGFncyAmYW1wOyBSVEZfR0FURVdBWSkKLQkJCQllcnIgPSBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8pOwomIzQzOwkJCQllcnIgPSBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8sCiYjNDM7CQkJCQkJICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJZWxzZQogCQkJCWVyciA9IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhydCwgY2ZnKTsKIAkJCWJyZWFrOwpAQCAtNTczOSw2ICYjNDM7NTc1MSw3IEBAIHN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKQogCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHJ0YV9jYWNoZWluZm8pKQogCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShUQ1BfQ0FfTkFNRV9NQVgpIC8qIFJUQVhfQ0NfQUxHTyAqLwogCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZSgxKSAvKiBSVEFfUFJFRiAqLwomIzQzOwkgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX0RFTF9SRUFTT04gKi8KIAkgICAgICAgJiM0MzsgbmV4dGhvcF9sZW47CiB9CiAKQEAgLTU3NzUsNyAmIzQzOzU3ODgsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCiAJCQkgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywKIAkJCSBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSwKLQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7CQkJIHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiB7CiAJc3RydWN0IHJ0Nl9pbmZvICpydDYgPSBkc3RfcnQ2X2luZm8oZHN0KTsKIAlzdHJ1Y3QgcnQ2a2V5ICpydDZfZHN0LCAqcnQ2X3NyYzsKQEAgLTU5NTQsNiAmIzQzOzU5NjcsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAocnRubF9wdXRfY2FjaGVpbmZvKHNrYiwgZHN0LCAwLCBleHBpcmVzLCBkc3QgPyBkc3QtJmd0O2Vycm9yIDogMCkgJmx0OyAwKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAomIzQzOwlpZiAoZGVsX3JlYXNvbiAhPSBSVF9ERUxfUkVBU09OX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIFJUQV9ERUxfUkVBU09OLCBkZWxfcmVhc29uKSkKJiM0MzsJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwomIzQzOwogCWlmIChubGFfcHV0X3U4KHNrYiwgUlRBX1BSRUYsIElQVjZfRVhUUkFDVF9QUkVGKHJ0Nl9mbGFncykpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIApAQCAtNjA1NSw3ICYjNDM7NjA3Miw4IEBAIHN0YXRpYyBpbnQgcnQ2X25oX2R1bXBfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9uaCAqbmgsIHZvaWQgKmFyZykKIAkJCQkJICAgICZhbXA7cnQ2X2V4LSZndDtydDZpLSZndDtkc3QsIE5VTEwsIE5VTEwsIDAsCiAJCQkJCSAgICBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgICBORVRMSU5LX0NCKGR1bXAtJmd0O2NiLSZndDtza2IpLnBvcnRpZCwKLQkJCQkJICAgIGR1bXAtJmd0O2NiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgdy0mZ3Q7ZmxhZ3MpOwomIzQzOwkJCQkJICAgIGR1bXAtJmd0O2NiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgdy0mZ3Q7ZmxhZ3MsCiYjNDM7CQkJCQkgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCkBAIC02MTAzLDcgJiM0Mzs2MTIxLDggQEAgaW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApCiAJCQlpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy0mZ3Q7c2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCQkJICAwLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgTkVUTElOS19DQihhcmctJmd0O2NiLSZndDtza2IpLnBvcnRpZCwKLQkJCQkJICBhcmctJmd0O2NiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgZmxhZ3MpKSB7CiYjNDM7CQkJCQkgIGFyZy0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCBmbGFncywKJiM0MzsJCQkJCSAgUlRfREVMX1JFQVNPTl9VTlNQRUMpKSB7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQljb3VudCYjNDM7JiM0Mzs7CkBAIC02MzM2LDEyICYjNDM7NjM1NSwxNCBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsCiAJCQkJCSAgICBpaWYsIFJUTV9ORVdST1VURSwKIAkJCQkJICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsCi0JCQkJCSAgICBubGgtJmd0O25sbXNnX3NlcSwgMCk7CiYjNDM7CQkJCQkgICAgbmxoLSZndDtubG1zZ19zZXEsIDAsCiYjNDM7CQkJCQkgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQllbHNlCiAJCQllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBkc3QsICZhbXA7Zmw2LmRhZGRyLAogCQkJCQkgICAgJmFtcDtmbDYuc2FkZHIsIGlpZiwgUlRNX05FV1JPVVRFLAogCQkJCQkgICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCwKLQkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwKTsKJiM0MzsJCQkJCSAgICBubGgtJmd0O25sbXNnX3NlcSwgMCwKJiM0MzsJCQkJCSAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJfSBlbHNlIHsKIAkJZXJyID0gLUVORVRVTlJFQUNIOwogCX0KQEAgLTYzNTcsOCAmIzQzOzYzNzgsOSBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKLQkJICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKQomIzQzO3N0YXRpYyB2b2lkIF9faW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsCiYjNDM7CQkJICAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsCiYjNDM7CQkJICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gaW5mby0mZ3Q7bmxfbmV0OwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC02Mzc3LDcgJiM0Mzs2Mzk5LDcgQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiAJCWdvdG8gZXJyb3V0OwogCiAJZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsCi0JCQkgICAgZXZlbnQsIGluZm8tJmd0O3BvcnRpZCwgc2VxLCBubG1fZmxhZ3MpOwomIzQzOwkJCSAgICBldmVudCwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIG5sbV9mbGFncywgZGVsX3JlYXNvbik7CiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCS8qIC1FTVNHU0laRSBpbXBsaWVzIG5lZWRlZCBzcGFjZSBncmV3IHVuZGVyIHVzLiAqLwpAQCAtNjM5OCw2ICYjNDM7NjQyMCwxOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKIAlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfUk9VVEUsIGVycik7CiB9CiAKJiM0Mzt2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCSAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncykKJiM0Mzt7CiYjNDM7CV9faW5ldDZfcnRfbm90aWZ5KGV2ZW50LCBydCwgaW5mbywgbmxtX2ZsYWdzLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiYjNDM7CQkJIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQomIzQzO3sKJiM0MzsJX19pbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCwgZGVsX3JlYXNvbik7CiYjNDM7fQomIzQzOwogdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCQkgICAgc3RydWN0IG5sX2luZm8gKmluZm8pCiB7CkBAIC02NDEwLDcgJiM0Mzs2NDQ0LDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCQlnb3RvIGVycm91dDsKIAogCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLAotCQkJICAgIFJUTV9ORVdST1VURSwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpOwomIzQzOwkJCSAgICBSVE1fTkVXUk9VVEUsIGluZm8tJmd0O3BvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLAomIzQzOwkJCSAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJLyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi8KIAkJV0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTsKQEAgLTY0NjMsNyAmIzQzOzY0OTgsNyBAQCB2b2lkIGZpYjZfaW5mb19od19mbGFnc19zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksCiAJfQogCiAJZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsCi0JCQkgICAgMCwgMCk7CiYjNDM7CQkJICAgIDAsIDAsIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQkvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqLwogCQlXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkKaW5kZXggZTU4YmRiZGM1OGVlYS4uMzQ5MzU4ODZiNmFkZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5CkBAIC0xNyw3ICYjNDM7MTcsNyBAQCBmcm9tIC51dGlscyBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIGZkX3JlYWRfdGltZW91dCwgY21kLCBia2csIGRlZmVyLCBcCiAgICAgd2FpdF9maWxlLCB0b29sLCB0YwogZnJvbSAuYnBmIGltcG9ydCBicGZfbWFwX3NldCwgYnBmX21hcF9kdW1wLCBicGZfcHJvZ19tYXBfaWRzCiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcCi0gICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseQomIzQzOyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHkKIGZyb20gLnlubCBpbXBvcnQgTmV0c2hhcGVyRmFtaWx5LCBEZXZsaW5rRmFtaWx5LCBQU1BGYW1pbHksIE5ldGxpbmsKIAogX19hbGxfXyA9IFsmIzM0O0tTUkMmIzM0OywKQEAgLTM0LDQgJiM0MzszNCw0IEBAIF9fYWxsX18gPSBbJiMzNDtLU1JDJiMzNDssCiAgICAgICAgICAgICYjMzQ7TmV0ZGV2U2ltJiMzNDssICYjMzQ7TmV0ZGV2U2ltRGV2JiMzNDssCiAgICAgICAgICAgICYjMzQ7TmV0c2hhcGVyRmFtaWx5JiMzNDssICYjMzQ7RGV2bGlua0ZhbWlseSYjMzQ7LCAmIzM0O1BTUEZhbWlseSYjMzQ7LCAmIzM0O05sRXJyb3ImIzM0OywKICAgICAgICAgICAgJiMzNDtZbmxGYW1pbHkmIzM0OywgJiMzNDtFdGh0b29sRmFtaWx5JiMzNDssICYjMzQ7TmV0ZGV2RmFtaWx5JiMzNDssICYjMzQ7UnRubEZhbWlseSYjMzQ7LAotICAgICAgICAgICAmIzM0O05sY3RybEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssICYjMzQ7TmV0bGluayYjMzQ7XQomIzQzOyAgICAgICAgICAgJiMzNDtObGN0cmxGYW1pbHkmIzM0OywgJiMzNDtSdG5sQWRkckZhbWlseSYjMzQ7LCAmIzM0O1J0bmxSb3V0ZUZhbWlseSYjMzQ7LCAmIzM0O05ldGxpbmsmIzM0O10KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkKaW5kZXggMmU1NjcwNjJhYTZjYy4uMDhkZWZmNzU2ZjI5YiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkKQEAgLTI5LDcgJiM0MzsyOSw3IEBAIGV4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm9yIGFzIGU6CiAKIF9fYWxsX18gPSBbCiAgICAgJiMzNDtObEVycm9yJiMzNDssICYjMzQ7TmxQb2xpY3kmIzM0OywgJiMzNDtOZXRsaW5rJiMzNDssICYjMzQ7WW5sRmFtaWx5JiMzNDssICYjMzQ7U1BFQ19QQVRIJiMzNDssCi0gICAgJiMzNDtFdGh0b29sRmFtaWx5JiMzNDssICYjMzQ7UnRubEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssCiYjNDM7ICAgICYjMzQ7RXRodG9vbEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxGYW1pbHkmIzM0OywgJiMzNDtSdG5sQWRkckZhbWlseSYjMzQ7LCAmIzM0O1J0bmxSb3V0ZUZhbWlseSYjMzQ7LAogICAgICYjMzQ7TmV0ZGV2RmFtaWx5JiMzNDssICYjMzQ7TmV0c2hhcGVyRmFtaWx5JiMzNDssICYjMzQ7TmxjdHJsRmFtaWx5JiMzNDssICYjMzQ7RGV2bGlua0ZhbWlseSYjMzQ7LAogICAgICYjMzQ7UFNQRmFtaWx5JiMzNDssCiBdCkBAIC01NCw2ICYjNDM7NTQsMTEgQEAgY2xhc3MgUnRubEFkZHJGYW1pbHkoWW5sRmFtaWx5KToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O3J0LWFkZHIueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JiMzOTsmIzM5OywgcmVjdl9zaXplPXJlY3Zfc2l6ZSkKIAomIzQzO2NsYXNzIFJ0bmxSb3V0ZUZhbWlseShZbmxGYW1pbHkpOgomIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOgomIzQzOyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O3J0LXJvdXRlLnlhbWwmIzM5OykpLmFzX3Bvc2l4KCksCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0mIzM5OyYjMzk7LCByZWN2X3NpemU9cmVjdl9zaXplKQomIzQzOwogY2xhc3MgTmV0ZGV2RmFtaWx5KFlubEZhbWlseSk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O25ldGRldi55YW1sJiMzOTspKS5hc19wb3NpeCgpLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKaW5kZXggMGM2N2M3YzAwZDg0MS4uNWNjM2ViZGNmMDhkZSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CkBAIC01LDcgJiM0Mzs1LDkgQEAgaW1wb3J0IHNvY2tldAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHRpbWUKIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXgKLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBkZWZlcgogCiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtceGUwXHgwMFx4MDBceDAxJiMzOTsKIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJiMzOTtceGVmXHgwMVx4MDFceDAxJiMzOTsKQEAgLTEzNCw4ICYjNDM7MTM2LDE4OSBAQCBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC0mZ3Q7IE5vbmU6CiAgICAga3NmdF90cnVlKGYmIzM0O2luZXQge2lmbmFtZX0gZm9yd2FyZGluZyBvbiYjMzQ7IGluIGNtZF9vYmouc3Rkb3V0LAogICAgICAgICAgICAgICBmJiMzNDtObyAmIzM5O2ZvcndhcmRpbmcgb24mIzM5OyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX0mIzM0OykKIAomIzQzO2RlZiBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpOgomIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICBydG5sID0gUnRubFJvdXRlRmFtaWx5KCkKJiM0MzsgICAgZGVmZXIocnRubC5jbG9zZSkKJiM0MzsgICAgcnRubC5udGZfc3Vic2NyaWJlKCYjMzQ7cnRubGdycC1pcHY2LXJvdXRlJiMzNDspCiYjNDM7ICAgIHJldHVybiBydG5sCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF93YWl0X3JvdXRlX250ZihydG5sLCBuYW1lLCBkc3RfbGVuLCBkc3Q9Tm9uZSwgZGVhZGxpbmU9MTApOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKToKJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgYXR0cnMgPSBtc2dbJiMzOTttc2cmIzM5O10KJiM0MzsgICAgICAgIGlmIGF0dHJzWyYjMzk7cnRtLWRzdC1sZW4mIzM5O10gIT0gZHN0X2xlbjoKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgaWYgZHN0IGlzIG5vdCBOb25lIGFuZCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykgIT0gZHN0OgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICByZXR1cm4gYXR0cnMKJiM0MzsgICAgcmV0dXJuIE5vbmUKJiM0MzsKJiM0MzsKJiM0MztkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O0dhdGhlciBhdHRycyBvZiBtYXRjaGluZyBub3RpZmljYXRpb25zLCBrZXllZCBieSAoZHN0X2xlbiwgZHN0KS4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgc2VlbiA9IHt9CiYjNDM7ICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6CiYjNDM7ICAgICAgICBpZiBtc2dbJiMzOTtuYW1lJiMzOTtdICE9IG5hbWU6CiYjNDM7ICAgICAgICAgICAgY29udGludWUKJiM0MzsgICAgICAgIGF0dHJzID0gbXNnWyYjMzk7bXNnJiMzOTtdCiYjNDM7ICAgICAgICBrZXkgPSAoYXR0cnNbJiMzOTtydG0tZHN0LWxlbiYjMzk7XSwgYXR0cnMuZ2V0KCYjMzk7ZHN0JiMzOTspKQomIzQzOyAgICAgICAgaWYga2V5IGluIHdhbnQ6CiYjNDM7ICAgICAgICAgICAgc2VlbltrZXldID0gYXR0cnMKJiM0MzsgICAgICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOgomIzQzOyAgICAgICAgICAgICAgICBicmVhawomIzQzOyAgICByZXR1cm4gc2VlbgomIzQzOwomIzQzOwomIzQzO2RlZiBfd3JpdGVfaXB2Nl9zeXNjdGwobmFtZSwgdmFsdWUpOgomIzQzOyAgICB3aXRoIG9wZW4oZiYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY2L3tuYW1lfSYjMzQ7LCAmIzM0O3cmIzM0OykgYXMgZjoKJiM0MzsgICAgICAgIGYud3JpdGUoZiYjMzQ7e3ZhbHVlfVxuJiMzNDspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkKCkgLSZndDsgTm9uZToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7QW4gZXhwaXJlZCByb3V0ZSByZXBvcnRzIFJUQV9ERUxfUkVBU09OID09IGV4cGlyZWQuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczoKJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpCiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7cm91dGUvZ2NfaW50ZXJ2YWwmIzM0OywgMikKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teSYjMzQ7LCBucz1zdHIobnMpKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkZXYgZHVtbXkxIHVwJiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0Oy02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDImIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsKJiM0MzsgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIDY0LCAmIzM5OzIwMDE6ZGI4OjI6OiYjMzk7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmU9MTUpCiYjNDM7ICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCAmIzM0O25vIFJUTV9ERUxST1VURSBmb3IgdGhlIGV4cGlyZWQgcm91dGUmIzM0OykKJiM0MzsgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCYjMzk7ZGVsLXJlYXNvbiYjMzk7KSwgJiMzOTtleHBpcmVkJiMzOTspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIGxpZmV0aW1lLCByaW89Tm9uZSwgcGlvPU5vbmUpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtUaGUga2VybmVsIGZpbGxzIGluIHRoZSBJQ01QdjYgY2hlY2tzdW0gb24gcmF3IElDTVB2NiBzb2NrZXRzLiYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICAjIHR5cGUsIGNvZGUsIGNrc3VtLCBob3AgbGltaXQsIGZsYWdzLCByb3V0ZXIgbGlmZXRpbWUsCiYjNDM7ICAgICMgcmVhY2hhYmxlIHRpbWUsIHJldHJhbnMgdGltZXIKJiM0MzsgICAgcmEgPSBzdHJ1Y3QucGFjaygmIzM5OyFCQkhCQkhJSSYjMzk7LCAxMzQsIDAsIDAsIDY0LCAwLCBsaWZldGltZSwgMCwgMCkKJiM0MzsgICAgaWYgcmlvIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgcHJlZml4LCBwbGVuLCByaW9fbGlmZXRpbWUgPSByaW8KJiM0MzsgICAgICAgICMgUkZDIDQxOTEgcm91dGUgaW5mb3JtYXRpb24gb3B0aW9uLCAvNjQgcHJlZml4ICg4IGJ5dGVzKQomIzQzOyAgICAgICAgcmEgJiM0Mzs9IHN0cnVjdC5wYWNrKCYjMzk7IUJCQkJJJiMzOTssIDI0LCAyLCBwbGVuLCAwLCByaW9fbGlmZXRpbWUpCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClbOjhdCiYjNDM7ICAgIGlmIHBpbyBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgIHByZWZpeCwgcGxlbiwgdmFsaWRfbGZ0ID0gcGlvCiYjNDM7ICAgICAgICAjIFJGQyA0ODYxIHByZWZpeCBpbmZvcm1hdGlvbiBvcHRpb24sIG9uLWxpbmsgb25seSAoTCBzZXQsIEEgY2xlYXIpCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc3RydWN0LnBhY2soJiMzOTshQkJCQklJSSYjMzk7LCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeCkKJiM0MzsgICAgc29jay5zZW5kdG8ocmEsICgmIzM5O2ZmMDI6OjEmIzM5OywgMCwgMCwgaWZpbmRleCkpCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9yYV9yb3V0ZXJfc29jayhuc19yLCBpZm5hbWUpOgomIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKToKJiM0MzsgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQUFJPVE9fSUNNUFY2KQomIzQzOyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpCiYjNDM7ICAgICAgICBkZWZlcihzb2NrLmNsb3NlKQomIzQzOyAgICAgICAgcmV0dXJuIHNvY2ssIHNvY2tldC5pZl9uYW1ldG9pbmRleChpZm5hbWUpCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHdhbnQsICoqcmFfb3B0cyk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBTZW5kaW5nIGZhaWxzIHdpdGggRUFERFJOT1RBVkFJTCB3aGlsZSB0aGUgcm91dGVyJiMzOTtzIGxpbmstbG9jYWwKJiM0MzsgICAgYWRkcmVzcyBpcyBzdGlsbCB0ZW50YXRpdmUuIGFkZHJjb25mX2RhZF9zdGFydCgpIG9ubHkgcXVldWVzCiYjNDM7ICAgIGFkZHJjb25mX2RhZF93b3JrKCksIGFuZCBJRkFfRl9URU5UQVRJVkUgaXMgY2xlYXJlZCB3aGVuIHRoYXQgd29yawomIzQzOyAgICBpdGVtIHJ1bnMsIHNvIHJldHJ5IHVudGlsIGl0IGRvZXMuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBzZWVuID0ge30KJiM0MzsgICAgZm9yIF8gaW4gcmFuZ2UoMTApOgomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cykKJiM0MzsgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgomIzQzOyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKQomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7bmV3cm91dGUtbnRmJiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZXQoc2Vlbi5rZXlzKCkpLCBkZWFkbGluZT0yKSkKJiM0MzsgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6CiYjNDM7ICAgICAgICAgICAgYnJlYWsKJiM0MzsgICAgcmV0dXJuIHNlZW4KJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBSb3V0ZXMgd2l0aGRyYXduIGJ5IGEgemVyby1saWZldGltZSBSQSAocm91dGVyIGxpZmV0aW1lLCBSRkMgNDg2MQomIzQzOyAgICBQSU8sIFJGQyA0MTkxIFJJTykgcmVwb3J0IFJUQV9ERUxfUkVBU09OID09IHJhLXdpdGhkcmF3bi4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgICMgKHJ0bS1kc3QtbGVuLCBkc3QpOyB0aGUgZGVmYXVsdCByb3V0ZSBjYXJyaWVzIG5vIFJUQV9EU1QKJiM0MzsgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7KSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7KX0KJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjoKJiM0MzsgICAgICAgIGlwKGYmIzM0O2xpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfSYjMzQ7KQomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6CiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7Y29uZi92ZXRoMC9hY2NlcHRfcmEmIzM0OywgMikKJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtjb25mL3ZldGgwL2ZvcndhcmRpbmcmIzM0OywgMCkKJiM0MzsgICAgICAgICAgICB0cnk6CiYjNDM7ICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW4mIzM0OywgNjQpCiYjNDM7ICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgomIzQzOyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7bm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GTyYjMzQ7KQomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6CiYjNDM7ICAgICAgICAgICAgIyBza2lwIHRoZSBEQUQgcHJvYmUgc28gdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsIHNvdXJjZSBvbmx5CiYjNDM7ICAgICAgICAgICAgIyBoYXMgdG8gd2FpdCBmb3IgYWRkcmNvbmZfZGFkX3dvcmsoKSB0byBjbGVhciBJRkFfRl9URU5UQVRJVkUKJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtjb25mL3ZldGgxL2FjY2VwdF9kYWQmIzM0OywgMCkKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBzZXQgZGV2IHZldGgwIHVwJiMzNDssIG5zPXN0cihuc19oKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBzZXQgZGV2IHZldGgxIHVwJiMzNDssIG5zPXN0cihuc19yKSkKJiM0MzsKJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnNfaCkKJiM0MzsgICAgICAgIHNvY2ssIGlmaW5kZXggPSBfcmFfcm91dGVyX3NvY2sobnNfciwgJiMzNDt2ZXRoMSYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAgc2VlbiA9IF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHJvdXRlcywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZldGltZT0xODAwLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbz0oJiMzOTsyMDAxOmRiODo1OjomIzM5OywgNjQsIDYwMCksCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlvPSgmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7LCA2NCwgNjAwKSkKJiM0MzsgICAgICAgIGtzZnRfZXEoc2V0KHNlZW4pLCByb3V0ZXMsICYjMzQ7bm90IGFsbCBSQSByb3V0ZXMgd2VyZSBpbnN0YWxsZWQmIzM0OykKJiM0MzsgICAgICAgIGlmIHNldChzZWVuKSAhPSByb3V0ZXM6CiYjNDM7ICAgICAgICAgICAgcmV0dXJuCiYjNDM7CiYjNDM7ICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAwLCByaW89KCYjMzk7MjAwMTpkYjg6NTo6JiMzOTssIDY0LCAwKSwKJiM0MzsgICAgICAgICAgICAgICAgIHBpbz0oJiMzOTsyMDAxOmRiODo2OjomIzM5OywgNjQsIDApKQomIzQzOyAgICAgICAgc2VlbiA9IF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5Oywgcm91dGVzKQomIzQzOyAgICAgICAgZm9yIGtleSBpbiByb3V0ZXM6CiYjNDM7ICAgICAgICAgICAgYXR0cnMgPSBzZWVuLmdldChrZXkpCiYjNDM7ICAgICAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgZiYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciB7a2V5fSYjMzQ7KQomIzQzOyAgICAgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgmIzM5O2RlbC1yZWFzb24mIzM5OyksICYjMzk7cmEtd2l0aGRyYXduJiMzOTspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgQSBkZWxldGlvbiBwYXRoIHRoYXQgcmVjb3JkcyBubyBjYXVzZSAoaGVyZSBhIHVzZXJzcGFjZSByZXF1ZXN0KQomIzQzOyAgICBtdXN0IG5vdCBjYXJyeSBSVEFfREVMX1JFQVNPTiBhdCBhbGwuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6CiYjNDM7ICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15JiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGRldiBkdW1teTEgdXAmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7LTYgcm91dGUgYWRkIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxJiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0Oy02IHJvdXRlIGRlbCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MSYjMzQ7LCBucz1zdHIobnMpKQomIzQzOwomIzQzOyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5OywgNjQsICYjMzk7MjAwMTpkYjg6MTo6JiMzOTspCiYjNDM7ICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCAmIzM0O25vIFJUTV9ERUxST1VURSBmb3IgMjAwMTpkYjg6MTo6LzY0JiMzNDspCiYjNDM7ICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICBrc2Z0X25vdF9pbigmIzM5O2RlbC1yZWFzb24mIzM5OywgYXR0cnMsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDt1c2VyIGRlbGV0aW9uIG11c3Qgbm90IGNhcnJ5IGRlbC1yZWFzb24mIzM0OykKJiM0MzsKJiM0MzsKIGRlZiBtYWluKCkgLSZndDsgTm9uZToKLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pCiYjNDM7ICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LAomIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQsCiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLAomIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pCiAgICAga3NmdF9leGl0KCkKIAogaWYgX19uYW1lX18gPT0gJiMzNDtfX21haW5fXyYjMzQ7Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDE6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNTQKCQkJCQkJCW91dHB1dDogMjU4CgkJCQkJCQl0aG91Z2h0czogMTk4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBFdmFsdWF0aW9uOiBJUHY2IFJvdXRlIERlbGV0aW9uIFJlYXNvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHNlcmllcyB0aGF0IGludHJvZHVjZXMgYSBgZGVsX3JlYXNvbmAgbmV0bGluayBhdHRyaWJ1dGUgZm9yIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucy4gVGhlIHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24/CgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSB0aGUgY29kZSBmb3IgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgdGhhdCBLTVNBTiBjb3VsZCBjYXRjaC4gVGhlIHBhdGNoJiMzOTtzIGNvcmUgaW50cm9kdWNlcyBhbiBgUlRBX0RFTF9SRUFTT05gIGF0dHJpYnV0ZSBhbmQgYW4gYXNzb2NpYXRlZCBgZW51bSBydF9kZWxfcmVhc29uYC4gVGhpcyBgZGVsX3JlYXNvbmAgaXMgdGhlbiBwbHVtYmVkIHRocm91Z2ggdmFyaW91cyBmdW5jdGlvbnMgaW4gdGhlIElQdjYgcm91dGluZyBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIHBhc3NlcyBgZGVsX3JlYXNvbmAgdmlhIGZ1bmN0aW9uIGFyZ3VtZW50cyAoZS5nLiwgaW4gYHJ0Nl9maWxsX25vZGVgLCBgZmliNl9kZWxgLCBgaXA2X2RlbF9ydF9yZWFzb25gKS4KClRoZSBjcml0aWNhbCBwb2ludCBoZXJlIGlzIHRoYXQgYGRlbF9yZWFzb25gIGlzICpwYXNzZWQgYnkgdmFsdWUqIGFuZCBpcyBhbHdheXMgYW4gKmV4cGxpY2l0bHkgYXNzaWduZWQgZW51bSB2YWx1ZSogKGxpa2UgYFJUX0RFTF9SRUFTT05fVU5TUEVDYCwgYFJUX0RFTF9SRUFTT05fRVhQSVJFRGAsIG9yIGBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTmApLiBJdCBpcyAqbm90KiByZWFkIGZyb20gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLiBXZSBhcmUgYWxzbyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBzdHJ1Y3RzIHRoYXQgd291bGQgYmUgc2VudCB0byB1c2VyIHNwYWNlLiBJdCBpcyBkaXJlY3RseSBwbGFjZWQgaW50byB0aGUgbmV0bGluayBidWZmZXIgdXNpbmcgYG5sYV9wdXRfdTMyYC4KCkkmIzM5O20gY2hlY2tpbmcgaWYgd2UgY2FuIGdldCBhIHNuZWFraWx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdG8gdXNlciBzcGFjZSwgYnV0IHRoZXJlIGlzbiYjMzk7dCBvbmUuIFRoZSBuZXRsaW5rIGF0dHJpYnV0ZSBpcyBjb25zdHJ1Y3RlZCB1c2luZyBgbmxhX3B1dF91MzJgLCB3aGljaCBoYW5kbGVzIHRoZSBtZW1vcnkgYW5kIGlzIGNvbXBsZXRlbHkgc2FmZS4gVGhlIGBkZWxfcmVhc29uYCBwYXJhbWV0ZXIgaXMgcGFzc2VkIGJ5IHZhbHVlIGFuZCBpcyBzZXQgdG8gYSBjb25zdGFudC4KCkkmIzM5O20gYWxzbyBkb3VibGUtY2hlY2tpbmcgdGhlIGNhbGxlcnMgdG8gZW5zdXJlIGFsbCBmdW5jdGlvbiBjYWxscyB1c2UgZXhwbGljaXQgZW51bSB2YWx1ZXMuIEkmIzM5O3ZlIHNjYW5uZWQgdGhlIHZhcmlvdXMgbG9jYXRpb25zIGluIHRoZSBjb2RlIChlLmcuLCBgX19pcDZfZGVsX3J0X3NpYmxpbmdzYCwgYGZpYjZfZGVsYCwgZXRjLikgYW5kIGNvbmZpcm1lZCB0aGF0IGNvbnN0YW50IGVudW0gdmFsdWVzIGFyZSBiZWluZyBwYXNzZWQgZXZlcnl3aGVyZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW52b2x2ZWQuCgpHaXZlbiB0aGUgZXhwbGljaXQgbmF0dXJlIG9mIHRoZSB2YWx1ZXMgYW5kIHRoZSB1c2Ugb2Ygc3RhbmRhcmQsIHNhZmUgbmV0bGluayBmdW5jdGlvbnMsIEkgY29uY2x1ZGUgdGhhdCB0aGVyZSBpcyAqbm8qIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBpZGVudGlmeSBhbnkgaXNzdWVzLiBUaGVyZWZvcmUsIG5vIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5lZWRlZCBmb3IgdGhpcyBwYXRjaC4gSSBjYW4gY29uZmlkZW50bHkgc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgdG8gcmVwb3J0IHRoZSByZWFzb24gZm9yIElQdjYgcm91dGUgZGVsZXRpb25zLiBUaGUgZGVsZXRpb24gcmVhc29uIGlzIHBhc3NlZCB0aHJvdWdoIHRoZSByb3V0aW5nIHN1YnN5c3RlbSBhcyBhbiBleHBsaWNpdCBgZW51bSBydF9kZWxfcmVhc29uYCB2YWx1ZSAoZS5nLiwgYFJUX0RFTF9SRUFTT05fVU5TUEVDYCwgYFJUX0RFTF9SRUFTT05fRVhQSVJFRGAsIGBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTmApLiBUaGlzIHZhbHVlIGlzIHRoZW4gc2VyaWFsaXplZCBpbnRvIHRoZSBuZXRsaW5rIG1lc3NhZ2UgdXNpbmcgYG5sYV9wdXRfdTMyKClgLiBcblxuU2luY2UgdGhlIGBkZWxfcmVhc29uYCBpcyBwYXNzZWQgYnkgdmFsdWUgYXMgYW4gZXhwbGljaXQgY29uc3RhbnQgaW4gYWxsIG1vZGlmaWVkIGNhbGwgc2l0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nIGJ5dGVzLiBUaGUgbmV0bGluayBhdHRyaWJ1dGUgY29uc3RydWN0aW9uIHZpYSBgbmxhX3B1dF91MzIoKWAgc2FmZWx5IGhhbmRsZXMgdGhlIHNlcmlhbGl6YXRpb24gd2l0aG91dCBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgdG8gcmVwb3J0IHRoZSByZWFzb24gZm9yIElQdjYgcm91dGUgZGVsZXRpb25zLiBUaGUgZGVsZXRpb24gcmVhc29uIGlzIHBhc3NlZCB0aHJvdWdoIHRoZSByb3V0aW5nIHN1YnN5c3RlbSBhcyBhbiBleHBsaWNpdCBgZW51bSBydF9kZWxfcmVhc29uYCB2YWx1ZSAoZS5nLiwgYFJUX0RFTF9SRUFTT05fVU5TUEVDYCwgYFJUX0RFTF9SRUFTT05fRVhQSVJFRGAsIGBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTmApLiBUaGlzIHZhbHVlIGlzIHRoZW4gc2VyaWFsaXplZCBpbnRvIHRoZSBuZXRsaW5rIG1lc3NhZ2UgdXNpbmcgYG5sYV9wdXRfdTMyKClgLiBcblxuU2luY2UgdGhlIGBkZWxfcmVhc29uYCBpcyBwYXNzZWQgYnkgdmFsdWUgYXMgYW4gZXhwbGljaXQgY29uc3RhbnQgaW4gYWxsIG1vZGlmaWVkIGNhbGwgc2l0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nIGJ5dGVzLiBUaGUgbmV0bGluayBhdHRyaWJ1dGUgY29uc3RydWN0aW9uIHZpYSBgbmxhX3B1dF91MzIoKWAgc2FmZWx5IGhhbmRsZXMgdGhlIHNlcmlhbGl6YXRpb24gd2l0aG91dCBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAxOjIwOjE0LjI2MzQyNzc4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2Mjk5MjY5MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUk9VVEVSX1BSRUZcIixcbiAgICBcIklQVjZfUk9VVEVfSU5GT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gICAgXCJpbmV0Nl9ydF9kZWxfbm90aWZ5XCIsXG4gICAgXCJmaWI2X2RlbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIHRvIHJlcG9ydCB0aGUgcmVhc29uIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9ucy4gVGhlIGRlbGV0aW9uIHJlYXNvbiBpcyBwYXNzZWQgdGhyb3VnaCB0aGUgcm91dGluZyBzdWJzeXN0ZW0gYXMgYW4gZXhwbGljaXQgYGVudW0gcnRfZGVsX3JlYXNvbmAgdmFsdWUgKGUuZy4sIGBSVF9ERUxfUkVBU09OX1VOU1BFQ2AsIGBSVF9ERUxfUkVBU09OX0VYUElSRURgLCBgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV05gKS4gVGhpcyB2YWx1ZSBpcyB0aGVuIHNlcmlhbGl6ZWQgaW50byB0aGUgbmV0bGluayBtZXNzYWdlIHVzaW5nIGBubGFfcHV0X3UzMigpYC4gXFxuXFxuU2luY2UgdGhlIGBkZWxfcmVhc29uYCBpcyBwYXNzZWQgYnkgdmFsdWUgYXMgYW4gZXhwbGljaXQgY29uc3RhbnQgaW4gYWxsIG1vZGlmaWVkIGNhbGwgc2l0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nIGJ5dGVzLiBUaGUgbmV0bGluayBhdHRyaWJ1dGUgY29uc3RydWN0aW9uIHZpYSBgbmxhX3B1dF91MzIoKWAgc2FmZWx5IGhhbmRsZXMgdGhlIHNlcmlhbGl6YXRpb24gd2l0aG91dCBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBSVEFfREVMX1JFQVNPTiBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLCBtb2RpZnlpbmcgY29yZSBJUHY2IHJvdXRpbmcgYW5kIG5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gbG9naWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgcm91dGUgZXhwaXJhdGlvbiwgcm91dGVyIGFkdmVydGlzZW1lbnRzLCBhbmQgbWFudWFsIHJvdXRlIGRlbGV0aW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDE6MjA6MTQuMjYzNDMzMjI0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzEwODY5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3YjQ0NWJkMDJmNGY4ODQ5N2ViZGFkOTE4Nzk4YjhjODNkMTk2YTkxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDggMDE6MjA6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxcbmluZGV4IDMzMTk1ZGI5Njc0NmMuLjI1MzAzN2VhNTE3NmEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxcbkBAIC03OCw2ICs3OCwyNyBAQCBkZWZpbml0aW9uczpcXG4gICAgICAgLVxcbiAgICAgICAgIG5hbWU6IHJ0YS11c2VkXFxuICAgICAgICAgdHlwZTogdTMyXFxuKyAgLVxcbisgICAgbmFtZTogZGVsLXJlYXNvblxcbisgICAgdHlwZTogZW51bVxcbisgICAgbmFtZS1wcmVmaXg6IHJ0LWRlbC1yZWFzb24tXFxuKyAgICBlbnVtLW5hbWU6IHJ0LWRlbC1yZWFzb25cXG4rICAgIGRvYzogfFxcbisgICAgICBXaHkgdGhlIGtlcm5lbCBkZWxldGVkIGEgcm91dGUuIE5ldyBjYXVzZXMgbWF5IGJlIGFwcGVuZGVkLiBUaGVcXG4rICAgICAgdmFsdWUgc3BhY2UgaXMgZmFtaWx5LWFnbm9zdGljLCBhIHZhbHVlIGlzIG5ldmVyIHJlaW50ZXJwcmV0ZWRcXG4rICAgICAgcGVyIGFkZHJlc3MgZmFtaWx5LlxcbisgICAgZW50cmllczpcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IHVuc3BlY1xcbisgICAgICAgIGRvYzogVGhlIGRlbGV0aW9uIHBhdGggZG9lcyBub3QgcmVjb3JkIGEgY2F1c2UuXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBleHBpcmVkXFxuKyAgICAgICAgZG9jOiBUaGUgUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCBhbmQgdGhlIHJvdXRlIHdhcyBnYXJiYWdlXFxuKyAgICAgICAgICBjb2xsZWN0ZWQuXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiByYS13aXRoZHJhd25cXG4rICAgICAgICBkb2M6IEEgUm91dGVyIEFkdmVydGlzZW1lbnQgd2l0aGRyZXcgdGhlIHJvdXRlIHdpdGggYSB6ZXJvXFxuKyAgICAgICAgICBsaWZldGltZS5cXG4gXFxuIGF0dHJpYnV0ZS1zZXRzOlxcbiAgIC1cXG5AQCAtMTg1LDYgKzIwNiwxOCBAQCBhdHRyaWJ1dGUtc2V0czpcXG4gICAgICAgICB0eXBlOiB1MzJcXG4gICAgICAgICBieXRlLW9yZGVyOiBiaWctZW5kaWFuXFxuICAgICAgICAgZGlzcGxheS1oaW50OiBoZXhcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGRlbC1yZWFzb25cXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBlbnVtOiBkZWwtcmVhc29uXFxuKyAgICAgICAgZG9jOiB8XFxuKyAgICAgICAgICBFbWl0dGVkIG9ubHkgb24gUlRNX0RFTFJPVVRFIG5vdGlmaWNhdGlvbnMsIGFuZCBvbmx5IHdoZW4gdGhlXFxuKyAgICAgICAgICBkZWxldGlvbiBwYXRoIHJlY29yZHMgYSBjYXVzZS4gQW4gYWJzZW50IGF0dHJpYnV0ZSBtZWFuc1xcbisgICAgICAgICAgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdFxcbisgICAgICAgICAgcmVjb3JkIGl0cyBjYXVzZSwgY29uc3VtZXJzIG11c3QgdHJlYXQgYWJzZW50IGFuZCB1bnNwZWNcXG4rICAgICAgICAgIGlkZW50aWNhbGx5LiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhXFxuKyAgICAgICAgICBjYXVzZS4gVGhlIGF0dHJpYnV0ZSBpcyBub3RpZmljYXRpb24tb25seSwgdGhlIGtlcm5lbCByZWplY3RzXFxuKyAgICAgICAgICBpdCBpbiByZXF1ZXN0cy5cXG4gICAtXFxuICAgICBuYW1lOiBtZXRyaWNzXFxuICAgICBuYW1lLXByZWZpeDogcnRheC1cXG5AQCAtMjk5LDYgKzMzMiw3IEBAIG9wZXJhdGlvbnM6XFxuICAgICAgICAgICAgIC0gZHBvcnRcXG4gICAgICAgICAgICAgLSBuaC1pZFxcbiAgICAgICAgICAgICAtIGZsb3dsYWJlbFxcbisgICAgICAgICAgICAtIGRlbC1yZWFzb25cXG4gICAgICAgZHVtcDpcXG4gICAgICAgICByZXF1ZXN0OlxcbiAgICAgICAgICAgdmFsdWU6IDI2XFxuQEAgLTMxMyw3ICszNDcsMzUgQEAgb3BlcmF0aW9uczpcXG4gICAgICAgZG86XFxuICAgICAgICAgcmVxdWVzdDpcXG4gICAgICAgICAgIHZhbHVlOiAyNFxcbi0gICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRyc1xcbisgICAgICAgICAgYXR0cmlidXRlczogXFx1MDAyNnJvdXRlLXJlcS1hdHRyc1xcbisgICAgICAgICAgICAtIGRzdFxcbisgICAgICAgICAgICAtIHNyY1xcbisgICAgICAgICAgICAtIGlpZlxcbisgICAgICAgICAgICAtIG9pZlxcbisgICAgICAgICAgICAtIGdhdGV3YXlcXG4rICAgICAgICAgICAgLSBwcmlvcml0eVxcbisgICAgICAgICAgICAtIHByZWZzcmNcXG4rICAgICAgICAgICAgLSBtZXRyaWNzXFxuKyAgICAgICAgICAgIC0gbXVsdGlwYXRoXFxuKyAgICAgICAgICAgIC0gZmxvd1xcbisgICAgICAgICAgICAtIGNhY2hlaW5mb1xcbisgICAgICAgICAgICAtIHRhYmxlXFxuKyAgICAgICAgICAgIC0gbWFya1xcbisgICAgICAgICAgICAtIG1mYy1zdGF0c1xcbisgICAgICAgICAgICAtIHZpYVxcbisgICAgICAgICAgICAtIG5ld2RzdFxcbisgICAgICAgICAgICAtIHByZWZcXG4rICAgICAgICAgICAgLSBlbmNhcC10eXBlXFxuKyAgICAgICAgICAgIC0gZW5jYXBcXG4rICAgICAgICAgICAgLSBleHBpcmVzXFxuKyAgICAgICAgICAgIC0gcGFkXFxuKyAgICAgICAgICAgIC0gdWlkXFxuKyAgICAgICAgICAgIC0gdHRsLXByb3BhZ2F0ZVxcbisgICAgICAgICAgICAtIGlwLXByb3RvXFxuKyAgICAgICAgICAgIC0gc3BvcnRcXG4rICAgICAgICAgICAgLSBkcG9ydFxcbisgICAgICAgICAgICAtIG5oLWlkXFxuKyAgICAgICAgICAgIC0gZmxvd2xhYmVsXFxuICAgICAtXFxuICAgICAgIG5hbWU6IGRlbHJvdXRlXFxuICAgICAgIGRvYzogRGVsZXRlIGFuIGV4aXN0aW5nIHJvdXRlXFxuQEAgLTMyMSw0ICszODMsMjMgQEAgb3BlcmF0aW9uczpcXG4gICAgICAgZG86XFxuICAgICAgICAgcmVxdWVzdDpcXG4gICAgICAgICAgIHZhbHVlOiAyNVxcbi0gICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRyc1xcbisgICAgICAgICAgYXR0cmlidXRlczogKnJvdXRlLXJlcS1hdHRyc1xcbisgICAgLVxcbisgICAgICBuYW1lOiBuZXdyb3V0ZS1udGZcXG4rICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBjcmVhdGVkIHJvdXRlLlxcbisgICAgICB2YWx1ZTogMjRcXG4rICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxcbisgICAgLVxcbisgICAgICBuYW1lOiBkZWxyb3V0ZS1udGZcXG4rICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBkZWxldGVkIHJvdXRlLlxcbisgICAgICB2YWx1ZTogMjVcXG4rICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxcbitcXG4rbWNhc3QtZ3JvdXBzOlxcbisgIGxpc3Q6XFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2NC1yb3V0ZVxcbisgICAgICB2YWx1ZTogN1xcbisgICAgLVxcbisgICAgICBuYW1lOiBydG5sZ3JwLWlwdjYtcm91dGVcXG4rICAgICAgdmFsdWU6IDExXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaCBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaFxcbmluZGV4IDljZDI3ZTFiOWI2OTIuLjIzMjI4OWI0MzljM2MgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXFxuQEAgLTQ2OCw3ICs0NjgsOCBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFxuIGludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4gXFx0ICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyk7XFxuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuK1xcdCAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xcbiBcXG4gc3RhdGljIGlubGluZVxcbiB2b2lkIHJ0Nl9nZXRfcHJlZnNyYyhjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXFxuQEAgLTUzMiw2ICs1MzMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4gI2VuZGlmXFxuIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbiBcXHRcXHQgICAgIHVuc2lnbmVkIGludCBmbGFncyk7XFxuK3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XFxuIFxcbiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXFxuIFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIG5vdyk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcXG5pbmRleCAwOWZmZTBmMTNjZTc1Li5jYzA0NTcwNTg2MmRlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcXG5AQCAtMTI2LDYgKzEyNiw4IEBAIGludCBpcHY2X3JvdXRlX2lvY3RsKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCxcXG4gaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcXG4gXFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbiBpbnQgaXA2X2luc19ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSk7XFxuK2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcXG4rXFx0XFx0ICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xcbiAjZWxzZVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcXG5pbmRleCAyNzI2NWZkMzFlNWZjLi4zOTg4YjUxZGI1MzlmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxcbkBAIC0zOTksNiArMzk5LDcgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcXG4gXFx0UlRBX0RQT1JULFxcbiBcXHRSVEFfTkhfSUQsXFxuIFxcdFJUQV9GTE9XTEFCRUwsXFxuK1xcdFJUQV9ERUxfUkVBU09OLFxcbiBcXHRfX1JUQV9NQVhcXG4gfTtcXG4gXFxuQEAgLTQwNyw2ICs0MDgsMzAgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcXG4gI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKVxcbiAjZGVmaW5lIFJUTV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IHJ0bXNnKSlcXG4gXFxuKy8qIFJUQV9ERUxfUkVBU09OOiB3aHkgdGhlIGtlcm5lbCBkZWxldGVkIHRoZSByb3V0ZS4gdTMyLlxcbisgKiBFbWl0dGVkIG9ubHkgb24gUlRNX0RFTFJPVVRFIG5vdGlmaWNhdGlvbnMsIGFuZCBvbmx5IHdoZW4gdGhlIGRlbGV0aW9uXFxuKyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYVxcbisgKiBkZWxldGlvbiBwYXRoIHRoYXQgZG9lcyBub3QgKHlldCkgcmVjb3JkIGl0cyBjYXVzZSAtIGNvbnN1bWVycyBtdXN0XFxuKyAqIHRyZWF0IFxcXCJhYnNlbnRcXFwiIGFuZCBcXFwidW5zcGVjXFxcIiBpZGVudGljYWxseS4gTmV3IGNhdXNlcyBtYXkgYmUgYXBwZW5kZWQuXFxuKyAqIEN1cnJlbnRseSBvbmx5IElQdjYgZGVsZXRpb24gcGF0aHMgcmVjb3JkIGEgY2F1c2UuXFxuKyAqXFxuKyAqIFRoZSBhdHRyaWJ1dGUgaXMgbm90aWZpY2F0aW9uLW9ubHk6IHRoZSBrZXJuZWwgcmVqZWN0cyBpdCBpblxcbisgKiByZXF1ZXN0cywgc28gYSBub3RpZmljYXRpb24gbXVzdCBub3QgYmUgZWNob2VkIGJhY2sgdmVyYmF0aW0uXFxuKyAqXFxuKyAqIFRoZSB2YWx1ZSBzcGFjZSBpcyBmYW1pbHktYWdub3N0aWM6IGEgdmFsdWUgbXVzdCBuZXZlciBiZVxcbisgKiByZWludGVycHJldGVkIHBlciBhZGRyZXNzIGZhbWlseS4gQSBjYXVzZSB0aGF0IG9ubHkgb25lIGZhbWlseSBjYW5cXG4rICogcHJvZHVjZSBzdGlsbCBnZXRzIGl0cyBvd24gdmFsdWUgcmF0aGVyIHRoYW4gcmV1c2luZyBhbm90aGVyXFxuKyAqIGZhbWlseSdzLlxcbisgKi9cXG4rZW51bSBydF9kZWxfcmVhc29uIHtcXG4rXFx0UlRfREVMX1JFQVNPTl9VTlNQRUMsXFx0XFx0LyogY2F1c2Ugbm90IHJlY29yZGVkICovXFxuK1xcdFJUX0RFTF9SRUFTT05fRVhQSVJFRCxcXHRcXHQvKiBSVEZfRVhQSVJFUyBsaWZldGltZSByYW4gb3V0IChHQykgKi9cXG4rXFx0UlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04sXFx0LyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqL1xcbitcXHRfX1JUX0RFTF9SRUFTT05fTUFYXFxuK307XFxuK1xcbisjZGVmaW5lIFJUX0RFTF9SRUFTT05fTUFYIChfX1JUX0RFTF9SRUFTT05fTUFYIC0gMSlcXG4rXFxuIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuXFxuICAqXFxuICAqIFxcXCJzdHJ1Y3QgcnRuZXh0aG9wXFxcIiBkZXNjcmliZXMgYWxsIG5lY2Vzc2FyeSBuZXh0aG9wIGluZm9ybWF0aW9uLFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xcbmluZGV4IGY2ZmEyNzE1YjQ1MGIuLjlkODliZTdlMDU0NGIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuY1xcbisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmNcXG5AQCAtMjg3NCw3ICsyODc0LDggQEAgdm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXFxuIFxcdFxcdGlmIChydCkge1xcbiBcXHRcXHRcXHQvKiBBdXRvY29uZiBwcmVmaXggcm91dGUgKi9cXG4gXFx0XFx0XFx0aWYgKHZhbGlkX2xmdCA9PSAwKSB7XFxuLVxcdFxcdFxcdFxcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xcbitcXHRcXHRcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcXG4gXFx0XFx0XFx0XFx0cnQgPSBOVUxMO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHR0YWJsZSA9IHJ0LVxcdTAwM2VmaWI2X3RhYmxlO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcXG5pbmRleCBlOWZjNjkyZDRmM2IyLi4zZTM4MmJhMTU3M2UzIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xcbisrKyBiL25ldC9pcHY2L2lwNl9maWIuY1xcbkBAIC0xOTY3LDcgKzE5NjcsOCBAQCBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXFxuLVxcdFxcdFxcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0ICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IGZpYjZfaW5mbyAqbGVhZiwgKnJlcGxhY2VfcnQgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgZmliNl93YWxrZXIgKnc7XFxuQEAgLTIwNTYsMTMgKzIwNTcsMTQgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcXG4gXFx0XFx0XFx0Y2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7XFxuIFxcdH1cXG4gXFx0aWYgKCFpbmZvLVxcdTAwM2Vza2lwX25vdGlmeSlcXG4tXFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDApO1xcbitcXHRcXHRpbmV0Nl9ydF9kZWxfbm90aWZ5KHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcXG4gXFxuIFxcdGZpYjZfaW5mb19yZWxlYXNlKHJ0KTtcXG4gfVxcbiBcXG4gLyogTmVlZCB0byBvd24gdGFibGUtXFx1MDAzZXRiNl9sb2NrICovXFxuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuK1xcdCAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cXHUwMDNlbmxfbmV0O1xcbiBcXHRzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwO1xcbkBAIC0yMDkxLDcgKzIwOTMsNyBAQCBpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbiBcXHRcXHRpZiAocnQgPT0gY3VyKSB7XFxuIFxcdFxcdFxcdGlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKVxcbiBcXHRcXHRcXHRcXHRmaWI2X3JvdXRlc19yZXF1aXJlX3NyY19kZWMoaW5mby1cXHUwMDNlbmxfbmV0KTtcXG4tXFx0XFx0XFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8pO1xcbitcXHRcXHRcXHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbywgZGVsX3JlYXNvbik7XFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJ0cF9uZXh0ID0gXFx1MDAyNmN1ci1cXHUwMDNlZmliNl9uZXh0O1xcbkBAIC0yMjUzLDcgKzIyNTUsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxuIFxcdFxcdHJlcyA9IGMtXFx1MDAzZWZ1bmMocnQsIGMtXFx1MDAzZWFyZyk7XFxuIFxcdFxcdGlmIChyZXMgPT0gLTEpIHtcXG4gXFx0XFx0XFx0dy1cXHUwMDNlbGVhZiA9IHJ0O1xcbi1cXHRcXHRcXHRyZXMgPSBmaWI2X2RlbChydCwgXFx1MDAyNmluZm8pO1xcbitcXHRcXHRcXHRyZXMgPSBmaWI2X2RlbChydCwgXFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0aWYgKHJlcykge1xcbiAjaWYgUlQ2X0RFQlVHIFxcdTAwM2U9IDJcXG4gXFx0XFx0XFx0XFx0cHJfZGVidWcoXFxcIiVzOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcXFxcblxcXCIsXFxuQEAgLTI0MDEsNyArMjQwMyw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LFxcbiBcXG4gXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgbiwgXFx1MDAyNnRiNi1cXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxcbiBcXHRcXHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxcbi1cXHRcXHRcXHRmaWI2X2RlbChydCwgXFx1MDAyNmluZm8pO1xcbitcXHRcXHRcXHRmaWI2X2RlbChydCwgXFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fRVhQSVJFRCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcXG5pbmRleCBmZTM2YjNmNTEyODUwLi4xMTExYzRlYmM2MWQ5IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L25kaXNjLmNcXG4rKysgYi9uZXQvaXB2Ni9uZGlzYy5jXFxuQEAgLTEzNjEsNyArMTM2MSw5IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi1cXHUwMDNlY25mLnJhX2RlZnJ0cl9tZXRyaWM7XFxuIFxcdC8qIGRlbGV0ZSB0aGUgcm91dGUgaWYgbGlmZXRpbWUgaXMgMCBvciBpZiBtZXRyaWMgbmVlZHMgY2hhbmdlICovXFxuIFxcdGlmIChydCBcXHUwMDI2XFx1MDAyNiAobGlmZXRpbWUgPT0gMCB8fCBydC1cXHUwMDNlZmliNl9tZXRyaWMgIT0gZGVmcnRyX3Vzcl9tZXRyaWMpKSB7XFxuLVxcdFxcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xcbitcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LFxcbitcXHRcXHRcXHRcXHQgIGxpZmV0aW1lID09IDAgPyBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRcXHRydCA9IE5VTEw7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuaW5kZXggZmM0MmQ2N2U1ODIyNi4uMTcwNDM1OWQzOTYwZCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXFxuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xcbkBAIC0xMTEsNyArMTExLDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLFxcbiBcXHRcXHRcXHQgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXFxuLVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbitcXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XFxuIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9maW5kX2NhY2hlZF9ydChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcik7XFxuQEAgLTEwMjAsNyArMTAyMCw3IEBAIGludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sXFxuIFxcdFxcdFxcdFxcdFxcdGd3YWRkciwgZGV2KTtcXG4gXFxuIFxcdGlmIChydCBcXHUwMDI2XFx1MDAyNiAhbGlmZXRpbWUpIHtcXG4tXFx0XFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XFxuK1xcdFxcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcXG4gXFx0XFx0cnQgPSBOVUxMO1xcbiBcXHR9XFxuIFxcbkBAIC0zOTczLDcgKzM5NzMsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuK3N0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0ZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cXHUwMDNlbmxfbmV0O1xcbiBcXHRzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7XFxuQEAgLTM5ODYsNyArMzk4Nyw3IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcXG4gXFxuIFxcdHRhYmxlID0gcnQtXFx1MDAzZWZpYjZfdGFibGU7XFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dGFibGUtXFx1MDAzZXRiNl9sb2NrKTtcXG4tXFx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8pO1xcbitcXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbiBcXG4gb3V0OlxcbkBAIC00MDAxLDcgKzQwMDIsMTUgQEAgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcXG4gXFx0XFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnlcXG4gXFx0fTtcXG4gXFxuLVxcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZpbmZvKTtcXG4rXFx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4rfVxcbitcXG4raW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuK1xcdFxcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbit7XFxuK1xcdHN0cnVjdCBubF9pbmZvIGluZm8gPSB7IC5ubF9uZXQgPSBuZXQgfTtcXG4rXFxuK1xcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZpbmZvLCBkZWxfcmVhc29uKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxcbkBAIC00MDI4LDcgKzQwMzcsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXFxuIFxcbiBcXHRcXHRcXHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsXFxuIFxcdFxcdFxcdFxcdFxcdCAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCAwKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBSVF9ERUxfUkVBU09OX1VOU1BFQykgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRcXHRcXHRza2IgPSBOVUxMO1xcbiBcXHRcXHRcXHR9IGVsc2VcXG5AQCAtNDA2NCwxMyArNDA3NCwxMyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaWJsaW5nLCBuZXh0X3NpYmxpbmcsXFxuIFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2cnQtXFx1MDAzZWZpYjZfc2libGluZ3MsXFxuIFxcdFxcdFxcdFxcdFxcdCBmaWI2X3NpYmxpbmdzKSB7XFxuLVxcdFxcdFxcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8pO1xcbitcXHRcXHRcXHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7XFxuK1xcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIG91dF91bmxvY2s6XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbiBvdXRfcHV0OlxcbkBAIC00MTk2LDcgKzQyMDYsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXFxuIFxcdFxcdFxcdFxcdGlmICghZmliNl9pbmZvX2hvbGRfc2FmZShydCkpXFxuIFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0XFx0ZXJyID0gIF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmNmZy1cXHUwMDNlZmNfbmxpbmZvKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcXHUwMDI2Y2ZnLVxcdTAwM2VmY19ubGluZm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKGNmZy1cXHUwMDNlZmNfbmhfaWQpXFxuQEAgLTQyMTUsNyArNDIyNiw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcXG4gXFxuIFxcdFxcdFxcdC8qIGlmIGdhdGV3YXkgd2FzIHNwZWNpZmllZCBvbmx5IGRlbGV0ZSB0aGUgb25lIGhvcCAqL1xcbiBcXHRcXHRcXHRpZiAoY2ZnLVxcdTAwM2VmY19mbGFncyBcXHUwMDI2IFJURl9HQVRFV0FZKVxcbi1cXHRcXHRcXHRcXHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZjZmctXFx1MDAzZWZjX25saW5mbyk7XFxuK1xcdFxcdFxcdFxcdGVyciA9IF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmNmZy1cXHUwMDNlZmNfbmxpbmZvLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtNTczOSw2ICs1NzUxLDcgQEAgc3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpXFxuIFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpXFxuIFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXFxuIFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKDEpIC8qIFJUQV9QUkVGICovXFxuK1xcdCAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9ERUxfUkVBU09OICovXFxuIFxcdCAgICAgICArIG5leHRob3BfbGVuO1xcbiB9XFxuIFxcbkBAIC01Nzc1LDcgKzU3ODgsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4gXFx0XFx0XFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXFxuIFxcdFxcdFxcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcXG4tXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncylcXG4rXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IHJ0Nl9pbmZvICpydDYgPSBkc3RfcnQ2X2luZm8oZHN0KTtcXG4gXFx0c3RydWN0IHJ0NmtleSAqcnQ2X2RzdCwgKnJ0Nl9zcmM7XFxuQEAgLTU5NTQsNiArNTk2NywxMCBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAocnRubF9wdXRfY2FjaGVpbmZvKHNrYiwgZHN0LCAwLCBleHBpcmVzLCBkc3QgPyBkc3QtXFx1MDAzZWVycm9yIDogMCkgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gXFxuK1xcdGlmIChkZWxfcmVhc29uICE9IFJUX0RFTF9SRUFTT05fVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIFJUQV9ERUxfUkVBU09OLCBkZWxfcmVhc29uKSlcXG4rXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuK1xcbiBcXHRpZiAobmxhX3B1dF91OChza2IsIFJUQV9QUkVGLCBJUFY2X0VYVFJBQ1RfUFJFRihydDZfZmxhZ3MpKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbkBAIC02MDU1LDcgKzYwNzIsOCBAQCBzdGF0aWMgaW50IHJ0Nl9uaF9kdW1wX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfbmggKm5oLCB2b2lkICphcmcpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cnQ2X2V4LVxcdTAwM2VydDZpLVxcdTAwM2Vkc3QsIE5VTEwsIE5VTEwsIDAsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGR1bXAtXFx1MDAzZWNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGR1bXAtXFx1MDAzZWNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgdy1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgZHVtcC1cXHUwMDNlY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCB3LVxcdTAwM2VmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuQEAgLTYxMDMsNyArNjEyMSw4IEBAIGludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxcbiBcXHRcXHRcXHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy1cXHUwMDNlc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAwLCBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgTkVUTElOS19DQihhcmctXFx1MDAzZWNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICBhcmctXFx1MDAzZWNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdCAgYXJnLVxcdTAwM2VjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgIFJUX0RFTF9SRUFTT05fVU5TUEVDKSkge1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRjb3VudCsrO1xcbkBAIC02MzM2LDEyICs2MzU1LDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRcXHRcXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgaWlmLCBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDApO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgZHN0LCBcXHUwMDI2Zmw2LmRhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDApO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGVyciA9IC1FTkVUVU5SRUFDSDtcXG4gXFx0fVxcbkBAIC02MzU3LDggKzYzNzgsOSBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuLVxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcXG4rc3RhdGljIHZvaWQgX19pbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsXFxuK1xcdFxcdFxcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXFx1MDAzZW5sX25ldDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5AQCAtNjM3Nyw3ICs2Mzk5LDcgQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuIFxcdFxcdGdvdG8gZXJyb3V0O1xcbiBcXG4gXFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXFxuLVxcdFxcdFxcdCAgICBldmVudCwgaW5mby1cXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XFxuK1xcdFxcdFxcdCAgICBldmVudCwgaW5mby1cXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncywgZGVsX3JlYXNvbik7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHQvKiAtRU1TR1NJWkUgaW1wbGllcyBuZWVkZWQgc3BhY2UgZ3JldyB1bmRlciB1cy4gKi9cXG5AQCAtNjM5OCw2ICs2NDIwLDE4IEBAIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbiBcXHRydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfUk9VVEUsIGVycik7XFxuIH1cXG4gXFxuK3ZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MpXFxuK3tcXG4rXFx0X19pbmV0Nl9ydF9ub3RpZnkoZXZlbnQsIHJ0LCBpbmZvLCBubG1fZmxhZ3MsIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4rfVxcbitcXG4rdm9pZCBpbmV0Nl9ydF9kZWxfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0IGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbit7XFxuK1xcdF9faW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDAsIGRlbF9yZWFzb24pO1xcbit9XFxuK1xcbiB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuIFxcdFxcdCAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcXG4ge1xcbkBAIC02NDEwLDcgKzY0NDQsOCBAQCB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuIFxcdFxcdGdvdG8gZXJyb3V0O1xcbiBcXG4gXFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXFxuLVxcdFxcdFxcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFKTtcXG4rXFx0XFx0XFx0ICAgIFJUTV9ORVdST1VURSwgaW5mby1cXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsXFxuK1xcdFxcdFxcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovXFxuIFxcdFxcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XFxuQEAgLTY0NjMsNyArNjQ5OCw3IEBAIHZvaWQgZmliNl9pbmZvX2h3X2ZsYWdzX3NldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcXG4gXFx0fVxcbiBcXG4gXFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsXFxuLVxcdFxcdFxcdCAgICAwLCAwKTtcXG4rXFx0XFx0XFx0ICAgIDAsIDAsIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cXG4gXFx0XFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcXG5pbmRleCBlNThiZGJkYzU4ZWVhLi4zNDkzNTg4NmI2YWRmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XFxuQEAgLTE3LDcgKzE3LDcgQEAgZnJvbSAudXRpbHMgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBmZF9yZWFkX3RpbWVvdXQsIGNtZCwgYmtnLCBkZWZlciwgXFxcXFxcbiAgICAgd2FpdF9maWxlLCB0b29sLCB0Y1xcbiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHNcXG4gZnJvbSAueW5sIGltcG9ydCBObEVycm9yLCBObGN0cmxGYW1pbHksIFlubEZhbWlseSwgXFxcXFxcbi0gICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseVxcbisgICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XFxuIGZyb20gLnlubCBpbXBvcnQgTmV0c2hhcGVyRmFtaWx5LCBEZXZsaW5rRmFtaWx5LCBQU1BGYW1pbHksIE5ldGxpbmtcXG4gXFxuIF9fYWxsX18gPSBbXFxcIktTUkNcXFwiLFxcbkBAIC0zNCw0ICszNCw0IEBAIF9fYWxsX18gPSBbXFxcIktTUkNcXFwiLFxcbiAgICAgICAgICAgIFxcXCJOZXRkZXZTaW1cXFwiLCBcXFwiTmV0ZGV2U2ltRGV2XFxcIixcXG4gICAgICAgICAgICBcXFwiTmV0c2hhcGVyRmFtaWx5XFxcIiwgXFxcIkRldmxpbmtGYW1pbHlcXFwiLCBcXFwiUFNQRmFtaWx5XFxcIiwgXFxcIk5sRXJyb3JcXFwiLFxcbiAgICAgICAgICAgIFxcXCJZbmxGYW1pbHlcXFwiLCBcXFwiRXRodG9vbEZhbWlseVxcXCIsIFxcXCJOZXRkZXZGYW1pbHlcXFwiLCBcXFwiUnRubEZhbWlseVxcXCIsXFxuLSAgICAgICAgICAgXFxcIk5sY3RybEZhbWlseVxcXCIsIFxcXCJSdG5sQWRkckZhbWlseVxcXCIsIFxcXCJOZXRsaW5rXFxcIl1cXG4rICAgICAgICAgICBcXFwiTmxjdHJsRmFtaWx5XFxcIiwgXFxcIlJ0bmxBZGRyRmFtaWx5XFxcIiwgXFxcIlJ0bmxSb3V0ZUZhbWlseVxcXCIsIFxcXCJOZXRsaW5rXFxcIl1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxcbmluZGV4IDJlNTY3MDYyYWE2Y2MuLjA4ZGVmZjc1NmYyOWIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxcbkBAIC0yOSw3ICsyOSw3IEBAIGV4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm9yIGFzIGU6XFxuIFxcbiBfX2FsbF9fID0gW1xcbiAgICAgXFxcIk5sRXJyb3JcXFwiLCBcXFwiTmxQb2xpY3lcXFwiLCBcXFwiTmV0bGlua1xcXCIsIFxcXCJZbmxGYW1pbHlcXFwiLCBcXFwiU1BFQ19QQVRIXFxcIixcXG4tICAgIFxcXCJFdGh0b29sRmFtaWx5XFxcIiwgXFxcIlJ0bmxGYW1pbHlcXFwiLCBcXFwiUnRubEFkZHJGYW1pbHlcXFwiLFxcbisgICAgXFxcIkV0aHRvb2xGYW1pbHlcXFwiLCBcXFwiUnRubEZhbWlseVxcXCIsIFxcXCJSdG5sQWRkckZhbWlseVxcXCIsIFxcXCJSdG5sUm91dGVGYW1pbHlcXFwiLFxcbiAgICAgXFxcIk5ldGRldkZhbWlseVxcXCIsIFxcXCJOZXRzaGFwZXJGYW1pbHlcXFwiLCBcXFwiTmxjdHJsRmFtaWx5XFxcIiwgXFxcIkRldmxpbmtGYW1pbHlcXFwiLFxcbiAgICAgXFxcIlBTUEZhbWlseVxcXCIsXFxuIF1cXG5AQCAtNTQsNiArNTQsMTEgQEAgY2xhc3MgUnRubEFkZHJGYW1pbHkoWW5sRmFtaWx5KTpcXG4gICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCdydC1hZGRyLnlhbWwnKSkuYXNfcG9zaXgoKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0nJywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcXG4gXFxuK2NsYXNzIFJ0bmxSb3V0ZUZhbWlseShZbmxGYW1pbHkpOlxcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcXG4rICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCdydC1yb3V0ZS55YW1sJykpLmFzX3Bvc2l4KCksXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JycsIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXFxuK1xcbiBjbGFzcyBOZXRkZXZGYW1pbHkoWW5sRmFtaWx5KTpcXG4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3NpemU9MCk6XFxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgnbmV0ZGV2LnlhbWwnKSkuYXNfcG9zaXgoKSxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG5pbmRleCAwYzY3YzdjMDBkODQxLi41Y2MzZWJkY2YwOGRlIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XFxuQEAgLTUsNyArNSw5IEBAIGltcG9ydCBzb2NrZXRcXG4gaW1wb3J0IHN0cnVjdFxcbiBpbXBvcnQgdGltZVxcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XFxuLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5XFxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxcbitmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XFxuK2Zyb20gbGliLnB5IGltcG9ydCBkZWZlclxcbiBcXG4gSVBWNF9BTExfSE9TVFNfTVVMVElDQVNUID0gYidcXFxceGUwXFxcXHgwMFxcXFx4MDBcXFxceDAxJ1xcbiBJUFY0X1RFU1RfTVVMVElDQVNUID0gYidcXFxceGVmXFxcXHgwMVxcXFx4MDFcXFxceDAxJ1xcbkBAIC0xMzQsOCArMTM2LDE4OSBAQCBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC1cXHUwMDNlIE5vbmU6XFxuICAgICBrc2Z0X3RydWUoZlxcXCJpbmV0IHtpZm5hbWV9IGZvcndhcmRpbmcgb25cXFwiIGluIGNtZF9vYmouc3Rkb3V0LFxcbiAgICAgICAgICAgICAgIGZcXFwiTm8gJ2ZvcndhcmRpbmcgb24nIG5vdGlmaWNpYXRpb24gZm91bmQgZm9yIGludGVyZmFjZSB7aWZuYW1lfVxcXCIpXFxuIFxcbitkZWYgX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKTpcXG4rICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcXG4rICAgICAgICBydG5sID0gUnRubFJvdXRlRmFtaWx5KClcXG4rICAgIGRlZmVyKHJ0bmwuY2xvc2UpXFxuKyAgICBydG5sLm50Zl9zdWJzY3JpYmUoXFxcInJ0bmxncnAtaXB2Ni1yb3V0ZVxcXCIpXFxuKyAgICByZXR1cm4gcnRubFxcbitcXG4rXFxuK2RlZiBfd2FpdF9yb3V0ZV9udGYocnRubCwgbmFtZSwgZHN0X2xlbiwgZHN0PU5vbmUsIGRlYWRsaW5lPTEwKTpcXG4rICAgIFxcXCJcXFwiXFxcIlJldHVybiB0aGUgYXR0cnMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIG5vdGlmaWNhdGlvbiwgTm9uZSBvbiB0aW1lb3V0LlxcXCJcXFwiXFxcIlxcbitcXG4rICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XFxuKyAgICAgICAgaWYgbXNnWyduYW1lJ10gIT0gbmFtZTpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBhdHRycyA9IG1zZ1snbXNnJ11cXG4rICAgICAgICBpZiBhdHRyc1sncnRtLWRzdC1sZW4nXSAhPSBkc3RfbGVuOlxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIGlmIGRzdCBpcyBub3QgTm9uZSBhbmQgYXR0cnMuZ2V0KCdkc3QnKSAhPSBkc3Q6XFxuKyAgICAgICAgICAgIGNvbnRpbnVlXFxuKyAgICAgICAgcmV0dXJuIGF0dHJzXFxuKyAgICByZXR1cm4gTm9uZVxcbitcXG4rXFxuK2RlZiBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsIG5hbWUsIHdhbnQsIGRlYWRsaW5lPTEwKTpcXG4rICAgIFxcXCJcXFwiXFxcIkdhdGhlciBhdHRycyBvZiBtYXRjaGluZyBub3RpZmljYXRpb25zLCBrZXllZCBieSAoZHN0X2xlbiwgZHN0KS5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICBzZWVuID0ge31cXG4rICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XFxuKyAgICAgICAgaWYgbXNnWyduYW1lJ10gIT0gbmFtZTpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBhdHRycyA9IG1zZ1snbXNnJ11cXG4rICAgICAgICBrZXkgPSAoYXR0cnNbJ3J0bS1kc3QtbGVuJ10sIGF0dHJzLmdldCgnZHN0JykpXFxuKyAgICAgICAgaWYga2V5IGluIHdhbnQ6XFxuKyAgICAgICAgICAgIHNlZW5ba2V5XSA9IGF0dHJzXFxuKyAgICAgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XFxuKyAgICAgICAgICAgICAgICBicmVha1xcbisgICAgcmV0dXJuIHNlZW5cXG4rXFxuK1xcbitkZWYgX3dyaXRlX2lwdjZfc3lzY3RsKG5hbWUsIHZhbHVlKTpcXG4rICAgIHdpdGggb3BlbihmXFxcIi9wcm9jL3N5cy9uZXQvaXB2Ni97bmFtZX1cXFwiLCBcXFwid1xcXCIpIGFzIGY6XFxuKyAgICAgICAgZi53cml0ZShmXFxcInt2YWx1ZX1cXFxcblxcXCIpXFxuK1xcbitcXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkKCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIkFuIGV4cGlyZWQgcm91dGUgcmVwb3J0cyBSVEFfREVMX1JFQVNPTiA9PSBleHBpcmVkLlxcXCJcXFwiXFxcIlxcbitcXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcXG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcXG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFxcXCJyb3V0ZS9nY19pbnRlcnZhbFxcXCIsIDIpXFxuKyAgICAgICAgaXAoXFxcImxpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIHNldCBkZXYgZHVtbXkxIHVwXFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwiLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjI6Oi82NCBkZXYgZHVtbXkxIGV4cGlyZXMgMlxcXCIsIG5zPXN0cihucykpXFxuK1xcbisgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCA2NCwgJzIwMDE6ZGI4OjI6OicsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmU9MTUpXFxuKyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXFxcIm5vIFJUTV9ERUxST1VURSBmb3IgdGhlIGV4cGlyZWQgcm91dGVcXFwiKVxcbisgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgnZGVsLXJlYXNvbicpLCAnZXhwaXJlZCcpXFxuK1xcbitcXG4rZGVmIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIGxpZmV0aW1lLCByaW89Tm9uZSwgcGlvPU5vbmUpOlxcbisgICAgXFxcIlxcXCJcXFwiVGhlIGtlcm5lbCBmaWxscyBpbiB0aGUgSUNNUHY2IGNoZWNrc3VtIG9uIHJhdyBJQ01QdjYgc29ja2V0cy5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICAjIHR5cGUsIGNvZGUsIGNrc3VtLCBob3AgbGltaXQsIGZsYWdzLCByb3V0ZXIgbGlmZXRpbWUsXFxuKyAgICAjIHJlYWNoYWJsZSB0aW1lLCByZXRyYW5zIHRpbWVyXFxuKyAgICByYSA9IHN0cnVjdC5wYWNrKCchQkJIQkJISUknLCAxMzQsIDAsIDAsIDY0LCAwLCBsaWZldGltZSwgMCwgMClcXG4rICAgIGlmIHJpbyBpcyBub3QgTm9uZTpcXG4rICAgICAgICBwcmVmaXgsIHBsZW4sIHJpb19saWZldGltZSA9IHJpb1xcbisgICAgICAgICMgUkZDIDQxOTEgcm91dGUgaW5mb3JtYXRpb24gb3B0aW9uLCAvNjQgcHJlZml4ICg4IGJ5dGVzKVxcbisgICAgICAgIHJhICs9IHN0cnVjdC5wYWNrKCchQkJCQkknLCAyNCwgMiwgcGxlbiwgMCwgcmlvX2xpZmV0aW1lKVxcbisgICAgICAgIHJhICs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpWzo4XVxcbisgICAgaWYgcGlvIGlzIG5vdCBOb25lOlxcbisgICAgICAgIHByZWZpeCwgcGxlbiwgdmFsaWRfbGZ0ID0gcGlvXFxuKyAgICAgICAgIyBSRkMgNDg2MSBwcmVmaXggaW5mb3JtYXRpb24gb3B0aW9uLCBvbi1saW5rIG9ubHkgKEwgc2V0LCBBIGNsZWFyKVxcbisgICAgICAgIHJhICs9IHN0cnVjdC5wYWNrKCchQkJCQklJSScsIDMsIDQsIHBsZW4sIDB4ODAsIHZhbGlkX2xmdCwgMCwgMClcXG4rICAgICAgICByYSArPSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVxcbisgICAgc29jay5zZW5kdG8ocmEsICgnZmYwMjo6MScsIDAsIDAsIGlmaW5kZXgpKVxcbitcXG4rXFxuK2RlZiBfcmFfcm91dGVyX3NvY2sobnNfciwgaWZuYW1lKTpcXG4rICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxcbisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5JUFBST1RPX0lDTVBWNilcXG4rICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfTVVMVElDQVNUX0hPUFMsIDI1NSlcXG4rICAgICAgICBkZWZlcihzb2NrLmNsb3NlKVxcbisgICAgICAgIHJldHVybiBzb2NrLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoaWZuYW1lKVxcbitcXG4rXFxuK2RlZiBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCB3YW50LCAqKnJhX29wdHMpOlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBTZW5kaW5nIGZhaWxzIHdpdGggRUFERFJOT1RBVkFJTCB3aGlsZSB0aGUgcm91dGVyJ3MgbGluay1sb2NhbFxcbisgICAgYWRkcmVzcyBpcyBzdGlsbCB0ZW50YXRpdmUuIGFkZHJjb25mX2RhZF9zdGFydCgpIG9ubHkgcXVldWVzXFxuKyAgICBhZGRyY29uZl9kYWRfd29yaygpLCBhbmQgSUZBX0ZfVEVOVEFUSVZFIGlzIGNsZWFyZWQgd2hlbiB0aGF0IHdvcmtcXG4rICAgIGl0ZW0gcnVucywgc28gcmV0cnkgdW50aWwgaXQgZG9lcy5cXG4rICAgIFxcXCJcXFwiXFxcIlxcbitcXG4rICAgIHNlZW4gPSB7fVxcbisgICAgZm9yIF8gaW4gcmFuZ2UoMTApOlxcbisgICAgICAgIHRyeTpcXG4rICAgICAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgKipyYV9vcHRzKVxcbisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOlxcbisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMilcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICduZXdyb3V0ZS1udGYnLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudCAtIHNldChzZWVuLmtleXMoKSksIGRlYWRsaW5lPTIpKVxcbisgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XFxuKyAgICAgICAgICAgIGJyZWFrXFxuKyAgICByZXR1cm4gc2VlblxcbitcXG4rXFxuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduKCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgUm91dGVzIHdpdGhkcmF3biBieSBhIHplcm8tbGlmZXRpbWUgUkEgKHJvdXRlciBsaWZldGltZSwgUkZDIDQ4NjFcXG4rICAgIFBJTywgUkZDIDQxOTEgUklPKSByZXBvcnQgUlRBX0RFTF9SRUFTT04gPT0gcmEtd2l0aGRyYXduLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgIyAocnRtLWRzdC1sZW4sIGRzdCk7IHRoZSBkZWZhdWx0IHJvdXRlIGNhcnJpZXMgbm8gUlRBX0RTVFxcbisgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAnMjAwMTpkYjg6Njo6JyksICg2NCwgJzIwMDE6ZGI4OjU6OicpfVxcbitcXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuc19oLCBOZXROUygpIGFzIG5zX3I6XFxuKyAgICAgICAgaXAoZlxcXCJsaW5rIGFkZCB2ZXRoMCBuZXRucyB7bnNfaH0gdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyB7bnNfcn1cXFwiKVxcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfaCkpOlxcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXFxcImNvbmYvdmV0aDAvYWNjZXB0X3JhXFxcIiwgMilcXG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFxcXCJjb25mL3ZldGgwL2ZvcndhcmRpbmdcXFwiLCAwKVxcbisgICAgICAgICAgICB0cnk6XFxuKyAgICAgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXFxcImNvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW5cXFwiLCA2NClcXG4rICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOlxcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXFwibm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcXCIpXFxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XFxuKyAgICAgICAgICAgICMgc2tpcCB0aGUgREFEIHByb2JlIHNvIHRoZSByb3V0ZXIncyBsaW5rLWxvY2FsIHNvdXJjZSBvbmx5XFxuKyAgICAgICAgICAgICMgaGFzIHRvIHdhaXQgZm9yIGFkZHJjb25mX2RhZF93b3JrKCkgdG8gY2xlYXIgSUZBX0ZfVEVOVEFUSVZFXFxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwiY29uZi92ZXRoMS9hY2NlcHRfZGFkXFxcIiwgMClcXG4rICAgICAgICBpcChcXFwibGluayBzZXQgZGV2IHZldGgwIHVwXFxcIiwgbnM9c3RyKG5zX2gpKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIHNldCBkZXYgdmV0aDEgdXBcXFwiLCBucz1zdHIobnNfcikpXFxuK1xcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnNfaClcXG4rICAgICAgICBzb2NrLCBpZmluZGV4ID0gX3JhX3JvdXRlcl9zb2NrKG5zX3IsIFxcXCJ2ZXRoMVxcXCIpXFxuK1xcbisgICAgICAgIHNlZW4gPSBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCByb3V0ZXMsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmV0aW1lPTE4MDAsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbz0oJzIwMDE6ZGI4OjU6OicsIDY0LCA2MDApLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW89KCcyMDAxOmRiODo2OjonLCA2NCwgNjAwKSlcXG4rICAgICAgICBrc2Z0X2VxKHNldChzZWVuKSwgcm91dGVzLCBcXFwibm90IGFsbCBSQSByb3V0ZXMgd2VyZSBpbnN0YWxsZWRcXFwiKVxcbisgICAgICAgIGlmIHNldChzZWVuKSAhPSByb3V0ZXM6XFxuKyAgICAgICAgICAgIHJldHVyblxcbitcXG4rICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAwLCByaW89KCcyMDAxOmRiODo1OjonLCA2NCwgMCksXFxuKyAgICAgICAgICAgICAgICAgcGlvPSgnMjAwMTpkYjg6Njo6JywgNjQsIDApKVxcbisgICAgICAgIHNlZW4gPSBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCByb3V0ZXMpXFxuKyAgICAgICAgZm9yIGtleSBpbiByb3V0ZXM6XFxuKyAgICAgICAgICAgIGF0dHJzID0gc2Vlbi5nZXQoa2V5KVxcbisgICAgICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBmXFxcIm5vIFJUTV9ERUxST1VURSBmb3Ige2tleX1cXFwiKVxcbisgICAgICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCdkZWwtcmVhc29uJyksICdyYS13aXRoZHJhd24nKVxcbitcXG4rXFxuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgQSBkZWxldGlvbiBwYXRoIHRoYXQgcmVjb3JkcyBubyBjYXVzZSAoaGVyZSBhIHVzZXJzcGFjZSByZXF1ZXN0KVxcbisgICAgbXVzdCBub3QgY2FycnkgUlRBX0RFTF9SRUFTT04gYXQgYWxsLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXFxuKyAgICAgICAgaXAoXFxcImxpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIHNldCBkZXYgZHVtbXkxIHVwXFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwiLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwiLTYgcm91dGUgZGVsIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXFxcIiwgbnM9c3RyKG5zKSlcXG4rXFxuKyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJ2RlbHJvdXRlLW50ZicsIDY0LCAnMjAwMTpkYjg6MTo6JylcXG4rICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBcXFwibm8gUlRNX0RFTFJPVVRFIGZvciAyMDAxOmRiODoxOjovNjRcXFwiKVxcbisgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICBrc2Z0X25vdF9pbignZGVsLXJlYXNvbicsIGF0dHJzLFxcbisgICAgICAgICAgICAgICAgICAgICAgICBcXFwidXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uXFxcIilcXG4rXFxuK1xcbiBkZWYgbWFpbigpIC1cXHUwMDNlIE5vbmU6XFxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pXFxuKyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLFxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxcbiAgICAga3NmdF9leGl0KClcXG4gXFxuIGlmIF9fbmFtZV9fID09IFxcXCJfX21haW5fX1xcXCI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAxOjIwOjE0LjczNTI4Nzk4NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM5MTkwOTc1Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUk9VVEVSX1BSRUZcIixcbiAgICBcIklQVjZfUk9VVEVfSU5GT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gICAgXCJpbmV0Nl9ydF9kZWxfbm90aWZ5XCIsXG4gICAgXCJmaWI2X2RlbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgUlRBX0RFTF9SRUFTT04gZm9yIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucywgbW9kaWZ5aW5nIGNvcmUgSVB2NiByb3V0aW5nIGFuZCBuZXRsaW5rIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpcyByZWFjaGFibGUgdmlhIHJvdXRlIGV4cGlyYXRpb24sIHJvdXRlciBhZHZlcnRpc2VtZW50cywgYW5kIG1hbnVhbCByb3V0ZSBkZWxldGlvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdiNDQ1YmQwMmY0Zjg4NDk3ZWJkYWQ5MTg3OThiOGM4M2QxOTZhOTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDAxOjIwOjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuaW5kZXggMzMxOTVkYjk2NzQ2Yy4uMjUzMDM3ZWE1MTc2YSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuQEAgLTc4LDYgKzc4LDI3IEBAIGRlZmluaXRpb25zOlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHJ0YS11c2VkXG4gICAgICAgICB0eXBlOiB1MzJcbisgIC1cbisgICAgbmFtZTogZGVsLXJlYXNvblxuKyAgICB0eXBlOiBlbnVtXG4rICAgIG5hbWUtcHJlZml4OiBydC1kZWwtcmVhc29uLVxuKyAgICBlbnVtLW5hbWU6IHJ0LWRlbC1yZWFzb25cbisgICAgZG9jOiB8XG4rICAgICAgV2h5IHRoZSBrZXJuZWwgZGVsZXRlZCBhIHJvdXRlLiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC4gVGhlXG4rICAgICAgdmFsdWUgc3BhY2UgaXMgZmFtaWx5LWFnbm9zdGljLCBhIHZhbHVlIGlzIG5ldmVyIHJlaW50ZXJwcmV0ZWRcbisgICAgICBwZXIgYWRkcmVzcyBmYW1pbHkuXG4rICAgIGVudHJpZXM6XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogdW5zcGVjXG4rICAgICAgICBkb2M6IFRoZSBkZWxldGlvbiBwYXRoIGRvZXMgbm90IHJlY29yZCBhIGNhdXNlLlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGV4cGlyZWRcbisgICAgICAgIGRvYzogVGhlIFJURl9FWFBJUkVTIGxpZmV0aW1lIHJhbiBvdXQgYW5kIHRoZSByb3V0ZSB3YXMgZ2FyYmFnZVxuKyAgICAgICAgICBjb2xsZWN0ZWQuXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogcmEtd2l0aGRyYXduXG4rICAgICAgICBkb2M6IEEgUm91dGVyIEFkdmVydGlzZW1lbnQgd2l0aGRyZXcgdGhlIHJvdXRlIHdpdGggYSB6ZXJvXG4rICAgICAgICAgIGxpZmV0aW1lLlxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTE4NSw2ICsyMDYsMTggQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAgIGJ5dGUtb3JkZXI6IGJpZy1lbmRpYW5cbiAgICAgICAgIGRpc3BsYXktaGludDogaGV4XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogZGVsLXJlYXNvblxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgICBlbnVtOiBkZWwtcmVhc29uXG4rICAgICAgICBkb2M6IHxcbisgICAgICAgICAgRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZVxuKyAgICAgICAgICBkZWxldGlvbiBwYXRoIHJlY29yZHMgYSBjYXVzZS4gQW4gYWJzZW50IGF0dHJpYnV0ZSBtZWFuc1xuKyAgICAgICAgICBlaXRoZXIgYW4gb2xkZXIga2VybmVsIG9yIGEgZGVsZXRpb24gcGF0aCB0aGF0IGRvZXMgbm90XG4rICAgICAgICAgIHJlY29yZCBpdHMgY2F1c2UsIGNvbnN1bWVycyBtdXN0IHRyZWF0IGFic2VudCBhbmQgdW5zcGVjXG4rICAgICAgICAgIGlkZW50aWNhbGx5LiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhXG4rICAgICAgICAgIGNhdXNlLiBUaGUgYXR0cmlidXRlIGlzIG5vdGlmaWNhdGlvbi1vbmx5LCB0aGUga2VybmVsIHJlamVjdHNcbisgICAgICAgICAgaXQgaW4gcmVxdWVzdHMuXG4gICAtXG4gICAgIG5hbWU6IG1ldHJpY3NcbiAgICAgbmFtZS1wcmVmaXg6IHJ0YXgtXG5AQCAtMjk5LDYgKzMzMiw3IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSBkcG9ydFxuICAgICAgICAgICAgIC0gbmgtaWRcbiAgICAgICAgICAgICAtIGZsb3dsYWJlbFxuKyAgICAgICAgICAgIC0gZGVsLXJlYXNvblxuICAgICAgIGR1bXA6XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjZcbkBAIC0zMTMsNyArMzQ3LDM1IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgZG86XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjRcbi0gICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRyc1xuKyAgICAgICAgICBhdHRyaWJ1dGVzOiBcdTAwMjZyb3V0ZS1yZXEtYXR0cnNcbisgICAgICAgICAgICAtIGRzdFxuKyAgICAgICAgICAgIC0gc3JjXG4rICAgICAgICAgICAgLSBpaWZcbisgICAgICAgICAgICAtIG9pZlxuKyAgICAgICAgICAgIC0gZ2F0ZXdheVxuKyAgICAgICAgICAgIC0gcHJpb3JpdHlcbisgICAgICAgICAgICAtIHByZWZzcmNcbisgICAgICAgICAgICAtIG1ldHJpY3NcbisgICAgICAgICAgICAtIG11bHRpcGF0aFxuKyAgICAgICAgICAgIC0gZmxvd1xuKyAgICAgICAgICAgIC0gY2FjaGVpbmZvXG4rICAgICAgICAgICAgLSB0YWJsZVxuKyAgICAgICAgICAgIC0gbWFya1xuKyAgICAgICAgICAgIC0gbWZjLXN0YXRzXG4rICAgICAgICAgICAgLSB2aWFcbisgICAgICAgICAgICAtIG5ld2RzdFxuKyAgICAgICAgICAgIC0gcHJlZlxuKyAgICAgICAgICAgIC0gZW5jYXAtdHlwZVxuKyAgICAgICAgICAgIC0gZW5jYXBcbisgICAgICAgICAgICAtIGV4cGlyZXNcbisgICAgICAgICAgICAtIHBhZFxuKyAgICAgICAgICAgIC0gdWlkXG4rICAgICAgICAgICAgLSB0dGwtcHJvcGFnYXRlXG4rICAgICAgICAgICAgLSBpcC1wcm90b1xuKyAgICAgICAgICAgIC0gc3BvcnRcbisgICAgICAgICAgICAtIGRwb3J0XG4rICAgICAgICAgICAgLSBuaC1pZFxuKyAgICAgICAgICAgIC0gZmxvd2xhYmVsXG4gICAgIC1cbiAgICAgICBuYW1lOiBkZWxyb3V0ZVxuICAgICAgIGRvYzogRGVsZXRlIGFuIGV4aXN0aW5nIHJvdXRlXG5AQCAtMzIxLDQgKzM4MywyMyBAQCBvcGVyYXRpb25zOlxuICAgICAgIGRvOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI1XG4tICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcbisgICAgICAgICAgYXR0cmlidXRlczogKnJvdXRlLXJlcS1hdHRyc1xuKyAgICAtXG4rICAgICAgbmFtZTogbmV3cm91dGUtbnRmXG4rICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBjcmVhdGVkIHJvdXRlLlxuKyAgICAgIHZhbHVlOiAyNFxuKyAgICAgIG5vdGlmeTogZ2V0cm91dGVcbisgICAgLVxuKyAgICAgIG5hbWU6IGRlbHJvdXRlLW50ZlxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgZGVsZXRlZCByb3V0ZS5cbisgICAgICB2YWx1ZTogMjVcbisgICAgICBub3RpZnk6IGdldHJvdXRlXG4rXG4rbWNhc3QtZ3JvdXBzOlxuKyAgbGlzdDpcbisgICAgLVxuKyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2NC1yb3V0ZVxuKyAgICAgIHZhbHVlOiA3XG4rICAgIC1cbisgICAgICBuYW1lOiBydG5sZ3JwLWlwdjYtcm91dGVcbisgICAgICB2YWx1ZTogMTFcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcbmluZGV4IDljZDI3ZTFiOWI2OTIuLjIzMjI4OWI0MzljM2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaFxuQEAgLTQ2OCw3ICs0NjgsOCBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCxcbiBcbiBpbnQgZmliNl9hZGQoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHQgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pO1xuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHQgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiBcbiBzdGF0aWMgaW5saW5lXG4gdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKVxuQEAgLTUzMiw2ICs1MzMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiAjZW5kaWZcbiB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuK3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHRcdFx0IGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiBcbiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXG4gXHRcdFx0IHVuc2lnbmVkIGxvbmcgbm93KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5pbmRleCAwOWZmZTBmMTNjZTc1Li5jYzA0NTcwNTg2MmRlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5AQCAtMTI2LDYgKzEyNiw4IEBAIGludCBpcHY2X3JvdXRlX2lvY3RsKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCxcbiBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuIFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gaW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xuK2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcbitcdFx0ICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTtcbiAjZWxzZVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuaW5kZXggMjcyNjVmZDMxZTVmYy4uMzk4OGI1MWRiNTM5ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXG5AQCAtMzk5LDYgKzM5OSw3IEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XG4gXHRSVEFfRFBPUlQsXG4gXHRSVEFfTkhfSUQsXG4gXHRSVEFfRkxPV0xBQkVMLFxuK1x0UlRBX0RFTF9SRUFTT04sXG4gXHRfX1JUQV9NQVhcbiB9O1xuIFxuQEAgLTQwNyw2ICs0MDgsMzAgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcbiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRtc2cpKSkpXG4gI2RlZmluZSBSVE1fUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBydG1zZykpXG4gXG4rLyogUlRBX0RFTF9SRUFTT046IHdoeSB0aGUga2VybmVsIGRlbGV0ZWQgdGhlIHJvdXRlLiB1MzIuXG4rICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvblxuKyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYVxuKyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3RcbisgKiB0cmVhdCBcImFic2VudFwiIGFuZCBcInVuc3BlY1wiIGlkZW50aWNhbGx5LiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC5cbisgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLlxuKyAqXG4rICogVGhlIGF0dHJpYnV0ZSBpcyBub3RpZmljYXRpb24tb25seTogdGhlIGtlcm5lbCByZWplY3RzIGl0IGluXG4rICogcmVxdWVzdHMsIHNvIGEgbm90aWZpY2F0aW9uIG11c3Qgbm90IGJlIGVjaG9lZCBiYWNrIHZlcmJhdGltLlxuKyAqXG4rICogVGhlIHZhbHVlIHNwYWNlIGlzIGZhbWlseS1hZ25vc3RpYzogYSB2YWx1ZSBtdXN0IG5ldmVyIGJlXG4rICogcmVpbnRlcnByZXRlZCBwZXIgYWRkcmVzcyBmYW1pbHkuIEEgY2F1c2UgdGhhdCBvbmx5IG9uZSBmYW1pbHkgY2FuXG4rICogcHJvZHVjZSBzdGlsbCBnZXRzIGl0cyBvd24gdmFsdWUgcmF0aGVyIHRoYW4gcmV1c2luZyBhbm90aGVyXG4rICogZmFtaWx5J3MuXG4rICovXG4rZW51bSBydF9kZWxfcmVhc29uIHtcbitcdFJUX0RFTF9SRUFTT05fVU5TUEVDLFx0XHQvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi9cbitcdFJUX0RFTF9SRUFTT05fRVhQSVJFRCxcdFx0LyogUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCAoR0MpICovXG4rXHRSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTixcdC8qIHplcm8tbGlmZXRpbWUgUkEgLyBQSU8gLyBSSU8gKi9cbitcdF9fUlRfREVMX1JFQVNPTl9NQVhcbit9O1xuK1xuKyNkZWZpbmUgUlRfREVMX1JFQVNPTl9NQVggKF9fUlRfREVMX1JFQVNPTl9NQVggLSAxKVxuK1xuIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuXG4gICpcbiAgKiBcInN0cnVjdCBydG5leHRob3BcIiBkZXNjcmliZXMgYWxsIG5lY2Vzc2FyeSBuZXh0aG9wIGluZm9ybWF0aW9uLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5pbmRleCBmNmZhMjcxNWI0NTBiLi45ZDg5YmU3ZTA1NDRiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuY1xuKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xuQEAgLTI4NzQsNyArMjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxuIFx0XHRpZiAocnQpIHtcbiBcdFx0XHQvKiBBdXRvY29uZiBwcmVmaXggcm91dGUgKi9cbiBcdFx0XHRpZiAodmFsaWRfbGZ0ID09IDApIHtcbi1cdFx0XHRcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xuK1x0XHRcdFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCxcbitcdFx0XHRcdFx0XHQgIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbiBcdFx0XHRcdHJ0ID0gTlVMTDtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuY1xuaW5kZXggZTlmYzY5MmQ0ZjNiMi4uM2UzODJiYTE1NzNlMyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xuKysrIGIvbmV0L2lwdjYvaXA2X2ZpYi5jXG5AQCAtMTk2Nyw3ICsxOTY3LDggQEAgc3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKmZpYjZfcmVwYWlyX3RyZWUoc3RydWN0IG5ldCAqbmV0LFxuIH1cbiBcbiBzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxuLVx0XHRcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuK1x0XHRcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0XHRcdCAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBmaWI2X2luZm8gKmxlYWYsICpyZXBsYWNlX3J0ID0gTlVMTDtcbiBcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcbkBAIC0yMDU2LDEzICsyMDU3LDE0IEBAIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4gXHRcdFx0Y2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7XG4gXHR9XG4gXHRpZiAoIWluZm8tXHUwMDNlc2tpcF9ub3RpZnkpXG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwKTtcbitcdFx0aW5ldDZfcnRfZGVsX25vdGlmeShydCwgaW5mbywgZGVsX3JlYXNvbik7XG4gXG4gXHRmaWI2X2luZm9fcmVsZWFzZShydCk7XG4gfVxuIFxuIC8qIE5lZWQgdG8gb3duIHRhYmxlLVx1MDAzZXRiNl9sb2NrICovXG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbitpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0ICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHA7XG5AQCAtMjA5MSw3ICsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJ0ID09IGN1cikge1xuIFx0XHRcdGlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKVxuIFx0XHRcdFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXHUwMDNlbmxfbmV0KTtcbi1cdFx0XHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7XG4rXHRcdFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHRcdHJ0cF9uZXh0ID0gXHUwMDI2Y3VyLVx1MDAzZWZpYjZfbmV4dDtcbkBAIC0yMjUzLDcgKzIyNTUsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gXHRcdHJlcyA9IGMtXHUwMDNlZnVuYyhydCwgYy1cdTAwM2VhcmcpO1xuIFx0XHRpZiAocmVzID09IC0xKSB7XG4gXHRcdFx0dy1cdTAwM2VsZWFmID0gcnQ7XG4tXHRcdFx0cmVzID0gZmliNl9kZWwocnQsIFx1MDAyNmluZm8pO1xuK1x0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKHJlcykge1xuICNpZiBSVDZfREVCVUcgXHUwMDNlPSAyXG4gXHRcdFx0XHRwcl9kZWJ1ZyhcIiVzOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcXG5cIixcbkBAIC0yNDAxLDcgKzI0MDMsNyBAQCBzdGF0aWMgdm9pZCBmaWI2X2djX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCxcbiBcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIG4sIFx1MDAyNnRiNi1cdTAwM2V0YjZfZ2NfaGxpc3QsIGdjX2xpbmspXG4gXHRcdGlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpXG4tXHRcdFx0ZmliNl9kZWwocnQsIFx1MDAyNmluZm8pO1xuK1x0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX0VYUElSRUQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcbmluZGV4IGZlMzZiM2Y1MTI4NTAuLjExMTFjNGViYzYxZDkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZGlzYy5jXG4rKysgYi9uZXQvaXB2Ni9uZGlzYy5jXG5AQCAtMTM2MSw3ICsxMzYxLDkgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi1cdTAwM2VjbmYucmFfZGVmcnRyX21ldHJpYztcbiBcdC8qIGRlbGV0ZSB0aGUgcm91dGUgaWYgbGlmZXRpbWUgaXMgMCBvciBpZiBtZXRyaWMgbmVlZHMgY2hhbmdlICovXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2IChsaWZldGltZSA9PSAwIHx8IHJ0LVx1MDAzZWZpYjZfbWV0cmljICE9IGRlZnJ0cl91c3JfbWV0cmljKSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbitcdFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCxcbitcdFx0XHRcdCAgbGlmZXRpbWUgPT0gMCA/IFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOIDpcbitcdFx0XHRcdFx0XHQgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCBmYzQyZDY3ZTU4MjI2Li4xNzA0MzU5ZDM5NjBkIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xuQEAgLTExMSw3ICsxMTEsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuIFx0XHRcdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLFxuIFx0XHRcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcbi1cdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKTtcbitcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4gc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcbkBAIC0xMDIwLDcgKzEwMjAsNyBAQCBpbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxuIFx0XHRcdFx0XHRnd2FkZHIsIGRldik7XG4gXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2ICFsaWZldGltZSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbitcdFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xuIFx0XHRydCA9IE5VTEw7XG4gXHR9XG4gXG5AQCAtMzk3Myw3ICszOTczLDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbitzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHRcdFx0ZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7XG5AQCAtMzk4Niw3ICszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFxuIFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbitcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbiBcbiBvdXQ6XG5AQCAtNDAwMSw3ICs0MDAyLDE1IEBAIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXG4gXHRcdC5za2lwX25vdGlmeSA9IHNraXBfbm90aWZ5XG4gXHR9O1xuIFxuLVx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbyk7XG4rXHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4rfVxuK1xuK2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuK1x0XHQgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbit7XG4rXHRzdHJ1Y3QgbmxfaW5mbyBpbmZvID0geyAubmxfbmV0ID0gbmV0IH07XG4rXG4rXHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZpbmZvLCBkZWxfcmVhc29uKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuQEAgLTQwMjgsNyArNDAzNyw4IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcbiBcdFx0XHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsXG4gXHRcdFx0XHRcdCAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLFxuLVx0XHRcdFx0XHQgIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIDApIFx1MDAzYyAwKSB7XG4rXHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCxcbitcdFx0XHRcdFx0ICBSVF9ERUxfUkVBU09OX1VOU1BFQykgXHUwMDNjIDApIHtcbiBcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdFx0c2tiID0gTlVMTDtcbiBcdFx0XHR9IGVsc2VcbkBAIC00MDY0LDEzICs0MDc0LDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZyxcbiBcdFx0XHRcdFx0IFx1MDAyNnJ0LVx1MDAzZWZpYjZfc2libGluZ3MsXG4gXHRcdFx0XHRcdCBmaWI2X3NpYmxpbmdzKSB7XG4tXHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbyk7XG4rXHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbitcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gb3V0X3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbiBvdXRfcHV0OlxuQEAgLTQxOTYsNyArNDIwNiw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcbiBcdFx0XHRcdGlmICghZmliNl9pbmZvX2hvbGRfc2FmZShydCkpXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdFx0ZXJyID0gIF9faXA2X2RlbF9ydChydCwgXHUwMDI2Y2ZnLVx1MDAzZWZjX25saW5mbyk7XG4rXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4rXHRcdFx0XHRcdFx0ICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChjZmctXHUwMDNlZmNfbmhfaWQpXG5AQCAtNDIxNSw3ICs0MjI2LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFxuIFx0XHRcdC8qIGlmIGdhdGV3YXkgd2FzIHNwZWNpZmllZCBvbmx5IGRlbGV0ZSB0aGUgb25lIGhvcCAqL1xuIFx0XHRcdGlmIChjZmctXHUwMDNlZmNfZmxhZ3MgXHUwMDI2IFJURl9HQVRFV0FZKVxuLVx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbitcdFx0XHRcdGVyciA9IF9faXA2X2RlbF9ydChydCwgXHUwMDI2Y2ZnLVx1MDAzZWZjX25saW5mbyxcbitcdFx0XHRcdFx0XHQgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTU3MzksNiArNTc1MSw3IEBAIHN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxuIFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSlcbiBcdCAgICAgICArIG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXG4gXHQgICAgICAgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBSVEFfUFJFRiAqL1xuK1x0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX0RFTF9SRUFTT04gKi9cbiBcdCAgICAgICArIG5leHRob3BfbGVuO1xuIH1cbiBcbkBAIC01Nzc1LDcgKzU3ODgsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuIFx0XHRcdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLFxuIFx0XHRcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcbi1cdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKVxuK1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBydDZfaW5mbyAqcnQ2ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XG4gXHRzdHJ1Y3QgcnQ2a2V5ICpydDZfZHN0LCAqcnQ2X3NyYztcbkBAIC01OTU0LDYgKzU5NjcsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCBkc3QsIDAsIGV4cGlyZXMsIGRzdCA/IGRzdC1cdTAwM2VlcnJvciA6IDApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbitcdGlmIChkZWxfcmVhc29uICE9IFJUX0RFTF9SRUFTT05fVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgUlRBX0RFTF9SRUFTT04sIGRlbF9yZWFzb24pKVxuK1x0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcbiBcdGlmIChubGFfcHV0X3U4KHNrYiwgUlRBX1BSRUYsIElQVjZfRVhUUkFDVF9QUkVGKHJ0Nl9mbGFncykpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbkBAIC02MDU1LDcgKzYwNzIsOCBAQCBzdGF0aWMgaW50IHJ0Nl9uaF9kdW1wX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfbmggKm5oLCB2b2lkICphcmcpXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZydDZfZXgtXHUwMDNlcnQ2aS1cdTAwM2Vkc3QsIE5VTEwsIE5VTEwsIDAsXG4gXHRcdFx0XHRcdCAgICBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGR1bXAtXHUwMDNlY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBkdW1wLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIHctXHUwMDNlZmxhZ3MpO1xuK1x0XHRcdFx0XHQgICAgZHVtcC1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCB3LVx1MDAzZWZsYWdzLFxuK1x0XHRcdFx0XHQgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFxuQEAgLTYxMDMsNyArNjEyMSw4IEBAIGludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxuIFx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgYXJnLVx1MDAzZXNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgMCwgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgIE5FVExJTktfQ0IoYXJnLVx1MDAzZWNiLVx1MDAzZXNrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgIGFyZy1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncykpIHtcbitcdFx0XHRcdFx0ICBhcmctXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgUlRfREVMX1JFQVNPTl9VTlNQRUMpKSB7XG4gXHRcdFx0XHRyZXR1cm4gMDtcbiBcdFx0XHR9XG4gXHRcdFx0Y291bnQrKztcbkBAIC02MzM2LDEyICs2MzU1LDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgICBpaWYsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwKTtcbitcdFx0XHRcdFx0ICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIDAsXG4rXHRcdFx0XHRcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBkc3QsIFx1MDAyNmZsNi5kYWRkcixcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4rXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuK1x0XHRcdFx0XHQgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gLUVORVRVTlJFQUNIO1xuIFx0fVxuQEAgLTYzNTcsOCArNjM3OCw5IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tXHRcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcbitzdGF0aWMgdm9pZCBfX2luZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzLFxuK1x0XHRcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbkBAIC02Mzc3LDcgKzYzOTksNyBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XG4rXHRcdFx0ICAgIGV2ZW50LCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MsIGRlbF9yZWFzb24pO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgbmVlZGVkIHNwYWNlIGdyZXcgdW5kZXIgdXMuICovXG5AQCAtNjM5OCw2ICs2NDIwLDE4IEBAIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuIFx0cnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X1JPVVRFLCBlcnIpO1xuIH1cbiBcbit2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbitcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKVxuK3tcbitcdF9faW5ldDZfcnRfbm90aWZ5KGV2ZW50LCBydCwgaW5mbywgbmxtX2ZsYWdzLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4rfVxuK1xuK3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHRcdFx0IGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuK3tcbitcdF9faW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDAsIGRlbF9yZWFzb24pO1xuK31cbitcbiB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHRcdCAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiB7XG5AQCAtNjQxMCw3ICs2NDQ0LDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRnb3RvIGVycm91dDtcbiBcbiBcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxuLVx0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpO1xuK1x0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsXG4rXHRcdFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbkBAIC02NDYzLDcgKzY0OTgsNyBAQCB2b2lkIGZpYjZfaW5mb19od19mbGFnc19zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4gXHR9XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCxcbi1cdFx0XHQgICAgMCwgMCk7XG4rXHRcdFx0ICAgIDAsIDAsIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuaW5kZXggZTU4YmRiZGM1OGVlYS4uMzQ5MzU4ODZiNmFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcbkBAIC0xNyw3ICsxNyw3IEBAIGZyb20gLnV0aWxzIGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgZmRfcmVhZF90aW1lb3V0LCBjbWQsIGJrZywgZGVmZXIsIFxcXG4gICAgIHdhaXRfZmlsZSwgdG9vbCwgdGNcbiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHNcbiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcXFxuLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5XG4rICAgIEV0aHRvb2xGYW1pbHksIE5ldGRldkZhbWlseSwgUnRubEZhbWlseSwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIGZyb20gLnlubCBpbXBvcnQgTmV0c2hhcGVyRmFtaWx5LCBEZXZsaW5rRmFtaWx5LCBQU1BGYW1pbHksIE5ldGxpbmtcbiBcbiBfX2FsbF9fID0gW1wiS1NSQ1wiLFxuQEAgLTM0LDQgKzM0LDQgQEAgX19hbGxfXyA9IFtcIktTUkNcIixcbiAgICAgICAgICAgIFwiTmV0ZGV2U2ltXCIsIFwiTmV0ZGV2U2ltRGV2XCIsXG4gICAgICAgICAgICBcIk5ldHNoYXBlckZhbWlseVwiLCBcIkRldmxpbmtGYW1pbHlcIiwgXCJQU1BGYW1pbHlcIiwgXCJObEVycm9yXCIsXG4gICAgICAgICAgICBcIllubEZhbWlseVwiLCBcIkV0aHRvb2xGYW1pbHlcIiwgXCJOZXRkZXZGYW1pbHlcIiwgXCJSdG5sRmFtaWx5XCIsXG4tICAgICAgICAgICBcIk5sY3RybEZhbWlseVwiLCBcIlJ0bmxBZGRyRmFtaWx5XCIsIFwiTmV0bGlua1wiXVxuKyAgICAgICAgICAgXCJObGN0cmxGYW1pbHlcIiwgXCJSdG5sQWRkckZhbWlseVwiLCBcIlJ0bmxSb3V0ZUZhbWlseVwiLCBcIk5ldGxpbmtcIl1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG5pbmRleCAyZTU2NzA2MmFhNmNjLi4wOGRlZmY3NTZmMjliIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG5AQCAtMjksNyArMjksNyBAQCBleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvciBhcyBlOlxuIFxuIF9fYWxsX18gPSBbXG4gICAgIFwiTmxFcnJvclwiLCBcIk5sUG9saWN5XCIsIFwiTmV0bGlua1wiLCBcIllubEZhbWlseVwiLCBcIlNQRUNfUEFUSFwiLFxuLSAgICBcIkV0aHRvb2xGYW1pbHlcIiwgXCJSdG5sRmFtaWx5XCIsIFwiUnRubEFkZHJGYW1pbHlcIixcbisgICAgXCJFdGh0b29sRmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLCBcIlJ0bmxBZGRyRmFtaWx5XCIsIFwiUnRubFJvdXRlRmFtaWx5XCIsXG4gICAgIFwiTmV0ZGV2RmFtaWx5XCIsIFwiTmV0c2hhcGVyRmFtaWx5XCIsIFwiTmxjdHJsRmFtaWx5XCIsIFwiRGV2bGlua0ZhbWlseVwiLFxuICAgICBcIlBTUEZhbWlseVwiLFxuIF1cbkBAIC01NCw2ICs1NCwxMSBAQCBjbGFzcyBSdG5sQWRkckZhbWlseShZbmxGYW1pbHkpOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgncnQtYWRkci55YW1sJykpLmFzX3Bvc2l4KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0nJywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcbiBcbitjbGFzcyBSdG5sUm91dGVGYW1pbHkoWW5sRmFtaWx5KTpcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ3J0LXJvdXRlLnlhbWwnKSkuYXNfcG9zaXgoKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPScnLCByZWN2X3NpemU9cmVjdl9zaXplKVxuK1xuIGNsYXNzIE5ldGRldkZhbWlseShZbmxGYW1pbHkpOlxuICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgnbmV0ZGV2LnlhbWwnKSkuYXNfcG9zaXgoKSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggMGM2N2M3YzAwZDg0MS4uNWNjM2ViZGNmMDhkZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbkBAIC01LDcgKzUsOSBAQCBpbXBvcnQgc29ja2V0XG4gaW1wb3J0IHN0cnVjdFxuIGltcG9ydCB0aW1lXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxuLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5XG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4rZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuK2Zyb20gbGliLnB5IGltcG9ydCBkZWZlclxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFx4ZTBcXHgwMFxceDAwXFx4MDEnXG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFx4ZWZcXHgwMVxceDAxXFx4MDEnXG5AQCAtMTM0LDggKzEzNiwxODkgQEAgZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXHUwMDNlIE5vbmU6XG4gICAgIGtzZnRfdHJ1ZShmXCJpbmV0IHtpZm5hbWV9IGZvcndhcmRpbmcgb25cIiBpbiBjbWRfb2JqLnN0ZG91dCxcbiAgICAgICAgICAgICAgIGZcIk5vICdmb3J3YXJkaW5nIG9uJyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX1cIilcbiBcbitkZWYgX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKTpcbisgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxuKyAgICAgICAgcnRubCA9IFJ0bmxSb3V0ZUZhbWlseSgpXG4rICAgIGRlZmVyKHJ0bmwuY2xvc2UpXG4rICAgIHJ0bmwubnRmX3N1YnNjcmliZShcInJ0bmxncnAtaXB2Ni1yb3V0ZVwiKVxuKyAgICByZXR1cm4gcnRubFxuK1xuK1xuK2RlZiBfd2FpdF9yb3V0ZV9udGYocnRubCwgbmFtZSwgZHN0X2xlbiwgZHN0PU5vbmUsIGRlYWRsaW5lPTEwKTpcbisgICAgXCJcIlwiUmV0dXJuIHRoZSBhdHRycyBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgbm90aWZpY2F0aW9uLCBOb25lIG9uIHRpbWVvdXQuXCJcIlwiXG4rXG4rICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XG4rICAgICAgICBpZiBtc2dbJ25hbWUnXSAhPSBuYW1lOlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBhdHRycyA9IG1zZ1snbXNnJ11cbisgICAgICAgIGlmIGF0dHJzWydydG0tZHN0LWxlbiddICE9IGRzdF9sZW46XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIGlmIGRzdCBpcyBub3QgTm9uZSBhbmQgYXR0cnMuZ2V0KCdkc3QnKSAhPSBkc3Q6XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIHJldHVybiBhdHRyc1xuKyAgICByZXR1cm4gTm9uZVxuK1xuK1xuK2RlZiBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsIG5hbWUsIHdhbnQsIGRlYWRsaW5lPTEwKTpcbisgICAgXCJcIlwiR2F0aGVyIGF0dHJzIG9mIG1hdGNoaW5nIG5vdGlmaWNhdGlvbnMsIGtleWVkIGJ5IChkc3RfbGVuLCBkc3QpLlwiXCJcIlxuK1xuKyAgICBzZWVuID0ge31cbisgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKTpcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIGF0dHJzID0gbXNnWydtc2cnXVxuKyAgICAgICAga2V5ID0gKGF0dHJzWydydG0tZHN0LWxlbiddLCBhdHRycy5nZXQoJ2RzdCcpKVxuKyAgICAgICAgaWYga2V5IGluIHdhbnQ6XG4rICAgICAgICAgICAgc2VlbltrZXldID0gYXR0cnNcbisgICAgICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxuKyAgICAgICAgICAgICAgICBicmVha1xuKyAgICByZXR1cm4gc2VlblxuK1xuK1xuK2RlZiBfd3JpdGVfaXB2Nl9zeXNjdGwobmFtZSwgdmFsdWUpOlxuKyAgICB3aXRoIG9wZW4oZlwiL3Byb2Mvc3lzL25ldC9pcHY2L3tuYW1lfVwiLCBcIndcIikgYXMgZjpcbisgICAgICAgIGYud3JpdGUoZlwie3ZhbHVlfVxcblwiKVxuK1xuK1xuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCgpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiQW4gZXhwaXJlZCByb3V0ZSByZXBvcnRzIFJUQV9ERUxfUkVBU09OID09IGV4cGlyZWQuXCJcIlwiXG4rXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwicm91dGUvZ2NfaW50ZXJ2YWxcIiwgMilcbisgICAgICAgIGlwKFwibGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCJsaW5rIHNldCBkZXYgZHVtbXkxIHVwXCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcIi02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDJcIiwgbnM9c3RyKG5zKSlcbitcbisgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCA2NCwgJzIwMDE6ZGI4OjI6OicsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZT0xNSlcbisgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFwibm8gUlRNX0RFTFJPVVRFIGZvciB0aGUgZXhwaXJlZCByb3V0ZVwiKVxuKyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJ2RlbC1yZWFzb24nKSwgJ2V4cGlyZWQnKVxuK1xuK1xuK2RlZiBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCBsaWZldGltZSwgcmlvPU5vbmUsIHBpbz1Ob25lKTpcbisgICAgXCJcIlwiVGhlIGtlcm5lbCBmaWxscyBpbiB0aGUgSUNNUHY2IGNoZWNrc3VtIG9uIHJhdyBJQ01QdjYgc29ja2V0cy5cIlwiXCJcbitcbisgICAgIyB0eXBlLCBjb2RlLCBja3N1bSwgaG9wIGxpbWl0LCBmbGFncywgcm91dGVyIGxpZmV0aW1lLFxuKyAgICAjIHJlYWNoYWJsZSB0aW1lLCByZXRyYW5zIHRpbWVyXG4rICAgIHJhID0gc3RydWN0LnBhY2soJyFCQkhCQkhJSScsIDEzNCwgMCwgMCwgNjQsIDAsIGxpZmV0aW1lLCAwLCAwKVxuKyAgICBpZiByaW8gaXMgbm90IE5vbmU6XG4rICAgICAgICBwcmVmaXgsIHBsZW4sIHJpb19saWZldGltZSA9IHJpb1xuKyAgICAgICAgIyBSRkMgNDE5MSByb3V0ZSBpbmZvcm1hdGlvbiBvcHRpb24sIC82NCBwcmVmaXggKDggYnl0ZXMpXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJJywgMjQsIDIsIHBsZW4sIDAsIHJpb19saWZldGltZSlcbisgICAgICAgIHJhICs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpWzo4XVxuKyAgICBpZiBwaW8gaXMgbm90IE5vbmU6XG4rICAgICAgICBwcmVmaXgsIHBsZW4sIHZhbGlkX2xmdCA9IHBpb1xuKyAgICAgICAgIyBSRkMgNDg2MSBwcmVmaXggaW5mb3JtYXRpb24gb3B0aW9uLCBvbi1saW5rIG9ubHkgKEwgc2V0LCBBIGNsZWFyKVxuKyAgICAgICAgcmEgKz0gc3RydWN0LnBhY2soJyFCQkJCSUlJJywgMywgNCwgcGxlbiwgMHg4MCwgdmFsaWRfbGZ0LCAwLCAwKVxuKyAgICAgICAgcmEgKz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClcbisgICAgc29jay5zZW5kdG8ocmEsICgnZmYwMjo6MScsIDAsIDAsIGlmaW5kZXgpKVxuK1xuK1xuK2RlZiBfcmFfcm91dGVyX3NvY2sobnNfciwgaWZuYW1lKTpcbisgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XG4rICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVyxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5JUFBST1RPX0lDTVBWNilcbisgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9NVUxUSUNBU1RfSE9QUywgMjU1KVxuKyAgICAgICAgZGVmZXIoc29jay5jbG9zZSlcbisgICAgICAgIHJldHVybiBzb2NrLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoaWZuYW1lKVxuK1xuK1xuK2RlZiBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCB3YW50LCAqKnJhX29wdHMpOlxuKyAgICBcIlwiXCJcbisgICAgU2VuZGluZyBmYWlscyB3aXRoIEVBRERSTk9UQVZBSUwgd2hpbGUgdGhlIHJvdXRlcidzIGxpbmstbG9jYWxcbisgICAgYWRkcmVzcyBpcyBzdGlsbCB0ZW50YXRpdmUuIGFkZHJjb25mX2RhZF9zdGFydCgpIG9ubHkgcXVldWVzXG4rICAgIGFkZHJjb25mX2RhZF93b3JrKCksIGFuZCBJRkFfRl9URU5UQVRJVkUgaXMgY2xlYXJlZCB3aGVuIHRoYXQgd29ya1xuKyAgICBpdGVtIHJ1bnMsIHNvIHJldHJ5IHVudGlsIGl0IGRvZXMuXG4rICAgIFwiXCJcIlxuK1xuKyAgICBzZWVuID0ge31cbisgICAgZm9yIF8gaW4gcmFuZ2UoMTApOlxuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cylcbisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOlxuKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKVxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICduZXdyb3V0ZS1udGYnLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IC0gc2V0KHNlZW4ua2V5cygpKSwgZGVhZGxpbmU9MikpXG4rICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxuKyAgICAgICAgICAgIGJyZWFrXG4rICAgIHJldHVybiBzZWVuXG4rXG4rXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24oKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIlxuKyAgICBSb3V0ZXMgd2l0aGRyYXduIGJ5IGEgemVyby1saWZldGltZSBSQSAocm91dGVyIGxpZmV0aW1lLCBSRkMgNDg2MVxuKyAgICBQSU8sIFJGQyA0MTkxIFJJTykgcmVwb3J0IFJUQV9ERUxfUkVBU09OID09IHJhLXdpdGhkcmF3bi5cbisgICAgXCJcIlwiXG4rXG4rICAgICMgKHJ0bS1kc3QtbGVuLCBkc3QpOyB0aGUgZGVmYXVsdCByb3V0ZSBjYXJyaWVzIG5vIFJUQV9EU1RcbisgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAnMjAwMTpkYjg6Njo6JyksICg2NCwgJzIwMDE6ZGI4OjU6OicpfVxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnNfaCwgTmV0TlMoKSBhcyBuc19yOlxuKyAgICAgICAgaXAoZlwibGluayBhZGQgdmV0aDAgbmV0bnMge25zX2h9IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDEgbmV0bnMge25zX3J9XCIpXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX2gpKTpcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJjb25mL3ZldGgwL2FjY2VwdF9yYVwiLCAyKVxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDAvZm9yd2FyZGluZ1wiLCAwKVxuKyAgICAgICAgICAgIHRyeTpcbisgICAgICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwiY29uZi92ZXRoMC9hY2NlcHRfcmFfcnRfaW5mb19tYXhfcGxlblwiLCA2NClcbisgICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6XG4rICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCJubyBDT05GSUdfSVBWNl9ST1VURV9JTkZPXCIpXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcbisgICAgICAgICAgICAjIHNraXAgdGhlIERBRCBwcm9iZSBzbyB0aGUgcm91dGVyJ3MgbGluay1sb2NhbCBzb3VyY2Ugb25seVxuKyAgICAgICAgICAgICMgaGFzIHRvIHdhaXQgZm9yIGFkZHJjb25mX2RhZF93b3JrKCkgdG8gY2xlYXIgSUZBX0ZfVEVOVEFUSVZFXG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwiY29uZi92ZXRoMS9hY2NlcHRfZGFkXCIsIDApXG4rICAgICAgICBpcChcImxpbmsgc2V0IGRldiB2ZXRoMCB1cFwiLCBucz1zdHIobnNfaCkpXG4rICAgICAgICBpcChcImxpbmsgc2V0IGRldiB2ZXRoMSB1cFwiLCBucz1zdHIobnNfcikpXG4rXG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zX2gpXG4rICAgICAgICBzb2NrLCBpZmluZGV4ID0gX3JhX3JvdXRlcl9zb2NrKG5zX3IsIFwidmV0aDFcIilcbitcbisgICAgICAgIHNlZW4gPSBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCByb3V0ZXMsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWU9MTgwMCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW89KCcyMDAxOmRiODo1OjonLCA2NCwgNjAwKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW89KCcyMDAxOmRiODo2OjonLCA2NCwgNjAwKSlcbisgICAgICAgIGtzZnRfZXEoc2V0KHNlZW4pLCByb3V0ZXMsIFwibm90IGFsbCBSQSByb3V0ZXMgd2VyZSBpbnN0YWxsZWRcIilcbisgICAgICAgIGlmIHNldChzZWVuKSAhPSByb3V0ZXM6XG4rICAgICAgICAgICAgcmV0dXJuXG4rXG4rICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAwLCByaW89KCcyMDAxOmRiODo1OjonLCA2NCwgMCksXG4rICAgICAgICAgICAgICAgICBwaW89KCcyMDAxOmRiODo2OjonLCA2NCwgMCkpXG4rICAgICAgICBzZWVuID0gX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAnZGVscm91dGUtbnRmJywgcm91dGVzKVxuKyAgICAgICAgZm9yIGtleSBpbiByb3V0ZXM6XG4rICAgICAgICAgICAgYXR0cnMgPSBzZWVuLmdldChrZXkpXG4rICAgICAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgZlwibm8gUlRNX0RFTFJPVVRFIGZvciB7a2V5fVwiKVxuKyAgICAgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgnZGVsLXJlYXNvbicpLCAncmEtd2l0aGRyYXduJylcbitcbitcbitkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiXG4rICAgIEEgZGVsZXRpb24gcGF0aCB0aGF0IHJlY29yZHMgbm8gY2F1c2UgKGhlcmUgYSB1c2Vyc3BhY2UgcmVxdWVzdClcbisgICAgbXVzdCBub3QgY2FycnkgUlRBX0RFTF9SRUFTT04gYXQgYWxsLlxuKyAgICBcIlwiXCJcbitcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcbisgICAgICAgIGlwKFwibGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCJsaW5rIHNldCBkZXYgZHVtbXkxIHVwXCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcIi02IHJvdXRlIGFkZCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCItNiByb3V0ZSBkZWwgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcIiwgbnM9c3RyKG5zKSlcbitcbisgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCA2NCwgJzIwMDE6ZGI4OjE6OicpXG4rICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBcIm5vIFJUTV9ERUxST1VURSBmb3IgMjAwMTpkYjg6MTo6LzY0XCIpXG4rICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICBrc2Z0X25vdF9pbignZGVsLXJlYXNvbicsIGF0dHJzLFxuKyAgICAgICAgICAgICAgICAgICAgICAgIFwidXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uXCIpXG4rXG4rXG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4tICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSlcbisgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSlcbiAgICAga3NmdF9leGl0KClcbiBcbiBpZiBfX25hbWVfXyA9PSBcIl9fbWFpbl9fXCI6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMToyMDoxNC43MzUyODkzNTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTMyMTQ3NzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIENhbmRpZGF0ZTogSVB2NiBSb3V0ZSBEZWxldGlvbiBSZWFzb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRvIHJldmlldywgYW5kIHRoZSB0YXNrIGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGl0J3MgdG91Y2hpbmcgYSBidW5jaCBvZiBJUHY2IHJvdXRpbmcgY29kZSDigJMgYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sYCwgdmFyaW91cyBoZWFkZXIgZmlsZXMgKGBpcDZfZmliLmhgLCBgaXA2X3JvdXRlLmhgLCBgcnRuZXRsaW5rLmhgKSwgY29yZSBJUHY2IG5ldHdvcmsgZmlsZXMgKGBhZGRyY29uZi5jYCwgYGlwNl9maWIuY2AsIGBuZGlzYy5jYCwgYHJvdXRlLmNgKSwgYW5kIGV2ZW4gc29tZSBweXRob24gdGVzdHMuIFRoYXQncyBhIHN0cm9uZyBzaWduYWwsIHRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgaW50ZXJlc3RpbmcuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCByZXZvbHZlcyBhcm91bmQgYWRkaW5nIGEgbmV3IE5ldGxpbmsgYXR0cmlidXRlLCBgUlRBX0RFTF9SRUFTT05gLCBzcGVjaWZpY2FsbHkgZm9yIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucy4gVGhleSdyZSBhZGRpbmcgYW4gYGVudW0gcnRfZGVsX3JlYXNvbmAgd2l0aCB2YWx1ZXMgdG8gc3BlY2lmeSB3aHkgdGhlIHJvdXRlIGlzIGJlaW5nIGRlbGV0ZWQ6IGBVTlNQRUNgLCBgRVhQSVJFRGAsIG9yIGBSQV9XSVRIRFJBV05gLiBUaGF0IGFsb25lIHRlbGxzIG1lIHRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHNpZ25pZmljYW50IG9uZSBhdCB0aGF0LiBJdCBhbHRlcnMgaG93IHdlIGNvbW11bmljYXRlIGFib3V0IHJvdXRlIGRlbGV0aW9ucyB0aHJvdWdoIE5ldGxpbmssIHdoaWNoIGlzIGNvcmUgdG8gdGhlIGNvbnRyb2wgcGxhbmUuXG5cblNvLCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgcmVhY2hhYmxlLCBhbmQgc2hvdWxkIHdlIGZ1enogaXQ/IEFic29sdXRlbHkuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgSVB2NiByb3V0ZSBkZWxldGlvbnMg4oCTIHRoYXQncyBhICp2ZXJ5KiBjb21tb24gb3BlcmF0aW9uLiBSQSB3aXRoZHJhd2FsLCByb3V0ZSBleHBpcmF0aW9uLCBtYW51YWwgZGVsZXRpb24g4oCTIGFsbCBvZiB0aGVzZSBwYXRocyBub3cgbmVlZCB0byB0YWtlIHRoaXMgbmV3IGRlbGV0aW9uIHJlYXNvbiBpbnRvIGFjY291bnQuIFRoZSBwYXRjaCBpdHNlbGYgbW9kaWZpZXMgZnVuY3Rpb25zIGxpa2UgYGZpYjZfZGVsYCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYHJ0Nl9maWxsX25vZGVgLCBgaW5ldDZfcnRfbm90aWZ5YCwgaW1wbHlpbmcgdGhhdCBhIGdvb2QgcG9ydGlvbiBvZiB0aGUgSVB2NiBzdGFjayBpcyBiZWluZyBpbXBhY3RlZC5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrczogd2hpY2ggZnVuY3Rpb25zIHNob3VsZCB3ZSBwcmlvcml0aXplIGZvciBmdXp6aW5nPyBMb29raW5nIGF0IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgbW9kaWZpZWQsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZTpcblxuKiAgIGBhZGRyY29uZl9wcmVmaXhfcmN2YFxuKiAgIGBmaWI2X2RlbGBcbiogICBgZmliNl9kZWxfcm91dGVgXG4qICAgYGZpYjZfY2xlYW5fbm9kZWBcbiogICBgZmliNl9nY190YWJsZWBcbiogICBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWBcbiogICBgcnQ2X3JvdXRlX3JjdmBcbiogICBgaXA2X2RlbF9ydF9yZWFzb25gXG4qICAgYF9faXA2X2RlbF9ydGBcbiogICBgaXA2X2RlbF9ydGBcbiogICBgX19pcDZfZGVsX3J0X3NpYmxpbmdzYFxuKiAgIGBpcDZfcm91dGVfZGVsYFxuKiAgIGBydDZfbmxtc2dfc2l6ZWBcbiogICBgcnQ2X2ZpbGxfbm9kZWBcbiogICBgcnQ2X25oX2R1bXBfZXhjZXB0aW9uc2BcbiogICBgcnQ2X2R1bXBfcm91dGVgXG4qICAgYGluZXQ2X3J0bV9nZXRyb3V0ZWBcbiogICBgX19pbmV0Nl9ydF9ub3RpZnlgXG4qICAgYGluZXQ2X3J0X25vdGlmeWBcbiogICBgaW5ldDZfcnRfZGVsX25vdGlmeWBcbiogICBgZmliNl9ydF91cGRhdGVgXG4qICAgYGZpYjZfaW5mb19od19mbGFnc19zZXRgXG5cbk5hcnJvd2luZyB0aGlzIGZ1cnRoZXIsIEkgbmVlZCB0byB6b29tIGluIG9uIHRoZSBzcGVjaWZpYyBzeW1ib2xzOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgaW5ldDZfcnRfZGVsX25vdGlmeWAsIGBydDZfZmlsbF9ub2RlYCwgYW5kIGBydDZfbmxtc2dfc2l6ZWAuIFRoZXkgYXJlIGNsZWFybHkgY3JpdGljYWwgZm9yIGhhbmRsaW5nIGFuZCBjb25zdHJ1Y3RpbmcgdGhlIG5ldyBOZXRsaW5rIG1lc3NhZ2VzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSBhbHJlYWR5IGtub3cgdGhhdCBgQ09ORklHX0lQVjZgIGlzIHJlcXVpcmVkLCB3aGljaCBpcyBhIGdpdmVuLCBidXQgdGhlcmXigJlzIGEgcmVmZXJlbmNlIHRvIGBDT05GSUdfSVBWNl9ST1VURV9JTkZPYCBpbiB0aGUgdGVzdHMuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYG5ldC9pcHY2L0tjb25maWdgIHRvIHNlZSB3aGF0IHRoYXQgYWN0dWFsbHkgY29udHJvbHMgYW5kIGlmIGl0J3MgbmVjZXNzYXJ5IGZvciB0aGlzIHBhdGNoIHRvIHdvcmsuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGNvcnJlY3RseS5cblxuSW4gc2hvcnQsIHRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSBoYXZlIGEgbmV3IE5ldGxpbmsgYXR0cmlidXRlIGJlaW5nIGFkZGVkLCBhbmQgdGhhdCBtZWFucyBuZXcgY29kZSBwYXRocywgYW5kIG5ldyBsb2dpYyBmb3IgbWVzc2FnZSBjb25zdHJ1Y3Rpb24sIGFuZCBJUHY2IHJvdXRpbmcgb3BlcmF0aW9ucyDigJMgYWxsIG9mIHdoaWNoIG5lZWRzIHRvIGJlIHJpZ29yb3VzbHkgdGVzdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA1NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAxOjIwOjI2LjA1Njc2OTYzNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc4MTQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9ST1VURV9JTkZPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0yMT1jb25maWcgSVBWNl9ST1VURVJfUFJFRlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDE6MjA6MjYuMTA1NTU3ODdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIxMTg5OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgeW91ciBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgRGVlcGVyIGludG8gSVB2NiBDb25maWd1cmF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCwgZXNwZWNpYWxseSB3aXRoIElQdjYuIEkga25vdyB0aGUgYmFzaWNzLCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBMZXQncyBub3QganVzdCBhc3N1bWUgSSd2ZSBjb3ZlcmVkIGFsbCB0aGUgYmFzZXMuIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBmb3IgYElQVjZfUk9VVEVSX1BSRUZgLiBUaGF0IHNldHRpbmcncyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSByb3V0ZXIgcHJpb3JpdGl6ZXMgSVB2NiByb3V0ZXMsIGFuZCBpdCBjb3VsZCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgYW55IGNvbm5lY3Rpdml0eSBpc3N1ZXMgb3IgdW5leHBlY3RlZCByb3V0aW5nIGJlaGF2aW9yIEknbSBzZWVpbmcuIEl0J3MgdG9vIGVhc3kgdG8gb3Zlcmxvb2sgdGhlIGZpbmVyIHBvaW50cyB3aGVuIHlvdSdyZSBmb2N1c2luZyBvbiB0aGUgZ2VuZXJhbCBzZXR1cC4gVGhpcyBjb3VsZCBleHBsYWluIGEgbG90LiBUaGlzIHNldHRpbmcgaXMgZnJlcXVlbnRseSBtaXNzZWQsIGFuZCBzaG91bGQgYWx3YXlzIGJlIGNvbnNpZGVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODAyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDE6MjA6MjkuNDI2NzUwMTI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMTpcXHRjb25maWcgSVBWNl9ST1VURVJfUFJFRlxcbiAgMjI6XFx0XFx0Ym9vbCBcXFwiSVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbiAgMjM6XFx0XFx0aGVscFxcbiAgMjQ6XFx0XFx0ICBSb3V0ZXIgUHJlZmVyZW5jZSBpcyBhbiBvcHRpb25hbCBleHRlbnNpb24gdG8gdGhlIFJvdXRlclxcbiAgMjU6XFx0XFx0ICBBZHZlcnRpc2VtZW50IG1lc3NhZ2Ugd2hpY2ggaW1wcm92ZXMgdGhlIGFiaWxpdHkgb2YgaG9zdHNcXG4gIDI2OlxcdFxcdCAgdG8gcGljayBhbiBhcHByb3ByaWF0ZSByb3V0ZXIsIGVzcGVjaWFsbHkgd2hlbiB0aGUgaG9zdHNcXG4gIDI3OlxcdFxcdCAgYXJlIHBsYWNlZCBpbiBhIG11bHRpLWhvbWVkIG5ldHdvcmsuXFxuICAyODpcXHRcXG4gIDI5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xcbiAgMzI6XFx0XFx0Ym9vbCBcXFwiSVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbiAgMzM6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2X1JPVVRFUl9QUkVGXFxuICAzNDpcXHRcXHRoZWxwXFxuICAzNTpcXHRcXHQgIFN1cHBvcnQgb2YgUm91dGUgSW5mb3JtYXRpb24uXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcXG4gIDQwOlxcdFxcdGJvb2wgXFxcIklQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDE6MjA6MjkuNDI2ODE5ODA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5MDIwNzM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIElQdjYgUm91dGUgQ29uZmlndXJhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCdzIGNsZWFyIHRoYXQgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgSVB2NiByb3V0aW5nLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBgSVBWNl9ST1VURV9JTkZPYCB3aGljaCBhcHBlYXJzIHRvIGJlIGxpbmtlZCB0byBgSVBWNl9ST1VURVJfUFJFRmAuIEFuZCBvZiBjb3Vyc2UsIHRoZSB1c2Ugb2YgYElQVjZgIGlzIGZ1bmRhbWVudGFsIHRvIGFsbCBvZiB0aGlzLlxuXG5JJ20gZ2V0dGluZyB0aGUgc2Vuc2UgdGhlcmUgYXJlIGxpa2VseSBvdGhlciBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCBoZXJlLCBzbyBJJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgdGhvc2UuXG5cblRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyBjb3JlIElQdjYgY29tcG9uZW50czogYG5ldC9pcHY2L2FkZHJjb25mLmNgLCBgbmV0L2lwdjYvaXA2X2ZpYi5jYCwgYG5ldC9pcHY2L25kaXNjLmNgLCBhbmQgYG5ldC9pcHY2L3JvdXRlLmNgLiBTbyB3ZSBhcmUgZGVhbGluZyB3aXRoIHByZXR0eSBmdW5kYW1lbnRhbCBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgdGhhdCB3aWxsIHRlbGwgdGhlIGNvcmUgc3Rvcnk6IHNwZWNpZmljYWxseSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCwgYHJ0Nl9maWxsX25vZGVgLCBhbmQgYHJ0Nl9ubG1zZ19zaXplYC4gVGhleSBzaG91bGQgcHJvdmlkZSBjb250ZXh0IGZvciB3aGF0J3MgZ29pbmcgb24uXG5cbkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgcnQ2X2ZpbGxfbm9kZWAgaXMgbm90IHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyOTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMToyMDozNC4wMTcwMjk3NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU4NTQzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydDZfZmlsbF9ub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3JvdXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvcm91dGUuYz0xMDk9c3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xcbm5ldC9pcHY2L3JvdXRlLmM6MTEwOnN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvcm91dGUuYy0xMTEtXFx0XFx0XFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTQwMTY9c3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy00MDM3LVxcbm5ldC9pcHY2L3JvdXRlLmM6NDAzODpcXHRcXHRcXHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsXFxubmV0L2lwdjYvcm91dGUuYy00MDM5LVxcdFxcdFxcdFxcdFxcdCAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01NzExPXN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy01NzU3LVxcbm5ldC9pcHY2L3JvdXRlLmM6NTc1ODpzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGVfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV4dGhvcCAqbmgsXFxubmV0L2lwdjYvcm91dGUuYy01NzU5LVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBjaGFyICpmbGFncylcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTc4Ni1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjU3ODc6c3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9yb3V0ZS5jLTU3ODgtXFx0XFx0XFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTU5NDAtXFx0XFx0aWYgKFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX25leHRob3BfY29tcGF0X21vZGUpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjYvcm91dGUuYzo1OTQxOlxcdFxcdCAgICBydDZfZmlsbF9ub2RlX25leHRob3Aoc2tiLCBydC1cXHUwMDNlbmgsIFxcdTAwMjZuaF9mbGFncykgXFx1MDAzYyAwKVxcbm5ldC9pcHY2L3JvdXRlLmMtNTk0Mi1cXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NjAzNj1zdGF0aWMgaW50IHJ0Nl9uaF9kdW1wX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfbmggKm5oLCB2b2lkICphcmcpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTYwNzAtXFxubmV0L2lwdjYvcm91dGUuYzo2MDcxOlxcdFxcdFxcdGVyciA9IHJ0Nl9maWxsX25vZGUoZHVtcC1cXHUwMDNlbmV0LCBkdW1wLVxcdTAwM2Vza2IsIHctXFx1MDAzZXJ0LFxcbm5ldC9pcHY2L3JvdXRlLmMtNjA3Mi1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnJ0Nl9leC1cXHUwMDNlcnQ2aS1cXHUwMDNlZHN0LCBOVUxMLCBOVUxMLCAwLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz02MDg5PWludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy02MTIwLVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjYvcm91dGUuYzo2MTIxOlxcdFxcdFxcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgYXJnLVxcdTAwM2Vza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLFxcbm5ldC9pcHY2L3JvdXRlLmMtNjEyMi1cXHRcXHRcXHRcXHRcXHQgIDAsIFJUTV9ORVdST1VURSxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NjIzMj1zdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNjM1NC1cXHRcXHRpZiAoZmlibWF0Y2gpXFxubmV0L2lwdjYvcm91dGUuYzo2MzU1OlxcdFxcdFxcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsXFxubmV0L2lwdjYvcm91dGUuYy02MzU2LVxcdFxcdFxcdFxcdFxcdCAgICBpaWYsIFJUTV9ORVdST1VURSxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNjM2MC1cXHRcXHRlbHNlXFxubmV0L2lwdjYvcm91dGUuYzo2MzYxOlxcdFxcdFxcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIGRzdCwgXFx1MDAyNmZsNi5kYWRkcixcXG5uZXQvaXB2Ni9yb3V0ZS5jLTYzNjItXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZmbDYuc2FkZHIsIGlpZiwgUlRNX05FV1JPVVRFLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz02MzgxPXN0YXRpYyB2b2lkIF9faW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTY0MDAtXFxubmV0L2lwdjYvcm91dGUuYzo2NDAxOlxcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxcbm5ldC9pcHY2L3JvdXRlLmMtNjQwMi1cXHRcXHRcXHQgICAgZXZlbnQsIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MsIGRlbF9yZWFzb24pO1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz02NDM1PXZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNjQ0NS1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjY0NDY6XFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXFxubmV0L2lwdjYvcm91dGUuYy02NDQ3LVxcdFxcdFxcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz02NDYyPXZvaWQgZmliNl9pbmZvX2h3X2ZsYWdzX3NldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNjQ5OS1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjY1MDA6XFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsXFxubmV0L2lwdjYvcm91dGUuYy02NTAxLVxcdFxcdFxcdCAgICAwLCAwLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAxOjIwOjM0LjA2NTYyMjIyNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDkwNTc1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipSb3V0ZSBUYWJsZSBNYWludGVuYW5jZSAtIFN0YXRpYyB2cy4gRHluYW1pYyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSByb3V0ZSB0YWJsZSBmdW5jdGlvbnMgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBhbmQgYWNjZXNzIGxldmVscy4gYHJ0Nl9maWxsX25vZGVgIGlzIGRlZmluZWQgYXMgc3RhdGljLCBtZWFuaW5nIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGF0IG1ha2VzIHNlbnNlIGZvciBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLCBub3Qgc29tZXRoaW5nIGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UuIEhvd2V2ZXIsIGBpcDZfZGVsX3J0X3JlYXNvbmAgYW5kIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCBhcmUgZGVmaW5lZCBhcyAqZXhwb3J0ZWQqLCBvciBub24tc3RhdGljLCBmdW5jdGlvbnMuIFRoYXQgbWVhbnMgdGhleSdyZSBpbnRlbmRlZCB0byBiZSBjYWxsYWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEZpbmFsbHksIGBydDZfbmxtc2dfc2l6ZWAgaXMgc3RhdGljLCB3aGljaCBpcyBwcm9iYWJseSB1c2VkIHRvIHNpemUgdGhlIG5ldGxpbmsgbWVzc2FnZSBmb3IgdGhlIHJvdXRlLlxuXG5HaXZlbiB0aGlzIGluaXRpYWwgb2JzZXJ2YXRpb24gYWJvdXQgdGhlIGRpZmZlcmVuY2UgaW4gc2NvcGluZywgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGVzZSBleHBvcnRlZCBmdW5jdGlvbnMsIGBpcDZfZGVsX3J0X3JlYXNvbmAgYW5kIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCwgYSBiaXQgbW9yZSBjbG9zZWx5IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlaXIgcHVycG9zZSB3aXRoaW4gdGhlIG92ZXJhbGwgcm91dGluZyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIG1pZ2h0IGJlIGxldmVyYWdpbmcgdGhlc2UgcGFydGljdWxhciBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjE2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDE6MjA6MzcuOTE0NjgxNzU2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUyODAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfZGVsX3J0X3JlYXNvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3JvdXRlLmM9OTcwPWludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTEwMjItXFx0aWYgKHJ0IFxcdTAwMjZcXHUwMDI2ICFsaWZldGltZSkge1xcbm5ldC9pcHY2L3JvdXRlLmM6MTAyMzpcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XFxubmV0L2lwdjYvcm91dGUuYy0xMDI0LVxcdFxcdHJ0ID0gTlVMTDtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9Mzk5OD1pbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy00MDA3LVxcbm5ldC9pcHY2L3JvdXRlLmM6NDAwODppbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTQwMDktXFx0XFx0ICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAxOjIwOjM3Ljk1OTIxNjA0MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQxMjQ4OTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25zaWRlcmluZyBJUHY2IFJvdXRpbmcgVGFibGUgVXBkYXRlcyoqXG5cbkhtbSwgc28gd2UncmUgdGFsa2luZyBhYm91dCByb3V0aW5nLCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBpbXBsaWNhdGlvbnMgb2YgYSByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0J3MgdGhlIGJlaGF2aW9yIG9mIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCBpbiB0aGlzIHNjZW5hcmlvPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGV4YWN0IGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbi4gRG9lcyBpdCBkaXJlY3RseSB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGZvcndhcmRpbmcgaW5mb3JtYXRpb24gYmFzZSAoRklCKSwgb3IgZG9lcyBpdCBzaWduYWwgc29tZSBvdGhlciBjb21wb25lbnQ/IEkgbmVlZCB0byBjb25zaWRlciBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgSVB2NiBzdGFjaywgaW5jbHVkaW5nIGludGVyYWN0aW9ucyB3aXRoIG5laWdoYm9yIGRpc2NvdmVyeSwgcHJlZml4IGRlbGVnYXRpb24sIGFuZCByb3V0ZSBjYWNoaW5nLiBJIGFsc28gbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIHdpdGhpbiB0aGUgcm91dGluZyB0YWJsZSB1cGRhdGUgcHJvY2Vzcy4gQXJlIHdlIGNvbnNpZGVyaW5nIGEgc2NlbmFyaW8gaW52b2x2aW5nIGR5bmFtaWMgcm91dGluZyBwcm90b2NvbHM/IFRoZSBpbXBsaWNhdGlvbnMgbWlnaHQgZGlmZmVyIHNpZ25pZmljYW50bHkgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyBpcyBhIHN0YXRpYyByb3V0ZSBkZWxldGlvbiwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleCBsaWtlIGEgQkdQIHJvdXRlIHdpdGhkcmF3YWwuIExldCdzIGRlbHZlIGRlZXBlciBpbnRvIHRoaXMgYXNwZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg0MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAxOjIwOjQxLjYwMDQ2Nzc2NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5OTAzNDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXQ2X3J0X2RlbF9ub3RpZnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvcm91dGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jPTY0MjM9dm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTY0MjgtXFxubmV0L2lwdjYvcm91dGUuYzo2NDI5OnZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxubmV0L2lwdjYvcm91dGUuYy02NDMwLVxcdFxcdFxcdCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDE6MjA6NDEuNzMwMzc3MjMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDExOTM4NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlRoaW5raW5nIFRocm91Z2ggRnVuY3Rpb24gTXV0YWJpbGl0eSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHBvdGVudGlhbCBmdW5jdGlvbiBzaWRlIGVmZmVjdHMsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiBob3cgZHluYW1pYyB0aGV5IHJlYWxseSBhcmUuIFRoZSBjb2RlIGFwcGVhcnMgdG8gdXNlIGBmaWI2X2RlbGAgd2hpY2ggaGFzIGJlZW4gbW9kaWZpZWQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgYmV5b25kIHRoaXMsIGFtIEkgbWlzc2luZyBhbnkgb3RoZXIgcGxhY2VzIHdoZXJlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbidzIGludGVybmFsIHN0YXRlIG1pZ2h0IGJlIGFsdGVyZWQ/IEkgaGF2ZSB0byBiZSBleGhhdXN0aXZlIGhlcmUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGZ1bmN0aW9uIHN0YXRlIGNoYW5nZXMgaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGVyZSBjb3VsZCBiZSBoaWRkZW4gbXV0YWJsZSBzdGF0ZS4gSWYgSSBtaXNzIGV2ZW4gb25lIHBvaW50LCB0aGlzIG92ZXJzaWdodCB3b3VsZCB1bmRlcm1pbmUgbXkgZW50aXJlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIyMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAxOjIwOjQ1LjM3MTU3MzAxNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyNTMzMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmliNl9kZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2ZpYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9maWIuYz0xODQxPXN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTY4LVxcbm5ldC9pcHY2L2lwNl9maWIuYzoxOTY5OnN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTE5NzAtXFx0XFx0XFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjA2NS0vKiBOZWVkIHRvIG93biB0YWJsZS1cXHUwMDNldGI2X2xvY2sgKi9cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjA2NjppbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDY3LVxcdCAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjA5NS1cXHRcXHRcXHRcXHRmaWI2X3JvdXRlc19yZXF1aXJlX3NyY19kZWMoaW5mby1cXHUwMDNlbmxfbmV0KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjA5NjpcXHRcXHRcXHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbywgZGVsX3JlYXNvbik7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwOTctXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjEwNy0gKlxcdENlcnRhaW5seSwgaXQgaXMgbm90IGludGVycnVwdCBzYWZlLlxcbm5ldC9pcHY2L2lwNl9maWIuYzoyMTA4OiAqXFx0SG93ZXZlciwgaXQgaXMgaW50ZXJuYWxseSByZWVudGVyYWJsZSB3cnQgaXRzZWxmIGFuZCBmaWI2X2FkZC9maWI2X2RlbC5cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjEwOS0gKlxcdEl0IG1lYW5zLCB0aGF0IHdlIGNhbiBtb2RpZnkgdHJlZSBkdXJpbmcgd2Fsa2luZ1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTIyMzQ9c3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyNTctXFx0XFx0XFx0dy1cXHUwMDNlbGVhZiA9IHJ0O1xcbm5ldC9pcHY2L2lwNl9maWIuYzoyMjU4OlxcdFxcdFxcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcXHUwMDI2aW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjU5LVxcdFxcdFxcdGlmIChyZXMpIHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yMzkzPXN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0MDUtXFx0XFx0aWYgKGZpYjZfYWdlKHJ0LCBnY19hcmdzKSA9PSAtMSlcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQwNjpcXHRcXHRcXHRmaWI2X2RlbChydCwgXFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fRVhQSVJFRCk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0MDctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMToyMDo0NS40MTY4MjkwMDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQzMTgwNDMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBJUHY2IFJvdXRlIERlbGV0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGZpYjZfZGVsYCBpc24ndCBkZWNsYXJlZCBgc3RhdGljYCwgd2hpY2ggaXMgaW1wb3J0YW50IGNvbnRleHQuXG5cbk15IGNvcmUgZm9jdXMgaGVyZSBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSByZWxldmFudCBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIElQdjYgcm91dGUgZGVsZXRpb24uIE15IGtleSBzeW1ib2xzIGFyZTogYGlwNl9kZWxfcnRfcmVhc29uYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgLCBhbmQgYGZpYjZfZGVsYC5cblxuTm93LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIHRoZSBlc3NlbnRpYWwgb25lcyBhcmUgY2xlYXJseSBgSVBWNmAsIGJ1dCBJIG5lZWQgdG8gY29uc2lkZXIgb3RoZXJzLiBgSVBWNl9ST1VURVJfUFJFRmAgYW5kIGBJUFY2X1JPVVRFX0lORk9gIGFyZSBzcGVjaWZpYyBmb3IgdGVzdGluZyBSb3V0ZSBJbmZvcm1hdGlvbiBPcHRpb25zIChSSU9zKSBpbiB0aGUgUHl0aG9uIHRlc3Qgc3VpdGUsIHNwZWNpZmljYWxseSBmb3IgdGhlIGBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTmAgcmVhc29uLiBIb3dldmVyLCB0aGUgZm91bmRhdGlvbmFsIGBSVEFfREVMX1JFQVNPTmAgZnVuY3Rpb25hbGl0eSBhY3R1YWxseSB3b3JrcyB3aXRob3V0IHRob3NlIGZsYWdzIC0gZm9yIHRoaW5ncyBsaWtlIGV4cGlyZWQgcm91dGVzIG9yIHJlZ3VsYXIgUm91dGVyIEFkdmVydGlzZW1lbnRzLiBJdOKAmXMgZGVmaW5pdGVseSBiZW5lZmljaWFsIHRvIGhhdmUgdGhvc2UgY29uZmlncyBlbmFibGVkIGZvciB0aG9yb3VnaCB0ZXN0aW5nIG9mIHRoZSBSSU8gYXNwZWN0cyB0aG91Z2guIFNvIHRoZXkgYXJlIGltcG9ydGFudCBmb3IgY29tcGxldGVuZXNzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBhbnkgb3RoZXIgY29uZmlncyBhcmUgcmVsZXZhbnQuIGBDT05GSUdfTkVUYCBpcyBhIGdpdmVuLCBidXQgd2hhdCBhYm91dCBgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTYD8gSSBkb24ndCB0aGluayB0aGF0J3Mgc3RyaWN0bHkgcmVxdWlyZWQgZm9yIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS5cblxuTmV4dCwgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBzaWduYXR1cmVzIG9mIHRoZXNlIGtleSBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoZXkgYWxpZ24gd2l0aCBteSB1bmRlcnN0YW5kaW5nLlxuXG4qICAgYGZpYjZfZGVsYDogYGludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKWAgLSBMb29rcyBnb29kLlxuKiAgIGBpcDZfZGVsX3J0X3JlYXNvbmA6IGBpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pYCAtIEFsc28gZ29vZC5cbiogICBgaW5ldDZfcnRfZGVsX25vdGlmeWA6IGB2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilgIC0gQ29ycmVjdC5cblxuQWxyaWdodCwgdGhlc2UgZm9jdXMgc3ltYm9scyBhcmUgYWxsIGFsaWduZWQgd2l0aCB0aGUgZXhwZWN0ZWQgaW50ZXJmYWNlcy4gSSdtIG5vdyByZWFkeSB0byBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTM3LCJPdXRwdXRUb2tlbnMiOjE0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMToyMDo1My44NDg2MzU1MDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzYyNTgxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9ST1VURVJfUFJFRlwiLFxuICAgIFwiSVBWNl9ST1VURV9JTkZPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X2RlbF9ydF9yZWFzb25cIixcbiAgICBcImluZXQ2X3J0X2RlbF9ub3RpZnlcIixcbiAgICBcImZpYjZfZGVsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBSVEFfREVMX1JFQVNPTiBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLCBtb2RpZnlpbmcgY29yZSBJUHY2IHJvdXRpbmcgYW5kIG5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gbG9naWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgcm91dGUgZXhwaXJhdGlvbiwgcm91dGVyIGFkdmVydGlzZW1lbnRzLCBhbmQgbWFudWFsIHJvdXRlIGRlbGV0aW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1JPVVRFUl9QUkVGXCIsXG4gICAgXCJJUFY2X1JPVVRFX0lORk9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcDZfZGVsX3J0X3JlYXNvblwiLFxuICAgIFwiaW5ldDZfcnRfZGVsX25vdGlmeVwiLFxuICAgIFwiZmliNl9kZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIFJUQV9ERUxfUkVBU09OIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMsIG1vZGlmeWluZyBjb3JlIElQdjYgcm91dGluZyBhbmQgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSByb3V0ZSBleHBpcmF0aW9uLCByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMsIGFuZCBtYW51YWwgcm91dGUgZGVsZXRpb24sIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMToyMDo1My45MjYyNjczNzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjM2NDE5NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDE6MjA6NTMuOTI2ODA5ODU5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE2NjM1ODczMTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgdG8gcmVwb3J0IHRoZSByZWFzb24gZm9yIElQdjYgcm91dGUgZGVsZXRpb25zLiBUaGUgZGVsZXRpb24gcmVhc29uIGlzIHBhc3NlZCB0aHJvdWdoIHRoZSByb3V0aW5nIHN1YnN5c3RlbSBhcyBhbiBleHBsaWNpdCBgZW51bSBydF9kZWxfcmVhc29uYCB2YWx1ZSAoZS5nLiwgYFJUX0RFTF9SRUFTT05fVU5TUEVDYCwgYFJUX0RFTF9SRUFTT05fRVhQSVJFRGAsIGBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTmApLiBUaGlzIHZhbHVlIGlzIHRoZW4gc2VyaWFsaXplZCBpbnRvIHRoZSBuZXRsaW5rIG1lc3NhZ2UgdXNpbmcgYG5sYV9wdXRfdTMyKClgLiBcXG5cXG5TaW5jZSB0aGUgYGRlbF9yZWFzb25gIGlzIHBhc3NlZCBieSB2YWx1ZSBhcyBhbiBleHBsaWNpdCBjb25zdGFudCBpbiBhbGwgbW9kaWZpZWQgY2FsbCBzaXRlcywgdGhlcmUgaXMgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gc3RhY2ssIGhlYXAsIG9yIHBhZGRpbmcgYnl0ZXMuIFRoZSBuZXRsaW5rIGF0dHJpYnV0ZSBjb25zdHJ1Y3Rpb24gdmlhIGBubGFfcHV0X3UzMigpYCBzYWZlbHkgaGFuZGxlcyB0aGUgc2VyaWFsaXphdGlvbiB3aXRob3V0IGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgaW4gdGhpcyBjb2RlLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3YjQ0NWJkMDJmNGY4ODQ5N2ViZGFkOTE4Nzk4YjhjODNkMTk2YTkxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAwMToyMDoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcbmluZGV4IDMzMTk1ZGI5Njc0NmMuLjI1MzAzN2VhNTE3NmEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcbkBAIC03OCw2ICs3OCwyNyBAQCBkZWZpbml0aW9uczpcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBydGEtdXNlZFxuICAgICAgICAgdHlwZTogdTMyXG4rICAtXG4rICAgIG5hbWU6IGRlbC1yZWFzb25cbisgICAgdHlwZTogZW51bVxuKyAgICBuYW1lLXByZWZpeDogcnQtZGVsLXJlYXNvbi1cbisgICAgZW51bS1uYW1lOiBydC1kZWwtcmVhc29uXG4rICAgIGRvYzogfFxuKyAgICAgIFdoeSB0aGUga2VybmVsIGRlbGV0ZWQgYSByb3V0ZS4gTmV3IGNhdXNlcyBtYXkgYmUgYXBwZW5kZWQuIFRoZVxuKyAgICAgIHZhbHVlIHNwYWNlIGlzIGZhbWlseS1hZ25vc3RpYywgYSB2YWx1ZSBpcyBuZXZlciByZWludGVycHJldGVkXG4rICAgICAgcGVyIGFkZHJlc3MgZmFtaWx5LlxuKyAgICBlbnRyaWVzOlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHVuc3BlY1xuKyAgICAgICAgZG9jOiBUaGUgZGVsZXRpb24gcGF0aCBkb2VzIG5vdCByZWNvcmQgYSBjYXVzZS5cbisgICAgICAtXG4rICAgICAgICBuYW1lOiBleHBpcmVkXG4rICAgICAgICBkb2M6IFRoZSBSVEZfRVhQSVJFUyBsaWZldGltZSByYW4gb3V0IGFuZCB0aGUgcm91dGUgd2FzIGdhcmJhZ2VcbisgICAgICAgICAgY29sbGVjdGVkLlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHJhLXdpdGhkcmF3blxuKyAgICAgICAgZG9jOiBBIFJvdXRlciBBZHZlcnRpc2VtZW50IHdpdGhkcmV3IHRoZSByb3V0ZSB3aXRoIGEgemVyb1xuKyAgICAgICAgICBsaWZldGltZS5cbiBcbiBhdHRyaWJ1dGUtc2V0czpcbiAgIC1cbkBAIC0xODUsNiArMjA2LDE4IEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgdHlwZTogdTMyXG4gICAgICAgICBieXRlLW9yZGVyOiBiaWctZW5kaWFuXG4gICAgICAgICBkaXNwbGF5LWhpbnQ6IGhleFxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGRlbC1yZWFzb25cbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZW51bTogZGVsLXJlYXNvblxuKyAgICAgICAgZG9jOiB8XG4rICAgICAgICAgIEVtaXR0ZWQgb25seSBvbiBSVE1fREVMUk9VVEUgbm90aWZpY2F0aW9ucywgYW5kIG9ubHkgd2hlbiB0aGVcbisgICAgICAgICAgZGVsZXRpb24gcGF0aCByZWNvcmRzIGEgY2F1c2UuIEFuIGFic2VudCBhdHRyaWJ1dGUgbWVhbnNcbisgICAgICAgICAgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdFxuKyAgICAgICAgICByZWNvcmQgaXRzIGNhdXNlLCBjb25zdW1lcnMgbXVzdCB0cmVhdCBhYnNlbnQgYW5kIHVuc3BlY1xuKyAgICAgICAgICBpZGVudGljYWxseS4gQ3VycmVudGx5IG9ubHkgSVB2NiBkZWxldGlvbiBwYXRocyByZWNvcmQgYVxuKyAgICAgICAgICBjYXVzZS4gVGhlIGF0dHJpYnV0ZSBpcyBub3RpZmljYXRpb24tb25seSwgdGhlIGtlcm5lbCByZWplY3RzXG4rICAgICAgICAgIGl0IGluIHJlcXVlc3RzLlxuICAgLVxuICAgICBuYW1lOiBtZXRyaWNzXG4gICAgIG5hbWUtcHJlZml4OiBydGF4LVxuQEAgLTI5OSw2ICszMzIsNyBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gZHBvcnRcbiAgICAgICAgICAgICAtIG5oLWlkXG4gICAgICAgICAgICAgLSBmbG93bGFiZWxcbisgICAgICAgICAgICAtIGRlbC1yZWFzb25cbiAgICAgICBkdW1wOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI2XG5AQCAtMzEzLDcgKzM0NywzNSBAQCBvcGVyYXRpb25zOlxuICAgICAgIGRvOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI0XG4tICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcbisgICAgICAgICAgYXR0cmlidXRlczogXHUwMDI2cm91dGUtcmVxLWF0dHJzXG4rICAgICAgICAgICAgLSBkc3RcbisgICAgICAgICAgICAtIHNyY1xuKyAgICAgICAgICAgIC0gaWlmXG4rICAgICAgICAgICAgLSBvaWZcbisgICAgICAgICAgICAtIGdhdGV3YXlcbisgICAgICAgICAgICAtIHByaW9yaXR5XG4rICAgICAgICAgICAgLSBwcmVmc3JjXG4rICAgICAgICAgICAgLSBtZXRyaWNzXG4rICAgICAgICAgICAgLSBtdWx0aXBhdGhcbisgICAgICAgICAgICAtIGZsb3dcbisgICAgICAgICAgICAtIGNhY2hlaW5mb1xuKyAgICAgICAgICAgIC0gdGFibGVcbisgICAgICAgICAgICAtIG1hcmtcbisgICAgICAgICAgICAtIG1mYy1zdGF0c1xuKyAgICAgICAgICAgIC0gdmlhXG4rICAgICAgICAgICAgLSBuZXdkc3RcbisgICAgICAgICAgICAtIHByZWZcbisgICAgICAgICAgICAtIGVuY2FwLXR5cGVcbisgICAgICAgICAgICAtIGVuY2FwXG4rICAgICAgICAgICAgLSBleHBpcmVzXG4rICAgICAgICAgICAgLSBwYWRcbisgICAgICAgICAgICAtIHVpZFxuKyAgICAgICAgICAgIC0gdHRsLXByb3BhZ2F0ZVxuKyAgICAgICAgICAgIC0gaXAtcHJvdG9cbisgICAgICAgICAgICAtIHNwb3J0XG4rICAgICAgICAgICAgLSBkcG9ydFxuKyAgICAgICAgICAgIC0gbmgtaWRcbisgICAgICAgICAgICAtIGZsb3dsYWJlbFxuICAgICAtXG4gICAgICAgbmFtZTogZGVscm91dGVcbiAgICAgICBkb2M6IERlbGV0ZSBhbiBleGlzdGluZyByb3V0ZVxuQEAgLTMyMSw0ICszODMsMjMgQEAgb3BlcmF0aW9uczpcbiAgICAgICBkbzpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIHZhbHVlOiAyNVxuLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzXG4rICAgICAgICAgIGF0dHJpYnV0ZXM6ICpyb3V0ZS1yZXEtYXR0cnNcbisgICAgLVxuKyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZlxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS5cbisgICAgICB2YWx1ZTogMjRcbisgICAgICBub3RpZnk6IGdldHJvdXRlXG4rICAgIC1cbisgICAgICBuYW1lOiBkZWxyb3V0ZS1udGZcbisgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuXG4rICAgICAgdmFsdWU6IDI1XG4rICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxuK1xuK21jYXN0LWdyb3VwczpcbisgIGxpc3Q6XG4rICAgIC1cbisgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGVcbisgICAgICB2YWx1ZTogN1xuKyAgICAtXG4rICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlXG4rICAgICAgdmFsdWU6IDExXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG5pbmRleCA5Y2QyN2UxYjliNjkyLi4yMzIyODliNDM5YzNjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcbkBAIC00NjgsNyArNDY4LDggQEAgdm9pZCBmaWI2X2NsZWFuX2FsbF9za2lwX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0ICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTtcbitpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0ICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4gXG4gc3RhdGljIGlubGluZVxuIHZvaWQgcnQ2X2dldF9wcmVmc3JjKGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQsIHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbkBAIC01MzIsNiArNTMzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gI2VuZGlmXG4gdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4gXHRcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKTtcbit2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0XHRcdCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4gXG4gdm9pZCBmaWI2X2FnZV9leGNlcHRpb25zKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9nY19hcmdzICpnY19hcmdzLFxuIFx0XHRcdCB1bnNpZ25lZCBsb25nIG5vdyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggMDlmZmUwZjEzY2U3NS4uY2MwNDU3MDU4NjJkZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTEyNiw2ICsxMjYsOCBAQCBpbnQgaXB2Nl9yb3V0ZV9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBjbWQsXG4gaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcbiBcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIGludCBpcDZfaW5zX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpKTtcbitpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4rXHRcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSk7XG4gI2Vsc2VcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbmluZGV4IDI3MjY1ZmQzMWU1ZmMuLjM5ODhiNTFkYjUzOWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuQEAgLTM5OSw2ICszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xuIFx0UlRBX0RQT1JULFxuIFx0UlRBX05IX0lELFxuIFx0UlRBX0ZMT1dMQUJFTCxcbitcdFJUQV9ERUxfUkVBU09OLFxuIFx0X19SVEFfTUFYXG4gfTtcbiBcbkBAIC00MDcsNiArNDA4LDMwIEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XG4gI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKVxuICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKVxuIFxuKy8qIFJUQV9ERUxfUkVBU09OOiB3aHkgdGhlIGtlcm5lbCBkZWxldGVkIHRoZSByb3V0ZS4gdTMyLlxuKyAqIEVtaXR0ZWQgb25seSBvbiBSVE1fREVMUk9VVEUgbm90aWZpY2F0aW9ucywgYW5kIG9ubHkgd2hlbiB0aGUgZGVsZXRpb25cbisgKiBwYXRoIHJlY29yZHMgYSBjYXVzZS4gQWJzZW5jZSBtZWFucyBlaXRoZXIgYW4gb2xkZXIga2VybmVsIG9yIGFcbisgKiBkZWxldGlvbiBwYXRoIHRoYXQgZG9lcyBub3QgKHlldCkgcmVjb3JkIGl0cyBjYXVzZSAtIGNvbnN1bWVycyBtdXN0XG4rICogdHJlYXQgXCJhYnNlbnRcIiBhbmQgXCJ1bnNwZWNcIiBpZGVudGljYWxseS4gTmV3IGNhdXNlcyBtYXkgYmUgYXBwZW5kZWQuXG4rICogQ3VycmVudGx5IG9ubHkgSVB2NiBkZWxldGlvbiBwYXRocyByZWNvcmQgYSBjYXVzZS5cbisgKlxuKyAqIFRoZSBhdHRyaWJ1dGUgaXMgbm90aWZpY2F0aW9uLW9ubHk6IHRoZSBrZXJuZWwgcmVqZWN0cyBpdCBpblxuKyAqIHJlcXVlc3RzLCBzbyBhIG5vdGlmaWNhdGlvbiBtdXN0IG5vdCBiZSBlY2hvZWQgYmFjayB2ZXJiYXRpbS5cbisgKlxuKyAqIFRoZSB2YWx1ZSBzcGFjZSBpcyBmYW1pbHktYWdub3N0aWM6IGEgdmFsdWUgbXVzdCBuZXZlciBiZVxuKyAqIHJlaW50ZXJwcmV0ZWQgcGVyIGFkZHJlc3MgZmFtaWx5LiBBIGNhdXNlIHRoYXQgb25seSBvbmUgZmFtaWx5IGNhblxuKyAqIHByb2R1Y2Ugc3RpbGwgZ2V0cyBpdHMgb3duIHZhbHVlIHJhdGhlciB0aGFuIHJldXNpbmcgYW5vdGhlclxuKyAqIGZhbWlseSdzLlxuKyAqL1xuK2VudW0gcnRfZGVsX3JlYXNvbiB7XG4rXHRSVF9ERUxfUkVBU09OX1VOU1BFQyxcdFx0LyogY2F1c2Ugbm90IHJlY29yZGVkICovXG4rXHRSVF9ERUxfUkVBU09OX0VYUElSRUQsXHRcdC8qIFJURl9FWFBJUkVTIGxpZmV0aW1lIHJhbiBvdXQgKEdDKSAqL1xuK1x0UlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04sXHQvKiB6ZXJvLWxpZmV0aW1lIFJBIC8gUElPIC8gUklPICovXG4rXHRfX1JUX0RFTF9SRUFTT05fTUFYXG4rfTtcbitcbisjZGVmaW5lIFJUX0RFTF9SRUFTT05fTUFYIChfX1JUX0RFTF9SRUFTT05fTUFYIC0gMSlcbitcbiAvKiBSVE1fTVVMVElQQVRIIC0tLSBhcnJheSBvZiBzdHJ1Y3QgcnRuZXh0aG9wLlxuICAqXG4gICogXCJzdHJ1Y3QgcnRuZXh0aG9wXCIgZGVzY3JpYmVzIGFsbCBuZWNlc3NhcnkgbmV4dGhvcCBpbmZvcm1hdGlvbixcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xuaW5kZXggZjZmYTI3MTViNDUwYi4uOWQ4OWJlN2UwNTQ0YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmNcbisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbkBAIC0yODc0LDcgKzI4NzQsOCBAQCB2b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcbiBcdFx0aWYgKHJ0KSB7XG4gXHRcdFx0LyogQXV0b2NvbmYgcHJlZml4IHJvdXRlICovXG4gXHRcdFx0aWYgKHZhbGlkX2xmdCA9PSAwKSB7XG4tXHRcdFx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbitcdFx0XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsXG4rXHRcdFx0XHRcdFx0ICBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG4gXHRcdFx0XHRydCA9IE5VTEw7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHRhYmxlID0gcnQtXHUwMDNlZmliNl90YWJsZTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcbmluZGV4IGU5ZmM2OTJkNGYzYjIuLjNlMzgyYmExNTczZTMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmNcbisrKyBiL25ldC9pcHY2L2lwNl9maWIuY1xuQEAgLTE5NjcsNyArMTk2Nyw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcbiB9XG4gXG4gc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbi1cdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbitcdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbitcdFx0XHQgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgZmliNl9pbmZvICpsZWFmLCAqcmVwbGFjZV9ydCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmliNl93YWxrZXIgKnc7XG5AQCAtMjA1NiwxMyArMjA1NywxNCBAQCBzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxuIFx0XHRcdGNhbGxfZmliNl9lbnRyeV9ub3RpZmllcnNfcmVwbGFjZShuZXQsIHJlcGxhY2VfcnQpO1xuIFx0fVxuIFx0aWYgKCFpbmZvLVx1MDAzZXNraXBfbm90aWZ5KVxuLVx0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCk7XG4rXHRcdGluZXQ2X3J0X2RlbF9ub3RpZnkocnQsIGluZm8sIGRlbF9yZWFzb24pO1xuIFxuIFx0ZmliNl9pbmZvX3JlbGVhc2UocnQpO1xuIH1cbiBcbiAvKiBOZWVkIHRvIG93biB0YWJsZS1cdTAwM2V0YjZfbG9jayAqL1xuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4raW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbitcdCAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwO1xuQEAgLTIwOTEsNyArMjA5Myw3IEBAIGludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4gXHRcdGlmIChydCA9PSBjdXIpIHtcbiBcdFx0XHRpZiAoZmliNl9yZXF1aXJlc19zcmMoY3VyKSlcbiBcdFx0XHRcdGZpYjZfcm91dGVzX3JlcXVpcmVfc3JjX2RlYyhpbmZvLVx1MDAzZW5sX25ldCk7XG4tXHRcdFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8pO1xuK1x0XHRcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0XHRydHBfbmV4dCA9IFx1MDAyNmN1ci1cdTAwM2VmaWI2X25leHQ7XG5AQCAtMjI1Myw3ICsyMjU1LDcgQEAgc3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxuIFx0XHRyZXMgPSBjLVx1MDAzZWZ1bmMocnQsIGMtXHUwMDNlYXJnKTtcbiBcdFx0aWYgKHJlcyA9PSAtMSkge1xuIFx0XHRcdHctXHUwMDNlbGVhZiA9IHJ0O1xuLVx0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbitcdFx0XHRyZXMgPSBmaWI2X2RlbChydCwgXHUwMDI2aW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChyZXMpIHtcbiAjaWYgUlQ2X0RFQlVHIFx1MDAzZT0gMlxuIFx0XHRcdFx0cHJfZGVidWcoXCIlczogZGVsIGZhaWxlZDogcnQ9JXBAJXAgZXJyPSVkXFxuXCIsXG5AQCAtMjQwMSw3ICsyNDAzLDcgQEAgc3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBuLCBcdTAwMjZ0YjYtXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxuIFx0XHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxuLVx0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbitcdFx0XHRmaWI2X2RlbChydCwgXHUwMDI2aW5mbywgUlRfREVMX1JFQVNPTl9FWFBJUkVEKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZmliNl9nY19hbGwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9nY19hcmdzICpnY19hcmdzKVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjLmMgYi9uZXQvaXB2Ni9uZGlzYy5jXG5pbmRleCBmZTM2YjNmNTEyODUwLi4xMTExYzRlYmM2MWQ5IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmRpc2MuY1xuKysrIGIvbmV0L2lwdjYvbmRpc2MuY1xuQEAgLTEzNjEsNyArMTM2MSw5IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRkZWZydHJfdXNyX21ldHJpYyA9IGluNl9kZXYtXHUwMDNlY25mLnJhX2RlZnJ0cl9tZXRyaWM7XG4gXHQvKiBkZWxldGUgdGhlIHJvdXRlIGlmIGxpZmV0aW1lIGlzIDAgb3IgaWYgbWV0cmljIG5lZWRzIGNoYW5nZSAqL1xuIFx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAobGlmZXRpbWUgPT0gMCB8fCBydC1cdTAwM2VmaWI2X21ldHJpYyAhPSBkZWZydHJfdXNyX21ldHJpYykpIHtcbi1cdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4rXHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsXG4rXHRcdFx0XHQgIGxpZmV0aW1lID09IDAgPyBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XG4rXHRcdFx0XHRcdFx0ICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdHJ0ID0gTlVMTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggZmM0MmQ2N2U1ODIyNi4uMTcwNDM1OWQzOTYwZCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbisrKyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC0xMTEsNyArMTExLDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbiBcdFx0XHQgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYyxcbiBcdFx0XHQgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4tXHRcdFx0IHVuc2lnbmVkIGludCBmbGFncyk7XG4rXHRcdFx0IHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xuIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9maW5kX2NhY2hlZF9ydChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcyxcbiBcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcbiBcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcik7XG5AQCAtMTAyMCw3ICsxMDIwLDcgQEAgaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcbiBcdFx0XHRcdFx0Z3dhZGRyLCBkZXYpO1xuIFxuIFx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAhbGlmZXRpbWUpIHtcbi1cdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4rXHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTM5NzMsNyArMzk3Myw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4rc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0XHRcdGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IGZpYjZfdGFibGUgKnRhYmxlO1xuQEAgLTM5ODYsNyArMzk4Nyw3IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcbiBcdHRhYmxlID0gcnQtXHUwMDNlZmliNl90YWJsZTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4tXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7XG4rXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gXG4gb3V0OlxuQEAgLTQwMDEsNyArNDAwMiwxNSBAQCBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxuIFx0XHQuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeVxuIFx0fTtcbiBcbi1cdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmluZm8pO1xuK1x0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuK31cbitcbitpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbitcdFx0ICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4re1xuK1x0c3RydWN0IG5sX2luZm8gaW5mbyA9IHsgLm5sX25ldCA9IG5ldCB9O1xuK1xuK1x0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbywgZGVsX3JlYXNvbik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbkBAIC00MDI4LDcgKzQwMzcsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXG4gXG4gXHRcdFx0aWYgKHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLFxuIFx0XHRcdFx0XHQgIE5VTEwsIE5VTEwsIDAsIFJUTV9ERUxST1VURSxcbi1cdFx0XHRcdFx0ICBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCAwKSBcdTAwM2MgMCkge1xuK1x0XHRcdFx0XHQgIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIDAsXG4rXHRcdFx0XHRcdCAgUlRfREVMX1JFQVNPTl9VTlNQRUMpIFx1MDAzYyAwKSB7XG4gXHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRcdHNrYiA9IE5VTEw7XG4gXHRcdFx0fSBlbHNlXG5AQCAtNDA2NCwxMyArNDA3NCwxMyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaWJsaW5nLCBuZXh0X3NpYmxpbmcsXG4gXHRcdFx0XHRcdCBcdTAwMjZydC1cdTAwM2VmaWI2X3NpYmxpbmdzLFxuIFx0XHRcdFx0XHQgZmliNl9zaWJsaW5ncykge1xuLVx0XHRcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8pO1xuK1x0XHRcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7XG4rXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gb3V0X3B1dDpcbkBAIC00MTk2LDcgKzQyMDYsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXG4gXHRcdFx0XHRpZiAoIWZpYjZfaW5mb19ob2xkX3NhZmUocnQpKVxuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRcdGVyciA9ICBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8pO1xuK1x0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvLFxuK1x0XHRcdFx0XHRcdCAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAoY2ZnLVx1MDAzZWZjX25oX2lkKVxuQEAgLTQyMTUsNyArNDIyNiw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcbiBcbiBcdFx0XHQvKiBpZiBnYXRld2F5IHdhcyBzcGVjaWZpZWQgb25seSBkZWxldGUgdGhlIG9uZSBob3AgKi9cbiBcdFx0XHRpZiAoY2ZnLVx1MDAzZWZjX2ZsYWdzIFx1MDAyNiBSVEZfR0FURVdBWSlcbi1cdFx0XHRcdGVyciA9IF9faXA2X2RlbF9ydChydCwgXHUwMDI2Y2ZnLVx1MDAzZWZjX25saW5mbyk7XG4rXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4rXHRcdFx0XHRcdFx0ICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGVyciA9IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhydCwgY2ZnKTtcbiBcdFx0XHRicmVhaztcbkBAIC01NzM5LDYgKzU3NTEsNyBAQCBzdGF0aWMgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHN0cnVjdCBmaWI2X2luZm8gKmY2aSlcbiBcdCAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpXG4gXHQgICAgICAgKyBubGFfdG90YWxfc2l6ZShUQ1BfQ0FfTkFNRV9NQVgpIC8qIFJUQVhfQ0NfQUxHTyAqL1xuIFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX1BSRUYgKi9cbitcdCAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9ERUxfUkVBU09OICovXG4gXHQgICAgICAgKyBuZXh0aG9wX2xlbjtcbiB9XG4gXG5AQCAtNTc3NSw3ICs1Nzg4LDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbiBcdFx0XHQgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYyxcbiBcdFx0XHQgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4tXHRcdFx0IHVuc2lnbmVkIGludCBmbGFncylcbitcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0NiA9IGRzdF9ydDZfaW5mbyhkc3QpO1xuIFx0c3RydWN0IHJ0NmtleSAqcnQ2X2RzdCwgKnJ0Nl9zcmM7XG5AQCAtNTk1NCw2ICs1OTY3LDEwIEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAocnRubF9wdXRfY2FjaGVpbmZvKHNrYiwgZHN0LCAwLCBleHBpcmVzLCBkc3QgPyBkc3QtXHUwMDNlZXJyb3IgOiAwKSBcdTAwM2MgMClcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4rXHRpZiAoZGVsX3JlYXNvbiAhPSBSVF9ERUxfUkVBU09OX1VOU1BFQyBcdTAwMjZcdTAwMjZcbitcdCAgICBubGFfcHV0X3UzMihza2IsIFJUQV9ERUxfUkVBU09OLCBkZWxfcmVhc29uKSlcbitcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4rXG4gXHRpZiAobmxhX3B1dF91OChza2IsIFJUQV9QUkVGLCBJUFY2X0VYVFJBQ1RfUFJFRihydDZfZmxhZ3MpKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG5AQCAtNjA1NSw3ICs2MDcyLDggQEAgc3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKVxuIFx0XHRcdFx0XHQgICAgXHUwMDI2cnQ2X2V4LVx1MDAzZXJ0NmktXHUwMDNlZHN0LCBOVUxMLCBOVUxMLCAwLFxuIFx0XHRcdFx0XHQgICAgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgICAgTkVUTElOS19DQihkdW1wLVx1MDAzZWNiLVx1MDAzZXNrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgZHVtcC1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCB3LVx1MDAzZWZsYWdzKTtcbitcdFx0XHRcdFx0ICAgIGR1bXAtXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgdy1cdTAwM2VmbGFncyxcbitcdFx0XHRcdFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC02MTAzLDcgKzYxMjEsOCBAQCBpbnQgcnQ2X2R1bXBfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcClcbiBcdFx0XHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy1cdTAwM2Vza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLFxuIFx0XHRcdFx0XHQgIDAsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICBORVRMSU5LX0NCKGFyZy1cdTAwM2VjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICBhcmctXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MpKSB7XG4rXHRcdFx0XHRcdCAgYXJnLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzLFxuK1x0XHRcdFx0XHQgIFJUX0RFTF9SRUFTT05fVU5TUEVDKSkge1xuIFx0XHRcdFx0cmV0dXJuIDA7XG4gXHRcdFx0fVxuIFx0XHRcdGNvdW50Kys7XG5AQCAtNjMzNiwxMiArNjM1NSwxNCBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLFxuIFx0XHRcdFx0XHQgICAgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4rXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuK1x0XHRcdFx0XHQgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgZHN0LCBcdTAwMjZmbDYuZGFkZHIsXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZmbDYuc2FkZHIsIGlpZiwgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIDApO1xuK1x0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCxcbitcdFx0XHRcdFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGVyciA9IC1FTkVUVU5SRUFDSDtcbiBcdH1cbkBAIC02MzU3LDggKzYzNzgsOSBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuLVx0XHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MpXG4rc3RhdGljIHZvaWQgX19pbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbitcdFx0XHQgICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IG5sbV9mbGFncyxcbitcdFx0XHQgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG5AQCAtNjM3Nyw3ICs2Mzk5LDcgQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXG4tXHRcdFx0ICAgIGV2ZW50LCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MpO1xuK1x0XHRcdCAgICBldmVudCwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLCBkZWxfcmVhc29uKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIG5lZWRlZCBzcGFjZSBncmV3IHVuZGVyIHVzLiAqL1xuQEAgLTYzOTgsNiArNjQyMCwxOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdHJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNl9ST1VURSwgZXJyKTtcbiB9XG4gXG4rdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHRcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcbit7XG4rXHRfX2luZXQ2X3J0X25vdGlmeShldmVudCwgcnQsIGluZm8sIG5sbV9mbGFncywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuK31cbitcbit2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0XHRcdCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbit7XG4rXHRfX2luZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwLCBkZWxfcmVhc29uKTtcbit9XG4rXG4gdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHQgICAgc3RydWN0IG5sX2luZm8gKmluZm8pXG4ge1xuQEAgLTY0MTAsNyArNjQ0NCw4IEBAIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgUlRNX05FV1JPVVRFLCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFKTtcbitcdFx0XHQgICAgUlRNX05FV1JPVVRFLCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLFxuK1x0XHRcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovXG4gXHRcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XG5AQCAtNjQ2Myw3ICs2NDk4LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuIFx0fVxuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsXG4tXHRcdFx0ICAgIDAsIDApO1xuK1x0XHRcdCAgICAwLCAwLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovXG4gXHRcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcbmluZGV4IGU1OGJkYmRjNThlZWEuLjM0OTM1ODg2YjZhZGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG5AQCAtMTcsNyArMTcsNyBAQCBmcm9tIC51dGlscyBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIGZkX3JlYWRfdGltZW91dCwgY21kLCBia2csIGRlZmVyLCBcXFxuICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjXG4gZnJvbSAuYnBmIGltcG9ydCBicGZfbWFwX3NldCwgYnBmX21hcF9kdW1wLCBicGZfcHJvZ19tYXBfaWRzXG4gZnJvbSAueW5sIGltcG9ydCBObEVycm9yLCBObGN0cmxGYW1pbHksIFlubEZhbWlseSwgXFxcbi0gICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseVxuKyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIC55bmwgaW1wb3J0IE5ldHNoYXBlckZhbWlseSwgRGV2bGlua0ZhbWlseSwgUFNQRmFtaWx5LCBOZXRsaW5rXG4gXG4gX19hbGxfXyA9IFtcIktTUkNcIixcbkBAIC0zNCw0ICszNCw0IEBAIF9fYWxsX18gPSBbXCJLU1JDXCIsXG4gICAgICAgICAgICBcIk5ldGRldlNpbVwiLCBcIk5ldGRldlNpbURldlwiLFxuICAgICAgICAgICAgXCJOZXRzaGFwZXJGYW1pbHlcIiwgXCJEZXZsaW5rRmFtaWx5XCIsIFwiUFNQRmFtaWx5XCIsIFwiTmxFcnJvclwiLFxuICAgICAgICAgICAgXCJZbmxGYW1pbHlcIiwgXCJFdGh0b29sRmFtaWx5XCIsIFwiTmV0ZGV2RmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLFxuLSAgICAgICAgICAgXCJObGN0cmxGYW1pbHlcIiwgXCJSdG5sQWRkckZhbWlseVwiLCBcIk5ldGxpbmtcIl1cbisgICAgICAgICAgIFwiTmxjdHJsRmFtaWx5XCIsIFwiUnRubEFkZHJGYW1pbHlcIiwgXCJSdG5sUm91dGVGYW1pbHlcIiwgXCJOZXRsaW5rXCJdXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuaW5kZXggMmU1NjcwNjJhYTZjYy4uMDhkZWZmNzU2ZjI5YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuQEAgLTI5LDcgKzI5LDcgQEAgZXhjZXB0IE1vZHVsZU5vdEZvdW5kRXJyb3IgYXMgZTpcbiBcbiBfX2FsbF9fID0gW1xuICAgICBcIk5sRXJyb3JcIiwgXCJObFBvbGljeVwiLCBcIk5ldGxpbmtcIiwgXCJZbmxGYW1pbHlcIiwgXCJTUEVDX1BBVEhcIixcbi0gICAgXCJFdGh0b29sRmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLCBcIlJ0bmxBZGRyRmFtaWx5XCIsXG4rICAgIFwiRXRodG9vbEZhbWlseVwiLCBcIlJ0bmxGYW1pbHlcIiwgXCJSdG5sQWRkckZhbWlseVwiLCBcIlJ0bmxSb3V0ZUZhbWlseVwiLFxuICAgICBcIk5ldGRldkZhbWlseVwiLCBcIk5ldHNoYXBlckZhbWlseVwiLCBcIk5sY3RybEZhbWlseVwiLCBcIkRldmxpbmtGYW1pbHlcIixcbiAgICAgXCJQU1BGYW1pbHlcIixcbiBdXG5AQCAtNTQsNiArNTQsMTEgQEAgY2xhc3MgUnRubEFkZHJGYW1pbHkoWW5sRmFtaWx5KTpcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ3J0LWFkZHIueWFtbCcpKS5hc19wb3NpeCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JycsIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXG4gXG4rY2xhc3MgUnRubFJvdXRlRmFtaWx5KFlubEZhbWlseSk6XG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3NpemU9MCk6XG4rICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCdydC1yb3V0ZS55YW1sJykpLmFzX3Bvc2l4KCksXG4rICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0nJywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcbitcbiBjbGFzcyBOZXRkZXZGYW1pbHkoWW5sRmFtaWx5KTpcbiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ25ldGRldi55YW1sJykpLmFzX3Bvc2l4KCksXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbmluZGV4IDBjNjdjN2MwMGQ4NDEuLjVjYzNlYmRjZjA4ZGUgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtNSw3ICs1LDkgQEAgaW1wb3J0IHNvY2tldFxuIGltcG9ydCBzdHJ1Y3RcbiBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcbi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseVxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxuK2Zyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbitmcm9tIGxpYi5weSBpbXBvcnQgZGVmZXJcbiBcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJ1xceGUwXFx4MDBcXHgwMFxceDAxJ1xuIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJ1xceGVmXFx4MDFcXHgwMVxceDAxJ1xuQEAgLTEzNCw4ICsxMzYsMTg5IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVx1MDAzZSBOb25lOlxuICAgICBrc2Z0X3RydWUoZlwiaW5ldCB7aWZuYW1lfSBmb3J3YXJkaW5nIG9uXCIgaW4gY21kX29iai5zdGRvdXQsXG4gICAgICAgICAgICAgICBmXCJObyAnZm9yd2FyZGluZyBvbicgbm90aWZpY2lhdGlvbiBmb3VuZCBmb3IgaW50ZXJmYWNlIHtpZm5hbWV9XCIpXG4gXG4rZGVmIF9ydG5sX3JvdXRlX3N1YnNjcmliZShucyk6XG4rICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcbisgICAgICAgIHJ0bmwgPSBSdG5sUm91dGVGYW1pbHkoKVxuKyAgICBkZWZlcihydG5sLmNsb3NlKVxuKyAgICBydG5sLm50Zl9zdWJzY3JpYmUoXCJydG5sZ3JwLWlwdjYtcm91dGVcIilcbisgICAgcmV0dXJuIHJ0bmxcbitcbitcbitkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6XG4rICAgIFwiXCJcIlJldHVybiB0aGUgYXR0cnMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIG5vdGlmaWNhdGlvbiwgTm9uZSBvbiB0aW1lb3V0LlwiXCJcIlxuK1xuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxuKyAgICAgICAgaWYgbXNnWyduYW1lJ10gIT0gbmFtZTpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXG4rICAgICAgICBpZiBhdHRyc1sncnRtLWRzdC1sZW4nXSAhPSBkc3RfbGVuOlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgnZHN0JykgIT0gZHN0OlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICByZXR1cm4gYXR0cnNcbisgICAgcmV0dXJuIE5vbmVcbitcbitcbitkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6XG4rICAgIFwiXCJcIkdhdGhlciBhdHRycyBvZiBtYXRjaGluZyBub3RpZmljYXRpb25zLCBrZXllZCBieSAoZHN0X2xlbiwgZHN0KS5cIlwiXCJcbitcbisgICAgc2VlbiA9IHt9XG4rICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XG4rICAgICAgICBpZiBtc2dbJ25hbWUnXSAhPSBuYW1lOlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBhdHRycyA9IG1zZ1snbXNnJ11cbisgICAgICAgIGtleSA9IChhdHRyc1sncnRtLWRzdC1sZW4nXSwgYXR0cnMuZ2V0KCdkc3QnKSlcbisgICAgICAgIGlmIGtleSBpbiB3YW50OlxuKyAgICAgICAgICAgIHNlZW5ba2V5XSA9IGF0dHJzXG4rICAgICAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcbisgICAgICAgICAgICAgICAgYnJlYWtcbisgICAgcmV0dXJuIHNlZW5cbitcbitcbitkZWYgX3dyaXRlX2lwdjZfc3lzY3RsKG5hbWUsIHZhbHVlKTpcbisgICAgd2l0aCBvcGVuKGZcIi9wcm9jL3N5cy9uZXQvaXB2Ni97bmFtZX1cIiwgXCJ3XCIpIGFzIGY6XG4rICAgICAgICBmLndyaXRlKGZcInt2YWx1ZX1cXG5cIilcbitcbitcbitkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQoKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIkFuIGV4cGlyZWQgcm91dGUgcmVwb3J0cyBSVEFfREVMX1JFQVNPTiA9PSBleHBpcmVkLlwiXCJcIlxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcInJvdXRlL2djX2ludGVydmFsXCIsIDIpXG4rICAgICAgICBpcChcImxpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwibGluayBzZXQgZGV2IGR1bW15MSB1cFwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCItNiByb3V0ZSBhZGQgMjAwMTpkYjg6Mjo6LzY0IGRldiBkdW1teTEgZXhwaXJlcyAyXCIsIG5zPXN0cihucykpXG4rXG4rICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAnZGVscm91dGUtbnRmJywgNjQsICcyMDAxOmRiODoyOjonLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmU9MTUpXG4rICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBcIm5vIFJUTV9ERUxST1VURSBmb3IgdGhlIGV4cGlyZWQgcm91dGVcIilcbisgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCdkZWwtcmVhc29uJyksICdleHBpcmVkJylcbitcbitcbitkZWYgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgbGlmZXRpbWUsIHJpbz1Ob25lLCBwaW89Tm9uZSk6XG4rICAgIFwiXCJcIlRoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuXCJcIlwiXG4rXG4rICAgICMgdHlwZSwgY29kZSwgY2tzdW0sIGhvcCBsaW1pdCwgZmxhZ3MsIHJvdXRlciBsaWZldGltZSxcbisgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lclxuKyAgICByYSA9IHN0cnVjdC5wYWNrKCchQkJIQkJISUknLCAxMzQsIDAsIDAsIDY0LCAwLCBsaWZldGltZSwgMCwgMClcbisgICAgaWYgcmlvIGlzIG5vdCBOb25lOlxuKyAgICAgICAgcHJlZml4LCBwbGVuLCByaW9fbGlmZXRpbWUgPSByaW9cbisgICAgICAgICMgUkZDIDQxOTEgcm91dGUgaW5mb3JtYXRpb24gb3B0aW9uLCAvNjQgcHJlZml4ICg4IGJ5dGVzKVxuKyAgICAgICAgcmEgKz0gc3RydWN0LnBhY2soJyFCQkJCSScsIDI0LCAyLCBwbGVuLCAwLCByaW9fbGlmZXRpbWUpXG4rICAgICAgICByYSArPSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF1cbisgICAgaWYgcGlvIGlzIG5vdCBOb25lOlxuKyAgICAgICAgcHJlZml4LCBwbGVuLCB2YWxpZF9sZnQgPSBwaW9cbisgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcilcbisgICAgICAgIHJhICs9IHN0cnVjdC5wYWNrKCchQkJCQklJSScsIDMsIDQsIHBsZW4sIDB4ODAsIHZhbGlkX2xmdCwgMCwgMClcbisgICAgICAgIHJhICs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpXG4rICAgIHNvY2suc2VuZHRvKHJhLCAoJ2ZmMDI6OjEnLCAwLCAwLCBpZmluZGV4KSlcbitcbitcbitkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6XG4rICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxuKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19SQVcsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpXG4rICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfTVVMVElDQVNUX0hPUFMsIDI1NSlcbisgICAgICAgIGRlZmVyKHNvY2suY2xvc2UpXG4rICAgICAgICByZXR1cm4gc29jaywgc29ja2V0LmlmX25hbWV0b2luZGV4KGlmbmFtZSlcbitcbitcbitkZWYgX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgd2FudCwgKipyYV9vcHRzKTpcbisgICAgXCJcIlwiXG4rICAgIFNlbmRpbmcgZmFpbHMgd2l0aCBFQUREUk5PVEFWQUlMIHdoaWxlIHRoZSByb3V0ZXIncyBsaW5rLWxvY2FsXG4rICAgIGFkZHJlc3MgaXMgc3RpbGwgdGVudGF0aXZlLiBhZGRyY29uZl9kYWRfc3RhcnQoKSBvbmx5IHF1ZXVlc1xuKyAgICBhZGRyY29uZl9kYWRfd29yaygpLCBhbmQgSUZBX0ZfVEVOVEFUSVZFIGlzIGNsZWFyZWQgd2hlbiB0aGF0IHdvcmtcbisgICAgaXRlbSBydW5zLCBzbyByZXRyeSB1bnRpbCBpdCBkb2VzLlxuKyAgICBcIlwiXCJcbitcbisgICAgc2VlbiA9IHt9XG4rICAgIGZvciBfIGluIHJhbmdlKDEwKTpcbisgICAgICAgIHRyeTpcbisgICAgICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAqKnJhX29wdHMpXG4rICAgICAgICBleGNlcHQgT1NFcnJvcjpcbisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMilcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgc2Vlbi51cGRhdGUoX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAnbmV3cm91dGUtbnRmJyxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudCAtIHNldChzZWVuLmtleXMoKSksIGRlYWRsaW5lPTIpKVxuKyAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcbisgICAgICAgICAgICBicmVha1xuKyAgICByZXR1cm4gc2VlblxuK1xuK1xuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgUm91dGVzIHdpdGhkcmF3biBieSBhIHplcm8tbGlmZXRpbWUgUkEgKHJvdXRlciBsaWZldGltZSwgUkZDIDQ4NjFcbisgICAgUElPLCBSRkMgNDE5MSBSSU8pIHJlcG9ydCBSVEFfREVMX1JFQVNPTiA9PSByYS13aXRoZHJhd24uXG4rICAgIFwiXCJcIlxuK1xuKyAgICAjIChydG0tZHN0LWxlbiwgZHN0KTsgdGhlIGRlZmF1bHQgcm91dGUgY2FycmllcyBubyBSVEFfRFNUXG4rICAgIHJvdXRlcyA9IHsoMCwgTm9uZSksICg2NCwgJzIwMDE6ZGI4OjY6OicpLCAoNjQsICcyMDAxOmRiODo1OjonKX1cbitcbisgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjpcbisgICAgICAgIGlwKGZcImxpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfVwiKVxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6XG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwiY29uZi92ZXRoMC9hY2NlcHRfcmFcIiwgMilcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJjb25mL3ZldGgwL2ZvcndhcmRpbmdcIiwgMClcbisgICAgICAgICAgICB0cnk6XG4rICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW5cIiwgNjQpXG4rICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOlxuKyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwibm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GT1wiKVxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XG4rICAgICAgICAgICAgIyBza2lwIHRoZSBEQUQgcHJvYmUgc28gdGhlIHJvdXRlcidzIGxpbmstbG9jYWwgc291cmNlIG9ubHlcbisgICAgICAgICAgICAjIGhhcyB0byB3YWl0IGZvciBhZGRyY29uZl9kYWRfd29yaygpIHRvIGNsZWFyIElGQV9GX1RFTlRBVElWRVxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDEvYWNjZXB0X2RhZFwiLCAwKVxuKyAgICAgICAgaXAoXCJsaW5rIHNldCBkZXYgdmV0aDAgdXBcIiwgbnM9c3RyKG5zX2gpKVxuKyAgICAgICAgaXAoXCJsaW5rIHNldCBkZXYgdmV0aDEgdXBcIiwgbnM9c3RyKG5zX3IpKVxuK1xuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShuc19oKVxuKyAgICAgICAgc29jaywgaWZpbmRleCA9IF9yYV9yb3V0ZXJfc29jayhuc19yLCBcInZldGgxXCIpXG4rXG4rICAgICAgICBzZWVuID0gX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgcm91dGVzLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmV0aW1lPTE4MDAsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvPSgnMjAwMTpkYjg6NTo6JywgNjQsIDYwMCksXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlvPSgnMjAwMTpkYjg6Njo6JywgNjQsIDYwMCkpXG4rICAgICAgICBrc2Z0X2VxKHNldChzZWVuKSwgcm91dGVzLCBcIm5vdCBhbGwgUkEgcm91dGVzIHdlcmUgaW5zdGFsbGVkXCIpXG4rICAgICAgICBpZiBzZXQoc2VlbikgIT0gcm91dGVzOlxuKyAgICAgICAgICAgIHJldHVyblxuK1xuKyAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgMCwgcmlvPSgnMjAwMTpkYjg6NTo6JywgNjQsIDApLFxuKyAgICAgICAgICAgICAgICAgcGlvPSgnMjAwMTpkYjg6Njo6JywgNjQsIDApKVxuKyAgICAgICAgc2VlbiA9IF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJ2RlbHJvdXRlLW50ZicsIHJvdXRlcylcbisgICAgICAgIGZvciBrZXkgaW4gcm91dGVzOlxuKyAgICAgICAgICAgIGF0dHJzID0gc2Vlbi5nZXQoa2V5KVxuKyAgICAgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIGZcIm5vIFJUTV9ERUxST1VURSBmb3Ige2tleX1cIilcbisgICAgICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJ2RlbC1yZWFzb24nKSwgJ3JhLXdpdGhkcmF3bicpXG4rXG4rXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIlxuKyAgICBBIGRlbGV0aW9uIHBhdGggdGhhdCByZWNvcmRzIG5vIGNhdXNlIChoZXJlIGEgdXNlcnNwYWNlIHJlcXVlc3QpXG4rICAgIG11c3Qgbm90IGNhcnJ5IFJUQV9ERUxfUkVBU09OIGF0IGFsbC5cbisgICAgXCJcIlwiXG4rXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXG4rICAgICAgICBpcChcImxpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwibGluayBzZXQgZGV2IGR1bW15MSB1cFwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCItNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwiLTYgcm91dGUgZGVsIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXCIsIG5zPXN0cihucykpXG4rXG4rICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAnZGVscm91dGUtbnRmJywgNjQsICcyMDAxOmRiODoxOjonKVxuKyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXCJubyBSVE1fREVMUk9VVEUgZm9yIDIwMDE6ZGI4OjE6Oi82NFwiKVxuKyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAga3NmdF9ub3RfaW4oJ2RlbC1yZWFzb24nLCBhdHRycyxcbisgICAgICAgICAgICAgICAgICAgICAgICBcInVzZXIgZGVsZXRpb24gbXVzdCBub3QgY2FycnkgZGVsLXJlYXNvblwiKVxuK1xuK1xuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQsXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXG4gICAgIGtzZnRfZXhpdCgpXG4gXG4gaWYgX19uYW1lX18gPT0gXCJfX21haW5fX1wiOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDE6MjA6NTMuOTI2ODEwNzQ4WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NjM1ODUwMTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IElQdjYgUm91dGUgRGVsZXRpb24gUmVhc29uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggc2VyaWVzIHRoYXQgaW50cm9kdWNlcyBhIGBkZWxfcmVhc29uYCBuZXRsaW5rIGF0dHJpYnV0ZSBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLiBUaGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbj9cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIHRoYXQgS01TQU4gY291bGQgY2F0Y2guIFRoZSBwYXRjaCdzIGNvcmUgaW50cm9kdWNlcyBhbiBgUlRBX0RFTF9SRUFTT05gIGF0dHJpYnV0ZSBhbmQgYW4gYXNzb2NpYXRlZCBgZW51bSBydF9kZWxfcmVhc29uYC4gVGhpcyBgZGVsX3JlYXNvbmAgaXMgdGhlbiBwbHVtYmVkIHRocm91Z2ggdmFyaW91cyBmdW5jdGlvbnMgaW4gdGhlIElQdjYgcm91dGluZyBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIHBhc3NlcyBgZGVsX3JlYXNvbmAgdmlhIGZ1bmN0aW9uIGFyZ3VtZW50cyAoZS5nLiwgaW4gYHJ0Nl9maWxsX25vZGVgLCBgZmliNl9kZWxgLCBgaXA2X2RlbF9ydF9yZWFzb25gKS5cblxuVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCBgZGVsX3JlYXNvbmAgaXMgKnBhc3NlZCBieSB2YWx1ZSogYW5kIGlzIGFsd2F5cyBhbiAqZXhwbGljaXRseSBhc3NpZ25lZCBlbnVtIHZhbHVlKiAobGlrZSBgUlRfREVMX1JFQVNPTl9VTlNQRUNgLCBgUlRfREVMX1JFQVNPTl9FWFBJUkVEYCwgb3IgYFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOYCkuIEl0IGlzICpub3QqIHJlYWQgZnJvbSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuIFdlIGFyZSBhbHNvIG5vdCBpbnRyb2R1Y2luZyBhbnkgbmV3IHN0cnVjdHMgdGhhdCB3b3VsZCBiZSBzZW50IHRvIHVzZXIgc3BhY2UuIEl0IGlzIGRpcmVjdGx5IHBsYWNlZCBpbnRvIHRoZSBuZXRsaW5rIGJ1ZmZlciB1c2luZyBgbmxhX3B1dF91MzJgLlxuXG5JJ20gY2hlY2tpbmcgaWYgd2UgY2FuIGdldCBhIHNuZWFraWx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdG8gdXNlciBzcGFjZSwgYnV0IHRoZXJlIGlzbid0IG9uZS4gVGhlIG5ldGxpbmsgYXR0cmlidXRlIGlzIGNvbnN0cnVjdGVkIHVzaW5nIGBubGFfcHV0X3UzMmAsIHdoaWNoIGhhbmRsZXMgdGhlIG1lbW9yeSBhbmQgaXMgY29tcGxldGVseSBzYWZlLiBUaGUgYGRlbF9yZWFzb25gIHBhcmFtZXRlciBpcyBwYXNzZWQgYnkgdmFsdWUgYW5kIGlzIHNldCB0byBhIGNvbnN0YW50LlxuXG5JJ20gYWxzbyBkb3VibGUtY2hlY2tpbmcgdGhlIGNhbGxlcnMgdG8gZW5zdXJlIGFsbCBmdW5jdGlvbiBjYWxscyB1c2UgZXhwbGljaXQgZW51bSB2YWx1ZXMuIEkndmUgc2Nhbm5lZCB0aGUgdmFyaW91cyBsb2NhdGlvbnMgaW4gdGhlIGNvZGUgKGUuZy4sIGBfX2lwNl9kZWxfcnRfc2libGluZ3NgLCBgZmliNl9kZWxgLCBldGMuKSBhbmQgY29uZmlybWVkIHRoYXQgY29uc3RhbnQgZW51bSB2YWx1ZXMgYXJlIGJlaW5nIHBhc3NlZCBldmVyeXdoZXJlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnZvbHZlZC5cblxuR2l2ZW4gdGhlIGV4cGxpY2l0IG5hdHVyZSBvZiB0aGUgdmFsdWVzIGFuZCB0aGUgdXNlIG9mIHN0YW5kYXJkLCBzYWZlIG5ldGxpbmsgZnVuY3Rpb25zLCBJIGNvbmNsdWRlIHRoYXQgdGhlcmUgaXMgKm5vKiByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gaWRlbnRpZnkgYW55IGlzc3Vlcy4gVGhlcmVmb3JlLCBubyBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBuZWVkZWQgZm9yIHRoaXMgcGF0Y2guIEkgY2FuIGNvbmZpZGVudGx5IHNldCBgTmVlZHNLTVNBTmAgdG8gYGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNTQsIk91dHB1dFRva2VucyI6MjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAxOjIxOjEwLjU2MjY2NDIxMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIHRvIHJlcG9ydCB0aGUgcmVhc29uIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9ucy4gVGhlIGRlbGV0aW9uIHJlYXNvbiBpcyBwYXNzZWQgdGhyb3VnaCB0aGUgcm91dGluZyBzdWJzeXN0ZW0gYXMgYW4gZXhwbGljaXQgYGVudW0gcnRfZGVsX3JlYXNvbmAgdmFsdWUgKGUuZy4sIGBSVF9ERUxfUkVBU09OX1VOU1BFQ2AsIGBSVF9ERUxfUkVBU09OX0VYUElSRURgLCBgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV05gKS4gVGhpcyB2YWx1ZSBpcyB0aGVuIHNlcmlhbGl6ZWQgaW50byB0aGUgbmV0bGluayBtZXNzYWdlIHVzaW5nIGBubGFfcHV0X3UzMigpYC4gXFxuXFxuU2luY2UgdGhlIGBkZWxfcmVhc29uYCBpcyBwYXNzZWQgYnkgdmFsdWUgYXMgYW4gZXhwbGljaXQgY29uc3RhbnQgaW4gYWxsIG1vZGlmaWVkIGNhbGwgc2l0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nIGJ5dGVzLiBUaGUgbmV0bGluayBhdHRyaWJ1dGUgY29uc3RydWN0aW9uIHZpYSBgbmxhX3B1dF91MzIoKWAgc2FmZWx5IGhhbmRsZXMgdGhlIHNlcmlhbGl6YXRpb24gd2l0aG91dCBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIHRvIHJlcG9ydCB0aGUgcmVhc29uIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9ucy4gVGhlIGRlbGV0aW9uIHJlYXNvbiBpcyBwYXNzZWQgdGhyb3VnaCB0aGUgcm91dGluZyBzdWJzeXN0ZW0gYXMgYW4gZXhwbGljaXQgYGVudW0gcnRfZGVsX3JlYXNvbmAgdmFsdWUgKGUuZy4sIGBSVF9ERUxfUkVBU09OX1VOU1BFQ2AsIGBSVF9ERUxfUkVBU09OX0VYUElSRURgLCBgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV05gKS4gVGhpcyB2YWx1ZSBpcyB0aGVuIHNlcmlhbGl6ZWQgaW50byB0aGUgbmV0bGluayBtZXNzYWdlIHVzaW5nIGBubGFfcHV0X3UzMigpYC4gXFxuXFxuU2luY2UgdGhlIGBkZWxfcmVhc29uYCBpcyBwYXNzZWQgYnkgdmFsdWUgYXMgYW4gZXhwbGljaXQgY29uc3RhbnQgaW4gYWxsIG1vZGlmaWVkIGNhbGwgc2l0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nIGJ5dGVzLiBUaGUgbmV0bGluayBhdHRyaWJ1dGUgY29uc3RydWN0aW9uIHZpYSBgbmxhX3B1dF91MzIoKWAgc2FmZWx5IGhhbmRsZXMgdGhlIHNlcmlhbGl6YXRpb24gd2l0aG91dCBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowknxgk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-08 01:04:46 +0000 UTC FinishedAt: 2026-08-08 01:21:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ca10634ebcca850dec2f1507ad5bfe70b82a9c00", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTER_PREF", "IPV6_ROUTE_INFO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ca10634ebcca850dec2f1507ad5bfe70b82a9c00", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTER_PREF", "IPV6_ROUTE_INFO" ], "series_id": "fd08948c-592a-4cf1-9d31-0d95f8b47d19" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip6_del_rt_reason", "inet6_rt_del_notify", "fib6_del" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA4IDAxOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURVJfUFJFRiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFX0lORk8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDssCiAgICAmIzM0O2ZpYjZfZGVsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIHRvIHJlcG9ydCB0aGUgcmVhc29uIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9ucy4gVGhlIGRlbGV0aW9uIHJlYXNvbiBpcyBwYXNzZWQgdGhyb3VnaCB0aGUgcm91dGluZyBzdWJzeXN0ZW0gYXMgYW4gZXhwbGljaXQgYGVudW0gcnRfZGVsX3JlYXNvbmAgdmFsdWUgKGUuZy4sIGBSVF9ERUxfUkVBU09OX1VOU1BFQ2AsIGBSVF9ERUxfUkVBU09OX0VYUElSRURgLCBgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV05gKS4gVGhpcyB2YWx1ZSBpcyB0aGVuIHNlcmlhbGl6ZWQgaW50byB0aGUgbmV0bGluayBtZXNzYWdlIHVzaW5nIGBubGFfcHV0X3UzMigpYC4gXG5cblNpbmNlIHRoZSBgZGVsX3JlYXNvbmAgaXMgcGFzc2VkIGJ5IHZhbHVlIGFzIGFuIGV4cGxpY2l0IGNvbnN0YW50IGluIGFsbCBtb2RpZmllZCBjYWxsIHNpdGVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSBzdGFjaywgaGVhcCwgb3IgcGFkZGluZyBieXRlcy4gVGhlIG5ldGxpbmsgYXR0cmlidXRlIGNvbnN0cnVjdGlvbiB2aWEgYG5sYV9wdXRfdTMyKClgIHNhZmVseSBoYW5kbGVzIHRoZSBzZXJpYWxpemF0aW9uIHdpdGhvdXQgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAobGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSBpbiB0aGlzIGNvZGUsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIFJUQV9ERUxfUkVBU09OIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMsIG1vZGlmeWluZyBjb3JlIElQdjYgcm91dGluZyBhbmQgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSByb3V0ZSBleHBpcmF0aW9uLCByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMsIGFuZCBtYW51YWwgcm91dGUgZGVsZXRpb24sIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAxOjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2I0NDViZDAyZjRmODg0OTdlYmRhZDkxODc5OGI4YzgzZDE5NmE5MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMDE6MjA6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuaW5kZXggMzMxOTVkYjk2NzQ2Yy4uMjUzMDM3ZWE1MTc2YSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuQEAgLTc4LDYgJiM0Mzs3OCwyNyBAQCBkZWZpbml0aW9uczpcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBydGEtdXNlZFxuICAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgLVxuJiM0MzsgICAgbmFtZTogZGVsLXJlYXNvblxuJiM0MzsgICAgdHlwZTogZW51bVxuJiM0MzsgICAgbmFtZS1wcmVmaXg6IHJ0LWRlbC1yZWFzb24tXG4mIzQzOyAgICBlbnVtLW5hbWU6IHJ0LWRlbC1yZWFzb25cbiYjNDM7ICAgIGRvYzogfFxuJiM0MzsgICAgICBXaHkgdGhlIGtlcm5lbCBkZWxldGVkIGEgcm91dGUuIE5ldyBjYXVzZXMgbWF5IGJlIGFwcGVuZGVkLiBUaGVcbiYjNDM7ICAgICAgdmFsdWUgc3BhY2UgaXMgZmFtaWx5LWFnbm9zdGljLCBhIHZhbHVlIGlzIG5ldmVyIHJlaW50ZXJwcmV0ZWRcbiYjNDM7ICAgICAgcGVyIGFkZHJlc3MgZmFtaWx5LlxuJiM0MzsgICAgZW50cmllczpcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHVuc3BlY1xuJiM0MzsgICAgICAgIGRvYzogVGhlIGRlbGV0aW9uIHBhdGggZG9lcyBub3QgcmVjb3JkIGEgY2F1c2UuXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBleHBpcmVkXG4mIzQzOyAgICAgICAgZG9jOiBUaGUgUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCBhbmQgdGhlIHJvdXRlIHdhcyBnYXJiYWdlXG4mIzQzOyAgICAgICAgICBjb2xsZWN0ZWQuXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiByYS13aXRoZHJhd25cbiYjNDM7ICAgICAgICBkb2M6IEEgUm91dGVyIEFkdmVydGlzZW1lbnQgd2l0aGRyZXcgdGhlIHJvdXRlIHdpdGggYSB6ZXJvXG4mIzQzOyAgICAgICAgICBsaWZldGltZS5cbiBcbiBhdHRyaWJ1dGUtc2V0czpcbiAgIC1cbkBAIC0xODUsNiAmIzQzOzIwNiwxOCBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgYnl0ZS1vcmRlcjogYmlnLWVuZGlhblxuICAgICAgICAgZGlzcGxheS1oaW50OiBoZXhcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGRlbC1yZWFzb25cbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBlbnVtOiBkZWwtcmVhc29uXG4mIzQzOyAgICAgICAgZG9jOiB8XG4mIzQzOyAgICAgICAgICBFbWl0dGVkIG9ubHkgb24gUlRNX0RFTFJPVVRFIG5vdGlmaWNhdGlvbnMsIGFuZCBvbmx5IHdoZW4gdGhlXG4mIzQzOyAgICAgICAgICBkZWxldGlvbiBwYXRoIHJlY29yZHMgYSBjYXVzZS4gQW4gYWJzZW50IGF0dHJpYnV0ZSBtZWFuc1xuJiM0MzsgICAgICAgICAgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdFxuJiM0MzsgICAgICAgICAgcmVjb3JkIGl0cyBjYXVzZSwgY29uc3VtZXJzIG11c3QgdHJlYXQgYWJzZW50IGFuZCB1bnNwZWNcbiYjNDM7ICAgICAgICAgIGlkZW50aWNhbGx5LiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhXG4mIzQzOyAgICAgICAgICBjYXVzZS4gVGhlIGF0dHJpYnV0ZSBpcyBub3RpZmljYXRpb24tb25seSwgdGhlIGtlcm5lbCByZWplY3RzXG4mIzQzOyAgICAgICAgICBpdCBpbiByZXF1ZXN0cy5cbiAgIC1cbiAgICAgbmFtZTogbWV0cmljc1xuICAgICBuYW1lLXByZWZpeDogcnRheC1cbkBAIC0yOTksNiAmIzQzOzMzMiw3IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSBkcG9ydFxuICAgICAgICAgICAgIC0gbmgtaWRcbiAgICAgICAgICAgICAtIGZsb3dsYWJlbFxuJiM0MzsgICAgICAgICAgICAtIGRlbC1yZWFzb25cbiAgICAgICBkdW1wOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI2XG5AQCAtMzEzLDcgJiM0MzszNDcsMzUgQEAgb3BlcmF0aW9uczpcbiAgICAgICBkbzpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIHZhbHVlOiAyNFxuLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzXG4mIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOiBcdTAwMjZyb3V0ZS1yZXEtYXR0cnNcbiYjNDM7ICAgICAgICAgICAgLSBkc3RcbiYjNDM7ICAgICAgICAgICAgLSBzcmNcbiYjNDM7ICAgICAgICAgICAgLSBpaWZcbiYjNDM7ICAgICAgICAgICAgLSBvaWZcbiYjNDM7ICAgICAgICAgICAgLSBnYXRld2F5XG4mIzQzOyAgICAgICAgICAgIC0gcHJpb3JpdHlcbiYjNDM7ICAgICAgICAgICAgLSBwcmVmc3JjXG4mIzQzOyAgICAgICAgICAgIC0gbWV0cmljc1xuJiM0MzsgICAgICAgICAgICAtIG11bHRpcGF0aFxuJiM0MzsgICAgICAgICAgICAtIGZsb3dcbiYjNDM7ICAgICAgICAgICAgLSBjYWNoZWluZm9cbiYjNDM7ICAgICAgICAgICAgLSB0YWJsZVxuJiM0MzsgICAgICAgICAgICAtIG1hcmtcbiYjNDM7ICAgICAgICAgICAgLSBtZmMtc3RhdHNcbiYjNDM7ICAgICAgICAgICAgLSB2aWFcbiYjNDM7ICAgICAgICAgICAgLSBuZXdkc3RcbiYjNDM7ICAgICAgICAgICAgLSBwcmVmXG4mIzQzOyAgICAgICAgICAgIC0gZW5jYXAtdHlwZVxuJiM0MzsgICAgICAgICAgICAtIGVuY2FwXG4mIzQzOyAgICAgICAgICAgIC0gZXhwaXJlc1xuJiM0MzsgICAgICAgICAgICAtIHBhZFxuJiM0MzsgICAgICAgICAgICAtIHVpZFxuJiM0MzsgICAgICAgICAgICAtIHR0bC1wcm9wYWdhdGVcbiYjNDM7ICAgICAgICAgICAgLSBpcC1wcm90b1xuJiM0MzsgICAgICAgICAgICAtIHNwb3J0XG4mIzQzOyAgICAgICAgICAgIC0gZHBvcnRcbiYjNDM7ICAgICAgICAgICAgLSBuaC1pZFxuJiM0MzsgICAgICAgICAgICAtIGZsb3dsYWJlbFxuICAgICAtXG4gICAgICAgbmFtZTogZGVscm91dGVcbiAgICAgICBkb2M6IERlbGV0ZSBhbiBleGlzdGluZyByb3V0ZVxuQEAgLTMyMSw0ICYjNDM7MzgzLDIzIEBAIG9wZXJhdGlvbnM6XG4gICAgICAgZG86XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjVcbi0gICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRyc1xuJiM0MzsgICAgICAgICAgYXR0cmlidXRlczogKnJvdXRlLXJlcS1hdHRyc1xuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBuZXdyb3V0ZS1udGZcbiYjNDM7ICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBjcmVhdGVkIHJvdXRlLlxuJiM0MzsgICAgICB2YWx1ZTogMjRcbiYjNDM7ICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBkZWxyb3V0ZS1udGZcbiYjNDM7ICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBkZWxldGVkIHJvdXRlLlxuJiM0MzsgICAgICB2YWx1ZTogMjVcbiYjNDM7ICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxuJiM0MztcbiYjNDM7bWNhc3QtZ3JvdXBzOlxuJiM0MzsgIGxpc3Q6XG4mIzQzOyAgICAtXG4mIzQzOyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2NC1yb3V0ZVxuJiM0MzsgICAgICB2YWx1ZTogN1xuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBydG5sZ3JwLWlwdjYtcm91dGVcbiYjNDM7ICAgICAgdmFsdWU6IDExXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG5pbmRleCA5Y2QyN2UxYjliNjkyLi4yMzIyODliNDM5YzNjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcbkBAIC00NjgsNyAmIzQzOzQ2OCw4IEBAIHZvaWQgZmliNl9jbGVhbl9hbGxfc2tpcF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LFxuIFxuIGludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdCAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyk7XG4mIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0ICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4gXG4gc3RhdGljIGlubGluZVxuIHZvaWQgcnQ2X2dldF9wcmVmc3JjKGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQsIHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbkBAIC01MzIsNiAmIzQzOzUzMyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuICNlbmRpZlxuIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuIFx0XHQgICAgIHVuc2lnbmVkIGludCBmbGFncyk7XG4mIzQzO3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4gXG4gdm9pZCBmaWI2X2FnZV9leGNlcHRpb25zKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9nY19hcmdzICpnY19hcmdzLFxuIFx0XHRcdCB1bnNpZ25lZCBsb25nIG5vdyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggMDlmZmUwZjEzY2U3NS4uY2MwNDU3MDU4NjJkZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTEyNiw2ICYjNDM7MTI2LDggQEAgaW50IGlwdjZfcm91dGVfaW9jdGwoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgY21kLFxuIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXG4gXHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBpbnQgaXA2X2luc19ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSk7XG4mIzQzO2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcbiYjNDM7XHRcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSk7XG4gI2Vsc2VcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbmluZGV4IDI3MjY1ZmQzMWU1ZmMuLjM5ODhiNTFkYjUzOWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuQEAgLTM5OSw2ICYjNDM7Mzk5LDcgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcbiBcdFJUQV9EUE9SVCxcbiBcdFJUQV9OSF9JRCxcbiBcdFJUQV9GTE9XTEFCRUwsXG4mIzQzO1x0UlRBX0RFTF9SRUFTT04sXG4gXHRfX1JUQV9NQVhcbiB9O1xuIFxuQEAgLTQwNyw2ICYjNDM7NDA4LDMwIEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XG4gI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgJiM0MzsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBydG1zZykpKSlcbiAjZGVmaW5lIFJUTV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IHJ0bXNnKSlcbiBcbiYjNDM7LyogUlRBX0RFTF9SRUFTT046IHdoeSB0aGUga2VybmVsIGRlbGV0ZWQgdGhlIHJvdXRlLiB1MzIuXG4mIzQzOyAqIEVtaXR0ZWQgb25seSBvbiBSVE1fREVMUk9VVEUgbm90aWZpY2F0aW9ucywgYW5kIG9ubHkgd2hlbiB0aGUgZGVsZXRpb25cbiYjNDM7ICogcGF0aCByZWNvcmRzIGEgY2F1c2UuIEFic2VuY2UgbWVhbnMgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhXG4mIzQzOyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3RcbiYjNDM7ICogdHJlYXQgXCYjMzQ7YWJzZW50XCYjMzQ7IGFuZCBcJiMzNDt1bnNwZWNcJiMzNDsgaWRlbnRpY2FsbHkuIE5ldyBjYXVzZXMgbWF5IGJlIGFwcGVuZGVkLlxuJiM0MzsgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgYXR0cmlidXRlIGlzIG5vdGlmaWNhdGlvbi1vbmx5OiB0aGUga2VybmVsIHJlamVjdHMgaXQgaW5cbiYjNDM7ICogcmVxdWVzdHMsIHNvIGEgbm90aWZpY2F0aW9uIG11c3Qgbm90IGJlIGVjaG9lZCBiYWNrIHZlcmJhdGltLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgdmFsdWUgc3BhY2UgaXMgZmFtaWx5LWFnbm9zdGljOiBhIHZhbHVlIG11c3QgbmV2ZXIgYmVcbiYjNDM7ICogcmVpbnRlcnByZXRlZCBwZXIgYWRkcmVzcyBmYW1pbHkuIEEgY2F1c2UgdGhhdCBvbmx5IG9uZSBmYW1pbHkgY2FuXG4mIzQzOyAqIHByb2R1Y2Ugc3RpbGwgZ2V0cyBpdHMgb3duIHZhbHVlIHJhdGhlciB0aGFuIHJldXNpbmcgYW5vdGhlclxuJiM0MzsgKiBmYW1pbHkmIzM5O3MuXG4mIzQzOyAqL1xuJiM0MztlbnVtIHJ0X2RlbF9yZWFzb24ge1xuJiM0MztcdFJUX0RFTF9SRUFTT05fVU5TUEVDLFx0XHQvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi9cbiYjNDM7XHRSVF9ERUxfUkVBU09OX0VYUElSRUQsXHRcdC8qIFJURl9FWFBJUkVTIGxpZmV0aW1lIHJhbiBvdXQgKEdDKSAqL1xuJiM0MztcdFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOLFx0LyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqL1xuJiM0MztcdF9fUlRfREVMX1JFQVNPTl9NQVhcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUlRfREVMX1JFQVNPTl9NQVggKF9fUlRfREVMX1JFQVNPTl9NQVggLSAxKVxuJiM0MztcbiAvKiBSVE1fTVVMVElQQVRIIC0tLSBhcnJheSBvZiBzdHJ1Y3QgcnRuZXh0aG9wLlxuICAqXG4gICogXCYjMzQ7c3RydWN0IHJ0bmV4dGhvcFwmIzM0OyBkZXNjcmliZXMgYWxsIG5lY2Vzc2FyeSBuZXh0aG9wIGluZm9ybWF0aW9uLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5pbmRleCBmNmZhMjcxNWI0NTBiLi45ZDg5YmU3ZTA1NDRiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xuQEAgLTI4NzQsNyAmIzQzOzI4NzQsOCBAQCB2b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcbiBcdFx0aWYgKHJ0KSB7XG4gXHRcdFx0LyogQXV0b2NvbmYgcHJlZml4IHJvdXRlICovXG4gXHRcdFx0aWYgKHZhbGlkX2xmdCA9PSAwKSB7XG4tXHRcdFx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbiYjNDM7XHRcdFx0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LFxuJiM0MztcdFx0XHRcdFx0XHQgIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbiBcdFx0XHRcdHJ0ID0gTlVMTDtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuY1xuaW5kZXggZTlmYzY5MmQ0ZjNiMi4uM2UzODJiYTE1NzNlMyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X2ZpYi5jXG5AQCAtMTk2Nyw3ICYjNDM7MTk2Nyw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcbiB9XG4gXG4gc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbi1cdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdCAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBmaWI2X2luZm8gKmxlYWYsICpyZXBsYWNlX3J0ID0gTlVMTDtcbiBcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcbkBAIC0yMDU2LDEzICYjNDM7MjA1NywxNCBAQCBzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxuIFx0XHRcdGNhbGxfZmliNl9lbnRyeV9ub3RpZmllcnNfcmVwbGFjZShuZXQsIHJlcGxhY2VfcnQpO1xuIFx0fVxuIFx0aWYgKCFpbmZvLVx1MDAzZXNraXBfbm90aWZ5KVxuLVx0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCk7XG4mIzQzO1x0XHRpbmV0Nl9ydF9kZWxfbm90aWZ5KHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcbiBcdGZpYjZfaW5mb19yZWxlYXNlKHJ0KTtcbiB9XG4gXG4gLyogTmVlZCB0byBvd24gdGFibGUtXHUwMDNldGI2X2xvY2sgKi9cbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuJiM0MztpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuJiM0MztcdCAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwO1xuQEAgLTIwOTEsNyAmIzQzOzIwOTMsNyBAQCBpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFx0XHRpZiAocnQgPT0gY3VyKSB7XG4gXHRcdFx0aWYgKGZpYjZfcmVxdWlyZXNfc3JjKGN1cikpXG4gXHRcdFx0XHRmaWI2X3JvdXRlc19yZXF1aXJlX3NyY19kZWMoaW5mby1cdTAwM2VubF9uZXQpO1xuLVx0XHRcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvKTtcbiYjNDM7XHRcdFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHRcdHJ0cF9uZXh0ID0gXHUwMDI2Y3VyLVx1MDAzZWZpYjZfbmV4dDtcbkBAIC0yMjUzLDcgJiM0MzsyMjU1LDcgQEAgc3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxuIFx0XHRyZXMgPSBjLVx1MDAzZWZ1bmMocnQsIGMtXHUwMDNlYXJnKTtcbiBcdFx0aWYgKHJlcyA9PSAtMSkge1xuIFx0XHRcdHctXHUwMDNlbGVhZiA9IHJ0O1xuLVx0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRcdFx0cmVzID0gZmliNl9kZWwocnQsIFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRpZiAocmVzKSB7XG4gI2lmIFJUNl9ERUJVRyBcdTAwM2U9IDJcbiBcdFx0XHRcdHByX2RlYnVnKFwmIzM0OyVzOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcXG5cJiMzNDssXG5AQCAtMjQwMSw3ICYjNDM7MjQwMyw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LFxuIFxuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgbiwgXHUwMDI2dGI2LVx1MDAzZXRiNl9nY19obGlzdCwgZ2NfbGluaylcbiBcdFx0aWYgKGZpYjZfYWdlKHJ0LCBnY19hcmdzKSA9PSAtMSlcbi1cdFx0XHRmaWI2X2RlbChydCwgXHUwMDI2aW5mbyk7XG4mIzQzO1x0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX0VYUElSRUQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcbmluZGV4IGZlMzZiM2Y1MTI4NTAuLjExMTFjNGViYzYxZDkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZGlzYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZGlzYy5jXG5AQCAtMTM2MSw3ICYjNDM7MTM2MSw5IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRkZWZydHJfdXNyX21ldHJpYyA9IGluNl9kZXYtXHUwMDNlY25mLnJhX2RlZnJ0cl9tZXRyaWM7XG4gXHQvKiBkZWxldGUgdGhlIHJvdXRlIGlmIGxpZmV0aW1lIGlzIDAgb3IgaWYgbWV0cmljIG5lZWRzIGNoYW5nZSAqL1xuIFx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAobGlmZXRpbWUgPT0gMCB8fCBydC1cdTAwM2VmaWI2X21ldHJpYyAhPSBkZWZydHJfdXNyX21ldHJpYykpIHtcbi1cdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4mIzQzO1x0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LFxuJiM0MztcdFx0XHRcdCAgbGlmZXRpbWUgPT0gMCA/IFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOIDpcbiYjNDM7XHRcdFx0XHRcdFx0ICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdHJ0ID0gTlVMTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggZmM0MmQ2N2U1ODIyNi4uMTcwNDM1OWQzOTYwZCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC0xMTEsNyAmIzQzOzExMSw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuJiM0MztcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4gc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcbkBAIC0xMDIwLDcgJiM0MzsxMDIwLDcgQEAgaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcbiBcdFx0XHRcdFx0Z3dhZGRyLCBkZXYpO1xuIFxuIFx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAhbGlmZXRpbWUpIHtcbi1cdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4mIzQzO1x0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG4gXHRcdHJ0ID0gTlVMTDtcbiBcdH1cbiBcbkBAIC0zOTczLDcgJiM0MzszOTczLDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiYjNDM7c3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuJiM0MztcdFx0XHRlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTtcbkBAIC0zOTg2LDcgJiM0MzszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFxuIFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbiYjNDM7XHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gXG4gb3V0OlxuQEAgLTQwMDEsNyAmIzQzOzQwMDIsMTUgQEAgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcbiBcdFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnlcbiBcdH07XG4gXG4tXHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuJiM0MztcdFx0ICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmxfaW5mbyBpbmZvID0geyAubmxfbmV0ID0gbmV0IH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmluZm8sIGRlbF9yZWFzb24pO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXG5AQCAtNDAyOCw3ICYjNDM7NDAzNyw4IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcbiBcdFx0XHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsXG4gXHRcdFx0XHRcdCAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLFxuLVx0XHRcdFx0XHQgIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIDApIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdFx0XHQgIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIDAsXG4mIzQzO1x0XHRcdFx0XHQgIFJUX0RFTF9SRUFTT05fVU5TUEVDKSBcdTAwM2MgMCkge1xuIFx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0XHRza2IgPSBOVUxMO1xuIFx0XHRcdH0gZWxzZVxuQEAgLTQwNjQsMTMgJiM0Mzs0MDc0LDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZyxcbiBcdFx0XHRcdFx0IFx1MDAyNnJ0LVx1MDAzZWZpYjZfc2libGluZ3MsXG4gXHRcdFx0XHRcdCBmaWI2X3NpYmxpbmdzKSB7XG4tXHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbyk7XG4mIzQzO1x0XHRcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7XG4mIzQzO1x0ZXJyID0gZmliNl9kZWwocnQsIGluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBvdXRfdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGFibGUtXHUwMDNldGI2X2xvY2spO1xuIG91dF9wdXQ6XG5AQCAtNDE5Niw3ICYjNDM7NDIwNiw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcbiBcdFx0XHRcdGlmICghZmliNl9pbmZvX2hvbGRfc2FmZShydCkpXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdFx0ZXJyID0gIF9faXA2X2RlbF9ydChydCwgXHUwMDI2Y2ZnLVx1MDAzZWZjX25saW5mbyk7XG4mIzQzO1x0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvLFxuJiM0MztcdFx0XHRcdFx0XHQgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGNmZy1cdTAwM2VmY19uaF9pZClcbkBAIC00MjE1LDcgJiM0Mzs0MjI2LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFxuIFx0XHRcdC8qIGlmIGdhdGV3YXkgd2FzIHNwZWNpZmllZCBvbmx5IGRlbGV0ZSB0aGUgb25lIGhvcCAqL1xuIFx0XHRcdGlmIChjZmctXHUwMDNlZmNfZmxhZ3MgXHUwMDI2IFJURl9HQVRFV0FZKVxuLVx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnRfc2libGluZ3MocnQsIGNmZyk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtNTczOSw2ICYjNDM7NTc1MSw3IEBAIHN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxuIFx0ICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpXG4gXHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoVENQX0NBX05BTUVfTUFYKSAvKiBSVEFYX0NDX0FMR08gKi9cbiBcdCAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZSgxKSAvKiBSVEFfUFJFRiAqL1xuJiM0MztcdCAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfREVMX1JFQVNPTiAqL1xuIFx0ICAgICAgICYjNDM7IG5leHRob3BfbGVuO1xuIH1cbiBcbkBAIC01Nzc1LDcgJiM0Mzs1Nzg4LDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbiBcdFx0XHQgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYyxcbiBcdFx0XHQgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4tXHRcdFx0IHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7XHRcdFx0IHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IHJ0Nl9pbmZvICpydDYgPSBkc3RfcnQ2X2luZm8oZHN0KTtcbiBcdHN0cnVjdCBydDZrZXkgKnJ0Nl9kc3QsICpydDZfc3JjO1xuQEAgLTU5NTQsNiAmIzQzOzU5NjcsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCBkc3QsIDAsIGV4cGlyZXMsIGRzdCA/IGRzdC1cdTAwM2VlcnJvciA6IDApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiYjNDM7XHRpZiAoZGVsX3JlYXNvbiAhPSBSVF9ERUxfUkVBU09OX1VOU1BFQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbmxhX3B1dF91MzIoc2tiLCBSVEFfREVMX1JFQVNPTiwgZGVsX3JlYXNvbikpXG4mIzQzO1x0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjNDM7XG4gXHRpZiAobmxhX3B1dF91OChza2IsIFJUQV9QUkVGLCBJUFY2X0VYVFJBQ1RfUFJFRihydDZfZmxhZ3MpKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG5AQCAtNjA1NSw3ICYjNDM7NjA3Miw4IEBAIHN0YXRpYyBpbnQgcnQ2X25oX2R1bXBfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9uaCAqbmgsIHZvaWQgKmFyZylcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNnJ0Nl9leC1cdTAwM2VydDZpLVx1MDAzZWRzdCwgTlVMTCwgTlVMTCwgMCxcbiBcdFx0XHRcdFx0ICAgIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoZHVtcC1cdTAwM2VjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICAgIGR1bXAtXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgdy1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRcdFx0XHQgICAgZHVtcC1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCB3LVx1MDAzZWZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC02MTAzLDcgJiM0Mzs2MTIxLDggQEAgaW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApXG4gXHRcdFx0aWYgKHJ0Nl9maWxsX25vZGUobmV0LCBhcmctXHUwMDNlc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCxcbiBcdFx0XHRcdFx0ICAwLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgTkVUTElOS19DQihhcmctXHUwMDNlY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgYXJnLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzKSkge1xuJiM0MztcdFx0XHRcdFx0ICBhcmctXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHQgIFJUX0RFTF9SRUFTT05fVU5TUEVDKSkge1xuIFx0XHRcdFx0cmV0dXJuIDA7XG4gXHRcdFx0fVxuIFx0XHRcdGNvdW50JiM0MzsmIzQzOztcbkBAIC02MzM2LDEyICYjNDM7NjM1NSwxNCBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLFxuIFx0XHRcdFx0XHQgICAgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4mIzQzO1x0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBkc3QsIFx1MDAyNmZsNi5kYWRkcixcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4mIzQzO1x0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRlcnIgPSAtRU5FVFVOUkVBQ0g7XG4gXHR9XG5AQCAtNjM1Nyw4ICYjNDM7NjM3OCw5IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tXHRcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcbiYjNDM7c3RhdGljIHZvaWQgX19pbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsXG4mIzQzO1x0XHRcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbkBAIC02Mzc3LDcgJiM0Mzs2Mzk5LDcgQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXG4tXHRcdFx0ICAgIGV2ZW50LCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MpO1xuJiM0MztcdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncywgZGVsX3JlYXNvbik7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBuZWVkZWQgc3BhY2UgZ3JldyB1bmRlciB1cy4gKi9cbkBAIC02Mzk4LDYgJiM0Mzs2NDIwLDE4IEBAIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuIFx0cnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X1JPVVRFLCBlcnIpO1xuIH1cbiBcbiYjNDM7dm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0XHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRfX2luZXQ2X3J0X25vdGlmeShldmVudCwgcnQsIGluZm8sIG5sbV9mbGFncywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuJiM0MztcdFx0XHQgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4mIzQzO3tcbiYjNDM7XHRfX2luZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwLCBkZWxfcmVhc29uKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHRcdCAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiB7XG5AQCAtNjQxMCw3ICYjNDM7NjQ0NCw4IEBAIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgUlRNX05FV1JPVVRFLCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFKTtcbiYjNDM7XHRcdFx0ICAgIFJUTV9ORVdST1VURSwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgTkxNX0ZfUkVQTEFDRSxcbiYjNDM7XHRcdFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbkBAIC02NDYzLDcgJiM0Mzs2NDk4LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuIFx0fVxuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsXG4tXHRcdFx0ICAgIDAsIDApO1xuJiM0MztcdFx0XHQgICAgMCwgMCwgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqL1xuIFx0XHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG5pbmRleCBlNThiZGJkYzU4ZWVhLi4zNDkzNTg4NmI2YWRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuQEAgLTE3LDcgJiM0MzsxNyw3IEBAIGZyb20gLnV0aWxzIGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgZmRfcmVhZF90aW1lb3V0LCBjbWQsIGJrZywgZGVmZXIsIFxcXG4gICAgIHdhaXRfZmlsZSwgdG9vbCwgdGNcbiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHNcbiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcXFxuLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5XG4mIzQzOyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIC55bmwgaW1wb3J0IE5ldHNoYXBlckZhbWlseSwgRGV2bGlua0ZhbWlseSwgUFNQRmFtaWx5LCBOZXRsaW5rXG4gXG4gX19hbGxfXyA9IFtcJiMzNDtLU1JDXCYjMzQ7LFxuQEAgLTM0LDQgJiM0MzszNCw0IEBAIF9fYWxsX18gPSBbXCYjMzQ7S1NSQ1wmIzM0OyxcbiAgICAgICAgICAgIFwmIzM0O05ldGRldlNpbVwmIzM0OywgXCYjMzQ7TmV0ZGV2U2ltRGV2XCYjMzQ7LFxuICAgICAgICAgICAgXCYjMzQ7TmV0c2hhcGVyRmFtaWx5XCYjMzQ7LCBcJiMzNDtEZXZsaW5rRmFtaWx5XCYjMzQ7LCBcJiMzNDtQU1BGYW1pbHlcJiMzNDssIFwmIzM0O05sRXJyb3JcJiMzNDssXG4gICAgICAgICAgICBcJiMzNDtZbmxGYW1pbHlcJiMzNDssIFwmIzM0O0V0aHRvb2xGYW1pbHlcJiMzNDssIFwmIzM0O05ldGRldkZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEZhbWlseVwmIzM0Oyxcbi0gICAgICAgICAgIFwmIzM0O05sY3RybEZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEFkZHJGYW1pbHlcJiMzNDssIFwmIzM0O05ldGxpbmtcJiMzNDtdXG4mIzQzOyAgICAgICAgICAgXCYjMzQ7TmxjdHJsRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OywgXCYjMzQ7UnRubFJvdXRlRmFtaWx5XCYjMzQ7LCBcJiMzNDtOZXRsaW5rXCYjMzQ7XVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbmluZGV4IDJlNTY3MDYyYWE2Y2MuLjA4ZGVmZjc1NmYyOWIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbkBAIC0yOSw3ICYjNDM7MjksNyBAQCBleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvciBhcyBlOlxuIFxuIF9fYWxsX18gPSBbXG4gICAgIFwmIzM0O05sRXJyb3JcJiMzNDssIFwmIzM0O05sUG9saWN5XCYjMzQ7LCBcJiMzNDtOZXRsaW5rXCYjMzQ7LCBcJiMzNDtZbmxGYW1pbHlcJiMzNDssIFwmIzM0O1NQRUNfUEFUSFwmIzM0Oyxcbi0gICAgXCYjMzQ7RXRodG9vbEZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEFkZHJGYW1pbHlcJiMzNDssXG4mIzQzOyAgICBcJiMzNDtFdGh0b29sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OywgXCYjMzQ7UnRubFJvdXRlRmFtaWx5XCYjMzQ7LFxuICAgICBcJiMzNDtOZXRkZXZGYW1pbHlcJiMzNDssIFwmIzM0O05ldHNoYXBlckZhbWlseVwmIzM0OywgXCYjMzQ7TmxjdHJsRmFtaWx5XCYjMzQ7LCBcJiMzNDtEZXZsaW5rRmFtaWx5XCYjMzQ7LFxuICAgICBcJiMzNDtQU1BGYW1pbHlcJiMzNDssXG4gXVxuQEAgLTU0LDYgJiM0Mzs1NCwxMSBAQCBjbGFzcyBSdG5sQWRkckZhbWlseShZbmxGYW1pbHkpOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O3J0LWFkZHIueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPSYjMzk7JiMzOTssIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXG4gXG4mIzQzO2NsYXNzIFJ0bmxSb3V0ZUZhbWlseShZbmxGYW1pbHkpOlxuJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbiYjNDM7ICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7cnQtcm91dGUueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0mIzM5OyYjMzk7LCByZWN2X3NpemU9cmVjdl9zaXplKVxuJiM0MztcbiBjbGFzcyBOZXRkZXZGYW1pbHkoWW5sRmFtaWx5KTpcbiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJiMzOTtuZXRkZXYueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggMGM2N2M3YzAwZDg0MS4uNWNjM2ViZGNmMDhkZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbkBAIC01LDcgJiM0Mzs1LDkgQEAgaW1wb3J0IHNvY2tldFxuIGltcG9ydCBzdHJ1Y3RcbiBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcbi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseVxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgZGVmZXJcbiBcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtcXHhlMFxceDAwXFx4MDBcXHgwMSYjMzk7XG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1xceGVmXFx4MDFcXHgwMVxceDAxJiMzOTtcbkBAIC0xMzQsOCAmIzQzOzEzNiwxODkgQEAgZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXHUwMDNlIE5vbmU6XG4gICAgIGtzZnRfdHJ1ZShmXCYjMzQ7aW5ldCB7aWZuYW1lfSBmb3J3YXJkaW5nIG9uXCYjMzQ7IGluIGNtZF9vYmouc3Rkb3V0LFxuICAgICAgICAgICAgICAgZlwmIzM0O05vICYjMzk7Zm9yd2FyZGluZyBvbiYjMzk7IG5vdGlmaWNpYXRpb24gZm91bmQgZm9yIGludGVyZmFjZSB7aWZuYW1lfVwmIzM0OylcbiBcbiYjNDM7ZGVmIF9ydG5sX3JvdXRlX3N1YnNjcmliZShucyk6XG4mIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4mIzQzOyAgICAgICAgcnRubCA9IFJ0bmxSb3V0ZUZhbWlseSgpXG4mIzQzOyAgICBkZWZlcihydG5sLmNsb3NlKVxuJiM0MzsgICAgcnRubC5udGZfc3Vic2NyaWJlKFwmIzM0O3J0bmxncnAtaXB2Ni1yb3V0ZVwmIzM0OylcbiYjNDM7ICAgIHJldHVybiBydG5sXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF93YWl0X3JvdXRlX250ZihydG5sLCBuYW1lLCBkc3RfbGVuLCBkc3Q9Tm9uZSwgZGVhZGxpbmU9MTApOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UmV0dXJuIHRoZSBhdHRycyBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgbm90aWZpY2F0aW9uLCBOb25lIG9uIHRpbWVvdXQuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKTpcbiYjNDM7ICAgICAgICBpZiBtc2dbJiMzOTtuYW1lJiMzOTtdICE9IG5hbWU6XG4mIzQzOyAgICAgICAgICAgIGNvbnRpbnVlXG4mIzQzOyAgICAgICAgYXR0cnMgPSBtc2dbJiMzOTttc2cmIzM5O11cbiYjNDM7ICAgICAgICBpZiBhdHRyc1smIzM5O3J0bS1kc3QtbGVuJiMzOTtdICE9IGRzdF9sZW46XG4mIzQzOyAgICAgICAgICAgIGNvbnRpbnVlXG4mIzQzOyAgICAgICAgaWYgZHN0IGlzIG5vdCBOb25lIGFuZCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykgIT0gZHN0OlxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIHJldHVybiBhdHRyc1xuJiM0MzsgICAgcmV0dXJuIE5vbmVcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtHYXRoZXIgYXR0cnMgb2YgbWF0Y2hpbmcgbm90aWZpY2F0aW9ucywga2V5ZWQgYnkgKGRzdF9sZW4sIGRzdCkuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgc2VlbiA9IHt9XG4mIzQzOyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxuJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZTpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICBhdHRycyA9IG1zZ1smIzM5O21zZyYjMzk7XVxuJiM0MzsgICAgICAgIGtleSA9IChhdHRyc1smIzM5O3J0bS1kc3QtbGVuJiMzOTtdLCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykpXG4mIzQzOyAgICAgICAgaWYga2V5IGluIHdhbnQ6XG4mIzQzOyAgICAgICAgICAgIHNlZW5ba2V5XSA9IGF0dHJzXG4mIzQzOyAgICAgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XG4mIzQzOyAgICAgICAgICAgICAgICBicmVha1xuJiM0MzsgICAgcmV0dXJuIHNlZW5cbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3dyaXRlX2lwdjZfc3lzY3RsKG5hbWUsIHZhbHVlKTpcbiYjNDM7ICAgIHdpdGggb3BlbihmXCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY2L3tuYW1lfVwmIzM0OywgXCYjMzQ7d1wmIzM0OykgYXMgZjpcbiYjNDM7ICAgICAgICBmLndyaXRlKGZcJiMzNDt7dmFsdWV9XFxuXCYjMzQ7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCgpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O0FuIGV4cGlyZWQgcm91dGUgcmVwb3J0cyBSVEFfREVMX1JFQVNPTiA9PSBleHBpcmVkLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbiYjNDM7ICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxuJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcbiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwmIzM0O3JvdXRlL2djX2ludGVydmFsXCYjMzQ7LCAyKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcJiMzNDssIG5zPXN0cihucykpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7bGluayBzZXQgZGV2IGR1bW15MSB1cFwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDstNiByb3V0ZSBhZGQgMjAwMTpkYjg6Mjo6LzY0IGRldiBkdW1teTEgZXhwaXJlcyAyXCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MztcbiYjNDM7ICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAmIzM5O2RlbHJvdXRlLW50ZiYjMzk7LCA2NCwgJiMzOTsyMDAxOmRiODoyOjomIzM5OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZT0xNSlcbiYjNDM7ICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBcJiMzNDtubyBSVE1fREVMUk9VVEUgZm9yIHRoZSBleHBpcmVkIHJvdXRlXCYjMzQ7KVxuJiM0MzsgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgmIzM5O2RlbC1yZWFzb24mIzM5OyksICYjMzk7ZXhwaXJlZCYjMzk7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCBsaWZldGltZSwgcmlvPU5vbmUsIHBpbz1Ob25lKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1RoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgIyB0eXBlLCBjb2RlLCBja3N1bSwgaG9wIGxpbWl0LCBmbGFncywgcm91dGVyIGxpZmV0aW1lLFxuJiM0MzsgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lclxuJiM0MzsgICAgcmEgPSBzdHJ1Y3QucGFjaygmIzM5OyFCQkhCQkhJSSYjMzk7LCAxMzQsIDAsIDAsIDY0LCAwLCBsaWZldGltZSwgMCwgMClcbiYjNDM7ICAgIGlmIHJpbyBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICBwcmVmaXgsIHBsZW4sIHJpb19saWZldGltZSA9IHJpb1xuJiM0MzsgICAgICAgICMgUkZDIDQxOTEgcm91dGUgaW5mb3JtYXRpb24gb3B0aW9uLCAvNjQgcHJlZml4ICg4IGJ5dGVzKVxuJiM0MzsgICAgICAgIHJhICYjNDM7PSBzdHJ1Y3QucGFjaygmIzM5OyFCQkJCSSYjMzk7LCAyNCwgMiwgcGxlbiwgMCwgcmlvX2xpZmV0aW1lKVxuJiM0MzsgICAgICAgIHJhICYjNDM7PSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF1cbiYjNDM7ICAgIGlmIHBpbyBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICBwcmVmaXgsIHBsZW4sIHZhbGlkX2xmdCA9IHBpb1xuJiM0MzsgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcilcbiYjNDM7ICAgICAgICByYSAmIzQzOz0gc3RydWN0LnBhY2soJiMzOTshQkJCQklJSSYjMzk7LCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApXG4mIzQzOyAgICAgICAgcmEgJiM0Mzs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpXG4mIzQzOyAgICBzb2NrLnNlbmR0byhyYSwgKCYjMzk7ZmYwMjo6MSYjMzk7LCAwLCAwLCBpZmluZGV4KSlcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6XG4mIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcbiYjNDM7ICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpXG4mIzQzOyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpXG4mIzQzOyAgICAgICAgZGVmZXIoc29jay5jbG9zZSlcbiYjNDM7ICAgICAgICByZXR1cm4gc29jaywgc29ja2V0LmlmX25hbWV0b2luZGV4KGlmbmFtZSlcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgd2FudCwgKipyYV9vcHRzKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgU2VuZGluZyBmYWlscyB3aXRoIEVBRERSTk9UQVZBSUwgd2hpbGUgdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsXG4mIzQzOyAgICBhZGRyZXNzIGlzIHN0aWxsIHRlbnRhdGl2ZS4gYWRkcmNvbmZfZGFkX3N0YXJ0KCkgb25seSBxdWV1ZXNcbiYjNDM7ICAgIGFkZHJjb25mX2RhZF93b3JrKCksIGFuZCBJRkFfRl9URU5UQVRJVkUgaXMgY2xlYXJlZCB3aGVuIHRoYXQgd29ya1xuJiM0MzsgICAgaXRlbSBydW5zLCBzbyByZXRyeSB1bnRpbCBpdCBkb2VzLlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgc2VlbiA9IHt9XG4mIzQzOyAgICBmb3IgXyBpbiByYW5nZSgxMCk6XG4mIzQzOyAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAqKnJhX29wdHMpXG4mIzQzOyAgICAgICAgZXhjZXB0IE9TRXJyb3I6XG4mIzQzOyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKVxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIHNlZW4udXBkYXRlKF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJiMzOTtuZXdyb3V0ZS1udGYmIzM5OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZXQoc2Vlbi5rZXlzKCkpLCBkZWFkbGluZT0yKSlcbiYjNDM7ICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxuJiM0MzsgICAgICAgICAgICBicmVha1xuJiM0MzsgICAgcmV0dXJuIHNlZW5cbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgUm91dGVzIHdpdGhkcmF3biBieSBhIHplcm8tbGlmZXRpbWUgUkEgKHJvdXRlciBsaWZldGltZSwgUkZDIDQ4NjFcbiYjNDM7ICAgIFBJTywgUkZDIDQxOTEgUklPKSByZXBvcnQgUlRBX0RFTF9SRUFTT04gPT0gcmEtd2l0aGRyYXduLlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgIyAocnRtLWRzdC1sZW4sIGRzdCk7IHRoZSBkZWZhdWx0IHJvdXRlIGNhcnJpZXMgbm8gUlRBX0RTVFxuJiM0MzsgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7KSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7KX1cbiYjNDM7XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnNfaCwgTmV0TlMoKSBhcyBuc19yOlxuJiM0MzsgICAgICAgIGlwKGZcJiMzNDtsaW5rIGFkZCB2ZXRoMCBuZXRucyB7bnNfaH0gdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyB7bnNfcn1cJiMzNDspXG4mIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6XG4mIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcJiMzNDtjb25mL3ZldGgwL2FjY2VwdF9yYVwmIzM0OywgMilcbiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwmIzM0O2NvbmYvdmV0aDAvZm9yd2FyZGluZ1wmIzM0OywgMClcbiYjNDM7ICAgICAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW5cJiMzNDssIDY0KVxuJiM0MzsgICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6XG4mIzQzOyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O25vIENPTkZJR19JUFY2X1JPVVRFX0lORk9cJiMzNDspXG4mIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XG4mIzQzOyAgICAgICAgICAgICMgc2tpcCB0aGUgREFEIHByb2JlIHNvIHRoZSByb3V0ZXImIzM5O3MgbGluay1sb2NhbCBzb3VyY2Ugb25seVxuJiM0MzsgICAgICAgICAgICAjIGhhcyB0byB3YWl0IGZvciBhZGRyY29uZl9kYWRfd29yaygpIHRvIGNsZWFyIElGQV9GX1RFTlRBVElWRVxuJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCYjMzQ7Y29uZi92ZXRoMS9hY2NlcHRfZGFkXCYjMzQ7LCAwKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgc2V0IGRldiB2ZXRoMCB1cFwmIzM0OywgbnM9c3RyKG5zX2gpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgc2V0IGRldiB2ZXRoMSB1cFwmIzM0OywgbnM9c3RyKG5zX3IpKVxuJiM0MztcbiYjNDM7ICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zX2gpXG4mIzQzOyAgICAgICAgc29jaywgaWZpbmRleCA9IF9yYV9yb3V0ZXJfc29jayhuc19yLCBcJiMzNDt2ZXRoMVwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICAgICAgc2VlbiA9IF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHJvdXRlcyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWU9MTgwMCxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvPSgmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7LCA2NCwgNjAwKSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlvPSgmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7LCA2NCwgNjAwKSlcbiYjNDM7ICAgICAgICBrc2Z0X2VxKHNldChzZWVuKSwgcm91dGVzLCBcJiMzNDtub3QgYWxsIFJBIHJvdXRlcyB3ZXJlIGluc3RhbGxlZFwmIzM0OylcbiYjNDM7ICAgICAgICBpZiBzZXQoc2VlbikgIT0gcm91dGVzOlxuJiM0MzsgICAgICAgICAgICByZXR1cm5cbiYjNDM7XG4mIzQzOyAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgMCwgcmlvPSgmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7LCA2NCwgMCksXG4mIzQzOyAgICAgICAgICAgICAgICAgcGlvPSgmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7LCA2NCwgMCkpXG4mIzQzOyAgICAgICAgc2VlbiA9IF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5Oywgcm91dGVzKVxuJiM0MzsgICAgICAgIGZvciBrZXkgaW4gcm91dGVzOlxuJiM0MzsgICAgICAgICAgICBhdHRycyA9IHNlZW4uZ2V0KGtleSlcbiYjNDM7ICAgICAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgZlwmIzM0O25vIFJUTV9ERUxST1VURSBmb3Ige2tleX1cJiMzNDspXG4mIzQzOyAgICAgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJiMzOTtkZWwtcmVhc29uJiMzOTspLCAmIzM5O3JhLXdpdGhkcmF3biYjMzk7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBBIGRlbGV0aW9uIHBhdGggdGhhdCByZWNvcmRzIG5vIGNhdXNlIChoZXJlIGEgdXNlcnNwYWNlIHJlcXVlc3QpXG4mIzQzOyAgICBtdXN0IG5vdCBjYXJyeSBSVEFfREVMX1JFQVNPTiBhdCBhbGwuXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4mIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgc2V0IGRldiBkdW1teTEgdXBcJiMzNDssIG5zPXN0cihucykpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7LTYgcm91dGUgYWRkIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0Oy02IHJvdXRlIGRlbCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7XG4mIzQzOyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5OywgNjQsICYjMzk7MjAwMTpkYjg6MTo6JiMzOTspXG4mIzQzOyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXCYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciAyMDAxOmRiODoxOjovNjRcJiMzNDspXG4mIzQzOyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIGtzZnRfbm90X2luKCYjMzk7ZGVsLXJlYXNvbiYjMzk7LCBhdHRycyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7dXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uXCYjMzQ7KVxuJiM0MztcbiYjNDM7XG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4tICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSlcbiYjNDM7ICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LFxuJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxuJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXG4mIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXG4gICAgIGtzZnRfZXhpdCgpXG4gXG4gaWYgX19uYW1lX18gPT0gXCYjMzQ7X19tYWluX19cJiMzNDs6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDE6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURVJfUFJFRiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFX0lORk8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDssCiAgICAmIzM0O2ZpYjZfZGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgUlRBX0RFTF9SRUFTT04gZm9yIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucywgbW9kaWZ5aW5nIGNvcmUgSVB2NiByb3V0aW5nIGFuZCBuZXRsaW5rIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpcyByZWFjaGFibGUgdmlhIHJvdXRlIGV4cGlyYXRpb24sIHJvdXRlciBhZHZlcnRpc2VtZW50cywgYW5kIG1hbnVhbCByb3V0ZSBkZWxldGlvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YjQ0NWJkMDJmNGY4ODQ5N2ViZGFkOTE4Nzk4YjhjODNkMTk2YTkxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgOCAwMToyMDoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKaW5kZXggMzMxOTVkYjk2NzQ2Yy4uMjUzMDM3ZWE1MTc2YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKQEAgLTc4LDYgJiM0Mzs3OCwyNyBAQCBkZWZpbml0aW9uczoKICAgICAgIC0KICAgICAgICAgbmFtZTogcnRhLXVzZWQKICAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IGRlbC1yZWFzb24KJiM0MzsgICAgdHlwZTogZW51bQomIzQzOyAgICBuYW1lLXByZWZpeDogcnQtZGVsLXJlYXNvbi0KJiM0MzsgICAgZW51bS1uYW1lOiBydC1kZWwtcmVhc29uCiYjNDM7ICAgIGRvYzogfAomIzQzOyAgICAgIFdoeSB0aGUga2VybmVsIGRlbGV0ZWQgYSByb3V0ZS4gTmV3IGNhdXNlcyBtYXkgYmUgYXBwZW5kZWQuIFRoZQomIzQzOyAgICAgIHZhbHVlIHNwYWNlIGlzIGZhbWlseS1hZ25vc3RpYywgYSB2YWx1ZSBpcyBuZXZlciByZWludGVycHJldGVkCiYjNDM7ICAgICAgcGVyIGFkZHJlc3MgZmFtaWx5LgomIzQzOyAgICBlbnRyaWVzOgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHVuc3BlYwomIzQzOyAgICAgICAgZG9jOiBUaGUgZGVsZXRpb24gcGF0aCBkb2VzIG5vdCByZWNvcmQgYSBjYXVzZS4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBleHBpcmVkCiYjNDM7ICAgICAgICBkb2M6IFRoZSBSVEZfRVhQSVJFUyBsaWZldGltZSByYW4gb3V0IGFuZCB0aGUgcm91dGUgd2FzIGdhcmJhZ2UKJiM0MzsgICAgICAgICAgY29sbGVjdGVkLgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHJhLXdpdGhkcmF3bgomIzQzOyAgICAgICAgZG9jOiBBIFJvdXRlciBBZHZlcnRpc2VtZW50IHdpdGhkcmV3IHRoZSByb3V0ZSB3aXRoIGEgemVybwomIzQzOyAgICAgICAgICBsaWZldGltZS4KIAogYXR0cmlidXRlLXNldHM6CiAgIC0KQEAgLTE4NSw2ICYjNDM7MjA2LDE4IEBAIGF0dHJpYnV0ZS1zZXRzOgogICAgICAgICB0eXBlOiB1MzIKICAgICAgICAgYnl0ZS1vcmRlcjogYmlnLWVuZGlhbgogICAgICAgICBkaXNwbGF5LWhpbnQ6IGhleAomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGRlbC1yZWFzb24KJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZW51bTogZGVsLXJlYXNvbgomIzQzOyAgICAgICAgZG9jOiB8CiYjNDM7ICAgICAgICAgIEVtaXR0ZWQgb25seSBvbiBSVE1fREVMUk9VVEUgbm90aWZpY2F0aW9ucywgYW5kIG9ubHkgd2hlbiB0aGUKJiM0MzsgICAgICAgICAgZGVsZXRpb24gcGF0aCByZWNvcmRzIGEgY2F1c2UuIEFuIGFic2VudCBhdHRyaWJ1dGUgbWVhbnMKJiM0MzsgICAgICAgICAgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdAomIzQzOyAgICAgICAgICByZWNvcmQgaXRzIGNhdXNlLCBjb25zdW1lcnMgbXVzdCB0cmVhdCBhYnNlbnQgYW5kIHVuc3BlYwomIzQzOyAgICAgICAgICBpZGVudGljYWxseS4gQ3VycmVudGx5IG9ubHkgSVB2NiBkZWxldGlvbiBwYXRocyByZWNvcmQgYQomIzQzOyAgICAgICAgICBjYXVzZS4gVGhlIGF0dHJpYnV0ZSBpcyBub3RpZmljYXRpb24tb25seSwgdGhlIGtlcm5lbCByZWplY3RzCiYjNDM7ICAgICAgICAgIGl0IGluIHJlcXVlc3RzLgogICAtCiAgICAgbmFtZTogbWV0cmljcwogICAgIG5hbWUtcHJlZml4OiBydGF4LQpAQCAtMjk5LDYgJiM0MzszMzIsNyBAQCBvcGVyYXRpb25zOgogICAgICAgICAgICAgLSBkcG9ydAogICAgICAgICAgICAgLSBuaC1pZAogICAgICAgICAgICAgLSBmbG93bGFiZWwKJiM0MzsgICAgICAgICAgICAtIGRlbC1yZWFzb24KICAgICAgIGR1bXA6CiAgICAgICAgIHJlcXVlc3Q6CiAgICAgICAgICAgdmFsdWU6IDI2CkBAIC0zMTMsNyAmIzQzOzM0NywzNSBAQCBvcGVyYXRpb25zOgogICAgICAgZG86CiAgICAgICAgIHJlcXVlc3Q6CiAgICAgICAgICAgdmFsdWU6IDI0Ci0gICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRycwomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOiAmYW1wO3JvdXRlLXJlcS1hdHRycwomIzQzOyAgICAgICAgICAgIC0gZHN0CiYjNDM7ICAgICAgICAgICAgLSBzcmMKJiM0MzsgICAgICAgICAgICAtIGlpZgomIzQzOyAgICAgICAgICAgIC0gb2lmCiYjNDM7ICAgICAgICAgICAgLSBnYXRld2F5CiYjNDM7ICAgICAgICAgICAgLSBwcmlvcml0eQomIzQzOyAgICAgICAgICAgIC0gcHJlZnNyYwomIzQzOyAgICAgICAgICAgIC0gbWV0cmljcwomIzQzOyAgICAgICAgICAgIC0gbXVsdGlwYXRoCiYjNDM7ICAgICAgICAgICAgLSBmbG93CiYjNDM7ICAgICAgICAgICAgLSBjYWNoZWluZm8KJiM0MzsgICAgICAgICAgICAtIHRhYmxlCiYjNDM7ICAgICAgICAgICAgLSBtYXJrCiYjNDM7ICAgICAgICAgICAgLSBtZmMtc3RhdHMKJiM0MzsgICAgICAgICAgICAtIHZpYQomIzQzOyAgICAgICAgICAgIC0gbmV3ZHN0CiYjNDM7ICAgICAgICAgICAgLSBwcmVmCiYjNDM7ICAgICAgICAgICAgLSBlbmNhcC10eXBlCiYjNDM7ICAgICAgICAgICAgLSBlbmNhcAomIzQzOyAgICAgICAgICAgIC0gZXhwaXJlcwomIzQzOyAgICAgICAgICAgIC0gcGFkCiYjNDM7ICAgICAgICAgICAgLSB1aWQKJiM0MzsgICAgICAgICAgICAtIHR0bC1wcm9wYWdhdGUKJiM0MzsgICAgICAgICAgICAtIGlwLXByb3RvCiYjNDM7ICAgICAgICAgICAgLSBzcG9ydAomIzQzOyAgICAgICAgICAgIC0gZHBvcnQKJiM0MzsgICAgICAgICAgICAtIG5oLWlkCiYjNDM7ICAgICAgICAgICAgLSBmbG93bGFiZWwKICAgICAtCiAgICAgICBuYW1lOiBkZWxyb3V0ZQogICAgICAgZG9jOiBEZWxldGUgYW4gZXhpc3Rpbmcgcm91dGUKQEAgLTMyMSw0ICYjNDM7MzgzLDIzIEBAIG9wZXJhdGlvbnM6CiAgICAgICBkbzoKICAgICAgICAgcmVxdWVzdDoKICAgICAgICAgICB2YWx1ZTogMjUKLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzCiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6ICpyb3V0ZS1yZXEtYXR0cnMKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZgomIzQzOyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS4KJiM0MzsgICAgICB2YWx1ZTogMjQKJiM0MzsgICAgICBub3RpZnk6IGdldHJvdXRlCiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBkZWxyb3V0ZS1udGYKJiM0MzsgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuCiYjNDM7ICAgICAgdmFsdWU6IDI1CiYjNDM7ICAgICAgbm90aWZ5OiBnZXRyb3V0ZQomIzQzOwomIzQzO21jYXN0LWdyb3VwczoKJiM0MzsgIGxpc3Q6CiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGUKJiM0MzsgICAgICB2YWx1ZTogNwomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlCiYjNDM7ICAgICAgdmFsdWU6IDExCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmgKaW5kZXggOWNkMjdlMWI5YjY5Mi4uMjMyMjg5YjQzOWMzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaApAQCAtNDY4LDcgJiM0Mzs0NjgsOCBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwKIAogaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCSAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7Ci1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTsKJiM0MztpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTsKIAogc3RhdGljIGlubGluZQogdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKQpAQCAtNTMyLDYgJiM0Mzs1MzMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwKICNlbmRpZgogdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiAJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0Mzt2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkJCSBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7CiAKIHZvaWQgZmliNl9hZ2VfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncywKIAkJCSB1bnNpZ25lZCBsb25nIG5vdyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCmluZGV4IDA5ZmZlMGYxM2NlNzUuLmNjMDQ1NzA1ODYyZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCkBAIC0xMjYsNiAmIzQzOzEyNiw4IEBAIGludCBpcHY2X3JvdXRlX2lvY3RsKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCwKIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsCiAJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIGludCBpcDZfaW5zX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpKTsKJiM0MztpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksCiYjNDM7CQkgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTsKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKaW5kZXggMjcyNjVmZDMxZTVmYy4uMzk4OGI1MWRiNTM5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaApAQCAtMzk5LDYgJiM0MzszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3QgewogCVJUQV9EUE9SVCwKIAlSVEFfTkhfSUQsCiAJUlRBX0ZMT1dMQUJFTCwKJiM0MzsJUlRBX0RFTF9SRUFTT04sCiAJX19SVEFfTUFYCiB9OwogCkBAIC00MDcsNiAmIzQzOzQwOCwzMCBAQCBlbnVtIHJ0YXR0cl90eXBlX3QgewogI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgJiM0MzsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBydG1zZykpKSkKICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKQogCiYjNDM7LyogUlRBX0RFTF9SRUFTT046IHdoeSB0aGUga2VybmVsIGRlbGV0ZWQgdGhlIHJvdXRlLiB1MzIuCiYjNDM7ICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvbgomIzQzOyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYQomIzQzOyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3QKJiM0MzsgKiB0cmVhdCAmIzM0O2Fic2VudCYjMzQ7IGFuZCAmIzM0O3Vuc3BlYyYjMzQ7IGlkZW50aWNhbGx5LiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC4KJiM0MzsgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLgomIzQzOyAqCiYjNDM7ICogVGhlIGF0dHJpYnV0ZSBpcyBub3RpZmljYXRpb24tb25seTogdGhlIGtlcm5lbCByZWplY3RzIGl0IGluCiYjNDM7ICogcmVxdWVzdHMsIHNvIGEgbm90aWZpY2F0aW9uIG11c3Qgbm90IGJlIGVjaG9lZCBiYWNrIHZlcmJhdGltLgomIzQzOyAqCiYjNDM7ICogVGhlIHZhbHVlIHNwYWNlIGlzIGZhbWlseS1hZ25vc3RpYzogYSB2YWx1ZSBtdXN0IG5ldmVyIGJlCiYjNDM7ICogcmVpbnRlcnByZXRlZCBwZXIgYWRkcmVzcyBmYW1pbHkuIEEgY2F1c2UgdGhhdCBvbmx5IG9uZSBmYW1pbHkgY2FuCiYjNDM7ICogcHJvZHVjZSBzdGlsbCBnZXRzIGl0cyBvd24gdmFsdWUgcmF0aGVyIHRoYW4gcmV1c2luZyBhbm90aGVyCiYjNDM7ICogZmFtaWx5JiMzOTtzLgomIzQzOyAqLwomIzQzO2VudW0gcnRfZGVsX3JlYXNvbiB7CiYjNDM7CVJUX0RFTF9SRUFTT05fVU5TUEVDLAkJLyogY2F1c2Ugbm90IHJlY29yZGVkICovCiYjNDM7CVJUX0RFTF9SRUFTT05fRVhQSVJFRCwJCS8qIFJURl9FWFBJUkVTIGxpZmV0aW1lIHJhbiBvdXQgKEdDKSAqLwomIzQzOwlSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiwJLyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqLwomIzQzOwlfX1JUX0RFTF9SRUFTT05fTUFYCiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIFJUX0RFTF9SRUFTT05fTUFYIChfX1JUX0RFTF9SRUFTT05fTUFYIC0gMSkKJiM0MzsKIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuCiAgKgogICogJiMzNDtzdHJ1Y3QgcnRuZXh0aG9wJiMzNDsgZGVzY3JpYmVzIGFsbCBuZWNlc3NhcnkgbmV4dGhvcCBpbmZvcm1hdGlvbiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IGY2ZmEyNzE1YjQ1MGIuLjlkODliZTdlMDU0NGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMjg3NCw3ICYjNDM7Mjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKQogCQlpZiAocnQpIHsKIAkJCS8qIEF1dG9jb25mIHByZWZpeCByb3V0ZSAqLwogCQkJaWYgKHZhbGlkX2xmdCA9PSAwKSB7Ci0JCQkJaXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7CiYjNDM7CQkJCWlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsCiYjNDM7CQkJCQkJICBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7CiAJCQkJcnQgPSBOVUxMOwogCQkJfSBlbHNlIHsKIAkJCQl0YWJsZSA9IHJ0LSZndDtmaWI2X3RhYmxlOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2ZpYi5jIGIvbmV0L2lwdjYvaXA2X2ZpYi5jCmluZGV4IGU5ZmM2OTJkNGYzYjIuLjNlMzgyYmExNTczZTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9maWIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfZmliLmMKQEAgLTE5NjcsNyAmIzQzOzE5NjcsOCBAQCBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsCiB9CiAKIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sCi0JCQkgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKJiM0MzsJCQkgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCQkgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgZmliNl9pbmZvICpsZWFmLCAqcmVwbGFjZV9ydCA9IE5VTEw7CiAJc3RydWN0IGZpYjZfd2Fsa2VyICp3OwpAQCAtMjA1NiwxMyAmIzQzOzIwNTcsMTQgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbiwKIAkJCWNhbGxfZmliNl9lbnRyeV9ub3RpZmllcnNfcmVwbGFjZShuZXQsIHJlcGxhY2VfcnQpOwogCX0KIAlpZiAoIWluZm8tJmd0O3NraXBfbm90aWZ5KQotCQlpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCk7CiYjNDM7CQlpbmV0Nl9ydF9kZWxfbm90aWZ5KHJ0LCBpbmZvLCBkZWxfcmVhc29uKTsKIAogCWZpYjZfaW5mb19yZWxlYXNlKHJ0KTsKIH0KIAogLyogTmVlZCB0byBvd24gdGFibGUtJmd0O3RiNl9sb2NrICovCi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQomIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiYjNDM7CSAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gaW5mby0mZ3Q7bmxfbmV0OwogCXN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHA7CkBAIC0yMDkxLDcgJiM0MzsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKIAkJaWYgKHJ0ID09IGN1cikgewogCQkJaWYgKGZpYjZfcmVxdWlyZXNfc3JjKGN1cikpCiAJCQkJZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tJmd0O25sX25ldCk7Ci0JCQlmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7CiYjNDM7CQkJZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJcnRwX25leHQgPSAmYW1wO2N1ci0mZ3Q7ZmliNl9uZXh0OwpAQCAtMjI1Myw3ICYjNDM7MjI1NSw3IEBAIHN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlciAqdykKIAkJcmVzID0gYy0mZ3Q7ZnVuYyhydCwgYy0mZ3Q7YXJnKTsKIAkJaWYgKHJlcyA9PSAtMSkgewogCQkJdy0mZ3Q7bGVhZiA9IHJ0OwotCQkJcmVzID0gZmliNl9kZWwocnQsICZhbXA7aW5mbyk7CiYjNDM7CQkJcmVzID0gZmliNl9kZWwocnQsICZhbXA7aW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJaWYgKHJlcykgewogI2lmIFJUNl9ERUJVRyAmZ3Q7PSAyCiAJCQkJcHJfZGVidWcoJiMzNDslczogZGVsIGZhaWxlZDogcnQ9JXBAJXAgZXJyPSVkXG4mIzM0OywKQEAgLTI0MDEsNyAmIzQzOzI0MDMsNyBAQCBzdGF0aWMgdm9pZCBmaWI2X2djX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwKIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIG4sICZhbXA7dGI2LSZndDt0YjZfZ2NfaGxpc3QsIGdjX2xpbmspCiAJCWlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpCi0JCQlmaWI2X2RlbChydCwgJmFtcDtpbmZvKTsKJiM0MzsJCQlmaWI2X2RlbChydCwgJmFtcDtpbmZvLCBSVF9ERUxfUkVBU09OX0VYUElSRUQpOwogfQogCiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuYwppbmRleCBmZTM2YjNmNTEyODUwLi4xMTExYzRlYmM2MWQ5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTEzNjEsNyAmIzQzOzEzNjEsOSBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi0mZ3Q7Y25mLnJhX2RlZnJ0cl9tZXRyaWM7CiAJLyogZGVsZXRlIHRoZSByb3V0ZSBpZiBsaWZldGltZSBpcyAwIG9yIGlmIG1ldHJpYyBuZWVkcyBjaGFuZ2UgKi8KIAlpZiAocnQgJmFtcDsmYW1wOyAobGlmZXRpbWUgPT0gMCB8fCBydC0mZ3Q7ZmliNl9tZXRyaWMgIT0gZGVmcnRyX3Vzcl9tZXRyaWMpKSB7Ci0JCWlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpOwomIzQzOwkJaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwKJiM0MzsJCQkJICBsaWZldGltZSA9PSAwID8gUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04gOgomIzQzOwkJCQkJCSAgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQlydCA9IE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCBmYzQyZDY3ZTU4MjI2Li4xNzA0MzU5ZDM5NjBkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTExMSw3ICYjNDM7MTExLDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAogCQkJIHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsCiAJCQkgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsCi0JCQkgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0MzsJCQkgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7CiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpOwpAQCAtMTAyMCw3ICYjNDM7MTAyMCw3IEBAIGludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sCiAJCQkJCWd3YWRkciwgZGV2KTsKIAogCWlmIChydCAmYW1wOyZhbXA7ICFsaWZldGltZSkgewotCQlpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTsKJiM0MzsJCWlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTsKIAkJcnQgPSBOVUxMOwogCX0KIApAQCAtMzk3Myw3ICYjNDM7Mzk3Myw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQomIzQzO3N0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCQllbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLSZndDtubF9uZXQ7CiAJc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlOwpAQCAtMzk4Niw3ICYjNDM7Mzk4Nyw3IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKIAogCXRhYmxlID0gcnQtJmd0O2ZpYjZfdGFibGU7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7dGFibGUtJmd0O3RiNl9sb2NrKTsKLQllcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7CiYjNDM7CWVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBkZWxfcmVhc29uKTsKIAlzcGluX3VubG9ja19iaCgmYW1wO3RhYmxlLSZndDt0YjZfbG9jayk7CiAKIG91dDoKQEAgLTQwMDEsNyAmIzQzOzQwMDIsMTUgQEAgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSkKIAkJLnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnkKIAl9OwogCi0JcmV0dXJuIF9faXA2X2RlbF9ydChydCwgJmFtcDtpbmZvKTsKJiM0MzsJcmV0dXJuIF9faXA2X2RlbF9ydChydCwgJmFtcDtpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAomIzQzOwkJICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmxfaW5mbyBpbmZvID0geyAubmxfbmV0ID0gbmV0IH07CiYjNDM7CiYjNDM7CXJldHVybiBfX2lwNl9kZWxfcnQocnQsICZhbXA7aW5mbywgZGVsX3JlYXNvbik7CiB9CiAKIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKQEAgLTQwMjgsNyAmIzQzOzQwMzcsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpCiAKIAkJCWlmIChydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwKIAkJCQkJICBOVUxMLCBOVUxMLCAwLCBSVE1fREVMUk9VVEUsCi0JCQkJCSAgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIDApICZsdDsgMCkgewomIzQzOwkJCQkJICBpbmZvLSZndDtwb3J0aWQsIHNlcSwgMCwKJiM0MzsJCQkJCSAgUlRfREVMX1JFQVNPTl9VTlNQRUMpICZsdDsgMCkgewogCQkJCWtmcmVlX3NrYihza2IpOwogCQkJCXNrYiA9IE5VTEw7CiAJCQl9IGVsc2UKQEAgLTQwNjQsMTMgJiM0Mzs0MDc0LDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZywKIAkJCQkJICZhbXA7cnQtJmd0O2ZpYjZfc2libGluZ3MsCiAJCQkJCSBmaWI2X3NpYmxpbmdzKSB7Ci0JCQllcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvKTsKJiM0MzsJCQllcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCX0KIAotCWVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTsKJiM0MzsJZXJyID0gZmliNl9kZWwocnQsIGluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YWJsZS0mZ3Q7dGI2X2xvY2spOwogb3V0X3B1dDoKQEAgLTQxOTYsNyAmIzQzOzQyMDYsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsCiAJCQkJaWYgKCFmaWI2X2luZm9faG9sZF9zYWZlKHJ0KSkKIAkJCQkJY29udGludWU7CiAKLQkJCQllcnIgPSAgX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2NmZy0mZ3Q7ZmNfbmxpbmZvKTsKJiM0MzsJCQkJZXJyID0gX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2NmZy0mZ3Q7ZmNfbmxpbmZvLAomIzQzOwkJCQkJCSAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChjZmctJmd0O2ZjX25oX2lkKQpAQCAtNDIxNSw3ICYjNDM7NDIyNiw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywKIAogCQkJLyogaWYgZ2F0ZXdheSB3YXMgc3BlY2lmaWVkIG9ubHkgZGVsZXRlIHRoZSBvbmUgaG9wICovCiAJCQlpZiAoY2ZnLSZndDtmY19mbGFncyAmYW1wOyBSVEZfR0FURVdBWSkKLQkJCQllcnIgPSBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8pOwomIzQzOwkJCQllcnIgPSBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8sCiYjNDM7CQkJCQkJICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJZWxzZQogCQkJCWVyciA9IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhydCwgY2ZnKTsKIAkJCWJyZWFrOwpAQCAtNTczOSw2ICYjNDM7NTc1MSw3IEBAIHN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKQogCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHJ0YV9jYWNoZWluZm8pKQogCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShUQ1BfQ0FfTkFNRV9NQVgpIC8qIFJUQVhfQ0NfQUxHTyAqLwogCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZSgxKSAvKiBSVEFfUFJFRiAqLwomIzQzOwkgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX0RFTF9SRUFTT04gKi8KIAkgICAgICAgJiM0MzsgbmV4dGhvcF9sZW47CiB9CiAKQEAgLTU3NzUsNyAmIzQzOzU3ODgsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCiAJCQkgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywKIAkJCSBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSwKLQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7CQkJIHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiB7CiAJc3RydWN0IHJ0Nl9pbmZvICpydDYgPSBkc3RfcnQ2X2luZm8oZHN0KTsKIAlzdHJ1Y3QgcnQ2a2V5ICpydDZfZHN0LCAqcnQ2X3NyYzsKQEAgLTU5NTQsNiAmIzQzOzU5NjcsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAocnRubF9wdXRfY2FjaGVpbmZvKHNrYiwgZHN0LCAwLCBleHBpcmVzLCBkc3QgPyBkc3QtJmd0O2Vycm9yIDogMCkgJmx0OyAwKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAomIzQzOwlpZiAoZGVsX3JlYXNvbiAhPSBSVF9ERUxfUkVBU09OX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIFJUQV9ERUxfUkVBU09OLCBkZWxfcmVhc29uKSkKJiM0MzsJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwomIzQzOwogCWlmIChubGFfcHV0X3U4KHNrYiwgUlRBX1BSRUYsIElQVjZfRVhUUkFDVF9QUkVGKHJ0Nl9mbGFncykpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIApAQCAtNjA1NSw3ICYjNDM7NjA3Miw4IEBAIHN0YXRpYyBpbnQgcnQ2X25oX2R1bXBfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9uaCAqbmgsIHZvaWQgKmFyZykKIAkJCQkJICAgICZhbXA7cnQ2X2V4LSZndDtydDZpLSZndDtkc3QsIE5VTEwsIE5VTEwsIDAsCiAJCQkJCSAgICBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgICBORVRMSU5LX0NCKGR1bXAtJmd0O2NiLSZndDtza2IpLnBvcnRpZCwKLQkJCQkJICAgIGR1bXAtJmd0O2NiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgdy0mZ3Q7ZmxhZ3MpOwomIzQzOwkJCQkJICAgIGR1bXAtJmd0O2NiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgdy0mZ3Q7ZmxhZ3MsCiYjNDM7CQkJCQkgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCkBAIC02MTAzLDcgJiM0Mzs2MTIxLDggQEAgaW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApCiAJCQlpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy0mZ3Q7c2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCQkJICAwLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgTkVUTElOS19DQihhcmctJmd0O2NiLSZndDtza2IpLnBvcnRpZCwKLQkJCQkJICBhcmctJmd0O2NiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgZmxhZ3MpKSB7CiYjNDM7CQkJCQkgIGFyZy0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCBmbGFncywKJiM0MzsJCQkJCSAgUlRfREVMX1JFQVNPTl9VTlNQRUMpKSB7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQljb3VudCYjNDM7JiM0Mzs7CkBAIC02MzM2LDEyICYjNDM7NjM1NSwxNCBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsCiAJCQkJCSAgICBpaWYsIFJUTV9ORVdST1VURSwKIAkJCQkJICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsCi0JCQkJCSAgICBubGgtJmd0O25sbXNnX3NlcSwgMCk7CiYjNDM7CQkJCQkgICAgbmxoLSZndDtubG1zZ19zZXEsIDAsCiYjNDM7CQkJCQkgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQllbHNlCiAJCQllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBkc3QsICZhbXA7Zmw2LmRhZGRyLAogCQkJCQkgICAgJmFtcDtmbDYuc2FkZHIsIGlpZiwgUlRNX05FV1JPVVRFLAogCQkJCQkgICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCwKLQkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwKTsKJiM0MzsJCQkJCSAgICBubGgtJmd0O25sbXNnX3NlcSwgMCwKJiM0MzsJCQkJCSAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJfSBlbHNlIHsKIAkJZXJyID0gLUVORVRVTlJFQUNIOwogCX0KQEAgLTYzNTcsOCAmIzQzOzYzNzgsOSBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKLQkJICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKQomIzQzO3N0YXRpYyB2b2lkIF9faW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsCiYjNDM7CQkJICAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsCiYjNDM7CQkJICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gaW5mby0mZ3Q7bmxfbmV0OwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC02Mzc3LDcgJiM0Mzs2Mzk5LDcgQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiAJCWdvdG8gZXJyb3V0OwogCiAJZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsCi0JCQkgICAgZXZlbnQsIGluZm8tJmd0O3BvcnRpZCwgc2VxLCBubG1fZmxhZ3MpOwomIzQzOwkJCSAgICBldmVudCwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIG5sbV9mbGFncywgZGVsX3JlYXNvbik7CiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCS8qIC1FTVNHU0laRSBpbXBsaWVzIG5lZWRlZCBzcGFjZSBncmV3IHVuZGVyIHVzLiAqLwpAQCAtNjM5OCw2ICYjNDM7NjQyMCwxOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKIAlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfUk9VVEUsIGVycik7CiB9CiAKJiM0Mzt2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCSAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncykKJiM0Mzt7CiYjNDM7CV9faW5ldDZfcnRfbm90aWZ5KGV2ZW50LCBydCwgaW5mbywgbmxtX2ZsYWdzLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiYjNDM7CQkJIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQomIzQzO3sKJiM0MzsJX19pbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCwgZGVsX3JlYXNvbik7CiYjNDM7fQomIzQzOwogdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCQkgICAgc3RydWN0IG5sX2luZm8gKmluZm8pCiB7CkBAIC02NDEwLDcgJiM0Mzs2NDQ0LDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCQlnb3RvIGVycm91dDsKIAogCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLAotCQkJICAgIFJUTV9ORVdST1VURSwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpOwomIzQzOwkJCSAgICBSVE1fTkVXUk9VVEUsIGluZm8tJmd0O3BvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLAomIzQzOwkJCSAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJLyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi8KIAkJV0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTsKQEAgLTY0NjMsNyAmIzQzOzY0OTgsNyBAQCB2b2lkIGZpYjZfaW5mb19od19mbGFnc19zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksCiAJfQogCiAJZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsCi0JCQkgICAgMCwgMCk7CiYjNDM7CQkJICAgIDAsIDAsIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQkvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqLwogCQlXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkKaW5kZXggZTU4YmRiZGM1OGVlYS4uMzQ5MzU4ODZiNmFkZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5CkBAIC0xNyw3ICYjNDM7MTcsNyBAQCBmcm9tIC51dGlscyBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIGZkX3JlYWRfdGltZW91dCwgY21kLCBia2csIGRlZmVyLCBcCiAgICAgd2FpdF9maWxlLCB0b29sLCB0YwogZnJvbSAuYnBmIGltcG9ydCBicGZfbWFwX3NldCwgYnBmX21hcF9kdW1wLCBicGZfcHJvZ19tYXBfaWRzCiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcCi0gICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseQomIzQzOyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHkKIGZyb20gLnlubCBpbXBvcnQgTmV0c2hhcGVyRmFtaWx5LCBEZXZsaW5rRmFtaWx5LCBQU1BGYW1pbHksIE5ldGxpbmsKIAogX19hbGxfXyA9IFsmIzM0O0tTUkMmIzM0OywKQEAgLTM0LDQgJiM0MzszNCw0IEBAIF9fYWxsX18gPSBbJiMzNDtLU1JDJiMzNDssCiAgICAgICAgICAgICYjMzQ7TmV0ZGV2U2ltJiMzNDssICYjMzQ7TmV0ZGV2U2ltRGV2JiMzNDssCiAgICAgICAgICAgICYjMzQ7TmV0c2hhcGVyRmFtaWx5JiMzNDssICYjMzQ7RGV2bGlua0ZhbWlseSYjMzQ7LCAmIzM0O1BTUEZhbWlseSYjMzQ7LCAmIzM0O05sRXJyb3ImIzM0OywKICAgICAgICAgICAgJiMzNDtZbmxGYW1pbHkmIzM0OywgJiMzNDtFdGh0b29sRmFtaWx5JiMzNDssICYjMzQ7TmV0ZGV2RmFtaWx5JiMzNDssICYjMzQ7UnRubEZhbWlseSYjMzQ7LAotICAgICAgICAgICAmIzM0O05sY3RybEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssICYjMzQ7TmV0bGluayYjMzQ7XQomIzQzOyAgICAgICAgICAgJiMzNDtObGN0cmxGYW1pbHkmIzM0OywgJiMzNDtSdG5sQWRkckZhbWlseSYjMzQ7LCAmIzM0O1J0bmxSb3V0ZUZhbWlseSYjMzQ7LCAmIzM0O05ldGxpbmsmIzM0O10KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkKaW5kZXggMmU1NjcwNjJhYTZjYy4uMDhkZWZmNzU2ZjI5YiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkKQEAgLTI5LDcgJiM0MzsyOSw3IEBAIGV4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm9yIGFzIGU6CiAKIF9fYWxsX18gPSBbCiAgICAgJiMzNDtObEVycm9yJiMzNDssICYjMzQ7TmxQb2xpY3kmIzM0OywgJiMzNDtOZXRsaW5rJiMzNDssICYjMzQ7WW5sRmFtaWx5JiMzNDssICYjMzQ7U1BFQ19QQVRIJiMzNDssCi0gICAgJiMzNDtFdGh0b29sRmFtaWx5JiMzNDssICYjMzQ7UnRubEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssCiYjNDM7ICAgICYjMzQ7RXRodG9vbEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxGYW1pbHkmIzM0OywgJiMzNDtSdG5sQWRkckZhbWlseSYjMzQ7LCAmIzM0O1J0bmxSb3V0ZUZhbWlseSYjMzQ7LAogICAgICYjMzQ7TmV0ZGV2RmFtaWx5JiMzNDssICYjMzQ7TmV0c2hhcGVyRmFtaWx5JiMzNDssICYjMzQ7TmxjdHJsRmFtaWx5JiMzNDssICYjMzQ7RGV2bGlua0ZhbWlseSYjMzQ7LAogICAgICYjMzQ7UFNQRmFtaWx5JiMzNDssCiBdCkBAIC01NCw2ICYjNDM7NTQsMTEgQEAgY2xhc3MgUnRubEFkZHJGYW1pbHkoWW5sRmFtaWx5KToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O3J0LWFkZHIueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JiMzOTsmIzM5OywgcmVjdl9zaXplPXJlY3Zfc2l6ZSkKIAomIzQzO2NsYXNzIFJ0bmxSb3V0ZUZhbWlseShZbmxGYW1pbHkpOgomIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOgomIzQzOyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O3J0LXJvdXRlLnlhbWwmIzM5OykpLmFzX3Bvc2l4KCksCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0mIzM5OyYjMzk7LCByZWN2X3NpemU9cmVjdl9zaXplKQomIzQzOwogY2xhc3MgTmV0ZGV2RmFtaWx5KFlubEZhbWlseSk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O25ldGRldi55YW1sJiMzOTspKS5hc19wb3NpeCgpLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKaW5kZXggMGM2N2M3YzAwZDg0MS4uNWNjM2ViZGNmMDhkZSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CkBAIC01LDcgJiM0Mzs1LDkgQEAgaW1wb3J0IHNvY2tldAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHRpbWUKIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXgKLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBkZWZlcgogCiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtceGUwXHgwMFx4MDBceDAxJiMzOTsKIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJiMzOTtceGVmXHgwMVx4MDFceDAxJiMzOTsKQEAgLTEzNCw4ICYjNDM7MTM2LDE4OSBAQCBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC0mZ3Q7IE5vbmU6CiAgICAga3NmdF90cnVlKGYmIzM0O2luZXQge2lmbmFtZX0gZm9yd2FyZGluZyBvbiYjMzQ7IGluIGNtZF9vYmouc3Rkb3V0LAogICAgICAgICAgICAgICBmJiMzNDtObyAmIzM5O2ZvcndhcmRpbmcgb24mIzM5OyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX0mIzM0OykKIAomIzQzO2RlZiBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpOgomIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICBydG5sID0gUnRubFJvdXRlRmFtaWx5KCkKJiM0MzsgICAgZGVmZXIocnRubC5jbG9zZSkKJiM0MzsgICAgcnRubC5udGZfc3Vic2NyaWJlKCYjMzQ7cnRubGdycC1pcHY2LXJvdXRlJiMzNDspCiYjNDM7ICAgIHJldHVybiBydG5sCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF93YWl0X3JvdXRlX250ZihydG5sLCBuYW1lLCBkc3RfbGVuLCBkc3Q9Tm9uZSwgZGVhZGxpbmU9MTApOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKToKJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgYXR0cnMgPSBtc2dbJiMzOTttc2cmIzM5O10KJiM0MzsgICAgICAgIGlmIGF0dHJzWyYjMzk7cnRtLWRzdC1sZW4mIzM5O10gIT0gZHN0X2xlbjoKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgaWYgZHN0IGlzIG5vdCBOb25lIGFuZCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykgIT0gZHN0OgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICByZXR1cm4gYXR0cnMKJiM0MzsgICAgcmV0dXJuIE5vbmUKJiM0MzsKJiM0MzsKJiM0MztkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O0dhdGhlciBhdHRycyBvZiBtYXRjaGluZyBub3RpZmljYXRpb25zLCBrZXllZCBieSAoZHN0X2xlbiwgZHN0KS4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgc2VlbiA9IHt9CiYjNDM7ICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6CiYjNDM7ICAgICAgICBpZiBtc2dbJiMzOTtuYW1lJiMzOTtdICE9IG5hbWU6CiYjNDM7ICAgICAgICAgICAgY29udGludWUKJiM0MzsgICAgICAgIGF0dHJzID0gbXNnWyYjMzk7bXNnJiMzOTtdCiYjNDM7ICAgICAgICBrZXkgPSAoYXR0cnNbJiMzOTtydG0tZHN0LWxlbiYjMzk7XSwgYXR0cnMuZ2V0KCYjMzk7ZHN0JiMzOTspKQomIzQzOyAgICAgICAgaWYga2V5IGluIHdhbnQ6CiYjNDM7ICAgICAgICAgICAgc2VlbltrZXldID0gYXR0cnMKJiM0MzsgICAgICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOgomIzQzOyAgICAgICAgICAgICAgICBicmVhawomIzQzOyAgICByZXR1cm4gc2VlbgomIzQzOwomIzQzOwomIzQzO2RlZiBfd3JpdGVfaXB2Nl9zeXNjdGwobmFtZSwgdmFsdWUpOgomIzQzOyAgICB3aXRoIG9wZW4oZiYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY2L3tuYW1lfSYjMzQ7LCAmIzM0O3cmIzM0OykgYXMgZjoKJiM0MzsgICAgICAgIGYud3JpdGUoZiYjMzQ7e3ZhbHVlfVxuJiMzNDspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkKCkgLSZndDsgTm9uZToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7QW4gZXhwaXJlZCByb3V0ZSByZXBvcnRzIFJUQV9ERUxfUkVBU09OID09IGV4cGlyZWQuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczoKJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpCiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7cm91dGUvZ2NfaW50ZXJ2YWwmIzM0OywgMikKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teSYjMzQ7LCBucz1zdHIobnMpKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkZXYgZHVtbXkxIHVwJiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0Oy02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDImIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsKJiM0MzsgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIDY0LCAmIzM5OzIwMDE6ZGI4OjI6OiYjMzk7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmU9MTUpCiYjNDM7ICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCAmIzM0O25vIFJUTV9ERUxST1VURSBmb3IgdGhlIGV4cGlyZWQgcm91dGUmIzM0OykKJiM0MzsgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCYjMzk7ZGVsLXJlYXNvbiYjMzk7KSwgJiMzOTtleHBpcmVkJiMzOTspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIGxpZmV0aW1lLCByaW89Tm9uZSwgcGlvPU5vbmUpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtUaGUga2VybmVsIGZpbGxzIGluIHRoZSBJQ01QdjYgY2hlY2tzdW0gb24gcmF3IElDTVB2NiBzb2NrZXRzLiYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICAjIHR5cGUsIGNvZGUsIGNrc3VtLCBob3AgbGltaXQsIGZsYWdzLCByb3V0ZXIgbGlmZXRpbWUsCiYjNDM7ICAgICMgcmVhY2hhYmxlIHRpbWUsIHJldHJhbnMgdGltZXIKJiM0MzsgICAgcmEgPSBzdHJ1Y3QucGFjaygmIzM5OyFCQkhCQkhJSSYjMzk7LCAxMzQsIDAsIDAsIDY0LCAwLCBsaWZldGltZSwgMCwgMCkKJiM0MzsgICAgaWYgcmlvIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgcHJlZml4LCBwbGVuLCByaW9fbGlmZXRpbWUgPSByaW8KJiM0MzsgICAgICAgICMgUkZDIDQxOTEgcm91dGUgaW5mb3JtYXRpb24gb3B0aW9uLCAvNjQgcHJlZml4ICg4IGJ5dGVzKQomIzQzOyAgICAgICAgcmEgJiM0Mzs9IHN0cnVjdC5wYWNrKCYjMzk7IUJCQkJJJiMzOTssIDI0LCAyLCBwbGVuLCAwLCByaW9fbGlmZXRpbWUpCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClbOjhdCiYjNDM7ICAgIGlmIHBpbyBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgIHByZWZpeCwgcGxlbiwgdmFsaWRfbGZ0ID0gcGlvCiYjNDM7ICAgICAgICAjIFJGQyA0ODYxIHByZWZpeCBpbmZvcm1hdGlvbiBvcHRpb24sIG9uLWxpbmsgb25seSAoTCBzZXQsIEEgY2xlYXIpCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc3RydWN0LnBhY2soJiMzOTshQkJCQklJSSYjMzk7LCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeCkKJiM0MzsgICAgc29jay5zZW5kdG8ocmEsICgmIzM5O2ZmMDI6OjEmIzM5OywgMCwgMCwgaWZpbmRleCkpCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9yYV9yb3V0ZXJfc29jayhuc19yLCBpZm5hbWUpOgomIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKToKJiM0MzsgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQUFJPVE9fSUNNUFY2KQomIzQzOyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpCiYjNDM7ICAgICAgICBkZWZlcihzb2NrLmNsb3NlKQomIzQzOyAgICAgICAgcmV0dXJuIHNvY2ssIHNvY2tldC5pZl9uYW1ldG9pbmRleChpZm5hbWUpCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHdhbnQsICoqcmFfb3B0cyk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBTZW5kaW5nIGZhaWxzIHdpdGggRUFERFJOT1RBVkFJTCB3aGlsZSB0aGUgcm91dGVyJiMzOTtzIGxpbmstbG9jYWwKJiM0MzsgICAgYWRkcmVzcyBpcyBzdGlsbCB0ZW50YXRpdmUuIGFkZHJjb25mX2RhZF9zdGFydCgpIG9ubHkgcXVldWVzCiYjNDM7ICAgIGFkZHJjb25mX2RhZF93b3JrKCksIGFuZCBJRkFfRl9URU5UQVRJVkUgaXMgY2xlYXJlZCB3aGVuIHRoYXQgd29yawomIzQzOyAgICBpdGVtIHJ1bnMsIHNvIHJldHJ5IHVudGlsIGl0IGRvZXMuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBzZWVuID0ge30KJiM0MzsgICAgZm9yIF8gaW4gcmFuZ2UoMTApOgomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cykKJiM0MzsgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgomIzQzOyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKQomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7bmV3cm91dGUtbnRmJiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZXQoc2Vlbi5rZXlzKCkpLCBkZWFkbGluZT0yKSkKJiM0MzsgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6CiYjNDM7ICAgICAgICAgICAgYnJlYWsKJiM0MzsgICAgcmV0dXJuIHNlZW4KJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBSb3V0ZXMgd2l0aGRyYXduIGJ5IGEgemVyby1saWZldGltZSBSQSAocm91dGVyIGxpZmV0aW1lLCBSRkMgNDg2MQomIzQzOyAgICBQSU8sIFJGQyA0MTkxIFJJTykgcmVwb3J0IFJUQV9ERUxfUkVBU09OID09IHJhLXdpdGhkcmF3bi4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgICMgKHJ0bS1kc3QtbGVuLCBkc3QpOyB0aGUgZGVmYXVsdCByb3V0ZSBjYXJyaWVzIG5vIFJUQV9EU1QKJiM0MzsgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7KSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7KX0KJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjoKJiM0MzsgICAgICAgIGlwKGYmIzM0O2xpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfSYjMzQ7KQomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6CiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7Y29uZi92ZXRoMC9hY2NlcHRfcmEmIzM0OywgMikKJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtjb25mL3ZldGgwL2ZvcndhcmRpbmcmIzM0OywgMCkKJiM0MzsgICAgICAgICAgICB0cnk6CiYjNDM7ICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW4mIzM0OywgNjQpCiYjNDM7ICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgomIzQzOyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7bm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GTyYjMzQ7KQomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6CiYjNDM7ICAgICAgICAgICAgIyBza2lwIHRoZSBEQUQgcHJvYmUgc28gdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsIHNvdXJjZSBvbmx5CiYjNDM7ICAgICAgICAgICAgIyBoYXMgdG8gd2FpdCBmb3IgYWRkcmNvbmZfZGFkX3dvcmsoKSB0byBjbGVhciBJRkFfRl9URU5UQVRJVkUKJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtjb25mL3ZldGgxL2FjY2VwdF9kYWQmIzM0OywgMCkKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBzZXQgZGV2IHZldGgwIHVwJiMzNDssIG5zPXN0cihuc19oKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBzZXQgZGV2IHZldGgxIHVwJiMzNDssIG5zPXN0cihuc19yKSkKJiM0MzsKJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnNfaCkKJiM0MzsgICAgICAgIHNvY2ssIGlmaW5kZXggPSBfcmFfcm91dGVyX3NvY2sobnNfciwgJiMzNDt2ZXRoMSYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAgc2VlbiA9IF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHJvdXRlcywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZldGltZT0xODAwLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbz0oJiMzOTsyMDAxOmRiODo1OjomIzM5OywgNjQsIDYwMCksCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlvPSgmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7LCA2NCwgNjAwKSkKJiM0MzsgICAgICAgIGtzZnRfZXEoc2V0KHNlZW4pLCByb3V0ZXMsICYjMzQ7bm90IGFsbCBSQSByb3V0ZXMgd2VyZSBpbnN0YWxsZWQmIzM0OykKJiM0MzsgICAgICAgIGlmIHNldChzZWVuKSAhPSByb3V0ZXM6CiYjNDM7ICAgICAgICAgICAgcmV0dXJuCiYjNDM7CiYjNDM7ICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAwLCByaW89KCYjMzk7MjAwMTpkYjg6NTo6JiMzOTssIDY0LCAwKSwKJiM0MzsgICAgICAgICAgICAgICAgIHBpbz0oJiMzOTsyMDAxOmRiODo2OjomIzM5OywgNjQsIDApKQomIzQzOyAgICAgICAgc2VlbiA9IF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5Oywgcm91dGVzKQomIzQzOyAgICAgICAgZm9yIGtleSBpbiByb3V0ZXM6CiYjNDM7ICAgICAgICAgICAgYXR0cnMgPSBzZWVuLmdldChrZXkpCiYjNDM7ICAgICAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgZiYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciB7a2V5fSYjMzQ7KQomIzQzOyAgICAgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgmIzM5O2RlbC1yZWFzb24mIzM5OyksICYjMzk7cmEtd2l0aGRyYXduJiMzOTspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgQSBkZWxldGlvbiBwYXRoIHRoYXQgcmVjb3JkcyBubyBjYXVzZSAoaGVyZSBhIHVzZXJzcGFjZSByZXF1ZXN0KQomIzQzOyAgICBtdXN0IG5vdCBjYXJyeSBSVEFfREVMX1JFQVNPTiBhdCBhbGwuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6CiYjNDM7ICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15JiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGRldiBkdW1teTEgdXAmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7LTYgcm91dGUgYWRkIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxJiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0Oy02IHJvdXRlIGRlbCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MSYjMzQ7LCBucz1zdHIobnMpKQomIzQzOwomIzQzOyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5OywgNjQsICYjMzk7MjAwMTpkYjg6MTo6JiMzOTspCiYjNDM7ICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCAmIzM0O25vIFJUTV9ERUxST1VURSBmb3IgMjAwMTpkYjg6MTo6LzY0JiMzNDspCiYjNDM7ICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICBrc2Z0X25vdF9pbigmIzM5O2RlbC1yZWFzb24mIzM5OywgYXR0cnMsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDt1c2VyIGRlbGV0aW9uIG11c3Qgbm90IGNhcnJ5IGRlbC1yZWFzb24mIzM0OykKJiM0MzsKJiM0MzsKIGRlZiBtYWluKCkgLSZndDsgTm9uZToKLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pCiYjNDM7ICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LAomIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQsCiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLAomIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pCiAgICAga3NmdF9leGl0KCkKIAogaWYgX19uYW1lX18gPT0gJiMzNDtfX21haW5fXyYjMzQ7Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA1NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDcxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIENhbmRpZGF0ZTogSVB2NiBSb3V0ZSBEZWxldGlvbiBSZWFzb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdG8gcmV2aWV3LCBhbmQgdGhlIHRhc2sgaXMgdG8gZmlndXJlIG91dCBpZiBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUga2VybmVsIHRoYXQgd2FycmFudCBmdXp6aW5nLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgYSBidW5jaCBvZiBJUHY2IHJvdXRpbmcgY29kZSDigJMgYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sYCwgdmFyaW91cyBoZWFkZXIgZmlsZXMgKGBpcDZfZmliLmhgLCBgaXA2X3JvdXRlLmhgLCBgcnRuZXRsaW5rLmhgKSwgY29yZSBJUHY2IG5ldHdvcmsgZmlsZXMgKGBhZGRyY29uZi5jYCwgYGlwNl9maWIuY2AsIGBuZGlzYy5jYCwgYHJvdXRlLmNgKSwgYW5kIGV2ZW4gc29tZSBweXRob24gdGVzdHMuIFRoYXQmIzM5O3MgYSBzdHJvbmcgc2lnbmFsLCB0aGlzIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIGludGVyZXN0aW5nLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIHJldm9sdmVzIGFyb3VuZCBhZGRpbmcgYSBuZXcgTmV0bGluayBhdHRyaWJ1dGUsIGBSVEFfREVMX1JFQVNPTmAsIHNwZWNpZmljYWxseSBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLiBUaGV5JiMzOTtyZSBhZGRpbmcgYW4gYGVudW0gcnRfZGVsX3JlYXNvbmAgd2l0aCB2YWx1ZXMgdG8gc3BlY2lmeSB3aHkgdGhlIHJvdXRlIGlzIGJlaW5nIGRlbGV0ZWQ6IGBVTlNQRUNgLCBgRVhQSVJFRGAsIG9yIGBSQV9XSVRIRFJBV05gLiBUaGF0IGFsb25lIHRlbGxzIG1lIHRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHNpZ25pZmljYW50IG9uZSBhdCB0aGF0LiBJdCBhbHRlcnMgaG93IHdlIGNvbW11bmljYXRlIGFib3V0IHJvdXRlIGRlbGV0aW9ucyB0aHJvdWdoIE5ldGxpbmssIHdoaWNoIGlzIGNvcmUgdG8gdGhlIGNvbnRyb2wgcGxhbmUuCgpTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSwgYW5kIHNob3VsZCB3ZSBmdXp6IGl0PyBBYnNvbHV0ZWx5LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBJUHY2IHJvdXRlIGRlbGV0aW9ucyDigJMgdGhhdCYjMzk7cyBhICp2ZXJ5KiBjb21tb24gb3BlcmF0aW9uLiBSQSB3aXRoZHJhd2FsLCByb3V0ZSBleHBpcmF0aW9uLCBtYW51YWwgZGVsZXRpb24g4oCTIGFsbCBvZiB0aGVzZSBwYXRocyBub3cgbmVlZCB0byB0YWtlIHRoaXMgbmV3IGRlbGV0aW9uIHJlYXNvbiBpbnRvIGFjY291bnQuIFRoZSBwYXRjaCBpdHNlbGYgbW9kaWZpZXMgZnVuY3Rpb25zIGxpa2UgYGZpYjZfZGVsYCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYHJ0Nl9maWxsX25vZGVgLCBgaW5ldDZfcnRfbm90aWZ5YCwgaW1wbHlpbmcgdGhhdCBhIGdvb2QgcG9ydGlvbiBvZiB0aGUgSVB2NiBzdGFjayBpcyBiZWluZyBpbXBhY3RlZC4KCk5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzOiB3aGljaCBmdW5jdGlvbnMgc2hvdWxkIHdlIHByaW9yaXRpemUgZm9yIGZ1enppbmc/IExvb2tpbmcgYXQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBtb2RpZmllZCwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlOgoKKiAgIGBhZGRyY29uZl9wcmVmaXhfcmN2YAoqICAgYGZpYjZfZGVsYAoqICAgYGZpYjZfZGVsX3JvdXRlYAoqICAgYGZpYjZfY2xlYW5fbm9kZWAKKiAgIGBmaWI2X2djX3RhYmxlYAoqICAgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgCiogICBgcnQ2X3JvdXRlX3JjdmAKKiAgIGBpcDZfZGVsX3J0X3JlYXNvbmAKKiAgIGBfX2lwNl9kZWxfcnRgCiogICBgaXA2X2RlbF9ydGAKKiAgIGBfX2lwNl9kZWxfcnRfc2libGluZ3NgCiogICBgaXA2X3JvdXRlX2RlbGAKKiAgIGBydDZfbmxtc2dfc2l6ZWAKKiAgIGBydDZfZmlsbF9ub2RlYAoqICAgYHJ0Nl9uaF9kdW1wX2V4Y2VwdGlvbnNgCiogICBgcnQ2X2R1bXBfcm91dGVgCiogICBgaW5ldDZfcnRtX2dldHJvdXRlYAoqICAgYF9faW5ldDZfcnRfbm90aWZ5YAoqICAgYGluZXQ2X3J0X25vdGlmeWAKKiAgIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YAoqICAgYGZpYjZfcnRfdXBkYXRlYAoqICAgYGZpYjZfaW5mb19od19mbGFnc19zZXRgCgpOYXJyb3dpbmcgdGhpcyBmdXJ0aGVyLCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGUgc3BlY2lmaWMgc3ltYm9sczogYGlwNl9kZWxfcnRfcmVhc29uYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgLCBgcnQ2X2ZpbGxfbm9kZWAsIGFuZCBgcnQ2X25sbXNnX3NpemVgLiBUaGV5IGFyZSBjbGVhcmx5IGNyaXRpY2FsIGZvciBoYW5kbGluZyBhbmQgY29uc3RydWN0aW5nIHRoZSBuZXcgTmV0bGluayBtZXNzYWdlcy4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJIGFscmVhZHkga25vdyB0aGF0IGBDT05GSUdfSVBWNmAgaXMgcmVxdWlyZWQsIHdoaWNoIGlzIGEgZ2l2ZW4sIGJ1dCB0aGVyZeKAmXMgYSByZWZlcmVuY2UgdG8gYENPTkZJR19JUFY2X1JPVVRFX0lORk9gIGluIHRoZSB0ZXN0cy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYG5ldC9pcHY2L0tjb25maWdgIHRvIHNlZSB3aGF0IHRoYXQgYWN0dWFsbHkgY29udHJvbHMgYW5kIGlmIGl0JiMzOTtzIG5lY2Vzc2FyeSBmb3IgdGhpcyBwYXRjaCB0byB3b3JrLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGlzIHNldCB1cCBjb3JyZWN0bHkuCgpJbiBzaG9ydCwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFdlIGhhdmUgYSBuZXcgTmV0bGluayBhdHRyaWJ1dGUgYmVpbmcgYWRkZWQsIGFuZCB0aGF0IG1lYW5zIG5ldyBjb2RlIHBhdGhzLCBhbmQgbmV3IGxvZ2ljIGZvciBtZXNzYWdlIGNvbnN0cnVjdGlvbiwgYW5kIElQdjYgcm91dGluZyBvcGVyYXRpb25zIOKAkyBhbGwgb2Ygd2hpY2ggbmVlZHMgdG8gYmUgcmlnb3JvdXNseSB0ZXN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDE6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfUk9VVEVfSU5GTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz0yMT1jb25maWcgSVBWNl9ST1VURVJfUFJFRlxuLS1cbm5ldC9pcHY2L0tjb25maWctMzAtXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L0tjb25maWctMzItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAxOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODAyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgeW91ciBzdW1tYXJ5OgoKKipEaWdnaW5nIERlZXBlciBpbnRvIElQdjYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCwgZXNwZWNpYWxseSB3aXRoIElQdjYuIEkga25vdyB0aGUgYmFzaWNzLCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBMZXQmIzM5O3Mgbm90IGp1c3QgYXNzdW1lIEkmIzM5O3ZlIGNvdmVyZWQgYWxsIHRoZSBiYXNlcy4gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZvciBgSVBWNl9ST1VURVJfUFJFRmAuIFRoYXQgc2V0dGluZyYjMzk7cyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSByb3V0ZXIgcHJpb3JpdGl6ZXMgSVB2NiByb3V0ZXMsIGFuZCBpdCBjb3VsZCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgYW55IGNvbm5lY3Rpdml0eSBpc3N1ZXMgb3IgdW5leHBlY3RlZCByb3V0aW5nIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nLiBJdCYjMzk7cyB0b28gZWFzeSB0byBvdmVybG9vayB0aGUgZmluZXIgcG9pbnRzIHdoZW4geW91JiMzOTtyZSBmb2N1c2luZyBvbiB0aGUgZ2VuZXJhbCBzZXR1cC4gVGhpcyBjb3VsZCBleHBsYWluIGEgbG90LiBUaGlzIHNldHRpbmcgaXMgZnJlcXVlbnRseSBtaXNzZWQsIGFuZCBzaG91bGQgYWx3YXlzIGJlIGNvbnNpZGVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDE6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMTpcdGNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXG4gIDIyOlx0XHRib29sIFwmIzM0O0lQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBSb3V0ZXIgUHJlZmVyZW5jZSBpcyBhbiBvcHRpb25hbCBleHRlbnNpb24gdG8gdGhlIFJvdXRlclxuICAyNTpcdFx0ICBBZHZlcnRpc2VtZW50IG1lc3NhZ2Ugd2hpY2ggaW1wcm92ZXMgdGhlIGFiaWxpdHkgb2YgaG9zdHNcbiAgMjY6XHRcdCAgdG8gcGljayBhbiBhcHByb3ByaWF0ZSByb3V0ZXIsIGVzcGVjaWFsbHkgd2hlbiB0aGUgaG9zdHNcbiAgMjc6XHRcdCAgYXJlIHBsYWNlZCBpbiBhIG11bHRpLWhvbWVkIG5ldHdvcmsuXG4gIDI4Olx0XG4gIDI5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDMwOlx0XG4gIDMxOlx0Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xuICAzMjpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbiAgMzM6XHRcdGRlcGVuZHMgb24gSVBWNl9ST1VURVJfUFJFRlxuICAzNDpcdFx0aGVscFxuICAzNTpcdFx0ICBTdXBwb3J0IG9mIFJvdXRlIEluZm9ybWF0aW9uLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzODpcdFxuICAzOTpcdGNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXG4gIDQwOlx0XHRib29sIFwmIzM0O0lQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAxOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mjk0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgSVB2NiBSb3V0ZSBDb25maWd1cmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIElQdjYgcm91dGluZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYElQVjZfUk9VVEVfSU5GT2Agd2hpY2ggYXBwZWFycyB0byBiZSBsaW5rZWQgdG8gYElQVjZfUk9VVEVSX1BSRUZgLiBBbmQgb2YgY291cnNlLCB0aGUgdXNlIG9mIGBJUFY2YCBpcyBmdW5kYW1lbnRhbCB0byBhbGwgb2YgdGhpcy4KCkkmIzM5O20gZ2V0dGluZyB0aGUgc2Vuc2UgdGhlcmUgYXJlIGxpa2VseSBvdGhlciBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCBoZXJlLCBzbyBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIHRob3NlLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHRvdWNoaW5nIGNvcmUgSVB2NiBjb21wb25lbnRzOiBgbmV0L2lwdjYvYWRkcmNvbmYuY2AsIGBuZXQvaXB2Ni9pcDZfZmliLmNgLCBgbmV0L2lwdjYvbmRpc2MuY2AsIGFuZCBgbmV0L2lwdjYvcm91dGUuY2AuIFNvIHdlIGFyZSBkZWFsaW5nIHdpdGggcHJldHR5IGZ1bmRhbWVudGFsIGZ1bmN0aW9uYWxpdHkuCgpOb3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgdGhhdCB3aWxsIHRlbGwgdGhlIGNvcmUgc3Rvcnk6IHNwZWNpZmljYWxseSwgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBgaXA2X2RlbF9ydF9yZWFzb25gLCBgaW5ldDZfcnRfZGVsX25vdGlmeWAsIGBydDZfZmlsbF9ub2RlYCwgYW5kIGBydDZfbmxtc2dfc2l6ZWAuIFRoZXkgc2hvdWxkIHByb3ZpZGUgY29udGV4dCBmb3Igd2hhdCYjMzk7cyBnb2luZyBvbi4KCkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgcnQ2X2ZpbGxfbm9kZWAgaXMgbm90IHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydDZfZmlsbF9ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jPTEwOT1zdGF0aWMgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHN0cnVjdCBmaWI2X2luZm8gKmY2aSk7XG5uZXQvaXB2Ni9yb3V0ZS5jOjExMDpzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjYvcm91dGUuYy0xMTEtXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxubmV0L2lwdjYvcm91dGUuYz00MDE2PXN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTQwMzctXG5uZXQvaXB2Ni9yb3V0ZS5jOjQwMzg6XHRcdFx0aWYgKHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLFxubmV0L2lwdjYvcm91dGUuYy00MDM5LVx0XHRcdFx0XHQgIE5VTEwsIE5VTEwsIDAsIFJUTV9ERUxST1VURSxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTU3MTE9c3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpXG4tLVxubmV0L2lwdjYvcm91dGUuYy01NzU3LVxubmV0L2lwdjYvcm91dGUuYzo1NzU4OnN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZV9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXh0aG9wICpuaCxcbm5ldC9pcHY2L3JvdXRlLmMtNTc1OS1cdFx0XHRcdCB1bnNpZ25lZCBjaGFyICpmbGFncylcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTU3ODYtXG5uZXQvaXB2Ni9yb3V0ZS5jOjU3ODc6c3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3JvdXRlLmMtNTc4OC1cdFx0XHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTU5NDAtXHRcdGlmIChSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX25leHRob3BfY29tcGF0X21vZGUpIFx1MDAyNlx1MDAyNlxubmV0L2lwdjYvcm91dGUuYzo1OTQxOlx0XHQgICAgcnQ2X2ZpbGxfbm9kZV9uZXh0aG9wKHNrYiwgcnQtXHUwMDNlbmgsIFx1MDAyNm5oX2ZsYWdzKSBcdTAwM2MgMClcbm5ldC9pcHY2L3JvdXRlLmMtNTk0Mi1cdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTYwMzY9c3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNjA3MC1cbm5ldC9pcHY2L3JvdXRlLmM6NjA3MTpcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKGR1bXAtXHUwMDNlbmV0LCBkdW1wLVx1MDAzZXNrYiwgdy1cdTAwM2VydCxcbm5ldC9pcHY2L3JvdXRlLmMtNjA3Mi1cdFx0XHRcdFx0ICAgIFx1MDAyNnJ0Nl9leC1cdTAwM2VydDZpLVx1MDAzZWRzdCwgTlVMTCwgTlVMTCwgMCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTYwODk9aW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApXG4tLVxubmV0L2lwdjYvcm91dGUuYy02MTIwLVx0XHR9IGVsc2Uge1xubmV0L2lwdjYvcm91dGUuYzo2MTIxOlx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgYXJnLVx1MDAzZXNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsXG5uZXQvaXB2Ni9yb3V0ZS5jLTYxMjItXHRcdFx0XHRcdCAgMCwgUlRNX05FV1JPVVRFLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NjIzMj1zdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTYzNTQtXHRcdGlmIChmaWJtYXRjaClcbm5ldC9pcHY2L3JvdXRlLmM6NjM1NTpcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLFxubmV0L2lwdjYvcm91dGUuYy02MzU2LVx0XHRcdFx0XHQgICAgaWlmLCBSVE1fTkVXUk9VVEUsXG4tLVxubmV0L2lwdjYvcm91dGUuYy02MzYwLVx0XHRlbHNlXG5uZXQvaXB2Ni9yb3V0ZS5jOjYzNjE6XHRcdFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgZHN0LCBcdTAwMjZmbDYuZGFkZHIsXG5uZXQvaXB2Ni9yb3V0ZS5jLTYzNjItXHRcdFx0XHRcdCAgICBcdTAwMjZmbDYuc2FkZHIsIGlpZiwgUlRNX05FV1JPVVRFLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NjM4MT1zdGF0aWMgdm9pZCBfX2luZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNjQwMC1cbm5ldC9pcHY2L3JvdXRlLmM6NjQwMTpcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxubmV0L2lwdjYvcm91dGUuYy02NDAyLVx0XHRcdCAgICBldmVudCwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLCBkZWxfcmVhc29uKTtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTY0MzU9dm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNjQ0NS1cbm5ldC9pcHY2L3JvdXRlLmM6NjQ0NjpcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxubmV0L2lwdjYvcm91dGUuYy02NDQ3LVx0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsXG4tLVxubmV0L2lwdjYvcm91dGUuYz02NDYyPXZvaWQgZmliNl9pbmZvX2h3X2ZsYWdzX3NldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTY0OTktXG5uZXQvaXB2Ni9yb3V0ZS5jOjY1MDA6XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCxcbm5ldC9pcHY2L3JvdXRlLmMtNjUwMS1cdFx0XHQgICAgMCwgMCwgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAxOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjE2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKlJvdXRlIFRhYmxlIE1haW50ZW5hbmNlIC0gU3RhdGljIHZzLiBEeW5hbWljIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Ugcm91dGUgdGFibGUgZnVuY3Rpb25zIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgYW5kIGFjY2VzcyBsZXZlbHMuIGBydDZfZmlsbF9ub2RlYCBpcyBkZWZpbmVkIGFzIHN0YXRpYywgbWVhbmluZyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQgbWFrZXMgc2Vuc2UgZm9yIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMsIG5vdCBzb21ldGhpbmcgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZS4gSG93ZXZlciwgYGlwNl9kZWxfcnRfcmVhc29uYCBhbmQgYGluZXQ2X3J0X2RlbF9ub3RpZnlgIGFyZSBkZWZpbmVkIGFzICpleHBvcnRlZCosIG9yIG5vbi1zdGF0aWMsIGZ1bmN0aW9ucy4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBpbnRlbmRlZCB0byBiZSBjYWxsYWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEZpbmFsbHksIGBydDZfbmxtc2dfc2l6ZWAgaXMgc3RhdGljLCB3aGljaCBpcyBwcm9iYWJseSB1c2VkIHRvIHNpemUgdGhlIG5ldGxpbmsgbWVzc2FnZSBmb3IgdGhlIHJvdXRlLgoKR2l2ZW4gdGhpcyBpbml0aWFsIG9ic2VydmF0aW9uIGFib3V0IHRoZSBkaWZmZXJlbmNlIGluIHNjb3BpbmcsIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlc2UgZXhwb3J0ZWQgZnVuY3Rpb25zLCBgaXA2X2RlbF9ydF9yZWFzb25gIGFuZCBgaW5ldDZfcnRfZGVsX25vdGlmeWAsIGEgYml0IG1vcmUgY2xvc2VseSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZWlyIHB1cnBvc2Ugd2l0aGluIHRoZSBvdmVyYWxsIHJvdXRpbmcgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBtaWdodCBiZSBsZXZlcmFnaW5nIHRoZXNlIHBhcnRpY3VsYXIgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYz05NzA9aW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTEwMjItXHRpZiAocnQgXHUwMDI2XHUwMDI2ICFsaWZldGltZSkge1xubmV0L2lwdjYvcm91dGUuYzoxMDIzOlx0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG5uZXQvaXB2Ni9yb3V0ZS5jLTEwMjQtXHRcdHJ0ID0gTlVMTDtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTM5OTg9aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTQwMDctXG5uZXQvaXB2Ni9yb3V0ZS5jOjQwMDg6aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG5uZXQvaXB2Ni9yb3V0ZS5jLTQwMDktXHRcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNvbnNpZGVyaW5nIElQdjYgUm91dGluZyBUYWJsZSBVcGRhdGVzKioKCkhtbSwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcm91dGluZywgYW5kIHNwZWNpZmljYWxseSB0aGUgaW1wbGljYXRpb25zIG9mIGEgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgYmVoYXZpb3Igb2YgYGluZXQ2X3J0X2RlbF9ub3RpZnlgIGluIHRoaXMgc2NlbmFyaW8/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgZXhhY3QgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uLiBEb2VzIGl0IGRpcmVjdGx5IHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZm9yd2FyZGluZyBpbmZvcm1hdGlvbiBiYXNlIChGSUIpLCBvciBkb2VzIGl0IHNpZ25hbCBzb21lIG90aGVyIGNvbXBvbmVudD8gSSBuZWVkIHRvIGNvbnNpZGVyIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBJUHY2IHN0YWNrLCBpbmNsdWRpbmcgaW50ZXJhY3Rpb25zIHdpdGggbmVpZ2hib3IgZGlzY292ZXJ5LCBwcmVmaXggZGVsZWdhdGlvbiwgYW5kIHJvdXRlIGNhY2hpbmcuIEkgYWxzbyBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGxvY2tpbmcgd2l0aGluIHRoZSByb3V0aW5nIHRhYmxlIHVwZGF0ZSBwcm9jZXNzLiBBcmUgd2UgY29uc2lkZXJpbmcgYSBzY2VuYXJpbyBpbnZvbHZpbmcgZHluYW1pYyByb3V0aW5nIHByb3RvY29scz8gVGhlIGltcGxpY2F0aW9ucyBtaWdodCBkaWZmZXIgc2lnbmlmaWNhbnRseSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGlzIGEgc3RhdGljIHJvdXRlIGRlbGV0aW9uLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IGxpa2UgYSBCR1Agcm91dGUgd2l0aGRyYXdhbC4gTGV0JiMzOTtzIGRlbHZlIGRlZXBlciBpbnRvIHRoaXMgYXNwZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jPTY0MjM9dm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tLVxubmV0L2lwdjYvcm91dGUuYy02NDI4LVxubmV0L2lwdjYvcm91dGUuYzo2NDI5OnZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG5uZXQvaXB2Ni9yb3V0ZS5jLTY0MzAtXHRcdFx0IGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIyMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipUaGlua2luZyBUaHJvdWdoIEZ1bmN0aW9uIE11dGFiaWxpdHkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCBwb3RlbnRpYWwgZnVuY3Rpb24gc2lkZSBlZmZlY3RzLCBwYXJ0aWN1bGFybHkgZm9jdXNpbmcgb24gaG93IGR5bmFtaWMgdGhleSByZWFsbHkgYXJlLiBUaGUgY29kZSBhcHBlYXJzIHRvIHVzZSBgZmliNl9kZWxgIHdoaWNoIGhhcyBiZWVuIG1vZGlmaWVkLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGJleW9uZCB0aGlzLCBhbSBJIG1pc3NpbmcgYW55IG90aGVyIHBsYWNlcyB3aGVyZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWwgc3RhdGUgbWlnaHQgYmUgYWx0ZXJlZD8gSSBoYXZlIHRvIGJlIGV4aGF1c3RpdmUgaGVyZSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZnVuY3Rpb24gc3RhdGUgY2hhbmdlcyBpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZXJlIGNvdWxkIGJlIGhpZGRlbiBtdXRhYmxlIHN0YXRlLiBJZiBJIG1pc3MgZXZlbiBvbmUgcG9pbnQsIHRoaXMgb3ZlcnNpZ2h0IHdvdWxkIHVuZGVybWluZSBteSBlbnRpcmUgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAxOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYjZfZGVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2ZpYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9maWIuYz0xODQxPXN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTk2OC1cbm5ldC9pcHY2L2lwNl9maWIuYzoxOTY5OnN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTk3MC1cdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjA2NS0vKiBOZWVkIHRvIG93biB0YWJsZS1cdTAwM2V0YjZfbG9jayAqL1xubmV0L2lwdjYvaXA2X2ZpYi5jOjIwNjY6aW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDY3LVx0ICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjA5NS1cdFx0XHRcdGZpYjZfcm91dGVzX3JlcXVpcmVfc3JjX2RlYyhpbmZvLVx1MDAzZW5sX25ldCk7XG5uZXQvaXB2Ni9pcDZfZmliLmM6MjA5NjpcdFx0XHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbywgZGVsX3JlYXNvbik7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjA5Ny1cdFx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjEwNy0gKlx0Q2VydGFpbmx5LCBpdCBpcyBub3QgaW50ZXJydXB0IHNhZmUuXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjEwODogKlx0SG93ZXZlciwgaXQgaXMgaW50ZXJuYWxseSByZWVudGVyYWJsZSB3cnQgaXRzZWxmIGFuZCBmaWI2X2FkZC9maWI2X2RlbC5cbm5ldC9pcHY2L2lwNl9maWIuYy0yMTA5LSAqXHRJdCBtZWFucywgdGhhdCB3ZSBjYW4gbW9kaWZ5IHRyZWUgZHVyaW5nIHdhbGtpbmdcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjIzND1zdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyNTctXHRcdFx0dy1cdTAwM2VsZWFmID0gcnQ7XG5uZXQvaXB2Ni9pcDZfZmliLmM6MjI1ODpcdFx0XHRyZXMgPSBmaWI2X2RlbChydCwgXHUwMDI2aW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTIyNTktXHRcdFx0aWYgKHJlcykge1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yMzkzPXN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNDA1LVx0XHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI0MDY6XHRcdFx0ZmliNl9kZWwocnQsIFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fRVhQSVJFRCk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQwNy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAxOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTM3CgkJCQkJCQlvdXRwdXQ6IDE0NAoJCQkJCQkJdGhvdWdodHM6IDM5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBJUHY2IFJvdXRlIERlbGV0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgZmliNl9kZWxgIGlzbiYjMzk7dCBkZWNsYXJlZCBgc3RhdGljYCwgd2hpY2ggaXMgaW1wb3J0YW50IGNvbnRleHQuCgpNeSBjb3JlIGZvY3VzIGhlcmUgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgcmVsZXZhbnQgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBJUHY2IHJvdXRlIGRlbGV0aW9uLiBNeSBrZXkgc3ltYm9scyBhcmU6IGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCwgYW5kIGBmaWI2X2RlbGAuCgpOb3csIHJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgdGhlIGVzc2VudGlhbCBvbmVzIGFyZSBjbGVhcmx5IGBJUFY2YCwgYnV0IEkgbmVlZCB0byBjb25zaWRlciBvdGhlcnMuIGBJUFY2X1JPVVRFUl9QUkVGYCBhbmQgYElQVjZfUk9VVEVfSU5GT2AgYXJlIHNwZWNpZmljIGZvciB0ZXN0aW5nIFJvdXRlIEluZm9ybWF0aW9uIE9wdGlvbnMgKFJJT3MpIGluIHRoZSBQeXRob24gdGVzdCBzdWl0ZSwgc3BlY2lmaWNhbGx5IGZvciB0aGUgYFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOYCByZWFzb24uIEhvd2V2ZXIsIHRoZSBmb3VuZGF0aW9uYWwgYFJUQV9ERUxfUkVBU09OYCBmdW5jdGlvbmFsaXR5IGFjdHVhbGx5IHdvcmtzIHdpdGhvdXQgdGhvc2UgZmxhZ3MgLSBmb3IgdGhpbmdzIGxpa2UgZXhwaXJlZCByb3V0ZXMgb3IgcmVndWxhciBSb3V0ZXIgQWR2ZXJ0aXNlbWVudHMuIEl04oCZcyBkZWZpbml0ZWx5IGJlbmVmaWNpYWwgdG8gaGF2ZSB0aG9zZSBjb25maWdzIGVuYWJsZWQgZm9yIHRob3JvdWdoIHRlc3Rpbmcgb2YgdGhlIFJJTyBhc3BlY3RzIHRob3VnaC4gU28gdGhleSBhcmUgaW1wb3J0YW50IGZvciBjb21wbGV0ZW5lc3MuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBhbnkgb3RoZXIgY29uZmlncyBhcmUgcmVsZXZhbnQuIGBDT05GSUdfTkVUYCBpcyBhIGdpdmVuLCBidXQgd2hhdCBhYm91dCBgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTYD8gSSBkb24mIzM5O3QgdGhpbmsgdGhhdCYjMzk7cyBzdHJpY3RseSByZXF1aXJlZCBmb3IgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LgoKTmV4dCwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgc2lnbmF0dXJlcyBvZiB0aGVzZSBrZXkgZnVuY3Rpb25zIHRvIGVuc3VyZSB0aGV5IGFsaWduIHdpdGggbXkgdW5kZXJzdGFuZGluZy4KCiogICBgZmliNl9kZWxgOiBgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pYCAtIExvb2tzIGdvb2QuCiogICBgaXA2X2RlbF9ydF9yZWFzb25gOiBgaW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKWAgLSBBbHNvIGdvb2QuCiogICBgaW5ldDZfcnRfZGVsX25vdGlmeWA6IGB2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilgIC0gQ29ycmVjdC4KCkFscmlnaHQsIHRoZXNlIGZvY3VzIHN5bWJvbHMgYXJlIGFsbCBhbGlnbmVkIHdpdGggdGhlIGV4cGVjdGVkIGludGVyZmFjZXMuIEkmIzM5O20gbm93IHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDE6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURVJfUFJFRiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFX0lORk8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDssCiAgICAmIzM0O2ZpYjZfZGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgUlRBX0RFTF9SRUFTT04gZm9yIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucywgbW9kaWZ5aW5nIGNvcmUgSVB2NiByb3V0aW5nIGFuZCBuZXRsaW5rIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpcyByZWFjaGFibGUgdmlhIHJvdXRlIGV4cGlyYXRpb24sIHJvdXRlciBhZHZlcnRpc2VtZW50cywgYW5kIG1hbnVhbCByb3V0ZSBkZWxldGlvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURVJfUFJFRiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFX0lORk8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDssCiAgICAmIzM0O2ZpYjZfZGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgUlRBX0RFTF9SRUFTT04gZm9yIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucywgbW9kaWZ5aW5nIGNvcmUgSVB2NiByb3V0aW5nIGFuZCBuZXRsaW5rIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpcyByZWFjaGFibGUgdmlhIHJvdXRlIGV4cGlyYXRpb24sIHJvdXRlciBhZHZlcnRpc2VtZW50cywgYW5kIG1hbnVhbCByb3V0ZSBkZWxldGlvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAxOjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDE6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIHRvIHJlcG9ydCB0aGUgcmVhc29uIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9ucy4gVGhlIGRlbGV0aW9uIHJlYXNvbiBpcyBwYXNzZWQgdGhyb3VnaCB0aGUgcm91dGluZyBzdWJzeXN0ZW0gYXMgYW4gZXhwbGljaXQgYGVudW0gcnRfZGVsX3JlYXNvbmAgdmFsdWUgKGUuZy4sIGBSVF9ERUxfUkVBU09OX1VOU1BFQ2AsIGBSVF9ERUxfUkVBU09OX0VYUElSRURgLCBgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV05gKS4gVGhpcyB2YWx1ZSBpcyB0aGVuIHNlcmlhbGl6ZWQgaW50byB0aGUgbmV0bGluayBtZXNzYWdlIHVzaW5nIGBubGFfcHV0X3UzMigpYC4gXG5cblNpbmNlIHRoZSBgZGVsX3JlYXNvbmAgaXMgcGFzc2VkIGJ5IHZhbHVlIGFzIGFuIGV4cGxpY2l0IGNvbnN0YW50IGluIGFsbCBtb2RpZmllZCBjYWxsIHNpdGVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSBzdGFjaywgaGVhcCwgb3IgcGFkZGluZyBieXRlcy4gVGhlIG5ldGxpbmsgYXR0cmlidXRlIGNvbnN0cnVjdGlvbiB2aWEgYG5sYV9wdXRfdTMyKClgIHNhZmVseSBoYW5kbGVzIHRoZSBzZXJpYWxpemF0aW9uIHdpdGhvdXQgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAobGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSBpbiB0aGlzIGNvZGUsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YjQ0NWJkMDJmNGY4ODQ5N2ViZGFkOTE4Nzk4YjhjODNkMTk2YTkxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgOCAwMToyMDoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKaW5kZXggMzMxOTVkYjk2NzQ2Yy4uMjUzMDM3ZWE1MTc2YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKQEAgLTc4LDYgJiM0Mzs3OCwyNyBAQCBkZWZpbml0aW9uczoKICAgICAgIC0KICAgICAgICAgbmFtZTogcnRhLXVzZWQKICAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IGRlbC1yZWFzb24KJiM0MzsgICAgdHlwZTogZW51bQomIzQzOyAgICBuYW1lLXByZWZpeDogcnQtZGVsLXJlYXNvbi0KJiM0MzsgICAgZW51bS1uYW1lOiBydC1kZWwtcmVhc29uCiYjNDM7ICAgIGRvYzogfAomIzQzOyAgICAgIFdoeSB0aGUga2VybmVsIGRlbGV0ZWQgYSByb3V0ZS4gTmV3IGNhdXNlcyBtYXkgYmUgYXBwZW5kZWQuIFRoZQomIzQzOyAgICAgIHZhbHVlIHNwYWNlIGlzIGZhbWlseS1hZ25vc3RpYywgYSB2YWx1ZSBpcyBuZXZlciByZWludGVycHJldGVkCiYjNDM7ICAgICAgcGVyIGFkZHJlc3MgZmFtaWx5LgomIzQzOyAgICBlbnRyaWVzOgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHVuc3BlYwomIzQzOyAgICAgICAgZG9jOiBUaGUgZGVsZXRpb24gcGF0aCBkb2VzIG5vdCByZWNvcmQgYSBjYXVzZS4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBleHBpcmVkCiYjNDM7ICAgICAgICBkb2M6IFRoZSBSVEZfRVhQSVJFUyBsaWZldGltZSByYW4gb3V0IGFuZCB0aGUgcm91dGUgd2FzIGdhcmJhZ2UKJiM0MzsgICAgICAgICAgY29sbGVjdGVkLgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHJhLXdpdGhkcmF3bgomIzQzOyAgICAgICAgZG9jOiBBIFJvdXRlciBBZHZlcnRpc2VtZW50IHdpdGhkcmV3IHRoZSByb3V0ZSB3aXRoIGEgemVybwomIzQzOyAgICAgICAgICBsaWZldGltZS4KIAogYXR0cmlidXRlLXNldHM6CiAgIC0KQEAgLTE4NSw2ICYjNDM7MjA2LDE4IEBAIGF0dHJpYnV0ZS1zZXRzOgogICAgICAgICB0eXBlOiB1MzIKICAgICAgICAgYnl0ZS1vcmRlcjogYmlnLWVuZGlhbgogICAgICAgICBkaXNwbGF5LWhpbnQ6IGhleAomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGRlbC1yZWFzb24KJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZW51bTogZGVsLXJlYXNvbgomIzQzOyAgICAgICAgZG9jOiB8CiYjNDM7ICAgICAgICAgIEVtaXR0ZWQgb25seSBvbiBSVE1fREVMUk9VVEUgbm90aWZpY2F0aW9ucywgYW5kIG9ubHkgd2hlbiB0aGUKJiM0MzsgICAgICAgICAgZGVsZXRpb24gcGF0aCByZWNvcmRzIGEgY2F1c2UuIEFuIGFic2VudCBhdHRyaWJ1dGUgbWVhbnMKJiM0MzsgICAgICAgICAgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdAomIzQzOyAgICAgICAgICByZWNvcmQgaXRzIGNhdXNlLCBjb25zdW1lcnMgbXVzdCB0cmVhdCBhYnNlbnQgYW5kIHVuc3BlYwomIzQzOyAgICAgICAgICBpZGVudGljYWxseS4gQ3VycmVudGx5IG9ubHkgSVB2NiBkZWxldGlvbiBwYXRocyByZWNvcmQgYQomIzQzOyAgICAgICAgICBjYXVzZS4gVGhlIGF0dHJpYnV0ZSBpcyBub3RpZmljYXRpb24tb25seSwgdGhlIGtlcm5lbCByZWplY3RzCiYjNDM7ICAgICAgICAgIGl0IGluIHJlcXVlc3RzLgogICAtCiAgICAgbmFtZTogbWV0cmljcwogICAgIG5hbWUtcHJlZml4OiBydGF4LQpAQCAtMjk5LDYgJiM0MzszMzIsNyBAQCBvcGVyYXRpb25zOgogICAgICAgICAgICAgLSBkcG9ydAogICAgICAgICAgICAgLSBuaC1pZAogICAgICAgICAgICAgLSBmbG93bGFiZWwKJiM0MzsgICAgICAgICAgICAtIGRlbC1yZWFzb24KICAgICAgIGR1bXA6CiAgICAgICAgIHJlcXVlc3Q6CiAgICAgICAgICAgdmFsdWU6IDI2CkBAIC0zMTMsNyAmIzQzOzM0NywzNSBAQCBvcGVyYXRpb25zOgogICAgICAgZG86CiAgICAgICAgIHJlcXVlc3Q6CiAgICAgICAgICAgdmFsdWU6IDI0Ci0gICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRycwomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOiAmYW1wO3JvdXRlLXJlcS1hdHRycwomIzQzOyAgICAgICAgICAgIC0gZHN0CiYjNDM7ICAgICAgICAgICAgLSBzcmMKJiM0MzsgICAgICAgICAgICAtIGlpZgomIzQzOyAgICAgICAgICAgIC0gb2lmCiYjNDM7ICAgICAgICAgICAgLSBnYXRld2F5CiYjNDM7ICAgICAgICAgICAgLSBwcmlvcml0eQomIzQzOyAgICAgICAgICAgIC0gcHJlZnNyYwomIzQzOyAgICAgICAgICAgIC0gbWV0cmljcwomIzQzOyAgICAgICAgICAgIC0gbXVsdGlwYXRoCiYjNDM7ICAgICAgICAgICAgLSBmbG93CiYjNDM7ICAgICAgICAgICAgLSBjYWNoZWluZm8KJiM0MzsgICAgICAgICAgICAtIHRhYmxlCiYjNDM7ICAgICAgICAgICAgLSBtYXJrCiYjNDM7ICAgICAgICAgICAgLSBtZmMtc3RhdHMKJiM0MzsgICAgICAgICAgICAtIHZpYQomIzQzOyAgICAgICAgICAgIC0gbmV3ZHN0CiYjNDM7ICAgICAgICAgICAgLSBwcmVmCiYjNDM7ICAgICAgICAgICAgLSBlbmNhcC10eXBlCiYjNDM7ICAgICAgICAgICAgLSBlbmNhcAomIzQzOyAgICAgICAgICAgIC0gZXhwaXJlcwomIzQzOyAgICAgICAgICAgIC0gcGFkCiYjNDM7ICAgICAgICAgICAgLSB1aWQKJiM0MzsgICAgICAgICAgICAtIHR0bC1wcm9wYWdhdGUKJiM0MzsgICAgICAgICAgICAtIGlwLXByb3RvCiYjNDM7ICAgICAgICAgICAgLSBzcG9ydAomIzQzOyAgICAgICAgICAgIC0gZHBvcnQKJiM0MzsgICAgICAgICAgICAtIG5oLWlkCiYjNDM7ICAgICAgICAgICAgLSBmbG93bGFiZWwKICAgICAtCiAgICAgICBuYW1lOiBkZWxyb3V0ZQogICAgICAgZG9jOiBEZWxldGUgYW4gZXhpc3Rpbmcgcm91dGUKQEAgLTMyMSw0ICYjNDM7MzgzLDIzIEBAIG9wZXJhdGlvbnM6CiAgICAgICBkbzoKICAgICAgICAgcmVxdWVzdDoKICAgICAgICAgICB2YWx1ZTogMjUKLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzCiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6ICpyb3V0ZS1yZXEtYXR0cnMKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZgomIzQzOyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS4KJiM0MzsgICAgICB2YWx1ZTogMjQKJiM0MzsgICAgICBub3RpZnk6IGdldHJvdXRlCiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBkZWxyb3V0ZS1udGYKJiM0MzsgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuCiYjNDM7ICAgICAgdmFsdWU6IDI1CiYjNDM7ICAgICAgbm90aWZ5OiBnZXRyb3V0ZQomIzQzOwomIzQzO21jYXN0LWdyb3VwczoKJiM0MzsgIGxpc3Q6CiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGUKJiM0MzsgICAgICB2YWx1ZTogNwomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlCiYjNDM7ICAgICAgdmFsdWU6IDExCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmgKaW5kZXggOWNkMjdlMWI5YjY5Mi4uMjMyMjg5YjQzOWMzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaApAQCAtNDY4LDcgJiM0Mzs0NjgsOCBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwKIAogaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCSAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7Ci1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTsKJiM0MztpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTsKIAogc3RhdGljIGlubGluZQogdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKQpAQCAtNTMyLDYgJiM0Mzs1MzMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwKICNlbmRpZgogdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiAJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0Mzt2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkJCSBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7CiAKIHZvaWQgZmliNl9hZ2VfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncywKIAkJCSB1bnNpZ25lZCBsb25nIG5vdyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCmluZGV4IDA5ZmZlMGYxM2NlNzUuLmNjMDQ1NzA1ODYyZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCkBAIC0xMjYsNiAmIzQzOzEyNiw4IEBAIGludCBpcHY2X3JvdXRlX2lvY3RsKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCwKIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsCiAJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIGludCBpcDZfaW5zX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpKTsKJiM0MztpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksCiYjNDM7CQkgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTsKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKaW5kZXggMjcyNjVmZDMxZTVmYy4uMzk4OGI1MWRiNTM5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaApAQCAtMzk5LDYgJiM0MzszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3QgewogCVJUQV9EUE9SVCwKIAlSVEFfTkhfSUQsCiAJUlRBX0ZMT1dMQUJFTCwKJiM0MzsJUlRBX0RFTF9SRUFTT04sCiAJX19SVEFfTUFYCiB9OwogCkBAIC00MDcsNiAmIzQzOzQwOCwzMCBAQCBlbnVtIHJ0YXR0cl90eXBlX3QgewogI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgJiM0MzsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBydG1zZykpKSkKICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKQogCiYjNDM7LyogUlRBX0RFTF9SRUFTT046IHdoeSB0aGUga2VybmVsIGRlbGV0ZWQgdGhlIHJvdXRlLiB1MzIuCiYjNDM7ICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvbgomIzQzOyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYQomIzQzOyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3QKJiM0MzsgKiB0cmVhdCAmIzM0O2Fic2VudCYjMzQ7IGFuZCAmIzM0O3Vuc3BlYyYjMzQ7IGlkZW50aWNhbGx5LiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC4KJiM0MzsgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLgomIzQzOyAqCiYjNDM7ICogVGhlIGF0dHJpYnV0ZSBpcyBub3RpZmljYXRpb24tb25seTogdGhlIGtlcm5lbCByZWplY3RzIGl0IGluCiYjNDM7ICogcmVxdWVzdHMsIHNvIGEgbm90aWZpY2F0aW9uIG11c3Qgbm90IGJlIGVjaG9lZCBiYWNrIHZlcmJhdGltLgomIzQzOyAqCiYjNDM7ICogVGhlIHZhbHVlIHNwYWNlIGlzIGZhbWlseS1hZ25vc3RpYzogYSB2YWx1ZSBtdXN0IG5ldmVyIGJlCiYjNDM7ICogcmVpbnRlcnByZXRlZCBwZXIgYWRkcmVzcyBmYW1pbHkuIEEgY2F1c2UgdGhhdCBvbmx5IG9uZSBmYW1pbHkgY2FuCiYjNDM7ICogcHJvZHVjZSBzdGlsbCBnZXRzIGl0cyBvd24gdmFsdWUgcmF0aGVyIHRoYW4gcmV1c2luZyBhbm90aGVyCiYjNDM7ICogZmFtaWx5JiMzOTtzLgomIzQzOyAqLwomIzQzO2VudW0gcnRfZGVsX3JlYXNvbiB7CiYjNDM7CVJUX0RFTF9SRUFTT05fVU5TUEVDLAkJLyogY2F1c2Ugbm90IHJlY29yZGVkICovCiYjNDM7CVJUX0RFTF9SRUFTT05fRVhQSVJFRCwJCS8qIFJURl9FWFBJUkVTIGxpZmV0aW1lIHJhbiBvdXQgKEdDKSAqLwomIzQzOwlSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiwJLyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqLwomIzQzOwlfX1JUX0RFTF9SRUFTT05fTUFYCiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIFJUX0RFTF9SRUFTT05fTUFYIChfX1JUX0RFTF9SRUFTT05fTUFYIC0gMSkKJiM0MzsKIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuCiAgKgogICogJiMzNDtzdHJ1Y3QgcnRuZXh0aG9wJiMzNDsgZGVzY3JpYmVzIGFsbCBuZWNlc3NhcnkgbmV4dGhvcCBpbmZvcm1hdGlvbiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IGY2ZmEyNzE1YjQ1MGIuLjlkODliZTdlMDU0NGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMjg3NCw3ICYjNDM7Mjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKQogCQlpZiAocnQpIHsKIAkJCS8qIEF1dG9jb25mIHByZWZpeCByb3V0ZSAqLwogCQkJaWYgKHZhbGlkX2xmdCA9PSAwKSB7Ci0JCQkJaXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7CiYjNDM7CQkJCWlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsCiYjNDM7CQkJCQkJICBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7CiAJCQkJcnQgPSBOVUxMOwogCQkJfSBlbHNlIHsKIAkJCQl0YWJsZSA9IHJ0LSZndDtmaWI2X3RhYmxlOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2ZpYi5jIGIvbmV0L2lwdjYvaXA2X2ZpYi5jCmluZGV4IGU5ZmM2OTJkNGYzYjIuLjNlMzgyYmExNTczZTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9maWIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfZmliLmMKQEAgLTE5NjcsNyAmIzQzOzE5NjcsOCBAQCBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsCiB9CiAKIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sCi0JCQkgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKJiM0MzsJCQkgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCQkgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgZmliNl9pbmZvICpsZWFmLCAqcmVwbGFjZV9ydCA9IE5VTEw7CiAJc3RydWN0IGZpYjZfd2Fsa2VyICp3OwpAQCAtMjA1NiwxMyAmIzQzOzIwNTcsMTQgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbiwKIAkJCWNhbGxfZmliNl9lbnRyeV9ub3RpZmllcnNfcmVwbGFjZShuZXQsIHJlcGxhY2VfcnQpOwogCX0KIAlpZiAoIWluZm8tJmd0O3NraXBfbm90aWZ5KQotCQlpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCk7CiYjNDM7CQlpbmV0Nl9ydF9kZWxfbm90aWZ5KHJ0LCBpbmZvLCBkZWxfcmVhc29uKTsKIAogCWZpYjZfaW5mb19yZWxlYXNlKHJ0KTsKIH0KIAogLyogTmVlZCB0byBvd24gdGFibGUtJmd0O3RiNl9sb2NrICovCi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQomIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiYjNDM7CSAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gaW5mby0mZ3Q7bmxfbmV0OwogCXN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHA7CkBAIC0yMDkxLDcgJiM0MzsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKIAkJaWYgKHJ0ID09IGN1cikgewogCQkJaWYgKGZpYjZfcmVxdWlyZXNfc3JjKGN1cikpCiAJCQkJZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tJmd0O25sX25ldCk7Ci0JCQlmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7CiYjNDM7CQkJZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJcnRwX25leHQgPSAmYW1wO2N1ci0mZ3Q7ZmliNl9uZXh0OwpAQCAtMjI1Myw3ICYjNDM7MjI1NSw3IEBAIHN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlciAqdykKIAkJcmVzID0gYy0mZ3Q7ZnVuYyhydCwgYy0mZ3Q7YXJnKTsKIAkJaWYgKHJlcyA9PSAtMSkgewogCQkJdy0mZ3Q7bGVhZiA9IHJ0OwotCQkJcmVzID0gZmliNl9kZWwocnQsICZhbXA7aW5mbyk7CiYjNDM7CQkJcmVzID0gZmliNl9kZWwocnQsICZhbXA7aW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJaWYgKHJlcykgewogI2lmIFJUNl9ERUJVRyAmZ3Q7PSAyCiAJCQkJcHJfZGVidWcoJiMzNDslczogZGVsIGZhaWxlZDogcnQ9JXBAJXAgZXJyPSVkXG4mIzM0OywKQEAgLTI0MDEsNyAmIzQzOzI0MDMsNyBAQCBzdGF0aWMgdm9pZCBmaWI2X2djX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwKIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIG4sICZhbXA7dGI2LSZndDt0YjZfZ2NfaGxpc3QsIGdjX2xpbmspCiAJCWlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpCi0JCQlmaWI2X2RlbChydCwgJmFtcDtpbmZvKTsKJiM0MzsJCQlmaWI2X2RlbChydCwgJmFtcDtpbmZvLCBSVF9ERUxfUkVBU09OX0VYUElSRUQpOwogfQogCiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuYwppbmRleCBmZTM2YjNmNTEyODUwLi4xMTExYzRlYmM2MWQ5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTEzNjEsNyAmIzQzOzEzNjEsOSBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi0mZ3Q7Y25mLnJhX2RlZnJ0cl9tZXRyaWM7CiAJLyogZGVsZXRlIHRoZSByb3V0ZSBpZiBsaWZldGltZSBpcyAwIG9yIGlmIG1ldHJpYyBuZWVkcyBjaGFuZ2UgKi8KIAlpZiAocnQgJmFtcDsmYW1wOyAobGlmZXRpbWUgPT0gMCB8fCBydC0mZ3Q7ZmliNl9tZXRyaWMgIT0gZGVmcnRyX3Vzcl9tZXRyaWMpKSB7Ci0JCWlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpOwomIzQzOwkJaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwKJiM0MzsJCQkJICBsaWZldGltZSA9PSAwID8gUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04gOgomIzQzOwkJCQkJCSAgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQlydCA9IE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCBmYzQyZDY3ZTU4MjI2Li4xNzA0MzU5ZDM5NjBkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTExMSw3ICYjNDM7MTExLDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAogCQkJIHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsCiAJCQkgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsCi0JCQkgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0MzsJCQkgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7CiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpOwpAQCAtMTAyMCw3ICYjNDM7MTAyMCw3IEBAIGludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sCiAJCQkJCWd3YWRkciwgZGV2KTsKIAogCWlmIChydCAmYW1wOyZhbXA7ICFsaWZldGltZSkgewotCQlpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTsKJiM0MzsJCWlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTsKIAkJcnQgPSBOVUxMOwogCX0KIApAQCAtMzk3Myw3ICYjNDM7Mzk3Myw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQomIzQzO3N0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCQllbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLSZndDtubF9uZXQ7CiAJc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlOwpAQCAtMzk4Niw3ICYjNDM7Mzk4Nyw3IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKIAogCXRhYmxlID0gcnQtJmd0O2ZpYjZfdGFibGU7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7dGFibGUtJmd0O3RiNl9sb2NrKTsKLQllcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7CiYjNDM7CWVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBkZWxfcmVhc29uKTsKIAlzcGluX3VubG9ja19iaCgmYW1wO3RhYmxlLSZndDt0YjZfbG9jayk7CiAKIG91dDoKQEAgLTQwMDEsNyAmIzQzOzQwMDIsMTUgQEAgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSkKIAkJLnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnkKIAl9OwogCi0JcmV0dXJuIF9faXA2X2RlbF9ydChydCwgJmFtcDtpbmZvKTsKJiM0MzsJcmV0dXJuIF9faXA2X2RlbF9ydChydCwgJmFtcDtpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAomIzQzOwkJICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmxfaW5mbyBpbmZvID0geyAubmxfbmV0ID0gbmV0IH07CiYjNDM7CiYjNDM7CXJldHVybiBfX2lwNl9kZWxfcnQocnQsICZhbXA7aW5mbywgZGVsX3JlYXNvbik7CiB9CiAKIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKQEAgLTQwMjgsNyAmIzQzOzQwMzcsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpCiAKIAkJCWlmIChydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwKIAkJCQkJICBOVUxMLCBOVUxMLCAwLCBSVE1fREVMUk9VVEUsCi0JCQkJCSAgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIDApICZsdDsgMCkgewomIzQzOwkJCQkJICBpbmZvLSZndDtwb3J0aWQsIHNlcSwgMCwKJiM0MzsJCQkJCSAgUlRfREVMX1JFQVNPTl9VTlNQRUMpICZsdDsgMCkgewogCQkJCWtmcmVlX3NrYihza2IpOwogCQkJCXNrYiA9IE5VTEw7CiAJCQl9IGVsc2UKQEAgLTQwNjQsMTMgJiM0Mzs0MDc0LDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZywKIAkJCQkJICZhbXA7cnQtJmd0O2ZpYjZfc2libGluZ3MsCiAJCQkJCSBmaWI2X3NpYmxpbmdzKSB7Ci0JCQllcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvKTsKJiM0MzsJCQllcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCX0KIAotCWVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTsKJiM0MzsJZXJyID0gZmliNl9kZWwocnQsIGluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YWJsZS0mZ3Q7dGI2X2xvY2spOwogb3V0X3B1dDoKQEAgLTQxOTYsNyAmIzQzOzQyMDYsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsCiAJCQkJaWYgKCFmaWI2X2luZm9faG9sZF9zYWZlKHJ0KSkKIAkJCQkJY29udGludWU7CiAKLQkJCQllcnIgPSAgX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2NmZy0mZ3Q7ZmNfbmxpbmZvKTsKJiM0MzsJCQkJZXJyID0gX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2NmZy0mZ3Q7ZmNfbmxpbmZvLAomIzQzOwkJCQkJCSAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChjZmctJmd0O2ZjX25oX2lkKQpAQCAtNDIxNSw3ICYjNDM7NDIyNiw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywKIAogCQkJLyogaWYgZ2F0ZXdheSB3YXMgc3BlY2lmaWVkIG9ubHkgZGVsZXRlIHRoZSBvbmUgaG9wICovCiAJCQlpZiAoY2ZnLSZndDtmY19mbGFncyAmYW1wOyBSVEZfR0FURVdBWSkKLQkJCQllcnIgPSBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8pOwomIzQzOwkJCQllcnIgPSBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8sCiYjNDM7CQkJCQkJICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJZWxzZQogCQkJCWVyciA9IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhydCwgY2ZnKTsKIAkJCWJyZWFrOwpAQCAtNTczOSw2ICYjNDM7NTc1MSw3IEBAIHN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKQogCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHJ0YV9jYWNoZWluZm8pKQogCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShUQ1BfQ0FfTkFNRV9NQVgpIC8qIFJUQVhfQ0NfQUxHTyAqLwogCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZSgxKSAvKiBSVEFfUFJFRiAqLwomIzQzOwkgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX0RFTF9SRUFTT04gKi8KIAkgICAgICAgJiM0MzsgbmV4dGhvcF9sZW47CiB9CiAKQEAgLTU3NzUsNyAmIzQzOzU3ODgsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCiAJCQkgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywKIAkJCSBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSwKLQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7CQkJIHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiB7CiAJc3RydWN0IHJ0Nl9pbmZvICpydDYgPSBkc3RfcnQ2X2luZm8oZHN0KTsKIAlzdHJ1Y3QgcnQ2a2V5ICpydDZfZHN0LCAqcnQ2X3NyYzsKQEAgLTU5NTQsNiAmIzQzOzU5NjcsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAocnRubF9wdXRfY2FjaGVpbmZvKHNrYiwgZHN0LCAwLCBleHBpcmVzLCBkc3QgPyBkc3QtJmd0O2Vycm9yIDogMCkgJmx0OyAwKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAomIzQzOwlpZiAoZGVsX3JlYXNvbiAhPSBSVF9ERUxfUkVBU09OX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIFJUQV9ERUxfUkVBU09OLCBkZWxfcmVhc29uKSkKJiM0MzsJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwomIzQzOwogCWlmIChubGFfcHV0X3U4KHNrYiwgUlRBX1BSRUYsIElQVjZfRVhUUkFDVF9QUkVGKHJ0Nl9mbGFncykpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIApAQCAtNjA1NSw3ICYjNDM7NjA3Miw4IEBAIHN0YXRpYyBpbnQgcnQ2X25oX2R1bXBfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9uaCAqbmgsIHZvaWQgKmFyZykKIAkJCQkJICAgICZhbXA7cnQ2X2V4LSZndDtydDZpLSZndDtkc3QsIE5VTEwsIE5VTEwsIDAsCiAJCQkJCSAgICBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgICBORVRMSU5LX0NCKGR1bXAtJmd0O2NiLSZndDtza2IpLnBvcnRpZCwKLQkJCQkJICAgIGR1bXAtJmd0O2NiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgdy0mZ3Q7ZmxhZ3MpOwomIzQzOwkJCQkJICAgIGR1bXAtJmd0O2NiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgdy0mZ3Q7ZmxhZ3MsCiYjNDM7CQkJCQkgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCkBAIC02MTAzLDcgJiM0Mzs2MTIxLDggQEAgaW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApCiAJCQlpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy0mZ3Q7c2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCQkJICAwLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgTkVUTElOS19DQihhcmctJmd0O2NiLSZndDtza2IpLnBvcnRpZCwKLQkJCQkJICBhcmctJmd0O2NiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgZmxhZ3MpKSB7CiYjNDM7CQkJCQkgIGFyZy0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCBmbGFncywKJiM0MzsJCQkJCSAgUlRfREVMX1JFQVNPTl9VTlNQRUMpKSB7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQljb3VudCYjNDM7JiM0Mzs7CkBAIC02MzM2LDEyICYjNDM7NjM1NSwxNCBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsCiAJCQkJCSAgICBpaWYsIFJUTV9ORVdST1VURSwKIAkJCQkJICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsCi0JCQkJCSAgICBubGgtJmd0O25sbXNnX3NlcSwgMCk7CiYjNDM7CQkJCQkgICAgbmxoLSZndDtubG1zZ19zZXEsIDAsCiYjNDM7CQkJCQkgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQllbHNlCiAJCQllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBkc3QsICZhbXA7Zmw2LmRhZGRyLAogCQkJCQkgICAgJmFtcDtmbDYuc2FkZHIsIGlpZiwgUlRNX05FV1JPVVRFLAogCQkJCQkgICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCwKLQkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwKTsKJiM0MzsJCQkJCSAgICBubGgtJmd0O25sbXNnX3NlcSwgMCwKJiM0MzsJCQkJCSAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJfSBlbHNlIHsKIAkJZXJyID0gLUVORVRVTlJFQUNIOwogCX0KQEAgLTYzNTcsOCAmIzQzOzYzNzgsOSBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKLQkJICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKQomIzQzO3N0YXRpYyB2b2lkIF9faW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsCiYjNDM7CQkJICAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsCiYjNDM7CQkJICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gaW5mby0mZ3Q7bmxfbmV0OwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC02Mzc3LDcgJiM0Mzs2Mzk5LDcgQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiAJCWdvdG8gZXJyb3V0OwogCiAJZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsCi0JCQkgICAgZXZlbnQsIGluZm8tJmd0O3BvcnRpZCwgc2VxLCBubG1fZmxhZ3MpOwomIzQzOwkJCSAgICBldmVudCwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIG5sbV9mbGFncywgZGVsX3JlYXNvbik7CiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCS8qIC1FTVNHU0laRSBpbXBsaWVzIG5lZWRlZCBzcGFjZSBncmV3IHVuZGVyIHVzLiAqLwpAQCAtNjM5OCw2ICYjNDM7NjQyMCwxOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKIAlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfUk9VVEUsIGVycik7CiB9CiAKJiM0Mzt2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCSAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncykKJiM0Mzt7CiYjNDM7CV9faW5ldDZfcnRfbm90aWZ5KGV2ZW50LCBydCwgaW5mbywgbmxtX2ZsYWdzLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiYjNDM7CQkJIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQomIzQzO3sKJiM0MzsJX19pbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCwgZGVsX3JlYXNvbik7CiYjNDM7fQomIzQzOwogdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCQkgICAgc3RydWN0IG5sX2luZm8gKmluZm8pCiB7CkBAIC02NDEwLDcgJiM0Mzs2NDQ0LDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCQlnb3RvIGVycm91dDsKIAogCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLAotCQkJICAgIFJUTV9ORVdST1VURSwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpOwomIzQzOwkJCSAgICBSVE1fTkVXUk9VVEUsIGluZm8tJmd0O3BvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLAomIzQzOwkJCSAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJLyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi8KIAkJV0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTsKQEAgLTY0NjMsNyAmIzQzOzY0OTgsNyBAQCB2b2lkIGZpYjZfaW5mb19od19mbGFnc19zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksCiAJfQogCiAJZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsCi0JCQkgICAgMCwgMCk7CiYjNDM7CQkJICAgIDAsIDAsIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQkvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqLwogCQlXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkKaW5kZXggZTU4YmRiZGM1OGVlYS4uMzQ5MzU4ODZiNmFkZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5CkBAIC0xNyw3ICYjNDM7MTcsNyBAQCBmcm9tIC51dGlscyBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIGZkX3JlYWRfdGltZW91dCwgY21kLCBia2csIGRlZmVyLCBcCiAgICAgd2FpdF9maWxlLCB0b29sLCB0YwogZnJvbSAuYnBmIGltcG9ydCBicGZfbWFwX3NldCwgYnBmX21hcF9kdW1wLCBicGZfcHJvZ19tYXBfaWRzCiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcCi0gICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseQomIzQzOyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHkKIGZyb20gLnlubCBpbXBvcnQgTmV0c2hhcGVyRmFtaWx5LCBEZXZsaW5rRmFtaWx5LCBQU1BGYW1pbHksIE5ldGxpbmsKIAogX19hbGxfXyA9IFsmIzM0O0tTUkMmIzM0OywKQEAgLTM0LDQgJiM0MzszNCw0IEBAIF9fYWxsX18gPSBbJiMzNDtLU1JDJiMzNDssCiAgICAgICAgICAgICYjMzQ7TmV0ZGV2U2ltJiMzNDssICYjMzQ7TmV0ZGV2U2ltRGV2JiMzNDssCiAgICAgICAgICAgICYjMzQ7TmV0c2hhcGVyRmFtaWx5JiMzNDssICYjMzQ7RGV2bGlua0ZhbWlseSYjMzQ7LCAmIzM0O1BTUEZhbWlseSYjMzQ7LCAmIzM0O05sRXJyb3ImIzM0OywKICAgICAgICAgICAgJiMzNDtZbmxGYW1pbHkmIzM0OywgJiMzNDtFdGh0b29sRmFtaWx5JiMzNDssICYjMzQ7TmV0ZGV2RmFtaWx5JiMzNDssICYjMzQ7UnRubEZhbWlseSYjMzQ7LAotICAgICAgICAgICAmIzM0O05sY3RybEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssICYjMzQ7TmV0bGluayYjMzQ7XQomIzQzOyAgICAgICAgICAgJiMzNDtObGN0cmxGYW1pbHkmIzM0OywgJiMzNDtSdG5sQWRkckZhbWlseSYjMzQ7LCAmIzM0O1J0bmxSb3V0ZUZhbWlseSYjMzQ7LCAmIzM0O05ldGxpbmsmIzM0O10KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkKaW5kZXggMmU1NjcwNjJhYTZjYy4uMDhkZWZmNzU2ZjI5YiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkKQEAgLTI5LDcgJiM0MzsyOSw3IEBAIGV4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm9yIGFzIGU6CiAKIF9fYWxsX18gPSBbCiAgICAgJiMzNDtObEVycm9yJiMzNDssICYjMzQ7TmxQb2xpY3kmIzM0OywgJiMzNDtOZXRsaW5rJiMzNDssICYjMzQ7WW5sRmFtaWx5JiMzNDssICYjMzQ7U1BFQ19QQVRIJiMzNDssCi0gICAgJiMzNDtFdGh0b29sRmFtaWx5JiMzNDssICYjMzQ7UnRubEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssCiYjNDM7ICAgICYjMzQ7RXRodG9vbEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxGYW1pbHkmIzM0OywgJiMzNDtSdG5sQWRkckZhbWlseSYjMzQ7LCAmIzM0O1J0bmxSb3V0ZUZhbWlseSYjMzQ7LAogICAgICYjMzQ7TmV0ZGV2RmFtaWx5JiMzNDssICYjMzQ7TmV0c2hhcGVyRmFtaWx5JiMzNDssICYjMzQ7TmxjdHJsRmFtaWx5JiMzNDssICYjMzQ7RGV2bGlua0ZhbWlseSYjMzQ7LAogICAgICYjMzQ7UFNQRmFtaWx5JiMzNDssCiBdCkBAIC01NCw2ICYjNDM7NTQsMTEgQEAgY2xhc3MgUnRubEFkZHJGYW1pbHkoWW5sRmFtaWx5KToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O3J0LWFkZHIueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JiMzOTsmIzM5OywgcmVjdl9zaXplPXJlY3Zfc2l6ZSkKIAomIzQzO2NsYXNzIFJ0bmxSb3V0ZUZhbWlseShZbmxGYW1pbHkpOgomIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOgomIzQzOyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O3J0LXJvdXRlLnlhbWwmIzM5OykpLmFzX3Bvc2l4KCksCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0mIzM5OyYjMzk7LCByZWN2X3NpemU9cmVjdl9zaXplKQomIzQzOwogY2xhc3MgTmV0ZGV2RmFtaWx5KFlubEZhbWlseSk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O25ldGRldi55YW1sJiMzOTspKS5hc19wb3NpeCgpLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKaW5kZXggMGM2N2M3YzAwZDg0MS4uNWNjM2ViZGNmMDhkZSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CkBAIC01LDcgJiM0Mzs1LDkgQEAgaW1wb3J0IHNvY2tldAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHRpbWUKIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXgKLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBkZWZlcgogCiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtceGUwXHgwMFx4MDBceDAxJiMzOTsKIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJiMzOTtceGVmXHgwMVx4MDFceDAxJiMzOTsKQEAgLTEzNCw4ICYjNDM7MTM2LDE4OSBAQCBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC0mZ3Q7IE5vbmU6CiAgICAga3NmdF90cnVlKGYmIzM0O2luZXQge2lmbmFtZX0gZm9yd2FyZGluZyBvbiYjMzQ7IGluIGNtZF9vYmouc3Rkb3V0LAogICAgICAgICAgICAgICBmJiMzNDtObyAmIzM5O2ZvcndhcmRpbmcgb24mIzM5OyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX0mIzM0OykKIAomIzQzO2RlZiBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpOgomIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICBydG5sID0gUnRubFJvdXRlRmFtaWx5KCkKJiM0MzsgICAgZGVmZXIocnRubC5jbG9zZSkKJiM0MzsgICAgcnRubC5udGZfc3Vic2NyaWJlKCYjMzQ7cnRubGdycC1pcHY2LXJvdXRlJiMzNDspCiYjNDM7ICAgIHJldHVybiBydG5sCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF93YWl0X3JvdXRlX250ZihydG5sLCBuYW1lLCBkc3RfbGVuLCBkc3Q9Tm9uZSwgZGVhZGxpbmU9MTApOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKToKJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgYXR0cnMgPSBtc2dbJiMzOTttc2cmIzM5O10KJiM0MzsgICAgICAgIGlmIGF0dHJzWyYjMzk7cnRtLWRzdC1sZW4mIzM5O10gIT0gZHN0X2xlbjoKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgaWYgZHN0IGlzIG5vdCBOb25lIGFuZCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykgIT0gZHN0OgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICByZXR1cm4gYXR0cnMKJiM0MzsgICAgcmV0dXJuIE5vbmUKJiM0MzsKJiM0MzsKJiM0MztkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O0dhdGhlciBhdHRycyBvZiBtYXRjaGluZyBub3RpZmljYXRpb25zLCBrZXllZCBieSAoZHN0X2xlbiwgZHN0KS4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgc2VlbiA9IHt9CiYjNDM7ICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6CiYjNDM7ICAgICAgICBpZiBtc2dbJiMzOTtuYW1lJiMzOTtdICE9IG5hbWU6CiYjNDM7ICAgICAgICAgICAgY29udGludWUKJiM0MzsgICAgICAgIGF0dHJzID0gbXNnWyYjMzk7bXNnJiMzOTtdCiYjNDM7ICAgICAgICBrZXkgPSAoYXR0cnNbJiMzOTtydG0tZHN0LWxlbiYjMzk7XSwgYXR0cnMuZ2V0KCYjMzk7ZHN0JiMzOTspKQomIzQzOyAgICAgICAgaWYga2V5IGluIHdhbnQ6CiYjNDM7ICAgICAgICAgICAgc2VlbltrZXldID0gYXR0cnMKJiM0MzsgICAgICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOgomIzQzOyAgICAgICAgICAgICAgICBicmVhawomIzQzOyAgICByZXR1cm4gc2VlbgomIzQzOwomIzQzOwomIzQzO2RlZiBfd3JpdGVfaXB2Nl9zeXNjdGwobmFtZSwgdmFsdWUpOgomIzQzOyAgICB3aXRoIG9wZW4oZiYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY2L3tuYW1lfSYjMzQ7LCAmIzM0O3cmIzM0OykgYXMgZjoKJiM0MzsgICAgICAgIGYud3JpdGUoZiYjMzQ7e3ZhbHVlfVxuJiMzNDspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkKCkgLSZndDsgTm9uZToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7QW4gZXhwaXJlZCByb3V0ZSByZXBvcnRzIFJUQV9ERUxfUkVBU09OID09IGV4cGlyZWQuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczoKJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpCiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7cm91dGUvZ2NfaW50ZXJ2YWwmIzM0OywgMikKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teSYjMzQ7LCBucz1zdHIobnMpKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkZXYgZHVtbXkxIHVwJiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0Oy02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDImIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsKJiM0MzsgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIDY0LCAmIzM5OzIwMDE6ZGI4OjI6OiYjMzk7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmU9MTUpCiYjNDM7ICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCAmIzM0O25vIFJUTV9ERUxST1VURSBmb3IgdGhlIGV4cGlyZWQgcm91dGUmIzM0OykKJiM0MzsgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCYjMzk7ZGVsLXJlYXNvbiYjMzk7KSwgJiMzOTtleHBpcmVkJiMzOTspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIGxpZmV0aW1lLCByaW89Tm9uZSwgcGlvPU5vbmUpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtUaGUga2VybmVsIGZpbGxzIGluIHRoZSBJQ01QdjYgY2hlY2tzdW0gb24gcmF3IElDTVB2NiBzb2NrZXRzLiYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICAjIHR5cGUsIGNvZGUsIGNrc3VtLCBob3AgbGltaXQsIGZsYWdzLCByb3V0ZXIgbGlmZXRpbWUsCiYjNDM7ICAgICMgcmVhY2hhYmxlIHRpbWUsIHJldHJhbnMgdGltZXIKJiM0MzsgICAgcmEgPSBzdHJ1Y3QucGFjaygmIzM5OyFCQkhCQkhJSSYjMzk7LCAxMzQsIDAsIDAsIDY0LCAwLCBsaWZldGltZSwgMCwgMCkKJiM0MzsgICAgaWYgcmlvIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgcHJlZml4LCBwbGVuLCByaW9fbGlmZXRpbWUgPSByaW8KJiM0MzsgICAgICAgICMgUkZDIDQxOTEgcm91dGUgaW5mb3JtYXRpb24gb3B0aW9uLCAvNjQgcHJlZml4ICg4IGJ5dGVzKQomIzQzOyAgICAgICAgcmEgJiM0Mzs9IHN0cnVjdC5wYWNrKCYjMzk7IUJCQkJJJiMzOTssIDI0LCAyLCBwbGVuLCAwLCByaW9fbGlmZXRpbWUpCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClbOjhdCiYjNDM7ICAgIGlmIHBpbyBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgIHByZWZpeCwgcGxlbiwgdmFsaWRfbGZ0ID0gcGlvCiYjNDM7ICAgICAgICAjIFJGQyA0ODYxIHByZWZpeCBpbmZvcm1hdGlvbiBvcHRpb24sIG9uLWxpbmsgb25seSAoTCBzZXQsIEEgY2xlYXIpCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc3RydWN0LnBhY2soJiMzOTshQkJCQklJSSYjMzk7LCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeCkKJiM0MzsgICAgc29jay5zZW5kdG8ocmEsICgmIzM5O2ZmMDI6OjEmIzM5OywgMCwgMCwgaWZpbmRleCkpCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9yYV9yb3V0ZXJfc29jayhuc19yLCBpZm5hbWUpOgomIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKToKJiM0MzsgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQUFJPVE9fSUNNUFY2KQomIzQzOyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpCiYjNDM7ICAgICAgICBkZWZlcihzb2NrLmNsb3NlKQomIzQzOyAgICAgICAgcmV0dXJuIHNvY2ssIHNvY2tldC5pZl9uYW1ldG9pbmRleChpZm5hbWUpCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHdhbnQsICoqcmFfb3B0cyk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBTZW5kaW5nIGZhaWxzIHdpdGggRUFERFJOT1RBVkFJTCB3aGlsZSB0aGUgcm91dGVyJiMzOTtzIGxpbmstbG9jYWwKJiM0MzsgICAgYWRkcmVzcyBpcyBzdGlsbCB0ZW50YXRpdmUuIGFkZHJjb25mX2RhZF9zdGFydCgpIG9ubHkgcXVldWVzCiYjNDM7ICAgIGFkZHJjb25mX2RhZF93b3JrKCksIGFuZCBJRkFfRl9URU5UQVRJVkUgaXMgY2xlYXJlZCB3aGVuIHRoYXQgd29yawomIzQzOyAgICBpdGVtIHJ1bnMsIHNvIHJldHJ5IHVudGlsIGl0IGRvZXMuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBzZWVuID0ge30KJiM0MzsgICAgZm9yIF8gaW4gcmFuZ2UoMTApOgomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cykKJiM0MzsgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgomIzQzOyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKQomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7bmV3cm91dGUtbnRmJiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZXQoc2Vlbi5rZXlzKCkpLCBkZWFkbGluZT0yKSkKJiM0MzsgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6CiYjNDM7ICAgICAgICAgICAgYnJlYWsKJiM0MzsgICAgcmV0dXJuIHNlZW4KJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBSb3V0ZXMgd2l0aGRyYXduIGJ5IGEgemVyby1saWZldGltZSBSQSAocm91dGVyIGxpZmV0aW1lLCBSRkMgNDg2MQomIzQzOyAgICBQSU8sIFJGQyA0MTkxIFJJTykgcmVwb3J0IFJUQV9ERUxfUkVBU09OID09IHJhLXdpdGhkcmF3bi4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgICMgKHJ0bS1kc3QtbGVuLCBkc3QpOyB0aGUgZGVmYXVsdCByb3V0ZSBjYXJyaWVzIG5vIFJUQV9EU1QKJiM0MzsgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7KSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7KX0KJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjoKJiM0MzsgICAgICAgIGlwKGYmIzM0O2xpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfSYjMzQ7KQomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6CiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7Y29uZi92ZXRoMC9hY2NlcHRfcmEmIzM0OywgMikKJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtjb25mL3ZldGgwL2ZvcndhcmRpbmcmIzM0OywgMCkKJiM0MzsgICAgICAgICAgICB0cnk6CiYjNDM7ICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW4mIzM0OywgNjQpCiYjNDM7ICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgomIzQzOyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7bm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GTyYjMzQ7KQomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6CiYjNDM7ICAgICAgICAgICAgIyBza2lwIHRoZSBEQUQgcHJvYmUgc28gdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsIHNvdXJjZSBvbmx5CiYjNDM7ICAgICAgICAgICAgIyBoYXMgdG8gd2FpdCBmb3IgYWRkcmNvbmZfZGFkX3dvcmsoKSB0byBjbGVhciBJRkFfRl9URU5UQVRJVkUKJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtjb25mL3ZldGgxL2FjY2VwdF9kYWQmIzM0OywgMCkKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBzZXQgZGV2IHZldGgwIHVwJiMzNDssIG5zPXN0cihuc19oKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBzZXQgZGV2IHZldGgxIHVwJiMzNDssIG5zPXN0cihuc19yKSkKJiM0MzsKJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnNfaCkKJiM0MzsgICAgICAgIHNvY2ssIGlmaW5kZXggPSBfcmFfcm91dGVyX3NvY2sobnNfciwgJiMzNDt2ZXRoMSYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAgc2VlbiA9IF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHJvdXRlcywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZldGltZT0xODAwLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbz0oJiMzOTsyMDAxOmRiODo1OjomIzM5OywgNjQsIDYwMCksCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlvPSgmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7LCA2NCwgNjAwKSkKJiM0MzsgICAgICAgIGtzZnRfZXEoc2V0KHNlZW4pLCByb3V0ZXMsICYjMzQ7bm90IGFsbCBSQSByb3V0ZXMgd2VyZSBpbnN0YWxsZWQmIzM0OykKJiM0MzsgICAgICAgIGlmIHNldChzZWVuKSAhPSByb3V0ZXM6CiYjNDM7ICAgICAgICAgICAgcmV0dXJuCiYjNDM7CiYjNDM7ICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAwLCByaW89KCYjMzk7MjAwMTpkYjg6NTo6JiMzOTssIDY0LCAwKSwKJiM0MzsgICAgICAgICAgICAgICAgIHBpbz0oJiMzOTsyMDAxOmRiODo2OjomIzM5OywgNjQsIDApKQomIzQzOyAgICAgICAgc2VlbiA9IF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5Oywgcm91dGVzKQomIzQzOyAgICAgICAgZm9yIGtleSBpbiByb3V0ZXM6CiYjNDM7ICAgICAgICAgICAgYXR0cnMgPSBzZWVuLmdldChrZXkpCiYjNDM7ICAgICAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgZiYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciB7a2V5fSYjMzQ7KQomIzQzOyAgICAgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgmIzM5O2RlbC1yZWFzb24mIzM5OyksICYjMzk7cmEtd2l0aGRyYXduJiMzOTspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgQSBkZWxldGlvbiBwYXRoIHRoYXQgcmVjb3JkcyBubyBjYXVzZSAoaGVyZSBhIHVzZXJzcGFjZSByZXF1ZXN0KQomIzQzOyAgICBtdXN0IG5vdCBjYXJyeSBSVEFfREVMX1JFQVNPTiBhdCBhbGwuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6CiYjNDM7ICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15JiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGRldiBkdW1teTEgdXAmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7LTYgcm91dGUgYWRkIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxJiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0Oy02IHJvdXRlIGRlbCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MSYjMzQ7LCBucz1zdHIobnMpKQomIzQzOwomIzQzOyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5OywgNjQsICYjMzk7MjAwMTpkYjg6MTo6JiMzOTspCiYjNDM7ICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCAmIzM0O25vIFJUTV9ERUxST1VURSBmb3IgMjAwMTpkYjg6MTo6LzY0JiMzNDspCiYjNDM7ICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICBrc2Z0X25vdF9pbigmIzM5O2RlbC1yZWFzb24mIzM5OywgYXR0cnMsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDt1c2VyIGRlbGV0aW9uIG11c3Qgbm90IGNhcnJ5IGRlbC1yZWFzb24mIzM0OykKJiM0MzsKJiM0MzsKIGRlZiBtYWluKCkgLSZndDsgTm9uZToKLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pCiYjNDM7ICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LAomIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQsCiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLAomIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pCiAgICAga3NmdF9leGl0KCkKIAogaWYgX19uYW1lX18gPT0gJiMzNDtfX21haW5fXyYjMzQ7Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDE6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNTQKCQkJCQkJCW91dHB1dDogMjU4CgkJCQkJCQl0aG91Z2h0czogMTk4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBFdmFsdWF0aW9uOiBJUHY2IFJvdXRlIERlbGV0aW9uIFJlYXNvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHNlcmllcyB0aGF0IGludHJvZHVjZXMgYSBgZGVsX3JlYXNvbmAgbmV0bGluayBhdHRyaWJ1dGUgZm9yIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucy4gVGhlIHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24/CgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSB0aGUgY29kZSBmb3IgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgdGhhdCBLTVNBTiBjb3VsZCBjYXRjaC4gVGhlIHBhdGNoJiMzOTtzIGNvcmUgaW50cm9kdWNlcyBhbiBgUlRBX0RFTF9SRUFTT05gIGF0dHJpYnV0ZSBhbmQgYW4gYXNzb2NpYXRlZCBgZW51bSBydF9kZWxfcmVhc29uYC4gVGhpcyBgZGVsX3JlYXNvbmAgaXMgdGhlbiBwbHVtYmVkIHRocm91Z2ggdmFyaW91cyBmdW5jdGlvbnMgaW4gdGhlIElQdjYgcm91dGluZyBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIHBhc3NlcyBgZGVsX3JlYXNvbmAgdmlhIGZ1bmN0aW9uIGFyZ3VtZW50cyAoZS5nLiwgaW4gYHJ0Nl9maWxsX25vZGVgLCBgZmliNl9kZWxgLCBgaXA2X2RlbF9ydF9yZWFzb25gKS4KClRoZSBjcml0aWNhbCBwb2ludCBoZXJlIGlzIHRoYXQgYGRlbF9yZWFzb25gIGlzICpwYXNzZWQgYnkgdmFsdWUqIGFuZCBpcyBhbHdheXMgYW4gKmV4cGxpY2l0bHkgYXNzaWduZWQgZW51bSB2YWx1ZSogKGxpa2UgYFJUX0RFTF9SRUFTT05fVU5TUEVDYCwgYFJUX0RFTF9SRUFTT05fRVhQSVJFRGAsIG9yIGBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTmApLiBJdCBpcyAqbm90KiByZWFkIGZyb20gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLiBXZSBhcmUgYWxzbyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBzdHJ1Y3RzIHRoYXQgd291bGQgYmUgc2VudCB0byB1c2VyIHNwYWNlLiBJdCBpcyBkaXJlY3RseSBwbGFjZWQgaW50byB0aGUgbmV0bGluayBidWZmZXIgdXNpbmcgYG5sYV9wdXRfdTMyYC4KCkkmIzM5O20gY2hlY2tpbmcgaWYgd2UgY2FuIGdldCBhIHNuZWFraWx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdG8gdXNlciBzcGFjZSwgYnV0IHRoZXJlIGlzbiYjMzk7dCBvbmUuIFRoZSBuZXRsaW5rIGF0dHJpYnV0ZSBpcyBjb25zdHJ1Y3RlZCB1c2luZyBgbmxhX3B1dF91MzJgLCB3aGljaCBoYW5kbGVzIHRoZSBtZW1vcnkgYW5kIGlzIGNvbXBsZXRlbHkgc2FmZS4gVGhlIGBkZWxfcmVhc29uYCBwYXJhbWV0ZXIgaXMgcGFzc2VkIGJ5IHZhbHVlIGFuZCBpcyBzZXQgdG8gYSBjb25zdGFudC4KCkkmIzM5O20gYWxzbyBkb3VibGUtY2hlY2tpbmcgdGhlIGNhbGxlcnMgdG8gZW5zdXJlIGFsbCBmdW5jdGlvbiBjYWxscyB1c2UgZXhwbGljaXQgZW51bSB2YWx1ZXMuIEkmIzM5O3ZlIHNjYW5uZWQgdGhlIHZhcmlvdXMgbG9jYXRpb25zIGluIHRoZSBjb2RlIChlLmcuLCBgX19pcDZfZGVsX3J0X3NpYmxpbmdzYCwgYGZpYjZfZGVsYCwgZXRjLikgYW5kIGNvbmZpcm1lZCB0aGF0IGNvbnN0YW50IGVudW0gdmFsdWVzIGFyZSBiZWluZyBwYXNzZWQgZXZlcnl3aGVyZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW52b2x2ZWQuCgpHaXZlbiB0aGUgZXhwbGljaXQgbmF0dXJlIG9mIHRoZSB2YWx1ZXMgYW5kIHRoZSB1c2Ugb2Ygc3RhbmRhcmQsIHNhZmUgbmV0bGluayBmdW5jdGlvbnMsIEkgY29uY2x1ZGUgdGhhdCB0aGVyZSBpcyAqbm8qIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBpZGVudGlmeSBhbnkgaXNzdWVzLiBUaGVyZWZvcmUsIG5vIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5lZWRlZCBmb3IgdGhpcyBwYXRjaC4gSSBjYW4gY29uZmlkZW50bHkgc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgdG8gcmVwb3J0IHRoZSByZWFzb24gZm9yIElQdjYgcm91dGUgZGVsZXRpb25zLiBUaGUgZGVsZXRpb24gcmVhc29uIGlzIHBhc3NlZCB0aHJvdWdoIHRoZSByb3V0aW5nIHN1YnN5c3RlbSBhcyBhbiBleHBsaWNpdCBgZW51bSBydF9kZWxfcmVhc29uYCB2YWx1ZSAoZS5nLiwgYFJUX0RFTF9SRUFTT05fVU5TUEVDYCwgYFJUX0RFTF9SRUFTT05fRVhQSVJFRGAsIGBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTmApLiBUaGlzIHZhbHVlIGlzIHRoZW4gc2VyaWFsaXplZCBpbnRvIHRoZSBuZXRsaW5rIG1lc3NhZ2UgdXNpbmcgYG5sYV9wdXRfdTMyKClgLiBcblxuU2luY2UgdGhlIGBkZWxfcmVhc29uYCBpcyBwYXNzZWQgYnkgdmFsdWUgYXMgYW4gZXhwbGljaXQgY29uc3RhbnQgaW4gYWxsIG1vZGlmaWVkIGNhbGwgc2l0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nIGJ5dGVzLiBUaGUgbmV0bGluayBhdHRyaWJ1dGUgY29uc3RydWN0aW9uIHZpYSBgbmxhX3B1dF91MzIoKWAgc2FmZWx5IGhhbmRsZXMgdGhlIHNlcmlhbGl6YXRpb24gd2l0aG91dCBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgdG8gcmVwb3J0IHRoZSByZWFzb24gZm9yIElQdjYgcm91dGUgZGVsZXRpb25zLiBUaGUgZGVsZXRpb24gcmVhc29uIGlzIHBhc3NlZCB0aHJvdWdoIHRoZSByb3V0aW5nIHN1YnN5c3RlbSBhcyBhbiBleHBsaWNpdCBgZW51bSBydF9kZWxfcmVhc29uYCB2YWx1ZSAoZS5nLiwgYFJUX0RFTF9SRUFTT05fVU5TUEVDYCwgYFJUX0RFTF9SRUFTT05fRVhQSVJFRGAsIGBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTmApLiBUaGlzIHZhbHVlIGlzIHRoZW4gc2VyaWFsaXplZCBpbnRvIHRoZSBuZXRsaW5rIG1lc3NhZ2UgdXNpbmcgYG5sYV9wdXRfdTMyKClgLiBcblxuU2luY2UgdGhlIGBkZWxfcmVhc29uYCBpcyBwYXNzZWQgYnkgdmFsdWUgYXMgYW4gZXhwbGljaXQgY29uc3RhbnQgaW4gYWxsIG1vZGlmaWVkIGNhbGwgc2l0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nIGJ5dGVzLiBUaGUgbmV0bGluayBhdHRyaWJ1dGUgY29uc3RydWN0aW9uIHZpYSBgbmxhX3B1dF91MzIoKWAgc2FmZWx5IGhhbmRsZXMgdGhlIHNlcmlhbGl6YXRpb24gd2l0aG91dCBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAxOjIwOjE0LjI2MzQyNzc4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2Mjk5MjY5MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUk9VVEVSX1BSRUZcIixcbiAgICBcIklQVjZfUk9VVEVfSU5GT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gICAgXCJpbmV0Nl9ydF9kZWxfbm90aWZ5XCIsXG4gICAgXCJmaWI2X2RlbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIHRvIHJlcG9ydCB0aGUgcmVhc29uIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9ucy4gVGhlIGRlbGV0aW9uIHJlYXNvbiBpcyBwYXNzZWQgdGhyb3VnaCB0aGUgcm91dGluZyBzdWJzeXN0ZW0gYXMgYW4gZXhwbGljaXQgYGVudW0gcnRfZGVsX3JlYXNvbmAgdmFsdWUgKGUuZy4sIGBSVF9ERUxfUkVBU09OX1VOU1BFQ2AsIGBSVF9ERUxfUkVBU09OX0VYUElSRURgLCBgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV05gKS4gVGhpcyB2YWx1ZSBpcyB0aGVuIHNlcmlhbGl6ZWQgaW50byB0aGUgbmV0bGluayBtZXNzYWdlIHVzaW5nIGBubGFfcHV0X3UzMigpYC4gXFxuXFxuU2luY2UgdGhlIGBkZWxfcmVhc29uYCBpcyBwYXNzZWQgYnkgdmFsdWUgYXMgYW4gZXhwbGljaXQgY29uc3RhbnQgaW4gYWxsIG1vZGlmaWVkIGNhbGwgc2l0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nIGJ5dGVzLiBUaGUgbmV0bGluayBhdHRyaWJ1dGUgY29uc3RydWN0aW9uIHZpYSBgbmxhX3B1dF91MzIoKWAgc2FmZWx5IGhhbmRsZXMgdGhlIHNlcmlhbGl6YXRpb24gd2l0aG91dCBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBSVEFfREVMX1JFQVNPTiBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLCBtb2RpZnlpbmcgY29yZSBJUHY2IHJvdXRpbmcgYW5kIG5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gbG9naWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgcm91dGUgZXhwaXJhdGlvbiwgcm91dGVyIGFkdmVydGlzZW1lbnRzLCBhbmQgbWFudWFsIHJvdXRlIGRlbGV0aW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDE6MjA6MTQuMjYzNDMzMjI0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzEwODY5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3YjQ0NWJkMDJmNGY4ODQ5N2ViZGFkOTE4Nzk4YjhjODNkMTk2YTkxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDggMDE6MjA6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxcbmluZGV4IDMzMTk1ZGI5Njc0NmMuLjI1MzAzN2VhNTE3NmEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxcbkBAIC03OCw2ICs3OCwyNyBAQCBkZWZpbml0aW9uczpcXG4gICAgICAgLVxcbiAgICAgICAgIG5hbWU6IHJ0YS11c2VkXFxuICAgICAgICAgdHlwZTogdTMyXFxuKyAgLVxcbisgICAgbmFtZTogZGVsLXJlYXNvblxcbisgICAgdHlwZTogZW51bVxcbisgICAgbmFtZS1wcmVmaXg6IHJ0LWRlbC1yZWFzb24tXFxuKyAgICBlbnVtLW5hbWU6IHJ0LWRlbC1yZWFzb25cXG4rICAgIGRvYzogfFxcbisgICAgICBXaHkgdGhlIGtlcm5lbCBkZWxldGVkIGEgcm91dGUuIE5ldyBjYXVzZXMgbWF5IGJlIGFwcGVuZGVkLiBUaGVcXG4rICAgICAgdmFsdWUgc3BhY2UgaXMgZmFtaWx5LWFnbm9zdGljLCBhIHZhbHVlIGlzIG5ldmVyIHJlaW50ZXJwcmV0ZWRcXG4rICAgICAgcGVyIGFkZHJlc3MgZmFtaWx5LlxcbisgICAgZW50cmllczpcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IHVuc3BlY1xcbisgICAgICAgIGRvYzogVGhlIGRlbGV0aW9uIHBhdGggZG9lcyBub3QgcmVjb3JkIGEgY2F1c2UuXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBleHBpcmVkXFxuKyAgICAgICAgZG9jOiBUaGUgUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCBhbmQgdGhlIHJvdXRlIHdhcyBnYXJiYWdlXFxuKyAgICAgICAgICBjb2xsZWN0ZWQuXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiByYS13aXRoZHJhd25cXG4rICAgICAgICBkb2M6IEEgUm91dGVyIEFkdmVydGlzZW1lbnQgd2l0aGRyZXcgdGhlIHJvdXRlIHdpdGggYSB6ZXJvXFxuKyAgICAgICAgICBsaWZldGltZS5cXG4gXFxuIGF0dHJpYnV0ZS1zZXRzOlxcbiAgIC1cXG5AQCAtMTg1LDYgKzIwNiwxOCBAQCBhdHRyaWJ1dGUtc2V0czpcXG4gICAgICAgICB0eXBlOiB1MzJcXG4gICAgICAgICBieXRlLW9yZGVyOiBiaWctZW5kaWFuXFxuICAgICAgICAgZGlzcGxheS1oaW50OiBoZXhcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGRlbC1yZWFzb25cXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBlbnVtOiBkZWwtcmVhc29uXFxuKyAgICAgICAgZG9jOiB8XFxuKyAgICAgICAgICBFbWl0dGVkIG9ubHkgb24gUlRNX0RFTFJPVVRFIG5vdGlmaWNhdGlvbnMsIGFuZCBvbmx5IHdoZW4gdGhlXFxuKyAgICAgICAgICBkZWxldGlvbiBwYXRoIHJlY29yZHMgYSBjYXVzZS4gQW4gYWJzZW50IGF0dHJpYnV0ZSBtZWFuc1xcbisgICAgICAgICAgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdFxcbisgICAgICAgICAgcmVjb3JkIGl0cyBjYXVzZSwgY29uc3VtZXJzIG11c3QgdHJlYXQgYWJzZW50IGFuZCB1bnNwZWNcXG4rICAgICAgICAgIGlkZW50aWNhbGx5LiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhXFxuKyAgICAgICAgICBjYXVzZS4gVGhlIGF0dHJpYnV0ZSBpcyBub3RpZmljYXRpb24tb25seSwgdGhlIGtlcm5lbCByZWplY3RzXFxuKyAgICAgICAgICBpdCBpbiByZXF1ZXN0cy5cXG4gICAtXFxuICAgICBuYW1lOiBtZXRyaWNzXFxuICAgICBuYW1lLXByZWZpeDogcnRheC1cXG5AQCAtMjk5LDYgKzMzMiw3IEBAIG9wZXJhdGlvbnM6XFxuICAgICAgICAgICAgIC0gZHBvcnRcXG4gICAgICAgICAgICAgLSBuaC1pZFxcbiAgICAgICAgICAgICAtIGZsb3dsYWJlbFxcbisgICAgICAgICAgICAtIGRlbC1yZWFzb25cXG4gICAgICAgZHVtcDpcXG4gICAgICAgICByZXF1ZXN0OlxcbiAgICAgICAgICAgdmFsdWU6IDI2XFxuQEAgLTMxMyw3ICszNDcsMzUgQEAgb3BlcmF0aW9uczpcXG4gICAgICAgZG86XFxuICAgICAgICAgcmVxdWVzdDpcXG4gICAgICAgICAgIHZhbHVlOiAyNFxcbi0gICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRyc1xcbisgICAgICAgICAgYXR0cmlidXRlczogXFx1MDAyNnJvdXRlLXJlcS1hdHRyc1xcbisgICAgICAgICAgICAtIGRzdFxcbisgICAgICAgICAgICAtIHNyY1xcbisgICAgICAgICAgICAtIGlpZlxcbisgICAgICAgICAgICAtIG9pZlxcbisgICAgICAgICAgICAtIGdhdGV3YXlcXG4rICAgICAgICAgICAgLSBwcmlvcml0eVxcbisgICAgICAgICAgICAtIHByZWZzcmNcXG4rICAgICAgICAgICAgLSBtZXRyaWNzXFxuKyAgICAgICAgICAgIC0gbXVsdGlwYXRoXFxuKyAgICAgICAgICAgIC0gZmxvd1xcbisgICAgICAgICAgICAtIGNhY2hlaW5mb1xcbisgICAgICAgICAgICAtIHRhYmxlXFxuKyAgICAgICAgICAgIC0gbWFya1xcbisgICAgICAgICAgICAtIG1mYy1zdGF0c1xcbisgICAgICAgICAgICAtIHZpYVxcbisgICAgICAgICAgICAtIG5ld2RzdFxcbisgICAgICAgICAgICAtIHByZWZcXG4rICAgICAgICAgICAgLSBlbmNhcC10eXBlXFxuKyAgICAgICAgICAgIC0gZW5jYXBcXG4rICAgICAgICAgICAgLSBleHBpcmVzXFxuKyAgICAgICAgICAgIC0gcGFkXFxuKyAgICAgICAgICAgIC0gdWlkXFxuKyAgICAgICAgICAgIC0gdHRsLXByb3BhZ2F0ZVxcbisgICAgICAgICAgICAtIGlwLXByb3RvXFxuKyAgICAgICAgICAgIC0gc3BvcnRcXG4rICAgICAgICAgICAgLSBkcG9ydFxcbisgICAgICAgICAgICAtIG5oLWlkXFxuKyAgICAgICAgICAgIC0gZmxvd2xhYmVsXFxuICAgICAtXFxuICAgICAgIG5hbWU6IGRlbHJvdXRlXFxuICAgICAgIGRvYzogRGVsZXRlIGFuIGV4aXN0aW5nIHJvdXRlXFxuQEAgLTMyMSw0ICszODMsMjMgQEAgb3BlcmF0aW9uczpcXG4gICAgICAgZG86XFxuICAgICAgICAgcmVxdWVzdDpcXG4gICAgICAgICAgIHZhbHVlOiAyNVxcbi0gICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRyc1xcbisgICAgICAgICAgYXR0cmlidXRlczogKnJvdXRlLXJlcS1hdHRyc1xcbisgICAgLVxcbisgICAgICBuYW1lOiBuZXdyb3V0ZS1udGZcXG4rICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBjcmVhdGVkIHJvdXRlLlxcbisgICAgICB2YWx1ZTogMjRcXG4rICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxcbisgICAgLVxcbisgICAgICBuYW1lOiBkZWxyb3V0ZS1udGZcXG4rICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBkZWxldGVkIHJvdXRlLlxcbisgICAgICB2YWx1ZTogMjVcXG4rICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxcbitcXG4rbWNhc3QtZ3JvdXBzOlxcbisgIGxpc3Q6XFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2NC1yb3V0ZVxcbisgICAgICB2YWx1ZTogN1xcbisgICAgLVxcbisgICAgICBuYW1lOiBydG5sZ3JwLWlwdjYtcm91dGVcXG4rICAgICAgdmFsdWU6IDExXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaCBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaFxcbmluZGV4IDljZDI3ZTFiOWI2OTIuLjIzMjI4OWI0MzljM2MgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXFxuQEAgLTQ2OCw3ICs0NjgsOCBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFxuIGludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4gXFx0ICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyk7XFxuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuK1xcdCAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xcbiBcXG4gc3RhdGljIGlubGluZVxcbiB2b2lkIHJ0Nl9nZXRfcHJlZnNyYyhjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXFxuQEAgLTUzMiw2ICs1MzMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4gI2VuZGlmXFxuIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbiBcXHRcXHQgICAgIHVuc2lnbmVkIGludCBmbGFncyk7XFxuK3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XFxuIFxcbiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXFxuIFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIG5vdyk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcXG5pbmRleCAwOWZmZTBmMTNjZTc1Li5jYzA0NTcwNTg2MmRlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcXG5AQCAtMTI2LDYgKzEyNiw4IEBAIGludCBpcHY2X3JvdXRlX2lvY3RsKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCxcXG4gaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcXG4gXFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbiBpbnQgaXA2X2luc19ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSk7XFxuK2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcXG4rXFx0XFx0ICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xcbiAjZWxzZVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcXG5pbmRleCAyNzI2NWZkMzFlNWZjLi4zOTg4YjUxZGI1MzlmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxcbkBAIC0zOTksNiArMzk5LDcgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcXG4gXFx0UlRBX0RQT1JULFxcbiBcXHRSVEFfTkhfSUQsXFxuIFxcdFJUQV9GTE9XTEFCRUwsXFxuK1xcdFJUQV9ERUxfUkVBU09OLFxcbiBcXHRfX1JUQV9NQVhcXG4gfTtcXG4gXFxuQEAgLTQwNyw2ICs0MDgsMzAgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcXG4gI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKVxcbiAjZGVmaW5lIFJUTV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IHJ0bXNnKSlcXG4gXFxuKy8qIFJUQV9ERUxfUkVBU09OOiB3aHkgdGhlIGtlcm5lbCBkZWxldGVkIHRoZSByb3V0ZS4gdTMyLlxcbisgKiBFbWl0dGVkIG9ubHkgb24gUlRNX0RFTFJPVVRFIG5vdGlmaWNhdGlvbnMsIGFuZCBvbmx5IHdoZW4gdGhlIGRlbGV0aW9uXFxuKyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYVxcbisgKiBkZWxldGlvbiBwYXRoIHRoYXQgZG9lcyBub3QgKHlldCkgcmVjb3JkIGl0cyBjYXVzZSAtIGNvbnN1bWVycyBtdXN0XFxuKyAqIHRyZWF0IFxcXCJhYnNlbnRcXFwiIGFuZCBcXFwidW5zcGVjXFxcIiBpZGVudGljYWxseS4gTmV3IGNhdXNlcyBtYXkgYmUgYXBwZW5kZWQuXFxuKyAqIEN1cnJlbnRseSBvbmx5IElQdjYgZGVsZXRpb24gcGF0aHMgcmVjb3JkIGEgY2F1c2UuXFxuKyAqXFxuKyAqIFRoZSBhdHRyaWJ1dGUgaXMgbm90aWZpY2F0aW9uLW9ubHk6IHRoZSBrZXJuZWwgcmVqZWN0cyBpdCBpblxcbisgKiByZXF1ZXN0cywgc28gYSBub3RpZmljYXRpb24gbXVzdCBub3QgYmUgZWNob2VkIGJhY2sgdmVyYmF0aW0uXFxuKyAqXFxuKyAqIFRoZSB2YWx1ZSBzcGFjZSBpcyBmYW1pbHktYWdub3N0aWM6IGEgdmFsdWUgbXVzdCBuZXZlciBiZVxcbisgKiByZWludGVycHJldGVkIHBlciBhZGRyZXNzIGZhbWlseS4gQSBjYXVzZSB0aGF0IG9ubHkgb25lIGZhbWlseSBjYW5cXG4rICogcHJvZHVjZSBzdGlsbCBnZXRzIGl0cyBvd24gdmFsdWUgcmF0aGVyIHRoYW4gcmV1c2luZyBhbm90aGVyXFxuKyAqIGZhbWlseSdzLlxcbisgKi9cXG4rZW51bSBydF9kZWxfcmVhc29uIHtcXG4rXFx0UlRfREVMX1JFQVNPTl9VTlNQRUMsXFx0XFx0LyogY2F1c2Ugbm90IHJlY29yZGVkICovXFxuK1xcdFJUX0RFTF9SRUFTT05fRVhQSVJFRCxcXHRcXHQvKiBSVEZfRVhQSVJFUyBsaWZldGltZSByYW4gb3V0IChHQykgKi9cXG4rXFx0UlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04sXFx0LyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqL1xcbitcXHRfX1JUX0RFTF9SRUFTT05fTUFYXFxuK307XFxuK1xcbisjZGVmaW5lIFJUX0RFTF9SRUFTT05fTUFYIChfX1JUX0RFTF9SRUFTT05fTUFYIC0gMSlcXG4rXFxuIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuXFxuICAqXFxuICAqIFxcXCJzdHJ1Y3QgcnRuZXh0aG9wXFxcIiBkZXNjcmliZXMgYWxsIG5lY2Vzc2FyeSBuZXh0aG9wIGluZm9ybWF0aW9uLFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xcbmluZGV4IGY2ZmEyNzE1YjQ1MGIuLjlkODliZTdlMDU0NGIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuY1xcbisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmNcXG5AQCAtMjg3NCw3ICsyODc0LDggQEAgdm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXFxuIFxcdFxcdGlmIChydCkge1xcbiBcXHRcXHRcXHQvKiBBdXRvY29uZiBwcmVmaXggcm91dGUgKi9cXG4gXFx0XFx0XFx0aWYgKHZhbGlkX2xmdCA9PSAwKSB7XFxuLVxcdFxcdFxcdFxcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xcbitcXHRcXHRcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcXG4gXFx0XFx0XFx0XFx0cnQgPSBOVUxMO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHR0YWJsZSA9IHJ0LVxcdTAwM2VmaWI2X3RhYmxlO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcXG5pbmRleCBlOWZjNjkyZDRmM2IyLi4zZTM4MmJhMTU3M2UzIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xcbisrKyBiL25ldC9pcHY2L2lwNl9maWIuY1xcbkBAIC0xOTY3LDcgKzE5NjcsOCBAQCBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXFxuLVxcdFxcdFxcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0ICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IGZpYjZfaW5mbyAqbGVhZiwgKnJlcGxhY2VfcnQgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgZmliNl93YWxrZXIgKnc7XFxuQEAgLTIwNTYsMTMgKzIwNTcsMTQgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcXG4gXFx0XFx0XFx0Y2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7XFxuIFxcdH1cXG4gXFx0aWYgKCFpbmZvLVxcdTAwM2Vza2lwX25vdGlmeSlcXG4tXFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDApO1xcbitcXHRcXHRpbmV0Nl9ydF9kZWxfbm90aWZ5KHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcXG4gXFxuIFxcdGZpYjZfaW5mb19yZWxlYXNlKHJ0KTtcXG4gfVxcbiBcXG4gLyogTmVlZCB0byBvd24gdGFibGUtXFx1MDAzZXRiNl9sb2NrICovXFxuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuK1xcdCAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cXHUwMDNlbmxfbmV0O1xcbiBcXHRzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwO1xcbkBAIC0yMDkxLDcgKzIwOTMsNyBAQCBpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbiBcXHRcXHRpZiAocnQgPT0gY3VyKSB7XFxuIFxcdFxcdFxcdGlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKVxcbiBcXHRcXHRcXHRcXHRmaWI2X3JvdXRlc19yZXF1aXJlX3NyY19kZWMoaW5mby1cXHUwMDNlbmxfbmV0KTtcXG4tXFx0XFx0XFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8pO1xcbitcXHRcXHRcXHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbywgZGVsX3JlYXNvbik7XFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJ0cF9uZXh0ID0gXFx1MDAyNmN1ci1cXHUwMDNlZmliNl9uZXh0O1xcbkBAIC0yMjUzLDcgKzIyNTUsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxuIFxcdFxcdHJlcyA9IGMtXFx1MDAzZWZ1bmMocnQsIGMtXFx1MDAzZWFyZyk7XFxuIFxcdFxcdGlmIChyZXMgPT0gLTEpIHtcXG4gXFx0XFx0XFx0dy1cXHUwMDNlbGVhZiA9IHJ0O1xcbi1cXHRcXHRcXHRyZXMgPSBmaWI2X2RlbChydCwgXFx1MDAyNmluZm8pO1xcbitcXHRcXHRcXHRyZXMgPSBmaWI2X2RlbChydCwgXFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0aWYgKHJlcykge1xcbiAjaWYgUlQ2X0RFQlVHIFxcdTAwM2U9IDJcXG4gXFx0XFx0XFx0XFx0cHJfZGVidWcoXFxcIiVzOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcXFxcblxcXCIsXFxuQEAgLTI0MDEsNyArMjQwMyw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LFxcbiBcXG4gXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgbiwgXFx1MDAyNnRiNi1cXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxcbiBcXHRcXHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxcbi1cXHRcXHRcXHRmaWI2X2RlbChydCwgXFx1MDAyNmluZm8pO1xcbitcXHRcXHRcXHRmaWI2X2RlbChydCwgXFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fRVhQSVJFRCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcXG5pbmRleCBmZTM2YjNmNTEyODUwLi4xMTExYzRlYmM2MWQ5IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L25kaXNjLmNcXG4rKysgYi9uZXQvaXB2Ni9uZGlzYy5jXFxuQEAgLTEzNjEsNyArMTM2MSw5IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi1cXHUwMDNlY25mLnJhX2RlZnJ0cl9tZXRyaWM7XFxuIFxcdC8qIGRlbGV0ZSB0aGUgcm91dGUgaWYgbGlmZXRpbWUgaXMgMCBvciBpZiBtZXRyaWMgbmVlZHMgY2hhbmdlICovXFxuIFxcdGlmIChydCBcXHUwMDI2XFx1MDAyNiAobGlmZXRpbWUgPT0gMCB8fCBydC1cXHUwMDNlZmliNl9tZXRyaWMgIT0gZGVmcnRyX3Vzcl9tZXRyaWMpKSB7XFxuLVxcdFxcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xcbitcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LFxcbitcXHRcXHRcXHRcXHQgIGxpZmV0aW1lID09IDAgPyBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRcXHRydCA9IE5VTEw7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuaW5kZXggZmM0MmQ2N2U1ODIyNi4uMTcwNDM1OWQzOTYwZCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXFxuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xcbkBAIC0xMTEsNyArMTExLDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLFxcbiBcXHRcXHRcXHQgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXFxuLVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbitcXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XFxuIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9maW5kX2NhY2hlZF9ydChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcik7XFxuQEAgLTEwMjAsNyArMTAyMCw3IEBAIGludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sXFxuIFxcdFxcdFxcdFxcdFxcdGd3YWRkciwgZGV2KTtcXG4gXFxuIFxcdGlmIChydCBcXHUwMDI2XFx1MDAyNiAhbGlmZXRpbWUpIHtcXG4tXFx0XFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XFxuK1xcdFxcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcXG4gXFx0XFx0cnQgPSBOVUxMO1xcbiBcXHR9XFxuIFxcbkBAIC0zOTczLDcgKzM5NzMsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuK3N0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0ZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cXHUwMDNlbmxfbmV0O1xcbiBcXHRzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7XFxuQEAgLTM5ODYsNyArMzk4Nyw3IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcXG4gXFxuIFxcdHRhYmxlID0gcnQtXFx1MDAzZWZpYjZfdGFibGU7XFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dGFibGUtXFx1MDAzZXRiNl9sb2NrKTtcXG4tXFx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8pO1xcbitcXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbiBcXG4gb3V0OlxcbkBAIC00MDAxLDcgKzQwMDIsMTUgQEAgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcXG4gXFx0XFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnlcXG4gXFx0fTtcXG4gXFxuLVxcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZpbmZvKTtcXG4rXFx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4rfVxcbitcXG4raW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuK1xcdFxcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbit7XFxuK1xcdHN0cnVjdCBubF9pbmZvIGluZm8gPSB7IC5ubF9uZXQgPSBuZXQgfTtcXG4rXFxuK1xcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZpbmZvLCBkZWxfcmVhc29uKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxcbkBAIC00MDI4LDcgKzQwMzcsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXFxuIFxcbiBcXHRcXHRcXHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsXFxuIFxcdFxcdFxcdFxcdFxcdCAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCAwKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBSVF9ERUxfUkVBU09OX1VOU1BFQykgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRcXHRcXHRza2IgPSBOVUxMO1xcbiBcXHRcXHRcXHR9IGVsc2VcXG5AQCAtNDA2NCwxMyArNDA3NCwxMyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaWJsaW5nLCBuZXh0X3NpYmxpbmcsXFxuIFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2cnQtXFx1MDAzZWZpYjZfc2libGluZ3MsXFxuIFxcdFxcdFxcdFxcdFxcdCBmaWI2X3NpYmxpbmdzKSB7XFxuLVxcdFxcdFxcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8pO1xcbitcXHRcXHRcXHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7XFxuK1xcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIG91dF91bmxvY2s6XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbiBvdXRfcHV0OlxcbkBAIC00MTk2LDcgKzQyMDYsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXFxuIFxcdFxcdFxcdFxcdGlmICghZmliNl9pbmZvX2hvbGRfc2FmZShydCkpXFxuIFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0XFx0ZXJyID0gIF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmNmZy1cXHUwMDNlZmNfbmxpbmZvKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcXHUwMDI2Y2ZnLVxcdTAwM2VmY19ubGluZm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKGNmZy1cXHUwMDNlZmNfbmhfaWQpXFxuQEAgLTQyMTUsNyArNDIyNiw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcXG4gXFxuIFxcdFxcdFxcdC8qIGlmIGdhdGV3YXkgd2FzIHNwZWNpZmllZCBvbmx5IGRlbGV0ZSB0aGUgb25lIGhvcCAqL1xcbiBcXHRcXHRcXHRpZiAoY2ZnLVxcdTAwM2VmY19mbGFncyBcXHUwMDI2IFJURl9HQVRFV0FZKVxcbi1cXHRcXHRcXHRcXHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZjZmctXFx1MDAzZWZjX25saW5mbyk7XFxuK1xcdFxcdFxcdFxcdGVyciA9IF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmNmZy1cXHUwMDNlZmNfbmxpbmZvLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtNTczOSw2ICs1NzUxLDcgQEAgc3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpXFxuIFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpXFxuIFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXFxuIFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKDEpIC8qIFJUQV9QUkVGICovXFxuK1xcdCAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9ERUxfUkVBU09OICovXFxuIFxcdCAgICAgICArIG5leHRob3BfbGVuO1xcbiB9XFxuIFxcbkBAIC01Nzc1LDcgKzU3ODgsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4gXFx0XFx0XFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXFxuIFxcdFxcdFxcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcXG4tXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncylcXG4rXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IHJ0Nl9pbmZvICpydDYgPSBkc3RfcnQ2X2luZm8oZHN0KTtcXG4gXFx0c3RydWN0IHJ0NmtleSAqcnQ2X2RzdCwgKnJ0Nl9zcmM7XFxuQEAgLTU5NTQsNiArNTk2NywxMCBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAocnRubF9wdXRfY2FjaGVpbmZvKHNrYiwgZHN0LCAwLCBleHBpcmVzLCBkc3QgPyBkc3QtXFx1MDAzZWVycm9yIDogMCkgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gXFxuK1xcdGlmIChkZWxfcmVhc29uICE9IFJUX0RFTF9SRUFTT05fVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIFJUQV9ERUxfUkVBU09OLCBkZWxfcmVhc29uKSlcXG4rXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuK1xcbiBcXHRpZiAobmxhX3B1dF91OChza2IsIFJUQV9QUkVGLCBJUFY2X0VYVFJBQ1RfUFJFRihydDZfZmxhZ3MpKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbkBAIC02MDU1LDcgKzYwNzIsOCBAQCBzdGF0aWMgaW50IHJ0Nl9uaF9kdW1wX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfbmggKm5oLCB2b2lkICphcmcpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cnQ2X2V4LVxcdTAwM2VydDZpLVxcdTAwM2Vkc3QsIE5VTEwsIE5VTEwsIDAsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGR1bXAtXFx1MDAzZWNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGR1bXAtXFx1MDAzZWNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgdy1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgZHVtcC1cXHUwMDNlY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCB3LVxcdTAwM2VmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuQEAgLTYxMDMsNyArNjEyMSw4IEBAIGludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxcbiBcXHRcXHRcXHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy1cXHUwMDNlc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAwLCBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgTkVUTElOS19DQihhcmctXFx1MDAzZWNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICBhcmctXFx1MDAzZWNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdCAgYXJnLVxcdTAwM2VjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgIFJUX0RFTF9SRUFTT05fVU5TUEVDKSkge1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRjb3VudCsrO1xcbkBAIC02MzM2LDEyICs2MzU1LDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRcXHRcXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgaWlmLCBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDApO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgZHN0LCBcXHUwMDI2Zmw2LmRhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDApO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGVyciA9IC1FTkVUVU5SRUFDSDtcXG4gXFx0fVxcbkBAIC02MzU3LDggKzYzNzgsOSBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuLVxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcXG4rc3RhdGljIHZvaWQgX19pbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsXFxuK1xcdFxcdFxcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXFx1MDAzZW5sX25ldDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5AQCAtNjM3Nyw3ICs2Mzk5LDcgQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuIFxcdFxcdGdvdG8gZXJyb3V0O1xcbiBcXG4gXFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXFxuLVxcdFxcdFxcdCAgICBldmVudCwgaW5mby1cXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XFxuK1xcdFxcdFxcdCAgICBldmVudCwgaW5mby1cXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncywgZGVsX3JlYXNvbik7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHQvKiAtRU1TR1NJWkUgaW1wbGllcyBuZWVkZWQgc3BhY2UgZ3JldyB1bmRlciB1cy4gKi9cXG5AQCAtNjM5OCw2ICs2NDIwLDE4IEBAIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbiBcXHRydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfUk9VVEUsIGVycik7XFxuIH1cXG4gXFxuK3ZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MpXFxuK3tcXG4rXFx0X19pbmV0Nl9ydF9ub3RpZnkoZXZlbnQsIHJ0LCBpbmZvLCBubG1fZmxhZ3MsIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4rfVxcbitcXG4rdm9pZCBpbmV0Nl9ydF9kZWxfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0IGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbit7XFxuK1xcdF9faW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDAsIGRlbF9yZWFzb24pO1xcbit9XFxuK1xcbiB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuIFxcdFxcdCAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcXG4ge1xcbkBAIC02NDEwLDcgKzY0NDQsOCBAQCB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuIFxcdFxcdGdvdG8gZXJyb3V0O1xcbiBcXG4gXFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXFxuLVxcdFxcdFxcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFKTtcXG4rXFx0XFx0XFx0ICAgIFJUTV9ORVdST1VURSwgaW5mby1cXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsXFxuK1xcdFxcdFxcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovXFxuIFxcdFxcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XFxuQEAgLTY0NjMsNyArNjQ5OCw3IEBAIHZvaWQgZmliNl9pbmZvX2h3X2ZsYWdzX3NldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcXG4gXFx0fVxcbiBcXG4gXFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsXFxuLVxcdFxcdFxcdCAgICAwLCAwKTtcXG4rXFx0XFx0XFx0ICAgIDAsIDAsIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cXG4gXFx0XFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcXG5pbmRleCBlNThiZGJkYzU4ZWVhLi4zNDkzNTg4NmI2YWRmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XFxuQEAgLTE3LDcgKzE3LDcgQEAgZnJvbSAudXRpbHMgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBmZF9yZWFkX3RpbWVvdXQsIGNtZCwgYmtnLCBkZWZlciwgXFxcXFxcbiAgICAgd2FpdF9maWxlLCB0b29sLCB0Y1xcbiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHNcXG4gZnJvbSAueW5sIGltcG9ydCBObEVycm9yLCBObGN0cmxGYW1pbHksIFlubEZhbWlseSwgXFxcXFxcbi0gICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseVxcbisgICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XFxuIGZyb20gLnlubCBpbXBvcnQgTmV0c2hhcGVyRmFtaWx5LCBEZXZsaW5rRmFtaWx5LCBQU1BGYW1pbHksIE5ldGxpbmtcXG4gXFxuIF9fYWxsX18gPSBbXFxcIktTUkNcXFwiLFxcbkBAIC0zNCw0ICszNCw0IEBAIF9fYWxsX18gPSBbXFxcIktTUkNcXFwiLFxcbiAgICAgICAgICAgIFxcXCJOZXRkZXZTaW1cXFwiLCBcXFwiTmV0ZGV2U2ltRGV2XFxcIixcXG4gICAgICAgICAgICBcXFwiTmV0c2hhcGVyRmFtaWx5XFxcIiwgXFxcIkRldmxpbmtGYW1pbHlcXFwiLCBcXFwiUFNQRmFtaWx5XFxcIiwgXFxcIk5sRXJyb3JcXFwiLFxcbiAgICAgICAgICAgIFxcXCJZbmxGYW1pbHlcXFwiLCBcXFwiRXRodG9vbEZhbWlseVxcXCIsIFxcXCJOZXRkZXZGYW1pbHlcXFwiLCBcXFwiUnRubEZhbWlseVxcXCIsXFxuLSAgICAgICAgICAgXFxcIk5sY3RybEZhbWlseVxcXCIsIFxcXCJSdG5sQWRkckZhbWlseVxcXCIsIFxcXCJOZXRsaW5rXFxcIl1cXG4rICAgICAgICAgICBcXFwiTmxjdHJsRmFtaWx5XFxcIiwgXFxcIlJ0bmxBZGRyRmFtaWx5XFxcIiwgXFxcIlJ0bmxSb3V0ZUZhbWlseVxcXCIsIFxcXCJOZXRsaW5rXFxcIl1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxcbmluZGV4IDJlNTY3MDYyYWE2Y2MuLjA4ZGVmZjc1NmYyOWIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxcbkBAIC0yOSw3ICsyOSw3IEBAIGV4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm9yIGFzIGU6XFxuIFxcbiBfX2FsbF9fID0gW1xcbiAgICAgXFxcIk5sRXJyb3JcXFwiLCBcXFwiTmxQb2xpY3lcXFwiLCBcXFwiTmV0bGlua1xcXCIsIFxcXCJZbmxGYW1pbHlcXFwiLCBcXFwiU1BFQ19QQVRIXFxcIixcXG4tICAgIFxcXCJFdGh0b29sRmFtaWx5XFxcIiwgXFxcIlJ0bmxGYW1pbHlcXFwiLCBcXFwiUnRubEFkZHJGYW1pbHlcXFwiLFxcbisgICAgXFxcIkV0aHRvb2xGYW1pbHlcXFwiLCBcXFwiUnRubEZhbWlseVxcXCIsIFxcXCJSdG5sQWRkckZhbWlseVxcXCIsIFxcXCJSdG5sUm91dGVGYW1pbHlcXFwiLFxcbiAgICAgXFxcIk5ldGRldkZhbWlseVxcXCIsIFxcXCJOZXRzaGFwZXJGYW1pbHlcXFwiLCBcXFwiTmxjdHJsRmFtaWx5XFxcIiwgXFxcIkRldmxpbmtGYW1pbHlcXFwiLFxcbiAgICAgXFxcIlBTUEZhbWlseVxcXCIsXFxuIF1cXG5AQCAtNTQsNiArNTQsMTEgQEAgY2xhc3MgUnRubEFkZHJGYW1pbHkoWW5sRmFtaWx5KTpcXG4gICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCdydC1hZGRyLnlhbWwnKSkuYXNfcG9zaXgoKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0nJywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcXG4gXFxuK2NsYXNzIFJ0bmxSb3V0ZUZhbWlseShZbmxGYW1pbHkpOlxcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcXG4rICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCdydC1yb3V0ZS55YW1sJykpLmFzX3Bvc2l4KCksXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JycsIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXFxuK1xcbiBjbGFzcyBOZXRkZXZGYW1pbHkoWW5sRmFtaWx5KTpcXG4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3NpemU9MCk6XFxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgnbmV0ZGV2LnlhbWwnKSkuYXNfcG9zaXgoKSxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG5pbmRleCAwYzY3YzdjMDBkODQxLi41Y2MzZWJkY2YwOGRlIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XFxuQEAgLTUsNyArNSw5IEBAIGltcG9ydCBzb2NrZXRcXG4gaW1wb3J0IHN0cnVjdFxcbiBpbXBvcnQgdGltZVxcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XFxuLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5XFxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxcbitmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XFxuK2Zyb20gbGliLnB5IGltcG9ydCBkZWZlclxcbiBcXG4gSVBWNF9BTExfSE9TVFNfTVVMVElDQVNUID0gYidcXFxceGUwXFxcXHgwMFxcXFx4MDBcXFxceDAxJ1xcbiBJUFY0X1RFU1RfTVVMVElDQVNUID0gYidcXFxceGVmXFxcXHgwMVxcXFx4MDFcXFxceDAxJ1xcbkBAIC0xMzQsOCArMTM2LDE4OSBAQCBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC1cXHUwMDNlIE5vbmU6XFxuICAgICBrc2Z0X3RydWUoZlxcXCJpbmV0IHtpZm5hbWV9IGZvcndhcmRpbmcgb25cXFwiIGluIGNtZF9vYmouc3Rkb3V0LFxcbiAgICAgICAgICAgICAgIGZcXFwiTm8gJ2ZvcndhcmRpbmcgb24nIG5vdGlmaWNpYXRpb24gZm91bmQgZm9yIGludGVyZmFjZSB7aWZuYW1lfVxcXCIpXFxuIFxcbitkZWYgX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKTpcXG4rICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcXG4rICAgICAgICBydG5sID0gUnRubFJvdXRlRmFtaWx5KClcXG4rICAgIGRlZmVyKHJ0bmwuY2xvc2UpXFxuKyAgICBydG5sLm50Zl9zdWJzY3JpYmUoXFxcInJ0bmxncnAtaXB2Ni1yb3V0ZVxcXCIpXFxuKyAgICByZXR1cm4gcnRubFxcbitcXG4rXFxuK2RlZiBfd2FpdF9yb3V0ZV9udGYocnRubCwgbmFtZSwgZHN0X2xlbiwgZHN0PU5vbmUsIGRlYWRsaW5lPTEwKTpcXG4rICAgIFxcXCJcXFwiXFxcIlJldHVybiB0aGUgYXR0cnMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIG5vdGlmaWNhdGlvbiwgTm9uZSBvbiB0aW1lb3V0LlxcXCJcXFwiXFxcIlxcbitcXG4rICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XFxuKyAgICAgICAgaWYgbXNnWyduYW1lJ10gIT0gbmFtZTpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBhdHRycyA9IG1zZ1snbXNnJ11cXG4rICAgICAgICBpZiBhdHRyc1sncnRtLWRzdC1sZW4nXSAhPSBkc3RfbGVuOlxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIGlmIGRzdCBpcyBub3QgTm9uZSBhbmQgYXR0cnMuZ2V0KCdkc3QnKSAhPSBkc3Q6XFxuKyAgICAgICAgICAgIGNvbnRpbnVlXFxuKyAgICAgICAgcmV0dXJuIGF0dHJzXFxuKyAgICByZXR1cm4gTm9uZVxcbitcXG4rXFxuK2RlZiBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsIG5hbWUsIHdhbnQsIGRlYWRsaW5lPTEwKTpcXG4rICAgIFxcXCJcXFwiXFxcIkdhdGhlciBhdHRycyBvZiBtYXRjaGluZyBub3RpZmljYXRpb25zLCBrZXllZCBieSAoZHN0X2xlbiwgZHN0KS5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICBzZWVuID0ge31cXG4rICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XFxuKyAgICAgICAgaWYgbXNnWyduYW1lJ10gIT0gbmFtZTpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBhdHRycyA9IG1zZ1snbXNnJ11cXG4rICAgICAgICBrZXkgPSAoYXR0cnNbJ3J0bS1kc3QtbGVuJ10sIGF0dHJzLmdldCgnZHN0JykpXFxuKyAgICAgICAgaWYga2V5IGluIHdhbnQ6XFxuKyAgICAgICAgICAgIHNlZW5ba2V5XSA9IGF0dHJzXFxuKyAgICAgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XFxuKyAgICAgICAgICAgICAgICBicmVha1xcbisgICAgcmV0dXJuIHNlZW5cXG4rXFxuK1xcbitkZWYgX3dyaXRlX2lwdjZfc3lzY3RsKG5hbWUsIHZhbHVlKTpcXG4rICAgIHdpdGggb3BlbihmXFxcIi9wcm9jL3N5cy9uZXQvaXB2Ni97bmFtZX1cXFwiLCBcXFwid1xcXCIpIGFzIGY6XFxuKyAgICAgICAgZi53cml0ZShmXFxcInt2YWx1ZX1cXFxcblxcXCIpXFxuK1xcbitcXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkKCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIkFuIGV4cGlyZWQgcm91dGUgcmVwb3J0cyBSVEFfREVMX1JFQVNPTiA9PSBleHBpcmVkLlxcXCJcXFwiXFxcIlxcbitcXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcXG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcXG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFxcXCJyb3V0ZS9nY19pbnRlcnZhbFxcXCIsIDIpXFxuKyAgICAgICAgaXAoXFxcImxpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIHNldCBkZXYgZHVtbXkxIHVwXFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwiLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjI6Oi82NCBkZXYgZHVtbXkxIGV4cGlyZXMgMlxcXCIsIG5zPXN0cihucykpXFxuK1xcbisgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCA2NCwgJzIwMDE6ZGI4OjI6OicsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmU9MTUpXFxuKyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXFxcIm5vIFJUTV9ERUxST1VURSBmb3IgdGhlIGV4cGlyZWQgcm91dGVcXFwiKVxcbisgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgnZGVsLXJlYXNvbicpLCAnZXhwaXJlZCcpXFxuK1xcbitcXG4rZGVmIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIGxpZmV0aW1lLCByaW89Tm9uZSwgcGlvPU5vbmUpOlxcbisgICAgXFxcIlxcXCJcXFwiVGhlIGtlcm5lbCBmaWxscyBpbiB0aGUgSUNNUHY2IGNoZWNrc3VtIG9uIHJhdyBJQ01QdjYgc29ja2V0cy5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICAjIHR5cGUsIGNvZGUsIGNrc3VtLCBob3AgbGltaXQsIGZsYWdzLCByb3V0ZXIgbGlmZXRpbWUsXFxuKyAgICAjIHJlYWNoYWJsZSB0aW1lLCByZXRyYW5zIHRpbWVyXFxuKyAgICByYSA9IHN0cnVjdC5wYWNrKCchQkJIQkJISUknLCAxMzQsIDAsIDAsIDY0LCAwLCBsaWZldGltZSwgMCwgMClcXG4rICAgIGlmIHJpbyBpcyBub3QgTm9uZTpcXG4rICAgICAgICBwcmVmaXgsIHBsZW4sIHJpb19saWZldGltZSA9IHJpb1xcbisgICAgICAgICMgUkZDIDQxOTEgcm91dGUgaW5mb3JtYXRpb24gb3B0aW9uLCAvNjQgcHJlZml4ICg4IGJ5dGVzKVxcbisgICAgICAgIHJhICs9IHN0cnVjdC5wYWNrKCchQkJCQkknLCAyNCwgMiwgcGxlbiwgMCwgcmlvX2xpZmV0aW1lKVxcbisgICAgICAgIHJhICs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpWzo4XVxcbisgICAgaWYgcGlvIGlzIG5vdCBOb25lOlxcbisgICAgICAgIHByZWZpeCwgcGxlbiwgdmFsaWRfbGZ0ID0gcGlvXFxuKyAgICAgICAgIyBSRkMgNDg2MSBwcmVmaXggaW5mb3JtYXRpb24gb3B0aW9uLCBvbi1saW5rIG9ubHkgKEwgc2V0LCBBIGNsZWFyKVxcbisgICAgICAgIHJhICs9IHN0cnVjdC5wYWNrKCchQkJCQklJSScsIDMsIDQsIHBsZW4sIDB4ODAsIHZhbGlkX2xmdCwgMCwgMClcXG4rICAgICAgICByYSArPSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVxcbisgICAgc29jay5zZW5kdG8ocmEsICgnZmYwMjo6MScsIDAsIDAsIGlmaW5kZXgpKVxcbitcXG4rXFxuK2RlZiBfcmFfcm91dGVyX3NvY2sobnNfciwgaWZuYW1lKTpcXG4rICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxcbisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5JUFBST1RPX0lDTVBWNilcXG4rICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfTVVMVElDQVNUX0hPUFMsIDI1NSlcXG4rICAgICAgICBkZWZlcihzb2NrLmNsb3NlKVxcbisgICAgICAgIHJldHVybiBzb2NrLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoaWZuYW1lKVxcbitcXG4rXFxuK2RlZiBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCB3YW50LCAqKnJhX29wdHMpOlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBTZW5kaW5nIGZhaWxzIHdpdGggRUFERFJOT1RBVkFJTCB3aGlsZSB0aGUgcm91dGVyJ3MgbGluay1sb2NhbFxcbisgICAgYWRkcmVzcyBpcyBzdGlsbCB0ZW50YXRpdmUuIGFkZHJjb25mX2RhZF9zdGFydCgpIG9ubHkgcXVldWVzXFxuKyAgICBhZGRyY29uZl9kYWRfd29yaygpLCBhbmQgSUZBX0ZfVEVOVEFUSVZFIGlzIGNsZWFyZWQgd2hlbiB0aGF0IHdvcmtcXG4rICAgIGl0ZW0gcnVucywgc28gcmV0cnkgdW50aWwgaXQgZG9lcy5cXG4rICAgIFxcXCJcXFwiXFxcIlxcbitcXG4rICAgIHNlZW4gPSB7fVxcbisgICAgZm9yIF8gaW4gcmFuZ2UoMTApOlxcbisgICAgICAgIHRyeTpcXG4rICAgICAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgKipyYV9vcHRzKVxcbisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOlxcbisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMilcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICduZXdyb3V0ZS1udGYnLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudCAtIHNldChzZWVuLmtleXMoKSksIGRlYWRsaW5lPTIpKVxcbisgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XFxuKyAgICAgICAgICAgIGJyZWFrXFxuKyAgICByZXR1cm4gc2VlblxcbitcXG4rXFxuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduKCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgUm91dGVzIHdpdGhkcmF3biBieSBhIHplcm8tbGlmZXRpbWUgUkEgKHJvdXRlciBsaWZldGltZSwgUkZDIDQ4NjFcXG4rICAgIFBJTywgUkZDIDQxOTEgUklPKSByZXBvcnQgUlRBX0RFTF9SRUFTT04gPT0gcmEtd2l0aGRyYXduLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgIyAocnRtLWRzdC1sZW4sIGRzdCk7IHRoZSBkZWZhdWx0IHJvdXRlIGNhcnJpZXMgbm8gUlRBX0RTVFxcbisgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAnMjAwMTpkYjg6Njo6JyksICg2NCwgJzIwMDE6ZGI4OjU6OicpfVxcbitcXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuc19oLCBOZXROUygpIGFzIG5zX3I6XFxuKyAgICAgICAgaXAoZlxcXCJsaW5rIGFkZCB2ZXRoMCBuZXRucyB7bnNfaH0gdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyB7bnNfcn1cXFwiKVxcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfaCkpOlxcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXFxcImNvbmYvdmV0aDAvYWNjZXB0X3JhXFxcIiwgMilcXG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFxcXCJjb25mL3ZldGgwL2ZvcndhcmRpbmdcXFwiLCAwKVxcbisgICAgICAgICAgICB0cnk6XFxuKyAgICAgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXFxcImNvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW5cXFwiLCA2NClcXG4rICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOlxcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXFwibm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcXCIpXFxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XFxuKyAgICAgICAgICAgICMgc2tpcCB0aGUgREFEIHByb2JlIHNvIHRoZSByb3V0ZXIncyBsaW5rLWxvY2FsIHNvdXJjZSBvbmx5XFxuKyAgICAgICAgICAgICMgaGFzIHRvIHdhaXQgZm9yIGFkZHJjb25mX2RhZF93b3JrKCkgdG8gY2xlYXIgSUZBX0ZfVEVOVEFUSVZFXFxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwiY29uZi92ZXRoMS9hY2NlcHRfZGFkXFxcIiwgMClcXG4rICAgICAgICBpcChcXFwibGluayBzZXQgZGV2IHZldGgwIHVwXFxcIiwgbnM9c3RyKG5zX2gpKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIHNldCBkZXYgdmV0aDEgdXBcXFwiLCBucz1zdHIobnNfcikpXFxuK1xcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnNfaClcXG4rICAgICAgICBzb2NrLCBpZmluZGV4ID0gX3JhX3JvdXRlcl9zb2NrKG5zX3IsIFxcXCJ2ZXRoMVxcXCIpXFxuK1xcbisgICAgICAgIHNlZW4gPSBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCByb3V0ZXMsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmV0aW1lPTE4MDAsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbz0oJzIwMDE6ZGI4OjU6OicsIDY0LCA2MDApLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW89KCcyMDAxOmRiODo2OjonLCA2NCwgNjAwKSlcXG4rICAgICAgICBrc2Z0X2VxKHNldChzZWVuKSwgcm91dGVzLCBcXFwibm90IGFsbCBSQSByb3V0ZXMgd2VyZSBpbnN0YWxsZWRcXFwiKVxcbisgICAgICAgIGlmIHNldChzZWVuKSAhPSByb3V0ZXM6XFxuKyAgICAgICAgICAgIHJldHVyblxcbitcXG4rICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAwLCByaW89KCcyMDAxOmRiODo1OjonLCA2NCwgMCksXFxuKyAgICAgICAgICAgICAgICAgcGlvPSgnMjAwMTpkYjg6Njo6JywgNjQsIDApKVxcbisgICAgICAgIHNlZW4gPSBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCByb3V0ZXMpXFxuKyAgICAgICAgZm9yIGtleSBpbiByb3V0ZXM6XFxuKyAgICAgICAgICAgIGF0dHJzID0gc2Vlbi5nZXQoa2V5KVxcbisgICAgICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBmXFxcIm5vIFJUTV9ERUxST1VURSBmb3Ige2tleX1cXFwiKVxcbisgICAgICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCdkZWwtcmVhc29uJyksICdyYS13aXRoZHJhd24nKVxcbitcXG4rXFxuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgQSBkZWxldGlvbiBwYXRoIHRoYXQgcmVjb3JkcyBubyBjYXVzZSAoaGVyZSBhIHVzZXJzcGFjZSByZXF1ZXN0KVxcbisgICAgbXVzdCBub3QgY2FycnkgUlRBX0RFTF9SRUFTT04gYXQgYWxsLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXFxuKyAgICAgICAgaXAoXFxcImxpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIHNldCBkZXYgZHVtbXkxIHVwXFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwiLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwiLTYgcm91dGUgZGVsIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXFxcIiwgbnM9c3RyKG5zKSlcXG4rXFxuKyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJ2RlbHJvdXRlLW50ZicsIDY0LCAnMjAwMTpkYjg6MTo6JylcXG4rICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBcXFwibm8gUlRNX0RFTFJPVVRFIGZvciAyMDAxOmRiODoxOjovNjRcXFwiKVxcbisgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICBrc2Z0X25vdF9pbignZGVsLXJlYXNvbicsIGF0dHJzLFxcbisgICAgICAgICAgICAgICAgICAgICAgICBcXFwidXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uXFxcIilcXG4rXFxuK1xcbiBkZWYgbWFpbigpIC1cXHUwMDNlIE5vbmU6XFxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pXFxuKyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLFxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxcbiAgICAga3NmdF9leGl0KClcXG4gXFxuIGlmIF9fbmFtZV9fID09IFxcXCJfX21haW5fX1xcXCI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAxOjIwOjE0LjczNTI4Nzk4NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM5MTkwOTc1Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUk9VVEVSX1BSRUZcIixcbiAgICBcIklQVjZfUk9VVEVfSU5GT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gICAgXCJpbmV0Nl9ydF9kZWxfbm90aWZ5XCIsXG4gICAgXCJmaWI2X2RlbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgUlRBX0RFTF9SRUFTT04gZm9yIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucywgbW9kaWZ5aW5nIGNvcmUgSVB2NiByb3V0aW5nIGFuZCBuZXRsaW5rIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpcyByZWFjaGFibGUgdmlhIHJvdXRlIGV4cGlyYXRpb24sIHJvdXRlciBhZHZlcnRpc2VtZW50cywgYW5kIG1hbnVhbCByb3V0ZSBkZWxldGlvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdiNDQ1YmQwMmY0Zjg4NDk3ZWJkYWQ5MTg3OThiOGM4M2QxOTZhOTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDAxOjIwOjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuaW5kZXggMzMxOTVkYjk2NzQ2Yy4uMjUzMDM3ZWE1MTc2YSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuQEAgLTc4LDYgKzc4LDI3IEBAIGRlZmluaXRpb25zOlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHJ0YS11c2VkXG4gICAgICAgICB0eXBlOiB1MzJcbisgIC1cbisgICAgbmFtZTogZGVsLXJlYXNvblxuKyAgICB0eXBlOiBlbnVtXG4rICAgIG5hbWUtcHJlZml4OiBydC1kZWwtcmVhc29uLVxuKyAgICBlbnVtLW5hbWU6IHJ0LWRlbC1yZWFzb25cbisgICAgZG9jOiB8XG4rICAgICAgV2h5IHRoZSBrZXJuZWwgZGVsZXRlZCBhIHJvdXRlLiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC4gVGhlXG4rICAgICAgdmFsdWUgc3BhY2UgaXMgZmFtaWx5LWFnbm9zdGljLCBhIHZhbHVlIGlzIG5ldmVyIHJlaW50ZXJwcmV0ZWRcbisgICAgICBwZXIgYWRkcmVzcyBmYW1pbHkuXG4rICAgIGVudHJpZXM6XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogdW5zcGVjXG4rICAgICAgICBkb2M6IFRoZSBkZWxldGlvbiBwYXRoIGRvZXMgbm90IHJlY29yZCBhIGNhdXNlLlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGV4cGlyZWRcbisgICAgICAgIGRvYzogVGhlIFJURl9FWFBJUkVTIGxpZmV0aW1lIHJhbiBvdXQgYW5kIHRoZSByb3V0ZSB3YXMgZ2FyYmFnZVxuKyAgICAgICAgICBjb2xsZWN0ZWQuXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogcmEtd2l0aGRyYXduXG4rICAgICAgICBkb2M6IEEgUm91dGVyIEFkdmVydGlzZW1lbnQgd2l0aGRyZXcgdGhlIHJvdXRlIHdpdGggYSB6ZXJvXG4rICAgICAgICAgIGxpZmV0aW1lLlxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTE4NSw2ICsyMDYsMTggQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAgIGJ5dGUtb3JkZXI6IGJpZy1lbmRpYW5cbiAgICAgICAgIGRpc3BsYXktaGludDogaGV4XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogZGVsLXJlYXNvblxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgICBlbnVtOiBkZWwtcmVhc29uXG4rICAgICAgICBkb2M6IHxcbisgICAgICAgICAgRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZVxuKyAgICAgICAgICBkZWxldGlvbiBwYXRoIHJlY29yZHMgYSBjYXVzZS4gQW4gYWJzZW50IGF0dHJpYnV0ZSBtZWFuc1xuKyAgICAgICAgICBlaXRoZXIgYW4gb2xkZXIga2VybmVsIG9yIGEgZGVsZXRpb24gcGF0aCB0aGF0IGRvZXMgbm90XG4rICAgICAgICAgIHJlY29yZCBpdHMgY2F1c2UsIGNvbnN1bWVycyBtdXN0IHRyZWF0IGFic2VudCBhbmQgdW5zcGVjXG4rICAgICAgICAgIGlkZW50aWNhbGx5LiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhXG4rICAgICAgICAgIGNhdXNlLiBUaGUgYXR0cmlidXRlIGlzIG5vdGlmaWNhdGlvbi1vbmx5LCB0aGUga2VybmVsIHJlamVjdHNcbisgICAgICAgICAgaXQgaW4gcmVxdWVzdHMuXG4gICAtXG4gICAgIG5hbWU6IG1ldHJpY3NcbiAgICAgbmFtZS1wcmVmaXg6IHJ0YXgtXG5AQCAtMjk5LDYgKzMzMiw3IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSBkcG9ydFxuICAgICAgICAgICAgIC0gbmgtaWRcbiAgICAgICAgICAgICAtIGZsb3dsYWJlbFxuKyAgICAgICAgICAgIC0gZGVsLXJlYXNvblxuICAgICAgIGR1bXA6XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjZcbkBAIC0zMTMsNyArMzQ3LDM1IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgZG86XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjRcbi0gICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRyc1xuKyAgICAgICAgICBhdHRyaWJ1dGVzOiBcdTAwMjZyb3V0ZS1yZXEtYXR0cnNcbisgICAgICAgICAgICAtIGRzdFxuKyAgICAgICAgICAgIC0gc3JjXG4rICAgICAgICAgICAgLSBpaWZcbisgICAgICAgICAgICAtIG9pZlxuKyAgICAgICAgICAgIC0gZ2F0ZXdheVxuKyAgICAgICAgICAgIC0gcHJpb3JpdHlcbisgICAgICAgICAgICAtIHByZWZzcmNcbisgICAgICAgICAgICAtIG1ldHJpY3NcbisgICAgICAgICAgICAtIG11bHRpcGF0aFxuKyAgICAgICAgICAgIC0gZmxvd1xuKyAgICAgICAgICAgIC0gY2FjaGVpbmZvXG4rICAgICAgICAgICAgLSB0YWJsZVxuKyAgICAgICAgICAgIC0gbWFya1xuKyAgICAgICAgICAgIC0gbWZjLXN0YXRzXG4rICAgICAgICAgICAgLSB2aWFcbisgICAgICAgICAgICAtIG5ld2RzdFxuKyAgICAgICAgICAgIC0gcHJlZlxuKyAgICAgICAgICAgIC0gZW5jYXAtdHlwZVxuKyAgICAgICAgICAgIC0gZW5jYXBcbisgICAgICAgICAgICAtIGV4cGlyZXNcbisgICAgICAgICAgICAtIHBhZFxuKyAgICAgICAgICAgIC0gdWlkXG4rICAgICAgICAgICAgLSB0dGwtcHJvcGFnYXRlXG4rICAgICAgICAgICAgLSBpcC1wcm90b1xuKyAgICAgICAgICAgIC0gc3BvcnRcbisgICAgICAgICAgICAtIGRwb3J0XG4rICAgICAgICAgICAgLSBuaC1pZFxuKyAgICAgICAgICAgIC0gZmxvd2xhYmVsXG4gICAgIC1cbiAgICAgICBuYW1lOiBkZWxyb3V0ZVxuICAgICAgIGRvYzogRGVsZXRlIGFuIGV4aXN0aW5nIHJvdXRlXG5AQCAtMzIxLDQgKzM4MywyMyBAQCBvcGVyYXRpb25zOlxuICAgICAgIGRvOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI1XG4tICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcbisgICAgICAgICAgYXR0cmlidXRlczogKnJvdXRlLXJlcS1hdHRyc1xuKyAgICAtXG4rICAgICAgbmFtZTogbmV3cm91dGUtbnRmXG4rICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBjcmVhdGVkIHJvdXRlLlxuKyAgICAgIHZhbHVlOiAyNFxuKyAgICAgIG5vdGlmeTogZ2V0cm91dGVcbisgICAgLVxuKyAgICAgIG5hbWU6IGRlbHJvdXRlLW50ZlxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgZGVsZXRlZCByb3V0ZS5cbisgICAgICB2YWx1ZTogMjVcbisgICAgICBub3RpZnk6IGdldHJvdXRlXG4rXG4rbWNhc3QtZ3JvdXBzOlxuKyAgbGlzdDpcbisgICAgLVxuKyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2NC1yb3V0ZVxuKyAgICAgIHZhbHVlOiA3XG4rICAgIC1cbisgICAgICBuYW1lOiBydG5sZ3JwLWlwdjYtcm91dGVcbisgICAgICB2YWx1ZTogMTFcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcbmluZGV4IDljZDI3ZTFiOWI2OTIuLjIzMjI4OWI0MzljM2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaFxuQEAgLTQ2OCw3ICs0NjgsOCBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCxcbiBcbiBpbnQgZmliNl9hZGQoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHQgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pO1xuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHQgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiBcbiBzdGF0aWMgaW5saW5lXG4gdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKVxuQEAgLTUzMiw2ICs1MzMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiAjZW5kaWZcbiB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuK3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHRcdFx0IGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiBcbiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXG4gXHRcdFx0IHVuc2lnbmVkIGxvbmcgbm93KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5pbmRleCAwOWZmZTBmMTNjZTc1Li5jYzA0NTcwNTg2MmRlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5AQCAtMTI2LDYgKzEyNiw4IEBAIGludCBpcHY2X3JvdXRlX2lvY3RsKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCxcbiBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuIFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gaW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xuK2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcbitcdFx0ICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTtcbiAjZWxzZVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuaW5kZXggMjcyNjVmZDMxZTVmYy4uMzk4OGI1MWRiNTM5ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXG5AQCAtMzk5LDYgKzM5OSw3IEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XG4gXHRSVEFfRFBPUlQsXG4gXHRSVEFfTkhfSUQsXG4gXHRSVEFfRkxPV0xBQkVMLFxuK1x0UlRBX0RFTF9SRUFTT04sXG4gXHRfX1JUQV9NQVhcbiB9O1xuIFxuQEAgLTQwNyw2ICs0MDgsMzAgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcbiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRtc2cpKSkpXG4gI2RlZmluZSBSVE1fUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBydG1zZykpXG4gXG4rLyogUlRBX0RFTF9SRUFTT046IHdoeSB0aGUga2VybmVsIGRlbGV0ZWQgdGhlIHJvdXRlLiB1MzIuXG4rICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvblxuKyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYVxuKyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3RcbisgKiB0cmVhdCBcImFic2VudFwiIGFuZCBcInVuc3BlY1wiIGlkZW50aWNhbGx5LiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC5cbisgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLlxuKyAqXG4rICogVGhlIGF0dHJpYnV0ZSBpcyBub3RpZmljYXRpb24tb25seTogdGhlIGtlcm5lbCByZWplY3RzIGl0IGluXG4rICogcmVxdWVzdHMsIHNvIGEgbm90aWZpY2F0aW9uIG11c3Qgbm90IGJlIGVjaG9lZCBiYWNrIHZlcmJhdGltLlxuKyAqXG4rICogVGhlIHZhbHVlIHNwYWNlIGlzIGZhbWlseS1hZ25vc3RpYzogYSB2YWx1ZSBtdXN0IG5ldmVyIGJlXG4rICogcmVpbnRlcnByZXRlZCBwZXIgYWRkcmVzcyBmYW1pbHkuIEEgY2F1c2UgdGhhdCBvbmx5IG9uZSBmYW1pbHkgY2FuXG4rICogcHJvZHVjZSBzdGlsbCBnZXRzIGl0cyBvd24gdmFsdWUgcmF0aGVyIHRoYW4gcmV1c2luZyBhbm90aGVyXG4rICogZmFtaWx5J3MuXG4rICovXG4rZW51bSBydF9kZWxfcmVhc29uIHtcbitcdFJUX0RFTF9SRUFTT05fVU5TUEVDLFx0XHQvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi9cbitcdFJUX0RFTF9SRUFTT05fRVhQSVJFRCxcdFx0LyogUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCAoR0MpICovXG4rXHRSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTixcdC8qIHplcm8tbGlmZXRpbWUgUkEgLyBQSU8gLyBSSU8gKi9cbitcdF9fUlRfREVMX1JFQVNPTl9NQVhcbit9O1xuK1xuKyNkZWZpbmUgUlRfREVMX1JFQVNPTl9NQVggKF9fUlRfREVMX1JFQVNPTl9NQVggLSAxKVxuK1xuIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuXG4gICpcbiAgKiBcInN0cnVjdCBydG5leHRob3BcIiBkZXNjcmliZXMgYWxsIG5lY2Vzc2FyeSBuZXh0aG9wIGluZm9ybWF0aW9uLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5pbmRleCBmNmZhMjcxNWI0NTBiLi45ZDg5YmU3ZTA1NDRiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuY1xuKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xuQEAgLTI4NzQsNyArMjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxuIFx0XHRpZiAocnQpIHtcbiBcdFx0XHQvKiBBdXRvY29uZiBwcmVmaXggcm91dGUgKi9cbiBcdFx0XHRpZiAodmFsaWRfbGZ0ID09IDApIHtcbi1cdFx0XHRcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xuK1x0XHRcdFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCxcbitcdFx0XHRcdFx0XHQgIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbiBcdFx0XHRcdHJ0ID0gTlVMTDtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuY1xuaW5kZXggZTlmYzY5MmQ0ZjNiMi4uM2UzODJiYTE1NzNlMyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xuKysrIGIvbmV0L2lwdjYvaXA2X2ZpYi5jXG5AQCAtMTk2Nyw3ICsxOTY3LDggQEAgc3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKmZpYjZfcmVwYWlyX3RyZWUoc3RydWN0IG5ldCAqbmV0LFxuIH1cbiBcbiBzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxuLVx0XHRcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuK1x0XHRcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0XHRcdCAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBmaWI2X2luZm8gKmxlYWYsICpyZXBsYWNlX3J0ID0gTlVMTDtcbiBcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcbkBAIC0yMDU2LDEzICsyMDU3LDE0IEBAIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4gXHRcdFx0Y2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7XG4gXHR9XG4gXHRpZiAoIWluZm8tXHUwMDNlc2tpcF9ub3RpZnkpXG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwKTtcbitcdFx0aW5ldDZfcnRfZGVsX25vdGlmeShydCwgaW5mbywgZGVsX3JlYXNvbik7XG4gXG4gXHRmaWI2X2luZm9fcmVsZWFzZShydCk7XG4gfVxuIFxuIC8qIE5lZWQgdG8gb3duIHRhYmxlLVx1MDAzZXRiNl9sb2NrICovXG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbitpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0ICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHA7XG5AQCAtMjA5MSw3ICsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJ0ID09IGN1cikge1xuIFx0XHRcdGlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKVxuIFx0XHRcdFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXHUwMDNlbmxfbmV0KTtcbi1cdFx0XHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7XG4rXHRcdFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHRcdHJ0cF9uZXh0ID0gXHUwMDI2Y3VyLVx1MDAzZWZpYjZfbmV4dDtcbkBAIC0yMjUzLDcgKzIyNTUsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gXHRcdHJlcyA9IGMtXHUwMDNlZnVuYyhydCwgYy1cdTAwM2VhcmcpO1xuIFx0XHRpZiAocmVzID09IC0xKSB7XG4gXHRcdFx0dy1cdTAwM2VsZWFmID0gcnQ7XG4tXHRcdFx0cmVzID0gZmliNl9kZWwocnQsIFx1MDAyNmluZm8pO1xuK1x0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKHJlcykge1xuICNpZiBSVDZfREVCVUcgXHUwMDNlPSAyXG4gXHRcdFx0XHRwcl9kZWJ1ZyhcIiVzOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcXG5cIixcbkBAIC0yNDAxLDcgKzI0MDMsNyBAQCBzdGF0aWMgdm9pZCBmaWI2X2djX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCxcbiBcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIG4sIFx1MDAyNnRiNi1cdTAwM2V0YjZfZ2NfaGxpc3QsIGdjX2xpbmspXG4gXHRcdGlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpXG4tXHRcdFx0ZmliNl9kZWwocnQsIFx1MDAyNmluZm8pO1xuK1x0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX0VYUElSRUQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcbmluZGV4IGZlMzZiM2Y1MTI4NTAuLjExMTFjNGViYzYxZDkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZGlzYy5jXG4rKysgYi9uZXQvaXB2Ni9uZGlzYy5jXG5AQCAtMTM2MSw3ICsxMzYxLDkgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi1cdTAwM2VjbmYucmFfZGVmcnRyX21ldHJpYztcbiBcdC8qIGRlbGV0ZSB0aGUgcm91dGUgaWYgbGlmZXRpbWUgaXMgMCBvciBpZiBtZXRyaWMgbmVlZHMgY2hhbmdlICovXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2IChsaWZldGltZSA9PSAwIHx8IHJ0LVx1MDAzZWZpYjZfbWV0cmljICE9IGRlZnJ0cl91c3JfbWV0cmljKSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbitcdFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCxcbitcdFx0XHRcdCAgbGlmZXRpbWUgPT0gMCA/IFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOIDpcbitcdFx0XHRcdFx0XHQgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCBmYzQyZDY3ZTU4MjI2Li4xNzA0MzU5ZDM5NjBkIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xuQEAgLTExMSw3ICsxMTEsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuIFx0XHRcdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLFxuIFx0XHRcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcbi1cdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKTtcbitcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4gc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcbkBAIC0xMDIwLDcgKzEwMjAsNyBAQCBpbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxuIFx0XHRcdFx0XHRnd2FkZHIsIGRldik7XG4gXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2ICFsaWZldGltZSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbitcdFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xuIFx0XHRydCA9IE5VTEw7XG4gXHR9XG4gXG5AQCAtMzk3Myw3ICszOTczLDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbitzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHRcdFx0ZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7XG5AQCAtMzk4Niw3ICszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFxuIFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbitcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbiBcbiBvdXQ6XG5AQCAtNDAwMSw3ICs0MDAyLDE1IEBAIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXG4gXHRcdC5za2lwX25vdGlmeSA9IHNraXBfbm90aWZ5XG4gXHR9O1xuIFxuLVx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbyk7XG4rXHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4rfVxuK1xuK2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuK1x0XHQgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbit7XG4rXHRzdHJ1Y3QgbmxfaW5mbyBpbmZvID0geyAubmxfbmV0ID0gbmV0IH07XG4rXG4rXHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZpbmZvLCBkZWxfcmVhc29uKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuQEAgLTQwMjgsNyArNDAzNyw4IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcbiBcdFx0XHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsXG4gXHRcdFx0XHRcdCAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLFxuLVx0XHRcdFx0XHQgIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIDApIFx1MDAzYyAwKSB7XG4rXHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCxcbitcdFx0XHRcdFx0ICBSVF9ERUxfUkVBU09OX1VOU1BFQykgXHUwMDNjIDApIHtcbiBcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdFx0c2tiID0gTlVMTDtcbiBcdFx0XHR9IGVsc2VcbkBAIC00MDY0LDEzICs0MDc0LDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZyxcbiBcdFx0XHRcdFx0IFx1MDAyNnJ0LVx1MDAzZWZpYjZfc2libGluZ3MsXG4gXHRcdFx0XHRcdCBmaWI2X3NpYmxpbmdzKSB7XG4tXHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbyk7XG4rXHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbitcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gb3V0X3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbiBvdXRfcHV0OlxuQEAgLTQxOTYsNyArNDIwNiw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcbiBcdFx0XHRcdGlmICghZmliNl9pbmZvX2hvbGRfc2FmZShydCkpXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdFx0ZXJyID0gIF9faXA2X2RlbF9ydChydCwgXHUwMDI2Y2ZnLVx1MDAzZWZjX25saW5mbyk7XG4rXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4rXHRcdFx0XHRcdFx0ICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChjZmctXHUwMDNlZmNfbmhfaWQpXG5AQCAtNDIxNSw3ICs0MjI2LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFxuIFx0XHRcdC8qIGlmIGdhdGV3YXkgd2FzIHNwZWNpZmllZCBvbmx5IGRlbGV0ZSB0aGUgb25lIGhvcCAqL1xuIFx0XHRcdGlmIChjZmctXHUwMDNlZmNfZmxhZ3MgXHUwMDI2IFJURl9HQVRFV0FZKVxuLVx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbitcdFx0XHRcdGVyciA9IF9faXA2X2RlbF9ydChydCwgXHUwMDI2Y2ZnLVx1MDAzZWZjX25saW5mbyxcbitcdFx0XHRcdFx0XHQgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTU3MzksNiArNTc1MSw3IEBAIHN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxuIFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSlcbiBcdCAgICAgICArIG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXG4gXHQgICAgICAgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBSVEFfUFJFRiAqL1xuK1x0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX0RFTF9SRUFTT04gKi9cbiBcdCAgICAgICArIG5leHRob3BfbGVuO1xuIH1cbiBcbkBAIC01Nzc1LDcgKzU3ODgsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuIFx0XHRcdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLFxuIFx0XHRcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcbi1cdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKVxuK1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBydDZfaW5mbyAqcnQ2ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XG4gXHRzdHJ1Y3QgcnQ2a2V5ICpydDZfZHN0LCAqcnQ2X3NyYztcbkBAIC01OTU0LDYgKzU5NjcsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCBkc3QsIDAsIGV4cGlyZXMsIGRzdCA/IGRzdC1cdTAwM2VlcnJvciA6IDApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbitcdGlmIChkZWxfcmVhc29uICE9IFJUX0RFTF9SRUFTT05fVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgUlRBX0RFTF9SRUFTT04sIGRlbF9yZWFzb24pKVxuK1x0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcbiBcdGlmIChubGFfcHV0X3U4KHNrYiwgUlRBX1BSRUYsIElQVjZfRVhUUkFDVF9QUkVGKHJ0Nl9mbGFncykpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbkBAIC02MDU1LDcgKzYwNzIsOCBAQCBzdGF0aWMgaW50IHJ0Nl9uaF9kdW1wX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfbmggKm5oLCB2b2lkICphcmcpXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZydDZfZXgtXHUwMDNlcnQ2aS1cdTAwM2Vkc3QsIE5VTEwsIE5VTEwsIDAsXG4gXHRcdFx0XHRcdCAgICBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGR1bXAtXHUwMDNlY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBkdW1wLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIHctXHUwMDNlZmxhZ3MpO1xuK1x0XHRcdFx0XHQgICAgZHVtcC1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCB3LVx1MDAzZWZsYWdzLFxuK1x0XHRcdFx0XHQgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFxuQEAgLTYxMDMsNyArNjEyMSw4IEBAIGludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxuIFx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgYXJnLVx1MDAzZXNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgMCwgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgIE5FVExJTktfQ0IoYXJnLVx1MDAzZWNiLVx1MDAzZXNrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgIGFyZy1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncykpIHtcbitcdFx0XHRcdFx0ICBhcmctXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgUlRfREVMX1JFQVNPTl9VTlNQRUMpKSB7XG4gXHRcdFx0XHRyZXR1cm4gMDtcbiBcdFx0XHR9XG4gXHRcdFx0Y291bnQrKztcbkBAIC02MzM2LDEyICs2MzU1LDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgICBpaWYsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwKTtcbitcdFx0XHRcdFx0ICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIDAsXG4rXHRcdFx0XHRcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBkc3QsIFx1MDAyNmZsNi5kYWRkcixcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4rXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuK1x0XHRcdFx0XHQgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gLUVORVRVTlJFQUNIO1xuIFx0fVxuQEAgLTYzNTcsOCArNjM3OCw5IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tXHRcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcbitzdGF0aWMgdm9pZCBfX2luZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzLFxuK1x0XHRcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbkBAIC02Mzc3LDcgKzYzOTksNyBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XG4rXHRcdFx0ICAgIGV2ZW50LCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MsIGRlbF9yZWFzb24pO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgbmVlZGVkIHNwYWNlIGdyZXcgdW5kZXIgdXMuICovXG5AQCAtNjM5OCw2ICs2NDIwLDE4IEBAIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuIFx0cnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X1JPVVRFLCBlcnIpO1xuIH1cbiBcbit2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbitcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKVxuK3tcbitcdF9faW5ldDZfcnRfbm90aWZ5KGV2ZW50LCBydCwgaW5mbywgbmxtX2ZsYWdzLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4rfVxuK1xuK3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHRcdFx0IGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuK3tcbitcdF9faW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDAsIGRlbF9yZWFzb24pO1xuK31cbitcbiB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHRcdCAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiB7XG5AQCAtNjQxMCw3ICs2NDQ0LDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRnb3RvIGVycm91dDtcbiBcbiBcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxuLVx0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpO1xuK1x0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsXG4rXHRcdFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbkBAIC02NDYzLDcgKzY0OTgsNyBAQCB2b2lkIGZpYjZfaW5mb19od19mbGFnc19zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4gXHR9XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCxcbi1cdFx0XHQgICAgMCwgMCk7XG4rXHRcdFx0ICAgIDAsIDAsIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuaW5kZXggZTU4YmRiZGM1OGVlYS4uMzQ5MzU4ODZiNmFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcbkBAIC0xNyw3ICsxNyw3IEBAIGZyb20gLnV0aWxzIGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgZmRfcmVhZF90aW1lb3V0LCBjbWQsIGJrZywgZGVmZXIsIFxcXG4gICAgIHdhaXRfZmlsZSwgdG9vbCwgdGNcbiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHNcbiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcXFxuLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5XG4rICAgIEV0aHRvb2xGYW1pbHksIE5ldGRldkZhbWlseSwgUnRubEZhbWlseSwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIGZyb20gLnlubCBpbXBvcnQgTmV0c2hhcGVyRmFtaWx5LCBEZXZsaW5rRmFtaWx5LCBQU1BGYW1pbHksIE5ldGxpbmtcbiBcbiBfX2FsbF9fID0gW1wiS1NSQ1wiLFxuQEAgLTM0LDQgKzM0LDQgQEAgX19hbGxfXyA9IFtcIktTUkNcIixcbiAgICAgICAgICAgIFwiTmV0ZGV2U2ltXCIsIFwiTmV0ZGV2U2ltRGV2XCIsXG4gICAgICAgICAgICBcIk5ldHNoYXBlckZhbWlseVwiLCBcIkRldmxpbmtGYW1pbHlcIiwgXCJQU1BGYW1pbHlcIiwgXCJObEVycm9yXCIsXG4gICAgICAgICAgICBcIllubEZhbWlseVwiLCBcIkV0aHRvb2xGYW1pbHlcIiwgXCJOZXRkZXZGYW1pbHlcIiwgXCJSdG5sRmFtaWx5XCIsXG4tICAgICAgICAgICBcIk5sY3RybEZhbWlseVwiLCBcIlJ0bmxBZGRyRmFtaWx5XCIsIFwiTmV0bGlua1wiXVxuKyAgICAgICAgICAgXCJObGN0cmxGYW1pbHlcIiwgXCJSdG5sQWRkckZhbWlseVwiLCBcIlJ0bmxSb3V0ZUZhbWlseVwiLCBcIk5ldGxpbmtcIl1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG5pbmRleCAyZTU2NzA2MmFhNmNjLi4wOGRlZmY3NTZmMjliIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG5AQCAtMjksNyArMjksNyBAQCBleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvciBhcyBlOlxuIFxuIF9fYWxsX18gPSBbXG4gICAgIFwiTmxFcnJvclwiLCBcIk5sUG9saWN5XCIsIFwiTmV0bGlua1wiLCBcIllubEZhbWlseVwiLCBcIlNQRUNfUEFUSFwiLFxuLSAgICBcIkV0aHRvb2xGYW1pbHlcIiwgXCJSdG5sRmFtaWx5XCIsIFwiUnRubEFkZHJGYW1pbHlcIixcbisgICAgXCJFdGh0b29sRmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLCBcIlJ0bmxBZGRyRmFtaWx5XCIsIFwiUnRubFJvdXRlRmFtaWx5XCIsXG4gICAgIFwiTmV0ZGV2RmFtaWx5XCIsIFwiTmV0c2hhcGVyRmFtaWx5XCIsIFwiTmxjdHJsRmFtaWx5XCIsIFwiRGV2bGlua0ZhbWlseVwiLFxuICAgICBcIlBTUEZhbWlseVwiLFxuIF1cbkBAIC01NCw2ICs1NCwxMSBAQCBjbGFzcyBSdG5sQWRkckZhbWlseShZbmxGYW1pbHkpOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgncnQtYWRkci55YW1sJykpLmFzX3Bvc2l4KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0nJywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcbiBcbitjbGFzcyBSdG5sUm91dGVGYW1pbHkoWW5sRmFtaWx5KTpcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ3J0LXJvdXRlLnlhbWwnKSkuYXNfcG9zaXgoKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPScnLCByZWN2X3NpemU9cmVjdl9zaXplKVxuK1xuIGNsYXNzIE5ldGRldkZhbWlseShZbmxGYW1pbHkpOlxuICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgnbmV0ZGV2LnlhbWwnKSkuYXNfcG9zaXgoKSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggMGM2N2M3YzAwZDg0MS4uNWNjM2ViZGNmMDhkZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbkBAIC01LDcgKzUsOSBAQCBpbXBvcnQgc29ja2V0XG4gaW1wb3J0IHN0cnVjdFxuIGltcG9ydCB0aW1lXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxuLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5XG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4rZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuK2Zyb20gbGliLnB5IGltcG9ydCBkZWZlclxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFx4ZTBcXHgwMFxceDAwXFx4MDEnXG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFx4ZWZcXHgwMVxceDAxXFx4MDEnXG5AQCAtMTM0LDggKzEzNiwxODkgQEAgZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXHUwMDNlIE5vbmU6XG4gICAgIGtzZnRfdHJ1ZShmXCJpbmV0IHtpZm5hbWV9IGZvcndhcmRpbmcgb25cIiBpbiBjbWRfb2JqLnN0ZG91dCxcbiAgICAgICAgICAgICAgIGZcIk5vICdmb3J3YXJkaW5nIG9uJyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX1cIilcbiBcbitkZWYgX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKTpcbisgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxuKyAgICAgICAgcnRubCA9IFJ0bmxSb3V0ZUZhbWlseSgpXG4rICAgIGRlZmVyKHJ0bmwuY2xvc2UpXG4rICAgIHJ0bmwubnRmX3N1YnNjcmliZShcInJ0bmxncnAtaXB2Ni1yb3V0ZVwiKVxuKyAgICByZXR1cm4gcnRubFxuK1xuK1xuK2RlZiBfd2FpdF9yb3V0ZV9udGYocnRubCwgbmFtZSwgZHN0X2xlbiwgZHN0PU5vbmUsIGRlYWRsaW5lPTEwKTpcbisgICAgXCJcIlwiUmV0dXJuIHRoZSBhdHRycyBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgbm90aWZpY2F0aW9uLCBOb25lIG9uIHRpbWVvdXQuXCJcIlwiXG4rXG4rICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XG4rICAgICAgICBpZiBtc2dbJ25hbWUnXSAhPSBuYW1lOlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBhdHRycyA9IG1zZ1snbXNnJ11cbisgICAgICAgIGlmIGF0dHJzWydydG0tZHN0LWxlbiddICE9IGRzdF9sZW46XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIGlmIGRzdCBpcyBub3QgTm9uZSBhbmQgYXR0cnMuZ2V0KCdkc3QnKSAhPSBkc3Q6XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIHJldHVybiBhdHRyc1xuKyAgICByZXR1cm4gTm9uZVxuK1xuK1xuK2RlZiBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsIG5hbWUsIHdhbnQsIGRlYWRsaW5lPTEwKTpcbisgICAgXCJcIlwiR2F0aGVyIGF0dHJzIG9mIG1hdGNoaW5nIG5vdGlmaWNhdGlvbnMsIGtleWVkIGJ5IChkc3RfbGVuLCBkc3QpLlwiXCJcIlxuK1xuKyAgICBzZWVuID0ge31cbisgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKTpcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIGF0dHJzID0gbXNnWydtc2cnXVxuKyAgICAgICAga2V5ID0gKGF0dHJzWydydG0tZHN0LWxlbiddLCBhdHRycy5nZXQoJ2RzdCcpKVxuKyAgICAgICAgaWYga2V5IGluIHdhbnQ6XG4rICAgICAgICAgICAgc2VlbltrZXldID0gYXR0cnNcbisgICAgICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxuKyAgICAgICAgICAgICAgICBicmVha1xuKyAgICByZXR1cm4gc2VlblxuK1xuK1xuK2RlZiBfd3JpdGVfaXB2Nl9zeXNjdGwobmFtZSwgdmFsdWUpOlxuKyAgICB3aXRoIG9wZW4oZlwiL3Byb2Mvc3lzL25ldC9pcHY2L3tuYW1lfVwiLCBcIndcIikgYXMgZjpcbisgICAgICAgIGYud3JpdGUoZlwie3ZhbHVlfVxcblwiKVxuK1xuK1xuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCgpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiQW4gZXhwaXJlZCByb3V0ZSByZXBvcnRzIFJUQV9ERUxfUkVBU09OID09IGV4cGlyZWQuXCJcIlwiXG4rXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwicm91dGUvZ2NfaW50ZXJ2YWxcIiwgMilcbisgICAgICAgIGlwKFwibGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCJsaW5rIHNldCBkZXYgZHVtbXkxIHVwXCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcIi02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDJcIiwgbnM9c3RyKG5zKSlcbitcbisgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCA2NCwgJzIwMDE6ZGI4OjI6OicsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZT0xNSlcbisgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFwibm8gUlRNX0RFTFJPVVRFIGZvciB0aGUgZXhwaXJlZCByb3V0ZVwiKVxuKyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJ2RlbC1yZWFzb24nKSwgJ2V4cGlyZWQnKVxuK1xuK1xuK2RlZiBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCBsaWZldGltZSwgcmlvPU5vbmUsIHBpbz1Ob25lKTpcbisgICAgXCJcIlwiVGhlIGtlcm5lbCBmaWxscyBpbiB0aGUgSUNNUHY2IGNoZWNrc3VtIG9uIHJhdyBJQ01QdjYgc29ja2V0cy5cIlwiXCJcbitcbisgICAgIyB0eXBlLCBjb2RlLCBja3N1bSwgaG9wIGxpbWl0LCBmbGFncywgcm91dGVyIGxpZmV0aW1lLFxuKyAgICAjIHJlYWNoYWJsZSB0aW1lLCByZXRyYW5zIHRpbWVyXG4rICAgIHJhID0gc3RydWN0LnBhY2soJyFCQkhCQkhJSScsIDEzNCwgMCwgMCwgNjQsIDAsIGxpZmV0aW1lLCAwLCAwKVxuKyAgICBpZiByaW8gaXMgbm90IE5vbmU6XG4rICAgICAgICBwcmVmaXgsIHBsZW4sIHJpb19saWZldGltZSA9IHJpb1xuKyAgICAgICAgIyBSRkMgNDE5MSByb3V0ZSBpbmZvcm1hdGlvbiBvcHRpb24sIC82NCBwcmVmaXggKDggYnl0ZXMpXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJJywgMjQsIDIsIHBsZW4sIDAsIHJpb19saWZldGltZSlcbisgICAgICAgIHJhICs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpWzo4XVxuKyAgICBpZiBwaW8gaXMgbm90IE5vbmU6XG4rICAgICAgICBwcmVmaXgsIHBsZW4sIHZhbGlkX2xmdCA9IHBpb1xuKyAgICAgICAgIyBSRkMgNDg2MSBwcmVmaXggaW5mb3JtYXRpb24gb3B0aW9uLCBvbi1saW5rIG9ubHkgKEwgc2V0LCBBIGNsZWFyKVxuKyAgICAgICAgcmEgKz0gc3RydWN0LnBhY2soJyFCQkJCSUlJJywgMywgNCwgcGxlbiwgMHg4MCwgdmFsaWRfbGZ0LCAwLCAwKVxuKyAgICAgICAgcmEgKz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClcbisgICAgc29jay5zZW5kdG8ocmEsICgnZmYwMjo6MScsIDAsIDAsIGlmaW5kZXgpKVxuK1xuK1xuK2RlZiBfcmFfcm91dGVyX3NvY2sobnNfciwgaWZuYW1lKTpcbisgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XG4rICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVyxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5JUFBST1RPX0lDTVBWNilcbisgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9NVUxUSUNBU1RfSE9QUywgMjU1KVxuKyAgICAgICAgZGVmZXIoc29jay5jbG9zZSlcbisgICAgICAgIHJldHVybiBzb2NrLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoaWZuYW1lKVxuK1xuK1xuK2RlZiBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCB3YW50LCAqKnJhX29wdHMpOlxuKyAgICBcIlwiXCJcbisgICAgU2VuZGluZyBmYWlscyB3aXRoIEVBRERSTk9UQVZBSUwgd2hpbGUgdGhlIHJvdXRlcidzIGxpbmstbG9jYWxcbisgICAgYWRkcmVzcyBpcyBzdGlsbCB0ZW50YXRpdmUuIGFkZHJjb25mX2RhZF9zdGFydCgpIG9ubHkgcXVldWVzXG4rICAgIGFkZHJjb25mX2RhZF93b3JrKCksIGFuZCBJRkFfRl9URU5UQVRJVkUgaXMgY2xlYXJlZCB3aGVuIHRoYXQgd29ya1xuKyAgICBpdGVtIHJ1bnMsIHNvIHJldHJ5IHVudGlsIGl0IGRvZXMuXG4rICAgIFwiXCJcIlxuK1xuKyAgICBzZWVuID0ge31cbisgICAgZm9yIF8gaW4gcmFuZ2UoMTApOlxuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cylcbisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOlxuKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKVxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICduZXdyb3V0ZS1udGYnLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IC0gc2V0KHNlZW4ua2V5cygpKSwgZGVhZGxpbmU9MikpXG4rICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxuKyAgICAgICAgICAgIGJyZWFrXG4rICAgIHJldHVybiBzZWVuXG4rXG4rXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24oKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIlxuKyAgICBSb3V0ZXMgd2l0aGRyYXduIGJ5IGEgemVyby1saWZldGltZSBSQSAocm91dGVyIGxpZmV0aW1lLCBSRkMgNDg2MVxuKyAgICBQSU8sIFJGQyA0MTkxIFJJTykgcmVwb3J0IFJUQV9ERUxfUkVBU09OID09IHJhLXdpdGhkcmF3bi5cbisgICAgXCJcIlwiXG4rXG4rICAgICMgKHJ0bS1kc3QtbGVuLCBkc3QpOyB0aGUgZGVmYXVsdCByb3V0ZSBjYXJyaWVzIG5vIFJUQV9EU1RcbisgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAnMjAwMTpkYjg6Njo6JyksICg2NCwgJzIwMDE6ZGI4OjU6OicpfVxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnNfaCwgTmV0TlMoKSBhcyBuc19yOlxuKyAgICAgICAgaXAoZlwibGluayBhZGQgdmV0aDAgbmV0bnMge25zX2h9IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDEgbmV0bnMge25zX3J9XCIpXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX2gpKTpcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJjb25mL3ZldGgwL2FjY2VwdF9yYVwiLCAyKVxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDAvZm9yd2FyZGluZ1wiLCAwKVxuKyAgICAgICAgICAgIHRyeTpcbisgICAgICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwiY29uZi92ZXRoMC9hY2NlcHRfcmFfcnRfaW5mb19tYXhfcGxlblwiLCA2NClcbisgICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6XG4rICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCJubyBDT05GSUdfSVBWNl9ST1VURV9JTkZPXCIpXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcbisgICAgICAgICAgICAjIHNraXAgdGhlIERBRCBwcm9iZSBzbyB0aGUgcm91dGVyJ3MgbGluay1sb2NhbCBzb3VyY2Ugb25seVxuKyAgICAgICAgICAgICMgaGFzIHRvIHdhaXQgZm9yIGFkZHJjb25mX2RhZF93b3JrKCkgdG8gY2xlYXIgSUZBX0ZfVEVOVEFUSVZFXG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwiY29uZi92ZXRoMS9hY2NlcHRfZGFkXCIsIDApXG4rICAgICAgICBpcChcImxpbmsgc2V0IGRldiB2ZXRoMCB1cFwiLCBucz1zdHIobnNfaCkpXG4rICAgICAgICBpcChcImxpbmsgc2V0IGRldiB2ZXRoMSB1cFwiLCBucz1zdHIobnNfcikpXG4rXG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zX2gpXG4rICAgICAgICBzb2NrLCBpZmluZGV4ID0gX3JhX3JvdXRlcl9zb2NrKG5zX3IsIFwidmV0aDFcIilcbitcbisgICAgICAgIHNlZW4gPSBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCByb3V0ZXMsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWU9MTgwMCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW89KCcyMDAxOmRiODo1OjonLCA2NCwgNjAwKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW89KCcyMDAxOmRiODo2OjonLCA2NCwgNjAwKSlcbisgICAgICAgIGtzZnRfZXEoc2V0KHNlZW4pLCByb3V0ZXMsIFwibm90IGFsbCBSQSByb3V0ZXMgd2VyZSBpbnN0YWxsZWRcIilcbisgICAgICAgIGlmIHNldChzZWVuKSAhPSByb3V0ZXM6XG4rICAgICAgICAgICAgcmV0dXJuXG4rXG4rICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAwLCByaW89KCcyMDAxOmRiODo1OjonLCA2NCwgMCksXG4rICAgICAgICAgICAgICAgICBwaW89KCcyMDAxOmRiODo2OjonLCA2NCwgMCkpXG4rICAgICAgICBzZWVuID0gX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAnZGVscm91dGUtbnRmJywgcm91dGVzKVxuKyAgICAgICAgZm9yIGtleSBpbiByb3V0ZXM6XG4rICAgICAgICAgICAgYXR0cnMgPSBzZWVuLmdldChrZXkpXG4rICAgICAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgZlwibm8gUlRNX0RFTFJPVVRFIGZvciB7a2V5fVwiKVxuKyAgICAgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgnZGVsLXJlYXNvbicpLCAncmEtd2l0aGRyYXduJylcbitcbitcbitkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiXG4rICAgIEEgZGVsZXRpb24gcGF0aCB0aGF0IHJlY29yZHMgbm8gY2F1c2UgKGhlcmUgYSB1c2Vyc3BhY2UgcmVxdWVzdClcbisgICAgbXVzdCBub3QgY2FycnkgUlRBX0RFTF9SRUFTT04gYXQgYWxsLlxuKyAgICBcIlwiXCJcbitcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcbisgICAgICAgIGlwKFwibGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCJsaW5rIHNldCBkZXYgZHVtbXkxIHVwXCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcIi02IHJvdXRlIGFkZCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCItNiByb3V0ZSBkZWwgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcIiwgbnM9c3RyKG5zKSlcbitcbisgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCA2NCwgJzIwMDE6ZGI4OjE6OicpXG4rICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBcIm5vIFJUTV9ERUxST1VURSBmb3IgMjAwMTpkYjg6MTo6LzY0XCIpXG4rICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICBrc2Z0X25vdF9pbignZGVsLXJlYXNvbicsIGF0dHJzLFxuKyAgICAgICAgICAgICAgICAgICAgICAgIFwidXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uXCIpXG4rXG4rXG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4tICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSlcbisgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSlcbiAgICAga3NmdF9leGl0KClcbiBcbiBpZiBfX25hbWVfXyA9PSBcIl9fbWFpbl9fXCI6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMToyMDoxNC43MzUyODkzNTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTMyMTQ3NzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIENhbmRpZGF0ZTogSVB2NiBSb3V0ZSBEZWxldGlvbiBSZWFzb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRvIHJldmlldywgYW5kIHRoZSB0YXNrIGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGl0J3MgdG91Y2hpbmcgYSBidW5jaCBvZiBJUHY2IHJvdXRpbmcgY29kZSDigJMgYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sYCwgdmFyaW91cyBoZWFkZXIgZmlsZXMgKGBpcDZfZmliLmhgLCBgaXA2X3JvdXRlLmhgLCBgcnRuZXRsaW5rLmhgKSwgY29yZSBJUHY2IG5ldHdvcmsgZmlsZXMgKGBhZGRyY29uZi5jYCwgYGlwNl9maWIuY2AsIGBuZGlzYy5jYCwgYHJvdXRlLmNgKSwgYW5kIGV2ZW4gc29tZSBweXRob24gdGVzdHMuIFRoYXQncyBhIHN0cm9uZyBzaWduYWwsIHRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgaW50ZXJlc3RpbmcuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCByZXZvbHZlcyBhcm91bmQgYWRkaW5nIGEgbmV3IE5ldGxpbmsgYXR0cmlidXRlLCBgUlRBX0RFTF9SRUFTT05gLCBzcGVjaWZpY2FsbHkgZm9yIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucy4gVGhleSdyZSBhZGRpbmcgYW4gYGVudW0gcnRfZGVsX3JlYXNvbmAgd2l0aCB2YWx1ZXMgdG8gc3BlY2lmeSB3aHkgdGhlIHJvdXRlIGlzIGJlaW5nIGRlbGV0ZWQ6IGBVTlNQRUNgLCBgRVhQSVJFRGAsIG9yIGBSQV9XSVRIRFJBV05gLiBUaGF0IGFsb25lIHRlbGxzIG1lIHRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHNpZ25pZmljYW50IG9uZSBhdCB0aGF0LiBJdCBhbHRlcnMgaG93IHdlIGNvbW11bmljYXRlIGFib3V0IHJvdXRlIGRlbGV0aW9ucyB0aHJvdWdoIE5ldGxpbmssIHdoaWNoIGlzIGNvcmUgdG8gdGhlIGNvbnRyb2wgcGxhbmUuXG5cblNvLCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgcmVhY2hhYmxlLCBhbmQgc2hvdWxkIHdlIGZ1enogaXQ/IEFic29sdXRlbHkuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgSVB2NiByb3V0ZSBkZWxldGlvbnMg4oCTIHRoYXQncyBhICp2ZXJ5KiBjb21tb24gb3BlcmF0aW9uLiBSQSB3aXRoZHJhd2FsLCByb3V0ZSBleHBpcmF0aW9uLCBtYW51YWwgZGVsZXRpb24g4oCTIGFsbCBvZiB0aGVzZSBwYXRocyBub3cgbmVlZCB0byB0YWtlIHRoaXMgbmV3IGRlbGV0aW9uIHJlYXNvbiBpbnRvIGFjY291bnQuIFRoZSBwYXRjaCBpdHNlbGYgbW9kaWZpZXMgZnVuY3Rpb25zIGxpa2UgYGZpYjZfZGVsYCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYHJ0Nl9maWxsX25vZGVgLCBgaW5ldDZfcnRfbm90aWZ5YCwgaW1wbHlpbmcgdGhhdCBhIGdvb2QgcG9ydGlvbiBvZiB0aGUgSVB2NiBzdGFjayBpcyBiZWluZyBpbXBhY3RlZC5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrczogd2hpY2ggZnVuY3Rpb25zIHNob3VsZCB3ZSBwcmlvcml0aXplIGZvciBmdXp6aW5nPyBMb29raW5nIGF0IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgbW9kaWZpZWQsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZTpcblxuKiAgIGBhZGRyY29uZl9wcmVmaXhfcmN2YFxuKiAgIGBmaWI2X2RlbGBcbiogICBgZmliNl9kZWxfcm91dGVgXG4qICAgYGZpYjZfY2xlYW5fbm9kZWBcbiogICBgZmliNl9nY190YWJsZWBcbiogICBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWBcbiogICBgcnQ2X3JvdXRlX3JjdmBcbiogICBgaXA2X2RlbF9ydF9yZWFzb25gXG4qICAgYF9faXA2X2RlbF9ydGBcbiogICBgaXA2X2RlbF9ydGBcbiogICBgX19pcDZfZGVsX3J0X3NpYmxpbmdzYFxuKiAgIGBpcDZfcm91dGVfZGVsYFxuKiAgIGBydDZfbmxtc2dfc2l6ZWBcbiogICBgcnQ2X2ZpbGxfbm9kZWBcbiogICBgcnQ2X25oX2R1bXBfZXhjZXB0aW9uc2BcbiogICBgcnQ2X2R1bXBfcm91dGVgXG4qICAgYGluZXQ2X3J0bV9nZXRyb3V0ZWBcbiogICBgX19pbmV0Nl9ydF9ub3RpZnlgXG4qICAgYGluZXQ2X3J0X25vdGlmeWBcbiogICBgaW5ldDZfcnRfZGVsX25vdGlmeWBcbiogICBgZmliNl9ydF91cGRhdGVgXG4qICAgYGZpYjZfaW5mb19od19mbGFnc19zZXRgXG5cbk5hcnJvd2luZyB0aGlzIGZ1cnRoZXIsIEkgbmVlZCB0byB6b29tIGluIG9uIHRoZSBzcGVjaWZpYyBzeW1ib2xzOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgaW5ldDZfcnRfZGVsX25vdGlmeWAsIGBydDZfZmlsbF9ub2RlYCwgYW5kIGBydDZfbmxtc2dfc2l6ZWAuIFRoZXkgYXJlIGNsZWFybHkgY3JpdGljYWwgZm9yIGhhbmRsaW5nIGFuZCBjb25zdHJ1Y3RpbmcgdGhlIG5ldyBOZXRsaW5rIG1lc3NhZ2VzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSBhbHJlYWR5IGtub3cgdGhhdCBgQ09ORklHX0lQVjZgIGlzIHJlcXVpcmVkLCB3aGljaCBpcyBhIGdpdmVuLCBidXQgdGhlcmXigJlzIGEgcmVmZXJlbmNlIHRvIGBDT05GSUdfSVBWNl9ST1VURV9JTkZPYCBpbiB0aGUgdGVzdHMuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYG5ldC9pcHY2L0tjb25maWdgIHRvIHNlZSB3aGF0IHRoYXQgYWN0dWFsbHkgY29udHJvbHMgYW5kIGlmIGl0J3MgbmVjZXNzYXJ5IGZvciB0aGlzIHBhdGNoIHRvIHdvcmsuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGNvcnJlY3RseS5cblxuSW4gc2hvcnQsIHRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSBoYXZlIGEgbmV3IE5ldGxpbmsgYXR0cmlidXRlIGJlaW5nIGFkZGVkLCBhbmQgdGhhdCBtZWFucyBuZXcgY29kZSBwYXRocywgYW5kIG5ldyBsb2dpYyBmb3IgbWVzc2FnZSBjb25zdHJ1Y3Rpb24sIGFuZCBJUHY2IHJvdXRpbmcgb3BlcmF0aW9ucyDigJMgYWxsIG9mIHdoaWNoIG5lZWRzIHRvIGJlIHJpZ29yb3VzbHkgdGVzdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA1NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAxOjIwOjI2LjA1Njc2OTYzNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc4MTQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9ST1VURV9JTkZPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0yMT1jb25maWcgSVBWNl9ST1VURVJfUFJFRlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDE6MjA6MjYuMTA1NTU3ODdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIxMTg5OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgeW91ciBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgRGVlcGVyIGludG8gSVB2NiBDb25maWd1cmF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCwgZXNwZWNpYWxseSB3aXRoIElQdjYuIEkga25vdyB0aGUgYmFzaWNzLCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBMZXQncyBub3QganVzdCBhc3N1bWUgSSd2ZSBjb3ZlcmVkIGFsbCB0aGUgYmFzZXMuIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBmb3IgYElQVjZfUk9VVEVSX1BSRUZgLiBUaGF0IHNldHRpbmcncyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSByb3V0ZXIgcHJpb3JpdGl6ZXMgSVB2NiByb3V0ZXMsIGFuZCBpdCBjb3VsZCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgYW55IGNvbm5lY3Rpdml0eSBpc3N1ZXMgb3IgdW5leHBlY3RlZCByb3V0aW5nIGJlaGF2aW9yIEknbSBzZWVpbmcuIEl0J3MgdG9vIGVhc3kgdG8gb3Zlcmxvb2sgdGhlIGZpbmVyIHBvaW50cyB3aGVuIHlvdSdyZSBmb2N1c2luZyBvbiB0aGUgZ2VuZXJhbCBzZXR1cC4gVGhpcyBjb3VsZCBleHBsYWluIGEgbG90LiBUaGlzIHNldHRpbmcgaXMgZnJlcXVlbnRseSBtaXNzZWQsIGFuZCBzaG91bGQgYWx3YXlzIGJlIGNvbnNpZGVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODAyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDE6MjA6MjkuNDI2NzUwMTI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMTpcXHRjb25maWcgSVBWNl9ST1VURVJfUFJFRlxcbiAgMjI6XFx0XFx0Ym9vbCBcXFwiSVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbiAgMjM6XFx0XFx0aGVscFxcbiAgMjQ6XFx0XFx0ICBSb3V0ZXIgUHJlZmVyZW5jZSBpcyBhbiBvcHRpb25hbCBleHRlbnNpb24gdG8gdGhlIFJvdXRlclxcbiAgMjU6XFx0XFx0ICBBZHZlcnRpc2VtZW50IG1lc3NhZ2Ugd2hpY2ggaW1wcm92ZXMgdGhlIGFiaWxpdHkgb2YgaG9zdHNcXG4gIDI2OlxcdFxcdCAgdG8gcGljayBhbiBhcHByb3ByaWF0ZSByb3V0ZXIsIGVzcGVjaWFsbHkgd2hlbiB0aGUgaG9zdHNcXG4gIDI3OlxcdFxcdCAgYXJlIHBsYWNlZCBpbiBhIG11bHRpLWhvbWVkIG5ldHdvcmsuXFxuICAyODpcXHRcXG4gIDI5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xcbiAgMzI6XFx0XFx0Ym9vbCBcXFwiSVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbiAgMzM6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2X1JPVVRFUl9QUkVGXFxuICAzNDpcXHRcXHRoZWxwXFxuICAzNTpcXHRcXHQgIFN1cHBvcnQgb2YgUm91dGUgSW5mb3JtYXRpb24uXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcXG4gIDQwOlxcdFxcdGJvb2wgXFxcIklQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDE6MjA6MjkuNDI2ODE5ODA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5MDIwNzM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIElQdjYgUm91dGUgQ29uZmlndXJhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCdzIGNsZWFyIHRoYXQgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgSVB2NiByb3V0aW5nLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBgSVBWNl9ST1VURV9JTkZPYCB3aGljaCBhcHBlYXJzIHRvIGJlIGxpbmtlZCB0byBgSVBWNl9ST1VURVJfUFJFRmAuIEFuZCBvZiBjb3Vyc2UsIHRoZSB1c2Ugb2YgYElQVjZgIGlzIGZ1bmRhbWVudGFsIHRvIGFsbCBvZiB0aGlzLlxuXG5JJ20gZ2V0dGluZyB0aGUgc2Vuc2UgdGhlcmUgYXJlIGxpa2VseSBvdGhlciBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCBoZXJlLCBzbyBJJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgdGhvc2UuXG5cblRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyBjb3JlIElQdjYgY29tcG9uZW50czogYG5ldC9pcHY2L2FkZHJjb25mLmNgLCBgbmV0L2lwdjYvaXA2X2ZpYi5jYCwgYG5ldC9pcHY2L25kaXNjLmNgLCBhbmQgYG5ldC9pcHY2L3JvdXRlLmNgLiBTbyB3ZSBhcmUgZGVhbGluZyB3aXRoIHByZXR0eSBmdW5kYW1lbnRhbCBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgdGhhdCB3aWxsIHRlbGwgdGhlIGNvcmUgc3Rvcnk6IHNwZWNpZmljYWxseSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCwgYHJ0Nl9maWxsX25vZGVgLCBhbmQgYHJ0Nl9ubG1zZ19zaXplYC4gVGhleSBzaG91bGQgcHJvdmlkZSBjb250ZXh0IGZvciB3aGF0J3MgZ29pbmcgb24uXG5cbkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgcnQ2X2ZpbGxfbm9kZWAgaXMgbm90IHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyOTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMToyMDozNC4wMTcwMjk3NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU4NTQzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydDZfZmlsbF9ub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3JvdXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvcm91dGUuYz0xMDk9c3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xcbm5ldC9pcHY2L3JvdXRlLmM6MTEwOnN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvcm91dGUuYy0xMTEtXFx0XFx0XFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTQwMTY9c3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy00MDM3LVxcbm5ldC9pcHY2L3JvdXRlLmM6NDAzODpcXHRcXHRcXHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsXFxubmV0L2lwdjYvcm91dGUuYy00MDM5LVxcdFxcdFxcdFxcdFxcdCAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01NzExPXN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy01NzU3LVxcbm5ldC9pcHY2L3JvdXRlLmM6NTc1ODpzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGVfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV4dGhvcCAqbmgsXFxubmV0L2lwdjYvcm91dGUuYy01NzU5LVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBjaGFyICpmbGFncylcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTc4Ni1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjU3ODc6c3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9yb3V0ZS5jLTU3ODgtXFx0XFx0XFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTU5NDAtXFx0XFx0aWYgKFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX25leHRob3BfY29tcGF0X21vZGUpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjYvcm91dGUuYzo1OTQxOlxcdFxcdCAgICBydDZfZmlsbF9ub2RlX25leHRob3Aoc2tiLCBydC1cXHUwMDNlbmgsIFxcdTAwMjZuaF9mbGFncykgXFx1MDAzYyAwKVxcbm5ldC9pcHY2L3JvdXRlLmMtNTk0Mi1cXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NjAzNj1zdGF0aWMgaW50IHJ0Nl9uaF9kdW1wX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfbmggKm5oLCB2b2lkICphcmcpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTYwNzAtXFxubmV0L2lwdjYvcm91dGUuYzo2MDcxOlxcdFxcdFxcdGVyciA9IHJ0Nl9maWxsX25vZGUoZHVtcC1cXHUwMDNlbmV0LCBkdW1wLVxcdTAwM2Vza2IsIHctXFx1MDAzZXJ0LFxcbm5ldC9pcHY2L3JvdXRlLmMtNjA3Mi1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnJ0Nl9leC1cXHUwMDNlcnQ2aS1cXHUwMDNlZHN0LCBOVUxMLCBOVUxMLCAwLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz02MDg5PWludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy02MTIwLVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjYvcm91dGUuYzo2MTIxOlxcdFxcdFxcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgYXJnLVxcdTAwM2Vza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLFxcbm5ldC9pcHY2L3JvdXRlLmMtNjEyMi1cXHRcXHRcXHRcXHRcXHQgIDAsIFJUTV9ORVdST1VURSxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NjIzMj1zdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNjM1NC1cXHRcXHRpZiAoZmlibWF0Y2gpXFxubmV0L2lwdjYvcm91dGUuYzo2MzU1OlxcdFxcdFxcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsXFxubmV0L2lwdjYvcm91dGUuYy02MzU2LVxcdFxcdFxcdFxcdFxcdCAgICBpaWYsIFJUTV9ORVdST1VURSxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNjM2MC1cXHRcXHRlbHNlXFxubmV0L2lwdjYvcm91dGUuYzo2MzYxOlxcdFxcdFxcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIGRzdCwgXFx1MDAyNmZsNi5kYWRkcixcXG5uZXQvaXB2Ni9yb3V0ZS5jLTYzNjItXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZmbDYuc2FkZHIsIGlpZiwgUlRNX05FV1JPVVRFLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz02MzgxPXN0YXRpYyB2b2lkIF9faW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTY0MDAtXFxubmV0L2lwdjYvcm91dGUuYzo2NDAxOlxcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxcbm5ldC9pcHY2L3JvdXRlLmMtNjQwMi1cXHRcXHRcXHQgICAgZXZlbnQsIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MsIGRlbF9yZWFzb24pO1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz02NDM1PXZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNjQ0NS1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjY0NDY6XFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXFxubmV0L2lwdjYvcm91dGUuYy02NDQ3LVxcdFxcdFxcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz02NDYyPXZvaWQgZmliNl9pbmZvX2h3X2ZsYWdzX3NldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNjQ5OS1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjY1MDA6XFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsXFxubmV0L2lwdjYvcm91dGUuYy02NTAxLVxcdFxcdFxcdCAgICAwLCAwLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAxOjIwOjM0LjA2NTYyMjIyNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDkwNTc1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipSb3V0ZSBUYWJsZSBNYWludGVuYW5jZSAtIFN0YXRpYyB2cy4gRHluYW1pYyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSByb3V0ZSB0YWJsZSBmdW5jdGlvbnMgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBhbmQgYWNjZXNzIGxldmVscy4gYHJ0Nl9maWxsX25vZGVgIGlzIGRlZmluZWQgYXMgc3RhdGljLCBtZWFuaW5nIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGF0IG1ha2VzIHNlbnNlIGZvciBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLCBub3Qgc29tZXRoaW5nIGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UuIEhvd2V2ZXIsIGBpcDZfZGVsX3J0X3JlYXNvbmAgYW5kIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCBhcmUgZGVmaW5lZCBhcyAqZXhwb3J0ZWQqLCBvciBub24tc3RhdGljLCBmdW5jdGlvbnMuIFRoYXQgbWVhbnMgdGhleSdyZSBpbnRlbmRlZCB0byBiZSBjYWxsYWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEZpbmFsbHksIGBydDZfbmxtc2dfc2l6ZWAgaXMgc3RhdGljLCB3aGljaCBpcyBwcm9iYWJseSB1c2VkIHRvIHNpemUgdGhlIG5ldGxpbmsgbWVzc2FnZSBmb3IgdGhlIHJvdXRlLlxuXG5HaXZlbiB0aGlzIGluaXRpYWwgb2JzZXJ2YXRpb24gYWJvdXQgdGhlIGRpZmZlcmVuY2UgaW4gc2NvcGluZywgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGVzZSBleHBvcnRlZCBmdW5jdGlvbnMsIGBpcDZfZGVsX3J0X3JlYXNvbmAgYW5kIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCwgYSBiaXQgbW9yZSBjbG9zZWx5IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlaXIgcHVycG9zZSB3aXRoaW4gdGhlIG92ZXJhbGwgcm91dGluZyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIG1pZ2h0IGJlIGxldmVyYWdpbmcgdGhlc2UgcGFydGljdWxhciBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjE2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDE6MjA6MzcuOTE0NjgxNzU2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUyODAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfZGVsX3J0X3JlYXNvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3JvdXRlLmM9OTcwPWludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTEwMjItXFx0aWYgKHJ0IFxcdTAwMjZcXHUwMDI2ICFsaWZldGltZSkge1xcbm5ldC9pcHY2L3JvdXRlLmM6MTAyMzpcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XFxubmV0L2lwdjYvcm91dGUuYy0xMDI0LVxcdFxcdHJ0ID0gTlVMTDtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9Mzk5OD1pbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy00MDA3LVxcbm5ldC9pcHY2L3JvdXRlLmM6NDAwODppbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTQwMDktXFx0XFx0ICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAxOjIwOjM3Ljk1OTIxNjA0MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQxMjQ4OTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25zaWRlcmluZyBJUHY2IFJvdXRpbmcgVGFibGUgVXBkYXRlcyoqXG5cbkhtbSwgc28gd2UncmUgdGFsa2luZyBhYm91dCByb3V0aW5nLCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBpbXBsaWNhdGlvbnMgb2YgYSByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0J3MgdGhlIGJlaGF2aW9yIG9mIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCBpbiB0aGlzIHNjZW5hcmlvPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGV4YWN0IGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbi4gRG9lcyBpdCBkaXJlY3RseSB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGZvcndhcmRpbmcgaW5mb3JtYXRpb24gYmFzZSAoRklCKSwgb3IgZG9lcyBpdCBzaWduYWwgc29tZSBvdGhlciBjb21wb25lbnQ/IEkgbmVlZCB0byBjb25zaWRlciBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgSVB2NiBzdGFjaywgaW5jbHVkaW5nIGludGVyYWN0aW9ucyB3aXRoIG5laWdoYm9yIGRpc2NvdmVyeSwgcHJlZml4IGRlbGVnYXRpb24sIGFuZCByb3V0ZSBjYWNoaW5nLiBJIGFsc28gbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIHdpdGhpbiB0aGUgcm91dGluZyB0YWJsZSB1cGRhdGUgcHJvY2Vzcy4gQXJlIHdlIGNvbnNpZGVyaW5nIGEgc2NlbmFyaW8gaW52b2x2aW5nIGR5bmFtaWMgcm91dGluZyBwcm90b2NvbHM/IFRoZSBpbXBsaWNhdGlvbnMgbWlnaHQgZGlmZmVyIHNpZ25pZmljYW50bHkgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyBpcyBhIHN0YXRpYyByb3V0ZSBkZWxldGlvbiwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleCBsaWtlIGEgQkdQIHJvdXRlIHdpdGhkcmF3YWwuIExldCdzIGRlbHZlIGRlZXBlciBpbnRvIHRoaXMgYXNwZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg0MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAxOjIwOjQxLjYwMDQ2Nzc2NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5OTAzNDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXQ2X3J0X2RlbF9ub3RpZnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvcm91dGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jPTY0MjM9dm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTY0MjgtXFxubmV0L2lwdjYvcm91dGUuYzo2NDI5OnZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxubmV0L2lwdjYvcm91dGUuYy02NDMwLVxcdFxcdFxcdCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDE6MjA6NDEuNzMwMzc3MjMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDExOTM4NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlRoaW5raW5nIFRocm91Z2ggRnVuY3Rpb24gTXV0YWJpbGl0eSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHBvdGVudGlhbCBmdW5jdGlvbiBzaWRlIGVmZmVjdHMsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiBob3cgZHluYW1pYyB0aGV5IHJlYWxseSBhcmUuIFRoZSBjb2RlIGFwcGVhcnMgdG8gdXNlIGBmaWI2X2RlbGAgd2hpY2ggaGFzIGJlZW4gbW9kaWZpZWQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgYmV5b25kIHRoaXMsIGFtIEkgbWlzc2luZyBhbnkgb3RoZXIgcGxhY2VzIHdoZXJlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbidzIGludGVybmFsIHN0YXRlIG1pZ2h0IGJlIGFsdGVyZWQ/IEkgaGF2ZSB0byBiZSBleGhhdXN0aXZlIGhlcmUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGZ1bmN0aW9uIHN0YXRlIGNoYW5nZXMgaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGVyZSBjb3VsZCBiZSBoaWRkZW4gbXV0YWJsZSBzdGF0ZS4gSWYgSSBtaXNzIGV2ZW4gb25lIHBvaW50LCB0aGlzIG92ZXJzaWdodCB3b3VsZCB1bmRlcm1pbmUgbXkgZW50aXJlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIyMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAxOjIwOjQ1LjM3MTU3MzAxNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyNTMzMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmliNl9kZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2ZpYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9maWIuYz0xODQxPXN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTY4LVxcbm5ldC9pcHY2L2lwNl9maWIuYzoxOTY5OnN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTE5NzAtXFx0XFx0XFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjA2NS0vKiBOZWVkIHRvIG93biB0YWJsZS1cXHUwMDNldGI2X2xvY2sgKi9cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjA2NjppbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDY3LVxcdCAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjA5NS1cXHRcXHRcXHRcXHRmaWI2X3JvdXRlc19yZXF1aXJlX3NyY19kZWMoaW5mby1cXHUwMDNlbmxfbmV0KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjA5NjpcXHRcXHRcXHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbywgZGVsX3JlYXNvbik7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwOTctXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjEwNy0gKlxcdENlcnRhaW5seSwgaXQgaXMgbm90IGludGVycnVwdCBzYWZlLlxcbm5ldC9pcHY2L2lwNl9maWIuYzoyMTA4OiAqXFx0SG93ZXZlciwgaXQgaXMgaW50ZXJuYWxseSByZWVudGVyYWJsZSB3cnQgaXRzZWxmIGFuZCBmaWI2X2FkZC9maWI2X2RlbC5cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjEwOS0gKlxcdEl0IG1lYW5zLCB0aGF0IHdlIGNhbiBtb2RpZnkgdHJlZSBkdXJpbmcgd2Fsa2luZ1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTIyMzQ9c3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyNTctXFx0XFx0XFx0dy1cXHUwMDNlbGVhZiA9IHJ0O1xcbm5ldC9pcHY2L2lwNl9maWIuYzoyMjU4OlxcdFxcdFxcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcXHUwMDI2aW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjU5LVxcdFxcdFxcdGlmIChyZXMpIHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yMzkzPXN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0MDUtXFx0XFx0aWYgKGZpYjZfYWdlKHJ0LCBnY19hcmdzKSA9PSAtMSlcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQwNjpcXHRcXHRcXHRmaWI2X2RlbChydCwgXFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fRVhQSVJFRCk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0MDctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMToyMDo0NS40MTY4MjkwMDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQzMTgwNDMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBJUHY2IFJvdXRlIERlbGV0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGZpYjZfZGVsYCBpc24ndCBkZWNsYXJlZCBgc3RhdGljYCwgd2hpY2ggaXMgaW1wb3J0YW50IGNvbnRleHQuXG5cbk15IGNvcmUgZm9jdXMgaGVyZSBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSByZWxldmFudCBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIElQdjYgcm91dGUgZGVsZXRpb24uIE15IGtleSBzeW1ib2xzIGFyZTogYGlwNl9kZWxfcnRfcmVhc29uYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgLCBhbmQgYGZpYjZfZGVsYC5cblxuTm93LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIHRoZSBlc3NlbnRpYWwgb25lcyBhcmUgY2xlYXJseSBgSVBWNmAsIGJ1dCBJIG5lZWQgdG8gY29uc2lkZXIgb3RoZXJzLiBgSVBWNl9ST1VURVJfUFJFRmAgYW5kIGBJUFY2X1JPVVRFX0lORk9gIGFyZSBzcGVjaWZpYyBmb3IgdGVzdGluZyBSb3V0ZSBJbmZvcm1hdGlvbiBPcHRpb25zIChSSU9zKSBpbiB0aGUgUHl0aG9uIHRlc3Qgc3VpdGUsIHNwZWNpZmljYWxseSBmb3IgdGhlIGBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTmAgcmVhc29uLiBIb3dldmVyLCB0aGUgZm91bmRhdGlvbmFsIGBSVEFfREVMX1JFQVNPTmAgZnVuY3Rpb25hbGl0eSBhY3R1YWxseSB3b3JrcyB3aXRob3V0IHRob3NlIGZsYWdzIC0gZm9yIHRoaW5ncyBsaWtlIGV4cGlyZWQgcm91dGVzIG9yIHJlZ3VsYXIgUm91dGVyIEFkdmVydGlzZW1lbnRzLiBJdOKAmXMgZGVmaW5pdGVseSBiZW5lZmljaWFsIHRvIGhhdmUgdGhvc2UgY29uZmlncyBlbmFibGVkIGZvciB0aG9yb3VnaCB0ZXN0aW5nIG9mIHRoZSBSSU8gYXNwZWN0cyB0aG91Z2guIFNvIHRoZXkgYXJlIGltcG9ydGFudCBmb3IgY29tcGxldGVuZXNzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBhbnkgb3RoZXIgY29uZmlncyBhcmUgcmVsZXZhbnQuIGBDT05GSUdfTkVUYCBpcyBhIGdpdmVuLCBidXQgd2hhdCBhYm91dCBgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTYD8gSSBkb24ndCB0aGluayB0aGF0J3Mgc3RyaWN0bHkgcmVxdWlyZWQgZm9yIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS5cblxuTmV4dCwgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBzaWduYXR1cmVzIG9mIHRoZXNlIGtleSBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoZXkgYWxpZ24gd2l0aCBteSB1bmRlcnN0YW5kaW5nLlxuXG4qICAgYGZpYjZfZGVsYDogYGludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKWAgLSBMb29rcyBnb29kLlxuKiAgIGBpcDZfZGVsX3J0X3JlYXNvbmA6IGBpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pYCAtIEFsc28gZ29vZC5cbiogICBgaW5ldDZfcnRfZGVsX25vdGlmeWA6IGB2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilgIC0gQ29ycmVjdC5cblxuQWxyaWdodCwgdGhlc2UgZm9jdXMgc3ltYm9scyBhcmUgYWxsIGFsaWduZWQgd2l0aCB0aGUgZXhwZWN0ZWQgaW50ZXJmYWNlcy4gSSdtIG5vdyByZWFkeSB0byBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTM3LCJPdXRwdXRUb2tlbnMiOjE0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMToyMDo1My44NDg2MzU1MDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzYyNTgxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9ST1VURVJfUFJFRlwiLFxuICAgIFwiSVBWNl9ST1VURV9JTkZPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X2RlbF9ydF9yZWFzb25cIixcbiAgICBcImluZXQ2X3J0X2RlbF9ub3RpZnlcIixcbiAgICBcImZpYjZfZGVsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBSVEFfREVMX1JFQVNPTiBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLCBtb2RpZnlpbmcgY29yZSBJUHY2IHJvdXRpbmcgYW5kIG5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gbG9naWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgcm91dGUgZXhwaXJhdGlvbiwgcm91dGVyIGFkdmVydGlzZW1lbnRzLCBhbmQgbWFudWFsIHJvdXRlIGRlbGV0aW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1JPVVRFUl9QUkVGXCIsXG4gICAgXCJJUFY2X1JPVVRFX0lORk9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcDZfZGVsX3J0X3JlYXNvblwiLFxuICAgIFwiaW5ldDZfcnRfZGVsX25vdGlmeVwiLFxuICAgIFwiZmliNl9kZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIFJUQV9ERUxfUkVBU09OIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMsIG1vZGlmeWluZyBjb3JlIElQdjYgcm91dGluZyBhbmQgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSByb3V0ZSBleHBpcmF0aW9uLCByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMsIGFuZCBtYW51YWwgcm91dGUgZGVsZXRpb24sIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMToyMDo1My45MjYyNjczNzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjM2NDE5NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDE6MjA6NTMuOTI2ODA5ODU5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE2NjM1ODczMTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgdG8gcmVwb3J0IHRoZSByZWFzb24gZm9yIElQdjYgcm91dGUgZGVsZXRpb25zLiBUaGUgZGVsZXRpb24gcmVhc29uIGlzIHBhc3NlZCB0aHJvdWdoIHRoZSByb3V0aW5nIHN1YnN5c3RlbSBhcyBhbiBleHBsaWNpdCBgZW51bSBydF9kZWxfcmVhc29uYCB2YWx1ZSAoZS5nLiwgYFJUX0RFTF9SRUFTT05fVU5TUEVDYCwgYFJUX0RFTF9SRUFTT05fRVhQSVJFRGAsIGBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTmApLiBUaGlzIHZhbHVlIGlzIHRoZW4gc2VyaWFsaXplZCBpbnRvIHRoZSBuZXRsaW5rIG1lc3NhZ2UgdXNpbmcgYG5sYV9wdXRfdTMyKClgLiBcXG5cXG5TaW5jZSB0aGUgYGRlbF9yZWFzb25gIGlzIHBhc3NlZCBieSB2YWx1ZSBhcyBhbiBleHBsaWNpdCBjb25zdGFudCBpbiBhbGwgbW9kaWZpZWQgY2FsbCBzaXRlcywgdGhlcmUgaXMgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gc3RhY2ssIGhlYXAsIG9yIHBhZGRpbmcgYnl0ZXMuIFRoZSBuZXRsaW5rIGF0dHJpYnV0ZSBjb25zdHJ1Y3Rpb24gdmlhIGBubGFfcHV0X3UzMigpYCBzYWZlbHkgaGFuZGxlcyB0aGUgc2VyaWFsaXphdGlvbiB3aXRob3V0IGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgaW4gdGhpcyBjb2RlLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3YjQ0NWJkMDJmNGY4ODQ5N2ViZGFkOTE4Nzk4YjhjODNkMTk2YTkxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAwMToyMDoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcbmluZGV4IDMzMTk1ZGI5Njc0NmMuLjI1MzAzN2VhNTE3NmEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcbkBAIC03OCw2ICs3OCwyNyBAQCBkZWZpbml0aW9uczpcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBydGEtdXNlZFxuICAgICAgICAgdHlwZTogdTMyXG4rICAtXG4rICAgIG5hbWU6IGRlbC1yZWFzb25cbisgICAgdHlwZTogZW51bVxuKyAgICBuYW1lLXByZWZpeDogcnQtZGVsLXJlYXNvbi1cbisgICAgZW51bS1uYW1lOiBydC1kZWwtcmVhc29uXG4rICAgIGRvYzogfFxuKyAgICAgIFdoeSB0aGUga2VybmVsIGRlbGV0ZWQgYSByb3V0ZS4gTmV3IGNhdXNlcyBtYXkgYmUgYXBwZW5kZWQuIFRoZVxuKyAgICAgIHZhbHVlIHNwYWNlIGlzIGZhbWlseS1hZ25vc3RpYywgYSB2YWx1ZSBpcyBuZXZlciByZWludGVycHJldGVkXG4rICAgICAgcGVyIGFkZHJlc3MgZmFtaWx5LlxuKyAgICBlbnRyaWVzOlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHVuc3BlY1xuKyAgICAgICAgZG9jOiBUaGUgZGVsZXRpb24gcGF0aCBkb2VzIG5vdCByZWNvcmQgYSBjYXVzZS5cbisgICAgICAtXG4rICAgICAgICBuYW1lOiBleHBpcmVkXG4rICAgICAgICBkb2M6IFRoZSBSVEZfRVhQSVJFUyBsaWZldGltZSByYW4gb3V0IGFuZCB0aGUgcm91dGUgd2FzIGdhcmJhZ2VcbisgICAgICAgICAgY29sbGVjdGVkLlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHJhLXdpdGhkcmF3blxuKyAgICAgICAgZG9jOiBBIFJvdXRlciBBZHZlcnRpc2VtZW50IHdpdGhkcmV3IHRoZSByb3V0ZSB3aXRoIGEgemVyb1xuKyAgICAgICAgICBsaWZldGltZS5cbiBcbiBhdHRyaWJ1dGUtc2V0czpcbiAgIC1cbkBAIC0xODUsNiArMjA2LDE4IEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgdHlwZTogdTMyXG4gICAgICAgICBieXRlLW9yZGVyOiBiaWctZW5kaWFuXG4gICAgICAgICBkaXNwbGF5LWhpbnQ6IGhleFxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGRlbC1yZWFzb25cbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZW51bTogZGVsLXJlYXNvblxuKyAgICAgICAgZG9jOiB8XG4rICAgICAgICAgIEVtaXR0ZWQgb25seSBvbiBSVE1fREVMUk9VVEUgbm90aWZpY2F0aW9ucywgYW5kIG9ubHkgd2hlbiB0aGVcbisgICAgICAgICAgZGVsZXRpb24gcGF0aCByZWNvcmRzIGEgY2F1c2UuIEFuIGFic2VudCBhdHRyaWJ1dGUgbWVhbnNcbisgICAgICAgICAgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdFxuKyAgICAgICAgICByZWNvcmQgaXRzIGNhdXNlLCBjb25zdW1lcnMgbXVzdCB0cmVhdCBhYnNlbnQgYW5kIHVuc3BlY1xuKyAgICAgICAgICBpZGVudGljYWxseS4gQ3VycmVudGx5IG9ubHkgSVB2NiBkZWxldGlvbiBwYXRocyByZWNvcmQgYVxuKyAgICAgICAgICBjYXVzZS4gVGhlIGF0dHJpYnV0ZSBpcyBub3RpZmljYXRpb24tb25seSwgdGhlIGtlcm5lbCByZWplY3RzXG4rICAgICAgICAgIGl0IGluIHJlcXVlc3RzLlxuICAgLVxuICAgICBuYW1lOiBtZXRyaWNzXG4gICAgIG5hbWUtcHJlZml4OiBydGF4LVxuQEAgLTI5OSw2ICszMzIsNyBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gZHBvcnRcbiAgICAgICAgICAgICAtIG5oLWlkXG4gICAgICAgICAgICAgLSBmbG93bGFiZWxcbisgICAgICAgICAgICAtIGRlbC1yZWFzb25cbiAgICAgICBkdW1wOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI2XG5AQCAtMzEzLDcgKzM0NywzNSBAQCBvcGVyYXRpb25zOlxuICAgICAgIGRvOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI0XG4tICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcbisgICAgICAgICAgYXR0cmlidXRlczogXHUwMDI2cm91dGUtcmVxLWF0dHJzXG4rICAgICAgICAgICAgLSBkc3RcbisgICAgICAgICAgICAtIHNyY1xuKyAgICAgICAgICAgIC0gaWlmXG4rICAgICAgICAgICAgLSBvaWZcbisgICAgICAgICAgICAtIGdhdGV3YXlcbisgICAgICAgICAgICAtIHByaW9yaXR5XG4rICAgICAgICAgICAgLSBwcmVmc3JjXG4rICAgICAgICAgICAgLSBtZXRyaWNzXG4rICAgICAgICAgICAgLSBtdWx0aXBhdGhcbisgICAgICAgICAgICAtIGZsb3dcbisgICAgICAgICAgICAtIGNhY2hlaW5mb1xuKyAgICAgICAgICAgIC0gdGFibGVcbisgICAgICAgICAgICAtIG1hcmtcbisgICAgICAgICAgICAtIG1mYy1zdGF0c1xuKyAgICAgICAgICAgIC0gdmlhXG4rICAgICAgICAgICAgLSBuZXdkc3RcbisgICAgICAgICAgICAtIHByZWZcbisgICAgICAgICAgICAtIGVuY2FwLXR5cGVcbisgICAgICAgICAgICAtIGVuY2FwXG4rICAgICAgICAgICAgLSBleHBpcmVzXG4rICAgICAgICAgICAgLSBwYWRcbisgICAgICAgICAgICAtIHVpZFxuKyAgICAgICAgICAgIC0gdHRsLXByb3BhZ2F0ZVxuKyAgICAgICAgICAgIC0gaXAtcHJvdG9cbisgICAgICAgICAgICAtIHNwb3J0XG4rICAgICAgICAgICAgLSBkcG9ydFxuKyAgICAgICAgICAgIC0gbmgtaWRcbisgICAgICAgICAgICAtIGZsb3dsYWJlbFxuICAgICAtXG4gICAgICAgbmFtZTogZGVscm91dGVcbiAgICAgICBkb2M6IERlbGV0ZSBhbiBleGlzdGluZyByb3V0ZVxuQEAgLTMyMSw0ICszODMsMjMgQEAgb3BlcmF0aW9uczpcbiAgICAgICBkbzpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIHZhbHVlOiAyNVxuLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzXG4rICAgICAgICAgIGF0dHJpYnV0ZXM6ICpyb3V0ZS1yZXEtYXR0cnNcbisgICAgLVxuKyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZlxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS5cbisgICAgICB2YWx1ZTogMjRcbisgICAgICBub3RpZnk6IGdldHJvdXRlXG4rICAgIC1cbisgICAgICBuYW1lOiBkZWxyb3V0ZS1udGZcbisgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuXG4rICAgICAgdmFsdWU6IDI1XG4rICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxuK1xuK21jYXN0LWdyb3VwczpcbisgIGxpc3Q6XG4rICAgIC1cbisgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGVcbisgICAgICB2YWx1ZTogN1xuKyAgICAtXG4rICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlXG4rICAgICAgdmFsdWU6IDExXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG5pbmRleCA5Y2QyN2UxYjliNjkyLi4yMzIyODliNDM5YzNjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcbkBAIC00NjgsNyArNDY4LDggQEAgdm9pZCBmaWI2X2NsZWFuX2FsbF9za2lwX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0ICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTtcbitpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0ICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4gXG4gc3RhdGljIGlubGluZVxuIHZvaWQgcnQ2X2dldF9wcmVmc3JjKGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQsIHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbkBAIC01MzIsNiArNTMzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gI2VuZGlmXG4gdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4gXHRcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKTtcbit2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0XHRcdCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4gXG4gdm9pZCBmaWI2X2FnZV9leGNlcHRpb25zKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9nY19hcmdzICpnY19hcmdzLFxuIFx0XHRcdCB1bnNpZ25lZCBsb25nIG5vdyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggMDlmZmUwZjEzY2U3NS4uY2MwNDU3MDU4NjJkZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTEyNiw2ICsxMjYsOCBAQCBpbnQgaXB2Nl9yb3V0ZV9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBjbWQsXG4gaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcbiBcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIGludCBpcDZfaW5zX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpKTtcbitpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4rXHRcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSk7XG4gI2Vsc2VcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbmluZGV4IDI3MjY1ZmQzMWU1ZmMuLjM5ODhiNTFkYjUzOWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuQEAgLTM5OSw2ICszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xuIFx0UlRBX0RQT1JULFxuIFx0UlRBX05IX0lELFxuIFx0UlRBX0ZMT1dMQUJFTCxcbitcdFJUQV9ERUxfUkVBU09OLFxuIFx0X19SVEFfTUFYXG4gfTtcbiBcbkBAIC00MDcsNiArNDA4LDMwIEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XG4gI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKVxuICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKVxuIFxuKy8qIFJUQV9ERUxfUkVBU09OOiB3aHkgdGhlIGtlcm5lbCBkZWxldGVkIHRoZSByb3V0ZS4gdTMyLlxuKyAqIEVtaXR0ZWQgb25seSBvbiBSVE1fREVMUk9VVEUgbm90aWZpY2F0aW9ucywgYW5kIG9ubHkgd2hlbiB0aGUgZGVsZXRpb25cbisgKiBwYXRoIHJlY29yZHMgYSBjYXVzZS4gQWJzZW5jZSBtZWFucyBlaXRoZXIgYW4gb2xkZXIga2VybmVsIG9yIGFcbisgKiBkZWxldGlvbiBwYXRoIHRoYXQgZG9lcyBub3QgKHlldCkgcmVjb3JkIGl0cyBjYXVzZSAtIGNvbnN1bWVycyBtdXN0XG4rICogdHJlYXQgXCJhYnNlbnRcIiBhbmQgXCJ1bnNwZWNcIiBpZGVudGljYWxseS4gTmV3IGNhdXNlcyBtYXkgYmUgYXBwZW5kZWQuXG4rICogQ3VycmVudGx5IG9ubHkgSVB2NiBkZWxldGlvbiBwYXRocyByZWNvcmQgYSBjYXVzZS5cbisgKlxuKyAqIFRoZSBhdHRyaWJ1dGUgaXMgbm90aWZpY2F0aW9uLW9ubHk6IHRoZSBrZXJuZWwgcmVqZWN0cyBpdCBpblxuKyAqIHJlcXVlc3RzLCBzbyBhIG5vdGlmaWNhdGlvbiBtdXN0IG5vdCBiZSBlY2hvZWQgYmFjayB2ZXJiYXRpbS5cbisgKlxuKyAqIFRoZSB2YWx1ZSBzcGFjZSBpcyBmYW1pbHktYWdub3N0aWM6IGEgdmFsdWUgbXVzdCBuZXZlciBiZVxuKyAqIHJlaW50ZXJwcmV0ZWQgcGVyIGFkZHJlc3MgZmFtaWx5LiBBIGNhdXNlIHRoYXQgb25seSBvbmUgZmFtaWx5IGNhblxuKyAqIHByb2R1Y2Ugc3RpbGwgZ2V0cyBpdHMgb3duIHZhbHVlIHJhdGhlciB0aGFuIHJldXNpbmcgYW5vdGhlclxuKyAqIGZhbWlseSdzLlxuKyAqL1xuK2VudW0gcnRfZGVsX3JlYXNvbiB7XG4rXHRSVF9ERUxfUkVBU09OX1VOU1BFQyxcdFx0LyogY2F1c2Ugbm90IHJlY29yZGVkICovXG4rXHRSVF9ERUxfUkVBU09OX0VYUElSRUQsXHRcdC8qIFJURl9FWFBJUkVTIGxpZmV0aW1lIHJhbiBvdXQgKEdDKSAqL1xuK1x0UlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04sXHQvKiB6ZXJvLWxpZmV0aW1lIFJBIC8gUElPIC8gUklPICovXG4rXHRfX1JUX0RFTF9SRUFTT05fTUFYXG4rfTtcbitcbisjZGVmaW5lIFJUX0RFTF9SRUFTT05fTUFYIChfX1JUX0RFTF9SRUFTT05fTUFYIC0gMSlcbitcbiAvKiBSVE1fTVVMVElQQVRIIC0tLSBhcnJheSBvZiBzdHJ1Y3QgcnRuZXh0aG9wLlxuICAqXG4gICogXCJzdHJ1Y3QgcnRuZXh0aG9wXCIgZGVzY3JpYmVzIGFsbCBuZWNlc3NhcnkgbmV4dGhvcCBpbmZvcm1hdGlvbixcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xuaW5kZXggZjZmYTI3MTViNDUwYi4uOWQ4OWJlN2UwNTQ0YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmNcbisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbkBAIC0yODc0LDcgKzI4NzQsOCBAQCB2b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcbiBcdFx0aWYgKHJ0KSB7XG4gXHRcdFx0LyogQXV0b2NvbmYgcHJlZml4IHJvdXRlICovXG4gXHRcdFx0aWYgKHZhbGlkX2xmdCA9PSAwKSB7XG4tXHRcdFx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbitcdFx0XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsXG4rXHRcdFx0XHRcdFx0ICBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG4gXHRcdFx0XHRydCA9IE5VTEw7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHRhYmxlID0gcnQtXHUwMDNlZmliNl90YWJsZTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcbmluZGV4IGU5ZmM2OTJkNGYzYjIuLjNlMzgyYmExNTczZTMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmNcbisrKyBiL25ldC9pcHY2L2lwNl9maWIuY1xuQEAgLTE5NjcsNyArMTk2Nyw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcbiB9XG4gXG4gc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbi1cdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbitcdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbitcdFx0XHQgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgZmliNl9pbmZvICpsZWFmLCAqcmVwbGFjZV9ydCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmliNl93YWxrZXIgKnc7XG5AQCAtMjA1NiwxMyArMjA1NywxNCBAQCBzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxuIFx0XHRcdGNhbGxfZmliNl9lbnRyeV9ub3RpZmllcnNfcmVwbGFjZShuZXQsIHJlcGxhY2VfcnQpO1xuIFx0fVxuIFx0aWYgKCFpbmZvLVx1MDAzZXNraXBfbm90aWZ5KVxuLVx0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCk7XG4rXHRcdGluZXQ2X3J0X2RlbF9ub3RpZnkocnQsIGluZm8sIGRlbF9yZWFzb24pO1xuIFxuIFx0ZmliNl9pbmZvX3JlbGVhc2UocnQpO1xuIH1cbiBcbiAvKiBOZWVkIHRvIG93biB0YWJsZS1cdTAwM2V0YjZfbG9jayAqL1xuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4raW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbitcdCAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwO1xuQEAgLTIwOTEsNyArMjA5Myw3IEBAIGludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4gXHRcdGlmIChydCA9PSBjdXIpIHtcbiBcdFx0XHRpZiAoZmliNl9yZXF1aXJlc19zcmMoY3VyKSlcbiBcdFx0XHRcdGZpYjZfcm91dGVzX3JlcXVpcmVfc3JjX2RlYyhpbmZvLVx1MDAzZW5sX25ldCk7XG4tXHRcdFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8pO1xuK1x0XHRcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0XHRydHBfbmV4dCA9IFx1MDAyNmN1ci1cdTAwM2VmaWI2X25leHQ7XG5AQCAtMjI1Myw3ICsyMjU1LDcgQEAgc3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxuIFx0XHRyZXMgPSBjLVx1MDAzZWZ1bmMocnQsIGMtXHUwMDNlYXJnKTtcbiBcdFx0aWYgKHJlcyA9PSAtMSkge1xuIFx0XHRcdHctXHUwMDNlbGVhZiA9IHJ0O1xuLVx0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbitcdFx0XHRyZXMgPSBmaWI2X2RlbChydCwgXHUwMDI2aW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChyZXMpIHtcbiAjaWYgUlQ2X0RFQlVHIFx1MDAzZT0gMlxuIFx0XHRcdFx0cHJfZGVidWcoXCIlczogZGVsIGZhaWxlZDogcnQ9JXBAJXAgZXJyPSVkXFxuXCIsXG5AQCAtMjQwMSw3ICsyNDAzLDcgQEAgc3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBuLCBcdTAwMjZ0YjYtXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxuIFx0XHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxuLVx0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbitcdFx0XHRmaWI2X2RlbChydCwgXHUwMDI2aW5mbywgUlRfREVMX1JFQVNPTl9FWFBJUkVEKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZmliNl9nY19hbGwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9nY19hcmdzICpnY19hcmdzKVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjLmMgYi9uZXQvaXB2Ni9uZGlzYy5jXG5pbmRleCBmZTM2YjNmNTEyODUwLi4xMTExYzRlYmM2MWQ5IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmRpc2MuY1xuKysrIGIvbmV0L2lwdjYvbmRpc2MuY1xuQEAgLTEzNjEsNyArMTM2MSw5IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRkZWZydHJfdXNyX21ldHJpYyA9IGluNl9kZXYtXHUwMDNlY25mLnJhX2RlZnJ0cl9tZXRyaWM7XG4gXHQvKiBkZWxldGUgdGhlIHJvdXRlIGlmIGxpZmV0aW1lIGlzIDAgb3IgaWYgbWV0cmljIG5lZWRzIGNoYW5nZSAqL1xuIFx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAobGlmZXRpbWUgPT0gMCB8fCBydC1cdTAwM2VmaWI2X21ldHJpYyAhPSBkZWZydHJfdXNyX21ldHJpYykpIHtcbi1cdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4rXHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsXG4rXHRcdFx0XHQgIGxpZmV0aW1lID09IDAgPyBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XG4rXHRcdFx0XHRcdFx0ICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdHJ0ID0gTlVMTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggZmM0MmQ2N2U1ODIyNi4uMTcwNDM1OWQzOTYwZCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbisrKyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC0xMTEsNyArMTExLDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbiBcdFx0XHQgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYyxcbiBcdFx0XHQgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4tXHRcdFx0IHVuc2lnbmVkIGludCBmbGFncyk7XG4rXHRcdFx0IHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xuIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9maW5kX2NhY2hlZF9ydChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcyxcbiBcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcbiBcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcik7XG5AQCAtMTAyMCw3ICsxMDIwLDcgQEAgaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcbiBcdFx0XHRcdFx0Z3dhZGRyLCBkZXYpO1xuIFxuIFx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAhbGlmZXRpbWUpIHtcbi1cdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4rXHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTM5NzMsNyArMzk3Myw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4rc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0XHRcdGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IGZpYjZfdGFibGUgKnRhYmxlO1xuQEAgLTM5ODYsNyArMzk4Nyw3IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcbiBcdHRhYmxlID0gcnQtXHUwMDNlZmliNl90YWJsZTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4tXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7XG4rXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gXG4gb3V0OlxuQEAgLTQwMDEsNyArNDAwMiwxNSBAQCBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxuIFx0XHQuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeVxuIFx0fTtcbiBcbi1cdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmluZm8pO1xuK1x0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuK31cbitcbitpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbitcdFx0ICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4re1xuK1x0c3RydWN0IG5sX2luZm8gaW5mbyA9IHsgLm5sX25ldCA9IG5ldCB9O1xuK1xuK1x0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbywgZGVsX3JlYXNvbik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbkBAIC00MDI4LDcgKzQwMzcsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXG4gXG4gXHRcdFx0aWYgKHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLFxuIFx0XHRcdFx0XHQgIE5VTEwsIE5VTEwsIDAsIFJUTV9ERUxST1VURSxcbi1cdFx0XHRcdFx0ICBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCAwKSBcdTAwM2MgMCkge1xuK1x0XHRcdFx0XHQgIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIDAsXG4rXHRcdFx0XHRcdCAgUlRfREVMX1JFQVNPTl9VTlNQRUMpIFx1MDAzYyAwKSB7XG4gXHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRcdHNrYiA9IE5VTEw7XG4gXHRcdFx0fSBlbHNlXG5AQCAtNDA2NCwxMyArNDA3NCwxMyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaWJsaW5nLCBuZXh0X3NpYmxpbmcsXG4gXHRcdFx0XHRcdCBcdTAwMjZydC1cdTAwM2VmaWI2X3NpYmxpbmdzLFxuIFx0XHRcdFx0XHQgZmliNl9zaWJsaW5ncykge1xuLVx0XHRcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8pO1xuK1x0XHRcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7XG4rXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gb3V0X3B1dDpcbkBAIC00MTk2LDcgKzQyMDYsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXG4gXHRcdFx0XHRpZiAoIWZpYjZfaW5mb19ob2xkX3NhZmUocnQpKVxuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRcdGVyciA9ICBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8pO1xuK1x0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvLFxuK1x0XHRcdFx0XHRcdCAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAoY2ZnLVx1MDAzZWZjX25oX2lkKVxuQEAgLTQyMTUsNyArNDIyNiw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcbiBcbiBcdFx0XHQvKiBpZiBnYXRld2F5IHdhcyBzcGVjaWZpZWQgb25seSBkZWxldGUgdGhlIG9uZSBob3AgKi9cbiBcdFx0XHRpZiAoY2ZnLVx1MDAzZWZjX2ZsYWdzIFx1MDAyNiBSVEZfR0FURVdBWSlcbi1cdFx0XHRcdGVyciA9IF9faXA2X2RlbF9ydChydCwgXHUwMDI2Y2ZnLVx1MDAzZWZjX25saW5mbyk7XG4rXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4rXHRcdFx0XHRcdFx0ICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGVyciA9IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhydCwgY2ZnKTtcbiBcdFx0XHRicmVhaztcbkBAIC01NzM5LDYgKzU3NTEsNyBAQCBzdGF0aWMgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHN0cnVjdCBmaWI2X2luZm8gKmY2aSlcbiBcdCAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpXG4gXHQgICAgICAgKyBubGFfdG90YWxfc2l6ZShUQ1BfQ0FfTkFNRV9NQVgpIC8qIFJUQVhfQ0NfQUxHTyAqL1xuIFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX1BSRUYgKi9cbitcdCAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9ERUxfUkVBU09OICovXG4gXHQgICAgICAgKyBuZXh0aG9wX2xlbjtcbiB9XG4gXG5AQCAtNTc3NSw3ICs1Nzg4LDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbiBcdFx0XHQgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYyxcbiBcdFx0XHQgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4tXHRcdFx0IHVuc2lnbmVkIGludCBmbGFncylcbitcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0NiA9IGRzdF9ydDZfaW5mbyhkc3QpO1xuIFx0c3RydWN0IHJ0NmtleSAqcnQ2X2RzdCwgKnJ0Nl9zcmM7XG5AQCAtNTk1NCw2ICs1OTY3LDEwIEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAocnRubF9wdXRfY2FjaGVpbmZvKHNrYiwgZHN0LCAwLCBleHBpcmVzLCBkc3QgPyBkc3QtXHUwMDNlZXJyb3IgOiAwKSBcdTAwM2MgMClcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4rXHRpZiAoZGVsX3JlYXNvbiAhPSBSVF9ERUxfUkVBU09OX1VOU1BFQyBcdTAwMjZcdTAwMjZcbitcdCAgICBubGFfcHV0X3UzMihza2IsIFJUQV9ERUxfUkVBU09OLCBkZWxfcmVhc29uKSlcbitcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4rXG4gXHRpZiAobmxhX3B1dF91OChza2IsIFJUQV9QUkVGLCBJUFY2X0VYVFJBQ1RfUFJFRihydDZfZmxhZ3MpKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG5AQCAtNjA1NSw3ICs2MDcyLDggQEAgc3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKVxuIFx0XHRcdFx0XHQgICAgXHUwMDI2cnQ2X2V4LVx1MDAzZXJ0NmktXHUwMDNlZHN0LCBOVUxMLCBOVUxMLCAwLFxuIFx0XHRcdFx0XHQgICAgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgICAgTkVUTElOS19DQihkdW1wLVx1MDAzZWNiLVx1MDAzZXNrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgZHVtcC1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCB3LVx1MDAzZWZsYWdzKTtcbitcdFx0XHRcdFx0ICAgIGR1bXAtXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgdy1cdTAwM2VmbGFncyxcbitcdFx0XHRcdFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC02MTAzLDcgKzYxMjEsOCBAQCBpbnQgcnQ2X2R1bXBfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcClcbiBcdFx0XHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy1cdTAwM2Vza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLFxuIFx0XHRcdFx0XHQgIDAsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICBORVRMSU5LX0NCKGFyZy1cdTAwM2VjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICBhcmctXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MpKSB7XG4rXHRcdFx0XHRcdCAgYXJnLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzLFxuK1x0XHRcdFx0XHQgIFJUX0RFTF9SRUFTT05fVU5TUEVDKSkge1xuIFx0XHRcdFx0cmV0dXJuIDA7XG4gXHRcdFx0fVxuIFx0XHRcdGNvdW50Kys7XG5AQCAtNjMzNiwxMiArNjM1NSwxNCBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLFxuIFx0XHRcdFx0XHQgICAgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4rXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuK1x0XHRcdFx0XHQgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgZHN0LCBcdTAwMjZmbDYuZGFkZHIsXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZmbDYuc2FkZHIsIGlpZiwgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIDApO1xuK1x0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCxcbitcdFx0XHRcdFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGVyciA9IC1FTkVUVU5SRUFDSDtcbiBcdH1cbkBAIC02MzU3LDggKzYzNzgsOSBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuLVx0XHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MpXG4rc3RhdGljIHZvaWQgX19pbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbitcdFx0XHQgICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IG5sbV9mbGFncyxcbitcdFx0XHQgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG5AQCAtNjM3Nyw3ICs2Mzk5LDcgQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXG4tXHRcdFx0ICAgIGV2ZW50LCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MpO1xuK1x0XHRcdCAgICBldmVudCwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLCBkZWxfcmVhc29uKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIG5lZWRlZCBzcGFjZSBncmV3IHVuZGVyIHVzLiAqL1xuQEAgLTYzOTgsNiArNjQyMCwxOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdHJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNl9ST1VURSwgZXJyKTtcbiB9XG4gXG4rdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHRcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcbit7XG4rXHRfX2luZXQ2X3J0X25vdGlmeShldmVudCwgcnQsIGluZm8sIG5sbV9mbGFncywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuK31cbitcbit2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0XHRcdCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbit7XG4rXHRfX2luZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwLCBkZWxfcmVhc29uKTtcbit9XG4rXG4gdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHQgICAgc3RydWN0IG5sX2luZm8gKmluZm8pXG4ge1xuQEAgLTY0MTAsNyArNjQ0NCw4IEBAIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgUlRNX05FV1JPVVRFLCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFKTtcbitcdFx0XHQgICAgUlRNX05FV1JPVVRFLCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLFxuK1x0XHRcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovXG4gXHRcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XG5AQCAtNjQ2Myw3ICs2NDk4LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuIFx0fVxuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsXG4tXHRcdFx0ICAgIDAsIDApO1xuK1x0XHRcdCAgICAwLCAwLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovXG4gXHRcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcbmluZGV4IGU1OGJkYmRjNThlZWEuLjM0OTM1ODg2YjZhZGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG5AQCAtMTcsNyArMTcsNyBAQCBmcm9tIC51dGlscyBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIGZkX3JlYWRfdGltZW91dCwgY21kLCBia2csIGRlZmVyLCBcXFxuICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjXG4gZnJvbSAuYnBmIGltcG9ydCBicGZfbWFwX3NldCwgYnBmX21hcF9kdW1wLCBicGZfcHJvZ19tYXBfaWRzXG4gZnJvbSAueW5sIGltcG9ydCBObEVycm9yLCBObGN0cmxGYW1pbHksIFlubEZhbWlseSwgXFxcbi0gICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseVxuKyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIC55bmwgaW1wb3J0IE5ldHNoYXBlckZhbWlseSwgRGV2bGlua0ZhbWlseSwgUFNQRmFtaWx5LCBOZXRsaW5rXG4gXG4gX19hbGxfXyA9IFtcIktTUkNcIixcbkBAIC0zNCw0ICszNCw0IEBAIF9fYWxsX18gPSBbXCJLU1JDXCIsXG4gICAgICAgICAgICBcIk5ldGRldlNpbVwiLCBcIk5ldGRldlNpbURldlwiLFxuICAgICAgICAgICAgXCJOZXRzaGFwZXJGYW1pbHlcIiwgXCJEZXZsaW5rRmFtaWx5XCIsIFwiUFNQRmFtaWx5XCIsIFwiTmxFcnJvclwiLFxuICAgICAgICAgICAgXCJZbmxGYW1pbHlcIiwgXCJFdGh0b29sRmFtaWx5XCIsIFwiTmV0ZGV2RmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLFxuLSAgICAgICAgICAgXCJObGN0cmxGYW1pbHlcIiwgXCJSdG5sQWRkckZhbWlseVwiLCBcIk5ldGxpbmtcIl1cbisgICAgICAgICAgIFwiTmxjdHJsRmFtaWx5XCIsIFwiUnRubEFkZHJGYW1pbHlcIiwgXCJSdG5sUm91dGVGYW1pbHlcIiwgXCJOZXRsaW5rXCJdXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuaW5kZXggMmU1NjcwNjJhYTZjYy4uMDhkZWZmNzU2ZjI5YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuQEAgLTI5LDcgKzI5LDcgQEAgZXhjZXB0IE1vZHVsZU5vdEZvdW5kRXJyb3IgYXMgZTpcbiBcbiBfX2FsbF9fID0gW1xuICAgICBcIk5sRXJyb3JcIiwgXCJObFBvbGljeVwiLCBcIk5ldGxpbmtcIiwgXCJZbmxGYW1pbHlcIiwgXCJTUEVDX1BBVEhcIixcbi0gICAgXCJFdGh0b29sRmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLCBcIlJ0bmxBZGRyRmFtaWx5XCIsXG4rICAgIFwiRXRodG9vbEZhbWlseVwiLCBcIlJ0bmxGYW1pbHlcIiwgXCJSdG5sQWRkckZhbWlseVwiLCBcIlJ0bmxSb3V0ZUZhbWlseVwiLFxuICAgICBcIk5ldGRldkZhbWlseVwiLCBcIk5ldHNoYXBlckZhbWlseVwiLCBcIk5sY3RybEZhbWlseVwiLCBcIkRldmxpbmtGYW1pbHlcIixcbiAgICAgXCJQU1BGYW1pbHlcIixcbiBdXG5AQCAtNTQsNiArNTQsMTEgQEAgY2xhc3MgUnRubEFkZHJGYW1pbHkoWW5sRmFtaWx5KTpcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ3J0LWFkZHIueWFtbCcpKS5hc19wb3NpeCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JycsIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXG4gXG4rY2xhc3MgUnRubFJvdXRlRmFtaWx5KFlubEZhbWlseSk6XG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3NpemU9MCk6XG4rICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCdydC1yb3V0ZS55YW1sJykpLmFzX3Bvc2l4KCksXG4rICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0nJywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcbitcbiBjbGFzcyBOZXRkZXZGYW1pbHkoWW5sRmFtaWx5KTpcbiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ25ldGRldi55YW1sJykpLmFzX3Bvc2l4KCksXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbmluZGV4IDBjNjdjN2MwMGQ4NDEuLjVjYzNlYmRjZjA4ZGUgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtNSw3ICs1LDkgQEAgaW1wb3J0IHNvY2tldFxuIGltcG9ydCBzdHJ1Y3RcbiBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcbi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseVxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxuK2Zyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbitmcm9tIGxpYi5weSBpbXBvcnQgZGVmZXJcbiBcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJ1xceGUwXFx4MDBcXHgwMFxceDAxJ1xuIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJ1xceGVmXFx4MDFcXHgwMVxceDAxJ1xuQEAgLTEzNCw4ICsxMzYsMTg5IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVx1MDAzZSBOb25lOlxuICAgICBrc2Z0X3RydWUoZlwiaW5ldCB7aWZuYW1lfSBmb3J3YXJkaW5nIG9uXCIgaW4gY21kX29iai5zdGRvdXQsXG4gICAgICAgICAgICAgICBmXCJObyAnZm9yd2FyZGluZyBvbicgbm90aWZpY2lhdGlvbiBmb3VuZCBmb3IgaW50ZXJmYWNlIHtpZm5hbWV9XCIpXG4gXG4rZGVmIF9ydG5sX3JvdXRlX3N1YnNjcmliZShucyk6XG4rICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcbisgICAgICAgIHJ0bmwgPSBSdG5sUm91dGVGYW1pbHkoKVxuKyAgICBkZWZlcihydG5sLmNsb3NlKVxuKyAgICBydG5sLm50Zl9zdWJzY3JpYmUoXCJydG5sZ3JwLWlwdjYtcm91dGVcIilcbisgICAgcmV0dXJuIHJ0bmxcbitcbitcbitkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6XG4rICAgIFwiXCJcIlJldHVybiB0aGUgYXR0cnMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIG5vdGlmaWNhdGlvbiwgTm9uZSBvbiB0aW1lb3V0LlwiXCJcIlxuK1xuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxuKyAgICAgICAgaWYgbXNnWyduYW1lJ10gIT0gbmFtZTpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXG4rICAgICAgICBpZiBhdHRyc1sncnRtLWRzdC1sZW4nXSAhPSBkc3RfbGVuOlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgnZHN0JykgIT0gZHN0OlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICByZXR1cm4gYXR0cnNcbisgICAgcmV0dXJuIE5vbmVcbitcbitcbitkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6XG4rICAgIFwiXCJcIkdhdGhlciBhdHRycyBvZiBtYXRjaGluZyBub3RpZmljYXRpb25zLCBrZXllZCBieSAoZHN0X2xlbiwgZHN0KS5cIlwiXCJcbitcbisgICAgc2VlbiA9IHt9XG4rICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XG4rICAgICAgICBpZiBtc2dbJ25hbWUnXSAhPSBuYW1lOlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBhdHRycyA9IG1zZ1snbXNnJ11cbisgICAgICAgIGtleSA9IChhdHRyc1sncnRtLWRzdC1sZW4nXSwgYXR0cnMuZ2V0KCdkc3QnKSlcbisgICAgICAgIGlmIGtleSBpbiB3YW50OlxuKyAgICAgICAgICAgIHNlZW5ba2V5XSA9IGF0dHJzXG4rICAgICAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcbisgICAgICAgICAgICAgICAgYnJlYWtcbisgICAgcmV0dXJuIHNlZW5cbitcbitcbitkZWYgX3dyaXRlX2lwdjZfc3lzY3RsKG5hbWUsIHZhbHVlKTpcbisgICAgd2l0aCBvcGVuKGZcIi9wcm9jL3N5cy9uZXQvaXB2Ni97bmFtZX1cIiwgXCJ3XCIpIGFzIGY6XG4rICAgICAgICBmLndyaXRlKGZcInt2YWx1ZX1cXG5cIilcbitcbitcbitkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQoKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIkFuIGV4cGlyZWQgcm91dGUgcmVwb3J0cyBSVEFfREVMX1JFQVNPTiA9PSBleHBpcmVkLlwiXCJcIlxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcInJvdXRlL2djX2ludGVydmFsXCIsIDIpXG4rICAgICAgICBpcChcImxpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwibGluayBzZXQgZGV2IGR1bW15MSB1cFwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCItNiByb3V0ZSBhZGQgMjAwMTpkYjg6Mjo6LzY0IGRldiBkdW1teTEgZXhwaXJlcyAyXCIsIG5zPXN0cihucykpXG4rXG4rICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAnZGVscm91dGUtbnRmJywgNjQsICcyMDAxOmRiODoyOjonLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmU9MTUpXG4rICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBcIm5vIFJUTV9ERUxST1VURSBmb3IgdGhlIGV4cGlyZWQgcm91dGVcIilcbisgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCdkZWwtcmVhc29uJyksICdleHBpcmVkJylcbitcbitcbitkZWYgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgbGlmZXRpbWUsIHJpbz1Ob25lLCBwaW89Tm9uZSk6XG4rICAgIFwiXCJcIlRoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuXCJcIlwiXG4rXG4rICAgICMgdHlwZSwgY29kZSwgY2tzdW0sIGhvcCBsaW1pdCwgZmxhZ3MsIHJvdXRlciBsaWZldGltZSxcbisgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lclxuKyAgICByYSA9IHN0cnVjdC5wYWNrKCchQkJIQkJISUknLCAxMzQsIDAsIDAsIDY0LCAwLCBsaWZldGltZSwgMCwgMClcbisgICAgaWYgcmlvIGlzIG5vdCBOb25lOlxuKyAgICAgICAgcHJlZml4LCBwbGVuLCByaW9fbGlmZXRpbWUgPSByaW9cbisgICAgICAgICMgUkZDIDQxOTEgcm91dGUgaW5mb3JtYXRpb24gb3B0aW9uLCAvNjQgcHJlZml4ICg4IGJ5dGVzKVxuKyAgICAgICAgcmEgKz0gc3RydWN0LnBhY2soJyFCQkJCSScsIDI0LCAyLCBwbGVuLCAwLCByaW9fbGlmZXRpbWUpXG4rICAgICAgICByYSArPSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF1cbisgICAgaWYgcGlvIGlzIG5vdCBOb25lOlxuKyAgICAgICAgcHJlZml4LCBwbGVuLCB2YWxpZF9sZnQgPSBwaW9cbisgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcilcbisgICAgICAgIHJhICs9IHN0cnVjdC5wYWNrKCchQkJCQklJSScsIDMsIDQsIHBsZW4sIDB4ODAsIHZhbGlkX2xmdCwgMCwgMClcbisgICAgICAgIHJhICs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpXG4rICAgIHNvY2suc2VuZHRvKHJhLCAoJ2ZmMDI6OjEnLCAwLCAwLCBpZmluZGV4KSlcbitcbitcbitkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6XG4rICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxuKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19SQVcsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpXG4rICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfTVVMVElDQVNUX0hPUFMsIDI1NSlcbisgICAgICAgIGRlZmVyKHNvY2suY2xvc2UpXG4rICAgICAgICByZXR1cm4gc29jaywgc29ja2V0LmlmX25hbWV0b2luZGV4KGlmbmFtZSlcbitcbitcbitkZWYgX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgd2FudCwgKipyYV9vcHRzKTpcbisgICAgXCJcIlwiXG4rICAgIFNlbmRpbmcgZmFpbHMgd2l0aCBFQUREUk5PVEFWQUlMIHdoaWxlIHRoZSByb3V0ZXIncyBsaW5rLWxvY2FsXG4rICAgIGFkZHJlc3MgaXMgc3RpbGwgdGVudGF0aXZlLiBhZGRyY29uZl9kYWRfc3RhcnQoKSBvbmx5IHF1ZXVlc1xuKyAgICBhZGRyY29uZl9kYWRfd29yaygpLCBhbmQgSUZBX0ZfVEVOVEFUSVZFIGlzIGNsZWFyZWQgd2hlbiB0aGF0IHdvcmtcbisgICAgaXRlbSBydW5zLCBzbyByZXRyeSB1bnRpbCBpdCBkb2VzLlxuKyAgICBcIlwiXCJcbitcbisgICAgc2VlbiA9IHt9XG4rICAgIGZvciBfIGluIHJhbmdlKDEwKTpcbisgICAgICAgIHRyeTpcbisgICAgICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAqKnJhX29wdHMpXG4rICAgICAgICBleGNlcHQgT1NFcnJvcjpcbisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMilcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgc2Vlbi51cGRhdGUoX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAnbmV3cm91dGUtbnRmJyxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudCAtIHNldChzZWVuLmtleXMoKSksIGRlYWRsaW5lPTIpKVxuKyAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcbisgICAgICAgICAgICBicmVha1xuKyAgICByZXR1cm4gc2VlblxuK1xuK1xuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgUm91dGVzIHdpdGhkcmF3biBieSBhIHplcm8tbGlmZXRpbWUgUkEgKHJvdXRlciBsaWZldGltZSwgUkZDIDQ4NjFcbisgICAgUElPLCBSRkMgNDE5MSBSSU8pIHJlcG9ydCBSVEFfREVMX1JFQVNPTiA9PSByYS13aXRoZHJhd24uXG4rICAgIFwiXCJcIlxuK1xuKyAgICAjIChydG0tZHN0LWxlbiwgZHN0KTsgdGhlIGRlZmF1bHQgcm91dGUgY2FycmllcyBubyBSVEFfRFNUXG4rICAgIHJvdXRlcyA9IHsoMCwgTm9uZSksICg2NCwgJzIwMDE6ZGI4OjY6OicpLCAoNjQsICcyMDAxOmRiODo1OjonKX1cbitcbisgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjpcbisgICAgICAgIGlwKGZcImxpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfVwiKVxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6XG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwiY29uZi92ZXRoMC9hY2NlcHRfcmFcIiwgMilcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJjb25mL3ZldGgwL2ZvcndhcmRpbmdcIiwgMClcbisgICAgICAgICAgICB0cnk6XG4rICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW5cIiwgNjQpXG4rICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOlxuKyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwibm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GT1wiKVxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XG4rICAgICAgICAgICAgIyBza2lwIHRoZSBEQUQgcHJvYmUgc28gdGhlIHJvdXRlcidzIGxpbmstbG9jYWwgc291cmNlIG9ubHlcbisgICAgICAgICAgICAjIGhhcyB0byB3YWl0IGZvciBhZGRyY29uZl9kYWRfd29yaygpIHRvIGNsZWFyIElGQV9GX1RFTlRBVElWRVxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDEvYWNjZXB0X2RhZFwiLCAwKVxuKyAgICAgICAgaXAoXCJsaW5rIHNldCBkZXYgdmV0aDAgdXBcIiwgbnM9c3RyKG5zX2gpKVxuKyAgICAgICAgaXAoXCJsaW5rIHNldCBkZXYgdmV0aDEgdXBcIiwgbnM9c3RyKG5zX3IpKVxuK1xuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShuc19oKVxuKyAgICAgICAgc29jaywgaWZpbmRleCA9IF9yYV9yb3V0ZXJfc29jayhuc19yLCBcInZldGgxXCIpXG4rXG4rICAgICAgICBzZWVuID0gX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgcm91dGVzLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmV0aW1lPTE4MDAsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvPSgnMjAwMTpkYjg6NTo6JywgNjQsIDYwMCksXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlvPSgnMjAwMTpkYjg6Njo6JywgNjQsIDYwMCkpXG4rICAgICAgICBrc2Z0X2VxKHNldChzZWVuKSwgcm91dGVzLCBcIm5vdCBhbGwgUkEgcm91dGVzIHdlcmUgaW5zdGFsbGVkXCIpXG4rICAgICAgICBpZiBzZXQoc2VlbikgIT0gcm91dGVzOlxuKyAgICAgICAgICAgIHJldHVyblxuK1xuKyAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgMCwgcmlvPSgnMjAwMTpkYjg6NTo6JywgNjQsIDApLFxuKyAgICAgICAgICAgICAgICAgcGlvPSgnMjAwMTpkYjg6Njo6JywgNjQsIDApKVxuKyAgICAgICAgc2VlbiA9IF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJ2RlbHJvdXRlLW50ZicsIHJvdXRlcylcbisgICAgICAgIGZvciBrZXkgaW4gcm91dGVzOlxuKyAgICAgICAgICAgIGF0dHJzID0gc2Vlbi5nZXQoa2V5KVxuKyAgICAgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIGZcIm5vIFJUTV9ERUxST1VURSBmb3Ige2tleX1cIilcbisgICAgICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJ2RlbC1yZWFzb24nKSwgJ3JhLXdpdGhkcmF3bicpXG4rXG4rXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIlxuKyAgICBBIGRlbGV0aW9uIHBhdGggdGhhdCByZWNvcmRzIG5vIGNhdXNlIChoZXJlIGEgdXNlcnNwYWNlIHJlcXVlc3QpXG4rICAgIG11c3Qgbm90IGNhcnJ5IFJUQV9ERUxfUkVBU09OIGF0IGFsbC5cbisgICAgXCJcIlwiXG4rXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXG4rICAgICAgICBpcChcImxpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwibGluayBzZXQgZGV2IGR1bW15MSB1cFwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCItNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwiLTYgcm91dGUgZGVsIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXCIsIG5zPXN0cihucykpXG4rXG4rICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAnZGVscm91dGUtbnRmJywgNjQsICcyMDAxOmRiODoxOjonKVxuKyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXCJubyBSVE1fREVMUk9VVEUgZm9yIDIwMDE6ZGI4OjE6Oi82NFwiKVxuKyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAga3NmdF9ub3RfaW4oJ2RlbC1yZWFzb24nLCBhdHRycyxcbisgICAgICAgICAgICAgICAgICAgICAgICBcInVzZXIgZGVsZXRpb24gbXVzdCBub3QgY2FycnkgZGVsLXJlYXNvblwiKVxuK1xuK1xuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQsXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXG4gICAgIGtzZnRfZXhpdCgpXG4gXG4gaWYgX19uYW1lX18gPT0gXCJfX21haW5fX1wiOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDE6MjA6NTMuOTI2ODEwNzQ4WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NjM1ODUwMTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IElQdjYgUm91dGUgRGVsZXRpb24gUmVhc29uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggc2VyaWVzIHRoYXQgaW50cm9kdWNlcyBhIGBkZWxfcmVhc29uYCBuZXRsaW5rIGF0dHJpYnV0ZSBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLiBUaGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbj9cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIHRoYXQgS01TQU4gY291bGQgY2F0Y2guIFRoZSBwYXRjaCdzIGNvcmUgaW50cm9kdWNlcyBhbiBgUlRBX0RFTF9SRUFTT05gIGF0dHJpYnV0ZSBhbmQgYW4gYXNzb2NpYXRlZCBgZW51bSBydF9kZWxfcmVhc29uYC4gVGhpcyBgZGVsX3JlYXNvbmAgaXMgdGhlbiBwbHVtYmVkIHRocm91Z2ggdmFyaW91cyBmdW5jdGlvbnMgaW4gdGhlIElQdjYgcm91dGluZyBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIHBhc3NlcyBgZGVsX3JlYXNvbmAgdmlhIGZ1bmN0aW9uIGFyZ3VtZW50cyAoZS5nLiwgaW4gYHJ0Nl9maWxsX25vZGVgLCBgZmliNl9kZWxgLCBgaXA2X2RlbF9ydF9yZWFzb25gKS5cblxuVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCBgZGVsX3JlYXNvbmAgaXMgKnBhc3NlZCBieSB2YWx1ZSogYW5kIGlzIGFsd2F5cyBhbiAqZXhwbGljaXRseSBhc3NpZ25lZCBlbnVtIHZhbHVlKiAobGlrZSBgUlRfREVMX1JFQVNPTl9VTlNQRUNgLCBgUlRfREVMX1JFQVNPTl9FWFBJUkVEYCwgb3IgYFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOYCkuIEl0IGlzICpub3QqIHJlYWQgZnJvbSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuIFdlIGFyZSBhbHNvIG5vdCBpbnRyb2R1Y2luZyBhbnkgbmV3IHN0cnVjdHMgdGhhdCB3b3VsZCBiZSBzZW50IHRvIHVzZXIgc3BhY2UuIEl0IGlzIGRpcmVjdGx5IHBsYWNlZCBpbnRvIHRoZSBuZXRsaW5rIGJ1ZmZlciB1c2luZyBgbmxhX3B1dF91MzJgLlxuXG5JJ20gY2hlY2tpbmcgaWYgd2UgY2FuIGdldCBhIHNuZWFraWx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdG8gdXNlciBzcGFjZSwgYnV0IHRoZXJlIGlzbid0IG9uZS4gVGhlIG5ldGxpbmsgYXR0cmlidXRlIGlzIGNvbnN0cnVjdGVkIHVzaW5nIGBubGFfcHV0X3UzMmAsIHdoaWNoIGhhbmRsZXMgdGhlIG1lbW9yeSBhbmQgaXMgY29tcGxldGVseSBzYWZlLiBUaGUgYGRlbF9yZWFzb25gIHBhcmFtZXRlciBpcyBwYXNzZWQgYnkgdmFsdWUgYW5kIGlzIHNldCB0byBhIGNvbnN0YW50LlxuXG5JJ20gYWxzbyBkb3VibGUtY2hlY2tpbmcgdGhlIGNhbGxlcnMgdG8gZW5zdXJlIGFsbCBmdW5jdGlvbiBjYWxscyB1c2UgZXhwbGljaXQgZW51bSB2YWx1ZXMuIEkndmUgc2Nhbm5lZCB0aGUgdmFyaW91cyBsb2NhdGlvbnMgaW4gdGhlIGNvZGUgKGUuZy4sIGBfX2lwNl9kZWxfcnRfc2libGluZ3NgLCBgZmliNl9kZWxgLCBldGMuKSBhbmQgY29uZmlybWVkIHRoYXQgY29uc3RhbnQgZW51bSB2YWx1ZXMgYXJlIGJlaW5nIHBhc3NlZCBldmVyeXdoZXJlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnZvbHZlZC5cblxuR2l2ZW4gdGhlIGV4cGxpY2l0IG5hdHVyZSBvZiB0aGUgdmFsdWVzIGFuZCB0aGUgdXNlIG9mIHN0YW5kYXJkLCBzYWZlIG5ldGxpbmsgZnVuY3Rpb25zLCBJIGNvbmNsdWRlIHRoYXQgdGhlcmUgaXMgKm5vKiByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gaWRlbnRpZnkgYW55IGlzc3Vlcy4gVGhlcmVmb3JlLCBubyBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBuZWVkZWQgZm9yIHRoaXMgcGF0Y2guIEkgY2FuIGNvbmZpZGVudGx5IHNldCBgTmVlZHNLTVNBTmAgdG8gYGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNTQsIk91dHB1dFRva2VucyI6MjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAxOjIxOjEwLjU2MjY2NDIxMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIHRvIHJlcG9ydCB0aGUgcmVhc29uIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9ucy4gVGhlIGRlbGV0aW9uIHJlYXNvbiBpcyBwYXNzZWQgdGhyb3VnaCB0aGUgcm91dGluZyBzdWJzeXN0ZW0gYXMgYW4gZXhwbGljaXQgYGVudW0gcnRfZGVsX3JlYXNvbmAgdmFsdWUgKGUuZy4sIGBSVF9ERUxfUkVBU09OX1VOU1BFQ2AsIGBSVF9ERUxfUkVBU09OX0VYUElSRURgLCBgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV05gKS4gVGhpcyB2YWx1ZSBpcyB0aGVuIHNlcmlhbGl6ZWQgaW50byB0aGUgbmV0bGluayBtZXNzYWdlIHVzaW5nIGBubGFfcHV0X3UzMigpYC4gXFxuXFxuU2luY2UgdGhlIGBkZWxfcmVhc29uYCBpcyBwYXNzZWQgYnkgdmFsdWUgYXMgYW4gZXhwbGljaXQgY29uc3RhbnQgaW4gYWxsIG1vZGlmaWVkIGNhbGwgc2l0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nIGJ5dGVzLiBUaGUgbmV0bGluayBhdHRyaWJ1dGUgY29uc3RydWN0aW9uIHZpYSBgbmxhX3B1dF91MzIoKWAgc2FmZWx5IGhhbmRsZXMgdGhlIHNlcmlhbGl6YXRpb24gd2l0aG91dCBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIHRvIHJlcG9ydCB0aGUgcmVhc29uIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9ucy4gVGhlIGRlbGV0aW9uIHJlYXNvbiBpcyBwYXNzZWQgdGhyb3VnaCB0aGUgcm91dGluZyBzdWJzeXN0ZW0gYXMgYW4gZXhwbGljaXQgYGVudW0gcnRfZGVsX3JlYXNvbmAgdmFsdWUgKGUuZy4sIGBSVF9ERUxfUkVBU09OX1VOU1BFQ2AsIGBSVF9ERUxfUkVBU09OX0VYUElSRURgLCBgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV05gKS4gVGhpcyB2YWx1ZSBpcyB0aGVuIHNlcmlhbGl6ZWQgaW50byB0aGUgbmV0bGluayBtZXNzYWdlIHVzaW5nIGBubGFfcHV0X3UzMigpYC4gXFxuXFxuU2luY2UgdGhlIGBkZWxfcmVhc29uYCBpcyBwYXNzZWQgYnkgdmFsdWUgYXMgYW4gZXhwbGljaXQgY29uc3RhbnQgaW4gYWxsIG1vZGlmaWVkIGNhbGwgc2l0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nIGJ5dGVzLiBUaGUgbmV0bGluayBhdHRyaWJ1dGUgY29uc3RydWN0aW9uIHZpYSBgbmxhX3B1dF91MzIoKWAgc2FmZWx5IGhhbmRsZXMgdGhlIHNlcmlhbGl6YXRpb24gd2l0aG91dCBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGluIHRoaXMgY29kZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowknxgk[1] Phase: Succeeded StartedAt: 2026-08-08 01:21:23 +0000 UTC FinishedAt: 2026-08-08 01:21:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-08 01:21:23 +0000 UTC FinishedAt: 2026-08-08 01:21:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2] Phase: Succeeded StartedAt: 2026-08-08 01:21:23 +0000 UTC FinishedAt: 2026-08-08 05:07:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-08 01:21:23 +0000 UTC FinishedAt: 2026-08-08 05:07:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-08 01:21:23 +0000 UTC FinishedAt: 2026-08-08 01:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-08 01:21:23 +0000 UTC FinishedAt: 2026-08-08 01:21:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknxgk/series-workflowknxgk-convert-artifact-3414459072/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-08 01:21:33 +0000 UTC FinishedAt: 2026-08-08 01:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-08 01:21:33 +0000 UTC FinishedAt: 2026-08-08 01:38:42 +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:*0edd5ac0-4d81-4ea0-b111-2c1e21aec0a0,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-workflowknxgk/series-workflowknxgk-convert-artifact-3414459072/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": "96bc03e3-fedc-4749-8aa7-ec92febeeb0b", "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-workflowknxgk/series-workflowknxgk-build-action-1878485638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-08 01:21:33 +0000 UTC FinishedAt: 2026-08-08 01:38:32 +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:*0edd5ac0-4d81-4ea0-b111-2c1e21aec0a0,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-workflowknxgk/series-workflowknxgk-convert-artifact-3414459072/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": "96bc03e3-fedc-4749-8aa7-ec92febeeb0b", "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-workflowknxgk/series-workflowknxgk-build-action-1878485638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-08 01:38:42 +0000 UTC FinishedAt: 2026-08-08 01:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-08 01:38:42 +0000 UTC FinishedAt: 2026-08-08 01:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-08 01:38:42 +0000 UTC FinishedAt: 2026-08-08 01:38:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-08 01:38:42 +0000 UTC FinishedAt: 2026-08-08 01:38:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknxgk/series-workflowknxgk-convert-artifact-1858073447/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-08 01:38:52 +0000 UTC FinishedAt: 2026-08-08 01:41:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-08 01:38:52 +0000 UTC FinishedAt: 2026-08-08 01:41:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*96bc03e3-fedc-4749-8aa7-ec92febeeb0b,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-workflowknxgk/series-workflowknxgk-build-action-1878485638/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-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-08 01:41:34 +0000 UTC FinishedAt: 2026-08-08 01:41:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-08 01:41:34 +0000 UTC FinishedAt: 2026-08-08 01:41:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-08 01:41:34 +0000 UTC FinishedAt: 2026-08-08 02:02:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-08 01:41:34 +0000 UTC FinishedAt: 2026-08-08 02:02:36 +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:*0edd5ac0-4d81-4ea0-b111-2c1e21aec0a0,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-workflowknxgk/series-workflowknxgk-convert-artifact-1858073447/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": "911119e8-69d4-4084-9cfe-c5e35afe2d3a", "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-workflowknxgk/series-workflowknxgk-build-action-1435282155/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-08 01:41:34 +0000 UTC FinishedAt: 2026-08-08 02:02:13 +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:*0edd5ac0-4d81-4ea0-b111-2c1e21aec0a0,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-workflowknxgk/series-workflowknxgk-convert-artifact-1858073447/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": "911119e8-69d4-4084-9cfe-c5e35afe2d3a", "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-workflowknxgk/series-workflowknxgk-build-action-1435282155/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-08 02:02:36 +0000 UTC FinishedAt: 2026-08-08 02:02:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-08 02:02:36 +0000 UTC FinishedAt: 2026-08-08 02:02:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-08 02:02:36 +0000 UTC FinishedAt: 2026-08-08 02:04:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-08 02:02:36 +0000 UTC FinishedAt: 2026-08-08 02:04:33 +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:*911119e8-69d4-4084-9cfe-c5e35afe2d3a,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-workflowknxgk/series-workflowknxgk-build-action-1435282155/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-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-08 02:04:43 +0000 UTC FinishedAt: 2026-08-08 05:07:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-08 02:04:43 +0000 UTC FinishedAt: 2026-08-08 05:07:48 +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":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"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:*96bc03e3-fedc-4749-8aa7-ec92febeeb0b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*911119e8-69d4-4084-9cfe-c5e35afe2d3a,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-workflowknxgk/series-workflowknxgk-build-action-1878485638/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-workflowknxgk/series-workflowknxgk-build-action-1435282155/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-08 02:04:43 +0000 UTC FinishedAt: 2026-08-08 02:04:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-08 02:04:43 +0000 UTC FinishedAt: 2026-08-08 02:04:48 +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":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"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-workflowknxgk/series-workflowknxgk-convert-artifact-131747776/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-08 02:04:43 +0000 UTC FinishedAt: 2026-08-08 02:04:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-08 02:04:43 +0000 UTC FinishedAt: 2026-08-08 02:04:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-08 02:04:43 +0000 UTC FinishedAt: 2026-08-08 02:04:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-08 02:04:53 +0000 UTC FinishedAt: 2026-08-08 05:07:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknxgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","inet6_rt_del_notify","fib6_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"fd08948c-592a-4cf1-9d31-0d95f8b47d19","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-08 02:04:53 +0000 UTC FinishedAt: 2026-08-08 05:07:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*96bc03e3-fedc-4749-8aa7-ec92febeeb0b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*911119e8-69d4-4084-9cfe-c5e35afe2d3a,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-workflowknxgk/series-workflowknxgk-build-action-1878485638/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-workflowknxgk/series-workflowknxgk-build-action-1435282155/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-workflowknxgk/series-workflowknxgk-convert-artifact-131747776/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,}