Name: series-workflowj4zvz Phase: Running StartedAt: 2026-09-12 06:05:05 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj4zvz[0] Phase: Succeeded StartedAt: 2026-09-12 06:05:05 +0000 UTC FinishedAt: 2026-09-12 06:25:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj4zvz[0].run-triage Phase: Succeeded StartedAt: 2026-09-12 06:05:05 +0000 UTC FinishedAt: 2026-09-12 06:25:00 +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": "17d3afadf539c93def8106bbb83c88274bdc7ab1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "LWTUNNEL", "IPV6" ], "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": "17d3afadf539c93def8106bbb83c88274bdc7ab1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "LWTUNNEL", "IPV6" ], "series_id": "53f13f40-0d63-442d-bca7-8053a6e4b916" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_tun_build_state", "ip6_tun_build_state" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "17d3afadf539c93def8106bbb83c88274bdc7ab1", "base_tree": "net-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TFdUVU5ORUwmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3R1bl9idWlsZF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtpcDZfdHVuX2J1aWxkX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlwX3R1bl9idWlsZF9zdGF0ZSgpYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGUoKWAgdG8gaW5pdGlhbGl6ZSBgdHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO2AgcHJpb3IgdG8gY2FsbGluZyBgaXBfdHVuX3NldF9vcHRzKClgLCByYXRoZXIgdGhhbiBhZnRlcndhcmRzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZmxleGlibGUgYXJyYXkgbWVtYmVyIGBpbmZvLVx1MDAzZW9wdGlvbnNgICh3aGljaCBpcyBhbm5vdGF0ZWQgd2l0aCBgX19jb3VudGVkX2J5KG9wdGlvbnNfbGVuKWApIGhhcyBpdHMgY291bnRlciBwb3B1bGF0ZWQgYmVmb3JlIGFjY2Vzcy5cblxuUmVnYXJkaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbjpcbi0gVGhlIGBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGVgIGFuZCBpdHMgZW1iZWRkZWQgYHN0cnVjdCBpcF90dW5uZWxfaW5mb2AgYXJlIGFsbG9jYXRlZCB2aWEgYGx3dHVubmVsX3N0YXRlX2FsbG9jKClgLCB3aGljaCB1c2VzIGBremFsbG9jKClgIHdpdGggYEdGUF9BVE9NSUNgLiBDb25zZXF1ZW50bHksIGFsbCBhbGxvY2F0ZWQgYnl0ZXMgKGluY2x1ZGluZyBoZWFkZXJzIGFuZCB0cmFpbGluZyBvcHRpb24gYnVmZmVycykgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgYXQgYWxsb2NhdGlvbiB0aW1lLlxuLSBNb3ZpbmcgdGhlIGFzc2lnbm1lbnQgb2YgYG9wdGlvbnNfbGVuYCBlYXJsaWVyIGRvZXMgbm90IGludHJvZHVjZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBwYWRkaW5nL2ZpZWxkcyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBJZiBgaXBfdHVuX3NldF9vcHRzKClgIGZhaWxzLCB0aGUgc3RhdGUgaXMgZnJlZWQgaW1tZWRpYXRlbHkuXG5cblNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVhayB2ZWN0b3JzIGFyZSBpbnRyb2R1Y2VkLCBzdGFuZGFyZCBLQVNBTi9VQlNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhlc2UgY2hhbmdlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMsIG1vdmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gYmVmb3JlIGlwX3R1bl9zZXRfb3B0cygpIGluIGJvdGggaXBfdHVuX2J1aWxkX3N0YXRlKCkgYW5kIGlwNl90dW5fYnVpbGRfc3RhdGUoKS4gVGhpcyBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayByb3V0ZS9uZXh0aG9wIHJlcXVlc3RzIGNvbmZpZ3VyaW5nIGxpZ2h0d2VpZ2h0IHR1bm5lbCBlbmNhcHN1bGF0aW9uIChMV1RVTk5FTF9FTkNBUF9JUCBhbmQgTFdUVU5ORUxfRU5DQVBfSVA2KS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0dW5uZWwgb3B0aW9uIHBhcnNpbmcgYW5kIGJvdW5kcyBjaGVja2luZyBvbiB0dW5uZWwgc3RhdGUgY3JlYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NTZmNWVmNGFmMjNjZDBkZGIyYjNhYzRlY2UxOTlhYTMzMjFmZmQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMDY6MjE6NTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYyBiL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNcbmluZGV4IDUxNjhkNTQ2ZWEyZmQuLjhmYjQ3NDJhY2E5MjUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXG5AQCAtNzExLDYgJiM0Mzs3MTEsNyBAQCBzdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gXHRuZXdfc3RhdGUtXHUwMDNldHlwZSA9IExXVFVOTkVMX0VOQ0FQX0lQO1xuIFxuIFx0dHVuX2luZm8gPSBsd3RfdHVuX2luZm8obmV3X3N0YXRlKTtcbiYjNDM7XHR0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XG4gXG4gXHRlcnIgPSBpcF90dW5fc2V0X29wdHModGJbTFdUVU5ORUxfSVBfT1BUU10sIHR1bl9pbmZvLCBleHRhY2spO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuQEAgLTc1Myw3ICYjNDM7NzU0LDYgQEAgc3RhdGljIGludCBpcF90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIFx0fVxuIFxuIFx0dHVuX2luZm8tXHUwMDNlbW9kZSA9IElQX1RVTk5FTF9JTkZPX1RYO1xuLVx0dHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO1xuIFxuIFx0KnRzID0gbmV3X3N0YXRlO1xuIFxuQEAgLTEwMDUsNiAmIzQzOzEwMDUsNyBAQCBzdGF0aWMgaW50IGlwNl90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIFx0bmV3X3N0YXRlLVx1MDAzZXR5cGUgPSBMV1RVTk5FTF9FTkNBUF9JUDY7XG4gXG4gXHR0dW5faW5mbyA9IGx3dF90dW5faW5mbyhuZXdfc3RhdGUpO1xuJiM0MztcdHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcbiBcbiBcdGVyciA9IGlwX3R1bl9zZXRfb3B0cyh0YltMV1RVTk5FTF9JUDZfT1BUU10sIHR1bl9pbmZvLCBleHRhY2spO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuQEAgLTEwNDAsNyAmIzQzOzEwNDEsNiBAQCBzdGF0aWMgaW50IGlwNl90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIFx0fVxuIFxuIFx0dHVuX2luZm8tXHUwMDNlbW9kZSA9IElQX1RVTk5FTF9JTkZPX1RYIHwgSVBfVFVOTkVMX0lORk9fSVBWNjtcbi1cdHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcbiBcbiBcdCp0cyA9IG5ld19zdGF0ZTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF90dW5fYnVpbGRfc3RhdGUmIzM0OywKICAgICYjMzQ7aXA2X3R1bl9idWlsZF9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMsIG1vdmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gYmVmb3JlIGlwX3R1bl9zZXRfb3B0cygpIGluIGJvdGggaXBfdHVuX2J1aWxkX3N0YXRlKCkgYW5kIGlwNl90dW5fYnVpbGRfc3RhdGUoKS4gVGhpcyBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayByb3V0ZS9uZXh0aG9wIHJlcXVlc3RzIGNvbmZpZ3VyaW5nIGxpZ2h0d2VpZ2h0IHR1bm5lbCBlbmNhcHN1bGF0aW9uIChMV1RVTk5FTF9FTkNBUF9JUCBhbmQgTFdUVU5ORUxfRU5DQVBfSVA2KS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0dW5uZWwgb3B0aW9uIHBhcnNpbmcgYW5kIGJvdW5kcyBjaGVja2luZyBvbiB0dW5uZWwgc3RhdGUgY3JlYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NTZmNWVmNGFmMjNjZDBkZGIyYjNhYzRlY2UxOTlhYTMzMjFmZmQ3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgMTIgMDY6MjE6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jIGIvbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYwppbmRleCA1MTY4ZDU0NmVhMmZkLi44ZmI0NzQyYWNhOTI1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMKQEAgLTcxMSw2ICYjNDM7NzExLDcgQEAgc3RhdGljIGludCBpcF90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLAogCW5ld19zdGF0ZS0mZ3Q7dHlwZSA9IExXVFVOTkVMX0VOQ0FQX0lQOwogCiAJdHVuX2luZm8gPSBsd3RfdHVuX2luZm8obmV3X3N0YXRlKTsKJiM0MzsJdHVuX2luZm8tJmd0O29wdGlvbnNfbGVuID0gb3B0X2xlbjsKIAogCWVyciA9IGlwX3R1bl9zZXRfb3B0cyh0YltMV1RVTk5FTF9JUF9PUFRTXSwgdHVuX2luZm8sIGV4dGFjayk7CiAJaWYgKGVyciAmbHQ7IDApIHsKQEAgLTc1Myw3ICYjNDM7NzU0LDYgQEAgc3RhdGljIGludCBpcF90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLAogCX0KIAogCXR1bl9pbmZvLSZndDttb2RlID0gSVBfVFVOTkVMX0lORk9fVFg7Ci0JdHVuX2luZm8tJmd0O29wdGlvbnNfbGVuID0gb3B0X2xlbjsKIAogCSp0cyA9IG5ld19zdGF0ZTsKIApAQCAtMTAwNSw2ICYjNDM7MTAwNSw3IEBAIHN0YXRpYyBpbnQgaXA2X3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsCiAJbmV3X3N0YXRlLSZndDt0eXBlID0gTFdUVU5ORUxfRU5DQVBfSVA2OwogCiAJdHVuX2luZm8gPSBsd3RfdHVuX2luZm8obmV3X3N0YXRlKTsKJiM0MzsJdHVuX2luZm8tJmd0O29wdGlvbnNfbGVuID0gb3B0X2xlbjsKIAogCWVyciA9IGlwX3R1bl9zZXRfb3B0cyh0YltMV1RVTk5FTF9JUDZfT1BUU10sIHR1bl9pbmZvLCBleHRhY2spOwogCWlmIChlcnIgJmx0OyAwKSB7CkBAIC0xMDQwLDcgJiM0MzsxMDQxLDYgQEAgc3RhdGljIGludCBpcDZfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0ciwKIAl9CiAKIAl0dW5faW5mby0mZ3Q7bW9kZSA9IElQX1RVTk5FTF9JTkZPX1RYIHwgSVBfVFVOTkVMX0lORk9fSVBWNjsKLQl0dW5faW5mby0mZ3Q7b3B0aW9uc19sZW4gPSBvcHRfbGVuOwogCiAJKnRzID0gbmV3X3N0YXRlOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTgKCQkJCQkJCW91dHB1dDogODAKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQIFR1bm5lbCBDb3JlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNgLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiB0aGUgY2hhbmdlcywgc28gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBkaWZmLCBmb2N1c2luZyBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmVzIDcxMSBhbmQgMTAwNS4gVGhvc2Ugc3BlY2lmaWMgbGluZSBudW1iZXJzIG9mdGVuIGluZGljYXRlIGNydWNpYWwgYXJlYXMgb2YgYSBmdW5jdGlvbiwgb3IgcGVyaGFwcyB0aGUgaW50cm9kdWN0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiBhIHBhcnRpY3VsYXIgZGF0YSBzdHJ1Y3R1cmUuCgpUbyBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdWxsIGNvbnRleHQsIGFuZCB0byBjcm9zcyByZWZlcmVuY2UgdGhlIGxpbmVzIGluIHRoZSBzb3VyY2UsIEkmIzM5O2xsIHVzZSB0aGUgYHJlYWQtZmlsZWAgY29tbWFuZCB0byBleGFtaW5lIHRoZSBzb3VyY2UgY29kZSBpbiBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AsIHNwZWNpZmljYWxseSB0aG9zZSBsaW5lcyBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEdldHRpbmcgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN1cnJvdW5kaW5nIGxpbmVzLCB3aWxsIGFsbG93IG1lIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBjb2RlLCBhbmQgaG93IHRoZSBjaGFuZ2VzIGZpdCBpbiB0aGUgcHJvZ3JhbSYjMzk7cyBvdmVyYWxsIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2OTA6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKip0cyxcbiA2OTE6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNjkyOlx0e1xuIDY5MzpcdFx0c3RydWN0IG5sYXR0ciAqdGJbTFdUVU5ORUxfSVBfTUFYICYjNDM7IDFdO1xuIDY5NDpcdFx0c3RydWN0IGx3dHVubmVsX3N0YXRlICpuZXdfc3RhdGU7XG4gNjk1Olx0XHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvO1xuIDY5NjpcdFx0aW50IGVyciwgb3B0X2xlbjtcbiA2OTc6XHRcbiA2OTg6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgTFdUVU5ORUxfSVBfTUFYLCBhdHRyLFxuIDY5OTpcdFx0XHRcdFx0XHQgIGlwX3R1bl9wb2xpY3ksIGV4dGFjayk7XG4gNzAwOlx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDcwMTpcdFx0XHRyZXR1cm4gZXJyO1xuIDcwMjpcdFxuIDcwMzpcdFx0b3B0X2xlbiA9IGlwX3R1bl9nZXRfb3B0bGVuKHRiW0xXVFVOTkVMX0lQX09QVFNdLCBleHRhY2spO1xuIDcwNDpcdFx0aWYgKG9wdF9sZW4gXHUwMDNjIDApXG4gNzA1Olx0XHRcdHJldHVybiBvcHRfbGVuO1xuIDcwNjpcdFxuIDcwNzpcdFx0bmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCp0dW5faW5mbykgJiM0Mzsgb3B0X2xlbik7XG4gNzA4Olx0XHRpZiAoIW5ld19zdGF0ZSlcbiA3MDk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNzEwOlx0XG4gNzExOlx0XHRuZXdfc3RhdGUtXHUwMDNldHlwZSA9IExXVFVOTkVMX0VOQ0FQX0lQO1xuIDcxMjpcdFxuIDcxMzpcdFx0dHVuX2luZm8gPSBsd3RfdHVuX2luZm8obmV3X3N0YXRlKTtcbiA3MTQ6XHRcdHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcbiA3MTU6XHRcbiA3MTY6XHRcdGVyciA9IGlwX3R1bl9zZXRfb3B0cyh0YltMV1RVTk5FTF9JUF9PUFRTXSwgdHVuX2luZm8sIGV4dGFjayk7XG4gNzE3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gNzE4Olx0XHRcdGx3dHN0YXRlX2ZyZWUobmV3X3N0YXRlKTtcbiA3MTk6XHRcdFx0cmV0dXJuIGVycjtcbiA3MjA6XHRcdH1cbiA3MjE6XHRcbiA3MjI6XHQjaWZkZWYgQ09ORklHX0RTVF9DQUNIRVxuIDcyMzpcdFx0ZXJyID0gZHN0X2NhY2hlX2luaXQoXHUwMDI2dHVuX2luZm8tXHUwMDNlZHN0X2NhY2hlLCBHRlBfS0VSTkVMKTtcbiA3MjQ6XHRcdGlmIChlcnIpIHtcbiA3MjU6XHRcdFx0bHd0c3RhdGVfZnJlZShuZXdfc3RhdGUpO1xuIDcyNjpcdFx0XHRyZXR1cm4gZXJyO1xuIDcyNzpcdFx0fVxuIDcyODpcdCNlbmRpZlxuIDcyOTpcdFxuIDczMDpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX0lEXSlcbiA3MzE6XHRcdFx0dHVuX2luZm8tXHUwMDNla2V5LnR1bl9pZCA9IG5sYV9nZXRfYmU2NCh0YltMV1RVTk5FTF9JUF9JRF0pO1xuIDczMjpcdFxuIDczMzpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX0RTVF0pXG4gNzM0Olx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS51LmlwdjQuZHN0ID0gbmxhX2dldF9pbl9hZGRyKHRiW0xXVFVOTkVMX0lQX0RTVF0pO1xuIDczNTpcdFxuIDczNjpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX1NSQ10pXG4gNzM3Olx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS51LmlwdjQuc3JjID0gbmxhX2dldF9pbl9hZGRyKHRiW0xXVFVOTkVMX0lQX1NSQ10pO1xuIDczODpcdFxuIDczOTpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX1RUTF0pXG4gNzQwOlx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS50dGwgPSBubGFfZ2V0X3U4KHRiW0xXVFVOTkVMX0lQX1RUTF0pO1xuIDc0MTpcdFxuIDc0MjpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX1RPU10pXG4gNzQzOlx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS50b3MgPSBubGFfZ2V0X3U4KHRiW0xXVFVOTkVMX0lQX1RPU10pO1xuIDc0NDpcdFxuIDc0NTpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX0ZMQUdTXSkge1xuIDc0NjpcdFx0XHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XG4gNzQ3Olx0XG4gNzQ4Olx0XHRcdGlwX3R1bm5lbF9mbGFnc19mcm9tX2JlMTYoZmxhZ3MsXG4gNzQ5Olx0XHRcdFx0XHRcdCAgbmxhX2dldF9iZTE2KHRiW0xXVFVOTkVMX0lQX0ZMQUdTXSkpO1xuIDc1MDpcdFx0XHRpcF90dW5uZWxfY2xlYXJfb3B0aW9uc19wcmVzZW50KGZsYWdzKTtcbiA3NTE6XHRcbiA3NTI6XHRcdFx0aXBfdHVubmVsX2ZsYWdzX29yKHR1bl9pbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MsXG4gNzUzOlx0XHRcdFx0XHQgICB0dW5faW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzLCBmbGFncyk7XG4gNzU0Olx0XHR9XG4gNzU1Olx0XG4gNzU2Olx0XHR0dW5faW5mby1cdTAwM2Vtb2RlID0gSVBfVFVOTkVMX0lORk9fVFg7XG4gNzU3Olx0XG4gNzU4Olx0XHQqdHMgPSBuZXdfc3RhdGU7XG4gNzU5Olx0XG4gNzYwOlx0XHRyZXR1cm4gMDtcbiA3NjE6XHR9XG4gNzYyOlx0XG4gNzYzOlx0c3RhdGljIHZvaWQgaXBfdHVuX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3RzdGF0ZSlcbiA3NjQ6XHR7XG4gNzY1Olx0I2lmZGVmIENPTkZJR19EU1RfQ0FDSEVcbiA3NjY6XHRcdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm8gPSBsd3RfdHVuX2luZm8obHd0c3RhdGUpO1xuIDc2NzpcdFxuIDc2ODpcdFx0ZHN0X2NhY2hlX2Rlc3Ryb3koXHUwMDI2dHVuX2luZm8tXHUwMDNlZHN0X2NhY2hlKTtcbiA3Njk6XHQjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk5MDpcdFx0aW50IGVyciwgb3B0X2xlbjtcbiA5OTE6XHRcbiA5OTI6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgTFdUVU5ORUxfSVA2X01BWCwgYXR0cixcbiA5OTM6XHRcdFx0XHRcdFx0ICBpcDZfdHVuX3BvbGljeSwgZXh0YWNrKTtcbiA5OTQ6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gOTk1Olx0XHRcdHJldHVybiBlcnI7XG4gOTk2Olx0XG4gOTk3Olx0XHRvcHRfbGVuID0gaXBfdHVuX2dldF9vcHRsZW4odGJbTFdUVU5ORUxfSVA2X09QVFNdLCBleHRhY2spO1xuIDk5ODpcdFx0aWYgKG9wdF9sZW4gXHUwMDNjIDApXG4gOTk5Olx0XHRcdHJldHVybiBvcHRfbGVuO1xuMTAwMDpcdFxuMTAwMTpcdFx0bmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCp0dW5faW5mbykgJiM0Mzsgb3B0X2xlbik7XG4xMDAyOlx0XHRpZiAoIW5ld19zdGF0ZSlcbjEwMDM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMDA0Olx0XG4xMDA1Olx0XHRuZXdfc3RhdGUtXHUwMDNldHlwZSA9IExXVFVOTkVMX0VOQ0FQX0lQNjtcbjEwMDY6XHRcbjEwMDc6XHRcdHR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKG5ld19zdGF0ZSk7XG4xMDA4Olx0XHR0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XG4xMDA5Olx0XG4xMDEwOlx0XHRlcnIgPSBpcF90dW5fc2V0X29wdHModGJbTFdUVU5ORUxfSVA2X09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTtcbjEwMTE6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjEwMTI6XHRcdFx0bHd0c3RhdGVfZnJlZShuZXdfc3RhdGUpO1xuMTAxMzpcdFx0XHRyZXR1cm4gZXJyO1xuMTAxNDpcdFx0fVxuMTAxNTpcdFxuMTAxNjpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9JRF0pXG4xMDE3Olx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS50dW5faWQgPSBubGFfZ2V0X2JlNjQodGJbTFdUVU5ORUxfSVA2X0lEXSk7XG4xMDE4Olx0XG4xMDE5Olx0XHRpZiAodGJbTFdUVU5ORUxfSVA2X0RTVF0pXG4xMDIwOlx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS51LmlwdjYuZHN0ID0gbmxhX2dldF9pbjZfYWRkcih0YltMV1RVTk5FTF9JUDZfRFNUXSk7XG4xMDIxOlx0XG4xMDIyOlx0XHRpZiAodGJbTFdUVU5ORUxfSVA2X1NSQ10pXG4xMDIzOlx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS51LmlwdjYuc3JjID0gbmxhX2dldF9pbjZfYWRkcih0YltMV1RVTk5FTF9JUDZfU1JDXSk7XG4xMDI0Olx0XG4xMDI1Olx0XHRpZiAodGJbTFdUVU5ORUxfSVA2X0hPUExJTUlUXSlcbjEwMjY6XHRcdFx0dHVuX2luZm8tXHUwMDNla2V5LnR0bCA9IG5sYV9nZXRfdTgodGJbTFdUVU5ORUxfSVA2X0hPUExJTUlUXSk7XG4xMDI3Olx0XG4xMDI4Olx0XHRpZiAodGJbTFdUVU5ORUxfSVA2X1RDXSlcbjEwMjk6XHRcdFx0dHVuX2luZm8tXHUwMDNla2V5LnRvcyA9IG5sYV9nZXRfdTgodGJbTFdUVU5ORUxfSVA2X1RDXSk7XG4xMDMwOlx0XG4xMDMxOlx0XHRpZiAodGJbTFdUVU5ORUxfSVA2X0ZMQUdTXSkge1xuMTAzMjpcdFx0XHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XG4xMDMzOlx0XHRcdF9fYmUxNiBkYXRhO1xuMTAzNDpcdFxuMTAzNTpcdFx0XHRkYXRhID0gbmxhX2dldF9iZTE2KHRiW0xXVFVOTkVMX0lQNl9GTEFHU10pO1xuMTAzNjpcdFx0XHRpcF90dW5uZWxfZmxhZ3NfZnJvbV9iZTE2KGZsYWdzLCBkYXRhKTtcbjEwMzc6XHRcdFx0aXBfdHVubmVsX2NsZWFyX29wdGlvbnNfcHJlc2VudChmbGFncyk7XG4xMDM4Olx0XG4xMDM5Olx0XHRcdGlwX3R1bm5lbF9mbGFnc19vcih0dW5faW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzLFxuMTA0MDpcdFx0XHRcdFx0ICAgdHVuX2luZm8tXHUwMDNla2V5LnR1bl9mbGFncywgZmxhZ3MpO1xuMTA0MTpcdFx0fVxuMTA0MjpcdFxuMTA0MzpcdFx0dHVuX2luZm8tXHUwMDNlbW9kZSA9IElQX1RVTk5FTF9JTkZPX1RYIHwgSVBfVFVOTkVMX0lORk9fSVBWNjtcbjEwNDQ6XHRcbjEwNDU6XHRcdCp0cyA9IG5ld19zdGF0ZTtcbjEwNDY6XHRcbjEwNDc6XHRcdHJldHVybiAwO1xuMTA0ODpcdH1cbjEwNDk6XHRcbjEwNTA6XHRzdGF0aWMgaW50IGlwNl90dW5fZmlsbF9lbmNhcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4xMDUxOlx0XHRcdFx0XHQgICBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlKVxuMTA1MjpcdHtcbjEwNTM6XHRcdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm8gPSBsd3RfdHVuX2luZm8obHd0c3RhdGUpO1xuMTA1NDpcdFxuMTA1NTpcdFx0aWYgKG5sYV9wdXRfYmU2NChza2IsIExXVFVOTkVMX0lQNl9JRCwgdHVuX2luZm8tXHUwMDNla2V5LnR1bl9pZCxcbjEwNTY6XHRcdFx0XHQgTFdUVU5ORUxfSVA2X1BBRCkgfHxcbjEwNTc6XHRcdCAgICBubGFfcHV0X2luNl9hZGRyKHNrYiwgTFdUVU5ORUxfSVA2X0RTVCwgXHUwMDI2dHVuX2luZm8tXHUwMDNla2V5LnUuaXB2Ni5kc3QpIHx8XG4xMDU4Olx0XHQgICAgbmxhX3B1dF9pbjZfYWRkcihza2IsIExXVFVOTkVMX0lQNl9TUkMsIFx1MDAyNnR1bl9pbmZvLVx1MDAzZWtleS51LmlwdjYuc3JjKSB8fFxuMTA1OTpcdFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBMV1RVTk5FTF9JUDZfVEMsIHR1bl9pbmZvLVx1MDAzZWtleS50b3MpIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIwNAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgaXBfdHVuX3NldF9vcHRzYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBpcF90dW5fc2V0X29wdHNgIGlzIGFjdHVhbGx5IGRvaW5nLiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IGludG8gdGhlIGNvZGUgZm9yIGBpcF90dW5fc2V0X29wdHNgIGFuZCB1bmRlcnN0YW5kIHdoYXQgaXQgZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwMDpcdFx0XHRcdGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgJiM0Mzsgb3B0c19sZW47XG4gNjAxOlx0XG4gNjAyOlx0XHRcdG1kLVx1MDAzZXZlcnNpb24gPSB2ZXI7XG4gNjAzOlx0XHRcdGlmICh2ZXIgPT0gMSkge1xuIDYwNDpcdFx0XHRcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0lOREVYXTtcbiA2MDU6XHRcdFx0XHRtZC1cdTAwM2V1LmluZGV4ID0gbmxhX2dldF9iZTMyKGF0dHIpO1xuIDYwNjpcdFx0XHR9IGVsc2Uge1xuIDYwNzpcdFx0XHRcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0RJUl07XG4gNjA4Olx0XHRcdFx0bWQtXHUwMDNldS5tZDIuZGlyID0gbmxhX2dldF91OChhdHRyKTtcbiA2MDk6XHRcdFx0XHRhdHRyID0gdGJbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9IV0lEXTtcbiA2MTA6XHRcdFx0XHRzZXRfaHdpZChcdTAwMjZtZC1cdTAwM2V1Lm1kMiwgbmxhX2dldF91OChhdHRyKSk7XG4gNjExOlx0XHRcdH1cbiA2MTI6XHRcbiA2MTM6XHRcdFx0X19zZXRfYml0KElQX1RVTk5FTF9FUlNQQU5fT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKTtcbiA2MTQ6XHRcdH1cbiA2MTU6XHRcbiA2MTY6XHRcdHJldHVybiBzaXplb2Yoc3RydWN0IGVyc3Bhbl9tZXRhZGF0YSk7XG4gNjE3Olx0fVxuIDYxODpcdFxuIDYxOTpcdHN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHMoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxuIDYyMDpcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDYyMTpcdHtcbiA2MjI6XHRcdGludCBlcnIsIHJlbSwgb3B0X2xlbiwgb3B0c19sZW4gPSAwO1xuIDYyMzpcdFx0c3RydWN0IG5sYXR0ciAqbmxhO1xuIDYyNDpcdFx0dTMyIHR5cGUgPSAwO1xuIDYyNTpcdFxuIDYyNjpcdFx0aWYgKCFhdHRyKVxuIDYyNzpcdFx0XHRyZXR1cm4gMDtcbiA2Mjg6XHRcbiA2Mjk6XHRcdGVyciA9IG5sYV92YWxpZGF0ZShubGFfZGF0YShhdHRyKSwgbmxhX2xlbihhdHRyKSwgTFdUVU5ORUxfSVBfT1BUU19NQVgsXG4gNjMwOlx0XHRcdFx0ICAgaXBfb3B0c19wb2xpY3ksIGV4dGFjayk7XG4gNjMxOlx0XHRpZiAoZXJyKVxuIDYzMjpcdFx0XHRyZXR1cm4gZXJyO1xuIDYzMzpcdFxuIDYzNDpcdFx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBubGFfZGF0YShhdHRyKSwgbmxhX2xlbihhdHRyKSwgcmVtKSB7XG4gNjM1Olx0XHRcdHN3aXRjaCAobmxhX3R5cGUobmxhKSkge1xuIDYzNjpcdFx0XHRjYXNlIExXVFVOTkVMX0lQX09QVFNfR0VORVZFOlxuIDYzNzpcdFx0XHRcdGlmICh0eXBlIFx1MDAyNlx1MDAyNiB0eXBlICE9IElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVClcbiA2Mzg6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDYzOTpcdFx0XHRcdG9wdF9sZW4gPSBpcF90dW5fcGFyc2Vfb3B0c19nZW5ldmUobmxhLCBpbmZvLCBvcHRzX2xlbixcbiA2NDA6XHRcdFx0XHRcdFx0XHRcdCAgIGV4dGFjayk7XG4gNjQxOlx0XHRcdFx0aWYgKG9wdF9sZW4gXHUwMDNjIDApXG4gNjQyOlx0XHRcdFx0XHRyZXR1cm4gb3B0X2xlbjtcbiA2NDM6XHRcdFx0XHRvcHRzX2xlbiAmIzQzOz0gb3B0X2xlbjtcbiA2NDQ6XHRcdFx0XHRpZiAob3B0c19sZW4gXHUwMDNlIElQX1RVTk5FTF9PUFRTX01BWClcbiA2NDU6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDY0NjpcdFx0XHRcdHR5cGUgPSBJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQ7XG4gNjQ3Olx0XHRcdFx0YnJlYWs7XG4gNjQ4Olx0XHRcdGNhc2UgTFdUVU5ORUxfSVBfT1BUU19WWExBTjpcbiA2NDk6XHRcdFx0XHRpZiAodHlwZSlcbiA2NTA6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDY1MTpcdFx0XHRcdG9wdF9sZW4gPSBpcF90dW5fcGFyc2Vfb3B0c192eGxhbihubGEsIGluZm8sIG9wdHNfbGVuLFxuIDY1MjpcdFx0XHRcdFx0XHRcdFx0ICBleHRhY2spO1xuIDY1MzpcdFx0XHRcdGlmIChvcHRfbGVuIFx1MDAzYyAwKVxuIDY1NDpcdFx0XHRcdFx0cmV0dXJuIG9wdF9sZW47XG4gNjU1Olx0XHRcdFx0b3B0c19sZW4gJiM0Mzs9IG9wdF9sZW47XG4gNjU2Olx0XHRcdFx0dHlwZSA9IElQX1RVTk5FTF9WWExBTl9PUFRfQklUO1xuIDY1NzpcdFx0XHRcdGJyZWFrO1xuIDY1ODpcdFx0XHRjYXNlIExXVFVOTkVMX0lQX09QVFNfRVJTUEFOOlxuIDY1OTpcdFx0XHRcdGlmICh0eXBlKVxuIDY2MDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjYxOlx0XHRcdFx0b3B0X2xlbiA9IGlwX3R1bl9wYXJzZV9vcHRzX2Vyc3BhbihubGEsIGluZm8sIG9wdHNfbGVuLFxuIDY2MjpcdFx0XHRcdFx0XHRcdFx0ICAgZXh0YWNrKTtcbiA2NjM6XHRcdFx0XHRpZiAob3B0X2xlbiBcdTAwM2MgMClcbiA2NjQ6XHRcdFx0XHRcdHJldHVybiBvcHRfbGVuO1xuIDY2NTpcdFx0XHRcdG9wdHNfbGVuICYjNDM7PSBvcHRfbGVuO1xuIDY2NjpcdFx0XHRcdHR5cGUgPSBJUF9UVU5ORUxfRVJTUEFOX09QVF9CSVQ7XG4gNjY3Olx0XHRcdFx0YnJlYWs7XG4gNjY4Olx0XHRcdGRlZmF1bHQ6XG4gNjY5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjcwOlx0XHRcdH1cbiA2NzE6XHRcdH1cbiA2NzI6XHRcbiA2NzM6XHRcdHJldHVybiBvcHRzX2xlbjtcbiA2NzQ6XHR9XG4gNjc1Olx0XG4gNjc2Olx0c3RhdGljIGludCBpcF90dW5fZ2V0X29wdGxlbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIDY3NzpcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDY3ODpcdHtcbiA2Nzk6XHRcdHJldHVybiBpcF90dW5fcGFyc2Vfb3B0cyhhdHRyLCBOVUxMLCBleHRhY2spO1xuIDY4MDpcdH1cbiA2ODE6XHRcbiA2ODI6XHRzdGF0aWMgaW50IGlwX3R1bl9zZXRfb3B0cyhzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXG4gNjgzOlx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDY4NDpcdHtcbiA2ODU6XHRcdHJldHVybiBpcF90dW5fcGFyc2Vfb3B0cyhhdHRyLCBpbmZvLCBleHRhY2spO1xuIDY4NjpcdH1cbiA2ODc6XHRcbiA2ODg6XHRzdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gNjg5Olx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGZhbWlseSwgY29uc3Qgdm9pZCAqY2ZnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MDMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIFR1bm5lbCBPcHRpb24gUGFyc2luZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBkaWZmZXJlbnQgdHVubmVsIHR5cGVzIGhhbmRsZSB0aGVpciBvcHRpb25zLiBTcGVjaWZpY2FsbHksIG15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiBwYXJzaW5nIHRoZSBvcHRpb25zIGZvciBWWExBTiwgR2VuZXZlLCBhbmQgRVJTUEFOIHR1bm5lbHMuIFRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIHJldmlldyBhcmUgYGlwX3R1bl9wYXJzZV9vcHRzX3Z4bGFuYCwgYGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZWAsIGFuZCBgaXBfdHVuX3BhcnNlX29wdHNfZXJzcGFuYC4gSXQgc2VlbXMgbGlrZSB0aG9zZSB3b3VsZCBiZSB0aGUgb2J2aW91cyBwbGFjZXMgdG8gc3RhcnQuIE5vdywgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNgIGFuZCB0YWtlIGEgbG9vayBhdCBsaW5lcyA1MDAtNjAwLiBIb3BlZnVsbHksIHRoYXQgc2VjdGlvbiB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG9wdGlvbiBwYXJzZXJzIGFyZSBpbnRlZ3JhdGVkIGFuZCB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwMDpcdFx0W0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fSU5ERVhdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4gNTAxOlx0XHRbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9ESVJdXHQ9IHsgLnR5cGUgPSBOTEFfVTggfSxcbiA1MDI6XHRcdFtMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0hXSURdXHQ9IHsgLnR5cGUgPSBOTEFfVTggfSxcbiA1MDM6XHR9O1xuIDUwNDpcdFxuIDUwNTpcdHN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfZ2VuZXZlKHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gNTA2Olx0XHRcdFx0XHQgICAgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLCBpbnQgb3B0c19sZW4sXG4gNTA3Olx0XHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDUwODpcdHtcbiA1MDk6XHRcdHN0cnVjdCBubGF0dHIgKnRiW0xXVFVOTkVMX0lQX09QVF9HRU5FVkVfTUFYICYjNDM7IDFdO1xuIDUxMDpcdFx0aW50IGRhdGFfbGVuLCBlcnI7XG4gNTExOlx0XG4gNTEyOlx0XHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBMV1RVTk5FTF9JUF9PUFRfR0VORVZFX01BWCwgYXR0cixcbiA1MTM6XHRcdFx0XHQgICAgICAgZ2VuZXZlX29wdF9wb2xpY3ksIGV4dGFjayk7XG4gNTE0Olx0XHRpZiAoZXJyKVxuIDUxNTpcdFx0XHRyZXR1cm4gZXJyO1xuIDUxNjpcdFxuIDUxNzpcdFx0aWYgKCF0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX0NMQVNTXSB8fFxuIDUxODpcdFx0ICAgICF0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX1RZUEVdIHx8XG4gNTE5Olx0XHQgICAgIXRiW0xXVFVOTkVMX0lQX09QVF9HRU5FVkVfREFUQV0pXG4gNTIwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUyMTpcdFxuIDUyMjpcdFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9HRU5FVkVfREFUQV07XG4gNTIzOlx0XHRkYXRhX2xlbiA9IG5sYV9sZW4oYXR0cik7XG4gNTI0Olx0XHRpZiAoZGF0YV9sZW4gJSA0KVxuIDUyNTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MjY6XHRcbiA1Mjc6XHRcdGlmIChpbmZvKSB7XG4gNTI4Olx0XHRcdHN0cnVjdCBnZW5ldmVfb3B0ICpvcHQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pICYjNDM7IG9wdHNfbGVuO1xuIDUyOTpcdFxuIDUzMDpcdFx0XHRtZW1jcHkob3B0LVx1MDAzZW9wdF9kYXRhLCBubGFfZGF0YShhdHRyKSwgZGF0YV9sZW4pO1xuIDUzMTpcdFx0XHRvcHQtXHUwMDNlbGVuZ3RoID0gZGF0YV9sZW4gLyA0O1xuIDUzMjpcdFx0XHRhdHRyID0gdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9DTEFTU107XG4gNTMzOlx0XHRcdG9wdC1cdTAwM2VvcHRfY2xhc3MgPSBubGFfZ2V0X2JlMTYoYXR0cik7XG4gNTM0Olx0XHRcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX1RZUEVdO1xuIDUzNTpcdFx0XHRvcHQtXHUwMDNldHlwZSA9IG5sYV9nZXRfdTgoYXR0cik7XG4gNTM2Olx0XHRcdF9fc2V0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncyk7XG4gNTM3Olx0XHR9XG4gNTM4Olx0XG4gNTM5Olx0XHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBnZW5ldmVfb3B0KSAmIzQzOyBkYXRhX2xlbjtcbiA1NDA6XHR9XG4gNTQxOlx0XG4gNTQyOlx0c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0c192eGxhbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIDU0MzpcdFx0XHRcdFx0ICAgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLCBpbnQgb3B0c19sZW4sXG4gNTQ0Olx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNTQ1Olx0e1xuIDU0NjpcdFx0c3RydWN0IG5sYXR0ciAqdGJbTFdUVU5ORUxfSVBfT1BUX1ZYTEFOX01BWCAmIzQzOyAxXTtcbiA1NDc6XHRcdGludCBlcnI7XG4gNTQ4Olx0XG4gNTQ5Olx0XHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBMV1RVTk5FTF9JUF9PUFRfVlhMQU5fTUFYLCBhdHRyLFxuIDU1MDpcdFx0XHRcdCAgICAgICB2eGxhbl9vcHRfcG9saWN5LCBleHRhY2spO1xuIDU1MTpcdFx0aWYgKGVycilcbiA1NTI6XHRcdFx0cmV0dXJuIGVycjtcbiA1NTM6XHRcbiA1NTQ6XHRcdGlmICghdGJbTFdUVU5ORUxfSVBfT1BUX1ZYTEFOX0dCUF0pXG4gNTU1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDU1NjpcdFxuIDU1NzpcdFx0aWYgKGluZm8pIHtcbiA1NTg6XHRcdFx0c3RydWN0IHZ4bGFuX21ldGFkYXRhICptZCA9XG4gNTU5Olx0XHRcdFx0aXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSAmIzQzOyBvcHRzX2xlbjtcbiA1NjA6XHRcbiA1NjE6XHRcdFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9WWExBTl9HQlBdO1xuIDU2MjpcdFx0XHRtZC1cdTAwM2VnYnAgPSBubGFfZ2V0X3UzMihhdHRyKTtcbiA1NjM6XHRcdFx0bWQtXHUwMDNlZ2JwIFx1MDAyNj0gVlhMQU5fR0JQX01BU0s7XG4gNTY0Olx0XHRcdF9fc2V0X2JpdChJUF9UVU5ORUxfVlhMQU5fT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKTtcbiA1NjU6XHRcdH1cbiA1NjY6XHRcbiA1Njc6XHRcdHJldHVybiBzaXplb2Yoc3RydWN0IHZ4bGFuX21ldGFkYXRhKTtcbiA1Njg6XHR9XG4gNTY5Olx0XG4gNTcwOlx0c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0c19lcnNwYW4oc3RydWN0IG5sYXR0ciAqYXR0cixcbiA1NzE6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sIGludCBvcHRzX2xlbixcbiA1NzI6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNTczOlx0e1xuIDU3NDpcdFx0c3RydWN0IG5sYXR0ciAqdGJbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9NQVggJiM0MzsgMV07XG4gNTc1Olx0XHRpbnQgZXJyO1xuIDU3NjpcdFx0dTggdmVyO1xuIDU3NzpcdFxuIDU3ODpcdFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9NQVgsIGF0dHIsXG4gNTc5Olx0XHRcdFx0ICAgICAgIGVyc3Bhbl9vcHRfcG9saWN5LCBleHRhY2spO1xuIDU4MDpcdFx0aWYgKGVycilcbiA1ODE6XHRcdFx0cmV0dXJuIGVycjtcbiA1ODI6XHRcbiA1ODM6XHRcdGlmICghdGJbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9WRVJdKVxuIDU4NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1ODU6XHRcbiA1ODY6XHRcdHZlciA9IG5sYV9nZXRfdTgodGJbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9WRVJdKTtcbiA1ODc6XHRcdGlmICh2ZXIgPT0gMSkge1xuIDU4ODpcdFx0XHRpZiAoIXRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fSU5ERVhdKVxuIDU4OTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDU5MDpcdFx0fSBlbHNlIGlmICh2ZXIgPT0gMikge1xuIDU5MTpcdFx0XHRpZiAoIXRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fRElSXSB8fFxuIDU5MjpcdFx0XHQgICAgIXRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fSFdJRF0pXG4gNTkzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTk0Olx0XHR9IGVsc2Uge1xuIDU5NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1OTY6XHRcdH1cbiA1OTc6XHRcbiA1OTg6XHRcdGlmIChpbmZvKSB7XG4gNTk5Olx0XHRcdHN0cnVjdCBlcnNwYW5fbWV0YWRhdGEgKm1kID1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgxNgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlY29uc3RydWN0aW5nIHRoZSBgaXBfdHVubmVsX2luZm9fb3B0c2AgRW5pZ21hKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgc25pcHBldCBhbmQgbXkgYnJhaW4mIzM5O3MgaGl0IGEgbGl0dGxlIHNuYWcuIFdoYXQgKmV4YWN0bHkqIGlzIGBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pYD8gSXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMganVzdCBmcm9tIGxvb2tpbmcgYXQgaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbiBhbmQgcHVycG9zZSBpbiB0aGlzIGNvbnRleHQuCgpSaWdodCwgc28gdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGdldCBzb21lIG1vcmUgaW5mb3JtYXRpb24sIGFuZCBxdWlja2x5ISBMZXQmIzM5O3MgZmlyZSB1cCBgZ3JlcGAgYW5kIGh1bnQgZG93biBhbGwgaW5zdGFuY2VzIG9mIGBpcF90dW5uZWxfaW5mb19vcHRzYC4gVGhhdCYjMzk7bGwgc2hvdyBtZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLCB3aGVyZSBpdCYjMzk7cyB1c2VkLCBhbmQgaG9wZWZ1bGx5IGlsbHVtaW5hdGUgaXRzIHJvbGUgd2l0aGluIHRoaXMgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uIHRvIGZ1bGx5IGdyYXNwIHRoZSBzdXJyb3VuZGluZyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF90dW5uZWxfaW5mb19vcHRzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYz01OTc9Ym9vbCBtbHg1ZV90Y190dW5fZW5jYXBfaW5mb19lcXVhbF9vcHRpb25zKHN0cnVjdCBtbHg1ZV9lbmNhcF9rZXkgKmEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jLTYyMi1cdHJldHVybiBhX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gPT0gYl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jOjYyMzpcdCAgICAgICAhbWVtY21wKGlwX3R1bm5lbF9pbmZvX29wdHMoYV9pbmZvKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYzo2MjQ6XHRcdCAgICAgICBpcF90dW5uZWxfaW5mb19vcHRzKGJfaW5mbyksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmMtNjI1LVx0XHQgICAgICAgYV9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2dlbmV2ZS5jPTkyPXN0YXRpYyBpbnQgbWx4NWVfZ2VuX2lwX3R1bm5lbF9oZWFkZXJfZ2VuZXZlKGNoYXIgYnVmW10sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9nZW5ldmUuYy0xMTctXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9nZW5ldmUuYzoxMTg6XHRcdGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KGdlbmV2ZWgtXHUwMDNlb3B0aW9ucywgdHVuX2luZm8pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9nZW5ldmUuYy0xMTktXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl92eGxhbi5jPTgzPXN0YXRpYyBpbnQgbWx4NWVfZ2VuX2lwX3R1bm5lbF9oZWFkZXJfdnhsYW4oY2hhciBidWZbXSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX3Z4bGFuLmMtMTAyLVx0aWYgKHRlc3RfYml0KElQX1RVTk5FTF9WWExBTl9PUFRfQklULCB0dW5fa2V5LVx1MDAzZXR1bl9mbGFncykpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fdnhsYW4uYzoxMDM6XHRcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhlLVx1MDAzZXR1bl9pbmZvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fdnhsYW4uYy0xMDQtXHRcdHZ4bGFuX2J1aWxkX2dicF9oZHIodnhoLCBtZCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM9NTYxNj1zdGF0aWMgYm9vbCBtbHg1ZV90Y19yZXN0b3JlX3R1bm5lbChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01Njk0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM6NTY5NTpcdFx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoXHUwMDI2dHVuX2RzdC1cdTAwM2V1LnR1bl9pbmZvLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTY5Ni1cdFx0XHRcdFx0ZW5jX29wdHMua2V5LmRhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmM9MzMwPW5mcF9mbF9wdXNoX2dlbmV2ZV9vcHRpb25zKHN0cnVjdCBuZnBfZmxfcGF5bG9hZCAqbmZwX2ZsLCBpbnQgKmxpc3RfbGVuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2FjdGlvbi5jLTMzNS1cdGludCBvcHRfbGVuLCBvcHRfY250LCBhY3Rfc3RhcnQsIHRvdF9wdXNoX2xlbjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2FjdGlvbi5jOjMzNjpcdHU4ICpzcmMgPSBpcF90dW5uZWxfaW5mb19vcHRzKGlwX3R1bik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYy0zMzctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmMtMzcyLVx0Kmxpc3RfbGVuICYjNDM7PSB0b3RfcHVzaF9sZW47XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYzozNzM6XHRzcmMgPSBpcF90dW5uZWxfaW5mb19vcHRzKGlwX3R1bik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYy0zNzQtXHR3aGlsZSAob3B0X2NudCkge1xuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI3NT1zdGF0aWMgdm9pZCBnZW5ldmVfcngoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgc3RydWN0IGdlbmV2ZV9zb2NrICpncyxcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yOTktXHRcdF9fc2V0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGZsYWdzKTtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjMwMDpcdFx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoXHUwMDI2dHVuX2RzdC1cdTAwM2V1LnR1bl9pbmZvLFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMzAxLVx0XHRcdFx0XHRnbnZoLVx1MDAzZW9wdGlvbnMsIGdudmgtXHUwMDNlb3B0X2xlbiAqIDQsXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTIyOT1zdGF0aWMgdm9pZCBnZW5ldmVfYnVpbGRfaGVhZGVyKHN0cnVjdCBnZW5ldmVoZHIgKmdlbmV2ZWgsXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTI0My1cdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncykpXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxMjQ0Olx0XHRpcF90dW5uZWxfaW5mb19vcHRzX2dldChnZW5ldmVoLVx1MDAzZW9wdGlvbnMsIGluZm8pO1xuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTI0NS19XG4tLVxuZHJpdmVycy9uZXQvcGZjcC5jPTUyPXN0YXRpYyBpbnQgcGZjcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9wZmNwLmMtNzQtXG5kcml2ZXJzL25ldC9wZmNwLmM6NzU6XHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoXHUwMDI2dHVuX2RzdC1cdTAwM2V1LnR1bl9pbmZvKTtcbmRyaXZlcnMvbmV0L3BmY3AuYy03Ni1cdGlmICh1bmxpa2VseSghbWQpKVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xNjU3PXN0YXRpYyBpbnQgdnhsYW5fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTc0Ny1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoxNzQ4Olx0XHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoXHUwMDI2dHVuX2RzdC1cdTAwM2V1LnR1bl9pbmZvKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNzQ5LVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0yMzczPXZvaWQgdnhsYW5feG1pdF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjQ4My1cdFx0XHRcdGdvdG8gZHJvcDtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyNDg0Olx0XHRcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yNDg1LVx0XHR9XG4tLVxuaW5jbHVkZS9uZXQvZHN0X21ldGFkYXRhLmg9MTUzPXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFkYXRhX2RzdCAqdHVuX2RzdF91bmNsb25lKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQvZHN0X21ldGFkYXRhLmgtMTY4LVx0bmV3X21kLVx1MDAzZXUudHVuX2luZm8gPSBtZF9kc3QtXHUwMDNldS50dW5faW5mbztcbmluY2x1ZGUvbmV0L2RzdF9tZXRhZGF0YS5oOjE2OTpcdG1lbWNweShpcF90dW5uZWxfaW5mb19vcHRzKFx1MDAyNm5ld19tZC1cdTAwM2V1LnR1bl9pbmZvKSxcbmluY2x1ZGUvbmV0L2RzdF9tZXRhZGF0YS5oOjE3MDpcdCAgICAgICBpcF90dW5uZWxfaW5mb19vcHRzKFx1MDAyNm1kX2RzdC1cdTAwM2V1LnR1bl9pbmZvKSwgbWRfc2l6ZSk7XG5pbmNsdWRlL25ldC9kc3RfbWV0YWRhdGEuaC0xNzEtXG4tLVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTg5PXN0cnVjdCBpcF90dW5uZWxfZW5jYXAge1xuLS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMDUtXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6MTA2OiNkZWZpbmUgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKVx0XHRcdFx0XFxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMDctXHRfR2VuZXJpYyhpbmZvLFx0XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTY3ND1zdGF0aWMgaW5saW5lIHZvaWQgaXB0dW5uZWxfeG1pdF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGt0X2xlbilcbi0tXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzEwLVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjcxMTpzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2luZm9fb3B0c19nZXQodm9pZCAqdG8sXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzEyLVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzEzLXtcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDo3MTQ6XHRtZW1jcHkodG8sIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyksIGluZm8tXHUwMDNlb3B0aW9uc19sZW4pO1xuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTcxNS19XG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzE2LVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjcxNzpzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2luZm9fb3B0c19zZXQoc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTcxOC1cdFx0XHRcdFx0ICAgY29uc3Qgdm9pZCAqZnJvbSwgaW50IGxlbixcbi0tXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzIyLVx0aWYgKGxlbiBcdTAwM2UgMCkge1xuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjcyMzpcdFx0bWVtY3B5KGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyksIGZyb20sIGxlbik7XG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzI0LVx0XHRpcF90dW5uZWxfZmxhZ3Nfb3IoaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzLCBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MsXG4tLVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTc1OD1zdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX3VubmVlZF9tZXRhZGF0YSh2b2lkKVxuLS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03NjEtXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzYyOnN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfaW5mb19vcHRzX2dldCh2b2lkICp0byxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03NjMtXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcbi0tXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzY2LVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjc2NzpzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2luZm9fb3B0c19zZXQoc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTc2OC1cdFx0XHRcdFx0ICAgY29uc3Qgdm9pZCAqZnJvbSwgaW50IGxlbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00OTgzPUJQRl9DQUxMXzMoYnBmX3NrYl9nZXRfdHVubmVsX29wdCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1OCAqLCB0bywgdTMyLCBzaXplKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQ5OTctXG5uZXQvY29yZS9maWx0ZXIuYzo0OTk4Olx0aXBfdHVubmVsX2luZm9fb3B0c19nZXQodG8sIGluZm8pO1xubmV0L2NvcmUvZmlsdGVyLmMtNDk5OS1cdGlmIChzaXplIFx1MDAzZSBpbmZvLVx1MDAzZW9wdGlvbnNfbGVuKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTUxMDA9QlBGX0NBTExfMyhicGZfc2tiX3NldF90dW5uZWxfb3B0LCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTExMi1cdGlwX3R1bm5lbF9zZXRfb3B0aW9uc19wcmVzZW50KHByZXNlbnQpO1xubmV0L2NvcmUvZmlsdGVyLmM6NTExMzpcdGlwX3R1bm5lbF9pbmZvX29wdHNfc2V0KGluZm8sIGZyb20sIHNpemUsIHByZXNlbnQpO1xubmV0L2NvcmUvZmlsdGVyLmMtNTExNC1cbi0tXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jPTM2Nj1za2JfZmxvd19kaXNzZWN0X3R1bm5lbF9pbmZvKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy00ODQtXHRcdGVuY19vcHQtXHUwMDNlbGVuID0gaW5mby1cdTAwM2VvcHRpb25zX2xlbjtcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmM6NDg1Olx0XHRpcF90dW5uZWxfaW5mb19vcHRzX2dldChlbmNfb3B0LVx1MDAzZWRhdGEsIGluZm8pO1xubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy00ODYtXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MjY3PXN0YXRpYyBpbnQgZXJzcGFuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdG5sX3B0a19pbmZvICp0cGksXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMzQ0LVx0XHRcdFx0XHRcdFx0ICAgIHNpemVvZigqZXJzaGRyKSk7XG5uZXQvaXB2NC9pcF9ncmUuYzozNDU6XHRcdFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKFx1MDAyNnR1bl9kc3QtXHUwMDNldS50dW5faW5mbyk7XG5uZXQvaXB2NC9pcF9ncmUuYy0zNDYtXHRcdFx0bWQtXHUwMDNldmVyc2lvbiA9IHZlcjtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz01NDA9c3RhdGljIHZvaWQgZXJzcGFuX2ZiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy01NjItXHRcdGdvdG8gZXJyX2ZyZWVfc2tiO1xubmV0L2lwdjQvaXBfZ3JlLmM6NTYzOlx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTU2NC1cbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTE0Mj1zdHJ1Y3QgbWV0YWRhdGFfZHN0ICppcHR1bm5lbF9tZXRhZGF0YV9yZXBseShzdHJ1Y3QgbWV0YWRhdGFfZHN0ICptZCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTE2Ni1cdGRzdC1cdTAwM2Vtb2RlID0gc3JjLVx1MDAzZW1vZGUgfCBJUF9UVU5ORUxfSU5GT19UWDtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6MTY3Olx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoZHN0LCBpcF90dW5uZWxfaW5mb19vcHRzKHNyYyksXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTE2OC1cdFx0XHRcdHNyYy1cdTAwM2VvcHRpb25zX2xlbiwgdHVuX2ZsYWdzKTtcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTUwNT1zdGF0aWMgaW50IGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZShzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNTI3LVx0aWYgKGluZm8pIHtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6NTI4Olx0XHRzdHJ1Y3QgZ2VuZXZlX29wdCAqb3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSAmIzQzOyBvcHRzX2xlbjtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNTI5LVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9NTQyPXN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfdnhsYW4oc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTU1OC1cdFx0c3RydWN0IHZ4bGFuX21ldGFkYXRhICptZCA9XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjU1OTpcdFx0XHRpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pICYjNDM7IG9wdHNfbGVuO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy01NjAtXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz01NzA9c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0c19lcnNwYW4oc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTU5OS1cdFx0c3RydWN0IGVyc3Bhbl9tZXRhZGF0YSAqbWQgPVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo2MDA6XHRcdFx0aXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSAmIzQzOyBvcHRzX2xlbjtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNjAxLVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9NzcyPXN0YXRpYyBpbnQgaXBfdHVuX2ZpbGxfZW5jYXBfb3B0c19nZW5ldmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTc4My1cdHdoaWxlICh0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiBcdTAwM2Ugb2Zmc2V0KSB7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjc4NDpcdFx0b3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbykgJiM0Mzsgb2Zmc2V0O1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy03ODUtXHRcdGlmIChubGFfcHV0X2JlMTYoc2tiLCBMV1RVTk5FTF9JUF9PUFRfR0VORVZFX0NMQVNTLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9ODAwPXN0YXRpYyBpbnQgaXBfdHVuX2ZpbGxfZW5jYXBfb3B0c192eGxhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtODA5LVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo4MTA6XHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy04MTEtXHRpZiAobmxhX3B1dF91MzIoc2tiLCBMV1RVTk5FTF9JUF9PUFRfVlhMQU5fR0JQLCBtZC1cdTAwM2VnYnApKSB7XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz04MjA9c3RhdGljIGludCBpcF90dW5fZmlsbF9lbmNhcF9vcHRzX2Vyc3BhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtODI5LVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo4MzA6XHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy04MzEtXHRpZiAobmxhX3B1dF91OChza2IsIExXVFVOTkVMX0lQX09QVF9FUlNQQU5fVkVSLCBtZC1cdTAwM2V2ZXJzaW9uKSlcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTg5OT1zdGF0aWMgaW50IGlwX3R1bl9vcHRzX25sc2l6ZShzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05MTItXHRcdHdoaWxlIChpbmZvLVx1MDAzZW9wdGlvbnNfbGVuIFx1MDAzZSBvZmZzZXQpIHtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTEzOlx0XHRcdG9wdCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgJiM0Mzsgb2Zmc2V0O1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05MTQtXHRcdFx0b3B0X2xlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoMilcdC8qIE9QVF9HRU5FVkVfQ0xBU1MgKi9cbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTkyMy1cdH0gZWxzZSBpZiAodGVzdF9iaXQoSVBfVFVOTkVMX0VSU1BBTl9PUFRfQklULCBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MpKSB7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjkyNDpcdFx0c3RydWN0IGVyc3Bhbl9tZXRhZGF0YSAqbWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05MjUtXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz05NTA9c3RhdGljIGludCBpcF90dW5fY21wX2VuY2FwKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYSwgc3RydWN0IGx3dHVubmVsX3N0YXRlICpiKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTU3LVx0ICAgICAgIGluZm9fYS1cdTAwM2VvcHRpb25zX2xlbiAhPSBpbmZvX2ItXHUwMDNlb3B0aW9uc19sZW4gfHxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTU4Olx0ICAgICAgIG1lbWNtcChpcF90dW5uZWxfaW5mb19vcHRzKGluZm9fYSksXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjk1OTpcdFx0ICAgICAgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvX2IpLCBpbmZvX2EtXHUwMDNlb3B0aW9uc19sZW4pO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05NjAtfVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz00OTA9c3RhdGljIGludCBpcDZlcnNwYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTU0OS1cdFx0XHRcdFx0XHRcdCAgICBzaXplb2YoKmVyc2hkcikpO1xubmV0L2lwdjYvaXA2X2dyZS5jOjU1MDpcdFx0XHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtNTUxLVx0XHRcdG1kLVx1MDAzZXZlcnNpb24gPSB2ZXI7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTkyMT1zdGF0aWMgbmV0ZGV2X3R4X3QgaXA2ZXJzcGFuX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTk5OS1cdFx0XHRnb3RvIHR4X2Vycjtcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMDAwOlx0XHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pO1xubmV0L2lwdjYvaXA2X2dyZS5jLTEwMDEtXG4tLVxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmM9NDE5PXN0YXRpYyBpbnQgbmZ0X3R1bm5lbF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jLTQ5NS0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jOjQ5NjpcdGlwX3R1bm5lbF9pbmZvX29wdHNfc2V0KFx1MDAyNm1kLVx1MDAzZXUudHVuX2luZm8sIFx1MDAyNnByaXYtXHUwMDNlb3B0cy51LCBwcml2LVx1MDAzZW9wdHMubGVuLFxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmMtNDk3LVx0XHRcdFx0cHJpdi1cdTAwM2VvcHRzLmZsYWdzKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTEwMDA9aW50IG92c19mbG93X2tleV9leHRyYWN0KGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm8sXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMDE5LVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoxMDIwOlx0XHRcdGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KFRVTl9NRVRBREFUQV9PUFRTKGtleSwgdHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4pLFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMDIxLVx0XHRcdFx0XHRcdHR1bl9pbmZvKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM9OTc5PWludCBvdnNfbmxhX3B1dF90dW5uZWxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy05ODItXHRyZXR1cm4gX19pcF90dW5fdG9fbmxhdHRyKHNrYiwgXHUwMDI2dHVuX2luZm8tXHUwMDNla2V5LFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jOjk4MzpcdFx0XHRcdCAgaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyksXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtOTg0LVx0XHRcdFx0ICB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM9MjgwMD1zdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X3NldF90dW4oY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMjg3Mi1cdCAqL1xubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jOjI4NzM6XHRpcF90dW5uZWxfaW5mb19vcHRzX3NldCh0dW5faW5mbyxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0yODc0LVx0XHRcdFx0VFVOX01FVEFEQVRBX09QVFMoXHUwMDI2a2V5LCBrZXkudHVuX29wdHNfbGVuKSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM9MzgwMj1zdGF0aWMgaW50IHNldF9hY3Rpb25fdG9fYXR0cihjb25zdCBzdHJ1Y3QgbmxhdHRyICphLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zODE4LVx0XHRlcnIgPSAgaXBfdHVuX3RvX25sYXR0cihza2IsIFx1MDAyNnR1bl9pbmZvLVx1MDAzZWtleSxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzozODE5Olx0XHRcdFx0XHRpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKSxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zODIwLVx0XHRcdFx0XHR0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbixcbi0tXG5uZXQvcHNhbXBsZS9wc2FtcGxlLmM9MjE2PXN0YXRpYyBpbnQgX19wc2FtcGxlX2lwX3R1bl90b19ubGF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvcHNhbXBsZS9wc2FtcGxlLmMtMjE5LVx0dW5zaWduZWQgc2hvcnQgdHVuX3Byb3RvID0gaXBfdHVubmVsX2luZm9fYWYodHVuX2luZm8pO1xubmV0L3BzYW1wbGUvcHNhbXBsZS5jOjIyMDpcdGNvbnN0IHZvaWQgKnR1bl9vcHRzID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyk7XG5uZXQvcHNhbXBsZS9wc2FtcGxlLmMtMjIxLVx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9rZXkgKnR1bl9rZXkgPSBcdTAwMjZ0dW5faW5mby1cdTAwM2VrZXk7XG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9Mjk2PXN0YXRpYyBpbnQgdHVubmVsX2tleV9vcHRzX3NldChzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy0zMDMtXHRcdF9fc2V0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncyk7XG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYzozMDQ6XHRcdHJldHVybiB0dW5uZWxfa2V5X2NvcHlfb3B0cyhubGEsIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyksXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy0zMDUtXHRcdFx0XHRcdCAgICBvcHRzX2xlbiwgZXh0YWNrKTtcbi0tXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy0zMTEtXHRcdF9fc2V0X2JpdChJUF9UVU5ORUxfVlhMQU5fT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKTtcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjMxMjpcdFx0cmV0dXJuIHR1bm5lbF9rZXlfY29weV9vcHRzKG5sYSwgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMxMy1cdFx0XHRcdFx0ICAgIG9wdHNfbGVuLCBleHRhY2spO1xuLS1cbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMxOS1cdFx0X19zZXRfYml0KElQX1RVTk5FTF9FUlNQQU5fT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKTtcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjMyMDpcdFx0cmV0dXJuIHR1bm5lbF9rZXlfY29weV9vcHRzKG5sYSwgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMyMS1cdFx0XHRcdFx0ICAgIG9wdHNfbGVuLCBleHRhY2spO1xuLS1cbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jPTU3Nj1zdGF0aWMgaW50IHR1bm5lbF9rZXlfZ2VuZXZlX29wdHNfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTU3OC17XG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYzo1Nzk6XHRjb25zdCB1OCAqc3JjID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTU4MC1cdGludCBsZW4gPSBpbmZvLVx1MDAzZW9wdGlvbnNfbGVuO1xuLS1cbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jPTYwOD1zdGF0aWMgaW50IHR1bm5lbF9rZXlfdnhsYW5fb3B0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtNjEwLXtcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjYxMTpcdGNvbnN0IHN0cnVjdCB2eGxhbl9tZXRhZGF0YSAqbWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtNjEyLVx0c3RydWN0IG5sYXR0ciAqc3RhcnQ7XG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9NjI3PXN0YXRpYyBpbnQgdHVubmVsX2tleV9lcnNwYW5fb3B0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtNjI5LXtcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjYzMDpcdGNvbnN0IHN0cnVjdCBlcnNwYW5fbWV0YWRhdGEgKm1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTYzMS1cdHN0cnVjdCBubGF0dHIgKnN0YXJ0O1xuLS1cbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jPTgzOT10dW5uZWxfa2V5X2dlbmV2ZV9vcHRzX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy04NDAte1xubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6ODQxOlx0Y29uc3QgdTggKnNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7XG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy04NDItXHRpbnQgbGVuID0gaW5mby1cdTAwM2VvcHRpb25zX2xlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gdGhlIENvcmU6IFVucGFja2luZyBgaXBfdHVubmVsX2luZm9fb3B0c2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGlzIGBpcF90dW5uZWxfaW5mb19vcHRzYCBzdHJ1Y3QuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGluIGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLiBJIHJlY2FsbCB0aGF0IGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0dW5uZWwgY29uZmlndXJhdGlvbiwgYnV0IHRoZSBwcmVjaXNlIGRldGFpbHMsIGVzcGVjaWFsbHkgdGhlIGxheW91dCBhbmQgdGhlIGluZGl2aWR1YWwgZmllbGRzLCBhcmUgZXNjYXBpbmcgbWUgYXQgdGhlIG1vbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIEkgd2lsbCBjaGVjayB0aGUgaGVhZGVyIGZpbGUgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRcbiAgOTY6XHQvKiBGbGFncyBmb3IgaXBfdHVubmVsX2luZm8gbW9kZS4gKi9cbiAgOTc6XHQjZGVmaW5lIElQX1RVTk5FTF9JTkZPX1RYXHQweDAxXHQvKiByZXByZXNlbnRzIHR4IHR1bm5lbCBwYXJhbWV0ZXJzICovXG4gIDk4Olx0I2RlZmluZSBJUF9UVU5ORUxfSU5GT19JUFY2XHQweDAyXHQvKiBrZXkgY29udGFpbnMgSVB2NiBhZGRyZXNzZXMgKi9cbiAgOTk6XHQjZGVmaW5lIElQX1RVTk5FTF9JTkZPX0JSSURHRVx0MHgwNFx0LyogcmVwcmVzZW50cyBhIGJyaWRnZWQgdHVubmVsIGlkICovXG4gMTAwOlx0XG4gMTAxOlx0LyogTWF4aW11bSB0dW5uZWwgb3B0aW9ucyBsZW5ndGguICovXG4gMTAyOlx0I2RlZmluZSBJUF9UVU5ORUxfT1BUU19NQVhcdFx0XHRcdFx0XFxcbiAxMDM6XHRcdEdFTk1BU0soKHNpemVvZl9maWVsZChzdHJ1Y3QgaXBfdHVubmVsX2luZm8sXHRcdFxcXG4gMTA0Olx0XHRcdFx0ICAgICAgb3B0aW9uc19sZW4pICogQklUU19QRVJfQllURSkgLSAxLCAwKVxuIDEwNTpcdFxuIDEwNjpcdCNkZWZpbmUgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKVx0XHRcdFx0XFxcbiAxMDc6XHRcdF9HZW5lcmljKGluZm8sXHRcdFx0XHRcdFx0XFxcbiAxMDg6XHRcdFx0IGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqIDogKChjb25zdCB2b2lkICopKGluZm8pLVx1MDAzZW9wdGlvbnMpLFxcXG4gMTA5Olx0XHRcdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKiA6ICgodm9pZCAqKShpbmZvKS1cdTAwM2VvcHRpb25zKVxcXG4gMTEwOlx0XHQpXG4gMTExOlx0XG4gMTEyOlx0c3RydWN0IGlwX3R1bm5lbF9pbmZvIHtcbiAxMTM6XHRcdHN0cnVjdCBpcF90dW5uZWxfa2V5XHRrZXk7XG4gMTE0Olx0XHRzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwXHRlbmNhcDtcbiAxMTU6XHQjaWZkZWYgQ09ORklHX0RTVF9DQUNIRVxuIDExNjpcdFx0c3RydWN0IGRzdF9jYWNoZVx0ZHN0X2NhY2hlO1xuIDExNzpcdCNlbmRpZlxuIDExODpcdFx0dThcdFx0XHRvcHRpb25zX2xlbjtcbiAxMTk6XHRcdHU4XHRcdFx0bW9kZTtcbiAxMjA6XHRcdHU4XHRcdFx0b3B0aW9uc1tdIF9fYWxpZ25lZF9sYXJnZXN0IF9fY291bnRlZF9ieShvcHRpb25zX2xlbik7XG4gMTIxOlx0fTtcbiAxMjI6XHRcbiAxMjM6XHQvKiA2cmQgcHJlZml4L3JlbGF5IGluZm9ybWF0aW9uICovXG4gMTI0Olx0I2lmZGVmIENPTkZJR19JUFY2X1NJVF82UkRcbiAxMjU6XHRzdHJ1Y3QgaXBfdHVubmVsXzZyZF9wYXJtIHtcbiAxMjY6XHRcdHN0cnVjdCBpbjZfYWRkclx0XHRwcmVmaXg7XG4gMTI3Olx0XHRfX2JlMzJcdFx0XHRyZWxheV9wcmVmaXg7XG4gMTI4Olx0XHR1MTZcdFx0XHRwcmVmaXhsZW47XG4gMTI5Olx0XHR1MTZcdFx0XHRyZWxheV9wcmVmaXhsZW47XG4gMTMwOlx0XHRzdHJ1Y3QgcmN1X2hlYWRcdFx0cmN1O1xuIDEzMTpcdH07XG4gMTMyOlx0I2VuZGlmXG4gMTMzOlx0XG4gMTM0Olx0c3RydWN0IGlwX3R1bm5lbF9wcmxfZW50cnkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzM5NwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQ1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBLZXJuZWwgQnVnIGFuZCBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLCBzcGVjaWZpY2FsbHkgbGluZSAxMjAgYW5kIHRoZSBgaXBfdHVubmVsX2luZm9gIHN0cnVjdC4gV2hhdCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24gaXMgdGhlIGBvcHRpb25zW10gX19hbGlnbmVkX2xhcmdlc3QgX19jb3VudGVkX2J5KG9wdGlvbnNfbGVuKTtgIG1lbWJlci4gVGhlIGBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pYCBhdHRyaWJ1dGUgaXMga2V5IGhlcmUg4oCTIGl0IHRlbGxzIHRoZSBjb21waWxlciB0aGF0IHRoZSBzaXplIG9mIHRoZSBgb3B0aW9uc2AgYXJyYXkgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYG9wdGlvbnNfbGVuYCBmaWVsZC4gVGhpcyBpcyBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgd2hlbiBVQlNBTiYjMzk7cyBib3VuZHMgY2hlY2tpbmcgaXMgZW5hYmxlZC4KCk15IGNvbmNlcm4gc3RlbXMgZnJvbSBob3cgYHR1bl9pbmZvLSZndDtvcHRpb25zX2xlbmAgaXMgYmVpbmcgaGFuZGxlZCBpbiB0aGUgYGlwX3R1bl9idWlsZF9zdGF0ZWAgYW5kIGBpcDZfdHVuX2J1aWxkX3N0YXRlYCBmdW5jdGlvbnMuIEJlZm9yZSwgdGhlIGNvZGUgc2VxdWVuY2Ugd2FzIHNldHRpbmcgYHR1bl9pbmZvLSZndDtvcHRpb25zX2xlbmAgKmFmdGVyKiBjYWxsaW5nIGBpcF90dW5fc2V0X29wdHNgLiBUaGUgcHJvYmxlbSBpcywgdGhhdCB0aGUgYGlwX3R1bl9zZXRfb3B0c2AgZnVuY3Rpb24gYWNjZXNzZXMgdGhlIGB0dW5faW5mby0mZ3Q7b3B0aW9uc2AgYXJyYXkgKHBvdGVudGlhbGx5IHdyaXRpbmcgaW50byBpdCkgKmJlZm9yZSogYG9wdGlvbnNfbGVuYCBpcyBzZXQuIFRoaXMgbWVhbnMgdGhhdCBpZiBgb3B0aW9uc19sZW5gIGlzIGluaXRpYWxseSB6ZXJvLCB0aGUgYWNjZXNzIHRvIGBvcHRpb25zYCBlZmZlY3RpdmVseSBiZWNvbWVzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBXaXRoIGBDT05GSUdfVUJTQU5fQk9VTkRTYCAob3Igd2l0aCB0aGUgYF9fY291bnRlZF9ieWAgYXR0cmlidXRlKSwgdGhpcyB3aWxsIHRyaWdnZXIgYSBib3VuZHMgY2hlY2sgZmFpbHVyZSDigJMgYSBjcmFzaCBvciBhIHdhcm5pbmcsIGRlcGVuZGluZyBvbiB0aGUgY29tcGlsZXIgYW5kIFVCU0FOIGNvbmZpZ3VyYXRpb24uCgpTbywgdGhlIGZpeCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGUgY29kZSB3YXMgbW9kaWZpZWQgdG8gbW92ZSB0aGUgbGluZSBgdHVuX2luZm8tJmd0O29wdGlvbnNfbGVuID0gb3B0X2xlbjtgIGJlZm9yZSB0aGUgY2FsbCB0byBgaXBfdHVuX3NldF9vcHRzYC4gVGhpcyBlbnN1cmVzIHRoYXQgYG9wdGlvbnNfbGVuYCBoYXMgYSB2YWxpZCB2YWx1ZSAqYmVmb3JlKiBhbnkgYWNjZXNzIHRvIGBvcHRpb25zYCBvY2N1cnMsIHRodXMgYXZvaWRpbmcgdGhlIGJvdW5kcyBjaGVjayBmYWlsdXJlLgoKVG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmaXgsIGFuZCB0byBzZWUgd2hlbiB0aGlzIHdhcyBjaGFuZ2VkLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgZ2l0IGxvZyBmb3IgdGhlIHNwZWNpZmljIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgdGhpcyBjaGFuZ2UuIExldCBtZSBydW4gYGdpdCBsb2dgIHRvIHNlZSBpZiBJIGNhbiBmaW5kIGl0LiBJZiBJJiMzOTttIGx1Y2t5LCB0aGUgY29tbWl0IG1lc3NhZ2Ugd2lsbCBwcm92aWRlIG1vcmUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19jb3VudGVkX2J5XFwob3B0aW9uc19sZW5cXCkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTExMj1zdHJ1Y3QgaXBfdHVubmVsX2luZm8ge1xuLS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMTktXHR1OFx0XHRcdG1vZGU7XG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6MTIwOlx0dThcdFx0XHRvcHRpb25zW10gX19hbGlnbmVkX2xhcmdlc3QgX19jb3VudGVkX2J5KG9wdGlvbnNfbGVuKTtcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMjEtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NDQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEtjb25maWcgT3B0aW9ucyBmb3IgSVAgVHVubmVsaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIEtjb25maWcgb3B0aW9ucyBnb3Zlcm4gdGhlIGJlaGF2aW9yIG9mIGBpcF90dW5uZWxfY29yZS5jYCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIExXVHVubmVsIGVuY2Fwc3VsYXRpb24gb2YgSVAvSVB2NiB0cmFmZmljLiBUaW1lIHRvIGRpZyBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IEtjb25maWcgc3ltYm9scy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGdyZXAuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYGlwX3R1bl9idWlsZF9zdGF0ZWAg4oCTIHRoYXQgZnVuY3Rpb24gbmFtZSBzaG91bGQgYmUgYSBkZWNlbnQgaW5kaWNhdG9yIG9mIHRoZSBjb3JlIHR1bm5lbGluZyBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBhbHNvIGluY2x1ZGUgYSBzZWFyY2ggZm9yIGBMV1RVTk5FTF9FTkNBUF9JUGAsIGFzIHRoYXQgbG9va3MgbGlrZSBhIGtleSBtYWNybyBmb3IgY29udHJvbGxpbmcgdGhlIGVuY2Fwc3VsYXRpb24gZGlyZWN0bHkuIFRoaXMgc2hvdWxkIHF1aWNrbHkgaGlnaGxpZ2h0IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBiZWdpbiBteSBleHBsb3JhdGlvbiB0byBnZXQgYSBzZW5zZSBvZiBob3cgdGhlc2UgY29tcG9uZW50cyBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3R1bl9idWlsZF9zdGF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTY4Mj1zdGF0aWMgaW50IGlwX3R1bl9zZXRfb3B0cyhzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy02ODctXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjY4ODpzdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTY4OS1cdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgZmFtaWx5LCBjb25zdCB2b2lkICpjZmcsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz05NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgaXBfdHVuX2x3dF9vcHMgPSB7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjk2MzpcdC5idWlsZF9zdGF0ZSA9IGlwX3R1bl9idWlsZF9zdGF0ZSxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTY0LVx0LmRlc3Ryb3lfc3RhdGUgPSBpcF90dW5fZGVzdHJveV9zdGF0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NDgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgVHVubmVsIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgd2hlcmUgdGhlIGBpcF90dW5fbHd0X29wc2Agc3RydWN0dXJlIGlzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgTGlnaHQgV2VpZ2h0IFR1bm5lbCAoTFdUKSBvcGVyYXRpb25zIGFyZSBob29rZWQgaW50byB0aGUgSVB2NCB0dW5uZWwgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20gYWZ0ZXIgdGhlIHJlZ2lzdHJhdGlvbiBwb2ludCwgdGhlIGNhbGwgdGhhdCB1bHRpbWF0ZWx5IHRpZXMgdGhvc2Ugb3BlcmF0aW9ucyB0byB0aGUgcmVsZXZhbnQgZGF0YXBhdGguIExvY2F0aW5nIHRoaXMgd2lsbCBwcm92aWRlIG1lIHdpdGggdGhlIGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIHNwZWNpZmljIGxvZ2ljIGRlZmluZWQgd2l0aGluIGBpcF90dW5fbHd0X29wc2AuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZWRpdG9yIGFuZCBzdGFydCBuYXZpZ2F0aW5nIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF90dW5fbHd0X29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTk1MD1zdGF0aWMgaW50IGlwX3R1bl9jbXBfZW5jYXAoc3RydWN0IGx3dHVubmVsX3N0YXRlICphLCBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmIpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05NjEtXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjk2MjpzdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBpcF90dW5fbHd0X29wcyA9IHtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTYzLVx0LmJ1aWxkX3N0YXRlID0gaXBfdHVuX2J1aWxkX3N0YXRlLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9MTA4OT12b2lkIF9faW5pdCBpcF90dW5uZWxfY29yZV9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDk2LVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxMDk3Olx0bHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZpcF90dW5fbHd0X29wcywgTFdUVU5ORUxfRU5DQVBfSVApO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDk4LVx0bHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZpcDZfdHVuX2x3dF9vcHMsIExXVFVOTkVMX0VOQ0FQX0lQNik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDY2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJUCBUdW5uZWwgQ29yZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHR1bm5lbCBvcGVyYXRpb25zIGFyZSBpbml0aWFsaXplZC4gTXkgZm9jdXMgaXMgY3VycmVudGx5IG9uIGBpcF90dW5fbHd0X29wc2AgYW5kIGBpcDZfdHVuX2x3dF9vcHNgLiBGcm9tIG15IG5vdGVzLCBJIHJlY2FsbCB0aG9zZSBhcmUgcmVnaXN0ZXJlZCB3aXRoaW4gYGlwX3R1bm5lbF9jb3JlX2luaXQodm9pZClgLiBHb29kLiBOb3csIEkgd2FudCB0byBjb25maXJtIHRoYXQuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIGZvciBgaXBfdHVubmVsX2NvcmUuY2AuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgbW9kdWxlIGlzIGJ1aWx0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgIGZpbGUgdG8gc2VlIHRoZSBidWlsZCBydWxlcyBhbmQgZGVwZW5kZW5jaWVzLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb3JlIHR1bm5lbCBmdW5jdGlvbmFsaXR5IGlzIGludGVncmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3R1bm5lbF9jb3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cdCAgICAgZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vIGZpYl90cmllLm8gZmliX25vdGlmaWVyLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE2Olx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTctXHQgICAgIG1ldHJpY3MubyBuZXRsaW5rLm8gbmV4dGhvcC5vIHVkcF90dW5uZWxfc3R1Yi5vXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTE4Nzk9c3RhdGljIGludCBfX2luaXQgaW5ldF9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTE5OTktXG5uZXQvaXB2NC9hZl9pbmV0LmM6MjAwMDpcdGlwX3R1bm5lbF9jb3JlX2luaXQoKTtcbm5ldC9pcHY0L2FmX2luZXQuYy0yMDAxLVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9MTA4MT1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBpcDZfdHVuX2x3dF9vcHMgPSB7XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDg4LVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxMDg5OnZvaWQgX19pbml0IGlwX3R1bm5lbF9jb3JlX2luaXQodm9pZClcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTA5MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDc1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50IGRvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIElQIFR1bm5lbCBDb3JlIE1vZHVsZSYjMzk7cyBDb21waWxhdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgcmVsYXRlZCB0byBJUCB0dW5uZWxpbmcsIGFuZCB0aGUgZmlyc3QgY2x1ZSBpcyB0aGF0IGBpcF90dW5uZWxfY29yZS5vYCBpcyBiZWluZyBjb21waWxlZC4gQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhhdCYjMzk7cyBpbiBgbmV0L2lwdjQvTWFrZWZpbGVgLiBBaCwgeWVzLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBvYmoteWAsIHNvIGl0JiMzOTtzIHN0YXRpY2FsbHkgbGlua2VkIGludG8gdGhlIGtlcm5lbCBpbWFnZS4gVGhhdOKAmXMgZ29vZCB0byBrbm93IGZvciB0aGUgYmlnIHBpY3R1cmUuCgpOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb25zIHdpdGhpbiB0aGUgdHVubmVsIGFyZSBlbmFibGVkLCBzbyBhcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGd1YXJkcyBvbiBgbHd0dW5uZWxfZW5jYXBfYWRkX29wc2A/IFRoYXQgc2VlbXMgbGlrZSBhIHByaW1lIHRhcmdldCB0byBjaGVjayBmb3IgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEdvdHRhIHZlcmlmeSBpZiBpdCBpcyBhZmZlY3RlZCBieSBhbnkgcGFydGljdWxhciBgQ09ORklHYCBvcHRpb25zLgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhpcyBtb2R1bGUuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIGBpcF90dW5uZWxfY29yZV9pbml0YCB3aXRoaW4gYG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCBvdmVydmlldyBvZiBob3cgZXZlcnl0aGluZyBpcyBicm91Z2h0IG9ubGluZSBhbmQgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gY2hlY2tzIG1pZ2h0IGJlIGxvY2F0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFxuMTA4MTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIGlwNl90dW5fbHd0X29wcyA9IHtcbjEwODI6XHRcdC5idWlsZF9zdGF0ZSA9IGlwNl90dW5fYnVpbGRfc3RhdGUsXG4xMDgzOlx0XHQuZmlsbF9lbmNhcCA9IGlwNl90dW5fZmlsbF9lbmNhcF9pbmZvLFxuMTA4NDpcdFx0LmdldF9lbmNhcF9zaXplID0gaXA2X3R1bl9lbmNhcF9ubHNpemUsXG4xMDg1Olx0XHQuY21wX2VuY2FwID0gaXBfdHVuX2NtcF9lbmNhcCxcbjEwODY6XHRcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuMTA4NzpcdH07XG4xMDg4Olx0XG4xMDg5Olx0dm9pZCBfX2luaXQgaXBfdHVubmVsX2NvcmVfaW5pdCh2b2lkKVxuMTA5MDpcdHtcbjEwOTE6XHRcdC8qIElmIHlvdSBsYW5kIGhlcmUsIG1ha2Ugc3VyZSB3aGV0aGVyIGluY3JlYXNpbmcgaXBfdHVubmVsX2luZm8mIzM5O3NcbjEwOTI6XHRcdCAqIG9wdGlvbnNfbGVuIGlzIGEgcmVhc29uYWJsZSBjaG9pY2Ugd2l0aCBpdHMgdXNhZ2UgaW4gZnJvbnQgZW5kc1xuMTA5MzpcdFx0ICogKGYuZS4sIGl0JiMzOTtzIHBhcnQgb2YgZmxvdyBrZXlzLCBldGMpLlxuMTA5NDpcdFx0ICovXG4xMDk1Olx0XHRCVUlMRF9CVUdfT04oSVBfVFVOTkVMX09QVFNfTUFYICE9IDI1NSk7XG4xMDk2Olx0XG4xMDk3Olx0XHRsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFx1MDAyNmlwX3R1bl9sd3Rfb3BzLCBMV1RVTk5FTF9FTkNBUF9JUCk7XG4xMDk4Olx0XHRsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFx1MDAyNmlwNl90dW5fbHd0X29wcywgTFdUVU5ORUxfRU5DQVBfSVA2KTtcbjEwOTk6XHR9XG4xMTAwOlx0XG4xMTAxOlx0REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoaXBfdHVubmVsX21ldGFkYXRhX2NudCk7XG4xMTAyOlx0RVhQT1JUX1NZTUJPTChpcF90dW5uZWxfbWV0YWRhdGFfY250KTtcbjExMDM6XHRcbjExMDQ6XHR2b2lkIGlwX3R1bm5lbF9uZWVkX21ldGFkYXRhKHZvaWQpXG4xMTA1Olx0e1xuMTEwNjpcdFx0c3RhdGljX2JyYW5jaF9pbmMoXHUwMDI2aXBfdHVubmVsX21ldGFkYXRhX2NudCk7XG4xMTA3Olx0fVxuMTEwODpcdEVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9uZWVkX21ldGFkYXRhKTtcbjExMDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5NzUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbiBleHBlcnQ6CgoqKkxvY2F0aW5nIHRoZSBMV1R1bm5lbCBFbmNhcHN1bGF0aW9uIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYGx3dHVubmVsX2VuY2FwX2FkZF9vcHNgLiBUaGF0IG5hbWUgc291bmRzIGZhbWlsaWFyLiBSaWdodCwgaXQmIzM5O3MgaW52b2x2ZWQgaW4gYWRkaW5nIGVuY2Fwc3VsYXRpb24gb3BlcmF0aW9ucyB3aXRoaW4gdGhlIExpbnV4IG5ldHdvcmtpbmcgc3RhY2suIE5vdywgd2hlcmUgZGlkIEkgc2VlIHRoYXQ/IExldCBtZSB0aGluay4uLiBBaCwgeWVzLCBiYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gSSYjMzk7bSBnb2luZyB0byBmaW5kIHRoaXMgaW4gYG5ldC9jb3JlL2x3dHVubmVsLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBsaWdodHdlaWdodCB0dW5uZWxpbmcgc2hvdWxkIHJlc2lkZS4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgaW4gdGhhdCBmaWxlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHd0dW5uZWxfZW5jYXBfYWRkX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9sd3R1bm5lbC5oPTEwND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBsd3R1bm5lbF9oZWFkcm9vbShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlLFxuLS1cbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMTEzLVxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoxMTQ6aW50IGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyAqb3AsXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oLTExNS1cdFx0XHQgICB1bnNpZ25lZCBpbnQgbnVtKTtcbi0tXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oPTE4ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBsd3R1bm5lbF9oZWFkcm9vbShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlLFxuLS1cbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMTg5LVxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoxOTA6c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfZW5jYXBfYWRkX29wcyhjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzICpvcCxcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMTkxLVx0XHRcdFx0XHQgdW5zaWduZWQgaW50IG51bSlcbi0tXG5uZXQvY29yZS9sd3RfYnBmLmM9Njc4PXN0YXRpYyBpbnQgX19pbml0IGJwZl9sd3RfaW5pdCh2b2lkKVxubmV0L2NvcmUvbHd0X2JwZi5jLTY3OS17XG5uZXQvY29yZS9sd3RfYnBmLmM6NjgwOlx0cmV0dXJuIGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXHUwMDI2YnBmX2VuY2FwX29wcywgTFdUVU5ORUxfRU5DQVBfQlBGKTtcbm5ldC9jb3JlL2x3dF9icGYuYy02ODEtfVxuLS1cbm5ldC9jb3JlL2x3dHVubmVsLmM9Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgX19yY3UgKlxuLS1cbm5ldC9jb3JlL2x3dHVubmVsLmMtODEtXG5uZXQvY29yZS9sd3R1bm5lbC5jOjgyOmludCBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgKm9wcyxcbm5ldC9jb3JlL2x3dHVubmVsLmMtODMtXHRcdFx0ICAgdW5zaWduZWQgaW50IG51bSlcbi0tXG5uZXQvY29yZS9sd3R1bm5lbC5jLTkxLX1cbm5ldC9jb3JlL2x3dHVubmVsLmM6OTI6RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfZW5jYXBfYWRkX29wcyk7XG5uZXQvY29yZS9sd3R1bm5lbC5jLTkzLVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9MTA4OT12b2lkIF9faW5pdCBpcF90dW5uZWxfY29yZV9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDk2LVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxMDk3Olx0bHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZpcF90dW5fbHd0X29wcywgTFdUVU5ORUxfRU5DQVBfSVApO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxMDk4Olx0bHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZpcDZfdHVuX2x3dF9vcHMsIExXVFVOTkVMX0VOQ0FQX0lQNik7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTEwOTktfVxuLS1cbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM9MzI0PWludCBpbGFfbHd0X2luaXQodm9pZClcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMzI1LXtcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6MzI2Olx0cmV0dXJuIGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXHUwMDI2aWxhX2VuY2FwX29wcywgTFdUVU5ORUxfRU5DQVBfSUxBKTtcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMzI3LX1cbi0tXG5uZXQvaXB2Ni9pb2FtNl9pcHR1bm5lbC5jPTU1ND1pbnQgX19pbml0IGlvYW02X2lwdHVubmVsX2luaXQodm9pZClcbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmMtNTU1LXtcbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmM6NTU2Olx0cmV0dXJuIGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXHUwMDI2aW9hbTZfaXB0dW5fb3BzLCBMV1RVTk5FTF9FTkNBUF9JT0FNNik7XG5uZXQvaXB2Ni9pb2FtNl9pcHR1bm5lbC5jLTU1Ny19XG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9Mzg0PWludCBfX2luaXQgcnBsX2luaXQodm9pZClcbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zODctXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozODg6XHRlcnIgPSBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFx1MDAyNnJwbF9vcHMsIExXVFVOTkVMX0VOQ0FQX1JQTCk7XG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zODktXHRpZiAoZXJyKVxuLS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz05NDM9aW50IF9faW5pdCBzZWc2X2lwdHVubmVsX2luaXQodm9pZClcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy05NDQte1xubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjk0NTpcdHJldHVybiBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFx1MDAyNnNlZzZfaXB0dW5fb3BzLCBMV1RVTk5FTF9FTkNBUF9TRUc2KTtcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy05NDYtfVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNjk3PWludCBfX2luaXQgc2VnNl9sb2NhbF9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI3MjgtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjcyOTpcdHJldHVybiBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFx1MDAyNnNlZzZfbG9jYWxfb3BzLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI3MzAtXHRcdFx0XHQgICAgICBMV1RVTk5FTF9FTkNBUF9TRUc2X0xPQ0FMKTtcbi0tXG5uZXQvbXBscy9tcGxzX2lwdHVubmVsLmM9Mjg4PXN0YXRpYyBpbnQgX19pbml0IG1wbHNfaXB0dW5uZWxfaW5pdCh2b2lkKVxubmV0L21wbHMvbXBsc19pcHR1bm5lbC5jLTI4OS17XG5uZXQvbXBscy9tcGxzX2lwdHVubmVsLmM6MjkwOlx0cmV0dXJuIGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXHUwMDI2bXBsc19pcHR1bl9vcHMsIExXVFVOTkVMX0VOQ0FQX01QTFMpO1xubmV0L21wbHMvbXBsc19pcHR1bm5lbC5jLTI5MS19XG4tLVxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jPTExNzc9c3RhdGljIGludCBfX2luaXQgeGZybWlfaW5pdCh2b2lkKVxuLS1cbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy0xMjA4LVxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jOjEyMDk6XHRsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFx1MDAyNnhmcm1pX2VuY2FwX29wcywgTFdUVU5ORUxfRU5DQVBfWEZSTSk7XG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmMtMTIxMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3NDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgTFdUVU5ORUwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSYjMzk7bSBsb29raW5nIGF0IGBpbmNsdWRlL25ldC9sd3R1bm5lbC5oYCwgc3BlY2lmaWNhbGx5IGxpbmUgMTg0LiBUaGUgY29kZSB0aGVyZSBoYXMgYW4gYCNpZiBJU19FTkFCTEVEKENPTkZJR19MV1RVTk5FTClgIGNvbmRpdGlvbmFsLiBIbW0sIHNvIHRoaXMgc2VjdGlvbiBpcyBjbGVhcmx5IGRlcGVuZGVudCBvbiB0aGUgYENPTkZJR19MV1RVTk5FTGAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjb25maXJtIHRoYXQgdGhpcyBtYWNybyBpcyBwcm9wZXJseSBkZWZpbmVkIGFuZCBjb25maWd1cmVkLiBUaW1lIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgaGVhZGVyIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbHd0dW5uZWwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0c3RhdGljIGlubGluZSB2b2lkIGx3dHVubmVsX3NldF9yZWRpcmVjdChzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4gMTgxOlx0e1xuIDE4MjpcdH1cbiAxODM6XHRcbiAxODQ6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBsd3R1bm5lbF9oZWFkcm9vbShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlLFxuIDE4NTpcdFx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBtdHUpXG4gMTg2Olx0e1xuIDE4NzpcdFx0cmV0dXJuIDA7XG4gMTg4Olx0fVxuIDE4OTpcdFxuIDE5MDpcdHN0YXRpYyBpbmxpbmUgaW50IGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyAqb3AsXG4gMTkxOlx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbnVtKVxuIDE5MjpcdHtcbiAxOTM6XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiAxOTQ6XHRcbiAxOTU6XHR9XG4gMTk2Olx0XG4gMTk3Olx0c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfZW5jYXBfZGVsX29wcyhjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzICpvcCxcbiAxOTg6XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBudW0pXG4gMTk5Olx0e1xuIDIwMDpcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDIwMTpcdH1cbiAyMDI6XHRcbiAyMDM6XHRzdGF0aWMgaW5saW5lIGludCBsd3R1bm5lbF92YWxpZF9lbmNhcF90eXBlKHUxNiBlbmNhcF90eXBlLFxuIDIwNDpcdFx0XHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzMwMwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBMV1RVTk5FTCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbiBhY3R1YWxseSBlbmFibGVzIGBDT05GSUdfTFdUVU5ORUxgLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIHRvIGZpbmQgaXQuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBuZXR3b3JraW5nIGRpcmVjdG9yeSwgYG5ldC9gLiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggc2VlbXMgdG8gYmUgYSBzaW1wbGUgYGdyZXBgLiBJJiMzOTtsbCBzZWFyY2ggZm9yICYjMzQ7Y29uZmlnIExXVFVOTkVMJiMzNDsgd2l0aGluIHRoZSBgbmV0L2AgZGlyZWN0b3J5LiBUaGF0IHNob3VsZCBwaW5wb2ludCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlIG9yIGZpbGVzIHdoZXJlIHRoaXMgb3B0aW9uIGlzIGRlZmluZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExXVFVOTkVMXFxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ0Mz1zb3VyY2UgXCYjMzQ7bmV0L2lmZS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy00NDQtXG5uZXQvS2NvbmZpZzo0NDU6Y29uZmlnIExXVFVOTkVMXG5uZXQvS2NvbmZpZy00NDYtXHRib29sIFwmIzM0O05ldHdvcmsgbGlnaHQgd2VpZ2h0IHR1bm5lbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1NzUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgbmV0L0tjb25maWdgLCB3aGljaCBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgYW55IG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEFuZCBzaW5jZSBJIGtub3cgbXkgd2F5IGFyb3VuZCB0aGUga2VybmVsIHNvdXJjZSwgSSBmaWd1cmUgdGhlIHJlbGV2YW50IG9wdGlvbnMgYXJlIGxpa2VseSBjbHVzdGVyZWQgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDQ0NS4gSXQmIzM5O3MgYSBicm9hZCBzdGFydGluZyBwb2ludCwgYnV0IEtjb25maWcgZmlsZXMgb2Z0ZW4gZm9sbG93IGEgbG9naWNhbCBzdHJ1Y3R1cmUsIGFuZCB0aGlzIGxpbmUgaXMgYXMgZ29vZCBhIGd1ZXNzIGFzIGFueS4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGEgc3BlY2lmaWMgb3B0aW9uIHRoYXQgcGlxdWVzIG15IGludGVyZXN0IG9yIGEgc2VjdGlvbiB0aGF0IGxlYWRzIG1lIHRvIHRoZSBuZXh0IHBpZWNlIG9mIHRoZSBwdXp6bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ0MDpcdHNvdXJjZSBcJiMzNDtuZXQvY2VwaC9LY29uZmlnXCYjMzQ7XG4gNDQxOlx0c291cmNlIFwmIzM0O25ldC9uZmMvS2NvbmZpZ1wmIzM0O1xuIDQ0MjpcdHNvdXJjZSBcJiMzNDtuZXQvcHNhbXBsZS9LY29uZmlnXCYjMzQ7XG4gNDQzOlx0c291cmNlIFwmIzM0O25ldC9pZmUvS2NvbmZpZ1wmIzM0O1xuIDQ0NDpcdFxuIDQ0NTpcdGNvbmZpZyBMV1RVTk5FTFxuIDQ0NjpcdFx0Ym9vbCBcJiMzNDtOZXR3b3JrIGxpZ2h0IHdlaWdodCB0dW5uZWxzXCYjMzQ7XG4gNDQ3Olx0XHRoZWxwXG4gNDQ4Olx0XHQgIFRoaXMgZmVhdHVyZSBwcm92aWRlcyBhbiBpbmZyYXN0cnVjdHVyZSB0byBzdXBwb3J0IGxpZ2h0IHdlaWdodFxuIDQ0OTpcdFx0ICB0dW5uZWxzIGxpa2UgbXBscy4gVGhlcmUgaXMgbm8gbmV0ZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBhIGxpZ2h0XG4gNDUwOlx0XHQgIHdlaWdodCB0dW5uZWwgZW5kcG9pbnQuIFR1bm5lbCBlbmNhcHN1bGF0aW9uIHBhcmFtZXRlcnMgYXJlIHN0b3JlZFxuIDQ1MTpcdFx0ICB3aXRoIGxpZ2h0IHdlaWdodCB0dW5uZWwgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGZpYiByb3V0ZXMuXG4gNDUyOlx0XG4gNDUzOlx0Y29uZmlnIExXVFVOTkVMX0JQRlxuIDQ1NDpcdFx0Ym9vbCBcJiMzNDtFeGVjdXRlIEJQRiBwcm9ncmFtIGFzIHJvdXRlIG5leHRob3AgYWN0aW9uXCYjMzQ7XG4gNDU1Olx0XHRkZXBlbmRzIG9uIExXVFVOTkVMIFx1MDAyNlx1MDAyNiBJTkVUXG4gNDU2Olx0XHRkZWZhdWx0IHkgaWYgTFdUVU5ORUw9eVxuIDQ1NzpcdFx0aGVscFxuIDQ1ODpcdFx0ICBBbGxvd3MgdG8gcnVuIEJQRiBwcm9ncmFtcyBhcyBhIG5leHRob3AgYWN0aW9uIGZvbGxvd2luZyBhIHJvdXRlXG4gNDU5Olx0XHQgIGxvb2t1cCBmb3IgaW5jb21pbmcgYW5kIG91dGdvaW5nIHBhY2tldHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTEzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIExXVFVOTkVMIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIExXVFVOTkVMIGlzIHNob3dpbmcgdXAgaW4gYSBidW5jaCBvZiB0aGVzZSB0dW5uZWxpbmcgYW5kIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBzZWUgaG93IGBpcF90dW5fYnVpbGRfc3RhdGVgIHBsYXlzIGludG8gYWxsIG9mIHRoaXMuIFRoYXQgZnVuY3Rpb24mIzM5O3MgZ290dGEgYmUga2V5IHRvIHRoZSBjb25uZWN0aW9uLCByaWdodD8gVGhlbiBJJiMzOTtsbCB0cmFjZSB0aHJvdWdoIHRoZSBjb2RlLCBhbmQgZmlndXJlIG91dCB3aG8mIzM5O3MgYWN0dWFsbHkgKnVzaW5nKiB0aGUgYGx3dHVubmVsX2J1aWxkX3N0YXRlYCBmdW5jdGlvbiwgb3IgdGhlIGBsd3Rfb3BzLSZndDtidWlsZF9zdGF0ZWAgZnVuY3Rpb24gcG9pbnRlci4gRmluZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwgdW5kZXJzdGFuZGluZyBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2J1aWxkX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbHd0dW5uZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9sd3R1bm5lbC5jPTExMT1FWFBPUlRfU1lNQk9MX0dQTChsd3R1bm5lbF9lbmNhcF9kZWxfb3BzKTtcbm5ldC9jb3JlL2x3dHVubmVsLmMtMTEyLVxubmV0L2NvcmUvbHd0dW5uZWwuYzoxMTM6aW50IGx3dHVubmVsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGVuY2FwX3R5cGUsXG5uZXQvY29yZS9sd3R1bm5lbC5jLTExNC1cdFx0XHQgc3RydWN0IG5sYXR0ciAqZW5jYXAsIHVuc2lnbmVkIGludCBmYW1pbHksXG4tLVxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMzEtXHRvcHMgPSByY3VfZGVyZWZlcmVuY2UobHd0dW5fZW5jYXBzW2VuY2FwX3R5cGVdKTtcbm5ldC9jb3JlL2x3dHVubmVsLmM6MTMyOlx0aWYgKGxpa2VseShvcHMgXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VidWlsZF9zdGF0ZSBcdTAwMjZcdTAwMjYgdHJ5X21vZHVsZV9nZXQob3BzLVx1MDAzZW93bmVyKSkpXG5uZXQvY29yZS9sd3R1bm5lbC5jLTEzMy1cdFx0Zm91bmQgPSB0cnVlO1xuLS1cbm5ldC9jb3JlL2x3dHVubmVsLmMtMTM2LVx0aWYgKGZvdW5kKSB7XG5uZXQvY29yZS9sd3R1bm5lbC5jOjEzNzpcdFx0cmV0ID0gb3BzLVx1MDAzZWJ1aWxkX3N0YXRlKG5ldCwgZW5jYXAsIGZhbWlseSwgY2ZnLCBsd3MsIGV4dGFjayk7XG5uZXQvY29yZS9sd3R1bm5lbC5jLTEzOC1cdFx0aWYgKHJldClcbi0tXG5uZXQvY29yZS9sd3R1bm5lbC5jLTE0MC1cdH0gZWxzZSB7XG5uZXQvY29yZS9sd3R1bm5lbC5jOjE0MTpcdFx0LyogZG9uJiMzOTt0IHJlbHkgb24gLUVPUE5PVFNVUFAgdG8gZGV0ZWN0IG1hdGNoIGFzIGJ1aWxkX3N0YXRlXG5uZXQvY29yZS9sd3R1bm5lbC5jLTE0Mi1cdFx0ICogaGFuZGxlcnMgY291bGQgcmV0dXJuIGl0XG4tLVxubmV0L2NvcmUvbHd0dW5uZWwuYy0xNDktfVxubmV0L2NvcmUvbHd0dW5uZWwuYzoxNTA6RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfYnVpbGRfc3RhdGUpO1xubmV0L2NvcmUvbHd0dW5uZWwuYy0xNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0Nzk4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTg2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogYGx3dHVubmVsX2J1aWxkX3N0YXRlYCBhbmQgQXNzb2NpYXRlZCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSByZWxhdGVkIHRvIGxpZ2h0d2VpZ2h0IHR1bm5lbHMgYW5kIG5ldGxpbmsgcm91dGUgY29uZmlndXJhdGlvbi4gIFNwZWNpZmljYWxseSwgYGx3dHVubmVsX2J1aWxkX3N0YXRlYCBnZXRzIGNhbGxlZCB3aGVuIHdlJiMzOTtyZSBzZXR0aW5nIHVwIHJvdXRlcyBvciBuZXh0aG9wcyB1c2luZyBOZXRsaW5rLCBsaWtlIHdpdGggYFJUQV9FTkNBUGAgYW5kIGBSVEFfRU5DQVBfVFlQRWAuICBUaGlzIGlzIGFsbCBhY2Nlc3NpYmxlIHRvIGV2ZW4gdW5wcml2aWxlZ2VkIHVzZXJzIGlmIHRoZXkmIzM5O3JlIHVzaW5nIHVzZXIgbmFtZXNwYWNlcywgb3IgaWYgdGhleSBoYXZlIGBDQVBfTkVUX0FETUlOYCBpbiBhIG5ldHdvcmsgbmFtZXNwYWNlLiBTeXprYWxsZXIgaXMga25vd24gdG8gYmUgaGl0dGluZyB0aGlzIGFyZWEgaGFyZCB3aXRoIG5ldGxpbmsgY29uZmlndXJhdGlvbnMsIHdoaWNoIGltbWVkaWF0ZWx5IGdldHMgbXkgYXR0ZW50aW9uLgoKTXkgZmlyc3QgY2hlY2sgaXMgdG8gc2VlIGlmIHRoaXMgY29kZSBpcyBldmVuICpyZWFjaGFibGUqIGluIGEgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGFuc3dlciBpcyBhIGRlZmluaXRpdmUgeWVzLCBpdCYjMzk7cyByaWdodCB0aGVyZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGU6IGBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jYCwgcGFydCBvZiBJUHY0IGFuZCBMV1RVTk5FTCByb3V0aW5nLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/ICBJJiMzOTttIGdvaW5nIHRvIHJ1biB0aHJvdWdoIHRoZSBwb3NpdGl2ZSBjcml0ZXJpYS4gVGhpcyBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBJdCB0b3VjaGVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBhbmQgaXQgbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nIG9mIGRhdGEgc3RydWN0dXJlcyBhbmQvb3IgYWxnb3JpdGhtIGZsb3dzLCB3aXRoIHRoZSBtYWluIGNoYW5nZSBiZWluZyB0aGUgcGxhY2VtZW50IG9mIGB0dW5faW5mby0mZ3Q7b3B0aW9uc19sZW4gPSBvcHRfbGVuO2AgYmVmb3JlIGNhbGxpbmcgYGlwX3R1bl9zZXRfb3B0c2AgaW4gYm90aCBgaXBfdHVuX2J1aWxkX3N0YXRlYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGVgLgoKT2theSwgbGV0JiMzOTtzIGJhY2sgdXAgYSBzZWNvbmQuIFdoeSB3YXMgdGhpcyBjaGFuZ2UgbWFkZT8gSSBzZWUgdGhleSYjMzk7cmUgaW5pdGlhbGl6aW5nIGBvcHRpb25zX2xlbmAgYmVmb3JlIGNhbGxpbmcgYGlwX3R1bl9zZXRfb3B0c2AgaW5zdGVhZCBvZiBhZnRlciwgYW5kIG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZy4gSWYgYGlwX3R1bl9zZXRfb3B0c2AgZmFpbHMsIGl0IGNhbGxzIGBsd3RzdGF0ZV9mcmVlKG5ld19zdGF0ZSk7YC4gVGhlbiB3aGF0PyBUaGUgY29kZSBnb2VzIG9uIHRvIGluaXRpYWxpemUgc29tZSBvdGhlciB0aGluZ3M6IGBkc3RfY2FjaGVfaW5pdGAsIGFuZCBpZiB0aGF0IGZhaWxzLCB0aGUgc3RhdGUgaXMgZnJlZWQuCgpJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgdG8gaW5pdGlhbGl6ZSB0aGUgYG9wdGlvbnNfbGVuYCBlYXJsaWVyIGlzIGltcG9ydGFudC4gIEJlY2F1c2UgdGhlIGBvcHRpb25zX2xlbmAgZmllbGQgaXMgdXNlZCB0byBkZWZpbmUgdGhlIHNpemUgb2YgYW4gYG9wdGlvbnNbXWAgYXJyYXkgaW4gdGhlIGBpcF90dW5uZWxfaW5mb2Agc3RydWN0LCB0aGlzIGluaXRpYWxpemF0aW9uIGlzIHVzZWQgZm9yIGNvbXBpbGVyIGluc3RydW1lbnRhdGlvbiB3aXRoIGBfX2NvdW50ZWRfYnlgIGNoZWNrcy4gIElmIGBvcHRpb25zX2xlbmAgaXMgemVybyAodW5pbml0aWFsaXplZCksIHdoZW4gYGlwX3R1bl9zZXRfb3B0c2Agd3JpdGVzIGludG8gYG9wdGlvbnNbXWAgYW4gYWNjZXNzIHRvIGBvcHRpb25zWzBdYCB3aWxsIHRyaXAgYENPTkZJR19VQlNBTl9CT1VORFNgISBUaGlzIGBvcHRpb25zX2xlbmAgaXMgY3J1Y2lhbCBmb3Igc3RhdGUgbWFuYWdlbWVudCBpbiBgaXBfdHVubmVsX2luZm9gLgoKVGhpcyBpcyBhIGNsZWFyIGxvZ2ljIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlLiAgSXQgaW1wYWN0cyBgaXBfdHVuX2J1aWxkX3N0YXRlYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGVgLCB3aGljaCBhcmUgZGlyZWN0bHkgaW4gdGhlIGNhbGwgY2hhaW4uCgpOb3csIG9uIHRvIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYTogbm90aGluZyBoZXJlIHNlZW1zIHRvIGJlIG5vbi1rZXJuZWwsIG5vbi1leGVjdXRhYmxlLCBvciB0aWVkIHRvIHVucmVhY2hhYmxlIGhhcmR3YXJlLiBXZSBkb24mIzM5O3QgaGF2ZSB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaGVyZSBlaXRoZXIuIFNvLCB0aGUgdmVyZGljdCBpcyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOb3csIHRpbWUgdG8gZGV0ZXJtaW5lIHRoZSBgRm9jdXNTeW1ib2xzYC4gV2hhdCBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IG1vZGlmaWVkIG9yIGFyZSBjbG9zZWx5IGludm9sdmVkPyBgaXBfdHVuX2J1aWxkX3N0YXRlYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGVgIGFyZSB0aGUga2V5IHBsYXllcnMuICBgaXBfdHVuX3NldF9vcHRzYCBpc24mIzM5O3QgZGlyZWN0bHkgbW9kaWZpZWQgYnV0IGlzIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciwgYW5kIHRoYXQgY291bGQgYmUgaW1wb3J0YW50IHRvby4KCkFyZSB0aGVzZSBmdW5jdGlvbnMgbm9uLXViaXF1aXRvdXM/IFllcywgdGhleSYjMzk7cmUgc3BlY2lmaWMgdG8gSVAgYW5kIElQdjYgdHVubmVsIGVuY2FwLiBBcmUgdGhleSBzdGF0aWM/IFRoZXkgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGluIGBpcF90dW5uZWxfY29yZS5jYCwgYnV0IHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4gZm9yIHVzZSBpbiBgbHd0dW5uZWxfZW5jYXBfb3BzIGlwX3R1bl9sd3Rfb3BzYCBhbmQgYGlwNl90dW5fbHd0X29wc2AsIG1lYW5pbmcgdGhleSAqY2FuJiMzOTt0KiBiZSBpbmxpbmVkIGFuZCBhcmUgYWNjZXNzaWJsZSBhcyBzeW1ib2xzLiAgYGx3dHVubmVsX2J1aWxkX3N0YXRlYCBjYWxscyB0aGVtIHZpYSBgb3BzLSZndDtidWlsZF9zdGF0ZWAsIHdoaWNoIGNvbmZpcm1zIHRoZWlyIHZpc2liaWxpdHkgYXMgc3ltYm9scy4gQnV0LCBgaXBfdHVuX2J1aWxkX3N0YXRlYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGVgIGFyZSB0aGUgZnVuY3Rpb25zIHdoZXJlIHRoZSBjaGFuZ2VzIGFyZSBtYWRlLCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZW0uIGBsd3R1bm5lbF9idWlsZF9zdGF0ZWAgaXMgYSBtb3JlIGdlbmVyYWwgZGlzcGF0Y2hlciwgc28gbGV0JiMzOTtzIHN0aWNrIHdpdGggdGhlIG1vcmUgcHJlY2lzZSBgaXBfdHVuX2J1aWxkX3N0YXRlYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGVgLgoKTmV4dCBzdGVwLCBgRW5hYmxlQ29uZmlnc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGtlcm5lbCBjb25maWdzIGFyZSBuZWNlc3NhcnkuIEkmIzM5O2xsIGNoZWNrIEtjb25maWcgZm9yIGBMV1RVTk5FTGAgYW5kIElQIHR1bm5lbHMuIEkgYWxzbyBuZWVkIHRvIHNlYXJjaCB0aGUgY29kZSBiYXNlIGZvciBob3cgYENPTkZJR19MV1RVTk5FTGAgaXMgdXNlZCB3aXRoIGBpcF90dW5uZWxfY29yZS5jYCB0byBzZWUgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19MV1RVTk5FTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9sd3R1bm5lbC5oPTM5PXN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMge1xuLS1cbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtNTUtXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oOjU2OiNpZmRlZiBDT05GSUdfTFdUVU5ORUxcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtNTctXG4tLVxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0yMDM9c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfdmFsaWRfZW5jYXBfdHlwZSh1MTYgZW5jYXBfdHlwZSxcbi0tXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oLTIwNS17XG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oOjIwNjpcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q09ORklHX0xXVFVOTkVMIGlzIG5vdCBlbmFibGVkIGluIHRoaXMga2VybmVsXCYjMzQ7KTtcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMjA3LVx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmluY2x1ZGUvbmV0L2x3dHVubmVsLmg9MjYxPXN0YXRpYyBpbmxpbmUgaW50IGx3dHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oLTI2NS1cbmluY2x1ZGUvbmV0L2x3dHVubmVsLmg6MjY2OiNlbmRpZiAvKiBDT05GSUdfTFdUVU5ORUwgKi9cbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMjY3LVxuLS1cbmluY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oPTExPXN0cnVjdCBuZXRuc19uZiB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmgtMTctXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqbmZfbG9nX2Rpcl9oZWFkZXI7XG5pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaDoxODojaWZkZWYgQ09ORklHX0xXVFVOTkVMXG5pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaC0xOS1cdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpuZl9sd3RubF9kaXJfaGVhZGVyO1xuLS1cbm5ldC9jb3JlL01ha2VmaWxlPTM3PW9iai0kKENPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQpICYjNDM7PSBuZXRjbGFzc2lkX2Nncm91cC5vXG5uZXQvY29yZS9NYWtlZmlsZTozODpvYmotJChDT05GSUdfTFdUVU5ORUwpICYjNDM7PSBsd3R1bm5lbC5vXG5uZXQvY29yZS9NYWtlZmlsZTozOTpvYmotJChDT05GSUdfTFdUVU5ORUxfQlBGKSAmIzQzOz0gbHd0X2JwZi5vXG5uZXQvY29yZS9NYWtlZmlsZS00MC1vYmotJChDT05GSUdfRFNUX0NBQ0hFKSAmIzQzOz0gZHN0X2NhY2hlLm9cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02ODgwPXN0YXRpYyBpbnQgYnBmX3B1c2hfc2VnNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHlwZSwgdm9pZCAqaGRyLCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5MTMtXG5uZXQvY29yZS9maWx0ZXIuYzo2OTE0OiNpZiBJU19FTkFCTEVEKENPTkZJR19MV1RVTk5FTF9CUEYpXG5uZXQvY29yZS9maWx0ZXIuYy02OTE1LXN0YXRpYyBpbnQgYnBmX3B1c2hfaXBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqaGRyLCB1MzIgbGVuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY5MjI9QlBGX0NBTExfNChicGZfbHd0X2luX3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLCB2b2lkICosIGhkcixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTMwLSNlbmRpZlxubmV0L2NvcmUvZmlsdGVyLmM6NjkzMTojaWYgSVNfRU5BQkxFRChDT05GSUdfTFdUVU5ORUxfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtNjkzMi1cdGNhc2UgQlBGX0xXVF9FTkNBUF9JUDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02OTQwPUJQRl9DQUxMXzQoYnBmX2x3dF94bWl0X3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5NDMtXHRzd2l0Y2ggKHR5cGUpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjY5NDQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0xXVFVOTkVMX0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NDUtXHRjYXNlIEJQRl9MV1RfRU5DQVBfSVA6XG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0yMzk9b2JqLSQoQ09ORklHX0lQX1ZTKSAmIzQzOz0gaXB2cy9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTI0MS0jIGx3dHVubmVsXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjI0MjpvYmotJChDT05GSUdfTFdUVU5ORUwpICYjNDM7PSBuZl9ob29rc19sd3R1bm5lbC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTI0My1cbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYz04MDE9aW50IF9faW5pdCBuZXRmaWx0ZXJfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTgwOC1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjgwOTojaWZkZWYgQ09ORklHX0xXVFVOTkVMXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy04MTAtXHRyZXQgPSBuZXRmaWx0ZXJfbHd0dW5uZWxfaW5pdCgpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTgxOS1lcnJfbG9nX3Blcm5ldDpcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjgyMDojaWZkZWYgQ09ORklHX0xXVFVOTkVMXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy04MjEtXHRuZXRmaWx0ZXJfbHd0dW5uZWxfZmluaSgpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfaW50ZXJuYWxzLmg9MzA9aW50IF9faW5pdCBuZXRmaWx0ZXJfbG9nX2luaXQodm9pZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2ludGVybmFscy5oLTMxLVxubmV0L25ldGZpbHRlci9uZl9pbnRlcm5hbHMuaDozMjojaWZkZWYgQ09ORklHX0xXVFVOTkVMXG5uZXQvbmV0ZmlsdGVyL25mX2ludGVybmFscy5oLTMzLS8qIG5mX2hvb2tzX2x3dHVubmVsLmMgKi9cbi0tXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmM9MzI4PXN0YXRpYyB2b2lkIHByb2JlX2tlcm5lbF9pbWFnZV9jb25maWcoY29uc3QgY2hhciAqZGVmaW5lX3ByZWZpeClcbi0tXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmMtMzc0LVx0XHQvKiBCUEZfUFJPR19UWVBFX0xXVF8qIGFuZCByZWxhdGVkIGhlbHBlcnMgKi9cbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYzozNzU6XHRcdHsgXCYjMzQ7Q09ORklHX0xXVFVOTkVMX0JQRlwmIzM0OywgfSxcbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYy0zNzYtXHRcdC8qIEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCBUQyAodHJhZmZpYyBjb250cm9sKSBhY3Rpb25zICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZz01NT1DT05GSUdfTElWRVBBVENIPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc6NTY6Q09ORklHX0xXVFVOTkVMPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc6NTc6Q09ORklHX0xXVFVOTkVMX0JQRj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLTU4LUNPTkZJR19NT0RVTEVfU0lHPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyMjMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMV1RVTk5FTCBEZXBlbmRlbmN5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgaW5jbHVkZS9uZXQvbHd0dW5uZWwuaGAgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXJvdW5kIGBDT05GSUdfTFdUVU5ORUxgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYGx3dHVubmVsX2VuY2FwX2FkZF9vcHNgIGlzIGVpdGhlciBkZWZpbmVkIGFzIGEgcHJvcGVyIGZ1bmN0aW9uIG9yLCBpZiBgQ09ORklHX0xXVFVOTkVMYCBpc24mIzM5O3QgZW5hYmxlZCwgYmVjb21lcyBhbiBpbmxpbmUgZnVuY3Rpb24gdGhhdCBzaW1wbHkgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGUgYGx3dHVubmVsX3ZhbGlkX2VuY2FwX3R5cGVgIGZ1bmN0aW9uIGlzIGFsc28gZGVmaW5lZCB0byByZXR1cm4gYC1FT1BOT1RTVVBQYCBpZiB0aGUgY29uZmlnIGlzbiYjMzk7dCBlbmFibGVkLgoKVGhlcmVmb3JlLCBpdCYjMzk7cyBjbGVhcjogaWYgYENPTkZJR19MV1RVTk5FTGAgaXMgb2ZmLCB0aGVyZSYjMzk7cyBubyB3YXkgdG8gYWRkIGFueSBsd3R1bm5lbCBlbmNhcHN1bGF0aW9uIG9wZXJhdGlvbnMsIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiAqZG9lcyogdGhhdCwgb3IgdG8gdmFsaWRhdGUgdGhlIHR5cGUuIE1vcmUgaW1wb3J0YW50bHksIHRoaXMgbWVhbnMgY2FsbHMgdG8gYnVpbGQgdGhlIHR1bm5lbCBzdGF0ZSwgaW4gZnVuY3Rpb25zIHN1Y2ggYXMgYGx3dHVubmVsX2J1aWxkX3N0YXRlYCwgd2lsbCAqYWxzbyogZmFpbCB3aXRoIGAtRU9QTk9UU1VQUGAgaWYgYENPTkZJR19MV1RVTk5FTGAgaXNuJiMzOTt0IHNldC4gU28sIHRoZSBgbHd0dW5uZWxfZW5jYXBfYWRkX29wc2AgaXMgY3JpdGljYWwuIElmIGl0JiMzOTtzIG5vdCBkZWZpbmVkLCB3ZSYjMzk7bGwgbmV2ZXIgcmVhY2ggYGlwX3R1bl9idWlsZF9zdGF0ZWAgb3IgYGlwNl90dW5fYnVpbGRfc3RhdGVgLgoKSSBhbHNvIHJlbWVtYmVyIHRoYXQgYElORVRgIGlzIHJlcXVpcmVkIGZvciBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AgdG8gYmUgYnVpbHQsIGJlY2F1c2Ugb2YgdGhlIGRpcmVjdG9yeSAoYG5ldC9pcHY0L2ApLgoKU28sIGBDT05GSUdfTFdUVU5ORUxgIGlzIGEgKmhhcmQqIHJlcXVpcmVtZW50IGhlcmUuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBkZXBlbmRlbmNpZXMgYXJlIHByb3Blcmx5IGhhbmRsZWQgaW4gdGhlIGJ1aWxkIHByb2Nlc3MuIExldCBtZSBjaGVjayB0aGUgYG5ldC9NYWtlZmlsZWAgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBkZXBlbmRlbmNpZXMgYXJlIGJlaW5nIGVuZm9yY2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfTkVURklMVEVSKVx0XHQmIzQzOz0gbmV0ZmlsdGVyL1xubmV0L01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19JTkVUKVx0XHQmIzQzOz0gaXB2NC9cbm5ldC9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfVExTKVx0XHQmIzQzOz0gdGxzL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDA0NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsJiMzOTtzIFR1bm5lbGluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBDT05GSUdfSU5FVGAgKmRlZmluaXRlbHkqIHB1bGxzIGluIGV2ZXJ5dGhpbmcgdW5kZXIgYG5ldC9pcHY0L2AsIGFuZCB0aGF0IGBuZXQvaXB2NC9NYWtlZmlsZWAgaXMgZ29pbmcgdG8gaW5jbHVkZSBgaXBfdHVubmVsX2NvcmUuY2Agbm8gbWF0dGVyIHdoYXQgd2hlbiBJUHY0IGlzIGFjdGl2ZS4gR29vZC4gQW5kLCBhcyBJIHN1c3BlY3RlZCwgYENPTkZJR19MV1RVTk5FTGAgaXMgdGhlIGtleSB0byBlbmFibGluZyB0aGUgbGlnaHR3ZWlnaHQgdHVubmVsaW5nIGNvZGUgd2l0aCBgbmV0L2NvcmUvbHd0dW5uZWwuY2AsIHdoaWNoLCBpbiB0dXJuLCBwcm92aWRlcyB1cyB3aXRoIGBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzYCBhbmQgYGx3dHVubmVsX2J1aWxkX3N0YXRlYC4gTWFrZXMgc2Vuc2UuIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBjb25zaWRlciBJUHY2LgoKSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSB3aXRoIElQdjYuIE15IGJyYWluIGlzIHN0YXJ0aW5nIHRvIGNodXJuIG9uIHRoZSBpbXBsaWNhdGlvbnMgZm9yIElQdjYgcm91dGVzIHdpdGggTFdUVU5ORUwuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgYGlwNl90dW5fYnVpbGRfc3RhdGVgLiBJcyBgQ09ORklHX0lQVjZgICphbHNvKiBhIG5lY2Vzc2FyeSBjb25kaXRpb24gZm9yIExXVFVOTkVMLWJhc2VkIElQdjYgcm91dGluZz8gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aG9zZSBJUHY2IHJvdXRlcyBhY3R1YWxseSAqdXNlKiBMV1RVTk5FTC4gSSBiZXR0ZXIgc3RhcnQgbG9va2luZyBhdCB0aGUgSVB2NiByb3V0ZSBoYW5kbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHd0dW5uZWxfYnVpbGRfc3RhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0xMjA9aW50IGx3dHVubmVsX3ZhbGlkX2VuY2FwX3R5cGVfYXR0cihzdHJ1Y3QgbmxhdHRyICphdHRyLCBpbnQgbGVuLFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0xMjEtXHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoxMjI6aW50IGx3dHVubmVsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGVuY2FwX3R5cGUsXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oLTEyMy1cdFx0XHQgc3RydWN0IG5sYXR0ciAqZW5jYXAsXG4tLVxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0yMTA9c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfdmFsaWRfZW5jYXBfdHlwZV9hdHRyKHN0cnVjdCBubGF0dHIgKmF0dHIsIGludCBsZW4sXG4tLVxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0yMTgtXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oOjIxOTpzdGF0aWMgaW5saW5lIGludCBsd3R1bm5lbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUxNiBlbmNhcF90eXBlLFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0yMjAtXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqZW5jYXAsXG4tLVxubmV0L2NvcmUvbHd0dW5uZWwuYz0xMTE9RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfZW5jYXBfZGVsX29wcyk7XG5uZXQvY29yZS9sd3R1bm5lbC5jLTExMi1cbm5ldC9jb3JlL2x3dHVubmVsLmM6MTEzOmludCBsd3R1bm5lbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUxNiBlbmNhcF90eXBlLFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMTQtXHRcdFx0IHN0cnVjdCBubGF0dHIgKmVuY2FwLCB1bnNpZ25lZCBpbnQgZmFtaWx5LFxuLS1cbm5ldC9jb3JlL2x3dHVubmVsLmMtMTQ5LX1cbm5ldC9jb3JlL2x3dHVubmVsLmM6MTUwOkVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX2J1aWxkX3N0YXRlKTtcbm5ldC9jb3JlL2x3dHVubmVsLmMtMTUxLVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz02NDI9aW50IGZpYl9uaF9jb21tb25faW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfbmhfY29tbW9uICpuaGMsXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTY1Ni1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzo2NTc6XHRcdGVyciA9IGx3dHVubmVsX2J1aWxkX3N0YXRlKG5ldCwgZW5jYXBfdHlwZSwgZW5jYXAsXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtNjU4LVx0XHRcdFx0XHQgICBuaGMtXHUwMDNlbmhjX2ZhbWlseSwgY2ZnLCBcdTAwMjZsd3RzdGF0ZSxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9OTA3PXN0YXRpYyBpbnQgZmliX2VuY2FwX21hdGNoKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGVuY2FwX3R5cGUsXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTkxOC1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzo5MTk6XHRyZXQgPSBsd3R1bm5lbF9idWlsZF9zdGF0ZShuZXQsIGVuY2FwX3R5cGUsIGVuY2FwLCBBRl9JTkVULFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTkyMC1cdFx0XHRcdCAgIGNmZywgXHUwMDI2bHd0c3RhdGUsIGV4dGFjayk7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI0MjE9c3RhdGljIGludFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI0MjI6c2VnNl9sb2NhbF9sd3R1bm5lbF9idWlsZF9zdGF0ZShzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsIGNvbnN0IHZvaWQgKmNmZyxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDIzLVx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNTE3PXN0YXRpYyBpbnQgc2VnNl9sb2NhbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjU0OS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNTUwOlx0ZXJyID0gc2VnNl9sb2NhbF9sd3R1bm5lbF9idWlsZF9zdGF0ZShzbHd0LCBjZmcsIGV4dGFjayk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjU1MS1cdGlmIChlcnIgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzg5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBJUHY2IGFuZCBMV1RVTk5FTCBJbnRlcmFjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGhvdyB0aGUgYExXVFVOTkVMX0VOQ0FQX0lQNmAgZnVuY3Rpb25hbGl0eSwgb3IgcG90ZW50aWFsbHkgYGx3dHVubmVsX2J1aWxkX3N0YXRlYCwgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIElQdjYgb3IgbmV4dCBob3AgY29udGV4dHMuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGVzZSBhcmUgY2VudHJhbCB0byB0aGUgZW5jYXBzdWxhdGlvbiBwcm9jZXNzLCBidXQgSSB3YW50IHRvIHZlcmlmeSB0aGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgSVB2NiBzcGVjaWZpY2FsbHkgbGV2ZXJhZ2VzIHRoZSBMV1RVTk5FTCBpbmZyYXN0cnVjdHVyZS4KClRvIGRpZyBpbnRvIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgZ3JlcC4gSSYjMzk7bGwgc2VhcmNoIGZvciBjYWxscyB0byBgbHd0dW5uZWxfYnVpbGRfc3RhdGVgIGFjcm9zcyB0aGUgYG5ldC9pcHY2YCBkaXJlY3RvcnkgYW5kIHRoZSBicm9hZGVyIGBuZXQvYCBkaXJlY3Rvcnkgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIGNhbGwgc2l0ZXMgYW5kIHByb3ZpZGUgY2x1ZXMgYWJvdXQgdGhlIGludGVncmF0aW9uIHBvaW50cyBhbmQgZGVwZW5kZW5jaWVzIGJldHdlZW4gSVB2NiBhbmQgdGhlIExXVFVOTkVMIG1lY2hhbmlzbS4gQnkgb2JzZXJ2aW5nIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNhbGxzLCBJIGNhbiBkZWR1Y2UgaG93IGl0IGhhbmRsZXMgZW5jYXBzdWxhdGVkIElQdjYgdHJhZmZpYyBhbmQgaG9wZWZ1bGx5IGdhaW4gYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHd0dW5uZWxfYnVpbGRfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2x3dHVubmVsLmM9MTExPUVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX2VuY2FwX2RlbF9vcHMpO1xubmV0L2NvcmUvbHd0dW5uZWwuYy0xMTItXG5uZXQvY29yZS9sd3R1bm5lbC5jOjExMzppbnQgbHd0dW5uZWxfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCB1MTYgZW5jYXBfdHlwZSxcbm5ldC9jb3JlL2x3dHVubmVsLmMtMTE0LVx0XHRcdCBzdHJ1Y3QgbmxhdHRyICplbmNhcCwgdW5zaWduZWQgaW50IGZhbWlseSxcbi0tXG5uZXQvY29yZS9sd3R1bm5lbC5jLTE0OS19XG5uZXQvY29yZS9sd3R1bm5lbC5jOjE1MDpFWFBPUlRfU1lNQk9MX0dQTChsd3R1bm5lbF9idWlsZF9zdGF0ZSk7XG5uZXQvY29yZS9sd3R1bm5lbC5jLTE1MS1cbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9NjQyPWludCBmaWJfbmhfY29tbW9uX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy02NTYtXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6NjU3Olx0XHRlcnIgPSBsd3R1bm5lbF9idWlsZF9zdGF0ZShuZXQsIGVuY2FwX3R5cGUsIGVuY2FwLFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTY1OC1cdFx0XHRcdFx0ICAgbmhjLVx1MDAzZW5oY19mYW1pbHksIGNmZywgXHUwMDI2bHd0c3RhdGUsXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTkwNz1zdGF0aWMgaW50IGZpYl9lbmNhcF9tYXRjaChzdHJ1Y3QgbmV0ICpuZXQsIHUxNiBlbmNhcF90eXBlLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy05MTgtXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6OTE5Olx0cmV0ID0gbHd0dW5uZWxfYnVpbGRfc3RhdGUobmV0LCBlbmNhcF90eXBlLCBlbmNhcCwgQUZfSU5FVCxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy05MjAtXHRcdFx0XHQgICBjZmcsIFx1MDAyNmx3dHN0YXRlLCBleHRhY2spO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNDIxPXN0YXRpYyBpbnRcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDIyOnNlZzZfbG9jYWxfbHd0dW5uZWxfYnVpbGRfc3RhdGUoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LCBjb25zdCB2b2lkICpjZmcsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQyMy1cdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjUxNz1zdGF0aWMgaW50IHNlZzZfbG9jYWxfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI1NDktXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjU1MDpcdGVyciA9IHNlZzZfbG9jYWxfbHd0dW5uZWxfYnVpbGRfc3RhdGUoc2x3dCwgY2ZnLCBleHRhY2spO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI1NTEtXHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjM2NQoJCQkJCQkJb3V0cHV0OiAxODYKCQkJCQkJCXRob3VnaHRzOiA3MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTGlnaHR3ZWlnaHQgVHVubmVsIEluaXRpYWxpemF0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IGhvdyBsaWdodHdlaWdodCB0dW5uZWxzIGFyZSBpbml0aWFsaXplZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBmaWJfbmhfY29tbW9uX2luaXRgLiBUaGlzIGZ1bmN0aW9uIGlzIGtleSBiZWNhdXNlIGl0IGhhbmRsZXMgbmV4dGhvcCBpbml0aWFsaXphdGlvbiwgd2hldGhlciBpdCYjMzk7cyBJUHY0IG9yIElQdjYuIFdoZW4gYSByb3V0ZSBvciBuZXh0aG9wIGlzIGNyZWF0ZWQgYW5kIHVzZXMgYExXVFVOTkVMX0VOQ0FQX0lQYCBvciBgTFdUVU5ORUxfRU5DQVBfSVA2YCAodmlhIGBSVEFfRU5DQVBfVFlQRWApLCBgZmliX25oX2NvbW1vbl9pbml0YCBjYWxscyBgbHd0dW5uZWxfYnVpbGRfc3RhdGVgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zOyBgbHd0dW5uZWxfYnVpbGRfc3RhdGVgIHRoZW4gdXNlcyBgcmN1X2RlcmVmZXJlbmNlYCB0byBnZXQgdGhlIHJlbGV2YW50IHR1bm5lbCBlbmNhcHN1bGF0aW9uIHR5cGUsIGFuZCBjYWxscyB0aGUgYXBwcm9wcmlhdGUgYGJ1aWxkX3N0YXRlYCBmdW5jdGlvbi4gRm9yIElQIHR1bm5lbHMsIGl0JiMzOTtzIGBpcF90dW5fYnVpbGRfc3RhdGVgLCBhbmQgZm9yIElQdjYgdHVubmVscywgaXQmIzM5O3MgYGlwNl90dW5fYnVpbGRfc3RhdGVgLiBCb3RoIHJlc2lkZSBpbiBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AuCgpOb3csIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMgYXJlIGltcG9ydGFudC4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYExXVFVOTkVMYCBhbmQgYElORVRgIGFyZSBlc3NlbnRpYWwuIEZvciBJUHY2IHJvdXRlcywgYElQVjZgIGlzIGFsc28gbmVlZGVkLiBJIGluaXRpYWxseSBsb29rZWQgZm9yIG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHdpdGhpbiBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AsIHN1Y2ggYXMgYENPTkZJR19EU1RfQ0FDSEVgLCBidXQgSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgYW5kIGBDT05GSUdfTFdUVU5ORUxgIHNlZW1zIHRvIGJlIHN1ZmZpY2llbnQgYXMgYSBzdGFuZGFsb25lIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhcyBpdCBoYXMgbm8gZGVwZW5kZW5jaWVzIGl0c2VsZi4gYENPTkZJR19JTkVUYCBjb3ZlcnMgdGhlIHJlbGV2YW50IElQdjQgY29kZS4KCkxldCYjMzk7cyBzdW1tYXJpemUgdGhlIGtleSBmaW5kaW5nczoKCjEuICAqKldvcnRoRnV6emluZyoqOiBZZXMsIGRlZmluaXRlbHkuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbW9kaWZpZWQsIHJlYWNoYWJsZSBjb2RlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIChgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2ApLiBUaGlzIGlzIHNpZ25pZmljYW50LgoyLiAgKipGb2N1c1N5bWJvbHMqKjogVGhlIHN5bWJvbHMgSSBuZWVkIHRvIHRhcmdldCBhcmU6IGBpcF90dW5fYnVpbGRfc3RhdGVgIGFuZCBgaXA2X3R1bl9idWlsZF9zdGF0ZWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGludm9sdmVkIGluIGJ1aWxkaW5nIHRoZSB0dW5uZWwgc3RhdGUuCjMuICAqKkVuYWJsZUNvbmZpZ3MqKjogVGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmU6IGBJTkVUYCwgYExXVFVOTkVMYCwgYW5kIGBJUFY2YC4gVGhpcyBpcyB0aGUgbWluaW1hbCBzZXQuCjQuICAqKlJlYXNvbmluZyoqOiBUaGUgY3JpdGljYWwgY2hhbmdlIGlzIHRoYXQgYHR1bl9pbmZvLSZndDtvcHRpb25zX2xlbmAgaXMgbm93IGluaXRpYWxpemVkICpiZWZvcmUqIHRoZSBgaXBfdHVuX3NldF9vcHRzKClgIGNhbGwgaW4gYm90aCBgaXBfdHVuX2J1aWxkX3N0YXRlKClgIGFuZCBgaXA2X3R1bl9idWlsZF9zdGF0ZSgpYC4gVGhlIHJlYWNoYWJpbGl0eSBjb21lcyBmcm9tIG5ldGxpbmsgcm91dGUvbmV4dGhvcCBjb25maWd1cmF0aW9uIHNwZWNpZnlpbmcgbGlnaHR3ZWlnaHQgdHVubmVsIGVuY2Fwc3VsYXRpb24gKGBSVEFfRU5DQVBgIHdpdGggZWl0aGVyIGBMV1RVTk5FTF9FTkNBUF9JUGAgb3IgYExXVFVOTkVMX0VOQ0FQX0lQNmApLiBUaGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBpbml0aWFsaXphdGlvbiBvZiByZWFjaGFibGUgc3RhdGUgYW5kIHRoZSBoYW5kbGluZyBvZiBvcHRpb25zIHdoZW4gYSB0dW5uZWwgcm91dGUgaXMgY3JlYXRlZC4KCkkgYW0gc2F0aXNmaWVkIHRoYXQgbXkgYW5hbHlzaXMgaXMgc291bmQuIExldCYjMzk7cyBwcm9jZWVkIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF90dW5fYnVpbGRfc3RhdGUmIzM0OywKICAgICYjMzQ7aXA2X3R1bl9idWlsZF9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMsIG1vdmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gYmVmb3JlIGlwX3R1bl9zZXRfb3B0cygpIGluIGJvdGggaXBfdHVuX2J1aWxkX3N0YXRlKCkgYW5kIGlwNl90dW5fYnVpbGRfc3RhdGUoKS4gVGhpcyBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayByb3V0ZS9uZXh0aG9wIHJlcXVlc3RzIGNvbmZpZ3VyaW5nIGxpZ2h0d2VpZ2h0IHR1bm5lbCBlbmNhcHN1bGF0aW9uIChMV1RVTk5FTF9FTkNBUF9JUCBhbmQgTFdUVU5ORUxfRU5DQVBfSVA2KS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0dW5uZWwgb3B0aW9uIHBhcnNpbmcgYW5kIGJvdW5kcyBjaGVja2luZyBvbiB0dW5uZWwgc3RhdGUgY3JlYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TFdUVU5ORUwmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3R1bl9idWlsZF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtpcDZfdHVuX2J1aWxkX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYywgbW92aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiBiZWZvcmUgaXBfdHVuX3NldF9vcHRzKCkgaW4gYm90aCBpcF90dW5fYnVpbGRfc3RhdGUoKSBhbmQgaXA2X3R1bl9idWlsZF9zdGF0ZSgpLiBUaGlzIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIHJvdXRlL25leHRob3AgcmVxdWVzdHMgY29uZmlndXJpbmcgbGlnaHR3ZWlnaHQgdHVubmVsIGVuY2Fwc3VsYXRpb24gKExXVFVOTkVMX0VOQ0FQX0lQIGFuZCBMV1RVTk5FTF9FTkNBUF9JUDYpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHR1bm5lbCBvcHRpb24gcGFyc2luZyBhbmQgYm91bmRzIGNoZWNraW5nIG9uIHR1bm5lbCBzdGF0ZSBjcmVhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpcF90dW5fYnVpbGRfc3RhdGUoKWAgYW5kIGBpcDZfdHVuX2J1aWxkX3N0YXRlKClgIHRvIGluaXRpYWxpemUgYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtgIHByaW9yIHRvIGNhbGxpbmcgYGlwX3R1bl9zZXRfb3B0cygpYCwgcmF0aGVyIHRoYW4gYWZ0ZXJ3YXJkcy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGZsZXhpYmxlIGFycmF5IG1lbWJlciBgaW5mby1cdTAwM2VvcHRpb25zYCAod2hpY2ggaXMgYW5ub3RhdGVkIHdpdGggYF9fY291bnRlZF9ieShvcHRpb25zX2xlbilgKSBoYXMgaXRzIGNvdW50ZXIgcG9wdWxhdGVkIGJlZm9yZSBhY2Nlc3MuXG5cblJlZ2FyZGluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb246XG4tIFRoZSBgc3RydWN0IGx3dHVubmVsX3N0YXRlYCBhbmQgaXRzIGVtYmVkZGVkIGBzdHJ1Y3QgaXBfdHVubmVsX2luZm9gIGFyZSBhbGxvY2F0ZWQgdmlhIGBsd3R1bm5lbF9zdGF0ZV9hbGxvYygpYCwgd2hpY2ggdXNlcyBga3phbGxvYygpYCB3aXRoIGBHRlBfQVRPTUlDYC4gQ29uc2VxdWVudGx5LCBhbGwgYWxsb2NhdGVkIGJ5dGVzIChpbmNsdWRpbmcgaGVhZGVycyBhbmQgdHJhaWxpbmcgb3B0aW9uIGJ1ZmZlcnMpIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGF0IGFsbG9jYXRpb24gdGltZS5cbi0gTW92aW5nIHRoZSBhc3NpZ25tZW50IG9mIGBvcHRpb25zX2xlbmAgZWFybGllciBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9maWVsZHMgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSWYgYGlwX3R1bl9zZXRfb3B0cygpYCBmYWlscywgdGhlIHN0YXRlIGlzIGZyZWVkIGltbWVkaWF0ZWx5LlxuXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZCwgc3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50IHRvIHZhbGlkYXRlIHRoZXNlIGNoYW5nZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ1NmY1ZWY0YWYyM2NkMGRkYjJiM2FjNGVjZTE5OWFhMzMyMWZmZDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAwNjoyMTo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMgYi9uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jCmluZGV4IDUxNjhkNTQ2ZWEyZmQuLjhmYjQ3NDJhY2E5MjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYwpAQCAtNzExLDYgJiM0Mzs3MTEsNyBAQCBzdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsCiAJbmV3X3N0YXRlLSZndDt0eXBlID0gTFdUVU5ORUxfRU5DQVBfSVA7CiAKIAl0dW5faW5mbyA9IGx3dF90dW5faW5mbyhuZXdfc3RhdGUpOwomIzQzOwl0dW5faW5mby0mZ3Q7b3B0aW9uc19sZW4gPSBvcHRfbGVuOwogCiAJZXJyID0gaXBfdHVuX3NldF9vcHRzKHRiW0xXVFVOTkVMX0lQX09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTsKIAlpZiAoZXJyICZsdDsgMCkgewpAQCAtNzUzLDcgJiM0Mzs3NTQsNiBAQCBzdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsCiAJfQogCiAJdHVuX2luZm8tJmd0O21vZGUgPSBJUF9UVU5ORUxfSU5GT19UWDsKLQl0dW5faW5mby0mZ3Q7b3B0aW9uc19sZW4gPSBvcHRfbGVuOwogCiAJKnRzID0gbmV3X3N0YXRlOwogCkBAIC0xMDA1LDYgJiM0MzsxMDA1LDcgQEAgc3RhdGljIGludCBpcDZfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0ciwKIAluZXdfc3RhdGUtJmd0O3R5cGUgPSBMV1RVTk5FTF9FTkNBUF9JUDY7CiAKIAl0dW5faW5mbyA9IGx3dF90dW5faW5mbyhuZXdfc3RhdGUpOwomIzQzOwl0dW5faW5mby0mZ3Q7b3B0aW9uc19sZW4gPSBvcHRfbGVuOwogCiAJZXJyID0gaXBfdHVuX3NldF9vcHRzKHRiW0xXVFVOTkVMX0lQNl9PUFRTXSwgdHVuX2luZm8sIGV4dGFjayk7CiAJaWYgKGVyciAmbHQ7IDApIHsKQEAgLTEwNDAsNyAmIzQzOzEwNDEsNiBAQCBzdGF0aWMgaW50IGlwNl90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLAogCX0KIAogCXR1bl9pbmZvLSZndDttb2RlID0gSVBfVFVOTkVMX0lORk9fVFggfCBJUF9UVU5ORUxfSU5GT19JUFY2OwotCXR1bl9pbmZvLSZndDtvcHRpb25zX2xlbiA9IG9wdF9sZW47CiAKIAkqdHMgPSBuZXdfc3RhdGU7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBkaWcgaW4uIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGV2ZW4gZG9pbmcuIEZyb20gdGhlIGRpZmYsIGl0IGxvb2tzIGxpa2UgY2hhbmdlcyBpbiBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBpcF90dW5fYnVpbGRfc3RhdGVgIGZ1bmN0aW9ucywgYm90aCBmb3IgSVB2NCBhbmQgSVB2NiB0dW5uZWxzLiBUaGUgbWFpbiBhZGRpdGlvbiBzZWVtcyB0byBiZSB0aGUgbGluZSBgdHVuX2luZm8tJmd0O29wdGlvbnNfbGVuID0gb3B0X2xlbmAgaW5zZXJ0ZWQgaW4gdHdvIHBsYWNlcy4gSXQgbG9va3MgbGlrZSBgb3B0aW9uc19sZW5gIGlzIGJlaW5nIHNldCBlYXJsaWVyLiBXaGF0JiMzOTtzIGludGVyZXN0aW5nIGlzIHRoaXMgbGluZSBpcyAqcmVtb3ZlZCogZnJvbSB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbnMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCB3aGV0aGVyIG9yIG5vdCBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgbWVtb3J5IG1hbmFnZW1lbnQgdnVsbmVyYWJpbGl0aWVzLiBGcm9tIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjaywgY2hhbmdlcyBsaWtlIHRoZXNlLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gdHVubmVsIG9wdGlvbnMgYW5kIGxlbmd0aCBjYWxjdWxhdGlvbnMsIGFyZSB3aGVyZSB0aGluZ3MgY2FuIGdldCB0cmlja3kuIEkga25vdyB0aGF0IHRoZSBuZXR3b3JraW5nIHN0YWNrIGNhbiBiZSBhIGdvbGRtaW5lIG9mIHZ1bG5lcmFiaWxpdGllcy4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGJsb2Nrcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlYWQgdGhlIGNvZGUgZnJvbSBhcm91bmQgbGluZXMgNzAwLTc2MCBhbmQgOTkwLTEwNTAgaW4gYG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBjb250ZXh0IG9uIHdoYXQgYGlwX3R1bl9idWlsZF9zdGF0ZWAgZG9lcyBhbmQgd2hhdCBgb3B0X2xlbmAgYW5kIGB0dW5faW5mb2AgcmVwcmVzZW50LiBJIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIHdoYXQgYGlwX3R1bl9zZXRfb3B0c2AgZG9lcywgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSB0dW5uZWwgb3B0aW9ucyBhcmUgbWFuaXB1bGF0ZWQuCgpJIHdhbnQgdG8ga25vdyBob3cgYG9wdF9sZW5gIGlzIGRlcml2ZWQuIEFyZSB3ZSBkZWFsaW5nIHdpdGggdXNlci1jb250cm9sbGVkIGlucHV0IGhlcmU/IFdoYXQga2luZCBvZiBkYXRhIGlzIHBhc3NlZCBpbiBgdGJbTFdUVU5ORUxfSVBfT1BUU11gPyBJZiB0aGUgbGVuZ3RoIGlzIG1pc2NhbGN1bGF0ZWQgb3IgbWlzaGFuZGxlZCwgd2UgbWlnaHQgaGF2ZSBhbiBpbmZvcm1hdGlvbiBsZWFrIG9yIHdyaXRlIHZ1bG5lcmFiaWxpdHkgaW4gdGhlc2Ugb3B0aW9ucy4KCkFmdGVyIEkgdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCBJJiMzOTtsbCB0aGVuIGNvbnNpZGVyIEtNU0FOLiBEb2VzIHRoaXMgcGF0Y2ggY2hhbmdlIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBpbml0aWFsaXplZCwgb3IgZGVhbGxvY2F0ZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIHRoYXQgS01TQU4gd291bGQgYmUgZ29vZCBhdCBjYXRjaGluZz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2hhbmdlcyBpbiBsZW5ndGggY2FsY3VsYXRpb25zLCBwb3RlbnRpYWwgb2ZmLWJ5LW9uZSBlcnJvcnMsIG9yIHBsYWNlcyB3aGVyZSB1bmNoZWNrZWQgdmFsdWVzIGFyZSB1c2VkIGFzIGFycmF5IGluZGljZXMgb3Igc2l6ZXMuIEJhc2VkIG9uIHRoYXQgYW5hbHlzaXMsIEkmIzM5O2xsIHJlY29tbWVuZCB3aGV0aGVyIGEgZGVkaWNhdGVkIGZ1enppbmcgc2Vzc2lvbiBpcyB0aGUgcmlnaHQgbW92ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2OTA6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKip0cyxcbiA2OTE6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNjkyOlx0e1xuIDY5MzpcdFx0c3RydWN0IG5sYXR0ciAqdGJbTFdUVU5ORUxfSVBfTUFYICYjNDM7IDFdO1xuIDY5NDpcdFx0c3RydWN0IGx3dHVubmVsX3N0YXRlICpuZXdfc3RhdGU7XG4gNjk1Olx0XHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvO1xuIDY5NjpcdFx0aW50IGVyciwgb3B0X2xlbjtcbiA2OTc6XHRcbiA2OTg6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgTFdUVU5ORUxfSVBfTUFYLCBhdHRyLFxuIDY5OTpcdFx0XHRcdFx0XHQgIGlwX3R1bl9wb2xpY3ksIGV4dGFjayk7XG4gNzAwOlx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDcwMTpcdFx0XHRyZXR1cm4gZXJyO1xuIDcwMjpcdFxuIDcwMzpcdFx0b3B0X2xlbiA9IGlwX3R1bl9nZXRfb3B0bGVuKHRiW0xXVFVOTkVMX0lQX09QVFNdLCBleHRhY2spO1xuIDcwNDpcdFx0aWYgKG9wdF9sZW4gXHUwMDNjIDApXG4gNzA1Olx0XHRcdHJldHVybiBvcHRfbGVuO1xuIDcwNjpcdFxuIDcwNzpcdFx0bmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCp0dW5faW5mbykgJiM0Mzsgb3B0X2xlbik7XG4gNzA4Olx0XHRpZiAoIW5ld19zdGF0ZSlcbiA3MDk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNzEwOlx0XG4gNzExOlx0XHRuZXdfc3RhdGUtXHUwMDNldHlwZSA9IExXVFVOTkVMX0VOQ0FQX0lQO1xuIDcxMjpcdFxuIDcxMzpcdFx0dHVuX2luZm8gPSBsd3RfdHVuX2luZm8obmV3X3N0YXRlKTtcbiA3MTQ6XHRcdHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcbiA3MTU6XHRcbiA3MTY6XHRcdGVyciA9IGlwX3R1bl9zZXRfb3B0cyh0YltMV1RVTk5FTF9JUF9PUFRTXSwgdHVuX2luZm8sIGV4dGFjayk7XG4gNzE3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gNzE4Olx0XHRcdGx3dHN0YXRlX2ZyZWUobmV3X3N0YXRlKTtcbiA3MTk6XHRcdFx0cmV0dXJuIGVycjtcbiA3MjA6XHRcdH1cbiA3MjE6XHRcbiA3MjI6XHQjaWZkZWYgQ09ORklHX0RTVF9DQUNIRVxuIDcyMzpcdFx0ZXJyID0gZHN0X2NhY2hlX2luaXQoXHUwMDI2dHVuX2luZm8tXHUwMDNlZHN0X2NhY2hlLCBHRlBfS0VSTkVMKTtcbiA3MjQ6XHRcdGlmIChlcnIpIHtcbiA3MjU6XHRcdFx0bHd0c3RhdGVfZnJlZShuZXdfc3RhdGUpO1xuIDcyNjpcdFx0XHRyZXR1cm4gZXJyO1xuIDcyNzpcdFx0fVxuIDcyODpcdCNlbmRpZlxuIDcyOTpcdFxuIDczMDpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX0lEXSlcbiA3MzE6XHRcdFx0dHVuX2luZm8tXHUwMDNla2V5LnR1bl9pZCA9IG5sYV9nZXRfYmU2NCh0YltMV1RVTk5FTF9JUF9JRF0pO1xuIDczMjpcdFxuIDczMzpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX0RTVF0pXG4gNzM0Olx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS51LmlwdjQuZHN0ID0gbmxhX2dldF9pbl9hZGRyKHRiW0xXVFVOTkVMX0lQX0RTVF0pO1xuIDczNTpcdFxuIDczNjpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX1NSQ10pXG4gNzM3Olx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS51LmlwdjQuc3JjID0gbmxhX2dldF9pbl9hZGRyKHRiW0xXVFVOTkVMX0lQX1NSQ10pO1xuIDczODpcdFxuIDczOTpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX1RUTF0pXG4gNzQwOlx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS50dGwgPSBubGFfZ2V0X3U4KHRiW0xXVFVOTkVMX0lQX1RUTF0pO1xuIDc0MTpcdFxuIDc0MjpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX1RPU10pXG4gNzQzOlx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS50b3MgPSBubGFfZ2V0X3U4KHRiW0xXVFVOTkVMX0lQX1RPU10pO1xuIDc0NDpcdFxuIDc0NTpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX0ZMQUdTXSkge1xuIDc0NjpcdFx0XHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XG4gNzQ3Olx0XG4gNzQ4Olx0XHRcdGlwX3R1bm5lbF9mbGFnc19mcm9tX2JlMTYoZmxhZ3MsXG4gNzQ5Olx0XHRcdFx0XHRcdCAgbmxhX2dldF9iZTE2KHRiW0xXVFVOTkVMX0lQX0ZMQUdTXSkpO1xuIDc1MDpcdFx0XHRpcF90dW5uZWxfY2xlYXJfb3B0aW9uc19wcmVzZW50KGZsYWdzKTtcbiA3NTE6XHRcbiA3NTI6XHRcdFx0aXBfdHVubmVsX2ZsYWdzX29yKHR1bl9pbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MsXG4gNzUzOlx0XHRcdFx0XHQgICB0dW5faW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzLCBmbGFncyk7XG4gNzU0Olx0XHR9XG4gNzU1Olx0XG4gNzU2Olx0XHR0dW5faW5mby1cdTAwM2Vtb2RlID0gSVBfVFVOTkVMX0lORk9fVFg7XG4gNzU3Olx0XG4gNzU4Olx0XHQqdHMgPSBuZXdfc3RhdGU7XG4gNzU5Olx0XG4gNzYwOlx0XHRyZXR1cm4gMDtcbiA3NjE6XHR9XG4gNzYyOlx0XG4gNzYzOlx0c3RhdGljIHZvaWQgaXBfdHVuX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3RzdGF0ZSlcbiA3NjQ6XHR7XG4gNzY1Olx0I2lmZGVmIENPTkZJR19EU1RfQ0FDSEVcbiA3NjY6XHRcdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm8gPSBsd3RfdHVuX2luZm8obHd0c3RhdGUpO1xuIDc2NzpcdFxuIDc2ODpcdFx0ZHN0X2NhY2hlX2Rlc3Ryb3koXHUwMDI2dHVuX2luZm8tXHUwMDNlZHN0X2NhY2hlKTtcbiA3Njk6XHQjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk2MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyBgaXBfdHVuX3NldF9vcHRzYCBhbmQgYGx3dHVubmVsX3N0YXRlX2FsbG9jYCoqCgpSaWdodCwgbXkgY3VyaW9zaXR5IGlzIHBpcXVlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBpcF90dW5fc2V0X29wdHNgIGFuZCBgbHd0dW5uZWxfc3RhdGVfYWxsb2NgLiBJIHN1c3BlY3QgdGhleSYjMzk7cmUgaW52b2x2ZWQgaW4gY29uZmlndXJpbmcgb3IgbWFuYWdpbmcgdGhlIHN0YXRlIG9mIExXVHVubmVscywgd2hpY2ggaXMgYSBjb21tb24gcGF0dGVybi4gVG8gZ2V0IGEgY2xlYXIgcGljdHVyZSwgSSBzaG91bGQgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGJvdGggZnVuY3Rpb25zLiBJ4oCZbGwgbG9vayBmb3IgdGhlaXIgZGVmaW5pdGlvbnMgYW5kLCBpbXBvcnRhbnRseSwgd2hlcmUgYW5kIGhvdyB0aGV5JiMzOTtyZSBjYWxsZWQuIEnigJltIHRoaW5raW5nIHRoZSBzdHJ1Y3R1cmUgc2hvdWxkIGJlIGZhaXJseSBpbnR1aXRpdmUsIGJ1dCBsZXQmIzM5O3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zIHlldC4gTGV0IHRoZSBjb2RlIHNwZWFrIGZvciBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3R1bl9zZXRfb3B0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz02NzY9c3RhdGljIGludCBpcF90dW5fZ2V0X29wdGxlbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNjgxLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo2ODI6c3RhdGljIGludCBpcF90dW5fc2V0X29wdHMoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy02ODMtXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9Njg4PXN0YXRpYyBpbnQgaXBfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTcxNS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6NzE2Olx0ZXJyID0gaXBfdHVuX3NldF9vcHRzKHRiW0xXVFVOTkVMX0lQX09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNzE3LVx0aWYgKGVyciBcdTAwM2MgMCkge1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9OTgyPXN0YXRpYyBpbnQgaXA2X3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDA5LVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxMDEwOlx0ZXJyID0gaXBfdHVuX3NldF9vcHRzKHRiW0xXVFVOTkVMX0lQNl9PUFRTXSwgdHVuX2luZm8sIGV4dGFjayk7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTEwMTEtXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MzEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgc2VjdGlvbiBvZiBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AsIGFzIHRob3VnaCBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQgYW5kIHdvcmtpbmcgd2l0aCB0aGUgY29kZToKCioqRGl2aW5nIGludG8gdGhlIElQIFR1bm5lbCBDb3JlIC0gTGluZXMgNjAwLTY4NSoqCgpSaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gbGluZXMgNjAwIHRocm91Z2ggNjg1IGluIGBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jYC4gSSBrbm93IHRoaXMgYXJlYSBmYWlybHkgd2VsbCwgc28gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhYm91dCB0aGUgY29yZSBtZWNoYW5pc21zIGZvciBJUC1pbi1JUCB0dW5uZWxzIOKAkyB0aGUgaGVhcnQgb2YgZW5jYXBzdWxhdGluZyBhbmQgZGVjYXBzdWxhdGluZyBJUCBwYWNrZXRzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgcmFuZ2UgcHJvYmFibHkgaW52b2x2ZXMgdGhlIGhhbmRsaW5nIG9mIHNwZWNpZmljIHR1bm5lbCB0eXBlcywgb3IgcGVyaGFwcyBzb21lIGNvbW1vbiBoZWxwZXIgZnVuY3Rpb25zIHV0aWxpemVkIGFjcm9zcyBkaWZmZXJlbnQgdHVubmVsIGltcGxlbWVudGF0aW9ucy4gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZSBkZXRhaWxzIHJlbGF0ZWQgdG8gc2V0dGluZyB1cCBhbmQgdGVhcmluZyBkb3duIHRoZSB0dW5uZWwgaW50ZXJmYWNlcyBhbmQgZGVhbGluZyB3aXRoIHRoZSBpbm5lciBJUCBoZWFkZXIgbWFuaXB1bGF0aW9uLiBBcmUgd2UgZGVhbGluZyB3aXRoIHRoZSBjb21tb24gdHVubmVsIHR5cGU/CgpJJiMzOTttIGJldHRpbmcgdGhpcyBpcyBnb2luZyB0byBpbmNsdWRlIGNoZWNraW5nIHRoZSB2YWxpZGl0eSBvZiB0aGUgSVAgaGVhZGVyIGluIHRoZSB0dW5uZWwsIGhhbmRsaW5nIHRoZSBjaGVja3N1bSBjYWxjdWxhdGlvbiAob3Igc2tpcHBpbmcgaXQsIGRlcGVuZGluZyBvbiB0aGUgdHVubmVsIHR5cGUpLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgdGhlIGNvZGUgaGFuZGxlcyB0aGUgZmxvdyBsYWJlbCBhbmQgVE9TIGJpdHMuIElzIHRoZSBpbm5lciBUT1MgcHJlc2VydmVkPyBXaGF0IGFyZSB0aGUgcG9saWN5IGNob2ljZXMgaW4gdGhlIHBhY2tldCBwcm9jZXNzaW5nIHdpdGggcmVzcGVjdCB0byB0aGUgRFNDUCB2YWx1ZXMgZnJvbSB0aGUgb3V0ZXIgaGVhZGVyPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRldGVybWluZSBpZiB0aGUgdHVubmVsIGNhbiBiZSB1c2VkIGluIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudC4KCkkgZXhwZWN0IHRvIHNlZSBzb21lIGVycm9yIGNoZWNraW5nIGluIHRoZXJlIHRvby4gV2hhdCBoYXBwZW5zIGlmIHRoZSBpbm5lciBwYWNrZXQgaXMgbWFsZm9ybWVkPyBIb3cgZG9lcyB0aGUga2VybmVsIHJlc3BvbmQgdG8gYW4gSVAgZnJhZ21lbnQgaW4gdGhlIHR1bm5lbD8gSXMgdGhlIHBhY2tldCBkcm9wcGVkLCBvciBpcyBmcmFnbWVudGF0aW9uIGhhbmRsZWQgd2l0aGluIHRoZSB0dW5uZWw/IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGVycm9yIHBhdGhzLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIG1lbW9yeSBhbGxvY2F0aW9uIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEl0IHdpbGwgYWxzbyBiZSBpbXBvcnRhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBtYW5hZ2VzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSByb3V0aW5nIHRhYmxlLiBJcyB0aGVyZSBhbnkgaGFuZGxpbmcgb2Ygcm91dGUgbG9va3Vwcywgb3IgZG9lcyB0aGUgdHVubmVsIHJlbHkgc29sZWx5IG9uIGNvbmZpZ3VyZWQgcm91dGVzPyBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgc2VjdGlvbiBoYW5kbGVzIHRoZSBpbmdyZXNzIGFuZCBlZ3Jlc3Mgb2YgdGhlIHR1bm5lbGxlZCB0cmFmZmljLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjMwOlx0XHRcdFx0ICAgaXBfb3B0c19wb2xpY3ksIGV4dGFjayk7XG4gNjMxOlx0XHRpZiAoZXJyKVxuIDYzMjpcdFx0XHRyZXR1cm4gZXJyO1xuIDYzMzpcdFxuIDYzNDpcdFx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBubGFfZGF0YShhdHRyKSwgbmxhX2xlbihhdHRyKSwgcmVtKSB7XG4gNjM1Olx0XHRcdHN3aXRjaCAobmxhX3R5cGUobmxhKSkge1xuIDYzNjpcdFx0XHRjYXNlIExXVFVOTkVMX0lQX09QVFNfR0VORVZFOlxuIDYzNzpcdFx0XHRcdGlmICh0eXBlIFx1MDAyNlx1MDAyNiB0eXBlICE9IElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVClcbiA2Mzg6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDYzOTpcdFx0XHRcdG9wdF9sZW4gPSBpcF90dW5fcGFyc2Vfb3B0c19nZW5ldmUobmxhLCBpbmZvLCBvcHRzX2xlbixcbiA2NDA6XHRcdFx0XHRcdFx0XHRcdCAgIGV4dGFjayk7XG4gNjQxOlx0XHRcdFx0aWYgKG9wdF9sZW4gXHUwMDNjIDApXG4gNjQyOlx0XHRcdFx0XHRyZXR1cm4gb3B0X2xlbjtcbiA2NDM6XHRcdFx0XHRvcHRzX2xlbiAmIzQzOz0gb3B0X2xlbjtcbiA2NDQ6XHRcdFx0XHRpZiAob3B0c19sZW4gXHUwMDNlIElQX1RVTk5FTF9PUFRTX01BWClcbiA2NDU6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDY0NjpcdFx0XHRcdHR5cGUgPSBJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQ7XG4gNjQ3Olx0XHRcdFx0YnJlYWs7XG4gNjQ4Olx0XHRcdGNhc2UgTFdUVU5ORUxfSVBfT1BUU19WWExBTjpcbiA2NDk6XHRcdFx0XHRpZiAodHlwZSlcbiA2NTA6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDY1MTpcdFx0XHRcdG9wdF9sZW4gPSBpcF90dW5fcGFyc2Vfb3B0c192eGxhbihubGEsIGluZm8sIG9wdHNfbGVuLFxuIDY1MjpcdFx0XHRcdFx0XHRcdFx0ICBleHRhY2spO1xuIDY1MzpcdFx0XHRcdGlmIChvcHRfbGVuIFx1MDAzYyAwKVxuIDY1NDpcdFx0XHRcdFx0cmV0dXJuIG9wdF9sZW47XG4gNjU1Olx0XHRcdFx0b3B0c19sZW4gJiM0Mzs9IG9wdF9sZW47XG4gNjU2Olx0XHRcdFx0dHlwZSA9IElQX1RVTk5FTF9WWExBTl9PUFRfQklUO1xuIDY1NzpcdFx0XHRcdGJyZWFrO1xuIDY1ODpcdFx0XHRjYXNlIExXVFVOTkVMX0lQX09QVFNfRVJTUEFOOlxuIDY1OTpcdFx0XHRcdGlmICh0eXBlKVxuIDY2MDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjYxOlx0XHRcdFx0b3B0X2xlbiA9IGlwX3R1bl9wYXJzZV9vcHRzX2Vyc3BhbihubGEsIGluZm8sIG9wdHNfbGVuLFxuIDY2MjpcdFx0XHRcdFx0XHRcdFx0ICAgZXh0YWNrKTtcbiA2NjM6XHRcdFx0XHRpZiAob3B0X2xlbiBcdTAwM2MgMClcbiA2NjQ6XHRcdFx0XHRcdHJldHVybiBvcHRfbGVuO1xuIDY2NTpcdFx0XHRcdG9wdHNfbGVuICYjNDM7PSBvcHRfbGVuO1xuIDY2NjpcdFx0XHRcdHR5cGUgPSBJUF9UVU5ORUxfRVJTUEFOX09QVF9CSVQ7XG4gNjY3Olx0XHRcdFx0YnJlYWs7XG4gNjY4Olx0XHRcdGRlZmF1bHQ6XG4gNjY5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjcwOlx0XHRcdH1cbiA2NzE6XHRcdH1cbiA2NzI6XHRcbiA2NzM6XHRcdHJldHVybiBvcHRzX2xlbjtcbiA2NzQ6XHR9XG4gNjc1Olx0XG4gNjc2Olx0c3RhdGljIGludCBpcF90dW5fZ2V0X29wdGxlbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIDY3NzpcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDY3ODpcdHtcbiA2Nzk6XHRcdHJldHVybiBpcF90dW5fcGFyc2Vfb3B0cyhhdHRyLCBOVUxMLCBleHRhY2spO1xuIDY4MDpcdH1cbiA2ODE6XHRcbiA2ODI6XHRzdGF0aWMgaW50IGlwX3R1bl9zZXRfb3B0cyhzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXG4gNjgzOlx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDY4NDpcdHtcbiA2ODU6XHRcdHJldHVybiBpcF90dW5fcGFyc2Vfb3B0cyhhdHRyLCBpbmZvLCBleHRhY2spO1xuIDY4NjpcdH1cbiA2ODc6XHRcbiA2ODg6XHRzdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gNjg5Olx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGZhbWlseSwgY29uc3Qgdm9pZCAqY2ZnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDk2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQsIGRlbGl2ZXJlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBJUCBUdW5uZWwgQ29yZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQganVtcCBiYWNrIGludG8gdGhlIGd1dHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIExldCYjMzk7cyBmb2N1cyBvbiBhIHNwZWNpZmljIGFyZWEsIHNwZWNpZmljYWxseSB0aGUgYG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNgIGZpbGUuIEkmIzM5O20gemVyb2luZyBpbiBvbiBsaW5lcyA1NTAgdG8gNjMwLiBUaGlzIHNlY3Rpb24gbGlrZWx5IGhhbmRsZXMgc29tZSBjcml0aWNhbCBhc3BlY3Qgb2YgSVAgdHVubmVsaW5nIGZ1bmN0aW9uYWxpdHksIGFuZCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcy4gQ291bGQgYmUgcmVsYXRlZCB0byBlbmNhcHN1bGF0aW9uLCBkZWNhcHN1bGF0aW9uLCBoZWFkZXIgbWFuaXB1bGF0aW9uLCBvciBwZXJoYXBzIHNvbWUga2luZCBvZiBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIHR1bm5lbCBvcGVyYXRpb25zLiBJdCBtaWdodCBiZSBkZWFsaW5nIHdpdGggYSBwYXJ0aWN1bGFyIHR1bm5lbCB0eXBlIG9yIGEgc3BlY2lmaWMgc2NlbmFyaW8gcmVsYXRlZCB0byBmcmFnbWVudGF0aW9uLCByb3V0aW5nLCBvciBldmVuIG11bHRpY2FzdC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW4gdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYXJlIGhpZGluZyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NTA6XHRcdFx0XHQgICAgICAgdnhsYW5fb3B0X3BvbGljeSwgZXh0YWNrKTtcbiA1NTE6XHRcdGlmIChlcnIpXG4gNTUyOlx0XHRcdHJldHVybiBlcnI7XG4gNTUzOlx0XG4gNTU0Olx0XHRpZiAoIXRiW0xXVFVOTkVMX0lQX09QVF9WWExBTl9HQlBdKVxuIDU1NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1NTY6XHRcbiA1NTc6XHRcdGlmIChpbmZvKSB7XG4gNTU4Olx0XHRcdHN0cnVjdCB2eGxhbl9tZXRhZGF0YSAqbWQgPVxuIDU1OTpcdFx0XHRcdGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgJiM0Mzsgb3B0c19sZW47XG4gNTYwOlx0XG4gNTYxOlx0XHRcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfVlhMQU5fR0JQXTtcbiA1NjI6XHRcdFx0bWQtXHUwMDNlZ2JwID0gbmxhX2dldF91MzIoYXR0cik7XG4gNTYzOlx0XHRcdG1kLVx1MDAzZWdicCBcdTAwMjY9IFZYTEFOX0dCUF9NQVNLO1xuIDU2NDpcdFx0XHRfX3NldF9iaXQoSVBfVFVOTkVMX1ZYTEFOX09QVF9CSVQsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncyk7XG4gNTY1Olx0XHR9XG4gNTY2Olx0XG4gNTY3Olx0XHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCB2eGxhbl9tZXRhZGF0YSk7XG4gNTY4Olx0fVxuIDU2OTpcdFxuIDU3MDpcdHN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfZXJzcGFuKHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gNTcxOlx0XHRcdFx0XHQgICAgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLCBpbnQgb3B0c19sZW4sXG4gNTcyOlx0XHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDU3MzpcdHtcbiA1NzQ6XHRcdHN0cnVjdCBubGF0dHIgKnRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fTUFYICYjNDM7IDFdO1xuIDU3NTpcdFx0aW50IGVycjtcbiA1NzY6XHRcdHU4IHZlcjtcbiA1Nzc6XHRcbiA1Nzg6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIExXVFVOTkVMX0lQX09QVF9FUlNQQU5fTUFYLCBhdHRyLFxuIDU3OTpcdFx0XHRcdCAgICAgICBlcnNwYW5fb3B0X3BvbGljeSwgZXh0YWNrKTtcbiA1ODA6XHRcdGlmIChlcnIpXG4gNTgxOlx0XHRcdHJldHVybiBlcnI7XG4gNTgyOlx0XG4gNTgzOlx0XHRpZiAoIXRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fVkVSXSlcbiA1ODQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTg1Olx0XG4gNTg2Olx0XHR2ZXIgPSBubGFfZ2V0X3U4KHRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fVkVSXSk7XG4gNTg3Olx0XHRpZiAodmVyID09IDEpIHtcbiA1ODg6XHRcdFx0aWYgKCF0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0lOREVYXSlcbiA1ODk6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1OTA6XHRcdH0gZWxzZSBpZiAodmVyID09IDIpIHtcbiA1OTE6XHRcdFx0aWYgKCF0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0RJUl0gfHxcbiA1OTI6XHRcdFx0ICAgICF0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0hXSURdKVxuIDU5MzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDU5NDpcdFx0fSBlbHNlIHtcbiA1OTU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTk2Olx0XHR9XG4gNTk3Olx0XG4gNTk4Olx0XHRpZiAoaW5mbykge1xuIDU5OTpcdFx0XHRzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhICptZCA9XG4gNjAwOlx0XHRcdFx0aXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSAmIzQzOyBvcHRzX2xlbjtcbiA2MDE6XHRcbiA2MDI6XHRcdFx0bWQtXHUwMDNldmVyc2lvbiA9IHZlcjtcbiA2MDM6XHRcdFx0aWYgKHZlciA9PSAxKSB7XG4gNjA0Olx0XHRcdFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fSU5ERVhdO1xuIDYwNTpcdFx0XHRcdG1kLVx1MDAzZXUuaW5kZXggPSBubGFfZ2V0X2JlMzIoYXR0cik7XG4gNjA2Olx0XHRcdH0gZWxzZSB7XG4gNjA3Olx0XHRcdFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fRElSXTtcbiA2MDg6XHRcdFx0XHRtZC1cdTAwM2V1Lm1kMi5kaXIgPSBubGFfZ2V0X3U4KGF0dHIpO1xuIDYwOTpcdFx0XHRcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0hXSURdO1xuIDYxMDpcdFx0XHRcdHNldF9od2lkKFx1MDAyNm1kLVx1MDAzZXUubWQyLCBubGFfZ2V0X3U4KGF0dHIpKTtcbiA2MTE6XHRcdFx0fVxuIDYxMjpcdFxuIDYxMzpcdFx0XHRfX3NldF9iaXQoSVBfVFVOTkVMX0VSU1BBTl9PUFRfQklULCBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MpO1xuIDYxNDpcdFx0fVxuIDYxNTpcdFxuIDYxNjpcdFx0cmV0dXJuIHNpemVvZihzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhKTtcbiA2MTc6XHR9XG4gNjE4Olx0XG4gNjE5Olx0c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0cyhzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXG4gNjIwOlx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNjIxOlx0e1xuIDYyMjpcdFx0aW50IGVyciwgcmVtLCBvcHRfbGVuLCBvcHRzX2xlbiA9IDA7XG4gNjIzOlx0XHRzdHJ1Y3QgbmxhdHRyICpubGE7XG4gNjI0Olx0XHR1MzIgdHlwZSA9IDA7XG4gNjI1Olx0XG4gNjI2Olx0XHRpZiAoIWF0dHIpXG4gNjI3Olx0XHRcdHJldHVybiAwO1xuIDYyODpcdFxuIDYyOTpcdFx0ZXJyID0gbmxhX3ZhbGlkYXRlKG5sYV9kYXRhKGF0dHIpLCBubGFfbGVuKGF0dHIpLCBMV1RVTk5FTF9JUF9PUFRTX01BWCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY1MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgaXBfdHVuX3BhcnNlX29wdHNfZ2VuZXZlYCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZWAgZnVuY3Rpb24uIEkmIzM5O20gZ29pbmcgdG8gemVybyBpbiBvbiBsaW5lcyA1MDAgdGhyb3VnaCA1NTAsIHRvIGdldCBhIHNlbnNlIG9mIGhvdyBHZW5ldmUgb3B0aW9ucyBhcmUgYmVpbmcgcGFyc2VkLCBzcGVjaWZpY2FsbHkgdGhlIHN0cnVjdHVyZSwgdGhlIHdheSB0aGV5IGRlYWwgd2l0aCBsZW5ndGggZmllbGRzLCBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIHZ1bG5lcmFiaWxpdGllcy4gSSB3YW50IHRvIHNlZSBpZiB0aGV5IGFyZSBkb2luZyBhIHByb3BlciB2YWxpZGF0aW9uIG9uIHRoZSBpbmNvbWluZyBkYXRhLCBob3cgdGhleSBjaGVjayBmb3IgcG90ZW50aWFsIG92ZXJmbG93cywgYW5kIHdoYXQgdGhlIGxvZ2ljIGlzIHdoZW4gdGhlIG9wdGlvbiB0eXBlIGlzIG5vdCBzb21ldGhpbmcgdGhhdCBpcyBleHBsaWNpdGx5IHJlY29nbmlzZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhleSYjMzk7cmUgaGFuZGxpbmcgdmFyaWFibGUtbGVuZ3RoIG9wdGlvbnMgY29ycmVjdGx5LCBzaW5jZSBHZW5ldmUgb3B0aW9ucyBjYW4gYmUgcXVpdGUgZmxleGlibGUuIEkgYW50aWNpcGF0ZSBzZWVpbmcgYml0d2lzZSBvcGVyYXRpb25zIGFuZCBwb3RlbnRpYWxseSBzb21lIHBvaW50ZXIgYXJpdGhtZXRpYyBpbiB0aGlzIHNlY3Rpb24g4oCTIGl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgYXJlIGJlaW5nIHVzZWQgdG8gbmF2aWdhdGUgdGhlIG9wdGlvbiBkYXRhLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcdFtMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0lOREVYXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIDUwMTpcdFx0W0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fRElSXVx0PSB7IC50eXBlID0gTkxBX1U4IH0sXG4gNTAyOlx0XHRbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9IV0lEXVx0PSB7IC50eXBlID0gTkxBX1U4IH0sXG4gNTAzOlx0fTtcbiA1MDQ6XHRcbiA1MDU6XHRzdGF0aWMgaW50IGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZShzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIDUwNjpcdFx0XHRcdFx0ICAgIHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbywgaW50IG9wdHNfbGVuLFxuIDUwNzpcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiA1MDg6XHR7XG4gNTA5Olx0XHRzdHJ1Y3QgbmxhdHRyICp0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX01BWCAmIzQzOyAxXTtcbiA1MTA6XHRcdGludCBkYXRhX2xlbiwgZXJyO1xuIDUxMTpcdFxuIDUxMjpcdFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9NQVgsIGF0dHIsXG4gNTEzOlx0XHRcdFx0ICAgICAgIGdlbmV2ZV9vcHRfcG9saWN5LCBleHRhY2spO1xuIDUxNDpcdFx0aWYgKGVycilcbiA1MTU6XHRcdFx0cmV0dXJuIGVycjtcbiA1MTY6XHRcbiA1MTc6XHRcdGlmICghdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9DTEFTU10gfHxcbiA1MTg6XHRcdCAgICAhdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9UWVBFXSB8fFxuIDUxOTpcdFx0ICAgICF0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX0RBVEFdKVxuIDUyMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MjE6XHRcbiA1MjI6XHRcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX0RBVEFdO1xuIDUyMzpcdFx0ZGF0YV9sZW4gPSBubGFfbGVuKGF0dHIpO1xuIDUyNDpcdFx0aWYgKGRhdGFfbGVuICUgNClcbiA1MjU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTI2Olx0XG4gNTI3Olx0XHRpZiAoaW5mbykge1xuIDUyODpcdFx0XHRzdHJ1Y3QgZ2VuZXZlX29wdCAqb3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSAmIzQzOyBvcHRzX2xlbjtcbiA1Mjk6XHRcbiA1MzA6XHRcdFx0bWVtY3B5KG9wdC1cdTAwM2VvcHRfZGF0YSwgbmxhX2RhdGEoYXR0ciksIGRhdGFfbGVuKTtcbiA1MzE6XHRcdFx0b3B0LVx1MDAzZWxlbmd0aCA9IGRhdGFfbGVuIC8gNDtcbiA1MzI6XHRcdFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9HRU5FVkVfQ0xBU1NdO1xuIDUzMzpcdFx0XHRvcHQtXHUwMDNlb3B0X2NsYXNzID0gbmxhX2dldF9iZTE2KGF0dHIpO1xuIDUzNDpcdFx0XHRhdHRyID0gdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9UWVBFXTtcbiA1MzU6XHRcdFx0b3B0LVx1MDAzZXR5cGUgPSBubGFfZ2V0X3U4KGF0dHIpO1xuIDUzNjpcdFx0XHRfX3NldF9iaXQoSVBfVFVOTkVMX0dFTkVWRV9PUFRfQklULCBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MpO1xuIDUzNzpcdFx0fVxuIDUzODpcdFxuIDUzOTpcdFx0cmV0dXJuIHNpemVvZihzdHJ1Y3QgZ2VuZXZlX29wdCkgJiM0MzsgZGF0YV9sZW47XG4gNTQwOlx0fVxuIDU0MTpcdFxuIDU0MjpcdHN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfdnhsYW4oc3RydWN0IG5sYXR0ciAqYXR0cixcbiA1NDM6XHRcdFx0XHRcdCAgIHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbywgaW50IG9wdHNfbGVuLFxuIDU0NDpcdFx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDU0NTpcdHtcbiA1NDY6XHRcdHN0cnVjdCBubGF0dHIgKnRiW0xXVFVOTkVMX0lQX09QVF9WWExBTl9NQVggJiM0MzsgMV07XG4gNTQ3Olx0XHRpbnQgZXJyO1xuIDU0ODpcdFxuIDU0OTpcdFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTFdUVU5ORUxfSVBfT1BUX1ZYTEFOX01BWCwgYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg5MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFVzYWdlIG9mIGB0dW5faW5mby0mZ3Q7b3B0aW9uc19sZW5gKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGB0dW5faW5mby0mZ3Q7b3B0aW9uc19sZW5gIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQgd2l0aGluIHRoaXMgY29kZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBjcml0aWNhbC4gTGV0IG1lIG1lbnRhbGx5IHJ1biB0aHJvdWdoIHRoZSByZWxhdGVkIGNvZGUgc3RydWN0dXJlLi4uIHJpZ2h0LCB0aGF0IHZhcmlhYmxlIGlzIHBhcnQgb2YgdGhlIGB0dW5faW5mb2Agc3RydWN0dXJlLCBhbmQgdGhhdCYjMzk7cyB1c2VkIGZvciBJUCB0dW5uZWxzLiBPa2F5LCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgc2VhcmNoLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIGNvZGViYXNlIGZvciBpbnN0YW5jZXMgb2YgYG9wdGlvbnNfbGVuYCBzcGVjaWZpY2FsbHksIGJ1dCBJJiMzOTtsbCBuYXJyb3cgdGhlIGZvY3VzIGJ5IGxvb2tpbmcgd2l0aGluIGNvbnRleHRzIHRoYXQgd291bGQgbWFrZSBzZW5zZTogcGVyaGFwcyBhcm91bmQgdGhlIGBpcF90dW5uZWxfaW5mb19vcHRzYCBzdHJ1Y3R1cmUsIG9yLCBjcml0aWNhbGx5LCB3aXRoaW4gYGlwX3R1bm5lbF9jb3JlLmNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBzZWFyY2ggcmV2ZWFscy4gVGhpcyBuZWVkcyB0byBiZSBwcmVjaXNlOyBJIG5lZWQgdG8gZm9sbG93IHRoZSBkYXRhIGFuZCB1bmRlcnN0YW5kIGl0cyBwcm9jZXNzaW5nIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3R1bm5lbF9pbmZvX29wdHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jPTU5Nz1ib29sIG1seDVlX3RjX3R1bl9lbmNhcF9pbmZvX2VxdWFsX29wdGlvbnMoc3RydWN0IG1seDVlX2VuY2FwX2tleSAqYSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmMtNjIyLVx0cmV0dXJuIGFfaW5mby1cdTAwM2VvcHRpb25zX2xlbiA9PSBiX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmM6NjIzOlx0ICAgICAgICFtZW1jbXAoaXBfdHVubmVsX2luZm9fb3B0cyhhX2luZm8pLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jOjYyNDpcdFx0ICAgICAgIGlwX3R1bm5lbF9pbmZvX29wdHMoYl9pbmZvKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYy02MjUtXHRcdCAgICAgICBhX2luZm8tXHUwMDNlb3B0aW9uc19sZW4pO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZ2VuZXZlLmM9OTI9c3RhdGljIGludCBtbHg1ZV9nZW5faXBfdHVubmVsX2hlYWRlcl9nZW5ldmUoY2hhciBidWZbXSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2dlbmV2ZS5jLTExNy1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2dlbmV2ZS5jOjExODpcdFx0aXBfdHVubmVsX2luZm9fb3B0c19nZXQoZ2VuZXZlaC1cdTAwM2VvcHRpb25zLCB0dW5faW5mbyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2dlbmV2ZS5jLTExOS1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX3Z4bGFuLmM9ODM9c3RhdGljIGludCBtbHg1ZV9nZW5faXBfdHVubmVsX2hlYWRlcl92eGxhbihjaGFyIGJ1ZltdLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fdnhsYW4uYy0xMDItXHRpZiAodGVzdF9iaXQoSVBfVFVOTkVMX1ZYTEFOX09QVF9CSVQsIHR1bl9rZXktXHUwMDNldHVuX2ZsYWdzKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl92eGxhbi5jOjEwMzpcdFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGUtXHUwMDNldHVuX2luZm8pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl92eGxhbi5jLTEwNC1cdFx0dnhsYW5fYnVpbGRfZ2JwX2hkcih2eGgsIG1kKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYz01NjE2PXN0YXRpYyBib29sIG1seDVlX3RjX3Jlc3RvcmVfdHVubmVsKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jLTU2OTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYzo1Njk1Olx0XHRpcF90dW5uZWxfaW5mb19vcHRzX3NldChcdTAwMjZ0dW5fZHN0LVx1MDAzZXUudHVuX2luZm8sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01Njk2LVx0XHRcdFx0XHRlbmNfb3B0cy5rZXkuZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYz0zMzA9bmZwX2ZsX3B1c2hfZ2VuZXZlX29wdGlvbnMoc3RydWN0IG5mcF9mbF9wYXlsb2FkICpuZnBfZmwsIGludCAqbGlzdF9sZW4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmMtMzM1LVx0aW50IG9wdF9sZW4sIG9wdF9jbnQsIGFjdF9zdGFydCwgdG90X3B1c2hfbGVuO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmM6MzM2Olx0dTggKnNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaXBfdHVuKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2FjdGlvbi5jLTMzNy1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYy0zNzItXHQqbGlzdF9sZW4gJiM0Mzs9IHRvdF9wdXNoX2xlbjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2FjdGlvbi5jOjM3MzpcdHNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaXBfdHVuKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2FjdGlvbi5jLTM3NC1cdHdoaWxlIChvcHRfY250KSB7XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9Mjc1PXN0YXRpYyB2b2lkIGdlbmV2ZV9yeChzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzLFxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI5OS1cdFx0X19zZXRfYml0KElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVCwgZmxhZ3MpO1xuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MzAwOlx0XHRpcF90dW5uZWxfaW5mb19vcHRzX3NldChcdTAwMjZ0dW5fZHN0LVx1MDAzZXUudHVuX2luZm8sXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0zMDEtXHRcdFx0XHRcdGdudmgtXHUwMDNlb3B0aW9ucywgZ252aC1cdTAwM2VvcHRfbGVuICogNCxcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYz0xMjI5PXN0YXRpYyB2b2lkIGdlbmV2ZV9idWlsZF9oZWFkZXIoc3RydWN0IGdlbmV2ZWhkciAqZ2VuZXZlaCxcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xMjQzLVx0aWYgKHRlc3RfYml0KElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKSlcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjEyNDQ6XHRcdGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KGdlbmV2ZWgtXHUwMDNlb3B0aW9ucywgaW5mbyk7XG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xMjQ1LX1cbi0tXG5kcml2ZXJzL25ldC9wZmNwLmM9NTI9c3RhdGljIGludCBwZmNwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3BmY3AuYy03NC1cbmRyaXZlcnMvbmV0L3BmY3AuYzo3NTpcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhcdTAwMjZ0dW5fZHN0LVx1MDAzZXUudHVuX2luZm8pO1xuZHJpdmVycy9uZXQvcGZjcC5jLTc2LVx0aWYgKHVubGlrZWx5KCFtZCkpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTE2NTc9c3RhdGljIGludCB2eGxhbl9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNzQ3LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE3NDg6XHRcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhcdTAwMjZ0dW5fZHN0LVx1MDAzZXUudHVuX2luZm8pO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTE3NDktXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTIzNzM9dm9pZCB2eGxhbl94bWl0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yNDgzLVx0XHRcdFx0Z290byBkcm9wO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjI0ODQ6XHRcdFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI0ODUtXHRcdH1cbi0tXG5pbmNsdWRlL25ldC9kc3RfbWV0YWRhdGEuaD0xNTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YWRhdGFfZHN0ICp0dW5fZHN0X3VuY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC9kc3RfbWV0YWRhdGEuaC0xNjgtXHRuZXdfbWQtXHUwMDNldS50dW5faW5mbyA9IG1kX2RzdC1cdTAwM2V1LnR1bl9pbmZvO1xuaW5jbHVkZS9uZXQvZHN0X21ldGFkYXRhLmg6MTY5Olx0bWVtY3B5KGlwX3R1bm5lbF9pbmZvX29wdHMoXHUwMDI2bmV3X21kLVx1MDAzZXUudHVuX2luZm8pLFxuaW5jbHVkZS9uZXQvZHN0X21ldGFkYXRhLmg6MTcwOlx0ICAgICAgIGlwX3R1bm5lbF9pbmZvX29wdHMoXHUwMDI2bWRfZHN0LVx1MDAzZXUudHVuX2luZm8pLCBtZF9zaXplKTtcbmluY2x1ZGUvbmV0L2RzdF9tZXRhZGF0YS5oLTE3MS1cbi0tXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg9ODk9c3RydWN0IGlwX3R1bm5lbF9lbmNhcCB7XG4tLVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTEwNS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDoxMDY6I2RlZmluZSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pXHRcdFx0XHRcXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTEwNy1cdF9HZW5lcmljKGluZm8sXHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg9Njc0PXN0YXRpYyBpbmxpbmUgdm9pZCBpcHR1bm5lbF94bWl0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwa3RfbGVuKVxuLS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MTAtXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzExOnN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfaW5mb19vcHRzX2dldCh2b2lkICp0byxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MTItXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MTMte1xuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjcxNDpcdG1lbWNweSh0bywgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSwgaW5mby1cdTAwM2VvcHRpb25zX2xlbik7XG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzE1LX1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MTYtXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzE3OnN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfaW5mb19vcHRzX3NldChzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzE4LVx0XHRcdFx0XHQgICBjb25zdCB2b2lkICpmcm9tLCBpbnQgbGVuLFxuLS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MjItXHRpZiAobGVuIFx1MDAzZSAwKSB7XG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzIzOlx0XHRtZW1jcHkoaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSwgZnJvbSwgbGVuKTtcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MjQtXHRcdGlwX3R1bm5lbF9mbGFnc19vcihpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncyxcbi0tXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg9NzU4PXN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfdW5uZWVkX21ldGFkYXRhKHZvaWQpXG4tLVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTc2MS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDo3NjI6c3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KHZvaWQgKnRvLFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTc2My1cdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxuLS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03NjYtXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzY3OnN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfaW5mb19vcHRzX3NldChzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzY4LVx0XHRcdFx0XHQgICBjb25zdCB2b2lkICpmcm9tLCBpbnQgbGVuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ5ODM9QlBGX0NBTExfMyhicGZfc2tiX2dldF90dW5uZWxfb3B0LCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHU4ICosIHRvLCB1MzIsIHNpemUpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDk5Ny1cbm5ldC9jb3JlL2ZpbHRlci5jOjQ5OTg6XHRpcF90dW5uZWxfaW5mb19vcHRzX2dldCh0bywgaW5mbyk7XG5uZXQvY29yZS9maWx0ZXIuYy00OTk5LVx0aWYgKHNpemUgXHUwMDNlIGluZm8tXHUwMDNlb3B0aW9uc19sZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NTEwMD1CUEZfQ0FMTF8zKGJwZl9za2Jfc2V0X3R1bm5lbF9vcHQsIHN0cnVjdCBza19idWZmICosIHNrYixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy01MTEyLVx0aXBfdHVubmVsX3NldF9vcHRpb25zX3ByZXNlbnQocHJlc2VudCk7XG5uZXQvY29yZS9maWx0ZXIuYzo1MTEzOlx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoaW5mbywgZnJvbSwgc2l6ZSwgcHJlc2VudCk7XG5uZXQvY29yZS9maWx0ZXIuYy01MTE0LVxuLS1cbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmM9MzY2PXNrYl9mbG93X2Rpc3NlY3RfdHVubmVsX2luZm8oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jLTQ4NC1cdFx0ZW5jX29wdC1cdTAwM2VsZW4gPSBpbmZvLVx1MDAzZW9wdGlvbnNfbGVuO1xubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYzo0ODU6XHRcdGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KGVuY19vcHQtXHUwMDNlZGF0YSwgaW5mbyk7XG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jLTQ4Ni1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0yNjc9c3RhdGljIGludCBlcnNwYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0bmxfcHRrX2luZm8gKnRwaSxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0zNDQtXHRcdFx0XHRcdFx0XHQgICAgc2l6ZW9mKCplcnNoZHIpKTtcbm5ldC9pcHY0L2lwX2dyZS5jOjM0NTpcdFx0XHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoXHUwMDI2dHVuX2RzdC1cdTAwM2V1LnR1bl9pbmZvKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTM0Ni1cdFx0XHRtZC1cdTAwM2V2ZXJzaW9uID0gdmVyO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTU0MD1zdGF0aWMgdm9pZCBlcnNwYW5fZmJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTU2Mi1cdFx0Z290byBlcnJfZnJlZV9za2I7XG5uZXQvaXB2NC9pcF9ncmUuYzo1NjM6XHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pO1xubmV0L2lwdjQvaXBfZ3JlLmMtNTY0LVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9MTQyPXN0cnVjdCBtZXRhZGF0YV9kc3QgKmlwdHVubmVsX21ldGFkYXRhX3JlcGx5KHN0cnVjdCBtZXRhZGF0YV9kc3QgKm1kLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTY2LVx0ZHN0LVx1MDAzZW1vZGUgPSBzcmMtXHUwMDNlbW9kZSB8IElQX1RVTk5FTF9JTkZPX1RYO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxNjc6XHRpcF90dW5uZWxfaW5mb19vcHRzX3NldChkc3QsIGlwX3R1bm5lbF9pbmZvX29wdHMoc3JjKSxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTY4LVx0XHRcdFx0c3JjLVx1MDAzZW9wdGlvbnNfbGVuLCB0dW5fZmxhZ3MpO1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9NTA1PXN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfZ2VuZXZlKHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy01MjctXHRpZiAoaW5mbykge1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo1Mjg6XHRcdHN0cnVjdCBnZW5ldmVfb3B0ICpvcHQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pICYjNDM7IG9wdHNfbGVuO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy01MjktXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz01NDI9c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0c192eGxhbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNTU4LVx0XHRzdHJ1Y3QgdnhsYW5fbWV0YWRhdGEgKm1kID1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6NTU5Olx0XHRcdGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgJiM0Mzsgb3B0c19sZW47XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTU2MC1cbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTU3MD1zdGF0aWMgaW50IGlwX3R1bl9wYXJzZV9vcHRzX2Vyc3BhbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNTk5LVx0XHRzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhICptZCA9XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjYwMDpcdFx0XHRpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pICYjNDM7IG9wdHNfbGVuO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy02MDEtXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz03NzI9c3RhdGljIGludCBpcF90dW5fZmlsbF9lbmNhcF9vcHRzX2dlbmV2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNzgzLVx0d2hpbGUgKHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuIFx1MDAzZSBvZmZzZXQpIHtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6Nzg0Olx0XHRvcHQgPSBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKSAmIzQzOyBvZmZzZXQ7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTc4NS1cdFx0aWYgKG5sYV9wdXRfYmUxNihza2IsIExXVFVOTkVMX0lQX09QVF9HRU5FVkVfQ0xBU1MsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz04MDA9c3RhdGljIGludCBpcF90dW5fZmlsbF9lbmNhcF9vcHRzX3Z4bGFuKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy04MDktXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjgxMDpcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyk7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTgxMS1cdGlmIChubGFfcHV0X3UzMihza2IsIExXVFVOTkVMX0lQX09QVF9WWExBTl9HQlAsIG1kLVx1MDAzZWdicCkpIHtcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTgyMD1zdGF0aWMgaW50IGlwX3R1bl9maWxsX2VuY2FwX29wdHNfZXJzcGFuKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy04MjktXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjgzMDpcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyk7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTgzMS1cdGlmIChubGFfcHV0X3U4KHNrYiwgTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9WRVIsIG1kLVx1MDAzZXZlcnNpb24pKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9ODk5PXN0YXRpYyBpbnQgaXBfdHVuX29wdHNfbmxzaXplKHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTkxMi1cdFx0d2hpbGUgKGluZm8tXHUwMDNlb3B0aW9uc19sZW4gXHUwMDNlIG9mZnNldCkge1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo5MTM6XHRcdFx0b3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSAmIzQzOyBvZmZzZXQ7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTkxNC1cdFx0XHRvcHRfbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZSgyKVx0LyogT1BUX0dFTkVWRV9DTEFTUyAqL1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTIzLVx0fSBlbHNlIGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfRVJTUEFOX09QVF9CSVQsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncykpIHtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTI0Olx0XHRzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhICptZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTkyNS1cbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTk1MD1zdGF0aWMgaW50IGlwX3R1bl9jbXBfZW5jYXAoc3RydWN0IGx3dHVubmVsX3N0YXRlICphLCBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmIpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05NTctXHQgICAgICAgaW5mb19hLVx1MDAzZW9wdGlvbnNfbGVuICE9IGluZm9fYi1cdTAwM2VvcHRpb25zX2xlbiB8fFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo5NTg6XHQgICAgICAgbWVtY21wKGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mb19hKSxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTU5Olx0XHQgICAgICBpcF90dW5uZWxfaW5mb19vcHRzKGluZm9fYiksIGluZm9fYS1cdTAwM2VvcHRpb25zX2xlbik7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTk2MC19XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTQ5MD1zdGF0aWMgaW50IGlwNmVyc3Bhbl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtNTQ5LVx0XHRcdFx0XHRcdFx0ICAgIHNpemVvZigqZXJzaGRyKSk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6NTUwOlx0XHRcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcbm5ldC9pcHY2L2lwNl9ncmUuYy01NTEtXHRcdFx0bWQtXHUwMDNldmVyc2lvbiA9IHZlcjtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9OTIxPXN0YXRpYyBuZXRkZXZfdHhfdCBpcDZlcnNwYW5fdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtOTk5LVx0XHRcdGdvdG8gdHhfZXJyO1xubmV0L2lwdjYvaXA2X2dyZS5jOjEwMDA6XHRcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTAwMS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF90dW5uZWwuYz00MTk9c3RhdGljIGludCBuZnRfdHVubmVsX29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmMtNDk1LSNlbmRpZlxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmM6NDk2Olx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoXHUwMDI2bWQtXHUwMDNldS50dW5faW5mbywgXHUwMDI2cHJpdi1cdTAwM2VvcHRzLnUsIHByaXYtXHUwMDNlb3B0cy5sZW4sXG5uZXQvbmV0ZmlsdGVyL25mdF90dW5uZWwuYy00OTctXHRcdFx0XHRwcml2LVx1MDAzZW9wdHMuZmxhZ3MpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM9MTAwMD1pbnQgb3ZzX2Zsb3dfa2V5X2V4dHJhY3QoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTEwMTktXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjEwMjA6XHRcdFx0aXBfdHVubmVsX2luZm9fb3B0c19nZXQoVFVOX01FVEFEQVRBX09QVFMoa2V5LCB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiksXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTEwMjEtXHRcdFx0XHRcdFx0dHVuX2luZm8pO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYz05Nzk9aW50IG92c19ubGFfcHV0X3R1bm5lbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTk4Mi1cdHJldHVybiBfX2lwX3R1bl90b19ubGF0dHIoc2tiLCBcdTAwMjZ0dW5faW5mby1cdTAwM2VrZXksXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM6OTgzOlx0XHRcdFx0ICBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKSxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy05ODQtXHRcdFx0XHQgIHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYz0yODAwPXN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfc2V0X3R1bihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0yODcyLVx0ICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM6Mjg3MzpcdGlwX3R1bm5lbF9pbmZvX29wdHNfc2V0KHR1bl9pbmZvLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTI4NzQtXHRcdFx0XHRUVU5fTUVUQURBVEFfT1BUUyhcdTAwMjZrZXksIGtleS50dW5fb3B0c19sZW4pLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYz0zODAyPXN0YXRpYyBpbnQgc2V0X2FjdGlvbl90b19hdHRyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmEsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTM4MTgtXHRcdGVyciA9ICBpcF90dW5fdG9fbmxhdHRyKHNrYiwgXHUwMDI2dHVuX2luZm8tXHUwMDNla2V5LFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jOjM4MTk6XHRcdFx0XHRcdGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTM4MjAtXHRcdFx0XHRcdHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuLFxuLS1cbm5ldC9wc2FtcGxlL3BzYW1wbGUuYz0yMTY9c3RhdGljIGludCBfX3BzYW1wbGVfaXBfdHVuX3RvX25sYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9wc2FtcGxlL3BzYW1wbGUuYy0yMTktXHR1bnNpZ25lZCBzaG9ydCB0dW5fcHJvdG8gPSBpcF90dW5uZWxfaW5mb19hZih0dW5faW5mbyk7XG5uZXQvcHNhbXBsZS9wc2FtcGxlLmM6MjIwOlx0Y29uc3Qgdm9pZCAqdHVuX29wdHMgPSBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKTtcbm5ldC9wc2FtcGxlL3BzYW1wbGUuYy0yMjEtXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2tleSAqdHVuX2tleSA9IFx1MDAyNnR1bl9pbmZvLVx1MDAzZWtleTtcbi0tXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYz0yOTY9c3RhdGljIGludCB0dW5uZWxfa2V5X29wdHNfc2V0KHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxuLS1cbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMwMy1cdFx0X19zZXRfYml0KElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKTtcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjMwNDpcdFx0cmV0dXJuIHR1bm5lbF9rZXlfY29weV9vcHRzKG5sYSwgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMwNS1cdFx0XHRcdFx0ICAgIG9wdHNfbGVuLCBleHRhY2spO1xuLS1cbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMxMS1cdFx0X19zZXRfYml0KElQX1RVTk5FTF9WWExBTl9PUFRfQklULCBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MpO1xubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6MzEyOlx0XHRyZXR1cm4gdHVubmVsX2tleV9jb3B5X29wdHMobmxhLCBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pLFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtMzEzLVx0XHRcdFx0XHQgICAgb3B0c19sZW4sIGV4dGFjayk7XG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtMzE5LVx0XHRfX3NldF9iaXQoSVBfVFVOTkVMX0VSU1BBTl9PUFRfQklULCBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MpO1xubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6MzIwOlx0XHRyZXR1cm4gdHVubmVsX2tleV9jb3B5X29wdHMobmxhLCBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pLFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtMzIxLVx0XHRcdFx0XHQgICAgb3B0c19sZW4sIGV4dGFjayk7XG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9NTc2PXN0YXRpYyBpbnQgdHVubmVsX2tleV9nZW5ldmVfb3B0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtNTc4LXtcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjU3OTpcdGNvbnN0IHU4ICpzcmMgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtNTgwLVx0aW50IGxlbiA9IGluZm8tXHUwMDNlb3B0aW9uc19sZW47XG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9NjA4PXN0YXRpYyBpbnQgdHVubmVsX2tleV92eGxhbl9vcHRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy02MTAte1xubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6NjExOlx0Y29uc3Qgc3RydWN0IHZ4bGFuX21ldGFkYXRhICptZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7XG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy02MTItXHRzdHJ1Y3QgbmxhdHRyICpzdGFydDtcbi0tXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYz02Mjc9c3RhdGljIGludCB0dW5uZWxfa2V5X2Vyc3Bhbl9vcHRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy02Mjkte1xubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6NjMwOlx0Y29uc3Qgc3RydWN0IGVyc3Bhbl9tZXRhZGF0YSAqbWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtNjMxLVx0c3RydWN0IG5sYXR0ciAqc3RhcnQ7XG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9ODM5PXR1bm5lbF9rZXlfZ2VuZXZlX29wdHNfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTg0MC17XG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYzo4NDE6XHRjb25zdCB1OCAqc3JjID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTg0Mi1cdGludCBsZW4gPSBpbmZvLVx1MDAzZW9wdGlvbnNfbGVuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY2OQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgbHd0dW5uZWxfc3RhdGVfYWxsb2NgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYGx3dHVubmVsX3N0YXRlX2FsbG9jYC4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyB0aGUgbWVtb3J5IGluaXRpYWxpemF0aW9uIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIGFsbG9jYXRpb24g4oCTIGFyZSB0aGV5IHplcm9pbmcgdGhlIG1lbW9yeSwgdXNpbmcgYG1lbXNldGAsIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGlzIGNydWNpYWw7IGl0IGltcGFjdHMgc2VjdXJpdHksIHBlcmZvcm1hbmNlLCBhbmQgb3ZlcmFsbCBzdGFiaWxpdHkuIEkgbmVlZCB0byBrbm93IGlmIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGEgY2xlYW4gc2xhdGUgb3IgaWYgdGhlcmUmIzM5O3MgcG90ZW50aWFsIGZvciByZXNpZHVhbCBkYXRhIGlzc3Vlcy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBkbyBpdC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWNzIG9mIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHd0dW5uZWxfc3RhdGVfYWxsb2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0xMjk9aW50IGx3dHVubmVsX2dldF9lbmNhcF9zaXplKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpO1xuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoxMzA6c3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3R1bm5lbF9zdGF0ZV9hbGxvYyhpbnQgaGRyX2xlbik7XG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oLTEzMS1pbnQgbHd0dW5uZWxfY21wX2VuY2FwKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYSwgc3RydWN0IGx3dHVubmVsX3N0YXRlICpiKTtcbi0tXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oPTIzNT1zdGF0aWMgaW5saW5lIGludCBsd3R1bm5lbF9nZXRfZW5jYXBfc2l6ZShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlKVxuLS1cbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMjM5LVxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoyNDA6c3RhdGljIGlubGluZSBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHVubmVsX3N0YXRlX2FsbG9jKGludCBoZHJfbGVuKVxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0yNDEte1xuLS1cbm5ldC9jb3JlL2x3dF9icGYuYz0zODM9c3RhdGljIGludCBicGZfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4tLVxubmV0L2NvcmUvbHd0X2JwZi5jLTQwMy1cbm5ldC9jb3JlL2x3dF9icGYuYzo0MDQ6XHRuZXd0cyA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHNpemVvZigqYnBmKSk7XG5uZXQvY29yZS9sd3RfYnBmLmMtNDA1LVx0aWYgKCFuZXd0cylcbi0tXG5uZXQvY29yZS9sd3R1bm5lbC5jPTMzPXN0YXRpYyBjb25zdCBjaGFyICpsd3R1bm5lbF9lbmNhcF9zdHIoZW51bSBsd3R1bm5lbF9lbmNhcF90eXBlcyBlbmNhcF90eXBlKVxuLS1cbm5ldC9jb3JlL2x3dHVubmVsLmMtNjgtXG5uZXQvY29yZS9sd3R1bm5lbC5jOjY5OnN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0dW5uZWxfc3RhdGVfYWxsb2MoaW50IGVuY2FwX2xlbilcbm5ldC9jb3JlL2x3dHVubmVsLmMtNzAte1xuLS1cbm5ldC9jb3JlL2x3dHVubmVsLmMtNzYtfVxubmV0L2NvcmUvbHd0dW5uZWwuYzo3NzpFWFBPUlRfU1lNQk9MX0dQTChsd3R1bm5lbF9zdGF0ZV9hbGxvYyk7XG5uZXQvY29yZS9sd3R1bm5lbC5jLTc4LVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9Njg4PXN0YXRpYyBpbnQgaXBfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTcwNi1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6NzA3Olx0bmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCp0dW5faW5mbykgJiM0Mzsgb3B0X2xlbik7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTcwOC1cdGlmICghbmV3X3N0YXRlKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9OTgyPXN0YXRpYyBpbnQgaXA2X3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDAwLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxMDAxOlx0bmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCp0dW5faW5mbykgJiM0Mzsgb3B0X2xlbik7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTEwMDItXHRpZiAoIW5ld19zdGF0ZSlcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jPTEzNT1zdGF0aWMgaW50IGlsYV9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTIyNS1cbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6MjI2Olx0bmV3dHMgPSBsd3R1bm5lbF9zdGF0ZV9hbGxvYyhzaXplb2YoKmlsd3QpKTtcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMjI3LVx0aWYgKCFuZXd0cylcbi0tXG5uZXQvaXB2Ni9pb2FtNl9pcHR1bm5lbC5jPTk5PXN0YXRpYyBpbnQgaW9hbTZfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4tLVxubmV0L2lwdjYvaW9hbTZfaXB0dW5uZWwuYy0xNjMtXHRsZW5fYWxpZ25lZCA9IEFMSUdOKHRyYWNlLVx1MDAzZXJlbWxlbiAqIDQsIDgpO1xubmV0L2lwdjYvaW9hbTZfaXB0dW5uZWwuYzoxNjQ6XHRsd3QgPSBsd3R1bm5lbF9zdGF0ZV9hbGxvYyhzaXplb2YoKmlsd3QpICYjNDM7IGxlbl9hbGlnbmVkKTtcbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmMtMTY1LVx0aWYgKCFsd3QpXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9Njc9c3RhdGljIGludCBycGxfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtOTgtXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzo5OTpcdG5ld3RzID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc3JoX2xlbiAmIzQzOyBzaXplb2YoKnJsd3QpKTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTEwMC1cdGlmICghbmV3dHMpXG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTc0Nz1zdGF0aWMgaW50IHNlZzZfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTgwNy1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYzo4MDg6XHRuZXd0cyA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHR1bmluZm9fbGVuICYjNDM7IHNpemVvZigqc2x3dCkpO1xubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTgwOS1cdGlmICghbmV3dHMpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI1MTc9c3RhdGljIGludCBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNTM4LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI1Mzk6XHRuZXd0cyA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHNpemVvZigqc2x3dCkpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI1NDAtXHRpZiAoIW5ld3RzKVxuLS1cbm5ldC9tcGxzL21wbHNfaXB0dW5uZWwuYz0xNjM9c3RhdGljIGludCBtcGxzX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC9tcGxzL21wbHNfaXB0dW5uZWwuYy0xODgtXG5uZXQvbXBscy9tcGxzX2lwdHVubmVsLmM6MTg5Olx0bmV3dHMgPSBsd3R1bm5lbF9zdGF0ZV9hbGxvYyhzdHJ1Y3Rfc2l6ZSh0dW5fZW5jYXBfaW5mbywgbGFiZWwsXG5uZXQvbXBscy9tcGxzX2lwdHVubmVsLmMtMTkwLVx0XHRcdFx0XHRcdCBuX2xhYmVscykpO1xuLS1cbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYz03Mz1zdGF0aWMgaW50IHhmcm1pX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy05MS1cbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYzo5MjpcdG5ld19zdGF0ZSA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHNpemVvZigqaW5mbykpO1xubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTkzLVx0aWYgKCFuZXdfc3RhdGUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NDIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHBlcnNwZWN0aXZlIG9uIHdoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBMV1R1bm5lbCBDb2RlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBjcmFjayBvcGVuIGBuZXQvY29yZS9sd3R1bm5lbC5jYCBhbmQgemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSA2OS4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIGxvZ2ljIG9mIExpZ2h0d2VpZ2h0IFR1bm5lbGluZywgYW5kIHRoYXQgbGluZSBtaWdodCBiZSBhIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGZ1bmN0aW9uLCBkYXRhIHN0cnVjdHVyZSwgb3Igc29tZSBjcml0aWNhbCBjb25kaXRpb25hbCBpbiB0aGUgdHVubmVsIHNldHVwIG9yIGRhdGEgcGF0aC4gTXkgbWluZCBpcyBhbHJlYWR5IHNrZXRjaGluZyBvdXQgdGhlIHBvdGVudGlhbCBhcmVhczogaXQgY291bGQgYmUgcmVsYXRlZCB0byBlbmNhcHN1bGF0aW9uLCBkZWNhcHN1bGF0aW9uLCBoZWFkZXIgbWFuaXB1bGF0aW9uLCBmbG93IGNvbnRyb2wsIG9yIGV2ZW4gZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSB0dW5uZWwgbW9kdWxlLiBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIHRoYXQgbGluZSBudW1iZXIgbWlnaHQgZ2l2ZSB1cyBpbmZvcm1hdGlvbiBvbiB0aGUgdHVubmVsIGRyaXZlciBpdHNlbGYsIGl0cyBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGxpa2UgdGhlIHJvdXRpbmcgc3Vic3lzdGVtIG9yIHRoZSBuZXR3b3JrIHN0YWNrLCBvciB0aGUgYWN0dWFsIGRhdGEgcHJvY2Vzc2luZyBoYXBwZW5pbmcgd2l0aGluIHRoZSB0dW5uZWwuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2x3dHVubmVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY1Olx0fVxuICA2NjpcdFxuICA2NzpcdCNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqL1xuICA2ODpcdFxuICA2OTpcdHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0dW5uZWxfc3RhdGVfYWxsb2MoaW50IGVuY2FwX2xlbilcbiAgNzA6XHR7XG4gIDcxOlx0XHRzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3cztcbiAgNzI6XHRcbiAgNzM6XHRcdGx3cyA9IGt6YWxsb2Moc2l6ZW9mKCpsd3MpICYjNDM7IGVuY2FwX2xlbiwgR0ZQX0FUT01JQyk7XG4gIDc0Olx0XG4gIDc1Olx0XHRyZXR1cm4gbHdzO1xuICA3NjpcdH1cbiAgNzc6XHRFWFBPUlRfU1lNQk9MX0dQTChsd3R1bm5lbF9zdGF0ZV9hbGxvYyk7XG4gIDc4Olx0XG4gIDc5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgX19yY3UgKlxuICA4MDpcdFx0XHRsd3R1bl9lbmNhcHNbTFdUVU5ORUxfRU5DQVBfTUFYICYjNDM7IDFdIF9fcmVhZF9tb3N0bHk7XG4gIDgxOlx0XG4gIDgyOlx0aW50IGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyAqb3BzLFxuICA4MzpcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBudW0pXG4gIDg0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA5MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBQYXJhbWV0ZXIgVXNhZ2UqKgoKT2theSwgc28gYGx3dHVubmVsX3N0YXRlX2FsbG9jYCBpcyB1c2luZyBga3phbGxvY2AuIFRoYXQgbWVhbnMgdGhlIHdob2xlIGJsb2NrIG9mIG1lbW9yeSBJJiMzOTttIGdldHRpbmcgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgaW5jbHVkaW5nIGBlbmNhcF9sZW5gLiBUaGlzIGluY2x1ZGVzIHRoZSBgdHVuX2luZm9gIHN0cnVjdCBhbmQgdGhhdCB0cmFpbGluZyBvcHRpb25zIGJ1ZmZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcywgc3BlY2lmaWNhbGx5LCB3aHkgdGhpcyBwYXRjaCB3YXMgbWFkZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUgZ2l0IGxvZywgc2VlIGlmIEkgY2FuIGZpbmQgY29udGV4dCBhcm91bmQgdGhlIGNoYW5nZSwgZXNwZWNpYWxseSBsb29raW5nIGF0IHRoZSBgb3B0aW9uc19sZW5gIGZpZWxkLiBJJiMzOTttIHdvbmRlcmluZyB3aHkgaXQgd2FzIG1vdmVkICpiZWZvcmUqIHRoZSBjYWxsIHRvIGBpcF90dW5fc2V0X29wdHNgIGZyb20gKmFmdGVyKiB0aGF0IGNhbGwuCgpIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcsIGBpcF90dW5fYnVpbGRfc3RhdGVgIG1vdmVkIGB0dW5faW5mby0mZ3Q7b3B0aW9uc19sZW4gPSBvcHRfbGVuO2AuIEkmIzM5O3ZlIGdvdCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGhlcmUuIERvZXMgYGlwX3R1bl9zZXRfb3B0c2AgaXRzZWxmIGFjdHVhbGx5IHVzZSBgdHVuX2luZm8tJmd0O29wdGlvbnNfbGVuYD8gVGltZSB0byBkb3VibGUtY2hlY2sgdGhhdCBmdW5jdGlvbiwgbWF5YmUgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIEkgbWlzc2VkLiBPciwgcGVyaGFwcyBzb21ldGhpbmcgKmNhbGxlZCogZnJvbSB3aXRoaW4gYGlwX3R1bl9zZXRfb3B0c2AgaXMgdGhlIGN1bHByaXQuIEFsdGVybmF0aXZlbHksIGlzIGFueXRoaW5nIGVsc2UgaW4gdGhlIGNvZGUgYmFzZSBtYWtpbmcgdXNlIG9mIHRoZSBgb3B0aW9uc19sZW5gIGZpZWxkPyBUbyBiZSBzdXJlLCBJJiMzOTtsbCByZXZpZXcgZ2l0IGNvbW1pdCBoaXN0b3J5IGFuZCBkbyBhIGdyZXAgZm9yICYjMzQ7b3B0aW9uc19sZW4mIzM0OyB3aXRoaW4gYG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3B0aW9uc19sZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9MTQyPXN0cnVjdCBtZXRhZGF0YV9kc3QgKmlwdHVubmVsX21ldGFkYXRhX3JlcGx5KHN0cnVjdCBtZXRhZGF0YV9kc3QgKm1kLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTUzLVx0c3JjID0gXHUwMDI2bWQtXHUwMDNldS50dW5faW5mbztcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6MTU0Olx0cmVzID0gbWV0YWRhdGFfZHN0X2FsbG9jKHNyYy1cdTAwM2VvcHRpb25zX2xlbiwgTUVUQURBVEFfSVBfVFVOTkVMLCBmbGFncyk7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTE1NS1cdGlmICghcmVzKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTY3LVx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoZHN0LCBpcF90dW5uZWxfaW5mb19vcHRzKHNyYyksXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjE2ODpcdFx0XHRcdHNyYy1cdTAwM2VvcHRpb25zX2xlbiwgdHVuX2ZsYWdzKTtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTY5LVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9Njg4PXN0YXRpYyBpbnQgaXBfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTcxMy1cdHR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKG5ld19zdGF0ZSk7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjcxNDpcdHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNzE1LVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9NzcyPXN0YXRpYyBpbnQgaXBfdHVuX2ZpbGxfZW5jYXBfb3B0c19nZW5ldmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTc4Mi1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6NzgzOlx0d2hpbGUgKHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuIFx1MDAzZSBvZmZzZXQpIHtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNzg0LVx0XHRvcHQgPSBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKSAmIzQzOyBvZmZzZXQ7XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz04OTk9c3RhdGljIGludCBpcF90dW5fb3B0c19ubHNpemUoc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTExLVx0XHRvcHRfbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZSgwKTtcdC8qIExXVFVOTkVMX0lQX09QVFNfR0VORVZFICovXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjkxMjpcdFx0d2hpbGUgKGluZm8tXHUwMDNlb3B0aW9uc19sZW4gXHUwMDNlIG9mZnNldCkge1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05MTMtXHRcdFx0b3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSAmIzQzOyBvZmZzZXQ7XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz05NTA9c3RhdGljIGludCBpcF90dW5fY21wX2VuY2FwKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYSwgc3RydWN0IGx3dHVubmVsX3N0YXRlICpiKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTU2LVx0ICAgICAgIGluZm9fYS1cdTAwM2Vtb2RlICE9IGluZm9fYi1cdTAwM2Vtb2RlIHx8XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjk1NzpcdCAgICAgICBpbmZvX2EtXHUwMDNlb3B0aW9uc19sZW4gIT0gaW5mb19iLVx1MDAzZW9wdGlvbnNfbGVuIHx8XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTk1OC1cdCAgICAgICBtZW1jbXAoaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvX2EpLFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo5NTk6XHRcdCAgICAgIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mb19iKSwgaW5mb19hLVx1MDAzZW9wdGlvbnNfbGVuKTtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTYwLX1cbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTk4Mj1zdGF0aWMgaW50IGlwNl90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTAwNy1cdHR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKG5ld19zdGF0ZSk7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjEwMDg6XHR0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTEwMDktXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz0xMDg5PXZvaWQgX19pbml0IGlwX3R1bm5lbF9jb3JlX2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTEwOTEtXHQvKiBJZiB5b3UgbGFuZCBoZXJlLCBtYWtlIHN1cmUgd2hldGhlciBpbmNyZWFzaW5nIGlwX3R1bm5lbF9pbmZvJiMzOTtzXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjEwOTI6XHQgKiBvcHRpb25zX2xlbiBpcyBhIHJlYXNvbmFibGUgY2hvaWNlIHdpdGggaXRzIHVzYWdlIGluIGZyb250IGVuZHNcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTA5My1cdCAqIChmLmUuLCBpdCYjMzk7cyBwYXJ0IG9mIGZsb3cga2V5cywgZXRjKS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgaXBfdHVubmVsX2luZm9fb3B0c2AgTWFjcm8qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pYCBtYWNyby4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIHRoaXMgSVAgdHVubmVsaW5nIGltcGxlbWVudGF0aW9uLiBXaGVyZSYjMzk7cyB0aGUgZGVmaW5pdGlvbj8gUmlnaHQsIGl0JiMzOTtzIHByb2JhYmx5IGluIGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLiBMZXQgbWUgZ28gcHVsbCB0aGF0IHVwIGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIGRvbmUgaW4gdGhlcmUuIFRoaXMgbWFjcm8gcHJvYmFibHkgZXhwYW5kcyB0byBhIGNvbWJpbmF0aW9uIG9mIHN0cnVjdCBtZW1iZXIgYWNjZXNzZXMgYW5kIHR5cGUgY2FzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIG91dHB1dCB0byBmdWxseSBncmFzcCB0aGUgaW5mb3JtYXRpb24gYmVpbmcgaGFuZGxlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmLCB0aGVyZSBhcmUgc28gbWFueSBvZiB0aGVzZSBtYWNyb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXBfdHVubmVscy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcbiAxMDE6XHQvKiBNYXhpbXVtIHR1bm5lbCBvcHRpb25zIGxlbmd0aC4gKi9cbiAxMDI6XHQjZGVmaW5lIElQX1RVTk5FTF9PUFRTX01BWFx0XHRcdFx0XHRcXFxuIDEwMzpcdFx0R0VOTUFTSygoc2l6ZW9mX2ZpZWxkKHN0cnVjdCBpcF90dW5uZWxfaW5mbyxcdFx0XFxcbiAxMDQ6XHRcdFx0XHQgICAgICBvcHRpb25zX2xlbikgKiBCSVRTX1BFUl9CWVRFKSAtIDEsIDApXG4gMTA1Olx0XG4gMTA2Olx0I2RlZmluZSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pXHRcdFx0XHRcXFxuIDEwNzpcdFx0X0dlbmVyaWMoaW5mbyxcdFx0XHRcdFx0XHRcXFxuIDEwODpcdFx0XHQgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICogOiAoKGNvbnN0IHZvaWQgKikoaW5mbyktXHUwMDNlb3B0aW9ucyksXFxcbiAxMDk6XHRcdFx0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqIDogKCh2b2lkICopKGluZm8pLVx1MDAzZW9wdGlvbnMpXFxcbiAxMTA6XHRcdClcbiAxMTE6XHRcbiAxMTI6XHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8ge1xuIDExMzpcdFx0c3RydWN0IGlwX3R1bm5lbF9rZXlcdGtleTtcbiAxMTQ6XHRcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXBcdGVuY2FwO1xuIDExNTpcdCNpZmRlZiBDT05GSUdfRFNUX0NBQ0hFXG4gMTE2Olx0XHRzdHJ1Y3QgZHN0X2NhY2hlXHRkc3RfY2FjaGU7XG4gMTE3Olx0I2VuZGlmXG4gMTE4Olx0XHR1OFx0XHRcdG9wdGlvbnNfbGVuO1xuIDExOTpcdFx0dThcdFx0XHRtb2RlO1xuIDEyMDpcdFx0dThcdFx0XHRvcHRpb25zW10gX19hbGlnbmVkX2xhcmdlc3QgX19jb3VudGVkX2J5KG9wdGlvbnNfbGVuKTtcbiAxMjE6XHR9O1xuIDEyMjpcdFxuIDEyMzpcdC8qIDZyZCBwcmVmaXgvcmVsYXkgaW5mb3JtYXRpb24gKi9cbiAxMjQ6XHQjaWZkZWYgQ09ORklHX0lQVjZfU0lUXzZSRFxuIDEyNTpcdHN0cnVjdCBpcF90dW5uZWxfNnJkX3Bhcm0ge1xuIDEyNjpcdFx0c3RydWN0IGluNl9hZGRyXHRcdHByZWZpeDtcbiAxMjc6XHRcdF9fYmUzMlx0XHRcdHJlbGF5X3ByZWZpeDtcbiAxMjg6XHRcdHUxNlx0XHRcdHByZWZpeGxlbjtcbiAxMjk6XHRcdHUxNlx0XHRcdHJlbGF5X3ByZWZpeGxlbjtcbiAxMzA6XHRcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG4gMTMxOlx0fTtcbiAxMzI6XHQjZW5kaWZcbiAxMzM6XHRcbiAxMzQ6XHRzdHJ1Y3QgaXBfdHVubmVsX3BybF9lbnRyeSB7XG4gMTM1Olx0XHRzdHJ1Y3QgaXBfdHVubmVsX3BybF9lbnRyeSBfX3JjdSAqbmV4dDtcbiAxMzY6XHRcdF9fYmUzMlx0XHRcdFx0YWRkcjtcbiAxMzc6XHRcdHUxNlx0XHRcdFx0ZmxhZ3M7XG4gMTM4Olx0XHRzdHJ1Y3QgcmN1X2hlYWRcdFx0XHRyY3VfaGVhZDtcbiAxMzk6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTY1MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBaGEhIEEgQm91bmRzIFZpb2xhdGlvbiBGaXghKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCAqYm9vbSEqIExpbmUgMTIwIGp1c3QganVtcGVkIG91dCBhdCBtZS4gSSBzZWUgdGhhdCB0aGUgYF9fY291bnRlZF9ieShvcHRpb25zX2xlbilgIGhhcyBiZWVuIGFkZGVkIHRvIGB1OCBvcHRpb25zW11gLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBiZWNhdXNlIG5vdywgYW55dGltZSBgb3B0aW9uc19sZW5gIGlzIHplcm8sIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgd2l0aCBhIHplcm8tbGVuZ3RoIGJvdW5kLgoKQW5kIHRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgb2YgdGhvc2UgYGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbylgIGFjY2Vzc2VzIHdpdGhpbiB0aGUgYGlwX3R1bl9wYXJzZV9vcHRzXypgIGZ1bmN0aW9ucy4gQmVmb3JlIHRoaXMgY2hhbmdlLCB3aGVuIGBvcHRpb25zX2xlbmAgd2FzIHplcm8gKHdoaWNoLCBsZXQmIzM5O3MgYmUgaG9uZXN0LCBpdCB3YXMgaW5pdGlhbGl6ZWQgdG8gd2l0aCBga3phbGxvY2ApLCBhY2Nlc3NpbmcgYGluZm8tJmd0O29wdGlvbnNgIHdvdWxkIGJlIGEgc3RyYWlnaHQtdXAgcG90ZW50aWFsIGJvdW5kcyB2aW9sYXRpb24hIEVzcGVjaWFsbHkgaWYgd2UgaGF2ZSBlaXRoZXIgYENPTkZJR19VQlNBTl9CT1VORFNgIGVuYWJsZWQsIG9yIGFyZSBjb21waWxpbmcgd2l0aCBDbGFuZyYjMzk7cyBib3VuZHMgc2FuaXRpemVycy4gV2UmIzM5O2Qgc2VlIGEgYmlnLCBmYXQgd2FybmluZyByaWdodCB0aGVyZSBpbiB0aGUgb3V0cHV0IQoKTm93LCBiZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIExldCYjMzk7cyBzZWUgaWYgdGhlIEdpdCBsb2cgZ2l2ZXMgdXMgYW55IGNsdWVzLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGNvbW1pdHMgcmVsYXRlZCB0byBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2Agb3IganVzdCBzdGFydCBzZWFyY2hpbmcgZm9yIGNvbW1pdCBtZXNzYWdlcy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBoaXN0b3J5IGFuZCBzZWUgdGhlIG9yaWdpbmFsIGludGVudCwgc2hhbGwgd2U/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY291bnRlZF9ieVxcKG9wdGlvbnNfbGVuXFwpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaD0xMTI9c3RydWN0IGlwX3R1bm5lbF9pbmZvIHtcbi0tXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtMTE5LVx0dThcdFx0XHRtb2RlO1xuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjEyMDpcdHU4XHRcdFx0b3B0aW9uc1tdIF9fYWxpZ25lZF9sYXJnZXN0IF9fY291bnRlZF9ieShvcHRpb25zX2xlbik7XG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtMTIxLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzczCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgdGhlIGBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pYCBDb21taXQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgdHJhY2sgZG93biB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBgX19jb3VudGVkX2J5KG9wdGlvbnNfbGVuKWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgc3BlY2lmaWMgYWRkaXRpb24uIEl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoYXQgcHJvYmxlbSBpdCBzb2x2ZXMsIG9yIGV2ZW4gd2hhdCBjb250ZXh0IGl0IGJlbG9uZ3MgaW4uIFdoYXQgZGVzaWduIGRlY2lzaW9ucyBsZWQgdG8gaW5jbHVkaW5nIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eT8gSSB3YW50IHRvIGV4YW1pbmUgdGhlIGNvbW1pdCBtZXNzYWdlLCB0aGUgc3Vycm91bmRpbmcgY29kZSBjaGFuZ2VzLCBhbmQgYW55IHJlbGF0ZWQgaXNzdWVzIG9yIGRpc2N1c3Npb25zLiBXZXJlIHRoZXJlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zPyBSZWZhY3RvcmluZyBnb2Fscz8gSXMgdGhpcyBwYXJ0IG9mIGEgbGFyZ2VyIHBhdHRlcm4gb3Igb3B0aW1pemF0aW9uIHN0cmF0ZWd5IHdpdGhpbiB0aGlzIGNvZGViYXNlPyBHZXR0aW5nIHRoZSBmdWxsIHBpY3R1cmUgaGVyZSBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY29udGV4dC4gSSYjMzk7bSBob3BpbmcgdGhlIGNvbW1pdCBtZXNzYWdlIGlzIGNsZWFyIGFuZCB3ZWxsLXdyaXR0ZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY291bnRlZF9ieVxcKG9wdGlvbnNfbGVuXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTExMj1zdHJ1Y3QgaXBfdHVubmVsX2luZm8ge1xuLS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMTktXHR1OFx0XHRcdG1vZGU7XG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6MTIwOlx0dThcdFx0XHRvcHRpb25zW10gX19hbGlnbmVkX2xhcmdlc3QgX19jb3VudGVkX2J5KG9wdGlvbnNfbGVuKTtcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMjEtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3MjkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA4ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHZW5ldmUgT3B0aW9uIFBhcnNpbmcgYW5kIE1lbW9yeSBTYWZldHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBgaXBfdHVuX3BhcnNlX29wdHNfZ2VuZXZlYCBjb2RlLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgcG90ZW50aWFsIGZvciBhIGJvdW5kcyBjaGVjayBmYWlsdXJlIHdoZW4gd3JpdGluZyBHZW5ldmUgb3B0aW9ucy4gVGhlIHByb2JsZW0gYXJpc2VzIGJlY2F1c2UgYHR1bl9pbmZvLSZndDtvcHRpb25zX2xlbmAgaXNuJiMzOTt0IHNldCAqYmVmb3JlKiBgaXBfdHVuX3NldF9vcHRzKClgIGlzIGNhbGxlZC4gIFRoaXMgZnVuY3Rpb24gaXMgd3JpdGluZyB0byBgaW5mby0mZ3Q7b3B0aW9uc2AsIHdoaWNoIGlzIGVzc2VudGlhbGx5IGEgcmVnaW9uIG9mIG1lbW9yeSwgYnV0IGJlY2F1c2UgYG9wdGlvbnNfbGVuYCBpcyBpbml0aWFsbHkgemVybywgY29tcGlsZXIgaW5zdHJ1bWVudGF0aW9uIChzcGVjaWZpY2FsbHkgYF9fY291bnRlZF9ieWApIGRldGVjdHMgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBvciByZWFkLiBNb3ZpbmcgYHR1bl9pbmZvLSZndDtvcHRpb25zX2xlbiA9IG9wdF9sZW47YCB1cCBzb2x2ZXMgdGhhdCBieSBtYWtpbmcgdGhlIGxlbmd0aCB2YWxpZCAqYmVmb3JlKiBhbnkgYWNjZXNzIHRvIGBpbmZvLSZndDtvcHRpb25zYC4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoZSBtZW1vcnkgaW1wbGljYXRpb25zLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBtZW1vcnkgc2FuaXRpemVycyBsaWtlIEtNU0FOIGFuZCBLQVNBTi4gIElmIGBpcF90dW5fc2V0X29wdHMoKWAgKmZhaWxzKiwgYG5ld19zdGF0ZWAgKHdoaWNoIGhvbGRzIG91ciBgdHVuX2luZm9gKSBpcyBpbW1lZGlhdGVseSBmcmVlZC4gTm8gb25lIGV2ZXIgcmVhZHMgZnJvbSBpdC4gU28sIGEgZmFpbHVyZSBpcyBzYWZlIGluIHRoaXMgY29udGV4dC4KCklmIGBpcF90dW5fc2V0X29wdHMoKWAgKnN1Y2NlZWRzKiwgd2UmIzM5O3ZlIHdyaXR0ZW4gYG9wdF9sZW5gIGJ5dGVzIGludG8gYHR1bl9pbmZvLSZndDtvcHRpb25zYC4gIENydWNpYWxseSwgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHVzZXMgYGt6YWxsb2NgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IG1lYW5zIGFsbCB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCBpbmNsdWRpbmcgYG5ld19zdGF0ZWAsIGB0dW5faW5mb2AgaXRzZWxmIGFuZCB0aGUgc3BhY2UgZm9yIHRoZSBvcHRpb25zLiAgVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgdGhlcmVmb3JlIHRoZXJlJiMzOTtzIG5vIHdheSB0byBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuCgpTbywgZG9lcyB0aGlzIGNoYW5nZSBpbnRyb2R1Y2UgYW55ICpuZXcqIG1lbW9yeS1zYWZldHkgaXNzdWVzPyBObywgYmVjYXVzZSB0aGUgd3JpdGUgdG8gYG9wdGlvbnNgIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgYGlwX3R1bl9zZXRfb3B0c2AgaXMgcmVhZGluZyB2YWxpZGF0ZWQgbmV0bGluayBhdHRyaWJ1dGVzLiBgdHVuX2luZm9gIG9yIGBuZXdfc3RhdGVgIGFyZSBub3QgYmVpbmcgZGlyZWN0bHkgY29waWVkIHRvIHVzZXIgc3BhY2UuICBXaGVuIGR1bXBpbmcgcm91dGUgYW5kIHR1bm5lbCBpbmZvIChgcnRubF9maWxsX2lmaW5mb2ApLCBgaXBfdHVuX2ZpbGxfZW5jYXBfaW5mb2AgaXMgY2FsbGVkLiBUaGF0IHdvdWxkIGJlIHRoZSBwbGFjZSB0byBjaGVjayBidXQgdGhlIGFuYWx5c2lzIGZyb20gYmVmb3JlIGlzIHZhbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF90dW5fZmlsbF9lbmNhcF9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTg1MT1zdGF0aWMgaW50IGlwX3R1bl9maWxsX2VuY2FwX29wdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHR5cGUsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy04NzktXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjg4MDpzdGF0aWMgaW50IGlwX3R1bl9maWxsX2VuY2FwX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtODgxLVx0XHRcdFx0ICBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9OTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIGlwX3R1bl9sd3Rfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTY0LVx0LmRlc3Ryb3lfc3RhdGUgPSBpcF90dW5fZGVzdHJveV9zdGF0ZSxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTY1Olx0LmZpbGxfZW5jYXAgPSBpcF90dW5fZmlsbF9lbmNhcF9pbmZvLFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05NjYtXHQuZ2V0X2VuY2FwX3NpemUgPSBpcF90dW5fZW5jYXBfbmxzaXplLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQxMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGlwX3R1bl9maWxsX2VuY2FwX2luZm9gKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgaXBfdHVuX2ZpbGxfZW5jYXBfaW5mb2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZW5jYXBzdWxhdGlvbiBsb2dpYyBmb3IgdGhpcyB0dW5uZWwgc2V0dXAuIEkmIzM5O20gYXNzdW1pbmcgaXQgaGFuZGxlcyB0aGUgZGV0YWlscyByZXF1aXJlZCB0byBjb25zdHJ1Y3QgdGhlIG91dGVyIGhlYWRlciBmb3IgYSB0dW5uZWwgcGFja2V0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIHRoZSBpbm5lciBwYWNrZXQgZGV0YWlscywgbGlrZWx5IHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIElQIGFkZHJlc3NlcyBhbmQgbWF5YmUgc29tZSB0cmFuc3BvcnQgbGF5ZXIgcHJvdG9jb2wgaW5mb3JtYXRpb24sIGFuZCB0aGVuIGNyYWZ0IHRoZSBvdXRlciBJUCBoZWFkZXIgd2l0aCB0aGUgdHVubmVsIGVuZHBvaW50cy4gSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSB0aGUgdHVubmVsIGtleSAoaWYgYW55KSwgdGhlIHByb3RvY29sIHR5cGUgKGUuZy4sIEdSRSwgSVBJUCwgVlhMQU4pLCBhbmQgYW55IG9wdGlvbnMgdGhhdCBtaWdodCBuZWVkIHRvIGJlIHNldCBpbiB0aGUgb3V0ZXIgaGVhZGVyLiBJJiMzOTtsbCBiZSBzY3J1dGluaXppbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG5ldHdvcmsgc3RhY2smIzM5O3MgSVAgaGVhZGVyIGNvbnN0cnVjdGlvbiByb3V0aW5lcywgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSBjbGV2ZXJuZXNzIGluIGl0cyBoYW5kbGluZyBvZiBmcmFnbWVudGF0aW9uIG9yIE1UVSBjb25zaWRlcmF0aW9ucy4gVGhlIGdvYWwgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gaG93IHRoZSBlbmNhcHN1bGF0aW9uIHByb2Nlc3MgaXMgb3JjaGVzdHJhdGVkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODcwOlx0XG4gODcxOlx0XHRpZiAoZXJyKSB7XG4gODcyOlx0XHRcdG5sYV9uZXN0X2NhbmNlbChza2IsIG5lc3QpO1xuIDg3MzpcdFx0XHRyZXR1cm4gZXJyO1xuIDg3NDpcdFx0fVxuIDg3NTpcdFxuIDg3NjpcdFx0bmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7XG4gODc3Olx0XHRyZXR1cm4gMDtcbiA4Nzg6XHR9XG4gODc5Olx0XG4gODgwOlx0c3RhdGljIGludCBpcF90dW5fZmlsbF9lbmNhcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4gODgxOlx0XHRcdFx0XHQgIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpXG4gODgyOlx0e1xuIDg4MzpcdFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyA9IGx3dF90dW5faW5mbyhsd3RzdGF0ZSk7XG4gODg0Olx0XG4gODg1Olx0XHRpZiAobmxhX3B1dF9iZTY0KHNrYiwgTFdUVU5ORUxfSVBfSUQsIHR1bl9pbmZvLVx1MDAzZWtleS50dW5faWQsXG4gODg2Olx0XHRcdFx0IExXVFVOTkVMX0lQX1BBRCkgfHxcbiA4ODc6XHRcdCAgICBubGFfcHV0X2luX2FkZHIoc2tiLCBMV1RVTk5FTF9JUF9EU1QsIHR1bl9pbmZvLVx1MDAzZWtleS51LmlwdjQuZHN0KSB8fFxuIDg4ODpcdFx0ICAgIG5sYV9wdXRfaW5fYWRkcihza2IsIExXVFVOTkVMX0lQX1NSQywgdHVuX2luZm8tXHUwMDNla2V5LnUuaXB2NC5zcmMpIHx8XG4gODg5Olx0XHQgICAgbmxhX3B1dF91OChza2IsIExXVFVOTkVMX0lQX1RPUywgdHVuX2luZm8tXHUwMDNla2V5LnRvcykgfHxcbiA4OTA6XHRcdCAgICBubGFfcHV0X3U4KHNrYiwgTFdUVU5ORUxfSVBfVFRMLCB0dW5faW5mby1cdTAwM2VrZXkudHRsKSB8fFxuIDg5MTpcdFx0ICAgIG5sYV9wdXRfYmUxNihza2IsIExXVFVOTkVMX0lQX0ZMQUdTLFxuIDg5MjpcdFx0XHRcdCBpcF90dW5uZWxfZmxhZ3NfdG9fYmUxNih0dW5faW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKSkgfHxcbiA4OTM6XHRcdCAgICBpcF90dW5fZmlsbF9lbmNhcF9vcHRzKHNrYiwgTFdUVU5ORUxfSVBfT1BUUywgdHVuX2luZm8pKVxuIDg5NDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA4OTU6XHRcbiA4OTY6XHRcdHJldHVybiAwO1xuIDg5NzpcdH1cbiA4OTg6XHRcbiA4OTk6XHRzdGF0aWMgaW50IGlwX3R1bl9vcHRzX25sc2l6ZShzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXG4gOTAwOlx0e1xuIDkwMTpcdFx0aW50IG9wdF9sZW47XG4gOTAyOlx0XG4gOTAzOlx0XHRpZiAoIWlwX3R1bm5lbF9pc19vcHRpb25zX3ByZXNlbnQoaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKSlcbiA5MDQ6XHRcdFx0cmV0dXJuIDA7XG4gOTA1Olx0XG4gOTA2Olx0XHRvcHRfbGVuID0gbmxhX3RvdGFsX3NpemUoMCk7XHRcdC8qIExXVFVOTkVMX0lQX09QVFMgKi9cbiA5MDc6XHRcdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncykpIHtcbiA5MDg6XHRcdFx0c3RydWN0IGdlbmV2ZV9vcHQgKm9wdDtcbiA5MDk6XHRcdFx0aW50IG9mZnNldCA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDgwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgbHd0dW5uZWxfc3RhdGVgIEFsbG9jYXRpb24gYW5kIFVzYWdlKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IHRoZSBgbHd0dW5uZWxfc3RhdGVgIG1lbW9yeSBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvYygpYC4gVGhpcyBtZWFucyBpdCYjMzk7cyBndWFyYW50ZWVkIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IHJ1bGVzIG91dCBhIHdob2xlIGNsYXNzIG9mIHBvdGVudGlhbCBwcm9ibGVtcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgoKTmV4dCwgSSBvYnNlcnZlIHRoYXQgYHR1bl9pbmZvLSZndDtvcHRpb25zX2xlbmAgaXMgYmVpbmcgc2V0ICpiZWZvcmUqIHRoZSBjYWxsIHRvIGBpcF90dW5fc2V0X29wdHMoKWAuIFRoZSBpbnRlcmVzdGluZyB0aGluZyBoZXJlIGlzIHRoYXQgZXZlbiBpZiBgaXBfdHVuX3NldF9vcHRzKClgIGZhaWxzLCB0aGUgYG5ld19zdGF0ZWAgKHdoaWNoIHByZXN1bWFibHkgY29udGFpbnMgdGhlIGB0dW5faW5mb2AgZGF0YSkgaXMgaW1tZWRpYXRlbHkgZnJlZWQuIFNvLCB0aGUgc2NlbmFyaW8gZGVzY3JpYmVkIGlzOiB0aGUgY29kZSBlaXRoZXIgc2V0cyBgb3B0aW9uc19sZW5gIGFuZCB0aGVuIGZhaWxzLCBvciBzZXRzIGBvcHRpb25zX2xlbmAgYW5kIHRoZW4gc3VjY2VlZHMuIAoKVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGJvaWxzIGRvd24gdG8gdGhlICpvcmRlciogb2Ygc2V0dGluZyBgdHVuX2luZm8tJmd0O29wdGlvbnNfbGVuYCByZWxhdGl2ZSB0byB0aGUgY2FsbCB0byBgaXBfdHVuX3NldF9vcHRzKClgLiBCdXQsIGFuZCB0aGlzIGlzIGNydWNpYWwsIGB0dW5faW5mb2AgaXMgYSBsb2NhbCBwb2ludGVyIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBmdW5jdGlvbiwgbm90IHlldCBsaW5rZWQgaW50byBhbnkgcHVibGlzaGVkIGRhdGEgc3RydWN0dXJlcy4gQXMgSSB1bmRlcnN0YW5kIGl0LCBpdCYjMzk7cyBub3QgZXhwb3NlZCB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbGltaW5hdGUgYW55IHBvc3NpYmlsaXR5IG9mIGV4dGVybmFsIHJlYWRzLgoKR2l2ZW4gdGhhdCBhbGwgdGhlIG1lbW9yeSBpbiBgbmV3X3N0YXRlYCBhbmQgYHR1bl9pbmZvYCBpcyB6ZXJvLWluaXRpYWxpemVkIHZpYSBga3phbGxvYygpYCwgYW5kIHRoYXQgdGhlIGB0dW5faW5mb2AgZGF0YSBpcyBsb2NhbCB0byB0aGlzIGFsbG9jYXRpb24gYW5kIHNldHVwIHByb2Nlc3MsIGFuZCB0aGF0IHRoZSBvbmx5IG9ic2VydmVkIGRpZmZlcmVuY2UgaXMgc2V0dGluZyBgb3B0aW9uc19sZW5gIGFuZCBwb3RlbnRpYWxseSBmYWlsaW5nLCBJIGRvbiYjMzk7dCBzZWUgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLgoKSSYjMzk7ZCBsaWtlIHRvIGNoZWNrIGBpcDZfdHVuX2J1aWxkX3N0YXRlYCB0b28ganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTgwOlx0fTtcbiA5ODE6XHRcbiA5ODI6XHRzdGF0aWMgaW50IGlwNl90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIDk4MzpcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZmFtaWx5LCBjb25zdCB2b2lkICpjZmcsXG4gOTg0Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqKnRzLFxuIDk4NTpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gOTg2Olx0e1xuIDk4NzpcdFx0c3RydWN0IG5sYXR0ciAqdGJbTFdUVU5ORUxfSVA2X01BWCAmIzQzOyAxXTtcbiA5ODg6XHRcdHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbmV3X3N0YXRlO1xuIDk4OTpcdFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbztcbiA5OTA6XHRcdGludCBlcnIsIG9wdF9sZW47XG4gOTkxOlx0XG4gOTkyOlx0XHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIExXVFVOTkVMX0lQNl9NQVgsIGF0dHIsXG4gOTkzOlx0XHRcdFx0XHRcdCAgaXA2X3R1bl9wb2xpY3ksIGV4dGFjayk7XG4gOTk0Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDk5NTpcdFx0XHRyZXR1cm4gZXJyO1xuIDk5NjpcdFxuIDk5NzpcdFx0b3B0X2xlbiA9IGlwX3R1bl9nZXRfb3B0bGVuKHRiW0xXVFVOTkVMX0lQNl9PUFRTXSwgZXh0YWNrKTtcbiA5OTg6XHRcdGlmIChvcHRfbGVuIFx1MDAzYyAwKVxuIDk5OTpcdFx0XHRyZXR1cm4gb3B0X2xlbjtcbjEwMDA6XHRcbjEwMDE6XHRcdG5ld19zdGF0ZSA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHNpemVvZigqdHVuX2luZm8pICYjNDM7IG9wdF9sZW4pO1xuMTAwMjpcdFx0aWYgKCFuZXdfc3RhdGUpXG4xMDAzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTAwNDpcdFxuMTAwNTpcdFx0bmV3X3N0YXRlLVx1MDAzZXR5cGUgPSBMV1RVTk5FTF9FTkNBUF9JUDY7XG4xMDA2Olx0XG4xMDA3Olx0XHR0dW5faW5mbyA9IGx3dF90dW5faW5mbyhuZXdfc3RhdGUpO1xuMTAwODpcdFx0dHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO1xuMTAwOTpcdFxuMTAxMDpcdFx0ZXJyID0gaXBfdHVuX3NldF9vcHRzKHRiW0xXVFVOTkVMX0lQNl9PUFRTXSwgdHVuX2luZm8sIGV4dGFjayk7XG4xMDExOlx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4xMDEyOlx0XHRcdGx3dHN0YXRlX2ZyZWUobmV3X3N0YXRlKTtcbjEwMTM6XHRcdFx0cmV0dXJuIGVycjtcbjEwMTQ6XHRcdH1cbjEwMTU6XHRcbjEwMTY6XHRcdGlmICh0YltMV1RVTk5FTF9JUDZfSURdKVxuMTAxNzpcdFx0XHR0dW5faW5mby1cdTAwM2VrZXkudHVuX2lkID0gbmxhX2dldF9iZTY0KHRiW0xXVFVOTkVMX0lQNl9JRF0pO1xuMTAxODpcdFxuMTAxOTpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9EU1RdKVxuMTAyMDpcdFx0XHR0dW5faW5mby1cdTAwM2VrZXkudS5pcHY2LmRzdCA9IG5sYV9nZXRfaW42X2FkZHIodGJbTFdUVU5ORUxfSVA2X0RTVF0pO1xuMTAyMTpcdFxuMTAyMjpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9TUkNdKVxuMTAyMzpcdFx0XHR0dW5faW5mby1cdTAwM2VrZXkudS5pcHY2LnNyYyA9IG5sYV9nZXRfaW42X2FkZHIodGJbTFdUVU5ORUxfSVA2X1NSQ10pO1xuMTAyNDpcdFxuMTAyNTpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9IT1BMSU1JVF0pXG4xMDI2Olx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS50dGwgPSBubGFfZ2V0X3U4KHRiW0xXVFVOTkVMX0lQNl9IT1BMSU1JVF0pO1xuMTAyNzpcdFxuMTAyODpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9UQ10pXG4xMDI5Olx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS50b3MgPSBubGFfZ2V0X3U4KHRiW0xXVFVOTkVMX0lQNl9UQ10pO1xuMTAzMDpcdFxuMTAzMTpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9GTEFHU10pIHtcbjEwMzI6XHRcdFx0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpO1xuMTAzMzpcdFx0XHRfX2JlMTYgZGF0YTtcbjEwMzQ6XHRcbjEwMzU6XHRcdFx0ZGF0YSA9IG5sYV9nZXRfYmUxNih0YltMV1RVTk5FTF9JUDZfRkxBR1NdKTtcbjEwMzY6XHRcdFx0aXBfdHVubmVsX2ZsYWdzX2Zyb21fYmUxNihmbGFncywgZGF0YSk7XG4xMDM3Olx0XHRcdGlwX3R1bm5lbF9jbGVhcl9vcHRpb25zX3ByZXNlbnQoZmxhZ3MpO1xuMTAzODpcdFxuMTAzOTpcdFx0XHRpcF90dW5uZWxfZmxhZ3Nfb3IodHVuX2luZm8tXHUwMDNla2V5LnR1bl9mbGFncyxcbjEwNDA6XHRcdFx0XHRcdCAgIHR1bl9pbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MsIGZsYWdzKTtcbjEwNDE6XHRcdH1cbjEwNDI6XHRcbjEwNDM6XHRcdHR1bl9pbmZvLVx1MDAzZW1vZGUgPSBJUF9UVU5ORUxfSU5GT19UWCB8IElQX1RVTk5FTF9JTkZPX0lQVjY7XG4xMDQ0Olx0XG4xMDQ1Olx0XHQqdHMgPSBuZXdfc3RhdGU7XG4xMDQ2Olx0XG4xMDQ3Olx0XHRyZXR1cm4gMDtcbjEwNDg6XHR9XG4xMDQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MzY2CgkJCQkJCQlvdXRwdXQ6IDI5OAoJCQkJCQkJdGhvdWdodHM6IDU0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50IG9mIElQIFR1bm5lbCBTdGF0ZSBBbGxvY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYGlwNl90dW5fYnVpbGRfc3RhdGVgIHdvcmtzIGluIGEgdmVyeSBzaW1pbGFyIG1hbm5lciB0byBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgcmVxdWlyZXMgS01TQU4gaW5zdHJ1bWVudGF0aW9uLiBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGJhc2VkIG9uIHRoZXNlIHNwZWNpZmljIGd1aWRlbGluZXMuCgpGaXJzdCwgdGhlIGFsbG9jYXRpb24gaXRzZWxmOiBgbmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCp0dW5faW5mbykgJiM0Mzsgb3B0X2xlbik7YC4gQ3JpdGljYWxseSwgYGx3dHVubmVsX3N0YXRlX2FsbG9jYCB1c2VzIGBremFsbG9jYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnQuIGBremFsbG9jYCB6ZXJvZXMgdGhlIGVudGlyZSBhbGxvY2F0ZWQgYnVmZmVyIHJpZ2h0IGZyb20gdGhlIGdldC1nby4gVGhpcyBpcyBpbXBvcnRhbnQuIEl0IGNvdmVycyBib3RoIHRoZSBgdHVuX2luZm9gIHN0cnVjdHVyZSBhbmQgdGhhdCB0cmFpbGluZyBvcHRpb25zIGFyZWEuCgpOZXh0LCB0aGUgb3B0aW9ucyBsZW5ndGggaXMgc2V0OiBgdHVuX2luZm8tJmd0O29wdGlvbnNfbGVuID0gb3B0X2xlbjtgIGJlZm9yZSBjYWxsaW5nIGBpcF90dW5fc2V0X29wdHMoLi4uKWAuIFRoaXMgaXMgdml0YWwuIFNldHRpbmcgdGhpcyBsZW5ndGggKmJlZm9yZSogY2FsbGluZyB0aGUgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHdoZW4gYGluZm8tJmd0O29wdGlvbnNgIGlzIGFjY2Vzc2VkIHdpdGhpbiBgaXBfdHVuX3NldF9vcHRzYCwgdGhlIGBvcHRpb25zX2xlbmAgZmllbGQgaXMgZGVmaW5pdGVseSBpbml0aWFsaXplZCwgcHJldmVudGluZyBwb3RlbnRpYWwgZmFsc2UgcG9zaXRpdmVzIGZyb20gVUJTQU4gb3IgYm91bmRzIGNoZWNrcy4KClRoZW4sIHRoZXJlJiMzOTtzIHRoZSBlcnJvciBoYW5kbGluZy4gSWYgYGlwX3R1bl9zZXRfb3B0cygpYCBmYWlscywgYGx3dHN0YXRlX2ZyZWUoKWAgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LiBUaGUgc3RydWN0dXJlIGlzIGZyZWVkOyBubyBsaW5nZXJpbmcgdW5pbml0aWFsaXplZCBkYXRhIGlzIGxlZnQgYXJvdW5kLgoKQmFzZWQgb24gdGhlIGd1aWRlbGluZXMsIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhpcyBmYWxsczoKCiogICBJJiMzOTttIGNvbmZpZGVudCB0aGF0IG5vIGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGFyZSBjaGFuZ2VkIGhlcmUuCiogICBUaGVyZSYjMzk7cyBubyBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCiogICBBbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBhcmUgaGFuZGxlZCBjbGVhbmx5IHdpdGggYGt6YWxsb2NgLCBlbnN1cmluZyBldmVyeXRoaW5nIGlzIHplcm9lZC4KKiAgIFRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgYW55IGNvZGUgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZHVlIHRvIGJvdW5kcyBjaGVja3MuCgpJbiBzdW1tYXJ5LCB0aGUgdXNlIG9mIGBremFsbG9jYCwgdGhlIG9yZGVyIG9mIGluaXRpYWxpemF0aW9uLCBhbmQgdGhlIGltbWVkaWF0ZSBmcmVlaW5nIG9uIGVycm9yIGFsbCBwb2ludCB0b3dhcmRzIHNhZmV0eS4gVGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjb2RlLgoKVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSYjMzk7bSByZWFkeSB0byBkb2N1bWVudCB0aGlzIHJhdGlvbmFsZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXBfdHVuX2J1aWxkX3N0YXRlKClgIGFuZCBgaXA2X3R1bl9idWlsZF9zdGF0ZSgpYCB0byBpbml0aWFsaXplIGB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47YCBwcmlvciB0byBjYWxsaW5nIGBpcF90dW5fc2V0X29wdHMoKWAsIHJhdGhlciB0aGFuIGFmdGVyd2FyZHMuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgYGluZm8tXHUwMDNlb3B0aW9uc2AgKHdoaWNoIGlzIGFubm90YXRlZCB3aXRoIGBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pYCkgaGFzIGl0cyBjb3VudGVyIHBvcHVsYXRlZCBiZWZvcmUgYWNjZXNzLlxuXG5SZWdhcmRpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uOlxuLSBUaGUgYHN0cnVjdCBsd3R1bm5lbF9zdGF0ZWAgYW5kIGl0cyBlbWJlZGRlZCBgc3RydWN0IGlwX3R1bm5lbF9pbmZvYCBhcmUgYWxsb2NhdGVkIHZpYSBgbHd0dW5uZWxfc3RhdGVfYWxsb2MoKWAsIHdoaWNoIHVzZXMgYGt6YWxsb2MoKWAgd2l0aCBgR0ZQX0FUT01JQ2AuIENvbnNlcXVlbnRseSwgYWxsIGFsbG9jYXRlZCBieXRlcyAoaW5jbHVkaW5nIGhlYWRlcnMgYW5kIHRyYWlsaW5nIG9wdGlvbiBidWZmZXJzKSBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCBhdCBhbGxvY2F0aW9uIHRpbWUuXG4tIE1vdmluZyB0aGUgYXNzaWdubWVudCBvZiBgb3B0aW9uc19sZW5gIGVhcmxpZXIgZG9lcyBub3QgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvZmllbGRzIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIElmIGBpcF90dW5fc2V0X29wdHMoKWAgZmFpbHMsIHRoZSBzdGF0ZSBpcyBmcmVlZCBpbW1lZGlhdGVseS5cblxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrIHZlY3RvcnMgYXJlIGludHJvZHVjZWQsIHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGVzZSBjaGFuZ2VzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXBfdHVuX2J1aWxkX3N0YXRlKClgIGFuZCBgaXA2X3R1bl9idWlsZF9zdGF0ZSgpYCB0byBpbml0aWFsaXplIGB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47YCBwcmlvciB0byBjYWxsaW5nIGBpcF90dW5fc2V0X29wdHMoKWAsIHJhdGhlciB0aGFuIGFmdGVyd2FyZHMuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgYGluZm8tXHUwMDNlb3B0aW9uc2AgKHdoaWNoIGlzIGFubm90YXRlZCB3aXRoIGBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pYCkgaGFzIGl0cyBjb3VudGVyIHBvcHVsYXRlZCBiZWZvcmUgYWNjZXNzLlxuXG5SZWdhcmRpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uOlxuLSBUaGUgYHN0cnVjdCBsd3R1bm5lbF9zdGF0ZWAgYW5kIGl0cyBlbWJlZGRlZCBgc3RydWN0IGlwX3R1bm5lbF9pbmZvYCBhcmUgYWxsb2NhdGVkIHZpYSBgbHd0dW5uZWxfc3RhdGVfYWxsb2MoKWAsIHdoaWNoIHVzZXMgYGt6YWxsb2MoKWAgd2l0aCBgR0ZQX0FUT01JQ2AuIENvbnNlcXVlbnRseSwgYWxsIGFsbG9jYXRlZCBieXRlcyAoaW5jbHVkaW5nIGhlYWRlcnMgYW5kIHRyYWlsaW5nIG9wdGlvbiBidWZmZXJzKSBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCBhdCBhbGxvY2F0aW9uIHRpbWUuXG4tIE1vdmluZyB0aGUgYXNzaWdubWVudCBvZiBgb3B0aW9uc19sZW5gIGVhcmxpZXIgZG9lcyBub3QgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvZmllbGRzIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIElmIGBpcF90dW5fc2V0X29wdHMoKWAgZmFpbHMsIHRoZSBzdGF0ZSBpcyBmcmVlZCBpbW1lZGlhdGVseS5cblxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrIHZlY3RvcnMgYXJlIGludHJvZHVjZWQsIHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGVzZSBjaGFuZ2VzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIxOjU3Ljg3MTExOTY0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNjU3NzI5NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIkxXVFVOTkVMXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdHVuX2J1aWxkX3N0YXRlXCIsXG4gICAgXCJpcDZfdHVuX2J1aWxkX3N0YXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXBfdHVuX2J1aWxkX3N0YXRlKClgIGFuZCBgaXA2X3R1bl9idWlsZF9zdGF0ZSgpYCB0byBpbml0aWFsaXplIGB0dW5faW5mby1cXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO2AgcHJpb3IgdG8gY2FsbGluZyBgaXBfdHVuX3NldF9vcHRzKClgLCByYXRoZXIgdGhhbiBhZnRlcndhcmRzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZmxleGlibGUgYXJyYXkgbWVtYmVyIGBpbmZvLVxcdTAwM2VvcHRpb25zYCAod2hpY2ggaXMgYW5ub3RhdGVkIHdpdGggYF9fY291bnRlZF9ieShvcHRpb25zX2xlbilgKSBoYXMgaXRzIGNvdW50ZXIgcG9wdWxhdGVkIGJlZm9yZSBhY2Nlc3MuXFxuXFxuUmVnYXJkaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbjpcXG4tIFRoZSBgc3RydWN0IGx3dHVubmVsX3N0YXRlYCBhbmQgaXRzIGVtYmVkZGVkIGBzdHJ1Y3QgaXBfdHVubmVsX2luZm9gIGFyZSBhbGxvY2F0ZWQgdmlhIGBsd3R1bm5lbF9zdGF0ZV9hbGxvYygpYCwgd2hpY2ggdXNlcyBga3phbGxvYygpYCB3aXRoIGBHRlBfQVRPTUlDYC4gQ29uc2VxdWVudGx5LCBhbGwgYWxsb2NhdGVkIGJ5dGVzIChpbmNsdWRpbmcgaGVhZGVycyBhbmQgdHJhaWxpbmcgb3B0aW9uIGJ1ZmZlcnMpIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGF0IGFsbG9jYXRpb24gdGltZS5cXG4tIE1vdmluZyB0aGUgYXNzaWdubWVudCBvZiBgb3B0aW9uc19sZW5gIGVhcmxpZXIgZG9lcyBub3QgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvZmllbGRzIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIElmIGBpcF90dW5fc2V0X29wdHMoKWAgZmFpbHMsIHRoZSBzdGF0ZSBpcyBmcmVlZCBpbW1lZGlhdGVseS5cXG5cXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZCwgc3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50IHRvIHZhbGlkYXRlIHRoZXNlIGNoYW5nZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMsIG1vdmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuIGJlZm9yZSBpcF90dW5fc2V0X29wdHMoKSBpbiBib3RoIGlwX3R1bl9idWlsZF9zdGF0ZSgpIGFuZCBpcDZfdHVuX2J1aWxkX3N0YXRlKCkuIFRoaXMgcGF0aCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgcm91dGUvbmV4dGhvcCByZXF1ZXN0cyBjb25maWd1cmluZyBsaWdodHdlaWdodCB0dW5uZWwgZW5jYXBzdWxhdGlvbiAoTFdUVU5ORUxfRU5DQVBfSVAgYW5kIExXVFVOTkVMX0VOQ0FQX0lQNikuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdHVubmVsIG9wdGlvbiBwYXJzaW5nIGFuZCBib3VuZHMgY2hlY2tpbmcgb24gdHVubmVsIHN0YXRlIGNyZWF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMTo1Ny44NzExMjQ4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNTAzOTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDU2ZjVlZjRhZjIzY2QwZGRiMmIzYWM0ZWNlMTk5YWEzMzIxZmZkN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCAxMiAwNjoyMTo1NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jIGIvbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY1xcbmluZGV4IDUxNjhkNTQ2ZWEyZmQuLjhmYjQ3NDJhY2E5MjUgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY1xcbisrKyBiL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNcXG5AQCAtNzExLDYgKzcxMSw3IEBAIHN0YXRpYyBpbnQgaXBfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gXFx0bmV3X3N0YXRlLVxcdTAwM2V0eXBlID0gTFdUVU5ORUxfRU5DQVBfSVA7XFxuIFxcbiBcXHR0dW5faW5mbyA9IGx3dF90dW5faW5mbyhuZXdfc3RhdGUpO1xcbitcXHR0dW5faW5mby1cXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO1xcbiBcXG4gXFx0ZXJyID0gaXBfdHVuX3NldF9vcHRzKHRiW0xXVFVOTkVMX0lQX09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG5AQCAtNzUzLDcgKzc1NCw2IEBAIHN0YXRpYyBpbnQgaXBfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gXFx0fVxcbiBcXG4gXFx0dHVuX2luZm8tXFx1MDAzZW1vZGUgPSBJUF9UVU5ORUxfSU5GT19UWDtcXG4tXFx0dHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcXG4gXFxuIFxcdCp0cyA9IG5ld19zdGF0ZTtcXG4gXFxuQEAgLTEwMDUsNiArMTAwNSw3IEBAIHN0YXRpYyBpbnQgaXA2X3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuIFxcdG5ld19zdGF0ZS1cXHUwMDNldHlwZSA9IExXVFVOTkVMX0VOQ0FQX0lQNjtcXG4gXFxuIFxcdHR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKG5ld19zdGF0ZSk7XFxuK1xcdHR1bl9pbmZvLVxcdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XFxuIFxcbiBcXHRlcnIgPSBpcF90dW5fc2V0X29wdHModGJbTFdUVU5ORUxfSVA2X09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG5AQCAtMTA0MCw3ICsxMDQxLDYgQEAgc3RhdGljIGludCBpcDZfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gXFx0fVxcbiBcXG4gXFx0dHVuX2luZm8tXFx1MDAzZW1vZGUgPSBJUF9UVU5ORUxfSU5GT19UWCB8IElQX1RVTk5FTF9JTkZPX0lQVjY7XFxuLVxcdHR1bl9pbmZvLVxcdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XFxuIFxcbiBcXHQqdHMgPSBuZXdfc3RhdGU7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMTo1OC4zNTMyOTIxOTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjg4MDY3NDczMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIkxXVFVOTkVMXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdHVuX2J1aWxkX3N0YXRlXCIsXG4gICAgXCJpcDZfdHVuX2J1aWxkX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLCBtb3ZpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHR1bl9pbmZvLVxcdTAwM2VvcHRpb25zX2xlbiBiZWZvcmUgaXBfdHVuX3NldF9vcHRzKCkgaW4gYm90aCBpcF90dW5fYnVpbGRfc3RhdGUoKSBhbmQgaXA2X3R1bl9idWlsZF9zdGF0ZSgpLiBUaGlzIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIHJvdXRlL25leHRob3AgcmVxdWVzdHMgY29uZmlndXJpbmcgbGlnaHR3ZWlnaHQgdHVubmVsIGVuY2Fwc3VsYXRpb24gKExXVFVOTkVMX0VOQ0FQX0lQIGFuZCBMV1RVTk5FTF9FTkNBUF9JUDYpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHR1bm5lbCBvcHRpb24gcGFyc2luZyBhbmQgYm91bmRzIGNoZWNraW5nIG9uIHR1bm5lbCBzdGF0ZSBjcmVhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NTZmNWVmNGFmMjNjZDBkZGIyYjNhYzRlY2UxOTlhYTMzMjFmZmQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMDY6MjE6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jIGIvbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY1xuaW5kZXggNTE2OGQ1NDZlYTJmZC4uOGZiNDc0MmFjYTkyNSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNcbisrKyBiL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNcbkBAIC03MTEsNiArNzExLDcgQEAgc3RhdGljIGludCBpcF90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIFx0bmV3X3N0YXRlLVx1MDAzZXR5cGUgPSBMV1RVTk5FTF9FTkNBUF9JUDtcbiBcbiBcdHR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKG5ld19zdGF0ZSk7XG4rXHR0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XG4gXG4gXHRlcnIgPSBpcF90dW5fc2V0X29wdHModGJbTFdUVU5ORUxfSVBfT1BUU10sIHR1bl9pbmZvLCBleHRhY2spO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuQEAgLTc1Myw3ICs3NTQsNiBAQCBzdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gXHR9XG4gXG4gXHR0dW5faW5mby1cdTAwM2Vtb2RlID0gSVBfVFVOTkVMX0lORk9fVFg7XG4tXHR0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XG4gXG4gXHQqdHMgPSBuZXdfc3RhdGU7XG4gXG5AQCAtMTAwNSw2ICsxMDA1LDcgQEAgc3RhdGljIGludCBpcDZfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcbiBcdG5ld19zdGF0ZS1cdTAwM2V0eXBlID0gTFdUVU5ORUxfRU5DQVBfSVA2O1xuIFxuIFx0dHVuX2luZm8gPSBsd3RfdHVuX2luZm8obmV3X3N0YXRlKTtcbitcdHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcbiBcbiBcdGVyciA9IGlwX3R1bl9zZXRfb3B0cyh0YltMV1RVTk5FTF9JUDZfT1BUU10sIHR1bl9pbmZvLCBleHRhY2spO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuQEAgLTEwNDAsNyArMTA0MSw2IEBAIHN0YXRpYyBpbnQgaXA2X3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gXHR9XG4gXG4gXHR0dW5faW5mby1cdTAwM2Vtb2RlID0gSVBfVFVOTkVMX0lORk9fVFggfCBJUF9UVU5ORUxfSU5GT19JUFY2O1xuLVx0dHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO1xuIFxuIFx0KnRzID0gbmV3X3N0YXRlO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjE6NTguMzUzMjkzNTkyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODk5NDkyNTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQIFR1bm5lbCBDb3JlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AuIE15IGZpcnN0IG1vdmUgaXMgYWx3YXlzIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzLCBzbyBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgZGlmZiwgZm9jdXNpbmcgcGFydGljdWxhcmx5IGFyb3VuZCBsaW5lcyA3MTEgYW5kIDEwMDUuIFRob3NlIHNwZWNpZmljIGxpbmUgbnVtYmVycyBvZnRlbiBpbmRpY2F0ZSBjcnVjaWFsIGFyZWFzIG9mIGEgZnVuY3Rpb24sIG9yIHBlcmhhcHMgdGhlIGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24gb2YgYSBwYXJ0aWN1bGFyIGRhdGEgc3RydWN0dXJlLlxuXG5UbyBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdWxsIGNvbnRleHQsIGFuZCB0byBjcm9zcyByZWZlcmVuY2UgdGhlIGxpbmVzIGluIHRoZSBzb3VyY2UsIEknbGwgdXNlIHRoZSBgcmVhZC1maWxlYCBjb21tYW5kIHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBjb2RlIGluIGBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jYCwgc3BlY2lmaWNhbGx5IHRob3NlIGxpbmVzIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gR2V0dGluZyBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3Vycm91bmRpbmcgbGluZXMsIHdpbGwgYWxsb3cgbWUgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGNvZGUsIGFuZCBob3cgdGhlIGNoYW5nZXMgZml0IGluIHRoZSBwcm9ncmFtJ3Mgb3ZlcmFsbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjE4LCJPdXRwdXRUb2tlbnMiOjgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjowNy4zNDgyMjE0NzNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGx3dHVubmVsX3N0YXRlICoqdHMsXFxuIDY5MTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDY5MjpcXHR7XFxuIDY5MzpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltMV1RVTk5FTF9JUF9NQVggKyAxXTtcXG4gNjk0OlxcdFxcdHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbmV3X3N0YXRlO1xcbiA2OTU6XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbztcXG4gNjk2OlxcdFxcdGludCBlcnIsIG9wdF9sZW47XFxuIDY5NzpcXHRcXG4gNjk4OlxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgTFdUVU5ORUxfSVBfTUFYLCBhdHRyLFxcbiA2OTk6XFx0XFx0XFx0XFx0XFx0XFx0ICBpcF90dW5fcG9saWN5LCBleHRhY2spO1xcbiA3MDA6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDcwMTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3MDI6XFx0XFxuIDcwMzpcXHRcXHRvcHRfbGVuID0gaXBfdHVuX2dldF9vcHRsZW4odGJbTFdUVU5ORUxfSVBfT1BUU10sIGV4dGFjayk7XFxuIDcwNDpcXHRcXHRpZiAob3B0X2xlbiBcXHUwMDNjIDApXFxuIDcwNTpcXHRcXHRcXHRyZXR1cm4gb3B0X2xlbjtcXG4gNzA2OlxcdFxcbiA3MDc6XFx0XFx0bmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCp0dW5faW5mbykgKyBvcHRfbGVuKTtcXG4gNzA4OlxcdFxcdGlmICghbmV3X3N0YXRlKVxcbiA3MDk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDcxMDpcXHRcXG4gNzExOlxcdFxcdG5ld19zdGF0ZS1cXHUwMDNldHlwZSA9IExXVFVOTkVMX0VOQ0FQX0lQO1xcbiA3MTI6XFx0XFxuIDcxMzpcXHRcXHR0dW5faW5mbyA9IGx3dF90dW5faW5mbyhuZXdfc3RhdGUpO1xcbiA3MTQ6XFx0XFx0dHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcXG4gNzE1OlxcdFxcbiA3MTY6XFx0XFx0ZXJyID0gaXBfdHVuX3NldF9vcHRzKHRiW0xXVFVOTkVMX0lQX09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTtcXG4gNzE3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIDcxODpcXHRcXHRcXHRsd3RzdGF0ZV9mcmVlKG5ld19zdGF0ZSk7XFxuIDcxOTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3MjA6XFx0XFx0fVxcbiA3MjE6XFx0XFxuIDcyMjpcXHQjaWZkZWYgQ09ORklHX0RTVF9DQUNIRVxcbiA3MjM6XFx0XFx0ZXJyID0gZHN0X2NhY2hlX2luaXQoXFx1MDAyNnR1bl9pbmZvLVxcdTAwM2Vkc3RfY2FjaGUsIEdGUF9LRVJORUwpO1xcbiA3MjQ6XFx0XFx0aWYgKGVycikge1xcbiA3MjU6XFx0XFx0XFx0bHd0c3RhdGVfZnJlZShuZXdfc3RhdGUpO1xcbiA3MjY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzI3OlxcdFxcdH1cXG4gNzI4OlxcdCNlbmRpZlxcbiA3Mjk6XFx0XFxuIDczMDpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVBfSURdKVxcbiA3MzE6XFx0XFx0XFx0dHVuX2luZm8tXFx1MDAzZWtleS50dW5faWQgPSBubGFfZ2V0X2JlNjQodGJbTFdUVU5ORUxfSVBfSURdKTtcXG4gNzMyOlxcdFxcbiA3MzM6XFx0XFx0aWYgKHRiW0xXVFVOTkVMX0lQX0RTVF0pXFxuIDczNDpcXHRcXHRcXHR0dW5faW5mby1cXHUwMDNla2V5LnUuaXB2NC5kc3QgPSBubGFfZ2V0X2luX2FkZHIodGJbTFdUVU5ORUxfSVBfRFNUXSk7XFxuIDczNTpcXHRcXG4gNzM2OlxcdFxcdGlmICh0YltMV1RVTk5FTF9JUF9TUkNdKVxcbiA3Mzc6XFx0XFx0XFx0dHVuX2luZm8tXFx1MDAzZWtleS51LmlwdjQuc3JjID0gbmxhX2dldF9pbl9hZGRyKHRiW0xXVFVOTkVMX0lQX1NSQ10pO1xcbiA3Mzg6XFx0XFxuIDczOTpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVBfVFRMXSlcXG4gNzQwOlxcdFxcdFxcdHR1bl9pbmZvLVxcdTAwM2VrZXkudHRsID0gbmxhX2dldF91OCh0YltMV1RVTk5FTF9JUF9UVExdKTtcXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0aWYgKHRiW0xXVFVOTkVMX0lQX1RPU10pXFxuIDc0MzpcXHRcXHRcXHR0dW5faW5mby1cXHUwMDNla2V5LnRvcyA9IG5sYV9nZXRfdTgodGJbTFdUVU5ORUxfSVBfVE9TXSk7XFxuIDc0NDpcXHRcXG4gNzQ1OlxcdFxcdGlmICh0YltMV1RVTk5FTF9JUF9GTEFHU10pIHtcXG4gNzQ2OlxcdFxcdFxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcXG4gNzQ3OlxcdFxcbiA3NDg6XFx0XFx0XFx0aXBfdHVubmVsX2ZsYWdzX2Zyb21fYmUxNihmbGFncyxcXG4gNzQ5OlxcdFxcdFxcdFxcdFxcdFxcdCAgbmxhX2dldF9iZTE2KHRiW0xXVFVOTkVMX0lQX0ZMQUdTXSkpO1xcbiA3NTA6XFx0XFx0XFx0aXBfdHVubmVsX2NsZWFyX29wdGlvbnNfcHJlc2VudChmbGFncyk7XFxuIDc1MTpcXHRcXG4gNzUyOlxcdFxcdFxcdGlwX3R1bm5lbF9mbGFnc19vcih0dW5faW5mby1cXHUwMDNla2V5LnR1bl9mbGFncyxcXG4gNzUzOlxcdFxcdFxcdFxcdFxcdCAgIHR1bl9pbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzLCBmbGFncyk7XFxuIDc1NDpcXHRcXHR9XFxuIDc1NTpcXHRcXG4gNzU2OlxcdFxcdHR1bl9pbmZvLVxcdTAwM2Vtb2RlID0gSVBfVFVOTkVMX0lORk9fVFg7XFxuIDc1NzpcXHRcXG4gNzU4OlxcdFxcdCp0cyA9IG5ld19zdGF0ZTtcXG4gNzU5OlxcdFxcbiA3NjA6XFx0XFx0cmV0dXJuIDA7XFxuIDc2MTpcXHR9XFxuIDc2MjpcXHRcXG4gNzYzOlxcdHN0YXRpYyB2b2lkIGlwX3R1bl9kZXN0cm95X3N0YXRlKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpXFxuIDc2NDpcXHR7XFxuIDc2NTpcXHQjaWZkZWYgQ09ORklHX0RTVF9DQUNIRVxcbiA3NjY6XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyA9IGx3dF90dW5faW5mbyhsd3RzdGF0ZSk7XFxuIDc2NzpcXHRcXG4gNzY4OlxcdFxcdGRzdF9jYWNoZV9kZXN0cm95KFxcdTAwMjZ0dW5faW5mby1cXHUwMDNlZHN0X2NhY2hlKTtcXG4gNzY5OlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjowNy4zNDgzOTkyMjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk5MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk5MDpcXHRcXHRpbnQgZXJyLCBvcHRfbGVuO1xcbiA5OTE6XFx0XFxuIDk5MjpcXHRcXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIExXVFVOTkVMX0lQNl9NQVgsIGF0dHIsXFxuIDk5MzpcXHRcXHRcXHRcXHRcXHRcXHQgIGlwNl90dW5fcG9saWN5LCBleHRhY2spO1xcbiA5OTQ6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDk5NTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA5OTY6XFx0XFxuIDk5NzpcXHRcXHRvcHRfbGVuID0gaXBfdHVuX2dldF9vcHRsZW4odGJbTFdUVU5ORUxfSVA2X09QVFNdLCBleHRhY2spO1xcbiA5OTg6XFx0XFx0aWYgKG9wdF9sZW4gXFx1MDAzYyAwKVxcbiA5OTk6XFx0XFx0XFx0cmV0dXJuIG9wdF9sZW47XFxuMTAwMDpcXHRcXG4xMDAxOlxcdFxcdG5ld19zdGF0ZSA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHNpemVvZigqdHVuX2luZm8pICsgb3B0X2xlbik7XFxuMTAwMjpcXHRcXHRpZiAoIW5ld19zdGF0ZSlcXG4xMDAzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjEwMDQ6XFx0XFxuMTAwNTpcXHRcXHRuZXdfc3RhdGUtXFx1MDAzZXR5cGUgPSBMV1RVTk5FTF9FTkNBUF9JUDY7XFxuMTAwNjpcXHRcXG4xMDA3OlxcdFxcdHR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKG5ld19zdGF0ZSk7XFxuMTAwODpcXHRcXHR0dW5faW5mby1cXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO1xcbjEwMDk6XFx0XFxuMTAxMDpcXHRcXHRlcnIgPSBpcF90dW5fc2V0X29wdHModGJbTFdUVU5ORUxfSVA2X09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTtcXG4xMDExOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMTAxMjpcXHRcXHRcXHRsd3RzdGF0ZV9mcmVlKG5ld19zdGF0ZSk7XFxuMTAxMzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEwMTQ6XFx0XFx0fVxcbjEwMTU6XFx0XFxuMTAxNjpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVA2X0lEXSlcXG4xMDE3OlxcdFxcdFxcdHR1bl9pbmZvLVxcdTAwM2VrZXkudHVuX2lkID0gbmxhX2dldF9iZTY0KHRiW0xXVFVOTkVMX0lQNl9JRF0pO1xcbjEwMTg6XFx0XFxuMTAxOTpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVA2X0RTVF0pXFxuMTAyMDpcXHRcXHRcXHR0dW5faW5mby1cXHUwMDNla2V5LnUuaXB2Ni5kc3QgPSBubGFfZ2V0X2luNl9hZGRyKHRiW0xXVFVOTkVMX0lQNl9EU1RdKTtcXG4xMDIxOlxcdFxcbjEwMjI6XFx0XFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9TUkNdKVxcbjEwMjM6XFx0XFx0XFx0dHVuX2luZm8tXFx1MDAzZWtleS51LmlwdjYuc3JjID0gbmxhX2dldF9pbjZfYWRkcih0YltMV1RVTk5FTF9JUDZfU1JDXSk7XFxuMTAyNDpcXHRcXG4xMDI1OlxcdFxcdGlmICh0YltMV1RVTk5FTF9JUDZfSE9QTElNSVRdKVxcbjEwMjY6XFx0XFx0XFx0dHVuX2luZm8tXFx1MDAzZWtleS50dGwgPSBubGFfZ2V0X3U4KHRiW0xXVFVOTkVMX0lQNl9IT1BMSU1JVF0pO1xcbjEwMjc6XFx0XFxuMTAyODpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVA2X1RDXSlcXG4xMDI5OlxcdFxcdFxcdHR1bl9pbmZvLVxcdTAwM2VrZXkudG9zID0gbmxhX2dldF91OCh0YltMV1RVTk5FTF9JUDZfVENdKTtcXG4xMDMwOlxcdFxcbjEwMzE6XFx0XFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9GTEFHU10pIHtcXG4xMDMyOlxcdFxcdFxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcXG4xMDMzOlxcdFxcdFxcdF9fYmUxNiBkYXRhO1xcbjEwMzQ6XFx0XFxuMTAzNTpcXHRcXHRcXHRkYXRhID0gbmxhX2dldF9iZTE2KHRiW0xXVFVOTkVMX0lQNl9GTEFHU10pO1xcbjEwMzY6XFx0XFx0XFx0aXBfdHVubmVsX2ZsYWdzX2Zyb21fYmUxNihmbGFncywgZGF0YSk7XFxuMTAzNzpcXHRcXHRcXHRpcF90dW5uZWxfY2xlYXJfb3B0aW9uc19wcmVzZW50KGZsYWdzKTtcXG4xMDM4OlxcdFxcbjEwMzk6XFx0XFx0XFx0aXBfdHVubmVsX2ZsYWdzX29yKHR1bl9pbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzLFxcbjEwNDA6XFx0XFx0XFx0XFx0XFx0ICAgdHVuX2luZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MsIGZsYWdzKTtcXG4xMDQxOlxcdFxcdH1cXG4xMDQyOlxcdFxcbjEwNDM6XFx0XFx0dHVuX2luZm8tXFx1MDAzZW1vZGUgPSBJUF9UVU5ORUxfSU5GT19UWCB8IElQX1RVTk5FTF9JTkZPX0lQVjY7XFxuMTA0NDpcXHRcXG4xMDQ1OlxcdFxcdCp0cyA9IG5ld19zdGF0ZTtcXG4xMDQ2OlxcdFxcbjEwNDc6XFx0XFx0cmV0dXJuIDA7XFxuMTA0ODpcXHR9XFxuMTA0OTpcXHRcXG4xMDUwOlxcdHN0YXRpYyBpbnQgaXA2X3R1bl9maWxsX2VuY2FwX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xMDUxOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpXFxuMTA1MjpcXHR7XFxuMTA1MzpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKGx3dHN0YXRlKTtcXG4xMDU0OlxcdFxcbjEwNTU6XFx0XFx0aWYgKG5sYV9wdXRfYmU2NChza2IsIExXVFVOTkVMX0lQNl9JRCwgdHVuX2luZm8tXFx1MDAzZWtleS50dW5faWQsXFxuMTA1NjpcXHRcXHRcXHRcXHQgTFdUVU5ORUxfSVA2X1BBRCkgfHxcXG4xMDU3OlxcdFxcdCAgICBubGFfcHV0X2luNl9hZGRyKHNrYiwgTFdUVU5ORUxfSVA2X0RTVCwgXFx1MDAyNnR1bl9pbmZvLVxcdTAwM2VrZXkudS5pcHY2LmRzdCkgfHxcXG4xMDU4OlxcdFxcdCAgICBubGFfcHV0X2luNl9hZGRyKHNrYiwgTFdUVU5ORUxfSVA2X1NSQywgXFx1MDAyNnR1bl9pbmZvLVxcdTAwM2VrZXkudS5pcHY2LnNyYykgfHxcXG4xMDU5OlxcdFxcdCAgICBubGFfcHV0X3U4KHNrYiwgTFdUVU5ORUxfSVA2X1RDLCB0dW5faW5mby1cXHUwMDNla2V5LnRvcykgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjI6MDcuMzQ4NDkxNDM0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTU3MzUzOTQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBpcF90dW5fc2V0X29wdHNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaXBfdHVuX3NldF9vcHRzYCBpcyBhY3R1YWxseSBkb2luZy4gTGV0J3MgZ2V0IHJpZ2h0IGludG8gdGhlIGNvZGUgZm9yIGBpcF90dW5fc2V0X29wdHNgIGFuZCB1bmRlcnN0YW5kIHdoYXQgaXQgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIwNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjI6MDguOTIyMDMzNjU1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjAwOlxcdFxcdFxcdFxcdGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgKyBvcHRzX2xlbjtcXG4gNjAxOlxcdFxcbiA2MDI6XFx0XFx0XFx0bWQtXFx1MDAzZXZlcnNpb24gPSB2ZXI7XFxuIDYwMzpcXHRcXHRcXHRpZiAodmVyID09IDEpIHtcXG4gNjA0OlxcdFxcdFxcdFxcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0lOREVYXTtcXG4gNjA1OlxcdFxcdFxcdFxcdG1kLVxcdTAwM2V1LmluZGV4ID0gbmxhX2dldF9iZTMyKGF0dHIpO1xcbiA2MDY6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNjA3OlxcdFxcdFxcdFxcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0RJUl07XFxuIDYwODpcXHRcXHRcXHRcXHRtZC1cXHUwMDNldS5tZDIuZGlyID0gbmxhX2dldF91OChhdHRyKTtcXG4gNjA5OlxcdFxcdFxcdFxcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0hXSURdO1xcbiA2MTA6XFx0XFx0XFx0XFx0c2V0X2h3aWQoXFx1MDAyNm1kLVxcdTAwM2V1Lm1kMiwgbmxhX2dldF91OChhdHRyKSk7XFxuIDYxMTpcXHRcXHRcXHR9XFxuIDYxMjpcXHRcXG4gNjEzOlxcdFxcdFxcdF9fc2V0X2JpdChJUF9UVU5ORUxfRVJTUEFOX09QVF9CSVQsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpO1xcbiA2MTQ6XFx0XFx0fVxcbiA2MTU6XFx0XFxuIDYxNjpcXHRcXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBlcnNwYW5fbWV0YWRhdGEpO1xcbiA2MTc6XFx0fVxcbiA2MTg6XFx0XFxuIDYxOTpcXHRzdGF0aWMgaW50IGlwX3R1bl9wYXJzZV9vcHRzKHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyxcXG4gNjIwOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA2MjE6XFx0e1xcbiA2MjI6XFx0XFx0aW50IGVyciwgcmVtLCBvcHRfbGVuLCBvcHRzX2xlbiA9IDA7XFxuIDYyMzpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpubGE7XFxuIDYyNDpcXHRcXHR1MzIgdHlwZSA9IDA7XFxuIDYyNTpcXHRcXG4gNjI2OlxcdFxcdGlmICghYXR0cilcXG4gNjI3OlxcdFxcdFxcdHJldHVybiAwO1xcbiA2Mjg6XFx0XFxuIDYyOTpcXHRcXHRlcnIgPSBubGFfdmFsaWRhdGUobmxhX2RhdGEoYXR0ciksIG5sYV9sZW4oYXR0ciksIExXVFVOTkVMX0lQX09QVFNfTUFYLFxcbiA2MzA6XFx0XFx0XFx0XFx0ICAgaXBfb3B0c19wb2xpY3ksIGV4dGFjayk7XFxuIDYzMTpcXHRcXHRpZiAoZXJyKVxcbiA2MzI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNjMzOlxcdFxcbiA2MzQ6XFx0XFx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBubGFfZGF0YShhdHRyKSwgbmxhX2xlbihhdHRyKSwgcmVtKSB7XFxuIDYzNTpcXHRcXHRcXHRzd2l0Y2ggKG5sYV90eXBlKG5sYSkpIHtcXG4gNjM2OlxcdFxcdFxcdGNhc2UgTFdUVU5ORUxfSVBfT1BUU19HRU5FVkU6XFxuIDYzNzpcXHRcXHRcXHRcXHRpZiAodHlwZSBcXHUwMDI2XFx1MDAyNiB0eXBlICE9IElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVClcXG4gNjM4OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA2Mzk6XFx0XFx0XFx0XFx0b3B0X2xlbiA9IGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZShubGEsIGluZm8sIG9wdHNfbGVuLFxcbiA2NDA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZXh0YWNrKTtcXG4gNjQxOlxcdFxcdFxcdFxcdGlmIChvcHRfbGVuIFxcdTAwM2MgMClcXG4gNjQyOlxcdFxcdFxcdFxcdFxcdHJldHVybiBvcHRfbGVuO1xcbiA2NDM6XFx0XFx0XFx0XFx0b3B0c19sZW4gKz0gb3B0X2xlbjtcXG4gNjQ0OlxcdFxcdFxcdFxcdGlmIChvcHRzX2xlbiBcXHUwMDNlIElQX1RVTk5FTF9PUFRTX01BWClcXG4gNjQ1OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA2NDY6XFx0XFx0XFx0XFx0dHlwZSA9IElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVDtcXG4gNjQ3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA2NDg6XFx0XFx0XFx0Y2FzZSBMV1RVTk5FTF9JUF9PUFRTX1ZYTEFOOlxcbiA2NDk6XFx0XFx0XFx0XFx0aWYgKHR5cGUpXFxuIDY1MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjUxOlxcdFxcdFxcdFxcdG9wdF9sZW4gPSBpcF90dW5fcGFyc2Vfb3B0c192eGxhbihubGEsIGluZm8sIG9wdHNfbGVuLFxcbiA2NTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBleHRhY2spO1xcbiA2NTM6XFx0XFx0XFx0XFx0aWYgKG9wdF9sZW4gXFx1MDAzYyAwKVxcbiA2NTQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG9wdF9sZW47XFxuIDY1NTpcXHRcXHRcXHRcXHRvcHRzX2xlbiArPSBvcHRfbGVuO1xcbiA2NTY6XFx0XFx0XFx0XFx0dHlwZSA9IElQX1RVTk5FTF9WWExBTl9PUFRfQklUO1xcbiA2NTc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDY1ODpcXHRcXHRcXHRjYXNlIExXVFVOTkVMX0lQX09QVFNfRVJTUEFOOlxcbiA2NTk6XFx0XFx0XFx0XFx0aWYgKHR5cGUpXFxuIDY2MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjYxOlxcdFxcdFxcdFxcdG9wdF9sZW4gPSBpcF90dW5fcGFyc2Vfb3B0c19lcnNwYW4obmxhLCBpbmZvLCBvcHRzX2xlbixcXG4gNjYyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGV4dGFjayk7XFxuIDY2MzpcXHRcXHRcXHRcXHRpZiAob3B0X2xlbiBcXHUwMDNjIDApXFxuIDY2NDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gb3B0X2xlbjtcXG4gNjY1OlxcdFxcdFxcdFxcdG9wdHNfbGVuICs9IG9wdF9sZW47XFxuIDY2NjpcXHRcXHRcXHRcXHR0eXBlID0gSVBfVFVOTkVMX0VSU1BBTl9PUFRfQklUO1xcbiA2Njc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDY2ODpcXHRcXHRcXHRkZWZhdWx0OlxcbiA2Njk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDY3MDpcXHRcXHRcXHR9XFxuIDY3MTpcXHRcXHR9XFxuIDY3MjpcXHRcXG4gNjczOlxcdFxcdHJldHVybiBvcHRzX2xlbjtcXG4gNjc0OlxcdH1cXG4gNjc1OlxcdFxcbiA2NzY6XFx0c3RhdGljIGludCBpcF90dW5fZ2V0X29wdGxlbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbiA2Nzc6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDY3ODpcXHR7XFxuIDY3OTpcXHRcXHRyZXR1cm4gaXBfdHVuX3BhcnNlX29wdHMoYXR0ciwgTlVMTCwgZXh0YWNrKTtcXG4gNjgwOlxcdH1cXG4gNjgxOlxcdFxcbiA2ODI6XFx0c3RhdGljIGludCBpcF90dW5fc2V0X29wdHMoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxcbiA2ODM6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA2ODQ6XFx0e1xcbiA2ODU6XFx0XFx0cmV0dXJuIGlwX3R1bl9wYXJzZV9vcHRzKGF0dHIsIGluZm8sIGV4dGFjayk7XFxuIDY4NjpcXHR9XFxuIDY4NzpcXHRcXG4gNjg4OlxcdHN0YXRpYyBpbnQgaXBfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gNjg5OlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBmYW1pbHksIGNvbnN0IHZvaWQgKmNmZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjI6MDguOTIyMTM3Mzk1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDI5NzYzNTAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyBUdW5uZWwgT3B0aW9uIFBhcnNpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBkaWZmZXJlbnQgdHVubmVsIHR5cGVzIGhhbmRsZSB0aGVpciBvcHRpb25zLiBTcGVjaWZpY2FsbHksIG15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiBwYXJzaW5nIHRoZSBvcHRpb25zIGZvciBWWExBTiwgR2VuZXZlLCBhbmQgRVJTUEFOIHR1bm5lbHMuIFRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIHJldmlldyBhcmUgYGlwX3R1bl9wYXJzZV9vcHRzX3Z4bGFuYCwgYGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZWAsIGFuZCBgaXBfdHVuX3BhcnNlX29wdHNfZXJzcGFuYC4gSXQgc2VlbXMgbGlrZSB0aG9zZSB3b3VsZCBiZSB0aGUgb2J2aW91cyBwbGFjZXMgdG8gc3RhcnQuIE5vdywgSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AgYW5kIHRha2UgYSBsb29rIGF0IGxpbmVzIDUwMC02MDAuIEhvcGVmdWxseSwgdGhhdCBzZWN0aW9uIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3B0aW9uIHBhcnNlcnMgYXJlIGludGVncmF0ZWQgYW5kIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MDMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjEzLjIxOTc3NTA0NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDkwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MDA6XFx0XFx0W0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fSU5ERVhdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbiA1MDE6XFx0XFx0W0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fRElSXVxcdD0geyAudHlwZSA9IE5MQV9VOCB9LFxcbiA1MDI6XFx0XFx0W0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fSFdJRF1cXHQ9IHsgLnR5cGUgPSBOTEFfVTggfSxcXG4gNTAzOlxcdH07XFxuIDUwNDpcXHRcXG4gNTA1OlxcdHN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfZ2VuZXZlKHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuIDUwNjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLCBpbnQgb3B0c19sZW4sXFxuIDUwNzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA1MDg6XFx0e1xcbiA1MDk6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9NQVggKyAxXTtcXG4gNTEwOlxcdFxcdGludCBkYXRhX2xlbiwgZXJyO1xcbiA1MTE6XFx0XFxuIDUxMjpcXHRcXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBMV1RVTk5FTF9JUF9PUFRfR0VORVZFX01BWCwgYXR0cixcXG4gNTEzOlxcdFxcdFxcdFxcdCAgICAgICBnZW5ldmVfb3B0X3BvbGljeSwgZXh0YWNrKTtcXG4gNTE0OlxcdFxcdGlmIChlcnIpXFxuIDUxNTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA1MTY6XFx0XFxuIDUxNzpcXHRcXHRpZiAoIXRiW0xXVFVOTkVMX0lQX09QVF9HRU5FVkVfQ0xBU1NdIHx8XFxuIDUxODpcXHRcXHQgICAgIXRiW0xXVFVOTkVMX0lQX09QVF9HRU5FVkVfVFlQRV0gfHxcXG4gNTE5OlxcdFxcdCAgICAhdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9EQVRBXSlcXG4gNTIwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRcXHRhdHRyID0gdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9EQVRBXTtcXG4gNTIzOlxcdFxcdGRhdGFfbGVuID0gbmxhX2xlbihhdHRyKTtcXG4gNTI0OlxcdFxcdGlmIChkYXRhX2xlbiAlIDQpXFxuIDUyNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTI2OlxcdFxcbiA1Mjc6XFx0XFx0aWYgKGluZm8pIHtcXG4gNTI4OlxcdFxcdFxcdHN0cnVjdCBnZW5ldmVfb3B0ICpvcHQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pICsgb3B0c19sZW47XFxuIDUyOTpcXHRcXG4gNTMwOlxcdFxcdFxcdG1lbWNweShvcHQtXFx1MDAzZW9wdF9kYXRhLCBubGFfZGF0YShhdHRyKSwgZGF0YV9sZW4pO1xcbiA1MzE6XFx0XFx0XFx0b3B0LVxcdTAwM2VsZW5ndGggPSBkYXRhX2xlbiAvIDQ7XFxuIDUzMjpcXHRcXHRcXHRhdHRyID0gdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9DTEFTU107XFxuIDUzMzpcXHRcXHRcXHRvcHQtXFx1MDAzZW9wdF9jbGFzcyA9IG5sYV9nZXRfYmUxNihhdHRyKTtcXG4gNTM0OlxcdFxcdFxcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX1RZUEVdO1xcbiA1MzU6XFx0XFx0XFx0b3B0LVxcdTAwM2V0eXBlID0gbmxhX2dldF91OChhdHRyKTtcXG4gNTM2OlxcdFxcdFxcdF9fc2V0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpO1xcbiA1Mzc6XFx0XFx0fVxcbiA1Mzg6XFx0XFxuIDUzOTpcXHRcXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBnZW5ldmVfb3B0KSArIGRhdGFfbGVuO1xcbiA1NDA6XFx0fVxcbiA1NDE6XFx0XFxuIDU0MjpcXHRzdGF0aWMgaW50IGlwX3R1bl9wYXJzZV9vcHRzX3Z4bGFuKHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuIDU0MzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sIGludCBvcHRzX2xlbixcXG4gNTQ0OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gNTQ1OlxcdHtcXG4gNTQ2OlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW0xXVFVOTkVMX0lQX09QVF9WWExBTl9NQVggKyAxXTtcXG4gNTQ3OlxcdFxcdGludCBlcnI7XFxuIDU0ODpcXHRcXG4gNTQ5OlxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIExXVFVOTkVMX0lQX09QVF9WWExBTl9NQVgsIGF0dHIsXFxuIDU1MDpcXHRcXHRcXHRcXHQgICAgICAgdnhsYW5fb3B0X3BvbGljeSwgZXh0YWNrKTtcXG4gNTUxOlxcdFxcdGlmIChlcnIpXFxuIDU1MjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA1NTM6XFx0XFxuIDU1NDpcXHRcXHRpZiAoIXRiW0xXVFVOTkVMX0lQX09QVF9WWExBTl9HQlBdKVxcbiA1NTU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU1NjpcXHRcXG4gNTU3OlxcdFxcdGlmIChpbmZvKSB7XFxuIDU1ODpcXHRcXHRcXHRzdHJ1Y3QgdnhsYW5fbWV0YWRhdGEgKm1kID1cXG4gNTU5OlxcdFxcdFxcdFxcdGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgKyBvcHRzX2xlbjtcXG4gNTYwOlxcdFxcbiA1NjE6XFx0XFx0XFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9WWExBTl9HQlBdO1xcbiA1NjI6XFx0XFx0XFx0bWQtXFx1MDAzZWdicCA9IG5sYV9nZXRfdTMyKGF0dHIpO1xcbiA1NjM6XFx0XFx0XFx0bWQtXFx1MDAzZWdicCBcXHUwMDI2PSBWWExBTl9HQlBfTUFTSztcXG4gNTY0OlxcdFxcdFxcdF9fc2V0X2JpdChJUF9UVU5ORUxfVlhMQU5fT1BUX0JJVCwgaW5mby1cXHUwMDNla2V5LnR1bl9mbGFncyk7XFxuIDU2NTpcXHRcXHR9XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdHJldHVybiBzaXplb2Yoc3RydWN0IHZ4bGFuX21ldGFkYXRhKTtcXG4gNTY4OlxcdH1cXG4gNTY5OlxcdFxcbiA1NzA6XFx0c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0c19lcnNwYW4oc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gNTcxOlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sIGludCBvcHRzX2xlbixcXG4gNTcyOlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDU3MzpcXHR7XFxuIDU3NDpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX01BWCArIDFdO1xcbiA1NzU6XFx0XFx0aW50IGVycjtcXG4gNTc2OlxcdFxcdHU4IHZlcjtcXG4gNTc3OlxcdFxcbiA1Nzg6XFx0XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9NQVgsIGF0dHIsXFxuIDU3OTpcXHRcXHRcXHRcXHQgICAgICAgZXJzcGFuX29wdF9wb2xpY3ksIGV4dGFjayk7XFxuIDU4MDpcXHRcXHRpZiAoZXJyKVxcbiA1ODE6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTgyOlxcdFxcbiA1ODM6XFx0XFx0aWYgKCF0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX1ZFUl0pXFxuIDU4NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTg1OlxcdFxcbiA1ODY6XFx0XFx0dmVyID0gbmxhX2dldF91OCh0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX1ZFUl0pO1xcbiA1ODc6XFx0XFx0aWYgKHZlciA9PSAxKSB7XFxuIDU4ODpcXHRcXHRcXHRpZiAoIXRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fSU5ERVhdKVxcbiA1ODk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU5MDpcXHRcXHR9IGVsc2UgaWYgKHZlciA9PSAyKSB7XFxuIDU5MTpcXHRcXHRcXHRpZiAoIXRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fRElSXSB8fFxcbiA1OTI6XFx0XFx0XFx0ICAgICF0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0hXSURdKVxcbiA1OTM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU5NDpcXHRcXHR9IGVsc2Uge1xcbiA1OTU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU5NjpcXHRcXHR9XFxuIDU5NzpcXHRcXG4gNTk4OlxcdFxcdGlmIChpbmZvKSB7XFxuIDU5OTpcXHRcXHRcXHRzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhICptZCA9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjEzLjIxOTg5NzgyNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTU5MjU3NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlY29uc3RydWN0aW5nIHRoZSBgaXBfdHVubmVsX2luZm9fb3B0c2AgRW5pZ21hKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQgYW5kIG15IGJyYWluJ3MgaGl0IGEgbGl0dGxlIHNuYWcuIFdoYXQgKmV4YWN0bHkqIGlzIGBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pYD8gSXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBqdXN0IGZyb20gbG9va2luZyBhdCBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uIGFuZCBwdXJwb3NlIGluIHRoaXMgY29udGV4dC5cblxuUmlnaHQsIHNvIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBnZXQgc29tZSBtb3JlIGluZm9ybWF0aW9uLCBhbmQgcXVpY2tseSEgTGV0J3MgZmlyZSB1cCBgZ3JlcGAgYW5kIGh1bnQgZG93biBhbGwgaW5zdGFuY2VzIG9mIGBpcF90dW5uZWxfaW5mb19vcHRzYC4gVGhhdCdsbCBzaG93IG1lIHdoZXJlIGl0J3MgZGVmaW5lZCwgd2hlcmUgaXQncyB1c2VkLCBhbmQgaG9wZWZ1bGx5IGlsbHVtaW5hdGUgaXRzIHJvbGUgd2l0aGluIHRoaXMgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uIHRvIGZ1bGx5IGdyYXNwIHRoZSBzdXJyb3VuZGluZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODE2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjoxNS4xNzkxNTg3MDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTc4MDE5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdHVubmVsX2luZm9fb3B0c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmM9NTk3PWJvb2wgbWx4NWVfdGNfdHVuX2VuY2FwX2luZm9fZXF1YWxfb3B0aW9ucyhzdHJ1Y3QgbWx4NWVfZW5jYXBfa2V5ICphLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jLTYyMi1cXHRyZXR1cm4gYV9pbmZvLVxcdTAwM2VvcHRpb25zX2xlbiA9PSBiX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jOjYyMzpcXHQgICAgICAgIW1lbWNtcChpcF90dW5uZWxfaW5mb19vcHRzKGFfaW5mbyksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jOjYyNDpcXHRcXHQgICAgICAgaXBfdHVubmVsX2luZm9fb3B0cyhiX2luZm8pLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYy02MjUtXFx0XFx0ICAgICAgIGFfaW5mby1cXHUwMDNlb3B0aW9uc19sZW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9nZW5ldmUuYz05Mj1zdGF0aWMgaW50IG1seDVlX2dlbl9pcF90dW5uZWxfaGVhZGVyX2dlbmV2ZShjaGFyIGJ1ZltdLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9nZW5ldmUuYy0xMTctXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZ2VuZXZlLmM6MTE4OlxcdFxcdGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KGdlbmV2ZWgtXFx1MDAzZW9wdGlvbnMsIHR1bl9pbmZvKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2dlbmV2ZS5jLTExOS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX3Z4bGFuLmM9ODM9c3RhdGljIGludCBtbHg1ZV9nZW5faXBfdHVubmVsX2hlYWRlcl92eGxhbihjaGFyIGJ1ZltdLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl92eGxhbi5jLTEwMi1cXHRpZiAodGVzdF9iaXQoSVBfVFVOTkVMX1ZYTEFOX09QVF9CSVQsIHR1bl9rZXktXFx1MDAzZXR1bl9mbGFncykpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX3Z4bGFuLmM6MTAzOlxcdFxcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhlLVxcdTAwM2V0dW5faW5mbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl92eGxhbi5jLTEwNC1cXHRcXHR2eGxhbl9idWlsZF9nYnBfaGRyKHZ4aCwgbWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM9NTYxNj1zdGF0aWMgYm9vbCBtbHg1ZV90Y19yZXN0b3JlX3R1bm5lbChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jLTU2OTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM6NTY5NTpcXHRcXHRpcF90dW5uZWxfaW5mb19vcHRzX3NldChcXHUwMDI2dHVuX2RzdC1cXHUwMDNldS50dW5faW5mbyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01Njk2LVxcdFxcdFxcdFxcdFxcdGVuY19vcHRzLmtleS5kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmM9MzMwPW5mcF9mbF9wdXNoX2dlbmV2ZV9vcHRpb25zKHN0cnVjdCBuZnBfZmxfcGF5bG9hZCAqbmZwX2ZsLCBpbnQgKmxpc3RfbGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmMtMzM1LVxcdGludCBvcHRfbGVuLCBvcHRfY250LCBhY3Rfc3RhcnQsIHRvdF9wdXNoX2xlbjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYzozMzY6XFx0dTggKnNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaXBfdHVuKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYy0zMzctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYy0zNzItXFx0Kmxpc3RfbGVuICs9IHRvdF9wdXNoX2xlbjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYzozNzM6XFx0c3JjID0gaXBfdHVubmVsX2luZm9fb3B0cyhpcF90dW4pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2FjdGlvbi5jLTM3NC1cXHR3aGlsZSAob3B0X2NudCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9Mjc1PXN0YXRpYyB2b2lkIGdlbmV2ZV9yeChzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjk5LVxcdFxcdF9fc2V0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGZsYWdzKTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYzozMDA6XFx0XFx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoXFx1MDAyNnR1bl9kc3QtXFx1MDAzZXUudHVuX2luZm8sXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMzAxLVxcdFxcdFxcdFxcdFxcdGdudmgtXFx1MDAzZW9wdGlvbnMsIGdudmgtXFx1MDAzZW9wdF9sZW4gKiA0LFxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTIyOT1zdGF0aWMgdm9pZCBnZW5ldmVfYnVpbGRfaGVhZGVyKHN0cnVjdCBnZW5ldmVoZHIgKmdlbmV2ZWgsXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xMjQzLVxcdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpKVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjEyNDQ6XFx0XFx0aXBfdHVubmVsX2luZm9fb3B0c19nZXQoZ2VuZXZlaC1cXHUwMDNlb3B0aW9ucywgaW5mbyk7XFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTI0NS19XFxuLS1cXG5kcml2ZXJzL25ldC9wZmNwLmM9NTI9c3RhdGljIGludCBwZmNwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvcGZjcC5jLTc0LVxcbmRyaXZlcnMvbmV0L3BmY3AuYzo3NTpcXHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoXFx1MDAyNnR1bl9kc3QtXFx1MDAzZXUudHVuX2luZm8pO1xcbmRyaXZlcnMvbmV0L3BmY3AuYy03Ni1cXHRpZiAodW5saWtlbHkoIW1kKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xNjU3PXN0YXRpYyBpbnQgdnhsYW5fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNzQ3LVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoxNzQ4OlxcdFxcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhcXHUwMDI2dHVuX2RzdC1cXHUwMDNldS50dW5faW5mbyk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTE3NDktXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MjM3Mz12b2lkIHZ4bGFuX3htaXRfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjQ4My1cXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjI0ODQ6XFx0XFx0XFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yNDg1LVxcdFxcdH1cXG4tLVxcbmluY2x1ZGUvbmV0L2RzdF9tZXRhZGF0YS5oPTE1Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZXRhZGF0YV9kc3QgKnR1bl9kc3RfdW5jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvZHN0X21ldGFkYXRhLmgtMTY4LVxcdG5ld19tZC1cXHUwMDNldS50dW5faW5mbyA9IG1kX2RzdC1cXHUwMDNldS50dW5faW5mbztcXG5pbmNsdWRlL25ldC9kc3RfbWV0YWRhdGEuaDoxNjk6XFx0bWVtY3B5KGlwX3R1bm5lbF9pbmZvX29wdHMoXFx1MDAyNm5ld19tZC1cXHUwMDNldS50dW5faW5mbyksXFxuaW5jbHVkZS9uZXQvZHN0X21ldGFkYXRhLmg6MTcwOlxcdCAgICAgICBpcF90dW5uZWxfaW5mb19vcHRzKFxcdTAwMjZtZF9kc3QtXFx1MDAzZXUudHVuX2luZm8pLCBtZF9zaXplKTtcXG5pbmNsdWRlL25ldC9kc3RfbWV0YWRhdGEuaC0xNzEtXFxuLS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg9ODk9c3RydWN0IGlwX3R1bm5lbF9lbmNhcCB7XFxuLS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtMTA1LVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDoxMDY6I2RlZmluZSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMDctXFx0X0dlbmVyaWMoaW5mbyxcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg9Njc0PXN0YXRpYyBpbmxpbmUgdm9pZCBpcHR1bm5lbF94bWl0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwa3RfbGVuKVxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTcxMC1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzExOnN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfaW5mb19vcHRzX2dldCh2b2lkICp0byxcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzEyLVxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzEzLXtcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzE0OlxcdG1lbWNweSh0bywgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSwgaW5mby1cXHUwMDNlb3B0aW9uc19sZW4pO1xcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MTUtfVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MTYtXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjcxNzpzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2luZm9fb3B0c19zZXQoc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MTgtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgdm9pZCAqZnJvbSwgaW50IGxlbixcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MjItXFx0aWYgKGxlbiBcXHUwMDNlIDApIHtcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzIzOlxcdFxcdG1lbWNweShpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pLCBmcm9tLCBsZW4pO1xcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MjQtXFx0XFx0aXBfdHVubmVsX2ZsYWdzX29yKGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MsXFxuLS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg9NzU4PXN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfdW5uZWVkX21ldGFkYXRhKHZvaWQpXFxuLS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzYxLVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDo3NjI6c3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KHZvaWQgKnRvLFxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03NjMtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTc2Ni1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzY3OnN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfaW5mb19vcHRzX3NldChzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTc2OC1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCB2b2lkICpmcm9tLCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDk4Mz1CUEZfQ0FMTF8zKGJwZl9za2JfZ2V0X3R1bm5lbF9vcHQsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTggKiwgdG8sIHUzMiwgc2l6ZSlcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ5OTctXFxubmV0L2NvcmUvZmlsdGVyLmM6NDk5ODpcXHRpcF90dW5uZWxfaW5mb19vcHRzX2dldCh0bywgaW5mbyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDk5OS1cXHRpZiAoc2l6ZSBcXHUwMDNlIGluZm8tXFx1MDAzZW9wdGlvbnNfbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NTEwMD1CUEZfQ0FMTF8zKGJwZl9za2Jfc2V0X3R1bm5lbF9vcHQsIHN0cnVjdCBza19idWZmICosIHNrYixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTUxMTItXFx0aXBfdHVubmVsX3NldF9vcHRpb25zX3ByZXNlbnQocHJlc2VudCk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NTExMzpcXHRpcF90dW5uZWxfaW5mb19vcHRzX3NldChpbmZvLCBmcm9tLCBzaXplLCBwcmVzZW50KTtcXG5uZXQvY29yZS9maWx0ZXIuYy01MTE0LVxcbi0tXFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYz0zNjY9c2tiX2Zsb3dfZGlzc2VjdF90dW5uZWxfaW5mbyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy00ODQtXFx0XFx0ZW5jX29wdC1cXHUwMDNlbGVuID0gaW5mby1cXHUwMDNlb3B0aW9uc19sZW47XFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYzo0ODU6XFx0XFx0aXBfdHVubmVsX2luZm9fb3B0c19nZXQoZW5jX29wdC1cXHUwMDNlZGF0YSwgaW5mbyk7XFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy00ODYtXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0yNjc9c3RhdGljIGludCBlcnNwYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0bmxfcHRrX2luZm8gKnRwaSxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTM0NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZW9mKCplcnNoZHIpKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzozNDU6XFx0XFx0XFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKFxcdTAwMjZ0dW5fZHN0LVxcdTAwM2V1LnR1bl9pbmZvKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0zNDYtXFx0XFx0XFx0bWQtXFx1MDAzZXZlcnNpb24gPSB2ZXI7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz01NDA9c3RhdGljIHZvaWQgZXJzcGFuX2ZiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTU2Mi1cXHRcXHRnb3RvIGVycl9mcmVlX3NrYjtcXG5uZXQvaXB2NC9pcF9ncmUuYzo1NjM6XFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy01NjQtXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTE0Mj1zdHJ1Y3QgbWV0YWRhdGFfZHN0ICppcHR1bm5lbF9tZXRhZGF0YV9yZXBseShzdHJ1Y3QgbWV0YWRhdGFfZHN0ICptZCxcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTY2LVxcdGRzdC1cXHUwMDNlbW9kZSA9IHNyYy1cXHUwMDNlbW9kZSB8IElQX1RVTk5FTF9JTkZPX1RYO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6MTY3OlxcdGlwX3R1bm5lbF9pbmZvX29wdHNfc2V0KGRzdCwgaXBfdHVubmVsX2luZm9fb3B0cyhzcmMpLFxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTY4LVxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlb3B0aW9uc19sZW4sIHR1bl9mbGFncyk7XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTUwNT1zdGF0aWMgaW50IGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZShzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy01MjctXFx0aWYgKGluZm8pIHtcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjUyODpcXHRcXHRzdHJ1Y3QgZ2VuZXZlX29wdCAqb3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSArIG9wdHNfbGVuO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNTI5LVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz01NDI9c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0c192eGxhbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy01NTgtXFx0XFx0c3RydWN0IHZ4bGFuX21ldGFkYXRhICptZCA9XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo1NTk6XFx0XFx0XFx0aXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSArIG9wdHNfbGVuO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNTYwLVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz01NzA9c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0c19lcnNwYW4oc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNTk5LVxcdFxcdHN0cnVjdCBlcnNwYW5fbWV0YWRhdGEgKm1kID1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjYwMDpcXHRcXHRcXHRpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pICsgb3B0c19sZW47XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy02MDEtXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTc3Mj1zdGF0aWMgaW50IGlwX3R1bl9maWxsX2VuY2FwX29wdHNfZ2VuZXZlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTc4My1cXHR3aGlsZSAodHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuIFxcdTAwM2Ugb2Zmc2V0KSB7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo3ODQ6XFx0XFx0b3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbykgKyBvZmZzZXQ7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy03ODUtXFx0XFx0aWYgKG5sYV9wdXRfYmUxNihza2IsIExXVFVOTkVMX0lQX09QVF9HRU5FVkVfQ0xBU1MsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTgwMD1zdGF0aWMgaW50IGlwX3R1bl9maWxsX2VuY2FwX29wdHNfdnhsYW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtODA5LVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6ODEwOlxcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyk7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy04MTEtXFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgTFdUVU5ORUxfSVBfT1BUX1ZYTEFOX0dCUCwgbWQtXFx1MDAzZWdicCkpIHtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9ODIwPXN0YXRpYyBpbnQgaXBfdHVuX2ZpbGxfZW5jYXBfb3B0c19lcnNwYW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtODI5LVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6ODMwOlxcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyk7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy04MzEtXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX1ZFUiwgbWQtXFx1MDAzZXZlcnNpb24pKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz04OTk9c3RhdGljIGludCBpcF90dW5fb3B0c19ubHNpemUoc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05MTItXFx0XFx0d2hpbGUgKGluZm8tXFx1MDAzZW9wdGlvbnNfbGVuIFxcdTAwM2Ugb2Zmc2V0KSB7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo5MTM6XFx0XFx0XFx0b3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSArIG9mZnNldDtcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTkxNC1cXHRcXHRcXHRvcHRfbGVuICs9IG5sYV90b3RhbF9zaXplKDIpXFx0LyogT1BUX0dFTkVWRV9DTEFTUyAqL1xcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05MjMtXFx0fSBlbHNlIGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfRVJTUEFOX09QVF9CSVQsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpKSB7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo5MjQ6XFx0XFx0c3RydWN0IGVyc3Bhbl9tZXRhZGF0YSAqbWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTI1LVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz05NTA9c3RhdGljIGludCBpcF90dW5fY21wX2VuY2FwKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYSwgc3RydWN0IGx3dHVubmVsX3N0YXRlICpiKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05NTctXFx0ICAgICAgIGluZm9fYS1cXHUwMDNlb3B0aW9uc19sZW4gIT0gaW5mb19iLVxcdTAwM2VvcHRpb25zX2xlbiB8fFxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTU4OlxcdCAgICAgICBtZW1jbXAoaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvX2EpLFxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTU5OlxcdFxcdCAgICAgIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mb19iKSwgaW5mb19hLVxcdTAwM2VvcHRpb25zX2xlbik7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05NjAtfVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTQ5MD1zdGF0aWMgaW50IGlwNmVyc3Bhbl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy01NDktXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHNpemVvZigqZXJzaGRyKSk7XFxubmV0L2lwdjYvaXA2X2dyZS5jOjU1MDpcXHRcXHRcXHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTU1MS1cXHRcXHRcXHRtZC1cXHUwMDNldmVyc2lvbiA9IHZlcjtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz05MjE9c3RhdGljIG5ldGRldl90eF90IGlwNmVyc3Bhbl90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTk5OS1cXHRcXHRcXHRnb3RvIHR4X2VycjtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTAwMDpcXHRcXHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMDAxLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmM9NDE5PXN0YXRpYyBpbnQgbmZ0X3R1bm5lbF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmMtNDk1LSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jOjQ5NjpcXHRpcF90dW5uZWxfaW5mb19vcHRzX3NldChcXHUwMDI2bWQtXFx1MDAzZXUudHVuX2luZm8sIFxcdTAwMjZwcml2LVxcdTAwM2VvcHRzLnUsIHByaXYtXFx1MDAzZW9wdHMubGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jLTQ5Ny1cXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VvcHRzLmZsYWdzKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM9MTAwMD1pbnQgb3ZzX2Zsb3dfa2V5X2V4dHJhY3QoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMTAxOS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjEwMjA6XFx0XFx0XFx0aXBfdHVubmVsX2luZm9fb3B0c19nZXQoVFVOX01FVEFEQVRBX09QVFMoa2V5LCB0dW5faW5mby1cXHUwMDNlb3B0aW9uc19sZW4pLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMTAyMS1cXHRcXHRcXHRcXHRcXHRcXHR0dW5faW5mbyk7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM9OTc5PWludCBvdnNfbmxhX3B1dF90dW5uZWxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTk4Mi1cXHRyZXR1cm4gX19pcF90dW5fdG9fbmxhdHRyKHNrYiwgXFx1MDAyNnR1bl9pbmZvLVxcdTAwM2VrZXksXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jOjk4MzpcXHRcXHRcXHRcXHQgIGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy05ODQtXFx0XFx0XFx0XFx0ICB0dW5faW5mby1cXHUwMDNlb3B0aW9uc19sZW4sXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM9MjgwMD1zdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X3NldF90dW4oY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0yODcyLVxcdCAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzoyODczOlxcdGlwX3R1bm5lbF9pbmZvX29wdHNfc2V0KHR1bl9pbmZvLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0yODc0LVxcdFxcdFxcdFxcdFRVTl9NRVRBREFUQV9PUFRTKFxcdTAwMjZrZXksIGtleS50dW5fb3B0c19sZW4pLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTM4MDI9c3RhdGljIGludCBzZXRfYWN0aW9uX3RvX2F0dHIoY29uc3Qgc3RydWN0IG5sYXR0ciAqYSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zODE4LVxcdFxcdGVyciA9ICBpcF90dW5fdG9fbmxhdHRyKHNrYiwgXFx1MDAyNnR1bl9pbmZvLVxcdTAwM2VrZXksXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jOjM4MTk6XFx0XFx0XFx0XFx0XFx0aXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyksXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTM4MjAtXFx0XFx0XFx0XFx0XFx0dHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuLFxcbi0tXFxubmV0L3BzYW1wbGUvcHNhbXBsZS5jPTIxNj1zdGF0aWMgaW50IF9fcHNhbXBsZV9pcF90dW5fdG9fbmxhdHRyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvcHNhbXBsZS9wc2FtcGxlLmMtMjE5LVxcdHVuc2lnbmVkIHNob3J0IHR1bl9wcm90byA9IGlwX3R1bm5lbF9pbmZvX2FmKHR1bl9pbmZvKTtcXG5uZXQvcHNhbXBsZS9wc2FtcGxlLmM6MjIwOlxcdGNvbnN0IHZvaWQgKnR1bl9vcHRzID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyk7XFxubmV0L3BzYW1wbGUvcHNhbXBsZS5jLTIyMS1cXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2tleSAqdHVuX2tleSA9IFxcdTAwMjZ0dW5faW5mby1cXHUwMDNla2V5O1xcbi0tXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9Mjk2PXN0YXRpYyBpbnQgdHVubmVsX2tleV9vcHRzX3NldChzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMwMy1cXHRcXHRfX3NldF9iaXQoSVBfVFVOTkVMX0dFTkVWRV9PUFRfQklULCBpbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzKTtcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYzozMDQ6XFx0XFx0cmV0dXJuIHR1bm5lbF9rZXlfY29weV9vcHRzKG5sYSwgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSxcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy0zMDUtXFx0XFx0XFx0XFx0XFx0ICAgIG9wdHNfbGVuLCBleHRhY2spO1xcbi0tXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtMzExLVxcdFxcdF9fc2V0X2JpdChJUF9UVU5ORUxfVlhMQU5fT1BUX0JJVCwgaW5mby1cXHUwMDNla2V5LnR1bl9mbGFncyk7XFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6MzEyOlxcdFxcdHJldHVybiB0dW5uZWxfa2V5X2NvcHlfb3B0cyhubGEsIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyksXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtMzEzLVxcdFxcdFxcdFxcdFxcdCAgICBvcHRzX2xlbiwgZXh0YWNrKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMxOS1cXHRcXHRfX3NldF9iaXQoSVBfVFVOTkVMX0VSU1BBTl9PUFRfQklULCBpbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzKTtcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYzozMjA6XFx0XFx0cmV0dXJuIHR1bm5lbF9rZXlfY29weV9vcHRzKG5sYSwgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSxcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy0zMjEtXFx0XFx0XFx0XFx0XFx0ICAgIG9wdHNfbGVuLCBleHRhY2spO1xcbi0tXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9NTc2PXN0YXRpYyBpbnQgdHVubmVsX2tleV9nZW5ldmVfb3B0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy01Nzgte1xcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjU3OTpcXHRjb25zdCB1OCAqc3JjID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy01ODAtXFx0aW50IGxlbiA9IGluZm8tXFx1MDAzZW9wdGlvbnNfbGVuO1xcbi0tXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9NjA4PXN0YXRpYyBpbnQgdHVubmVsX2tleV92eGxhbl9vcHRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTYxMC17XFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6NjExOlxcdGNvbnN0IHN0cnVjdCB2eGxhbl9tZXRhZGF0YSAqbWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTYxMi1cXHRzdHJ1Y3QgbmxhdHRyICpzdGFydDtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jPTYyNz1zdGF0aWMgaW50IHR1bm5lbF9rZXlfZXJzcGFuX29wdHNfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtNjI5LXtcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYzo2MzA6XFx0Y29uc3Qgc3RydWN0IGVyc3Bhbl9tZXRhZGF0YSAqbWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTYzMS1cXHRzdHJ1Y3QgbmxhdHRyICpzdGFydDtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jPTgzOT10dW5uZWxfa2V5X2dlbmV2ZV9vcHRzX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtODQwLXtcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYzo4NDE6XFx0Y29uc3QgdTggKnNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7XFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtODQyLVxcdGludCBsZW4gPSBpbmZvLVxcdTAwM2VvcHRpb25zX2xlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjI6MTYuODM2OTY5NDI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4Mjg0MzM2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byB0aGUgQ29yZTogVW5wYWNraW5nIGBpcF90dW5uZWxfaW5mb19vcHRzYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGlzIGBpcF90dW5uZWxfaW5mb19vcHRzYCBzdHJ1Y3QuIEl0J3MgdGltZSB0byBjaGVjayB0aGUgc291cmNlLCBzcGVjaWZpY2FsbHkgaW4gYGluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaGAuIEkgcmVjYWxsIHRoYXQgaXQgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHR1bm5lbCBjb25maWd1cmF0aW9uLCBidXQgdGhlIHByZWNpc2UgZGV0YWlscywgZXNwZWNpYWxseSB0aGUgbGF5b3V0IGFuZCB0aGUgaW5kaXZpZHVhbCBmaWVsZHMsIGFyZSBlc2NhcGluZyBtZSBhdCB0aGUgbW9tZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gSSB3aWxsIGNoZWNrIHRoZSBoZWFkZXIgZmlsZSBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTU3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjI6MTguNjY1NDA1ODg5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA5NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5NTpcXHRcXG4gIDk2OlxcdC8qIEZsYWdzIGZvciBpcF90dW5uZWxfaW5mbyBtb2RlLiAqL1xcbiAgOTc6XFx0I2RlZmluZSBJUF9UVU5ORUxfSU5GT19UWFxcdDB4MDFcXHQvKiByZXByZXNlbnRzIHR4IHR1bm5lbCBwYXJhbWV0ZXJzICovXFxuICA5ODpcXHQjZGVmaW5lIElQX1RVTk5FTF9JTkZPX0lQVjZcXHQweDAyXFx0Lyoga2V5IGNvbnRhaW5zIElQdjYgYWRkcmVzc2VzICovXFxuICA5OTpcXHQjZGVmaW5lIElQX1RVTk5FTF9JTkZPX0JSSURHRVxcdDB4MDRcXHQvKiByZXByZXNlbnRzIGEgYnJpZGdlZCB0dW5uZWwgaWQgKi9cXG4gMTAwOlxcdFxcbiAxMDE6XFx0LyogTWF4aW11bSB0dW5uZWwgb3B0aW9ucyBsZW5ndGguICovXFxuIDEwMjpcXHQjZGVmaW5lIElQX1RVTk5FTF9PUFRTX01BWFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTAzOlxcdFxcdEdFTk1BU0soKHNpemVvZl9maWVsZChzdHJ1Y3QgaXBfdHVubmVsX2luZm8sXFx0XFx0XFxcXFxcbiAxMDQ6XFx0XFx0XFx0XFx0ICAgICAgb3B0aW9uc19sZW4pICogQklUU19QRVJfQllURSkgLSAxLCAwKVxcbiAxMDU6XFx0XFxuIDEwNjpcXHQjZGVmaW5lIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbylcXHRcXHRcXHRcXHRcXFxcXFxuIDEwNzpcXHRcXHRfR2VuZXJpYyhpbmZvLFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTA4OlxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKiA6ICgoY29uc3Qgdm9pZCAqKShpbmZvKS1cXHUwMDNlb3B0aW9ucyksXFxcXFxcbiAxMDk6XFx0XFx0XFx0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqIDogKCh2b2lkICopKGluZm8pLVxcdTAwM2VvcHRpb25zKVxcXFxcXG4gMTEwOlxcdFxcdClcXG4gMTExOlxcdFxcbiAxMTI6XFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvIHtcXG4gMTEzOlxcdFxcdHN0cnVjdCBpcF90dW5uZWxfa2V5XFx0a2V5O1xcbiAxMTQ6XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9lbmNhcFxcdGVuY2FwO1xcbiAxMTU6XFx0I2lmZGVmIENPTkZJR19EU1RfQ0FDSEVcXG4gMTE2OlxcdFxcdHN0cnVjdCBkc3RfY2FjaGVcXHRkc3RfY2FjaGU7XFxuIDExNzpcXHQjZW5kaWZcXG4gMTE4OlxcdFxcdHU4XFx0XFx0XFx0b3B0aW9uc19sZW47XFxuIDExOTpcXHRcXHR1OFxcdFxcdFxcdG1vZGU7XFxuIDEyMDpcXHRcXHR1OFxcdFxcdFxcdG9wdGlvbnNbXSBfX2FsaWduZWRfbGFyZ2VzdCBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pO1xcbiAxMjE6XFx0fTtcXG4gMTIyOlxcdFxcbiAxMjM6XFx0LyogNnJkIHByZWZpeC9yZWxheSBpbmZvcm1hdGlvbiAqL1xcbiAxMjQ6XFx0I2lmZGVmIENPTkZJR19JUFY2X1NJVF82UkRcXG4gMTI1OlxcdHN0cnVjdCBpcF90dW5uZWxfNnJkX3Bhcm0ge1xcbiAxMjY6XFx0XFx0c3RydWN0IGluNl9hZGRyXFx0XFx0cHJlZml4O1xcbiAxMjc6XFx0XFx0X19iZTMyXFx0XFx0XFx0cmVsYXlfcHJlZml4O1xcbiAxMjg6XFx0XFx0dTE2XFx0XFx0XFx0cHJlZml4bGVuO1xcbiAxMjk6XFx0XFx0dTE2XFx0XFx0XFx0cmVsYXlfcHJlZml4bGVuO1xcbiAxMzA6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0cmN1O1xcbiAxMzE6XFx0fTtcXG4gMTMyOlxcdCNlbmRpZlxcbiAxMzM6XFx0XFxuIDEzNDpcXHRzdHJ1Y3QgaXBfdHVubmVsX3BybF9lbnRyeSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjE4LjY2NTQ5MjU1OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NjMxOTI0MDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEtlcm5lbCBCdWcgYW5kIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLCBzcGVjaWZpY2FsbHkgbGluZSAxMjAgYW5kIHRoZSBgaXBfdHVubmVsX2luZm9gIHN0cnVjdC4gV2hhdCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24gaXMgdGhlIGBvcHRpb25zW10gX19hbGlnbmVkX2xhcmdlc3QgX19jb3VudGVkX2J5KG9wdGlvbnNfbGVuKTtgIG1lbWJlci4gVGhlIGBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pYCBhdHRyaWJ1dGUgaXMga2V5IGhlcmUg4oCTIGl0IHRlbGxzIHRoZSBjb21waWxlciB0aGF0IHRoZSBzaXplIG9mIHRoZSBgb3B0aW9uc2AgYXJyYXkgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYG9wdGlvbnNfbGVuYCBmaWVsZC4gVGhpcyBpcyBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgd2hlbiBVQlNBTidzIGJvdW5kcyBjaGVja2luZyBpcyBlbmFibGVkLlxuXG5NeSBjb25jZXJuIHN0ZW1zIGZyb20gaG93IGB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbmAgaXMgYmVpbmcgaGFuZGxlZCBpbiB0aGUgYGlwX3R1bl9idWlsZF9zdGF0ZWAgYW5kIGBpcDZfdHVuX2J1aWxkX3N0YXRlYCBmdW5jdGlvbnMuIEJlZm9yZSwgdGhlIGNvZGUgc2VxdWVuY2Ugd2FzIHNldHRpbmcgYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuYCAqYWZ0ZXIqIGNhbGxpbmcgYGlwX3R1bl9zZXRfb3B0c2AuIFRoZSBwcm9ibGVtIGlzLCB0aGF0IHRoZSBgaXBfdHVuX3NldF9vcHRzYCBmdW5jdGlvbiBhY2Nlc3NlcyB0aGUgYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNgIGFycmF5IChwb3RlbnRpYWxseSB3cml0aW5nIGludG8gaXQpICpiZWZvcmUqIGBvcHRpb25zX2xlbmAgaXMgc2V0LiBUaGlzIG1lYW5zIHRoYXQgaWYgYG9wdGlvbnNfbGVuYCBpcyBpbml0aWFsbHkgemVybywgdGhlIGFjY2VzcyB0byBgb3B0aW9uc2AgZWZmZWN0aXZlbHkgYmVjb21lcyBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gV2l0aCBgQ09ORklHX1VCU0FOX0JPVU5EU2AgKG9yIHdpdGggdGhlIGBfX2NvdW50ZWRfYnlgIGF0dHJpYnV0ZSksIHRoaXMgd2lsbCB0cmlnZ2VyIGEgYm91bmRzIGNoZWNrIGZhaWx1cmUg4oCTIGEgY3Jhc2ggb3IgYSB3YXJuaW5nLCBkZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyIGFuZCBVQlNBTiBjb25maWd1cmF0aW9uLlxuXG5TbywgdGhlIGZpeCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGUgY29kZSB3YXMgbW9kaWZpZWQgdG8gbW92ZSB0aGUgbGluZSBgdHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO2AgYmVmb3JlIHRoZSBjYWxsIHRvIGBpcF90dW5fc2V0X29wdHNgLiBUaGlzIGVuc3VyZXMgdGhhdCBgb3B0aW9uc19sZW5gIGhhcyBhIHZhbGlkIHZhbHVlICpiZWZvcmUqIGFueSBhY2Nlc3MgdG8gYG9wdGlvbnNgIG9jY3VycywgdGh1cyBhdm9pZGluZyB0aGUgYm91bmRzIGNoZWNrIGZhaWx1cmUuXG5cblRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZml4LCBhbmQgdG8gc2VlIHdoZW4gdGhpcyB3YXMgY2hhbmdlZCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGdpdCBsb2cgZm9yIHRoZSBzcGVjaWZpYyBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIHRoaXMgY2hhbmdlLiBMZXQgbWUgcnVuIGBnaXQgbG9nYCB0byBzZWUgaWYgSSBjYW4gZmluZCBpdC4gSWYgSSdtIGx1Y2t5LCB0aGUgY29tbWl0IG1lc3NhZ2Ugd2lsbCBwcm92aWRlIG1vcmUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczOTcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjoyMy4yOTc0MTk1NTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5Mjg4MzkwNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jb3VudGVkX2J5XFxcXChvcHRpb25zX2xlblxcXFwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaD0xMTI9c3RydWN0IGlwX3R1bm5lbF9pbmZvIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMTktXFx0dThcXHRcXHRcXHRtb2RlO1xcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDoxMjA6XFx0dThcXHRcXHRcXHRvcHRpb25zW10gX19hbGlnbmVkX2xhcmdlc3QgX19jb3VudGVkX2J5KG9wdGlvbnNfbGVuKTtcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtMTIxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjI2LjIyNjI2MzQ3NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDk2NDYyNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgS2NvbmZpZyBPcHRpb25zIGZvciBJUCBUdW5uZWxpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIG9wdGlvbnMgZ292ZXJuIHRoZSBiZWhhdmlvciBvZiBgaXBfdHVubmVsX2NvcmUuY2AsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBMV1R1bm5lbCBlbmNhcHN1bGF0aW9uIG9mIElQL0lQdjYgdHJhZmZpYy4gVGltZSB0byBkaWcgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBLY29uZmlnIHN5bWJvbHMuIExldCdzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGdyZXAuIEknbGwgc2VhcmNoIGZvciBgaXBfdHVuX2J1aWxkX3N0YXRlYCDigJMgdGhhdCBmdW5jdGlvbiBuYW1lIHNob3VsZCBiZSBhIGRlY2VudCBpbmRpY2F0b3Igb2YgdGhlIGNvcmUgdHVubmVsaW5nIGZ1bmN0aW9uYWxpdHkuIEknbGwgYWxzbyBpbmNsdWRlIGEgc2VhcmNoIGZvciBgTFdUVU5ORUxfRU5DQVBfSVBgLCBhcyB0aGF0IGxvb2tzIGxpa2UgYSBrZXkgbWFjcm8gZm9yIGNvbnRyb2xsaW5nIHRoZSBlbmNhcHN1bGF0aW9uIGRpcmVjdGx5LiBUaGlzIHNob3VsZCBxdWlja2x5IGhpZ2hsaWdodCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgd2hlcmUgSSdsbCBiZWdpbiBteSBleHBsb3JhdGlvbiB0byBnZXQgYSBzZW5zZSBvZiBob3cgdGhlc2UgY29tcG9uZW50cyBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDQ0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjI6MjguNzIyNzI4Mzc5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQyNjY1NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3R1bl9idWlsZF9zdGF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTY4Mj1zdGF0aWMgaW50IGlwX3R1bl9zZXRfb3B0cyhzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTY4Ny1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjY4ODpzdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy02ODktXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGZhbWlseSwgY29uc3Qgdm9pZCAqY2ZnLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz05NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgaXBfdHVuX2x3dF9vcHMgPSB7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo5NjM6XFx0LmJ1aWxkX3N0YXRlID0gaXBfdHVuX2J1aWxkX3N0YXRlLFxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTY0LVxcdC5kZXN0cm95X3N0YXRlID0gaXBfdHVuX2Rlc3Ryb3lfc3RhdGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjMwLjI2NTM5OTk1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1MDI4MTgzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBUdW5uZWwgT3BlcmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgd2hlcmUgdGhlIGBpcF90dW5fbHd0X29wc2Agc3RydWN0dXJlIGlzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgTGlnaHQgV2VpZ2h0IFR1bm5lbCAoTFdUKSBvcGVyYXRpb25zIGFyZSBob29rZWQgaW50byB0aGUgSVB2NCB0dW5uZWwgaW5mcmFzdHJ1Y3R1cmUuIEknbSBhZnRlciB0aGUgcmVnaXN0cmF0aW9uIHBvaW50LCB0aGUgY2FsbCB0aGF0IHVsdGltYXRlbHkgdGllcyB0aG9zZSBvcGVyYXRpb25zIHRvIHRoZSByZWxldmFudCBkYXRhcGF0aC4gTG9jYXRpbmcgdGhpcyB3aWxsIHByb3ZpZGUgbWUgd2l0aCB0aGUgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgc3BlY2lmaWMgbG9naWMgZGVmaW5lZCB3aXRoaW4gYGlwX3R1bl9sd3Rfb3BzYC4gVGltZSB0byBmaXJlIHVwIHRoZSBlZGl0b3IgYW5kIHN0YXJ0IG5hdmlnYXRpbmcgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTQ4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjI6MzIuNzY4MjIxMDcyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ2Njg4MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3R1bl9sd3Rfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9OTUwPXN0YXRpYyBpbnQgaXBfdHVuX2NtcF9lbmNhcChzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmEsIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYilcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTYxLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTYyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIGlwX3R1bl9sd3Rfb3BzID0ge1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTYzLVxcdC5idWlsZF9zdGF0ZSA9IGlwX3R1bl9idWlsZF9zdGF0ZSxcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9MTA4OT12b2lkIF9faW5pdCBpcF90dW5uZWxfY29yZV9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTEwOTYtXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxMDk3OlxcdGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXFx1MDAyNmlwX3R1bl9sd3Rfb3BzLCBMV1RVTk5FTF9FTkNBUF9JUCk7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDk4LVxcdGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXFx1MDAyNmlwNl90dW5fbHd0X29wcywgTFdUVU5ORUxfRU5DQVBfSVA2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjI6MzQuMzE0OTE1OTE3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NzkwMzgzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJUCBUdW5uZWwgQ29yZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0dW5uZWwgb3BlcmF0aW9ucyBhcmUgaW5pdGlhbGl6ZWQuIE15IGZvY3VzIGlzIGN1cnJlbnRseSBvbiBgaXBfdHVuX2x3dF9vcHNgIGFuZCBgaXA2X3R1bl9sd3Rfb3BzYC4gRnJvbSBteSBub3RlcywgSSByZWNhbGwgdGhvc2UgYXJlIHJlZ2lzdGVyZWQgd2l0aGluIGBpcF90dW5uZWxfY29yZV9pbml0KHZvaWQpYC4gR29vZC4gTm93LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0LiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY29tcGlsYXRpb24gcHJvY2VzcyBmb3IgYGlwX3R1bm5lbF9jb3JlLmNgLiBMZXQncyBzZWUgaG93IHRoaXMgbW9kdWxlIGlzIGJ1aWx0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBuZXQvaXB2NC9NYWtlZmlsZWAgZmlsZSB0byBzZWUgdGhlIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNvcmUgdHVubmVsIGZ1bmN0aW9uYWxpdHkgaXMgaW50ZWdyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NjYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjozNi4yOTM5NTY4NjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjkyMjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3R1bm5lbF9jb3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXFxcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlLTE1LVxcdCAgICAgZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vIGZpYl90cmllLm8gZmliX25vdGlmaWVyLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE2OlxcdCAgICAgaW5ldF9mcmFnbWVudC5vIHBpbmcubyBpcF90dW5uZWxfY29yZS5vIGdyZV9vZmZsb2FkLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlLTE3LVxcdCAgICAgbWV0cmljcy5vIG5ldGxpbmsubyBuZXh0aG9wLm8gdWRwX3R1bm5lbF9zdHViLm9cXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYz0xODc5PXN0YXRpYyBpbnQgX19pbml0IGluZXRfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jLTE5OTktXFxubmV0L2lwdjQvYWZfaW5ldC5jOjIwMDA6XFx0aXBfdHVubmVsX2NvcmVfaW5pdCgpO1xcbm5ldC9pcHY0L2FmX2luZXQuYy0yMDAxLVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz0xMDgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIGlwNl90dW5fbHd0X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTA4OC1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjEwODk6dm9pZCBfX2luaXQgaXBfdHVubmVsX2NvcmVfaW5pdCh2b2lkKVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTA5MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjM2LjM0MjI1NDE5M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODgxMjU3OTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50IGRvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSVAgVHVubmVsIENvcmUgTW9kdWxlJ3MgQ29tcGlsYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjayBkb3duIHNvbWV0aGluZyByZWxhdGVkIHRvIElQIHR1bm5lbGluZywgYW5kIHRoZSBmaXJzdCBjbHVlIGlzIHRoYXQgYGlwX3R1bm5lbF9jb3JlLm9gIGlzIGJlaW5nIGNvbXBpbGVkLiBBbHJpZ2h0LCBsZXQncyBzZWUsIHRoYXQncyBpbiBgbmV0L2lwdjQvTWFrZWZpbGVgLiBBaCwgeWVzLCBpdCdzIGRlZmluZWQgYXMgYG9iai15YCwgc28gaXQncyBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIFRoYXTigJlzIGdvb2QgdG8ga25vdyBmb3IgdGhlIGJpZyBwaWN0dXJlLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb25zIHdpdGhpbiB0aGUgdHVubmVsIGFyZSBlbmFibGVkLCBzbyBhcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGd1YXJkcyBvbiBgbHd0dW5uZWxfZW5jYXBfYWRkX29wc2A/IFRoYXQgc2VlbXMgbGlrZSBhIHByaW1lIHRhcmdldCB0byBjaGVjayBmb3IgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEdvdHRhIHZlcmlmeSBpZiBpdCBpcyBhZmZlY3RlZCBieSBhbnkgcGFydGljdWxhciBgQ09ORklHYCBvcHRpb25zLlxuXG5MZXQncyBkaXZlIGludG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoaXMgbW9kdWxlLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyBgaXBfdHVubmVsX2NvcmVfaW5pdGAgd2l0aGluIGBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jYC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGJlc3Qgb3ZlcnZpZXcgb2YgaG93IGV2ZXJ5dGhpbmcgaXMgYnJvdWdodCBvbmxpbmUgYW5kIHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGNoZWNrcyBtaWdodCBiZSBsb2NhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA3NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjQwLjIyMzUxNTQ0NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODYyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFxuMTA4MTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBpcDZfdHVuX2x3dF9vcHMgPSB7XFxuMTA4MjpcXHRcXHQuYnVpbGRfc3RhdGUgPSBpcDZfdHVuX2J1aWxkX3N0YXRlLFxcbjEwODM6XFx0XFx0LmZpbGxfZW5jYXAgPSBpcDZfdHVuX2ZpbGxfZW5jYXBfaW5mbyxcXG4xMDg0OlxcdFxcdC5nZXRfZW5jYXBfc2l6ZSA9IGlwNl90dW5fZW5jYXBfbmxzaXplLFxcbjEwODU6XFx0XFx0LmNtcF9lbmNhcCA9IGlwX3R1bl9jbXBfZW5jYXAsXFxuMTA4NjpcXHRcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4xMDg3OlxcdH07XFxuMTA4ODpcXHRcXG4xMDg5OlxcdHZvaWQgX19pbml0IGlwX3R1bm5lbF9jb3JlX2luaXQodm9pZClcXG4xMDkwOlxcdHtcXG4xMDkxOlxcdFxcdC8qIElmIHlvdSBsYW5kIGhlcmUsIG1ha2Ugc3VyZSB3aGV0aGVyIGluY3JlYXNpbmcgaXBfdHVubmVsX2luZm8nc1xcbjEwOTI6XFx0XFx0ICogb3B0aW9uc19sZW4gaXMgYSByZWFzb25hYmxlIGNob2ljZSB3aXRoIGl0cyB1c2FnZSBpbiBmcm9udCBlbmRzXFxuMTA5MzpcXHRcXHQgKiAoZi5lLiwgaXQncyBwYXJ0IG9mIGZsb3cga2V5cywgZXRjKS5cXG4xMDk0OlxcdFxcdCAqL1xcbjEwOTU6XFx0XFx0QlVJTERfQlVHX09OKElQX1RVTk5FTF9PUFRTX01BWCAhPSAyNTUpO1xcbjEwOTY6XFx0XFxuMTA5NzpcXHRcXHRsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZpcF90dW5fbHd0X29wcywgTFdUVU5ORUxfRU5DQVBfSVApO1xcbjEwOTg6XFx0XFx0bHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcXHUwMDI2aXA2X3R1bl9sd3Rfb3BzLCBMV1RVTk5FTF9FTkNBUF9JUDYpO1xcbjEwOTk6XFx0fVxcbjExMDA6XFx0XFxuMTEwMTpcXHRERUZJTkVfU1RBVElDX0tFWV9GQUxTRShpcF90dW5uZWxfbWV0YWRhdGFfY250KTtcXG4xMTAyOlxcdEVYUE9SVF9TWU1CT0woaXBfdHVubmVsX21ldGFkYXRhX2NudCk7XFxuMTEwMzpcXHRcXG4xMTA0OlxcdHZvaWQgaXBfdHVubmVsX25lZWRfbWV0YWRhdGEodm9pZClcXG4xMTA1OlxcdHtcXG4xMTA2OlxcdFxcdHN0YXRpY19icmFuY2hfaW5jKFxcdTAwMjZpcF90dW5uZWxfbWV0YWRhdGFfY250KTtcXG4xMTA3OlxcdH1cXG4xMTA4OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9uZWVkX21ldGFkYXRhKTtcXG4xMTA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjo0MC4yMjM2MTU2MzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTkxMDIwNzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuIGV4cGVydDpcblxuKipMb2NhdGluZyB0aGUgTFdUdW5uZWwgRW5jYXBzdWxhdGlvbiBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYGx3dHVubmVsX2VuY2FwX2FkZF9vcHNgLiBUaGF0IG5hbWUgc291bmRzIGZhbWlsaWFyLiBSaWdodCwgaXQncyBpbnZvbHZlZCBpbiBhZGRpbmcgZW5jYXBzdWxhdGlvbiBvcGVyYXRpb25zIHdpdGhpbiB0aGUgTGludXggbmV0d29ya2luZyBzdGFjay4gTm93LCB3aGVyZSBkaWQgSSBzZWUgdGhhdD8gTGV0IG1lIHRoaW5rLi4uIEFoLCB5ZXMsIGJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbiBJJ20gZ29pbmcgdG8gZmluZCB0aGlzIGluIGBuZXQvY29yZS9sd3R1bm5lbC5jYC4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBsaWdodHdlaWdodCB0dW5uZWxpbmcgc2hvdWxkIHJlc2lkZS4gSSdsbCB0YWtlIGEgbG9vayBpbiB0aGF0IGZpbGUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTc1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjo0Mi4xMzM4MjczMDZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDAxNzUxMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHd0dW5uZWxfZW5jYXBfYWRkX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9sd3R1bm5lbC5oPTEwND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBsd3R1bm5lbF9oZWFkcm9vbShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlLFxcbi0tXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0xMTMtXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoxMTQ6aW50IGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyAqb3AsXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0xMTUtXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG51bSk7XFxuLS1cXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oPTE4ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBsd3R1bm5lbF9oZWFkcm9vbShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlLFxcbi0tXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0xODktXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoxOTA6c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfZW5jYXBfYWRkX29wcyhjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzICpvcCxcXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oLTE5MS1cXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IG51bSlcXG4tLVxcbm5ldC9jb3JlL2x3dF9icGYuYz02Nzg9c3RhdGljIGludCBfX2luaXQgYnBmX2x3dF9pbml0KHZvaWQpXFxubmV0L2NvcmUvbHd0X2JwZi5jLTY3OS17XFxubmV0L2NvcmUvbHd0X2JwZi5jOjY4MDpcXHRyZXR1cm4gbHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcXHUwMDI2YnBmX2VuY2FwX29wcywgTFdUVU5ORUxfRU5DQVBfQlBGKTtcXG5uZXQvY29yZS9sd3RfYnBmLmMtNjgxLX1cXG4tLVxcbm5ldC9jb3JlL2x3dHVubmVsLmM9Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgX19yY3UgKlxcbi0tXFxubmV0L2NvcmUvbHd0dW5uZWwuYy04MS1cXG5uZXQvY29yZS9sd3R1bm5lbC5jOjgyOmludCBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgKm9wcyxcXG5uZXQvY29yZS9sd3R1bm5lbC5jLTgzLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBudW0pXFxuLS1cXG5uZXQvY29yZS9sd3R1bm5lbC5jLTkxLX1cXG5uZXQvY29yZS9sd3R1bm5lbC5jOjkyOkVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX2VuY2FwX2FkZF9vcHMpO1xcbm5ldC9jb3JlL2x3dHVubmVsLmMtOTMtXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTEwODk9dm9pZCBfX2luaXQgaXBfdHVubmVsX2NvcmVfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDk2LVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6MTA5NzpcXHRsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZpcF90dW5fbHd0X29wcywgTFdUVU5ORUxfRU5DQVBfSVApO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6MTA5ODpcXHRsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZpcDZfdHVuX2x3dF9vcHMsIExXVFVOTkVMX0VOQ0FQX0lQNik7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDk5LX1cXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM9MzI0PWludCBpbGFfbHd0X2luaXQodm9pZClcXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTMyNS17XFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYzozMjY6XFx0cmV0dXJuIGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXFx1MDAyNmlsYV9lbmNhcF9vcHMsIExXVFVOTkVMX0VOQ0FQX0lMQSk7XFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0zMjctfVxcbi0tXFxubmV0L2lwdjYvaW9hbTZfaXB0dW5uZWwuYz01NTQ9aW50IF9faW5pdCBpb2FtNl9pcHR1bm5lbF9pbml0KHZvaWQpXFxubmV0L2lwdjYvaW9hbTZfaXB0dW5uZWwuYy01NTUte1xcbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmM6NTU2OlxcdHJldHVybiBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZpb2FtNl9pcHR1bl9vcHMsIExXVFVOTkVMX0VOQ0FQX0lPQU02KTtcXG5uZXQvaXB2Ni9pb2FtNl9pcHR1bm5lbC5jLTU1Ny19XFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0zODQ9aW50IF9faW5pdCBycGxfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzg3LVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM4ODpcXHRlcnIgPSBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZycGxfb3BzLCBMV1RVTk5FTF9FTkNBUF9SUEwpO1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM4OS1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTk0Mz1pbnQgX19pbml0IHNlZzZfaXB0dW5uZWxfaW5pdCh2b2lkKVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy05NDQte1xcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYzo5NDU6XFx0cmV0dXJuIGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXFx1MDAyNnNlZzZfaXB0dW5fb3BzLCBMV1RVTk5FTF9FTkNBUF9TRUc2KTtcXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtOTQ2LX1cXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNjk3PWludCBfX2luaXQgc2VnNl9sb2NhbF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjcyOC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjcyOTpcXHRyZXR1cm4gbHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcXHUwMDI2c2VnNl9sb2NhbF9vcHMsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI3MzAtXFx0XFx0XFx0XFx0ICAgICAgTFdUVU5ORUxfRU5DQVBfU0VHNl9MT0NBTCk7XFxuLS1cXG5uZXQvbXBscy9tcGxzX2lwdHVubmVsLmM9Mjg4PXN0YXRpYyBpbnQgX19pbml0IG1wbHNfaXB0dW5uZWxfaW5pdCh2b2lkKVxcbm5ldC9tcGxzL21wbHNfaXB0dW5uZWwuYy0yODkte1xcbm5ldC9tcGxzL21wbHNfaXB0dW5uZWwuYzoyOTA6XFx0cmV0dXJuIGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXFx1MDAyNm1wbHNfaXB0dW5fb3BzLCBMV1RVTk5FTF9FTkNBUF9NUExTKTtcXG5uZXQvbXBscy9tcGxzX2lwdHVubmVsLmMtMjkxLX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYz0xMTc3PXN0YXRpYyBpbnQgX19pbml0IHhmcm1pX2luaXQodm9pZClcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy0xMjA4LVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYzoxMjA5OlxcdGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXFx1MDAyNnhmcm1pX2VuY2FwX29wcywgTFdUVU5ORUxfRU5DQVBfWEZSTSk7XFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTEyMTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjQzLjY3NDAwOTUwNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDkyMjk3MDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBMV1RVTk5FTCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSdtIGxvb2tpbmcgYXQgYGluY2x1ZGUvbmV0L2x3dHVubmVsLmhgLCBzcGVjaWZpY2FsbHkgbGluZSAxODQuIFRoZSBjb2RlIHRoZXJlIGhhcyBhbiBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0xXVFVOTkVMKWAgY29uZGl0aW9uYWwuIEhtbSwgc28gdGhpcyBzZWN0aW9uIGlzIGNsZWFybHkgZGVwZW5kZW50IG9uIHRoZSBgQ09ORklHX0xXVFVOTkVMYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhhdCB0aGlzIG1hY3JvIGlzIHByb3Blcmx5IGRlZmluZWQgYW5kIGNvbmZpZ3VyZWQuIFRpbWUgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgdGhhdCBoZWFkZXIgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3NDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjo0Ni4xNjYzMDk4MjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvbHd0dW5uZWwuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0c3RhdGljIGlubGluZSB2b2lkIGx3dHVubmVsX3NldF9yZWRpcmVjdChzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuIDE4MTpcXHR7XFxuIDE4MjpcXHR9XFxuIDE4MzpcXHRcXG4gMTg0OlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGx3dHVubmVsX2hlYWRyb29tKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUsXFxuIDE4NTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBtdHUpXFxuIDE4NjpcXHR7XFxuIDE4NzpcXHRcXHRyZXR1cm4gMDtcXG4gMTg4OlxcdH1cXG4gMTg5OlxcdFxcbiAxOTA6XFx0c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfZW5jYXBfYWRkX29wcyhjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzICpvcCxcXG4gMTkxOlxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbnVtKVxcbiAxOTI6XFx0e1xcbiAxOTM6XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAxOTQ6XFx0XFxuIDE5NTpcXHR9XFxuIDE5NjpcXHRcXG4gMTk3OlxcdHN0YXRpYyBpbmxpbmUgaW50IGx3dHVubmVsX2VuY2FwX2RlbF9vcHMoY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyAqb3AsXFxuIDE5ODpcXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IG51bSlcXG4gMTk5OlxcdHtcXG4gMjAwOlxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gMjAxOlxcdH1cXG4gMjAyOlxcdFxcbiAyMDM6XFx0c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfdmFsaWRfZW5jYXBfdHlwZSh1MTYgZW5jYXBfdHlwZSxcXG4gMjA0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjQ2LjE2NjM5MTA5NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjYwNzU0NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgTFdUVU5ORUwqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbiBhY3R1YWxseSBlbmFibGVzIGBDT05GSUdfTFdUVU5ORUxgLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgdG8gZmluZCBpdC4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIG5ldHdvcmtpbmcgZGlyZWN0b3J5LCBgbmV0L2AuIFRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBzZWVtcyB0byBiZSBhIHNpbXBsZSBgZ3JlcGAuIEknbGwgc2VhcmNoIGZvciBcImNvbmZpZyBMV1RVTk5FTFwiIHdpdGhpbiB0aGUgYG5ldC9gIGRpcmVjdG9yeS4gVGhhdCBzaG91bGQgcGlucG9pbnQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSBvciBmaWxlcyB3aGVyZSB0aGlzIG9wdGlvbiBpcyBkZWZpbmVkIGFuZCBob3cgaXQgcmVsYXRlcyB0byBvdGhlciBjb25maWd1cmF0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzAzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjo0OC44MjcxNDg2NTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTQyMzA5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExXVFVOTkVMXFxcXGJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDQzPXNvdXJjZSBcXFwibmV0L2lmZS9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTQ0NC1cXG5uZXQvS2NvbmZpZzo0NDU6Y29uZmlnIExXVFVOTkVMXFxubmV0L0tjb25maWctNDQ2LVxcdGJvb2wgXFxcIk5ldHdvcmsgbGlnaHQgd2VpZ2h0IHR1bm5lbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjUwLjk0MTM4ODYxMloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTkzMjkyNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBuZXQvS2NvbmZpZ2AsIHdoaWNoIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgbmV0d29yay1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQW5kIHNpbmNlIEkga25vdyBteSB3YXkgYXJvdW5kIHRoZSBrZXJuZWwgc291cmNlLCBJIGZpZ3VyZSB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgbGlrZWx5IGNsdXN0ZXJlZCBzb21ld2hlcmUgYXJvdW5kIGxpbmUgNDQ1LiBJdCdzIGEgYnJvYWQgc3RhcnRpbmcgcG9pbnQsIGJ1dCBLY29uZmlnIGZpbGVzIG9mdGVuIGZvbGxvdyBhIGxvZ2ljYWwgc3RydWN0dXJlLCBhbmQgdGhpcyBsaW5lIGlzIGFzIGdvb2QgYSBndWVzcyBhcyBhbnkuIEknbGwgZm9jdXMgbXkgYXR0ZW50aW9uIHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBzcGVjaWZpYyBvcHRpb24gdGhhdCBwaXF1ZXMgbXkgaW50ZXJlc3Qgb3IgYSBzZWN0aW9uIHRoYXQgbGVhZHMgbWUgdG8gdGhlIG5leHQgcGllY2Ugb2YgdGhlIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1NzUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjo1My41MzQ2ODQ0MTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDQwOlxcdHNvdXJjZSBcXFwibmV0L2NlcGgvS2NvbmZpZ1xcXCJcXG4gNDQxOlxcdHNvdXJjZSBcXFwibmV0L25mYy9LY29uZmlnXFxcIlxcbiA0NDI6XFx0c291cmNlIFxcXCJuZXQvcHNhbXBsZS9LY29uZmlnXFxcIlxcbiA0NDM6XFx0c291cmNlIFxcXCJuZXQvaWZlL0tjb25maWdcXFwiXFxuIDQ0NDpcXHRcXG4gNDQ1OlxcdGNvbmZpZyBMV1RVTk5FTFxcbiA0NDY6XFx0XFx0Ym9vbCBcXFwiTmV0d29yayBsaWdodCB3ZWlnaHQgdHVubmVsc1xcXCJcXG4gNDQ3OlxcdFxcdGhlbHBcXG4gNDQ4OlxcdFxcdCAgVGhpcyBmZWF0dXJlIHByb3ZpZGVzIGFuIGluZnJhc3RydWN0dXJlIHRvIHN1cHBvcnQgbGlnaHQgd2VpZ2h0XFxuIDQ0OTpcXHRcXHQgIHR1bm5lbHMgbGlrZSBtcGxzLiBUaGVyZSBpcyBubyBuZXRkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGEgbGlnaHRcXG4gNDUwOlxcdFxcdCAgd2VpZ2h0IHR1bm5lbCBlbmRwb2ludC4gVHVubmVsIGVuY2Fwc3VsYXRpb24gcGFyYW1ldGVycyBhcmUgc3RvcmVkXFxuIDQ1MTpcXHRcXHQgIHdpdGggbGlnaHQgd2VpZ2h0IHR1bm5lbCBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggZmliIHJvdXRlcy5cXG4gNDUyOlxcdFxcbiA0NTM6XFx0Y29uZmlnIExXVFVOTkVMX0JQRlxcbiA0NTQ6XFx0XFx0Ym9vbCBcXFwiRXhlY3V0ZSBCUEYgcHJvZ3JhbSBhcyByb3V0ZSBuZXh0aG9wIGFjdGlvblxcXCJcXG4gNDU1OlxcdFxcdGRlcGVuZHMgb24gTFdUVU5ORUwgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbiA0NTY6XFx0XFx0ZGVmYXVsdCB5IGlmIExXVFVOTkVMPXlcXG4gNDU3OlxcdFxcdGhlbHBcXG4gNDU4OlxcdFxcdCAgQWxsb3dzIHRvIHJ1biBCUEYgcHJvZ3JhbXMgYXMgYSBuZXh0aG9wIGFjdGlvbiBmb2xsb3dpbmcgYSByb3V0ZVxcbiA0NTk6XFx0XFx0ICBsb29rdXAgZm9yIGluY29taW5nIGFuZCBvdXRnb2luZyBwYWNrZXRzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjo1My41MzQ3Njg0MTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY0OTM0MTkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIExXVFVOTkVMIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gTFdUVU5ORUwgaXMgc2hvd2luZyB1cCBpbiBhIGJ1bmNoIG9mIHRoZXNlIHR1bm5lbGluZyBhbmQgbmV0d29ya2luZyBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IGl0J3MgaW50ZWdyYXRlZC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBzZWUgaG93IGBpcF90dW5fYnVpbGRfc3RhdGVgIHBsYXlzIGludG8gYWxsIG9mIHRoaXMuIFRoYXQgZnVuY3Rpb24ncyBnb3R0YSBiZSBrZXkgdG8gdGhlIGNvbm5lY3Rpb24sIHJpZ2h0PyBUaGVuIEknbGwgdHJhY2UgdGhyb3VnaCB0aGUgY29kZSwgYW5kIGZpZ3VyZSBvdXQgd2hvJ3MgYWN0dWFsbHkgKnVzaW5nKiB0aGUgYGx3dHVubmVsX2J1aWxkX3N0YXRlYCBmdW5jdGlvbiwgb3IgdGhlIGBsd3Rfb3BzLVx1MDAzZWJ1aWxkX3N0YXRlYCBmdW5jdGlvbiBwb2ludGVyLiBGaW5kaW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dHVhbCB1bmRlcnN0YW5kaW5nIEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxMTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjU2LjE4NDExMzY0N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3NTcyMTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ1aWxkX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2x3dHVubmVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbHd0dW5uZWwuYz0xMTE9RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfZW5jYXBfZGVsX29wcyk7XFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMTItXFxubmV0L2NvcmUvbHd0dW5uZWwuYzoxMTM6aW50IGx3dHVubmVsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGVuY2FwX3R5cGUsXFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMTQtXFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKmVuY2FwLCB1bnNpZ25lZCBpbnQgZmFtaWx5LFxcbi0tXFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMzEtXFx0b3BzID0gcmN1X2RlcmVmZXJlbmNlKGx3dHVuX2VuY2Fwc1tlbmNhcF90eXBlXSk7XFxubmV0L2NvcmUvbHd0dW5uZWwuYzoxMzI6XFx0aWYgKGxpa2VseShvcHMgXFx1MDAyNlxcdTAwMjYgb3BzLVxcdTAwM2VidWlsZF9zdGF0ZSBcXHUwMDI2XFx1MDAyNiB0cnlfbW9kdWxlX2dldChvcHMtXFx1MDAzZW93bmVyKSkpXFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMzMtXFx0XFx0Zm91bmQgPSB0cnVlO1xcbi0tXFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMzYtXFx0aWYgKGZvdW5kKSB7XFxubmV0L2NvcmUvbHd0dW5uZWwuYzoxMzc6XFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VidWlsZF9zdGF0ZShuZXQsIGVuY2FwLCBmYW1pbHksIGNmZywgbHdzLCBleHRhY2spO1xcbm5ldC9jb3JlL2x3dHVubmVsLmMtMTM4LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvY29yZS9sd3R1bm5lbC5jLTE0MC1cXHR9IGVsc2Uge1xcbm5ldC9jb3JlL2x3dHVubmVsLmM6MTQxOlxcdFxcdC8qIGRvbid0IHJlbHkgb24gLUVPUE5PVFNVUFAgdG8gZGV0ZWN0IG1hdGNoIGFzIGJ1aWxkX3N0YXRlXFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xNDItXFx0XFx0ICogaGFuZGxlcnMgY291bGQgcmV0dXJuIGl0XFxuLS1cXG5uZXQvY29yZS9sd3R1bm5lbC5jLTE0OS19XFxubmV0L2NvcmUvbHd0dW5uZWwuYzoxNTA6RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfYnVpbGRfc3RhdGUpO1xcbm5ldC9jb3JlL2x3dHVubmVsLmMtMTUxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjo1Ni42MjE2OTI2MDZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTExMTUwNjQwMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IGBsd3R1bm5lbF9idWlsZF9zdGF0ZWAgYW5kIEFzc29jaWF0ZWQgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHJlbGF0ZWQgdG8gbGlnaHR3ZWlnaHQgdHVubmVscyBhbmQgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uLiAgU3BlY2lmaWNhbGx5LCBgbHd0dW5uZWxfYnVpbGRfc3RhdGVgIGdldHMgY2FsbGVkIHdoZW4gd2UncmUgc2V0dGluZyB1cCByb3V0ZXMgb3IgbmV4dGhvcHMgdXNpbmcgTmV0bGluaywgbGlrZSB3aXRoIGBSVEFfRU5DQVBgIGFuZCBgUlRBX0VOQ0FQX1RZUEVgLiAgVGhpcyBpcyBhbGwgYWNjZXNzaWJsZSB0byBldmVuIHVucHJpdmlsZWdlZCB1c2VycyBpZiB0aGV5J3JlIHVzaW5nIHVzZXIgbmFtZXNwYWNlcywgb3IgaWYgdGhleSBoYXZlIGBDQVBfTkVUX0FETUlOYCBpbiBhIG5ldHdvcmsgbmFtZXNwYWNlLiBTeXprYWxsZXIgaXMga25vd24gdG8gYmUgaGl0dGluZyB0aGlzIGFyZWEgaGFyZCB3aXRoIG5ldGxpbmsgY29uZmlndXJhdGlvbnMsIHdoaWNoIGltbWVkaWF0ZWx5IGdldHMgbXkgYXR0ZW50aW9uLlxuXG5NeSBmaXJzdCBjaGVjayBpcyB0byBzZWUgaWYgdGhpcyBjb2RlIGlzIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBRRU1VIGVudmlyb25tZW50LiBUaGUgYW5zd2VyIGlzIGEgZGVmaW5pdGl2ZSB5ZXMsIGl0J3MgcmlnaHQgdGhlcmUgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlOiBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AsIHBhcnQgb2YgSVB2NCBhbmQgTFdUVU5ORUwgcm91dGluZy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/ICBJJ20gZ29pbmcgdG8gcnVuIHRocm91Z2ggdGhlIHBvc2l0aXZlIGNyaXRlcmlhLiBUaGlzIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIEl0IHRvdWNoZXMgdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0sIGFuZCBpdCBsb29rcyBsaWtlIGEgcmVmYWN0b3Jpbmcgb2YgZGF0YSBzdHJ1Y3R1cmVzIGFuZC9vciBhbGdvcml0aG0gZmxvd3MsIHdpdGggdGhlIG1haW4gY2hhbmdlIGJlaW5nIHRoZSBwbGFjZW1lbnQgb2YgYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtgIGJlZm9yZSBjYWxsaW5nIGBpcF90dW5fc2V0X29wdHNgIGluIGJvdGggYGlwX3R1bl9idWlsZF9zdGF0ZWAgYW5kIGBpcDZfdHVuX2J1aWxkX3N0YXRlYC5cblxuT2theSwgbGV0J3MgYmFjayB1cCBhIHNlY29uZC4gV2h5IHdhcyB0aGlzIGNoYW5nZSBtYWRlPyBJIHNlZSB0aGV5J3JlIGluaXRpYWxpemluZyBgb3B0aW9uc19sZW5gIGJlZm9yZSBjYWxsaW5nIGBpcF90dW5fc2V0X29wdHNgIGluc3RlYWQgb2YgYWZ0ZXIsIGFuZCBteSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIElmIGBpcF90dW5fc2V0X29wdHNgIGZhaWxzLCBpdCBjYWxscyBgbHd0c3RhdGVfZnJlZShuZXdfc3RhdGUpO2AuIFRoZW4gd2hhdD8gVGhlIGNvZGUgZ29lcyBvbiB0byBpbml0aWFsaXplIHNvbWUgb3RoZXIgdGhpbmdzOiBgZHN0X2NhY2hlX2luaXRgLCBhbmQgaWYgdGhhdCBmYWlscywgdGhlIHN0YXRlIGlzIGZyZWVkLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgdG8gaW5pdGlhbGl6ZSB0aGUgYG9wdGlvbnNfbGVuYCBlYXJsaWVyIGlzIGltcG9ydGFudC4gIEJlY2F1c2UgdGhlIGBvcHRpb25zX2xlbmAgZmllbGQgaXMgdXNlZCB0byBkZWZpbmUgdGhlIHNpemUgb2YgYW4gYG9wdGlvbnNbXWAgYXJyYXkgaW4gdGhlIGBpcF90dW5uZWxfaW5mb2Agc3RydWN0LCB0aGlzIGluaXRpYWxpemF0aW9uIGlzIHVzZWQgZm9yIGNvbXBpbGVyIGluc3RydW1lbnRhdGlvbiB3aXRoIGBfX2NvdW50ZWRfYnlgIGNoZWNrcy4gIElmIGBvcHRpb25zX2xlbmAgaXMgemVybyAodW5pbml0aWFsaXplZCksIHdoZW4gYGlwX3R1bl9zZXRfb3B0c2Agd3JpdGVzIGludG8gYG9wdGlvbnNbXWAgYW4gYWNjZXNzIHRvIGBvcHRpb25zWzBdYCB3aWxsIHRyaXAgYENPTkZJR19VQlNBTl9CT1VORFNgISBUaGlzIGBvcHRpb25zX2xlbmAgaXMgY3J1Y2lhbCBmb3Igc3RhdGUgbWFuYWdlbWVudCBpbiBgaXBfdHVubmVsX2luZm9gLlxuXG5UaGlzIGlzIGEgY2xlYXIgbG9naWMgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGUuICBJdCBpbXBhY3RzIGBpcF90dW5fYnVpbGRfc3RhdGVgIGFuZCBgaXA2X3R1bl9idWlsZF9zdGF0ZWAsIHdoaWNoIGFyZSBkaXJlY3RseSBpbiB0aGUgY2FsbCBjaGFpbi5cblxuTm93LCBvbiB0byB0aGUgbmVnYXRpdmUgY3JpdGVyaWE6IG5vdGhpbmcgaGVyZSBzZWVtcyB0byBiZSBub24ta2VybmVsLCBub24tZXhlY3V0YWJsZSwgb3IgdGllZCB0byB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gV2UgZG9uJ3QgaGF2ZSB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaGVyZSBlaXRoZXIuIFNvLCB0aGUgdmVyZGljdCBpcyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5vdywgdGltZSB0byBkZXRlcm1pbmUgdGhlIGBGb2N1c1N5bWJvbHNgLiBXaGF0IGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgbW9kaWZpZWQgb3IgYXJlIGNsb3NlbHkgaW52b2x2ZWQ/IGBpcF90dW5fYnVpbGRfc3RhdGVgIGFuZCBgaXA2X3R1bl9idWlsZF9zdGF0ZWAgYXJlIHRoZSBrZXkgcGxheWVycy4gIGBpcF90dW5fc2V0X29wdHNgIGlzbid0IGRpcmVjdGx5IG1vZGlmaWVkIGJ1dCBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIsIGFuZCB0aGF0IGNvdWxkIGJlIGltcG9ydGFudCB0b28uXG5cbkFyZSB0aGVzZSBmdW5jdGlvbnMgbm9uLXViaXF1aXRvdXM/IFllcywgdGhleSdyZSBzcGVjaWZpYyB0byBJUCBhbmQgSVB2NiB0dW5uZWwgZW5jYXAuIEFyZSB0aGV5IHN0YXRpYz8gVGhleSBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AgaW4gYGlwX3R1bm5lbF9jb3JlLmNgLCBidXQgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiBmb3IgdXNlIGluIGBsd3R1bm5lbF9lbmNhcF9vcHMgaXBfdHVuX2x3dF9vcHNgIGFuZCBgaXA2X3R1bl9sd3Rfb3BzYCwgbWVhbmluZyB0aGV5ICpjYW4ndCogYmUgaW5saW5lZCBhbmQgYXJlIGFjY2Vzc2libGUgYXMgc3ltYm9scy4gIGBsd3R1bm5lbF9idWlsZF9zdGF0ZWAgY2FsbHMgdGhlbSB2aWEgYG9wcy1cdTAwM2VidWlsZF9zdGF0ZWAsIHdoaWNoIGNvbmZpcm1zIHRoZWlyIHZpc2liaWxpdHkgYXMgc3ltYm9scy4gQnV0LCBgaXBfdHVuX2J1aWxkX3N0YXRlYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGVgIGFyZSB0aGUgZnVuY3Rpb25zIHdoZXJlIHRoZSBjaGFuZ2VzIGFyZSBtYWRlLCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlbS4gYGx3dHVubmVsX2J1aWxkX3N0YXRlYCBpcyBhIG1vcmUgZ2VuZXJhbCBkaXNwYXRjaGVyLCBzbyBsZXQncyBzdGljayB3aXRoIHRoZSBtb3JlIHByZWNpc2UgYGlwX3R1bl9idWlsZF9zdGF0ZWAgYW5kIGBpcDZfdHVuX2J1aWxkX3N0YXRlYC5cblxuTmV4dCBzdGVwLCBgRW5hYmxlQ29uZmlnc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGtlcm5lbCBjb25maWdzIGFyZSBuZWNlc3NhcnkuIEknbGwgY2hlY2sgS2NvbmZpZyBmb3IgYExXVFVOTkVMYCBhbmQgSVAgdHVubmVscy4gSSBhbHNvIG5lZWQgdG8gc2VhcmNoIHRoZSBjb2RlIGJhc2UgZm9yIGhvdyBgQ09ORklHX0xXVFVOTkVMYCBpcyB1c2VkIHdpdGggYGlwX3R1bm5lbF9jb3JlLmNgIHRvIHNlZSBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ3OTgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjA3LjczNjc2MDY0MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3Njc5NTc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTFdUVU5ORUxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0zOT1zdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtNTUtXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDo1NjojaWZkZWYgQ09ORklHX0xXVFVOTkVMXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC01Ny1cXG4tLVxcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmg9MjAzPXN0YXRpYyBpbmxpbmUgaW50IGx3dHVubmVsX3ZhbGlkX2VuY2FwX3R5cGUodTE2IGVuY2FwX3R5cGUsXFxuLS1cXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oLTIwNS17XFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoyMDY6XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQ09ORklHX0xXVFVOTkVMIGlzIG5vdCBlbmFibGVkIGluIHRoaXMga2VybmVsXFxcIik7XFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0yMDctXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0yNjE9c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0yNjUtXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoyNjY6I2VuZGlmIC8qIENPTkZJR19MV1RVTk5FTCAqL1xcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMjY3LVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmg9MTE9c3RydWN0IG5ldG5zX25mIHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oLTE3LVxcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpuZl9sb2dfZGlyX2hlYWRlcjtcXG5pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaDoxODojaWZkZWYgQ09ORklHX0xXVFVOTkVMXFxuaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmgtMTktXFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKm5mX2x3dG5sX2Rpcl9oZWFkZXI7XFxuLS1cXG5uZXQvY29yZS9NYWtlZmlsZT0zNz1vYmotJChDT05GSUdfQ0dST1VQX05FVF9DTEFTU0lEKSArPSBuZXRjbGFzc2lkX2Nncm91cC5vXFxubmV0L2NvcmUvTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX0xXVFVOTkVMKSArPSBsd3R1bm5lbC5vXFxubmV0L2NvcmUvTWFrZWZpbGU6Mzk6b2JqLSQoQ09ORklHX0xXVFVOTkVMX0JQRikgKz0gbHd0X2JwZi5vXFxubmV0L2NvcmUvTWFrZWZpbGUtNDAtb2JqLSQoQ09ORklHX0RTVF9DQUNIRSkgKz0gZHN0X2NhY2hlLm9cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY4ODA9c3RhdGljIGludCBicGZfcHVzaF9zZWc2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHUzMiB0eXBlLCB2b2lkICpoZHIsIHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTEzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY5MTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0xXVFVOTkVMX0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02OTE1LXN0YXRpYyBpbnQgYnBmX3B1c2hfaXBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqaGRyLCB1MzIgbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjkyMj1CUEZfQ0FMTF80KGJwZl9sd3RfaW5fcHVzaF9lbmNhcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIHR5cGUsIHZvaWQgKiwgaGRyLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkzMC0jZW5kaWZcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTMxOiNpZiBJU19FTkFCTEVEKENPTkZJR19MV1RVTk5FTF9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkzMi1cXHRjYXNlIEJQRl9MV1RfRU5DQVBfSVA6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02OTQwPUJQRl9DQUxMXzQoYnBmX2x3dF94bWl0X3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk0My1cXHRzd2l0Y2ggKHR5cGUpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTQ0OiNpZiBJU19FTkFCTEVEKENPTkZJR19MV1RVTk5FTF9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk0NS1cXHRjYXNlIEJQRl9MV1RfRU5DQVBfSVA6XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTIzOT1vYmotJChDT05GSUdfSVBfVlMpICs9IGlwdnMvXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTI0MS0jIGx3dHVubmVsXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyNDI6b2JqLSQoQ09ORklHX0xXVFVOTkVMKSArPSBuZl9ob29rc19sd3R1bm5lbC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0yNDMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYz04MDE9aW50IF9faW5pdCBuZXRmaWx0ZXJfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtODA4LVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjgwOTojaWZkZWYgQ09ORklHX0xXVFVOTkVMXFxubmV0L25ldGZpbHRlci9jb3JlLmMtODEwLVxcdHJldCA9IG5ldGZpbHRlcl9sd3R1bm5lbF9pbml0KCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy04MTktZXJyX2xvZ19wZXJuZXQ6XFxubmV0L25ldGZpbHRlci9jb3JlLmM6ODIwOiNpZmRlZiBDT05GSUdfTFdUVU5ORUxcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy04MjEtXFx0bmV0ZmlsdGVyX2x3dHVubmVsX2ZpbmkoKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfaW50ZXJuYWxzLmg9MzA9aW50IF9faW5pdCBuZXRmaWx0ZXJfbG9nX2luaXQodm9pZCk7XFxubmV0L25ldGZpbHRlci9uZl9pbnRlcm5hbHMuaC0zMS1cXG5uZXQvbmV0ZmlsdGVyL25mX2ludGVybmFscy5oOjMyOiNpZmRlZiBDT05GSUdfTFdUVU5ORUxcXG5uZXQvbmV0ZmlsdGVyL25mX2ludGVybmFscy5oLTMzLS8qIG5mX2hvb2tzX2x3dHVubmVsLmMgKi9cXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYz0zMjg9c3RhdGljIHZvaWQgcHJvYmVfa2VybmVsX2ltYWdlX2NvbmZpZyhjb25zdCBjaGFyICpkZWZpbmVfcHJlZml4KVxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM3NC1cXHRcXHQvKiBCUEZfUFJPR19UWVBFX0xXVF8qIGFuZCByZWxhdGVkIGhlbHBlcnMgKi9cXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmM6Mzc1OlxcdFxcdHsgXFxcIkNPTkZJR19MV1RVTk5FTF9CUEZcXFwiLCB9LFxcbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYy0zNzYtXFx0XFx0LyogQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1QsIFRDICh0cmFmZmljIGNvbnRyb2wpIGFjdGlvbnMgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc9NTU9Q09ORklHX0xJVkVQQVRDSD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzo1NjpDT05GSUdfTFdUVU5ORUw9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc6NTc6Q09ORklHX0xXVFVOTkVMX0JQRj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy01OC1DT05GSUdfTU9EVUxFX1NJRz15XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjA5LjMxMzU2Mzk5N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNjc1MjczMzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTFdUVU5ORUwgRGVwZW5kZW5jeSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYGluY2x1ZGUvbmV0L2x3dHVubmVsLmhgIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFyb3VuZCBgQ09ORklHX0xXVFVOTkVMYC4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzYCBpcyBlaXRoZXIgZGVmaW5lZCBhcyBhIHByb3BlciBmdW5jdGlvbiBvciwgaWYgYENPTkZJR19MV1RVTk5FTGAgaXNuJ3QgZW5hYmxlZCwgYmVjb21lcyBhbiBpbmxpbmUgZnVuY3Rpb24gdGhhdCBzaW1wbHkgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGUgYGx3dHVubmVsX3ZhbGlkX2VuY2FwX3R5cGVgIGZ1bmN0aW9uIGlzIGFsc28gZGVmaW5lZCB0byByZXR1cm4gYC1FT1BOT1RTVVBQYCBpZiB0aGUgY29uZmlnIGlzbid0IGVuYWJsZWQuXG5cblRoZXJlZm9yZSwgaXQncyBjbGVhcjogaWYgYENPTkZJR19MV1RVTk5FTGAgaXMgb2ZmLCB0aGVyZSdzIG5vIHdheSB0byBhZGQgYW55IGx3dHVubmVsIGVuY2Fwc3VsYXRpb24gb3BlcmF0aW9ucywgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uICpkb2VzKiB0aGF0LCBvciB0byB2YWxpZGF0ZSB0aGUgdHlwZS4gTW9yZSBpbXBvcnRhbnRseSwgdGhpcyBtZWFucyBjYWxscyB0byBidWlsZCB0aGUgdHVubmVsIHN0YXRlLCBpbiBmdW5jdGlvbnMgc3VjaCBhcyBgbHd0dW5uZWxfYnVpbGRfc3RhdGVgLCB3aWxsICphbHNvKiBmYWlsIHdpdGggYC1FT1BOT1RTVVBQYCBpZiBgQ09ORklHX0xXVFVOTkVMYCBpc24ndCBzZXQuIFNvLCB0aGUgYGx3dHVubmVsX2VuY2FwX2FkZF9vcHNgIGlzIGNyaXRpY2FsLiBJZiBpdCdzIG5vdCBkZWZpbmVkLCB3ZSdsbCBuZXZlciByZWFjaCBgaXBfdHVuX2J1aWxkX3N0YXRlYCBvciBgaXA2X3R1bl9idWlsZF9zdGF0ZWAuXG5cbkkgYWxzbyByZW1lbWJlciB0aGF0IGBJTkVUYCBpcyByZXF1aXJlZCBmb3IgYG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNgIHRvIGJlIGJ1aWx0LCBiZWNhdXNlIG9mIHRoZSBkaXJlY3RvcnkgKGBuZXQvaXB2NC9gKS5cblxuU28sIGBDT05GSUdfTFdUVU5ORUxgIGlzIGEgKmhhcmQqIHJlcXVpcmVtZW50IGhlcmUuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBkZXBlbmRlbmNpZXMgYXJlIHByb3Blcmx5IGhhbmRsZWQgaW4gdGhlIGJ1aWxkIHByb2Nlc3MuIExldCBtZSBjaGVjayB0aGUgYG5ldC9NYWtlZmlsZWAgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBkZXBlbmRlbmNpZXMgYXJlIGJlaW5nIGVuZm9yY2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTIyMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzoxMi45ODg4NDA0NzdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NzIwNjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfTkVURklMVEVSKVxcdFxcdCs9IG5ldGZpbHRlci9cXG5uZXQvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0lORVQpXFx0XFx0Kz0gaXB2NC9cXG5uZXQvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1RMUylcXHRcXHQrPSB0bHMvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjEzLjAzNzU2ODEyNVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODEyOTEwMzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLZXJuZWwncyBUdW5uZWxpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBDT05GSUdfSU5FVGAgKmRlZmluaXRlbHkqIHB1bGxzIGluIGV2ZXJ5dGhpbmcgdW5kZXIgYG5ldC9pcHY0L2AsIGFuZCB0aGF0IGBuZXQvaXB2NC9NYWtlZmlsZWAgaXMgZ29pbmcgdG8gaW5jbHVkZSBgaXBfdHVubmVsX2NvcmUuY2Agbm8gbWF0dGVyIHdoYXQgd2hlbiBJUHY0IGlzIGFjdGl2ZS4gR29vZC4gQW5kLCBhcyBJIHN1c3BlY3RlZCwgYENPTkZJR19MV1RVTk5FTGAgaXMgdGhlIGtleSB0byBlbmFibGluZyB0aGUgbGlnaHR3ZWlnaHQgdHVubmVsaW5nIGNvZGUgd2l0aCBgbmV0L2NvcmUvbHd0dW5uZWwuY2AsIHdoaWNoLCBpbiB0dXJuLCBwcm92aWRlcyB1cyB3aXRoIGBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzYCBhbmQgYGx3dHVubmVsX2J1aWxkX3N0YXRlYC4gTWFrZXMgc2Vuc2UuIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBjb25zaWRlciBJUHY2LlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IHdpdGggSVB2Ni4gTXkgYnJhaW4gaXMgc3RhcnRpbmcgdG8gY2h1cm4gb24gdGhlIGltcGxpY2F0aW9ucyBmb3IgSVB2NiByb3V0ZXMgd2l0aCBMV1RVTk5FTC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBgaXA2X3R1bl9idWlsZF9zdGF0ZWAuIElzIGBDT05GSUdfSVBWNmAgKmFsc28qIGEgbmVjZXNzYXJ5IGNvbmRpdGlvbiBmb3IgTFdUVU5ORUwtYmFzZWQgSVB2NiByb3V0aW5nPyBJIG5lZWQgdG8gZGlnIGludG8gaG93IHRob3NlIElQdjYgcm91dGVzIGFjdHVhbGx5ICp1c2UqIExXVFVOTkVMLiBJIGJldHRlciBzdGFydCBsb29raW5nIGF0IHRoZSBJUHY2IHJvdXRlIGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDA0NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzoxNS44NTA0ODE3NzFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzgxNTI4OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHd0dW5uZWxfYnVpbGRfc3RhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0xMjA9aW50IGx3dHVubmVsX3ZhbGlkX2VuY2FwX3R5cGVfYXR0cihzdHJ1Y3QgbmxhdHRyICphdHRyLCBpbnQgbGVuLFxcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMTIxLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoxMjI6aW50IGx3dHVubmVsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGVuY2FwX3R5cGUsXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0xMjMtXFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKmVuY2FwLFxcbi0tXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0yMTA9c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfdmFsaWRfZW5jYXBfdHlwZV9hdHRyKHN0cnVjdCBubGF0dHIgKmF0dHIsIGludCBsZW4sXFxuLS1cXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oLTIxOC1cXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oOjIxOTpzdGF0aWMgaW5saW5lIGludCBsd3R1bm5lbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUxNiBlbmNhcF90eXBlLFxcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMjIwLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICplbmNhcCxcXG4tLVxcbm5ldC9jb3JlL2x3dHVubmVsLmM9MTExPUVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX2VuY2FwX2RlbF9vcHMpO1xcbm5ldC9jb3JlL2x3dHVubmVsLmMtMTEyLVxcbm5ldC9jb3JlL2x3dHVubmVsLmM6MTEzOmludCBsd3R1bm5lbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUxNiBlbmNhcF90eXBlLFxcbm5ldC9jb3JlL2x3dHVubmVsLmMtMTE0LVxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICplbmNhcCwgdW5zaWduZWQgaW50IGZhbWlseSxcXG4tLVxcbm5ldC9jb3JlL2x3dHVubmVsLmMtMTQ5LX1cXG5uZXQvY29yZS9sd3R1bm5lbC5jOjE1MDpFWFBPUlRfU1lNQk9MX0dQTChsd3R1bm5lbF9idWlsZF9zdGF0ZSk7XFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xNTEtXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9NjQyPWludCBmaWJfbmhfY29tbW9uX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLFxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTY1Ni1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6NjU3OlxcdFxcdGVyciA9IGx3dHVubmVsX2J1aWxkX3N0YXRlKG5ldCwgZW5jYXBfdHlwZSwgZW5jYXAsXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTY1OC1cXHRcXHRcXHRcXHRcXHQgICBuaGMtXFx1MDAzZW5oY19mYW1pbHksIGNmZywgXFx1MDAyNmx3dHN0YXRlLFxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTkwNz1zdGF0aWMgaW50IGZpYl9lbmNhcF9tYXRjaChzdHJ1Y3QgbmV0ICpuZXQsIHUxNiBlbmNhcF90eXBlLFxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTkxOC1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6OTE5OlxcdHJldCA9IGx3dHVubmVsX2J1aWxkX3N0YXRlKG5ldCwgZW5jYXBfdHlwZSwgZW5jYXAsIEFGX0lORVQsXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTkyMC1cXHRcXHRcXHRcXHQgICBjZmcsIFxcdTAwMjZsd3RzdGF0ZSwgZXh0YWNrKTtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNDIxPXN0YXRpYyBpbnRcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjQyMjpzZWc2X2xvY2FsX2x3dHVubmVsX2J1aWxkX3N0YXRlKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCwgY29uc3Qgdm9pZCAqY2ZnLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDIzLVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNTE3PXN0YXRpYyBpbnQgc2VnNl9sb2NhbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNTQ5LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNTUwOlxcdGVyciA9IHNlZzZfbG9jYWxfbHd0dW5uZWxfYnVpbGRfc3RhdGUoc2x3dCwgY2ZnLCBleHRhY2spO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNTUxLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzoxNy40Mjg2NDMxNDZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM1OTUwMjE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIElQdjYgYW5kIExXVFVOTkVMIEludGVyYWN0aW9uKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGhvdyB0aGUgYExXVFVOTkVMX0VOQ0FQX0lQNmAgZnVuY3Rpb25hbGl0eSwgb3IgcG90ZW50aWFsbHkgYGx3dHVubmVsX2J1aWxkX3N0YXRlYCwgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIElQdjYgb3IgbmV4dCBob3AgY29udGV4dHMuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGVzZSBhcmUgY2VudHJhbCB0byB0aGUgZW5jYXBzdWxhdGlvbiBwcm9jZXNzLCBidXQgSSB3YW50IHRvIHZlcmlmeSB0aGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgSVB2NiBzcGVjaWZpY2FsbHkgbGV2ZXJhZ2VzIHRoZSBMV1RVTk5FTCBpbmZyYXN0cnVjdHVyZS5cblxuVG8gZGlnIGludG8gdGhpcywgSSdtIGdvaW5nIHRvIGxldmVyYWdlIGdyZXAuIEknbGwgc2VhcmNoIGZvciBjYWxscyB0byBgbHd0dW5uZWxfYnVpbGRfc3RhdGVgIGFjcm9zcyB0aGUgYG5ldC9pcHY2YCBkaXJlY3RvcnkgYW5kIHRoZSBicm9hZGVyIGBuZXQvYCBkaXJlY3Rvcnkgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIGNhbGwgc2l0ZXMgYW5kIHByb3ZpZGUgY2x1ZXMgYWJvdXQgdGhlIGludGVncmF0aW9uIHBvaW50cyBhbmQgZGVwZW5kZW5jaWVzIGJldHdlZW4gSVB2NiBhbmQgdGhlIExXVFVOTkVMIG1lY2hhbmlzbS4gQnkgb2JzZXJ2aW5nIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNhbGxzLCBJIGNhbiBkZWR1Y2UgaG93IGl0IGhhbmRsZXMgZW5jYXBzdWxhdGVkIElQdjYgdHJhZmZpYyBhbmQgaG9wZWZ1bGx5IGdhaW4gYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzODksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzoxOS43ODgxNDc2MzdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjU3NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImx3dHVubmVsX2J1aWxkX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbHd0dW5uZWwuYz0xMTE9RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfZW5jYXBfZGVsX29wcyk7XFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMTItXFxubmV0L2NvcmUvbHd0dW5uZWwuYzoxMTM6aW50IGx3dHVubmVsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGVuY2FwX3R5cGUsXFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMTQtXFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKmVuY2FwLCB1bnNpZ25lZCBpbnQgZmFtaWx5LFxcbi0tXFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xNDktfVxcbm5ldC9jb3JlL2x3dHVubmVsLmM6MTUwOkVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX2J1aWxkX3N0YXRlKTtcXG5uZXQvY29yZS9sd3R1bm5lbC5jLTE1MS1cXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz02NDI9aW50IGZpYl9uaF9jb21tb25faW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfbmhfY29tbW9uICpuaGMsXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtNjU2LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzo2NTc6XFx0XFx0ZXJyID0gbHd0dW5uZWxfYnVpbGRfc3RhdGUobmV0LCBlbmNhcF90eXBlLCBlbmNhcCxcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtNjU4LVxcdFxcdFxcdFxcdFxcdCAgIG5oYy1cXHUwMDNlbmhjX2ZhbWlseSwgY2ZnLCBcXHUwMDI2bHd0c3RhdGUsXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9OTA3PXN0YXRpYyBpbnQgZmliX2VuY2FwX21hdGNoKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGVuY2FwX3R5cGUsXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtOTE4LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzo5MTk6XFx0cmV0ID0gbHd0dW5uZWxfYnVpbGRfc3RhdGUobmV0LCBlbmNhcF90eXBlLCBlbmNhcCwgQUZfSU5FVCxcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtOTIwLVxcdFxcdFxcdFxcdCAgIGNmZywgXFx1MDAyNmx3dHN0YXRlLCBleHRhY2spO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI0MjE9c3RhdGljIGludFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDIyOnNlZzZfbG9jYWxfbHd0dW5uZWxfYnVpbGRfc3RhdGUoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LCBjb25zdCB2b2lkICpjZmcsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MjMtXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI1MTc9c3RhdGljIGludCBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI1NDktXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI1NTA6XFx0ZXJyID0gc2VnNl9sb2NhbF9sd3R1bm5lbF9idWlsZF9zdGF0ZShzbHd0LCBjZmcsIGV4dGFjayk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI1NTEtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjE5Ljg1ODQxMjI0NloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NDg5Mzk3MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIExpZ2h0d2VpZ2h0IFR1bm5lbCBJbml0aWFsaXphdGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ3ZlIGJlZW4gbG9va2luZyBhdCBob3cgbGlnaHR3ZWlnaHQgdHVubmVscyBhcmUgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgZmliX25oX2NvbW1vbl9pbml0YC4gVGhpcyBmdW5jdGlvbiBpcyBrZXkgYmVjYXVzZSBpdCBoYW5kbGVzIG5leHRob3AgaW5pdGlhbGl6YXRpb24sIHdoZXRoZXIgaXQncyBJUHY0IG9yIElQdjYuIFdoZW4gYSByb3V0ZSBvciBuZXh0aG9wIGlzIGNyZWF0ZWQgYW5kIHVzZXMgYExXVFVOTkVMX0VOQ0FQX0lQYCBvciBgTFdUVU5ORUxfRU5DQVBfSVA2YCAodmlhIGBSVEFfRU5DQVBfVFlQRWApLCBgZmliX25oX2NvbW1vbl9pbml0YCBjYWxscyBgbHd0dW5uZWxfYnVpbGRfc3RhdGVgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zOyBgbHd0dW5uZWxfYnVpbGRfc3RhdGVgIHRoZW4gdXNlcyBgcmN1X2RlcmVmZXJlbmNlYCB0byBnZXQgdGhlIHJlbGV2YW50IHR1bm5lbCBlbmNhcHN1bGF0aW9uIHR5cGUsIGFuZCBjYWxscyB0aGUgYXBwcm9wcmlhdGUgYGJ1aWxkX3N0YXRlYCBmdW5jdGlvbi4gRm9yIElQIHR1bm5lbHMsIGl0J3MgYGlwX3R1bl9idWlsZF9zdGF0ZWAsIGFuZCBmb3IgSVB2NiB0dW5uZWxzLCBpdCdzIGBpcDZfdHVuX2J1aWxkX3N0YXRlYC4gQm90aCByZXNpZGUgaW4gYG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNgLlxuXG5Ob3csIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMgYXJlIGltcG9ydGFudC4gSSd2ZSBjb25maXJtZWQgdGhhdCBgTFdUVU5ORUxgIGFuZCBgSU5FVGAgYXJlIGVzc2VudGlhbC4gRm9yIElQdjYgcm91dGVzLCBgSVBWNmAgaXMgYWxzbyBuZWVkZWQuIEkgaW5pdGlhbGx5IGxvb2tlZCBmb3Igb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgd2l0aGluIGBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jYCwgc3VjaCBhcyBgQ09ORklHX0RTVF9DQUNIRWAsIGJ1dCBJJ3ZlIGRvdWJsZS1jaGVja2VkIGFuZCBgQ09ORklHX0xXVFVOTkVMYCBzZWVtcyB0byBiZSBzdWZmaWNpZW50IGFzIGEgc3RhbmRhbG9uZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYXMgaXQgaGFzIG5vIGRlcGVuZGVuY2llcyBpdHNlbGYuIGBDT05GSUdfSU5FVGAgY292ZXJzIHRoZSByZWxldmFudCBJUHY0IGNvZGUuXG5cbkxldCdzIHN1bW1hcml6ZSB0aGUga2V5IGZpbmRpbmdzOlxuXG4xLiAgKipXb3J0aEZ1enppbmcqKjogWWVzLCBkZWZpbml0ZWx5LiBXZSdyZSBkZWFsaW5nIHdpdGggbW9kaWZpZWQsIHJlYWNoYWJsZSBjb2RlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIChgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2ApLiBUaGlzIGlzIHNpZ25pZmljYW50LlxuMi4gICoqRm9jdXNTeW1ib2xzKio6IFRoZSBzeW1ib2xzIEkgbmVlZCB0byB0YXJnZXQgYXJlOiBgaXBfdHVuX2J1aWxkX3N0YXRlYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGVgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBpbiBidWlsZGluZyB0aGUgdHVubmVsIHN0YXRlLlxuMy4gICoqRW5hYmxlQ29uZmlncyoqOiBUaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZTogYElORVRgLCBgTFdUVU5ORUxgLCBhbmQgYElQVjZgLiBUaGlzIGlzIHRoZSBtaW5pbWFsIHNldC5cbjQuICAqKlJlYXNvbmluZyoqOiBUaGUgY3JpdGljYWwgY2hhbmdlIGlzIHRoYXQgYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuYCBpcyBub3cgaW5pdGlhbGl6ZWQgKmJlZm9yZSogdGhlIGBpcF90dW5fc2V0X29wdHMoKWAgY2FsbCBpbiBib3RoIGBpcF90dW5fYnVpbGRfc3RhdGUoKWAgYW5kIGBpcDZfdHVuX2J1aWxkX3N0YXRlKClgLiBUaGUgcmVhY2hhYmlsaXR5IGNvbWVzIGZyb20gbmV0bGluayByb3V0ZS9uZXh0aG9wIGNvbmZpZ3VyYXRpb24gc3BlY2lmeWluZyBsaWdodHdlaWdodCB0dW5uZWwgZW5jYXBzdWxhdGlvbiAoYFJUQV9FTkNBUGAgd2l0aCBlaXRoZXIgYExXVFVOTkVMX0VOQ0FQX0lQYCBvciBgTFdUVU5ORUxfRU5DQVBfSVA2YCkuIFRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHJlYWNoYWJsZSBzdGF0ZSBhbmQgdGhlIGhhbmRsaW5nIG9mIG9wdGlvbnMgd2hlbiBhIHR1bm5lbCByb3V0ZSBpcyBjcmVhdGVkLlxuXG5JIGFtIHNhdGlzZmllZCB0aGF0IG15IGFuYWx5c2lzIGlzIHNvdW5kLiBMZXQncyBwcm9jZWVkIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMzY1LCJPdXRwdXRUb2tlbnMiOjE4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzoyNi4zNDc4MTIwOTJaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjk0OTE1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTFdUVU5ORUxcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF90dW5fYnVpbGRfc3RhdGVcIixcbiAgICBcImlwNl90dW5fYnVpbGRfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMsIG1vdmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuIGJlZm9yZSBpcF90dW5fc2V0X29wdHMoKSBpbiBib3RoIGlwX3R1bl9idWlsZF9zdGF0ZSgpIGFuZCBpcDZfdHVuX2J1aWxkX3N0YXRlKCkuIFRoaXMgcGF0aCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgcm91dGUvbmV4dGhvcCByZXF1ZXN0cyBjb25maWd1cmluZyBsaWdodHdlaWdodCB0dW5uZWwgZW5jYXBzdWxhdGlvbiAoTFdUVU5ORUxfRU5DQVBfSVAgYW5kIExXVFVOTkVMX0VOQ0FQX0lQNikuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdHVubmVsIG9wdGlvbiBwYXJzaW5nIGFuZCBib3VuZHMgY2hlY2tpbmcgb24gdHVubmVsIHN0YXRlIGNyZWF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIkxXVFVOTkVMXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdHVuX2J1aWxkX3N0YXRlXCIsXG4gICAgXCJpcDZfdHVuX2J1aWxkX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLCBtb3ZpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHR1bl9pbmZvLVxcdTAwM2VvcHRpb25zX2xlbiBiZWZvcmUgaXBfdHVuX3NldF9vcHRzKCkgaW4gYm90aCBpcF90dW5fYnVpbGRfc3RhdGUoKSBhbmQgaXA2X3R1bl9idWlsZF9zdGF0ZSgpLiBUaGlzIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIHJvdXRlL25leHRob3AgcmVxdWVzdHMgY29uZmlndXJpbmcgbGlnaHR3ZWlnaHQgdHVubmVsIGVuY2Fwc3VsYXRpb24gKExXVFVOTkVMX0VOQ0FQX0lQIGFuZCBMV1RVTk5FTF9FTkNBUF9JUDYpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHR1bm5lbCBvcHRpb24gcGFyc2luZyBhbmQgYm91bmRzIGNoZWNraW5nIG9uIHR1bm5lbCBzdGF0ZSBjcmVhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjM6MjYuNDIwNzY5NDE0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzEwODA3MDQ3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjI2LjQyMTI0MDg0NFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjgzMTA3NTk1MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXBfdHVuX2J1aWxkX3N0YXRlKClgIGFuZCBgaXA2X3R1bl9idWlsZF9zdGF0ZSgpYCB0byBpbml0aWFsaXplIGB0dW5faW5mby1cXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO2AgcHJpb3IgdG8gY2FsbGluZyBgaXBfdHVuX3NldF9vcHRzKClgLCByYXRoZXIgdGhhbiBhZnRlcndhcmRzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZmxleGlibGUgYXJyYXkgbWVtYmVyIGBpbmZvLVxcdTAwM2VvcHRpb25zYCAod2hpY2ggaXMgYW5ub3RhdGVkIHdpdGggYF9fY291bnRlZF9ieShvcHRpb25zX2xlbilgKSBoYXMgaXRzIGNvdW50ZXIgcG9wdWxhdGVkIGJlZm9yZSBhY2Nlc3MuXFxuXFxuUmVnYXJkaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbjpcXG4tIFRoZSBgc3RydWN0IGx3dHVubmVsX3N0YXRlYCBhbmQgaXRzIGVtYmVkZGVkIGBzdHJ1Y3QgaXBfdHVubmVsX2luZm9gIGFyZSBhbGxvY2F0ZWQgdmlhIGBsd3R1bm5lbF9zdGF0ZV9hbGxvYygpYCwgd2hpY2ggdXNlcyBga3phbGxvYygpYCB3aXRoIGBHRlBfQVRPTUlDYC4gQ29uc2VxdWVudGx5LCBhbGwgYWxsb2NhdGVkIGJ5dGVzIChpbmNsdWRpbmcgaGVhZGVycyBhbmQgdHJhaWxpbmcgb3B0aW9uIGJ1ZmZlcnMpIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGF0IGFsbG9jYXRpb24gdGltZS5cXG4tIE1vdmluZyB0aGUgYXNzaWdubWVudCBvZiBgb3B0aW9uc19sZW5gIGVhcmxpZXIgZG9lcyBub3QgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvZmllbGRzIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIElmIGBpcF90dW5fc2V0X29wdHMoKWAgZmFpbHMsIHRoZSBzdGF0ZSBpcyBmcmVlZCBpbW1lZGlhdGVseS5cXG5cXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZCwgc3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50IHRvIHZhbGlkYXRlIHRoZXNlIGNoYW5nZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NTZmNWVmNGFmMjNjZDBkZGIyYjNhYzRlY2UxOTlhYTMzMjFmZmQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMDY6MjE6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jIGIvbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY1xuaW5kZXggNTE2OGQ1NDZlYTJmZC4uOGZiNDc0MmFjYTkyNSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNcbisrKyBiL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNcbkBAIC03MTEsNiArNzExLDcgQEAgc3RhdGljIGludCBpcF90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIFx0bmV3X3N0YXRlLVx1MDAzZXR5cGUgPSBMV1RVTk5FTF9FTkNBUF9JUDtcbiBcbiBcdHR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKG5ld19zdGF0ZSk7XG4rXHR0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XG4gXG4gXHRlcnIgPSBpcF90dW5fc2V0X29wdHModGJbTFdUVU5ORUxfSVBfT1BUU10sIHR1bl9pbmZvLCBleHRhY2spO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuQEAgLTc1Myw3ICs3NTQsNiBAQCBzdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gXHR9XG4gXG4gXHR0dW5faW5mby1cdTAwM2Vtb2RlID0gSVBfVFVOTkVMX0lORk9fVFg7XG4tXHR0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XG4gXG4gXHQqdHMgPSBuZXdfc3RhdGU7XG4gXG5AQCAtMTAwNSw2ICsxMDA1LDcgQEAgc3RhdGljIGludCBpcDZfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcbiBcdG5ld19zdGF0ZS1cdTAwM2V0eXBlID0gTFdUVU5ORUxfRU5DQVBfSVA2O1xuIFxuIFx0dHVuX2luZm8gPSBsd3RfdHVuX2luZm8obmV3X3N0YXRlKTtcbitcdHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcbiBcbiBcdGVyciA9IGlwX3R1bl9zZXRfb3B0cyh0YltMV1RVTk5FTF9JUDZfT1BUU10sIHR1bl9pbmZvLCBleHRhY2spO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuQEAgLTEwNDAsNyArMTA0MSw2IEBAIHN0YXRpYyBpbnQgaXA2X3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gXHR9XG4gXG4gXHR0dW5faW5mby1cdTAwM2Vtb2RlID0gSVBfVFVOTkVMX0lORk9fVFggfCBJUF9UVU5ORUxfSU5GT19JUFY2O1xuLVx0dHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO1xuIFxuIFx0KnRzID0gbmV3X3N0YXRlO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjM6MjYuNDIxMjQxODQ0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExNTY3MTA0MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCdzIGRpZyBpbi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZXZlbiBkb2luZy4gRnJvbSB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSBjaGFuZ2VzIGluIGBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGlwX3R1bl9idWlsZF9zdGF0ZWAgZnVuY3Rpb25zLCBib3RoIGZvciBJUHY0IGFuZCBJUHY2IHR1bm5lbHMuIFRoZSBtYWluIGFkZGl0aW9uIHNlZW1zIHRvIGJlIHRoZSBsaW5lIGB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW5gIGluc2VydGVkIGluIHR3byBwbGFjZXMuIEl0IGxvb2tzIGxpa2UgYG9wdGlvbnNfbGVuYCBpcyBiZWluZyBzZXQgZWFybGllci4gV2hhdCdzIGludGVyZXN0aW5nIGlzIHRoaXMgbGluZSBpcyAqcmVtb3ZlZCogZnJvbSB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbnMuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIHdoZXRoZXIgb3Igbm90IGl0IGludHJvZHVjZXMgYW55IG5ldyBtZW1vcnkgbWFuYWdlbWVudCB2dWxuZXJhYmlsaXRpZXMuIEZyb20gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBjaGFuZ2VzIGxpa2UgdGhlc2UsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byB0dW5uZWwgb3B0aW9ucyBhbmQgbGVuZ3RoIGNhbGN1bGF0aW9ucywgYXJlIHdoZXJlIHRoaW5ncyBjYW4gZ2V0IHRyaWNreS4gSSBrbm93IHRoYXQgdGhlIG5ldHdvcmtpbmcgc3RhY2sgY2FuIGJlIGEgZ29sZG1pbmUgb2YgdnVsbmVyYWJpbGl0aWVzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBibG9ja3MuIEknbSBnb2luZyB0byBxdWlja2x5IHJlYWQgdGhlIGNvZGUgZnJvbSBhcm91bmQgbGluZXMgNzAwLTc2MCBhbmQgOTkwLTEwNTAgaW4gYG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBjb250ZXh0IG9uIHdoYXQgYGlwX3R1bl9idWlsZF9zdGF0ZWAgZG9lcyBhbmQgd2hhdCBgb3B0X2xlbmAgYW5kIGB0dW5faW5mb2AgcmVwcmVzZW50LiBJIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIHdoYXQgYGlwX3R1bl9zZXRfb3B0c2AgZG9lcywgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIHR1bm5lbCBvcHRpb25zIGFyZSBtYW5pcHVsYXRlZC5cblxuSSB3YW50IHRvIGtub3cgaG93IGBvcHRfbGVuYCBpcyBkZXJpdmVkLiBBcmUgd2UgZGVhbGluZyB3aXRoIHVzZXItY29udHJvbGxlZCBpbnB1dCBoZXJlPyBXaGF0IGtpbmQgb2YgZGF0YSBpcyBwYXNzZWQgaW4gYHRiW0xXVFVOTkVMX0lQX09QVFNdYD8gSWYgdGhlIGxlbmd0aCBpcyBtaXNjYWxjdWxhdGVkIG9yIG1pc2hhbmRsZWQsIHdlIG1pZ2h0IGhhdmUgYW4gaW5mb3JtYXRpb24gbGVhayBvciB3cml0ZSB2dWxuZXJhYmlsaXR5IGluIHRoZXNlIG9wdGlvbnMuXG5cbkFmdGVyIEkgdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCBJJ2xsIHRoZW4gY29uc2lkZXIgS01TQU4uIERvZXMgdGhpcyBwYXRjaCBjaGFuZ2UgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQsIGluaXRpYWxpemVkLCBvciBkZWFsbG9jYXRlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMgdGhhdCBLTVNBTiB3b3VsZCBiZSBnb29kIGF0IGNhdGNoaW5nPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNoYW5nZXMgaW4gbGVuZ3RoIGNhbGN1bGF0aW9ucywgcG90ZW50aWFsIG9mZi1ieS1vbmUgZXJyb3JzLCBvciBwbGFjZXMgd2hlcmUgdW5jaGVja2VkIHZhbHVlcyBhcmUgdXNlZCBhcyBhcnJheSBpbmRpY2VzIG9yIHNpemVzLiBCYXNlZCBvbiB0aGF0IGFuYWx5c2lzLCBJJ2xsIHJlY29tbWVuZCB3aGV0aGVyIGEgZGVkaWNhdGVkIGZ1enppbmcgc2Vzc2lvbiBpcyB0aGUgcmlnaHQgbW92ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzMCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjM3Ljk4ODM1MDUwNFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjYwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGx3dHVubmVsX3N0YXRlICoqdHMsXFxuIDY5MTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDY5MjpcXHR7XFxuIDY5MzpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltMV1RVTk5FTF9JUF9NQVggKyAxXTtcXG4gNjk0OlxcdFxcdHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbmV3X3N0YXRlO1xcbiA2OTU6XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbztcXG4gNjk2OlxcdFxcdGludCBlcnIsIG9wdF9sZW47XFxuIDY5NzpcXHRcXG4gNjk4OlxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgTFdUVU5ORUxfSVBfTUFYLCBhdHRyLFxcbiA2OTk6XFx0XFx0XFx0XFx0XFx0XFx0ICBpcF90dW5fcG9saWN5LCBleHRhY2spO1xcbiA3MDA6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDcwMTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3MDI6XFx0XFxuIDcwMzpcXHRcXHRvcHRfbGVuID0gaXBfdHVuX2dldF9vcHRsZW4odGJbTFdUVU5ORUxfSVBfT1BUU10sIGV4dGFjayk7XFxuIDcwNDpcXHRcXHRpZiAob3B0X2xlbiBcXHUwMDNjIDApXFxuIDcwNTpcXHRcXHRcXHRyZXR1cm4gb3B0X2xlbjtcXG4gNzA2OlxcdFxcbiA3MDc6XFx0XFx0bmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCp0dW5faW5mbykgKyBvcHRfbGVuKTtcXG4gNzA4OlxcdFxcdGlmICghbmV3X3N0YXRlKVxcbiA3MDk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDcxMDpcXHRcXG4gNzExOlxcdFxcdG5ld19zdGF0ZS1cXHUwMDNldHlwZSA9IExXVFVOTkVMX0VOQ0FQX0lQO1xcbiA3MTI6XFx0XFxuIDcxMzpcXHRcXHR0dW5faW5mbyA9IGx3dF90dW5faW5mbyhuZXdfc3RhdGUpO1xcbiA3MTQ6XFx0XFx0dHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcXG4gNzE1OlxcdFxcbiA3MTY6XFx0XFx0ZXJyID0gaXBfdHVuX3NldF9vcHRzKHRiW0xXVFVOTkVMX0lQX09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTtcXG4gNzE3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIDcxODpcXHRcXHRcXHRsd3RzdGF0ZV9mcmVlKG5ld19zdGF0ZSk7XFxuIDcxOTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3MjA6XFx0XFx0fVxcbiA3MjE6XFx0XFxuIDcyMjpcXHQjaWZkZWYgQ09ORklHX0RTVF9DQUNIRVxcbiA3MjM6XFx0XFx0ZXJyID0gZHN0X2NhY2hlX2luaXQoXFx1MDAyNnR1bl9pbmZvLVxcdTAwM2Vkc3RfY2FjaGUsIEdGUF9LRVJORUwpO1xcbiA3MjQ6XFx0XFx0aWYgKGVycikge1xcbiA3MjU6XFx0XFx0XFx0bHd0c3RhdGVfZnJlZShuZXdfc3RhdGUpO1xcbiA3MjY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzI3OlxcdFxcdH1cXG4gNzI4OlxcdCNlbmRpZlxcbiA3Mjk6XFx0XFxuIDczMDpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVBfSURdKVxcbiA3MzE6XFx0XFx0XFx0dHVuX2luZm8tXFx1MDAzZWtleS50dW5faWQgPSBubGFfZ2V0X2JlNjQodGJbTFdUVU5ORUxfSVBfSURdKTtcXG4gNzMyOlxcdFxcbiA3MzM6XFx0XFx0aWYgKHRiW0xXVFVOTkVMX0lQX0RTVF0pXFxuIDczNDpcXHRcXHRcXHR0dW5faW5mby1cXHUwMDNla2V5LnUuaXB2NC5kc3QgPSBubGFfZ2V0X2luX2FkZHIodGJbTFdUVU5ORUxfSVBfRFNUXSk7XFxuIDczNTpcXHRcXG4gNzM2OlxcdFxcdGlmICh0YltMV1RVTk5FTF9JUF9TUkNdKVxcbiA3Mzc6XFx0XFx0XFx0dHVuX2luZm8tXFx1MDAzZWtleS51LmlwdjQuc3JjID0gbmxhX2dldF9pbl9hZGRyKHRiW0xXVFVOTkVMX0lQX1NSQ10pO1xcbiA3Mzg6XFx0XFxuIDczOTpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVBfVFRMXSlcXG4gNzQwOlxcdFxcdFxcdHR1bl9pbmZvLVxcdTAwM2VrZXkudHRsID0gbmxhX2dldF91OCh0YltMV1RVTk5FTF9JUF9UVExdKTtcXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0aWYgKHRiW0xXVFVOTkVMX0lQX1RPU10pXFxuIDc0MzpcXHRcXHRcXHR0dW5faW5mby1cXHUwMDNla2V5LnRvcyA9IG5sYV9nZXRfdTgodGJbTFdUVU5ORUxfSVBfVE9TXSk7XFxuIDc0NDpcXHRcXG4gNzQ1OlxcdFxcdGlmICh0YltMV1RVTk5FTF9JUF9GTEFHU10pIHtcXG4gNzQ2OlxcdFxcdFxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcXG4gNzQ3OlxcdFxcbiA3NDg6XFx0XFx0XFx0aXBfdHVubmVsX2ZsYWdzX2Zyb21fYmUxNihmbGFncyxcXG4gNzQ5OlxcdFxcdFxcdFxcdFxcdFxcdCAgbmxhX2dldF9iZTE2KHRiW0xXVFVOTkVMX0lQX0ZMQUdTXSkpO1xcbiA3NTA6XFx0XFx0XFx0aXBfdHVubmVsX2NsZWFyX29wdGlvbnNfcHJlc2VudChmbGFncyk7XFxuIDc1MTpcXHRcXG4gNzUyOlxcdFxcdFxcdGlwX3R1bm5lbF9mbGFnc19vcih0dW5faW5mby1cXHUwMDNla2V5LnR1bl9mbGFncyxcXG4gNzUzOlxcdFxcdFxcdFxcdFxcdCAgIHR1bl9pbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzLCBmbGFncyk7XFxuIDc1NDpcXHRcXHR9XFxuIDc1NTpcXHRcXG4gNzU2OlxcdFxcdHR1bl9pbmZvLVxcdTAwM2Vtb2RlID0gSVBfVFVOTkVMX0lORk9fVFg7XFxuIDc1NzpcXHRcXG4gNzU4OlxcdFxcdCp0cyA9IG5ld19zdGF0ZTtcXG4gNzU5OlxcdFxcbiA3NjA6XFx0XFx0cmV0dXJuIDA7XFxuIDc2MTpcXHR9XFxuIDc2MjpcXHRcXG4gNzYzOlxcdHN0YXRpYyB2b2lkIGlwX3R1bl9kZXN0cm95X3N0YXRlKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpXFxuIDc2NDpcXHR7XFxuIDc2NTpcXHQjaWZkZWYgQ09ORklHX0RTVF9DQUNIRVxcbiA3NjY6XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyA9IGx3dF90dW5faW5mbyhsd3RzdGF0ZSk7XFxuIDc2NzpcXHRcXG4gNzY4OlxcdFxcdGRzdF9jYWNoZV9kZXN0cm95KFxcdTAwMjZ0dW5faW5mby1cXHUwMDNlZHN0X2NhY2hlKTtcXG4gNzY5OlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzozNy45ODg0ODM0ODRaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTc5OTU5MDA0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipJbnZlc3RpZ2F0aW5nIGBpcF90dW5fc2V0X29wdHNgIGFuZCBgbHd0dW5uZWxfc3RhdGVfYWxsb2NgKipcblxuUmlnaHQsIG15IGN1cmlvc2l0eSBpcyBwaXF1ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgaXBfdHVuX3NldF9vcHRzYCBhbmQgYGx3dHVubmVsX3N0YXRlX2FsbG9jYC4gSSBzdXNwZWN0IHRoZXkncmUgaW52b2x2ZWQgaW4gY29uZmlndXJpbmcgb3IgbWFuYWdpbmcgdGhlIHN0YXRlIG9mIExXVHVubmVscywgd2hpY2ggaXMgYSBjb21tb24gcGF0dGVybi4gVG8gZ2V0IGEgY2xlYXIgcGljdHVyZSwgSSBzaG91bGQgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGJvdGggZnVuY3Rpb25zLiBJ4oCZbGwgbG9vayBmb3IgdGhlaXIgZGVmaW5pdGlvbnMgYW5kLCBpbXBvcnRhbnRseSwgd2hlcmUgYW5kIGhvdyB0aGV5J3JlIGNhbGxlZC4gSeKAmW0gdGhpbmtpbmcgdGhlIHN0cnVjdHVyZSBzaG91bGQgYmUgZmFpcmx5IGludHVpdGl2ZSwgYnV0IGxldCdzIG5vdCBtYWtlIGFueSBhc3N1bXB0aW9ucyB5ZXQuIExldCB0aGUgY29kZSBzcGVhayBmb3IgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTYzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzozOS43ODgwNzY3MzdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDA3NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3R1bl9zZXRfb3B0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9Njc2PXN0YXRpYyBpbnQgaXBfdHVuX2dldF9vcHRsZW4oc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNjgxLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6NjgyOnN0YXRpYyBpbnQgaXBfdHVuX3NldF9vcHRzKHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyxcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTY4My1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTY4OD1zdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTcxNS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjcxNjpcXHRlcnIgPSBpcF90dW5fc2V0X29wdHModGJbTFdUVU5ORUxfSVBfT1BUU10sIHR1bl9pbmZvLCBleHRhY2spO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNzE3LVxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTk4Mj1zdGF0aWMgaW50IGlwNl90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDA5LVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6MTAxMDpcXHRlcnIgPSBpcF90dW5fc2V0X29wdHModGJbTFdUVU5ORUxfSVA2X09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTtcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTEwMTEtXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjM6MzkuODM4MDk0ODk2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMyNDI2NzgyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgc2VjdGlvbiBvZiBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AsIGFzIHRob3VnaCBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkIGFuZCB3b3JraW5nIHdpdGggdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIElQIFR1bm5lbCBDb3JlIC0gTGluZXMgNjAwLTY4NSoqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDYwMCB0aHJvdWdoIDY4NSBpbiBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AuIEkga25vdyB0aGlzIGFyZWEgZmFpcmx5IHdlbGwsIHNvIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhYm91dCB0aGUgY29yZSBtZWNoYW5pc21zIGZvciBJUC1pbi1JUCB0dW5uZWxzIOKAkyB0aGUgaGVhcnQgb2YgZW5jYXBzdWxhdGluZyBhbmQgZGVjYXBzdWxhdGluZyBJUCBwYWNrZXRzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgcmFuZ2UgcHJvYmFibHkgaW52b2x2ZXMgdGhlIGhhbmRsaW5nIG9mIHNwZWNpZmljIHR1bm5lbCB0eXBlcywgb3IgcGVyaGFwcyBzb21lIGNvbW1vbiBoZWxwZXIgZnVuY3Rpb25zIHV0aWxpemVkIGFjcm9zcyBkaWZmZXJlbnQgdHVubmVsIGltcGxlbWVudGF0aW9ucy4gSSdtIGhvcGluZyB0byBzZWUgaG93IHRoZSBjb2RlIGhhbmRsZXMgdGhlIGRldGFpbHMgcmVsYXRlZCB0byBzZXR0aW5nIHVwIGFuZCB0ZWFyaW5nIGRvd24gdGhlIHR1bm5lbCBpbnRlcmZhY2VzIGFuZCBkZWFsaW5nIHdpdGggdGhlIGlubmVyIElQIGhlYWRlciBtYW5pcHVsYXRpb24uIEFyZSB3ZSBkZWFsaW5nIHdpdGggdGhlIGNvbW1vbiB0dW5uZWwgdHlwZT9cblxuSSdtIGJldHRpbmcgdGhpcyBpcyBnb2luZyB0byBpbmNsdWRlIGNoZWNraW5nIHRoZSB2YWxpZGl0eSBvZiB0aGUgSVAgaGVhZGVyIGluIHRoZSB0dW5uZWwsIGhhbmRsaW5nIHRoZSBjaGVja3N1bSBjYWxjdWxhdGlvbiAob3Igc2tpcHBpbmcgaXQsIGRlcGVuZGluZyBvbiB0aGUgdHVubmVsIHR5cGUpLiBJJ2xsIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZSBmbG93IGxhYmVsIGFuZCBUT1MgYml0cy4gSXMgdGhlIGlubmVyIFRPUyBwcmVzZXJ2ZWQ/IFdoYXQgYXJlIHRoZSBwb2xpY3kgY2hvaWNlcyBpbiB0aGUgcGFja2V0IHByb2Nlc3Npbmcgd2l0aCByZXNwZWN0IHRvIHRoZSBEU0NQIHZhbHVlcyBmcm9tIHRoZSBvdXRlciBoZWFkZXI/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSB0dW5uZWwgY2FuIGJlIHVzZWQgaW4gYSBwcm9kdWN0aW9uIGVudmlyb25tZW50LlxuXG5JIGV4cGVjdCB0byBzZWUgc29tZSBlcnJvciBjaGVja2luZyBpbiB0aGVyZSB0b28uIFdoYXQgaGFwcGVucyBpZiB0aGUgaW5uZXIgcGFja2V0IGlzIG1hbGZvcm1lZD8gSG93IGRvZXMgdGhlIGtlcm5lbCByZXNwb25kIHRvIGFuIElQIGZyYWdtZW50IGluIHRoZSB0dW5uZWw/IElzIHRoZSBwYWNrZXQgZHJvcHBlZCwgb3IgaXMgZnJhZ21lbnRhdGlvbiBoYW5kbGVkIHdpdGhpbiB0aGUgdHVubmVsPyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBlcnJvciBwYXRocywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBtZW1vcnkgYWxsb2NhdGlvbiBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJdCB3aWxsIGFsc28gYmUgaW1wb3J0YW50IHRvIHNlZSBob3cgdGhlIGNvZGUgbWFuYWdlcyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcm91dGluZyB0YWJsZS4gSXMgdGhlcmUgYW55IGhhbmRsaW5nIG9mIHJvdXRlIGxvb2t1cHMsIG9yIGRvZXMgdGhlIHR1bm5lbCByZWx5IHNvbGVseSBvbiBjb25maWd1cmVkIHJvdXRlcz8gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgc2VjdGlvbiBoYW5kbGVzIHRoZSBpbmdyZXNzIGFuZCBlZ3Jlc3Mgb2YgdGhlIHR1bm5lbGxlZCB0cmFmZmljLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYzMSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjQzLjA4MDc3NTY3MloiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MzA6XFx0XFx0XFx0XFx0ICAgaXBfb3B0c19wb2xpY3ksIGV4dGFjayk7XFxuIDYzMTpcXHRcXHRpZiAoZXJyKVxcbiA2MzI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNjMzOlxcdFxcbiA2MzQ6XFx0XFx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBubGFfZGF0YShhdHRyKSwgbmxhX2xlbihhdHRyKSwgcmVtKSB7XFxuIDYzNTpcXHRcXHRcXHRzd2l0Y2ggKG5sYV90eXBlKG5sYSkpIHtcXG4gNjM2OlxcdFxcdFxcdGNhc2UgTFdUVU5ORUxfSVBfT1BUU19HRU5FVkU6XFxuIDYzNzpcXHRcXHRcXHRcXHRpZiAodHlwZSBcXHUwMDI2XFx1MDAyNiB0eXBlICE9IElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVClcXG4gNjM4OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA2Mzk6XFx0XFx0XFx0XFx0b3B0X2xlbiA9IGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZShubGEsIGluZm8sIG9wdHNfbGVuLFxcbiA2NDA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZXh0YWNrKTtcXG4gNjQxOlxcdFxcdFxcdFxcdGlmIChvcHRfbGVuIFxcdTAwM2MgMClcXG4gNjQyOlxcdFxcdFxcdFxcdFxcdHJldHVybiBvcHRfbGVuO1xcbiA2NDM6XFx0XFx0XFx0XFx0b3B0c19sZW4gKz0gb3B0X2xlbjtcXG4gNjQ0OlxcdFxcdFxcdFxcdGlmIChvcHRzX2xlbiBcXHUwMDNlIElQX1RVTk5FTF9PUFRTX01BWClcXG4gNjQ1OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA2NDY6XFx0XFx0XFx0XFx0dHlwZSA9IElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVDtcXG4gNjQ3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA2NDg6XFx0XFx0XFx0Y2FzZSBMV1RVTk5FTF9JUF9PUFRTX1ZYTEFOOlxcbiA2NDk6XFx0XFx0XFx0XFx0aWYgKHR5cGUpXFxuIDY1MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjUxOlxcdFxcdFxcdFxcdG9wdF9sZW4gPSBpcF90dW5fcGFyc2Vfb3B0c192eGxhbihubGEsIGluZm8sIG9wdHNfbGVuLFxcbiA2NTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBleHRhY2spO1xcbiA2NTM6XFx0XFx0XFx0XFx0aWYgKG9wdF9sZW4gXFx1MDAzYyAwKVxcbiA2NTQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG9wdF9sZW47XFxuIDY1NTpcXHRcXHRcXHRcXHRvcHRzX2xlbiArPSBvcHRfbGVuO1xcbiA2NTY6XFx0XFx0XFx0XFx0dHlwZSA9IElQX1RVTk5FTF9WWExBTl9PUFRfQklUO1xcbiA2NTc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDY1ODpcXHRcXHRcXHRjYXNlIExXVFVOTkVMX0lQX09QVFNfRVJTUEFOOlxcbiA2NTk6XFx0XFx0XFx0XFx0aWYgKHR5cGUpXFxuIDY2MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjYxOlxcdFxcdFxcdFxcdG9wdF9sZW4gPSBpcF90dW5fcGFyc2Vfb3B0c19lcnNwYW4obmxhLCBpbmZvLCBvcHRzX2xlbixcXG4gNjYyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGV4dGFjayk7XFxuIDY2MzpcXHRcXHRcXHRcXHRpZiAob3B0X2xlbiBcXHUwMDNjIDApXFxuIDY2NDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gb3B0X2xlbjtcXG4gNjY1OlxcdFxcdFxcdFxcdG9wdHNfbGVuICs9IG9wdF9sZW47XFxuIDY2NjpcXHRcXHRcXHRcXHR0eXBlID0gSVBfVFVOTkVMX0VSU1BBTl9PUFRfQklUO1xcbiA2Njc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDY2ODpcXHRcXHRcXHRkZWZhdWx0OlxcbiA2Njk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDY3MDpcXHRcXHRcXHR9XFxuIDY3MTpcXHRcXHR9XFxuIDY3MjpcXHRcXG4gNjczOlxcdFxcdHJldHVybiBvcHRzX2xlbjtcXG4gNjc0OlxcdH1cXG4gNjc1OlxcdFxcbiA2NzY6XFx0c3RhdGljIGludCBpcF90dW5fZ2V0X29wdGxlbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbiA2Nzc6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDY3ODpcXHR7XFxuIDY3OTpcXHRcXHRyZXR1cm4gaXBfdHVuX3BhcnNlX29wdHMoYXR0ciwgTlVMTCwgZXh0YWNrKTtcXG4gNjgwOlxcdH1cXG4gNjgxOlxcdFxcbiA2ODI6XFx0c3RhdGljIGludCBpcF90dW5fc2V0X29wdHMoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxcbiA2ODM6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA2ODQ6XFx0e1xcbiA2ODU6XFx0XFx0cmV0dXJuIGlwX3R1bl9wYXJzZV9vcHRzKGF0dHIsIGluZm8sIGV4dGFjayk7XFxuIDY4NjpcXHR9XFxuIDY4NzpcXHRcXG4gNjg4OlxcdHN0YXRpYyBpbnQgaXBfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gNjg5OlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBmYW1pbHksIGNvbnN0IHZvaWQgKmNmZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjM6NDMuMDgwODg3MjIzWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1OTU3OTIwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kLCBkZWxpdmVyZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUCBUdW5uZWwgQ29yZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBqdW1wIGJhY2sgaW50byB0aGUgZ3V0cyBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4gTGV0J3MgZm9jdXMgb24gYSBzcGVjaWZpYyBhcmVhLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jYCBmaWxlLiBJJ20gemVyb2luZyBpbiBvbiBsaW5lcyA1NTAgdG8gNjMwLiBUaGlzIHNlY3Rpb24gbGlrZWx5IGhhbmRsZXMgc29tZSBjcml0aWNhbCBhc3BlY3Qgb2YgSVAgdHVubmVsaW5nIGZ1bmN0aW9uYWxpdHksIGFuZCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcy4gQ291bGQgYmUgcmVsYXRlZCB0byBlbmNhcHN1bGF0aW9uLCBkZWNhcHN1bGF0aW9uLCBoZWFkZXIgbWFuaXB1bGF0aW9uLCBvciBwZXJoYXBzIHNvbWUga2luZCBvZiBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIHR1bm5lbCBvcGVyYXRpb25zLiBJdCBtaWdodCBiZSBkZWFsaW5nIHdpdGggYSBwYXJ0aWN1bGFyIHR1bm5lbCB0eXBlIG9yIGEgc3BlY2lmaWMgc2NlbmFyaW8gcmVsYXRlZCB0byBmcmFnbWVudGF0aW9uLCByb3V0aW5nLCBvciBldmVuIG11bHRpY2FzdC4gSSdsbCBuZWVkIHRvIGRpZyBpbiB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGFyZSBoaWRpbmcgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwOTYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjQ1LjY3NjY4MzEwNVoiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NTA6XFx0XFx0XFx0XFx0ICAgICAgIHZ4bGFuX29wdF9wb2xpY3ksIGV4dGFjayk7XFxuIDU1MTpcXHRcXHRpZiAoZXJyKVxcbiA1NTI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTUzOlxcdFxcbiA1NTQ6XFx0XFx0aWYgKCF0YltMV1RVTk5FTF9JUF9PUFRfVlhMQU5fR0JQXSlcXG4gNTU1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1NTY6XFx0XFxuIDU1NzpcXHRcXHRpZiAoaW5mbykge1xcbiA1NTg6XFx0XFx0XFx0c3RydWN0IHZ4bGFuX21ldGFkYXRhICptZCA9XFxuIDU1OTpcXHRcXHRcXHRcXHRpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pICsgb3B0c19sZW47XFxuIDU2MDpcXHRcXG4gNTYxOlxcdFxcdFxcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfVlhMQU5fR0JQXTtcXG4gNTYyOlxcdFxcdFxcdG1kLVxcdTAwM2VnYnAgPSBubGFfZ2V0X3UzMihhdHRyKTtcXG4gNTYzOlxcdFxcdFxcdG1kLVxcdTAwM2VnYnAgXFx1MDAyNj0gVlhMQU5fR0JQX01BU0s7XFxuIDU2NDpcXHRcXHRcXHRfX3NldF9iaXQoSVBfVFVOTkVMX1ZYTEFOX09QVF9CSVQsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpO1xcbiA1NjU6XFx0XFx0fVxcbiA1NjY6XFx0XFxuIDU2NzpcXHRcXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCB2eGxhbl9tZXRhZGF0YSk7XFxuIDU2ODpcXHR9XFxuIDU2OTpcXHRcXG4gNTcwOlxcdHN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfZXJzcGFuKHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuIDU3MTpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLCBpbnQgb3B0c19sZW4sXFxuIDU3MjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA1NzM6XFx0e1xcbiA1NzQ6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9NQVggKyAxXTtcXG4gNTc1OlxcdFxcdGludCBlcnI7XFxuIDU3NjpcXHRcXHR1OCB2ZXI7XFxuIDU3NzpcXHRcXG4gNTc4OlxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIExXVFVOTkVMX0lQX09QVF9FUlNQQU5fTUFYLCBhdHRyLFxcbiA1Nzk6XFx0XFx0XFx0XFx0ICAgICAgIGVyc3Bhbl9vcHRfcG9saWN5LCBleHRhY2spO1xcbiA1ODA6XFx0XFx0aWYgKGVycilcXG4gNTgxOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDU4MjpcXHRcXG4gNTgzOlxcdFxcdGlmICghdGJbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9WRVJdKVxcbiA1ODQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU4NTpcXHRcXG4gNTg2OlxcdFxcdHZlciA9IG5sYV9nZXRfdTgodGJbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9WRVJdKTtcXG4gNTg3OlxcdFxcdGlmICh2ZXIgPT0gMSkge1xcbiA1ODg6XFx0XFx0XFx0aWYgKCF0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0lOREVYXSlcXG4gNTg5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1OTA6XFx0XFx0fSBlbHNlIGlmICh2ZXIgPT0gMikge1xcbiA1OTE6XFx0XFx0XFx0aWYgKCF0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0RJUl0gfHxcXG4gNTkyOlxcdFxcdFxcdCAgICAhdGJbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9IV0lEXSlcXG4gNTkzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1OTQ6XFx0XFx0fSBlbHNlIHtcXG4gNTk1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1OTY6XFx0XFx0fVxcbiA1OTc6XFx0XFxuIDU5ODpcXHRcXHRpZiAoaW5mbykge1xcbiA1OTk6XFx0XFx0XFx0c3RydWN0IGVyc3Bhbl9tZXRhZGF0YSAqbWQgPVxcbiA2MDA6XFx0XFx0XFx0XFx0aXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSArIG9wdHNfbGVuO1xcbiA2MDE6XFx0XFxuIDYwMjpcXHRcXHRcXHRtZC1cXHUwMDNldmVyc2lvbiA9IHZlcjtcXG4gNjAzOlxcdFxcdFxcdGlmICh2ZXIgPT0gMSkge1xcbiA2MDQ6XFx0XFx0XFx0XFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fSU5ERVhdO1xcbiA2MDU6XFx0XFx0XFx0XFx0bWQtXFx1MDAzZXUuaW5kZXggPSBubGFfZ2V0X2JlMzIoYXR0cik7XFxuIDYwNjpcXHRcXHRcXHR9IGVsc2Uge1xcbiA2MDc6XFx0XFx0XFx0XFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fRElSXTtcXG4gNjA4OlxcdFxcdFxcdFxcdG1kLVxcdTAwM2V1Lm1kMi5kaXIgPSBubGFfZ2V0X3U4KGF0dHIpO1xcbiA2MDk6XFx0XFx0XFx0XFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fSFdJRF07XFxuIDYxMDpcXHRcXHRcXHRcXHRzZXRfaHdpZChcXHUwMDI2bWQtXFx1MDAzZXUubWQyLCBubGFfZ2V0X3U4KGF0dHIpKTtcXG4gNjExOlxcdFxcdFxcdH1cXG4gNjEyOlxcdFxcbiA2MTM6XFx0XFx0XFx0X19zZXRfYml0KElQX1RVTk5FTF9FUlNQQU5fT1BUX0JJVCwgaW5mby1cXHUwMDNla2V5LnR1bl9mbGFncyk7XFxuIDYxNDpcXHRcXHR9XFxuIDYxNTpcXHRcXG4gNjE2OlxcdFxcdHJldHVybiBzaXplb2Yoc3RydWN0IGVyc3Bhbl9tZXRhZGF0YSk7XFxuIDYxNzpcXHR9XFxuIDYxODpcXHRcXG4gNjE5OlxcdHN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHMoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxcbiA2MjA6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDYyMTpcXHR7XFxuIDYyMjpcXHRcXHRpbnQgZXJyLCByZW0sIG9wdF9sZW4sIG9wdHNfbGVuID0gMDtcXG4gNjIzOlxcdFxcdHN0cnVjdCBubGF0dHIgKm5sYTtcXG4gNjI0OlxcdFxcdHUzMiB0eXBlID0gMDtcXG4gNjI1OlxcdFxcbiA2MjY6XFx0XFx0aWYgKCFhdHRyKVxcbiA2Mjc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDYyODpcXHRcXG4gNjI5OlxcdFxcdGVyciA9IG5sYV92YWxpZGF0ZShubGFfZGF0YShhdHRyKSwgbmxhX2xlbihhdHRyKSwgTFdUVU5ORUxfSVBfT1BUU19NQVgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjQ1LjY3NjgxNzE5NVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTcwMzU5OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaXBfdHVuX3BhcnNlX29wdHNfZ2VuZXZlYCBmdW5jdGlvbi4gSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gbGluZXMgNTAwIHRocm91Z2ggNTUwLCB0byBnZXQgYSBzZW5zZSBvZiBob3cgR2VuZXZlIG9wdGlvbnMgYXJlIGJlaW5nIHBhcnNlZCwgc3BlY2lmaWNhbGx5IHRoZSBzdHJ1Y3R1cmUsIHRoZSB3YXkgdGhleSBkZWFsIHdpdGggbGVuZ3RoIGZpZWxkcywgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciB2dWxuZXJhYmlsaXRpZXMuIEkgd2FudCB0byBzZWUgaWYgdGhleSBhcmUgZG9pbmcgYSBwcm9wZXIgdmFsaWRhdGlvbiBvbiB0aGUgaW5jb21pbmcgZGF0YSwgaG93IHRoZXkgY2hlY2sgZm9yIHBvdGVudGlhbCBvdmVyZmxvd3MsIGFuZCB3aGF0IHRoZSBsb2dpYyBpcyB3aGVuIHRoZSBvcHRpb24gdHlwZSBpcyBub3Qgc29tZXRoaW5nIHRoYXQgaXMgZXhwbGljaXRseSByZWNvZ25pc2VkLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhleSdyZSBoYW5kbGluZyB2YXJpYWJsZS1sZW5ndGggb3B0aW9ucyBjb3JyZWN0bHksIHNpbmNlIEdlbmV2ZSBvcHRpb25zIGNhbiBiZSBxdWl0ZSBmbGV4aWJsZS4gSSBhbnRpY2lwYXRlIHNlZWluZyBiaXR3aXNlIG9wZXJhdGlvbnMgYW5kIHBvdGVudGlhbGx5IHNvbWUgcG9pbnRlciBhcml0aG1ldGljIGluIHRoaXMgc2VjdGlvbiDigJMgaXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIGFyZSBiZWluZyB1c2VkIHRvIG5hdmlnYXRlIHRoZSBvcHRpb24gZGF0YS4gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NTIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjQ3LjY0NzE3OTU1NVoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXHRbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9JTkRFWF1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuIDUwMTpcXHRcXHRbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9ESVJdXFx0PSB7IC50eXBlID0gTkxBX1U4IH0sXFxuIDUwMjpcXHRcXHRbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9IV0lEXVxcdD0geyAudHlwZSA9IE5MQV9VOCB9LFxcbiA1MDM6XFx0fTtcXG4gNTA0OlxcdFxcbiA1MDU6XFx0c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0c19nZW5ldmUoc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gNTA2OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sIGludCBvcHRzX2xlbixcXG4gNTA3OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDUwODpcXHR7XFxuIDUwOTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX01BWCArIDFdO1xcbiA1MTA6XFx0XFx0aW50IGRhdGFfbGVuLCBlcnI7XFxuIDUxMTpcXHRcXG4gNTEyOlxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIExXVFVOTkVMX0lQX09QVF9HRU5FVkVfTUFYLCBhdHRyLFxcbiA1MTM6XFx0XFx0XFx0XFx0ICAgICAgIGdlbmV2ZV9vcHRfcG9saWN5LCBleHRhY2spO1xcbiA1MTQ6XFx0XFx0aWYgKGVycilcXG4gNTE1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDUxNjpcXHRcXG4gNTE3OlxcdFxcdGlmICghdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9DTEFTU10gfHxcXG4gNTE4OlxcdFxcdCAgICAhdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9UWVBFXSB8fFxcbiA1MTk6XFx0XFx0ICAgICF0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX0RBVEFdKVxcbiA1MjA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUyMTpcXHRcXG4gNTIyOlxcdFxcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX0RBVEFdO1xcbiA1MjM6XFx0XFx0ZGF0YV9sZW4gPSBubGFfbGVuKGF0dHIpO1xcbiA1MjQ6XFx0XFx0aWYgKGRhdGFfbGVuICUgNClcXG4gNTI1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MjY6XFx0XFxuIDUyNzpcXHRcXHRpZiAoaW5mbykge1xcbiA1Mjg6XFx0XFx0XFx0c3RydWN0IGdlbmV2ZV9vcHQgKm9wdCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgKyBvcHRzX2xlbjtcXG4gNTI5OlxcdFxcbiA1MzA6XFx0XFx0XFx0bWVtY3B5KG9wdC1cXHUwMDNlb3B0X2RhdGEsIG5sYV9kYXRhKGF0dHIpLCBkYXRhX2xlbik7XFxuIDUzMTpcXHRcXHRcXHRvcHQtXFx1MDAzZWxlbmd0aCA9IGRhdGFfbGVuIC8gNDtcXG4gNTMyOlxcdFxcdFxcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX0NMQVNTXTtcXG4gNTMzOlxcdFxcdFxcdG9wdC1cXHUwMDNlb3B0X2NsYXNzID0gbmxhX2dldF9iZTE2KGF0dHIpO1xcbiA1MzQ6XFx0XFx0XFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9HRU5FVkVfVFlQRV07XFxuIDUzNTpcXHRcXHRcXHRvcHQtXFx1MDAzZXR5cGUgPSBubGFfZ2V0X3U4KGF0dHIpO1xcbiA1MzY6XFx0XFx0XFx0X19zZXRfYml0KElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVCwgaW5mby1cXHUwMDNla2V5LnR1bl9mbGFncyk7XFxuIDUzNzpcXHRcXHR9XFxuIDUzODpcXHRcXG4gNTM5OlxcdFxcdHJldHVybiBzaXplb2Yoc3RydWN0IGdlbmV2ZV9vcHQpICsgZGF0YV9sZW47XFxuIDU0MDpcXHR9XFxuIDU0MTpcXHRcXG4gNTQyOlxcdHN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfdnhsYW4oc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gNTQzOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbywgaW50IG9wdHNfbGVuLFxcbiA1NDQ6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA1NDU6XFx0e1xcbiA1NDY6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbTFdUVU5ORUxfSVBfT1BUX1ZYTEFOX01BWCArIDFdO1xcbiA1NDc6XFx0XFx0aW50IGVycjtcXG4gNTQ4OlxcdFxcbiA1NDk6XFx0XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTFdUVU5ORUxfSVBfT1BUX1ZYTEFOX01BWCwgYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjM6NDcuNjQ3Mjc1OTI1WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwNTAxNjMwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuYCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbmAgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZCB3aXRoaW4gdGhpcyBjb2RlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgY3JpdGljYWwuIExldCBtZSBtZW50YWxseSBydW4gdGhyb3VnaCB0aGUgcmVsYXRlZCBjb2RlIHN0cnVjdHVyZS4uLiByaWdodCwgdGhhdCB2YXJpYWJsZSBpcyBwYXJ0IG9mIHRoZSBgdHVuX2luZm9gIHN0cnVjdHVyZSwgYW5kIHRoYXQncyB1c2VkIGZvciBJUCB0dW5uZWxzLiBPa2F5LCBsZXQncyBzdGFydCB3aXRoIGEgZm9jdXNlZCBzZWFyY2guIEknbSBnb2luZyB0byBzY2FuIHRoZSBjb2RlYmFzZSBmb3IgaW5zdGFuY2VzIG9mIGBvcHRpb25zX2xlbmAgc3BlY2lmaWNhbGx5LCBidXQgSSdsbCBuYXJyb3cgdGhlIGZvY3VzIGJ5IGxvb2tpbmcgd2l0aGluIGNvbnRleHRzIHRoYXQgd291bGQgbWFrZSBzZW5zZTogcGVyaGFwcyBhcm91bmQgdGhlIGBpcF90dW5uZWxfaW5mb19vcHRzYCBzdHJ1Y3R1cmUsIG9yLCBjcml0aWNhbGx5LCB3aXRoaW4gYGlwX3R1bm5lbF9jb3JlLmNgLiBMZXQncyBzZWUgd2hhdCB0aGF0IHNlYXJjaCByZXZlYWxzLiBUaGlzIG5lZWRzIHRvIGJlIHByZWNpc2U7IEkgbmVlZCB0byBmb2xsb3cgdGhlIGRhdGEgYW5kIHVuZGVyc3RhbmQgaXRzIHByb2Nlc3NpbmcgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg5MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjM6NDkuNjk3NDQyMjYzWiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY1OTAwMzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3R1bm5lbF9pbmZvX29wdHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jPTU5Nz1ib29sIG1seDVlX3RjX3R1bl9lbmNhcF9pbmZvX2VxdWFsX29wdGlvbnMoc3RydWN0IG1seDVlX2VuY2FwX2tleSAqYSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYy02MjItXFx0cmV0dXJuIGFfaW5mby1cXHUwMDNlb3B0aW9uc19sZW4gPT0gYl9pbmZvLVxcdTAwM2VvcHRpb25zX2xlbiBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYzo2MjM6XFx0ICAgICAgICFtZW1jbXAoaXBfdHVubmVsX2luZm9fb3B0cyhhX2luZm8pLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYzo2MjQ6XFx0XFx0ICAgICAgIGlwX3R1bm5lbF9pbmZvX29wdHMoYl9pbmZvKSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmMtNjI1LVxcdFxcdCAgICAgICBhX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZ2VuZXZlLmM9OTI9c3RhdGljIGludCBtbHg1ZV9nZW5faXBfdHVubmVsX2hlYWRlcl9nZW5ldmUoY2hhciBidWZbXSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZ2VuZXZlLmMtMTE3LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2dlbmV2ZS5jOjExODpcXHRcXHRpcF90dW5uZWxfaW5mb19vcHRzX2dldChnZW5ldmVoLVxcdTAwM2VvcHRpb25zLCB0dW5faW5mbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9nZW5ldmUuYy0xMTktXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl92eGxhbi5jPTgzPXN0YXRpYyBpbnQgbWx4NWVfZ2VuX2lwX3R1bm5lbF9oZWFkZXJfdnhsYW4oY2hhciBidWZbXSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fdnhsYW4uYy0xMDItXFx0aWYgKHRlc3RfYml0KElQX1RVTk5FTF9WWExBTl9PUFRfQklULCB0dW5fa2V5LVxcdTAwM2V0dW5fZmxhZ3MpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl92eGxhbi5jOjEwMzpcXHRcXHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoZS1cXHUwMDNldHVuX2luZm8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fdnhsYW4uYy0xMDQtXFx0XFx0dnhsYW5fYnVpbGRfZ2JwX2hkcih2eGgsIG1kKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jPTU2MTY9c3RhdGljIGJvb2wgbWx4NWVfdGNfcmVzdG9yZV90dW5uZWwoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01Njk0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jOjU2OTU6XFx0XFx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoXFx1MDAyNnR1bl9kc3QtXFx1MDAzZXUudHVuX2luZm8sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTY5Ni1cXHRcXHRcXHRcXHRcXHRlbmNfb3B0cy5rZXkuZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2FjdGlvbi5jPTMzMD1uZnBfZmxfcHVzaF9nZW5ldmVfb3B0aW9ucyhzdHJ1Y3QgbmZwX2ZsX3BheWxvYWQgKm5mcF9mbCwgaW50ICpsaXN0X2xlbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2FjdGlvbi5jLTMzNS1cXHRpbnQgb3B0X2xlbiwgb3B0X2NudCwgYWN0X3N0YXJ0LCB0b3RfcHVzaF9sZW47XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmM6MzM2OlxcdHU4ICpzcmMgPSBpcF90dW5uZWxfaW5mb19vcHRzKGlwX3R1bik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmMtMzM3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmMtMzcyLVxcdCpsaXN0X2xlbiArPSB0b3RfcHVzaF9sZW47XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmM6MzczOlxcdHNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaXBfdHVuKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYy0zNzQtXFx0d2hpbGUgKG9wdF9jbnQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI3NT1zdGF0aWMgdm9pZCBnZW5ldmVfcngoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgc3RydWN0IGdlbmV2ZV9zb2NrICpncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI5OS1cXHRcXHRfX3NldF9iaXQoSVBfVFVOTkVMX0dFTkVWRV9PUFRfQklULCBmbGFncyk7XFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MzAwOlxcdFxcdGlwX3R1bm5lbF9pbmZvX29wdHNfc2V0KFxcdTAwMjZ0dW5fZHN0LVxcdTAwM2V1LnR1bl9pbmZvLFxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTMwMS1cXHRcXHRcXHRcXHRcXHRnbnZoLVxcdTAwM2VvcHRpb25zLCBnbnZoLVxcdTAwM2VvcHRfbGVuICogNCxcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTEyMjk9c3RhdGljIHZvaWQgZ2VuZXZlX2J1aWxkX2hlYWRlcihzdHJ1Y3QgZ2VuZXZlaGRyICpnZW5ldmVoLFxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTI0My1cXHRpZiAodGVzdF9iaXQoSVBfVFVOTkVMX0dFTkVWRV9PUFRfQklULCBpbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzKSlcXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxMjQ0OlxcdFxcdGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KGdlbmV2ZWgtXFx1MDAzZW9wdGlvbnMsIGluZm8pO1xcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTEyNDUtfVxcbi0tXFxuZHJpdmVycy9uZXQvcGZjcC5jPTUyPXN0YXRpYyBpbnQgcGZjcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3BmY3AuYy03NC1cXG5kcml2ZXJzL25ldC9wZmNwLmM6NzU6XFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKFxcdTAwMjZ0dW5fZHN0LVxcdTAwM2V1LnR1bl9pbmZvKTtcXG5kcml2ZXJzL25ldC9wZmNwLmMtNzYtXFx0aWYgKHVubGlrZWx5KCFtZCkpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTY1Nz1zdGF0aWMgaW50IHZ4bGFuX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTc0Ny1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTc0ODpcXHRcXHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoXFx1MDAyNnR1bl9kc3QtXFx1MDAzZXUudHVuX2luZm8pO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNzQ5LVxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTIzNzM9dm9pZCB2eGxhbl94bWl0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI0ODMtXFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyNDg0OlxcdFxcdFxcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjQ4NS1cXHRcXHR9XFxuLS1cXG5pbmNsdWRlL25ldC9kc3RfbWV0YWRhdGEuaD0xNTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YWRhdGFfZHN0ICp0dW5fZHN0X3VuY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L2RzdF9tZXRhZGF0YS5oLTE2OC1cXHRuZXdfbWQtXFx1MDAzZXUudHVuX2luZm8gPSBtZF9kc3QtXFx1MDAzZXUudHVuX2luZm87XFxuaW5jbHVkZS9uZXQvZHN0X21ldGFkYXRhLmg6MTY5OlxcdG1lbWNweShpcF90dW5uZWxfaW5mb19vcHRzKFxcdTAwMjZuZXdfbWQtXFx1MDAzZXUudHVuX2luZm8pLFxcbmluY2x1ZGUvbmV0L2RzdF9tZXRhZGF0YS5oOjE3MDpcXHQgICAgICAgaXBfdHVubmVsX2luZm9fb3B0cyhcXHUwMDI2bWRfZHN0LVxcdTAwM2V1LnR1bl9pbmZvKSwgbWRfc2l6ZSk7XFxuaW5jbHVkZS9uZXQvZHN0X21ldGFkYXRhLmgtMTcxLVxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTg5PXN0cnVjdCBpcF90dW5uZWxfZW5jYXAge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTEwNS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6MTA2OiNkZWZpbmUgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtMTA3LVxcdF9HZW5lcmljKGluZm8sXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTY3ND1zdGF0aWMgaW5saW5lIHZvaWQgaXB0dW5uZWxfeG1pdF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGt0X2xlbilcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MTAtXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjcxMTpzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2luZm9fb3B0c19nZXQodm9pZCAqdG8sXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTcxMi1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTcxMy17XFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjcxNDpcXHRtZW1jcHkodG8sIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyksIGluZm8tXFx1MDAzZW9wdGlvbnNfbGVuKTtcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzE1LX1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzE2LVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDo3MTc6c3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9pbmZvX29wdHNfc2V0KHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyxcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzE4LVxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHZvaWQgKmZyb20sIGludCBsZW4sXFxuLS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzIyLVxcdGlmIChsZW4gXFx1MDAzZSAwKSB7XFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjcyMzpcXHRcXHRtZW1jcHkoaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSwgZnJvbSwgbGVuKTtcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzI0LVxcdFxcdGlwX3R1bm5lbF9mbGFnc19vcihpbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzLCBpbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzLFxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTc1OD1zdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX3VubmVlZF9tZXRhZGF0YSh2b2lkKVxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTc2MS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzYyOnN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfaW5mb19vcHRzX2dldCh2b2lkICp0byxcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzYzLVxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03NjYtXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjc2NzpzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2luZm9fb3B0c19zZXQoc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03NjgtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgdm9pZCAqZnJvbSwgaW50IGxlbixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQ5ODM9QlBGX0NBTExfMyhicGZfc2tiX2dldF90dW5uZWxfb3B0LCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHU4ICosIHRvLCB1MzIsIHNpemUpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00OTk3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQ5OTg6XFx0aXBfdHVubmVsX2luZm9fb3B0c19nZXQodG8sIGluZm8pO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ5OTktXFx0aWYgKHNpemUgXFx1MDAzZSBpbmZvLVxcdTAwM2VvcHRpb25zX2xlbilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTUxMDA9QlBGX0NBTExfMyhicGZfc2tiX3NldF90dW5uZWxfb3B0LCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy01MTEyLVxcdGlwX3R1bm5lbF9zZXRfb3B0aW9uc19wcmVzZW50KHByZXNlbnQpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjUxMTM6XFx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoaW5mbywgZnJvbSwgc2l6ZSwgcHJlc2VudCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNTExNC1cXG4tLVxcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmM9MzY2PXNrYl9mbG93X2Rpc3NlY3RfdHVubmVsX2luZm8oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMtNDg0LVxcdFxcdGVuY19vcHQtXFx1MDAzZWxlbiA9IGluZm8tXFx1MDAzZW9wdGlvbnNfbGVuO1xcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmM6NDg1OlxcdFxcdGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KGVuY19vcHQtXFx1MDAzZWRhdGEsIGluZm8pO1xcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMtNDg2LVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MjY3PXN0YXRpYyBpbnQgZXJzcGFuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdG5sX3B0a19pbmZvICp0cGksXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0zNDQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHNpemVvZigqZXJzaGRyKSk7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MzQ1OlxcdFxcdFxcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhcXHUwMDI2dHVuX2RzdC1cXHUwMDNldS50dW5faW5mbyk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMzQ2LVxcdFxcdFxcdG1kLVxcdTAwM2V2ZXJzaW9uID0gdmVyO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9NTQwPXN0YXRpYyB2b2lkIGVyc3Bhbl9mYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy01NjItXFx0XFx0Z290byBlcnJfZnJlZV9za2I7XFxubmV0L2lwdjQvaXBfZ3JlLmM6NTYzOlxcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNTY0LVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz0xNDI9c3RydWN0IG1ldGFkYXRhX2RzdCAqaXB0dW5uZWxfbWV0YWRhdGFfcmVwbHkoc3RydWN0IG1ldGFkYXRhX2RzdCAqbWQsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTE2Ni1cXHRkc3QtXFx1MDAzZW1vZGUgPSBzcmMtXFx1MDAzZW1vZGUgfCBJUF9UVU5ORUxfSU5GT19UWDtcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjE2NzpcXHRpcF90dW5uZWxfaW5mb19vcHRzX3NldChkc3QsIGlwX3R1bm5lbF9pbmZvX29wdHMoc3JjKSxcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTE2OC1cXHRcXHRcXHRcXHRzcmMtXFx1MDAzZW9wdGlvbnNfbGVuLCB0dW5fZmxhZ3MpO1xcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz01MDU9c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0c19nZW5ldmUoc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNTI3LVxcdGlmIChpbmZvKSB7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo1Mjg6XFx0XFx0c3RydWN0IGdlbmV2ZV9vcHQgKm9wdCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgKyBvcHRzX2xlbjtcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTUyOS1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9NTQyPXN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfdnhsYW4oc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNTU4LVxcdFxcdHN0cnVjdCB2eGxhbl9tZXRhZGF0YSAqbWQgPVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6NTU5OlxcdFxcdFxcdGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgKyBvcHRzX2xlbjtcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTU2MC1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9NTcwPXN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfZXJzcGFuKHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTU5OS1cXHRcXHRzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhICptZCA9XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo2MDA6XFx0XFx0XFx0aXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSArIG9wdHNfbGVuO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNjAxLVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz03NzI9c3RhdGljIGludCBpcF90dW5fZmlsbF9lbmNhcF9vcHRzX2dlbmV2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy03ODMtXFx0d2hpbGUgKHR1bl9pbmZvLVxcdTAwM2VvcHRpb25zX2xlbiBcXHUwMDNlIG9mZnNldCkge1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6Nzg0OlxcdFxcdG9wdCA9IGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pICsgb2Zmc2V0O1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNzg1LVxcdFxcdGlmIChubGFfcHV0X2JlMTYoc2tiLCBMV1RVTk5FTF9JUF9PUFRfR0VORVZFX0NMQVNTLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz04MDA9c3RhdGljIGludCBpcF90dW5fZmlsbF9lbmNhcF9vcHRzX3Z4bGFuKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTgwOS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjgxMDpcXHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtODExLVxcdGlmIChubGFfcHV0X3UzMihza2IsIExXVFVOTkVMX0lQX09QVF9WWExBTl9HQlAsIG1kLVxcdTAwM2VnYnApKSB7XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTgyMD1zdGF0aWMgaW50IGlwX3R1bl9maWxsX2VuY2FwX29wdHNfZXJzcGFuKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTgyOS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjgzMDpcXHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtODMxLVxcdGlmIChubGFfcHV0X3U4KHNrYiwgTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9WRVIsIG1kLVxcdTAwM2V2ZXJzaW9uKSlcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9ODk5PXN0YXRpYyBpbnQgaXBfdHVuX29wdHNfbmxzaXplKHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTEyLVxcdFxcdHdoaWxlIChpbmZvLVxcdTAwM2VvcHRpb25zX2xlbiBcXHUwMDNlIG9mZnNldCkge1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTEzOlxcdFxcdFxcdG9wdCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgKyBvZmZzZXQ7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05MTQtXFx0XFx0XFx0b3B0X2xlbiArPSBubGFfdG90YWxfc2l6ZSgyKVxcdC8qIE9QVF9HRU5FVkVfQ0xBU1MgKi9cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTIzLVxcdH0gZWxzZSBpZiAodGVzdF9iaXQoSVBfVFVOTkVMX0VSU1BBTl9PUFRfQklULCBpbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzKSkge1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTI0OlxcdFxcdHN0cnVjdCBlcnNwYW5fbWV0YWRhdGEgKm1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTkyNS1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9OTUwPXN0YXRpYyBpbnQgaXBfdHVuX2NtcF9lbmNhcChzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmEsIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYilcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTU3LVxcdCAgICAgICBpbmZvX2EtXFx1MDAzZW9wdGlvbnNfbGVuICE9IGluZm9fYi1cXHUwMDNlb3B0aW9uc19sZW4gfHxcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjk1ODpcXHQgICAgICAgbWVtY21wKGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mb19hKSxcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjk1OTpcXHRcXHQgICAgICBpcF90dW5uZWxfaW5mb19vcHRzKGluZm9fYiksIGluZm9fYS1cXHUwMDNlb3B0aW9uc19sZW4pO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTYwLX1cXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz00OTA9c3RhdGljIGludCBpcDZlcnNwYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtNTQ5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzaXplb2YoKmVyc2hkcikpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYzo1NTA6XFx0XFx0XFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy01NTEtXFx0XFx0XFx0bWQtXFx1MDAzZXZlcnNpb24gPSB2ZXI7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9OTIxPXN0YXRpYyBuZXRkZXZfdHhfdCBpcDZlcnNwYW5fdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy05OTktXFx0XFx0XFx0Z290byB0eF9lcnI7XFxubmV0L2lwdjYvaXA2X2dyZS5jOjEwMDA6XFx0XFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTAwMS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jPTQxOT1zdGF0aWMgaW50IG5mdF90dW5uZWxfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jLTQ5NS0jZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL25mdF90dW5uZWwuYzo0OTY6XFx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoXFx1MDAyNm1kLVxcdTAwM2V1LnR1bl9pbmZvLCBcXHUwMDI2cHJpdi1cXHUwMDNlb3B0cy51LCBwcml2LVxcdTAwM2VvcHRzLmxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF90dW5uZWwuYy00OTctXFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlb3B0cy5mbGFncyk7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTEwMDA9aW50IG92c19mbG93X2tleV9leHRyYWN0KGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm8sXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTEwMTktXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoxMDIwOlxcdFxcdFxcdGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KFRVTl9NRVRBREFUQV9PUFRTKGtleSwgdHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuKSxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTEwMjEtXFx0XFx0XFx0XFx0XFx0XFx0dHVuX2luZm8pO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTk3OT1pbnQgb3ZzX25sYV9wdXRfdHVubmVsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy05ODItXFx0cmV0dXJuIF9faXBfdHVuX3RvX25sYXR0cihza2IsIFxcdTAwMjZ0dW5faW5mby1cXHUwMDNla2V5LFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzo5ODM6XFx0XFx0XFx0XFx0ICBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKSxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtOTg0LVxcdFxcdFxcdFxcdCAgdHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTI4MDA9c3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMjg3Mi1cXHQgKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM6Mjg3MzpcXHRpcF90dW5uZWxfaW5mb19vcHRzX3NldCh0dW5faW5mbyxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMjg3NC1cXHRcXHRcXHRcXHRUVU5fTUVUQURBVEFfT1BUUyhcXHUwMDI2a2V5LCBrZXkudHVuX29wdHNfbGVuKSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYz0zODAyPXN0YXRpYyBpbnQgc2V0X2FjdGlvbl90b19hdHRyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmEsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMzgxOC1cXHRcXHRlcnIgPSAgaXBfdHVuX3RvX25sYXR0cihza2IsIFxcdTAwMjZ0dW5faW5mby1cXHUwMDNla2V5LFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzozODE5OlxcdFxcdFxcdFxcdFxcdGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zODIwLVxcdFxcdFxcdFxcdFxcdHR1bl9pbmZvLVxcdTAwM2VvcHRpb25zX2xlbixcXG4tLVxcbm5ldC9wc2FtcGxlL3BzYW1wbGUuYz0yMTY9c3RhdGljIGludCBfX3BzYW1wbGVfaXBfdHVuX3RvX25sYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3BzYW1wbGUvcHNhbXBsZS5jLTIxOS1cXHR1bnNpZ25lZCBzaG9ydCB0dW5fcHJvdG8gPSBpcF90dW5uZWxfaW5mb19hZih0dW5faW5mbyk7XFxubmV0L3BzYW1wbGUvcHNhbXBsZS5jOjIyMDpcXHRjb25zdCB2b2lkICp0dW5fb3B0cyA9IGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pO1xcbm5ldC9wc2FtcGxlL3BzYW1wbGUuYy0yMjEtXFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9rZXkgKnR1bl9rZXkgPSBcXHUwMDI2dHVuX2luZm8tXFx1MDAzZWtleTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jPTI5Nj1zdGF0aWMgaW50IHR1bm5lbF9rZXlfb3B0c19zZXQoc3RydWN0IG5sYXR0ciAqbmxhLCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy0zMDMtXFx0XFx0X19zZXRfYml0KElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVCwgaW5mby1cXHUwMDNla2V5LnR1bl9mbGFncyk7XFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6MzA0OlxcdFxcdHJldHVybiB0dW5uZWxfa2V5X2NvcHlfb3B0cyhubGEsIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyksXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtMzA1LVxcdFxcdFxcdFxcdFxcdCAgICBvcHRzX2xlbiwgZXh0YWNrKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMxMS1cXHRcXHRfX3NldF9iaXQoSVBfVFVOTkVMX1ZYTEFOX09QVF9CSVQsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpO1xcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjMxMjpcXHRcXHRyZXR1cm4gdHVubmVsX2tleV9jb3B5X29wdHMobmxhLCBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pLFxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMxMy1cXHRcXHRcXHRcXHRcXHQgICAgb3B0c19sZW4sIGV4dGFjayk7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy0zMTktXFx0XFx0X19zZXRfYml0KElQX1RVTk5FTF9FUlNQQU5fT1BUX0JJVCwgaW5mby1cXHUwMDNla2V5LnR1bl9mbGFncyk7XFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6MzIwOlxcdFxcdHJldHVybiB0dW5uZWxfa2V5X2NvcHlfb3B0cyhubGEsIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyksXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtMzIxLVxcdFxcdFxcdFxcdFxcdCAgICBvcHRzX2xlbiwgZXh0YWNrKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jPTU3Nj1zdGF0aWMgaW50IHR1bm5lbF9rZXlfZ2VuZXZlX29wdHNfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtNTc4LXtcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYzo1Nzk6XFx0Y29uc3QgdTggKnNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7XFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtNTgwLVxcdGludCBsZW4gPSBpbmZvLVxcdTAwM2VvcHRpb25zX2xlbjtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jPTYwOD1zdGF0aWMgaW50IHR1bm5lbF9rZXlfdnhsYW5fb3B0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy02MTAte1xcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjYxMTpcXHRjb25zdCBzdHJ1Y3QgdnhsYW5fbWV0YWRhdGEgKm1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy02MTItXFx0c3RydWN0IG5sYXR0ciAqc3RhcnQ7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYz02Mjc9c3RhdGljIGludCB0dW5uZWxfa2V5X2Vyc3Bhbl9vcHRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTYyOS17XFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6NjMwOlxcdGNvbnN0IHN0cnVjdCBlcnNwYW5fbWV0YWRhdGEgKm1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy02MzEtXFx0c3RydWN0IG5sYXR0ciAqc3RhcnQ7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYz04Mzk9dHVubmVsX2tleV9nZW5ldmVfb3B0c19maWxsX3NpemUoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTg0MC17XFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6ODQxOlxcdGNvbnN0IHU4ICpzcmMgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTg0Mi1cXHRpbnQgbGVuID0gaW5mby1cXHUwMDNlb3B0aW9uc19sZW47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjUxLjI2MzM0ODE1N1oiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzU4MjA2ODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGx3dHVubmVsX3N0YXRlX2FsbG9jYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgbHd0dW5uZWxfc3RhdGVfYWxsb2NgLiBNeSBwcmltYXJ5IGNvbmNlcm4gcmlnaHQgbm93IGlzIHRoZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiBob3cgdGhleSdyZSBoYW5kbGluZyBhbGxvY2F0aW9uIOKAkyBhcmUgdGhleSB6ZXJvaW5nIHRoZSBtZW1vcnksIHVzaW5nIGBtZW1zZXRgLCBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBpcyBjcnVjaWFsOyBpdCBpbXBhY3RzIHNlY3VyaXR5LCBwZXJmb3JtYW5jZSwgYW5kIG92ZXJhbGwgc3RhYmlsaXR5LiBJIG5lZWQgdG8ga25vdyBpZiB3ZSdyZSBzdGFydGluZyB3aXRoIGEgY2xlYW4gc2xhdGUgb3IgaWYgdGhlcmUncyBwb3RlbnRpYWwgZm9yIHJlc2lkdWFsIGRhdGEgaXNzdWVzLiBMZXQncyBzZWUgaG93IHRoZXkgZG8gaXQuIEknbSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWNzIG9mIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2NjksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzo1My4wMjE1NTc2NTlaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mzc3ODE1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHd0dW5uZWxfc3RhdGVfYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0xMjk9aW50IGx3dHVubmVsX2dldF9lbmNhcF9zaXplKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpO1xcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmg6MTMwOnN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0dW5uZWxfc3RhdGVfYWxsb2MoaW50IGhkcl9sZW4pO1xcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMTMxLWludCBsd3R1bm5lbF9jbXBfZW5jYXAoc3RydWN0IGx3dHVubmVsX3N0YXRlICphLCBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmIpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0yMzU9c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfZ2V0X2VuY2FwX3NpemUoc3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3RzdGF0ZSlcXG4tLVxcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMjM5LVxcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmg6MjQwOnN0YXRpYyBpbmxpbmUgc3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3R1bm5lbF9zdGF0ZV9hbGxvYyhpbnQgaGRyX2xlbilcXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oLTI0MS17XFxuLS1cXG5uZXQvY29yZS9sd3RfYnBmLmM9MzgzPXN0YXRpYyBpbnQgYnBmX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbi0tXFxubmV0L2NvcmUvbHd0X2JwZi5jLTQwMy1cXG5uZXQvY29yZS9sd3RfYnBmLmM6NDA0OlxcdG5ld3RzID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCpicGYpKTtcXG5uZXQvY29yZS9sd3RfYnBmLmMtNDA1LVxcdGlmICghbmV3dHMpXFxuLS1cXG5uZXQvY29yZS9sd3R1bm5lbC5jPTMzPXN0YXRpYyBjb25zdCBjaGFyICpsd3R1bm5lbF9lbmNhcF9zdHIoZW51bSBsd3R1bm5lbF9lbmNhcF90eXBlcyBlbmNhcF90eXBlKVxcbi0tXFxubmV0L2NvcmUvbHd0dW5uZWwuYy02OC1cXG5uZXQvY29yZS9sd3R1bm5lbC5jOjY5OnN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0dW5uZWxfc3RhdGVfYWxsb2MoaW50IGVuY2FwX2xlbilcXG5uZXQvY29yZS9sd3R1bm5lbC5jLTcwLXtcXG4tLVxcbm5ldC9jb3JlL2x3dHVubmVsLmMtNzYtfVxcbm5ldC9jb3JlL2x3dHVubmVsLmM6Nzc6RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfc3RhdGVfYWxsb2MpO1xcbm5ldC9jb3JlL2x3dHVubmVsLmMtNzgtXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTY4OD1zdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTcwNi1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjcwNzpcXHRuZXdfc3RhdGUgPSBsd3R1bm5lbF9zdGF0ZV9hbGxvYyhzaXplb2YoKnR1bl9pbmZvKSArIG9wdF9sZW4pO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNzA4LVxcdGlmICghbmV3X3N0YXRlKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz05ODI9c3RhdGljIGludCBpcDZfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTAwMC1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjEwMDE6XFx0bmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCp0dW5faW5mbykgKyBvcHRfbGVuKTtcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTEwMDItXFx0aWYgKCFuZXdfc3RhdGUpXFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jPTEzNT1zdGF0aWMgaW50IGlsYV9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMjI1LVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6MjI2OlxcdG5ld3RzID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCppbHd0KSk7XFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0yMjctXFx0aWYgKCFuZXd0cylcXG4tLVxcbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmM9OTk9c3RhdGljIGludCBpb2FtNl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmMtMTYzLVxcdGxlbl9hbGlnbmVkID0gQUxJR04odHJhY2UtXFx1MDAzZXJlbWxlbiAqIDQsIDgpO1xcbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmM6MTY0OlxcdGx3dCA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHNpemVvZigqaWx3dCkgKyBsZW5fYWxpZ25lZCk7XFxubmV0L2lwdjYvaW9hbTZfaXB0dW5uZWwuYy0xNjUtXFx0aWYgKCFsd3QpXFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz02Nz1zdGF0aWMgaW50IHJwbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTk4LVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjk5OlxcdG5ld3RzID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc3JoX2xlbiArIHNpemVvZigqcmx3dCkpO1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTEwMC1cXHRpZiAoIW5ld3RzKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTc0Nz1zdGF0aWMgaW50IHNlZzZfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtODA3LVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYzo4MDg6XFx0bmV3dHMgPSBsd3R1bm5lbF9zdGF0ZV9hbGxvYyh0dW5pbmZvX2xlbiArIHNpemVvZigqc2x3dCkpO1xcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy04MDktXFx0aWYgKCFuZXd0cylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNTE3PXN0YXRpYyBpbnQgc2VnNl9sb2NhbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNTM4LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNTM5OlxcdG5ld3RzID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCpzbHd0KSk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI1NDAtXFx0aWYgKCFuZXd0cylcXG4tLVxcbm5ldC9tcGxzL21wbHNfaXB0dW5uZWwuYz0xNjM9c3RhdGljIGludCBtcGxzX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbi0tXFxubmV0L21wbHMvbXBsc19pcHR1bm5lbC5jLTE4OC1cXG5uZXQvbXBscy9tcGxzX2lwdHVubmVsLmM6MTg5OlxcdG5ld3RzID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc3RydWN0X3NpemUodHVuX2VuY2FwX2luZm8sIGxhYmVsLFxcbm5ldC9tcGxzL21wbHNfaXB0dW5uZWwuYy0xOTAtXFx0XFx0XFx0XFx0XFx0XFx0IG5fbGFiZWxzKSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM9NzM9c3RhdGljIGludCB4ZnJtaV9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy05MS1cXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM6OTI6XFx0bmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCppbmZvKSk7XFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTkzLVxcdGlmICghbmV3X3N0YXRlKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjU0LjU1OTM0NDQzNVoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTA4ODMwMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHBlcnNwZWN0aXZlIG9uIHdoYXQgd2UncmUgbG9va2luZyBhdDpcblxuKipEaXZpbmcgaW50byB0aGUgTFdUdW5uZWwgQ29kZSoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZywgbGV0J3MgY3JhY2sgb3BlbiBgbmV0L2NvcmUvbHd0dW5uZWwuY2AgYW5kIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgNjkuIEknbSBhc3N1bWluZyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgbG9naWMgb2YgTGlnaHR3ZWlnaHQgVHVubmVsaW5nLCBhbmQgdGhhdCBsaW5lIG1pZ2h0IGJlIGEgY3J1Y2lhbCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGRhdGEgc3RydWN0dXJlLCBvciBzb21lIGNyaXRpY2FsIGNvbmRpdGlvbmFsIGluIHRoZSB0dW5uZWwgc2V0dXAgb3IgZGF0YSBwYXRoLiBNeSBtaW5kIGlzIGFscmVhZHkgc2tldGNoaW5nIG91dCB0aGUgcG90ZW50aWFsIGFyZWFzOiBpdCBjb3VsZCBiZSByZWxhdGVkIHRvIGVuY2Fwc3VsYXRpb24sIGRlY2Fwc3VsYXRpb24sIGhlYWRlciBtYW5pcHVsYXRpb24sIGZsb3cgY29udHJvbCwgb3IgZXZlbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIHR1bm5lbCBtb2R1bGUuIERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgdGhhdCBsaW5lIG51bWJlciBtaWdodCBnaXZlIHVzIGluZm9ybWF0aW9uIG9uIHRoZSB0dW5uZWwgZHJpdmVyIGl0c2VsZiwgaXRzIGludGVyYWN0aW9uIHdpdGggb3RoZXIga2VybmVsIGNvbXBvbmVudHMgbGlrZSB0aGUgcm91dGluZyBzdWJzeXN0ZW0gb3IgdGhlIG5ldHdvcmsgc3RhY2ssIG9yIHRoZSBhY3R1YWwgZGF0YSBwcm9jZXNzaW5nIGhhcHBlbmluZyB3aXRoaW4gdGhlIHR1bm5lbC4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NDIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzo1Ni42NjgxNzY4NjFaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbHd0dW5uZWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NTpcXHR9XFxuICA2NjpcXHRcXG4gIDY3OlxcdCNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqL1xcbiAgNjg6XFx0XFxuICA2OTpcXHRzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHVubmVsX3N0YXRlX2FsbG9jKGludCBlbmNhcF9sZW4pXFxuICA3MDpcXHR7XFxuICA3MTpcXHRcXHRzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3cztcXG4gIDcyOlxcdFxcbiAgNzM6XFx0XFx0bHdzID0ga3phbGxvYyhzaXplb2YoKmx3cykgKyBlbmNhcF9sZW4sIEdGUF9BVE9NSUMpO1xcbiAgNzQ6XFx0XFxuICA3NTpcXHRcXHRyZXR1cm4gbHdzO1xcbiAgNzY6XFx0fVxcbiAgNzc6XFx0RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfc3RhdGVfYWxsb2MpO1xcbiAgNzg6XFx0XFxuICA3OTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBfX3JjdSAqXFxuICA4MDpcXHRcXHRcXHRsd3R1bl9lbmNhcHNbTFdUVU5ORUxfRU5DQVBfTUFYICsgMV0gX19yZWFkX21vc3RseTtcXG4gIDgxOlxcdFxcbiAgODI6XFx0aW50IGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyAqb3BzLFxcbiAgODM6XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG51bSlcXG4gIDg0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjM6NTYuNjY4MjQ3MDgxWiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxMTA4ODUyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgUGFyYW1ldGVyIFVzYWdlKipcblxuT2theSwgc28gYGx3dHVubmVsX3N0YXRlX2FsbG9jYCBpcyB1c2luZyBga3phbGxvY2AuIFRoYXQgbWVhbnMgdGhlIHdob2xlIGJsb2NrIG9mIG1lbW9yeSBJJ20gZ2V0dGluZyBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCBpbmNsdWRpbmcgYGVuY2FwX2xlbmAuIFRoaXMgaW5jbHVkZXMgdGhlIGB0dW5faW5mb2Agc3RydWN0IGFuZCB0aGF0IHRyYWlsaW5nIG9wdGlvbnMgYnVmZmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzLCBzcGVjaWZpY2FsbHksIHdoeSB0aGlzIHBhdGNoIHdhcyBtYWRlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBnaXQgbG9nLCBzZWUgaWYgSSBjYW4gZmluZCBjb250ZXh0IGFyb3VuZCB0aGUgY2hhbmdlLCBlc3BlY2lhbGx5IGxvb2tpbmcgYXQgdGhlIGBvcHRpb25zX2xlbmAgZmllbGQuIEknbSB3b25kZXJpbmcgd2h5IGl0IHdhcyBtb3ZlZCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgaXBfdHVuX3NldF9vcHRzYCBmcm9tICphZnRlciogdGhhdCBjYWxsLlxuXG5IbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcsIGBpcF90dW5fYnVpbGRfc3RhdGVgIG1vdmVkIGB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47YC4gSSd2ZSBnb3QgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBoZXJlLiBEb2VzIGBpcF90dW5fc2V0X29wdHNgIGl0c2VsZiBhY3R1YWxseSB1c2UgYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuYD8gVGltZSB0byBkb3VibGUtY2hlY2sgdGhhdCBmdW5jdGlvbiwgbWF5YmUgdGhlcmUncyBzb21ldGhpbmcgSSBtaXNzZWQuIE9yLCBwZXJoYXBzIHNvbWV0aGluZyAqY2FsbGVkKiBmcm9tIHdpdGhpbiBgaXBfdHVuX3NldF9vcHRzYCBpcyB0aGUgY3VscHJpdC4gQWx0ZXJuYXRpdmVseSwgaXMgYW55dGhpbmcgZWxzZSBpbiB0aGUgY29kZSBiYXNlIG1ha2luZyB1c2Ugb2YgdGhlIGBvcHRpb25zX2xlbmAgZmllbGQ/IFRvIGJlIHN1cmUsIEknbGwgcmV2aWV3IGdpdCBjb21taXQgaGlzdG9yeSBhbmQgZG8gYSBncmVwIGZvciBcIm9wdGlvbnNfbGVuXCIgd2l0aGluIGBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jYCB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwOTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzo1OS43NzkxMzQ4MThaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzMxNDQyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvcHRpb25zX2xlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9MTQyPXN0cnVjdCBtZXRhZGF0YV9kc3QgKmlwdHVubmVsX21ldGFkYXRhX3JlcGx5KHN0cnVjdCBtZXRhZGF0YV9kc3QgKm1kLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xNTMtXFx0c3JjID0gXFx1MDAyNm1kLVxcdTAwM2V1LnR1bl9pbmZvO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6MTU0OlxcdHJlcyA9IG1ldGFkYXRhX2RzdF9hbGxvYyhzcmMtXFx1MDAzZW9wdGlvbnNfbGVuLCBNRVRBREFUQV9JUF9UVU5ORUwsIGZsYWdzKTtcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTE1NS1cXHRpZiAoIXJlcylcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTY3LVxcdGlwX3R1bm5lbF9pbmZvX29wdHNfc2V0KGRzdCwgaXBfdHVubmVsX2luZm9fb3B0cyhzcmMpLFxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6MTY4OlxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlb3B0aW9uc19sZW4sIHR1bl9mbGFncyk7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xNjktXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTY4OD1zdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTcxMy1cXHR0dW5faW5mbyA9IGx3dF90dW5faW5mbyhuZXdfc3RhdGUpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6NzE0OlxcdHR1bl9pbmZvLVxcdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy03MTUtXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTc3Mj1zdGF0aWMgaW50IGlwX3R1bl9maWxsX2VuY2FwX29wdHNfZ2VuZXZlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTc4Mi1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjc4MzpcXHR3aGlsZSAodHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuIFxcdTAwM2Ugb2Zmc2V0KSB7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy03ODQtXFx0XFx0b3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbykgKyBvZmZzZXQ7XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTg5OT1zdGF0aWMgaW50IGlwX3R1bl9vcHRzX25sc2l6ZShzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTkxMS1cXHRcXHRvcHRfbGVuICs9IG5sYV90b3RhbF9zaXplKDApO1xcdC8qIExXVFVOTkVMX0lQX09QVFNfR0VORVZFICovXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo5MTI6XFx0XFx0d2hpbGUgKGluZm8tXFx1MDAzZW9wdGlvbnNfbGVuIFxcdTAwM2Ugb2Zmc2V0KSB7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05MTMtXFx0XFx0XFx0b3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSArIG9mZnNldDtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9OTUwPXN0YXRpYyBpbnQgaXBfdHVuX2NtcF9lbmNhcChzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmEsIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYilcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTU2LVxcdCAgICAgICBpbmZvX2EtXFx1MDAzZW1vZGUgIT0gaW5mb19iLVxcdTAwM2Vtb2RlIHx8XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo5NTc6XFx0ICAgICAgIGluZm9fYS1cXHUwMDNlb3B0aW9uc19sZW4gIT0gaW5mb19iLVxcdTAwM2VvcHRpb25zX2xlbiB8fFxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTU4LVxcdCAgICAgICBtZW1jbXAoaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvX2EpLFxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTU5OlxcdFxcdCAgICAgIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mb19iKSwgaW5mb19hLVxcdTAwM2VvcHRpb25zX2xlbik7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05NjAtfVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz05ODI9c3RhdGljIGludCBpcDZfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTAwNy1cXHR0dW5faW5mbyA9IGx3dF90dW5faW5mbyhuZXdfc3RhdGUpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6MTAwODpcXHR0dW5faW5mby1cXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTAwOS1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9MTA4OT12b2lkIF9faW5pdCBpcF90dW5uZWxfY29yZV9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTEwOTEtXFx0LyogSWYgeW91IGxhbmQgaGVyZSwgbWFrZSBzdXJlIHdoZXRoZXIgaW5jcmVhc2luZyBpcF90dW5uZWxfaW5mbydzXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxMDkyOlxcdCAqIG9wdGlvbnNfbGVuIGlzIGEgcmVhc29uYWJsZSBjaG9pY2Ugd2l0aCBpdHMgdXNhZ2UgaW4gZnJvbnQgZW5kc1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTA5My1cXHQgKiAoZi5lLiwgaXQncyBwYXJ0IG9mIGZsb3cga2V5cywgZXRjKS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjQ6MDAuMjEyNDU3NTUyWiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NTQ1NTQ2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBpcF90dW5uZWxfaW5mb19vcHRzYCBNYWNybyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKWAgbWFjcm8uIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIHRoaXMgSVAgdHVubmVsaW5nIGltcGxlbWVudGF0aW9uLiBXaGVyZSdzIHRoZSBkZWZpbml0aW9uPyBSaWdodCwgaXQncyBwcm9iYWJseSBpbiBgaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oYC4gTGV0IG1lIGdvIHB1bGwgdGhhdCB1cCBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGJlaW5nIGRvbmUgaW4gdGhlcmUuIFRoaXMgbWFjcm8gcHJvYmFibHkgZXhwYW5kcyB0byBhIGNvbWJpbmF0aW9uIG9mIHN0cnVjdCBtZW1iZXIgYWNjZXNzZXMgYW5kIHR5cGUgY2FzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIG91dHB1dCB0byBmdWxseSBncmFzcCB0aGUgaW5mb3JtYXRpb24gYmVpbmcgaGFuZGxlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmLCB0aGVyZSBhcmUgc28gbWFueSBvZiB0aGVzZSBtYWNyb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODAzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjQ6MDIuMTY3MDE1MDU3WiIsIlNlcSI6NjUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFxuIDEwMTpcXHQvKiBNYXhpbXVtIHR1bm5lbCBvcHRpb25zIGxlbmd0aC4gKi9cXG4gMTAyOlxcdCNkZWZpbmUgSVBfVFVOTkVMX09QVFNfTUFYXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxMDM6XFx0XFx0R0VOTUFTSygoc2l6ZW9mX2ZpZWxkKHN0cnVjdCBpcF90dW5uZWxfaW5mbyxcXHRcXHRcXFxcXFxuIDEwNDpcXHRcXHRcXHRcXHQgICAgICBvcHRpb25zX2xlbikgKiBCSVRTX1BFUl9CWVRFKSAtIDEsIDApXFxuIDEwNTpcXHRcXG4gMTA2OlxcdCNkZWZpbmUgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKVxcdFxcdFxcdFxcdFxcXFxcXG4gMTA3OlxcdFxcdF9HZW5lcmljKGluZm8sXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxMDg6XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqIDogKChjb25zdCB2b2lkICopKGluZm8pLVxcdTAwM2VvcHRpb25zKSxcXFxcXFxuIDEwOTpcXHRcXHRcXHQgc3RydWN0IGlwX3R1bm5lbF9pbmZvICogOiAoKHZvaWQgKikoaW5mbyktXFx1MDAzZW9wdGlvbnMpXFxcXFxcbiAxMTA6XFx0XFx0KVxcbiAxMTE6XFx0XFxuIDExMjpcXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8ge1xcbiAxMTM6XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9rZXlcXHRrZXk7XFxuIDExNDpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwXFx0ZW5jYXA7XFxuIDExNTpcXHQjaWZkZWYgQ09ORklHX0RTVF9DQUNIRVxcbiAxMTY6XFx0XFx0c3RydWN0IGRzdF9jYWNoZVxcdGRzdF9jYWNoZTtcXG4gMTE3OlxcdCNlbmRpZlxcbiAxMTg6XFx0XFx0dThcXHRcXHRcXHRvcHRpb25zX2xlbjtcXG4gMTE5OlxcdFxcdHU4XFx0XFx0XFx0bW9kZTtcXG4gMTIwOlxcdFxcdHU4XFx0XFx0XFx0b3B0aW9uc1tdIF9fYWxpZ25lZF9sYXJnZXN0IF9fY291bnRlZF9ieShvcHRpb25zX2xlbik7XFxuIDEyMTpcXHR9O1xcbiAxMjI6XFx0XFxuIDEyMzpcXHQvKiA2cmQgcHJlZml4L3JlbGF5IGluZm9ybWF0aW9uICovXFxuIDEyNDpcXHQjaWZkZWYgQ09ORklHX0lQVjZfU0lUXzZSRFxcbiAxMjU6XFx0c3RydWN0IGlwX3R1bm5lbF82cmRfcGFybSB7XFxuIDEyNjpcXHRcXHRzdHJ1Y3QgaW42X2FkZHJcXHRcXHRwcmVmaXg7XFxuIDEyNzpcXHRcXHRfX2JlMzJcXHRcXHRcXHRyZWxheV9wcmVmaXg7XFxuIDEyODpcXHRcXHR1MTZcXHRcXHRcXHRwcmVmaXhsZW47XFxuIDEyOTpcXHRcXHR1MTZcXHRcXHRcXHRyZWxheV9wcmVmaXhsZW47XFxuIDEzMDpcXHRcXHRzdHJ1Y3QgcmN1X2hlYWRcXHRcXHRyY3U7XFxuIDEzMTpcXHR9O1xcbiAxMzI6XFx0I2VuZGlmXFxuIDEzMzpcXHRcXG4gMTM0OlxcdHN0cnVjdCBpcF90dW5uZWxfcHJsX2VudHJ5IHtcXG4gMTM1OlxcdFxcdHN0cnVjdCBpcF90dW5uZWxfcHJsX2VudHJ5IF9fcmN1ICpuZXh0O1xcbiAxMzY6XFx0XFx0X19iZTMyXFx0XFx0XFx0XFx0YWRkcjtcXG4gMTM3OlxcdFxcdHUxNlxcdFxcdFxcdFxcdGZsYWdzO1xcbiAxMzg6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0XFx0cmN1X2hlYWQ7XFxuIDEzOTpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyNDowMi4xNjcxMDIxMzdaIiwiU2VxIjo2NiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzQ4ODg5MDE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBaGEhIEEgQm91bmRzIFZpb2xhdGlvbiBGaXghKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgKmJvb20hKiBMaW5lIDEyMCBqdXN0IGp1bXBlZCBvdXQgYXQgbWUuIEkgc2VlIHRoYXQgdGhlIGBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pYCBoYXMgYmVlbiBhZGRlZCB0byBgdTggb3B0aW9uc1tdYC4gVGhhdCdzIGludGVyZXN0aW5nLCBiZWNhdXNlIG5vdywgYW55dGltZSBgb3B0aW9uc19sZW5gIGlzIHplcm8sIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciB3aXRoIGEgemVyby1sZW5ndGggYm91bmQuXG5cbkFuZCB0aGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIG9mIHRob3NlIGBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pYCBhY2Nlc3NlcyB3aXRoaW4gdGhlIGBpcF90dW5fcGFyc2Vfb3B0c18qYCBmdW5jdGlvbnMuIEJlZm9yZSB0aGlzIGNoYW5nZSwgd2hlbiBgb3B0aW9uc19sZW5gIHdhcyB6ZXJvICh3aGljaCwgbGV0J3MgYmUgaG9uZXN0LCBpdCB3YXMgaW5pdGlhbGl6ZWQgdG8gd2l0aCBga3phbGxvY2ApLCBhY2Nlc3NpbmcgYGluZm8tXHUwMDNlb3B0aW9uc2Agd291bGQgYmUgYSBzdHJhaWdodC11cCBwb3RlbnRpYWwgYm91bmRzIHZpb2xhdGlvbiEgRXNwZWNpYWxseSBpZiB3ZSBoYXZlIGVpdGhlciBgQ09ORklHX1VCU0FOX0JPVU5EU2AgZW5hYmxlZCwgb3IgYXJlIGNvbXBpbGluZyB3aXRoIENsYW5nJ3MgYm91bmRzIHNhbml0aXplcnMuIFdlJ2Qgc2VlIGEgYmlnLCBmYXQgd2FybmluZyByaWdodCB0aGVyZSBpbiB0aGUgb3V0cHV0IVxuXG5Ob3csIGJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gTGV0J3Mgc2VlIGlmIHRoZSBHaXQgbG9nIGdpdmVzIHVzIGFueSBjbHVlcy4gSSdsbCBzZWFyY2ggZm9yIGNvbW1pdHMgcmVsYXRlZCB0byBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2Agb3IganVzdCBzdGFydCBzZWFyY2hpbmcgZm9yIGNvbW1pdCBtZXNzYWdlcy4gTGV0J3MgZGlnIGludG8gdGhlIGhpc3RvcnkgYW5kIHNlZSB0aGUgb3JpZ2luYWwgaW50ZW50LCBzaGFsbCB3ZT9cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2NTIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyNDowOS42NTU5OTUxNjJaIiwiU2VxIjo2NywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3ODk3NjQ4NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jb3VudGVkX2J5XFxcXChvcHRpb25zX2xlblxcXFwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaD0xMTI9c3RydWN0IGlwX3R1bm5lbF9pbmZvIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMTktXFx0dThcXHRcXHRcXHRtb2RlO1xcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDoxMjA6XFx0dThcXHRcXHRcXHRvcHRpb25zW10gX19hbGlnbmVkX2xhcmdlc3QgX19jb3VudGVkX2J5KG9wdGlvbnNfbGVuKTtcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtMTIxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjI0OjEyLjQ0NTc2ODY2NVoiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzcwMDM0NzAyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pYCBDb21taXQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHRyYWNrIGRvd24gdGhlIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgYF9fY291bnRlZF9ieShvcHRpb25zX2xlbilgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIHNwZWNpZmljIGFkZGl0aW9uLiBJdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoYXQgcHJvYmxlbSBpdCBzb2x2ZXMsIG9yIGV2ZW4gd2hhdCBjb250ZXh0IGl0IGJlbG9uZ3MgaW4uIFdoYXQgZGVzaWduIGRlY2lzaW9ucyBsZWQgdG8gaW5jbHVkaW5nIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eT8gSSB3YW50IHRvIGV4YW1pbmUgdGhlIGNvbW1pdCBtZXNzYWdlLCB0aGUgc3Vycm91bmRpbmcgY29kZSBjaGFuZ2VzLCBhbmQgYW55IHJlbGF0ZWQgaXNzdWVzIG9yIGRpc2N1c3Npb25zLiBXZXJlIHRoZXJlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zPyBSZWZhY3RvcmluZyBnb2Fscz8gSXMgdGhpcyBwYXJ0IG9mIGEgbGFyZ2VyIHBhdHRlcm4gb3Igb3B0aW1pemF0aW9uIHN0cmF0ZWd5IHdpdGhpbiB0aGlzIGNvZGViYXNlPyBHZXR0aW5nIHRoZSBmdWxsIHBpY3R1cmUgaGVyZSBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY29udGV4dC4gSSdtIGhvcGluZyB0aGUgY29tbWl0IG1lc3NhZ2UgaXMgY2xlYXIgYW5kIHdlbGwtd3JpdHRlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzNzMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyNDozMC4xNDYxMTg1MDFaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTk4ODE4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2NvdW50ZWRfYnlcXFxcKG9wdGlvbnNfbGVuXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTExMj1zdHJ1Y3QgaXBfdHVubmVsX2luZm8ge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTExOS1cXHR1OFxcdFxcdFxcdG1vZGU7XFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjEyMDpcXHR1OFxcdFxcdFxcdG9wdGlvbnNbXSBfX2FsaWduZWRfbGFyZ2VzdCBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pO1xcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMjEtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjQ6MzAuMzE2MTE1MTE4WiIsIlNlcSI6NzAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgzNDc3NTk1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHZW5ldmUgT3B0aW9uIFBhcnNpbmcgYW5kIE1lbW9yeSBTYWZldHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgYGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZWAgY29kZS4gVGhlIGNvcmUgaXNzdWUgaXMgdGhlIHBvdGVudGlhbCBmb3IgYSBib3VuZHMgY2hlY2sgZmFpbHVyZSB3aGVuIHdyaXRpbmcgR2VuZXZlIG9wdGlvbnMuIFRoZSBwcm9ibGVtIGFyaXNlcyBiZWNhdXNlIGB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbmAgaXNuJ3Qgc2V0ICpiZWZvcmUqIGBpcF90dW5fc2V0X29wdHMoKWAgaXMgY2FsbGVkLiAgVGhpcyBmdW5jdGlvbiBpcyB3cml0aW5nIHRvIGBpbmZvLVx1MDAzZW9wdGlvbnNgLCB3aGljaCBpcyBlc3NlbnRpYWxseSBhIHJlZ2lvbiBvZiBtZW1vcnksIGJ1dCBiZWNhdXNlIGBvcHRpb25zX2xlbmAgaXMgaW5pdGlhbGx5IHplcm8sIGNvbXBpbGVyIGluc3RydW1lbnRhdGlvbiAoc3BlY2lmaWNhbGx5IGBfX2NvdW50ZWRfYnlgKSBkZXRlY3RzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgb3IgcmVhZC4gTW92aW5nIGB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47YCB1cCBzb2x2ZXMgdGhhdCBieSBtYWtpbmcgdGhlIGxlbmd0aCB2YWxpZCAqYmVmb3JlKiBhbnkgYWNjZXNzIHRvIGBpbmZvLVx1MDAzZW9wdGlvbnNgLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHRoZSBtZW1vcnkgaW1wbGljYXRpb25zLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBtZW1vcnkgc2FuaXRpemVycyBsaWtlIEtNU0FOIGFuZCBLQVNBTi4gIElmIGBpcF90dW5fc2V0X29wdHMoKWAgKmZhaWxzKiwgYG5ld19zdGF0ZWAgKHdoaWNoIGhvbGRzIG91ciBgdHVuX2luZm9gKSBpcyBpbW1lZGlhdGVseSBmcmVlZC4gTm8gb25lIGV2ZXIgcmVhZHMgZnJvbSBpdC4gU28sIGEgZmFpbHVyZSBpcyBzYWZlIGluIHRoaXMgY29udGV4dC5cblxuSWYgYGlwX3R1bl9zZXRfb3B0cygpYCAqc3VjY2VlZHMqLCB3ZSd2ZSB3cml0dGVuIGBvcHRfbGVuYCBieXRlcyBpbnRvIGB0dW5faW5mby1cdTAwM2VvcHRpb25zYC4gIENydWNpYWxseSwgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHVzZXMgYGt6YWxsb2NgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IG1lYW5zIGFsbCB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCBpbmNsdWRpbmcgYG5ld19zdGF0ZWAsIGB0dW5faW5mb2AgaXRzZWxmIGFuZCB0aGUgc3BhY2UgZm9yIHRoZSBvcHRpb25zLiAgVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgdGhlcmVmb3JlIHRoZXJlJ3Mgbm8gd2F5IHRvIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS5cblxuU28sIGRvZXMgdGhpcyBjaGFuZ2UgaW50cm9kdWNlIGFueSAqbmV3KiBtZW1vcnktc2FmZXR5IGlzc3Vlcz8gTm8sIGJlY2F1c2UgdGhlIHdyaXRlIHRvIGBvcHRpb25zYCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGBpcF90dW5fc2V0X29wdHNgIGlzIHJlYWRpbmcgdmFsaWRhdGVkIG5ldGxpbmsgYXR0cmlidXRlcy4gYHR1bl9pbmZvYCBvciBgbmV3X3N0YXRlYCBhcmUgbm90IGJlaW5nIGRpcmVjdGx5IGNvcGllZCB0byB1c2VyIHNwYWNlLiAgV2hlbiBkdW1waW5nIHJvdXRlIGFuZCB0dW5uZWwgaW5mbyAoYHJ0bmxfZmlsbF9pZmluZm9gKSwgYGlwX3R1bl9maWxsX2VuY2FwX2luZm9gIGlzIGNhbGxlZC4gVGhhdCB3b3VsZCBiZSB0aGUgcGxhY2UgdG8gY2hlY2sgYnV0IHRoZSBhbmFseXNpcyBmcm9tIGJlZm9yZSBpcyB2YWxpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3MjksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjQ6MzguNjYzODc3MTA1WiIsIlNlcSI6NzEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzkxODkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF90dW5fZmlsbF9lbmNhcF9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz04NTE9c3RhdGljIGludCBpcF90dW5fZmlsbF9lbmNhcF9vcHRzKHN0cnVjdCBza19idWZmICpza2IsIGludCB0eXBlLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy04NzktXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo4ODA6c3RhdGljIGludCBpcF90dW5fZmlsbF9lbmNhcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy04ODEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz05NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgaXBfdHVuX2x3dF9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTk2NC1cXHQuZGVzdHJveV9zdGF0ZSA9IGlwX3R1bl9kZXN0cm95X3N0YXRlLFxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTY1OlxcdC5maWxsX2VuY2FwID0gaXBfdHVuX2ZpbGxfZW5jYXBfaW5mbyxcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTk2Ni1cXHQuZ2V0X2VuY2FwX3NpemUgPSBpcF90dW5fZW5jYXBfbmxzaXplLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyNDozOC43MTE4MjAyMTJaIiwiU2VxIjo3MiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMyMTgwMzYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgaXBfdHVuX2ZpbGxfZW5jYXBfaW5mb2AqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgaXBfdHVuX2ZpbGxfZW5jYXBfaW5mb2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZW5jYXBzdWxhdGlvbiBsb2dpYyBmb3IgdGhpcyB0dW5uZWwgc2V0dXAuIEknbSBhc3N1bWluZyBpdCBoYW5kbGVzIHRoZSBkZXRhaWxzIHJlcXVpcmVkIHRvIGNvbnN0cnVjdCB0aGUgb3V0ZXIgaGVhZGVyIGZvciBhIHR1bm5lbCBwYWNrZXQuIFNwZWNpZmljYWxseSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSB0aGUgaW5uZXIgcGFja2V0IGRldGFpbHMsIGxpa2VseSB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzZXMgYW5kIG1heWJlIHNvbWUgdHJhbnNwb3J0IGxheWVyIHByb3RvY29sIGluZm9ybWF0aW9uLCBhbmQgdGhlbiBjcmFmdCB0aGUgb3V0ZXIgSVAgaGVhZGVyIHdpdGggdGhlIHR1bm5lbCBlbmRwb2ludHMuIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSB0aGUgdHVubmVsIGtleSAoaWYgYW55KSwgdGhlIHByb3RvY29sIHR5cGUgKGUuZy4sIEdSRSwgSVBJUCwgVlhMQU4pLCBhbmQgYW55IG9wdGlvbnMgdGhhdCBtaWdodCBuZWVkIHRvIGJlIHNldCBpbiB0aGUgb3V0ZXIgaGVhZGVyLiBJJ2xsIGJlIHNjcnV0aW5pemluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBzdGFjaydzIElQIGhlYWRlciBjb25zdHJ1Y3Rpb24gcm91dGluZXMsIGFuZCBpZiB0aGVyZSdzIGFueSBjbGV2ZXJuZXNzIGluIGl0cyBoYW5kbGluZyBvZiBmcmFnbWVudGF0aW9uIG9yIE1UVSBjb25zaWRlcmF0aW9ucy4gVGhlIGdvYWwgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gaG93IHRoZSBlbmNhcHN1bGF0aW9uIHByb2Nlc3MgaXMgb3JjaGVzdHJhdGVkIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NDEwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjQ6NDEuMDMzNjI2ODg1WiIsIlNlcSI6NzMsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3MDpcXHRcXG4gODcxOlxcdFxcdGlmIChlcnIpIHtcXG4gODcyOlxcdFxcdFxcdG5sYV9uZXN0X2NhbmNlbChza2IsIG5lc3QpO1xcbiA4NzM6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gODc0OlxcdFxcdH1cXG4gODc1OlxcdFxcbiA4NzY6XFx0XFx0bmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7XFxuIDg3NzpcXHRcXHRyZXR1cm4gMDtcXG4gODc4OlxcdH1cXG4gODc5OlxcdFxcbiA4ODA6XFx0c3RhdGljIGludCBpcF90dW5fZmlsbF9lbmNhcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuIDg4MTpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpXFxuIDg4MjpcXHR7XFxuIDg4MzpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKGx3dHN0YXRlKTtcXG4gODg0OlxcdFxcbiA4ODU6XFx0XFx0aWYgKG5sYV9wdXRfYmU2NChza2IsIExXVFVOTkVMX0lQX0lELCB0dW5faW5mby1cXHUwMDNla2V5LnR1bl9pZCxcXG4gODg2OlxcdFxcdFxcdFxcdCBMV1RVTk5FTF9JUF9QQUQpIHx8XFxuIDg4NzpcXHRcXHQgICAgbmxhX3B1dF9pbl9hZGRyKHNrYiwgTFdUVU5ORUxfSVBfRFNULCB0dW5faW5mby1cXHUwMDNla2V5LnUuaXB2NC5kc3QpIHx8XFxuIDg4ODpcXHRcXHQgICAgbmxhX3B1dF9pbl9hZGRyKHNrYiwgTFdUVU5ORUxfSVBfU1JDLCB0dW5faW5mby1cXHUwMDNla2V5LnUuaXB2NC5zcmMpIHx8XFxuIDg4OTpcXHRcXHQgICAgbmxhX3B1dF91OChza2IsIExXVFVOTkVMX0lQX1RPUywgdHVuX2luZm8tXFx1MDAzZWtleS50b3MpIHx8XFxuIDg5MDpcXHRcXHQgICAgbmxhX3B1dF91OChza2IsIExXVFVOTkVMX0lQX1RUTCwgdHVuX2luZm8tXFx1MDAzZWtleS50dGwpIHx8XFxuIDg5MTpcXHRcXHQgICAgbmxhX3B1dF9iZTE2KHNrYiwgTFdUVU5ORUxfSVBfRkxBR1MsXFxuIDg5MjpcXHRcXHRcXHRcXHQgaXBfdHVubmVsX2ZsYWdzX3RvX2JlMTYodHVuX2luZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpKSB8fFxcbiA4OTM6XFx0XFx0ICAgIGlwX3R1bl9maWxsX2VuY2FwX29wdHMoc2tiLCBMV1RVTk5FTF9JUF9PUFRTLCB0dW5faW5mbykpXFxuIDg5NDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODk1OlxcdFxcbiA4OTY6XFx0XFx0cmV0dXJuIDA7XFxuIDg5NzpcXHR9XFxuIDg5ODpcXHRcXG4gODk5OlxcdHN0YXRpYyBpbnQgaXBfdHVuX29wdHNfbmxzaXplKHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcXG4gOTAwOlxcdHtcXG4gOTAxOlxcdFxcdGludCBvcHRfbGVuO1xcbiA5MDI6XFx0XFxuIDkwMzpcXHRcXHRpZiAoIWlwX3R1bm5lbF9pc19vcHRpb25zX3ByZXNlbnQoaW5mby1cXHUwMDNla2V5LnR1bl9mbGFncykpXFxuIDkwNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gOTA1OlxcdFxcbiA5MDY6XFx0XFx0b3B0X2xlbiA9IG5sYV90b3RhbF9zaXplKDApO1xcdFxcdC8qIExXVFVOTkVMX0lQX09QVFMgKi9cXG4gOTA3OlxcdFxcdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpKSB7XFxuIDkwODpcXHRcXHRcXHRzdHJ1Y3QgZ2VuZXZlX29wdCAqb3B0O1xcbiA5MDk6XFx0XFx0XFx0aW50IG9mZnNldCA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjI0OjQxLjAzMzc1NTczNVoiLCJTZXEiOjc0LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjQ5OTAxNDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgbHd0dW5uZWxfc3RhdGVgIEFsbG9jYXRpb24gYW5kIFVzYWdlKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgdGhlIGBsd3R1bm5lbF9zdGF0ZWAgbWVtb3J5IGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jKClgLiBUaGlzIG1lYW5zIGl0J3MgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLWluaXRpYWxpemVkLCB3aGljaCBpbW1lZGlhdGVseSBydWxlcyBvdXQgYSB3aG9sZSBjbGFzcyBvZiBwb3RlbnRpYWwgcHJvYmxlbXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cblxuTmV4dCwgSSBvYnNlcnZlIHRoYXQgYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuYCBpcyBiZWluZyBzZXQgKmJlZm9yZSogdGhlIGNhbGwgdG8gYGlwX3R1bl9zZXRfb3B0cygpYC4gVGhlIGludGVyZXN0aW5nIHRoaW5nIGhlcmUgaXMgdGhhdCBldmVuIGlmIGBpcF90dW5fc2V0X29wdHMoKWAgZmFpbHMsIHRoZSBgbmV3X3N0YXRlYCAod2hpY2ggcHJlc3VtYWJseSBjb250YWlucyB0aGUgYHR1bl9pbmZvYCBkYXRhKSBpcyBpbW1lZGlhdGVseSBmcmVlZC4gU28sIHRoZSBzY2VuYXJpbyBkZXNjcmliZWQgaXM6IHRoZSBjb2RlIGVpdGhlciBzZXRzIGBvcHRpb25zX2xlbmAgYW5kIHRoZW4gZmFpbHMsIG9yIHNldHMgYG9wdGlvbnNfbGVuYCBhbmQgdGhlbiBzdWNjZWVkcy4gXG5cblRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBib2lscyBkb3duIHRvIHRoZSAqb3JkZXIqIG9mIHNldHRpbmcgYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuYCByZWxhdGl2ZSB0byB0aGUgY2FsbCB0byBgaXBfdHVuX3NldF9vcHRzKClgLiBCdXQsIGFuZCB0aGlzIGlzIGNydWNpYWwsIGB0dW5faW5mb2AgaXMgYSBsb2NhbCBwb2ludGVyIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBmdW5jdGlvbiwgbm90IHlldCBsaW5rZWQgaW50byBhbnkgcHVibGlzaGVkIGRhdGEgc3RydWN0dXJlcy4gQXMgSSB1bmRlcnN0YW5kIGl0LCBpdCdzIG5vdCBleHBvc2VkIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVsaW1pbmF0ZSBhbnkgcG9zc2liaWxpdHkgb2YgZXh0ZXJuYWwgcmVhZHMuXG5cbkdpdmVuIHRoYXQgYWxsIHRoZSBtZW1vcnkgaW4gYG5ld19zdGF0ZWAgYW5kIGB0dW5faW5mb2AgaXMgemVyby1pbml0aWFsaXplZCB2aWEgYGt6YWxsb2MoKWAsIGFuZCB0aGF0IHRoZSBgdHVuX2luZm9gIGRhdGEgaXMgbG9jYWwgdG8gdGhpcyBhbGxvY2F0aW9uIGFuZCBzZXR1cCBwcm9jZXNzLCBhbmQgdGhhdCB0aGUgb25seSBvYnNlcnZlZCBkaWZmZXJlbmNlIGlzIHNldHRpbmcgYG9wdGlvbnNfbGVuYCBhbmQgcG90ZW50aWFsbHkgZmFpbGluZywgSSBkb24ndCBzZWUgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5JJ2QgbGlrZSB0byBjaGVjayBgaXA2X3R1bl9idWlsZF9zdGF0ZWAgdG9vIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQ4MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjI0OjQ0LjI4MzY2MDE5OVoiLCJTZXEiOjc1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk4MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk4MDpcXHR9O1xcbiA5ODE6XFx0XFxuIDk4MjpcXHRzdGF0aWMgaW50IGlwNl90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbiA5ODM6XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBmYW1pbHksIGNvbnN0IHZvaWQgKmNmZyxcXG4gOTg0OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKip0cyxcXG4gOTg1OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDk4NjpcXHR7XFxuIDk4NzpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltMV1RVTk5FTF9JUDZfTUFYICsgMV07XFxuIDk4ODpcXHRcXHRzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKm5ld19zdGF0ZTtcXG4gOTg5OlxcdFxcdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm87XFxuIDk5MDpcXHRcXHRpbnQgZXJyLCBvcHRfbGVuO1xcbiA5OTE6XFx0XFxuIDk5MjpcXHRcXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIExXVFVOTkVMX0lQNl9NQVgsIGF0dHIsXFxuIDk5MzpcXHRcXHRcXHRcXHRcXHRcXHQgIGlwNl90dW5fcG9saWN5LCBleHRhY2spO1xcbiA5OTQ6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDk5NTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA5OTY6XFx0XFxuIDk5NzpcXHRcXHRvcHRfbGVuID0gaXBfdHVuX2dldF9vcHRsZW4odGJbTFdUVU5ORUxfSVA2X09QVFNdLCBleHRhY2spO1xcbiA5OTg6XFx0XFx0aWYgKG9wdF9sZW4gXFx1MDAzYyAwKVxcbiA5OTk6XFx0XFx0XFx0cmV0dXJuIG9wdF9sZW47XFxuMTAwMDpcXHRcXG4xMDAxOlxcdFxcdG5ld19zdGF0ZSA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHNpemVvZigqdHVuX2luZm8pICsgb3B0X2xlbik7XFxuMTAwMjpcXHRcXHRpZiAoIW5ld19zdGF0ZSlcXG4xMDAzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjEwMDQ6XFx0XFxuMTAwNTpcXHRcXHRuZXdfc3RhdGUtXFx1MDAzZXR5cGUgPSBMV1RVTk5FTF9FTkNBUF9JUDY7XFxuMTAwNjpcXHRcXG4xMDA3OlxcdFxcdHR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKG5ld19zdGF0ZSk7XFxuMTAwODpcXHRcXHR0dW5faW5mby1cXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO1xcbjEwMDk6XFx0XFxuMTAxMDpcXHRcXHRlcnIgPSBpcF90dW5fc2V0X29wdHModGJbTFdUVU5ORUxfSVA2X09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTtcXG4xMDExOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMTAxMjpcXHRcXHRcXHRsd3RzdGF0ZV9mcmVlKG5ld19zdGF0ZSk7XFxuMTAxMzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEwMTQ6XFx0XFx0fVxcbjEwMTU6XFx0XFxuMTAxNjpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVA2X0lEXSlcXG4xMDE3OlxcdFxcdFxcdHR1bl9pbmZvLVxcdTAwM2VrZXkudHVuX2lkID0gbmxhX2dldF9iZTY0KHRiW0xXVFVOTkVMX0lQNl9JRF0pO1xcbjEwMTg6XFx0XFxuMTAxOTpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVA2X0RTVF0pXFxuMTAyMDpcXHRcXHRcXHR0dW5faW5mby1cXHUwMDNla2V5LnUuaXB2Ni5kc3QgPSBubGFfZ2V0X2luNl9hZGRyKHRiW0xXVFVOTkVMX0lQNl9EU1RdKTtcXG4xMDIxOlxcdFxcbjEwMjI6XFx0XFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9TUkNdKVxcbjEwMjM6XFx0XFx0XFx0dHVuX2luZm8tXFx1MDAzZWtleS51LmlwdjYuc3JjID0gbmxhX2dldF9pbjZfYWRkcih0YltMV1RVTk5FTF9JUDZfU1JDXSk7XFxuMTAyNDpcXHRcXG4xMDI1OlxcdFxcdGlmICh0YltMV1RVTk5FTF9JUDZfSE9QTElNSVRdKVxcbjEwMjY6XFx0XFx0XFx0dHVuX2luZm8tXFx1MDAzZWtleS50dGwgPSBubGFfZ2V0X3U4KHRiW0xXVFVOTkVMX0lQNl9IT1BMSU1JVF0pO1xcbjEwMjc6XFx0XFxuMTAyODpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVA2X1RDXSlcXG4xMDI5OlxcdFxcdFxcdHR1bl9pbmZvLVxcdTAwM2VrZXkudG9zID0gbmxhX2dldF91OCh0YltMV1RVTk5FTF9JUDZfVENdKTtcXG4xMDMwOlxcdFxcbjEwMzE6XFx0XFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9GTEFHU10pIHtcXG4xMDMyOlxcdFxcdFxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcXG4xMDMzOlxcdFxcdFxcdF9fYmUxNiBkYXRhO1xcbjEwMzQ6XFx0XFxuMTAzNTpcXHRcXHRcXHRkYXRhID0gbmxhX2dldF9iZTE2KHRiW0xXVFVOTkVMX0lQNl9GTEFHU10pO1xcbjEwMzY6XFx0XFx0XFx0aXBfdHVubmVsX2ZsYWdzX2Zyb21fYmUxNihmbGFncywgZGF0YSk7XFxuMTAzNzpcXHRcXHRcXHRpcF90dW5uZWxfY2xlYXJfb3B0aW9uc19wcmVzZW50KGZsYWdzKTtcXG4xMDM4OlxcdFxcbjEwMzk6XFx0XFx0XFx0aXBfdHVubmVsX2ZsYWdzX29yKHR1bl9pbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzLFxcbjEwNDA6XFx0XFx0XFx0XFx0XFx0ICAgdHVuX2luZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MsIGZsYWdzKTtcXG4xMDQxOlxcdFxcdH1cXG4xMDQyOlxcdFxcbjEwNDM6XFx0XFx0dHVuX2luZm8tXFx1MDAzZW1vZGUgPSBJUF9UVU5ORUxfSU5GT19UWCB8IElQX1RVTk5FTF9JTkZPX0lQVjY7XFxuMTA0NDpcXHRcXG4xMDQ1OlxcdFxcdCp0cyA9IG5ld19zdGF0ZTtcXG4xMDQ2OlxcdFxcbjEwNDc6XFx0XFx0cmV0dXJuIDA7XFxuMTA0ODpcXHR9XFxuMTA0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjQ6NDQuMjgzNzYxNzQ5WiIsIlNlcSI6NzYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUyNDUwNDkxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudCBvZiBJUCBUdW5uZWwgU3RhdGUgQWxsb2NhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCBgaXA2X3R1bl9idWlsZF9zdGF0ZWAgd29ya3MgaW4gYSB2ZXJ5IHNpbWlsYXIgbWFubmVyIHRvIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgd2hldGhlciB0aGlzIGNoYW5nZSByZXF1aXJlcyBLTVNBTiBpbnN0cnVtZW50YXRpb24uIEkgbmVlZCB0byBtYWtlIGEganVkZ21lbnQgYmFzZWQgb24gdGhlc2Ugc3BlY2lmaWMgZ3VpZGVsaW5lcy5cblxuRmlyc3QsIHRoZSBhbGxvY2F0aW9uIGl0c2VsZjogYG5ld19zdGF0ZSA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHNpemVvZigqdHVuX2luZm8pICsgb3B0X2xlbik7YC4gQ3JpdGljYWxseSwgYGx3dHVubmVsX3N0YXRlX2FsbG9jYCB1c2VzIGBremFsbG9jYC4gVGhhdCdzIGEgZ29vZCBzdGFydC4gYGt6YWxsb2NgIHplcm9lcyB0aGUgZW50aXJlIGFsbG9jYXRlZCBidWZmZXIgcmlnaHQgZnJvbSB0aGUgZ2V0LWdvLiBUaGlzIGlzIGltcG9ydGFudC4gSXQgY292ZXJzIGJvdGggdGhlIGB0dW5faW5mb2Agc3RydWN0dXJlIGFuZCB0aGF0IHRyYWlsaW5nIG9wdGlvbnMgYXJlYS5cblxuTmV4dCwgdGhlIG9wdGlvbnMgbGVuZ3RoIGlzIHNldDogYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtgIGJlZm9yZSBjYWxsaW5nIGBpcF90dW5fc2V0X29wdHMoLi4uKWAuIFRoaXMgaXMgdml0YWwuIFNldHRpbmcgdGhpcyBsZW5ndGggKmJlZm9yZSogY2FsbGluZyB0aGUgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHdoZW4gYGluZm8tXHUwMDNlb3B0aW9uc2AgaXMgYWNjZXNzZWQgd2l0aGluIGBpcF90dW5fc2V0X29wdHNgLCB0aGUgYG9wdGlvbnNfbGVuYCBmaWVsZCBpcyBkZWZpbml0ZWx5IGluaXRpYWxpemVkLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBmYWxzZSBwb3NpdGl2ZXMgZnJvbSBVQlNBTiBvciBib3VuZHMgY2hlY2tzLlxuXG5UaGVuLCB0aGVyZSdzIHRoZSBlcnJvciBoYW5kbGluZy4gSWYgYGlwX3R1bl9zZXRfb3B0cygpYCBmYWlscywgYGx3dHN0YXRlX2ZyZWUoKWAgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LiBUaGUgc3RydWN0dXJlIGlzIGZyZWVkOyBubyBsaW5nZXJpbmcgdW5pbml0aWFsaXplZCBkYXRhIGlzIGxlZnQgYXJvdW5kLlxuXG5CYXNlZCBvbiB0aGUgZ3VpZGVsaW5lcywgbGV0J3Mgc2VlIHdoZXJlIHRoaXMgZmFsbHM6XG5cbiogICBJJ20gY29uZmlkZW50IHRoYXQgbm8ga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYXJlIGNoYW5nZWQgaGVyZS5cbiogICBUaGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbiogICBBbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBhcmUgaGFuZGxlZCBjbGVhbmx5IHdpdGggYGt6YWxsb2NgLCBlbnN1cmluZyBldmVyeXRoaW5nIGlzIHplcm9lZC5cbiogICBUaGVyZSdzIG5vIHJpc2sgb2YgYW55IGNvZGUgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZHVlIHRvIGJvdW5kcyBjaGVja3MuXG5cbkluIHN1bW1hcnksIHRoZSB1c2Ugb2YgYGt6YWxsb2NgLCB0aGUgb3JkZXIgb2YgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGUgaW1tZWRpYXRlIGZyZWVpbmcgb24gZXJyb3IgYWxsIHBvaW50IHRvd2FyZHMgc2FmZXR5LiBUaGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY29kZS5cblxuVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSdtIHJlYWR5IHRvIGRvY3VtZW50IHRoaXMgcmF0aW9uYWxlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzY2LCJPdXRwdXRUb2tlbnMiOjI5OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjI0OjQ5LjUyODgxMzE5N1oiLCJTZXEiOjc3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGlwX3R1bl9idWlsZF9zdGF0ZSgpYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGUoKWAgdG8gaW5pdGlhbGl6ZSBgdHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtgIHByaW9yIHRvIGNhbGxpbmcgYGlwX3R1bl9zZXRfb3B0cygpYCwgcmF0aGVyIHRoYW4gYWZ0ZXJ3YXJkcy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGZsZXhpYmxlIGFycmF5IG1lbWJlciBgaW5mby1cXHUwMDNlb3B0aW9uc2AgKHdoaWNoIGlzIGFubm90YXRlZCB3aXRoIGBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pYCkgaGFzIGl0cyBjb3VudGVyIHBvcHVsYXRlZCBiZWZvcmUgYWNjZXNzLlxcblxcblJlZ2FyZGluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb246XFxuLSBUaGUgYHN0cnVjdCBsd3R1bm5lbF9zdGF0ZWAgYW5kIGl0cyBlbWJlZGRlZCBgc3RydWN0IGlwX3R1bm5lbF9pbmZvYCBhcmUgYWxsb2NhdGVkIHZpYSBgbHd0dW5uZWxfc3RhdGVfYWxsb2MoKWAsIHdoaWNoIHVzZXMgYGt6YWxsb2MoKWAgd2l0aCBgR0ZQX0FUT01JQ2AuIENvbnNlcXVlbnRseSwgYWxsIGFsbG9jYXRlZCBieXRlcyAoaW5jbHVkaW5nIGhlYWRlcnMgYW5kIHRyYWlsaW5nIG9wdGlvbiBidWZmZXJzKSBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCBhdCBhbGxvY2F0aW9uIHRpbWUuXFxuLSBNb3ZpbmcgdGhlIGFzc2lnbm1lbnQgb2YgYG9wdGlvbnNfbGVuYCBlYXJsaWVyIGRvZXMgbm90IGludHJvZHVjZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBwYWRkaW5nL2ZpZWxkcyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBJZiBgaXBfdHVuX3NldF9vcHRzKClgIGZhaWxzLCB0aGUgc3RhdGUgaXMgZnJlZWQgaW1tZWRpYXRlbHkuXFxuXFxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrIHZlY3RvcnMgYXJlIGludHJvZHVjZWQsIHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGVzZSBjaGFuZ2VzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGlwX3R1bl9idWlsZF9zdGF0ZSgpYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGUoKWAgdG8gaW5pdGlhbGl6ZSBgdHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtgIHByaW9yIHRvIGNhbGxpbmcgYGlwX3R1bl9zZXRfb3B0cygpYCwgcmF0aGVyIHRoYW4gYWZ0ZXJ3YXJkcy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGZsZXhpYmxlIGFycmF5IG1lbWJlciBgaW5mby1cXHUwMDNlb3B0aW9uc2AgKHdoaWNoIGlzIGFubm90YXRlZCB3aXRoIGBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pYCkgaGFzIGl0cyBjb3VudGVyIHBvcHVsYXRlZCBiZWZvcmUgYWNjZXNzLlxcblxcblJlZ2FyZGluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb246XFxuLSBUaGUgYHN0cnVjdCBsd3R1bm5lbF9zdGF0ZWAgYW5kIGl0cyBlbWJlZGRlZCBgc3RydWN0IGlwX3R1bm5lbF9pbmZvYCBhcmUgYWxsb2NhdGVkIHZpYSBgbHd0dW5uZWxfc3RhdGVfYWxsb2MoKWAsIHdoaWNoIHVzZXMgYGt6YWxsb2MoKWAgd2l0aCBgR0ZQX0FUT01JQ2AuIENvbnNlcXVlbnRseSwgYWxsIGFsbG9jYXRlZCBieXRlcyAoaW5jbHVkaW5nIGhlYWRlcnMgYW5kIHRyYWlsaW5nIG9wdGlvbiBidWZmZXJzKSBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCBhdCBhbGxvY2F0aW9uIHRpbWUuXFxuLSBNb3ZpbmcgdGhlIGFzc2lnbm1lbnQgb2YgYG9wdGlvbnNfbGVuYCBlYXJsaWVyIGRvZXMgbm90IGludHJvZHVjZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBwYWRkaW5nL2ZpZWxkcyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBJZiBgaXBfdHVuX3NldF9vcHRzKClgIGZhaWxzLCB0aGUgc3RhdGUgaXMgZnJlZWQgaW1tZWRpYXRlbHkuXFxuXFxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrIHZlY3RvcnMgYXJlIGludHJvZHVjZWQsIHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGVzZSBjaGFuZ2VzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowj4zvz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-12 06:05:05 +0000 UTC FinishedAt: 2026-09-12 06:24:51 +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": "17d3afadf539c93def8106bbb83c88274bdc7ab1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "LWTUNNEL", "IPV6" ], "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": "17d3afadf539c93def8106bbb83c88274bdc7ab1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "LWTUNNEL", "IPV6" ], "series_id": "53f13f40-0d63-442d-bca7-8053a6e4b916" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_tun_build_state", "ip6_tun_build_state" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "17d3afadf539c93def8106bbb83c88274bdc7ab1", "base_tree": "net-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TFdUVU5ORUwmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3R1bl9idWlsZF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtpcDZfdHVuX2J1aWxkX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlwX3R1bl9idWlsZF9zdGF0ZSgpYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGUoKWAgdG8gaW5pdGlhbGl6ZSBgdHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO2AgcHJpb3IgdG8gY2FsbGluZyBgaXBfdHVuX3NldF9vcHRzKClgLCByYXRoZXIgdGhhbiBhZnRlcndhcmRzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZmxleGlibGUgYXJyYXkgbWVtYmVyIGBpbmZvLVx1MDAzZW9wdGlvbnNgICh3aGljaCBpcyBhbm5vdGF0ZWQgd2l0aCBgX19jb3VudGVkX2J5KG9wdGlvbnNfbGVuKWApIGhhcyBpdHMgY291bnRlciBwb3B1bGF0ZWQgYmVmb3JlIGFjY2Vzcy5cblxuUmVnYXJkaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbjpcbi0gVGhlIGBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGVgIGFuZCBpdHMgZW1iZWRkZWQgYHN0cnVjdCBpcF90dW5uZWxfaW5mb2AgYXJlIGFsbG9jYXRlZCB2aWEgYGx3dHVubmVsX3N0YXRlX2FsbG9jKClgLCB3aGljaCB1c2VzIGBremFsbG9jKClgIHdpdGggYEdGUF9BVE9NSUNgLiBDb25zZXF1ZW50bHksIGFsbCBhbGxvY2F0ZWQgYnl0ZXMgKGluY2x1ZGluZyBoZWFkZXJzIGFuZCB0cmFpbGluZyBvcHRpb24gYnVmZmVycykgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgYXQgYWxsb2NhdGlvbiB0aW1lLlxuLSBNb3ZpbmcgdGhlIGFzc2lnbm1lbnQgb2YgYG9wdGlvbnNfbGVuYCBlYXJsaWVyIGRvZXMgbm90IGludHJvZHVjZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBwYWRkaW5nL2ZpZWxkcyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBJZiBgaXBfdHVuX3NldF9vcHRzKClgIGZhaWxzLCB0aGUgc3RhdGUgaXMgZnJlZWQgaW1tZWRpYXRlbHkuXG5cblNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVhayB2ZWN0b3JzIGFyZSBpbnRyb2R1Y2VkLCBzdGFuZGFyZCBLQVNBTi9VQlNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhlc2UgY2hhbmdlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMsIG1vdmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gYmVmb3JlIGlwX3R1bl9zZXRfb3B0cygpIGluIGJvdGggaXBfdHVuX2J1aWxkX3N0YXRlKCkgYW5kIGlwNl90dW5fYnVpbGRfc3RhdGUoKS4gVGhpcyBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayByb3V0ZS9uZXh0aG9wIHJlcXVlc3RzIGNvbmZpZ3VyaW5nIGxpZ2h0d2VpZ2h0IHR1bm5lbCBlbmNhcHN1bGF0aW9uIChMV1RVTk5FTF9FTkNBUF9JUCBhbmQgTFdUVU5ORUxfRU5DQVBfSVA2KS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0dW5uZWwgb3B0aW9uIHBhcnNpbmcgYW5kIGJvdW5kcyBjaGVja2luZyBvbiB0dW5uZWwgc3RhdGUgY3JlYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NTZmNWVmNGFmMjNjZDBkZGIyYjNhYzRlY2UxOTlhYTMzMjFmZmQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMDY6MjE6NTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYyBiL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNcbmluZGV4IDUxNjhkNTQ2ZWEyZmQuLjhmYjQ3NDJhY2E5MjUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXG5AQCAtNzExLDYgJiM0Mzs3MTEsNyBAQCBzdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gXHRuZXdfc3RhdGUtXHUwMDNldHlwZSA9IExXVFVOTkVMX0VOQ0FQX0lQO1xuIFxuIFx0dHVuX2luZm8gPSBsd3RfdHVuX2luZm8obmV3X3N0YXRlKTtcbiYjNDM7XHR0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XG4gXG4gXHRlcnIgPSBpcF90dW5fc2V0X29wdHModGJbTFdUVU5ORUxfSVBfT1BUU10sIHR1bl9pbmZvLCBleHRhY2spO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuQEAgLTc1Myw3ICYjNDM7NzU0LDYgQEAgc3RhdGljIGludCBpcF90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIFx0fVxuIFxuIFx0dHVuX2luZm8tXHUwMDNlbW9kZSA9IElQX1RVTk5FTF9JTkZPX1RYO1xuLVx0dHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO1xuIFxuIFx0KnRzID0gbmV3X3N0YXRlO1xuIFxuQEAgLTEwMDUsNiAmIzQzOzEwMDUsNyBAQCBzdGF0aWMgaW50IGlwNl90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIFx0bmV3X3N0YXRlLVx1MDAzZXR5cGUgPSBMV1RVTk5FTF9FTkNBUF9JUDY7XG4gXG4gXHR0dW5faW5mbyA9IGx3dF90dW5faW5mbyhuZXdfc3RhdGUpO1xuJiM0MztcdHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcbiBcbiBcdGVyciA9IGlwX3R1bl9zZXRfb3B0cyh0YltMV1RVTk5FTF9JUDZfT1BUU10sIHR1bl9pbmZvLCBleHRhY2spO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuQEAgLTEwNDAsNyAmIzQzOzEwNDEsNiBAQCBzdGF0aWMgaW50IGlwNl90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIFx0fVxuIFxuIFx0dHVuX2luZm8tXHUwMDNlbW9kZSA9IElQX1RVTk5FTF9JTkZPX1RYIHwgSVBfVFVOTkVMX0lORk9fSVBWNjtcbi1cdHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcbiBcbiBcdCp0cyA9IG5ld19zdGF0ZTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF90dW5fYnVpbGRfc3RhdGUmIzM0OywKICAgICYjMzQ7aXA2X3R1bl9idWlsZF9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMsIG1vdmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gYmVmb3JlIGlwX3R1bl9zZXRfb3B0cygpIGluIGJvdGggaXBfdHVuX2J1aWxkX3N0YXRlKCkgYW5kIGlwNl90dW5fYnVpbGRfc3RhdGUoKS4gVGhpcyBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayByb3V0ZS9uZXh0aG9wIHJlcXVlc3RzIGNvbmZpZ3VyaW5nIGxpZ2h0d2VpZ2h0IHR1bm5lbCBlbmNhcHN1bGF0aW9uIChMV1RVTk5FTF9FTkNBUF9JUCBhbmQgTFdUVU5ORUxfRU5DQVBfSVA2KS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0dW5uZWwgb3B0aW9uIHBhcnNpbmcgYW5kIGJvdW5kcyBjaGVja2luZyBvbiB0dW5uZWwgc3RhdGUgY3JlYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NTZmNWVmNGFmMjNjZDBkZGIyYjNhYzRlY2UxOTlhYTMzMjFmZmQ3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgMTIgMDY6MjE6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jIGIvbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYwppbmRleCA1MTY4ZDU0NmVhMmZkLi44ZmI0NzQyYWNhOTI1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMKQEAgLTcxMSw2ICYjNDM7NzExLDcgQEAgc3RhdGljIGludCBpcF90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLAogCW5ld19zdGF0ZS0mZ3Q7dHlwZSA9IExXVFVOTkVMX0VOQ0FQX0lQOwogCiAJdHVuX2luZm8gPSBsd3RfdHVuX2luZm8obmV3X3N0YXRlKTsKJiM0MzsJdHVuX2luZm8tJmd0O29wdGlvbnNfbGVuID0gb3B0X2xlbjsKIAogCWVyciA9IGlwX3R1bl9zZXRfb3B0cyh0YltMV1RVTk5FTF9JUF9PUFRTXSwgdHVuX2luZm8sIGV4dGFjayk7CiAJaWYgKGVyciAmbHQ7IDApIHsKQEAgLTc1Myw3ICYjNDM7NzU0LDYgQEAgc3RhdGljIGludCBpcF90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLAogCX0KIAogCXR1bl9pbmZvLSZndDttb2RlID0gSVBfVFVOTkVMX0lORk9fVFg7Ci0JdHVuX2luZm8tJmd0O29wdGlvbnNfbGVuID0gb3B0X2xlbjsKIAogCSp0cyA9IG5ld19zdGF0ZTsKIApAQCAtMTAwNSw2ICYjNDM7MTAwNSw3IEBAIHN0YXRpYyBpbnQgaXA2X3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsCiAJbmV3X3N0YXRlLSZndDt0eXBlID0gTFdUVU5ORUxfRU5DQVBfSVA2OwogCiAJdHVuX2luZm8gPSBsd3RfdHVuX2luZm8obmV3X3N0YXRlKTsKJiM0MzsJdHVuX2luZm8tJmd0O29wdGlvbnNfbGVuID0gb3B0X2xlbjsKIAogCWVyciA9IGlwX3R1bl9zZXRfb3B0cyh0YltMV1RVTk5FTF9JUDZfT1BUU10sIHR1bl9pbmZvLCBleHRhY2spOwogCWlmIChlcnIgJmx0OyAwKSB7CkBAIC0xMDQwLDcgJiM0MzsxMDQxLDYgQEAgc3RhdGljIGludCBpcDZfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0ciwKIAl9CiAKIAl0dW5faW5mby0mZ3Q7bW9kZSA9IElQX1RVTk5FTF9JTkZPX1RYIHwgSVBfVFVOTkVMX0lORk9fSVBWNjsKLQl0dW5faW5mby0mZ3Q7b3B0aW9uc19sZW4gPSBvcHRfbGVuOwogCiAJKnRzID0gbmV3X3N0YXRlOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTgKCQkJCQkJCW91dHB1dDogODAKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQIFR1bm5lbCBDb3JlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNgLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiB0aGUgY2hhbmdlcywgc28gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBkaWZmLCBmb2N1c2luZyBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmVzIDcxMSBhbmQgMTAwNS4gVGhvc2Ugc3BlY2lmaWMgbGluZSBudW1iZXJzIG9mdGVuIGluZGljYXRlIGNydWNpYWwgYXJlYXMgb2YgYSBmdW5jdGlvbiwgb3IgcGVyaGFwcyB0aGUgaW50cm9kdWN0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiBhIHBhcnRpY3VsYXIgZGF0YSBzdHJ1Y3R1cmUuCgpUbyBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdWxsIGNvbnRleHQsIGFuZCB0byBjcm9zcyByZWZlcmVuY2UgdGhlIGxpbmVzIGluIHRoZSBzb3VyY2UsIEkmIzM5O2xsIHVzZSB0aGUgYHJlYWQtZmlsZWAgY29tbWFuZCB0byBleGFtaW5lIHRoZSBzb3VyY2UgY29kZSBpbiBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AsIHNwZWNpZmljYWxseSB0aG9zZSBsaW5lcyBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEdldHRpbmcgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN1cnJvdW5kaW5nIGxpbmVzLCB3aWxsIGFsbG93IG1lIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBjb2RlLCBhbmQgaG93IHRoZSBjaGFuZ2VzIGZpdCBpbiB0aGUgcHJvZ3JhbSYjMzk7cyBvdmVyYWxsIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2OTA6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKip0cyxcbiA2OTE6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNjkyOlx0e1xuIDY5MzpcdFx0c3RydWN0IG5sYXR0ciAqdGJbTFdUVU5ORUxfSVBfTUFYICYjNDM7IDFdO1xuIDY5NDpcdFx0c3RydWN0IGx3dHVubmVsX3N0YXRlICpuZXdfc3RhdGU7XG4gNjk1Olx0XHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvO1xuIDY5NjpcdFx0aW50IGVyciwgb3B0X2xlbjtcbiA2OTc6XHRcbiA2OTg6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgTFdUVU5ORUxfSVBfTUFYLCBhdHRyLFxuIDY5OTpcdFx0XHRcdFx0XHQgIGlwX3R1bl9wb2xpY3ksIGV4dGFjayk7XG4gNzAwOlx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDcwMTpcdFx0XHRyZXR1cm4gZXJyO1xuIDcwMjpcdFxuIDcwMzpcdFx0b3B0X2xlbiA9IGlwX3R1bl9nZXRfb3B0bGVuKHRiW0xXVFVOTkVMX0lQX09QVFNdLCBleHRhY2spO1xuIDcwNDpcdFx0aWYgKG9wdF9sZW4gXHUwMDNjIDApXG4gNzA1Olx0XHRcdHJldHVybiBvcHRfbGVuO1xuIDcwNjpcdFxuIDcwNzpcdFx0bmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCp0dW5faW5mbykgJiM0Mzsgb3B0X2xlbik7XG4gNzA4Olx0XHRpZiAoIW5ld19zdGF0ZSlcbiA3MDk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNzEwOlx0XG4gNzExOlx0XHRuZXdfc3RhdGUtXHUwMDNldHlwZSA9IExXVFVOTkVMX0VOQ0FQX0lQO1xuIDcxMjpcdFxuIDcxMzpcdFx0dHVuX2luZm8gPSBsd3RfdHVuX2luZm8obmV3X3N0YXRlKTtcbiA3MTQ6XHRcdHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcbiA3MTU6XHRcbiA3MTY6XHRcdGVyciA9IGlwX3R1bl9zZXRfb3B0cyh0YltMV1RVTk5FTF9JUF9PUFRTXSwgdHVuX2luZm8sIGV4dGFjayk7XG4gNzE3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gNzE4Olx0XHRcdGx3dHN0YXRlX2ZyZWUobmV3X3N0YXRlKTtcbiA3MTk6XHRcdFx0cmV0dXJuIGVycjtcbiA3MjA6XHRcdH1cbiA3MjE6XHRcbiA3MjI6XHQjaWZkZWYgQ09ORklHX0RTVF9DQUNIRVxuIDcyMzpcdFx0ZXJyID0gZHN0X2NhY2hlX2luaXQoXHUwMDI2dHVuX2luZm8tXHUwMDNlZHN0X2NhY2hlLCBHRlBfS0VSTkVMKTtcbiA3MjQ6XHRcdGlmIChlcnIpIHtcbiA3MjU6XHRcdFx0bHd0c3RhdGVfZnJlZShuZXdfc3RhdGUpO1xuIDcyNjpcdFx0XHRyZXR1cm4gZXJyO1xuIDcyNzpcdFx0fVxuIDcyODpcdCNlbmRpZlxuIDcyOTpcdFxuIDczMDpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX0lEXSlcbiA3MzE6XHRcdFx0dHVuX2luZm8tXHUwMDNla2V5LnR1bl9pZCA9IG5sYV9nZXRfYmU2NCh0YltMV1RVTk5FTF9JUF9JRF0pO1xuIDczMjpcdFxuIDczMzpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX0RTVF0pXG4gNzM0Olx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS51LmlwdjQuZHN0ID0gbmxhX2dldF9pbl9hZGRyKHRiW0xXVFVOTkVMX0lQX0RTVF0pO1xuIDczNTpcdFxuIDczNjpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX1NSQ10pXG4gNzM3Olx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS51LmlwdjQuc3JjID0gbmxhX2dldF9pbl9hZGRyKHRiW0xXVFVOTkVMX0lQX1NSQ10pO1xuIDczODpcdFxuIDczOTpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX1RUTF0pXG4gNzQwOlx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS50dGwgPSBubGFfZ2V0X3U4KHRiW0xXVFVOTkVMX0lQX1RUTF0pO1xuIDc0MTpcdFxuIDc0MjpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX1RPU10pXG4gNzQzOlx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS50b3MgPSBubGFfZ2V0X3U4KHRiW0xXVFVOTkVMX0lQX1RPU10pO1xuIDc0NDpcdFxuIDc0NTpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX0ZMQUdTXSkge1xuIDc0NjpcdFx0XHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XG4gNzQ3Olx0XG4gNzQ4Olx0XHRcdGlwX3R1bm5lbF9mbGFnc19mcm9tX2JlMTYoZmxhZ3MsXG4gNzQ5Olx0XHRcdFx0XHRcdCAgbmxhX2dldF9iZTE2KHRiW0xXVFVOTkVMX0lQX0ZMQUdTXSkpO1xuIDc1MDpcdFx0XHRpcF90dW5uZWxfY2xlYXJfb3B0aW9uc19wcmVzZW50KGZsYWdzKTtcbiA3NTE6XHRcbiA3NTI6XHRcdFx0aXBfdHVubmVsX2ZsYWdzX29yKHR1bl9pbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MsXG4gNzUzOlx0XHRcdFx0XHQgICB0dW5faW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzLCBmbGFncyk7XG4gNzU0Olx0XHR9XG4gNzU1Olx0XG4gNzU2Olx0XHR0dW5faW5mby1cdTAwM2Vtb2RlID0gSVBfVFVOTkVMX0lORk9fVFg7XG4gNzU3Olx0XG4gNzU4Olx0XHQqdHMgPSBuZXdfc3RhdGU7XG4gNzU5Olx0XG4gNzYwOlx0XHRyZXR1cm4gMDtcbiA3NjE6XHR9XG4gNzYyOlx0XG4gNzYzOlx0c3RhdGljIHZvaWQgaXBfdHVuX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3RzdGF0ZSlcbiA3NjQ6XHR7XG4gNzY1Olx0I2lmZGVmIENPTkZJR19EU1RfQ0FDSEVcbiA3NjY6XHRcdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm8gPSBsd3RfdHVuX2luZm8obHd0c3RhdGUpO1xuIDc2NzpcdFxuIDc2ODpcdFx0ZHN0X2NhY2hlX2Rlc3Ryb3koXHUwMDI2dHVuX2luZm8tXHUwMDNlZHN0X2NhY2hlKTtcbiA3Njk6XHQjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk5MDpcdFx0aW50IGVyciwgb3B0X2xlbjtcbiA5OTE6XHRcbiA5OTI6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgTFdUVU5ORUxfSVA2X01BWCwgYXR0cixcbiA5OTM6XHRcdFx0XHRcdFx0ICBpcDZfdHVuX3BvbGljeSwgZXh0YWNrKTtcbiA5OTQ6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gOTk1Olx0XHRcdHJldHVybiBlcnI7XG4gOTk2Olx0XG4gOTk3Olx0XHRvcHRfbGVuID0gaXBfdHVuX2dldF9vcHRsZW4odGJbTFdUVU5ORUxfSVA2X09QVFNdLCBleHRhY2spO1xuIDk5ODpcdFx0aWYgKG9wdF9sZW4gXHUwMDNjIDApXG4gOTk5Olx0XHRcdHJldHVybiBvcHRfbGVuO1xuMTAwMDpcdFxuMTAwMTpcdFx0bmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCp0dW5faW5mbykgJiM0Mzsgb3B0X2xlbik7XG4xMDAyOlx0XHRpZiAoIW5ld19zdGF0ZSlcbjEwMDM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMDA0Olx0XG4xMDA1Olx0XHRuZXdfc3RhdGUtXHUwMDNldHlwZSA9IExXVFVOTkVMX0VOQ0FQX0lQNjtcbjEwMDY6XHRcbjEwMDc6XHRcdHR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKG5ld19zdGF0ZSk7XG4xMDA4Olx0XHR0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XG4xMDA5Olx0XG4xMDEwOlx0XHRlcnIgPSBpcF90dW5fc2V0X29wdHModGJbTFdUVU5ORUxfSVA2X09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTtcbjEwMTE6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjEwMTI6XHRcdFx0bHd0c3RhdGVfZnJlZShuZXdfc3RhdGUpO1xuMTAxMzpcdFx0XHRyZXR1cm4gZXJyO1xuMTAxNDpcdFx0fVxuMTAxNTpcdFxuMTAxNjpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9JRF0pXG4xMDE3Olx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS50dW5faWQgPSBubGFfZ2V0X2JlNjQodGJbTFdUVU5ORUxfSVA2X0lEXSk7XG4xMDE4Olx0XG4xMDE5Olx0XHRpZiAodGJbTFdUVU5ORUxfSVA2X0RTVF0pXG4xMDIwOlx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS51LmlwdjYuZHN0ID0gbmxhX2dldF9pbjZfYWRkcih0YltMV1RVTk5FTF9JUDZfRFNUXSk7XG4xMDIxOlx0XG4xMDIyOlx0XHRpZiAodGJbTFdUVU5ORUxfSVA2X1NSQ10pXG4xMDIzOlx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS51LmlwdjYuc3JjID0gbmxhX2dldF9pbjZfYWRkcih0YltMV1RVTk5FTF9JUDZfU1JDXSk7XG4xMDI0Olx0XG4xMDI1Olx0XHRpZiAodGJbTFdUVU5ORUxfSVA2X0hPUExJTUlUXSlcbjEwMjY6XHRcdFx0dHVuX2luZm8tXHUwMDNla2V5LnR0bCA9IG5sYV9nZXRfdTgodGJbTFdUVU5ORUxfSVA2X0hPUExJTUlUXSk7XG4xMDI3Olx0XG4xMDI4Olx0XHRpZiAodGJbTFdUVU5ORUxfSVA2X1RDXSlcbjEwMjk6XHRcdFx0dHVuX2luZm8tXHUwMDNla2V5LnRvcyA9IG5sYV9nZXRfdTgodGJbTFdUVU5ORUxfSVA2X1RDXSk7XG4xMDMwOlx0XG4xMDMxOlx0XHRpZiAodGJbTFdUVU5ORUxfSVA2X0ZMQUdTXSkge1xuMTAzMjpcdFx0XHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XG4xMDMzOlx0XHRcdF9fYmUxNiBkYXRhO1xuMTAzNDpcdFxuMTAzNTpcdFx0XHRkYXRhID0gbmxhX2dldF9iZTE2KHRiW0xXVFVOTkVMX0lQNl9GTEFHU10pO1xuMTAzNjpcdFx0XHRpcF90dW5uZWxfZmxhZ3NfZnJvbV9iZTE2KGZsYWdzLCBkYXRhKTtcbjEwMzc6XHRcdFx0aXBfdHVubmVsX2NsZWFyX29wdGlvbnNfcHJlc2VudChmbGFncyk7XG4xMDM4Olx0XG4xMDM5Olx0XHRcdGlwX3R1bm5lbF9mbGFnc19vcih0dW5faW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzLFxuMTA0MDpcdFx0XHRcdFx0ICAgdHVuX2luZm8tXHUwMDNla2V5LnR1bl9mbGFncywgZmxhZ3MpO1xuMTA0MTpcdFx0fVxuMTA0MjpcdFxuMTA0MzpcdFx0dHVuX2luZm8tXHUwMDNlbW9kZSA9IElQX1RVTk5FTF9JTkZPX1RYIHwgSVBfVFVOTkVMX0lORk9fSVBWNjtcbjEwNDQ6XHRcbjEwNDU6XHRcdCp0cyA9IG5ld19zdGF0ZTtcbjEwNDY6XHRcbjEwNDc6XHRcdHJldHVybiAwO1xuMTA0ODpcdH1cbjEwNDk6XHRcbjEwNTA6XHRzdGF0aWMgaW50IGlwNl90dW5fZmlsbF9lbmNhcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4xMDUxOlx0XHRcdFx0XHQgICBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlKVxuMTA1MjpcdHtcbjEwNTM6XHRcdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm8gPSBsd3RfdHVuX2luZm8obHd0c3RhdGUpO1xuMTA1NDpcdFxuMTA1NTpcdFx0aWYgKG5sYV9wdXRfYmU2NChza2IsIExXVFVOTkVMX0lQNl9JRCwgdHVuX2luZm8tXHUwMDNla2V5LnR1bl9pZCxcbjEwNTY6XHRcdFx0XHQgTFdUVU5ORUxfSVA2X1BBRCkgfHxcbjEwNTc6XHRcdCAgICBubGFfcHV0X2luNl9hZGRyKHNrYiwgTFdUVU5ORUxfSVA2X0RTVCwgXHUwMDI2dHVuX2luZm8tXHUwMDNla2V5LnUuaXB2Ni5kc3QpIHx8XG4xMDU4Olx0XHQgICAgbmxhX3B1dF9pbjZfYWRkcihza2IsIExXVFVOTkVMX0lQNl9TUkMsIFx1MDAyNnR1bl9pbmZvLVx1MDAzZWtleS51LmlwdjYuc3JjKSB8fFxuMTA1OTpcdFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBMV1RVTk5FTF9JUDZfVEMsIHR1bl9pbmZvLVx1MDAzZWtleS50b3MpIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIwNAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgaXBfdHVuX3NldF9vcHRzYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBpcF90dW5fc2V0X29wdHNgIGlzIGFjdHVhbGx5IGRvaW5nLiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IGludG8gdGhlIGNvZGUgZm9yIGBpcF90dW5fc2V0X29wdHNgIGFuZCB1bmRlcnN0YW5kIHdoYXQgaXQgZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwMDpcdFx0XHRcdGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgJiM0Mzsgb3B0c19sZW47XG4gNjAxOlx0XG4gNjAyOlx0XHRcdG1kLVx1MDAzZXZlcnNpb24gPSB2ZXI7XG4gNjAzOlx0XHRcdGlmICh2ZXIgPT0gMSkge1xuIDYwNDpcdFx0XHRcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0lOREVYXTtcbiA2MDU6XHRcdFx0XHRtZC1cdTAwM2V1LmluZGV4ID0gbmxhX2dldF9iZTMyKGF0dHIpO1xuIDYwNjpcdFx0XHR9IGVsc2Uge1xuIDYwNzpcdFx0XHRcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0RJUl07XG4gNjA4Olx0XHRcdFx0bWQtXHUwMDNldS5tZDIuZGlyID0gbmxhX2dldF91OChhdHRyKTtcbiA2MDk6XHRcdFx0XHRhdHRyID0gdGJbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9IV0lEXTtcbiA2MTA6XHRcdFx0XHRzZXRfaHdpZChcdTAwMjZtZC1cdTAwM2V1Lm1kMiwgbmxhX2dldF91OChhdHRyKSk7XG4gNjExOlx0XHRcdH1cbiA2MTI6XHRcbiA2MTM6XHRcdFx0X19zZXRfYml0KElQX1RVTk5FTF9FUlNQQU5fT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKTtcbiA2MTQ6XHRcdH1cbiA2MTU6XHRcbiA2MTY6XHRcdHJldHVybiBzaXplb2Yoc3RydWN0IGVyc3Bhbl9tZXRhZGF0YSk7XG4gNjE3Olx0fVxuIDYxODpcdFxuIDYxOTpcdHN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHMoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxuIDYyMDpcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDYyMTpcdHtcbiA2MjI6XHRcdGludCBlcnIsIHJlbSwgb3B0X2xlbiwgb3B0c19sZW4gPSAwO1xuIDYyMzpcdFx0c3RydWN0IG5sYXR0ciAqbmxhO1xuIDYyNDpcdFx0dTMyIHR5cGUgPSAwO1xuIDYyNTpcdFxuIDYyNjpcdFx0aWYgKCFhdHRyKVxuIDYyNzpcdFx0XHRyZXR1cm4gMDtcbiA2Mjg6XHRcbiA2Mjk6XHRcdGVyciA9IG5sYV92YWxpZGF0ZShubGFfZGF0YShhdHRyKSwgbmxhX2xlbihhdHRyKSwgTFdUVU5ORUxfSVBfT1BUU19NQVgsXG4gNjMwOlx0XHRcdFx0ICAgaXBfb3B0c19wb2xpY3ksIGV4dGFjayk7XG4gNjMxOlx0XHRpZiAoZXJyKVxuIDYzMjpcdFx0XHRyZXR1cm4gZXJyO1xuIDYzMzpcdFxuIDYzNDpcdFx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBubGFfZGF0YShhdHRyKSwgbmxhX2xlbihhdHRyKSwgcmVtKSB7XG4gNjM1Olx0XHRcdHN3aXRjaCAobmxhX3R5cGUobmxhKSkge1xuIDYzNjpcdFx0XHRjYXNlIExXVFVOTkVMX0lQX09QVFNfR0VORVZFOlxuIDYzNzpcdFx0XHRcdGlmICh0eXBlIFx1MDAyNlx1MDAyNiB0eXBlICE9IElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVClcbiA2Mzg6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDYzOTpcdFx0XHRcdG9wdF9sZW4gPSBpcF90dW5fcGFyc2Vfb3B0c19nZW5ldmUobmxhLCBpbmZvLCBvcHRzX2xlbixcbiA2NDA6XHRcdFx0XHRcdFx0XHRcdCAgIGV4dGFjayk7XG4gNjQxOlx0XHRcdFx0aWYgKG9wdF9sZW4gXHUwMDNjIDApXG4gNjQyOlx0XHRcdFx0XHRyZXR1cm4gb3B0X2xlbjtcbiA2NDM6XHRcdFx0XHRvcHRzX2xlbiAmIzQzOz0gb3B0X2xlbjtcbiA2NDQ6XHRcdFx0XHRpZiAob3B0c19sZW4gXHUwMDNlIElQX1RVTk5FTF9PUFRTX01BWClcbiA2NDU6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDY0NjpcdFx0XHRcdHR5cGUgPSBJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQ7XG4gNjQ3Olx0XHRcdFx0YnJlYWs7XG4gNjQ4Olx0XHRcdGNhc2UgTFdUVU5ORUxfSVBfT1BUU19WWExBTjpcbiA2NDk6XHRcdFx0XHRpZiAodHlwZSlcbiA2NTA6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDY1MTpcdFx0XHRcdG9wdF9sZW4gPSBpcF90dW5fcGFyc2Vfb3B0c192eGxhbihubGEsIGluZm8sIG9wdHNfbGVuLFxuIDY1MjpcdFx0XHRcdFx0XHRcdFx0ICBleHRhY2spO1xuIDY1MzpcdFx0XHRcdGlmIChvcHRfbGVuIFx1MDAzYyAwKVxuIDY1NDpcdFx0XHRcdFx0cmV0dXJuIG9wdF9sZW47XG4gNjU1Olx0XHRcdFx0b3B0c19sZW4gJiM0Mzs9IG9wdF9sZW47XG4gNjU2Olx0XHRcdFx0dHlwZSA9IElQX1RVTk5FTF9WWExBTl9PUFRfQklUO1xuIDY1NzpcdFx0XHRcdGJyZWFrO1xuIDY1ODpcdFx0XHRjYXNlIExXVFVOTkVMX0lQX09QVFNfRVJTUEFOOlxuIDY1OTpcdFx0XHRcdGlmICh0eXBlKVxuIDY2MDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjYxOlx0XHRcdFx0b3B0X2xlbiA9IGlwX3R1bl9wYXJzZV9vcHRzX2Vyc3BhbihubGEsIGluZm8sIG9wdHNfbGVuLFxuIDY2MjpcdFx0XHRcdFx0XHRcdFx0ICAgZXh0YWNrKTtcbiA2NjM6XHRcdFx0XHRpZiAob3B0X2xlbiBcdTAwM2MgMClcbiA2NjQ6XHRcdFx0XHRcdHJldHVybiBvcHRfbGVuO1xuIDY2NTpcdFx0XHRcdG9wdHNfbGVuICYjNDM7PSBvcHRfbGVuO1xuIDY2NjpcdFx0XHRcdHR5cGUgPSBJUF9UVU5ORUxfRVJTUEFOX09QVF9CSVQ7XG4gNjY3Olx0XHRcdFx0YnJlYWs7XG4gNjY4Olx0XHRcdGRlZmF1bHQ6XG4gNjY5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjcwOlx0XHRcdH1cbiA2NzE6XHRcdH1cbiA2NzI6XHRcbiA2NzM6XHRcdHJldHVybiBvcHRzX2xlbjtcbiA2NzQ6XHR9XG4gNjc1Olx0XG4gNjc2Olx0c3RhdGljIGludCBpcF90dW5fZ2V0X29wdGxlbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIDY3NzpcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDY3ODpcdHtcbiA2Nzk6XHRcdHJldHVybiBpcF90dW5fcGFyc2Vfb3B0cyhhdHRyLCBOVUxMLCBleHRhY2spO1xuIDY4MDpcdH1cbiA2ODE6XHRcbiA2ODI6XHRzdGF0aWMgaW50IGlwX3R1bl9zZXRfb3B0cyhzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXG4gNjgzOlx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDY4NDpcdHtcbiA2ODU6XHRcdHJldHVybiBpcF90dW5fcGFyc2Vfb3B0cyhhdHRyLCBpbmZvLCBleHRhY2spO1xuIDY4NjpcdH1cbiA2ODc6XHRcbiA2ODg6XHRzdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gNjg5Olx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGZhbWlseSwgY29uc3Qgdm9pZCAqY2ZnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MDMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIFR1bm5lbCBPcHRpb24gUGFyc2luZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBkaWZmZXJlbnQgdHVubmVsIHR5cGVzIGhhbmRsZSB0aGVpciBvcHRpb25zLiBTcGVjaWZpY2FsbHksIG15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiBwYXJzaW5nIHRoZSBvcHRpb25zIGZvciBWWExBTiwgR2VuZXZlLCBhbmQgRVJTUEFOIHR1bm5lbHMuIFRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIHJldmlldyBhcmUgYGlwX3R1bl9wYXJzZV9vcHRzX3Z4bGFuYCwgYGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZWAsIGFuZCBgaXBfdHVuX3BhcnNlX29wdHNfZXJzcGFuYC4gSXQgc2VlbXMgbGlrZSB0aG9zZSB3b3VsZCBiZSB0aGUgb2J2aW91cyBwbGFjZXMgdG8gc3RhcnQuIE5vdywgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNgIGFuZCB0YWtlIGEgbG9vayBhdCBsaW5lcyA1MDAtNjAwLiBIb3BlZnVsbHksIHRoYXQgc2VjdGlvbiB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG9wdGlvbiBwYXJzZXJzIGFyZSBpbnRlZ3JhdGVkIGFuZCB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwMDpcdFx0W0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fSU5ERVhdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4gNTAxOlx0XHRbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9ESVJdXHQ9IHsgLnR5cGUgPSBOTEFfVTggfSxcbiA1MDI6XHRcdFtMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0hXSURdXHQ9IHsgLnR5cGUgPSBOTEFfVTggfSxcbiA1MDM6XHR9O1xuIDUwNDpcdFxuIDUwNTpcdHN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfZ2VuZXZlKHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gNTA2Olx0XHRcdFx0XHQgICAgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLCBpbnQgb3B0c19sZW4sXG4gNTA3Olx0XHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDUwODpcdHtcbiA1MDk6XHRcdHN0cnVjdCBubGF0dHIgKnRiW0xXVFVOTkVMX0lQX09QVF9HRU5FVkVfTUFYICYjNDM7IDFdO1xuIDUxMDpcdFx0aW50IGRhdGFfbGVuLCBlcnI7XG4gNTExOlx0XG4gNTEyOlx0XHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBMV1RVTk5FTF9JUF9PUFRfR0VORVZFX01BWCwgYXR0cixcbiA1MTM6XHRcdFx0XHQgICAgICAgZ2VuZXZlX29wdF9wb2xpY3ksIGV4dGFjayk7XG4gNTE0Olx0XHRpZiAoZXJyKVxuIDUxNTpcdFx0XHRyZXR1cm4gZXJyO1xuIDUxNjpcdFxuIDUxNzpcdFx0aWYgKCF0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX0NMQVNTXSB8fFxuIDUxODpcdFx0ICAgICF0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX1RZUEVdIHx8XG4gNTE5Olx0XHQgICAgIXRiW0xXVFVOTkVMX0lQX09QVF9HRU5FVkVfREFUQV0pXG4gNTIwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUyMTpcdFxuIDUyMjpcdFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9HRU5FVkVfREFUQV07XG4gNTIzOlx0XHRkYXRhX2xlbiA9IG5sYV9sZW4oYXR0cik7XG4gNTI0Olx0XHRpZiAoZGF0YV9sZW4gJSA0KVxuIDUyNTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MjY6XHRcbiA1Mjc6XHRcdGlmIChpbmZvKSB7XG4gNTI4Olx0XHRcdHN0cnVjdCBnZW5ldmVfb3B0ICpvcHQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pICYjNDM7IG9wdHNfbGVuO1xuIDUyOTpcdFxuIDUzMDpcdFx0XHRtZW1jcHkob3B0LVx1MDAzZW9wdF9kYXRhLCBubGFfZGF0YShhdHRyKSwgZGF0YV9sZW4pO1xuIDUzMTpcdFx0XHRvcHQtXHUwMDNlbGVuZ3RoID0gZGF0YV9sZW4gLyA0O1xuIDUzMjpcdFx0XHRhdHRyID0gdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9DTEFTU107XG4gNTMzOlx0XHRcdG9wdC1cdTAwM2VvcHRfY2xhc3MgPSBubGFfZ2V0X2JlMTYoYXR0cik7XG4gNTM0Olx0XHRcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX1RZUEVdO1xuIDUzNTpcdFx0XHRvcHQtXHUwMDNldHlwZSA9IG5sYV9nZXRfdTgoYXR0cik7XG4gNTM2Olx0XHRcdF9fc2V0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncyk7XG4gNTM3Olx0XHR9XG4gNTM4Olx0XG4gNTM5Olx0XHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBnZW5ldmVfb3B0KSAmIzQzOyBkYXRhX2xlbjtcbiA1NDA6XHR9XG4gNTQxOlx0XG4gNTQyOlx0c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0c192eGxhbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIDU0MzpcdFx0XHRcdFx0ICAgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLCBpbnQgb3B0c19sZW4sXG4gNTQ0Olx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNTQ1Olx0e1xuIDU0NjpcdFx0c3RydWN0IG5sYXR0ciAqdGJbTFdUVU5ORUxfSVBfT1BUX1ZYTEFOX01BWCAmIzQzOyAxXTtcbiA1NDc6XHRcdGludCBlcnI7XG4gNTQ4Olx0XG4gNTQ5Olx0XHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBMV1RVTk5FTF9JUF9PUFRfVlhMQU5fTUFYLCBhdHRyLFxuIDU1MDpcdFx0XHRcdCAgICAgICB2eGxhbl9vcHRfcG9saWN5LCBleHRhY2spO1xuIDU1MTpcdFx0aWYgKGVycilcbiA1NTI6XHRcdFx0cmV0dXJuIGVycjtcbiA1NTM6XHRcbiA1NTQ6XHRcdGlmICghdGJbTFdUVU5ORUxfSVBfT1BUX1ZYTEFOX0dCUF0pXG4gNTU1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDU1NjpcdFxuIDU1NzpcdFx0aWYgKGluZm8pIHtcbiA1NTg6XHRcdFx0c3RydWN0IHZ4bGFuX21ldGFkYXRhICptZCA9XG4gNTU5Olx0XHRcdFx0aXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSAmIzQzOyBvcHRzX2xlbjtcbiA1NjA6XHRcbiA1NjE6XHRcdFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9WWExBTl9HQlBdO1xuIDU2MjpcdFx0XHRtZC1cdTAwM2VnYnAgPSBubGFfZ2V0X3UzMihhdHRyKTtcbiA1NjM6XHRcdFx0bWQtXHUwMDNlZ2JwIFx1MDAyNj0gVlhMQU5fR0JQX01BU0s7XG4gNTY0Olx0XHRcdF9fc2V0X2JpdChJUF9UVU5ORUxfVlhMQU5fT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKTtcbiA1NjU6XHRcdH1cbiA1NjY6XHRcbiA1Njc6XHRcdHJldHVybiBzaXplb2Yoc3RydWN0IHZ4bGFuX21ldGFkYXRhKTtcbiA1Njg6XHR9XG4gNTY5Olx0XG4gNTcwOlx0c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0c19lcnNwYW4oc3RydWN0IG5sYXR0ciAqYXR0cixcbiA1NzE6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sIGludCBvcHRzX2xlbixcbiA1NzI6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNTczOlx0e1xuIDU3NDpcdFx0c3RydWN0IG5sYXR0ciAqdGJbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9NQVggJiM0MzsgMV07XG4gNTc1Olx0XHRpbnQgZXJyO1xuIDU3NjpcdFx0dTggdmVyO1xuIDU3NzpcdFxuIDU3ODpcdFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9NQVgsIGF0dHIsXG4gNTc5Olx0XHRcdFx0ICAgICAgIGVyc3Bhbl9vcHRfcG9saWN5LCBleHRhY2spO1xuIDU4MDpcdFx0aWYgKGVycilcbiA1ODE6XHRcdFx0cmV0dXJuIGVycjtcbiA1ODI6XHRcbiA1ODM6XHRcdGlmICghdGJbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9WRVJdKVxuIDU4NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1ODU6XHRcbiA1ODY6XHRcdHZlciA9IG5sYV9nZXRfdTgodGJbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9WRVJdKTtcbiA1ODc6XHRcdGlmICh2ZXIgPT0gMSkge1xuIDU4ODpcdFx0XHRpZiAoIXRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fSU5ERVhdKVxuIDU4OTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDU5MDpcdFx0fSBlbHNlIGlmICh2ZXIgPT0gMikge1xuIDU5MTpcdFx0XHRpZiAoIXRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fRElSXSB8fFxuIDU5MjpcdFx0XHQgICAgIXRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fSFdJRF0pXG4gNTkzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTk0Olx0XHR9IGVsc2Uge1xuIDU5NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1OTY6XHRcdH1cbiA1OTc6XHRcbiA1OTg6XHRcdGlmIChpbmZvKSB7XG4gNTk5Olx0XHRcdHN0cnVjdCBlcnNwYW5fbWV0YWRhdGEgKm1kID1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgxNgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlY29uc3RydWN0aW5nIHRoZSBgaXBfdHVubmVsX2luZm9fb3B0c2AgRW5pZ21hKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgc25pcHBldCBhbmQgbXkgYnJhaW4mIzM5O3MgaGl0IGEgbGl0dGxlIHNuYWcuIFdoYXQgKmV4YWN0bHkqIGlzIGBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pYD8gSXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMganVzdCBmcm9tIGxvb2tpbmcgYXQgaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbiBhbmQgcHVycG9zZSBpbiB0aGlzIGNvbnRleHQuCgpSaWdodCwgc28gdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGdldCBzb21lIG1vcmUgaW5mb3JtYXRpb24sIGFuZCBxdWlja2x5ISBMZXQmIzM5O3MgZmlyZSB1cCBgZ3JlcGAgYW5kIGh1bnQgZG93biBhbGwgaW5zdGFuY2VzIG9mIGBpcF90dW5uZWxfaW5mb19vcHRzYC4gVGhhdCYjMzk7bGwgc2hvdyBtZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLCB3aGVyZSBpdCYjMzk7cyB1c2VkLCBhbmQgaG9wZWZ1bGx5IGlsbHVtaW5hdGUgaXRzIHJvbGUgd2l0aGluIHRoaXMgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uIHRvIGZ1bGx5IGdyYXNwIHRoZSBzdXJyb3VuZGluZyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF90dW5uZWxfaW5mb19vcHRzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYz01OTc9Ym9vbCBtbHg1ZV90Y190dW5fZW5jYXBfaW5mb19lcXVhbF9vcHRpb25zKHN0cnVjdCBtbHg1ZV9lbmNhcF9rZXkgKmEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jLTYyMi1cdHJldHVybiBhX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gPT0gYl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jOjYyMzpcdCAgICAgICAhbWVtY21wKGlwX3R1bm5lbF9pbmZvX29wdHMoYV9pbmZvKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYzo2MjQ6XHRcdCAgICAgICBpcF90dW5uZWxfaW5mb19vcHRzKGJfaW5mbyksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmMtNjI1LVx0XHQgICAgICAgYV9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2dlbmV2ZS5jPTkyPXN0YXRpYyBpbnQgbWx4NWVfZ2VuX2lwX3R1bm5lbF9oZWFkZXJfZ2VuZXZlKGNoYXIgYnVmW10sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9nZW5ldmUuYy0xMTctXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9nZW5ldmUuYzoxMTg6XHRcdGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KGdlbmV2ZWgtXHUwMDNlb3B0aW9ucywgdHVuX2luZm8pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9nZW5ldmUuYy0xMTktXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl92eGxhbi5jPTgzPXN0YXRpYyBpbnQgbWx4NWVfZ2VuX2lwX3R1bm5lbF9oZWFkZXJfdnhsYW4oY2hhciBidWZbXSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX3Z4bGFuLmMtMTAyLVx0aWYgKHRlc3RfYml0KElQX1RVTk5FTF9WWExBTl9PUFRfQklULCB0dW5fa2V5LVx1MDAzZXR1bl9mbGFncykpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fdnhsYW4uYzoxMDM6XHRcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhlLVx1MDAzZXR1bl9pbmZvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fdnhsYW4uYy0xMDQtXHRcdHZ4bGFuX2J1aWxkX2dicF9oZHIodnhoLCBtZCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM9NTYxNj1zdGF0aWMgYm9vbCBtbHg1ZV90Y19yZXN0b3JlX3R1bm5lbChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01Njk0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM6NTY5NTpcdFx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoXHUwMDI2dHVuX2RzdC1cdTAwM2V1LnR1bl9pbmZvLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTY5Ni1cdFx0XHRcdFx0ZW5jX29wdHMua2V5LmRhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmM9MzMwPW5mcF9mbF9wdXNoX2dlbmV2ZV9vcHRpb25zKHN0cnVjdCBuZnBfZmxfcGF5bG9hZCAqbmZwX2ZsLCBpbnQgKmxpc3RfbGVuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2FjdGlvbi5jLTMzNS1cdGludCBvcHRfbGVuLCBvcHRfY250LCBhY3Rfc3RhcnQsIHRvdF9wdXNoX2xlbjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2FjdGlvbi5jOjMzNjpcdHU4ICpzcmMgPSBpcF90dW5uZWxfaW5mb19vcHRzKGlwX3R1bik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYy0zMzctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmMtMzcyLVx0Kmxpc3RfbGVuICYjNDM7PSB0b3RfcHVzaF9sZW47XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYzozNzM6XHRzcmMgPSBpcF90dW5uZWxfaW5mb19vcHRzKGlwX3R1bik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYy0zNzQtXHR3aGlsZSAob3B0X2NudCkge1xuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI3NT1zdGF0aWMgdm9pZCBnZW5ldmVfcngoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgc3RydWN0IGdlbmV2ZV9zb2NrICpncyxcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yOTktXHRcdF9fc2V0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGZsYWdzKTtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjMwMDpcdFx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoXHUwMDI2dHVuX2RzdC1cdTAwM2V1LnR1bl9pbmZvLFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMzAxLVx0XHRcdFx0XHRnbnZoLVx1MDAzZW9wdGlvbnMsIGdudmgtXHUwMDNlb3B0X2xlbiAqIDQsXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTIyOT1zdGF0aWMgdm9pZCBnZW5ldmVfYnVpbGRfaGVhZGVyKHN0cnVjdCBnZW5ldmVoZHIgKmdlbmV2ZWgsXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTI0My1cdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncykpXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxMjQ0Olx0XHRpcF90dW5uZWxfaW5mb19vcHRzX2dldChnZW5ldmVoLVx1MDAzZW9wdGlvbnMsIGluZm8pO1xuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTI0NS19XG4tLVxuZHJpdmVycy9uZXQvcGZjcC5jPTUyPXN0YXRpYyBpbnQgcGZjcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9wZmNwLmMtNzQtXG5kcml2ZXJzL25ldC9wZmNwLmM6NzU6XHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoXHUwMDI2dHVuX2RzdC1cdTAwM2V1LnR1bl9pbmZvKTtcbmRyaXZlcnMvbmV0L3BmY3AuYy03Ni1cdGlmICh1bmxpa2VseSghbWQpKVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xNjU3PXN0YXRpYyBpbnQgdnhsYW5fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTc0Ny1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoxNzQ4Olx0XHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoXHUwMDI2dHVuX2RzdC1cdTAwM2V1LnR1bl9pbmZvKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNzQ5LVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0yMzczPXZvaWQgdnhsYW5feG1pdF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjQ4My1cdFx0XHRcdGdvdG8gZHJvcDtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyNDg0Olx0XHRcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yNDg1LVx0XHR9XG4tLVxuaW5jbHVkZS9uZXQvZHN0X21ldGFkYXRhLmg9MTUzPXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFkYXRhX2RzdCAqdHVuX2RzdF91bmNsb25lKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQvZHN0X21ldGFkYXRhLmgtMTY4LVx0bmV3X21kLVx1MDAzZXUudHVuX2luZm8gPSBtZF9kc3QtXHUwMDNldS50dW5faW5mbztcbmluY2x1ZGUvbmV0L2RzdF9tZXRhZGF0YS5oOjE2OTpcdG1lbWNweShpcF90dW5uZWxfaW5mb19vcHRzKFx1MDAyNm5ld19tZC1cdTAwM2V1LnR1bl9pbmZvKSxcbmluY2x1ZGUvbmV0L2RzdF9tZXRhZGF0YS5oOjE3MDpcdCAgICAgICBpcF90dW5uZWxfaW5mb19vcHRzKFx1MDAyNm1kX2RzdC1cdTAwM2V1LnR1bl9pbmZvKSwgbWRfc2l6ZSk7XG5pbmNsdWRlL25ldC9kc3RfbWV0YWRhdGEuaC0xNzEtXG4tLVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTg5PXN0cnVjdCBpcF90dW5uZWxfZW5jYXAge1xuLS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMDUtXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6MTA2OiNkZWZpbmUgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKVx0XHRcdFx0XFxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMDctXHRfR2VuZXJpYyhpbmZvLFx0XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTY3ND1zdGF0aWMgaW5saW5lIHZvaWQgaXB0dW5uZWxfeG1pdF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGt0X2xlbilcbi0tXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzEwLVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjcxMTpzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2luZm9fb3B0c19nZXQodm9pZCAqdG8sXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzEyLVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzEzLXtcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDo3MTQ6XHRtZW1jcHkodG8sIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyksIGluZm8tXHUwMDNlb3B0aW9uc19sZW4pO1xuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTcxNS19XG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzE2LVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjcxNzpzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2luZm9fb3B0c19zZXQoc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTcxOC1cdFx0XHRcdFx0ICAgY29uc3Qgdm9pZCAqZnJvbSwgaW50IGxlbixcbi0tXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzIyLVx0aWYgKGxlbiBcdTAwM2UgMCkge1xuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjcyMzpcdFx0bWVtY3B5KGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyksIGZyb20sIGxlbik7XG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzI0LVx0XHRpcF90dW5uZWxfZmxhZ3Nfb3IoaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzLCBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MsXG4tLVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTc1OD1zdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX3VubmVlZF9tZXRhZGF0YSh2b2lkKVxuLS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03NjEtXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzYyOnN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfaW5mb19vcHRzX2dldCh2b2lkICp0byxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03NjMtXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcbi0tXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzY2LVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjc2NzpzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2luZm9fb3B0c19zZXQoc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTc2OC1cdFx0XHRcdFx0ICAgY29uc3Qgdm9pZCAqZnJvbSwgaW50IGxlbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00OTgzPUJQRl9DQUxMXzMoYnBmX3NrYl9nZXRfdHVubmVsX29wdCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1OCAqLCB0bywgdTMyLCBzaXplKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQ5OTctXG5uZXQvY29yZS9maWx0ZXIuYzo0OTk4Olx0aXBfdHVubmVsX2luZm9fb3B0c19nZXQodG8sIGluZm8pO1xubmV0L2NvcmUvZmlsdGVyLmMtNDk5OS1cdGlmIChzaXplIFx1MDAzZSBpbmZvLVx1MDAzZW9wdGlvbnNfbGVuKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTUxMDA9QlBGX0NBTExfMyhicGZfc2tiX3NldF90dW5uZWxfb3B0LCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTExMi1cdGlwX3R1bm5lbF9zZXRfb3B0aW9uc19wcmVzZW50KHByZXNlbnQpO1xubmV0L2NvcmUvZmlsdGVyLmM6NTExMzpcdGlwX3R1bm5lbF9pbmZvX29wdHNfc2V0KGluZm8sIGZyb20sIHNpemUsIHByZXNlbnQpO1xubmV0L2NvcmUvZmlsdGVyLmMtNTExNC1cbi0tXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jPTM2Nj1za2JfZmxvd19kaXNzZWN0X3R1bm5lbF9pbmZvKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy00ODQtXHRcdGVuY19vcHQtXHUwMDNlbGVuID0gaW5mby1cdTAwM2VvcHRpb25zX2xlbjtcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmM6NDg1Olx0XHRpcF90dW5uZWxfaW5mb19vcHRzX2dldChlbmNfb3B0LVx1MDAzZWRhdGEsIGluZm8pO1xubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy00ODYtXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MjY3PXN0YXRpYyBpbnQgZXJzcGFuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdG5sX3B0a19pbmZvICp0cGksXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMzQ0LVx0XHRcdFx0XHRcdFx0ICAgIHNpemVvZigqZXJzaGRyKSk7XG5uZXQvaXB2NC9pcF9ncmUuYzozNDU6XHRcdFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKFx1MDAyNnR1bl9kc3QtXHUwMDNldS50dW5faW5mbyk7XG5uZXQvaXB2NC9pcF9ncmUuYy0zNDYtXHRcdFx0bWQtXHUwMDNldmVyc2lvbiA9IHZlcjtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz01NDA9c3RhdGljIHZvaWQgZXJzcGFuX2ZiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy01NjItXHRcdGdvdG8gZXJyX2ZyZWVfc2tiO1xubmV0L2lwdjQvaXBfZ3JlLmM6NTYzOlx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTU2NC1cbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTE0Mj1zdHJ1Y3QgbWV0YWRhdGFfZHN0ICppcHR1bm5lbF9tZXRhZGF0YV9yZXBseShzdHJ1Y3QgbWV0YWRhdGFfZHN0ICptZCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTE2Ni1cdGRzdC1cdTAwM2Vtb2RlID0gc3JjLVx1MDAzZW1vZGUgfCBJUF9UVU5ORUxfSU5GT19UWDtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6MTY3Olx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoZHN0LCBpcF90dW5uZWxfaW5mb19vcHRzKHNyYyksXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTE2OC1cdFx0XHRcdHNyYy1cdTAwM2VvcHRpb25zX2xlbiwgdHVuX2ZsYWdzKTtcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTUwNT1zdGF0aWMgaW50IGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZShzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNTI3LVx0aWYgKGluZm8pIHtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6NTI4Olx0XHRzdHJ1Y3QgZ2VuZXZlX29wdCAqb3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSAmIzQzOyBvcHRzX2xlbjtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNTI5LVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9NTQyPXN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfdnhsYW4oc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTU1OC1cdFx0c3RydWN0IHZ4bGFuX21ldGFkYXRhICptZCA9XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjU1OTpcdFx0XHRpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pICYjNDM7IG9wdHNfbGVuO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy01NjAtXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz01NzA9c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0c19lcnNwYW4oc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTU5OS1cdFx0c3RydWN0IGVyc3Bhbl9tZXRhZGF0YSAqbWQgPVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo2MDA6XHRcdFx0aXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSAmIzQzOyBvcHRzX2xlbjtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNjAxLVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9NzcyPXN0YXRpYyBpbnQgaXBfdHVuX2ZpbGxfZW5jYXBfb3B0c19nZW5ldmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTc4My1cdHdoaWxlICh0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiBcdTAwM2Ugb2Zmc2V0KSB7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjc4NDpcdFx0b3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbykgJiM0Mzsgb2Zmc2V0O1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy03ODUtXHRcdGlmIChubGFfcHV0X2JlMTYoc2tiLCBMV1RVTk5FTF9JUF9PUFRfR0VORVZFX0NMQVNTLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9ODAwPXN0YXRpYyBpbnQgaXBfdHVuX2ZpbGxfZW5jYXBfb3B0c192eGxhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtODA5LVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo4MTA6XHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy04MTEtXHRpZiAobmxhX3B1dF91MzIoc2tiLCBMV1RVTk5FTF9JUF9PUFRfVlhMQU5fR0JQLCBtZC1cdTAwM2VnYnApKSB7XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz04MjA9c3RhdGljIGludCBpcF90dW5fZmlsbF9lbmNhcF9vcHRzX2Vyc3BhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtODI5LVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo4MzA6XHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy04MzEtXHRpZiAobmxhX3B1dF91OChza2IsIExXVFVOTkVMX0lQX09QVF9FUlNQQU5fVkVSLCBtZC1cdTAwM2V2ZXJzaW9uKSlcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTg5OT1zdGF0aWMgaW50IGlwX3R1bl9vcHRzX25sc2l6ZShzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05MTItXHRcdHdoaWxlIChpbmZvLVx1MDAzZW9wdGlvbnNfbGVuIFx1MDAzZSBvZmZzZXQpIHtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTEzOlx0XHRcdG9wdCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgJiM0Mzsgb2Zmc2V0O1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05MTQtXHRcdFx0b3B0X2xlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoMilcdC8qIE9QVF9HRU5FVkVfQ0xBU1MgKi9cbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTkyMy1cdH0gZWxzZSBpZiAodGVzdF9iaXQoSVBfVFVOTkVMX0VSU1BBTl9PUFRfQklULCBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MpKSB7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjkyNDpcdFx0c3RydWN0IGVyc3Bhbl9tZXRhZGF0YSAqbWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05MjUtXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz05NTA9c3RhdGljIGludCBpcF90dW5fY21wX2VuY2FwKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYSwgc3RydWN0IGx3dHVubmVsX3N0YXRlICpiKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTU3LVx0ICAgICAgIGluZm9fYS1cdTAwM2VvcHRpb25zX2xlbiAhPSBpbmZvX2ItXHUwMDNlb3B0aW9uc19sZW4gfHxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTU4Olx0ICAgICAgIG1lbWNtcChpcF90dW5uZWxfaW5mb19vcHRzKGluZm9fYSksXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjk1OTpcdFx0ICAgICAgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvX2IpLCBpbmZvX2EtXHUwMDNlb3B0aW9uc19sZW4pO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05NjAtfVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz00OTA9c3RhdGljIGludCBpcDZlcnNwYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTU0OS1cdFx0XHRcdFx0XHRcdCAgICBzaXplb2YoKmVyc2hkcikpO1xubmV0L2lwdjYvaXA2X2dyZS5jOjU1MDpcdFx0XHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtNTUxLVx0XHRcdG1kLVx1MDAzZXZlcnNpb24gPSB2ZXI7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTkyMT1zdGF0aWMgbmV0ZGV2X3R4X3QgaXA2ZXJzcGFuX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTk5OS1cdFx0XHRnb3RvIHR4X2Vycjtcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMDAwOlx0XHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pO1xubmV0L2lwdjYvaXA2X2dyZS5jLTEwMDEtXG4tLVxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmM9NDE5PXN0YXRpYyBpbnQgbmZ0X3R1bm5lbF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jLTQ5NS0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jOjQ5NjpcdGlwX3R1bm5lbF9pbmZvX29wdHNfc2V0KFx1MDAyNm1kLVx1MDAzZXUudHVuX2luZm8sIFx1MDAyNnByaXYtXHUwMDNlb3B0cy51LCBwcml2LVx1MDAzZW9wdHMubGVuLFxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmMtNDk3LVx0XHRcdFx0cHJpdi1cdTAwM2VvcHRzLmZsYWdzKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTEwMDA9aW50IG92c19mbG93X2tleV9leHRyYWN0KGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm8sXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMDE5LVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoxMDIwOlx0XHRcdGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KFRVTl9NRVRBREFUQV9PUFRTKGtleSwgdHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4pLFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMDIxLVx0XHRcdFx0XHRcdHR1bl9pbmZvKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM9OTc5PWludCBvdnNfbmxhX3B1dF90dW5uZWxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy05ODItXHRyZXR1cm4gX19pcF90dW5fdG9fbmxhdHRyKHNrYiwgXHUwMDI2dHVuX2luZm8tXHUwMDNla2V5LFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jOjk4MzpcdFx0XHRcdCAgaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyksXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtOTg0LVx0XHRcdFx0ICB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM9MjgwMD1zdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X3NldF90dW4oY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMjg3Mi1cdCAqL1xubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jOjI4NzM6XHRpcF90dW5uZWxfaW5mb19vcHRzX3NldCh0dW5faW5mbyxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0yODc0LVx0XHRcdFx0VFVOX01FVEFEQVRBX09QVFMoXHUwMDI2a2V5LCBrZXkudHVuX29wdHNfbGVuKSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM9MzgwMj1zdGF0aWMgaW50IHNldF9hY3Rpb25fdG9fYXR0cihjb25zdCBzdHJ1Y3QgbmxhdHRyICphLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zODE4LVx0XHRlcnIgPSAgaXBfdHVuX3RvX25sYXR0cihza2IsIFx1MDAyNnR1bl9pbmZvLVx1MDAzZWtleSxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzozODE5Olx0XHRcdFx0XHRpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKSxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zODIwLVx0XHRcdFx0XHR0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbixcbi0tXG5uZXQvcHNhbXBsZS9wc2FtcGxlLmM9MjE2PXN0YXRpYyBpbnQgX19wc2FtcGxlX2lwX3R1bl90b19ubGF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvcHNhbXBsZS9wc2FtcGxlLmMtMjE5LVx0dW5zaWduZWQgc2hvcnQgdHVuX3Byb3RvID0gaXBfdHVubmVsX2luZm9fYWYodHVuX2luZm8pO1xubmV0L3BzYW1wbGUvcHNhbXBsZS5jOjIyMDpcdGNvbnN0IHZvaWQgKnR1bl9vcHRzID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyk7XG5uZXQvcHNhbXBsZS9wc2FtcGxlLmMtMjIxLVx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9rZXkgKnR1bl9rZXkgPSBcdTAwMjZ0dW5faW5mby1cdTAwM2VrZXk7XG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9Mjk2PXN0YXRpYyBpbnQgdHVubmVsX2tleV9vcHRzX3NldChzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy0zMDMtXHRcdF9fc2V0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncyk7XG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYzozMDQ6XHRcdHJldHVybiB0dW5uZWxfa2V5X2NvcHlfb3B0cyhubGEsIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyksXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy0zMDUtXHRcdFx0XHRcdCAgICBvcHRzX2xlbiwgZXh0YWNrKTtcbi0tXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy0zMTEtXHRcdF9fc2V0X2JpdChJUF9UVU5ORUxfVlhMQU5fT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKTtcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjMxMjpcdFx0cmV0dXJuIHR1bm5lbF9rZXlfY29weV9vcHRzKG5sYSwgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMxMy1cdFx0XHRcdFx0ICAgIG9wdHNfbGVuLCBleHRhY2spO1xuLS1cbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMxOS1cdFx0X19zZXRfYml0KElQX1RVTk5FTF9FUlNQQU5fT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKTtcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjMyMDpcdFx0cmV0dXJuIHR1bm5lbF9rZXlfY29weV9vcHRzKG5sYSwgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMyMS1cdFx0XHRcdFx0ICAgIG9wdHNfbGVuLCBleHRhY2spO1xuLS1cbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jPTU3Nj1zdGF0aWMgaW50IHR1bm5lbF9rZXlfZ2VuZXZlX29wdHNfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTU3OC17XG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYzo1Nzk6XHRjb25zdCB1OCAqc3JjID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTU4MC1cdGludCBsZW4gPSBpbmZvLVx1MDAzZW9wdGlvbnNfbGVuO1xuLS1cbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jPTYwOD1zdGF0aWMgaW50IHR1bm5lbF9rZXlfdnhsYW5fb3B0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtNjEwLXtcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjYxMTpcdGNvbnN0IHN0cnVjdCB2eGxhbl9tZXRhZGF0YSAqbWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtNjEyLVx0c3RydWN0IG5sYXR0ciAqc3RhcnQ7XG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9NjI3PXN0YXRpYyBpbnQgdHVubmVsX2tleV9lcnNwYW5fb3B0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtNjI5LXtcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjYzMDpcdGNvbnN0IHN0cnVjdCBlcnNwYW5fbWV0YWRhdGEgKm1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTYzMS1cdHN0cnVjdCBubGF0dHIgKnN0YXJ0O1xuLS1cbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jPTgzOT10dW5uZWxfa2V5X2dlbmV2ZV9vcHRzX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy04NDAte1xubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6ODQxOlx0Y29uc3QgdTggKnNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7XG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy04NDItXHRpbnQgbGVuID0gaW5mby1cdTAwM2VvcHRpb25zX2xlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gdGhlIENvcmU6IFVucGFja2luZyBgaXBfdHVubmVsX2luZm9fb3B0c2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGlzIGBpcF90dW5uZWxfaW5mb19vcHRzYCBzdHJ1Y3QuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGluIGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLiBJIHJlY2FsbCB0aGF0IGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0dW5uZWwgY29uZmlndXJhdGlvbiwgYnV0IHRoZSBwcmVjaXNlIGRldGFpbHMsIGVzcGVjaWFsbHkgdGhlIGxheW91dCBhbmQgdGhlIGluZGl2aWR1YWwgZmllbGRzLCBhcmUgZXNjYXBpbmcgbWUgYXQgdGhlIG1vbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIEkgd2lsbCBjaGVjayB0aGUgaGVhZGVyIGZpbGUgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRcbiAgOTY6XHQvKiBGbGFncyBmb3IgaXBfdHVubmVsX2luZm8gbW9kZS4gKi9cbiAgOTc6XHQjZGVmaW5lIElQX1RVTk5FTF9JTkZPX1RYXHQweDAxXHQvKiByZXByZXNlbnRzIHR4IHR1bm5lbCBwYXJhbWV0ZXJzICovXG4gIDk4Olx0I2RlZmluZSBJUF9UVU5ORUxfSU5GT19JUFY2XHQweDAyXHQvKiBrZXkgY29udGFpbnMgSVB2NiBhZGRyZXNzZXMgKi9cbiAgOTk6XHQjZGVmaW5lIElQX1RVTk5FTF9JTkZPX0JSSURHRVx0MHgwNFx0LyogcmVwcmVzZW50cyBhIGJyaWRnZWQgdHVubmVsIGlkICovXG4gMTAwOlx0XG4gMTAxOlx0LyogTWF4aW11bSB0dW5uZWwgb3B0aW9ucyBsZW5ndGguICovXG4gMTAyOlx0I2RlZmluZSBJUF9UVU5ORUxfT1BUU19NQVhcdFx0XHRcdFx0XFxcbiAxMDM6XHRcdEdFTk1BU0soKHNpemVvZl9maWVsZChzdHJ1Y3QgaXBfdHVubmVsX2luZm8sXHRcdFxcXG4gMTA0Olx0XHRcdFx0ICAgICAgb3B0aW9uc19sZW4pICogQklUU19QRVJfQllURSkgLSAxLCAwKVxuIDEwNTpcdFxuIDEwNjpcdCNkZWZpbmUgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKVx0XHRcdFx0XFxcbiAxMDc6XHRcdF9HZW5lcmljKGluZm8sXHRcdFx0XHRcdFx0XFxcbiAxMDg6XHRcdFx0IGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqIDogKChjb25zdCB2b2lkICopKGluZm8pLVx1MDAzZW9wdGlvbnMpLFxcXG4gMTA5Olx0XHRcdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKiA6ICgodm9pZCAqKShpbmZvKS1cdTAwM2VvcHRpb25zKVxcXG4gMTEwOlx0XHQpXG4gMTExOlx0XG4gMTEyOlx0c3RydWN0IGlwX3R1bm5lbF9pbmZvIHtcbiAxMTM6XHRcdHN0cnVjdCBpcF90dW5uZWxfa2V5XHRrZXk7XG4gMTE0Olx0XHRzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwXHRlbmNhcDtcbiAxMTU6XHQjaWZkZWYgQ09ORklHX0RTVF9DQUNIRVxuIDExNjpcdFx0c3RydWN0IGRzdF9jYWNoZVx0ZHN0X2NhY2hlO1xuIDExNzpcdCNlbmRpZlxuIDExODpcdFx0dThcdFx0XHRvcHRpb25zX2xlbjtcbiAxMTk6XHRcdHU4XHRcdFx0bW9kZTtcbiAxMjA6XHRcdHU4XHRcdFx0b3B0aW9uc1tdIF9fYWxpZ25lZF9sYXJnZXN0IF9fY291bnRlZF9ieShvcHRpb25zX2xlbik7XG4gMTIxOlx0fTtcbiAxMjI6XHRcbiAxMjM6XHQvKiA2cmQgcHJlZml4L3JlbGF5IGluZm9ybWF0aW9uICovXG4gMTI0Olx0I2lmZGVmIENPTkZJR19JUFY2X1NJVF82UkRcbiAxMjU6XHRzdHJ1Y3QgaXBfdHVubmVsXzZyZF9wYXJtIHtcbiAxMjY6XHRcdHN0cnVjdCBpbjZfYWRkclx0XHRwcmVmaXg7XG4gMTI3Olx0XHRfX2JlMzJcdFx0XHRyZWxheV9wcmVmaXg7XG4gMTI4Olx0XHR1MTZcdFx0XHRwcmVmaXhsZW47XG4gMTI5Olx0XHR1MTZcdFx0XHRyZWxheV9wcmVmaXhsZW47XG4gMTMwOlx0XHRzdHJ1Y3QgcmN1X2hlYWRcdFx0cmN1O1xuIDEzMTpcdH07XG4gMTMyOlx0I2VuZGlmXG4gMTMzOlx0XG4gMTM0Olx0c3RydWN0IGlwX3R1bm5lbF9wcmxfZW50cnkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzM5NwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQ1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBLZXJuZWwgQnVnIGFuZCBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLCBzcGVjaWZpY2FsbHkgbGluZSAxMjAgYW5kIHRoZSBgaXBfdHVubmVsX2luZm9gIHN0cnVjdC4gV2hhdCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24gaXMgdGhlIGBvcHRpb25zW10gX19hbGlnbmVkX2xhcmdlc3QgX19jb3VudGVkX2J5KG9wdGlvbnNfbGVuKTtgIG1lbWJlci4gVGhlIGBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pYCBhdHRyaWJ1dGUgaXMga2V5IGhlcmUg4oCTIGl0IHRlbGxzIHRoZSBjb21waWxlciB0aGF0IHRoZSBzaXplIG9mIHRoZSBgb3B0aW9uc2AgYXJyYXkgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYG9wdGlvbnNfbGVuYCBmaWVsZC4gVGhpcyBpcyBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgd2hlbiBVQlNBTiYjMzk7cyBib3VuZHMgY2hlY2tpbmcgaXMgZW5hYmxlZC4KCk15IGNvbmNlcm4gc3RlbXMgZnJvbSBob3cgYHR1bl9pbmZvLSZndDtvcHRpb25zX2xlbmAgaXMgYmVpbmcgaGFuZGxlZCBpbiB0aGUgYGlwX3R1bl9idWlsZF9zdGF0ZWAgYW5kIGBpcDZfdHVuX2J1aWxkX3N0YXRlYCBmdW5jdGlvbnMuIEJlZm9yZSwgdGhlIGNvZGUgc2VxdWVuY2Ugd2FzIHNldHRpbmcgYHR1bl9pbmZvLSZndDtvcHRpb25zX2xlbmAgKmFmdGVyKiBjYWxsaW5nIGBpcF90dW5fc2V0X29wdHNgLiBUaGUgcHJvYmxlbSBpcywgdGhhdCB0aGUgYGlwX3R1bl9zZXRfb3B0c2AgZnVuY3Rpb24gYWNjZXNzZXMgdGhlIGB0dW5faW5mby0mZ3Q7b3B0aW9uc2AgYXJyYXkgKHBvdGVudGlhbGx5IHdyaXRpbmcgaW50byBpdCkgKmJlZm9yZSogYG9wdGlvbnNfbGVuYCBpcyBzZXQuIFRoaXMgbWVhbnMgdGhhdCBpZiBgb3B0aW9uc19sZW5gIGlzIGluaXRpYWxseSB6ZXJvLCB0aGUgYWNjZXNzIHRvIGBvcHRpb25zYCBlZmZlY3RpdmVseSBiZWNvbWVzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBXaXRoIGBDT05GSUdfVUJTQU5fQk9VTkRTYCAob3Igd2l0aCB0aGUgYF9fY291bnRlZF9ieWAgYXR0cmlidXRlKSwgdGhpcyB3aWxsIHRyaWdnZXIgYSBib3VuZHMgY2hlY2sgZmFpbHVyZSDigJMgYSBjcmFzaCBvciBhIHdhcm5pbmcsIGRlcGVuZGluZyBvbiB0aGUgY29tcGlsZXIgYW5kIFVCU0FOIGNvbmZpZ3VyYXRpb24uCgpTbywgdGhlIGZpeCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGUgY29kZSB3YXMgbW9kaWZpZWQgdG8gbW92ZSB0aGUgbGluZSBgdHVuX2luZm8tJmd0O29wdGlvbnNfbGVuID0gb3B0X2xlbjtgIGJlZm9yZSB0aGUgY2FsbCB0byBgaXBfdHVuX3NldF9vcHRzYC4gVGhpcyBlbnN1cmVzIHRoYXQgYG9wdGlvbnNfbGVuYCBoYXMgYSB2YWxpZCB2YWx1ZSAqYmVmb3JlKiBhbnkgYWNjZXNzIHRvIGBvcHRpb25zYCBvY2N1cnMsIHRodXMgYXZvaWRpbmcgdGhlIGJvdW5kcyBjaGVjayBmYWlsdXJlLgoKVG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmaXgsIGFuZCB0byBzZWUgd2hlbiB0aGlzIHdhcyBjaGFuZ2VkLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgZ2l0IGxvZyBmb3IgdGhlIHNwZWNpZmljIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgdGhpcyBjaGFuZ2UuIExldCBtZSBydW4gYGdpdCBsb2dgIHRvIHNlZSBpZiBJIGNhbiBmaW5kIGl0LiBJZiBJJiMzOTttIGx1Y2t5LCB0aGUgY29tbWl0IG1lc3NhZ2Ugd2lsbCBwcm92aWRlIG1vcmUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19jb3VudGVkX2J5XFwob3B0aW9uc19sZW5cXCkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTExMj1zdHJ1Y3QgaXBfdHVubmVsX2luZm8ge1xuLS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMTktXHR1OFx0XHRcdG1vZGU7XG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6MTIwOlx0dThcdFx0XHRvcHRpb25zW10gX19hbGlnbmVkX2xhcmdlc3QgX19jb3VudGVkX2J5KG9wdGlvbnNfbGVuKTtcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMjEtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NDQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEtjb25maWcgT3B0aW9ucyBmb3IgSVAgVHVubmVsaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIEtjb25maWcgb3B0aW9ucyBnb3Zlcm4gdGhlIGJlaGF2aW9yIG9mIGBpcF90dW5uZWxfY29yZS5jYCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIExXVHVubmVsIGVuY2Fwc3VsYXRpb24gb2YgSVAvSVB2NiB0cmFmZmljLiBUaW1lIHRvIGRpZyBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IEtjb25maWcgc3ltYm9scy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGdyZXAuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYGlwX3R1bl9idWlsZF9zdGF0ZWAg4oCTIHRoYXQgZnVuY3Rpb24gbmFtZSBzaG91bGQgYmUgYSBkZWNlbnQgaW5kaWNhdG9yIG9mIHRoZSBjb3JlIHR1bm5lbGluZyBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBhbHNvIGluY2x1ZGUgYSBzZWFyY2ggZm9yIGBMV1RVTk5FTF9FTkNBUF9JUGAsIGFzIHRoYXQgbG9va3MgbGlrZSBhIGtleSBtYWNybyBmb3IgY29udHJvbGxpbmcgdGhlIGVuY2Fwc3VsYXRpb24gZGlyZWN0bHkuIFRoaXMgc2hvdWxkIHF1aWNrbHkgaGlnaGxpZ2h0IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBiZWdpbiBteSBleHBsb3JhdGlvbiB0byBnZXQgYSBzZW5zZSBvZiBob3cgdGhlc2UgY29tcG9uZW50cyBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3R1bl9idWlsZF9zdGF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTY4Mj1zdGF0aWMgaW50IGlwX3R1bl9zZXRfb3B0cyhzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy02ODctXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjY4ODpzdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTY4OS1cdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgZmFtaWx5LCBjb25zdCB2b2lkICpjZmcsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz05NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgaXBfdHVuX2x3dF9vcHMgPSB7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjk2MzpcdC5idWlsZF9zdGF0ZSA9IGlwX3R1bl9idWlsZF9zdGF0ZSxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTY0LVx0LmRlc3Ryb3lfc3RhdGUgPSBpcF90dW5fZGVzdHJveV9zdGF0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NDgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgVHVubmVsIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgd2hlcmUgdGhlIGBpcF90dW5fbHd0X29wc2Agc3RydWN0dXJlIGlzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgTGlnaHQgV2VpZ2h0IFR1bm5lbCAoTFdUKSBvcGVyYXRpb25zIGFyZSBob29rZWQgaW50byB0aGUgSVB2NCB0dW5uZWwgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20gYWZ0ZXIgdGhlIHJlZ2lzdHJhdGlvbiBwb2ludCwgdGhlIGNhbGwgdGhhdCB1bHRpbWF0ZWx5IHRpZXMgdGhvc2Ugb3BlcmF0aW9ucyB0byB0aGUgcmVsZXZhbnQgZGF0YXBhdGguIExvY2F0aW5nIHRoaXMgd2lsbCBwcm92aWRlIG1lIHdpdGggdGhlIGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIHNwZWNpZmljIGxvZ2ljIGRlZmluZWQgd2l0aGluIGBpcF90dW5fbHd0X29wc2AuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZWRpdG9yIGFuZCBzdGFydCBuYXZpZ2F0aW5nIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF90dW5fbHd0X29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTk1MD1zdGF0aWMgaW50IGlwX3R1bl9jbXBfZW5jYXAoc3RydWN0IGx3dHVubmVsX3N0YXRlICphLCBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmIpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05NjEtXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjk2MjpzdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBpcF90dW5fbHd0X29wcyA9IHtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTYzLVx0LmJ1aWxkX3N0YXRlID0gaXBfdHVuX2J1aWxkX3N0YXRlLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9MTA4OT12b2lkIF9faW5pdCBpcF90dW5uZWxfY29yZV9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDk2LVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxMDk3Olx0bHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZpcF90dW5fbHd0X29wcywgTFdUVU5ORUxfRU5DQVBfSVApO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDk4LVx0bHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZpcDZfdHVuX2x3dF9vcHMsIExXVFVOTkVMX0VOQ0FQX0lQNik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDY2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJUCBUdW5uZWwgQ29yZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHR1bm5lbCBvcGVyYXRpb25zIGFyZSBpbml0aWFsaXplZC4gTXkgZm9jdXMgaXMgY3VycmVudGx5IG9uIGBpcF90dW5fbHd0X29wc2AgYW5kIGBpcDZfdHVuX2x3dF9vcHNgLiBGcm9tIG15IG5vdGVzLCBJIHJlY2FsbCB0aG9zZSBhcmUgcmVnaXN0ZXJlZCB3aXRoaW4gYGlwX3R1bm5lbF9jb3JlX2luaXQodm9pZClgLiBHb29kLiBOb3csIEkgd2FudCB0byBjb25maXJtIHRoYXQuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIGZvciBgaXBfdHVubmVsX2NvcmUuY2AuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgbW9kdWxlIGlzIGJ1aWx0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgIGZpbGUgdG8gc2VlIHRoZSBidWlsZCBydWxlcyBhbmQgZGVwZW5kZW5jaWVzLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb3JlIHR1bm5lbCBmdW5jdGlvbmFsaXR5IGlzIGludGVncmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3R1bm5lbF9jb3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cdCAgICAgZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vIGZpYl90cmllLm8gZmliX25vdGlmaWVyLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE2Olx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTctXHQgICAgIG1ldHJpY3MubyBuZXRsaW5rLm8gbmV4dGhvcC5vIHVkcF90dW5uZWxfc3R1Yi5vXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTE4Nzk9c3RhdGljIGludCBfX2luaXQgaW5ldF9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTE5OTktXG5uZXQvaXB2NC9hZl9pbmV0LmM6MjAwMDpcdGlwX3R1bm5lbF9jb3JlX2luaXQoKTtcbm5ldC9pcHY0L2FmX2luZXQuYy0yMDAxLVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9MTA4MT1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBpcDZfdHVuX2x3dF9vcHMgPSB7XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDg4LVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxMDg5OnZvaWQgX19pbml0IGlwX3R1bm5lbF9jb3JlX2luaXQodm9pZClcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTA5MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDc1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50IGRvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIElQIFR1bm5lbCBDb3JlIE1vZHVsZSYjMzk7cyBDb21waWxhdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgcmVsYXRlZCB0byBJUCB0dW5uZWxpbmcsIGFuZCB0aGUgZmlyc3QgY2x1ZSBpcyB0aGF0IGBpcF90dW5uZWxfY29yZS5vYCBpcyBiZWluZyBjb21waWxlZC4gQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhhdCYjMzk7cyBpbiBgbmV0L2lwdjQvTWFrZWZpbGVgLiBBaCwgeWVzLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBvYmoteWAsIHNvIGl0JiMzOTtzIHN0YXRpY2FsbHkgbGlua2VkIGludG8gdGhlIGtlcm5lbCBpbWFnZS4gVGhhdOKAmXMgZ29vZCB0byBrbm93IGZvciB0aGUgYmlnIHBpY3R1cmUuCgpOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb25zIHdpdGhpbiB0aGUgdHVubmVsIGFyZSBlbmFibGVkLCBzbyBhcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGd1YXJkcyBvbiBgbHd0dW5uZWxfZW5jYXBfYWRkX29wc2A/IFRoYXQgc2VlbXMgbGlrZSBhIHByaW1lIHRhcmdldCB0byBjaGVjayBmb3IgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEdvdHRhIHZlcmlmeSBpZiBpdCBpcyBhZmZlY3RlZCBieSBhbnkgcGFydGljdWxhciBgQ09ORklHYCBvcHRpb25zLgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhpcyBtb2R1bGUuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIGBpcF90dW5uZWxfY29yZV9pbml0YCB3aXRoaW4gYG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCBvdmVydmlldyBvZiBob3cgZXZlcnl0aGluZyBpcyBicm91Z2h0IG9ubGluZSBhbmQgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gY2hlY2tzIG1pZ2h0IGJlIGxvY2F0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFxuMTA4MTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIGlwNl90dW5fbHd0X29wcyA9IHtcbjEwODI6XHRcdC5idWlsZF9zdGF0ZSA9IGlwNl90dW5fYnVpbGRfc3RhdGUsXG4xMDgzOlx0XHQuZmlsbF9lbmNhcCA9IGlwNl90dW5fZmlsbF9lbmNhcF9pbmZvLFxuMTA4NDpcdFx0LmdldF9lbmNhcF9zaXplID0gaXA2X3R1bl9lbmNhcF9ubHNpemUsXG4xMDg1Olx0XHQuY21wX2VuY2FwID0gaXBfdHVuX2NtcF9lbmNhcCxcbjEwODY6XHRcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuMTA4NzpcdH07XG4xMDg4Olx0XG4xMDg5Olx0dm9pZCBfX2luaXQgaXBfdHVubmVsX2NvcmVfaW5pdCh2b2lkKVxuMTA5MDpcdHtcbjEwOTE6XHRcdC8qIElmIHlvdSBsYW5kIGhlcmUsIG1ha2Ugc3VyZSB3aGV0aGVyIGluY3JlYXNpbmcgaXBfdHVubmVsX2luZm8mIzM5O3NcbjEwOTI6XHRcdCAqIG9wdGlvbnNfbGVuIGlzIGEgcmVhc29uYWJsZSBjaG9pY2Ugd2l0aCBpdHMgdXNhZ2UgaW4gZnJvbnQgZW5kc1xuMTA5MzpcdFx0ICogKGYuZS4sIGl0JiMzOTtzIHBhcnQgb2YgZmxvdyBrZXlzLCBldGMpLlxuMTA5NDpcdFx0ICovXG4xMDk1Olx0XHRCVUlMRF9CVUdfT04oSVBfVFVOTkVMX09QVFNfTUFYICE9IDI1NSk7XG4xMDk2Olx0XG4xMDk3Olx0XHRsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFx1MDAyNmlwX3R1bl9sd3Rfb3BzLCBMV1RVTk5FTF9FTkNBUF9JUCk7XG4xMDk4Olx0XHRsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFx1MDAyNmlwNl90dW5fbHd0X29wcywgTFdUVU5ORUxfRU5DQVBfSVA2KTtcbjEwOTk6XHR9XG4xMTAwOlx0XG4xMTAxOlx0REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoaXBfdHVubmVsX21ldGFkYXRhX2NudCk7XG4xMTAyOlx0RVhQT1JUX1NZTUJPTChpcF90dW5uZWxfbWV0YWRhdGFfY250KTtcbjExMDM6XHRcbjExMDQ6XHR2b2lkIGlwX3R1bm5lbF9uZWVkX21ldGFkYXRhKHZvaWQpXG4xMTA1Olx0e1xuMTEwNjpcdFx0c3RhdGljX2JyYW5jaF9pbmMoXHUwMDI2aXBfdHVubmVsX21ldGFkYXRhX2NudCk7XG4xMTA3Olx0fVxuMTEwODpcdEVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9uZWVkX21ldGFkYXRhKTtcbjExMDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5NzUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbiBleHBlcnQ6CgoqKkxvY2F0aW5nIHRoZSBMV1R1bm5lbCBFbmNhcHN1bGF0aW9uIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYGx3dHVubmVsX2VuY2FwX2FkZF9vcHNgLiBUaGF0IG5hbWUgc291bmRzIGZhbWlsaWFyLiBSaWdodCwgaXQmIzM5O3MgaW52b2x2ZWQgaW4gYWRkaW5nIGVuY2Fwc3VsYXRpb24gb3BlcmF0aW9ucyB3aXRoaW4gdGhlIExpbnV4IG5ldHdvcmtpbmcgc3RhY2suIE5vdywgd2hlcmUgZGlkIEkgc2VlIHRoYXQ/IExldCBtZSB0aGluay4uLiBBaCwgeWVzLCBiYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gSSYjMzk7bSBnb2luZyB0byBmaW5kIHRoaXMgaW4gYG5ldC9jb3JlL2x3dHVubmVsLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBsaWdodHdlaWdodCB0dW5uZWxpbmcgc2hvdWxkIHJlc2lkZS4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgaW4gdGhhdCBmaWxlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHd0dW5uZWxfZW5jYXBfYWRkX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9sd3R1bm5lbC5oPTEwND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBsd3R1bm5lbF9oZWFkcm9vbShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlLFxuLS1cbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMTEzLVxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoxMTQ6aW50IGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyAqb3AsXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oLTExNS1cdFx0XHQgICB1bnNpZ25lZCBpbnQgbnVtKTtcbi0tXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oPTE4ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBsd3R1bm5lbF9oZWFkcm9vbShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlLFxuLS1cbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMTg5LVxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoxOTA6c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfZW5jYXBfYWRkX29wcyhjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzICpvcCxcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMTkxLVx0XHRcdFx0XHQgdW5zaWduZWQgaW50IG51bSlcbi0tXG5uZXQvY29yZS9sd3RfYnBmLmM9Njc4PXN0YXRpYyBpbnQgX19pbml0IGJwZl9sd3RfaW5pdCh2b2lkKVxubmV0L2NvcmUvbHd0X2JwZi5jLTY3OS17XG5uZXQvY29yZS9sd3RfYnBmLmM6NjgwOlx0cmV0dXJuIGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXHUwMDI2YnBmX2VuY2FwX29wcywgTFdUVU5ORUxfRU5DQVBfQlBGKTtcbm5ldC9jb3JlL2x3dF9icGYuYy02ODEtfVxuLS1cbm5ldC9jb3JlL2x3dHVubmVsLmM9Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgX19yY3UgKlxuLS1cbm5ldC9jb3JlL2x3dHVubmVsLmMtODEtXG5uZXQvY29yZS9sd3R1bm5lbC5jOjgyOmludCBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgKm9wcyxcbm5ldC9jb3JlL2x3dHVubmVsLmMtODMtXHRcdFx0ICAgdW5zaWduZWQgaW50IG51bSlcbi0tXG5uZXQvY29yZS9sd3R1bm5lbC5jLTkxLX1cbm5ldC9jb3JlL2x3dHVubmVsLmM6OTI6RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfZW5jYXBfYWRkX29wcyk7XG5uZXQvY29yZS9sd3R1bm5lbC5jLTkzLVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9MTA4OT12b2lkIF9faW5pdCBpcF90dW5uZWxfY29yZV9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDk2LVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxMDk3Olx0bHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZpcF90dW5fbHd0X29wcywgTFdUVU5ORUxfRU5DQVBfSVApO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxMDk4Olx0bHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZpcDZfdHVuX2x3dF9vcHMsIExXVFVOTkVMX0VOQ0FQX0lQNik7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTEwOTktfVxuLS1cbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM9MzI0PWludCBpbGFfbHd0X2luaXQodm9pZClcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMzI1LXtcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6MzI2Olx0cmV0dXJuIGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXHUwMDI2aWxhX2VuY2FwX29wcywgTFdUVU5ORUxfRU5DQVBfSUxBKTtcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMzI3LX1cbi0tXG5uZXQvaXB2Ni9pb2FtNl9pcHR1bm5lbC5jPTU1ND1pbnQgX19pbml0IGlvYW02X2lwdHVubmVsX2luaXQodm9pZClcbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmMtNTU1LXtcbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmM6NTU2Olx0cmV0dXJuIGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXHUwMDI2aW9hbTZfaXB0dW5fb3BzLCBMV1RVTk5FTF9FTkNBUF9JT0FNNik7XG5uZXQvaXB2Ni9pb2FtNl9pcHR1bm5lbC5jLTU1Ny19XG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9Mzg0PWludCBfX2luaXQgcnBsX2luaXQodm9pZClcbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zODctXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozODg6XHRlcnIgPSBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFx1MDAyNnJwbF9vcHMsIExXVFVOTkVMX0VOQ0FQX1JQTCk7XG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zODktXHRpZiAoZXJyKVxuLS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz05NDM9aW50IF9faW5pdCBzZWc2X2lwdHVubmVsX2luaXQodm9pZClcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy05NDQte1xubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjk0NTpcdHJldHVybiBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFx1MDAyNnNlZzZfaXB0dW5fb3BzLCBMV1RVTk5FTF9FTkNBUF9TRUc2KTtcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy05NDYtfVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNjk3PWludCBfX2luaXQgc2VnNl9sb2NhbF9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI3MjgtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjcyOTpcdHJldHVybiBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFx1MDAyNnNlZzZfbG9jYWxfb3BzLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI3MzAtXHRcdFx0XHQgICAgICBMV1RVTk5FTF9FTkNBUF9TRUc2X0xPQ0FMKTtcbi0tXG5uZXQvbXBscy9tcGxzX2lwdHVubmVsLmM9Mjg4PXN0YXRpYyBpbnQgX19pbml0IG1wbHNfaXB0dW5uZWxfaW5pdCh2b2lkKVxubmV0L21wbHMvbXBsc19pcHR1bm5lbC5jLTI4OS17XG5uZXQvbXBscy9tcGxzX2lwdHVubmVsLmM6MjkwOlx0cmV0dXJuIGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXHUwMDI2bXBsc19pcHR1bl9vcHMsIExXVFVOTkVMX0VOQ0FQX01QTFMpO1xubmV0L21wbHMvbXBsc19pcHR1bm5lbC5jLTI5MS19XG4tLVxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jPTExNzc9c3RhdGljIGludCBfX2luaXQgeGZybWlfaW5pdCh2b2lkKVxuLS1cbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy0xMjA4LVxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jOjEyMDk6XHRsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFx1MDAyNnhmcm1pX2VuY2FwX29wcywgTFdUVU5ORUxfRU5DQVBfWEZSTSk7XG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmMtMTIxMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3NDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgTFdUVU5ORUwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSYjMzk7bSBsb29raW5nIGF0IGBpbmNsdWRlL25ldC9sd3R1bm5lbC5oYCwgc3BlY2lmaWNhbGx5IGxpbmUgMTg0LiBUaGUgY29kZSB0aGVyZSBoYXMgYW4gYCNpZiBJU19FTkFCTEVEKENPTkZJR19MV1RVTk5FTClgIGNvbmRpdGlvbmFsLiBIbW0sIHNvIHRoaXMgc2VjdGlvbiBpcyBjbGVhcmx5IGRlcGVuZGVudCBvbiB0aGUgYENPTkZJR19MV1RVTk5FTGAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjb25maXJtIHRoYXQgdGhpcyBtYWNybyBpcyBwcm9wZXJseSBkZWZpbmVkIGFuZCBjb25maWd1cmVkLiBUaW1lIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgaGVhZGVyIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbHd0dW5uZWwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0c3RhdGljIGlubGluZSB2b2lkIGx3dHVubmVsX3NldF9yZWRpcmVjdChzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4gMTgxOlx0e1xuIDE4MjpcdH1cbiAxODM6XHRcbiAxODQ6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBsd3R1bm5lbF9oZWFkcm9vbShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlLFxuIDE4NTpcdFx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBtdHUpXG4gMTg2Olx0e1xuIDE4NzpcdFx0cmV0dXJuIDA7XG4gMTg4Olx0fVxuIDE4OTpcdFxuIDE5MDpcdHN0YXRpYyBpbmxpbmUgaW50IGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyAqb3AsXG4gMTkxOlx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbnVtKVxuIDE5MjpcdHtcbiAxOTM6XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiAxOTQ6XHRcbiAxOTU6XHR9XG4gMTk2Olx0XG4gMTk3Olx0c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfZW5jYXBfZGVsX29wcyhjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzICpvcCxcbiAxOTg6XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBudW0pXG4gMTk5Olx0e1xuIDIwMDpcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDIwMTpcdH1cbiAyMDI6XHRcbiAyMDM6XHRzdGF0aWMgaW5saW5lIGludCBsd3R1bm5lbF92YWxpZF9lbmNhcF90eXBlKHUxNiBlbmNhcF90eXBlLFxuIDIwNDpcdFx0XHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzMwMwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBMV1RVTk5FTCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbiBhY3R1YWxseSBlbmFibGVzIGBDT05GSUdfTFdUVU5ORUxgLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIHRvIGZpbmQgaXQuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBuZXR3b3JraW5nIGRpcmVjdG9yeSwgYG5ldC9gLiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggc2VlbXMgdG8gYmUgYSBzaW1wbGUgYGdyZXBgLiBJJiMzOTtsbCBzZWFyY2ggZm9yICYjMzQ7Y29uZmlnIExXVFVOTkVMJiMzNDsgd2l0aGluIHRoZSBgbmV0L2AgZGlyZWN0b3J5LiBUaGF0IHNob3VsZCBwaW5wb2ludCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlIG9yIGZpbGVzIHdoZXJlIHRoaXMgb3B0aW9uIGlzIGRlZmluZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExXVFVOTkVMXFxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ0Mz1zb3VyY2UgXCYjMzQ7bmV0L2lmZS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy00NDQtXG5uZXQvS2NvbmZpZzo0NDU6Y29uZmlnIExXVFVOTkVMXG5uZXQvS2NvbmZpZy00NDYtXHRib29sIFwmIzM0O05ldHdvcmsgbGlnaHQgd2VpZ2h0IHR1bm5lbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1NzUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgbmV0L0tjb25maWdgLCB3aGljaCBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgYW55IG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEFuZCBzaW5jZSBJIGtub3cgbXkgd2F5IGFyb3VuZCB0aGUga2VybmVsIHNvdXJjZSwgSSBmaWd1cmUgdGhlIHJlbGV2YW50IG9wdGlvbnMgYXJlIGxpa2VseSBjbHVzdGVyZWQgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDQ0NS4gSXQmIzM5O3MgYSBicm9hZCBzdGFydGluZyBwb2ludCwgYnV0IEtjb25maWcgZmlsZXMgb2Z0ZW4gZm9sbG93IGEgbG9naWNhbCBzdHJ1Y3R1cmUsIGFuZCB0aGlzIGxpbmUgaXMgYXMgZ29vZCBhIGd1ZXNzIGFzIGFueS4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGEgc3BlY2lmaWMgb3B0aW9uIHRoYXQgcGlxdWVzIG15IGludGVyZXN0IG9yIGEgc2VjdGlvbiB0aGF0IGxlYWRzIG1lIHRvIHRoZSBuZXh0IHBpZWNlIG9mIHRoZSBwdXp6bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ0MDpcdHNvdXJjZSBcJiMzNDtuZXQvY2VwaC9LY29uZmlnXCYjMzQ7XG4gNDQxOlx0c291cmNlIFwmIzM0O25ldC9uZmMvS2NvbmZpZ1wmIzM0O1xuIDQ0MjpcdHNvdXJjZSBcJiMzNDtuZXQvcHNhbXBsZS9LY29uZmlnXCYjMzQ7XG4gNDQzOlx0c291cmNlIFwmIzM0O25ldC9pZmUvS2NvbmZpZ1wmIzM0O1xuIDQ0NDpcdFxuIDQ0NTpcdGNvbmZpZyBMV1RVTk5FTFxuIDQ0NjpcdFx0Ym9vbCBcJiMzNDtOZXR3b3JrIGxpZ2h0IHdlaWdodCB0dW5uZWxzXCYjMzQ7XG4gNDQ3Olx0XHRoZWxwXG4gNDQ4Olx0XHQgIFRoaXMgZmVhdHVyZSBwcm92aWRlcyBhbiBpbmZyYXN0cnVjdHVyZSB0byBzdXBwb3J0IGxpZ2h0IHdlaWdodFxuIDQ0OTpcdFx0ICB0dW5uZWxzIGxpa2UgbXBscy4gVGhlcmUgaXMgbm8gbmV0ZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBhIGxpZ2h0XG4gNDUwOlx0XHQgIHdlaWdodCB0dW5uZWwgZW5kcG9pbnQuIFR1bm5lbCBlbmNhcHN1bGF0aW9uIHBhcmFtZXRlcnMgYXJlIHN0b3JlZFxuIDQ1MTpcdFx0ICB3aXRoIGxpZ2h0IHdlaWdodCB0dW5uZWwgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGZpYiByb3V0ZXMuXG4gNDUyOlx0XG4gNDUzOlx0Y29uZmlnIExXVFVOTkVMX0JQRlxuIDQ1NDpcdFx0Ym9vbCBcJiMzNDtFeGVjdXRlIEJQRiBwcm9ncmFtIGFzIHJvdXRlIG5leHRob3AgYWN0aW9uXCYjMzQ7XG4gNDU1Olx0XHRkZXBlbmRzIG9uIExXVFVOTkVMIFx1MDAyNlx1MDAyNiBJTkVUXG4gNDU2Olx0XHRkZWZhdWx0IHkgaWYgTFdUVU5ORUw9eVxuIDQ1NzpcdFx0aGVscFxuIDQ1ODpcdFx0ICBBbGxvd3MgdG8gcnVuIEJQRiBwcm9ncmFtcyBhcyBhIG5leHRob3AgYWN0aW9uIGZvbGxvd2luZyBhIHJvdXRlXG4gNDU5Olx0XHQgIGxvb2t1cCBmb3IgaW5jb21pbmcgYW5kIG91dGdvaW5nIHBhY2tldHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTEzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIExXVFVOTkVMIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIExXVFVOTkVMIGlzIHNob3dpbmcgdXAgaW4gYSBidW5jaCBvZiB0aGVzZSB0dW5uZWxpbmcgYW5kIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBzZWUgaG93IGBpcF90dW5fYnVpbGRfc3RhdGVgIHBsYXlzIGludG8gYWxsIG9mIHRoaXMuIFRoYXQgZnVuY3Rpb24mIzM5O3MgZ290dGEgYmUga2V5IHRvIHRoZSBjb25uZWN0aW9uLCByaWdodD8gVGhlbiBJJiMzOTtsbCB0cmFjZSB0aHJvdWdoIHRoZSBjb2RlLCBhbmQgZmlndXJlIG91dCB3aG8mIzM5O3MgYWN0dWFsbHkgKnVzaW5nKiB0aGUgYGx3dHVubmVsX2J1aWxkX3N0YXRlYCBmdW5jdGlvbiwgb3IgdGhlIGBsd3Rfb3BzLSZndDtidWlsZF9zdGF0ZWAgZnVuY3Rpb24gcG9pbnRlci4gRmluZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwgdW5kZXJzdGFuZGluZyBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2J1aWxkX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbHd0dW5uZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9sd3R1bm5lbC5jPTExMT1FWFBPUlRfU1lNQk9MX0dQTChsd3R1bm5lbF9lbmNhcF9kZWxfb3BzKTtcbm5ldC9jb3JlL2x3dHVubmVsLmMtMTEyLVxubmV0L2NvcmUvbHd0dW5uZWwuYzoxMTM6aW50IGx3dHVubmVsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGVuY2FwX3R5cGUsXG5uZXQvY29yZS9sd3R1bm5lbC5jLTExNC1cdFx0XHQgc3RydWN0IG5sYXR0ciAqZW5jYXAsIHVuc2lnbmVkIGludCBmYW1pbHksXG4tLVxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMzEtXHRvcHMgPSByY3VfZGVyZWZlcmVuY2UobHd0dW5fZW5jYXBzW2VuY2FwX3R5cGVdKTtcbm5ldC9jb3JlL2x3dHVubmVsLmM6MTMyOlx0aWYgKGxpa2VseShvcHMgXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VidWlsZF9zdGF0ZSBcdTAwMjZcdTAwMjYgdHJ5X21vZHVsZV9nZXQob3BzLVx1MDAzZW93bmVyKSkpXG5uZXQvY29yZS9sd3R1bm5lbC5jLTEzMy1cdFx0Zm91bmQgPSB0cnVlO1xuLS1cbm5ldC9jb3JlL2x3dHVubmVsLmMtMTM2LVx0aWYgKGZvdW5kKSB7XG5uZXQvY29yZS9sd3R1bm5lbC5jOjEzNzpcdFx0cmV0ID0gb3BzLVx1MDAzZWJ1aWxkX3N0YXRlKG5ldCwgZW5jYXAsIGZhbWlseSwgY2ZnLCBsd3MsIGV4dGFjayk7XG5uZXQvY29yZS9sd3R1bm5lbC5jLTEzOC1cdFx0aWYgKHJldClcbi0tXG5uZXQvY29yZS9sd3R1bm5lbC5jLTE0MC1cdH0gZWxzZSB7XG5uZXQvY29yZS9sd3R1bm5lbC5jOjE0MTpcdFx0LyogZG9uJiMzOTt0IHJlbHkgb24gLUVPUE5PVFNVUFAgdG8gZGV0ZWN0IG1hdGNoIGFzIGJ1aWxkX3N0YXRlXG5uZXQvY29yZS9sd3R1bm5lbC5jLTE0Mi1cdFx0ICogaGFuZGxlcnMgY291bGQgcmV0dXJuIGl0XG4tLVxubmV0L2NvcmUvbHd0dW5uZWwuYy0xNDktfVxubmV0L2NvcmUvbHd0dW5uZWwuYzoxNTA6RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfYnVpbGRfc3RhdGUpO1xubmV0L2NvcmUvbHd0dW5uZWwuYy0xNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0Nzk4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTg2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogYGx3dHVubmVsX2J1aWxkX3N0YXRlYCBhbmQgQXNzb2NpYXRlZCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSByZWxhdGVkIHRvIGxpZ2h0d2VpZ2h0IHR1bm5lbHMgYW5kIG5ldGxpbmsgcm91dGUgY29uZmlndXJhdGlvbi4gIFNwZWNpZmljYWxseSwgYGx3dHVubmVsX2J1aWxkX3N0YXRlYCBnZXRzIGNhbGxlZCB3aGVuIHdlJiMzOTtyZSBzZXR0aW5nIHVwIHJvdXRlcyBvciBuZXh0aG9wcyB1c2luZyBOZXRsaW5rLCBsaWtlIHdpdGggYFJUQV9FTkNBUGAgYW5kIGBSVEFfRU5DQVBfVFlQRWAuICBUaGlzIGlzIGFsbCBhY2Nlc3NpYmxlIHRvIGV2ZW4gdW5wcml2aWxlZ2VkIHVzZXJzIGlmIHRoZXkmIzM5O3JlIHVzaW5nIHVzZXIgbmFtZXNwYWNlcywgb3IgaWYgdGhleSBoYXZlIGBDQVBfTkVUX0FETUlOYCBpbiBhIG5ldHdvcmsgbmFtZXNwYWNlLiBTeXprYWxsZXIgaXMga25vd24gdG8gYmUgaGl0dGluZyB0aGlzIGFyZWEgaGFyZCB3aXRoIG5ldGxpbmsgY29uZmlndXJhdGlvbnMsIHdoaWNoIGltbWVkaWF0ZWx5IGdldHMgbXkgYXR0ZW50aW9uLgoKTXkgZmlyc3QgY2hlY2sgaXMgdG8gc2VlIGlmIHRoaXMgY29kZSBpcyBldmVuICpyZWFjaGFibGUqIGluIGEgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGFuc3dlciBpcyBhIGRlZmluaXRpdmUgeWVzLCBpdCYjMzk7cyByaWdodCB0aGVyZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGU6IGBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jYCwgcGFydCBvZiBJUHY0IGFuZCBMV1RVTk5FTCByb3V0aW5nLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/ICBJJiMzOTttIGdvaW5nIHRvIHJ1biB0aHJvdWdoIHRoZSBwb3NpdGl2ZSBjcml0ZXJpYS4gVGhpcyBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBJdCB0b3VjaGVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBhbmQgaXQgbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nIG9mIGRhdGEgc3RydWN0dXJlcyBhbmQvb3IgYWxnb3JpdGhtIGZsb3dzLCB3aXRoIHRoZSBtYWluIGNoYW5nZSBiZWluZyB0aGUgcGxhY2VtZW50IG9mIGB0dW5faW5mby0mZ3Q7b3B0aW9uc19sZW4gPSBvcHRfbGVuO2AgYmVmb3JlIGNhbGxpbmcgYGlwX3R1bl9zZXRfb3B0c2AgaW4gYm90aCBgaXBfdHVuX2J1aWxkX3N0YXRlYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGVgLgoKT2theSwgbGV0JiMzOTtzIGJhY2sgdXAgYSBzZWNvbmQuIFdoeSB3YXMgdGhpcyBjaGFuZ2UgbWFkZT8gSSBzZWUgdGhleSYjMzk7cmUgaW5pdGlhbGl6aW5nIGBvcHRpb25zX2xlbmAgYmVmb3JlIGNhbGxpbmcgYGlwX3R1bl9zZXRfb3B0c2AgaW5zdGVhZCBvZiBhZnRlciwgYW5kIG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZy4gSWYgYGlwX3R1bl9zZXRfb3B0c2AgZmFpbHMsIGl0IGNhbGxzIGBsd3RzdGF0ZV9mcmVlKG5ld19zdGF0ZSk7YC4gVGhlbiB3aGF0PyBUaGUgY29kZSBnb2VzIG9uIHRvIGluaXRpYWxpemUgc29tZSBvdGhlciB0aGluZ3M6IGBkc3RfY2FjaGVfaW5pdGAsIGFuZCBpZiB0aGF0IGZhaWxzLCB0aGUgc3RhdGUgaXMgZnJlZWQuCgpJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgdG8gaW5pdGlhbGl6ZSB0aGUgYG9wdGlvbnNfbGVuYCBlYXJsaWVyIGlzIGltcG9ydGFudC4gIEJlY2F1c2UgdGhlIGBvcHRpb25zX2xlbmAgZmllbGQgaXMgdXNlZCB0byBkZWZpbmUgdGhlIHNpemUgb2YgYW4gYG9wdGlvbnNbXWAgYXJyYXkgaW4gdGhlIGBpcF90dW5uZWxfaW5mb2Agc3RydWN0LCB0aGlzIGluaXRpYWxpemF0aW9uIGlzIHVzZWQgZm9yIGNvbXBpbGVyIGluc3RydW1lbnRhdGlvbiB3aXRoIGBfX2NvdW50ZWRfYnlgIGNoZWNrcy4gIElmIGBvcHRpb25zX2xlbmAgaXMgemVybyAodW5pbml0aWFsaXplZCksIHdoZW4gYGlwX3R1bl9zZXRfb3B0c2Agd3JpdGVzIGludG8gYG9wdGlvbnNbXWAgYW4gYWNjZXNzIHRvIGBvcHRpb25zWzBdYCB3aWxsIHRyaXAgYENPTkZJR19VQlNBTl9CT1VORFNgISBUaGlzIGBvcHRpb25zX2xlbmAgaXMgY3J1Y2lhbCBmb3Igc3RhdGUgbWFuYWdlbWVudCBpbiBgaXBfdHVubmVsX2luZm9gLgoKVGhpcyBpcyBhIGNsZWFyIGxvZ2ljIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlLiAgSXQgaW1wYWN0cyBgaXBfdHVuX2J1aWxkX3N0YXRlYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGVgLCB3aGljaCBhcmUgZGlyZWN0bHkgaW4gdGhlIGNhbGwgY2hhaW4uCgpOb3csIG9uIHRvIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYTogbm90aGluZyBoZXJlIHNlZW1zIHRvIGJlIG5vbi1rZXJuZWwsIG5vbi1leGVjdXRhYmxlLCBvciB0aWVkIHRvIHVucmVhY2hhYmxlIGhhcmR3YXJlLiBXZSBkb24mIzM5O3QgaGF2ZSB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaGVyZSBlaXRoZXIuIFNvLCB0aGUgdmVyZGljdCBpcyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOb3csIHRpbWUgdG8gZGV0ZXJtaW5lIHRoZSBgRm9jdXNTeW1ib2xzYC4gV2hhdCBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IG1vZGlmaWVkIG9yIGFyZSBjbG9zZWx5IGludm9sdmVkPyBgaXBfdHVuX2J1aWxkX3N0YXRlYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGVgIGFyZSB0aGUga2V5IHBsYXllcnMuICBgaXBfdHVuX3NldF9vcHRzYCBpc24mIzM5O3QgZGlyZWN0bHkgbW9kaWZpZWQgYnV0IGlzIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciwgYW5kIHRoYXQgY291bGQgYmUgaW1wb3J0YW50IHRvby4KCkFyZSB0aGVzZSBmdW5jdGlvbnMgbm9uLXViaXF1aXRvdXM/IFllcywgdGhleSYjMzk7cmUgc3BlY2lmaWMgdG8gSVAgYW5kIElQdjYgdHVubmVsIGVuY2FwLiBBcmUgdGhleSBzdGF0aWM/IFRoZXkgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGluIGBpcF90dW5uZWxfY29yZS5jYCwgYnV0IHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4gZm9yIHVzZSBpbiBgbHd0dW5uZWxfZW5jYXBfb3BzIGlwX3R1bl9sd3Rfb3BzYCBhbmQgYGlwNl90dW5fbHd0X29wc2AsIG1lYW5pbmcgdGhleSAqY2FuJiMzOTt0KiBiZSBpbmxpbmVkIGFuZCBhcmUgYWNjZXNzaWJsZSBhcyBzeW1ib2xzLiAgYGx3dHVubmVsX2J1aWxkX3N0YXRlYCBjYWxscyB0aGVtIHZpYSBgb3BzLSZndDtidWlsZF9zdGF0ZWAsIHdoaWNoIGNvbmZpcm1zIHRoZWlyIHZpc2liaWxpdHkgYXMgc3ltYm9scy4gQnV0LCBgaXBfdHVuX2J1aWxkX3N0YXRlYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGVgIGFyZSB0aGUgZnVuY3Rpb25zIHdoZXJlIHRoZSBjaGFuZ2VzIGFyZSBtYWRlLCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZW0uIGBsd3R1bm5lbF9idWlsZF9zdGF0ZWAgaXMgYSBtb3JlIGdlbmVyYWwgZGlzcGF0Y2hlciwgc28gbGV0JiMzOTtzIHN0aWNrIHdpdGggdGhlIG1vcmUgcHJlY2lzZSBgaXBfdHVuX2J1aWxkX3N0YXRlYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGVgLgoKTmV4dCBzdGVwLCBgRW5hYmxlQ29uZmlnc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGtlcm5lbCBjb25maWdzIGFyZSBuZWNlc3NhcnkuIEkmIzM5O2xsIGNoZWNrIEtjb25maWcgZm9yIGBMV1RVTk5FTGAgYW5kIElQIHR1bm5lbHMuIEkgYWxzbyBuZWVkIHRvIHNlYXJjaCB0aGUgY29kZSBiYXNlIGZvciBob3cgYENPTkZJR19MV1RVTk5FTGAgaXMgdXNlZCB3aXRoIGBpcF90dW5uZWxfY29yZS5jYCB0byBzZWUgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19MV1RVTk5FTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9sd3R1bm5lbC5oPTM5PXN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMge1xuLS1cbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtNTUtXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oOjU2OiNpZmRlZiBDT05GSUdfTFdUVU5ORUxcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtNTctXG4tLVxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0yMDM9c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfdmFsaWRfZW5jYXBfdHlwZSh1MTYgZW5jYXBfdHlwZSxcbi0tXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oLTIwNS17XG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oOjIwNjpcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q09ORklHX0xXVFVOTkVMIGlzIG5vdCBlbmFibGVkIGluIHRoaXMga2VybmVsXCYjMzQ7KTtcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMjA3LVx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmluY2x1ZGUvbmV0L2x3dHVubmVsLmg9MjYxPXN0YXRpYyBpbmxpbmUgaW50IGx3dHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oLTI2NS1cbmluY2x1ZGUvbmV0L2x3dHVubmVsLmg6MjY2OiNlbmRpZiAvKiBDT05GSUdfTFdUVU5ORUwgKi9cbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMjY3LVxuLS1cbmluY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oPTExPXN0cnVjdCBuZXRuc19uZiB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmgtMTctXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqbmZfbG9nX2Rpcl9oZWFkZXI7XG5pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaDoxODojaWZkZWYgQ09ORklHX0xXVFVOTkVMXG5pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaC0xOS1cdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpuZl9sd3RubF9kaXJfaGVhZGVyO1xuLS1cbm5ldC9jb3JlL01ha2VmaWxlPTM3PW9iai0kKENPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQpICYjNDM7PSBuZXRjbGFzc2lkX2Nncm91cC5vXG5uZXQvY29yZS9NYWtlZmlsZTozODpvYmotJChDT05GSUdfTFdUVU5ORUwpICYjNDM7PSBsd3R1bm5lbC5vXG5uZXQvY29yZS9NYWtlZmlsZTozOTpvYmotJChDT05GSUdfTFdUVU5ORUxfQlBGKSAmIzQzOz0gbHd0X2JwZi5vXG5uZXQvY29yZS9NYWtlZmlsZS00MC1vYmotJChDT05GSUdfRFNUX0NBQ0hFKSAmIzQzOz0gZHN0X2NhY2hlLm9cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02ODgwPXN0YXRpYyBpbnQgYnBmX3B1c2hfc2VnNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHlwZSwgdm9pZCAqaGRyLCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5MTMtXG5uZXQvY29yZS9maWx0ZXIuYzo2OTE0OiNpZiBJU19FTkFCTEVEKENPTkZJR19MV1RVTk5FTF9CUEYpXG5uZXQvY29yZS9maWx0ZXIuYy02OTE1LXN0YXRpYyBpbnQgYnBmX3B1c2hfaXBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqaGRyLCB1MzIgbGVuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY5MjI9QlBGX0NBTExfNChicGZfbHd0X2luX3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLCB2b2lkICosIGhkcixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTMwLSNlbmRpZlxubmV0L2NvcmUvZmlsdGVyLmM6NjkzMTojaWYgSVNfRU5BQkxFRChDT05GSUdfTFdUVU5ORUxfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtNjkzMi1cdGNhc2UgQlBGX0xXVF9FTkNBUF9JUDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02OTQwPUJQRl9DQUxMXzQoYnBmX2x3dF94bWl0X3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5NDMtXHRzd2l0Y2ggKHR5cGUpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjY5NDQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0xXVFVOTkVMX0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NDUtXHRjYXNlIEJQRl9MV1RfRU5DQVBfSVA6XG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0yMzk9b2JqLSQoQ09ORklHX0lQX1ZTKSAmIzQzOz0gaXB2cy9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTI0MS0jIGx3dHVubmVsXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjI0MjpvYmotJChDT05GSUdfTFdUVU5ORUwpICYjNDM7PSBuZl9ob29rc19sd3R1bm5lbC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTI0My1cbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYz04MDE9aW50IF9faW5pdCBuZXRmaWx0ZXJfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTgwOC1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjgwOTojaWZkZWYgQ09ORklHX0xXVFVOTkVMXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy04MTAtXHRyZXQgPSBuZXRmaWx0ZXJfbHd0dW5uZWxfaW5pdCgpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTgxOS1lcnJfbG9nX3Blcm5ldDpcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjgyMDojaWZkZWYgQ09ORklHX0xXVFVOTkVMXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy04MjEtXHRuZXRmaWx0ZXJfbHd0dW5uZWxfZmluaSgpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfaW50ZXJuYWxzLmg9MzA9aW50IF9faW5pdCBuZXRmaWx0ZXJfbG9nX2luaXQodm9pZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2ludGVybmFscy5oLTMxLVxubmV0L25ldGZpbHRlci9uZl9pbnRlcm5hbHMuaDozMjojaWZkZWYgQ09ORklHX0xXVFVOTkVMXG5uZXQvbmV0ZmlsdGVyL25mX2ludGVybmFscy5oLTMzLS8qIG5mX2hvb2tzX2x3dHVubmVsLmMgKi9cbi0tXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmM9MzI4PXN0YXRpYyB2b2lkIHByb2JlX2tlcm5lbF9pbWFnZV9jb25maWcoY29uc3QgY2hhciAqZGVmaW5lX3ByZWZpeClcbi0tXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmMtMzc0LVx0XHQvKiBCUEZfUFJPR19UWVBFX0xXVF8qIGFuZCByZWxhdGVkIGhlbHBlcnMgKi9cbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYzozNzU6XHRcdHsgXCYjMzQ7Q09ORklHX0xXVFVOTkVMX0JQRlwmIzM0OywgfSxcbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYy0zNzYtXHRcdC8qIEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCBUQyAodHJhZmZpYyBjb250cm9sKSBhY3Rpb25zICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZz01NT1DT05GSUdfTElWRVBBVENIPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc6NTY6Q09ORklHX0xXVFVOTkVMPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc6NTc6Q09ORklHX0xXVFVOTkVMX0JQRj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLTU4LUNPTkZJR19NT0RVTEVfU0lHPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyMjMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMV1RVTk5FTCBEZXBlbmRlbmN5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgaW5jbHVkZS9uZXQvbHd0dW5uZWwuaGAgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXJvdW5kIGBDT05GSUdfTFdUVU5ORUxgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYGx3dHVubmVsX2VuY2FwX2FkZF9vcHNgIGlzIGVpdGhlciBkZWZpbmVkIGFzIGEgcHJvcGVyIGZ1bmN0aW9uIG9yLCBpZiBgQ09ORklHX0xXVFVOTkVMYCBpc24mIzM5O3QgZW5hYmxlZCwgYmVjb21lcyBhbiBpbmxpbmUgZnVuY3Rpb24gdGhhdCBzaW1wbHkgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGUgYGx3dHVubmVsX3ZhbGlkX2VuY2FwX3R5cGVgIGZ1bmN0aW9uIGlzIGFsc28gZGVmaW5lZCB0byByZXR1cm4gYC1FT1BOT1RTVVBQYCBpZiB0aGUgY29uZmlnIGlzbiYjMzk7dCBlbmFibGVkLgoKVGhlcmVmb3JlLCBpdCYjMzk7cyBjbGVhcjogaWYgYENPTkZJR19MV1RVTk5FTGAgaXMgb2ZmLCB0aGVyZSYjMzk7cyBubyB3YXkgdG8gYWRkIGFueSBsd3R1bm5lbCBlbmNhcHN1bGF0aW9uIG9wZXJhdGlvbnMsIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiAqZG9lcyogdGhhdCwgb3IgdG8gdmFsaWRhdGUgdGhlIHR5cGUuIE1vcmUgaW1wb3J0YW50bHksIHRoaXMgbWVhbnMgY2FsbHMgdG8gYnVpbGQgdGhlIHR1bm5lbCBzdGF0ZSwgaW4gZnVuY3Rpb25zIHN1Y2ggYXMgYGx3dHVubmVsX2J1aWxkX3N0YXRlYCwgd2lsbCAqYWxzbyogZmFpbCB3aXRoIGAtRU9QTk9UU1VQUGAgaWYgYENPTkZJR19MV1RVTk5FTGAgaXNuJiMzOTt0IHNldC4gU28sIHRoZSBgbHd0dW5uZWxfZW5jYXBfYWRkX29wc2AgaXMgY3JpdGljYWwuIElmIGl0JiMzOTtzIG5vdCBkZWZpbmVkLCB3ZSYjMzk7bGwgbmV2ZXIgcmVhY2ggYGlwX3R1bl9idWlsZF9zdGF0ZWAgb3IgYGlwNl90dW5fYnVpbGRfc3RhdGVgLgoKSSBhbHNvIHJlbWVtYmVyIHRoYXQgYElORVRgIGlzIHJlcXVpcmVkIGZvciBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AgdG8gYmUgYnVpbHQsIGJlY2F1c2Ugb2YgdGhlIGRpcmVjdG9yeSAoYG5ldC9pcHY0L2ApLgoKU28sIGBDT05GSUdfTFdUVU5ORUxgIGlzIGEgKmhhcmQqIHJlcXVpcmVtZW50IGhlcmUuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBkZXBlbmRlbmNpZXMgYXJlIHByb3Blcmx5IGhhbmRsZWQgaW4gdGhlIGJ1aWxkIHByb2Nlc3MuIExldCBtZSBjaGVjayB0aGUgYG5ldC9NYWtlZmlsZWAgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBkZXBlbmRlbmNpZXMgYXJlIGJlaW5nIGVuZm9yY2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfTkVURklMVEVSKVx0XHQmIzQzOz0gbmV0ZmlsdGVyL1xubmV0L01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19JTkVUKVx0XHQmIzQzOz0gaXB2NC9cbm5ldC9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfVExTKVx0XHQmIzQzOz0gdGxzL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDA0NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsJiMzOTtzIFR1bm5lbGluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBDT05GSUdfSU5FVGAgKmRlZmluaXRlbHkqIHB1bGxzIGluIGV2ZXJ5dGhpbmcgdW5kZXIgYG5ldC9pcHY0L2AsIGFuZCB0aGF0IGBuZXQvaXB2NC9NYWtlZmlsZWAgaXMgZ29pbmcgdG8gaW5jbHVkZSBgaXBfdHVubmVsX2NvcmUuY2Agbm8gbWF0dGVyIHdoYXQgd2hlbiBJUHY0IGlzIGFjdGl2ZS4gR29vZC4gQW5kLCBhcyBJIHN1c3BlY3RlZCwgYENPTkZJR19MV1RVTk5FTGAgaXMgdGhlIGtleSB0byBlbmFibGluZyB0aGUgbGlnaHR3ZWlnaHQgdHVubmVsaW5nIGNvZGUgd2l0aCBgbmV0L2NvcmUvbHd0dW5uZWwuY2AsIHdoaWNoLCBpbiB0dXJuLCBwcm92aWRlcyB1cyB3aXRoIGBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzYCBhbmQgYGx3dHVubmVsX2J1aWxkX3N0YXRlYC4gTWFrZXMgc2Vuc2UuIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBjb25zaWRlciBJUHY2LgoKSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSB3aXRoIElQdjYuIE15IGJyYWluIGlzIHN0YXJ0aW5nIHRvIGNodXJuIG9uIHRoZSBpbXBsaWNhdGlvbnMgZm9yIElQdjYgcm91dGVzIHdpdGggTFdUVU5ORUwuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgYGlwNl90dW5fYnVpbGRfc3RhdGVgLiBJcyBgQ09ORklHX0lQVjZgICphbHNvKiBhIG5lY2Vzc2FyeSBjb25kaXRpb24gZm9yIExXVFVOTkVMLWJhc2VkIElQdjYgcm91dGluZz8gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aG9zZSBJUHY2IHJvdXRlcyBhY3R1YWxseSAqdXNlKiBMV1RVTk5FTC4gSSBiZXR0ZXIgc3RhcnQgbG9va2luZyBhdCB0aGUgSVB2NiByb3V0ZSBoYW5kbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHd0dW5uZWxfYnVpbGRfc3RhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0xMjA9aW50IGx3dHVubmVsX3ZhbGlkX2VuY2FwX3R5cGVfYXR0cihzdHJ1Y3QgbmxhdHRyICphdHRyLCBpbnQgbGVuLFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0xMjEtXHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoxMjI6aW50IGx3dHVubmVsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGVuY2FwX3R5cGUsXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oLTEyMy1cdFx0XHQgc3RydWN0IG5sYXR0ciAqZW5jYXAsXG4tLVxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0yMTA9c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfdmFsaWRfZW5jYXBfdHlwZV9hdHRyKHN0cnVjdCBubGF0dHIgKmF0dHIsIGludCBsZW4sXG4tLVxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0yMTgtXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oOjIxOTpzdGF0aWMgaW5saW5lIGludCBsd3R1bm5lbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUxNiBlbmNhcF90eXBlLFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0yMjAtXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqZW5jYXAsXG4tLVxubmV0L2NvcmUvbHd0dW5uZWwuYz0xMTE9RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfZW5jYXBfZGVsX29wcyk7XG5uZXQvY29yZS9sd3R1bm5lbC5jLTExMi1cbm5ldC9jb3JlL2x3dHVubmVsLmM6MTEzOmludCBsd3R1bm5lbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUxNiBlbmNhcF90eXBlLFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMTQtXHRcdFx0IHN0cnVjdCBubGF0dHIgKmVuY2FwLCB1bnNpZ25lZCBpbnQgZmFtaWx5LFxuLS1cbm5ldC9jb3JlL2x3dHVubmVsLmMtMTQ5LX1cbm5ldC9jb3JlL2x3dHVubmVsLmM6MTUwOkVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX2J1aWxkX3N0YXRlKTtcbm5ldC9jb3JlL2x3dHVubmVsLmMtMTUxLVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz02NDI9aW50IGZpYl9uaF9jb21tb25faW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfbmhfY29tbW9uICpuaGMsXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTY1Ni1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzo2NTc6XHRcdGVyciA9IGx3dHVubmVsX2J1aWxkX3N0YXRlKG5ldCwgZW5jYXBfdHlwZSwgZW5jYXAsXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtNjU4LVx0XHRcdFx0XHQgICBuaGMtXHUwMDNlbmhjX2ZhbWlseSwgY2ZnLCBcdTAwMjZsd3RzdGF0ZSxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9OTA3PXN0YXRpYyBpbnQgZmliX2VuY2FwX21hdGNoKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGVuY2FwX3R5cGUsXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTkxOC1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzo5MTk6XHRyZXQgPSBsd3R1bm5lbF9idWlsZF9zdGF0ZShuZXQsIGVuY2FwX3R5cGUsIGVuY2FwLCBBRl9JTkVULFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTkyMC1cdFx0XHRcdCAgIGNmZywgXHUwMDI2bHd0c3RhdGUsIGV4dGFjayk7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI0MjE9c3RhdGljIGludFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI0MjI6c2VnNl9sb2NhbF9sd3R1bm5lbF9idWlsZF9zdGF0ZShzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsIGNvbnN0IHZvaWQgKmNmZyxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDIzLVx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNTE3PXN0YXRpYyBpbnQgc2VnNl9sb2NhbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjU0OS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNTUwOlx0ZXJyID0gc2VnNl9sb2NhbF9sd3R1bm5lbF9idWlsZF9zdGF0ZShzbHd0LCBjZmcsIGV4dGFjayk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjU1MS1cdGlmIChlcnIgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzg5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBJUHY2IGFuZCBMV1RVTk5FTCBJbnRlcmFjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGhvdyB0aGUgYExXVFVOTkVMX0VOQ0FQX0lQNmAgZnVuY3Rpb25hbGl0eSwgb3IgcG90ZW50aWFsbHkgYGx3dHVubmVsX2J1aWxkX3N0YXRlYCwgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIElQdjYgb3IgbmV4dCBob3AgY29udGV4dHMuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGVzZSBhcmUgY2VudHJhbCB0byB0aGUgZW5jYXBzdWxhdGlvbiBwcm9jZXNzLCBidXQgSSB3YW50IHRvIHZlcmlmeSB0aGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgSVB2NiBzcGVjaWZpY2FsbHkgbGV2ZXJhZ2VzIHRoZSBMV1RVTk5FTCBpbmZyYXN0cnVjdHVyZS4KClRvIGRpZyBpbnRvIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgZ3JlcC4gSSYjMzk7bGwgc2VhcmNoIGZvciBjYWxscyB0byBgbHd0dW5uZWxfYnVpbGRfc3RhdGVgIGFjcm9zcyB0aGUgYG5ldC9pcHY2YCBkaXJlY3RvcnkgYW5kIHRoZSBicm9hZGVyIGBuZXQvYCBkaXJlY3Rvcnkgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIGNhbGwgc2l0ZXMgYW5kIHByb3ZpZGUgY2x1ZXMgYWJvdXQgdGhlIGludGVncmF0aW9uIHBvaW50cyBhbmQgZGVwZW5kZW5jaWVzIGJldHdlZW4gSVB2NiBhbmQgdGhlIExXVFVOTkVMIG1lY2hhbmlzbS4gQnkgb2JzZXJ2aW5nIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNhbGxzLCBJIGNhbiBkZWR1Y2UgaG93IGl0IGhhbmRsZXMgZW5jYXBzdWxhdGVkIElQdjYgdHJhZmZpYyBhbmQgaG9wZWZ1bGx5IGdhaW4gYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHd0dW5uZWxfYnVpbGRfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2x3dHVubmVsLmM9MTExPUVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX2VuY2FwX2RlbF9vcHMpO1xubmV0L2NvcmUvbHd0dW5uZWwuYy0xMTItXG5uZXQvY29yZS9sd3R1bm5lbC5jOjExMzppbnQgbHd0dW5uZWxfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCB1MTYgZW5jYXBfdHlwZSxcbm5ldC9jb3JlL2x3dHVubmVsLmMtMTE0LVx0XHRcdCBzdHJ1Y3QgbmxhdHRyICplbmNhcCwgdW5zaWduZWQgaW50IGZhbWlseSxcbi0tXG5uZXQvY29yZS9sd3R1bm5lbC5jLTE0OS19XG5uZXQvY29yZS9sd3R1bm5lbC5jOjE1MDpFWFBPUlRfU1lNQk9MX0dQTChsd3R1bm5lbF9idWlsZF9zdGF0ZSk7XG5uZXQvY29yZS9sd3R1bm5lbC5jLTE1MS1cbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9NjQyPWludCBmaWJfbmhfY29tbW9uX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy02NTYtXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6NjU3Olx0XHRlcnIgPSBsd3R1bm5lbF9idWlsZF9zdGF0ZShuZXQsIGVuY2FwX3R5cGUsIGVuY2FwLFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTY1OC1cdFx0XHRcdFx0ICAgbmhjLVx1MDAzZW5oY19mYW1pbHksIGNmZywgXHUwMDI2bHd0c3RhdGUsXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTkwNz1zdGF0aWMgaW50IGZpYl9lbmNhcF9tYXRjaChzdHJ1Y3QgbmV0ICpuZXQsIHUxNiBlbmNhcF90eXBlLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy05MTgtXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6OTE5Olx0cmV0ID0gbHd0dW5uZWxfYnVpbGRfc3RhdGUobmV0LCBlbmNhcF90eXBlLCBlbmNhcCwgQUZfSU5FVCxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy05MjAtXHRcdFx0XHQgICBjZmcsIFx1MDAyNmx3dHN0YXRlLCBleHRhY2spO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNDIxPXN0YXRpYyBpbnRcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDIyOnNlZzZfbG9jYWxfbHd0dW5uZWxfYnVpbGRfc3RhdGUoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LCBjb25zdCB2b2lkICpjZmcsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQyMy1cdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjUxNz1zdGF0aWMgaW50IHNlZzZfbG9jYWxfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI1NDktXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjU1MDpcdGVyciA9IHNlZzZfbG9jYWxfbHd0dW5uZWxfYnVpbGRfc3RhdGUoc2x3dCwgY2ZnLCBleHRhY2spO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI1NTEtXHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjM2NQoJCQkJCQkJb3V0cHV0OiAxODYKCQkJCQkJCXRob3VnaHRzOiA3MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTGlnaHR3ZWlnaHQgVHVubmVsIEluaXRpYWxpemF0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IGhvdyBsaWdodHdlaWdodCB0dW5uZWxzIGFyZSBpbml0aWFsaXplZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBmaWJfbmhfY29tbW9uX2luaXRgLiBUaGlzIGZ1bmN0aW9uIGlzIGtleSBiZWNhdXNlIGl0IGhhbmRsZXMgbmV4dGhvcCBpbml0aWFsaXphdGlvbiwgd2hldGhlciBpdCYjMzk7cyBJUHY0IG9yIElQdjYuIFdoZW4gYSByb3V0ZSBvciBuZXh0aG9wIGlzIGNyZWF0ZWQgYW5kIHVzZXMgYExXVFVOTkVMX0VOQ0FQX0lQYCBvciBgTFdUVU5ORUxfRU5DQVBfSVA2YCAodmlhIGBSVEFfRU5DQVBfVFlQRWApLCBgZmliX25oX2NvbW1vbl9pbml0YCBjYWxscyBgbHd0dW5uZWxfYnVpbGRfc3RhdGVgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zOyBgbHd0dW5uZWxfYnVpbGRfc3RhdGVgIHRoZW4gdXNlcyBgcmN1X2RlcmVmZXJlbmNlYCB0byBnZXQgdGhlIHJlbGV2YW50IHR1bm5lbCBlbmNhcHN1bGF0aW9uIHR5cGUsIGFuZCBjYWxscyB0aGUgYXBwcm9wcmlhdGUgYGJ1aWxkX3N0YXRlYCBmdW5jdGlvbi4gRm9yIElQIHR1bm5lbHMsIGl0JiMzOTtzIGBpcF90dW5fYnVpbGRfc3RhdGVgLCBhbmQgZm9yIElQdjYgdHVubmVscywgaXQmIzM5O3MgYGlwNl90dW5fYnVpbGRfc3RhdGVgLiBCb3RoIHJlc2lkZSBpbiBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AuCgpOb3csIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMgYXJlIGltcG9ydGFudC4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYExXVFVOTkVMYCBhbmQgYElORVRgIGFyZSBlc3NlbnRpYWwuIEZvciBJUHY2IHJvdXRlcywgYElQVjZgIGlzIGFsc28gbmVlZGVkLiBJIGluaXRpYWxseSBsb29rZWQgZm9yIG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHdpdGhpbiBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AsIHN1Y2ggYXMgYENPTkZJR19EU1RfQ0FDSEVgLCBidXQgSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgYW5kIGBDT05GSUdfTFdUVU5ORUxgIHNlZW1zIHRvIGJlIHN1ZmZpY2llbnQgYXMgYSBzdGFuZGFsb25lIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhcyBpdCBoYXMgbm8gZGVwZW5kZW5jaWVzIGl0c2VsZi4gYENPTkZJR19JTkVUYCBjb3ZlcnMgdGhlIHJlbGV2YW50IElQdjQgY29kZS4KCkxldCYjMzk7cyBzdW1tYXJpemUgdGhlIGtleSBmaW5kaW5nczoKCjEuICAqKldvcnRoRnV6emluZyoqOiBZZXMsIGRlZmluaXRlbHkuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbW9kaWZpZWQsIHJlYWNoYWJsZSBjb2RlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIChgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2ApLiBUaGlzIGlzIHNpZ25pZmljYW50LgoyLiAgKipGb2N1c1N5bWJvbHMqKjogVGhlIHN5bWJvbHMgSSBuZWVkIHRvIHRhcmdldCBhcmU6IGBpcF90dW5fYnVpbGRfc3RhdGVgIGFuZCBgaXA2X3R1bl9idWlsZF9zdGF0ZWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGludm9sdmVkIGluIGJ1aWxkaW5nIHRoZSB0dW5uZWwgc3RhdGUuCjMuICAqKkVuYWJsZUNvbmZpZ3MqKjogVGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmU6IGBJTkVUYCwgYExXVFVOTkVMYCwgYW5kIGBJUFY2YC4gVGhpcyBpcyB0aGUgbWluaW1hbCBzZXQuCjQuICAqKlJlYXNvbmluZyoqOiBUaGUgY3JpdGljYWwgY2hhbmdlIGlzIHRoYXQgYHR1bl9pbmZvLSZndDtvcHRpb25zX2xlbmAgaXMgbm93IGluaXRpYWxpemVkICpiZWZvcmUqIHRoZSBgaXBfdHVuX3NldF9vcHRzKClgIGNhbGwgaW4gYm90aCBgaXBfdHVuX2J1aWxkX3N0YXRlKClgIGFuZCBgaXA2X3R1bl9idWlsZF9zdGF0ZSgpYC4gVGhlIHJlYWNoYWJpbGl0eSBjb21lcyBmcm9tIG5ldGxpbmsgcm91dGUvbmV4dGhvcCBjb25maWd1cmF0aW9uIHNwZWNpZnlpbmcgbGlnaHR3ZWlnaHQgdHVubmVsIGVuY2Fwc3VsYXRpb24gKGBSVEFfRU5DQVBgIHdpdGggZWl0aGVyIGBMV1RVTk5FTF9FTkNBUF9JUGAgb3IgYExXVFVOTkVMX0VOQ0FQX0lQNmApLiBUaGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBpbml0aWFsaXphdGlvbiBvZiByZWFjaGFibGUgc3RhdGUgYW5kIHRoZSBoYW5kbGluZyBvZiBvcHRpb25zIHdoZW4gYSB0dW5uZWwgcm91dGUgaXMgY3JlYXRlZC4KCkkgYW0gc2F0aXNmaWVkIHRoYXQgbXkgYW5hbHlzaXMgaXMgc291bmQuIExldCYjMzk7cyBwcm9jZWVkIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF90dW5fYnVpbGRfc3RhdGUmIzM0OywKICAgICYjMzQ7aXA2X3R1bl9idWlsZF9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMsIG1vdmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gYmVmb3JlIGlwX3R1bl9zZXRfb3B0cygpIGluIGJvdGggaXBfdHVuX2J1aWxkX3N0YXRlKCkgYW5kIGlwNl90dW5fYnVpbGRfc3RhdGUoKS4gVGhpcyBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayByb3V0ZS9uZXh0aG9wIHJlcXVlc3RzIGNvbmZpZ3VyaW5nIGxpZ2h0d2VpZ2h0IHR1bm5lbCBlbmNhcHN1bGF0aW9uIChMV1RVTk5FTF9FTkNBUF9JUCBhbmQgTFdUVU5ORUxfRU5DQVBfSVA2KS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0dW5uZWwgb3B0aW9uIHBhcnNpbmcgYW5kIGJvdW5kcyBjaGVja2luZyBvbiB0dW5uZWwgc3RhdGUgY3JlYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TFdUVU5ORUwmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3R1bl9idWlsZF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtpcDZfdHVuX2J1aWxkX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYywgbW92aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiBiZWZvcmUgaXBfdHVuX3NldF9vcHRzKCkgaW4gYm90aCBpcF90dW5fYnVpbGRfc3RhdGUoKSBhbmQgaXA2X3R1bl9idWlsZF9zdGF0ZSgpLiBUaGlzIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIHJvdXRlL25leHRob3AgcmVxdWVzdHMgY29uZmlndXJpbmcgbGlnaHR3ZWlnaHQgdHVubmVsIGVuY2Fwc3VsYXRpb24gKExXVFVOTkVMX0VOQ0FQX0lQIGFuZCBMV1RVTk5FTF9FTkNBUF9JUDYpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHR1bm5lbCBvcHRpb24gcGFyc2luZyBhbmQgYm91bmRzIGNoZWNraW5nIG9uIHR1bm5lbCBzdGF0ZSBjcmVhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpcF90dW5fYnVpbGRfc3RhdGUoKWAgYW5kIGBpcDZfdHVuX2J1aWxkX3N0YXRlKClgIHRvIGluaXRpYWxpemUgYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtgIHByaW9yIHRvIGNhbGxpbmcgYGlwX3R1bl9zZXRfb3B0cygpYCwgcmF0aGVyIHRoYW4gYWZ0ZXJ3YXJkcy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGZsZXhpYmxlIGFycmF5IG1lbWJlciBgaW5mby1cdTAwM2VvcHRpb25zYCAod2hpY2ggaXMgYW5ub3RhdGVkIHdpdGggYF9fY291bnRlZF9ieShvcHRpb25zX2xlbilgKSBoYXMgaXRzIGNvdW50ZXIgcG9wdWxhdGVkIGJlZm9yZSBhY2Nlc3MuXG5cblJlZ2FyZGluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb246XG4tIFRoZSBgc3RydWN0IGx3dHVubmVsX3N0YXRlYCBhbmQgaXRzIGVtYmVkZGVkIGBzdHJ1Y3QgaXBfdHVubmVsX2luZm9gIGFyZSBhbGxvY2F0ZWQgdmlhIGBsd3R1bm5lbF9zdGF0ZV9hbGxvYygpYCwgd2hpY2ggdXNlcyBga3phbGxvYygpYCB3aXRoIGBHRlBfQVRPTUlDYC4gQ29uc2VxdWVudGx5LCBhbGwgYWxsb2NhdGVkIGJ5dGVzIChpbmNsdWRpbmcgaGVhZGVycyBhbmQgdHJhaWxpbmcgb3B0aW9uIGJ1ZmZlcnMpIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGF0IGFsbG9jYXRpb24gdGltZS5cbi0gTW92aW5nIHRoZSBhc3NpZ25tZW50IG9mIGBvcHRpb25zX2xlbmAgZWFybGllciBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9maWVsZHMgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSWYgYGlwX3R1bl9zZXRfb3B0cygpYCBmYWlscywgdGhlIHN0YXRlIGlzIGZyZWVkIGltbWVkaWF0ZWx5LlxuXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZCwgc3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50IHRvIHZhbGlkYXRlIHRoZXNlIGNoYW5nZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ1NmY1ZWY0YWYyM2NkMGRkYjJiM2FjNGVjZTE5OWFhMzMyMWZmZDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAwNjoyMTo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMgYi9uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jCmluZGV4IDUxNjhkNTQ2ZWEyZmQuLjhmYjQ3NDJhY2E5MjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYwpAQCAtNzExLDYgJiM0Mzs3MTEsNyBAQCBzdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsCiAJbmV3X3N0YXRlLSZndDt0eXBlID0gTFdUVU5ORUxfRU5DQVBfSVA7CiAKIAl0dW5faW5mbyA9IGx3dF90dW5faW5mbyhuZXdfc3RhdGUpOwomIzQzOwl0dW5faW5mby0mZ3Q7b3B0aW9uc19sZW4gPSBvcHRfbGVuOwogCiAJZXJyID0gaXBfdHVuX3NldF9vcHRzKHRiW0xXVFVOTkVMX0lQX09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTsKIAlpZiAoZXJyICZsdDsgMCkgewpAQCAtNzUzLDcgJiM0Mzs3NTQsNiBAQCBzdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsCiAJfQogCiAJdHVuX2luZm8tJmd0O21vZGUgPSBJUF9UVU5ORUxfSU5GT19UWDsKLQl0dW5faW5mby0mZ3Q7b3B0aW9uc19sZW4gPSBvcHRfbGVuOwogCiAJKnRzID0gbmV3X3N0YXRlOwogCkBAIC0xMDA1LDYgJiM0MzsxMDA1LDcgQEAgc3RhdGljIGludCBpcDZfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0ciwKIAluZXdfc3RhdGUtJmd0O3R5cGUgPSBMV1RVTk5FTF9FTkNBUF9JUDY7CiAKIAl0dW5faW5mbyA9IGx3dF90dW5faW5mbyhuZXdfc3RhdGUpOwomIzQzOwl0dW5faW5mby0mZ3Q7b3B0aW9uc19sZW4gPSBvcHRfbGVuOwogCiAJZXJyID0gaXBfdHVuX3NldF9vcHRzKHRiW0xXVFVOTkVMX0lQNl9PUFRTXSwgdHVuX2luZm8sIGV4dGFjayk7CiAJaWYgKGVyciAmbHQ7IDApIHsKQEAgLTEwNDAsNyAmIzQzOzEwNDEsNiBAQCBzdGF0aWMgaW50IGlwNl90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLAogCX0KIAogCXR1bl9pbmZvLSZndDttb2RlID0gSVBfVFVOTkVMX0lORk9fVFggfCBJUF9UVU5ORUxfSU5GT19JUFY2OwotCXR1bl9pbmZvLSZndDtvcHRpb25zX2xlbiA9IG9wdF9sZW47CiAKIAkqdHMgPSBuZXdfc3RhdGU7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBkaWcgaW4uIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGV2ZW4gZG9pbmcuIEZyb20gdGhlIGRpZmYsIGl0IGxvb2tzIGxpa2UgY2hhbmdlcyBpbiBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBpcF90dW5fYnVpbGRfc3RhdGVgIGZ1bmN0aW9ucywgYm90aCBmb3IgSVB2NCBhbmQgSVB2NiB0dW5uZWxzLiBUaGUgbWFpbiBhZGRpdGlvbiBzZWVtcyB0byBiZSB0aGUgbGluZSBgdHVuX2luZm8tJmd0O29wdGlvbnNfbGVuID0gb3B0X2xlbmAgaW5zZXJ0ZWQgaW4gdHdvIHBsYWNlcy4gSXQgbG9va3MgbGlrZSBgb3B0aW9uc19sZW5gIGlzIGJlaW5nIHNldCBlYXJsaWVyLiBXaGF0JiMzOTtzIGludGVyZXN0aW5nIGlzIHRoaXMgbGluZSBpcyAqcmVtb3ZlZCogZnJvbSB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbnMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCB3aGV0aGVyIG9yIG5vdCBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgbWVtb3J5IG1hbmFnZW1lbnQgdnVsbmVyYWJpbGl0aWVzLiBGcm9tIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjaywgY2hhbmdlcyBsaWtlIHRoZXNlLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gdHVubmVsIG9wdGlvbnMgYW5kIGxlbmd0aCBjYWxjdWxhdGlvbnMsIGFyZSB3aGVyZSB0aGluZ3MgY2FuIGdldCB0cmlja3kuIEkga25vdyB0aGF0IHRoZSBuZXR3b3JraW5nIHN0YWNrIGNhbiBiZSBhIGdvbGRtaW5lIG9mIHZ1bG5lcmFiaWxpdGllcy4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGJsb2Nrcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlYWQgdGhlIGNvZGUgZnJvbSBhcm91bmQgbGluZXMgNzAwLTc2MCBhbmQgOTkwLTEwNTAgaW4gYG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBjb250ZXh0IG9uIHdoYXQgYGlwX3R1bl9idWlsZF9zdGF0ZWAgZG9lcyBhbmQgd2hhdCBgb3B0X2xlbmAgYW5kIGB0dW5faW5mb2AgcmVwcmVzZW50LiBJIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIHdoYXQgYGlwX3R1bl9zZXRfb3B0c2AgZG9lcywgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSB0dW5uZWwgb3B0aW9ucyBhcmUgbWFuaXB1bGF0ZWQuCgpJIHdhbnQgdG8ga25vdyBob3cgYG9wdF9sZW5gIGlzIGRlcml2ZWQuIEFyZSB3ZSBkZWFsaW5nIHdpdGggdXNlci1jb250cm9sbGVkIGlucHV0IGhlcmU/IFdoYXQga2luZCBvZiBkYXRhIGlzIHBhc3NlZCBpbiBgdGJbTFdUVU5ORUxfSVBfT1BUU11gPyBJZiB0aGUgbGVuZ3RoIGlzIG1pc2NhbGN1bGF0ZWQgb3IgbWlzaGFuZGxlZCwgd2UgbWlnaHQgaGF2ZSBhbiBpbmZvcm1hdGlvbiBsZWFrIG9yIHdyaXRlIHZ1bG5lcmFiaWxpdHkgaW4gdGhlc2Ugb3B0aW9ucy4KCkFmdGVyIEkgdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCBJJiMzOTtsbCB0aGVuIGNvbnNpZGVyIEtNU0FOLiBEb2VzIHRoaXMgcGF0Y2ggY2hhbmdlIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBpbml0aWFsaXplZCwgb3IgZGVhbGxvY2F0ZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIHRoYXQgS01TQU4gd291bGQgYmUgZ29vZCBhdCBjYXRjaGluZz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2hhbmdlcyBpbiBsZW5ndGggY2FsY3VsYXRpb25zLCBwb3RlbnRpYWwgb2ZmLWJ5LW9uZSBlcnJvcnMsIG9yIHBsYWNlcyB3aGVyZSB1bmNoZWNrZWQgdmFsdWVzIGFyZSB1c2VkIGFzIGFycmF5IGluZGljZXMgb3Igc2l6ZXMuIEJhc2VkIG9uIHRoYXQgYW5hbHlzaXMsIEkmIzM5O2xsIHJlY29tbWVuZCB3aGV0aGVyIGEgZGVkaWNhdGVkIGZ1enppbmcgc2Vzc2lvbiBpcyB0aGUgcmlnaHQgbW92ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2OTA6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKip0cyxcbiA2OTE6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNjkyOlx0e1xuIDY5MzpcdFx0c3RydWN0IG5sYXR0ciAqdGJbTFdUVU5ORUxfSVBfTUFYICYjNDM7IDFdO1xuIDY5NDpcdFx0c3RydWN0IGx3dHVubmVsX3N0YXRlICpuZXdfc3RhdGU7XG4gNjk1Olx0XHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvO1xuIDY5NjpcdFx0aW50IGVyciwgb3B0X2xlbjtcbiA2OTc6XHRcbiA2OTg6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgTFdUVU5ORUxfSVBfTUFYLCBhdHRyLFxuIDY5OTpcdFx0XHRcdFx0XHQgIGlwX3R1bl9wb2xpY3ksIGV4dGFjayk7XG4gNzAwOlx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDcwMTpcdFx0XHRyZXR1cm4gZXJyO1xuIDcwMjpcdFxuIDcwMzpcdFx0b3B0X2xlbiA9IGlwX3R1bl9nZXRfb3B0bGVuKHRiW0xXVFVOTkVMX0lQX09QVFNdLCBleHRhY2spO1xuIDcwNDpcdFx0aWYgKG9wdF9sZW4gXHUwMDNjIDApXG4gNzA1Olx0XHRcdHJldHVybiBvcHRfbGVuO1xuIDcwNjpcdFxuIDcwNzpcdFx0bmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCp0dW5faW5mbykgJiM0Mzsgb3B0X2xlbik7XG4gNzA4Olx0XHRpZiAoIW5ld19zdGF0ZSlcbiA3MDk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNzEwOlx0XG4gNzExOlx0XHRuZXdfc3RhdGUtXHUwMDNldHlwZSA9IExXVFVOTkVMX0VOQ0FQX0lQO1xuIDcxMjpcdFxuIDcxMzpcdFx0dHVuX2luZm8gPSBsd3RfdHVuX2luZm8obmV3X3N0YXRlKTtcbiA3MTQ6XHRcdHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcbiA3MTU6XHRcbiA3MTY6XHRcdGVyciA9IGlwX3R1bl9zZXRfb3B0cyh0YltMV1RVTk5FTF9JUF9PUFRTXSwgdHVuX2luZm8sIGV4dGFjayk7XG4gNzE3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gNzE4Olx0XHRcdGx3dHN0YXRlX2ZyZWUobmV3X3N0YXRlKTtcbiA3MTk6XHRcdFx0cmV0dXJuIGVycjtcbiA3MjA6XHRcdH1cbiA3MjE6XHRcbiA3MjI6XHQjaWZkZWYgQ09ORklHX0RTVF9DQUNIRVxuIDcyMzpcdFx0ZXJyID0gZHN0X2NhY2hlX2luaXQoXHUwMDI2dHVuX2luZm8tXHUwMDNlZHN0X2NhY2hlLCBHRlBfS0VSTkVMKTtcbiA3MjQ6XHRcdGlmIChlcnIpIHtcbiA3MjU6XHRcdFx0bHd0c3RhdGVfZnJlZShuZXdfc3RhdGUpO1xuIDcyNjpcdFx0XHRyZXR1cm4gZXJyO1xuIDcyNzpcdFx0fVxuIDcyODpcdCNlbmRpZlxuIDcyOTpcdFxuIDczMDpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX0lEXSlcbiA3MzE6XHRcdFx0dHVuX2luZm8tXHUwMDNla2V5LnR1bl9pZCA9IG5sYV9nZXRfYmU2NCh0YltMV1RVTk5FTF9JUF9JRF0pO1xuIDczMjpcdFxuIDczMzpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX0RTVF0pXG4gNzM0Olx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS51LmlwdjQuZHN0ID0gbmxhX2dldF9pbl9hZGRyKHRiW0xXVFVOTkVMX0lQX0RTVF0pO1xuIDczNTpcdFxuIDczNjpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX1NSQ10pXG4gNzM3Olx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS51LmlwdjQuc3JjID0gbmxhX2dldF9pbl9hZGRyKHRiW0xXVFVOTkVMX0lQX1NSQ10pO1xuIDczODpcdFxuIDczOTpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX1RUTF0pXG4gNzQwOlx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS50dGwgPSBubGFfZ2V0X3U4KHRiW0xXVFVOTkVMX0lQX1RUTF0pO1xuIDc0MTpcdFxuIDc0MjpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX1RPU10pXG4gNzQzOlx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS50b3MgPSBubGFfZ2V0X3U4KHRiW0xXVFVOTkVMX0lQX1RPU10pO1xuIDc0NDpcdFxuIDc0NTpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQX0ZMQUdTXSkge1xuIDc0NjpcdFx0XHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XG4gNzQ3Olx0XG4gNzQ4Olx0XHRcdGlwX3R1bm5lbF9mbGFnc19mcm9tX2JlMTYoZmxhZ3MsXG4gNzQ5Olx0XHRcdFx0XHRcdCAgbmxhX2dldF9iZTE2KHRiW0xXVFVOTkVMX0lQX0ZMQUdTXSkpO1xuIDc1MDpcdFx0XHRpcF90dW5uZWxfY2xlYXJfb3B0aW9uc19wcmVzZW50KGZsYWdzKTtcbiA3NTE6XHRcbiA3NTI6XHRcdFx0aXBfdHVubmVsX2ZsYWdzX29yKHR1bl9pbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MsXG4gNzUzOlx0XHRcdFx0XHQgICB0dW5faW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzLCBmbGFncyk7XG4gNzU0Olx0XHR9XG4gNzU1Olx0XG4gNzU2Olx0XHR0dW5faW5mby1cdTAwM2Vtb2RlID0gSVBfVFVOTkVMX0lORk9fVFg7XG4gNzU3Olx0XG4gNzU4Olx0XHQqdHMgPSBuZXdfc3RhdGU7XG4gNzU5Olx0XG4gNzYwOlx0XHRyZXR1cm4gMDtcbiA3NjE6XHR9XG4gNzYyOlx0XG4gNzYzOlx0c3RhdGljIHZvaWQgaXBfdHVuX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3RzdGF0ZSlcbiA3NjQ6XHR7XG4gNzY1Olx0I2lmZGVmIENPTkZJR19EU1RfQ0FDSEVcbiA3NjY6XHRcdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm8gPSBsd3RfdHVuX2luZm8obHd0c3RhdGUpO1xuIDc2NzpcdFxuIDc2ODpcdFx0ZHN0X2NhY2hlX2Rlc3Ryb3koXHUwMDI2dHVuX2luZm8tXHUwMDNlZHN0X2NhY2hlKTtcbiA3Njk6XHQjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk2MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyBgaXBfdHVuX3NldF9vcHRzYCBhbmQgYGx3dHVubmVsX3N0YXRlX2FsbG9jYCoqCgpSaWdodCwgbXkgY3VyaW9zaXR5IGlzIHBpcXVlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBpcF90dW5fc2V0X29wdHNgIGFuZCBgbHd0dW5uZWxfc3RhdGVfYWxsb2NgLiBJIHN1c3BlY3QgdGhleSYjMzk7cmUgaW52b2x2ZWQgaW4gY29uZmlndXJpbmcgb3IgbWFuYWdpbmcgdGhlIHN0YXRlIG9mIExXVHVubmVscywgd2hpY2ggaXMgYSBjb21tb24gcGF0dGVybi4gVG8gZ2V0IGEgY2xlYXIgcGljdHVyZSwgSSBzaG91bGQgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGJvdGggZnVuY3Rpb25zLiBJ4oCZbGwgbG9vayBmb3IgdGhlaXIgZGVmaW5pdGlvbnMgYW5kLCBpbXBvcnRhbnRseSwgd2hlcmUgYW5kIGhvdyB0aGV5JiMzOTtyZSBjYWxsZWQuIEnigJltIHRoaW5raW5nIHRoZSBzdHJ1Y3R1cmUgc2hvdWxkIGJlIGZhaXJseSBpbnR1aXRpdmUsIGJ1dCBsZXQmIzM5O3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zIHlldC4gTGV0IHRoZSBjb2RlIHNwZWFrIGZvciBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3R1bl9zZXRfb3B0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz02NzY9c3RhdGljIGludCBpcF90dW5fZ2V0X29wdGxlbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNjgxLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo2ODI6c3RhdGljIGludCBpcF90dW5fc2V0X29wdHMoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy02ODMtXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9Njg4PXN0YXRpYyBpbnQgaXBfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTcxNS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6NzE2Olx0ZXJyID0gaXBfdHVuX3NldF9vcHRzKHRiW0xXVFVOTkVMX0lQX09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNzE3LVx0aWYgKGVyciBcdTAwM2MgMCkge1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9OTgyPXN0YXRpYyBpbnQgaXA2X3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDA5LVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxMDEwOlx0ZXJyID0gaXBfdHVuX3NldF9vcHRzKHRiW0xXVFVOTkVMX0lQNl9PUFRTXSwgdHVuX2luZm8sIGV4dGFjayk7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTEwMTEtXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MzEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgc2VjdGlvbiBvZiBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AsIGFzIHRob3VnaCBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQgYW5kIHdvcmtpbmcgd2l0aCB0aGUgY29kZToKCioqRGl2aW5nIGludG8gdGhlIElQIFR1bm5lbCBDb3JlIC0gTGluZXMgNjAwLTY4NSoqCgpSaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gbGluZXMgNjAwIHRocm91Z2ggNjg1IGluIGBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jYC4gSSBrbm93IHRoaXMgYXJlYSBmYWlybHkgd2VsbCwgc28gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhYm91dCB0aGUgY29yZSBtZWNoYW5pc21zIGZvciBJUC1pbi1JUCB0dW5uZWxzIOKAkyB0aGUgaGVhcnQgb2YgZW5jYXBzdWxhdGluZyBhbmQgZGVjYXBzdWxhdGluZyBJUCBwYWNrZXRzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgcmFuZ2UgcHJvYmFibHkgaW52b2x2ZXMgdGhlIGhhbmRsaW5nIG9mIHNwZWNpZmljIHR1bm5lbCB0eXBlcywgb3IgcGVyaGFwcyBzb21lIGNvbW1vbiBoZWxwZXIgZnVuY3Rpb25zIHV0aWxpemVkIGFjcm9zcyBkaWZmZXJlbnQgdHVubmVsIGltcGxlbWVudGF0aW9ucy4gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZSBkZXRhaWxzIHJlbGF0ZWQgdG8gc2V0dGluZyB1cCBhbmQgdGVhcmluZyBkb3duIHRoZSB0dW5uZWwgaW50ZXJmYWNlcyBhbmQgZGVhbGluZyB3aXRoIHRoZSBpbm5lciBJUCBoZWFkZXIgbWFuaXB1bGF0aW9uLiBBcmUgd2UgZGVhbGluZyB3aXRoIHRoZSBjb21tb24gdHVubmVsIHR5cGU/CgpJJiMzOTttIGJldHRpbmcgdGhpcyBpcyBnb2luZyB0byBpbmNsdWRlIGNoZWNraW5nIHRoZSB2YWxpZGl0eSBvZiB0aGUgSVAgaGVhZGVyIGluIHRoZSB0dW5uZWwsIGhhbmRsaW5nIHRoZSBjaGVja3N1bSBjYWxjdWxhdGlvbiAob3Igc2tpcHBpbmcgaXQsIGRlcGVuZGluZyBvbiB0aGUgdHVubmVsIHR5cGUpLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgdGhlIGNvZGUgaGFuZGxlcyB0aGUgZmxvdyBsYWJlbCBhbmQgVE9TIGJpdHMuIElzIHRoZSBpbm5lciBUT1MgcHJlc2VydmVkPyBXaGF0IGFyZSB0aGUgcG9saWN5IGNob2ljZXMgaW4gdGhlIHBhY2tldCBwcm9jZXNzaW5nIHdpdGggcmVzcGVjdCB0byB0aGUgRFNDUCB2YWx1ZXMgZnJvbSB0aGUgb3V0ZXIgaGVhZGVyPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRldGVybWluZSBpZiB0aGUgdHVubmVsIGNhbiBiZSB1c2VkIGluIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudC4KCkkgZXhwZWN0IHRvIHNlZSBzb21lIGVycm9yIGNoZWNraW5nIGluIHRoZXJlIHRvby4gV2hhdCBoYXBwZW5zIGlmIHRoZSBpbm5lciBwYWNrZXQgaXMgbWFsZm9ybWVkPyBIb3cgZG9lcyB0aGUga2VybmVsIHJlc3BvbmQgdG8gYW4gSVAgZnJhZ21lbnQgaW4gdGhlIHR1bm5lbD8gSXMgdGhlIHBhY2tldCBkcm9wcGVkLCBvciBpcyBmcmFnbWVudGF0aW9uIGhhbmRsZWQgd2l0aGluIHRoZSB0dW5uZWw/IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGVycm9yIHBhdGhzLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIG1lbW9yeSBhbGxvY2F0aW9uIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEl0IHdpbGwgYWxzbyBiZSBpbXBvcnRhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBtYW5hZ2VzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSByb3V0aW5nIHRhYmxlLiBJcyB0aGVyZSBhbnkgaGFuZGxpbmcgb2Ygcm91dGUgbG9va3Vwcywgb3IgZG9lcyB0aGUgdHVubmVsIHJlbHkgc29sZWx5IG9uIGNvbmZpZ3VyZWQgcm91dGVzPyBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgc2VjdGlvbiBoYW5kbGVzIHRoZSBpbmdyZXNzIGFuZCBlZ3Jlc3Mgb2YgdGhlIHR1bm5lbGxlZCB0cmFmZmljLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjMwOlx0XHRcdFx0ICAgaXBfb3B0c19wb2xpY3ksIGV4dGFjayk7XG4gNjMxOlx0XHRpZiAoZXJyKVxuIDYzMjpcdFx0XHRyZXR1cm4gZXJyO1xuIDYzMzpcdFxuIDYzNDpcdFx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBubGFfZGF0YShhdHRyKSwgbmxhX2xlbihhdHRyKSwgcmVtKSB7XG4gNjM1Olx0XHRcdHN3aXRjaCAobmxhX3R5cGUobmxhKSkge1xuIDYzNjpcdFx0XHRjYXNlIExXVFVOTkVMX0lQX09QVFNfR0VORVZFOlxuIDYzNzpcdFx0XHRcdGlmICh0eXBlIFx1MDAyNlx1MDAyNiB0eXBlICE9IElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVClcbiA2Mzg6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDYzOTpcdFx0XHRcdG9wdF9sZW4gPSBpcF90dW5fcGFyc2Vfb3B0c19nZW5ldmUobmxhLCBpbmZvLCBvcHRzX2xlbixcbiA2NDA6XHRcdFx0XHRcdFx0XHRcdCAgIGV4dGFjayk7XG4gNjQxOlx0XHRcdFx0aWYgKG9wdF9sZW4gXHUwMDNjIDApXG4gNjQyOlx0XHRcdFx0XHRyZXR1cm4gb3B0X2xlbjtcbiA2NDM6XHRcdFx0XHRvcHRzX2xlbiAmIzQzOz0gb3B0X2xlbjtcbiA2NDQ6XHRcdFx0XHRpZiAob3B0c19sZW4gXHUwMDNlIElQX1RVTk5FTF9PUFRTX01BWClcbiA2NDU6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDY0NjpcdFx0XHRcdHR5cGUgPSBJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQ7XG4gNjQ3Olx0XHRcdFx0YnJlYWs7XG4gNjQ4Olx0XHRcdGNhc2UgTFdUVU5ORUxfSVBfT1BUU19WWExBTjpcbiA2NDk6XHRcdFx0XHRpZiAodHlwZSlcbiA2NTA6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDY1MTpcdFx0XHRcdG9wdF9sZW4gPSBpcF90dW5fcGFyc2Vfb3B0c192eGxhbihubGEsIGluZm8sIG9wdHNfbGVuLFxuIDY1MjpcdFx0XHRcdFx0XHRcdFx0ICBleHRhY2spO1xuIDY1MzpcdFx0XHRcdGlmIChvcHRfbGVuIFx1MDAzYyAwKVxuIDY1NDpcdFx0XHRcdFx0cmV0dXJuIG9wdF9sZW47XG4gNjU1Olx0XHRcdFx0b3B0c19sZW4gJiM0Mzs9IG9wdF9sZW47XG4gNjU2Olx0XHRcdFx0dHlwZSA9IElQX1RVTk5FTF9WWExBTl9PUFRfQklUO1xuIDY1NzpcdFx0XHRcdGJyZWFrO1xuIDY1ODpcdFx0XHRjYXNlIExXVFVOTkVMX0lQX09QVFNfRVJTUEFOOlxuIDY1OTpcdFx0XHRcdGlmICh0eXBlKVxuIDY2MDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjYxOlx0XHRcdFx0b3B0X2xlbiA9IGlwX3R1bl9wYXJzZV9vcHRzX2Vyc3BhbihubGEsIGluZm8sIG9wdHNfbGVuLFxuIDY2MjpcdFx0XHRcdFx0XHRcdFx0ICAgZXh0YWNrKTtcbiA2NjM6XHRcdFx0XHRpZiAob3B0X2xlbiBcdTAwM2MgMClcbiA2NjQ6XHRcdFx0XHRcdHJldHVybiBvcHRfbGVuO1xuIDY2NTpcdFx0XHRcdG9wdHNfbGVuICYjNDM7PSBvcHRfbGVuO1xuIDY2NjpcdFx0XHRcdHR5cGUgPSBJUF9UVU5ORUxfRVJTUEFOX09QVF9CSVQ7XG4gNjY3Olx0XHRcdFx0YnJlYWs7XG4gNjY4Olx0XHRcdGRlZmF1bHQ6XG4gNjY5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjcwOlx0XHRcdH1cbiA2NzE6XHRcdH1cbiA2NzI6XHRcbiA2NzM6XHRcdHJldHVybiBvcHRzX2xlbjtcbiA2NzQ6XHR9XG4gNjc1Olx0XG4gNjc2Olx0c3RhdGljIGludCBpcF90dW5fZ2V0X29wdGxlbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIDY3NzpcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDY3ODpcdHtcbiA2Nzk6XHRcdHJldHVybiBpcF90dW5fcGFyc2Vfb3B0cyhhdHRyLCBOVUxMLCBleHRhY2spO1xuIDY4MDpcdH1cbiA2ODE6XHRcbiA2ODI6XHRzdGF0aWMgaW50IGlwX3R1bl9zZXRfb3B0cyhzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXG4gNjgzOlx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDY4NDpcdHtcbiA2ODU6XHRcdHJldHVybiBpcF90dW5fcGFyc2Vfb3B0cyhhdHRyLCBpbmZvLCBleHRhY2spO1xuIDY4NjpcdH1cbiA2ODc6XHRcbiA2ODg6XHRzdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gNjg5Olx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGZhbWlseSwgY29uc3Qgdm9pZCAqY2ZnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDk2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQsIGRlbGl2ZXJlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBJUCBUdW5uZWwgQ29yZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQganVtcCBiYWNrIGludG8gdGhlIGd1dHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIExldCYjMzk7cyBmb2N1cyBvbiBhIHNwZWNpZmljIGFyZWEsIHNwZWNpZmljYWxseSB0aGUgYG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNgIGZpbGUuIEkmIzM5O20gemVyb2luZyBpbiBvbiBsaW5lcyA1NTAgdG8gNjMwLiBUaGlzIHNlY3Rpb24gbGlrZWx5IGhhbmRsZXMgc29tZSBjcml0aWNhbCBhc3BlY3Qgb2YgSVAgdHVubmVsaW5nIGZ1bmN0aW9uYWxpdHksIGFuZCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcy4gQ291bGQgYmUgcmVsYXRlZCB0byBlbmNhcHN1bGF0aW9uLCBkZWNhcHN1bGF0aW9uLCBoZWFkZXIgbWFuaXB1bGF0aW9uLCBvciBwZXJoYXBzIHNvbWUga2luZCBvZiBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIHR1bm5lbCBvcGVyYXRpb25zLiBJdCBtaWdodCBiZSBkZWFsaW5nIHdpdGggYSBwYXJ0aWN1bGFyIHR1bm5lbCB0eXBlIG9yIGEgc3BlY2lmaWMgc2NlbmFyaW8gcmVsYXRlZCB0byBmcmFnbWVudGF0aW9uLCByb3V0aW5nLCBvciBldmVuIG11bHRpY2FzdC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW4gdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYXJlIGhpZGluZyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NTA6XHRcdFx0XHQgICAgICAgdnhsYW5fb3B0X3BvbGljeSwgZXh0YWNrKTtcbiA1NTE6XHRcdGlmIChlcnIpXG4gNTUyOlx0XHRcdHJldHVybiBlcnI7XG4gNTUzOlx0XG4gNTU0Olx0XHRpZiAoIXRiW0xXVFVOTkVMX0lQX09QVF9WWExBTl9HQlBdKVxuIDU1NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1NTY6XHRcbiA1NTc6XHRcdGlmIChpbmZvKSB7XG4gNTU4Olx0XHRcdHN0cnVjdCB2eGxhbl9tZXRhZGF0YSAqbWQgPVxuIDU1OTpcdFx0XHRcdGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgJiM0Mzsgb3B0c19sZW47XG4gNTYwOlx0XG4gNTYxOlx0XHRcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfVlhMQU5fR0JQXTtcbiA1NjI6XHRcdFx0bWQtXHUwMDNlZ2JwID0gbmxhX2dldF91MzIoYXR0cik7XG4gNTYzOlx0XHRcdG1kLVx1MDAzZWdicCBcdTAwMjY9IFZYTEFOX0dCUF9NQVNLO1xuIDU2NDpcdFx0XHRfX3NldF9iaXQoSVBfVFVOTkVMX1ZYTEFOX09QVF9CSVQsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncyk7XG4gNTY1Olx0XHR9XG4gNTY2Olx0XG4gNTY3Olx0XHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCB2eGxhbl9tZXRhZGF0YSk7XG4gNTY4Olx0fVxuIDU2OTpcdFxuIDU3MDpcdHN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfZXJzcGFuKHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gNTcxOlx0XHRcdFx0XHQgICAgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLCBpbnQgb3B0c19sZW4sXG4gNTcyOlx0XHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDU3MzpcdHtcbiA1NzQ6XHRcdHN0cnVjdCBubGF0dHIgKnRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fTUFYICYjNDM7IDFdO1xuIDU3NTpcdFx0aW50IGVycjtcbiA1NzY6XHRcdHU4IHZlcjtcbiA1Nzc6XHRcbiA1Nzg6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIExXVFVOTkVMX0lQX09QVF9FUlNQQU5fTUFYLCBhdHRyLFxuIDU3OTpcdFx0XHRcdCAgICAgICBlcnNwYW5fb3B0X3BvbGljeSwgZXh0YWNrKTtcbiA1ODA6XHRcdGlmIChlcnIpXG4gNTgxOlx0XHRcdHJldHVybiBlcnI7XG4gNTgyOlx0XG4gNTgzOlx0XHRpZiAoIXRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fVkVSXSlcbiA1ODQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTg1Olx0XG4gNTg2Olx0XHR2ZXIgPSBubGFfZ2V0X3U4KHRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fVkVSXSk7XG4gNTg3Olx0XHRpZiAodmVyID09IDEpIHtcbiA1ODg6XHRcdFx0aWYgKCF0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0lOREVYXSlcbiA1ODk6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1OTA6XHRcdH0gZWxzZSBpZiAodmVyID09IDIpIHtcbiA1OTE6XHRcdFx0aWYgKCF0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0RJUl0gfHxcbiA1OTI6XHRcdFx0ICAgICF0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0hXSURdKVxuIDU5MzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDU5NDpcdFx0fSBlbHNlIHtcbiA1OTU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTk2Olx0XHR9XG4gNTk3Olx0XG4gNTk4Olx0XHRpZiAoaW5mbykge1xuIDU5OTpcdFx0XHRzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhICptZCA9XG4gNjAwOlx0XHRcdFx0aXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSAmIzQzOyBvcHRzX2xlbjtcbiA2MDE6XHRcbiA2MDI6XHRcdFx0bWQtXHUwMDNldmVyc2lvbiA9IHZlcjtcbiA2MDM6XHRcdFx0aWYgKHZlciA9PSAxKSB7XG4gNjA0Olx0XHRcdFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fSU5ERVhdO1xuIDYwNTpcdFx0XHRcdG1kLVx1MDAzZXUuaW5kZXggPSBubGFfZ2V0X2JlMzIoYXR0cik7XG4gNjA2Olx0XHRcdH0gZWxzZSB7XG4gNjA3Olx0XHRcdFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fRElSXTtcbiA2MDg6XHRcdFx0XHRtZC1cdTAwM2V1Lm1kMi5kaXIgPSBubGFfZ2V0X3U4KGF0dHIpO1xuIDYwOTpcdFx0XHRcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0hXSURdO1xuIDYxMDpcdFx0XHRcdHNldF9od2lkKFx1MDAyNm1kLVx1MDAzZXUubWQyLCBubGFfZ2V0X3U4KGF0dHIpKTtcbiA2MTE6XHRcdFx0fVxuIDYxMjpcdFxuIDYxMzpcdFx0XHRfX3NldF9iaXQoSVBfVFVOTkVMX0VSU1BBTl9PUFRfQklULCBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MpO1xuIDYxNDpcdFx0fVxuIDYxNTpcdFxuIDYxNjpcdFx0cmV0dXJuIHNpemVvZihzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhKTtcbiA2MTc6XHR9XG4gNjE4Olx0XG4gNjE5Olx0c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0cyhzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXG4gNjIwOlx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNjIxOlx0e1xuIDYyMjpcdFx0aW50IGVyciwgcmVtLCBvcHRfbGVuLCBvcHRzX2xlbiA9IDA7XG4gNjIzOlx0XHRzdHJ1Y3QgbmxhdHRyICpubGE7XG4gNjI0Olx0XHR1MzIgdHlwZSA9IDA7XG4gNjI1Olx0XG4gNjI2Olx0XHRpZiAoIWF0dHIpXG4gNjI3Olx0XHRcdHJldHVybiAwO1xuIDYyODpcdFxuIDYyOTpcdFx0ZXJyID0gbmxhX3ZhbGlkYXRlKG5sYV9kYXRhKGF0dHIpLCBubGFfbGVuKGF0dHIpLCBMV1RVTk5FTF9JUF9PUFRTX01BWCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY1MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgaXBfdHVuX3BhcnNlX29wdHNfZ2VuZXZlYCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZWAgZnVuY3Rpb24uIEkmIzM5O20gZ29pbmcgdG8gemVybyBpbiBvbiBsaW5lcyA1MDAgdGhyb3VnaCA1NTAsIHRvIGdldCBhIHNlbnNlIG9mIGhvdyBHZW5ldmUgb3B0aW9ucyBhcmUgYmVpbmcgcGFyc2VkLCBzcGVjaWZpY2FsbHkgdGhlIHN0cnVjdHVyZSwgdGhlIHdheSB0aGV5IGRlYWwgd2l0aCBsZW5ndGggZmllbGRzLCBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIHZ1bG5lcmFiaWxpdGllcy4gSSB3YW50IHRvIHNlZSBpZiB0aGV5IGFyZSBkb2luZyBhIHByb3BlciB2YWxpZGF0aW9uIG9uIHRoZSBpbmNvbWluZyBkYXRhLCBob3cgdGhleSBjaGVjayBmb3IgcG90ZW50aWFsIG92ZXJmbG93cywgYW5kIHdoYXQgdGhlIGxvZ2ljIGlzIHdoZW4gdGhlIG9wdGlvbiB0eXBlIGlzIG5vdCBzb21ldGhpbmcgdGhhdCBpcyBleHBsaWNpdGx5IHJlY29nbmlzZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhleSYjMzk7cmUgaGFuZGxpbmcgdmFyaWFibGUtbGVuZ3RoIG9wdGlvbnMgY29ycmVjdGx5LCBzaW5jZSBHZW5ldmUgb3B0aW9ucyBjYW4gYmUgcXVpdGUgZmxleGlibGUuIEkgYW50aWNpcGF0ZSBzZWVpbmcgYml0d2lzZSBvcGVyYXRpb25zIGFuZCBwb3RlbnRpYWxseSBzb21lIHBvaW50ZXIgYXJpdGhtZXRpYyBpbiB0aGlzIHNlY3Rpb24g4oCTIGl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgYXJlIGJlaW5nIHVzZWQgdG8gbmF2aWdhdGUgdGhlIG9wdGlvbiBkYXRhLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcdFtMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0lOREVYXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIDUwMTpcdFx0W0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fRElSXVx0PSB7IC50eXBlID0gTkxBX1U4IH0sXG4gNTAyOlx0XHRbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9IV0lEXVx0PSB7IC50eXBlID0gTkxBX1U4IH0sXG4gNTAzOlx0fTtcbiA1MDQ6XHRcbiA1MDU6XHRzdGF0aWMgaW50IGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZShzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIDUwNjpcdFx0XHRcdFx0ICAgIHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbywgaW50IG9wdHNfbGVuLFxuIDUwNzpcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiA1MDg6XHR7XG4gNTA5Olx0XHRzdHJ1Y3QgbmxhdHRyICp0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX01BWCAmIzQzOyAxXTtcbiA1MTA6XHRcdGludCBkYXRhX2xlbiwgZXJyO1xuIDUxMTpcdFxuIDUxMjpcdFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9NQVgsIGF0dHIsXG4gNTEzOlx0XHRcdFx0ICAgICAgIGdlbmV2ZV9vcHRfcG9saWN5LCBleHRhY2spO1xuIDUxNDpcdFx0aWYgKGVycilcbiA1MTU6XHRcdFx0cmV0dXJuIGVycjtcbiA1MTY6XHRcbiA1MTc6XHRcdGlmICghdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9DTEFTU10gfHxcbiA1MTg6XHRcdCAgICAhdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9UWVBFXSB8fFxuIDUxOTpcdFx0ICAgICF0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX0RBVEFdKVxuIDUyMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MjE6XHRcbiA1MjI6XHRcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX0RBVEFdO1xuIDUyMzpcdFx0ZGF0YV9sZW4gPSBubGFfbGVuKGF0dHIpO1xuIDUyNDpcdFx0aWYgKGRhdGFfbGVuICUgNClcbiA1MjU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTI2Olx0XG4gNTI3Olx0XHRpZiAoaW5mbykge1xuIDUyODpcdFx0XHRzdHJ1Y3QgZ2VuZXZlX29wdCAqb3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSAmIzQzOyBvcHRzX2xlbjtcbiA1Mjk6XHRcbiA1MzA6XHRcdFx0bWVtY3B5KG9wdC1cdTAwM2VvcHRfZGF0YSwgbmxhX2RhdGEoYXR0ciksIGRhdGFfbGVuKTtcbiA1MzE6XHRcdFx0b3B0LVx1MDAzZWxlbmd0aCA9IGRhdGFfbGVuIC8gNDtcbiA1MzI6XHRcdFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9HRU5FVkVfQ0xBU1NdO1xuIDUzMzpcdFx0XHRvcHQtXHUwMDNlb3B0X2NsYXNzID0gbmxhX2dldF9iZTE2KGF0dHIpO1xuIDUzNDpcdFx0XHRhdHRyID0gdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9UWVBFXTtcbiA1MzU6XHRcdFx0b3B0LVx1MDAzZXR5cGUgPSBubGFfZ2V0X3U4KGF0dHIpO1xuIDUzNjpcdFx0XHRfX3NldF9iaXQoSVBfVFVOTkVMX0dFTkVWRV9PUFRfQklULCBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MpO1xuIDUzNzpcdFx0fVxuIDUzODpcdFxuIDUzOTpcdFx0cmV0dXJuIHNpemVvZihzdHJ1Y3QgZ2VuZXZlX29wdCkgJiM0MzsgZGF0YV9sZW47XG4gNTQwOlx0fVxuIDU0MTpcdFxuIDU0MjpcdHN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfdnhsYW4oc3RydWN0IG5sYXR0ciAqYXR0cixcbiA1NDM6XHRcdFx0XHRcdCAgIHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbywgaW50IG9wdHNfbGVuLFxuIDU0NDpcdFx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDU0NTpcdHtcbiA1NDY6XHRcdHN0cnVjdCBubGF0dHIgKnRiW0xXVFVOTkVMX0lQX09QVF9WWExBTl9NQVggJiM0MzsgMV07XG4gNTQ3Olx0XHRpbnQgZXJyO1xuIDU0ODpcdFxuIDU0OTpcdFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTFdUVU5ORUxfSVBfT1BUX1ZYTEFOX01BWCwgYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg5MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFVzYWdlIG9mIGB0dW5faW5mby0mZ3Q7b3B0aW9uc19sZW5gKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGB0dW5faW5mby0mZ3Q7b3B0aW9uc19sZW5gIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQgd2l0aGluIHRoaXMgY29kZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBjcml0aWNhbC4gTGV0IG1lIG1lbnRhbGx5IHJ1biB0aHJvdWdoIHRoZSByZWxhdGVkIGNvZGUgc3RydWN0dXJlLi4uIHJpZ2h0LCB0aGF0IHZhcmlhYmxlIGlzIHBhcnQgb2YgdGhlIGB0dW5faW5mb2Agc3RydWN0dXJlLCBhbmQgdGhhdCYjMzk7cyB1c2VkIGZvciBJUCB0dW5uZWxzLiBPa2F5LCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgc2VhcmNoLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIGNvZGViYXNlIGZvciBpbnN0YW5jZXMgb2YgYG9wdGlvbnNfbGVuYCBzcGVjaWZpY2FsbHksIGJ1dCBJJiMzOTtsbCBuYXJyb3cgdGhlIGZvY3VzIGJ5IGxvb2tpbmcgd2l0aGluIGNvbnRleHRzIHRoYXQgd291bGQgbWFrZSBzZW5zZTogcGVyaGFwcyBhcm91bmQgdGhlIGBpcF90dW5uZWxfaW5mb19vcHRzYCBzdHJ1Y3R1cmUsIG9yLCBjcml0aWNhbGx5LCB3aXRoaW4gYGlwX3R1bm5lbF9jb3JlLmNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBzZWFyY2ggcmV2ZWFscy4gVGhpcyBuZWVkcyB0byBiZSBwcmVjaXNlOyBJIG5lZWQgdG8gZm9sbG93IHRoZSBkYXRhIGFuZCB1bmRlcnN0YW5kIGl0cyBwcm9jZXNzaW5nIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3R1bm5lbF9pbmZvX29wdHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jPTU5Nz1ib29sIG1seDVlX3RjX3R1bl9lbmNhcF9pbmZvX2VxdWFsX29wdGlvbnMoc3RydWN0IG1seDVlX2VuY2FwX2tleSAqYSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmMtNjIyLVx0cmV0dXJuIGFfaW5mby1cdTAwM2VvcHRpb25zX2xlbiA9PSBiX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmM6NjIzOlx0ICAgICAgICFtZW1jbXAoaXBfdHVubmVsX2luZm9fb3B0cyhhX2luZm8pLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jOjYyNDpcdFx0ICAgICAgIGlwX3R1bm5lbF9pbmZvX29wdHMoYl9pbmZvKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYy02MjUtXHRcdCAgICAgICBhX2luZm8tXHUwMDNlb3B0aW9uc19sZW4pO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZ2VuZXZlLmM9OTI9c3RhdGljIGludCBtbHg1ZV9nZW5faXBfdHVubmVsX2hlYWRlcl9nZW5ldmUoY2hhciBidWZbXSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2dlbmV2ZS5jLTExNy1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2dlbmV2ZS5jOjExODpcdFx0aXBfdHVubmVsX2luZm9fb3B0c19nZXQoZ2VuZXZlaC1cdTAwM2VvcHRpb25zLCB0dW5faW5mbyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2dlbmV2ZS5jLTExOS1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX3Z4bGFuLmM9ODM9c3RhdGljIGludCBtbHg1ZV9nZW5faXBfdHVubmVsX2hlYWRlcl92eGxhbihjaGFyIGJ1ZltdLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fdnhsYW4uYy0xMDItXHRpZiAodGVzdF9iaXQoSVBfVFVOTkVMX1ZYTEFOX09QVF9CSVQsIHR1bl9rZXktXHUwMDNldHVuX2ZsYWdzKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl92eGxhbi5jOjEwMzpcdFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGUtXHUwMDNldHVuX2luZm8pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl92eGxhbi5jLTEwNC1cdFx0dnhsYW5fYnVpbGRfZ2JwX2hkcih2eGgsIG1kKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYz01NjE2PXN0YXRpYyBib29sIG1seDVlX3RjX3Jlc3RvcmVfdHVubmVsKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jLTU2OTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYzo1Njk1Olx0XHRpcF90dW5uZWxfaW5mb19vcHRzX3NldChcdTAwMjZ0dW5fZHN0LVx1MDAzZXUudHVuX2luZm8sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01Njk2LVx0XHRcdFx0XHRlbmNfb3B0cy5rZXkuZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYz0zMzA9bmZwX2ZsX3B1c2hfZ2VuZXZlX29wdGlvbnMoc3RydWN0IG5mcF9mbF9wYXlsb2FkICpuZnBfZmwsIGludCAqbGlzdF9sZW4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmMtMzM1LVx0aW50IG9wdF9sZW4sIG9wdF9jbnQsIGFjdF9zdGFydCwgdG90X3B1c2hfbGVuO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmM6MzM2Olx0dTggKnNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaXBfdHVuKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2FjdGlvbi5jLTMzNy1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYy0zNzItXHQqbGlzdF9sZW4gJiM0Mzs9IHRvdF9wdXNoX2xlbjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2FjdGlvbi5jOjM3MzpcdHNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaXBfdHVuKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2FjdGlvbi5jLTM3NC1cdHdoaWxlIChvcHRfY250KSB7XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9Mjc1PXN0YXRpYyB2b2lkIGdlbmV2ZV9yeChzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzLFxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI5OS1cdFx0X19zZXRfYml0KElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVCwgZmxhZ3MpO1xuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MzAwOlx0XHRpcF90dW5uZWxfaW5mb19vcHRzX3NldChcdTAwMjZ0dW5fZHN0LVx1MDAzZXUudHVuX2luZm8sXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0zMDEtXHRcdFx0XHRcdGdudmgtXHUwMDNlb3B0aW9ucywgZ252aC1cdTAwM2VvcHRfbGVuICogNCxcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYz0xMjI5PXN0YXRpYyB2b2lkIGdlbmV2ZV9idWlsZF9oZWFkZXIoc3RydWN0IGdlbmV2ZWhkciAqZ2VuZXZlaCxcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xMjQzLVx0aWYgKHRlc3RfYml0KElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKSlcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjEyNDQ6XHRcdGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KGdlbmV2ZWgtXHUwMDNlb3B0aW9ucywgaW5mbyk7XG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xMjQ1LX1cbi0tXG5kcml2ZXJzL25ldC9wZmNwLmM9NTI9c3RhdGljIGludCBwZmNwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3BmY3AuYy03NC1cbmRyaXZlcnMvbmV0L3BmY3AuYzo3NTpcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhcdTAwMjZ0dW5fZHN0LVx1MDAzZXUudHVuX2luZm8pO1xuZHJpdmVycy9uZXQvcGZjcC5jLTc2LVx0aWYgKHVubGlrZWx5KCFtZCkpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTE2NTc9c3RhdGljIGludCB2eGxhbl9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNzQ3LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE3NDg6XHRcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhcdTAwMjZ0dW5fZHN0LVx1MDAzZXUudHVuX2luZm8pO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTE3NDktXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTIzNzM9dm9pZCB2eGxhbl94bWl0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yNDgzLVx0XHRcdFx0Z290byBkcm9wO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjI0ODQ6XHRcdFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI0ODUtXHRcdH1cbi0tXG5pbmNsdWRlL25ldC9kc3RfbWV0YWRhdGEuaD0xNTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YWRhdGFfZHN0ICp0dW5fZHN0X3VuY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC9kc3RfbWV0YWRhdGEuaC0xNjgtXHRuZXdfbWQtXHUwMDNldS50dW5faW5mbyA9IG1kX2RzdC1cdTAwM2V1LnR1bl9pbmZvO1xuaW5jbHVkZS9uZXQvZHN0X21ldGFkYXRhLmg6MTY5Olx0bWVtY3B5KGlwX3R1bm5lbF9pbmZvX29wdHMoXHUwMDI2bmV3X21kLVx1MDAzZXUudHVuX2luZm8pLFxuaW5jbHVkZS9uZXQvZHN0X21ldGFkYXRhLmg6MTcwOlx0ICAgICAgIGlwX3R1bm5lbF9pbmZvX29wdHMoXHUwMDI2bWRfZHN0LVx1MDAzZXUudHVuX2luZm8pLCBtZF9zaXplKTtcbmluY2x1ZGUvbmV0L2RzdF9tZXRhZGF0YS5oLTE3MS1cbi0tXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg9ODk9c3RydWN0IGlwX3R1bm5lbF9lbmNhcCB7XG4tLVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTEwNS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDoxMDY6I2RlZmluZSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pXHRcdFx0XHRcXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTEwNy1cdF9HZW5lcmljKGluZm8sXHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg9Njc0PXN0YXRpYyBpbmxpbmUgdm9pZCBpcHR1bm5lbF94bWl0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwa3RfbGVuKVxuLS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MTAtXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzExOnN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfaW5mb19vcHRzX2dldCh2b2lkICp0byxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MTItXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MTMte1xuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjcxNDpcdG1lbWNweSh0bywgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSwgaW5mby1cdTAwM2VvcHRpb25zX2xlbik7XG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzE1LX1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MTYtXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzE3OnN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfaW5mb19vcHRzX3NldChzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzE4LVx0XHRcdFx0XHQgICBjb25zdCB2b2lkICpmcm9tLCBpbnQgbGVuLFxuLS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MjItXHRpZiAobGVuIFx1MDAzZSAwKSB7XG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzIzOlx0XHRtZW1jcHkoaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSwgZnJvbSwgbGVuKTtcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MjQtXHRcdGlwX3R1bm5lbF9mbGFnc19vcihpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncyxcbi0tXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg9NzU4PXN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfdW5uZWVkX21ldGFkYXRhKHZvaWQpXG4tLVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTc2MS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDo3NjI6c3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KHZvaWQgKnRvLFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTc2My1cdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxuLS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03NjYtXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzY3OnN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfaW5mb19vcHRzX3NldChzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzY4LVx0XHRcdFx0XHQgICBjb25zdCB2b2lkICpmcm9tLCBpbnQgbGVuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ5ODM9QlBGX0NBTExfMyhicGZfc2tiX2dldF90dW5uZWxfb3B0LCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHU4ICosIHRvLCB1MzIsIHNpemUpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDk5Ny1cbm5ldC9jb3JlL2ZpbHRlci5jOjQ5OTg6XHRpcF90dW5uZWxfaW5mb19vcHRzX2dldCh0bywgaW5mbyk7XG5uZXQvY29yZS9maWx0ZXIuYy00OTk5LVx0aWYgKHNpemUgXHUwMDNlIGluZm8tXHUwMDNlb3B0aW9uc19sZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NTEwMD1CUEZfQ0FMTF8zKGJwZl9za2Jfc2V0X3R1bm5lbF9vcHQsIHN0cnVjdCBza19idWZmICosIHNrYixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy01MTEyLVx0aXBfdHVubmVsX3NldF9vcHRpb25zX3ByZXNlbnQocHJlc2VudCk7XG5uZXQvY29yZS9maWx0ZXIuYzo1MTEzOlx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoaW5mbywgZnJvbSwgc2l6ZSwgcHJlc2VudCk7XG5uZXQvY29yZS9maWx0ZXIuYy01MTE0LVxuLS1cbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmM9MzY2PXNrYl9mbG93X2Rpc3NlY3RfdHVubmVsX2luZm8oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jLTQ4NC1cdFx0ZW5jX29wdC1cdTAwM2VsZW4gPSBpbmZvLVx1MDAzZW9wdGlvbnNfbGVuO1xubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYzo0ODU6XHRcdGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KGVuY19vcHQtXHUwMDNlZGF0YSwgaW5mbyk7XG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jLTQ4Ni1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0yNjc9c3RhdGljIGludCBlcnNwYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0bmxfcHRrX2luZm8gKnRwaSxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0zNDQtXHRcdFx0XHRcdFx0XHQgICAgc2l6ZW9mKCplcnNoZHIpKTtcbm5ldC9pcHY0L2lwX2dyZS5jOjM0NTpcdFx0XHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoXHUwMDI2dHVuX2RzdC1cdTAwM2V1LnR1bl9pbmZvKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTM0Ni1cdFx0XHRtZC1cdTAwM2V2ZXJzaW9uID0gdmVyO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTU0MD1zdGF0aWMgdm9pZCBlcnNwYW5fZmJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTU2Mi1cdFx0Z290byBlcnJfZnJlZV9za2I7XG5uZXQvaXB2NC9pcF9ncmUuYzo1NjM6XHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pO1xubmV0L2lwdjQvaXBfZ3JlLmMtNTY0LVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9MTQyPXN0cnVjdCBtZXRhZGF0YV9kc3QgKmlwdHVubmVsX21ldGFkYXRhX3JlcGx5KHN0cnVjdCBtZXRhZGF0YV9kc3QgKm1kLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTY2LVx0ZHN0LVx1MDAzZW1vZGUgPSBzcmMtXHUwMDNlbW9kZSB8IElQX1RVTk5FTF9JTkZPX1RYO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxNjc6XHRpcF90dW5uZWxfaW5mb19vcHRzX3NldChkc3QsIGlwX3R1bm5lbF9pbmZvX29wdHMoc3JjKSxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTY4LVx0XHRcdFx0c3JjLVx1MDAzZW9wdGlvbnNfbGVuLCB0dW5fZmxhZ3MpO1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9NTA1PXN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfZ2VuZXZlKHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy01MjctXHRpZiAoaW5mbykge1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo1Mjg6XHRcdHN0cnVjdCBnZW5ldmVfb3B0ICpvcHQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pICYjNDM7IG9wdHNfbGVuO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy01MjktXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz01NDI9c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0c192eGxhbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNTU4LVx0XHRzdHJ1Y3QgdnhsYW5fbWV0YWRhdGEgKm1kID1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6NTU5Olx0XHRcdGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgJiM0Mzsgb3B0c19sZW47XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTU2MC1cbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTU3MD1zdGF0aWMgaW50IGlwX3R1bl9wYXJzZV9vcHRzX2Vyc3BhbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNTk5LVx0XHRzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhICptZCA9XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjYwMDpcdFx0XHRpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pICYjNDM7IG9wdHNfbGVuO1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy02MDEtXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz03NzI9c3RhdGljIGludCBpcF90dW5fZmlsbF9lbmNhcF9vcHRzX2dlbmV2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNzgzLVx0d2hpbGUgKHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuIFx1MDAzZSBvZmZzZXQpIHtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6Nzg0Olx0XHRvcHQgPSBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKSAmIzQzOyBvZmZzZXQ7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTc4NS1cdFx0aWYgKG5sYV9wdXRfYmUxNihza2IsIExXVFVOTkVMX0lQX09QVF9HRU5FVkVfQ0xBU1MsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz04MDA9c3RhdGljIGludCBpcF90dW5fZmlsbF9lbmNhcF9vcHRzX3Z4bGFuKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy04MDktXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjgxMDpcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyk7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTgxMS1cdGlmIChubGFfcHV0X3UzMihza2IsIExXVFVOTkVMX0lQX09QVF9WWExBTl9HQlAsIG1kLVx1MDAzZWdicCkpIHtcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTgyMD1zdGF0aWMgaW50IGlwX3R1bl9maWxsX2VuY2FwX29wdHNfZXJzcGFuKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy04MjktXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjgzMDpcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyk7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTgzMS1cdGlmIChubGFfcHV0X3U4KHNrYiwgTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9WRVIsIG1kLVx1MDAzZXZlcnNpb24pKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9ODk5PXN0YXRpYyBpbnQgaXBfdHVuX29wdHNfbmxzaXplKHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTkxMi1cdFx0d2hpbGUgKGluZm8tXHUwMDNlb3B0aW9uc19sZW4gXHUwMDNlIG9mZnNldCkge1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo5MTM6XHRcdFx0b3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSAmIzQzOyBvZmZzZXQ7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTkxNC1cdFx0XHRvcHRfbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZSgyKVx0LyogT1BUX0dFTkVWRV9DTEFTUyAqL1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTIzLVx0fSBlbHNlIGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfRVJTUEFOX09QVF9CSVQsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncykpIHtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTI0Olx0XHRzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhICptZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTkyNS1cbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTk1MD1zdGF0aWMgaW50IGlwX3R1bl9jbXBfZW5jYXAoc3RydWN0IGx3dHVubmVsX3N0YXRlICphLCBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmIpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05NTctXHQgICAgICAgaW5mb19hLVx1MDAzZW9wdGlvbnNfbGVuICE9IGluZm9fYi1cdTAwM2VvcHRpb25zX2xlbiB8fFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo5NTg6XHQgICAgICAgbWVtY21wKGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mb19hKSxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTU5Olx0XHQgICAgICBpcF90dW5uZWxfaW5mb19vcHRzKGluZm9fYiksIGluZm9fYS1cdTAwM2VvcHRpb25zX2xlbik7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTk2MC19XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTQ5MD1zdGF0aWMgaW50IGlwNmVyc3Bhbl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtNTQ5LVx0XHRcdFx0XHRcdFx0ICAgIHNpemVvZigqZXJzaGRyKSk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6NTUwOlx0XHRcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcbm5ldC9pcHY2L2lwNl9ncmUuYy01NTEtXHRcdFx0bWQtXHUwMDNldmVyc2lvbiA9IHZlcjtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9OTIxPXN0YXRpYyBuZXRkZXZfdHhfdCBpcDZlcnNwYW5fdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtOTk5LVx0XHRcdGdvdG8gdHhfZXJyO1xubmV0L2lwdjYvaXA2X2dyZS5jOjEwMDA6XHRcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTAwMS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF90dW5uZWwuYz00MTk9c3RhdGljIGludCBuZnRfdHVubmVsX29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmMtNDk1LSNlbmRpZlxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmM6NDk2Olx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoXHUwMDI2bWQtXHUwMDNldS50dW5faW5mbywgXHUwMDI2cHJpdi1cdTAwM2VvcHRzLnUsIHByaXYtXHUwMDNlb3B0cy5sZW4sXG5uZXQvbmV0ZmlsdGVyL25mdF90dW5uZWwuYy00OTctXHRcdFx0XHRwcml2LVx1MDAzZW9wdHMuZmxhZ3MpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM9MTAwMD1pbnQgb3ZzX2Zsb3dfa2V5X2V4dHJhY3QoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTEwMTktXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjEwMjA6XHRcdFx0aXBfdHVubmVsX2luZm9fb3B0c19nZXQoVFVOX01FVEFEQVRBX09QVFMoa2V5LCB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiksXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTEwMjEtXHRcdFx0XHRcdFx0dHVuX2luZm8pO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYz05Nzk9aW50IG92c19ubGFfcHV0X3R1bm5lbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTk4Mi1cdHJldHVybiBfX2lwX3R1bl90b19ubGF0dHIoc2tiLCBcdTAwMjZ0dW5faW5mby1cdTAwM2VrZXksXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM6OTgzOlx0XHRcdFx0ICBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKSxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy05ODQtXHRcdFx0XHQgIHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYz0yODAwPXN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfc2V0X3R1bihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0yODcyLVx0ICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM6Mjg3MzpcdGlwX3R1bm5lbF9pbmZvX29wdHNfc2V0KHR1bl9pbmZvLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTI4NzQtXHRcdFx0XHRUVU5fTUVUQURBVEFfT1BUUyhcdTAwMjZrZXksIGtleS50dW5fb3B0c19sZW4pLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYz0zODAyPXN0YXRpYyBpbnQgc2V0X2FjdGlvbl90b19hdHRyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmEsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTM4MTgtXHRcdGVyciA9ICBpcF90dW5fdG9fbmxhdHRyKHNrYiwgXHUwMDI2dHVuX2luZm8tXHUwMDNla2V5LFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jOjM4MTk6XHRcdFx0XHRcdGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTM4MjAtXHRcdFx0XHRcdHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuLFxuLS1cbm5ldC9wc2FtcGxlL3BzYW1wbGUuYz0yMTY9c3RhdGljIGludCBfX3BzYW1wbGVfaXBfdHVuX3RvX25sYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9wc2FtcGxlL3BzYW1wbGUuYy0yMTktXHR1bnNpZ25lZCBzaG9ydCB0dW5fcHJvdG8gPSBpcF90dW5uZWxfaW5mb19hZih0dW5faW5mbyk7XG5uZXQvcHNhbXBsZS9wc2FtcGxlLmM6MjIwOlx0Y29uc3Qgdm9pZCAqdHVuX29wdHMgPSBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKTtcbm5ldC9wc2FtcGxlL3BzYW1wbGUuYy0yMjEtXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2tleSAqdHVuX2tleSA9IFx1MDAyNnR1bl9pbmZvLVx1MDAzZWtleTtcbi0tXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYz0yOTY9c3RhdGljIGludCB0dW5uZWxfa2V5X29wdHNfc2V0KHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxuLS1cbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMwMy1cdFx0X19zZXRfYml0KElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKTtcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjMwNDpcdFx0cmV0dXJuIHR1bm5lbF9rZXlfY29weV9vcHRzKG5sYSwgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMwNS1cdFx0XHRcdFx0ICAgIG9wdHNfbGVuLCBleHRhY2spO1xuLS1cbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMxMS1cdFx0X19zZXRfYml0KElQX1RVTk5FTF9WWExBTl9PUFRfQklULCBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MpO1xubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6MzEyOlx0XHRyZXR1cm4gdHVubmVsX2tleV9jb3B5X29wdHMobmxhLCBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pLFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtMzEzLVx0XHRcdFx0XHQgICAgb3B0c19sZW4sIGV4dGFjayk7XG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtMzE5LVx0XHRfX3NldF9iaXQoSVBfVFVOTkVMX0VSU1BBTl9PUFRfQklULCBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MpO1xubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6MzIwOlx0XHRyZXR1cm4gdHVubmVsX2tleV9jb3B5X29wdHMobmxhLCBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pLFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtMzIxLVx0XHRcdFx0XHQgICAgb3B0c19sZW4sIGV4dGFjayk7XG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9NTc2PXN0YXRpYyBpbnQgdHVubmVsX2tleV9nZW5ldmVfb3B0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtNTc4LXtcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjU3OTpcdGNvbnN0IHU4ICpzcmMgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtNTgwLVx0aW50IGxlbiA9IGluZm8tXHUwMDNlb3B0aW9uc19sZW47XG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9NjA4PXN0YXRpYyBpbnQgdHVubmVsX2tleV92eGxhbl9vcHRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy02MTAte1xubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6NjExOlx0Y29uc3Qgc3RydWN0IHZ4bGFuX21ldGFkYXRhICptZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7XG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy02MTItXHRzdHJ1Y3QgbmxhdHRyICpzdGFydDtcbi0tXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYz02Mjc9c3RhdGljIGludCB0dW5uZWxfa2V5X2Vyc3Bhbl9vcHRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy02Mjkte1xubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6NjMwOlx0Y29uc3Qgc3RydWN0IGVyc3Bhbl9tZXRhZGF0YSAqbWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtNjMxLVx0c3RydWN0IG5sYXR0ciAqc3RhcnQ7XG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9ODM5PXR1bm5lbF9rZXlfZ2VuZXZlX29wdHNfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTg0MC17XG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYzo4NDE6XHRjb25zdCB1OCAqc3JjID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTg0Mi1cdGludCBsZW4gPSBpbmZvLVx1MDAzZW9wdGlvbnNfbGVuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY2OQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgbHd0dW5uZWxfc3RhdGVfYWxsb2NgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYGx3dHVubmVsX3N0YXRlX2FsbG9jYC4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyB0aGUgbWVtb3J5IGluaXRpYWxpemF0aW9uIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIGFsbG9jYXRpb24g4oCTIGFyZSB0aGV5IHplcm9pbmcgdGhlIG1lbW9yeSwgdXNpbmcgYG1lbXNldGAsIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGlzIGNydWNpYWw7IGl0IGltcGFjdHMgc2VjdXJpdHksIHBlcmZvcm1hbmNlLCBhbmQgb3ZlcmFsbCBzdGFiaWxpdHkuIEkgbmVlZCB0byBrbm93IGlmIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGEgY2xlYW4gc2xhdGUgb3IgaWYgdGhlcmUmIzM5O3MgcG90ZW50aWFsIGZvciByZXNpZHVhbCBkYXRhIGlzc3Vlcy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBkbyBpdC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWNzIG9mIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHd0dW5uZWxfc3RhdGVfYWxsb2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0xMjk9aW50IGx3dHVubmVsX2dldF9lbmNhcF9zaXplKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpO1xuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoxMzA6c3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3R1bm5lbF9zdGF0ZV9hbGxvYyhpbnQgaGRyX2xlbik7XG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oLTEzMS1pbnQgbHd0dW5uZWxfY21wX2VuY2FwKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYSwgc3RydWN0IGx3dHVubmVsX3N0YXRlICpiKTtcbi0tXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oPTIzNT1zdGF0aWMgaW5saW5lIGludCBsd3R1bm5lbF9nZXRfZW5jYXBfc2l6ZShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlKVxuLS1cbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMjM5LVxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoyNDA6c3RhdGljIGlubGluZSBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHVubmVsX3N0YXRlX2FsbG9jKGludCBoZHJfbGVuKVxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0yNDEte1xuLS1cbm5ldC9jb3JlL2x3dF9icGYuYz0zODM9c3RhdGljIGludCBicGZfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4tLVxubmV0L2NvcmUvbHd0X2JwZi5jLTQwMy1cbm5ldC9jb3JlL2x3dF9icGYuYzo0MDQ6XHRuZXd0cyA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHNpemVvZigqYnBmKSk7XG5uZXQvY29yZS9sd3RfYnBmLmMtNDA1LVx0aWYgKCFuZXd0cylcbi0tXG5uZXQvY29yZS9sd3R1bm5lbC5jPTMzPXN0YXRpYyBjb25zdCBjaGFyICpsd3R1bm5lbF9lbmNhcF9zdHIoZW51bSBsd3R1bm5lbF9lbmNhcF90eXBlcyBlbmNhcF90eXBlKVxuLS1cbm5ldC9jb3JlL2x3dHVubmVsLmMtNjgtXG5uZXQvY29yZS9sd3R1bm5lbC5jOjY5OnN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0dW5uZWxfc3RhdGVfYWxsb2MoaW50IGVuY2FwX2xlbilcbm5ldC9jb3JlL2x3dHVubmVsLmMtNzAte1xuLS1cbm5ldC9jb3JlL2x3dHVubmVsLmMtNzYtfVxubmV0L2NvcmUvbHd0dW5uZWwuYzo3NzpFWFBPUlRfU1lNQk9MX0dQTChsd3R1bm5lbF9zdGF0ZV9hbGxvYyk7XG5uZXQvY29yZS9sd3R1bm5lbC5jLTc4LVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9Njg4PXN0YXRpYyBpbnQgaXBfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTcwNi1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6NzA3Olx0bmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCp0dW5faW5mbykgJiM0Mzsgb3B0X2xlbik7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTcwOC1cdGlmICghbmV3X3N0YXRlKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9OTgyPXN0YXRpYyBpbnQgaXA2X3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDAwLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxMDAxOlx0bmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCp0dW5faW5mbykgJiM0Mzsgb3B0X2xlbik7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTEwMDItXHRpZiAoIW5ld19zdGF0ZSlcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jPTEzNT1zdGF0aWMgaW50IGlsYV9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTIyNS1cbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6MjI2Olx0bmV3dHMgPSBsd3R1bm5lbF9zdGF0ZV9hbGxvYyhzaXplb2YoKmlsd3QpKTtcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMjI3LVx0aWYgKCFuZXd0cylcbi0tXG5uZXQvaXB2Ni9pb2FtNl9pcHR1bm5lbC5jPTk5PXN0YXRpYyBpbnQgaW9hbTZfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4tLVxubmV0L2lwdjYvaW9hbTZfaXB0dW5uZWwuYy0xNjMtXHRsZW5fYWxpZ25lZCA9IEFMSUdOKHRyYWNlLVx1MDAzZXJlbWxlbiAqIDQsIDgpO1xubmV0L2lwdjYvaW9hbTZfaXB0dW5uZWwuYzoxNjQ6XHRsd3QgPSBsd3R1bm5lbF9zdGF0ZV9hbGxvYyhzaXplb2YoKmlsd3QpICYjNDM7IGxlbl9hbGlnbmVkKTtcbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmMtMTY1LVx0aWYgKCFsd3QpXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9Njc9c3RhdGljIGludCBycGxfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtOTgtXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzo5OTpcdG5ld3RzID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc3JoX2xlbiAmIzQzOyBzaXplb2YoKnJsd3QpKTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTEwMC1cdGlmICghbmV3dHMpXG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTc0Nz1zdGF0aWMgaW50IHNlZzZfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTgwNy1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYzo4MDg6XHRuZXd0cyA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHR1bmluZm9fbGVuICYjNDM7IHNpemVvZigqc2x3dCkpO1xubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTgwOS1cdGlmICghbmV3dHMpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI1MTc9c3RhdGljIGludCBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNTM4LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI1Mzk6XHRuZXd0cyA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHNpemVvZigqc2x3dCkpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI1NDAtXHRpZiAoIW5ld3RzKVxuLS1cbm5ldC9tcGxzL21wbHNfaXB0dW5uZWwuYz0xNjM9c3RhdGljIGludCBtcGxzX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC9tcGxzL21wbHNfaXB0dW5uZWwuYy0xODgtXG5uZXQvbXBscy9tcGxzX2lwdHVubmVsLmM6MTg5Olx0bmV3dHMgPSBsd3R1bm5lbF9zdGF0ZV9hbGxvYyhzdHJ1Y3Rfc2l6ZSh0dW5fZW5jYXBfaW5mbywgbGFiZWwsXG5uZXQvbXBscy9tcGxzX2lwdHVubmVsLmMtMTkwLVx0XHRcdFx0XHRcdCBuX2xhYmVscykpO1xuLS1cbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYz03Mz1zdGF0aWMgaW50IHhmcm1pX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy05MS1cbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYzo5MjpcdG5ld19zdGF0ZSA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHNpemVvZigqaW5mbykpO1xubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTkzLVx0aWYgKCFuZXdfc3RhdGUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NDIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHBlcnNwZWN0aXZlIG9uIHdoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBMV1R1bm5lbCBDb2RlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBjcmFjayBvcGVuIGBuZXQvY29yZS9sd3R1bm5lbC5jYCBhbmQgemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSA2OS4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIGxvZ2ljIG9mIExpZ2h0d2VpZ2h0IFR1bm5lbGluZywgYW5kIHRoYXQgbGluZSBtaWdodCBiZSBhIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGZ1bmN0aW9uLCBkYXRhIHN0cnVjdHVyZSwgb3Igc29tZSBjcml0aWNhbCBjb25kaXRpb25hbCBpbiB0aGUgdHVubmVsIHNldHVwIG9yIGRhdGEgcGF0aC4gTXkgbWluZCBpcyBhbHJlYWR5IHNrZXRjaGluZyBvdXQgdGhlIHBvdGVudGlhbCBhcmVhczogaXQgY291bGQgYmUgcmVsYXRlZCB0byBlbmNhcHN1bGF0aW9uLCBkZWNhcHN1bGF0aW9uLCBoZWFkZXIgbWFuaXB1bGF0aW9uLCBmbG93IGNvbnRyb2wsIG9yIGV2ZW4gZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSB0dW5uZWwgbW9kdWxlLiBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIHRoYXQgbGluZSBudW1iZXIgbWlnaHQgZ2l2ZSB1cyBpbmZvcm1hdGlvbiBvbiB0aGUgdHVubmVsIGRyaXZlciBpdHNlbGYsIGl0cyBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGxpa2UgdGhlIHJvdXRpbmcgc3Vic3lzdGVtIG9yIHRoZSBuZXR3b3JrIHN0YWNrLCBvciB0aGUgYWN0dWFsIGRhdGEgcHJvY2Vzc2luZyBoYXBwZW5pbmcgd2l0aGluIHRoZSB0dW5uZWwuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2x3dHVubmVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY1Olx0fVxuICA2NjpcdFxuICA2NzpcdCNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqL1xuICA2ODpcdFxuICA2OTpcdHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0dW5uZWxfc3RhdGVfYWxsb2MoaW50IGVuY2FwX2xlbilcbiAgNzA6XHR7XG4gIDcxOlx0XHRzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3cztcbiAgNzI6XHRcbiAgNzM6XHRcdGx3cyA9IGt6YWxsb2Moc2l6ZW9mKCpsd3MpICYjNDM7IGVuY2FwX2xlbiwgR0ZQX0FUT01JQyk7XG4gIDc0Olx0XG4gIDc1Olx0XHRyZXR1cm4gbHdzO1xuICA3NjpcdH1cbiAgNzc6XHRFWFBPUlRfU1lNQk9MX0dQTChsd3R1bm5lbF9zdGF0ZV9hbGxvYyk7XG4gIDc4Olx0XG4gIDc5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgX19yY3UgKlxuICA4MDpcdFx0XHRsd3R1bl9lbmNhcHNbTFdUVU5ORUxfRU5DQVBfTUFYICYjNDM7IDFdIF9fcmVhZF9tb3N0bHk7XG4gIDgxOlx0XG4gIDgyOlx0aW50IGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyAqb3BzLFxuICA4MzpcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBudW0pXG4gIDg0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA5MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBQYXJhbWV0ZXIgVXNhZ2UqKgoKT2theSwgc28gYGx3dHVubmVsX3N0YXRlX2FsbG9jYCBpcyB1c2luZyBga3phbGxvY2AuIFRoYXQgbWVhbnMgdGhlIHdob2xlIGJsb2NrIG9mIG1lbW9yeSBJJiMzOTttIGdldHRpbmcgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgaW5jbHVkaW5nIGBlbmNhcF9sZW5gLiBUaGlzIGluY2x1ZGVzIHRoZSBgdHVuX2luZm9gIHN0cnVjdCBhbmQgdGhhdCB0cmFpbGluZyBvcHRpb25zIGJ1ZmZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcywgc3BlY2lmaWNhbGx5LCB3aHkgdGhpcyBwYXRjaCB3YXMgbWFkZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUgZ2l0IGxvZywgc2VlIGlmIEkgY2FuIGZpbmQgY29udGV4dCBhcm91bmQgdGhlIGNoYW5nZSwgZXNwZWNpYWxseSBsb29raW5nIGF0IHRoZSBgb3B0aW9uc19sZW5gIGZpZWxkLiBJJiMzOTttIHdvbmRlcmluZyB3aHkgaXQgd2FzIG1vdmVkICpiZWZvcmUqIHRoZSBjYWxsIHRvIGBpcF90dW5fc2V0X29wdHNgIGZyb20gKmFmdGVyKiB0aGF0IGNhbGwuCgpIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcsIGBpcF90dW5fYnVpbGRfc3RhdGVgIG1vdmVkIGB0dW5faW5mby0mZ3Q7b3B0aW9uc19sZW4gPSBvcHRfbGVuO2AuIEkmIzM5O3ZlIGdvdCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGhlcmUuIERvZXMgYGlwX3R1bl9zZXRfb3B0c2AgaXRzZWxmIGFjdHVhbGx5IHVzZSBgdHVuX2luZm8tJmd0O29wdGlvbnNfbGVuYD8gVGltZSB0byBkb3VibGUtY2hlY2sgdGhhdCBmdW5jdGlvbiwgbWF5YmUgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIEkgbWlzc2VkLiBPciwgcGVyaGFwcyBzb21ldGhpbmcgKmNhbGxlZCogZnJvbSB3aXRoaW4gYGlwX3R1bl9zZXRfb3B0c2AgaXMgdGhlIGN1bHByaXQuIEFsdGVybmF0aXZlbHksIGlzIGFueXRoaW5nIGVsc2UgaW4gdGhlIGNvZGUgYmFzZSBtYWtpbmcgdXNlIG9mIHRoZSBgb3B0aW9uc19sZW5gIGZpZWxkPyBUbyBiZSBzdXJlLCBJJiMzOTtsbCByZXZpZXcgZ2l0IGNvbW1pdCBoaXN0b3J5IGFuZCBkbyBhIGdyZXAgZm9yICYjMzQ7b3B0aW9uc19sZW4mIzM0OyB3aXRoaW4gYG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3B0aW9uc19sZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9MTQyPXN0cnVjdCBtZXRhZGF0YV9kc3QgKmlwdHVubmVsX21ldGFkYXRhX3JlcGx5KHN0cnVjdCBtZXRhZGF0YV9kc3QgKm1kLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTUzLVx0c3JjID0gXHUwMDI2bWQtXHUwMDNldS50dW5faW5mbztcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6MTU0Olx0cmVzID0gbWV0YWRhdGFfZHN0X2FsbG9jKHNyYy1cdTAwM2VvcHRpb25zX2xlbiwgTUVUQURBVEFfSVBfVFVOTkVMLCBmbGFncyk7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTE1NS1cdGlmICghcmVzKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTY3LVx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoZHN0LCBpcF90dW5uZWxfaW5mb19vcHRzKHNyYyksXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjE2ODpcdFx0XHRcdHNyYy1cdTAwM2VvcHRpb25zX2xlbiwgdHVuX2ZsYWdzKTtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTY5LVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9Njg4PXN0YXRpYyBpbnQgaXBfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTcxMy1cdHR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKG5ld19zdGF0ZSk7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjcxNDpcdHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNzE1LVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9NzcyPXN0YXRpYyBpbnQgaXBfdHVuX2ZpbGxfZW5jYXBfb3B0c19nZW5ldmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTc4Mi1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6NzgzOlx0d2hpbGUgKHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuIFx1MDAzZSBvZmZzZXQpIHtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNzg0LVx0XHRvcHQgPSBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKSAmIzQzOyBvZmZzZXQ7XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz04OTk9c3RhdGljIGludCBpcF90dW5fb3B0c19ubHNpemUoc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTExLVx0XHRvcHRfbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZSgwKTtcdC8qIExXVFVOTkVMX0lQX09QVFNfR0VORVZFICovXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjkxMjpcdFx0d2hpbGUgKGluZm8tXHUwMDNlb3B0aW9uc19sZW4gXHUwMDNlIG9mZnNldCkge1xubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05MTMtXHRcdFx0b3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSAmIzQzOyBvZmZzZXQ7XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz05NTA9c3RhdGljIGludCBpcF90dW5fY21wX2VuY2FwKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYSwgc3RydWN0IGx3dHVubmVsX3N0YXRlICpiKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTU2LVx0ICAgICAgIGluZm9fYS1cdTAwM2Vtb2RlICE9IGluZm9fYi1cdTAwM2Vtb2RlIHx8XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjk1NzpcdCAgICAgICBpbmZvX2EtXHUwMDNlb3B0aW9uc19sZW4gIT0gaW5mb19iLVx1MDAzZW9wdGlvbnNfbGVuIHx8XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTk1OC1cdCAgICAgICBtZW1jbXAoaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvX2EpLFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo5NTk6XHRcdCAgICAgIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mb19iKSwgaW5mb19hLVx1MDAzZW9wdGlvbnNfbGVuKTtcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTYwLX1cbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTk4Mj1zdGF0aWMgaW50IGlwNl90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTAwNy1cdHR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKG5ld19zdGF0ZSk7XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjEwMDg6XHR0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTEwMDktXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz0xMDg5PXZvaWQgX19pbml0IGlwX3R1bm5lbF9jb3JlX2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTEwOTEtXHQvKiBJZiB5b3UgbGFuZCBoZXJlLCBtYWtlIHN1cmUgd2hldGhlciBpbmNyZWFzaW5nIGlwX3R1bm5lbF9pbmZvJiMzOTtzXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjEwOTI6XHQgKiBvcHRpb25zX2xlbiBpcyBhIHJlYXNvbmFibGUgY2hvaWNlIHdpdGggaXRzIHVzYWdlIGluIGZyb250IGVuZHNcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTA5My1cdCAqIChmLmUuLCBpdCYjMzk7cyBwYXJ0IG9mIGZsb3cga2V5cywgZXRjKS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgaXBfdHVubmVsX2luZm9fb3B0c2AgTWFjcm8qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pYCBtYWNyby4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIHRoaXMgSVAgdHVubmVsaW5nIGltcGxlbWVudGF0aW9uLiBXaGVyZSYjMzk7cyB0aGUgZGVmaW5pdGlvbj8gUmlnaHQsIGl0JiMzOTtzIHByb2JhYmx5IGluIGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLiBMZXQgbWUgZ28gcHVsbCB0aGF0IHVwIGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIGRvbmUgaW4gdGhlcmUuIFRoaXMgbWFjcm8gcHJvYmFibHkgZXhwYW5kcyB0byBhIGNvbWJpbmF0aW9uIG9mIHN0cnVjdCBtZW1iZXIgYWNjZXNzZXMgYW5kIHR5cGUgY2FzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIG91dHB1dCB0byBmdWxseSBncmFzcCB0aGUgaW5mb3JtYXRpb24gYmVpbmcgaGFuZGxlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmLCB0aGVyZSBhcmUgc28gbWFueSBvZiB0aGVzZSBtYWNyb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXBfdHVubmVscy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcbiAxMDE6XHQvKiBNYXhpbXVtIHR1bm5lbCBvcHRpb25zIGxlbmd0aC4gKi9cbiAxMDI6XHQjZGVmaW5lIElQX1RVTk5FTF9PUFRTX01BWFx0XHRcdFx0XHRcXFxuIDEwMzpcdFx0R0VOTUFTSygoc2l6ZW9mX2ZpZWxkKHN0cnVjdCBpcF90dW5uZWxfaW5mbyxcdFx0XFxcbiAxMDQ6XHRcdFx0XHQgICAgICBvcHRpb25zX2xlbikgKiBCSVRTX1BFUl9CWVRFKSAtIDEsIDApXG4gMTA1Olx0XG4gMTA2Olx0I2RlZmluZSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pXHRcdFx0XHRcXFxuIDEwNzpcdFx0X0dlbmVyaWMoaW5mbyxcdFx0XHRcdFx0XHRcXFxuIDEwODpcdFx0XHQgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICogOiAoKGNvbnN0IHZvaWQgKikoaW5mbyktXHUwMDNlb3B0aW9ucyksXFxcbiAxMDk6XHRcdFx0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqIDogKCh2b2lkICopKGluZm8pLVx1MDAzZW9wdGlvbnMpXFxcbiAxMTA6XHRcdClcbiAxMTE6XHRcbiAxMTI6XHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8ge1xuIDExMzpcdFx0c3RydWN0IGlwX3R1bm5lbF9rZXlcdGtleTtcbiAxMTQ6XHRcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXBcdGVuY2FwO1xuIDExNTpcdCNpZmRlZiBDT05GSUdfRFNUX0NBQ0hFXG4gMTE2Olx0XHRzdHJ1Y3QgZHN0X2NhY2hlXHRkc3RfY2FjaGU7XG4gMTE3Olx0I2VuZGlmXG4gMTE4Olx0XHR1OFx0XHRcdG9wdGlvbnNfbGVuO1xuIDExOTpcdFx0dThcdFx0XHRtb2RlO1xuIDEyMDpcdFx0dThcdFx0XHRvcHRpb25zW10gX19hbGlnbmVkX2xhcmdlc3QgX19jb3VudGVkX2J5KG9wdGlvbnNfbGVuKTtcbiAxMjE6XHR9O1xuIDEyMjpcdFxuIDEyMzpcdC8qIDZyZCBwcmVmaXgvcmVsYXkgaW5mb3JtYXRpb24gKi9cbiAxMjQ6XHQjaWZkZWYgQ09ORklHX0lQVjZfU0lUXzZSRFxuIDEyNTpcdHN0cnVjdCBpcF90dW5uZWxfNnJkX3Bhcm0ge1xuIDEyNjpcdFx0c3RydWN0IGluNl9hZGRyXHRcdHByZWZpeDtcbiAxMjc6XHRcdF9fYmUzMlx0XHRcdHJlbGF5X3ByZWZpeDtcbiAxMjg6XHRcdHUxNlx0XHRcdHByZWZpeGxlbjtcbiAxMjk6XHRcdHUxNlx0XHRcdHJlbGF5X3ByZWZpeGxlbjtcbiAxMzA6XHRcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG4gMTMxOlx0fTtcbiAxMzI6XHQjZW5kaWZcbiAxMzM6XHRcbiAxMzQ6XHRzdHJ1Y3QgaXBfdHVubmVsX3BybF9lbnRyeSB7XG4gMTM1Olx0XHRzdHJ1Y3QgaXBfdHVubmVsX3BybF9lbnRyeSBfX3JjdSAqbmV4dDtcbiAxMzY6XHRcdF9fYmUzMlx0XHRcdFx0YWRkcjtcbiAxMzc6XHRcdHUxNlx0XHRcdFx0ZmxhZ3M7XG4gMTM4Olx0XHRzdHJ1Y3QgcmN1X2hlYWRcdFx0XHRyY3VfaGVhZDtcbiAxMzk6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTY1MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBaGEhIEEgQm91bmRzIFZpb2xhdGlvbiBGaXghKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCAqYm9vbSEqIExpbmUgMTIwIGp1c3QganVtcGVkIG91dCBhdCBtZS4gSSBzZWUgdGhhdCB0aGUgYF9fY291bnRlZF9ieShvcHRpb25zX2xlbilgIGhhcyBiZWVuIGFkZGVkIHRvIGB1OCBvcHRpb25zW11gLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBiZWNhdXNlIG5vdywgYW55dGltZSBgb3B0aW9uc19sZW5gIGlzIHplcm8sIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgd2l0aCBhIHplcm8tbGVuZ3RoIGJvdW5kLgoKQW5kIHRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgb2YgdGhvc2UgYGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbylgIGFjY2Vzc2VzIHdpdGhpbiB0aGUgYGlwX3R1bl9wYXJzZV9vcHRzXypgIGZ1bmN0aW9ucy4gQmVmb3JlIHRoaXMgY2hhbmdlLCB3aGVuIGBvcHRpb25zX2xlbmAgd2FzIHplcm8gKHdoaWNoLCBsZXQmIzM5O3MgYmUgaG9uZXN0LCBpdCB3YXMgaW5pdGlhbGl6ZWQgdG8gd2l0aCBga3phbGxvY2ApLCBhY2Nlc3NpbmcgYGluZm8tJmd0O29wdGlvbnNgIHdvdWxkIGJlIGEgc3RyYWlnaHQtdXAgcG90ZW50aWFsIGJvdW5kcyB2aW9sYXRpb24hIEVzcGVjaWFsbHkgaWYgd2UgaGF2ZSBlaXRoZXIgYENPTkZJR19VQlNBTl9CT1VORFNgIGVuYWJsZWQsIG9yIGFyZSBjb21waWxpbmcgd2l0aCBDbGFuZyYjMzk7cyBib3VuZHMgc2FuaXRpemVycy4gV2UmIzM5O2Qgc2VlIGEgYmlnLCBmYXQgd2FybmluZyByaWdodCB0aGVyZSBpbiB0aGUgb3V0cHV0IQoKTm93LCBiZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIExldCYjMzk7cyBzZWUgaWYgdGhlIEdpdCBsb2cgZ2l2ZXMgdXMgYW55IGNsdWVzLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGNvbW1pdHMgcmVsYXRlZCB0byBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2Agb3IganVzdCBzdGFydCBzZWFyY2hpbmcgZm9yIGNvbW1pdCBtZXNzYWdlcy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBoaXN0b3J5IGFuZCBzZWUgdGhlIG9yaWdpbmFsIGludGVudCwgc2hhbGwgd2U/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY291bnRlZF9ieVxcKG9wdGlvbnNfbGVuXFwpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaD0xMTI9c3RydWN0IGlwX3R1bm5lbF9pbmZvIHtcbi0tXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtMTE5LVx0dThcdFx0XHRtb2RlO1xuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjEyMDpcdHU4XHRcdFx0b3B0aW9uc1tdIF9fYWxpZ25lZF9sYXJnZXN0IF9fY291bnRlZF9ieShvcHRpb25zX2xlbik7XG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtMTIxLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzczCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgdGhlIGBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pYCBDb21taXQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgdHJhY2sgZG93biB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBgX19jb3VudGVkX2J5KG9wdGlvbnNfbGVuKWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgc3BlY2lmaWMgYWRkaXRpb24uIEl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoYXQgcHJvYmxlbSBpdCBzb2x2ZXMsIG9yIGV2ZW4gd2hhdCBjb250ZXh0IGl0IGJlbG9uZ3MgaW4uIFdoYXQgZGVzaWduIGRlY2lzaW9ucyBsZWQgdG8gaW5jbHVkaW5nIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eT8gSSB3YW50IHRvIGV4YW1pbmUgdGhlIGNvbW1pdCBtZXNzYWdlLCB0aGUgc3Vycm91bmRpbmcgY29kZSBjaGFuZ2VzLCBhbmQgYW55IHJlbGF0ZWQgaXNzdWVzIG9yIGRpc2N1c3Npb25zLiBXZXJlIHRoZXJlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zPyBSZWZhY3RvcmluZyBnb2Fscz8gSXMgdGhpcyBwYXJ0IG9mIGEgbGFyZ2VyIHBhdHRlcm4gb3Igb3B0aW1pemF0aW9uIHN0cmF0ZWd5IHdpdGhpbiB0aGlzIGNvZGViYXNlPyBHZXR0aW5nIHRoZSBmdWxsIHBpY3R1cmUgaGVyZSBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY29udGV4dC4gSSYjMzk7bSBob3BpbmcgdGhlIGNvbW1pdCBtZXNzYWdlIGlzIGNsZWFyIGFuZCB3ZWxsLXdyaXR0ZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY291bnRlZF9ieVxcKG9wdGlvbnNfbGVuXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTExMj1zdHJ1Y3QgaXBfdHVubmVsX2luZm8ge1xuLS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMTktXHR1OFx0XHRcdG1vZGU7XG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6MTIwOlx0dThcdFx0XHRvcHRpb25zW10gX19hbGlnbmVkX2xhcmdlc3QgX19jb3VudGVkX2J5KG9wdGlvbnNfbGVuKTtcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMjEtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3MjkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA4ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHZW5ldmUgT3B0aW9uIFBhcnNpbmcgYW5kIE1lbW9yeSBTYWZldHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBgaXBfdHVuX3BhcnNlX29wdHNfZ2VuZXZlYCBjb2RlLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgcG90ZW50aWFsIGZvciBhIGJvdW5kcyBjaGVjayBmYWlsdXJlIHdoZW4gd3JpdGluZyBHZW5ldmUgb3B0aW9ucy4gVGhlIHByb2JsZW0gYXJpc2VzIGJlY2F1c2UgYHR1bl9pbmZvLSZndDtvcHRpb25zX2xlbmAgaXNuJiMzOTt0IHNldCAqYmVmb3JlKiBgaXBfdHVuX3NldF9vcHRzKClgIGlzIGNhbGxlZC4gIFRoaXMgZnVuY3Rpb24gaXMgd3JpdGluZyB0byBgaW5mby0mZ3Q7b3B0aW9uc2AsIHdoaWNoIGlzIGVzc2VudGlhbGx5IGEgcmVnaW9uIG9mIG1lbW9yeSwgYnV0IGJlY2F1c2UgYG9wdGlvbnNfbGVuYCBpcyBpbml0aWFsbHkgemVybywgY29tcGlsZXIgaW5zdHJ1bWVudGF0aW9uIChzcGVjaWZpY2FsbHkgYF9fY291bnRlZF9ieWApIGRldGVjdHMgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBvciByZWFkLiBNb3ZpbmcgYHR1bl9pbmZvLSZndDtvcHRpb25zX2xlbiA9IG9wdF9sZW47YCB1cCBzb2x2ZXMgdGhhdCBieSBtYWtpbmcgdGhlIGxlbmd0aCB2YWxpZCAqYmVmb3JlKiBhbnkgYWNjZXNzIHRvIGBpbmZvLSZndDtvcHRpb25zYC4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoZSBtZW1vcnkgaW1wbGljYXRpb25zLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBtZW1vcnkgc2FuaXRpemVycyBsaWtlIEtNU0FOIGFuZCBLQVNBTi4gIElmIGBpcF90dW5fc2V0X29wdHMoKWAgKmZhaWxzKiwgYG5ld19zdGF0ZWAgKHdoaWNoIGhvbGRzIG91ciBgdHVuX2luZm9gKSBpcyBpbW1lZGlhdGVseSBmcmVlZC4gTm8gb25lIGV2ZXIgcmVhZHMgZnJvbSBpdC4gU28sIGEgZmFpbHVyZSBpcyBzYWZlIGluIHRoaXMgY29udGV4dC4KCklmIGBpcF90dW5fc2V0X29wdHMoKWAgKnN1Y2NlZWRzKiwgd2UmIzM5O3ZlIHdyaXR0ZW4gYG9wdF9sZW5gIGJ5dGVzIGludG8gYHR1bl9pbmZvLSZndDtvcHRpb25zYC4gIENydWNpYWxseSwgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHVzZXMgYGt6YWxsb2NgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IG1lYW5zIGFsbCB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCBpbmNsdWRpbmcgYG5ld19zdGF0ZWAsIGB0dW5faW5mb2AgaXRzZWxmIGFuZCB0aGUgc3BhY2UgZm9yIHRoZSBvcHRpb25zLiAgVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgdGhlcmVmb3JlIHRoZXJlJiMzOTtzIG5vIHdheSB0byBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuCgpTbywgZG9lcyB0aGlzIGNoYW5nZSBpbnRyb2R1Y2UgYW55ICpuZXcqIG1lbW9yeS1zYWZldHkgaXNzdWVzPyBObywgYmVjYXVzZSB0aGUgd3JpdGUgdG8gYG9wdGlvbnNgIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgYGlwX3R1bl9zZXRfb3B0c2AgaXMgcmVhZGluZyB2YWxpZGF0ZWQgbmV0bGluayBhdHRyaWJ1dGVzLiBgdHVuX2luZm9gIG9yIGBuZXdfc3RhdGVgIGFyZSBub3QgYmVpbmcgZGlyZWN0bHkgY29waWVkIHRvIHVzZXIgc3BhY2UuICBXaGVuIGR1bXBpbmcgcm91dGUgYW5kIHR1bm5lbCBpbmZvIChgcnRubF9maWxsX2lmaW5mb2ApLCBgaXBfdHVuX2ZpbGxfZW5jYXBfaW5mb2AgaXMgY2FsbGVkLiBUaGF0IHdvdWxkIGJlIHRoZSBwbGFjZSB0byBjaGVjayBidXQgdGhlIGFuYWx5c2lzIGZyb20gYmVmb3JlIGlzIHZhbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF90dW5fZmlsbF9lbmNhcF9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTg1MT1zdGF0aWMgaW50IGlwX3R1bl9maWxsX2VuY2FwX29wdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHR5cGUsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy04NzktXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjg4MDpzdGF0aWMgaW50IGlwX3R1bl9maWxsX2VuY2FwX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtODgxLVx0XHRcdFx0ICBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9OTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIGlwX3R1bl9sd3Rfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTY0LVx0LmRlc3Ryb3lfc3RhdGUgPSBpcF90dW5fZGVzdHJveV9zdGF0ZSxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTY1Olx0LmZpbGxfZW5jYXAgPSBpcF90dW5fZmlsbF9lbmNhcF9pbmZvLFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05NjYtXHQuZ2V0X2VuY2FwX3NpemUgPSBpcF90dW5fZW5jYXBfbmxzaXplLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQxMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGlwX3R1bl9maWxsX2VuY2FwX2luZm9gKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgaXBfdHVuX2ZpbGxfZW5jYXBfaW5mb2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZW5jYXBzdWxhdGlvbiBsb2dpYyBmb3IgdGhpcyB0dW5uZWwgc2V0dXAuIEkmIzM5O20gYXNzdW1pbmcgaXQgaGFuZGxlcyB0aGUgZGV0YWlscyByZXF1aXJlZCB0byBjb25zdHJ1Y3QgdGhlIG91dGVyIGhlYWRlciBmb3IgYSB0dW5uZWwgcGFja2V0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIHRoZSBpbm5lciBwYWNrZXQgZGV0YWlscywgbGlrZWx5IHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIElQIGFkZHJlc3NlcyBhbmQgbWF5YmUgc29tZSB0cmFuc3BvcnQgbGF5ZXIgcHJvdG9jb2wgaW5mb3JtYXRpb24sIGFuZCB0aGVuIGNyYWZ0IHRoZSBvdXRlciBJUCBoZWFkZXIgd2l0aCB0aGUgdHVubmVsIGVuZHBvaW50cy4gSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSB0aGUgdHVubmVsIGtleSAoaWYgYW55KSwgdGhlIHByb3RvY29sIHR5cGUgKGUuZy4sIEdSRSwgSVBJUCwgVlhMQU4pLCBhbmQgYW55IG9wdGlvbnMgdGhhdCBtaWdodCBuZWVkIHRvIGJlIHNldCBpbiB0aGUgb3V0ZXIgaGVhZGVyLiBJJiMzOTtsbCBiZSBzY3J1dGluaXppbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG5ldHdvcmsgc3RhY2smIzM5O3MgSVAgaGVhZGVyIGNvbnN0cnVjdGlvbiByb3V0aW5lcywgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSBjbGV2ZXJuZXNzIGluIGl0cyBoYW5kbGluZyBvZiBmcmFnbWVudGF0aW9uIG9yIE1UVSBjb25zaWRlcmF0aW9ucy4gVGhlIGdvYWwgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gaG93IHRoZSBlbmNhcHN1bGF0aW9uIHByb2Nlc3MgaXMgb3JjaGVzdHJhdGVkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODcwOlx0XG4gODcxOlx0XHRpZiAoZXJyKSB7XG4gODcyOlx0XHRcdG5sYV9uZXN0X2NhbmNlbChza2IsIG5lc3QpO1xuIDg3MzpcdFx0XHRyZXR1cm4gZXJyO1xuIDg3NDpcdFx0fVxuIDg3NTpcdFxuIDg3NjpcdFx0bmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7XG4gODc3Olx0XHRyZXR1cm4gMDtcbiA4Nzg6XHR9XG4gODc5Olx0XG4gODgwOlx0c3RhdGljIGludCBpcF90dW5fZmlsbF9lbmNhcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4gODgxOlx0XHRcdFx0XHQgIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpXG4gODgyOlx0e1xuIDg4MzpcdFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyA9IGx3dF90dW5faW5mbyhsd3RzdGF0ZSk7XG4gODg0Olx0XG4gODg1Olx0XHRpZiAobmxhX3B1dF9iZTY0KHNrYiwgTFdUVU5ORUxfSVBfSUQsIHR1bl9pbmZvLVx1MDAzZWtleS50dW5faWQsXG4gODg2Olx0XHRcdFx0IExXVFVOTkVMX0lQX1BBRCkgfHxcbiA4ODc6XHRcdCAgICBubGFfcHV0X2luX2FkZHIoc2tiLCBMV1RVTk5FTF9JUF9EU1QsIHR1bl9pbmZvLVx1MDAzZWtleS51LmlwdjQuZHN0KSB8fFxuIDg4ODpcdFx0ICAgIG5sYV9wdXRfaW5fYWRkcihza2IsIExXVFVOTkVMX0lQX1NSQywgdHVuX2luZm8tXHUwMDNla2V5LnUuaXB2NC5zcmMpIHx8XG4gODg5Olx0XHQgICAgbmxhX3B1dF91OChza2IsIExXVFVOTkVMX0lQX1RPUywgdHVuX2luZm8tXHUwMDNla2V5LnRvcykgfHxcbiA4OTA6XHRcdCAgICBubGFfcHV0X3U4KHNrYiwgTFdUVU5ORUxfSVBfVFRMLCB0dW5faW5mby1cdTAwM2VrZXkudHRsKSB8fFxuIDg5MTpcdFx0ICAgIG5sYV9wdXRfYmUxNihza2IsIExXVFVOTkVMX0lQX0ZMQUdTLFxuIDg5MjpcdFx0XHRcdCBpcF90dW5uZWxfZmxhZ3NfdG9fYmUxNih0dW5faW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKSkgfHxcbiA4OTM6XHRcdCAgICBpcF90dW5fZmlsbF9lbmNhcF9vcHRzKHNrYiwgTFdUVU5ORUxfSVBfT1BUUywgdHVuX2luZm8pKVxuIDg5NDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA4OTU6XHRcbiA4OTY6XHRcdHJldHVybiAwO1xuIDg5NzpcdH1cbiA4OTg6XHRcbiA4OTk6XHRzdGF0aWMgaW50IGlwX3R1bl9vcHRzX25sc2l6ZShzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXG4gOTAwOlx0e1xuIDkwMTpcdFx0aW50IG9wdF9sZW47XG4gOTAyOlx0XG4gOTAzOlx0XHRpZiAoIWlwX3R1bm5lbF9pc19vcHRpb25zX3ByZXNlbnQoaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKSlcbiA5MDQ6XHRcdFx0cmV0dXJuIDA7XG4gOTA1Olx0XG4gOTA2Olx0XHRvcHRfbGVuID0gbmxhX3RvdGFsX3NpemUoMCk7XHRcdC8qIExXVFVOTkVMX0lQX09QVFMgKi9cbiA5MDc6XHRcdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncykpIHtcbiA5MDg6XHRcdFx0c3RydWN0IGdlbmV2ZV9vcHQgKm9wdDtcbiA5MDk6XHRcdFx0aW50IG9mZnNldCA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDgwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgbHd0dW5uZWxfc3RhdGVgIEFsbG9jYXRpb24gYW5kIFVzYWdlKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IHRoZSBgbHd0dW5uZWxfc3RhdGVgIG1lbW9yeSBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvYygpYC4gVGhpcyBtZWFucyBpdCYjMzk7cyBndWFyYW50ZWVkIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IHJ1bGVzIG91dCBhIHdob2xlIGNsYXNzIG9mIHBvdGVudGlhbCBwcm9ibGVtcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgoKTmV4dCwgSSBvYnNlcnZlIHRoYXQgYHR1bl9pbmZvLSZndDtvcHRpb25zX2xlbmAgaXMgYmVpbmcgc2V0ICpiZWZvcmUqIHRoZSBjYWxsIHRvIGBpcF90dW5fc2V0X29wdHMoKWAuIFRoZSBpbnRlcmVzdGluZyB0aGluZyBoZXJlIGlzIHRoYXQgZXZlbiBpZiBgaXBfdHVuX3NldF9vcHRzKClgIGZhaWxzLCB0aGUgYG5ld19zdGF0ZWAgKHdoaWNoIHByZXN1bWFibHkgY29udGFpbnMgdGhlIGB0dW5faW5mb2AgZGF0YSkgaXMgaW1tZWRpYXRlbHkgZnJlZWQuIFNvLCB0aGUgc2NlbmFyaW8gZGVzY3JpYmVkIGlzOiB0aGUgY29kZSBlaXRoZXIgc2V0cyBgb3B0aW9uc19sZW5gIGFuZCB0aGVuIGZhaWxzLCBvciBzZXRzIGBvcHRpb25zX2xlbmAgYW5kIHRoZW4gc3VjY2VlZHMuIAoKVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGJvaWxzIGRvd24gdG8gdGhlICpvcmRlciogb2Ygc2V0dGluZyBgdHVuX2luZm8tJmd0O29wdGlvbnNfbGVuYCByZWxhdGl2ZSB0byB0aGUgY2FsbCB0byBgaXBfdHVuX3NldF9vcHRzKClgLiBCdXQsIGFuZCB0aGlzIGlzIGNydWNpYWwsIGB0dW5faW5mb2AgaXMgYSBsb2NhbCBwb2ludGVyIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBmdW5jdGlvbiwgbm90IHlldCBsaW5rZWQgaW50byBhbnkgcHVibGlzaGVkIGRhdGEgc3RydWN0dXJlcy4gQXMgSSB1bmRlcnN0YW5kIGl0LCBpdCYjMzk7cyBub3QgZXhwb3NlZCB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbGltaW5hdGUgYW55IHBvc3NpYmlsaXR5IG9mIGV4dGVybmFsIHJlYWRzLgoKR2l2ZW4gdGhhdCBhbGwgdGhlIG1lbW9yeSBpbiBgbmV3X3N0YXRlYCBhbmQgYHR1bl9pbmZvYCBpcyB6ZXJvLWluaXRpYWxpemVkIHZpYSBga3phbGxvYygpYCwgYW5kIHRoYXQgdGhlIGB0dW5faW5mb2AgZGF0YSBpcyBsb2NhbCB0byB0aGlzIGFsbG9jYXRpb24gYW5kIHNldHVwIHByb2Nlc3MsIGFuZCB0aGF0IHRoZSBvbmx5IG9ic2VydmVkIGRpZmZlcmVuY2UgaXMgc2V0dGluZyBgb3B0aW9uc19sZW5gIGFuZCBwb3RlbnRpYWxseSBmYWlsaW5nLCBJIGRvbiYjMzk7dCBzZWUgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLgoKSSYjMzk7ZCBsaWtlIHRvIGNoZWNrIGBpcDZfdHVuX2J1aWxkX3N0YXRlYCB0b28ganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTgwOlx0fTtcbiA5ODE6XHRcbiA5ODI6XHRzdGF0aWMgaW50IGlwNl90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIDk4MzpcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZmFtaWx5LCBjb25zdCB2b2lkICpjZmcsXG4gOTg0Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqKnRzLFxuIDk4NTpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gOTg2Olx0e1xuIDk4NzpcdFx0c3RydWN0IG5sYXR0ciAqdGJbTFdUVU5ORUxfSVA2X01BWCAmIzQzOyAxXTtcbiA5ODg6XHRcdHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbmV3X3N0YXRlO1xuIDk4OTpcdFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbztcbiA5OTA6XHRcdGludCBlcnIsIG9wdF9sZW47XG4gOTkxOlx0XG4gOTkyOlx0XHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIExXVFVOTkVMX0lQNl9NQVgsIGF0dHIsXG4gOTkzOlx0XHRcdFx0XHRcdCAgaXA2X3R1bl9wb2xpY3ksIGV4dGFjayk7XG4gOTk0Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDk5NTpcdFx0XHRyZXR1cm4gZXJyO1xuIDk5NjpcdFxuIDk5NzpcdFx0b3B0X2xlbiA9IGlwX3R1bl9nZXRfb3B0bGVuKHRiW0xXVFVOTkVMX0lQNl9PUFRTXSwgZXh0YWNrKTtcbiA5OTg6XHRcdGlmIChvcHRfbGVuIFx1MDAzYyAwKVxuIDk5OTpcdFx0XHRyZXR1cm4gb3B0X2xlbjtcbjEwMDA6XHRcbjEwMDE6XHRcdG5ld19zdGF0ZSA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHNpemVvZigqdHVuX2luZm8pICYjNDM7IG9wdF9sZW4pO1xuMTAwMjpcdFx0aWYgKCFuZXdfc3RhdGUpXG4xMDAzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTAwNDpcdFxuMTAwNTpcdFx0bmV3X3N0YXRlLVx1MDAzZXR5cGUgPSBMV1RVTk5FTF9FTkNBUF9JUDY7XG4xMDA2Olx0XG4xMDA3Olx0XHR0dW5faW5mbyA9IGx3dF90dW5faW5mbyhuZXdfc3RhdGUpO1xuMTAwODpcdFx0dHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO1xuMTAwOTpcdFxuMTAxMDpcdFx0ZXJyID0gaXBfdHVuX3NldF9vcHRzKHRiW0xXVFVOTkVMX0lQNl9PUFRTXSwgdHVuX2luZm8sIGV4dGFjayk7XG4xMDExOlx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4xMDEyOlx0XHRcdGx3dHN0YXRlX2ZyZWUobmV3X3N0YXRlKTtcbjEwMTM6XHRcdFx0cmV0dXJuIGVycjtcbjEwMTQ6XHRcdH1cbjEwMTU6XHRcbjEwMTY6XHRcdGlmICh0YltMV1RVTk5FTF9JUDZfSURdKVxuMTAxNzpcdFx0XHR0dW5faW5mby1cdTAwM2VrZXkudHVuX2lkID0gbmxhX2dldF9iZTY0KHRiW0xXVFVOTkVMX0lQNl9JRF0pO1xuMTAxODpcdFxuMTAxOTpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9EU1RdKVxuMTAyMDpcdFx0XHR0dW5faW5mby1cdTAwM2VrZXkudS5pcHY2LmRzdCA9IG5sYV9nZXRfaW42X2FkZHIodGJbTFdUVU5ORUxfSVA2X0RTVF0pO1xuMTAyMTpcdFxuMTAyMjpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9TUkNdKVxuMTAyMzpcdFx0XHR0dW5faW5mby1cdTAwM2VrZXkudS5pcHY2LnNyYyA9IG5sYV9nZXRfaW42X2FkZHIodGJbTFdUVU5ORUxfSVA2X1NSQ10pO1xuMTAyNDpcdFxuMTAyNTpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9IT1BMSU1JVF0pXG4xMDI2Olx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS50dGwgPSBubGFfZ2V0X3U4KHRiW0xXVFVOTkVMX0lQNl9IT1BMSU1JVF0pO1xuMTAyNzpcdFxuMTAyODpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9UQ10pXG4xMDI5Olx0XHRcdHR1bl9pbmZvLVx1MDAzZWtleS50b3MgPSBubGFfZ2V0X3U4KHRiW0xXVFVOTkVMX0lQNl9UQ10pO1xuMTAzMDpcdFxuMTAzMTpcdFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9GTEFHU10pIHtcbjEwMzI6XHRcdFx0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpO1xuMTAzMzpcdFx0XHRfX2JlMTYgZGF0YTtcbjEwMzQ6XHRcbjEwMzU6XHRcdFx0ZGF0YSA9IG5sYV9nZXRfYmUxNih0YltMV1RVTk5FTF9JUDZfRkxBR1NdKTtcbjEwMzY6XHRcdFx0aXBfdHVubmVsX2ZsYWdzX2Zyb21fYmUxNihmbGFncywgZGF0YSk7XG4xMDM3Olx0XHRcdGlwX3R1bm5lbF9jbGVhcl9vcHRpb25zX3ByZXNlbnQoZmxhZ3MpO1xuMTAzODpcdFxuMTAzOTpcdFx0XHRpcF90dW5uZWxfZmxhZ3Nfb3IodHVuX2luZm8tXHUwMDNla2V5LnR1bl9mbGFncyxcbjEwNDA6XHRcdFx0XHRcdCAgIHR1bl9pbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MsIGZsYWdzKTtcbjEwNDE6XHRcdH1cbjEwNDI6XHRcbjEwNDM6XHRcdHR1bl9pbmZvLVx1MDAzZW1vZGUgPSBJUF9UVU5ORUxfSU5GT19UWCB8IElQX1RVTk5FTF9JTkZPX0lQVjY7XG4xMDQ0Olx0XG4xMDQ1Olx0XHQqdHMgPSBuZXdfc3RhdGU7XG4xMDQ2Olx0XG4xMDQ3Olx0XHRyZXR1cm4gMDtcbjEwNDg6XHR9XG4xMDQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MzY2CgkJCQkJCQlvdXRwdXQ6IDI5OAoJCQkJCQkJdGhvdWdodHM6IDU0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50IG9mIElQIFR1bm5lbCBTdGF0ZSBBbGxvY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYGlwNl90dW5fYnVpbGRfc3RhdGVgIHdvcmtzIGluIGEgdmVyeSBzaW1pbGFyIG1hbm5lciB0byBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgcmVxdWlyZXMgS01TQU4gaW5zdHJ1bWVudGF0aW9uLiBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGJhc2VkIG9uIHRoZXNlIHNwZWNpZmljIGd1aWRlbGluZXMuCgpGaXJzdCwgdGhlIGFsbG9jYXRpb24gaXRzZWxmOiBgbmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCp0dW5faW5mbykgJiM0Mzsgb3B0X2xlbik7YC4gQ3JpdGljYWxseSwgYGx3dHVubmVsX3N0YXRlX2FsbG9jYCB1c2VzIGBremFsbG9jYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnQuIGBremFsbG9jYCB6ZXJvZXMgdGhlIGVudGlyZSBhbGxvY2F0ZWQgYnVmZmVyIHJpZ2h0IGZyb20gdGhlIGdldC1nby4gVGhpcyBpcyBpbXBvcnRhbnQuIEl0IGNvdmVycyBib3RoIHRoZSBgdHVuX2luZm9gIHN0cnVjdHVyZSBhbmQgdGhhdCB0cmFpbGluZyBvcHRpb25zIGFyZWEuCgpOZXh0LCB0aGUgb3B0aW9ucyBsZW5ndGggaXMgc2V0OiBgdHVuX2luZm8tJmd0O29wdGlvbnNfbGVuID0gb3B0X2xlbjtgIGJlZm9yZSBjYWxsaW5nIGBpcF90dW5fc2V0X29wdHMoLi4uKWAuIFRoaXMgaXMgdml0YWwuIFNldHRpbmcgdGhpcyBsZW5ndGggKmJlZm9yZSogY2FsbGluZyB0aGUgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHdoZW4gYGluZm8tJmd0O29wdGlvbnNgIGlzIGFjY2Vzc2VkIHdpdGhpbiBgaXBfdHVuX3NldF9vcHRzYCwgdGhlIGBvcHRpb25zX2xlbmAgZmllbGQgaXMgZGVmaW5pdGVseSBpbml0aWFsaXplZCwgcHJldmVudGluZyBwb3RlbnRpYWwgZmFsc2UgcG9zaXRpdmVzIGZyb20gVUJTQU4gb3IgYm91bmRzIGNoZWNrcy4KClRoZW4sIHRoZXJlJiMzOTtzIHRoZSBlcnJvciBoYW5kbGluZy4gSWYgYGlwX3R1bl9zZXRfb3B0cygpYCBmYWlscywgYGx3dHN0YXRlX2ZyZWUoKWAgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LiBUaGUgc3RydWN0dXJlIGlzIGZyZWVkOyBubyBsaW5nZXJpbmcgdW5pbml0aWFsaXplZCBkYXRhIGlzIGxlZnQgYXJvdW5kLgoKQmFzZWQgb24gdGhlIGd1aWRlbGluZXMsIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhpcyBmYWxsczoKCiogICBJJiMzOTttIGNvbmZpZGVudCB0aGF0IG5vIGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGFyZSBjaGFuZ2VkIGhlcmUuCiogICBUaGVyZSYjMzk7cyBubyBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCiogICBBbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBhcmUgaGFuZGxlZCBjbGVhbmx5IHdpdGggYGt6YWxsb2NgLCBlbnN1cmluZyBldmVyeXRoaW5nIGlzIHplcm9lZC4KKiAgIFRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgYW55IGNvZGUgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZHVlIHRvIGJvdW5kcyBjaGVja3MuCgpJbiBzdW1tYXJ5LCB0aGUgdXNlIG9mIGBremFsbG9jYCwgdGhlIG9yZGVyIG9mIGluaXRpYWxpemF0aW9uLCBhbmQgdGhlIGltbWVkaWF0ZSBmcmVlaW5nIG9uIGVycm9yIGFsbCBwb2ludCB0b3dhcmRzIHNhZmV0eS4gVGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjb2RlLgoKVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSYjMzk7bSByZWFkeSB0byBkb2N1bWVudCB0aGlzIHJhdGlvbmFsZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXBfdHVuX2J1aWxkX3N0YXRlKClgIGFuZCBgaXA2X3R1bl9idWlsZF9zdGF0ZSgpYCB0byBpbml0aWFsaXplIGB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47YCBwcmlvciB0byBjYWxsaW5nIGBpcF90dW5fc2V0X29wdHMoKWAsIHJhdGhlciB0aGFuIGFmdGVyd2FyZHMuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgYGluZm8tXHUwMDNlb3B0aW9uc2AgKHdoaWNoIGlzIGFubm90YXRlZCB3aXRoIGBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pYCkgaGFzIGl0cyBjb3VudGVyIHBvcHVsYXRlZCBiZWZvcmUgYWNjZXNzLlxuXG5SZWdhcmRpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uOlxuLSBUaGUgYHN0cnVjdCBsd3R1bm5lbF9zdGF0ZWAgYW5kIGl0cyBlbWJlZGRlZCBgc3RydWN0IGlwX3R1bm5lbF9pbmZvYCBhcmUgYWxsb2NhdGVkIHZpYSBgbHd0dW5uZWxfc3RhdGVfYWxsb2MoKWAsIHdoaWNoIHVzZXMgYGt6YWxsb2MoKWAgd2l0aCBgR0ZQX0FUT01JQ2AuIENvbnNlcXVlbnRseSwgYWxsIGFsbG9jYXRlZCBieXRlcyAoaW5jbHVkaW5nIGhlYWRlcnMgYW5kIHRyYWlsaW5nIG9wdGlvbiBidWZmZXJzKSBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCBhdCBhbGxvY2F0aW9uIHRpbWUuXG4tIE1vdmluZyB0aGUgYXNzaWdubWVudCBvZiBgb3B0aW9uc19sZW5gIGVhcmxpZXIgZG9lcyBub3QgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvZmllbGRzIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIElmIGBpcF90dW5fc2V0X29wdHMoKWAgZmFpbHMsIHRoZSBzdGF0ZSBpcyBmcmVlZCBpbW1lZGlhdGVseS5cblxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrIHZlY3RvcnMgYXJlIGludHJvZHVjZWQsIHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGVzZSBjaGFuZ2VzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXBfdHVuX2J1aWxkX3N0YXRlKClgIGFuZCBgaXA2X3R1bl9idWlsZF9zdGF0ZSgpYCB0byBpbml0aWFsaXplIGB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47YCBwcmlvciB0byBjYWxsaW5nIGBpcF90dW5fc2V0X29wdHMoKWAsIHJhdGhlciB0aGFuIGFmdGVyd2FyZHMuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgYGluZm8tXHUwMDNlb3B0aW9uc2AgKHdoaWNoIGlzIGFubm90YXRlZCB3aXRoIGBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pYCkgaGFzIGl0cyBjb3VudGVyIHBvcHVsYXRlZCBiZWZvcmUgYWNjZXNzLlxuXG5SZWdhcmRpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uOlxuLSBUaGUgYHN0cnVjdCBsd3R1bm5lbF9zdGF0ZWAgYW5kIGl0cyBlbWJlZGRlZCBgc3RydWN0IGlwX3R1bm5lbF9pbmZvYCBhcmUgYWxsb2NhdGVkIHZpYSBgbHd0dW5uZWxfc3RhdGVfYWxsb2MoKWAsIHdoaWNoIHVzZXMgYGt6YWxsb2MoKWAgd2l0aCBgR0ZQX0FUT01JQ2AuIENvbnNlcXVlbnRseSwgYWxsIGFsbG9jYXRlZCBieXRlcyAoaW5jbHVkaW5nIGhlYWRlcnMgYW5kIHRyYWlsaW5nIG9wdGlvbiBidWZmZXJzKSBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCBhdCBhbGxvY2F0aW9uIHRpbWUuXG4tIE1vdmluZyB0aGUgYXNzaWdubWVudCBvZiBgb3B0aW9uc19sZW5gIGVhcmxpZXIgZG9lcyBub3QgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvZmllbGRzIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIElmIGBpcF90dW5fc2V0X29wdHMoKWAgZmFpbHMsIHRoZSBzdGF0ZSBpcyBmcmVlZCBpbW1lZGlhdGVseS5cblxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrIHZlY3RvcnMgYXJlIGludHJvZHVjZWQsIHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGVzZSBjaGFuZ2VzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIxOjU3Ljg3MTExOTY0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNjU3NzI5NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIkxXVFVOTkVMXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdHVuX2J1aWxkX3N0YXRlXCIsXG4gICAgXCJpcDZfdHVuX2J1aWxkX3N0YXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXBfdHVuX2J1aWxkX3N0YXRlKClgIGFuZCBgaXA2X3R1bl9idWlsZF9zdGF0ZSgpYCB0byBpbml0aWFsaXplIGB0dW5faW5mby1cXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO2AgcHJpb3IgdG8gY2FsbGluZyBgaXBfdHVuX3NldF9vcHRzKClgLCByYXRoZXIgdGhhbiBhZnRlcndhcmRzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZmxleGlibGUgYXJyYXkgbWVtYmVyIGBpbmZvLVxcdTAwM2VvcHRpb25zYCAod2hpY2ggaXMgYW5ub3RhdGVkIHdpdGggYF9fY291bnRlZF9ieShvcHRpb25zX2xlbilgKSBoYXMgaXRzIGNvdW50ZXIgcG9wdWxhdGVkIGJlZm9yZSBhY2Nlc3MuXFxuXFxuUmVnYXJkaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbjpcXG4tIFRoZSBgc3RydWN0IGx3dHVubmVsX3N0YXRlYCBhbmQgaXRzIGVtYmVkZGVkIGBzdHJ1Y3QgaXBfdHVubmVsX2luZm9gIGFyZSBhbGxvY2F0ZWQgdmlhIGBsd3R1bm5lbF9zdGF0ZV9hbGxvYygpYCwgd2hpY2ggdXNlcyBga3phbGxvYygpYCB3aXRoIGBHRlBfQVRPTUlDYC4gQ29uc2VxdWVudGx5LCBhbGwgYWxsb2NhdGVkIGJ5dGVzIChpbmNsdWRpbmcgaGVhZGVycyBhbmQgdHJhaWxpbmcgb3B0aW9uIGJ1ZmZlcnMpIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGF0IGFsbG9jYXRpb24gdGltZS5cXG4tIE1vdmluZyB0aGUgYXNzaWdubWVudCBvZiBgb3B0aW9uc19sZW5gIGVhcmxpZXIgZG9lcyBub3QgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvZmllbGRzIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIElmIGBpcF90dW5fc2V0X29wdHMoKWAgZmFpbHMsIHRoZSBzdGF0ZSBpcyBmcmVlZCBpbW1lZGlhdGVseS5cXG5cXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZCwgc3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50IHRvIHZhbGlkYXRlIHRoZXNlIGNoYW5nZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMsIG1vdmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuIGJlZm9yZSBpcF90dW5fc2V0X29wdHMoKSBpbiBib3RoIGlwX3R1bl9idWlsZF9zdGF0ZSgpIGFuZCBpcDZfdHVuX2J1aWxkX3N0YXRlKCkuIFRoaXMgcGF0aCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgcm91dGUvbmV4dGhvcCByZXF1ZXN0cyBjb25maWd1cmluZyBsaWdodHdlaWdodCB0dW5uZWwgZW5jYXBzdWxhdGlvbiAoTFdUVU5ORUxfRU5DQVBfSVAgYW5kIExXVFVOTkVMX0VOQ0FQX0lQNikuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdHVubmVsIG9wdGlvbiBwYXJzaW5nIGFuZCBib3VuZHMgY2hlY2tpbmcgb24gdHVubmVsIHN0YXRlIGNyZWF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMTo1Ny44NzExMjQ4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNTAzOTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDU2ZjVlZjRhZjIzY2QwZGRiMmIzYWM0ZWNlMTk5YWEzMzIxZmZkN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCAxMiAwNjoyMTo1NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jIGIvbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY1xcbmluZGV4IDUxNjhkNTQ2ZWEyZmQuLjhmYjQ3NDJhY2E5MjUgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY1xcbisrKyBiL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNcXG5AQCAtNzExLDYgKzcxMSw3IEBAIHN0YXRpYyBpbnQgaXBfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gXFx0bmV3X3N0YXRlLVxcdTAwM2V0eXBlID0gTFdUVU5ORUxfRU5DQVBfSVA7XFxuIFxcbiBcXHR0dW5faW5mbyA9IGx3dF90dW5faW5mbyhuZXdfc3RhdGUpO1xcbitcXHR0dW5faW5mby1cXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO1xcbiBcXG4gXFx0ZXJyID0gaXBfdHVuX3NldF9vcHRzKHRiW0xXVFVOTkVMX0lQX09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG5AQCAtNzUzLDcgKzc1NCw2IEBAIHN0YXRpYyBpbnQgaXBfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gXFx0fVxcbiBcXG4gXFx0dHVuX2luZm8tXFx1MDAzZW1vZGUgPSBJUF9UVU5ORUxfSU5GT19UWDtcXG4tXFx0dHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcXG4gXFxuIFxcdCp0cyA9IG5ld19zdGF0ZTtcXG4gXFxuQEAgLTEwMDUsNiArMTAwNSw3IEBAIHN0YXRpYyBpbnQgaXA2X3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuIFxcdG5ld19zdGF0ZS1cXHUwMDNldHlwZSA9IExXVFVOTkVMX0VOQ0FQX0lQNjtcXG4gXFxuIFxcdHR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKG5ld19zdGF0ZSk7XFxuK1xcdHR1bl9pbmZvLVxcdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XFxuIFxcbiBcXHRlcnIgPSBpcF90dW5fc2V0X29wdHModGJbTFdUVU5ORUxfSVA2X09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG5AQCAtMTA0MCw3ICsxMDQxLDYgQEAgc3RhdGljIGludCBpcDZfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gXFx0fVxcbiBcXG4gXFx0dHVuX2luZm8tXFx1MDAzZW1vZGUgPSBJUF9UVU5ORUxfSU5GT19UWCB8IElQX1RVTk5FTF9JTkZPX0lQVjY7XFxuLVxcdHR1bl9pbmZvLVxcdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XFxuIFxcbiBcXHQqdHMgPSBuZXdfc3RhdGU7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMTo1OC4zNTMyOTIxOTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjg4MDY3NDczMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIkxXVFVOTkVMXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdHVuX2J1aWxkX3N0YXRlXCIsXG4gICAgXCJpcDZfdHVuX2J1aWxkX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLCBtb3ZpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHR1bl9pbmZvLVxcdTAwM2VvcHRpb25zX2xlbiBiZWZvcmUgaXBfdHVuX3NldF9vcHRzKCkgaW4gYm90aCBpcF90dW5fYnVpbGRfc3RhdGUoKSBhbmQgaXA2X3R1bl9idWlsZF9zdGF0ZSgpLiBUaGlzIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIHJvdXRlL25leHRob3AgcmVxdWVzdHMgY29uZmlndXJpbmcgbGlnaHR3ZWlnaHQgdHVubmVsIGVuY2Fwc3VsYXRpb24gKExXVFVOTkVMX0VOQ0FQX0lQIGFuZCBMV1RVTk5FTF9FTkNBUF9JUDYpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHR1bm5lbCBvcHRpb24gcGFyc2luZyBhbmQgYm91bmRzIGNoZWNraW5nIG9uIHR1bm5lbCBzdGF0ZSBjcmVhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NTZmNWVmNGFmMjNjZDBkZGIyYjNhYzRlY2UxOTlhYTMzMjFmZmQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMDY6MjE6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jIGIvbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY1xuaW5kZXggNTE2OGQ1NDZlYTJmZC4uOGZiNDc0MmFjYTkyNSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNcbisrKyBiL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNcbkBAIC03MTEsNiArNzExLDcgQEAgc3RhdGljIGludCBpcF90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIFx0bmV3X3N0YXRlLVx1MDAzZXR5cGUgPSBMV1RVTk5FTF9FTkNBUF9JUDtcbiBcbiBcdHR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKG5ld19zdGF0ZSk7XG4rXHR0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XG4gXG4gXHRlcnIgPSBpcF90dW5fc2V0X29wdHModGJbTFdUVU5ORUxfSVBfT1BUU10sIHR1bl9pbmZvLCBleHRhY2spO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuQEAgLTc1Myw3ICs3NTQsNiBAQCBzdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gXHR9XG4gXG4gXHR0dW5faW5mby1cdTAwM2Vtb2RlID0gSVBfVFVOTkVMX0lORk9fVFg7XG4tXHR0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XG4gXG4gXHQqdHMgPSBuZXdfc3RhdGU7XG4gXG5AQCAtMTAwNSw2ICsxMDA1LDcgQEAgc3RhdGljIGludCBpcDZfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcbiBcdG5ld19zdGF0ZS1cdTAwM2V0eXBlID0gTFdUVU5ORUxfRU5DQVBfSVA2O1xuIFxuIFx0dHVuX2luZm8gPSBsd3RfdHVuX2luZm8obmV3X3N0YXRlKTtcbitcdHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcbiBcbiBcdGVyciA9IGlwX3R1bl9zZXRfb3B0cyh0YltMV1RVTk5FTF9JUDZfT1BUU10sIHR1bl9pbmZvLCBleHRhY2spO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuQEAgLTEwNDAsNyArMTA0MSw2IEBAIHN0YXRpYyBpbnQgaXA2X3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gXHR9XG4gXG4gXHR0dW5faW5mby1cdTAwM2Vtb2RlID0gSVBfVFVOTkVMX0lORk9fVFggfCBJUF9UVU5ORUxfSU5GT19JUFY2O1xuLVx0dHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO1xuIFxuIFx0KnRzID0gbmV3X3N0YXRlO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjE6NTguMzUzMjkzNTkyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODk5NDkyNTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQIFR1bm5lbCBDb3JlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AuIE15IGZpcnN0IG1vdmUgaXMgYWx3YXlzIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzLCBzbyBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgZGlmZiwgZm9jdXNpbmcgcGFydGljdWxhcmx5IGFyb3VuZCBsaW5lcyA3MTEgYW5kIDEwMDUuIFRob3NlIHNwZWNpZmljIGxpbmUgbnVtYmVycyBvZnRlbiBpbmRpY2F0ZSBjcnVjaWFsIGFyZWFzIG9mIGEgZnVuY3Rpb24sIG9yIHBlcmhhcHMgdGhlIGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24gb2YgYSBwYXJ0aWN1bGFyIGRhdGEgc3RydWN0dXJlLlxuXG5UbyBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdWxsIGNvbnRleHQsIGFuZCB0byBjcm9zcyByZWZlcmVuY2UgdGhlIGxpbmVzIGluIHRoZSBzb3VyY2UsIEknbGwgdXNlIHRoZSBgcmVhZC1maWxlYCBjb21tYW5kIHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBjb2RlIGluIGBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jYCwgc3BlY2lmaWNhbGx5IHRob3NlIGxpbmVzIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gR2V0dGluZyBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3Vycm91bmRpbmcgbGluZXMsIHdpbGwgYWxsb3cgbWUgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGNvZGUsIGFuZCBob3cgdGhlIGNoYW5nZXMgZml0IGluIHRoZSBwcm9ncmFtJ3Mgb3ZlcmFsbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjE4LCJPdXRwdXRUb2tlbnMiOjgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjowNy4zNDgyMjE0NzNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGx3dHVubmVsX3N0YXRlICoqdHMsXFxuIDY5MTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDY5MjpcXHR7XFxuIDY5MzpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltMV1RVTk5FTF9JUF9NQVggKyAxXTtcXG4gNjk0OlxcdFxcdHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbmV3X3N0YXRlO1xcbiA2OTU6XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbztcXG4gNjk2OlxcdFxcdGludCBlcnIsIG9wdF9sZW47XFxuIDY5NzpcXHRcXG4gNjk4OlxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgTFdUVU5ORUxfSVBfTUFYLCBhdHRyLFxcbiA2OTk6XFx0XFx0XFx0XFx0XFx0XFx0ICBpcF90dW5fcG9saWN5LCBleHRhY2spO1xcbiA3MDA6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDcwMTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3MDI6XFx0XFxuIDcwMzpcXHRcXHRvcHRfbGVuID0gaXBfdHVuX2dldF9vcHRsZW4odGJbTFdUVU5ORUxfSVBfT1BUU10sIGV4dGFjayk7XFxuIDcwNDpcXHRcXHRpZiAob3B0X2xlbiBcXHUwMDNjIDApXFxuIDcwNTpcXHRcXHRcXHRyZXR1cm4gb3B0X2xlbjtcXG4gNzA2OlxcdFxcbiA3MDc6XFx0XFx0bmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCp0dW5faW5mbykgKyBvcHRfbGVuKTtcXG4gNzA4OlxcdFxcdGlmICghbmV3X3N0YXRlKVxcbiA3MDk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDcxMDpcXHRcXG4gNzExOlxcdFxcdG5ld19zdGF0ZS1cXHUwMDNldHlwZSA9IExXVFVOTkVMX0VOQ0FQX0lQO1xcbiA3MTI6XFx0XFxuIDcxMzpcXHRcXHR0dW5faW5mbyA9IGx3dF90dW5faW5mbyhuZXdfc3RhdGUpO1xcbiA3MTQ6XFx0XFx0dHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcXG4gNzE1OlxcdFxcbiA3MTY6XFx0XFx0ZXJyID0gaXBfdHVuX3NldF9vcHRzKHRiW0xXVFVOTkVMX0lQX09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTtcXG4gNzE3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIDcxODpcXHRcXHRcXHRsd3RzdGF0ZV9mcmVlKG5ld19zdGF0ZSk7XFxuIDcxOTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3MjA6XFx0XFx0fVxcbiA3MjE6XFx0XFxuIDcyMjpcXHQjaWZkZWYgQ09ORklHX0RTVF9DQUNIRVxcbiA3MjM6XFx0XFx0ZXJyID0gZHN0X2NhY2hlX2luaXQoXFx1MDAyNnR1bl9pbmZvLVxcdTAwM2Vkc3RfY2FjaGUsIEdGUF9LRVJORUwpO1xcbiA3MjQ6XFx0XFx0aWYgKGVycikge1xcbiA3MjU6XFx0XFx0XFx0bHd0c3RhdGVfZnJlZShuZXdfc3RhdGUpO1xcbiA3MjY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzI3OlxcdFxcdH1cXG4gNzI4OlxcdCNlbmRpZlxcbiA3Mjk6XFx0XFxuIDczMDpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVBfSURdKVxcbiA3MzE6XFx0XFx0XFx0dHVuX2luZm8tXFx1MDAzZWtleS50dW5faWQgPSBubGFfZ2V0X2JlNjQodGJbTFdUVU5ORUxfSVBfSURdKTtcXG4gNzMyOlxcdFxcbiA3MzM6XFx0XFx0aWYgKHRiW0xXVFVOTkVMX0lQX0RTVF0pXFxuIDczNDpcXHRcXHRcXHR0dW5faW5mby1cXHUwMDNla2V5LnUuaXB2NC5kc3QgPSBubGFfZ2V0X2luX2FkZHIodGJbTFdUVU5ORUxfSVBfRFNUXSk7XFxuIDczNTpcXHRcXG4gNzM2OlxcdFxcdGlmICh0YltMV1RVTk5FTF9JUF9TUkNdKVxcbiA3Mzc6XFx0XFx0XFx0dHVuX2luZm8tXFx1MDAzZWtleS51LmlwdjQuc3JjID0gbmxhX2dldF9pbl9hZGRyKHRiW0xXVFVOTkVMX0lQX1NSQ10pO1xcbiA3Mzg6XFx0XFxuIDczOTpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVBfVFRMXSlcXG4gNzQwOlxcdFxcdFxcdHR1bl9pbmZvLVxcdTAwM2VrZXkudHRsID0gbmxhX2dldF91OCh0YltMV1RVTk5FTF9JUF9UVExdKTtcXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0aWYgKHRiW0xXVFVOTkVMX0lQX1RPU10pXFxuIDc0MzpcXHRcXHRcXHR0dW5faW5mby1cXHUwMDNla2V5LnRvcyA9IG5sYV9nZXRfdTgodGJbTFdUVU5ORUxfSVBfVE9TXSk7XFxuIDc0NDpcXHRcXG4gNzQ1OlxcdFxcdGlmICh0YltMV1RVTk5FTF9JUF9GTEFHU10pIHtcXG4gNzQ2OlxcdFxcdFxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcXG4gNzQ3OlxcdFxcbiA3NDg6XFx0XFx0XFx0aXBfdHVubmVsX2ZsYWdzX2Zyb21fYmUxNihmbGFncyxcXG4gNzQ5OlxcdFxcdFxcdFxcdFxcdFxcdCAgbmxhX2dldF9iZTE2KHRiW0xXVFVOTkVMX0lQX0ZMQUdTXSkpO1xcbiA3NTA6XFx0XFx0XFx0aXBfdHVubmVsX2NsZWFyX29wdGlvbnNfcHJlc2VudChmbGFncyk7XFxuIDc1MTpcXHRcXG4gNzUyOlxcdFxcdFxcdGlwX3R1bm5lbF9mbGFnc19vcih0dW5faW5mby1cXHUwMDNla2V5LnR1bl9mbGFncyxcXG4gNzUzOlxcdFxcdFxcdFxcdFxcdCAgIHR1bl9pbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzLCBmbGFncyk7XFxuIDc1NDpcXHRcXHR9XFxuIDc1NTpcXHRcXG4gNzU2OlxcdFxcdHR1bl9pbmZvLVxcdTAwM2Vtb2RlID0gSVBfVFVOTkVMX0lORk9fVFg7XFxuIDc1NzpcXHRcXG4gNzU4OlxcdFxcdCp0cyA9IG5ld19zdGF0ZTtcXG4gNzU5OlxcdFxcbiA3NjA6XFx0XFx0cmV0dXJuIDA7XFxuIDc2MTpcXHR9XFxuIDc2MjpcXHRcXG4gNzYzOlxcdHN0YXRpYyB2b2lkIGlwX3R1bl9kZXN0cm95X3N0YXRlKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpXFxuIDc2NDpcXHR7XFxuIDc2NTpcXHQjaWZkZWYgQ09ORklHX0RTVF9DQUNIRVxcbiA3NjY6XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyA9IGx3dF90dW5faW5mbyhsd3RzdGF0ZSk7XFxuIDc2NzpcXHRcXG4gNzY4OlxcdFxcdGRzdF9jYWNoZV9kZXN0cm95KFxcdTAwMjZ0dW5faW5mby1cXHUwMDNlZHN0X2NhY2hlKTtcXG4gNzY5OlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjowNy4zNDgzOTkyMjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk5MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk5MDpcXHRcXHRpbnQgZXJyLCBvcHRfbGVuO1xcbiA5OTE6XFx0XFxuIDk5MjpcXHRcXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIExXVFVOTkVMX0lQNl9NQVgsIGF0dHIsXFxuIDk5MzpcXHRcXHRcXHRcXHRcXHRcXHQgIGlwNl90dW5fcG9saWN5LCBleHRhY2spO1xcbiA5OTQ6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDk5NTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA5OTY6XFx0XFxuIDk5NzpcXHRcXHRvcHRfbGVuID0gaXBfdHVuX2dldF9vcHRsZW4odGJbTFdUVU5ORUxfSVA2X09QVFNdLCBleHRhY2spO1xcbiA5OTg6XFx0XFx0aWYgKG9wdF9sZW4gXFx1MDAzYyAwKVxcbiA5OTk6XFx0XFx0XFx0cmV0dXJuIG9wdF9sZW47XFxuMTAwMDpcXHRcXG4xMDAxOlxcdFxcdG5ld19zdGF0ZSA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHNpemVvZigqdHVuX2luZm8pICsgb3B0X2xlbik7XFxuMTAwMjpcXHRcXHRpZiAoIW5ld19zdGF0ZSlcXG4xMDAzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjEwMDQ6XFx0XFxuMTAwNTpcXHRcXHRuZXdfc3RhdGUtXFx1MDAzZXR5cGUgPSBMV1RVTk5FTF9FTkNBUF9JUDY7XFxuMTAwNjpcXHRcXG4xMDA3OlxcdFxcdHR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKG5ld19zdGF0ZSk7XFxuMTAwODpcXHRcXHR0dW5faW5mby1cXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO1xcbjEwMDk6XFx0XFxuMTAxMDpcXHRcXHRlcnIgPSBpcF90dW5fc2V0X29wdHModGJbTFdUVU5ORUxfSVA2X09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTtcXG4xMDExOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMTAxMjpcXHRcXHRcXHRsd3RzdGF0ZV9mcmVlKG5ld19zdGF0ZSk7XFxuMTAxMzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEwMTQ6XFx0XFx0fVxcbjEwMTU6XFx0XFxuMTAxNjpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVA2X0lEXSlcXG4xMDE3OlxcdFxcdFxcdHR1bl9pbmZvLVxcdTAwM2VrZXkudHVuX2lkID0gbmxhX2dldF9iZTY0KHRiW0xXVFVOTkVMX0lQNl9JRF0pO1xcbjEwMTg6XFx0XFxuMTAxOTpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVA2X0RTVF0pXFxuMTAyMDpcXHRcXHRcXHR0dW5faW5mby1cXHUwMDNla2V5LnUuaXB2Ni5kc3QgPSBubGFfZ2V0X2luNl9hZGRyKHRiW0xXVFVOTkVMX0lQNl9EU1RdKTtcXG4xMDIxOlxcdFxcbjEwMjI6XFx0XFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9TUkNdKVxcbjEwMjM6XFx0XFx0XFx0dHVuX2luZm8tXFx1MDAzZWtleS51LmlwdjYuc3JjID0gbmxhX2dldF9pbjZfYWRkcih0YltMV1RVTk5FTF9JUDZfU1JDXSk7XFxuMTAyNDpcXHRcXG4xMDI1OlxcdFxcdGlmICh0YltMV1RVTk5FTF9JUDZfSE9QTElNSVRdKVxcbjEwMjY6XFx0XFx0XFx0dHVuX2luZm8tXFx1MDAzZWtleS50dGwgPSBubGFfZ2V0X3U4KHRiW0xXVFVOTkVMX0lQNl9IT1BMSU1JVF0pO1xcbjEwMjc6XFx0XFxuMTAyODpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVA2X1RDXSlcXG4xMDI5OlxcdFxcdFxcdHR1bl9pbmZvLVxcdTAwM2VrZXkudG9zID0gbmxhX2dldF91OCh0YltMV1RVTk5FTF9JUDZfVENdKTtcXG4xMDMwOlxcdFxcbjEwMzE6XFx0XFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9GTEFHU10pIHtcXG4xMDMyOlxcdFxcdFxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcXG4xMDMzOlxcdFxcdFxcdF9fYmUxNiBkYXRhO1xcbjEwMzQ6XFx0XFxuMTAzNTpcXHRcXHRcXHRkYXRhID0gbmxhX2dldF9iZTE2KHRiW0xXVFVOTkVMX0lQNl9GTEFHU10pO1xcbjEwMzY6XFx0XFx0XFx0aXBfdHVubmVsX2ZsYWdzX2Zyb21fYmUxNihmbGFncywgZGF0YSk7XFxuMTAzNzpcXHRcXHRcXHRpcF90dW5uZWxfY2xlYXJfb3B0aW9uc19wcmVzZW50KGZsYWdzKTtcXG4xMDM4OlxcdFxcbjEwMzk6XFx0XFx0XFx0aXBfdHVubmVsX2ZsYWdzX29yKHR1bl9pbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzLFxcbjEwNDA6XFx0XFx0XFx0XFx0XFx0ICAgdHVuX2luZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MsIGZsYWdzKTtcXG4xMDQxOlxcdFxcdH1cXG4xMDQyOlxcdFxcbjEwNDM6XFx0XFx0dHVuX2luZm8tXFx1MDAzZW1vZGUgPSBJUF9UVU5ORUxfSU5GT19UWCB8IElQX1RVTk5FTF9JTkZPX0lQVjY7XFxuMTA0NDpcXHRcXG4xMDQ1OlxcdFxcdCp0cyA9IG5ld19zdGF0ZTtcXG4xMDQ2OlxcdFxcbjEwNDc6XFx0XFx0cmV0dXJuIDA7XFxuMTA0ODpcXHR9XFxuMTA0OTpcXHRcXG4xMDUwOlxcdHN0YXRpYyBpbnQgaXA2X3R1bl9maWxsX2VuY2FwX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xMDUxOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpXFxuMTA1MjpcXHR7XFxuMTA1MzpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKGx3dHN0YXRlKTtcXG4xMDU0OlxcdFxcbjEwNTU6XFx0XFx0aWYgKG5sYV9wdXRfYmU2NChza2IsIExXVFVOTkVMX0lQNl9JRCwgdHVuX2luZm8tXFx1MDAzZWtleS50dW5faWQsXFxuMTA1NjpcXHRcXHRcXHRcXHQgTFdUVU5ORUxfSVA2X1BBRCkgfHxcXG4xMDU3OlxcdFxcdCAgICBubGFfcHV0X2luNl9hZGRyKHNrYiwgTFdUVU5ORUxfSVA2X0RTVCwgXFx1MDAyNnR1bl9pbmZvLVxcdTAwM2VrZXkudS5pcHY2LmRzdCkgfHxcXG4xMDU4OlxcdFxcdCAgICBubGFfcHV0X2luNl9hZGRyKHNrYiwgTFdUVU5ORUxfSVA2X1NSQywgXFx1MDAyNnR1bl9pbmZvLVxcdTAwM2VrZXkudS5pcHY2LnNyYykgfHxcXG4xMDU5OlxcdFxcdCAgICBubGFfcHV0X3U4KHNrYiwgTFdUVU5ORUxfSVA2X1RDLCB0dW5faW5mby1cXHUwMDNla2V5LnRvcykgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjI6MDcuMzQ4NDkxNDM0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTU3MzUzOTQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBpcF90dW5fc2V0X29wdHNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaXBfdHVuX3NldF9vcHRzYCBpcyBhY3R1YWxseSBkb2luZy4gTGV0J3MgZ2V0IHJpZ2h0IGludG8gdGhlIGNvZGUgZm9yIGBpcF90dW5fc2V0X29wdHNgIGFuZCB1bmRlcnN0YW5kIHdoYXQgaXQgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIwNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjI6MDguOTIyMDMzNjU1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjAwOlxcdFxcdFxcdFxcdGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgKyBvcHRzX2xlbjtcXG4gNjAxOlxcdFxcbiA2MDI6XFx0XFx0XFx0bWQtXFx1MDAzZXZlcnNpb24gPSB2ZXI7XFxuIDYwMzpcXHRcXHRcXHRpZiAodmVyID09IDEpIHtcXG4gNjA0OlxcdFxcdFxcdFxcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0lOREVYXTtcXG4gNjA1OlxcdFxcdFxcdFxcdG1kLVxcdTAwM2V1LmluZGV4ID0gbmxhX2dldF9iZTMyKGF0dHIpO1xcbiA2MDY6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNjA3OlxcdFxcdFxcdFxcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0RJUl07XFxuIDYwODpcXHRcXHRcXHRcXHRtZC1cXHUwMDNldS5tZDIuZGlyID0gbmxhX2dldF91OChhdHRyKTtcXG4gNjA5OlxcdFxcdFxcdFxcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0hXSURdO1xcbiA2MTA6XFx0XFx0XFx0XFx0c2V0X2h3aWQoXFx1MDAyNm1kLVxcdTAwM2V1Lm1kMiwgbmxhX2dldF91OChhdHRyKSk7XFxuIDYxMTpcXHRcXHRcXHR9XFxuIDYxMjpcXHRcXG4gNjEzOlxcdFxcdFxcdF9fc2V0X2JpdChJUF9UVU5ORUxfRVJTUEFOX09QVF9CSVQsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpO1xcbiA2MTQ6XFx0XFx0fVxcbiA2MTU6XFx0XFxuIDYxNjpcXHRcXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBlcnNwYW5fbWV0YWRhdGEpO1xcbiA2MTc6XFx0fVxcbiA2MTg6XFx0XFxuIDYxOTpcXHRzdGF0aWMgaW50IGlwX3R1bl9wYXJzZV9vcHRzKHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyxcXG4gNjIwOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA2MjE6XFx0e1xcbiA2MjI6XFx0XFx0aW50IGVyciwgcmVtLCBvcHRfbGVuLCBvcHRzX2xlbiA9IDA7XFxuIDYyMzpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpubGE7XFxuIDYyNDpcXHRcXHR1MzIgdHlwZSA9IDA7XFxuIDYyNTpcXHRcXG4gNjI2OlxcdFxcdGlmICghYXR0cilcXG4gNjI3OlxcdFxcdFxcdHJldHVybiAwO1xcbiA2Mjg6XFx0XFxuIDYyOTpcXHRcXHRlcnIgPSBubGFfdmFsaWRhdGUobmxhX2RhdGEoYXR0ciksIG5sYV9sZW4oYXR0ciksIExXVFVOTkVMX0lQX09QVFNfTUFYLFxcbiA2MzA6XFx0XFx0XFx0XFx0ICAgaXBfb3B0c19wb2xpY3ksIGV4dGFjayk7XFxuIDYzMTpcXHRcXHRpZiAoZXJyKVxcbiA2MzI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNjMzOlxcdFxcbiA2MzQ6XFx0XFx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBubGFfZGF0YShhdHRyKSwgbmxhX2xlbihhdHRyKSwgcmVtKSB7XFxuIDYzNTpcXHRcXHRcXHRzd2l0Y2ggKG5sYV90eXBlKG5sYSkpIHtcXG4gNjM2OlxcdFxcdFxcdGNhc2UgTFdUVU5ORUxfSVBfT1BUU19HRU5FVkU6XFxuIDYzNzpcXHRcXHRcXHRcXHRpZiAodHlwZSBcXHUwMDI2XFx1MDAyNiB0eXBlICE9IElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVClcXG4gNjM4OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA2Mzk6XFx0XFx0XFx0XFx0b3B0X2xlbiA9IGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZShubGEsIGluZm8sIG9wdHNfbGVuLFxcbiA2NDA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZXh0YWNrKTtcXG4gNjQxOlxcdFxcdFxcdFxcdGlmIChvcHRfbGVuIFxcdTAwM2MgMClcXG4gNjQyOlxcdFxcdFxcdFxcdFxcdHJldHVybiBvcHRfbGVuO1xcbiA2NDM6XFx0XFx0XFx0XFx0b3B0c19sZW4gKz0gb3B0X2xlbjtcXG4gNjQ0OlxcdFxcdFxcdFxcdGlmIChvcHRzX2xlbiBcXHUwMDNlIElQX1RVTk5FTF9PUFRTX01BWClcXG4gNjQ1OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA2NDY6XFx0XFx0XFx0XFx0dHlwZSA9IElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVDtcXG4gNjQ3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA2NDg6XFx0XFx0XFx0Y2FzZSBMV1RVTk5FTF9JUF9PUFRTX1ZYTEFOOlxcbiA2NDk6XFx0XFx0XFx0XFx0aWYgKHR5cGUpXFxuIDY1MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjUxOlxcdFxcdFxcdFxcdG9wdF9sZW4gPSBpcF90dW5fcGFyc2Vfb3B0c192eGxhbihubGEsIGluZm8sIG9wdHNfbGVuLFxcbiA2NTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBleHRhY2spO1xcbiA2NTM6XFx0XFx0XFx0XFx0aWYgKG9wdF9sZW4gXFx1MDAzYyAwKVxcbiA2NTQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG9wdF9sZW47XFxuIDY1NTpcXHRcXHRcXHRcXHRvcHRzX2xlbiArPSBvcHRfbGVuO1xcbiA2NTY6XFx0XFx0XFx0XFx0dHlwZSA9IElQX1RVTk5FTF9WWExBTl9PUFRfQklUO1xcbiA2NTc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDY1ODpcXHRcXHRcXHRjYXNlIExXVFVOTkVMX0lQX09QVFNfRVJTUEFOOlxcbiA2NTk6XFx0XFx0XFx0XFx0aWYgKHR5cGUpXFxuIDY2MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjYxOlxcdFxcdFxcdFxcdG9wdF9sZW4gPSBpcF90dW5fcGFyc2Vfb3B0c19lcnNwYW4obmxhLCBpbmZvLCBvcHRzX2xlbixcXG4gNjYyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGV4dGFjayk7XFxuIDY2MzpcXHRcXHRcXHRcXHRpZiAob3B0X2xlbiBcXHUwMDNjIDApXFxuIDY2NDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gb3B0X2xlbjtcXG4gNjY1OlxcdFxcdFxcdFxcdG9wdHNfbGVuICs9IG9wdF9sZW47XFxuIDY2NjpcXHRcXHRcXHRcXHR0eXBlID0gSVBfVFVOTkVMX0VSU1BBTl9PUFRfQklUO1xcbiA2Njc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDY2ODpcXHRcXHRcXHRkZWZhdWx0OlxcbiA2Njk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDY3MDpcXHRcXHRcXHR9XFxuIDY3MTpcXHRcXHR9XFxuIDY3MjpcXHRcXG4gNjczOlxcdFxcdHJldHVybiBvcHRzX2xlbjtcXG4gNjc0OlxcdH1cXG4gNjc1OlxcdFxcbiA2NzY6XFx0c3RhdGljIGludCBpcF90dW5fZ2V0X29wdGxlbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbiA2Nzc6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDY3ODpcXHR7XFxuIDY3OTpcXHRcXHRyZXR1cm4gaXBfdHVuX3BhcnNlX29wdHMoYXR0ciwgTlVMTCwgZXh0YWNrKTtcXG4gNjgwOlxcdH1cXG4gNjgxOlxcdFxcbiA2ODI6XFx0c3RhdGljIGludCBpcF90dW5fc2V0X29wdHMoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxcbiA2ODM6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA2ODQ6XFx0e1xcbiA2ODU6XFx0XFx0cmV0dXJuIGlwX3R1bl9wYXJzZV9vcHRzKGF0dHIsIGluZm8sIGV4dGFjayk7XFxuIDY4NjpcXHR9XFxuIDY4NzpcXHRcXG4gNjg4OlxcdHN0YXRpYyBpbnQgaXBfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gNjg5OlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBmYW1pbHksIGNvbnN0IHZvaWQgKmNmZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjI6MDguOTIyMTM3Mzk1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDI5NzYzNTAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyBUdW5uZWwgT3B0aW9uIFBhcnNpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBkaWZmZXJlbnQgdHVubmVsIHR5cGVzIGhhbmRsZSB0aGVpciBvcHRpb25zLiBTcGVjaWZpY2FsbHksIG15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiBwYXJzaW5nIHRoZSBvcHRpb25zIGZvciBWWExBTiwgR2VuZXZlLCBhbmQgRVJTUEFOIHR1bm5lbHMuIFRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIHJldmlldyBhcmUgYGlwX3R1bl9wYXJzZV9vcHRzX3Z4bGFuYCwgYGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZWAsIGFuZCBgaXBfdHVuX3BhcnNlX29wdHNfZXJzcGFuYC4gSXQgc2VlbXMgbGlrZSB0aG9zZSB3b3VsZCBiZSB0aGUgb2J2aW91cyBwbGFjZXMgdG8gc3RhcnQuIE5vdywgSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AgYW5kIHRha2UgYSBsb29rIGF0IGxpbmVzIDUwMC02MDAuIEhvcGVmdWxseSwgdGhhdCBzZWN0aW9uIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3B0aW9uIHBhcnNlcnMgYXJlIGludGVncmF0ZWQgYW5kIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MDMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjEzLjIxOTc3NTA0NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDkwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MDA6XFx0XFx0W0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fSU5ERVhdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbiA1MDE6XFx0XFx0W0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fRElSXVxcdD0geyAudHlwZSA9IE5MQV9VOCB9LFxcbiA1MDI6XFx0XFx0W0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fSFdJRF1cXHQ9IHsgLnR5cGUgPSBOTEFfVTggfSxcXG4gNTAzOlxcdH07XFxuIDUwNDpcXHRcXG4gNTA1OlxcdHN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfZ2VuZXZlKHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuIDUwNjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLCBpbnQgb3B0c19sZW4sXFxuIDUwNzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA1MDg6XFx0e1xcbiA1MDk6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9NQVggKyAxXTtcXG4gNTEwOlxcdFxcdGludCBkYXRhX2xlbiwgZXJyO1xcbiA1MTE6XFx0XFxuIDUxMjpcXHRcXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBMV1RVTk5FTF9JUF9PUFRfR0VORVZFX01BWCwgYXR0cixcXG4gNTEzOlxcdFxcdFxcdFxcdCAgICAgICBnZW5ldmVfb3B0X3BvbGljeSwgZXh0YWNrKTtcXG4gNTE0OlxcdFxcdGlmIChlcnIpXFxuIDUxNTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA1MTY6XFx0XFxuIDUxNzpcXHRcXHRpZiAoIXRiW0xXVFVOTkVMX0lQX09QVF9HRU5FVkVfQ0xBU1NdIHx8XFxuIDUxODpcXHRcXHQgICAgIXRiW0xXVFVOTkVMX0lQX09QVF9HRU5FVkVfVFlQRV0gfHxcXG4gNTE5OlxcdFxcdCAgICAhdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9EQVRBXSlcXG4gNTIwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRcXHRhdHRyID0gdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9EQVRBXTtcXG4gNTIzOlxcdFxcdGRhdGFfbGVuID0gbmxhX2xlbihhdHRyKTtcXG4gNTI0OlxcdFxcdGlmIChkYXRhX2xlbiAlIDQpXFxuIDUyNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTI2OlxcdFxcbiA1Mjc6XFx0XFx0aWYgKGluZm8pIHtcXG4gNTI4OlxcdFxcdFxcdHN0cnVjdCBnZW5ldmVfb3B0ICpvcHQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pICsgb3B0c19sZW47XFxuIDUyOTpcXHRcXG4gNTMwOlxcdFxcdFxcdG1lbWNweShvcHQtXFx1MDAzZW9wdF9kYXRhLCBubGFfZGF0YShhdHRyKSwgZGF0YV9sZW4pO1xcbiA1MzE6XFx0XFx0XFx0b3B0LVxcdTAwM2VsZW5ndGggPSBkYXRhX2xlbiAvIDQ7XFxuIDUzMjpcXHRcXHRcXHRhdHRyID0gdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9DTEFTU107XFxuIDUzMzpcXHRcXHRcXHRvcHQtXFx1MDAzZW9wdF9jbGFzcyA9IG5sYV9nZXRfYmUxNihhdHRyKTtcXG4gNTM0OlxcdFxcdFxcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX1RZUEVdO1xcbiA1MzU6XFx0XFx0XFx0b3B0LVxcdTAwM2V0eXBlID0gbmxhX2dldF91OChhdHRyKTtcXG4gNTM2OlxcdFxcdFxcdF9fc2V0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpO1xcbiA1Mzc6XFx0XFx0fVxcbiA1Mzg6XFx0XFxuIDUzOTpcXHRcXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBnZW5ldmVfb3B0KSArIGRhdGFfbGVuO1xcbiA1NDA6XFx0fVxcbiA1NDE6XFx0XFxuIDU0MjpcXHRzdGF0aWMgaW50IGlwX3R1bl9wYXJzZV9vcHRzX3Z4bGFuKHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuIDU0MzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sIGludCBvcHRzX2xlbixcXG4gNTQ0OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gNTQ1OlxcdHtcXG4gNTQ2OlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW0xXVFVOTkVMX0lQX09QVF9WWExBTl9NQVggKyAxXTtcXG4gNTQ3OlxcdFxcdGludCBlcnI7XFxuIDU0ODpcXHRcXG4gNTQ5OlxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIExXVFVOTkVMX0lQX09QVF9WWExBTl9NQVgsIGF0dHIsXFxuIDU1MDpcXHRcXHRcXHRcXHQgICAgICAgdnhsYW5fb3B0X3BvbGljeSwgZXh0YWNrKTtcXG4gNTUxOlxcdFxcdGlmIChlcnIpXFxuIDU1MjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA1NTM6XFx0XFxuIDU1NDpcXHRcXHRpZiAoIXRiW0xXVFVOTkVMX0lQX09QVF9WWExBTl9HQlBdKVxcbiA1NTU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU1NjpcXHRcXG4gNTU3OlxcdFxcdGlmIChpbmZvKSB7XFxuIDU1ODpcXHRcXHRcXHRzdHJ1Y3QgdnhsYW5fbWV0YWRhdGEgKm1kID1cXG4gNTU5OlxcdFxcdFxcdFxcdGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgKyBvcHRzX2xlbjtcXG4gNTYwOlxcdFxcbiA1NjE6XFx0XFx0XFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9WWExBTl9HQlBdO1xcbiA1NjI6XFx0XFx0XFx0bWQtXFx1MDAzZWdicCA9IG5sYV9nZXRfdTMyKGF0dHIpO1xcbiA1NjM6XFx0XFx0XFx0bWQtXFx1MDAzZWdicCBcXHUwMDI2PSBWWExBTl9HQlBfTUFTSztcXG4gNTY0OlxcdFxcdFxcdF9fc2V0X2JpdChJUF9UVU5ORUxfVlhMQU5fT1BUX0JJVCwgaW5mby1cXHUwMDNla2V5LnR1bl9mbGFncyk7XFxuIDU2NTpcXHRcXHR9XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdHJldHVybiBzaXplb2Yoc3RydWN0IHZ4bGFuX21ldGFkYXRhKTtcXG4gNTY4OlxcdH1cXG4gNTY5OlxcdFxcbiA1NzA6XFx0c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0c19lcnNwYW4oc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gNTcxOlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sIGludCBvcHRzX2xlbixcXG4gNTcyOlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDU3MzpcXHR7XFxuIDU3NDpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX01BWCArIDFdO1xcbiA1NzU6XFx0XFx0aW50IGVycjtcXG4gNTc2OlxcdFxcdHU4IHZlcjtcXG4gNTc3OlxcdFxcbiA1Nzg6XFx0XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9NQVgsIGF0dHIsXFxuIDU3OTpcXHRcXHRcXHRcXHQgICAgICAgZXJzcGFuX29wdF9wb2xpY3ksIGV4dGFjayk7XFxuIDU4MDpcXHRcXHRpZiAoZXJyKVxcbiA1ODE6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTgyOlxcdFxcbiA1ODM6XFx0XFx0aWYgKCF0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX1ZFUl0pXFxuIDU4NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTg1OlxcdFxcbiA1ODY6XFx0XFx0dmVyID0gbmxhX2dldF91OCh0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX1ZFUl0pO1xcbiA1ODc6XFx0XFx0aWYgKHZlciA9PSAxKSB7XFxuIDU4ODpcXHRcXHRcXHRpZiAoIXRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fSU5ERVhdKVxcbiA1ODk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU5MDpcXHRcXHR9IGVsc2UgaWYgKHZlciA9PSAyKSB7XFxuIDU5MTpcXHRcXHRcXHRpZiAoIXRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fRElSXSB8fFxcbiA1OTI6XFx0XFx0XFx0ICAgICF0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0hXSURdKVxcbiA1OTM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU5NDpcXHRcXHR9IGVsc2Uge1xcbiA1OTU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU5NjpcXHRcXHR9XFxuIDU5NzpcXHRcXG4gNTk4OlxcdFxcdGlmIChpbmZvKSB7XFxuIDU5OTpcXHRcXHRcXHRzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhICptZCA9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjEzLjIxOTg5NzgyNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTU5MjU3NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlY29uc3RydWN0aW5nIHRoZSBgaXBfdHVubmVsX2luZm9fb3B0c2AgRW5pZ21hKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQgYW5kIG15IGJyYWluJ3MgaGl0IGEgbGl0dGxlIHNuYWcuIFdoYXQgKmV4YWN0bHkqIGlzIGBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pYD8gSXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBqdXN0IGZyb20gbG9va2luZyBhdCBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uIGFuZCBwdXJwb3NlIGluIHRoaXMgY29udGV4dC5cblxuUmlnaHQsIHNvIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBnZXQgc29tZSBtb3JlIGluZm9ybWF0aW9uLCBhbmQgcXVpY2tseSEgTGV0J3MgZmlyZSB1cCBgZ3JlcGAgYW5kIGh1bnQgZG93biBhbGwgaW5zdGFuY2VzIG9mIGBpcF90dW5uZWxfaW5mb19vcHRzYC4gVGhhdCdsbCBzaG93IG1lIHdoZXJlIGl0J3MgZGVmaW5lZCwgd2hlcmUgaXQncyB1c2VkLCBhbmQgaG9wZWZ1bGx5IGlsbHVtaW5hdGUgaXRzIHJvbGUgd2l0aGluIHRoaXMgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uIHRvIGZ1bGx5IGdyYXNwIHRoZSBzdXJyb3VuZGluZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODE2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjoxNS4xNzkxNTg3MDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTc4MDE5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdHVubmVsX2luZm9fb3B0c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmM9NTk3PWJvb2wgbWx4NWVfdGNfdHVuX2VuY2FwX2luZm9fZXF1YWxfb3B0aW9ucyhzdHJ1Y3QgbWx4NWVfZW5jYXBfa2V5ICphLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jLTYyMi1cXHRyZXR1cm4gYV9pbmZvLVxcdTAwM2VvcHRpb25zX2xlbiA9PSBiX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jOjYyMzpcXHQgICAgICAgIW1lbWNtcChpcF90dW5uZWxfaW5mb19vcHRzKGFfaW5mbyksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jOjYyNDpcXHRcXHQgICAgICAgaXBfdHVubmVsX2luZm9fb3B0cyhiX2luZm8pLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYy02MjUtXFx0XFx0ICAgICAgIGFfaW5mby1cXHUwMDNlb3B0aW9uc19sZW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9nZW5ldmUuYz05Mj1zdGF0aWMgaW50IG1seDVlX2dlbl9pcF90dW5uZWxfaGVhZGVyX2dlbmV2ZShjaGFyIGJ1ZltdLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9nZW5ldmUuYy0xMTctXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZ2VuZXZlLmM6MTE4OlxcdFxcdGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KGdlbmV2ZWgtXFx1MDAzZW9wdGlvbnMsIHR1bl9pbmZvKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2dlbmV2ZS5jLTExOS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX3Z4bGFuLmM9ODM9c3RhdGljIGludCBtbHg1ZV9nZW5faXBfdHVubmVsX2hlYWRlcl92eGxhbihjaGFyIGJ1ZltdLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl92eGxhbi5jLTEwMi1cXHRpZiAodGVzdF9iaXQoSVBfVFVOTkVMX1ZYTEFOX09QVF9CSVQsIHR1bl9rZXktXFx1MDAzZXR1bl9mbGFncykpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX3Z4bGFuLmM6MTAzOlxcdFxcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhlLVxcdTAwM2V0dW5faW5mbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl92eGxhbi5jLTEwNC1cXHRcXHR2eGxhbl9idWlsZF9nYnBfaGRyKHZ4aCwgbWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM9NTYxNj1zdGF0aWMgYm9vbCBtbHg1ZV90Y19yZXN0b3JlX3R1bm5lbChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jLTU2OTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM6NTY5NTpcXHRcXHRpcF90dW5uZWxfaW5mb19vcHRzX3NldChcXHUwMDI2dHVuX2RzdC1cXHUwMDNldS50dW5faW5mbyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01Njk2LVxcdFxcdFxcdFxcdFxcdGVuY19vcHRzLmtleS5kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmM9MzMwPW5mcF9mbF9wdXNoX2dlbmV2ZV9vcHRpb25zKHN0cnVjdCBuZnBfZmxfcGF5bG9hZCAqbmZwX2ZsLCBpbnQgKmxpc3RfbGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmMtMzM1LVxcdGludCBvcHRfbGVuLCBvcHRfY250LCBhY3Rfc3RhcnQsIHRvdF9wdXNoX2xlbjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYzozMzY6XFx0dTggKnNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaXBfdHVuKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYy0zMzctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYy0zNzItXFx0Kmxpc3RfbGVuICs9IHRvdF9wdXNoX2xlbjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYzozNzM6XFx0c3JjID0gaXBfdHVubmVsX2luZm9fb3B0cyhpcF90dW4pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2FjdGlvbi5jLTM3NC1cXHR3aGlsZSAob3B0X2NudCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9Mjc1PXN0YXRpYyB2b2lkIGdlbmV2ZV9yeChzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjk5LVxcdFxcdF9fc2V0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGZsYWdzKTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYzozMDA6XFx0XFx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoXFx1MDAyNnR1bl9kc3QtXFx1MDAzZXUudHVuX2luZm8sXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMzAxLVxcdFxcdFxcdFxcdFxcdGdudmgtXFx1MDAzZW9wdGlvbnMsIGdudmgtXFx1MDAzZW9wdF9sZW4gKiA0LFxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTIyOT1zdGF0aWMgdm9pZCBnZW5ldmVfYnVpbGRfaGVhZGVyKHN0cnVjdCBnZW5ldmVoZHIgKmdlbmV2ZWgsXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xMjQzLVxcdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpKVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjEyNDQ6XFx0XFx0aXBfdHVubmVsX2luZm9fb3B0c19nZXQoZ2VuZXZlaC1cXHUwMDNlb3B0aW9ucywgaW5mbyk7XFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTI0NS19XFxuLS1cXG5kcml2ZXJzL25ldC9wZmNwLmM9NTI9c3RhdGljIGludCBwZmNwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvcGZjcC5jLTc0LVxcbmRyaXZlcnMvbmV0L3BmY3AuYzo3NTpcXHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoXFx1MDAyNnR1bl9kc3QtXFx1MDAzZXUudHVuX2luZm8pO1xcbmRyaXZlcnMvbmV0L3BmY3AuYy03Ni1cXHRpZiAodW5saWtlbHkoIW1kKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xNjU3PXN0YXRpYyBpbnQgdnhsYW5fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNzQ3LVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoxNzQ4OlxcdFxcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhcXHUwMDI2dHVuX2RzdC1cXHUwMDNldS50dW5faW5mbyk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTE3NDktXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MjM3Mz12b2lkIHZ4bGFuX3htaXRfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjQ4My1cXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjI0ODQ6XFx0XFx0XFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yNDg1LVxcdFxcdH1cXG4tLVxcbmluY2x1ZGUvbmV0L2RzdF9tZXRhZGF0YS5oPTE1Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZXRhZGF0YV9kc3QgKnR1bl9kc3RfdW5jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvZHN0X21ldGFkYXRhLmgtMTY4LVxcdG5ld19tZC1cXHUwMDNldS50dW5faW5mbyA9IG1kX2RzdC1cXHUwMDNldS50dW5faW5mbztcXG5pbmNsdWRlL25ldC9kc3RfbWV0YWRhdGEuaDoxNjk6XFx0bWVtY3B5KGlwX3R1bm5lbF9pbmZvX29wdHMoXFx1MDAyNm5ld19tZC1cXHUwMDNldS50dW5faW5mbyksXFxuaW5jbHVkZS9uZXQvZHN0X21ldGFkYXRhLmg6MTcwOlxcdCAgICAgICBpcF90dW5uZWxfaW5mb19vcHRzKFxcdTAwMjZtZF9kc3QtXFx1MDAzZXUudHVuX2luZm8pLCBtZF9zaXplKTtcXG5pbmNsdWRlL25ldC9kc3RfbWV0YWRhdGEuaC0xNzEtXFxuLS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg9ODk9c3RydWN0IGlwX3R1bm5lbF9lbmNhcCB7XFxuLS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtMTA1LVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDoxMDY6I2RlZmluZSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMDctXFx0X0dlbmVyaWMoaW5mbyxcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg9Njc0PXN0YXRpYyBpbmxpbmUgdm9pZCBpcHR1bm5lbF94bWl0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwa3RfbGVuKVxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTcxMC1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzExOnN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfaW5mb19vcHRzX2dldCh2b2lkICp0byxcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzEyLVxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzEzLXtcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzE0OlxcdG1lbWNweSh0bywgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSwgaW5mby1cXHUwMDNlb3B0aW9uc19sZW4pO1xcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MTUtfVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MTYtXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjcxNzpzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2luZm9fb3B0c19zZXQoc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MTgtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgdm9pZCAqZnJvbSwgaW50IGxlbixcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MjItXFx0aWYgKGxlbiBcXHUwMDNlIDApIHtcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzIzOlxcdFxcdG1lbWNweShpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pLCBmcm9tLCBsZW4pO1xcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MjQtXFx0XFx0aXBfdHVubmVsX2ZsYWdzX29yKGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MsXFxuLS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg9NzU4PXN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfdW5uZWVkX21ldGFkYXRhKHZvaWQpXFxuLS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzYxLVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDo3NjI6c3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KHZvaWQgKnRvLFxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03NjMtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTc2Ni1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzY3OnN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfaW5mb19vcHRzX3NldChzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTc2OC1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCB2b2lkICpmcm9tLCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDk4Mz1CUEZfQ0FMTF8zKGJwZl9za2JfZ2V0X3R1bm5lbF9vcHQsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTggKiwgdG8sIHUzMiwgc2l6ZSlcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ5OTctXFxubmV0L2NvcmUvZmlsdGVyLmM6NDk5ODpcXHRpcF90dW5uZWxfaW5mb19vcHRzX2dldCh0bywgaW5mbyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDk5OS1cXHRpZiAoc2l6ZSBcXHUwMDNlIGluZm8tXFx1MDAzZW9wdGlvbnNfbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NTEwMD1CUEZfQ0FMTF8zKGJwZl9za2Jfc2V0X3R1bm5lbF9vcHQsIHN0cnVjdCBza19idWZmICosIHNrYixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTUxMTItXFx0aXBfdHVubmVsX3NldF9vcHRpb25zX3ByZXNlbnQocHJlc2VudCk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NTExMzpcXHRpcF90dW5uZWxfaW5mb19vcHRzX3NldChpbmZvLCBmcm9tLCBzaXplLCBwcmVzZW50KTtcXG5uZXQvY29yZS9maWx0ZXIuYy01MTE0LVxcbi0tXFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYz0zNjY9c2tiX2Zsb3dfZGlzc2VjdF90dW5uZWxfaW5mbyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy00ODQtXFx0XFx0ZW5jX29wdC1cXHUwMDNlbGVuID0gaW5mby1cXHUwMDNlb3B0aW9uc19sZW47XFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYzo0ODU6XFx0XFx0aXBfdHVubmVsX2luZm9fb3B0c19nZXQoZW5jX29wdC1cXHUwMDNlZGF0YSwgaW5mbyk7XFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy00ODYtXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0yNjc9c3RhdGljIGludCBlcnNwYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0bmxfcHRrX2luZm8gKnRwaSxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTM0NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZW9mKCplcnNoZHIpKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzozNDU6XFx0XFx0XFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKFxcdTAwMjZ0dW5fZHN0LVxcdTAwM2V1LnR1bl9pbmZvKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0zNDYtXFx0XFx0XFx0bWQtXFx1MDAzZXZlcnNpb24gPSB2ZXI7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz01NDA9c3RhdGljIHZvaWQgZXJzcGFuX2ZiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTU2Mi1cXHRcXHRnb3RvIGVycl9mcmVlX3NrYjtcXG5uZXQvaXB2NC9pcF9ncmUuYzo1NjM6XFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy01NjQtXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTE0Mj1zdHJ1Y3QgbWV0YWRhdGFfZHN0ICppcHR1bm5lbF9tZXRhZGF0YV9yZXBseShzdHJ1Y3QgbWV0YWRhdGFfZHN0ICptZCxcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTY2LVxcdGRzdC1cXHUwMDNlbW9kZSA9IHNyYy1cXHUwMDNlbW9kZSB8IElQX1RVTk5FTF9JTkZPX1RYO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6MTY3OlxcdGlwX3R1bm5lbF9pbmZvX29wdHNfc2V0KGRzdCwgaXBfdHVubmVsX2luZm9fb3B0cyhzcmMpLFxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTY4LVxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlb3B0aW9uc19sZW4sIHR1bl9mbGFncyk7XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTUwNT1zdGF0aWMgaW50IGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZShzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy01MjctXFx0aWYgKGluZm8pIHtcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjUyODpcXHRcXHRzdHJ1Y3QgZ2VuZXZlX29wdCAqb3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSArIG9wdHNfbGVuO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNTI5LVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz01NDI9c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0c192eGxhbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy01NTgtXFx0XFx0c3RydWN0IHZ4bGFuX21ldGFkYXRhICptZCA9XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo1NTk6XFx0XFx0XFx0aXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSArIG9wdHNfbGVuO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNTYwLVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz01NzA9c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0c19lcnNwYW4oc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNTk5LVxcdFxcdHN0cnVjdCBlcnNwYW5fbWV0YWRhdGEgKm1kID1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjYwMDpcXHRcXHRcXHRpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pICsgb3B0c19sZW47XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy02MDEtXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTc3Mj1zdGF0aWMgaW50IGlwX3R1bl9maWxsX2VuY2FwX29wdHNfZ2VuZXZlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTc4My1cXHR3aGlsZSAodHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuIFxcdTAwM2Ugb2Zmc2V0KSB7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo3ODQ6XFx0XFx0b3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbykgKyBvZmZzZXQ7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy03ODUtXFx0XFx0aWYgKG5sYV9wdXRfYmUxNihza2IsIExXVFVOTkVMX0lQX09QVF9HRU5FVkVfQ0xBU1MsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTgwMD1zdGF0aWMgaW50IGlwX3R1bl9maWxsX2VuY2FwX29wdHNfdnhsYW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtODA5LVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6ODEwOlxcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyk7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy04MTEtXFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgTFdUVU5ORUxfSVBfT1BUX1ZYTEFOX0dCUCwgbWQtXFx1MDAzZWdicCkpIHtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9ODIwPXN0YXRpYyBpbnQgaXBfdHVuX2ZpbGxfZW5jYXBfb3B0c19lcnNwYW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtODI5LVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6ODMwOlxcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyk7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy04MzEtXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX1ZFUiwgbWQtXFx1MDAzZXZlcnNpb24pKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz04OTk9c3RhdGljIGludCBpcF90dW5fb3B0c19ubHNpemUoc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05MTItXFx0XFx0d2hpbGUgKGluZm8tXFx1MDAzZW9wdGlvbnNfbGVuIFxcdTAwM2Ugb2Zmc2V0KSB7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo5MTM6XFx0XFx0XFx0b3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSArIG9mZnNldDtcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTkxNC1cXHRcXHRcXHRvcHRfbGVuICs9IG5sYV90b3RhbF9zaXplKDIpXFx0LyogT1BUX0dFTkVWRV9DTEFTUyAqL1xcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05MjMtXFx0fSBlbHNlIGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfRVJTUEFOX09QVF9CSVQsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpKSB7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo5MjQ6XFx0XFx0c3RydWN0IGVyc3Bhbl9tZXRhZGF0YSAqbWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTI1LVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz05NTA9c3RhdGljIGludCBpcF90dW5fY21wX2VuY2FwKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYSwgc3RydWN0IGx3dHVubmVsX3N0YXRlICpiKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05NTctXFx0ICAgICAgIGluZm9fYS1cXHUwMDNlb3B0aW9uc19sZW4gIT0gaW5mb19iLVxcdTAwM2VvcHRpb25zX2xlbiB8fFxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTU4OlxcdCAgICAgICBtZW1jbXAoaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvX2EpLFxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTU5OlxcdFxcdCAgICAgIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mb19iKSwgaW5mb19hLVxcdTAwM2VvcHRpb25zX2xlbik7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05NjAtfVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTQ5MD1zdGF0aWMgaW50IGlwNmVyc3Bhbl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy01NDktXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHNpemVvZigqZXJzaGRyKSk7XFxubmV0L2lwdjYvaXA2X2dyZS5jOjU1MDpcXHRcXHRcXHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTU1MS1cXHRcXHRcXHRtZC1cXHUwMDNldmVyc2lvbiA9IHZlcjtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz05MjE9c3RhdGljIG5ldGRldl90eF90IGlwNmVyc3Bhbl90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTk5OS1cXHRcXHRcXHRnb3RvIHR4X2VycjtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTAwMDpcXHRcXHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMDAxLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmM9NDE5PXN0YXRpYyBpbnQgbmZ0X3R1bm5lbF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmMtNDk1LSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jOjQ5NjpcXHRpcF90dW5uZWxfaW5mb19vcHRzX3NldChcXHUwMDI2bWQtXFx1MDAzZXUudHVuX2luZm8sIFxcdTAwMjZwcml2LVxcdTAwM2VvcHRzLnUsIHByaXYtXFx1MDAzZW9wdHMubGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jLTQ5Ny1cXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VvcHRzLmZsYWdzKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM9MTAwMD1pbnQgb3ZzX2Zsb3dfa2V5X2V4dHJhY3QoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMTAxOS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjEwMjA6XFx0XFx0XFx0aXBfdHVubmVsX2luZm9fb3B0c19nZXQoVFVOX01FVEFEQVRBX09QVFMoa2V5LCB0dW5faW5mby1cXHUwMDNlb3B0aW9uc19sZW4pLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMTAyMS1cXHRcXHRcXHRcXHRcXHRcXHR0dW5faW5mbyk7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM9OTc5PWludCBvdnNfbmxhX3B1dF90dW5uZWxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTk4Mi1cXHRyZXR1cm4gX19pcF90dW5fdG9fbmxhdHRyKHNrYiwgXFx1MDAyNnR1bl9pbmZvLVxcdTAwM2VrZXksXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jOjk4MzpcXHRcXHRcXHRcXHQgIGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy05ODQtXFx0XFx0XFx0XFx0ICB0dW5faW5mby1cXHUwMDNlb3B0aW9uc19sZW4sXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM9MjgwMD1zdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X3NldF90dW4oY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0yODcyLVxcdCAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzoyODczOlxcdGlwX3R1bm5lbF9pbmZvX29wdHNfc2V0KHR1bl9pbmZvLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0yODc0LVxcdFxcdFxcdFxcdFRVTl9NRVRBREFUQV9PUFRTKFxcdTAwMjZrZXksIGtleS50dW5fb3B0c19sZW4pLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTM4MDI9c3RhdGljIGludCBzZXRfYWN0aW9uX3RvX2F0dHIoY29uc3Qgc3RydWN0IG5sYXR0ciAqYSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zODE4LVxcdFxcdGVyciA9ICBpcF90dW5fdG9fbmxhdHRyKHNrYiwgXFx1MDAyNnR1bl9pbmZvLVxcdTAwM2VrZXksXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jOjM4MTk6XFx0XFx0XFx0XFx0XFx0aXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyksXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTM4MjAtXFx0XFx0XFx0XFx0XFx0dHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuLFxcbi0tXFxubmV0L3BzYW1wbGUvcHNhbXBsZS5jPTIxNj1zdGF0aWMgaW50IF9fcHNhbXBsZV9pcF90dW5fdG9fbmxhdHRyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvcHNhbXBsZS9wc2FtcGxlLmMtMjE5LVxcdHVuc2lnbmVkIHNob3J0IHR1bl9wcm90byA9IGlwX3R1bm5lbF9pbmZvX2FmKHR1bl9pbmZvKTtcXG5uZXQvcHNhbXBsZS9wc2FtcGxlLmM6MjIwOlxcdGNvbnN0IHZvaWQgKnR1bl9vcHRzID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyk7XFxubmV0L3BzYW1wbGUvcHNhbXBsZS5jLTIyMS1cXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2tleSAqdHVuX2tleSA9IFxcdTAwMjZ0dW5faW5mby1cXHUwMDNla2V5O1xcbi0tXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9Mjk2PXN0YXRpYyBpbnQgdHVubmVsX2tleV9vcHRzX3NldChzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMwMy1cXHRcXHRfX3NldF9iaXQoSVBfVFVOTkVMX0dFTkVWRV9PUFRfQklULCBpbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzKTtcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYzozMDQ6XFx0XFx0cmV0dXJuIHR1bm5lbF9rZXlfY29weV9vcHRzKG5sYSwgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSxcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy0zMDUtXFx0XFx0XFx0XFx0XFx0ICAgIG9wdHNfbGVuLCBleHRhY2spO1xcbi0tXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtMzExLVxcdFxcdF9fc2V0X2JpdChJUF9UVU5ORUxfVlhMQU5fT1BUX0JJVCwgaW5mby1cXHUwMDNla2V5LnR1bl9mbGFncyk7XFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6MzEyOlxcdFxcdHJldHVybiB0dW5uZWxfa2V5X2NvcHlfb3B0cyhubGEsIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyksXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtMzEzLVxcdFxcdFxcdFxcdFxcdCAgICBvcHRzX2xlbiwgZXh0YWNrKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMxOS1cXHRcXHRfX3NldF9iaXQoSVBfVFVOTkVMX0VSU1BBTl9PUFRfQklULCBpbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzKTtcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYzozMjA6XFx0XFx0cmV0dXJuIHR1bm5lbF9rZXlfY29weV9vcHRzKG5sYSwgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSxcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy0zMjEtXFx0XFx0XFx0XFx0XFx0ICAgIG9wdHNfbGVuLCBleHRhY2spO1xcbi0tXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9NTc2PXN0YXRpYyBpbnQgdHVubmVsX2tleV9nZW5ldmVfb3B0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy01Nzgte1xcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjU3OTpcXHRjb25zdCB1OCAqc3JjID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy01ODAtXFx0aW50IGxlbiA9IGluZm8tXFx1MDAzZW9wdGlvbnNfbGVuO1xcbi0tXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9NjA4PXN0YXRpYyBpbnQgdHVubmVsX2tleV92eGxhbl9vcHRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTYxMC17XFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6NjExOlxcdGNvbnN0IHN0cnVjdCB2eGxhbl9tZXRhZGF0YSAqbWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTYxMi1cXHRzdHJ1Y3QgbmxhdHRyICpzdGFydDtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jPTYyNz1zdGF0aWMgaW50IHR1bm5lbF9rZXlfZXJzcGFuX29wdHNfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtNjI5LXtcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYzo2MzA6XFx0Y29uc3Qgc3RydWN0IGVyc3Bhbl9tZXRhZGF0YSAqbWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTYzMS1cXHRzdHJ1Y3QgbmxhdHRyICpzdGFydDtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jPTgzOT10dW5uZWxfa2V5X2dlbmV2ZV9vcHRzX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtODQwLXtcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYzo4NDE6XFx0Y29uc3QgdTggKnNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7XFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtODQyLVxcdGludCBsZW4gPSBpbmZvLVxcdTAwM2VvcHRpb25zX2xlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjI6MTYuODM2OTY5NDI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4Mjg0MzM2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byB0aGUgQ29yZTogVW5wYWNraW5nIGBpcF90dW5uZWxfaW5mb19vcHRzYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGlzIGBpcF90dW5uZWxfaW5mb19vcHRzYCBzdHJ1Y3QuIEl0J3MgdGltZSB0byBjaGVjayB0aGUgc291cmNlLCBzcGVjaWZpY2FsbHkgaW4gYGluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaGAuIEkgcmVjYWxsIHRoYXQgaXQgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHR1bm5lbCBjb25maWd1cmF0aW9uLCBidXQgdGhlIHByZWNpc2UgZGV0YWlscywgZXNwZWNpYWxseSB0aGUgbGF5b3V0IGFuZCB0aGUgaW5kaXZpZHVhbCBmaWVsZHMsIGFyZSBlc2NhcGluZyBtZSBhdCB0aGUgbW9tZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gSSB3aWxsIGNoZWNrIHRoZSBoZWFkZXIgZmlsZSBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTU3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjI6MTguNjY1NDA1ODg5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA5NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5NTpcXHRcXG4gIDk2OlxcdC8qIEZsYWdzIGZvciBpcF90dW5uZWxfaW5mbyBtb2RlLiAqL1xcbiAgOTc6XFx0I2RlZmluZSBJUF9UVU5ORUxfSU5GT19UWFxcdDB4MDFcXHQvKiByZXByZXNlbnRzIHR4IHR1bm5lbCBwYXJhbWV0ZXJzICovXFxuICA5ODpcXHQjZGVmaW5lIElQX1RVTk5FTF9JTkZPX0lQVjZcXHQweDAyXFx0Lyoga2V5IGNvbnRhaW5zIElQdjYgYWRkcmVzc2VzICovXFxuICA5OTpcXHQjZGVmaW5lIElQX1RVTk5FTF9JTkZPX0JSSURHRVxcdDB4MDRcXHQvKiByZXByZXNlbnRzIGEgYnJpZGdlZCB0dW5uZWwgaWQgKi9cXG4gMTAwOlxcdFxcbiAxMDE6XFx0LyogTWF4aW11bSB0dW5uZWwgb3B0aW9ucyBsZW5ndGguICovXFxuIDEwMjpcXHQjZGVmaW5lIElQX1RVTk5FTF9PUFRTX01BWFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTAzOlxcdFxcdEdFTk1BU0soKHNpemVvZl9maWVsZChzdHJ1Y3QgaXBfdHVubmVsX2luZm8sXFx0XFx0XFxcXFxcbiAxMDQ6XFx0XFx0XFx0XFx0ICAgICAgb3B0aW9uc19sZW4pICogQklUU19QRVJfQllURSkgLSAxLCAwKVxcbiAxMDU6XFx0XFxuIDEwNjpcXHQjZGVmaW5lIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbylcXHRcXHRcXHRcXHRcXFxcXFxuIDEwNzpcXHRcXHRfR2VuZXJpYyhpbmZvLFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTA4OlxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKiA6ICgoY29uc3Qgdm9pZCAqKShpbmZvKS1cXHUwMDNlb3B0aW9ucyksXFxcXFxcbiAxMDk6XFx0XFx0XFx0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqIDogKCh2b2lkICopKGluZm8pLVxcdTAwM2VvcHRpb25zKVxcXFxcXG4gMTEwOlxcdFxcdClcXG4gMTExOlxcdFxcbiAxMTI6XFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvIHtcXG4gMTEzOlxcdFxcdHN0cnVjdCBpcF90dW5uZWxfa2V5XFx0a2V5O1xcbiAxMTQ6XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9lbmNhcFxcdGVuY2FwO1xcbiAxMTU6XFx0I2lmZGVmIENPTkZJR19EU1RfQ0FDSEVcXG4gMTE2OlxcdFxcdHN0cnVjdCBkc3RfY2FjaGVcXHRkc3RfY2FjaGU7XFxuIDExNzpcXHQjZW5kaWZcXG4gMTE4OlxcdFxcdHU4XFx0XFx0XFx0b3B0aW9uc19sZW47XFxuIDExOTpcXHRcXHR1OFxcdFxcdFxcdG1vZGU7XFxuIDEyMDpcXHRcXHR1OFxcdFxcdFxcdG9wdGlvbnNbXSBfX2FsaWduZWRfbGFyZ2VzdCBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pO1xcbiAxMjE6XFx0fTtcXG4gMTIyOlxcdFxcbiAxMjM6XFx0LyogNnJkIHByZWZpeC9yZWxheSBpbmZvcm1hdGlvbiAqL1xcbiAxMjQ6XFx0I2lmZGVmIENPTkZJR19JUFY2X1NJVF82UkRcXG4gMTI1OlxcdHN0cnVjdCBpcF90dW5uZWxfNnJkX3Bhcm0ge1xcbiAxMjY6XFx0XFx0c3RydWN0IGluNl9hZGRyXFx0XFx0cHJlZml4O1xcbiAxMjc6XFx0XFx0X19iZTMyXFx0XFx0XFx0cmVsYXlfcHJlZml4O1xcbiAxMjg6XFx0XFx0dTE2XFx0XFx0XFx0cHJlZml4bGVuO1xcbiAxMjk6XFx0XFx0dTE2XFx0XFx0XFx0cmVsYXlfcHJlZml4bGVuO1xcbiAxMzA6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0cmN1O1xcbiAxMzE6XFx0fTtcXG4gMTMyOlxcdCNlbmRpZlxcbiAxMzM6XFx0XFxuIDEzNDpcXHRzdHJ1Y3QgaXBfdHVubmVsX3BybF9lbnRyeSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjE4LjY2NTQ5MjU1OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NjMxOTI0MDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEtlcm5lbCBCdWcgYW5kIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLCBzcGVjaWZpY2FsbHkgbGluZSAxMjAgYW5kIHRoZSBgaXBfdHVubmVsX2luZm9gIHN0cnVjdC4gV2hhdCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24gaXMgdGhlIGBvcHRpb25zW10gX19hbGlnbmVkX2xhcmdlc3QgX19jb3VudGVkX2J5KG9wdGlvbnNfbGVuKTtgIG1lbWJlci4gVGhlIGBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pYCBhdHRyaWJ1dGUgaXMga2V5IGhlcmUg4oCTIGl0IHRlbGxzIHRoZSBjb21waWxlciB0aGF0IHRoZSBzaXplIG9mIHRoZSBgb3B0aW9uc2AgYXJyYXkgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYG9wdGlvbnNfbGVuYCBmaWVsZC4gVGhpcyBpcyBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgd2hlbiBVQlNBTidzIGJvdW5kcyBjaGVja2luZyBpcyBlbmFibGVkLlxuXG5NeSBjb25jZXJuIHN0ZW1zIGZyb20gaG93IGB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbmAgaXMgYmVpbmcgaGFuZGxlZCBpbiB0aGUgYGlwX3R1bl9idWlsZF9zdGF0ZWAgYW5kIGBpcDZfdHVuX2J1aWxkX3N0YXRlYCBmdW5jdGlvbnMuIEJlZm9yZSwgdGhlIGNvZGUgc2VxdWVuY2Ugd2FzIHNldHRpbmcgYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuYCAqYWZ0ZXIqIGNhbGxpbmcgYGlwX3R1bl9zZXRfb3B0c2AuIFRoZSBwcm9ibGVtIGlzLCB0aGF0IHRoZSBgaXBfdHVuX3NldF9vcHRzYCBmdW5jdGlvbiBhY2Nlc3NlcyB0aGUgYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNgIGFycmF5IChwb3RlbnRpYWxseSB3cml0aW5nIGludG8gaXQpICpiZWZvcmUqIGBvcHRpb25zX2xlbmAgaXMgc2V0LiBUaGlzIG1lYW5zIHRoYXQgaWYgYG9wdGlvbnNfbGVuYCBpcyBpbml0aWFsbHkgemVybywgdGhlIGFjY2VzcyB0byBgb3B0aW9uc2AgZWZmZWN0aXZlbHkgYmVjb21lcyBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gV2l0aCBgQ09ORklHX1VCU0FOX0JPVU5EU2AgKG9yIHdpdGggdGhlIGBfX2NvdW50ZWRfYnlgIGF0dHJpYnV0ZSksIHRoaXMgd2lsbCB0cmlnZ2VyIGEgYm91bmRzIGNoZWNrIGZhaWx1cmUg4oCTIGEgY3Jhc2ggb3IgYSB3YXJuaW5nLCBkZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyIGFuZCBVQlNBTiBjb25maWd1cmF0aW9uLlxuXG5TbywgdGhlIGZpeCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGUgY29kZSB3YXMgbW9kaWZpZWQgdG8gbW92ZSB0aGUgbGluZSBgdHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO2AgYmVmb3JlIHRoZSBjYWxsIHRvIGBpcF90dW5fc2V0X29wdHNgLiBUaGlzIGVuc3VyZXMgdGhhdCBgb3B0aW9uc19sZW5gIGhhcyBhIHZhbGlkIHZhbHVlICpiZWZvcmUqIGFueSBhY2Nlc3MgdG8gYG9wdGlvbnNgIG9jY3VycywgdGh1cyBhdm9pZGluZyB0aGUgYm91bmRzIGNoZWNrIGZhaWx1cmUuXG5cblRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZml4LCBhbmQgdG8gc2VlIHdoZW4gdGhpcyB3YXMgY2hhbmdlZCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGdpdCBsb2cgZm9yIHRoZSBzcGVjaWZpYyBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIHRoaXMgY2hhbmdlLiBMZXQgbWUgcnVuIGBnaXQgbG9nYCB0byBzZWUgaWYgSSBjYW4gZmluZCBpdC4gSWYgSSdtIGx1Y2t5LCB0aGUgY29tbWl0IG1lc3NhZ2Ugd2lsbCBwcm92aWRlIG1vcmUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczOTcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjoyMy4yOTc0MTk1NTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5Mjg4MzkwNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jb3VudGVkX2J5XFxcXChvcHRpb25zX2xlblxcXFwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaD0xMTI9c3RydWN0IGlwX3R1bm5lbF9pbmZvIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMTktXFx0dThcXHRcXHRcXHRtb2RlO1xcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDoxMjA6XFx0dThcXHRcXHRcXHRvcHRpb25zW10gX19hbGlnbmVkX2xhcmdlc3QgX19jb3VudGVkX2J5KG9wdGlvbnNfbGVuKTtcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtMTIxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjI2LjIyNjI2MzQ3NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDk2NDYyNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgS2NvbmZpZyBPcHRpb25zIGZvciBJUCBUdW5uZWxpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIG9wdGlvbnMgZ292ZXJuIHRoZSBiZWhhdmlvciBvZiBgaXBfdHVubmVsX2NvcmUuY2AsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBMV1R1bm5lbCBlbmNhcHN1bGF0aW9uIG9mIElQL0lQdjYgdHJhZmZpYy4gVGltZSB0byBkaWcgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBLY29uZmlnIHN5bWJvbHMuIExldCdzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGdyZXAuIEknbGwgc2VhcmNoIGZvciBgaXBfdHVuX2J1aWxkX3N0YXRlYCDigJMgdGhhdCBmdW5jdGlvbiBuYW1lIHNob3VsZCBiZSBhIGRlY2VudCBpbmRpY2F0b3Igb2YgdGhlIGNvcmUgdHVubmVsaW5nIGZ1bmN0aW9uYWxpdHkuIEknbGwgYWxzbyBpbmNsdWRlIGEgc2VhcmNoIGZvciBgTFdUVU5ORUxfRU5DQVBfSVBgLCBhcyB0aGF0IGxvb2tzIGxpa2UgYSBrZXkgbWFjcm8gZm9yIGNvbnRyb2xsaW5nIHRoZSBlbmNhcHN1bGF0aW9uIGRpcmVjdGx5LiBUaGlzIHNob3VsZCBxdWlja2x5IGhpZ2hsaWdodCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgd2hlcmUgSSdsbCBiZWdpbiBteSBleHBsb3JhdGlvbiB0byBnZXQgYSBzZW5zZSBvZiBob3cgdGhlc2UgY29tcG9uZW50cyBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDQ0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjI6MjguNzIyNzI4Mzc5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQyNjY1NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3R1bl9idWlsZF9zdGF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTY4Mj1zdGF0aWMgaW50IGlwX3R1bl9zZXRfb3B0cyhzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTY4Ny1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjY4ODpzdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy02ODktXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGZhbWlseSwgY29uc3Qgdm9pZCAqY2ZnLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz05NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgaXBfdHVuX2x3dF9vcHMgPSB7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo5NjM6XFx0LmJ1aWxkX3N0YXRlID0gaXBfdHVuX2J1aWxkX3N0YXRlLFxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTY0LVxcdC5kZXN0cm95X3N0YXRlID0gaXBfdHVuX2Rlc3Ryb3lfc3RhdGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjMwLjI2NTM5OTk1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1MDI4MTgzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBUdW5uZWwgT3BlcmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgd2hlcmUgdGhlIGBpcF90dW5fbHd0X29wc2Agc3RydWN0dXJlIGlzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgTGlnaHQgV2VpZ2h0IFR1bm5lbCAoTFdUKSBvcGVyYXRpb25zIGFyZSBob29rZWQgaW50byB0aGUgSVB2NCB0dW5uZWwgaW5mcmFzdHJ1Y3R1cmUuIEknbSBhZnRlciB0aGUgcmVnaXN0cmF0aW9uIHBvaW50LCB0aGUgY2FsbCB0aGF0IHVsdGltYXRlbHkgdGllcyB0aG9zZSBvcGVyYXRpb25zIHRvIHRoZSByZWxldmFudCBkYXRhcGF0aC4gTG9jYXRpbmcgdGhpcyB3aWxsIHByb3ZpZGUgbWUgd2l0aCB0aGUgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgc3BlY2lmaWMgbG9naWMgZGVmaW5lZCB3aXRoaW4gYGlwX3R1bl9sd3Rfb3BzYC4gVGltZSB0byBmaXJlIHVwIHRoZSBlZGl0b3IgYW5kIHN0YXJ0IG5hdmlnYXRpbmcgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTQ4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjI6MzIuNzY4MjIxMDcyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ2Njg4MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3R1bl9sd3Rfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9OTUwPXN0YXRpYyBpbnQgaXBfdHVuX2NtcF9lbmNhcChzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmEsIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYilcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTYxLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTYyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIGlwX3R1bl9sd3Rfb3BzID0ge1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTYzLVxcdC5idWlsZF9zdGF0ZSA9IGlwX3R1bl9idWlsZF9zdGF0ZSxcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9MTA4OT12b2lkIF9faW5pdCBpcF90dW5uZWxfY29yZV9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTEwOTYtXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxMDk3OlxcdGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXFx1MDAyNmlwX3R1bl9sd3Rfb3BzLCBMV1RVTk5FTF9FTkNBUF9JUCk7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDk4LVxcdGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXFx1MDAyNmlwNl90dW5fbHd0X29wcywgTFdUVU5ORUxfRU5DQVBfSVA2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjI6MzQuMzE0OTE1OTE3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NzkwMzgzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJUCBUdW5uZWwgQ29yZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0dW5uZWwgb3BlcmF0aW9ucyBhcmUgaW5pdGlhbGl6ZWQuIE15IGZvY3VzIGlzIGN1cnJlbnRseSBvbiBgaXBfdHVuX2x3dF9vcHNgIGFuZCBgaXA2X3R1bl9sd3Rfb3BzYC4gRnJvbSBteSBub3RlcywgSSByZWNhbGwgdGhvc2UgYXJlIHJlZ2lzdGVyZWQgd2l0aGluIGBpcF90dW5uZWxfY29yZV9pbml0KHZvaWQpYC4gR29vZC4gTm93LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0LiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY29tcGlsYXRpb24gcHJvY2VzcyBmb3IgYGlwX3R1bm5lbF9jb3JlLmNgLiBMZXQncyBzZWUgaG93IHRoaXMgbW9kdWxlIGlzIGJ1aWx0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBuZXQvaXB2NC9NYWtlZmlsZWAgZmlsZSB0byBzZWUgdGhlIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNvcmUgdHVubmVsIGZ1bmN0aW9uYWxpdHkgaXMgaW50ZWdyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NjYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjozNi4yOTM5NTY4NjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjkyMjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3R1bm5lbF9jb3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXFxcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlLTE1LVxcdCAgICAgZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vIGZpYl90cmllLm8gZmliX25vdGlmaWVyLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE2OlxcdCAgICAgaW5ldF9mcmFnbWVudC5vIHBpbmcubyBpcF90dW5uZWxfY29yZS5vIGdyZV9vZmZsb2FkLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlLTE3LVxcdCAgICAgbWV0cmljcy5vIG5ldGxpbmsubyBuZXh0aG9wLm8gdWRwX3R1bm5lbF9zdHViLm9cXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYz0xODc5PXN0YXRpYyBpbnQgX19pbml0IGluZXRfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jLTE5OTktXFxubmV0L2lwdjQvYWZfaW5ldC5jOjIwMDA6XFx0aXBfdHVubmVsX2NvcmVfaW5pdCgpO1xcbm5ldC9pcHY0L2FmX2luZXQuYy0yMDAxLVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz0xMDgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIGlwNl90dW5fbHd0X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTA4OC1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjEwODk6dm9pZCBfX2luaXQgaXBfdHVubmVsX2NvcmVfaW5pdCh2b2lkKVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTA5MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjM2LjM0MjI1NDE5M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODgxMjU3OTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50IGRvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSVAgVHVubmVsIENvcmUgTW9kdWxlJ3MgQ29tcGlsYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjayBkb3duIHNvbWV0aGluZyByZWxhdGVkIHRvIElQIHR1bm5lbGluZywgYW5kIHRoZSBmaXJzdCBjbHVlIGlzIHRoYXQgYGlwX3R1bm5lbF9jb3JlLm9gIGlzIGJlaW5nIGNvbXBpbGVkLiBBbHJpZ2h0LCBsZXQncyBzZWUsIHRoYXQncyBpbiBgbmV0L2lwdjQvTWFrZWZpbGVgLiBBaCwgeWVzLCBpdCdzIGRlZmluZWQgYXMgYG9iai15YCwgc28gaXQncyBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIFRoYXTigJlzIGdvb2QgdG8ga25vdyBmb3IgdGhlIGJpZyBwaWN0dXJlLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb25zIHdpdGhpbiB0aGUgdHVubmVsIGFyZSBlbmFibGVkLCBzbyBhcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGd1YXJkcyBvbiBgbHd0dW5uZWxfZW5jYXBfYWRkX29wc2A/IFRoYXQgc2VlbXMgbGlrZSBhIHByaW1lIHRhcmdldCB0byBjaGVjayBmb3IgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEdvdHRhIHZlcmlmeSBpZiBpdCBpcyBhZmZlY3RlZCBieSBhbnkgcGFydGljdWxhciBgQ09ORklHYCBvcHRpb25zLlxuXG5MZXQncyBkaXZlIGludG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoaXMgbW9kdWxlLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyBgaXBfdHVubmVsX2NvcmVfaW5pdGAgd2l0aGluIGBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jYC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGJlc3Qgb3ZlcnZpZXcgb2YgaG93IGV2ZXJ5dGhpbmcgaXMgYnJvdWdodCBvbmxpbmUgYW5kIHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGNoZWNrcyBtaWdodCBiZSBsb2NhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA3NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjQwLjIyMzUxNTQ0NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODYyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFxuMTA4MTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBpcDZfdHVuX2x3dF9vcHMgPSB7XFxuMTA4MjpcXHRcXHQuYnVpbGRfc3RhdGUgPSBpcDZfdHVuX2J1aWxkX3N0YXRlLFxcbjEwODM6XFx0XFx0LmZpbGxfZW5jYXAgPSBpcDZfdHVuX2ZpbGxfZW5jYXBfaW5mbyxcXG4xMDg0OlxcdFxcdC5nZXRfZW5jYXBfc2l6ZSA9IGlwNl90dW5fZW5jYXBfbmxzaXplLFxcbjEwODU6XFx0XFx0LmNtcF9lbmNhcCA9IGlwX3R1bl9jbXBfZW5jYXAsXFxuMTA4NjpcXHRcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4xMDg3OlxcdH07XFxuMTA4ODpcXHRcXG4xMDg5OlxcdHZvaWQgX19pbml0IGlwX3R1bm5lbF9jb3JlX2luaXQodm9pZClcXG4xMDkwOlxcdHtcXG4xMDkxOlxcdFxcdC8qIElmIHlvdSBsYW5kIGhlcmUsIG1ha2Ugc3VyZSB3aGV0aGVyIGluY3JlYXNpbmcgaXBfdHVubmVsX2luZm8nc1xcbjEwOTI6XFx0XFx0ICogb3B0aW9uc19sZW4gaXMgYSByZWFzb25hYmxlIGNob2ljZSB3aXRoIGl0cyB1c2FnZSBpbiBmcm9udCBlbmRzXFxuMTA5MzpcXHRcXHQgKiAoZi5lLiwgaXQncyBwYXJ0IG9mIGZsb3cga2V5cywgZXRjKS5cXG4xMDk0OlxcdFxcdCAqL1xcbjEwOTU6XFx0XFx0QlVJTERfQlVHX09OKElQX1RVTk5FTF9PUFRTX01BWCAhPSAyNTUpO1xcbjEwOTY6XFx0XFxuMTA5NzpcXHRcXHRsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZpcF90dW5fbHd0X29wcywgTFdUVU5ORUxfRU5DQVBfSVApO1xcbjEwOTg6XFx0XFx0bHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcXHUwMDI2aXA2X3R1bl9sd3Rfb3BzLCBMV1RVTk5FTF9FTkNBUF9JUDYpO1xcbjEwOTk6XFx0fVxcbjExMDA6XFx0XFxuMTEwMTpcXHRERUZJTkVfU1RBVElDX0tFWV9GQUxTRShpcF90dW5uZWxfbWV0YWRhdGFfY250KTtcXG4xMTAyOlxcdEVYUE9SVF9TWU1CT0woaXBfdHVubmVsX21ldGFkYXRhX2NudCk7XFxuMTEwMzpcXHRcXG4xMTA0OlxcdHZvaWQgaXBfdHVubmVsX25lZWRfbWV0YWRhdGEodm9pZClcXG4xMTA1OlxcdHtcXG4xMTA2OlxcdFxcdHN0YXRpY19icmFuY2hfaW5jKFxcdTAwMjZpcF90dW5uZWxfbWV0YWRhdGFfY250KTtcXG4xMTA3OlxcdH1cXG4xMTA4OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9uZWVkX21ldGFkYXRhKTtcXG4xMTA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjo0MC4yMjM2MTU2MzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTkxMDIwNzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuIGV4cGVydDpcblxuKipMb2NhdGluZyB0aGUgTFdUdW5uZWwgRW5jYXBzdWxhdGlvbiBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYGx3dHVubmVsX2VuY2FwX2FkZF9vcHNgLiBUaGF0IG5hbWUgc291bmRzIGZhbWlsaWFyLiBSaWdodCwgaXQncyBpbnZvbHZlZCBpbiBhZGRpbmcgZW5jYXBzdWxhdGlvbiBvcGVyYXRpb25zIHdpdGhpbiB0aGUgTGludXggbmV0d29ya2luZyBzdGFjay4gTm93LCB3aGVyZSBkaWQgSSBzZWUgdGhhdD8gTGV0IG1lIHRoaW5rLi4uIEFoLCB5ZXMsIGJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbiBJJ20gZ29pbmcgdG8gZmluZCB0aGlzIGluIGBuZXQvY29yZS9sd3R1bm5lbC5jYC4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBsaWdodHdlaWdodCB0dW5uZWxpbmcgc2hvdWxkIHJlc2lkZS4gSSdsbCB0YWtlIGEgbG9vayBpbiB0aGF0IGZpbGUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTc1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjo0Mi4xMzM4MjczMDZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDAxNzUxMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHd0dW5uZWxfZW5jYXBfYWRkX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9sd3R1bm5lbC5oPTEwND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBsd3R1bm5lbF9oZWFkcm9vbShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlLFxcbi0tXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0xMTMtXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoxMTQ6aW50IGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyAqb3AsXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0xMTUtXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG51bSk7XFxuLS1cXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oPTE4ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBsd3R1bm5lbF9oZWFkcm9vbShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlLFxcbi0tXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0xODktXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoxOTA6c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfZW5jYXBfYWRkX29wcyhjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzICpvcCxcXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oLTE5MS1cXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IG51bSlcXG4tLVxcbm5ldC9jb3JlL2x3dF9icGYuYz02Nzg9c3RhdGljIGludCBfX2luaXQgYnBmX2x3dF9pbml0KHZvaWQpXFxubmV0L2NvcmUvbHd0X2JwZi5jLTY3OS17XFxubmV0L2NvcmUvbHd0X2JwZi5jOjY4MDpcXHRyZXR1cm4gbHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcXHUwMDI2YnBmX2VuY2FwX29wcywgTFdUVU5ORUxfRU5DQVBfQlBGKTtcXG5uZXQvY29yZS9sd3RfYnBmLmMtNjgxLX1cXG4tLVxcbm5ldC9jb3JlL2x3dHVubmVsLmM9Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgX19yY3UgKlxcbi0tXFxubmV0L2NvcmUvbHd0dW5uZWwuYy04MS1cXG5uZXQvY29yZS9sd3R1bm5lbC5jOjgyOmludCBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgKm9wcyxcXG5uZXQvY29yZS9sd3R1bm5lbC5jLTgzLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBudW0pXFxuLS1cXG5uZXQvY29yZS9sd3R1bm5lbC5jLTkxLX1cXG5uZXQvY29yZS9sd3R1bm5lbC5jOjkyOkVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX2VuY2FwX2FkZF9vcHMpO1xcbm5ldC9jb3JlL2x3dHVubmVsLmMtOTMtXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTEwODk9dm9pZCBfX2luaXQgaXBfdHVubmVsX2NvcmVfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDk2LVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6MTA5NzpcXHRsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZpcF90dW5fbHd0X29wcywgTFdUVU5ORUxfRU5DQVBfSVApO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6MTA5ODpcXHRsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZpcDZfdHVuX2x3dF9vcHMsIExXVFVOTkVMX0VOQ0FQX0lQNik7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDk5LX1cXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM9MzI0PWludCBpbGFfbHd0X2luaXQodm9pZClcXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTMyNS17XFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYzozMjY6XFx0cmV0dXJuIGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXFx1MDAyNmlsYV9lbmNhcF9vcHMsIExXVFVOTkVMX0VOQ0FQX0lMQSk7XFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0zMjctfVxcbi0tXFxubmV0L2lwdjYvaW9hbTZfaXB0dW5uZWwuYz01NTQ9aW50IF9faW5pdCBpb2FtNl9pcHR1bm5lbF9pbml0KHZvaWQpXFxubmV0L2lwdjYvaW9hbTZfaXB0dW5uZWwuYy01NTUte1xcbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmM6NTU2OlxcdHJldHVybiBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZpb2FtNl9pcHR1bl9vcHMsIExXVFVOTkVMX0VOQ0FQX0lPQU02KTtcXG5uZXQvaXB2Ni9pb2FtNl9pcHR1bm5lbC5jLTU1Ny19XFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0zODQ9aW50IF9faW5pdCBycGxfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzg3LVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM4ODpcXHRlcnIgPSBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZycGxfb3BzLCBMV1RVTk5FTF9FTkNBUF9SUEwpO1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM4OS1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTk0Mz1pbnQgX19pbml0IHNlZzZfaXB0dW5uZWxfaW5pdCh2b2lkKVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy05NDQte1xcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYzo5NDU6XFx0cmV0dXJuIGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXFx1MDAyNnNlZzZfaXB0dW5fb3BzLCBMV1RVTk5FTF9FTkNBUF9TRUc2KTtcXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtOTQ2LX1cXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNjk3PWludCBfX2luaXQgc2VnNl9sb2NhbF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjcyOC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjcyOTpcXHRyZXR1cm4gbHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcXHUwMDI2c2VnNl9sb2NhbF9vcHMsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI3MzAtXFx0XFx0XFx0XFx0ICAgICAgTFdUVU5ORUxfRU5DQVBfU0VHNl9MT0NBTCk7XFxuLS1cXG5uZXQvbXBscy9tcGxzX2lwdHVubmVsLmM9Mjg4PXN0YXRpYyBpbnQgX19pbml0IG1wbHNfaXB0dW5uZWxfaW5pdCh2b2lkKVxcbm5ldC9tcGxzL21wbHNfaXB0dW5uZWwuYy0yODkte1xcbm5ldC9tcGxzL21wbHNfaXB0dW5uZWwuYzoyOTA6XFx0cmV0dXJuIGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXFx1MDAyNm1wbHNfaXB0dW5fb3BzLCBMV1RVTk5FTF9FTkNBUF9NUExTKTtcXG5uZXQvbXBscy9tcGxzX2lwdHVubmVsLmMtMjkxLX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYz0xMTc3PXN0YXRpYyBpbnQgX19pbml0IHhmcm1pX2luaXQodm9pZClcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy0xMjA4LVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYzoxMjA5OlxcdGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoXFx1MDAyNnhmcm1pX2VuY2FwX29wcywgTFdUVU5ORUxfRU5DQVBfWEZSTSk7XFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTEyMTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjQzLjY3NDAwOTUwNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDkyMjk3MDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBMV1RVTk5FTCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSdtIGxvb2tpbmcgYXQgYGluY2x1ZGUvbmV0L2x3dHVubmVsLmhgLCBzcGVjaWZpY2FsbHkgbGluZSAxODQuIFRoZSBjb2RlIHRoZXJlIGhhcyBhbiBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0xXVFVOTkVMKWAgY29uZGl0aW9uYWwuIEhtbSwgc28gdGhpcyBzZWN0aW9uIGlzIGNsZWFybHkgZGVwZW5kZW50IG9uIHRoZSBgQ09ORklHX0xXVFVOTkVMYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhhdCB0aGlzIG1hY3JvIGlzIHByb3Blcmx5IGRlZmluZWQgYW5kIGNvbmZpZ3VyZWQuIFRpbWUgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgdGhhdCBoZWFkZXIgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3NDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjo0Ni4xNjYzMDk4MjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvbHd0dW5uZWwuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0c3RhdGljIGlubGluZSB2b2lkIGx3dHVubmVsX3NldF9yZWRpcmVjdChzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuIDE4MTpcXHR7XFxuIDE4MjpcXHR9XFxuIDE4MzpcXHRcXG4gMTg0OlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGx3dHVubmVsX2hlYWRyb29tKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUsXFxuIDE4NTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBtdHUpXFxuIDE4NjpcXHR7XFxuIDE4NzpcXHRcXHRyZXR1cm4gMDtcXG4gMTg4OlxcdH1cXG4gMTg5OlxcdFxcbiAxOTA6XFx0c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfZW5jYXBfYWRkX29wcyhjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzICpvcCxcXG4gMTkxOlxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbnVtKVxcbiAxOTI6XFx0e1xcbiAxOTM6XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAxOTQ6XFx0XFxuIDE5NTpcXHR9XFxuIDE5NjpcXHRcXG4gMTk3OlxcdHN0YXRpYyBpbmxpbmUgaW50IGx3dHVubmVsX2VuY2FwX2RlbF9vcHMoY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyAqb3AsXFxuIDE5ODpcXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IG51bSlcXG4gMTk5OlxcdHtcXG4gMjAwOlxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gMjAxOlxcdH1cXG4gMjAyOlxcdFxcbiAyMDM6XFx0c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfdmFsaWRfZW5jYXBfdHlwZSh1MTYgZW5jYXBfdHlwZSxcXG4gMjA0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjQ2LjE2NjM5MTA5NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjYwNzU0NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgTFdUVU5ORUwqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbiBhY3R1YWxseSBlbmFibGVzIGBDT05GSUdfTFdUVU5ORUxgLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgdG8gZmluZCBpdC4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIG5ldHdvcmtpbmcgZGlyZWN0b3J5LCBgbmV0L2AuIFRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBzZWVtcyB0byBiZSBhIHNpbXBsZSBgZ3JlcGAuIEknbGwgc2VhcmNoIGZvciBcImNvbmZpZyBMV1RVTk5FTFwiIHdpdGhpbiB0aGUgYG5ldC9gIGRpcmVjdG9yeS4gVGhhdCBzaG91bGQgcGlucG9pbnQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSBvciBmaWxlcyB3aGVyZSB0aGlzIG9wdGlvbiBpcyBkZWZpbmVkIGFuZCBob3cgaXQgcmVsYXRlcyB0byBvdGhlciBjb25maWd1cmF0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzAzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjo0OC44MjcxNDg2NTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTQyMzA5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExXVFVOTkVMXFxcXGJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDQzPXNvdXJjZSBcXFwibmV0L2lmZS9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTQ0NC1cXG5uZXQvS2NvbmZpZzo0NDU6Y29uZmlnIExXVFVOTkVMXFxubmV0L0tjb25maWctNDQ2LVxcdGJvb2wgXFxcIk5ldHdvcmsgbGlnaHQgd2VpZ2h0IHR1bm5lbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjUwLjk0MTM4ODYxMloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTkzMjkyNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBuZXQvS2NvbmZpZ2AsIHdoaWNoIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgbmV0d29yay1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQW5kIHNpbmNlIEkga25vdyBteSB3YXkgYXJvdW5kIHRoZSBrZXJuZWwgc291cmNlLCBJIGZpZ3VyZSB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgbGlrZWx5IGNsdXN0ZXJlZCBzb21ld2hlcmUgYXJvdW5kIGxpbmUgNDQ1LiBJdCdzIGEgYnJvYWQgc3RhcnRpbmcgcG9pbnQsIGJ1dCBLY29uZmlnIGZpbGVzIG9mdGVuIGZvbGxvdyBhIGxvZ2ljYWwgc3RydWN0dXJlLCBhbmQgdGhpcyBsaW5lIGlzIGFzIGdvb2QgYSBndWVzcyBhcyBhbnkuIEknbGwgZm9jdXMgbXkgYXR0ZW50aW9uIHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBzcGVjaWZpYyBvcHRpb24gdGhhdCBwaXF1ZXMgbXkgaW50ZXJlc3Qgb3IgYSBzZWN0aW9uIHRoYXQgbGVhZHMgbWUgdG8gdGhlIG5leHQgcGllY2Ugb2YgdGhlIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1NzUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjo1My41MzQ2ODQ0MTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDQwOlxcdHNvdXJjZSBcXFwibmV0L2NlcGgvS2NvbmZpZ1xcXCJcXG4gNDQxOlxcdHNvdXJjZSBcXFwibmV0L25mYy9LY29uZmlnXFxcIlxcbiA0NDI6XFx0c291cmNlIFxcXCJuZXQvcHNhbXBsZS9LY29uZmlnXFxcIlxcbiA0NDM6XFx0c291cmNlIFxcXCJuZXQvaWZlL0tjb25maWdcXFwiXFxuIDQ0NDpcXHRcXG4gNDQ1OlxcdGNvbmZpZyBMV1RVTk5FTFxcbiA0NDY6XFx0XFx0Ym9vbCBcXFwiTmV0d29yayBsaWdodCB3ZWlnaHQgdHVubmVsc1xcXCJcXG4gNDQ3OlxcdFxcdGhlbHBcXG4gNDQ4OlxcdFxcdCAgVGhpcyBmZWF0dXJlIHByb3ZpZGVzIGFuIGluZnJhc3RydWN0dXJlIHRvIHN1cHBvcnQgbGlnaHQgd2VpZ2h0XFxuIDQ0OTpcXHRcXHQgIHR1bm5lbHMgbGlrZSBtcGxzLiBUaGVyZSBpcyBubyBuZXRkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGEgbGlnaHRcXG4gNDUwOlxcdFxcdCAgd2VpZ2h0IHR1bm5lbCBlbmRwb2ludC4gVHVubmVsIGVuY2Fwc3VsYXRpb24gcGFyYW1ldGVycyBhcmUgc3RvcmVkXFxuIDQ1MTpcXHRcXHQgIHdpdGggbGlnaHQgd2VpZ2h0IHR1bm5lbCBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggZmliIHJvdXRlcy5cXG4gNDUyOlxcdFxcbiA0NTM6XFx0Y29uZmlnIExXVFVOTkVMX0JQRlxcbiA0NTQ6XFx0XFx0Ym9vbCBcXFwiRXhlY3V0ZSBCUEYgcHJvZ3JhbSBhcyByb3V0ZSBuZXh0aG9wIGFjdGlvblxcXCJcXG4gNDU1OlxcdFxcdGRlcGVuZHMgb24gTFdUVU5ORUwgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbiA0NTY6XFx0XFx0ZGVmYXVsdCB5IGlmIExXVFVOTkVMPXlcXG4gNDU3OlxcdFxcdGhlbHBcXG4gNDU4OlxcdFxcdCAgQWxsb3dzIHRvIHJ1biBCUEYgcHJvZ3JhbXMgYXMgYSBuZXh0aG9wIGFjdGlvbiBmb2xsb3dpbmcgYSByb3V0ZVxcbiA0NTk6XFx0XFx0ICBsb29rdXAgZm9yIGluY29taW5nIGFuZCBvdXRnb2luZyBwYWNrZXRzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjo1My41MzQ3Njg0MTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY0OTM0MTkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIExXVFVOTkVMIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gTFdUVU5ORUwgaXMgc2hvd2luZyB1cCBpbiBhIGJ1bmNoIG9mIHRoZXNlIHR1bm5lbGluZyBhbmQgbmV0d29ya2luZyBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IGl0J3MgaW50ZWdyYXRlZC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBzZWUgaG93IGBpcF90dW5fYnVpbGRfc3RhdGVgIHBsYXlzIGludG8gYWxsIG9mIHRoaXMuIFRoYXQgZnVuY3Rpb24ncyBnb3R0YSBiZSBrZXkgdG8gdGhlIGNvbm5lY3Rpb24sIHJpZ2h0PyBUaGVuIEknbGwgdHJhY2UgdGhyb3VnaCB0aGUgY29kZSwgYW5kIGZpZ3VyZSBvdXQgd2hvJ3MgYWN0dWFsbHkgKnVzaW5nKiB0aGUgYGx3dHVubmVsX2J1aWxkX3N0YXRlYCBmdW5jdGlvbiwgb3IgdGhlIGBsd3Rfb3BzLVx1MDAzZWJ1aWxkX3N0YXRlYCBmdW5jdGlvbiBwb2ludGVyLiBGaW5kaW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dHVhbCB1bmRlcnN0YW5kaW5nIEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxMTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIyOjU2LjE4NDExMzY0N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3NTcyMTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ1aWxkX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2x3dHVubmVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbHd0dW5uZWwuYz0xMTE9RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfZW5jYXBfZGVsX29wcyk7XFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMTItXFxubmV0L2NvcmUvbHd0dW5uZWwuYzoxMTM6aW50IGx3dHVubmVsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGVuY2FwX3R5cGUsXFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMTQtXFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKmVuY2FwLCB1bnNpZ25lZCBpbnQgZmFtaWx5LFxcbi0tXFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMzEtXFx0b3BzID0gcmN1X2RlcmVmZXJlbmNlKGx3dHVuX2VuY2Fwc1tlbmNhcF90eXBlXSk7XFxubmV0L2NvcmUvbHd0dW5uZWwuYzoxMzI6XFx0aWYgKGxpa2VseShvcHMgXFx1MDAyNlxcdTAwMjYgb3BzLVxcdTAwM2VidWlsZF9zdGF0ZSBcXHUwMDI2XFx1MDAyNiB0cnlfbW9kdWxlX2dldChvcHMtXFx1MDAzZW93bmVyKSkpXFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMzMtXFx0XFx0Zm91bmQgPSB0cnVlO1xcbi0tXFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMzYtXFx0aWYgKGZvdW5kKSB7XFxubmV0L2NvcmUvbHd0dW5uZWwuYzoxMzc6XFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VidWlsZF9zdGF0ZShuZXQsIGVuY2FwLCBmYW1pbHksIGNmZywgbHdzLCBleHRhY2spO1xcbm5ldC9jb3JlL2x3dHVubmVsLmMtMTM4LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvY29yZS9sd3R1bm5lbC5jLTE0MC1cXHR9IGVsc2Uge1xcbm5ldC9jb3JlL2x3dHVubmVsLmM6MTQxOlxcdFxcdC8qIGRvbid0IHJlbHkgb24gLUVPUE5PVFNVUFAgdG8gZGV0ZWN0IG1hdGNoIGFzIGJ1aWxkX3N0YXRlXFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xNDItXFx0XFx0ICogaGFuZGxlcnMgY291bGQgcmV0dXJuIGl0XFxuLS1cXG5uZXQvY29yZS9sd3R1bm5lbC5jLTE0OS19XFxubmV0L2NvcmUvbHd0dW5uZWwuYzoxNTA6RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfYnVpbGRfc3RhdGUpO1xcbm5ldC9jb3JlL2x3dHVubmVsLmMtMTUxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMjo1Ni42MjE2OTI2MDZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTExMTUwNjQwMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IGBsd3R1bm5lbF9idWlsZF9zdGF0ZWAgYW5kIEFzc29jaWF0ZWQgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHJlbGF0ZWQgdG8gbGlnaHR3ZWlnaHQgdHVubmVscyBhbmQgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uLiAgU3BlY2lmaWNhbGx5LCBgbHd0dW5uZWxfYnVpbGRfc3RhdGVgIGdldHMgY2FsbGVkIHdoZW4gd2UncmUgc2V0dGluZyB1cCByb3V0ZXMgb3IgbmV4dGhvcHMgdXNpbmcgTmV0bGluaywgbGlrZSB3aXRoIGBSVEFfRU5DQVBgIGFuZCBgUlRBX0VOQ0FQX1RZUEVgLiAgVGhpcyBpcyBhbGwgYWNjZXNzaWJsZSB0byBldmVuIHVucHJpdmlsZWdlZCB1c2VycyBpZiB0aGV5J3JlIHVzaW5nIHVzZXIgbmFtZXNwYWNlcywgb3IgaWYgdGhleSBoYXZlIGBDQVBfTkVUX0FETUlOYCBpbiBhIG5ldHdvcmsgbmFtZXNwYWNlLiBTeXprYWxsZXIgaXMga25vd24gdG8gYmUgaGl0dGluZyB0aGlzIGFyZWEgaGFyZCB3aXRoIG5ldGxpbmsgY29uZmlndXJhdGlvbnMsIHdoaWNoIGltbWVkaWF0ZWx5IGdldHMgbXkgYXR0ZW50aW9uLlxuXG5NeSBmaXJzdCBjaGVjayBpcyB0byBzZWUgaWYgdGhpcyBjb2RlIGlzIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBRRU1VIGVudmlyb25tZW50LiBUaGUgYW5zd2VyIGlzIGEgZGVmaW5pdGl2ZSB5ZXMsIGl0J3MgcmlnaHQgdGhlcmUgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlOiBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AsIHBhcnQgb2YgSVB2NCBhbmQgTFdUVU5ORUwgcm91dGluZy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/ICBJJ20gZ29pbmcgdG8gcnVuIHRocm91Z2ggdGhlIHBvc2l0aXZlIGNyaXRlcmlhLiBUaGlzIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIEl0IHRvdWNoZXMgdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0sIGFuZCBpdCBsb29rcyBsaWtlIGEgcmVmYWN0b3Jpbmcgb2YgZGF0YSBzdHJ1Y3R1cmVzIGFuZC9vciBhbGdvcml0aG0gZmxvd3MsIHdpdGggdGhlIG1haW4gY2hhbmdlIGJlaW5nIHRoZSBwbGFjZW1lbnQgb2YgYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtgIGJlZm9yZSBjYWxsaW5nIGBpcF90dW5fc2V0X29wdHNgIGluIGJvdGggYGlwX3R1bl9idWlsZF9zdGF0ZWAgYW5kIGBpcDZfdHVuX2J1aWxkX3N0YXRlYC5cblxuT2theSwgbGV0J3MgYmFjayB1cCBhIHNlY29uZC4gV2h5IHdhcyB0aGlzIGNoYW5nZSBtYWRlPyBJIHNlZSB0aGV5J3JlIGluaXRpYWxpemluZyBgb3B0aW9uc19sZW5gIGJlZm9yZSBjYWxsaW5nIGBpcF90dW5fc2V0X29wdHNgIGluc3RlYWQgb2YgYWZ0ZXIsIGFuZCBteSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIElmIGBpcF90dW5fc2V0X29wdHNgIGZhaWxzLCBpdCBjYWxscyBgbHd0c3RhdGVfZnJlZShuZXdfc3RhdGUpO2AuIFRoZW4gd2hhdD8gVGhlIGNvZGUgZ29lcyBvbiB0byBpbml0aWFsaXplIHNvbWUgb3RoZXIgdGhpbmdzOiBgZHN0X2NhY2hlX2luaXRgLCBhbmQgaWYgdGhhdCBmYWlscywgdGhlIHN0YXRlIGlzIGZyZWVkLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgdG8gaW5pdGlhbGl6ZSB0aGUgYG9wdGlvbnNfbGVuYCBlYXJsaWVyIGlzIGltcG9ydGFudC4gIEJlY2F1c2UgdGhlIGBvcHRpb25zX2xlbmAgZmllbGQgaXMgdXNlZCB0byBkZWZpbmUgdGhlIHNpemUgb2YgYW4gYG9wdGlvbnNbXWAgYXJyYXkgaW4gdGhlIGBpcF90dW5uZWxfaW5mb2Agc3RydWN0LCB0aGlzIGluaXRpYWxpemF0aW9uIGlzIHVzZWQgZm9yIGNvbXBpbGVyIGluc3RydW1lbnRhdGlvbiB3aXRoIGBfX2NvdW50ZWRfYnlgIGNoZWNrcy4gIElmIGBvcHRpb25zX2xlbmAgaXMgemVybyAodW5pbml0aWFsaXplZCksIHdoZW4gYGlwX3R1bl9zZXRfb3B0c2Agd3JpdGVzIGludG8gYG9wdGlvbnNbXWAgYW4gYWNjZXNzIHRvIGBvcHRpb25zWzBdYCB3aWxsIHRyaXAgYENPTkZJR19VQlNBTl9CT1VORFNgISBUaGlzIGBvcHRpb25zX2xlbmAgaXMgY3J1Y2lhbCBmb3Igc3RhdGUgbWFuYWdlbWVudCBpbiBgaXBfdHVubmVsX2luZm9gLlxuXG5UaGlzIGlzIGEgY2xlYXIgbG9naWMgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGUuICBJdCBpbXBhY3RzIGBpcF90dW5fYnVpbGRfc3RhdGVgIGFuZCBgaXA2X3R1bl9idWlsZF9zdGF0ZWAsIHdoaWNoIGFyZSBkaXJlY3RseSBpbiB0aGUgY2FsbCBjaGFpbi5cblxuTm93LCBvbiB0byB0aGUgbmVnYXRpdmUgY3JpdGVyaWE6IG5vdGhpbmcgaGVyZSBzZWVtcyB0byBiZSBub24ta2VybmVsLCBub24tZXhlY3V0YWJsZSwgb3IgdGllZCB0byB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gV2UgZG9uJ3QgaGF2ZSB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaGVyZSBlaXRoZXIuIFNvLCB0aGUgdmVyZGljdCBpcyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5vdywgdGltZSB0byBkZXRlcm1pbmUgdGhlIGBGb2N1c1N5bWJvbHNgLiBXaGF0IGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgbW9kaWZpZWQgb3IgYXJlIGNsb3NlbHkgaW52b2x2ZWQ/IGBpcF90dW5fYnVpbGRfc3RhdGVgIGFuZCBgaXA2X3R1bl9idWlsZF9zdGF0ZWAgYXJlIHRoZSBrZXkgcGxheWVycy4gIGBpcF90dW5fc2V0X29wdHNgIGlzbid0IGRpcmVjdGx5IG1vZGlmaWVkIGJ1dCBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIsIGFuZCB0aGF0IGNvdWxkIGJlIGltcG9ydGFudCB0b28uXG5cbkFyZSB0aGVzZSBmdW5jdGlvbnMgbm9uLXViaXF1aXRvdXM/IFllcywgdGhleSdyZSBzcGVjaWZpYyB0byBJUCBhbmQgSVB2NiB0dW5uZWwgZW5jYXAuIEFyZSB0aGV5IHN0YXRpYz8gVGhleSBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AgaW4gYGlwX3R1bm5lbF9jb3JlLmNgLCBidXQgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiBmb3IgdXNlIGluIGBsd3R1bm5lbF9lbmNhcF9vcHMgaXBfdHVuX2x3dF9vcHNgIGFuZCBgaXA2X3R1bl9sd3Rfb3BzYCwgbWVhbmluZyB0aGV5ICpjYW4ndCogYmUgaW5saW5lZCBhbmQgYXJlIGFjY2Vzc2libGUgYXMgc3ltYm9scy4gIGBsd3R1bm5lbF9idWlsZF9zdGF0ZWAgY2FsbHMgdGhlbSB2aWEgYG9wcy1cdTAwM2VidWlsZF9zdGF0ZWAsIHdoaWNoIGNvbmZpcm1zIHRoZWlyIHZpc2liaWxpdHkgYXMgc3ltYm9scy4gQnV0LCBgaXBfdHVuX2J1aWxkX3N0YXRlYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGVgIGFyZSB0aGUgZnVuY3Rpb25zIHdoZXJlIHRoZSBjaGFuZ2VzIGFyZSBtYWRlLCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlbS4gYGx3dHVubmVsX2J1aWxkX3N0YXRlYCBpcyBhIG1vcmUgZ2VuZXJhbCBkaXNwYXRjaGVyLCBzbyBsZXQncyBzdGljayB3aXRoIHRoZSBtb3JlIHByZWNpc2UgYGlwX3R1bl9idWlsZF9zdGF0ZWAgYW5kIGBpcDZfdHVuX2J1aWxkX3N0YXRlYC5cblxuTmV4dCBzdGVwLCBgRW5hYmxlQ29uZmlnc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGtlcm5lbCBjb25maWdzIGFyZSBuZWNlc3NhcnkuIEknbGwgY2hlY2sgS2NvbmZpZyBmb3IgYExXVFVOTkVMYCBhbmQgSVAgdHVubmVscy4gSSBhbHNvIG5lZWQgdG8gc2VhcmNoIHRoZSBjb2RlIGJhc2UgZm9yIGhvdyBgQ09ORklHX0xXVFVOTkVMYCBpcyB1c2VkIHdpdGggYGlwX3R1bm5lbF9jb3JlLmNgIHRvIHNlZSBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ3OTgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjA3LjczNjc2MDY0MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3Njc5NTc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTFdUVU5ORUxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0zOT1zdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtNTUtXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDo1NjojaWZkZWYgQ09ORklHX0xXVFVOTkVMXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC01Ny1cXG4tLVxcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmg9MjAzPXN0YXRpYyBpbmxpbmUgaW50IGx3dHVubmVsX3ZhbGlkX2VuY2FwX3R5cGUodTE2IGVuY2FwX3R5cGUsXFxuLS1cXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oLTIwNS17XFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoyMDY6XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQ09ORklHX0xXVFVOTkVMIGlzIG5vdCBlbmFibGVkIGluIHRoaXMga2VybmVsXFxcIik7XFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0yMDctXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0yNjE9c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0yNjUtXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoyNjY6I2VuZGlmIC8qIENPTkZJR19MV1RVTk5FTCAqL1xcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMjY3LVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmg9MTE9c3RydWN0IG5ldG5zX25mIHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oLTE3LVxcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpuZl9sb2dfZGlyX2hlYWRlcjtcXG5pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaDoxODojaWZkZWYgQ09ORklHX0xXVFVOTkVMXFxuaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmgtMTktXFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKm5mX2x3dG5sX2Rpcl9oZWFkZXI7XFxuLS1cXG5uZXQvY29yZS9NYWtlZmlsZT0zNz1vYmotJChDT05GSUdfQ0dST1VQX05FVF9DTEFTU0lEKSArPSBuZXRjbGFzc2lkX2Nncm91cC5vXFxubmV0L2NvcmUvTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX0xXVFVOTkVMKSArPSBsd3R1bm5lbC5vXFxubmV0L2NvcmUvTWFrZWZpbGU6Mzk6b2JqLSQoQ09ORklHX0xXVFVOTkVMX0JQRikgKz0gbHd0X2JwZi5vXFxubmV0L2NvcmUvTWFrZWZpbGUtNDAtb2JqLSQoQ09ORklHX0RTVF9DQUNIRSkgKz0gZHN0X2NhY2hlLm9cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY4ODA9c3RhdGljIGludCBicGZfcHVzaF9zZWc2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHUzMiB0eXBlLCB2b2lkICpoZHIsIHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTEzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY5MTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0xXVFVOTkVMX0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02OTE1LXN0YXRpYyBpbnQgYnBmX3B1c2hfaXBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqaGRyLCB1MzIgbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjkyMj1CUEZfQ0FMTF80KGJwZl9sd3RfaW5fcHVzaF9lbmNhcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIHR5cGUsIHZvaWQgKiwgaGRyLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkzMC0jZW5kaWZcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTMxOiNpZiBJU19FTkFCTEVEKENPTkZJR19MV1RVTk5FTF9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkzMi1cXHRjYXNlIEJQRl9MV1RfRU5DQVBfSVA6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02OTQwPUJQRl9DQUxMXzQoYnBmX2x3dF94bWl0X3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk0My1cXHRzd2l0Y2ggKHR5cGUpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTQ0OiNpZiBJU19FTkFCTEVEKENPTkZJR19MV1RVTk5FTF9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk0NS1cXHRjYXNlIEJQRl9MV1RfRU5DQVBfSVA6XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTIzOT1vYmotJChDT05GSUdfSVBfVlMpICs9IGlwdnMvXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTI0MS0jIGx3dHVubmVsXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyNDI6b2JqLSQoQ09ORklHX0xXVFVOTkVMKSArPSBuZl9ob29rc19sd3R1bm5lbC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0yNDMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYz04MDE9aW50IF9faW5pdCBuZXRmaWx0ZXJfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtODA4LVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjgwOTojaWZkZWYgQ09ORklHX0xXVFVOTkVMXFxubmV0L25ldGZpbHRlci9jb3JlLmMtODEwLVxcdHJldCA9IG5ldGZpbHRlcl9sd3R1bm5lbF9pbml0KCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy04MTktZXJyX2xvZ19wZXJuZXQ6XFxubmV0L25ldGZpbHRlci9jb3JlLmM6ODIwOiNpZmRlZiBDT05GSUdfTFdUVU5ORUxcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy04MjEtXFx0bmV0ZmlsdGVyX2x3dHVubmVsX2ZpbmkoKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfaW50ZXJuYWxzLmg9MzA9aW50IF9faW5pdCBuZXRmaWx0ZXJfbG9nX2luaXQodm9pZCk7XFxubmV0L25ldGZpbHRlci9uZl9pbnRlcm5hbHMuaC0zMS1cXG5uZXQvbmV0ZmlsdGVyL25mX2ludGVybmFscy5oOjMyOiNpZmRlZiBDT05GSUdfTFdUVU5ORUxcXG5uZXQvbmV0ZmlsdGVyL25mX2ludGVybmFscy5oLTMzLS8qIG5mX2hvb2tzX2x3dHVubmVsLmMgKi9cXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYz0zMjg9c3RhdGljIHZvaWQgcHJvYmVfa2VybmVsX2ltYWdlX2NvbmZpZyhjb25zdCBjaGFyICpkZWZpbmVfcHJlZml4KVxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM3NC1cXHRcXHQvKiBCUEZfUFJPR19UWVBFX0xXVF8qIGFuZCByZWxhdGVkIGhlbHBlcnMgKi9cXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmM6Mzc1OlxcdFxcdHsgXFxcIkNPTkZJR19MV1RVTk5FTF9CUEZcXFwiLCB9LFxcbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYy0zNzYtXFx0XFx0LyogQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1QsIFRDICh0cmFmZmljIGNvbnRyb2wpIGFjdGlvbnMgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc9NTU9Q09ORklHX0xJVkVQQVRDSD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzo1NjpDT05GSUdfTFdUVU5ORUw9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc6NTc6Q09ORklHX0xXVFVOTkVMX0JQRj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy01OC1DT05GSUdfTU9EVUxFX1NJRz15XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjA5LjMxMzU2Mzk5N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNjc1MjczMzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTFdUVU5ORUwgRGVwZW5kZW5jeSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYGluY2x1ZGUvbmV0L2x3dHVubmVsLmhgIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFyb3VuZCBgQ09ORklHX0xXVFVOTkVMYC4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzYCBpcyBlaXRoZXIgZGVmaW5lZCBhcyBhIHByb3BlciBmdW5jdGlvbiBvciwgaWYgYENPTkZJR19MV1RVTk5FTGAgaXNuJ3QgZW5hYmxlZCwgYmVjb21lcyBhbiBpbmxpbmUgZnVuY3Rpb24gdGhhdCBzaW1wbHkgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGUgYGx3dHVubmVsX3ZhbGlkX2VuY2FwX3R5cGVgIGZ1bmN0aW9uIGlzIGFsc28gZGVmaW5lZCB0byByZXR1cm4gYC1FT1BOT1RTVVBQYCBpZiB0aGUgY29uZmlnIGlzbid0IGVuYWJsZWQuXG5cblRoZXJlZm9yZSwgaXQncyBjbGVhcjogaWYgYENPTkZJR19MV1RVTk5FTGAgaXMgb2ZmLCB0aGVyZSdzIG5vIHdheSB0byBhZGQgYW55IGx3dHVubmVsIGVuY2Fwc3VsYXRpb24gb3BlcmF0aW9ucywgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uICpkb2VzKiB0aGF0LCBvciB0byB2YWxpZGF0ZSB0aGUgdHlwZS4gTW9yZSBpbXBvcnRhbnRseSwgdGhpcyBtZWFucyBjYWxscyB0byBidWlsZCB0aGUgdHVubmVsIHN0YXRlLCBpbiBmdW5jdGlvbnMgc3VjaCBhcyBgbHd0dW5uZWxfYnVpbGRfc3RhdGVgLCB3aWxsICphbHNvKiBmYWlsIHdpdGggYC1FT1BOT1RTVVBQYCBpZiBgQ09ORklHX0xXVFVOTkVMYCBpc24ndCBzZXQuIFNvLCB0aGUgYGx3dHVubmVsX2VuY2FwX2FkZF9vcHNgIGlzIGNyaXRpY2FsLiBJZiBpdCdzIG5vdCBkZWZpbmVkLCB3ZSdsbCBuZXZlciByZWFjaCBgaXBfdHVuX2J1aWxkX3N0YXRlYCBvciBgaXA2X3R1bl9idWlsZF9zdGF0ZWAuXG5cbkkgYWxzbyByZW1lbWJlciB0aGF0IGBJTkVUYCBpcyByZXF1aXJlZCBmb3IgYG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNgIHRvIGJlIGJ1aWx0LCBiZWNhdXNlIG9mIHRoZSBkaXJlY3RvcnkgKGBuZXQvaXB2NC9gKS5cblxuU28sIGBDT05GSUdfTFdUVU5ORUxgIGlzIGEgKmhhcmQqIHJlcXVpcmVtZW50IGhlcmUuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBkZXBlbmRlbmNpZXMgYXJlIHByb3Blcmx5IGhhbmRsZWQgaW4gdGhlIGJ1aWxkIHByb2Nlc3MuIExldCBtZSBjaGVjayB0aGUgYG5ldC9NYWtlZmlsZWAgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBkZXBlbmRlbmNpZXMgYXJlIGJlaW5nIGVuZm9yY2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTIyMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzoxMi45ODg4NDA0NzdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NzIwNjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfTkVURklMVEVSKVxcdFxcdCs9IG5ldGZpbHRlci9cXG5uZXQvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0lORVQpXFx0XFx0Kz0gaXB2NC9cXG5uZXQvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1RMUylcXHRcXHQrPSB0bHMvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjEzLjAzNzU2ODEyNVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODEyOTEwMzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLZXJuZWwncyBUdW5uZWxpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBDT05GSUdfSU5FVGAgKmRlZmluaXRlbHkqIHB1bGxzIGluIGV2ZXJ5dGhpbmcgdW5kZXIgYG5ldC9pcHY0L2AsIGFuZCB0aGF0IGBuZXQvaXB2NC9NYWtlZmlsZWAgaXMgZ29pbmcgdG8gaW5jbHVkZSBgaXBfdHVubmVsX2NvcmUuY2Agbm8gbWF0dGVyIHdoYXQgd2hlbiBJUHY0IGlzIGFjdGl2ZS4gR29vZC4gQW5kLCBhcyBJIHN1c3BlY3RlZCwgYENPTkZJR19MV1RVTk5FTGAgaXMgdGhlIGtleSB0byBlbmFibGluZyB0aGUgbGlnaHR3ZWlnaHQgdHVubmVsaW5nIGNvZGUgd2l0aCBgbmV0L2NvcmUvbHd0dW5uZWwuY2AsIHdoaWNoLCBpbiB0dXJuLCBwcm92aWRlcyB1cyB3aXRoIGBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzYCBhbmQgYGx3dHVubmVsX2J1aWxkX3N0YXRlYC4gTWFrZXMgc2Vuc2UuIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBjb25zaWRlciBJUHY2LlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IHdpdGggSVB2Ni4gTXkgYnJhaW4gaXMgc3RhcnRpbmcgdG8gY2h1cm4gb24gdGhlIGltcGxpY2F0aW9ucyBmb3IgSVB2NiByb3V0ZXMgd2l0aCBMV1RVTk5FTC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBgaXA2X3R1bl9idWlsZF9zdGF0ZWAuIElzIGBDT05GSUdfSVBWNmAgKmFsc28qIGEgbmVjZXNzYXJ5IGNvbmRpdGlvbiBmb3IgTFdUVU5ORUwtYmFzZWQgSVB2NiByb3V0aW5nPyBJIG5lZWQgdG8gZGlnIGludG8gaG93IHRob3NlIElQdjYgcm91dGVzIGFjdHVhbGx5ICp1c2UqIExXVFVOTkVMLiBJIGJldHRlciBzdGFydCBsb29raW5nIGF0IHRoZSBJUHY2IHJvdXRlIGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDA0NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzoxNS44NTA0ODE3NzFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzgxNTI4OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHd0dW5uZWxfYnVpbGRfc3RhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0xMjA9aW50IGx3dHVubmVsX3ZhbGlkX2VuY2FwX3R5cGVfYXR0cihzdHJ1Y3QgbmxhdHRyICphdHRyLCBpbnQgbGVuLFxcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMTIxLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaDoxMjI6aW50IGx3dHVubmVsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGVuY2FwX3R5cGUsXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaC0xMjMtXFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKmVuY2FwLFxcbi0tXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0yMTA9c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfdmFsaWRfZW5jYXBfdHlwZV9hdHRyKHN0cnVjdCBubGF0dHIgKmF0dHIsIGludCBsZW4sXFxuLS1cXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oLTIxOC1cXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oOjIxOTpzdGF0aWMgaW5saW5lIGludCBsd3R1bm5lbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUxNiBlbmNhcF90eXBlLFxcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMjIwLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICplbmNhcCxcXG4tLVxcbm5ldC9jb3JlL2x3dHVubmVsLmM9MTExPUVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX2VuY2FwX2RlbF9vcHMpO1xcbm5ldC9jb3JlL2x3dHVubmVsLmMtMTEyLVxcbm5ldC9jb3JlL2x3dHVubmVsLmM6MTEzOmludCBsd3R1bm5lbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUxNiBlbmNhcF90eXBlLFxcbm5ldC9jb3JlL2x3dHVubmVsLmMtMTE0LVxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICplbmNhcCwgdW5zaWduZWQgaW50IGZhbWlseSxcXG4tLVxcbm5ldC9jb3JlL2x3dHVubmVsLmMtMTQ5LX1cXG5uZXQvY29yZS9sd3R1bm5lbC5jOjE1MDpFWFBPUlRfU1lNQk9MX0dQTChsd3R1bm5lbF9idWlsZF9zdGF0ZSk7XFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xNTEtXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9NjQyPWludCBmaWJfbmhfY29tbW9uX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLFxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTY1Ni1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6NjU3OlxcdFxcdGVyciA9IGx3dHVubmVsX2J1aWxkX3N0YXRlKG5ldCwgZW5jYXBfdHlwZSwgZW5jYXAsXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTY1OC1cXHRcXHRcXHRcXHRcXHQgICBuaGMtXFx1MDAzZW5oY19mYW1pbHksIGNmZywgXFx1MDAyNmx3dHN0YXRlLFxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTkwNz1zdGF0aWMgaW50IGZpYl9lbmNhcF9tYXRjaChzdHJ1Y3QgbmV0ICpuZXQsIHUxNiBlbmNhcF90eXBlLFxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTkxOC1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6OTE5OlxcdHJldCA9IGx3dHVubmVsX2J1aWxkX3N0YXRlKG5ldCwgZW5jYXBfdHlwZSwgZW5jYXAsIEFGX0lORVQsXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTkyMC1cXHRcXHRcXHRcXHQgICBjZmcsIFxcdTAwMjZsd3RzdGF0ZSwgZXh0YWNrKTtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNDIxPXN0YXRpYyBpbnRcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjQyMjpzZWc2X2xvY2FsX2x3dHVubmVsX2J1aWxkX3N0YXRlKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCwgY29uc3Qgdm9pZCAqY2ZnLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDIzLVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNTE3PXN0YXRpYyBpbnQgc2VnNl9sb2NhbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNTQ5LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNTUwOlxcdGVyciA9IHNlZzZfbG9jYWxfbHd0dW5uZWxfYnVpbGRfc3RhdGUoc2x3dCwgY2ZnLCBleHRhY2spO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNTUxLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzoxNy40Mjg2NDMxNDZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM1OTUwMjE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIElQdjYgYW5kIExXVFVOTkVMIEludGVyYWN0aW9uKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGhvdyB0aGUgYExXVFVOTkVMX0VOQ0FQX0lQNmAgZnVuY3Rpb25hbGl0eSwgb3IgcG90ZW50aWFsbHkgYGx3dHVubmVsX2J1aWxkX3N0YXRlYCwgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIElQdjYgb3IgbmV4dCBob3AgY29udGV4dHMuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGVzZSBhcmUgY2VudHJhbCB0byB0aGUgZW5jYXBzdWxhdGlvbiBwcm9jZXNzLCBidXQgSSB3YW50IHRvIHZlcmlmeSB0aGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgSVB2NiBzcGVjaWZpY2FsbHkgbGV2ZXJhZ2VzIHRoZSBMV1RVTk5FTCBpbmZyYXN0cnVjdHVyZS5cblxuVG8gZGlnIGludG8gdGhpcywgSSdtIGdvaW5nIHRvIGxldmVyYWdlIGdyZXAuIEknbGwgc2VhcmNoIGZvciBjYWxscyB0byBgbHd0dW5uZWxfYnVpbGRfc3RhdGVgIGFjcm9zcyB0aGUgYG5ldC9pcHY2YCBkaXJlY3RvcnkgYW5kIHRoZSBicm9hZGVyIGBuZXQvYCBkaXJlY3Rvcnkgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIGNhbGwgc2l0ZXMgYW5kIHByb3ZpZGUgY2x1ZXMgYWJvdXQgdGhlIGludGVncmF0aW9uIHBvaW50cyBhbmQgZGVwZW5kZW5jaWVzIGJldHdlZW4gSVB2NiBhbmQgdGhlIExXVFVOTkVMIG1lY2hhbmlzbS4gQnkgb2JzZXJ2aW5nIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNhbGxzLCBJIGNhbiBkZWR1Y2UgaG93IGl0IGhhbmRsZXMgZW5jYXBzdWxhdGVkIElQdjYgdHJhZmZpYyBhbmQgaG9wZWZ1bGx5IGdhaW4gYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzODksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzoxOS43ODgxNDc2MzdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjU3NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImx3dHVubmVsX2J1aWxkX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbHd0dW5uZWwuYz0xMTE9RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfZW5jYXBfZGVsX29wcyk7XFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMTItXFxubmV0L2NvcmUvbHd0dW5uZWwuYzoxMTM6aW50IGx3dHVubmVsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGVuY2FwX3R5cGUsXFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMTQtXFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKmVuY2FwLCB1bnNpZ25lZCBpbnQgZmFtaWx5LFxcbi0tXFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xNDktfVxcbm5ldC9jb3JlL2x3dHVubmVsLmM6MTUwOkVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX2J1aWxkX3N0YXRlKTtcXG5uZXQvY29yZS9sd3R1bm5lbC5jLTE1MS1cXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz02NDI9aW50IGZpYl9uaF9jb21tb25faW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfbmhfY29tbW9uICpuaGMsXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtNjU2LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzo2NTc6XFx0XFx0ZXJyID0gbHd0dW5uZWxfYnVpbGRfc3RhdGUobmV0LCBlbmNhcF90eXBlLCBlbmNhcCxcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtNjU4LVxcdFxcdFxcdFxcdFxcdCAgIG5oYy1cXHUwMDNlbmhjX2ZhbWlseSwgY2ZnLCBcXHUwMDI2bHd0c3RhdGUsXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9OTA3PXN0YXRpYyBpbnQgZmliX2VuY2FwX21hdGNoKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGVuY2FwX3R5cGUsXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtOTE4LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzo5MTk6XFx0cmV0ID0gbHd0dW5uZWxfYnVpbGRfc3RhdGUobmV0LCBlbmNhcF90eXBlLCBlbmNhcCwgQUZfSU5FVCxcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtOTIwLVxcdFxcdFxcdFxcdCAgIGNmZywgXFx1MDAyNmx3dHN0YXRlLCBleHRhY2spO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI0MjE9c3RhdGljIGludFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDIyOnNlZzZfbG9jYWxfbHd0dW5uZWxfYnVpbGRfc3RhdGUoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LCBjb25zdCB2b2lkICpjZmcsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MjMtXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI1MTc9c3RhdGljIGludCBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI1NDktXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI1NTA6XFx0ZXJyID0gc2VnNl9sb2NhbF9sd3R1bm5lbF9idWlsZF9zdGF0ZShzbHd0LCBjZmcsIGV4dGFjayk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI1NTEtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjE5Ljg1ODQxMjI0NloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NDg5Mzk3MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIExpZ2h0d2VpZ2h0IFR1bm5lbCBJbml0aWFsaXphdGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ3ZlIGJlZW4gbG9va2luZyBhdCBob3cgbGlnaHR3ZWlnaHQgdHVubmVscyBhcmUgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgZmliX25oX2NvbW1vbl9pbml0YC4gVGhpcyBmdW5jdGlvbiBpcyBrZXkgYmVjYXVzZSBpdCBoYW5kbGVzIG5leHRob3AgaW5pdGlhbGl6YXRpb24sIHdoZXRoZXIgaXQncyBJUHY0IG9yIElQdjYuIFdoZW4gYSByb3V0ZSBvciBuZXh0aG9wIGlzIGNyZWF0ZWQgYW5kIHVzZXMgYExXVFVOTkVMX0VOQ0FQX0lQYCBvciBgTFdUVU5ORUxfRU5DQVBfSVA2YCAodmlhIGBSVEFfRU5DQVBfVFlQRWApLCBgZmliX25oX2NvbW1vbl9pbml0YCBjYWxscyBgbHd0dW5uZWxfYnVpbGRfc3RhdGVgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zOyBgbHd0dW5uZWxfYnVpbGRfc3RhdGVgIHRoZW4gdXNlcyBgcmN1X2RlcmVmZXJlbmNlYCB0byBnZXQgdGhlIHJlbGV2YW50IHR1bm5lbCBlbmNhcHN1bGF0aW9uIHR5cGUsIGFuZCBjYWxscyB0aGUgYXBwcm9wcmlhdGUgYGJ1aWxkX3N0YXRlYCBmdW5jdGlvbi4gRm9yIElQIHR1bm5lbHMsIGl0J3MgYGlwX3R1bl9idWlsZF9zdGF0ZWAsIGFuZCBmb3IgSVB2NiB0dW5uZWxzLCBpdCdzIGBpcDZfdHVuX2J1aWxkX3N0YXRlYC4gQm90aCByZXNpZGUgaW4gYG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNgLlxuXG5Ob3csIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMgYXJlIGltcG9ydGFudC4gSSd2ZSBjb25maXJtZWQgdGhhdCBgTFdUVU5ORUxgIGFuZCBgSU5FVGAgYXJlIGVzc2VudGlhbC4gRm9yIElQdjYgcm91dGVzLCBgSVBWNmAgaXMgYWxzbyBuZWVkZWQuIEkgaW5pdGlhbGx5IGxvb2tlZCBmb3Igb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgd2l0aGluIGBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jYCwgc3VjaCBhcyBgQ09ORklHX0RTVF9DQUNIRWAsIGJ1dCBJJ3ZlIGRvdWJsZS1jaGVja2VkIGFuZCBgQ09ORklHX0xXVFVOTkVMYCBzZWVtcyB0byBiZSBzdWZmaWNpZW50IGFzIGEgc3RhbmRhbG9uZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYXMgaXQgaGFzIG5vIGRlcGVuZGVuY2llcyBpdHNlbGYuIGBDT05GSUdfSU5FVGAgY292ZXJzIHRoZSByZWxldmFudCBJUHY0IGNvZGUuXG5cbkxldCdzIHN1bW1hcml6ZSB0aGUga2V5IGZpbmRpbmdzOlxuXG4xLiAgKipXb3J0aEZ1enppbmcqKjogWWVzLCBkZWZpbml0ZWx5LiBXZSdyZSBkZWFsaW5nIHdpdGggbW9kaWZpZWQsIHJlYWNoYWJsZSBjb2RlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIChgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2ApLiBUaGlzIGlzIHNpZ25pZmljYW50LlxuMi4gICoqRm9jdXNTeW1ib2xzKio6IFRoZSBzeW1ib2xzIEkgbmVlZCB0byB0YXJnZXQgYXJlOiBgaXBfdHVuX2J1aWxkX3N0YXRlYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGVgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBpbiBidWlsZGluZyB0aGUgdHVubmVsIHN0YXRlLlxuMy4gICoqRW5hYmxlQ29uZmlncyoqOiBUaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZTogYElORVRgLCBgTFdUVU5ORUxgLCBhbmQgYElQVjZgLiBUaGlzIGlzIHRoZSBtaW5pbWFsIHNldC5cbjQuICAqKlJlYXNvbmluZyoqOiBUaGUgY3JpdGljYWwgY2hhbmdlIGlzIHRoYXQgYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuYCBpcyBub3cgaW5pdGlhbGl6ZWQgKmJlZm9yZSogdGhlIGBpcF90dW5fc2V0X29wdHMoKWAgY2FsbCBpbiBib3RoIGBpcF90dW5fYnVpbGRfc3RhdGUoKWAgYW5kIGBpcDZfdHVuX2J1aWxkX3N0YXRlKClgLiBUaGUgcmVhY2hhYmlsaXR5IGNvbWVzIGZyb20gbmV0bGluayByb3V0ZS9uZXh0aG9wIGNvbmZpZ3VyYXRpb24gc3BlY2lmeWluZyBsaWdodHdlaWdodCB0dW5uZWwgZW5jYXBzdWxhdGlvbiAoYFJUQV9FTkNBUGAgd2l0aCBlaXRoZXIgYExXVFVOTkVMX0VOQ0FQX0lQYCBvciBgTFdUVU5ORUxfRU5DQVBfSVA2YCkuIFRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHJlYWNoYWJsZSBzdGF0ZSBhbmQgdGhlIGhhbmRsaW5nIG9mIG9wdGlvbnMgd2hlbiBhIHR1bm5lbCByb3V0ZSBpcyBjcmVhdGVkLlxuXG5JIGFtIHNhdGlzZmllZCB0aGF0IG15IGFuYWx5c2lzIGlzIHNvdW5kLiBMZXQncyBwcm9jZWVkIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMzY1LCJPdXRwdXRUb2tlbnMiOjE4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzoyNi4zNDc4MTIwOTJaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjk0OTE1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTFdUVU5ORUxcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF90dW5fYnVpbGRfc3RhdGVcIixcbiAgICBcImlwNl90dW5fYnVpbGRfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMsIG1vdmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuIGJlZm9yZSBpcF90dW5fc2V0X29wdHMoKSBpbiBib3RoIGlwX3R1bl9idWlsZF9zdGF0ZSgpIGFuZCBpcDZfdHVuX2J1aWxkX3N0YXRlKCkuIFRoaXMgcGF0aCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgcm91dGUvbmV4dGhvcCByZXF1ZXN0cyBjb25maWd1cmluZyBsaWdodHdlaWdodCB0dW5uZWwgZW5jYXBzdWxhdGlvbiAoTFdUVU5ORUxfRU5DQVBfSVAgYW5kIExXVFVOTkVMX0VOQ0FQX0lQNikuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdHVubmVsIG9wdGlvbiBwYXJzaW5nIGFuZCBib3VuZHMgY2hlY2tpbmcgb24gdHVubmVsIHN0YXRlIGNyZWF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIkxXVFVOTkVMXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdHVuX2J1aWxkX3N0YXRlXCIsXG4gICAgXCJpcDZfdHVuX2J1aWxkX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLCBtb3ZpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHR1bl9pbmZvLVxcdTAwM2VvcHRpb25zX2xlbiBiZWZvcmUgaXBfdHVuX3NldF9vcHRzKCkgaW4gYm90aCBpcF90dW5fYnVpbGRfc3RhdGUoKSBhbmQgaXA2X3R1bl9idWlsZF9zdGF0ZSgpLiBUaGlzIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIHJvdXRlL25leHRob3AgcmVxdWVzdHMgY29uZmlndXJpbmcgbGlnaHR3ZWlnaHQgdHVubmVsIGVuY2Fwc3VsYXRpb24gKExXVFVOTkVMX0VOQ0FQX0lQIGFuZCBMV1RVTk5FTF9FTkNBUF9JUDYpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHR1bm5lbCBvcHRpb24gcGFyc2luZyBhbmQgYm91bmRzIGNoZWNraW5nIG9uIHR1bm5lbCBzdGF0ZSBjcmVhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjM6MjYuNDIwNzY5NDE0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzEwODA3MDQ3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjI2LjQyMTI0MDg0NFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjgzMTA3NTk1MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXBfdHVuX2J1aWxkX3N0YXRlKClgIGFuZCBgaXA2X3R1bl9idWlsZF9zdGF0ZSgpYCB0byBpbml0aWFsaXplIGB0dW5faW5mby1cXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO2AgcHJpb3IgdG8gY2FsbGluZyBgaXBfdHVuX3NldF9vcHRzKClgLCByYXRoZXIgdGhhbiBhZnRlcndhcmRzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZmxleGlibGUgYXJyYXkgbWVtYmVyIGBpbmZvLVxcdTAwM2VvcHRpb25zYCAod2hpY2ggaXMgYW5ub3RhdGVkIHdpdGggYF9fY291bnRlZF9ieShvcHRpb25zX2xlbilgKSBoYXMgaXRzIGNvdW50ZXIgcG9wdWxhdGVkIGJlZm9yZSBhY2Nlc3MuXFxuXFxuUmVnYXJkaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbjpcXG4tIFRoZSBgc3RydWN0IGx3dHVubmVsX3N0YXRlYCBhbmQgaXRzIGVtYmVkZGVkIGBzdHJ1Y3QgaXBfdHVubmVsX2luZm9gIGFyZSBhbGxvY2F0ZWQgdmlhIGBsd3R1bm5lbF9zdGF0ZV9hbGxvYygpYCwgd2hpY2ggdXNlcyBga3phbGxvYygpYCB3aXRoIGBHRlBfQVRPTUlDYC4gQ29uc2VxdWVudGx5LCBhbGwgYWxsb2NhdGVkIGJ5dGVzIChpbmNsdWRpbmcgaGVhZGVycyBhbmQgdHJhaWxpbmcgb3B0aW9uIGJ1ZmZlcnMpIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGF0IGFsbG9jYXRpb24gdGltZS5cXG4tIE1vdmluZyB0aGUgYXNzaWdubWVudCBvZiBgb3B0aW9uc19sZW5gIGVhcmxpZXIgZG9lcyBub3QgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcvZmllbGRzIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIElmIGBpcF90dW5fc2V0X29wdHMoKWAgZmFpbHMsIHRoZSBzdGF0ZSBpcyBmcmVlZCBpbW1lZGlhdGVseS5cXG5cXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZCwgc3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50IHRvIHZhbGlkYXRlIHRoZXNlIGNoYW5nZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NTZmNWVmNGFmMjNjZDBkZGIyYjNhYzRlY2UxOTlhYTMzMjFmZmQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMDY6MjE6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jIGIvbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY1xuaW5kZXggNTE2OGQ1NDZlYTJmZC4uOGZiNDc0MmFjYTkyNSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNcbisrKyBiL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNcbkBAIC03MTEsNiArNzExLDcgQEAgc3RhdGljIGludCBpcF90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIFx0bmV3X3N0YXRlLVx1MDAzZXR5cGUgPSBMV1RVTk5FTF9FTkNBUF9JUDtcbiBcbiBcdHR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKG5ld19zdGF0ZSk7XG4rXHR0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XG4gXG4gXHRlcnIgPSBpcF90dW5fc2V0X29wdHModGJbTFdUVU5ORUxfSVBfT1BUU10sIHR1bl9pbmZvLCBleHRhY2spO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuQEAgLTc1Myw3ICs3NTQsNiBAQCBzdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gXHR9XG4gXG4gXHR0dW5faW5mby1cdTAwM2Vtb2RlID0gSVBfVFVOTkVMX0lORk9fVFg7XG4tXHR0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XG4gXG4gXHQqdHMgPSBuZXdfc3RhdGU7XG4gXG5AQCAtMTAwNSw2ICsxMDA1LDcgQEAgc3RhdGljIGludCBpcDZfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcbiBcdG5ld19zdGF0ZS1cdTAwM2V0eXBlID0gTFdUVU5ORUxfRU5DQVBfSVA2O1xuIFxuIFx0dHVuX2luZm8gPSBsd3RfdHVuX2luZm8obmV3X3N0YXRlKTtcbitcdHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcbiBcbiBcdGVyciA9IGlwX3R1bl9zZXRfb3B0cyh0YltMV1RVTk5FTF9JUDZfT1BUU10sIHR1bl9pbmZvLCBleHRhY2spO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuQEAgLTEwNDAsNyArMTA0MSw2IEBAIHN0YXRpYyBpbnQgaXA2X3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gXHR9XG4gXG4gXHR0dW5faW5mby1cdTAwM2Vtb2RlID0gSVBfVFVOTkVMX0lORk9fVFggfCBJUF9UVU5ORUxfSU5GT19JUFY2O1xuLVx0dHVuX2luZm8tXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO1xuIFxuIFx0KnRzID0gbmV3X3N0YXRlO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjM6MjYuNDIxMjQxODQ0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExNTY3MTA0MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCdzIGRpZyBpbi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZXZlbiBkb2luZy4gRnJvbSB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSBjaGFuZ2VzIGluIGBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGlwX3R1bl9idWlsZF9zdGF0ZWAgZnVuY3Rpb25zLCBib3RoIGZvciBJUHY0IGFuZCBJUHY2IHR1bm5lbHMuIFRoZSBtYWluIGFkZGl0aW9uIHNlZW1zIHRvIGJlIHRoZSBsaW5lIGB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW5gIGluc2VydGVkIGluIHR3byBwbGFjZXMuIEl0IGxvb2tzIGxpa2UgYG9wdGlvbnNfbGVuYCBpcyBiZWluZyBzZXQgZWFybGllci4gV2hhdCdzIGludGVyZXN0aW5nIGlzIHRoaXMgbGluZSBpcyAqcmVtb3ZlZCogZnJvbSB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbnMuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIHdoZXRoZXIgb3Igbm90IGl0IGludHJvZHVjZXMgYW55IG5ldyBtZW1vcnkgbWFuYWdlbWVudCB2dWxuZXJhYmlsaXRpZXMuIEZyb20gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBjaGFuZ2VzIGxpa2UgdGhlc2UsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byB0dW5uZWwgb3B0aW9ucyBhbmQgbGVuZ3RoIGNhbGN1bGF0aW9ucywgYXJlIHdoZXJlIHRoaW5ncyBjYW4gZ2V0IHRyaWNreS4gSSBrbm93IHRoYXQgdGhlIG5ldHdvcmtpbmcgc3RhY2sgY2FuIGJlIGEgZ29sZG1pbmUgb2YgdnVsbmVyYWJpbGl0aWVzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBibG9ja3MuIEknbSBnb2luZyB0byBxdWlja2x5IHJlYWQgdGhlIGNvZGUgZnJvbSBhcm91bmQgbGluZXMgNzAwLTc2MCBhbmQgOTkwLTEwNTAgaW4gYG5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBjb250ZXh0IG9uIHdoYXQgYGlwX3R1bl9idWlsZF9zdGF0ZWAgZG9lcyBhbmQgd2hhdCBgb3B0X2xlbmAgYW5kIGB0dW5faW5mb2AgcmVwcmVzZW50LiBJIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIHdoYXQgYGlwX3R1bl9zZXRfb3B0c2AgZG9lcywgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIHR1bm5lbCBvcHRpb25zIGFyZSBtYW5pcHVsYXRlZC5cblxuSSB3YW50IHRvIGtub3cgaG93IGBvcHRfbGVuYCBpcyBkZXJpdmVkLiBBcmUgd2UgZGVhbGluZyB3aXRoIHVzZXItY29udHJvbGxlZCBpbnB1dCBoZXJlPyBXaGF0IGtpbmQgb2YgZGF0YSBpcyBwYXNzZWQgaW4gYHRiW0xXVFVOTkVMX0lQX09QVFNdYD8gSWYgdGhlIGxlbmd0aCBpcyBtaXNjYWxjdWxhdGVkIG9yIG1pc2hhbmRsZWQsIHdlIG1pZ2h0IGhhdmUgYW4gaW5mb3JtYXRpb24gbGVhayBvciB3cml0ZSB2dWxuZXJhYmlsaXR5IGluIHRoZXNlIG9wdGlvbnMuXG5cbkFmdGVyIEkgdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCBJJ2xsIHRoZW4gY29uc2lkZXIgS01TQU4uIERvZXMgdGhpcyBwYXRjaCBjaGFuZ2UgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQsIGluaXRpYWxpemVkLCBvciBkZWFsbG9jYXRlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMgdGhhdCBLTVNBTiB3b3VsZCBiZSBnb29kIGF0IGNhdGNoaW5nPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNoYW5nZXMgaW4gbGVuZ3RoIGNhbGN1bGF0aW9ucywgcG90ZW50aWFsIG9mZi1ieS1vbmUgZXJyb3JzLCBvciBwbGFjZXMgd2hlcmUgdW5jaGVja2VkIHZhbHVlcyBhcmUgdXNlZCBhcyBhcnJheSBpbmRpY2VzIG9yIHNpemVzLiBCYXNlZCBvbiB0aGF0IGFuYWx5c2lzLCBJJ2xsIHJlY29tbWVuZCB3aGV0aGVyIGEgZGVkaWNhdGVkIGZ1enppbmcgc2Vzc2lvbiBpcyB0aGUgcmlnaHQgbW92ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzMCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjM3Ljk4ODM1MDUwNFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjYwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGx3dHVubmVsX3N0YXRlICoqdHMsXFxuIDY5MTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDY5MjpcXHR7XFxuIDY5MzpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltMV1RVTk5FTF9JUF9NQVggKyAxXTtcXG4gNjk0OlxcdFxcdHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbmV3X3N0YXRlO1xcbiA2OTU6XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbztcXG4gNjk2OlxcdFxcdGludCBlcnIsIG9wdF9sZW47XFxuIDY5NzpcXHRcXG4gNjk4OlxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgTFdUVU5ORUxfSVBfTUFYLCBhdHRyLFxcbiA2OTk6XFx0XFx0XFx0XFx0XFx0XFx0ICBpcF90dW5fcG9saWN5LCBleHRhY2spO1xcbiA3MDA6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDcwMTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3MDI6XFx0XFxuIDcwMzpcXHRcXHRvcHRfbGVuID0gaXBfdHVuX2dldF9vcHRsZW4odGJbTFdUVU5ORUxfSVBfT1BUU10sIGV4dGFjayk7XFxuIDcwNDpcXHRcXHRpZiAob3B0X2xlbiBcXHUwMDNjIDApXFxuIDcwNTpcXHRcXHRcXHRyZXR1cm4gb3B0X2xlbjtcXG4gNzA2OlxcdFxcbiA3MDc6XFx0XFx0bmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCp0dW5faW5mbykgKyBvcHRfbGVuKTtcXG4gNzA4OlxcdFxcdGlmICghbmV3X3N0YXRlKVxcbiA3MDk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDcxMDpcXHRcXG4gNzExOlxcdFxcdG5ld19zdGF0ZS1cXHUwMDNldHlwZSA9IExXVFVOTkVMX0VOQ0FQX0lQO1xcbiA3MTI6XFx0XFxuIDcxMzpcXHRcXHR0dW5faW5mbyA9IGx3dF90dW5faW5mbyhuZXdfc3RhdGUpO1xcbiA3MTQ6XFx0XFx0dHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtcXG4gNzE1OlxcdFxcbiA3MTY6XFx0XFx0ZXJyID0gaXBfdHVuX3NldF9vcHRzKHRiW0xXVFVOTkVMX0lQX09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTtcXG4gNzE3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIDcxODpcXHRcXHRcXHRsd3RzdGF0ZV9mcmVlKG5ld19zdGF0ZSk7XFxuIDcxOTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3MjA6XFx0XFx0fVxcbiA3MjE6XFx0XFxuIDcyMjpcXHQjaWZkZWYgQ09ORklHX0RTVF9DQUNIRVxcbiA3MjM6XFx0XFx0ZXJyID0gZHN0X2NhY2hlX2luaXQoXFx1MDAyNnR1bl9pbmZvLVxcdTAwM2Vkc3RfY2FjaGUsIEdGUF9LRVJORUwpO1xcbiA3MjQ6XFx0XFx0aWYgKGVycikge1xcbiA3MjU6XFx0XFx0XFx0bHd0c3RhdGVfZnJlZShuZXdfc3RhdGUpO1xcbiA3MjY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzI3OlxcdFxcdH1cXG4gNzI4OlxcdCNlbmRpZlxcbiA3Mjk6XFx0XFxuIDczMDpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVBfSURdKVxcbiA3MzE6XFx0XFx0XFx0dHVuX2luZm8tXFx1MDAzZWtleS50dW5faWQgPSBubGFfZ2V0X2JlNjQodGJbTFdUVU5ORUxfSVBfSURdKTtcXG4gNzMyOlxcdFxcbiA3MzM6XFx0XFx0aWYgKHRiW0xXVFVOTkVMX0lQX0RTVF0pXFxuIDczNDpcXHRcXHRcXHR0dW5faW5mby1cXHUwMDNla2V5LnUuaXB2NC5kc3QgPSBubGFfZ2V0X2luX2FkZHIodGJbTFdUVU5ORUxfSVBfRFNUXSk7XFxuIDczNTpcXHRcXG4gNzM2OlxcdFxcdGlmICh0YltMV1RVTk5FTF9JUF9TUkNdKVxcbiA3Mzc6XFx0XFx0XFx0dHVuX2luZm8tXFx1MDAzZWtleS51LmlwdjQuc3JjID0gbmxhX2dldF9pbl9hZGRyKHRiW0xXVFVOTkVMX0lQX1NSQ10pO1xcbiA3Mzg6XFx0XFxuIDczOTpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVBfVFRMXSlcXG4gNzQwOlxcdFxcdFxcdHR1bl9pbmZvLVxcdTAwM2VrZXkudHRsID0gbmxhX2dldF91OCh0YltMV1RVTk5FTF9JUF9UVExdKTtcXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0aWYgKHRiW0xXVFVOTkVMX0lQX1RPU10pXFxuIDc0MzpcXHRcXHRcXHR0dW5faW5mby1cXHUwMDNla2V5LnRvcyA9IG5sYV9nZXRfdTgodGJbTFdUVU5ORUxfSVBfVE9TXSk7XFxuIDc0NDpcXHRcXG4gNzQ1OlxcdFxcdGlmICh0YltMV1RVTk5FTF9JUF9GTEFHU10pIHtcXG4gNzQ2OlxcdFxcdFxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcXG4gNzQ3OlxcdFxcbiA3NDg6XFx0XFx0XFx0aXBfdHVubmVsX2ZsYWdzX2Zyb21fYmUxNihmbGFncyxcXG4gNzQ5OlxcdFxcdFxcdFxcdFxcdFxcdCAgbmxhX2dldF9iZTE2KHRiW0xXVFVOTkVMX0lQX0ZMQUdTXSkpO1xcbiA3NTA6XFx0XFx0XFx0aXBfdHVubmVsX2NsZWFyX29wdGlvbnNfcHJlc2VudChmbGFncyk7XFxuIDc1MTpcXHRcXG4gNzUyOlxcdFxcdFxcdGlwX3R1bm5lbF9mbGFnc19vcih0dW5faW5mby1cXHUwMDNla2V5LnR1bl9mbGFncyxcXG4gNzUzOlxcdFxcdFxcdFxcdFxcdCAgIHR1bl9pbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzLCBmbGFncyk7XFxuIDc1NDpcXHRcXHR9XFxuIDc1NTpcXHRcXG4gNzU2OlxcdFxcdHR1bl9pbmZvLVxcdTAwM2Vtb2RlID0gSVBfVFVOTkVMX0lORk9fVFg7XFxuIDc1NzpcXHRcXG4gNzU4OlxcdFxcdCp0cyA9IG5ld19zdGF0ZTtcXG4gNzU5OlxcdFxcbiA3NjA6XFx0XFx0cmV0dXJuIDA7XFxuIDc2MTpcXHR9XFxuIDc2MjpcXHRcXG4gNzYzOlxcdHN0YXRpYyB2b2lkIGlwX3R1bl9kZXN0cm95X3N0YXRlKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpXFxuIDc2NDpcXHR7XFxuIDc2NTpcXHQjaWZkZWYgQ09ORklHX0RTVF9DQUNIRVxcbiA3NjY6XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyA9IGx3dF90dW5faW5mbyhsd3RzdGF0ZSk7XFxuIDc2NzpcXHRcXG4gNzY4OlxcdFxcdGRzdF9jYWNoZV9kZXN0cm95KFxcdTAwMjZ0dW5faW5mby1cXHUwMDNlZHN0X2NhY2hlKTtcXG4gNzY5OlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzozNy45ODg0ODM0ODRaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTc5OTU5MDA0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipJbnZlc3RpZ2F0aW5nIGBpcF90dW5fc2V0X29wdHNgIGFuZCBgbHd0dW5uZWxfc3RhdGVfYWxsb2NgKipcblxuUmlnaHQsIG15IGN1cmlvc2l0eSBpcyBwaXF1ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgaXBfdHVuX3NldF9vcHRzYCBhbmQgYGx3dHVubmVsX3N0YXRlX2FsbG9jYC4gSSBzdXNwZWN0IHRoZXkncmUgaW52b2x2ZWQgaW4gY29uZmlndXJpbmcgb3IgbWFuYWdpbmcgdGhlIHN0YXRlIG9mIExXVHVubmVscywgd2hpY2ggaXMgYSBjb21tb24gcGF0dGVybi4gVG8gZ2V0IGEgY2xlYXIgcGljdHVyZSwgSSBzaG91bGQgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGJvdGggZnVuY3Rpb25zLiBJ4oCZbGwgbG9vayBmb3IgdGhlaXIgZGVmaW5pdGlvbnMgYW5kLCBpbXBvcnRhbnRseSwgd2hlcmUgYW5kIGhvdyB0aGV5J3JlIGNhbGxlZC4gSeKAmW0gdGhpbmtpbmcgdGhlIHN0cnVjdHVyZSBzaG91bGQgYmUgZmFpcmx5IGludHVpdGl2ZSwgYnV0IGxldCdzIG5vdCBtYWtlIGFueSBhc3N1bXB0aW9ucyB5ZXQuIExldCB0aGUgY29kZSBzcGVhayBmb3IgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTYzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzozOS43ODgwNzY3MzdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDA3NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3R1bl9zZXRfb3B0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9Njc2PXN0YXRpYyBpbnQgaXBfdHVuX2dldF9vcHRsZW4oc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNjgxLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6NjgyOnN0YXRpYyBpbnQgaXBfdHVuX3NldF9vcHRzKHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyxcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTY4My1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTY4OD1zdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTcxNS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjcxNjpcXHRlcnIgPSBpcF90dW5fc2V0X29wdHModGJbTFdUVU5ORUxfSVBfT1BUU10sIHR1bl9pbmZvLCBleHRhY2spO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNzE3LVxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTk4Mj1zdGF0aWMgaW50IGlwNl90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMDA5LVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6MTAxMDpcXHRlcnIgPSBpcF90dW5fc2V0X29wdHModGJbTFdUVU5ORUxfSVA2X09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTtcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTEwMTEtXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjM6MzkuODM4MDk0ODk2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMyNDI2NzgyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgc2VjdGlvbiBvZiBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AsIGFzIHRob3VnaCBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkIGFuZCB3b3JraW5nIHdpdGggdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIElQIFR1bm5lbCBDb3JlIC0gTGluZXMgNjAwLTY4NSoqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDYwMCB0aHJvdWdoIDY4NSBpbiBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2AuIEkga25vdyB0aGlzIGFyZWEgZmFpcmx5IHdlbGwsIHNvIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhYm91dCB0aGUgY29yZSBtZWNoYW5pc21zIGZvciBJUC1pbi1JUCB0dW5uZWxzIOKAkyB0aGUgaGVhcnQgb2YgZW5jYXBzdWxhdGluZyBhbmQgZGVjYXBzdWxhdGluZyBJUCBwYWNrZXRzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgcmFuZ2UgcHJvYmFibHkgaW52b2x2ZXMgdGhlIGhhbmRsaW5nIG9mIHNwZWNpZmljIHR1bm5lbCB0eXBlcywgb3IgcGVyaGFwcyBzb21lIGNvbW1vbiBoZWxwZXIgZnVuY3Rpb25zIHV0aWxpemVkIGFjcm9zcyBkaWZmZXJlbnQgdHVubmVsIGltcGxlbWVudGF0aW9ucy4gSSdtIGhvcGluZyB0byBzZWUgaG93IHRoZSBjb2RlIGhhbmRsZXMgdGhlIGRldGFpbHMgcmVsYXRlZCB0byBzZXR0aW5nIHVwIGFuZCB0ZWFyaW5nIGRvd24gdGhlIHR1bm5lbCBpbnRlcmZhY2VzIGFuZCBkZWFsaW5nIHdpdGggdGhlIGlubmVyIElQIGhlYWRlciBtYW5pcHVsYXRpb24uIEFyZSB3ZSBkZWFsaW5nIHdpdGggdGhlIGNvbW1vbiB0dW5uZWwgdHlwZT9cblxuSSdtIGJldHRpbmcgdGhpcyBpcyBnb2luZyB0byBpbmNsdWRlIGNoZWNraW5nIHRoZSB2YWxpZGl0eSBvZiB0aGUgSVAgaGVhZGVyIGluIHRoZSB0dW5uZWwsIGhhbmRsaW5nIHRoZSBjaGVja3N1bSBjYWxjdWxhdGlvbiAob3Igc2tpcHBpbmcgaXQsIGRlcGVuZGluZyBvbiB0aGUgdHVubmVsIHR5cGUpLiBJJ2xsIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZSBmbG93IGxhYmVsIGFuZCBUT1MgYml0cy4gSXMgdGhlIGlubmVyIFRPUyBwcmVzZXJ2ZWQ/IFdoYXQgYXJlIHRoZSBwb2xpY3kgY2hvaWNlcyBpbiB0aGUgcGFja2V0IHByb2Nlc3Npbmcgd2l0aCByZXNwZWN0IHRvIHRoZSBEU0NQIHZhbHVlcyBmcm9tIHRoZSBvdXRlciBoZWFkZXI/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSB0dW5uZWwgY2FuIGJlIHVzZWQgaW4gYSBwcm9kdWN0aW9uIGVudmlyb25tZW50LlxuXG5JIGV4cGVjdCB0byBzZWUgc29tZSBlcnJvciBjaGVja2luZyBpbiB0aGVyZSB0b28uIFdoYXQgaGFwcGVucyBpZiB0aGUgaW5uZXIgcGFja2V0IGlzIG1hbGZvcm1lZD8gSG93IGRvZXMgdGhlIGtlcm5lbCByZXNwb25kIHRvIGFuIElQIGZyYWdtZW50IGluIHRoZSB0dW5uZWw/IElzIHRoZSBwYWNrZXQgZHJvcHBlZCwgb3IgaXMgZnJhZ21lbnRhdGlvbiBoYW5kbGVkIHdpdGhpbiB0aGUgdHVubmVsPyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBlcnJvciBwYXRocywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBtZW1vcnkgYWxsb2NhdGlvbiBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJdCB3aWxsIGFsc28gYmUgaW1wb3J0YW50IHRvIHNlZSBob3cgdGhlIGNvZGUgbWFuYWdlcyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcm91dGluZyB0YWJsZS4gSXMgdGhlcmUgYW55IGhhbmRsaW5nIG9mIHJvdXRlIGxvb2t1cHMsIG9yIGRvZXMgdGhlIHR1bm5lbCByZWx5IHNvbGVseSBvbiBjb25maWd1cmVkIHJvdXRlcz8gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgc2VjdGlvbiBoYW5kbGVzIHRoZSBpbmdyZXNzIGFuZCBlZ3Jlc3Mgb2YgdGhlIHR1bm5lbGxlZCB0cmFmZmljLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYzMSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjQzLjA4MDc3NTY3MloiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MzA6XFx0XFx0XFx0XFx0ICAgaXBfb3B0c19wb2xpY3ksIGV4dGFjayk7XFxuIDYzMTpcXHRcXHRpZiAoZXJyKVxcbiA2MzI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNjMzOlxcdFxcbiA2MzQ6XFx0XFx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBubGFfZGF0YShhdHRyKSwgbmxhX2xlbihhdHRyKSwgcmVtKSB7XFxuIDYzNTpcXHRcXHRcXHRzd2l0Y2ggKG5sYV90eXBlKG5sYSkpIHtcXG4gNjM2OlxcdFxcdFxcdGNhc2UgTFdUVU5ORUxfSVBfT1BUU19HRU5FVkU6XFxuIDYzNzpcXHRcXHRcXHRcXHRpZiAodHlwZSBcXHUwMDI2XFx1MDAyNiB0eXBlICE9IElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVClcXG4gNjM4OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA2Mzk6XFx0XFx0XFx0XFx0b3B0X2xlbiA9IGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZShubGEsIGluZm8sIG9wdHNfbGVuLFxcbiA2NDA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZXh0YWNrKTtcXG4gNjQxOlxcdFxcdFxcdFxcdGlmIChvcHRfbGVuIFxcdTAwM2MgMClcXG4gNjQyOlxcdFxcdFxcdFxcdFxcdHJldHVybiBvcHRfbGVuO1xcbiA2NDM6XFx0XFx0XFx0XFx0b3B0c19sZW4gKz0gb3B0X2xlbjtcXG4gNjQ0OlxcdFxcdFxcdFxcdGlmIChvcHRzX2xlbiBcXHUwMDNlIElQX1RVTk5FTF9PUFRTX01BWClcXG4gNjQ1OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA2NDY6XFx0XFx0XFx0XFx0dHlwZSA9IElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVDtcXG4gNjQ3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA2NDg6XFx0XFx0XFx0Y2FzZSBMV1RVTk5FTF9JUF9PUFRTX1ZYTEFOOlxcbiA2NDk6XFx0XFx0XFx0XFx0aWYgKHR5cGUpXFxuIDY1MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjUxOlxcdFxcdFxcdFxcdG9wdF9sZW4gPSBpcF90dW5fcGFyc2Vfb3B0c192eGxhbihubGEsIGluZm8sIG9wdHNfbGVuLFxcbiA2NTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBleHRhY2spO1xcbiA2NTM6XFx0XFx0XFx0XFx0aWYgKG9wdF9sZW4gXFx1MDAzYyAwKVxcbiA2NTQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG9wdF9sZW47XFxuIDY1NTpcXHRcXHRcXHRcXHRvcHRzX2xlbiArPSBvcHRfbGVuO1xcbiA2NTY6XFx0XFx0XFx0XFx0dHlwZSA9IElQX1RVTk5FTF9WWExBTl9PUFRfQklUO1xcbiA2NTc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDY1ODpcXHRcXHRcXHRjYXNlIExXVFVOTkVMX0lQX09QVFNfRVJTUEFOOlxcbiA2NTk6XFx0XFx0XFx0XFx0aWYgKHR5cGUpXFxuIDY2MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjYxOlxcdFxcdFxcdFxcdG9wdF9sZW4gPSBpcF90dW5fcGFyc2Vfb3B0c19lcnNwYW4obmxhLCBpbmZvLCBvcHRzX2xlbixcXG4gNjYyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGV4dGFjayk7XFxuIDY2MzpcXHRcXHRcXHRcXHRpZiAob3B0X2xlbiBcXHUwMDNjIDApXFxuIDY2NDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gb3B0X2xlbjtcXG4gNjY1OlxcdFxcdFxcdFxcdG9wdHNfbGVuICs9IG9wdF9sZW47XFxuIDY2NjpcXHRcXHRcXHRcXHR0eXBlID0gSVBfVFVOTkVMX0VSU1BBTl9PUFRfQklUO1xcbiA2Njc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDY2ODpcXHRcXHRcXHRkZWZhdWx0OlxcbiA2Njk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDY3MDpcXHRcXHRcXHR9XFxuIDY3MTpcXHRcXHR9XFxuIDY3MjpcXHRcXG4gNjczOlxcdFxcdHJldHVybiBvcHRzX2xlbjtcXG4gNjc0OlxcdH1cXG4gNjc1OlxcdFxcbiA2NzY6XFx0c3RhdGljIGludCBpcF90dW5fZ2V0X29wdGxlbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbiA2Nzc6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDY3ODpcXHR7XFxuIDY3OTpcXHRcXHRyZXR1cm4gaXBfdHVuX3BhcnNlX29wdHMoYXR0ciwgTlVMTCwgZXh0YWNrKTtcXG4gNjgwOlxcdH1cXG4gNjgxOlxcdFxcbiA2ODI6XFx0c3RhdGljIGludCBpcF90dW5fc2V0X29wdHMoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxcbiA2ODM6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA2ODQ6XFx0e1xcbiA2ODU6XFx0XFx0cmV0dXJuIGlwX3R1bl9wYXJzZV9vcHRzKGF0dHIsIGluZm8sIGV4dGFjayk7XFxuIDY4NjpcXHR9XFxuIDY4NzpcXHRcXG4gNjg4OlxcdHN0YXRpYyBpbnQgaXBfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gNjg5OlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBmYW1pbHksIGNvbnN0IHZvaWQgKmNmZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjM6NDMuMDgwODg3MjIzWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1OTU3OTIwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kLCBkZWxpdmVyZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUCBUdW5uZWwgQ29yZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBqdW1wIGJhY2sgaW50byB0aGUgZ3V0cyBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4gTGV0J3MgZm9jdXMgb24gYSBzcGVjaWZpYyBhcmVhLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jYCBmaWxlLiBJJ20gemVyb2luZyBpbiBvbiBsaW5lcyA1NTAgdG8gNjMwLiBUaGlzIHNlY3Rpb24gbGlrZWx5IGhhbmRsZXMgc29tZSBjcml0aWNhbCBhc3BlY3Qgb2YgSVAgdHVubmVsaW5nIGZ1bmN0aW9uYWxpdHksIGFuZCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcy4gQ291bGQgYmUgcmVsYXRlZCB0byBlbmNhcHN1bGF0aW9uLCBkZWNhcHN1bGF0aW9uLCBoZWFkZXIgbWFuaXB1bGF0aW9uLCBvciBwZXJoYXBzIHNvbWUga2luZCBvZiBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIHR1bm5lbCBvcGVyYXRpb25zLiBJdCBtaWdodCBiZSBkZWFsaW5nIHdpdGggYSBwYXJ0aWN1bGFyIHR1bm5lbCB0eXBlIG9yIGEgc3BlY2lmaWMgc2NlbmFyaW8gcmVsYXRlZCB0byBmcmFnbWVudGF0aW9uLCByb3V0aW5nLCBvciBldmVuIG11bHRpY2FzdC4gSSdsbCBuZWVkIHRvIGRpZyBpbiB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGFyZSBoaWRpbmcgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwOTYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjQ1LjY3NjY4MzEwNVoiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NTA6XFx0XFx0XFx0XFx0ICAgICAgIHZ4bGFuX29wdF9wb2xpY3ksIGV4dGFjayk7XFxuIDU1MTpcXHRcXHRpZiAoZXJyKVxcbiA1NTI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTUzOlxcdFxcbiA1NTQ6XFx0XFx0aWYgKCF0YltMV1RVTk5FTF9JUF9PUFRfVlhMQU5fR0JQXSlcXG4gNTU1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1NTY6XFx0XFxuIDU1NzpcXHRcXHRpZiAoaW5mbykge1xcbiA1NTg6XFx0XFx0XFx0c3RydWN0IHZ4bGFuX21ldGFkYXRhICptZCA9XFxuIDU1OTpcXHRcXHRcXHRcXHRpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pICsgb3B0c19sZW47XFxuIDU2MDpcXHRcXG4gNTYxOlxcdFxcdFxcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfVlhMQU5fR0JQXTtcXG4gNTYyOlxcdFxcdFxcdG1kLVxcdTAwM2VnYnAgPSBubGFfZ2V0X3UzMihhdHRyKTtcXG4gNTYzOlxcdFxcdFxcdG1kLVxcdTAwM2VnYnAgXFx1MDAyNj0gVlhMQU5fR0JQX01BU0s7XFxuIDU2NDpcXHRcXHRcXHRfX3NldF9iaXQoSVBfVFVOTkVMX1ZYTEFOX09QVF9CSVQsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpO1xcbiA1NjU6XFx0XFx0fVxcbiA1NjY6XFx0XFxuIDU2NzpcXHRcXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCB2eGxhbl9tZXRhZGF0YSk7XFxuIDU2ODpcXHR9XFxuIDU2OTpcXHRcXG4gNTcwOlxcdHN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfZXJzcGFuKHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuIDU3MTpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLCBpbnQgb3B0c19sZW4sXFxuIDU3MjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA1NzM6XFx0e1xcbiA1NzQ6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9NQVggKyAxXTtcXG4gNTc1OlxcdFxcdGludCBlcnI7XFxuIDU3NjpcXHRcXHR1OCB2ZXI7XFxuIDU3NzpcXHRcXG4gNTc4OlxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIExXVFVOTkVMX0lQX09QVF9FUlNQQU5fTUFYLCBhdHRyLFxcbiA1Nzk6XFx0XFx0XFx0XFx0ICAgICAgIGVyc3Bhbl9vcHRfcG9saWN5LCBleHRhY2spO1xcbiA1ODA6XFx0XFx0aWYgKGVycilcXG4gNTgxOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDU4MjpcXHRcXG4gNTgzOlxcdFxcdGlmICghdGJbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9WRVJdKVxcbiA1ODQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU4NTpcXHRcXG4gNTg2OlxcdFxcdHZlciA9IG5sYV9nZXRfdTgodGJbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9WRVJdKTtcXG4gNTg3OlxcdFxcdGlmICh2ZXIgPT0gMSkge1xcbiA1ODg6XFx0XFx0XFx0aWYgKCF0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0lOREVYXSlcXG4gNTg5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1OTA6XFx0XFx0fSBlbHNlIGlmICh2ZXIgPT0gMikge1xcbiA1OTE6XFx0XFx0XFx0aWYgKCF0YltMV1RVTk5FTF9JUF9PUFRfRVJTUEFOX0RJUl0gfHxcXG4gNTkyOlxcdFxcdFxcdCAgICAhdGJbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9IV0lEXSlcXG4gNTkzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1OTQ6XFx0XFx0fSBlbHNlIHtcXG4gNTk1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1OTY6XFx0XFx0fVxcbiA1OTc6XFx0XFxuIDU5ODpcXHRcXHRpZiAoaW5mbykge1xcbiA1OTk6XFx0XFx0XFx0c3RydWN0IGVyc3Bhbl9tZXRhZGF0YSAqbWQgPVxcbiA2MDA6XFx0XFx0XFx0XFx0aXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSArIG9wdHNfbGVuO1xcbiA2MDE6XFx0XFxuIDYwMjpcXHRcXHRcXHRtZC1cXHUwMDNldmVyc2lvbiA9IHZlcjtcXG4gNjAzOlxcdFxcdFxcdGlmICh2ZXIgPT0gMSkge1xcbiA2MDQ6XFx0XFx0XFx0XFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fSU5ERVhdO1xcbiA2MDU6XFx0XFx0XFx0XFx0bWQtXFx1MDAzZXUuaW5kZXggPSBubGFfZ2V0X2JlMzIoYXR0cik7XFxuIDYwNjpcXHRcXHRcXHR9IGVsc2Uge1xcbiA2MDc6XFx0XFx0XFx0XFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fRElSXTtcXG4gNjA4OlxcdFxcdFxcdFxcdG1kLVxcdTAwM2V1Lm1kMi5kaXIgPSBubGFfZ2V0X3U4KGF0dHIpO1xcbiA2MDk6XFx0XFx0XFx0XFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9FUlNQQU5fSFdJRF07XFxuIDYxMDpcXHRcXHRcXHRcXHRzZXRfaHdpZChcXHUwMDI2bWQtXFx1MDAzZXUubWQyLCBubGFfZ2V0X3U4KGF0dHIpKTtcXG4gNjExOlxcdFxcdFxcdH1cXG4gNjEyOlxcdFxcbiA2MTM6XFx0XFx0XFx0X19zZXRfYml0KElQX1RVTk5FTF9FUlNQQU5fT1BUX0JJVCwgaW5mby1cXHUwMDNla2V5LnR1bl9mbGFncyk7XFxuIDYxNDpcXHRcXHR9XFxuIDYxNTpcXHRcXG4gNjE2OlxcdFxcdHJldHVybiBzaXplb2Yoc3RydWN0IGVyc3Bhbl9tZXRhZGF0YSk7XFxuIDYxNzpcXHR9XFxuIDYxODpcXHRcXG4gNjE5OlxcdHN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHMoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxcbiA2MjA6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDYyMTpcXHR7XFxuIDYyMjpcXHRcXHRpbnQgZXJyLCByZW0sIG9wdF9sZW4sIG9wdHNfbGVuID0gMDtcXG4gNjIzOlxcdFxcdHN0cnVjdCBubGF0dHIgKm5sYTtcXG4gNjI0OlxcdFxcdHUzMiB0eXBlID0gMDtcXG4gNjI1OlxcdFxcbiA2MjY6XFx0XFx0aWYgKCFhdHRyKVxcbiA2Mjc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDYyODpcXHRcXG4gNjI5OlxcdFxcdGVyciA9IG5sYV92YWxpZGF0ZShubGFfZGF0YShhdHRyKSwgbmxhX2xlbihhdHRyKSwgTFdUVU5ORUxfSVBfT1BUU19NQVgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjQ1LjY3NjgxNzE5NVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTcwMzU5OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaXBfdHVuX3BhcnNlX29wdHNfZ2VuZXZlYCBmdW5jdGlvbi4gSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gbGluZXMgNTAwIHRocm91Z2ggNTUwLCB0byBnZXQgYSBzZW5zZSBvZiBob3cgR2VuZXZlIG9wdGlvbnMgYXJlIGJlaW5nIHBhcnNlZCwgc3BlY2lmaWNhbGx5IHRoZSBzdHJ1Y3R1cmUsIHRoZSB3YXkgdGhleSBkZWFsIHdpdGggbGVuZ3RoIGZpZWxkcywgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciB2dWxuZXJhYmlsaXRpZXMuIEkgd2FudCB0byBzZWUgaWYgdGhleSBhcmUgZG9pbmcgYSBwcm9wZXIgdmFsaWRhdGlvbiBvbiB0aGUgaW5jb21pbmcgZGF0YSwgaG93IHRoZXkgY2hlY2sgZm9yIHBvdGVudGlhbCBvdmVyZmxvd3MsIGFuZCB3aGF0IHRoZSBsb2dpYyBpcyB3aGVuIHRoZSBvcHRpb24gdHlwZSBpcyBub3Qgc29tZXRoaW5nIHRoYXQgaXMgZXhwbGljaXRseSByZWNvZ25pc2VkLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhleSdyZSBoYW5kbGluZyB2YXJpYWJsZS1sZW5ndGggb3B0aW9ucyBjb3JyZWN0bHksIHNpbmNlIEdlbmV2ZSBvcHRpb25zIGNhbiBiZSBxdWl0ZSBmbGV4aWJsZS4gSSBhbnRpY2lwYXRlIHNlZWluZyBiaXR3aXNlIG9wZXJhdGlvbnMgYW5kIHBvdGVudGlhbGx5IHNvbWUgcG9pbnRlciBhcml0aG1ldGljIGluIHRoaXMgc2VjdGlvbiDigJMgaXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIGFyZSBiZWluZyB1c2VkIHRvIG5hdmlnYXRlIHRoZSBvcHRpb24gZGF0YS4gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NTIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjQ3LjY0NzE3OTU1NVoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXHRbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9JTkRFWF1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuIDUwMTpcXHRcXHRbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9ESVJdXFx0PSB7IC50eXBlID0gTkxBX1U4IH0sXFxuIDUwMjpcXHRcXHRbTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9IV0lEXVxcdD0geyAudHlwZSA9IE5MQV9VOCB9LFxcbiA1MDM6XFx0fTtcXG4gNTA0OlxcdFxcbiA1MDU6XFx0c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0c19nZW5ldmUoc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gNTA2OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sIGludCBvcHRzX2xlbixcXG4gNTA3OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDUwODpcXHR7XFxuIDUwOTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX01BWCArIDFdO1xcbiA1MTA6XFx0XFx0aW50IGRhdGFfbGVuLCBlcnI7XFxuIDUxMTpcXHRcXG4gNTEyOlxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIExXVFVOTkVMX0lQX09QVF9HRU5FVkVfTUFYLCBhdHRyLFxcbiA1MTM6XFx0XFx0XFx0XFx0ICAgICAgIGdlbmV2ZV9vcHRfcG9saWN5LCBleHRhY2spO1xcbiA1MTQ6XFx0XFx0aWYgKGVycilcXG4gNTE1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDUxNjpcXHRcXG4gNTE3OlxcdFxcdGlmICghdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9DTEFTU10gfHxcXG4gNTE4OlxcdFxcdCAgICAhdGJbTFdUVU5ORUxfSVBfT1BUX0dFTkVWRV9UWVBFXSB8fFxcbiA1MTk6XFx0XFx0ICAgICF0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX0RBVEFdKVxcbiA1MjA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUyMTpcXHRcXG4gNTIyOlxcdFxcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX0RBVEFdO1xcbiA1MjM6XFx0XFx0ZGF0YV9sZW4gPSBubGFfbGVuKGF0dHIpO1xcbiA1MjQ6XFx0XFx0aWYgKGRhdGFfbGVuICUgNClcXG4gNTI1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MjY6XFx0XFxuIDUyNzpcXHRcXHRpZiAoaW5mbykge1xcbiA1Mjg6XFx0XFx0XFx0c3RydWN0IGdlbmV2ZV9vcHQgKm9wdCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgKyBvcHRzX2xlbjtcXG4gNTI5OlxcdFxcbiA1MzA6XFx0XFx0XFx0bWVtY3B5KG9wdC1cXHUwMDNlb3B0X2RhdGEsIG5sYV9kYXRhKGF0dHIpLCBkYXRhX2xlbik7XFxuIDUzMTpcXHRcXHRcXHRvcHQtXFx1MDAzZWxlbmd0aCA9IGRhdGFfbGVuIC8gNDtcXG4gNTMyOlxcdFxcdFxcdGF0dHIgPSB0YltMV1RVTk5FTF9JUF9PUFRfR0VORVZFX0NMQVNTXTtcXG4gNTMzOlxcdFxcdFxcdG9wdC1cXHUwMDNlb3B0X2NsYXNzID0gbmxhX2dldF9iZTE2KGF0dHIpO1xcbiA1MzQ6XFx0XFx0XFx0YXR0ciA9IHRiW0xXVFVOTkVMX0lQX09QVF9HRU5FVkVfVFlQRV07XFxuIDUzNTpcXHRcXHRcXHRvcHQtXFx1MDAzZXR5cGUgPSBubGFfZ2V0X3U4KGF0dHIpO1xcbiA1MzY6XFx0XFx0XFx0X19zZXRfYml0KElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVCwgaW5mby1cXHUwMDNla2V5LnR1bl9mbGFncyk7XFxuIDUzNzpcXHRcXHR9XFxuIDUzODpcXHRcXG4gNTM5OlxcdFxcdHJldHVybiBzaXplb2Yoc3RydWN0IGdlbmV2ZV9vcHQpICsgZGF0YV9sZW47XFxuIDU0MDpcXHR9XFxuIDU0MTpcXHRcXG4gNTQyOlxcdHN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfdnhsYW4oc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gNTQzOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbywgaW50IG9wdHNfbGVuLFxcbiA1NDQ6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA1NDU6XFx0e1xcbiA1NDY6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbTFdUVU5ORUxfSVBfT1BUX1ZYTEFOX01BWCArIDFdO1xcbiA1NDc6XFx0XFx0aW50IGVycjtcXG4gNTQ4OlxcdFxcbiA1NDk6XFx0XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTFdUVU5ORUxfSVBfT1BUX1ZYTEFOX01BWCwgYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjM6NDcuNjQ3Mjc1OTI1WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwNTAxNjMwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuYCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbmAgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZCB3aXRoaW4gdGhpcyBjb2RlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgY3JpdGljYWwuIExldCBtZSBtZW50YWxseSBydW4gdGhyb3VnaCB0aGUgcmVsYXRlZCBjb2RlIHN0cnVjdHVyZS4uLiByaWdodCwgdGhhdCB2YXJpYWJsZSBpcyBwYXJ0IG9mIHRoZSBgdHVuX2luZm9gIHN0cnVjdHVyZSwgYW5kIHRoYXQncyB1c2VkIGZvciBJUCB0dW5uZWxzLiBPa2F5LCBsZXQncyBzdGFydCB3aXRoIGEgZm9jdXNlZCBzZWFyY2guIEknbSBnb2luZyB0byBzY2FuIHRoZSBjb2RlYmFzZSBmb3IgaW5zdGFuY2VzIG9mIGBvcHRpb25zX2xlbmAgc3BlY2lmaWNhbGx5LCBidXQgSSdsbCBuYXJyb3cgdGhlIGZvY3VzIGJ5IGxvb2tpbmcgd2l0aGluIGNvbnRleHRzIHRoYXQgd291bGQgbWFrZSBzZW5zZTogcGVyaGFwcyBhcm91bmQgdGhlIGBpcF90dW5uZWxfaW5mb19vcHRzYCBzdHJ1Y3R1cmUsIG9yLCBjcml0aWNhbGx5LCB3aXRoaW4gYGlwX3R1bm5lbF9jb3JlLmNgLiBMZXQncyBzZWUgd2hhdCB0aGF0IHNlYXJjaCByZXZlYWxzLiBUaGlzIG5lZWRzIHRvIGJlIHByZWNpc2U7IEkgbmVlZCB0byBmb2xsb3cgdGhlIGRhdGEgYW5kIHVuZGVyc3RhbmQgaXRzIHByb2Nlc3NpbmcgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg5MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjM6NDkuNjk3NDQyMjYzWiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY1OTAwMzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3R1bm5lbF9pbmZvX29wdHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jPTU5Nz1ib29sIG1seDVlX3RjX3R1bl9lbmNhcF9pbmZvX2VxdWFsX29wdGlvbnMoc3RydWN0IG1seDVlX2VuY2FwX2tleSAqYSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYy02MjItXFx0cmV0dXJuIGFfaW5mby1cXHUwMDNlb3B0aW9uc19sZW4gPT0gYl9pbmZvLVxcdTAwM2VvcHRpb25zX2xlbiBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYzo2MjM6XFx0ICAgICAgICFtZW1jbXAoaXBfdHVubmVsX2luZm9fb3B0cyhhX2luZm8pLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYzo2MjQ6XFx0XFx0ICAgICAgIGlwX3R1bm5lbF9pbmZvX29wdHMoYl9pbmZvKSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmMtNjI1LVxcdFxcdCAgICAgICBhX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZ2VuZXZlLmM9OTI9c3RhdGljIGludCBtbHg1ZV9nZW5faXBfdHVubmVsX2hlYWRlcl9nZW5ldmUoY2hhciBidWZbXSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZ2VuZXZlLmMtMTE3LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2dlbmV2ZS5jOjExODpcXHRcXHRpcF90dW5uZWxfaW5mb19vcHRzX2dldChnZW5ldmVoLVxcdTAwM2VvcHRpb25zLCB0dW5faW5mbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9nZW5ldmUuYy0xMTktXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl92eGxhbi5jPTgzPXN0YXRpYyBpbnQgbWx4NWVfZ2VuX2lwX3R1bm5lbF9oZWFkZXJfdnhsYW4oY2hhciBidWZbXSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fdnhsYW4uYy0xMDItXFx0aWYgKHRlc3RfYml0KElQX1RVTk5FTF9WWExBTl9PUFRfQklULCB0dW5fa2V5LVxcdTAwM2V0dW5fZmxhZ3MpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl92eGxhbi5jOjEwMzpcXHRcXHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoZS1cXHUwMDNldHVuX2luZm8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fdnhsYW4uYy0xMDQtXFx0XFx0dnhsYW5fYnVpbGRfZ2JwX2hkcih2eGgsIG1kKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jPTU2MTY9c3RhdGljIGJvb2wgbWx4NWVfdGNfcmVzdG9yZV90dW5uZWwoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01Njk0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jOjU2OTU6XFx0XFx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoXFx1MDAyNnR1bl9kc3QtXFx1MDAzZXUudHVuX2luZm8sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTY5Ni1cXHRcXHRcXHRcXHRcXHRlbmNfb3B0cy5rZXkuZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2FjdGlvbi5jPTMzMD1uZnBfZmxfcHVzaF9nZW5ldmVfb3B0aW9ucyhzdHJ1Y3QgbmZwX2ZsX3BheWxvYWQgKm5mcF9mbCwgaW50ICpsaXN0X2xlbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2FjdGlvbi5jLTMzNS1cXHRpbnQgb3B0X2xlbiwgb3B0X2NudCwgYWN0X3N0YXJ0LCB0b3RfcHVzaF9sZW47XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmM6MzM2OlxcdHU4ICpzcmMgPSBpcF90dW5uZWxfaW5mb19vcHRzKGlwX3R1bik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmMtMzM3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmMtMzcyLVxcdCpsaXN0X2xlbiArPSB0b3RfcHVzaF9sZW47XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvYWN0aW9uLmM6MzczOlxcdHNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaXBfdHVuKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9hY3Rpb24uYy0zNzQtXFx0d2hpbGUgKG9wdF9jbnQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI3NT1zdGF0aWMgdm9pZCBnZW5ldmVfcngoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgc3RydWN0IGdlbmV2ZV9zb2NrICpncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI5OS1cXHRcXHRfX3NldF9iaXQoSVBfVFVOTkVMX0dFTkVWRV9PUFRfQklULCBmbGFncyk7XFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MzAwOlxcdFxcdGlwX3R1bm5lbF9pbmZvX29wdHNfc2V0KFxcdTAwMjZ0dW5fZHN0LVxcdTAwM2V1LnR1bl9pbmZvLFxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTMwMS1cXHRcXHRcXHRcXHRcXHRnbnZoLVxcdTAwM2VvcHRpb25zLCBnbnZoLVxcdTAwM2VvcHRfbGVuICogNCxcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTEyMjk9c3RhdGljIHZvaWQgZ2VuZXZlX2J1aWxkX2hlYWRlcihzdHJ1Y3QgZ2VuZXZlaGRyICpnZW5ldmVoLFxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTI0My1cXHRpZiAodGVzdF9iaXQoSVBfVFVOTkVMX0dFTkVWRV9PUFRfQklULCBpbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzKSlcXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxMjQ0OlxcdFxcdGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KGdlbmV2ZWgtXFx1MDAzZW9wdGlvbnMsIGluZm8pO1xcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTEyNDUtfVxcbi0tXFxuZHJpdmVycy9uZXQvcGZjcC5jPTUyPXN0YXRpYyBpbnQgcGZjcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3BmY3AuYy03NC1cXG5kcml2ZXJzL25ldC9wZmNwLmM6NzU6XFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKFxcdTAwMjZ0dW5fZHN0LVxcdTAwM2V1LnR1bl9pbmZvKTtcXG5kcml2ZXJzL25ldC9wZmNwLmMtNzYtXFx0aWYgKHVubGlrZWx5KCFtZCkpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTY1Nz1zdGF0aWMgaW50IHZ4bGFuX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTc0Ny1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTc0ODpcXHRcXHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoXFx1MDAyNnR1bl9kc3QtXFx1MDAzZXUudHVuX2luZm8pO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNzQ5LVxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTIzNzM9dm9pZCB2eGxhbl94bWl0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI0ODMtXFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyNDg0OlxcdFxcdFxcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjQ4NS1cXHRcXHR9XFxuLS1cXG5pbmNsdWRlL25ldC9kc3RfbWV0YWRhdGEuaD0xNTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YWRhdGFfZHN0ICp0dW5fZHN0X3VuY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L2RzdF9tZXRhZGF0YS5oLTE2OC1cXHRuZXdfbWQtXFx1MDAzZXUudHVuX2luZm8gPSBtZF9kc3QtXFx1MDAzZXUudHVuX2luZm87XFxuaW5jbHVkZS9uZXQvZHN0X21ldGFkYXRhLmg6MTY5OlxcdG1lbWNweShpcF90dW5uZWxfaW5mb19vcHRzKFxcdTAwMjZuZXdfbWQtXFx1MDAzZXUudHVuX2luZm8pLFxcbmluY2x1ZGUvbmV0L2RzdF9tZXRhZGF0YS5oOjE3MDpcXHQgICAgICAgaXBfdHVubmVsX2luZm9fb3B0cyhcXHUwMDI2bWRfZHN0LVxcdTAwM2V1LnR1bl9pbmZvKSwgbWRfc2l6ZSk7XFxuaW5jbHVkZS9uZXQvZHN0X21ldGFkYXRhLmgtMTcxLVxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTg5PXN0cnVjdCBpcF90dW5uZWxfZW5jYXAge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTEwNS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6MTA2OiNkZWZpbmUgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtMTA3LVxcdF9HZW5lcmljKGluZm8sXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTY3ND1zdGF0aWMgaW5saW5lIHZvaWQgaXB0dW5uZWxfeG1pdF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGt0X2xlbilcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03MTAtXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjcxMTpzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2luZm9fb3B0c19nZXQodm9pZCAqdG8sXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTcxMi1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTcxMy17XFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjcxNDpcXHRtZW1jcHkodG8sIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyksIGluZm8tXFx1MDAzZW9wdGlvbnNfbGVuKTtcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzE1LX1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzE2LVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDo3MTc6c3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9pbmZvX29wdHNfc2V0KHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyxcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzE4LVxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHZvaWQgKmZyb20sIGludCBsZW4sXFxuLS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzIyLVxcdGlmIChsZW4gXFx1MDAzZSAwKSB7XFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjcyMzpcXHRcXHRtZW1jcHkoaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSwgZnJvbSwgbGVuKTtcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzI0LVxcdFxcdGlwX3R1bm5lbF9mbGFnc19vcihpbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzLCBpbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzLFxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTc1OD1zdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX3VubmVlZF9tZXRhZGF0YSh2b2lkKVxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTc2MS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NzYyOnN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfaW5mb19vcHRzX2dldCh2b2lkICp0byxcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNzYzLVxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03NjYtXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjc2NzpzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2luZm9fb3B0c19zZXQoc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC03NjgtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgdm9pZCAqZnJvbSwgaW50IGxlbixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQ5ODM9QlBGX0NBTExfMyhicGZfc2tiX2dldF90dW5uZWxfb3B0LCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHU4ICosIHRvLCB1MzIsIHNpemUpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00OTk3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQ5OTg6XFx0aXBfdHVubmVsX2luZm9fb3B0c19nZXQodG8sIGluZm8pO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ5OTktXFx0aWYgKHNpemUgXFx1MDAzZSBpbmZvLVxcdTAwM2VvcHRpb25zX2xlbilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTUxMDA9QlBGX0NBTExfMyhicGZfc2tiX3NldF90dW5uZWxfb3B0LCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy01MTEyLVxcdGlwX3R1bm5lbF9zZXRfb3B0aW9uc19wcmVzZW50KHByZXNlbnQpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjUxMTM6XFx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoaW5mbywgZnJvbSwgc2l6ZSwgcHJlc2VudCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNTExNC1cXG4tLVxcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmM9MzY2PXNrYl9mbG93X2Rpc3NlY3RfdHVubmVsX2luZm8oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMtNDg0LVxcdFxcdGVuY19vcHQtXFx1MDAzZWxlbiA9IGluZm8tXFx1MDAzZW9wdGlvbnNfbGVuO1xcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmM6NDg1OlxcdFxcdGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KGVuY19vcHQtXFx1MDAzZWRhdGEsIGluZm8pO1xcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMtNDg2LVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MjY3PXN0YXRpYyBpbnQgZXJzcGFuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdG5sX3B0a19pbmZvICp0cGksXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0zNDQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHNpemVvZigqZXJzaGRyKSk7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MzQ1OlxcdFxcdFxcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhcXHUwMDI2dHVuX2RzdC1cXHUwMDNldS50dW5faW5mbyk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMzQ2LVxcdFxcdFxcdG1kLVxcdTAwM2V2ZXJzaW9uID0gdmVyO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9NTQwPXN0YXRpYyB2b2lkIGVyc3Bhbl9mYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy01NjItXFx0XFx0Z290byBlcnJfZnJlZV9za2I7XFxubmV0L2lwdjQvaXBfZ3JlLmM6NTYzOlxcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbyk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNTY0LVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz0xNDI9c3RydWN0IG1ldGFkYXRhX2RzdCAqaXB0dW5uZWxfbWV0YWRhdGFfcmVwbHkoc3RydWN0IG1ldGFkYXRhX2RzdCAqbWQsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTE2Ni1cXHRkc3QtXFx1MDAzZW1vZGUgPSBzcmMtXFx1MDAzZW1vZGUgfCBJUF9UVU5ORUxfSU5GT19UWDtcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjE2NzpcXHRpcF90dW5uZWxfaW5mb19vcHRzX3NldChkc3QsIGlwX3R1bm5lbF9pbmZvX29wdHMoc3JjKSxcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTE2OC1cXHRcXHRcXHRcXHRzcmMtXFx1MDAzZW9wdGlvbnNfbGVuLCB0dW5fZmxhZ3MpO1xcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz01MDU9c3RhdGljIGludCBpcF90dW5fcGFyc2Vfb3B0c19nZW5ldmUoc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNTI3LVxcdGlmIChpbmZvKSB7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo1Mjg6XFx0XFx0c3RydWN0IGdlbmV2ZV9vcHQgKm9wdCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgKyBvcHRzX2xlbjtcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTUyOS1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9NTQyPXN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfdnhsYW4oc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNTU4LVxcdFxcdHN0cnVjdCB2eGxhbl9tZXRhZGF0YSAqbWQgPVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6NTU5OlxcdFxcdFxcdGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgKyBvcHRzX2xlbjtcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTU2MC1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9NTcwPXN0YXRpYyBpbnQgaXBfdHVuX3BhcnNlX29wdHNfZXJzcGFuKHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTU5OS1cXHRcXHRzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhICptZCA9XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo2MDA6XFx0XFx0XFx0aXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSArIG9wdHNfbGVuO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNjAxLVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz03NzI9c3RhdGljIGludCBpcF90dW5fZmlsbF9lbmNhcF9vcHRzX2dlbmV2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy03ODMtXFx0d2hpbGUgKHR1bl9pbmZvLVxcdTAwM2VvcHRpb25zX2xlbiBcXHUwMDNlIG9mZnNldCkge1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6Nzg0OlxcdFxcdG9wdCA9IGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pICsgb2Zmc2V0O1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNzg1LVxcdFxcdGlmIChubGFfcHV0X2JlMTYoc2tiLCBMV1RVTk5FTF9JUF9PUFRfR0VORVZFX0NMQVNTLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz04MDA9c3RhdGljIGludCBpcF90dW5fZmlsbF9lbmNhcF9vcHRzX3Z4bGFuKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTgwOS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjgxMDpcXHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtODExLVxcdGlmIChubGFfcHV0X3UzMihza2IsIExXVFVOTkVMX0lQX09QVF9WWExBTl9HQlAsIG1kLVxcdTAwM2VnYnApKSB7XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTgyMD1zdGF0aWMgaW50IGlwX3R1bl9maWxsX2VuY2FwX29wdHNfZXJzcGFuKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTgyOS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjgzMDpcXHRtZCA9IGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtODMxLVxcdGlmIChubGFfcHV0X3U4KHNrYiwgTFdUVU5ORUxfSVBfT1BUX0VSU1BBTl9WRVIsIG1kLVxcdTAwM2V2ZXJzaW9uKSlcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9ODk5PXN0YXRpYyBpbnQgaXBfdHVuX29wdHNfbmxzaXplKHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTEyLVxcdFxcdHdoaWxlIChpbmZvLVxcdTAwM2VvcHRpb25zX2xlbiBcXHUwMDNlIG9mZnNldCkge1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTEzOlxcdFxcdFxcdG9wdCA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbykgKyBvZmZzZXQ7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05MTQtXFx0XFx0XFx0b3B0X2xlbiArPSBubGFfdG90YWxfc2l6ZSgyKVxcdC8qIE9QVF9HRU5FVkVfQ0xBU1MgKi9cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTIzLVxcdH0gZWxzZSBpZiAodGVzdF9iaXQoSVBfVFVOTkVMX0VSU1BBTl9PUFRfQklULCBpbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzKSkge1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTI0OlxcdFxcdHN0cnVjdCBlcnNwYW5fbWV0YWRhdGEgKm1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTkyNS1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9OTUwPXN0YXRpYyBpbnQgaXBfdHVuX2NtcF9lbmNhcChzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmEsIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYilcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTU3LVxcdCAgICAgICBpbmZvX2EtXFx1MDAzZW9wdGlvbnNfbGVuICE9IGluZm9fYi1cXHUwMDNlb3B0aW9uc19sZW4gfHxcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjk1ODpcXHQgICAgICAgbWVtY21wKGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mb19hKSxcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjk1OTpcXHRcXHQgICAgICBpcF90dW5uZWxfaW5mb19vcHRzKGluZm9fYiksIGluZm9fYS1cXHUwMDNlb3B0aW9uc19sZW4pO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTYwLX1cXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz00OTA9c3RhdGljIGludCBpcDZlcnNwYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtNTQ5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzaXplb2YoKmVyc2hkcikpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYzo1NTA6XFx0XFx0XFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy01NTEtXFx0XFx0XFx0bWQtXFx1MDAzZXZlcnNpb24gPSB2ZXI7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9OTIxPXN0YXRpYyBuZXRkZXZfdHhfdCBpcDZlcnNwYW5fdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy05OTktXFx0XFx0XFx0Z290byB0eF9lcnI7XFxubmV0L2lwdjYvaXA2X2dyZS5jOjEwMDA6XFx0XFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTAwMS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jPTQxOT1zdGF0aWMgaW50IG5mdF90dW5uZWxfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jLTQ5NS0jZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL25mdF90dW5uZWwuYzo0OTY6XFx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQoXFx1MDAyNm1kLVxcdTAwM2V1LnR1bl9pbmZvLCBcXHUwMDI2cHJpdi1cXHUwMDNlb3B0cy51LCBwcml2LVxcdTAwM2VvcHRzLmxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF90dW5uZWwuYy00OTctXFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlb3B0cy5mbGFncyk7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTEwMDA9aW50IG92c19mbG93X2tleV9leHRyYWN0KGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm8sXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTEwMTktXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoxMDIwOlxcdFxcdFxcdGlwX3R1bm5lbF9pbmZvX29wdHNfZ2V0KFRVTl9NRVRBREFUQV9PUFRTKGtleSwgdHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuKSxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTEwMjEtXFx0XFx0XFx0XFx0XFx0XFx0dHVuX2luZm8pO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTk3OT1pbnQgb3ZzX25sYV9wdXRfdHVubmVsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy05ODItXFx0cmV0dXJuIF9faXBfdHVuX3RvX25sYXR0cihza2IsIFxcdTAwMjZ0dW5faW5mby1cXHUwMDNla2V5LFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzo5ODM6XFx0XFx0XFx0XFx0ICBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKSxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtOTg0LVxcdFxcdFxcdFxcdCAgdHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTI4MDA9c3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMjg3Mi1cXHQgKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM6Mjg3MzpcXHRpcF90dW5uZWxfaW5mb19vcHRzX3NldCh0dW5faW5mbyxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMjg3NC1cXHRcXHRcXHRcXHRUVU5fTUVUQURBVEFfT1BUUyhcXHUwMDI2a2V5LCBrZXkudHVuX29wdHNfbGVuKSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYz0zODAyPXN0YXRpYyBpbnQgc2V0X2FjdGlvbl90b19hdHRyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmEsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMzgxOC1cXHRcXHRlcnIgPSAgaXBfdHVuX3RvX25sYXR0cihza2IsIFxcdTAwMjZ0dW5faW5mby1cXHUwMDNla2V5LFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzozODE5OlxcdFxcdFxcdFxcdFxcdGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zODIwLVxcdFxcdFxcdFxcdFxcdHR1bl9pbmZvLVxcdTAwM2VvcHRpb25zX2xlbixcXG4tLVxcbm5ldC9wc2FtcGxlL3BzYW1wbGUuYz0yMTY9c3RhdGljIGludCBfX3BzYW1wbGVfaXBfdHVuX3RvX25sYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3BzYW1wbGUvcHNhbXBsZS5jLTIxOS1cXHR1bnNpZ25lZCBzaG9ydCB0dW5fcHJvdG8gPSBpcF90dW5uZWxfaW5mb19hZih0dW5faW5mbyk7XFxubmV0L3BzYW1wbGUvcHNhbXBsZS5jOjIyMDpcXHRjb25zdCB2b2lkICp0dW5fb3B0cyA9IGlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pO1xcbm5ldC9wc2FtcGxlL3BzYW1wbGUuYy0yMjEtXFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9rZXkgKnR1bl9rZXkgPSBcXHUwMDI2dHVuX2luZm8tXFx1MDAzZWtleTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jPTI5Nj1zdGF0aWMgaW50IHR1bm5lbF9rZXlfb3B0c19zZXQoc3RydWN0IG5sYXR0ciAqbmxhLCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy0zMDMtXFx0XFx0X19zZXRfYml0KElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVCwgaW5mby1cXHUwMDNla2V5LnR1bl9mbGFncyk7XFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6MzA0OlxcdFxcdHJldHVybiB0dW5uZWxfa2V5X2NvcHlfb3B0cyhubGEsIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyksXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtMzA1LVxcdFxcdFxcdFxcdFxcdCAgICBvcHRzX2xlbiwgZXh0YWNrKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMxMS1cXHRcXHRfX3NldF9iaXQoSVBfVFVOTkVMX1ZYTEFOX09QVF9CSVQsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpO1xcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjMxMjpcXHRcXHRyZXR1cm4gdHVubmVsX2tleV9jb3B5X29wdHMobmxhLCBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pLFxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTMxMy1cXHRcXHRcXHRcXHRcXHQgICAgb3B0c19sZW4sIGV4dGFjayk7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy0zMTktXFx0XFx0X19zZXRfYml0KElQX1RVTk5FTF9FUlNQQU5fT1BUX0JJVCwgaW5mby1cXHUwMDNla2V5LnR1bl9mbGFncyk7XFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6MzIwOlxcdFxcdHJldHVybiB0dW5uZWxfa2V5X2NvcHlfb3B0cyhubGEsIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyksXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtMzIxLVxcdFxcdFxcdFxcdFxcdCAgICBvcHRzX2xlbiwgZXh0YWNrKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jPTU3Nj1zdGF0aWMgaW50IHR1bm5lbF9rZXlfZ2VuZXZlX29wdHNfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtNTc4LXtcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYzo1Nzk6XFx0Y29uc3QgdTggKnNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7XFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtNTgwLVxcdGludCBsZW4gPSBpbmZvLVxcdTAwM2VvcHRpb25zX2xlbjtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jPTYwOD1zdGF0aWMgaW50IHR1bm5lbF9rZXlfdnhsYW5fb3B0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy02MTAte1xcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjYxMTpcXHRjb25zdCBzdHJ1Y3QgdnhsYW5fbWV0YWRhdGEgKm1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy02MTItXFx0c3RydWN0IG5sYXR0ciAqc3RhcnQ7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYz02Mjc9c3RhdGljIGludCB0dW5uZWxfa2V5X2Vyc3Bhbl9vcHRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTYyOS17XFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6NjMwOlxcdGNvbnN0IHN0cnVjdCBlcnNwYW5fbWV0YWRhdGEgKm1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy02MzEtXFx0c3RydWN0IG5sYXR0ciAqc3RhcnQ7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYz04Mzk9dHVubmVsX2tleV9nZW5ldmVfb3B0c19maWxsX3NpemUoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTg0MC17XFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6ODQxOlxcdGNvbnN0IHU4ICpzcmMgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pO1xcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTg0Mi1cXHRpbnQgbGVuID0gaW5mby1cXHUwMDNlb3B0aW9uc19sZW47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjUxLjI2MzM0ODE1N1oiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzU4MjA2ODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGx3dHVubmVsX3N0YXRlX2FsbG9jYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgbHd0dW5uZWxfc3RhdGVfYWxsb2NgLiBNeSBwcmltYXJ5IGNvbmNlcm4gcmlnaHQgbm93IGlzIHRoZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiBob3cgdGhleSdyZSBoYW5kbGluZyBhbGxvY2F0aW9uIOKAkyBhcmUgdGhleSB6ZXJvaW5nIHRoZSBtZW1vcnksIHVzaW5nIGBtZW1zZXRgLCBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBpcyBjcnVjaWFsOyBpdCBpbXBhY3RzIHNlY3VyaXR5LCBwZXJmb3JtYW5jZSwgYW5kIG92ZXJhbGwgc3RhYmlsaXR5LiBJIG5lZWQgdG8ga25vdyBpZiB3ZSdyZSBzdGFydGluZyB3aXRoIGEgY2xlYW4gc2xhdGUgb3IgaWYgdGhlcmUncyBwb3RlbnRpYWwgZm9yIHJlc2lkdWFsIGRhdGEgaXNzdWVzLiBMZXQncyBzZWUgaG93IHRoZXkgZG8gaXQuIEknbSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWNzIG9mIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2NjksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzo1My4wMjE1NTc2NTlaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mzc3ODE1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHd0dW5uZWxfc3RhdGVfYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0xMjk9aW50IGx3dHVubmVsX2dldF9lbmNhcF9zaXplKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpO1xcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmg6MTMwOnN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0dW5uZWxfc3RhdGVfYWxsb2MoaW50IGhkcl9sZW4pO1xcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMTMxLWludCBsd3R1bm5lbF9jbXBfZW5jYXAoc3RydWN0IGx3dHVubmVsX3N0YXRlICphLCBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmIpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbHd0dW5uZWwuaD0yMzU9c3RhdGljIGlubGluZSBpbnQgbHd0dW5uZWxfZ2V0X2VuY2FwX3NpemUoc3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3RzdGF0ZSlcXG4tLVxcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmgtMjM5LVxcbmluY2x1ZGUvbmV0L2x3dHVubmVsLmg6MjQwOnN0YXRpYyBpbmxpbmUgc3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3R1bm5lbF9zdGF0ZV9hbGxvYyhpbnQgaGRyX2xlbilcXG5pbmNsdWRlL25ldC9sd3R1bm5lbC5oLTI0MS17XFxuLS1cXG5uZXQvY29yZS9sd3RfYnBmLmM9MzgzPXN0YXRpYyBpbnQgYnBmX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbi0tXFxubmV0L2NvcmUvbHd0X2JwZi5jLTQwMy1cXG5uZXQvY29yZS9sd3RfYnBmLmM6NDA0OlxcdG5ld3RzID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCpicGYpKTtcXG5uZXQvY29yZS9sd3RfYnBmLmMtNDA1LVxcdGlmICghbmV3dHMpXFxuLS1cXG5uZXQvY29yZS9sd3R1bm5lbC5jPTMzPXN0YXRpYyBjb25zdCBjaGFyICpsd3R1bm5lbF9lbmNhcF9zdHIoZW51bSBsd3R1bm5lbF9lbmNhcF90eXBlcyBlbmNhcF90eXBlKVxcbi0tXFxubmV0L2NvcmUvbHd0dW5uZWwuYy02OC1cXG5uZXQvY29yZS9sd3R1bm5lbC5jOjY5OnN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0dW5uZWxfc3RhdGVfYWxsb2MoaW50IGVuY2FwX2xlbilcXG5uZXQvY29yZS9sd3R1bm5lbC5jLTcwLXtcXG4tLVxcbm5ldC9jb3JlL2x3dHVubmVsLmMtNzYtfVxcbm5ldC9jb3JlL2x3dHVubmVsLmM6Nzc6RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfc3RhdGVfYWxsb2MpO1xcbm5ldC9jb3JlL2x3dHVubmVsLmMtNzgtXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTY4OD1zdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTcwNi1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjcwNzpcXHRuZXdfc3RhdGUgPSBsd3R1bm5lbF9zdGF0ZV9hbGxvYyhzaXplb2YoKnR1bl9pbmZvKSArIG9wdF9sZW4pO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNzA4LVxcdGlmICghbmV3X3N0YXRlKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz05ODI9c3RhdGljIGludCBpcDZfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTAwMC1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjEwMDE6XFx0bmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCp0dW5faW5mbykgKyBvcHRfbGVuKTtcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTEwMDItXFx0aWYgKCFuZXdfc3RhdGUpXFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jPTEzNT1zdGF0aWMgaW50IGlsYV9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMjI1LVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6MjI2OlxcdG5ld3RzID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCppbHd0KSk7XFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0yMjctXFx0aWYgKCFuZXd0cylcXG4tLVxcbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmM9OTk9c3RhdGljIGludCBpb2FtNl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmMtMTYzLVxcdGxlbl9hbGlnbmVkID0gQUxJR04odHJhY2UtXFx1MDAzZXJlbWxlbiAqIDQsIDgpO1xcbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmM6MTY0OlxcdGx3dCA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHNpemVvZigqaWx3dCkgKyBsZW5fYWxpZ25lZCk7XFxubmV0L2lwdjYvaW9hbTZfaXB0dW5uZWwuYy0xNjUtXFx0aWYgKCFsd3QpXFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz02Nz1zdGF0aWMgaW50IHJwbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTk4LVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjk5OlxcdG5ld3RzID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc3JoX2xlbiArIHNpemVvZigqcmx3dCkpO1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTEwMC1cXHRpZiAoIW5ld3RzKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTc0Nz1zdGF0aWMgaW50IHNlZzZfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtODA3LVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYzo4MDg6XFx0bmV3dHMgPSBsd3R1bm5lbF9zdGF0ZV9hbGxvYyh0dW5pbmZvX2xlbiArIHNpemVvZigqc2x3dCkpO1xcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy04MDktXFx0aWYgKCFuZXd0cylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNTE3PXN0YXRpYyBpbnQgc2VnNl9sb2NhbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNTM4LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNTM5OlxcdG5ld3RzID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCpzbHd0KSk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI1NDAtXFx0aWYgKCFuZXd0cylcXG4tLVxcbm5ldC9tcGxzL21wbHNfaXB0dW5uZWwuYz0xNjM9c3RhdGljIGludCBtcGxzX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbi0tXFxubmV0L21wbHMvbXBsc19pcHR1bm5lbC5jLTE4OC1cXG5uZXQvbXBscy9tcGxzX2lwdHVubmVsLmM6MTg5OlxcdG5ld3RzID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc3RydWN0X3NpemUodHVuX2VuY2FwX2luZm8sIGxhYmVsLFxcbm5ldC9tcGxzL21wbHNfaXB0dW5uZWwuYy0xOTAtXFx0XFx0XFx0XFx0XFx0XFx0IG5fbGFiZWxzKSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM9NzM9c3RhdGljIGludCB4ZnJtaV9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy05MS1cXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM6OTI6XFx0bmV3X3N0YXRlID0gbHd0dW5uZWxfc3RhdGVfYWxsb2Moc2l6ZW9mKCppbmZvKSk7XFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTkzLVxcdGlmICghbmV3X3N0YXRlKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjIzOjU0LjU1OTM0NDQzNVoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTA4ODMwMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHBlcnNwZWN0aXZlIG9uIHdoYXQgd2UncmUgbG9va2luZyBhdDpcblxuKipEaXZpbmcgaW50byB0aGUgTFdUdW5uZWwgQ29kZSoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZywgbGV0J3MgY3JhY2sgb3BlbiBgbmV0L2NvcmUvbHd0dW5uZWwuY2AgYW5kIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgNjkuIEknbSBhc3N1bWluZyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgbG9naWMgb2YgTGlnaHR3ZWlnaHQgVHVubmVsaW5nLCBhbmQgdGhhdCBsaW5lIG1pZ2h0IGJlIGEgY3J1Y2lhbCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGRhdGEgc3RydWN0dXJlLCBvciBzb21lIGNyaXRpY2FsIGNvbmRpdGlvbmFsIGluIHRoZSB0dW5uZWwgc2V0dXAgb3IgZGF0YSBwYXRoLiBNeSBtaW5kIGlzIGFscmVhZHkgc2tldGNoaW5nIG91dCB0aGUgcG90ZW50aWFsIGFyZWFzOiBpdCBjb3VsZCBiZSByZWxhdGVkIHRvIGVuY2Fwc3VsYXRpb24sIGRlY2Fwc3VsYXRpb24sIGhlYWRlciBtYW5pcHVsYXRpb24sIGZsb3cgY29udHJvbCwgb3IgZXZlbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIHR1bm5lbCBtb2R1bGUuIERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgdGhhdCBsaW5lIG51bWJlciBtaWdodCBnaXZlIHVzIGluZm9ybWF0aW9uIG9uIHRoZSB0dW5uZWwgZHJpdmVyIGl0c2VsZiwgaXRzIGludGVyYWN0aW9uIHdpdGggb3RoZXIga2VybmVsIGNvbXBvbmVudHMgbGlrZSB0aGUgcm91dGluZyBzdWJzeXN0ZW0gb3IgdGhlIG5ldHdvcmsgc3RhY2ssIG9yIHRoZSBhY3R1YWwgZGF0YSBwcm9jZXNzaW5nIGhhcHBlbmluZyB3aXRoaW4gdGhlIHR1bm5lbC4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NDIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzo1Ni42NjgxNzY4NjFaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbHd0dW5uZWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NTpcXHR9XFxuICA2NjpcXHRcXG4gIDY3OlxcdCNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqL1xcbiAgNjg6XFx0XFxuICA2OTpcXHRzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHVubmVsX3N0YXRlX2FsbG9jKGludCBlbmNhcF9sZW4pXFxuICA3MDpcXHR7XFxuICA3MTpcXHRcXHRzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3cztcXG4gIDcyOlxcdFxcbiAgNzM6XFx0XFx0bHdzID0ga3phbGxvYyhzaXplb2YoKmx3cykgKyBlbmNhcF9sZW4sIEdGUF9BVE9NSUMpO1xcbiAgNzQ6XFx0XFxuICA3NTpcXHRcXHRyZXR1cm4gbHdzO1xcbiAgNzY6XFx0fVxcbiAgNzc6XFx0RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfc3RhdGVfYWxsb2MpO1xcbiAgNzg6XFx0XFxuICA3OTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBfX3JjdSAqXFxuICA4MDpcXHRcXHRcXHRsd3R1bl9lbmNhcHNbTFdUVU5ORUxfRU5DQVBfTUFYICsgMV0gX19yZWFkX21vc3RseTtcXG4gIDgxOlxcdFxcbiAgODI6XFx0aW50IGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyAqb3BzLFxcbiAgODM6XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG51bSlcXG4gIDg0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjM6NTYuNjY4MjQ3MDgxWiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxMTA4ODUyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgUGFyYW1ldGVyIFVzYWdlKipcblxuT2theSwgc28gYGx3dHVubmVsX3N0YXRlX2FsbG9jYCBpcyB1c2luZyBga3phbGxvY2AuIFRoYXQgbWVhbnMgdGhlIHdob2xlIGJsb2NrIG9mIG1lbW9yeSBJJ20gZ2V0dGluZyBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCBpbmNsdWRpbmcgYGVuY2FwX2xlbmAuIFRoaXMgaW5jbHVkZXMgdGhlIGB0dW5faW5mb2Agc3RydWN0IGFuZCB0aGF0IHRyYWlsaW5nIG9wdGlvbnMgYnVmZmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzLCBzcGVjaWZpY2FsbHksIHdoeSB0aGlzIHBhdGNoIHdhcyBtYWRlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBnaXQgbG9nLCBzZWUgaWYgSSBjYW4gZmluZCBjb250ZXh0IGFyb3VuZCB0aGUgY2hhbmdlLCBlc3BlY2lhbGx5IGxvb2tpbmcgYXQgdGhlIGBvcHRpb25zX2xlbmAgZmllbGQuIEknbSB3b25kZXJpbmcgd2h5IGl0IHdhcyBtb3ZlZCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgaXBfdHVuX3NldF9vcHRzYCBmcm9tICphZnRlciogdGhhdCBjYWxsLlxuXG5IbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcsIGBpcF90dW5fYnVpbGRfc3RhdGVgIG1vdmVkIGB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47YC4gSSd2ZSBnb3QgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBoZXJlLiBEb2VzIGBpcF90dW5fc2V0X29wdHNgIGl0c2VsZiBhY3R1YWxseSB1c2UgYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuYD8gVGltZSB0byBkb3VibGUtY2hlY2sgdGhhdCBmdW5jdGlvbiwgbWF5YmUgdGhlcmUncyBzb21ldGhpbmcgSSBtaXNzZWQuIE9yLCBwZXJoYXBzIHNvbWV0aGluZyAqY2FsbGVkKiBmcm9tIHdpdGhpbiBgaXBfdHVuX3NldF9vcHRzYCBpcyB0aGUgY3VscHJpdC4gQWx0ZXJuYXRpdmVseSwgaXMgYW55dGhpbmcgZWxzZSBpbiB0aGUgY29kZSBiYXNlIG1ha2luZyB1c2Ugb2YgdGhlIGBvcHRpb25zX2xlbmAgZmllbGQ/IFRvIGJlIHN1cmUsIEknbGwgcmV2aWV3IGdpdCBjb21taXQgaGlzdG9yeSBhbmQgZG8gYSBncmVwIGZvciBcIm9wdGlvbnNfbGVuXCIgd2l0aGluIGBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jYCB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwOTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyMzo1OS43NzkxMzQ4MThaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzMxNDQyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvcHRpb25zX2xlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9MTQyPXN0cnVjdCBtZXRhZGF0YV9kc3QgKmlwdHVubmVsX21ldGFkYXRhX3JlcGx5KHN0cnVjdCBtZXRhZGF0YV9kc3QgKm1kLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xNTMtXFx0c3JjID0gXFx1MDAyNm1kLVxcdTAwM2V1LnR1bl9pbmZvO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6MTU0OlxcdHJlcyA9IG1ldGFkYXRhX2RzdF9hbGxvYyhzcmMtXFx1MDAzZW9wdGlvbnNfbGVuLCBNRVRBREFUQV9JUF9UVU5ORUwsIGZsYWdzKTtcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTE1NS1cXHRpZiAoIXJlcylcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTY3LVxcdGlwX3R1bm5lbF9pbmZvX29wdHNfc2V0KGRzdCwgaXBfdHVubmVsX2luZm9fb3B0cyhzcmMpLFxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6MTY4OlxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlb3B0aW9uc19sZW4sIHR1bl9mbGFncyk7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xNjktXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTY4OD1zdGF0aWMgaW50IGlwX3R1bl9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTcxMy1cXHR0dW5faW5mbyA9IGx3dF90dW5faW5mbyhuZXdfc3RhdGUpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6NzE0OlxcdHR1bl9pbmZvLVxcdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy03MTUtXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTc3Mj1zdGF0aWMgaW50IGlwX3R1bl9maWxsX2VuY2FwX29wdHNfZ2VuZXZlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTc4Mi1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjc4MzpcXHR3aGlsZSAodHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuIFxcdTAwM2Ugb2Zmc2V0KSB7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy03ODQtXFx0XFx0b3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyh0dW5faW5mbykgKyBvZmZzZXQ7XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jPTg5OT1zdGF0aWMgaW50IGlwX3R1bl9vcHRzX25sc2l6ZShzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTkxMS1cXHRcXHRvcHRfbGVuICs9IG5sYV90b3RhbF9zaXplKDApO1xcdC8qIExXVFVOTkVMX0lQX09QVFNfR0VORVZFICovXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo5MTI6XFx0XFx0d2hpbGUgKGluZm8tXFx1MDAzZW9wdGlvbnNfbGVuIFxcdTAwM2Ugb2Zmc2V0KSB7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05MTMtXFx0XFx0XFx0b3B0ID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKSArIG9mZnNldDtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9OTUwPXN0YXRpYyBpbnQgaXBfdHVuX2NtcF9lbmNhcChzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmEsIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYilcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTU2LVxcdCAgICAgICBpbmZvX2EtXFx1MDAzZW1vZGUgIT0gaW5mb19iLVxcdTAwM2Vtb2RlIHx8XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo5NTc6XFx0ICAgICAgIGluZm9fYS1cXHUwMDNlb3B0aW9uc19sZW4gIT0gaW5mb19iLVxcdTAwM2VvcHRpb25zX2xlbiB8fFxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtOTU4LVxcdCAgICAgICBtZW1jbXAoaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvX2EpLFxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTU5OlxcdFxcdCAgICAgIGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mb19iKSwgaW5mb19hLVxcdTAwM2VvcHRpb25zX2xlbik7XFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy05NjAtfVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz05ODI9c3RhdGljIGludCBpcDZfdHVuX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTAwNy1cXHR0dW5faW5mbyA9IGx3dF90dW5faW5mbyhuZXdfc3RhdGUpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6MTAwODpcXHR0dW5faW5mby1cXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTAwOS1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9MTA4OT12b2lkIF9faW5pdCBpcF90dW5uZWxfY29yZV9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTEwOTEtXFx0LyogSWYgeW91IGxhbmQgaGVyZSwgbWFrZSBzdXJlIHdoZXRoZXIgaW5jcmVhc2luZyBpcF90dW5uZWxfaW5mbydzXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxMDkyOlxcdCAqIG9wdGlvbnNfbGVuIGlzIGEgcmVhc29uYWJsZSBjaG9pY2Ugd2l0aCBpdHMgdXNhZ2UgaW4gZnJvbnQgZW5kc1xcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtMTA5My1cXHQgKiAoZi5lLiwgaXQncyBwYXJ0IG9mIGZsb3cga2V5cywgZXRjKS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjQ6MDAuMjEyNDU3NTUyWiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NTQ1NTQ2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBpcF90dW5uZWxfaW5mb19vcHRzYCBNYWNybyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKWAgbWFjcm8uIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIHRoaXMgSVAgdHVubmVsaW5nIGltcGxlbWVudGF0aW9uLiBXaGVyZSdzIHRoZSBkZWZpbml0aW9uPyBSaWdodCwgaXQncyBwcm9iYWJseSBpbiBgaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oYC4gTGV0IG1lIGdvIHB1bGwgdGhhdCB1cCBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGJlaW5nIGRvbmUgaW4gdGhlcmUuIFRoaXMgbWFjcm8gcHJvYmFibHkgZXhwYW5kcyB0byBhIGNvbWJpbmF0aW9uIG9mIHN0cnVjdCBtZW1iZXIgYWNjZXNzZXMgYW5kIHR5cGUgY2FzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIG91dHB1dCB0byBmdWxseSBncmFzcCB0aGUgaW5mb3JtYXRpb24gYmVpbmcgaGFuZGxlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmLCB0aGVyZSBhcmUgc28gbWFueSBvZiB0aGVzZSBtYWNyb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODAzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjQ6MDIuMTY3MDE1MDU3WiIsIlNlcSI6NjUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFxuIDEwMTpcXHQvKiBNYXhpbXVtIHR1bm5lbCBvcHRpb25zIGxlbmd0aC4gKi9cXG4gMTAyOlxcdCNkZWZpbmUgSVBfVFVOTkVMX09QVFNfTUFYXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxMDM6XFx0XFx0R0VOTUFTSygoc2l6ZW9mX2ZpZWxkKHN0cnVjdCBpcF90dW5uZWxfaW5mbyxcXHRcXHRcXFxcXFxuIDEwNDpcXHRcXHRcXHRcXHQgICAgICBvcHRpb25zX2xlbikgKiBCSVRTX1BFUl9CWVRFKSAtIDEsIDApXFxuIDEwNTpcXHRcXG4gMTA2OlxcdCNkZWZpbmUgaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKVxcdFxcdFxcdFxcdFxcXFxcXG4gMTA3OlxcdFxcdF9HZW5lcmljKGluZm8sXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxMDg6XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqIDogKChjb25zdCB2b2lkICopKGluZm8pLVxcdTAwM2VvcHRpb25zKSxcXFxcXFxuIDEwOTpcXHRcXHRcXHQgc3RydWN0IGlwX3R1bm5lbF9pbmZvICogOiAoKHZvaWQgKikoaW5mbyktXFx1MDAzZW9wdGlvbnMpXFxcXFxcbiAxMTA6XFx0XFx0KVxcbiAxMTE6XFx0XFxuIDExMjpcXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8ge1xcbiAxMTM6XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9rZXlcXHRrZXk7XFxuIDExNDpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwXFx0ZW5jYXA7XFxuIDExNTpcXHQjaWZkZWYgQ09ORklHX0RTVF9DQUNIRVxcbiAxMTY6XFx0XFx0c3RydWN0IGRzdF9jYWNoZVxcdGRzdF9jYWNoZTtcXG4gMTE3OlxcdCNlbmRpZlxcbiAxMTg6XFx0XFx0dThcXHRcXHRcXHRvcHRpb25zX2xlbjtcXG4gMTE5OlxcdFxcdHU4XFx0XFx0XFx0bW9kZTtcXG4gMTIwOlxcdFxcdHU4XFx0XFx0XFx0b3B0aW9uc1tdIF9fYWxpZ25lZF9sYXJnZXN0IF9fY291bnRlZF9ieShvcHRpb25zX2xlbik7XFxuIDEyMTpcXHR9O1xcbiAxMjI6XFx0XFxuIDEyMzpcXHQvKiA2cmQgcHJlZml4L3JlbGF5IGluZm9ybWF0aW9uICovXFxuIDEyNDpcXHQjaWZkZWYgQ09ORklHX0lQVjZfU0lUXzZSRFxcbiAxMjU6XFx0c3RydWN0IGlwX3R1bm5lbF82cmRfcGFybSB7XFxuIDEyNjpcXHRcXHRzdHJ1Y3QgaW42X2FkZHJcXHRcXHRwcmVmaXg7XFxuIDEyNzpcXHRcXHRfX2JlMzJcXHRcXHRcXHRyZWxheV9wcmVmaXg7XFxuIDEyODpcXHRcXHR1MTZcXHRcXHRcXHRwcmVmaXhsZW47XFxuIDEyOTpcXHRcXHR1MTZcXHRcXHRcXHRyZWxheV9wcmVmaXhsZW47XFxuIDEzMDpcXHRcXHRzdHJ1Y3QgcmN1X2hlYWRcXHRcXHRyY3U7XFxuIDEzMTpcXHR9O1xcbiAxMzI6XFx0I2VuZGlmXFxuIDEzMzpcXHRcXG4gMTM0OlxcdHN0cnVjdCBpcF90dW5uZWxfcHJsX2VudHJ5IHtcXG4gMTM1OlxcdFxcdHN0cnVjdCBpcF90dW5uZWxfcHJsX2VudHJ5IF9fcmN1ICpuZXh0O1xcbiAxMzY6XFx0XFx0X19iZTMyXFx0XFx0XFx0XFx0YWRkcjtcXG4gMTM3OlxcdFxcdHUxNlxcdFxcdFxcdFxcdGZsYWdzO1xcbiAxMzg6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0XFx0cmN1X2hlYWQ7XFxuIDEzOTpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyNDowMi4xNjcxMDIxMzdaIiwiU2VxIjo2NiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzQ4ODg5MDE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBaGEhIEEgQm91bmRzIFZpb2xhdGlvbiBGaXghKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgKmJvb20hKiBMaW5lIDEyMCBqdXN0IGp1bXBlZCBvdXQgYXQgbWUuIEkgc2VlIHRoYXQgdGhlIGBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pYCBoYXMgYmVlbiBhZGRlZCB0byBgdTggb3B0aW9uc1tdYC4gVGhhdCdzIGludGVyZXN0aW5nLCBiZWNhdXNlIG5vdywgYW55dGltZSBgb3B0aW9uc19sZW5gIGlzIHplcm8sIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciB3aXRoIGEgemVyby1sZW5ndGggYm91bmQuXG5cbkFuZCB0aGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIG9mIHRob3NlIGBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pYCBhY2Nlc3NlcyB3aXRoaW4gdGhlIGBpcF90dW5fcGFyc2Vfb3B0c18qYCBmdW5jdGlvbnMuIEJlZm9yZSB0aGlzIGNoYW5nZSwgd2hlbiBgb3B0aW9uc19sZW5gIHdhcyB6ZXJvICh3aGljaCwgbGV0J3MgYmUgaG9uZXN0LCBpdCB3YXMgaW5pdGlhbGl6ZWQgdG8gd2l0aCBga3phbGxvY2ApLCBhY2Nlc3NpbmcgYGluZm8tXHUwMDNlb3B0aW9uc2Agd291bGQgYmUgYSBzdHJhaWdodC11cCBwb3RlbnRpYWwgYm91bmRzIHZpb2xhdGlvbiEgRXNwZWNpYWxseSBpZiB3ZSBoYXZlIGVpdGhlciBgQ09ORklHX1VCU0FOX0JPVU5EU2AgZW5hYmxlZCwgb3IgYXJlIGNvbXBpbGluZyB3aXRoIENsYW5nJ3MgYm91bmRzIHNhbml0aXplcnMuIFdlJ2Qgc2VlIGEgYmlnLCBmYXQgd2FybmluZyByaWdodCB0aGVyZSBpbiB0aGUgb3V0cHV0IVxuXG5Ob3csIGJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gTGV0J3Mgc2VlIGlmIHRoZSBHaXQgbG9nIGdpdmVzIHVzIGFueSBjbHVlcy4gSSdsbCBzZWFyY2ggZm9yIGNvbW1pdHMgcmVsYXRlZCB0byBgbmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuY2Agb3IganVzdCBzdGFydCBzZWFyY2hpbmcgZm9yIGNvbW1pdCBtZXNzYWdlcy4gTGV0J3MgZGlnIGludG8gdGhlIGhpc3RvcnkgYW5kIHNlZSB0aGUgb3JpZ2luYWwgaW50ZW50LCBzaGFsbCB3ZT9cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2NTIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyNDowOS42NTU5OTUxNjJaIiwiU2VxIjo2NywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3ODk3NjQ4NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jb3VudGVkX2J5XFxcXChvcHRpb25zX2xlblxcXFwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaD0xMTI9c3RydWN0IGlwX3R1bm5lbF9pbmZvIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMTktXFx0dThcXHRcXHRcXHRtb2RlO1xcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDoxMjA6XFx0dThcXHRcXHRcXHRvcHRpb25zW10gX19hbGlnbmVkX2xhcmdlc3QgX19jb3VudGVkX2J5KG9wdGlvbnNfbGVuKTtcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtMTIxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjI0OjEyLjQ0NTc2ODY2NVoiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzcwMDM0NzAyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pYCBDb21taXQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHRyYWNrIGRvd24gdGhlIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgYF9fY291bnRlZF9ieShvcHRpb25zX2xlbilgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIHNwZWNpZmljIGFkZGl0aW9uLiBJdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoYXQgcHJvYmxlbSBpdCBzb2x2ZXMsIG9yIGV2ZW4gd2hhdCBjb250ZXh0IGl0IGJlbG9uZ3MgaW4uIFdoYXQgZGVzaWduIGRlY2lzaW9ucyBsZWQgdG8gaW5jbHVkaW5nIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eT8gSSB3YW50IHRvIGV4YW1pbmUgdGhlIGNvbW1pdCBtZXNzYWdlLCB0aGUgc3Vycm91bmRpbmcgY29kZSBjaGFuZ2VzLCBhbmQgYW55IHJlbGF0ZWQgaXNzdWVzIG9yIGRpc2N1c3Npb25zLiBXZXJlIHRoZXJlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zPyBSZWZhY3RvcmluZyBnb2Fscz8gSXMgdGhpcyBwYXJ0IG9mIGEgbGFyZ2VyIHBhdHRlcm4gb3Igb3B0aW1pemF0aW9uIHN0cmF0ZWd5IHdpdGhpbiB0aGlzIGNvZGViYXNlPyBHZXR0aW5nIHRoZSBmdWxsIHBpY3R1cmUgaGVyZSBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY29udGV4dC4gSSdtIGhvcGluZyB0aGUgY29tbWl0IG1lc3NhZ2UgaXMgY2xlYXIgYW5kIHdlbGwtd3JpdHRlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzNzMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyNDozMC4xNDYxMTg1MDFaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTk4ODE4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2NvdW50ZWRfYnlcXFxcKG9wdGlvbnNfbGVuXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTExMj1zdHJ1Y3QgaXBfdHVubmVsX2luZm8ge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTExOS1cXHR1OFxcdFxcdFxcdG1vZGU7XFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjEyMDpcXHR1OFxcdFxcdFxcdG9wdGlvbnNbXSBfX2FsaWduZWRfbGFyZ2VzdCBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pO1xcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC0xMjEtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjQ6MzAuMzE2MTE1MTE4WiIsIlNlcSI6NzAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgzNDc3NTk1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHZW5ldmUgT3B0aW9uIFBhcnNpbmcgYW5kIE1lbW9yeSBTYWZldHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgYGlwX3R1bl9wYXJzZV9vcHRzX2dlbmV2ZWAgY29kZS4gVGhlIGNvcmUgaXNzdWUgaXMgdGhlIHBvdGVudGlhbCBmb3IgYSBib3VuZHMgY2hlY2sgZmFpbHVyZSB3aGVuIHdyaXRpbmcgR2VuZXZlIG9wdGlvbnMuIFRoZSBwcm9ibGVtIGFyaXNlcyBiZWNhdXNlIGB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbmAgaXNuJ3Qgc2V0ICpiZWZvcmUqIGBpcF90dW5fc2V0X29wdHMoKWAgaXMgY2FsbGVkLiAgVGhpcyBmdW5jdGlvbiBpcyB3cml0aW5nIHRvIGBpbmZvLVx1MDAzZW9wdGlvbnNgLCB3aGljaCBpcyBlc3NlbnRpYWxseSBhIHJlZ2lvbiBvZiBtZW1vcnksIGJ1dCBiZWNhdXNlIGBvcHRpb25zX2xlbmAgaXMgaW5pdGlhbGx5IHplcm8sIGNvbXBpbGVyIGluc3RydW1lbnRhdGlvbiAoc3BlY2lmaWNhbGx5IGBfX2NvdW50ZWRfYnlgKSBkZXRlY3RzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgb3IgcmVhZC4gTW92aW5nIGB0dW5faW5mby1cdTAwM2VvcHRpb25zX2xlbiA9IG9wdF9sZW47YCB1cCBzb2x2ZXMgdGhhdCBieSBtYWtpbmcgdGhlIGxlbmd0aCB2YWxpZCAqYmVmb3JlKiBhbnkgYWNjZXNzIHRvIGBpbmZvLVx1MDAzZW9wdGlvbnNgLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHRoZSBtZW1vcnkgaW1wbGljYXRpb25zLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBtZW1vcnkgc2FuaXRpemVycyBsaWtlIEtNU0FOIGFuZCBLQVNBTi4gIElmIGBpcF90dW5fc2V0X29wdHMoKWAgKmZhaWxzKiwgYG5ld19zdGF0ZWAgKHdoaWNoIGhvbGRzIG91ciBgdHVuX2luZm9gKSBpcyBpbW1lZGlhdGVseSBmcmVlZC4gTm8gb25lIGV2ZXIgcmVhZHMgZnJvbSBpdC4gU28sIGEgZmFpbHVyZSBpcyBzYWZlIGluIHRoaXMgY29udGV4dC5cblxuSWYgYGlwX3R1bl9zZXRfb3B0cygpYCAqc3VjY2VlZHMqLCB3ZSd2ZSB3cml0dGVuIGBvcHRfbGVuYCBieXRlcyBpbnRvIGB0dW5faW5mby1cdTAwM2VvcHRpb25zYC4gIENydWNpYWxseSwgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHVzZXMgYGt6YWxsb2NgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IG1lYW5zIGFsbCB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCBpbmNsdWRpbmcgYG5ld19zdGF0ZWAsIGB0dW5faW5mb2AgaXRzZWxmIGFuZCB0aGUgc3BhY2UgZm9yIHRoZSBvcHRpb25zLiAgVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgdGhlcmVmb3JlIHRoZXJlJ3Mgbm8gd2F5IHRvIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS5cblxuU28sIGRvZXMgdGhpcyBjaGFuZ2UgaW50cm9kdWNlIGFueSAqbmV3KiBtZW1vcnktc2FmZXR5IGlzc3Vlcz8gTm8sIGJlY2F1c2UgdGhlIHdyaXRlIHRvIGBvcHRpb25zYCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGBpcF90dW5fc2V0X29wdHNgIGlzIHJlYWRpbmcgdmFsaWRhdGVkIG5ldGxpbmsgYXR0cmlidXRlcy4gYHR1bl9pbmZvYCBvciBgbmV3X3N0YXRlYCBhcmUgbm90IGJlaW5nIGRpcmVjdGx5IGNvcGllZCB0byB1c2VyIHNwYWNlLiAgV2hlbiBkdW1waW5nIHJvdXRlIGFuZCB0dW5uZWwgaW5mbyAoYHJ0bmxfZmlsbF9pZmluZm9gKSwgYGlwX3R1bl9maWxsX2VuY2FwX2luZm9gIGlzIGNhbGxlZC4gVGhhdCB3b3VsZCBiZSB0aGUgcGxhY2UgdG8gY2hlY2sgYnV0IHRoZSBhbmFseXNpcyBmcm9tIGJlZm9yZSBpcyB2YWxpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3MjksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjQ6MzguNjYzODc3MTA1WiIsIlNlcSI6NzEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzkxODkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF90dW5fZmlsbF9lbmNhcF9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz04NTE9c3RhdGljIGludCBpcF90dW5fZmlsbF9lbmNhcF9vcHRzKHN0cnVjdCBza19idWZmICpza2IsIGludCB0eXBlLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy04NzktXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo4ODA6c3RhdGljIGludCBpcF90dW5fZmlsbF9lbmNhcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy04ODEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz05NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgaXBfdHVuX2x3dF9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTk2NC1cXHQuZGVzdHJveV9zdGF0ZSA9IGlwX3R1bl9kZXN0cm95X3N0YXRlLFxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6OTY1OlxcdC5maWxsX2VuY2FwID0gaXBfdHVuX2ZpbGxfZW5jYXBfaW5mbyxcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTk2Ni1cXHQuZ2V0X2VuY2FwX3NpemUgPSBpcF90dW5fZW5jYXBfbmxzaXplLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjoyNDozOC43MTE4MjAyMTJaIiwiU2VxIjo3MiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMyMTgwMzYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgaXBfdHVuX2ZpbGxfZW5jYXBfaW5mb2AqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgaXBfdHVuX2ZpbGxfZW5jYXBfaW5mb2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZW5jYXBzdWxhdGlvbiBsb2dpYyBmb3IgdGhpcyB0dW5uZWwgc2V0dXAuIEknbSBhc3N1bWluZyBpdCBoYW5kbGVzIHRoZSBkZXRhaWxzIHJlcXVpcmVkIHRvIGNvbnN0cnVjdCB0aGUgb3V0ZXIgaGVhZGVyIGZvciBhIHR1bm5lbCBwYWNrZXQuIFNwZWNpZmljYWxseSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSB0aGUgaW5uZXIgcGFja2V0IGRldGFpbHMsIGxpa2VseSB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzZXMgYW5kIG1heWJlIHNvbWUgdHJhbnNwb3J0IGxheWVyIHByb3RvY29sIGluZm9ybWF0aW9uLCBhbmQgdGhlbiBjcmFmdCB0aGUgb3V0ZXIgSVAgaGVhZGVyIHdpdGggdGhlIHR1bm5lbCBlbmRwb2ludHMuIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSB0aGUgdHVubmVsIGtleSAoaWYgYW55KSwgdGhlIHByb3RvY29sIHR5cGUgKGUuZy4sIEdSRSwgSVBJUCwgVlhMQU4pLCBhbmQgYW55IG9wdGlvbnMgdGhhdCBtaWdodCBuZWVkIHRvIGJlIHNldCBpbiB0aGUgb3V0ZXIgaGVhZGVyLiBJJ2xsIGJlIHNjcnV0aW5pemluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBzdGFjaydzIElQIGhlYWRlciBjb25zdHJ1Y3Rpb24gcm91dGluZXMsIGFuZCBpZiB0aGVyZSdzIGFueSBjbGV2ZXJuZXNzIGluIGl0cyBoYW5kbGluZyBvZiBmcmFnbWVudGF0aW9uIG9yIE1UVSBjb25zaWRlcmF0aW9ucy4gVGhlIGdvYWwgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gaG93IHRoZSBlbmNhcHN1bGF0aW9uIHByb2Nlc3MgaXMgb3JjaGVzdHJhdGVkIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NDEwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjQ6NDEuMDMzNjI2ODg1WiIsIlNlcSI6NzMsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3MDpcXHRcXG4gODcxOlxcdFxcdGlmIChlcnIpIHtcXG4gODcyOlxcdFxcdFxcdG5sYV9uZXN0X2NhbmNlbChza2IsIG5lc3QpO1xcbiA4NzM6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gODc0OlxcdFxcdH1cXG4gODc1OlxcdFxcbiA4NzY6XFx0XFx0bmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7XFxuIDg3NzpcXHRcXHRyZXR1cm4gMDtcXG4gODc4OlxcdH1cXG4gODc5OlxcdFxcbiA4ODA6XFx0c3RhdGljIGludCBpcF90dW5fZmlsbF9lbmNhcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuIDg4MTpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpXFxuIDg4MjpcXHR7XFxuIDg4MzpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKGx3dHN0YXRlKTtcXG4gODg0OlxcdFxcbiA4ODU6XFx0XFx0aWYgKG5sYV9wdXRfYmU2NChza2IsIExXVFVOTkVMX0lQX0lELCB0dW5faW5mby1cXHUwMDNla2V5LnR1bl9pZCxcXG4gODg2OlxcdFxcdFxcdFxcdCBMV1RVTk5FTF9JUF9QQUQpIHx8XFxuIDg4NzpcXHRcXHQgICAgbmxhX3B1dF9pbl9hZGRyKHNrYiwgTFdUVU5ORUxfSVBfRFNULCB0dW5faW5mby1cXHUwMDNla2V5LnUuaXB2NC5kc3QpIHx8XFxuIDg4ODpcXHRcXHQgICAgbmxhX3B1dF9pbl9hZGRyKHNrYiwgTFdUVU5ORUxfSVBfU1JDLCB0dW5faW5mby1cXHUwMDNla2V5LnUuaXB2NC5zcmMpIHx8XFxuIDg4OTpcXHRcXHQgICAgbmxhX3B1dF91OChza2IsIExXVFVOTkVMX0lQX1RPUywgdHVuX2luZm8tXFx1MDAzZWtleS50b3MpIHx8XFxuIDg5MDpcXHRcXHQgICAgbmxhX3B1dF91OChza2IsIExXVFVOTkVMX0lQX1RUTCwgdHVuX2luZm8tXFx1MDAzZWtleS50dGwpIHx8XFxuIDg5MTpcXHRcXHQgICAgbmxhX3B1dF9iZTE2KHNrYiwgTFdUVU5ORUxfSVBfRkxBR1MsXFxuIDg5MjpcXHRcXHRcXHRcXHQgaXBfdHVubmVsX2ZsYWdzX3RvX2JlMTYodHVuX2luZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpKSB8fFxcbiA4OTM6XFx0XFx0ICAgIGlwX3R1bl9maWxsX2VuY2FwX29wdHMoc2tiLCBMV1RVTk5FTF9JUF9PUFRTLCB0dW5faW5mbykpXFxuIDg5NDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODk1OlxcdFxcbiA4OTY6XFx0XFx0cmV0dXJuIDA7XFxuIDg5NzpcXHR9XFxuIDg5ODpcXHRcXG4gODk5OlxcdHN0YXRpYyBpbnQgaXBfdHVuX29wdHNfbmxzaXplKHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcXG4gOTAwOlxcdHtcXG4gOTAxOlxcdFxcdGludCBvcHRfbGVuO1xcbiA5MDI6XFx0XFxuIDkwMzpcXHRcXHRpZiAoIWlwX3R1bm5lbF9pc19vcHRpb25zX3ByZXNlbnQoaW5mby1cXHUwMDNla2V5LnR1bl9mbGFncykpXFxuIDkwNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gOTA1OlxcdFxcbiA5MDY6XFx0XFx0b3B0X2xlbiA9IG5sYV90b3RhbF9zaXplKDApO1xcdFxcdC8qIExXVFVOTkVMX0lQX09QVFMgKi9cXG4gOTA3OlxcdFxcdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpKSB7XFxuIDkwODpcXHRcXHRcXHRzdHJ1Y3QgZ2VuZXZlX29wdCAqb3B0O1xcbiA5MDk6XFx0XFx0XFx0aW50IG9mZnNldCA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjI0OjQxLjAzMzc1NTczNVoiLCJTZXEiOjc0LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjQ5OTAxNDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgbHd0dW5uZWxfc3RhdGVgIEFsbG9jYXRpb24gYW5kIFVzYWdlKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgdGhlIGBsd3R1bm5lbF9zdGF0ZWAgbWVtb3J5IGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jKClgLiBUaGlzIG1lYW5zIGl0J3MgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLWluaXRpYWxpemVkLCB3aGljaCBpbW1lZGlhdGVseSBydWxlcyBvdXQgYSB3aG9sZSBjbGFzcyBvZiBwb3RlbnRpYWwgcHJvYmxlbXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cblxuTmV4dCwgSSBvYnNlcnZlIHRoYXQgYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuYCBpcyBiZWluZyBzZXQgKmJlZm9yZSogdGhlIGNhbGwgdG8gYGlwX3R1bl9zZXRfb3B0cygpYC4gVGhlIGludGVyZXN0aW5nIHRoaW5nIGhlcmUgaXMgdGhhdCBldmVuIGlmIGBpcF90dW5fc2V0X29wdHMoKWAgZmFpbHMsIHRoZSBgbmV3X3N0YXRlYCAod2hpY2ggcHJlc3VtYWJseSBjb250YWlucyB0aGUgYHR1bl9pbmZvYCBkYXRhKSBpcyBpbW1lZGlhdGVseSBmcmVlZC4gU28sIHRoZSBzY2VuYXJpbyBkZXNjcmliZWQgaXM6IHRoZSBjb2RlIGVpdGhlciBzZXRzIGBvcHRpb25zX2xlbmAgYW5kIHRoZW4gZmFpbHMsIG9yIHNldHMgYG9wdGlvbnNfbGVuYCBhbmQgdGhlbiBzdWNjZWVkcy4gXG5cblRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBib2lscyBkb3duIHRvIHRoZSAqb3JkZXIqIG9mIHNldHRpbmcgYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuYCByZWxhdGl2ZSB0byB0aGUgY2FsbCB0byBgaXBfdHVuX3NldF9vcHRzKClgLiBCdXQsIGFuZCB0aGlzIGlzIGNydWNpYWwsIGB0dW5faW5mb2AgaXMgYSBsb2NhbCBwb2ludGVyIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBmdW5jdGlvbiwgbm90IHlldCBsaW5rZWQgaW50byBhbnkgcHVibGlzaGVkIGRhdGEgc3RydWN0dXJlcy4gQXMgSSB1bmRlcnN0YW5kIGl0LCBpdCdzIG5vdCBleHBvc2VkIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVsaW1pbmF0ZSBhbnkgcG9zc2liaWxpdHkgb2YgZXh0ZXJuYWwgcmVhZHMuXG5cbkdpdmVuIHRoYXQgYWxsIHRoZSBtZW1vcnkgaW4gYG5ld19zdGF0ZWAgYW5kIGB0dW5faW5mb2AgaXMgemVyby1pbml0aWFsaXplZCB2aWEgYGt6YWxsb2MoKWAsIGFuZCB0aGF0IHRoZSBgdHVuX2luZm9gIGRhdGEgaXMgbG9jYWwgdG8gdGhpcyBhbGxvY2F0aW9uIGFuZCBzZXR1cCBwcm9jZXNzLCBhbmQgdGhhdCB0aGUgb25seSBvYnNlcnZlZCBkaWZmZXJlbmNlIGlzIHNldHRpbmcgYG9wdGlvbnNfbGVuYCBhbmQgcG90ZW50aWFsbHkgZmFpbGluZywgSSBkb24ndCBzZWUgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5JJ2QgbGlrZSB0byBjaGVjayBgaXA2X3R1bl9idWlsZF9zdGF0ZWAgdG9vIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQ4MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjI0OjQ0LjI4MzY2MDE5OVoiLCJTZXEiOjc1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk4MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk4MDpcXHR9O1xcbiA5ODE6XFx0XFxuIDk4MjpcXHRzdGF0aWMgaW50IGlwNl90dW5fYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbiA5ODM6XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBmYW1pbHksIGNvbnN0IHZvaWQgKmNmZyxcXG4gOTg0OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKip0cyxcXG4gOTg1OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDk4NjpcXHR7XFxuIDk4NzpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltMV1RVTk5FTF9JUDZfTUFYICsgMV07XFxuIDk4ODpcXHRcXHRzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKm5ld19zdGF0ZTtcXG4gOTg5OlxcdFxcdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm87XFxuIDk5MDpcXHRcXHRpbnQgZXJyLCBvcHRfbGVuO1xcbiA5OTE6XFx0XFxuIDk5MjpcXHRcXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIExXVFVOTkVMX0lQNl9NQVgsIGF0dHIsXFxuIDk5MzpcXHRcXHRcXHRcXHRcXHRcXHQgIGlwNl90dW5fcG9saWN5LCBleHRhY2spO1xcbiA5OTQ6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDk5NTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA5OTY6XFx0XFxuIDk5NzpcXHRcXHRvcHRfbGVuID0gaXBfdHVuX2dldF9vcHRsZW4odGJbTFdUVU5ORUxfSVA2X09QVFNdLCBleHRhY2spO1xcbiA5OTg6XFx0XFx0aWYgKG9wdF9sZW4gXFx1MDAzYyAwKVxcbiA5OTk6XFx0XFx0XFx0cmV0dXJuIG9wdF9sZW47XFxuMTAwMDpcXHRcXG4xMDAxOlxcdFxcdG5ld19zdGF0ZSA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHNpemVvZigqdHVuX2luZm8pICsgb3B0X2xlbik7XFxuMTAwMjpcXHRcXHRpZiAoIW5ld19zdGF0ZSlcXG4xMDAzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjEwMDQ6XFx0XFxuMTAwNTpcXHRcXHRuZXdfc3RhdGUtXFx1MDAzZXR5cGUgPSBMV1RVTk5FTF9FTkNBUF9JUDY7XFxuMTAwNjpcXHRcXG4xMDA3OlxcdFxcdHR1bl9pbmZvID0gbHd0X3R1bl9pbmZvKG5ld19zdGF0ZSk7XFxuMTAwODpcXHRcXHR0dW5faW5mby1cXHUwMDNlb3B0aW9uc19sZW4gPSBvcHRfbGVuO1xcbjEwMDk6XFx0XFxuMTAxMDpcXHRcXHRlcnIgPSBpcF90dW5fc2V0X29wdHModGJbTFdUVU5ORUxfSVA2X09QVFNdLCB0dW5faW5mbywgZXh0YWNrKTtcXG4xMDExOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMTAxMjpcXHRcXHRcXHRsd3RzdGF0ZV9mcmVlKG5ld19zdGF0ZSk7XFxuMTAxMzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEwMTQ6XFx0XFx0fVxcbjEwMTU6XFx0XFxuMTAxNjpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVA2X0lEXSlcXG4xMDE3OlxcdFxcdFxcdHR1bl9pbmZvLVxcdTAwM2VrZXkudHVuX2lkID0gbmxhX2dldF9iZTY0KHRiW0xXVFVOTkVMX0lQNl9JRF0pO1xcbjEwMTg6XFx0XFxuMTAxOTpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVA2X0RTVF0pXFxuMTAyMDpcXHRcXHRcXHR0dW5faW5mby1cXHUwMDNla2V5LnUuaXB2Ni5kc3QgPSBubGFfZ2V0X2luNl9hZGRyKHRiW0xXVFVOTkVMX0lQNl9EU1RdKTtcXG4xMDIxOlxcdFxcbjEwMjI6XFx0XFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9TUkNdKVxcbjEwMjM6XFx0XFx0XFx0dHVuX2luZm8tXFx1MDAzZWtleS51LmlwdjYuc3JjID0gbmxhX2dldF9pbjZfYWRkcih0YltMV1RVTk5FTF9JUDZfU1JDXSk7XFxuMTAyNDpcXHRcXG4xMDI1OlxcdFxcdGlmICh0YltMV1RVTk5FTF9JUDZfSE9QTElNSVRdKVxcbjEwMjY6XFx0XFx0XFx0dHVuX2luZm8tXFx1MDAzZWtleS50dGwgPSBubGFfZ2V0X3U4KHRiW0xXVFVOTkVMX0lQNl9IT1BMSU1JVF0pO1xcbjEwMjc6XFx0XFxuMTAyODpcXHRcXHRpZiAodGJbTFdUVU5ORUxfSVA2X1RDXSlcXG4xMDI5OlxcdFxcdFxcdHR1bl9pbmZvLVxcdTAwM2VrZXkudG9zID0gbmxhX2dldF91OCh0YltMV1RVTk5FTF9JUDZfVENdKTtcXG4xMDMwOlxcdFxcbjEwMzE6XFx0XFx0aWYgKHRiW0xXVFVOTkVMX0lQNl9GTEFHU10pIHtcXG4xMDMyOlxcdFxcdFxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcXG4xMDMzOlxcdFxcdFxcdF9fYmUxNiBkYXRhO1xcbjEwMzQ6XFx0XFxuMTAzNTpcXHRcXHRcXHRkYXRhID0gbmxhX2dldF9iZTE2KHRiW0xXVFVOTkVMX0lQNl9GTEFHU10pO1xcbjEwMzY6XFx0XFx0XFx0aXBfdHVubmVsX2ZsYWdzX2Zyb21fYmUxNihmbGFncywgZGF0YSk7XFxuMTAzNzpcXHRcXHRcXHRpcF90dW5uZWxfY2xlYXJfb3B0aW9uc19wcmVzZW50KGZsYWdzKTtcXG4xMDM4OlxcdFxcbjEwMzk6XFx0XFx0XFx0aXBfdHVubmVsX2ZsYWdzX29yKHR1bl9pbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzLFxcbjEwNDA6XFx0XFx0XFx0XFx0XFx0ICAgdHVuX2luZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MsIGZsYWdzKTtcXG4xMDQxOlxcdFxcdH1cXG4xMDQyOlxcdFxcbjEwNDM6XFx0XFx0dHVuX2luZm8tXFx1MDAzZW1vZGUgPSBJUF9UVU5ORUxfSU5GT19UWCB8IElQX1RVTk5FTF9JTkZPX0lQVjY7XFxuMTA0NDpcXHRcXG4xMDQ1OlxcdFxcdCp0cyA9IG5ld19zdGF0ZTtcXG4xMDQ2OlxcdFxcbjEwNDc6XFx0XFx0cmV0dXJuIDA7XFxuMTA0ODpcXHR9XFxuMTA0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDY6MjQ6NDQuMjgzNzYxNzQ5WiIsIlNlcSI6NzYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUyNDUwNDkxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudCBvZiBJUCBUdW5uZWwgU3RhdGUgQWxsb2NhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCBgaXA2X3R1bl9idWlsZF9zdGF0ZWAgd29ya3MgaW4gYSB2ZXJ5IHNpbWlsYXIgbWFubmVyIHRvIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgd2hldGhlciB0aGlzIGNoYW5nZSByZXF1aXJlcyBLTVNBTiBpbnN0cnVtZW50YXRpb24uIEkgbmVlZCB0byBtYWtlIGEganVkZ21lbnQgYmFzZWQgb24gdGhlc2Ugc3BlY2lmaWMgZ3VpZGVsaW5lcy5cblxuRmlyc3QsIHRoZSBhbGxvY2F0aW9uIGl0c2VsZjogYG5ld19zdGF0ZSA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHNpemVvZigqdHVuX2luZm8pICsgb3B0X2xlbik7YC4gQ3JpdGljYWxseSwgYGx3dHVubmVsX3N0YXRlX2FsbG9jYCB1c2VzIGBremFsbG9jYC4gVGhhdCdzIGEgZ29vZCBzdGFydC4gYGt6YWxsb2NgIHplcm9lcyB0aGUgZW50aXJlIGFsbG9jYXRlZCBidWZmZXIgcmlnaHQgZnJvbSB0aGUgZ2V0LWdvLiBUaGlzIGlzIGltcG9ydGFudC4gSXQgY292ZXJzIGJvdGggdGhlIGB0dW5faW5mb2Agc3RydWN0dXJlIGFuZCB0aGF0IHRyYWlsaW5nIG9wdGlvbnMgYXJlYS5cblxuTmV4dCwgdGhlIG9wdGlvbnMgbGVuZ3RoIGlzIHNldDogYHR1bl9pbmZvLVx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtgIGJlZm9yZSBjYWxsaW5nIGBpcF90dW5fc2V0X29wdHMoLi4uKWAuIFRoaXMgaXMgdml0YWwuIFNldHRpbmcgdGhpcyBsZW5ndGggKmJlZm9yZSogY2FsbGluZyB0aGUgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHdoZW4gYGluZm8tXHUwMDNlb3B0aW9uc2AgaXMgYWNjZXNzZWQgd2l0aGluIGBpcF90dW5fc2V0X29wdHNgLCB0aGUgYG9wdGlvbnNfbGVuYCBmaWVsZCBpcyBkZWZpbml0ZWx5IGluaXRpYWxpemVkLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBmYWxzZSBwb3NpdGl2ZXMgZnJvbSBVQlNBTiBvciBib3VuZHMgY2hlY2tzLlxuXG5UaGVuLCB0aGVyZSdzIHRoZSBlcnJvciBoYW5kbGluZy4gSWYgYGlwX3R1bl9zZXRfb3B0cygpYCBmYWlscywgYGx3dHN0YXRlX2ZyZWUoKWAgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LiBUaGUgc3RydWN0dXJlIGlzIGZyZWVkOyBubyBsaW5nZXJpbmcgdW5pbml0aWFsaXplZCBkYXRhIGlzIGxlZnQgYXJvdW5kLlxuXG5CYXNlZCBvbiB0aGUgZ3VpZGVsaW5lcywgbGV0J3Mgc2VlIHdoZXJlIHRoaXMgZmFsbHM6XG5cbiogICBJJ20gY29uZmlkZW50IHRoYXQgbm8ga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYXJlIGNoYW5nZWQgaGVyZS5cbiogICBUaGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbiogICBBbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBhcmUgaGFuZGxlZCBjbGVhbmx5IHdpdGggYGt6YWxsb2NgLCBlbnN1cmluZyBldmVyeXRoaW5nIGlzIHplcm9lZC5cbiogICBUaGVyZSdzIG5vIHJpc2sgb2YgYW55IGNvZGUgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZHVlIHRvIGJvdW5kcyBjaGVja3MuXG5cbkluIHN1bW1hcnksIHRoZSB1c2Ugb2YgYGt6YWxsb2NgLCB0aGUgb3JkZXIgb2YgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGUgaW1tZWRpYXRlIGZyZWVpbmcgb24gZXJyb3IgYWxsIHBvaW50IHRvd2FyZHMgc2FmZXR5LiBUaGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY29kZS5cblxuVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSdtIHJlYWR5IHRvIGRvY3VtZW50IHRoaXMgcmF0aW9uYWxlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzY2LCJPdXRwdXRUb2tlbnMiOjI5OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjI0OjQ5LjUyODgxMzE5N1oiLCJTZXEiOjc3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGlwX3R1bl9idWlsZF9zdGF0ZSgpYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGUoKWAgdG8gaW5pdGlhbGl6ZSBgdHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtgIHByaW9yIHRvIGNhbGxpbmcgYGlwX3R1bl9zZXRfb3B0cygpYCwgcmF0aGVyIHRoYW4gYWZ0ZXJ3YXJkcy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGZsZXhpYmxlIGFycmF5IG1lbWJlciBgaW5mby1cXHUwMDNlb3B0aW9uc2AgKHdoaWNoIGlzIGFubm90YXRlZCB3aXRoIGBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pYCkgaGFzIGl0cyBjb3VudGVyIHBvcHVsYXRlZCBiZWZvcmUgYWNjZXNzLlxcblxcblJlZ2FyZGluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb246XFxuLSBUaGUgYHN0cnVjdCBsd3R1bm5lbF9zdGF0ZWAgYW5kIGl0cyBlbWJlZGRlZCBgc3RydWN0IGlwX3R1bm5lbF9pbmZvYCBhcmUgYWxsb2NhdGVkIHZpYSBgbHd0dW5uZWxfc3RhdGVfYWxsb2MoKWAsIHdoaWNoIHVzZXMgYGt6YWxsb2MoKWAgd2l0aCBgR0ZQX0FUT01JQ2AuIENvbnNlcXVlbnRseSwgYWxsIGFsbG9jYXRlZCBieXRlcyAoaW5jbHVkaW5nIGhlYWRlcnMgYW5kIHRyYWlsaW5nIG9wdGlvbiBidWZmZXJzKSBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCBhdCBhbGxvY2F0aW9uIHRpbWUuXFxuLSBNb3ZpbmcgdGhlIGFzc2lnbm1lbnQgb2YgYG9wdGlvbnNfbGVuYCBlYXJsaWVyIGRvZXMgbm90IGludHJvZHVjZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBwYWRkaW5nL2ZpZWxkcyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBJZiBgaXBfdHVuX3NldF9vcHRzKClgIGZhaWxzLCB0aGUgc3RhdGUgaXMgZnJlZWQgaW1tZWRpYXRlbHkuXFxuXFxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrIHZlY3RvcnMgYXJlIGludHJvZHVjZWQsIHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGVzZSBjaGFuZ2VzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGlwX3R1bl9idWlsZF9zdGF0ZSgpYCBhbmQgYGlwNl90dW5fYnVpbGRfc3RhdGUoKWAgdG8gaW5pdGlhbGl6ZSBgdHVuX2luZm8tXFx1MDAzZW9wdGlvbnNfbGVuID0gb3B0X2xlbjtgIHByaW9yIHRvIGNhbGxpbmcgYGlwX3R1bl9zZXRfb3B0cygpYCwgcmF0aGVyIHRoYW4gYWZ0ZXJ3YXJkcy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGZsZXhpYmxlIGFycmF5IG1lbWJlciBgaW5mby1cXHUwMDNlb3B0aW9uc2AgKHdoaWNoIGlzIGFubm90YXRlZCB3aXRoIGBfX2NvdW50ZWRfYnkob3B0aW9uc19sZW4pYCkgaGFzIGl0cyBjb3VudGVyIHBvcHVsYXRlZCBiZWZvcmUgYWNjZXNzLlxcblxcblJlZ2FyZGluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb246XFxuLSBUaGUgYHN0cnVjdCBsd3R1bm5lbF9zdGF0ZWAgYW5kIGl0cyBlbWJlZGRlZCBgc3RydWN0IGlwX3R1bm5lbF9pbmZvYCBhcmUgYWxsb2NhdGVkIHZpYSBgbHd0dW5uZWxfc3RhdGVfYWxsb2MoKWAsIHdoaWNoIHVzZXMgYGt6YWxsb2MoKWAgd2l0aCBgR0ZQX0FUT01JQ2AuIENvbnNlcXVlbnRseSwgYWxsIGFsbG9jYXRlZCBieXRlcyAoaW5jbHVkaW5nIGhlYWRlcnMgYW5kIHRyYWlsaW5nIG9wdGlvbiBidWZmZXJzKSBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCBhdCBhbGxvY2F0aW9uIHRpbWUuXFxuLSBNb3ZpbmcgdGhlIGFzc2lnbm1lbnQgb2YgYG9wdGlvbnNfbGVuYCBlYXJsaWVyIGRvZXMgbm90IGludHJvZHVjZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBwYWRkaW5nL2ZpZWxkcyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBJZiBgaXBfdHVuX3NldF9vcHRzKClgIGZhaWxzLCB0aGUgc3RhdGUgaXMgZnJlZWQgaW1tZWRpYXRlbHkuXFxuXFxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrIHZlY3RvcnMgYXJlIGludHJvZHVjZWQsIHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGVzZSBjaGFuZ2VzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowj4zvz[1] Phase: Succeeded StartedAt: 2026-09-12 06:25:00 +0000 UTC FinishedAt: 2026-09-12 06:25:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj4zvz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-12 06:25:00 +0000 UTC FinishedAt: 2026-09-12 06:25:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj4zvz[2] Phase: Running StartedAt: 2026-09-12 06:25:00 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj4zvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17d3afadf539c93def8106bbb83c88274bdc7ab1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","LWTUNNEL","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"17d3afadf539c93def8106bbb83c88274bdc7ab1","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tun_build_state","ip6_tun_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"17d3afadf539c93def8106bbb83c88274bdc7ab1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","LWTUNNEL","IPV6"],"series_id":"53f13f40-0d63-442d-bca7-8053a6e4b916","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-09-12 06:25:00 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"17d3afadf539c93def8106bbb83c88274bdc7ab1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","LWTUNNEL","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"base_commit":"17d3afadf539c93def8106bbb83c88274bdc7ab1","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tun_build_state","ip6_tun_build_state"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"17d3afadf539c93def8106bbb83c88274bdc7ab1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","LWTUNNEL","IPV6"],"series_id":"53f13f40-0d63-442d-bca7-8053a6e4b916","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-workflowj4zvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17d3afadf539c93def8106bbb83c88274bdc7ab1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","LWTUNNEL","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"17d3afadf539c93def8106bbb83c88274bdc7ab1","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tun_build_state","ip6_tun_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"17d3afadf539c93def8106bbb83c88274bdc7ab1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","LWTUNNEL","IPV6"],"series_id":"53f13f40-0d63-442d-bca7-8053a6e4b916","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-09-12 06:25:00 +0000 UTC FinishedAt: 2026-09-12 06:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj4zvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17d3afadf539c93def8106bbb83c88274bdc7ab1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","LWTUNNEL","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"17d3afadf539c93def8106bbb83c88274bdc7ab1","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tun_build_state","ip6_tun_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"17d3afadf539c93def8106bbb83c88274bdc7ab1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","LWTUNNEL","IPV6"],"series_id":"53f13f40-0d63-442d-bca7-8053a6e4b916","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-09-12 06:25:00 +0000 UTC FinishedAt: 2026-09-12 06:25:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"17d3afadf539c93def8106bbb83c88274bdc7ab1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","LWTUNNEL","IPV6"],"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-workflowj4zvz/series-workflowj4zvz-convert-artifact-2766127233/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj4zvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17d3afadf539c93def8106bbb83c88274bdc7ab1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","LWTUNNEL","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"17d3afadf539c93def8106bbb83c88274bdc7ab1","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tun_build_state","ip6_tun_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"17d3afadf539c93def8106bbb83c88274bdc7ab1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","LWTUNNEL","IPV6"],"series_id":"53f13f40-0d63-442d-bca7-8053a6e4b916","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: Running StartedAt: 2026-09-12 06:25:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj4zvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17d3afadf539c93def8106bbb83c88274bdc7ab1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","LWTUNNEL","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"17d3afadf539c93def8106bbb83c88274bdc7ab1","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tun_build_state","ip6_tun_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"17d3afadf539c93def8106bbb83c88274bdc7ab1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","LWTUNNEL","IPV6"],"series_id":"53f13f40-0d63-442d-bca7-8053a6e4b916","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: Running StartedAt: 2026-09-12 06:25:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*5df446b5-8e92-43d9-b299-be260fb9adcd,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-workflowj4zvz/series-workflowj4zvz-convert-artifact-2766127233/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj4zvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"17d3afadf539c93def8106bbb83c88274bdc7ab1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","LWTUNNEL","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"17d3afadf539c93def8106bbb83c88274bdc7ab1","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tun_build_state","ip6_tun_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"17d3afadf539c93def8106bbb83c88274bdc7ab1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","LWTUNNEL","IPV6"],"series_id":"53f13f40-0d63-442d-bca7-8053a6e4b916","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: Running StartedAt: 2026-09-12 06:25:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*5df446b5-8e92-43d9-b299-be260fb9adcd,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-workflowj4zvz/series-workflowj4zvz-convert-artifact-2766127233/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,}