Name: series-workflowrwhm6 Phase: Succeeded StartedAt: 2026-08-29 12:06:10 +0000 UTC FinishedAt: 2026-08-29 16:43:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[0] Phase: Succeeded StartedAt: 2026-08-29 12:06:10 +0000 UTC FinishedAt: 2026-08-29 13:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 12:06:10 +0000 UTC FinishedAt: 2026-08-29 13:05:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC", "INET" ], "series_id": "5e027c65-0e45-47fb-9868-b1b6ea4851fd" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tipc_link_create", "tipc_link_bc_create", "tipc_link_build_reset_msg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfbGlua19jcmVhdGUmIzM0OywKICAgICYjMzQ7dGlwY19saW5rX2JjX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt0aXBjX2xpbmtfYnVpbGRfcmVzZXRfbXNnJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgdW5zYWZlIGBzdHJjcHlgIGNhbGxzIHdpdGggYHN0cnNjcHlgIGluIGB0aXBjX2xpbmtfY3JlYXRlYCBhbmQgYHRpcGNfbGlua19iY19jcmVhdGVgLCBhbmQgY2hhbmdlcyBgc3RyY3B5YCB0byBgbWVtY3B5KGRhdGEsIGwtXHUwMDNlaWZfbmFtZSwgVElQQ19NQVhfSUZfTkFNRSlgIGluIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYC5cblxuVGhlIGBzdHJ1Y3QgdGlwY19saW5rYCBpbnN0YW5jZSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigqbCwgR0ZQX0FUT01JQylgLCBlbnN1cmluZyB0aGF0IGFsbCBmaWVsZHMgaW5jbHVkaW5nIGBsLVx1MDAzZWlmX25hbWVgIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBDb3B5aW5nIGBUSVBDX01BWF9JRl9OQU1FYCBieXRlcyBmcm9tIGBsLVx1MDAzZWlmX25hbWVgIGludG8gdGhlIHBhY2tldCBwYXlsb2FkIGBkYXRhYCByZWFkcyBvbmx5IGZ1bGx5IGluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBicmFuY2hpbmcsIG9yIHVzZXItc3BhY2UgaW5mbyBsZWFrcy5cblxuU3RhbmRhcmQgS0FTQU4gYW5kIGNvbXBpbGVyIGZvcnRpZmljYXRpb25zIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIG9yIGJ1ZmZlciBvdmVyZmxvdyBidWdzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgVElQQyBsaW5rIGluaXRpYWxpemF0aW9uIGFuZCBwcm90b2NvbCBtZXNzYWdlIGNvbnN0cnVjdGlvbiBsb2dpYyBpbiBuZXQvdGlwYy9saW5rLmMgKHVzaW5nIHN0cnNjcHkgYW5kIGJvdW5kZWQgbWVtY3B5IGluc3RlYWQgb2Ygc3RyY3B5KS4gVElQQyBpcyBmdWxseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZhMWJmY2UwM2VjOGI1OTM1ZDM0YWViODQ4ZjY4MWZmYjlkNTc3OWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxMzowMDo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmMgYi9uZXQvdGlwYy9saW5rLmNcbmluZGV4IDQ5ZGZjMDk4ZDg5YjIuLjY0MjdjNjlmODkyOTQgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9saW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL2xpbmsuY1xuQEAgLTUwNCw3ICYjNDM7NTA0LDcgQEAgYm9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCxcbiBcdHNucHJpbnRmKGwtXHUwMDNlbmFtZSwgc2l6ZW9mKGwtXHUwMDNlbmFtZSksIFwmIzM0OyVzOiVzLSVzOnVua25vd25cJiMzNDssXG4gXHRcdCBzZWxmX3N0ciwgaWZfbmFtZSwgcGVlcl9zdHIpO1xuIFxuLVx0c3RyY3B5KGwtXHUwMDNlaWZfbmFtZSwgaWZfbmFtZSk7XG4mIzQzO1x0c3Ryc2NweShsLVx1MDAzZWlmX25hbWUsIGlmX25hbWUpO1xuIFx0bC1cdTAwM2VhZGRyID0gcGVlcjtcbiBcdGwtXHUwMDNlcGVlcl9jYXBzID0gcGVlcl9jYXBzO1xuIFx0bC1cdTAwM2VuZXQgPSBuZXQ7XG5AQCAtNTc0LDcgJiM0Mzs1NzQsNyBAQCBib29sIHRpcGNfbGlua19iY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgb3dubm9kZSwgdTMyIHBlZXIsIHU4ICpwZWVyX2lkLFxuIFx0XHRzbnByaW50ZihsLVx1MDAzZW5hbWUsIHNpemVvZihsLVx1MDAzZW5hbWUpLCBcJiMzNDslczolc1wmIzM0OywgdGlwY19iY2xpbmtfbmFtZSxcbiBcdFx0XHQgcGVlcl9zdHIpO1xuIFx0fSBlbHNlIHtcbi1cdFx0c3RyY3B5KGwtXHUwMDNlbmFtZSwgdGlwY19iY2xpbmtfbmFtZSk7XG4mIzQzO1x0XHRzdHJzY3B5KGwtXHUwMDNlbmFtZSwgdGlwY19iY2xpbmtfbmFtZSk7XG4gXHR9XG4gXHR0cmFjZV90aXBjX2xpbmtfcmVzZXQobCwgVElQQ19EVU1QX0FMTCwgXCYjMzQ7YmNsaW5rIGNyZWF0ZWQhXCYjMzQ7KTtcbiBcdHRpcGNfbGlua19yZXNldChsKTtcbkBAIC0xODk4LDcgJiM0MzsxODk4LDcgQEAgc3RhdGljIHZvaWQgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBpbnQgbXR5cCwgYm9vbCBwcm9iZSxcbiBcdFx0XHRtc2dfc2V0X2Rlc3Rfc2Vzc2lvbihoZHIsIGwtXHUwMDNlcGVlcl9zZXNzaW9uKTtcbiBcdFx0fVxuIFx0XHRtc2dfc2V0X21heF9wa3QoaGRyLCBsLVx1MDAzZWFkdmVydGlzZWRfbXR1KTtcbi1cdFx0c3RyY3B5KGRhdGEsIGwtXHUwMDNlaWZfbmFtZSk7XG4mIzQzO1x0XHRtZW1jcHkoZGF0YSwgbC1cdTAwM2VpZl9uYW1lLCBUSVBDX01BWF9JRl9OQU1FKTtcbiBcdFx0bXNnX3NldF9zaXplKGhkciwgSU5UX0hfU0laRSAmIzQzOyBUSVBDX01BWF9JRl9OQU1FKTtcbiBcdFx0c2tiX3RyaW0oc2tiLCBJTlRfSF9TSVpFICYjNDM7IFRJUENfTUFYX0lGX05BTUUpO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfbGlua19jcmVhdGUmIzM0OywKICAgICYjMzQ7dGlwY19saW5rX2JjX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt0aXBjX2xpbmtfYnVpbGRfcmVzZXRfbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFRJUEMgbGluayBpbml0aWFsaXphdGlvbiBhbmQgcHJvdG9jb2wgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gbG9naWMgaW4gbmV0L3RpcGMvbGluay5jICh1c2luZyBzdHJzY3B5IGFuZCBib3VuZGVkIG1lbWNweSBpbnN0ZWFkIG9mIHN0cmNweSkuIFRJUEMgaXMgZnVsbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YTFiZmNlMDNlYzhiNTkzNWQzNGFlYjg0OGY2ODFmZmI5ZDU3NzliCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMTM6MDA6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmMgYi9uZXQvdGlwYy9saW5rLmMKaW5kZXggNDlkZmMwOThkODliMi4uNjQyN2M2OWY4OTI5NCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL2xpbmsuYwpAQCAtNTA0LDcgJiM0Mzs1MDQsNyBAQCBib29sIHRpcGNfbGlua19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppZl9uYW1lLCBpbnQgYmVhcmVyX2lkLAogCXNucHJpbnRmKGwtJmd0O25hbWUsIHNpemVvZihsLSZndDtuYW1lKSwgJiMzNDslczolcy0lczp1bmtub3duJiMzNDssCiAJCSBzZWxmX3N0ciwgaWZfbmFtZSwgcGVlcl9zdHIpOwogCi0Jc3RyY3B5KGwtJmd0O2lmX25hbWUsIGlmX25hbWUpOwomIzQzOwlzdHJzY3B5KGwtJmd0O2lmX25hbWUsIGlmX25hbWUpOwogCWwtJmd0O2FkZHIgPSBwZWVyOwogCWwtJmd0O3BlZXJfY2FwcyA9IHBlZXJfY2FwczsKIAlsLSZndDtuZXQgPSBuZXQ7CkBAIC01NzQsNyAmIzQzOzU3NCw3IEBAIGJvb2wgdGlwY19saW5rX2JjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBvd25ub2RlLCB1MzIgcGVlciwgdTggKnBlZXJfaWQsCiAJCXNucHJpbnRmKGwtJmd0O25hbWUsIHNpemVvZihsLSZndDtuYW1lKSwgJiMzNDslczolcyYjMzQ7LCB0aXBjX2JjbGlua19uYW1lLAogCQkJIHBlZXJfc3RyKTsKIAl9IGVsc2UgewotCQlzdHJjcHkobC0mZ3Q7bmFtZSwgdGlwY19iY2xpbmtfbmFtZSk7CiYjNDM7CQlzdHJzY3B5KGwtJmd0O25hbWUsIHRpcGNfYmNsaW5rX25hbWUpOwogCX0KIAl0cmFjZV90aXBjX2xpbmtfcmVzZXQobCwgVElQQ19EVU1QX0FMTCwgJiMzNDtiY2xpbmsgY3JlYXRlZCEmIzM0Oyk7CiAJdGlwY19saW5rX3Jlc2V0KGwpOwpAQCAtMTg5OCw3ICYjNDM7MTg5OCw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsCiAJCQltc2dfc2V0X2Rlc3Rfc2Vzc2lvbihoZHIsIGwtJmd0O3BlZXJfc2Vzc2lvbik7CiAJCX0KIAkJbXNnX3NldF9tYXhfcGt0KGhkciwgbC0mZ3Q7YWR2ZXJ0aXNlZF9tdHUpOwotCQlzdHJjcHkoZGF0YSwgbC0mZ3Q7aWZfbmFtZSk7CiYjNDM7CQltZW1jcHkoZGF0YSwgbC0mZ3Q7aWZfbmFtZSwgVElQQ19NQVhfSUZfTkFNRSk7CiAJCW1zZ19zZXRfc2l6ZShoZHIsIElOVF9IX1NJWkUgJiM0MzsgVElQQ19NQVhfSUZfTkFNRSk7CiAJCXNrYl90cmltKHNrYiwgSU5UX0hfU0laRSAmIzQzOyBUSVBDX01BWF9JRl9OQU1FKTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTAKCQkJCQkJCW91dHB1dDogMTAxCgkJCQkJCQl0aG91Z2h0czogMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVElQQyBMaW5rIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIHByb3ZpZGVkIHRvb2xzIHN1Z2dlc3QgYSBjb2RlIGluc3BlY3Rpb24gaXMgaW4gb3JkZXIuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHBhdGNoIHRhcmdldGluZyBgbmV0L3RpcGMvbGluay5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgZGlmZiBoaWdobGlnaHRzIHNvbWUgaW50ZXJlc3Rpbmcgc3RyaW5nIGhhbmRsaW5nIGNoYW5nZXMuCgpUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhlIHJlcGxhY2VtZW50IG9mIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIGluIGB0aXBjX2xpbmtfY3JlYXRlKClgIGFuZCBgdGlwY19saW5rX2JjX2NyZWF0ZSgpYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93IHByZXZlbnRpb24gbWVhc3VyZS4gUmVwbGFjaW5nIGEgcG90ZW50aWFsbHkgdW5ib3VuZGVkIGNvcHkgd2l0aCBhIHNhZmUsIGJvdW5kZWQgY29weSBpcyBhbHdheXMgYSBnb29kIHByYWN0aWNlLCBlc3BlY2lhbGx5IGluIGEgbmV0d29yayBjb250ZXh0IHdoZXJlIG1hbGljaW91cyBhY3RvcnMgbWlnaHQgdHJ5IHRvIGV4cGxvaXQgdnVsbmVyYWJpbGl0aWVzIHRocm91Z2ggY3JhZnRlZCBpbnB1dC4gS3Vkb3MgZm9yIHNwb3R0aW5nIGFuZCBhZGRyZXNzaW5nIHRob3NlLgoKVGhlIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKClgIGNoYW5nZSwgaG93ZXZlciwgc3dhcHBpbmcgYHN0cmNweWAgd2l0aCBgbWVtY3B5YCB3aXRoIGBUSVBDX01BWF9JRl9OQU1FYCBhcyB0aGUgc2l6ZSBhcmd1bWVudCwgaXMgaW50ZXJlc3RpbmcuIEl0IHN0aWxsIGxvb2tzIGxpa2UgYW4gYXR0ZW1wdCB0byBtYWtlIHRoZSBjb2RlIHNhZmVyIGFuZCBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3MuIEkmIzM5O2QgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbnRleHRzIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIG9yaWdpbmFsIGBzdHJjcHlgIHVzYWdlcy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYFRJUENfTUFYX0lGX05BTUVgIGlzIHRoZSBjb3JyZWN0IGxpbWl0IGFuZCBpZiBpdCYjMzk7cyBjb25zaXN0ZW50bHkgZW5mb3JjZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGF0ZWQgY29kZSB0byBzZWUgaWYgdGhlcmUgd2VyZSBhbnkgaXNzdWVzIHJlcG9ydGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGFzIHdlbGwsIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgY29uZmlndXJhYmxlIHZhbHVlcy4KClRpbWUgdG8gcHVsbCB1cCBgbmV0L3RpcGMvbGluay5jYCBhbmQgc3RhcnQgcmVhZGluZyBhcm91bmQgdGhvc2UgY2FsbCBzaXRlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGVkZ2UgY2FzZXMsIGFuZCwgb2YgY291cnNlLCB0byBtYWtlIHN1cmUgdGhlIHJlcGxhY2VtZW50cyBhcmUgZnVuY3Rpb25hbGx5IHNvdW5kIGFuZCBkb24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy4gSXQmIzM5O3MgdGltZSB0byBjb25maXJtIHRoYXQgdGhlIHBhdGNoIGlzIGluZGVlZCBhIGdvb2QgdGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VElQQ19NQVhfSUZfTkFNRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2JlYXJlci5jPTEzNz1zdGF0aWMgaW50IGJlYXJlcl9uYW1lX3ZhbGlkYXRlKGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubmV0L3RpcGMvYmVhcmVyLmMtMTYwLVx0aWYgKChtZWRpYV9sZW4gXHUwMDNjPSAxKSB8fCAobWVkaWFfbGVuIFx1MDAzZSBUSVBDX01BWF9NRURJQV9OQU1FKSB8fFxubmV0L3RpcGMvYmVhcmVyLmM6MTYxOlx0ICAgIChpZl9sZW4gXHUwMDNjPSAxKSB8fCAoaWZfbGVuIFx1MDAzZSBUSVBDX01BWF9JRl9OQU1FKSlcbm5ldC90aXBjL2JlYXJlci5jLTE2Mi1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L3RpcGMvYmVhcmVyLmMtMTY5LVx0XHRpZiAoc3Ryc2NweShuYW1lX3BhcnRzLVx1MDAzZWlmX25hbWUsIGlmX25hbWUsXG5uZXQvdGlwYy9iZWFyZXIuYzoxNzA6XHRcdFx0ICAgIFRJUENfTUFYX0lGX05BTUUpIFx1MDAzYyAwKVxubmV0L3RpcGMvYmVhcmVyLmMtMTcxLVx0XHRcdHJldHVybiAwO1xuLS1cbm5ldC90aXBjL2JlYXJlci5oPTE3OT1zdHJ1Y3QgdGlwY19iZWFyZXJfbmFtZXMge1xubmV0L3RpcGMvYmVhcmVyLmgtMTgwLVx0Y2hhciBtZWRpYV9uYW1lW1RJUENfTUFYX01FRElBX05BTUVdO1xubmV0L3RpcGMvYmVhcmVyLmg6MTgxOlx0Y2hhciBpZl9uYW1lW1RJUENfTUFYX0lGX05BTUVdO1xubmV0L3RpcGMvYmVhcmVyLmgtMTgyLX07XG4tLVxubmV0L3RpcGMvbGluay5jPTEzNz1zdHJ1Y3QgdGlwY19saW5rIHtcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTU1LVx0dTMyIHNpbGVudF9pbnR2X2NudDtcbm5ldC90aXBjL2xpbmsuYzoxNTY6XHRjaGFyIGlmX25hbWVbVElQQ19NQVhfSUZfTkFNRV07XG5uZXQvdGlwYy9saW5rLmMtMTU3LVx0dTMyIHByaW9yaXR5O1xuLS1cbm5ldC90aXBjL2xpbmsuYz0xODMyPXN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsXG4tLVxubmV0L3RpcGMvbGluay5jLTE5MDAtXHRcdG1zZ19zZXRfbWF4X3BrdChoZHIsIGwtXHUwMDNlYWR2ZXJ0aXNlZF9tdHUpO1xubmV0L3RpcGMvbGluay5jOjE5MDE6XHRcdG1lbWNweShkYXRhLCBsLVx1MDAzZWlmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpO1xubmV0L3RpcGMvbGluay5jOjE5MDI6XHRcdG1zZ19zZXRfc2l6ZShoZHIsIElOVF9IX1NJWkUgJiM0MzsgVElQQ19NQVhfSUZfTkFNRSk7XG5uZXQvdGlwYy9saW5rLmM6MTkwMzpcdFx0c2tiX3RyaW0oc2tiLCBJTlRfSF9TSVpFICYjNDM7IFRJUENfTUFYX0lGX05BTUUpO1xubmV0L3RpcGMvbGluay5jLTE5MDQtXHR9XG4tLVxubmV0L3RpcGMvbGluay5jPTIxNzQ9c3RhdGljIGludCB0aXBjX2xpbmtfcHJvdG9fcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvbGluay5jLTIyMjMtXHRcdGlmX25hbWUgPSAgc3RycmNocihsLVx1MDAzZW5hbWUsICYjMzk7OiYjMzk7KSAmIzQzOyAxO1xubmV0L3RpcGMvbGluay5jOjIyMjQ6XHRcdGlmIChzaXplb2YobC1cdTAwM2VuYW1lKSAtIChpZl9uYW1lIC0gbC1cdTAwM2VuYW1lKSBcdTAwM2M9IFRJUENfTUFYX0lGX05BTUUpXG5uZXQvdGlwYy9saW5rLmMtMjIyNS1cdFx0XHRicmVhaztcbm5ldC90aXBjL2xpbmsuYzoyMjI2Olx0XHRpZiAobXNnX2RhdGFfc3ooaGRyKSBcdTAwM2MgVElQQ19NQVhfSUZfTkFNRSlcbm5ldC90aXBjL2xpbmsuYy0yMjI3LVx0XHRcdGJyZWFrO1xubmV0L3RpcGMvbGluay5jOjIyMjg6XHRcdHN0cnNjcHkoaWZfbmFtZSwgZGF0YSwgVElQQ19NQVhfSUZfTkFNRSk7XG5uZXQvdGlwYy9saW5rLmMtMjIyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL2xpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDk1Olx0XG4gNDk2Olx0XHQvKiBTZXQgbGluayBuYW1lIGZvciB1bmljYXN0IGxpbmtzIG9ubHkgKi9cbiA0OTc6XHRcdGlmIChwZWVyX2lkKSB7XG4gNDk4Olx0XHRcdGlmICh0aXBjX25vZGVpZDJzdHJpbmcoc2VsZl9zdHIsIHRpcGNfb3duX2lkKG5ldCkpIFx1MDAzZSBOT0RFX0lEX0xFTilcbiA0OTk6XHRcdFx0XHRzcHJpbnRmKHNlbGZfc3RyLCBcJiMzNDsleFwmIzM0Oywgc2VsZik7XG4gNTAwOlx0XHRcdGlmICh0aXBjX25vZGVpZDJzdHJpbmcocGVlcl9zdHIsIHBlZXJfaWQpIFx1MDAzZSBOT0RFX0lEX0xFTilcbiA1MDE6XHRcdFx0XHRzcHJpbnRmKHBlZXJfc3RyLCBcJiMzNDsleFwmIzM0OywgcGVlcik7XG4gNTAyOlx0XHR9XG4gNTAzOlx0XHQvKiBQZWVyIGkvZiBuYW1lIHdpbGwgYmUgY29tcGxldGVkIGJ5IHJlc2V0L2FjdGl2YXRlIG1lc3NhZ2UgKi9cbiA1MDQ6XHRcdHNucHJpbnRmKGwtXHUwMDNlbmFtZSwgc2l6ZW9mKGwtXHUwMDNlbmFtZSksIFwmIzM0OyVzOiVzLSVzOnVua25vd25cJiMzNDssXG4gNTA1Olx0XHRcdCBzZWxmX3N0ciwgaWZfbmFtZSwgcGVlcl9zdHIpO1xuIDUwNjpcdFxuIDUwNzpcdFx0c3Ryc2NweShsLVx1MDAzZWlmX25hbWUsIGlmX25hbWUpO1xuIDUwODpcdFx0bC1cdTAwM2VhZGRyID0gcGVlcjtcbiA1MDk6XHRcdGwtXHUwMDNlcGVlcl9jYXBzID0gcGVlcl9jYXBzO1xuIDUxMDpcdFx0bC1cdTAwM2VuZXQgPSBuZXQ7XG4gNTExOlx0XHRsLVx1MDAzZWluX3Nlc3Npb24gPSBmYWxzZTtcbiA1MTI6XHRcdGwtXHUwMDNlYmVhcmVyX2lkID0gYmVhcmVyX2lkO1xuIDUxMzpcdFx0bC1cdTAwM2V0b2xlcmFuY2UgPSB0b2xlcmFuY2U7XG4gNTE0Olx0XHRpZiAoYmNfcmN2bGluaylcbiA1MTU6XHRcdFx0YmNfcmN2bGluay1cdTAwM2V0b2xlcmFuY2UgPSB0b2xlcmFuY2U7XG4gNTE2Olx0XHRsLVx1MDAzZW5ldF9wbGFuZSA9IG5ldF9wbGFuZTtcbiA1MTc6XHRcdGwtXHUwMDNlYWR2ZXJ0aXNlZF9tdHUgPSBtdHU7XG4gNTE4Olx0XHRsLVx1MDAzZW10dSA9IG10dTtcbiA1MTk6XHRcdGwtXHUwMDNlcHJpb3JpdHkgPSBwcmlvcml0eTtcbiA1MjA6XHRcdHRpcGNfbGlua19zZXRfcXVldWVfbGltaXRzKGwsIG1pbl93aW4sIG1heF93aW4pO1xuIDUyMTpcdFx0bC1cdTAwM2VhY2tlcnMgPSAxO1xuIDUyMjpcdFx0bC1cdTAwM2ViY19zbmRsaW5rID0gYmNfc25kbGluaztcbiA1MjM6XHRcdGwtXHUwMDNlYmNfcmN2bGluayA9IGJjX3Jjdmxpbms7XG4gNTI0Olx0XHRsLVx1MDAzZWlucHV0cSA9IGlucHV0cTtcbiA1MjU6XHRcdGwtXHUwMDNlbmFtZWRxID0gbmFtZWRxO1xuIDUyNjpcdFx0bC1cdTAwM2VzdGF0ZSA9IExJTktfUkVTRVRUSU5HO1xuIDUyNzpcdFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmwtXHUwMDNldHJhbnNtcSk7XG4gNTI4Olx0XHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bC1cdTAwM2ViYWNrbG9ncSk7XG4gNTI5Olx0XHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bC1cdTAwM2VkZWZlcmRxKTtcbiA1MzA6XHRcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZsLVx1MDAzZWZhaWxvdmVyX2RlZmVyZHEpO1xuIDUzMTpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZsLVx1MDAzZXdha2V1cHEpO1xuIDUzMjpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChsLVx1MDAzZWlucHV0cSk7XG4gNTMzOlx0XHRyZXR1cm4gdHJ1ZTtcbiA1MzQ6XHR9XG4gNTM1Olx0XG4gNTM2Olx0LyoqXG4gNTM3Olx0ICogdGlwY19saW5rX2JjX2NyZWF0ZSAtIGNyZWF0ZSBuZXcgbGluayB0byBiZSB1c2VkIGZvciBicm9hZGNhc3RcbiA1Mzg6XHQgKiBAbmV0OiBwb2ludGVyIHRvIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcbiA1Mzk6XHQgKiBAbXR1OiBtdHUgdG8gYmUgdXNlZCBpbml0aWFsbHkgaWYgbm8gcGVlcnNcbiA1NDA6XHQgKiBAbWluX3dpbjogbWluaW1hbCBzZW5kIHdpbmRvdyB0byBiZSB1c2VkIGJ5IGxpbmtcbiA1NDE6XHQgKiBAbWF4X3dpbjogbWF4aW1hbCBzZW5kIHdpbmRvdyB0byBiZSB1c2VkIGJ5IGxpbmtcbiA1NDI6XHQgKiBAaW5wdXRxOiBxdWV1ZSB0byBwdXQgbWVzc2FnZXMgcmVhZHkgZm9yIGRlbGl2ZXJ5XG4gNTQzOlx0ICogQG5hbWVkcTogcXVldWUgdG8gcHV0IGJpbmRpbmcgdGFibGUgdXBkYXRlIG1lc3NhZ2VzIHJlYWR5IGZvciBkZWxpdmVyeVxuIDU0NDpcdCAqIEBsaW5rOiByZXR1cm4gdmFsdWUsIHBvaW50ZXIgdG8gcHV0IHRoZSBjcmVhdGVkIGxpbmtcbiA1NDU6XHQgKiBAb3dubm9kZTogaWRlbnRpdHkgb2Ygb3duIG5vZGVcbiA1NDY6XHQgKiBAcGVlcjogbm9kZSBpZCBvZiBwZWVyIG5vZGVcbiA1NDc6XHQgKiBAcGVlcl9pZDogMTI4LWJpdCBJRCBvZiBwZWVyXG4gNTQ4Olx0ICogQHBlZXJfY2FwczogYml0bWFwIGRlc2NyaWJpbmcgcGVlciBub2RlIGNhcGFiaWxpdGllc1xuIDU0OTpcdCAqIEBiY19zbmRsaW5rOiB0aGUgbmFtZXNwYWNlIGdsb2JhbCBsaW5rIHVzZWQgZm9yIGJyb2FkY2FzdCBzZW5kaW5nXG4gNTUwOlx0ICpcbiA1NTE6XHQgKiBSZXR1cm46IHRydWUgaWYgbGluayB3YXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGZhbHNlXG4gNTUyOlx0ICovXG4gNTUzOlx0Ym9vbCB0aXBjX2xpbmtfYmNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG93bm5vZGUsIHUzMiBwZWVyLCB1OCAqcGVlcl9pZCxcbiA1NTQ6XHRcdFx0XHQgaW50IG10dSwgdTMyIG1pbl93aW4sIHUzMiBtYXhfd2luLCB1MTYgcGVlcl9jYXBzLFxuIDU1NTpcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsXG4gNTU2Olx0XHRcdFx0IHN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcSxcbiA1NTc6XHRcdFx0XHQgc3RydWN0IHRpcGNfbGluayAqYmNfc25kbGluayxcbiA1NTg6XHRcdFx0XHQgc3RydWN0IHRpcGNfbGluayAqKmxpbmspXG4gNTU5Olx0e1xuIDU2MDpcdFx0c3RydWN0IHRpcGNfbGluayAqbDtcbiA1NjE6XHRcbiA1NjI6XHRcdGlmICghdGlwY19saW5rX2NyZWF0ZShuZXQsIFwmIzM0O1wmIzM0OywgTUFYX0JFQVJFUlMsIDAsICYjMzk7WiYjMzk7LCBtdHUsIDAsIG1pbl93aW4sXG4gNTYzOlx0XHRcdFx0ICAgICAgbWF4X3dpbiwgMCwgb3dubm9kZSwgcGVlciwgTlVMTCwgcGVlcl9jYXBzLFxuIDU2NDpcdFx0XHRcdCAgICAgIGJjX3NuZGxpbmssIE5VTEwsIGlucHV0cSwgbmFtZWRxLCBsaW5rKSlcbiA1NjU6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDU2NjpcdFxuIDU2NzpcdFx0bCA9ICpsaW5rO1xuIDU2ODpcdFx0aWYgKHBlZXJfaWQpIHtcbiA1Njk6XHRcdFx0Y2hhciBwZWVyX3N0cltOT0RFX0lEX1NUUl9MRU5dID0gezAsfTtcbiA1NzA6XHRcbiA1NzE6XHRcdFx0aWYgKHRpcGNfbm9kZWlkMnN0cmluZyhwZWVyX3N0ciwgcGVlcl9pZCkgXHUwMDNlIE5PREVfSURfTEVOKVxuIDU3MjpcdFx0XHRcdHNwcmludGYocGVlcl9zdHIsIFwmIzM0OyV4XCYjMzQ7LCBwZWVyKTtcbiA1NzM6XHRcdFx0LyogQnJvYWRjYXN0IHJlY2VpdmVyIGxpbmsgbmFtZTogXCYjMzQ7YnJvYWRjYXN0LWxpbms6XHUwMDNjcGVlclx1MDAzZVwmIzM0OyAqL1xuIDU3NDpcdFx0XHRzbnByaW50ZihsLVx1MDAzZW5hbWUsIHNpemVvZihsLVx1MDAzZW5hbWUpLCBcJiMzNDslczolc1wmIzM0OywgdGlwY19iY2xpbmtfbmFtZSxcbiA1NzU6XHRcdFx0XHQgcGVlcl9zdHIpO1xuIDU3NjpcdFx0fSBlbHNlIHtcbiA1Nzc6XHRcdFx0c3Ryc2NweShsLVx1MDAzZW5hbWUsIHRpcGNfYmNsaW5rX25hbWUpO1xuIDU3ODpcdFx0fVxuIDU3OTpcdFx0dHJhY2VfdGlwY19saW5rX3Jlc2V0KGwsIFRJUENfRFVNUF9BTEwsIFwmIzM0O2JjbGluayBjcmVhdGVkIVwmIzM0Oyk7XG4gNTgwOlx0XHR0aXBjX2xpbmtfcmVzZXQobCk7XG4gNTgxOlx0XHRsLVx1MDAzZXN0YXRlID0gTElOS19SRVNFVDtcbiA1ODI6XHRcdGwtXHUwMDNlYWNrZXJzID0gMDtcbiA1ODM6XHRcdGwtXHUwMDNlYmNfcmN2bGluayA9IGw7XG4gNTg0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGlwYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVElQQyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgVElQQ1xuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIFRJUEMgUHJvdG9jb2xcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBUaGUgVHJhbnNwYXJlbnQgSW50ZXIgUHJvY2VzcyBDb21tdW5pY2F0aW9uIChUSVBDKSBwcm90b2NvbCBpc1xuICAxMTpcdFx0ICBzcGVjaWFsbHkgZGVzaWduZWQgZm9yIGludHJhIGNsdXN0ZXIgY29tbXVuaWNhdGlvbi4gVGhpcyBwcm90b2NvbFxuICAxMjpcdFx0ICBvcmlnaW5hdGVzIGZyb20gRXJpY3Nzb24gd2hlcmUgaXQgaGFzIGJlZW4gdXNlZCBpbiBjYXJyaWVyIGdyYWRlXG4gIDEzOlx0XHQgIGNsdXN0ZXIgYXBwbGljYXRpb25zIGZvciBtYW55IHllYXJzLlxuICAxNDpcdFxuICAxNTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBUSVBDLCBzZWUgaHR0cDovL3RpcGMuc291cmNlZm9yZ2UubmV0LlxuICAxNjpcdFxuICAxNzpcdFx0ICBUaGlzIHByb3RvY29sIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUgKCA9IGNvZGUgd2hpY2hcbiAgMTg6XHRcdCAgY2FuIGJlIGluc2VydGVkIGluIGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsIHdoZW5ldmVyIHlvdVxuICAxOTpcdFx0ICB3YW50KS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0aXBjLiBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0XG4gIDIwOlx0XHQgIGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlIGFuZCByZWFkIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy5yc3RcdTAwM2UuXG4gIDIxOlx0XG4gIDIyOlx0XHQgIElmIGluIGRvdWJ0LCBzYXkgTi5cbiAgMjM6XHRcbiAgMjQ6XHRjb25maWcgVElQQ19NRURJQV9JQlxuICAyNTpcdFx0Ym9vbCBcJiMzNDtJbmZpbmlCYW5kIG1lZGlhIHR5cGUgc3VwcG9ydFwmIzM0O1xuICAyNjpcdFx0ZGVwZW5kcyBvbiBUSVBDIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EX0lQT0lCXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIFNheWluZyBZIGhlcmUgd2lsbCBlbmFibGUgc3VwcG9ydCBmb3IgcnVubmluZyBUSVBDIG9uXG4gIDI5Olx0XHQgIElQLW92ZXItSW5maW5pQmFuZCBkZXZpY2VzLlxuICAzMDpcdGNvbmZpZyBUSVBDX01FRElBX1VEUFxuICAzMTpcdFx0Ym9vbCBcJiMzNDtJUC9VRFAgbWVkaWEgdHlwZSBzdXBwb3J0XCYjMzQ7XG4gIDMyOlx0XHRkZXBlbmRzIG9uIFRJUENcbiAgMzM6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICAzNDpcdFx0ZGVmYXVsdCB5XG4gIDM1Olx0XHRoZWxwXG4gIDM2Olx0XHQgIFNheWluZyBZIGhlcmUgd2lsbCBlbmFibGUgc3VwcG9ydCBmb3IgcnVubmluZyBUSVBDIG92ZXIgSVAvVURQXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIFRJUENfQ1JZUFRPXG4gIDM5Olx0XHRib29sIFwmIzM0O1RJUEMgZW5jcnlwdGlvbiBzdXBwb3J0XCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIFRJUENcbiAgNDE6XHRcdHNlbGVjdCBDUllQVE9cbiAgNDI6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gIDQzOlx0XHRzZWxlY3QgQ1JZUFRPX0dDTVxuICA0NDpcdFx0ZGVmYXVsdCB5XG4gIDQ1Olx0XHRoZWxwXG4gIDQ2Olx0XHQgIFNheWluZyBZIGhlcmUgd2lsbCBlbmFibGUgc3VwcG9ydCBmb3IgVElQQyBlbmNyeXB0aW9uLlxuICA0NzpcdFx0ICBBbGwgVElQQyBtZXNzYWdlcyB3aWxsIGJlIGVuY3J5cHRlZC9kZWNyeXB0ZWQgYnkgdXNpbmcgdGhlIGN1cnJlbnRseSBtb3N0XG4gIDQ4Olx0XHQgIGFkdmFuY2VkIGFsZ29yaXRobTogQUVBRCBBRVMtR0NNIChsaWtlIElQU2VjIG9yIFRMUykgYmVmb3JlIGxlYXZpbmcvXG4gIDQ5Olx0XHQgIGVudGVyaW5nIHRoZSBUSVBDIHN0YWNrLlxuICA1MDpcdFx0ICBLZXkgc2V0dGluZyBmcm9tIHVzZXItc3BhY2UgaXMgcGVyZm9ybWVkIHZpYSBuZXRsaW5rIGJ5IGEgdXNlciBwcm9ncmFtXG4gIDUxOlx0XHQgIChlLmcuIHRoZSBpcHJvdXRlMiAmIzM5O3RpcGMmIzM5OyB0b29sKS5cbiAgNTI6XHRcbiAgNTM6XHRjb25maWcgVElQQ19ESUFHXG4gIDU0Olx0XHR0cmlzdGF0ZSBcJiMzNDtUSVBDOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgNTU6XHRcdGRlcGVuZHMgb24gVElQQ1xuICA1NjpcdFx0ZGVmYXVsdCB5XG4gIDU3Olx0XHRoZWxwXG4gIDU4Olx0XHRTdXBwb3J0IGZvciBUSVBDIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHNzIHRvb2wuXG4gIDU5Olx0XHRJZiB1bnN1cmUsIHNheSBZLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MjEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZ2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBidWlsZHMgdGhlIHByb3RvY29sIG1lc3NhZ2UsIHNvIGxldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYC4gSSYjMzk7bGwganVtcCByaWdodCBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGxpbmVzIDE4ODAgdG8gMTkyMCBvZiBgbmV0L3RpcGMvbGluay5jYC4gVGhhdCBjaHVuayBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHZpZXcgb2YgdGhlIGNvcmUgbG9naWMgaW52b2x2ZWQgaW4gY29uc3RydWN0aW5nIHRoZSBtZXNzYWdlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLi4uIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG1lYXQgb2YgdGhlIG1lc3NhZ2UgYXNzZW1ibHkgcHJvY2VzcywgdGhlIGNyaXRpY2FsIHN0ZXBzIGl0IHRha2VzLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGF0YSBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9ucywgcG90ZW50aWFsbHkgYnVmZmVyIGhhbmRsaW5nLCBhbmQgZGVmaW5pdGVseSBzb21lIGNydWNpYWwgYXNzaWdubWVudHMgcmVsYXRlZCB0byBtZXNzYWdlIGZpZWxkcy4gSG9wZWZ1bGx5IHRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL2xpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg4MDpcdFx0XHRpZiAobC1cdTAwM2VwZWVyX2NhcHMgXHUwMDI2IFRJUENfTElOS19QUk9UT19TRVFOTylcbjE4ODE6XHRcdFx0XHRtc2dfc2V0X3NlcW5vKGhkciwgbC1cdTAwM2VzbmRfbnh0X3N0YXRlJiM0MzsmIzQzOyk7XG4xODgyOlx0XHRcdG1zZ19zZXRfc2VxX2dhcChoZHIsIHJjdmdhcCk7XG4xODgzOlx0XHRcdGJjX3JjdmdhcCA9IGxpbmtfYmNfcmN2X2dhcChiY2wpO1xuMTg4NDpcdFx0XHRtc2dfc2V0X2JjX2dhcChoZHIsIGJjX3JjdmdhcCk7XG4xODg1Olx0XHRcdG1zZ19zZXRfcHJvYmUoaGRyLCBwcm9iZSk7XG4xODg2Olx0XHRcdG1zZ19zZXRfaXNfa2VlcGFsaXZlKGhkciwgcHJvYmUgfHwgcHJvYmVfcmVwbHkpO1xuMTg4NzpcdFx0XHRpZiAobC1cdTAwM2VwZWVyX2NhcHMgXHUwMDI2IFRJUENfR0FQX0FDS19CTE9DSylcbjE4ODg6XHRcdFx0XHRnbGVuID0gdGlwY19idWlsZF9nYXBfYWNrX2Jsa3MobCwgaGRyKTtcbjE4ODk6XHRcdFx0dGlwY19tb25fcHJlcChsLVx1MDAzZW5ldCwgZGF0YSAmIzQzOyBnbGVuLCBcdTAwMjZkbGVuLCBtc3RhdGUsIGwtXHUwMDNlYmVhcmVyX2lkKTtcbjE4OTA6XHRcdFx0bXNnX3NldF9zaXplKGhkciwgSU5UX0hfU0laRSAmIzQzOyBnbGVuICYjNDM7IGRsZW4pO1xuMTg5MTpcdFx0XHRza2JfdHJpbShza2IsIElOVF9IX1NJWkUgJiM0MzsgZ2xlbiAmIzQzOyBkbGVuKTtcbjE4OTI6XHRcdFx0bC1cdTAwM2VzdGF0cy5zZW50X3N0YXRlcyYjNDM7JiM0Mzs7XG4xODkzOlx0XHRcdGwtXHUwMDNlcmN2X3VuYWNrZWQgPSAwO1xuMTg5NDpcdFx0fSBlbHNlIHtcbjE4OTU6XHRcdFx0LyogUkVTRVRfTVNHIG9yIEFDVElWQVRFX01TRyAqL1xuMTg5NjpcdFx0XHRpZiAobXR5cCA9PSBBQ1RJVkFURV9NU0cpIHtcbjE4OTc6XHRcdFx0XHRtc2dfc2V0X2Rlc3Rfc2Vzc2lvbl92YWxpZChoZHIsIDEpO1xuMTg5ODpcdFx0XHRcdG1zZ19zZXRfZGVzdF9zZXNzaW9uKGhkciwgbC1cdTAwM2VwZWVyX3Nlc3Npb24pO1xuMTg5OTpcdFx0XHR9XG4xOTAwOlx0XHRcdG1zZ19zZXRfbWF4X3BrdChoZHIsIGwtXHUwMDNlYWR2ZXJ0aXNlZF9tdHUpO1xuMTkwMTpcdFx0XHRtZW1jcHkoZGF0YSwgbC1cdTAwM2VpZl9uYW1lLCBUSVBDX01BWF9JRl9OQU1FKTtcbjE5MDI6XHRcdFx0bXNnX3NldF9zaXplKGhkciwgSU5UX0hfU0laRSAmIzQzOyBUSVBDX01BWF9JRl9OQU1FKTtcbjE5MDM6XHRcdFx0c2tiX3RyaW0oc2tiLCBJTlRfSF9TSVpFICYjNDM7IFRJUENfTUFYX0lGX05BTUUpO1xuMTkwNDpcdFx0fVxuMTkwNTpcdFx0aWYgKHByb2JlKVxuMTkwNjpcdFx0XHRsLVx1MDAzZXN0YXRzLnNlbnRfcHJvYmVzJiM0MzsmIzQzOztcbjE5MDc6XHRcdGlmIChyY3ZnYXApXG4xOTA4Olx0XHRcdGwtXHUwMDNlc3RhdHMuc2VudF9uYWNrcyYjNDM7JiM0Mzs7XG4xOTA5Olx0XHRpZiAoYmNfcmN2Z2FwKVxuMTkxMDpcdFx0XHRiY2wtXHUwMDNlc3RhdHMuc2VudF9uYWNrcyYjNDM7JiM0Mzs7XG4xOTExOlx0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSBUQ19QUklPX0NPTlRST0w7XG4xOTEyOlx0XHRfX3NrYl9xdWV1ZV90YWlsKHhtaXRxLCBza2IpO1xuMTkxMzpcdFx0dHJhY2VfdGlwY19wcm90b19idWlsZChza2IsIGZhbHNlLCBsLVx1MDAzZW5hbWUpO1xuMTkxNDpcdH1cbjE5MTU6XHRcbjE5MTY6XHR2b2lkIHRpcGNfbGlua19jcmVhdGVfZHVtbXlfdG5sX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLFxuMTkxNzpcdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuMTkxODpcdHtcbjE5MTk6XHRcdHUzMiBvbm9kZSA9IHRpcGNfb3duX2FkZHIobC1cdTAwM2VuZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0OTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA4NzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUSVBDIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGNoYW5naW5nLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWsgd2l0aGluIHRoZSBUSVBDIHByb3RvY29sLiBQcmV2aW91c2x5LCBgc3RyY3B5YCB3YXMgdXNlZCB0byBjb3B5IHRoZSBpbnRlcmZhY2UgbmFtZSAoYGwtJmd0O2lmX25hbWVgKSBpbnRvIGEgbWVzc2FnZSBidWZmZXIuIFRoZSBwcm9ibGVtIHdhcyB0aGF0IGlmIHRoZSBpbnRlcmZhY2UgbmFtZSB3YXMgc2hvcnRlciB0aGFuIGBUSVBDX01BWF9JRl9OQU1FYCwgYHN0cmNweWAgd291bGRuJiMzOTt0IHplcm8tb3V0IHRoZSByZW1haW5pbmcgYnl0ZXMsIHBvdGVudGlhbGx5IGxlYXZpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIG1lc3NhZ2UuIFRoZSBwYXRjaCBub3cgcmVwbGFjZXMgYHN0cmNweWAgd2l0aCBgc3Ryc2NweWAgaW4gYHRpcGNfbGlua19jcmVhdGVgIGFuZCBgdGlwY19saW5rX2JjX2NyZWF0ZWAuIFNpbmNlIGBsLSZndDtpZl9uYW1lYCBpcyAqZWl0aGVyKiB6ZXJvIGluaXRpYWxpemVkIGJ5IGBrY2FsbG9jYC9ga3phbGxvY2AgKm9yKiBwYWRkZWQgdG8gMCBieSBzdHJzY3B5LCB0aGUgc3Vic2VxdWVudCBgbWVtY3B5YCBjb3BpZXMgYSBmdWxseSB6ZXJvLXBhZGRlZCBuYW1lLCBtaXRpZ2F0aW5nIHRoZSBsZWFrLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgYW5kLCB0aGVyZWZvcmUsIHdvcnRoIGZ1enppbmc/IEJhc2VkIG9uIG15IHByaW9yIGV4cGVyaWVuY2UsIFRJUEMgaXMgYSBnb29kIHRhcmdldC4gSXQmIzM5O3MgYSBuZXR3b3JraW5nIHByb3RvY29sIGluIGBuZXQvdGlwYy9gLCBhbmQsIHllcywgaXQgKmNhbiogYmUgZnV6emVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSYjMzk7dmUgc2VlbiBTeXprYWxsZXIgdGFyZ2V0IFRJUEMgZnJlcXVlbnRseSB3aXRoIGBzeXpfdGlwY18qYCBjYWxscywgYWxvbmcgd2l0aCB0aGUgc3RhbmRhcmQgc29ja2V0IGFuZCBuZXRsaW5rIG1ldGhvZHMuIEkga25vdyBpdCB3b3JrcyBvdmVyIGxvb3BiYWNrLCBVRFAsIGFuZCBFdGhlcm5ldC4gU28sIGFjY2Vzc2liaWxpdHkgaXNuJiMzOTt0IGEgcHJvYmxlbS4KCkxldCBtZSBxdWlja2x5IHJlLXJlYWQgdGhlIGluc3RydWN0aW9ucy4uLiBPa2F5LCBjaGVja2luZzogSXMgdGhpcyBhIGRvY3VtZW50YXRpb24gY2hhbmdlPyBOby4gSXMgaXQgZGVjb3JhdGl2ZSBsaWtlIGxvZ2dpbmcgb3IgdHJhY2Vwb2ludHM/IE5vLiBDb25zdGFudHMgdGhhdCBkb24mIzM5O3QgYWx0ZXIgZXhlY3V0aW9uPyBOb3BlLiBJbXBvc3NpYmxlIGNvZGUgcGF0aHM/IE5vLCB0aGlzIGlzIGtlcm5lbCBjb2RlLiBWZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmU/IE5vcGUuIFRlYXJkb3duIGNhbGxiYWNrcyBvbmx5PyBOby4KClRoaXMgcGF0Y2ggbW9kaWZpZXMgY29yZSBUSVBDIGxpbmsgY3JlYXRpb24sIHNwZWNpZmljYWxseSBgdGlwY19saW5rX2NyZWF0ZWAsIGB0aXBjX2xpbmtfYmNfY3JlYXRlYCwgYW5kIGFsc28gdGhlIG1lc3NhZ2UgYnVpbGRpbmcgZnVuY3Rpb24uIE15IHVuZGVyc3RhbmRpbmcsIGZyb20gZXhwZXJpZW5jZSwgaXMgdGhhdCBgdGlwY19saW5rX2NyZWF0ZWAgaXMgYW4gQVBJIGVudHJ5cG9pbnQgb3IgaGFzIGV4cG9ydGVkL2NhbGxlciBmdW5jdGlvbnMsIGFuZCB0aGUgc2FtZSBpcyB0cnVlIGZvciBgdGlwY19saW5rX2JjX2NyZWF0ZWAgYW5kIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYCwgdGhhdCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB3aXRoIG15IGNvZGUgc2VhcmNoIHRvb2xzLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgdG91Y2hlcyByZWFjaGFibGUsIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgSSB0aGluayB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19saW5rX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2xpbmsuYz00NDc9dTMyIHRpcGNfbGlua19zdGF0ZShzdHJ1Y3QgdGlwY19saW5rICpsKVxuLS1cbm5ldC90aXBjL2xpbmsuYy00NTItLyoqXG5uZXQvdGlwYy9saW5rLmM6NDUzOiAqIHRpcGNfbGlua19jcmVhdGUgLSBjcmVhdGUgYSBuZXcgbGlua1xubmV0L3RpcGMvbGluay5jLTQ1NC0gKiBAbmV0OiBwb2ludGVyIHRvIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2Vcbi0tXG5uZXQvdGlwYy9saW5rLmMtNDc1LSAqL1xubmV0L3RpcGMvbGluay5jOjQ3Njpib29sIHRpcGNfbGlua19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppZl9uYW1lLCBpbnQgYmVhcmVyX2lkLFxubmV0L3RpcGMvbGluay5jLTQ3Ny1cdFx0ICAgICAgaW50IHRvbGVyYW5jZSwgY2hhciBuZXRfcGxhbmUsIHUzMiBtdHUsIGludCBwcmlvcml0eSxcbi0tXG5uZXQvdGlwYy9saW5rLmM9NTUzPWJvb2wgdGlwY19saW5rX2JjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBvd25ub2RlLCB1MzIgcGVlciwgdTggKnBlZXJfaWQsXG4tLVxubmV0L3RpcGMvbGluay5jLTU2MS1cbm5ldC90aXBjL2xpbmsuYzo1NjI6XHRpZiAoIXRpcGNfbGlua19jcmVhdGUobmV0LCBcJiMzNDtcJiMzNDssIE1BWF9CRUFSRVJTLCAwLCAmIzM5O1omIzM5OywgbXR1LCAwLCBtaW5fd2luLFxubmV0L3RpcGMvbGluay5jLTU2My1cdFx0XHQgICAgICBtYXhfd2luLCAwLCBvd25ub2RlLCBwZWVyLCBOVUxMLCBwZWVyX2NhcHMsXG4tLVxubmV0L3RpcGMvbGluay5jPTE4MzI9c3RhdGljIHZvaWQgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBpbnQgbXR5cCwgYm9vbCBwcm9iZSxcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTkxNS1cbm5ldC90aXBjL2xpbmsuYzoxOTE2OnZvaWQgdGlwY19saW5rX2NyZWF0ZV9kdW1teV90bmxfbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsXG5uZXQvdGlwYy9saW5rLmMtMTkxNy1cdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSlcbi0tXG5uZXQvdGlwYy9saW5rLmM9MjEwND12b2lkIHRpcGNfbGlua19mYWlsb3Zlcl9wcmVwYXJlKHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCB0aXBjX2xpbmsgKnRubCxcbi0tXG5uZXQvdGlwYy9saW5rLmMtMjEwOC1cbm5ldC90aXBjL2xpbmsuYzoyMTA5Olx0dGlwY19saW5rX2NyZWF0ZV9kdW1teV90bmxfbXNnKHRubCwgeG1pdHEpO1xubmV0L3RpcGMvbGluay5jLTIxMTAtXG4tLVxubmV0L3RpcGMvbGluay5oPTYzPWVudW0ge1xuLS1cbm5ldC90aXBjL2xpbmsuaC03My1cbm5ldC90aXBjL2xpbmsuaDo3NDpib29sIHRpcGNfbGlua19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppZl9uYW1lLCBpbnQgYmVhcmVyX2lkLFxubmV0L3RpcGMvbGluay5oLTc1LVx0XHQgICAgICBpbnQgdG9sZXJhbmNlLCBjaGFyIG5ldF9wbGFuZSwgdTMyIG10dSwgaW50IHByaW9yaXR5LFxuLS1cbm5ldC90aXBjL2xpbmsuaD04OT12b2lkIHRpcGNfbGlua190bmxfcHJlcGFyZShzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3QgdGlwY19saW5rICp0bmwsXG5uZXQvdGlwYy9saW5rLmgtOTAtXHRcdFx0ICAgaW50IG10eXAsIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcbm5ldC90aXBjL2xpbmsuaDo5MTp2b2lkIHRpcGNfbGlua19jcmVhdGVfZHVtbXlfdG5sX21zZyhzdHJ1Y3QgdGlwY19saW5rICp0bmwsXG5uZXQvdGlwYy9saW5rLmgtOTItXHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpO1xuLS1cbm5ldC90aXBjL25vZGUuYz0xMTczPXZvaWQgdGlwY19ub2RlX2NoZWNrX2Rlc3Qoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcixcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTI4My1cdFx0c2Vzc2lvbiA9IGdldF9yYW5kb21fdTE2KCk7XG5uZXQvdGlwYy9ub2RlLmM6MTI4NDpcdFx0aWYgKCF0aXBjX2xpbmtfY3JlYXRlKG5ldCwgaWZfbmFtZSwgYi1cdTAwM2VpZGVudGl0eSwgYi1cdTAwM2V0b2xlcmFuY2UsXG5uZXQvdGlwYy9ub2RlLmMtMTI4NS1cdFx0XHRcdCAgICAgIGItXHUwMDNlbmV0X3BsYW5lLCBiLVx1MDAzZW10dSwgYi1cdTAwM2Vwcmlvcml0eSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg3NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGB0aXBjX2xpbmtfYmNfY3JlYXRlYCBDYWxsZXJzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgZmlndXJlIG91dCB3aG8mIzM5O3MgY2FsbGluZyBgdGlwY19saW5rX2JjX2NyZWF0ZWAuJiMzNDsgVGhhdCBmdW5jdGlvbiBpcyBrZXkgdG8gaG93IHRoaXMgcGFydCBvZiB0aGUgc3lzdGVtIHdvcmtzLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgaXMgY3JpdGljYWwgZm9yIGFueSBkZWJ1Z2dpbmcsIG9wdGltaXphdGlvbiwgb3IgaW1wYWN0IGFzc2Vzc21lbnQgSSBtaWdodCBuZWVkIHRvIGRvLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0cy4gQSBkZWVwIGRpdmUgaXMgdGhlIG9ubHkgd2F5IGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfbGlua19iY19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9iY2FzdC5jPTY5NT1pbnQgdGlwY19iY2FzdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdGlwYy9iY2FzdC5jLTcwNi1cbm5ldC90aXBjL2JjYXN0LmM6NzA3Olx0aWYgKCF0aXBjX2xpbmtfYmNfY3JlYXRlKG5ldCwgMCwgMCwgTlVMTCxcbm5ldC90aXBjL2JjYXN0LmMtNzA4LVx0XHRcdFx0IG9uZV9wYWdlX210dSxcbi0tXG5uZXQvdGlwYy9saW5rLmM9NDc2PWJvb2wgdGlwY19saW5rX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKmlmX25hbWUsIGludCBiZWFyZXJfaWQsXG4tLVxubmV0L3RpcGMvbGluay5jLTUzNi0vKipcbm5ldC90aXBjL2xpbmsuYzo1Mzc6ICogdGlwY19saW5rX2JjX2NyZWF0ZSAtIGNyZWF0ZSBuZXcgbGluayB0byBiZSB1c2VkIGZvciBicm9hZGNhc3Rcbm5ldC90aXBjL2xpbmsuYy01MzgtICogQG5ldDogcG9pbnRlciB0byBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXG4tLVxubmV0L3RpcGMvbGluay5jLTU1Mi0gKi9cbm5ldC90aXBjL2xpbmsuYzo1NTM6Ym9vbCB0aXBjX2xpbmtfYmNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG93bm5vZGUsIHUzMiBwZWVyLCB1OCAqcGVlcl9pZCxcbm5ldC90aXBjL2xpbmsuYy01NTQtXHRcdFx0IGludCBtdHUsIHUzMiBtaW5fd2luLCB1MzIgbWF4X3dpbiwgdTE2IHBlZXJfY2Fwcyxcbi0tXG5uZXQvdGlwYy9saW5rLmg9NzQ9Ym9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCxcbi0tXG5uZXQvdGlwYy9saW5rLmgtODItXHRcdCAgICAgIHN0cnVjdCB0aXBjX2xpbmsgKipsaW5rKTtcbm5ldC90aXBjL2xpbmsuaDo4Mzpib29sIHRpcGNfbGlua19iY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgb3dubm9kZSwgdTMyIHBlZXIsIHU4ICpwZWVyX2lkLFxubmV0L3RpcGMvbGluay5oLTg0LVx0XHRcdCBpbnQgbXR1LCB1MzIgbWluX3dpbiwgdTMyIG1heF93aW4sIHUxNiBwZWVyX2NhcHMsXG4tLVxubmV0L3RpcGMvbm9kZS5jPTQ2OD1zdHJ1Y3QgdGlwY19ub2RlICp0aXBjX25vZGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIsIHU4ICpwZWVyX2lkLFxuLS1cbm5ldC90aXBjL25vZGUuYy00ODgtXHRcdHRpcGNfbm9kZV93cml0ZV9sb2NrKG4pO1xubmV0L3RpcGMvbm9kZS5jOjQ4OTpcdFx0aWYgKCF0aXBjX2xpbmtfYmNfY3JlYXRlKG5ldCwgdGlwY19vd25fYWRkcihuZXQpLCBhZGRyLCBwZWVyX2lkLCBVMTZfTUFYLFxubmV0L3RpcGMvbm9kZS5jLTQ5MC1cdFx0XHRcdFx0IHRpcGNfbGlua19taW5fd2luKHNuZF9sKSwgdGlwY19saW5rX21heF93aW4oc25kX2wpLFxuLS1cbm5ldC90aXBjL25vZGUuYy01NzgtXHRpZiAoIXByZWxpbWluYXJ5IFx1MDAyNlx1MDAyNlxubmV0L3RpcGMvbm9kZS5jOjU3OTpcdCAgICAhdGlwY19saW5rX2JjX2NyZWF0ZShuZXQsIHRpcGNfb3duX2FkZHIobmV0KSwgYWRkciwgcGVlcl9pZCwgVTE2X01BWCxcbm5ldC90aXBjL25vZGUuYy01ODAtXHRcdFx0XHQgdGlwY19saW5rX21pbl93aW4oc25kX2wpLCB0aXBjX2xpbmtfbWF4X3dpbihzbmRfbCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODE2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYCBDYWxsZXJzKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgIGZ1bmN0aW9uIGNhbGxzLiBJdCYjMzk7cyB0aW1lIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyB1c2luZyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gd2l0aGluIHRoZSBsYXJnZXIgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXItUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBmcmFtZXdvcmsuIFRoZSBzcGVjaWZpY3Mgd2lsbCBkZXBlbmQgb24gdGhlIGxhcmdlciBjb250ZXh0IG9mIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBkb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gY3JlYXRpbmcgb3IgY29uc3RydWN0aW5nIHByb3RvY29sIG1lc3NhZ2VzIGZvciBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gd2l0aGluIHRoZSBjbHVzdGVyLiBGcm9tIHRoYXQgcG9pbnQgSSBjYW4gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGFuZCBwb3NzaWJsZSBlZmZlY3RzIGZvciBhbnkgY2hhbmdlcyBJIHdvdWxkIG1ha2UuIERlcGVuZGluZyBvbiB3aGF0IEkgbGVhcm4sIEkgbWF5IGFsc28gZGVjaWRlIHRvIHJlc2VhcmNoIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uIE5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LCBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2xpbmsuYz0yNDQ9c3RhdGljIGludCB0aXBjX2xpbmtfcHJvdG9fcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvdGlwYy9saW5rLmMtMjQ1LVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7XG5uZXQvdGlwYy9saW5rLmM6MjQ2OnN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsXG5uZXQvdGlwYy9saW5rLmMtMjQ3LVx0XHRcdFx0ICAgICAgYm9vbCBwcm9iZV9yZXBseSwgdTE2IHJjdmdhcCxcbi0tXG5uZXQvdGlwYy9saW5rLmM9ODE2PWludCB0aXBjX2xpbmtfdGltZW91dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSlcbi0tXG5uZXQvdGlwYy9saW5rLmMtODY5LVx0aWYgKHN0YXRlIHx8IHByb2JlIHx8IHNldHVwKVxubmV0L3RpcGMvbGluay5jOjg3MDpcdFx0dGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhsLCBtdHlwLCBwcm9iZSwgMCwgMCwgMCwgMCwgeG1pdHEpO1xubmV0L3RpcGMvbGluay5jLTg3MS1cbi0tXG5uZXQvdGlwYy9saW5rLmM9MTY4OD1pbnQgdGlwY19saW5rX2J1aWxkX3N0YXRlX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSlcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTcwNS1cdGwtXHUwMDNlc3RhdHMuc2VudF9hY2tzJiM0MzsmIzQzOztcbm5ldC90aXBjL2xpbmsuYzoxNzA2Olx0dGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhsLCBTVEFURV9NU0csIDAsIDAsIDAsIDAsIDAsIHhtaXRxKTtcbm5ldC90aXBjL2xpbmsuYy0xNzA3LVx0cmV0dXJuIDA7XG4tLVxubmV0L3RpcGMvbGluay5jPTE3MTI9dm9pZCB0aXBjX2xpbmtfYnVpbGRfcmVzZXRfbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuLS1cbm5ldC90aXBjL2xpbmsuYy0xNzE5LVxubmV0L3RpcGMvbGluay5jOjE3MjA6XHR0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKGwsIG10eXAsIDAsIDAsIDAsIDAsIDAsIHhtaXRxKTtcbm5ldC90aXBjL2xpbmsuYy0xNzIxLVxuLS1cbm5ldC90aXBjL2xpbmsuYz0xNzMyPXN0YXRpYyBpbnQgdGlwY19saW5rX2J1aWxkX25hY2tfbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsXG4tLVxubmV0L3RpcGMvbGluay5jLTE3NTAtXG5uZXQvdGlwYy9saW5rLmM6MTc1MTpcdFx0dGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhsLCBTVEFURV9NU0csIDAsIDAsXG5uZXQvdGlwYy9saW5rLmMtMTc1Mi1cdFx0XHRcdFx0ICByY3ZnYXAsIDAsIDAsIHhtaXRxKTtcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTc2Mj1pbnQgdGlwY19saW5rX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xODMxLVxubmV0L3RpcGMvbGluay5jOjE4MzI6c3RhdGljIHZvaWQgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBpbnQgbXR5cCwgYm9vbCBwcm9iZSxcbm5ldC90aXBjL2xpbmsuYy0xODMzLVx0XHRcdFx0ICAgICAgYm9vbCBwcm9iZV9yZXBseSwgdTE2IHJjdmdhcCxcbi0tXG5uZXQvdGlwYy9saW5rLmM9MjE3ND1zdGF0aWMgaW50IHRpcGNfbGlua19wcm90b19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9saW5rLmMtMjMxMC1cdFx0aWYgKHJjdmdhcCB8fCByZXBseSlcbm5ldC90aXBjL2xpbmsuYzoyMzExOlx0XHRcdHRpcGNfbGlua19idWlsZF9wcm90b19tc2cobCwgU1RBVEVfTVNHLCAwLCByZXBseSxcbm5ldC90aXBjL2xpbmsuYy0yMzEyLVx0XHRcdFx0XHRcdCAgcmN2Z2FwLCAwLCAwLCB4bWl0cSk7XG4tLVxubmV0L3RpcGMvbGluay5jPTI4NjI9dm9pZCB0aXBjX2xpbmtfc2V0X3RvbGVyYW5jZShzdHJ1Y3QgdGlwY19saW5rICpsLCB1MzIgdG9sLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0yODY4LVx0aWYgKHRpcGNfbGlua19pc191cChsKSlcbm5ldC90aXBjL2xpbmsuYzoyODY5Olx0XHR0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKGwsIFNUQVRFX01TRywgMCwgMCwgMCwgdG9sLCAwLCB4bWl0cSk7XG5uZXQvdGlwYy9saW5rLmMtMjg3MC19XG4tLVxubmV0L3RpcGMvbGluay5jPTI4NzI9dm9pZCB0aXBjX2xpbmtfc2V0X3ByaW8oc3RydWN0IHRpcGNfbGluayAqbCwgdTMyIHByaW8sXG4tLVxubmV0L3RpcGMvbGluay5jLTI4NzUtXHRsLVx1MDAzZXByaW9yaXR5ID0gcHJpbztcbm5ldC90aXBjL2xpbmsuYzoyODc2Olx0dGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhsLCBTVEFURV9NU0csIDAsIDAsIDAsIDAsIHByaW8sIHhtaXRxKTtcbm5ldC90aXBjL2xpbmsuYy0yODc3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUSVBDIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgY29uZmlndXJpbmcgVElQQy4gTXkgZmlyc3QgbW92ZSBpcyBhbHdheXMgdG8gY29uc3VsdCB0aGUgS2NvbmZpZyBmaWxlcywgc28gSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IHRvIGBuZXQvdGlwYy9LY29uZmlnYC4gUmlnaHQsIGhlcmUgd2Ugc2VlIGBUSVBDYCBpcyBkZXBlbmRlbnQgb24gYElORVRgLiBPa2F5LCB0aGF0JiMzOTtzIG5vdCB1bmV4cGVjdGVkLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyBUSVBDIGlzIGFjdHVhbGx5ICpidWlsdCogd2l0aGluIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgZWl0aGVyIHRoZSBtYWluIGBuZXQvS2NvbmZpZ2AgZmlsZSwgb3IgcGVyaGFwcyB0aGUgYG5ldC90aXBjL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBhbnkgcG90ZW50aWFsIGJ1aWxkIGZsYWdzIG9yIG1vZHVsZXMgdGhhdCBjb21lIGludG8gcGxheS4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXRhaWxzIHdpbGwgZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIGlzIGNvbXBsZXRlIGFuZCBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggVElQQyBsYXllclxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfVElQQykgOj0gdGlwYy5vXG4gICA3Olx0XG4gICA4Olx0dGlwYy15XHQmIzQzOz0gYWRkci5vIGJjYXN0Lm8gYmVhcmVyLm8gXFxcbiAgIDk6XHRcdCAgIGNvcmUubyBsaW5rLm8gZGlzY292ZXIubyBtc2cubyAgXFxcbiAgMTA6XHRcdCAgIG5hbWVfZGlzdHIubyAgc3Vic2NyLm8gbW9uaXRvci5vIG5hbWVfdGFibGUubyBuZXQubyAgXFxcbiAgMTE6XHRcdCAgIG5ldGxpbmsubyBuZXRsaW5rX2NvbXBhdC5vIG5vZGUubyBzb2NrZXQubyBldGhfbWVkaWEubyBcXFxuICAxMjpcdFx0ICAgdG9wc3J2Lm8gZ3JvdXAubyB0cmFjZS5vXG4gIDEzOlx0XG4gIDE0Olx0Q0ZMQUdTX3RyYWNlLm8gJiM0Mzs9IC1JJChzcmMpXG4gIDE1Olx0XG4gIDE2Olx0dGlwYy0kKENPTkZJR19USVBDX01FRElBX1VEUClcdCYjNDM7PSB1ZHBfbWVkaWEub1xuICAxNzpcdHRpcGMtJChDT05GSUdfVElQQ19NRURJQV9JQilcdCYjNDM7PSBpYl9tZWRpYS5vXG4gIDE4Olx0dGlwYy0kKENPTkZJR19TWVNDVEwpXHRcdCYjNDM7PSBzeXNjdGwub1xuICAxOTpcdHRpcGMtJChDT05GSUdfVElQQ19DUllQVE8pXHQmIzQzOz0gY3J5cHRvLm9cbiAgMjA6XHRcbiAgMjE6XHRvYmotJChDT05GSUdfVElQQ19ESUFHKVx0JiM0Mzs9IHRpcGNfZGlhZy5vXG4gIDIyOlx0dGlwY19kaWFnLXlcdCYjNDM7PSBkaWFnLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4ODQKCQkJCQkJCW91dHB1dDogMTE3CgkJCQkJCQl0aG91Z2h0czogNDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRJUEMgTGluayBDb2RlIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBrZXkgZnVuY3Rpb24gc3ltYm9scyBhZmZlY3RlZC4gSSYjMzk7dmUgbm90ZWQgYSBmZXcgbm9uLXN0YXRpYyBvbmVzIHJlbGF0ZWQgdG8gbGluayBjcmVhdGlvbiBhbmQgbWVzc2FnaW5nOiBgdGlwY19saW5rX2NyZWF0ZWAsIGB0aXBjX2xpbmtfYmNfY3JlYXRlYCwgYHRpcGNfbGlua19idWlsZF9yZXNldF9tc2dgLCBhbmQgYHRpcGNfbGlua190aW1lb3V0YC4gVGhlbiB0aGVyZSYjMzk7cyBgdGlwY19saW5rX3Byb3RvX3JjdmAgd2hpY2ggaXMgc3RhdGljLCBidXQgY2xvc2VseSBsaW5rZWQgdG8gdGhlIG5vbi1zdGF0aWMgYHRpcGNfbGlua19yY3ZgLCBzbyBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gdGhhdC4gQWZ0ZXIgdGhhdCBJIGhhdmUgdG8gY29uZmlybSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBsaW5rIGNyZWF0aW9uL21lc3NhZ2UgZnVuY3Rpb25zOiBgdGlwY19ub2RlX2NoZWNrX2Rlc3RgLCBgdGlwY19saW5rX3JjdmAuIFRoaXMgbG9va3MgcHJldHR5IGNvbXByZWhlbnNpdmUgaW4gdGVybXMgb2YgdGhlIGFyZWFzIEkgbmVlZCB0byBmb2N1cyBvbi4KClRoZSBtYWluIHN5bWJvbHMgSSBuZWVkIHRvIHByaW9yaXRpemUgYXJlOiBgdGlwY19saW5rX2NyZWF0ZWAsIGB0aXBjX2xpbmtfYmNfY3JlYXRlYCwgYW5kIGB0aXBjX2xpbmtfYnVpbGRfcmVzZXRfbXNnYC4gSSYjMzk7bGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIHNjcnV0aW5pemUgdGhlaXIgaW50ZXJhY3Rpb25zIGNhcmVmdWxseS4KCk5leHQsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYFRJUENgIGlzIHRoZSBwcmltYXJ5IGZlYXR1cmUgb2YgaW50ZXJlc3QsIGFuZCBvZiBjb3Vyc2UsIGl0IGRlcGVuZHMgb24gYElORVRgLiBJJiMzOTtsbCBhbHNvIGdsYW5jZSB0aHJvdWdoIGBuZXQvdGlwYy9LY29uZmlnYCBhbmQgYG5ldC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50OyBJIHNhdyB0aGF0IGBJTkVUYCBpcyBzdGFuZGFyZCBpbiBgbmV0L2lwdjRgLCBhbmQgYFRJUENgIGlzIHRyaXN0YXRlIGFuZCBkZXBlbmRzIG9uIGBJTkVUYC4KCk5vdywgbGV0JiMzOTtzIHJlLWV4YW1pbmUgdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMuIEkgc2VlIHRoZXkmIzM5O3ZlIHJlcGxhY2VkIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHdoZW4gY29weWluZyBpbnRlcmZhY2UvbGluayBuYW1lcyDigJMgYSBnb29kIG1vdmUgZm9yIGJ1ZmZlciBvdmVyZmxvdyBwcmV2ZW50aW9uLiBBbHNvLCBgc3RyY3B5YCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBtZW1jcHlgIHdoZW4gY29uc3RydWN0aW5nIHByb3RvY29sIG1lc3NhZ2VzLCBzcGVjaWZpY2FsbHkgdG8gYWRkcmVzcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciBsZWFrcyBvZiB1bmluaXRpYWxpemVkIGRhdGEgd2l0aGluIHRoZSBgc2tiYC4gVGhhdCYjMzk7cyBhIHNvbGlkIGRlZmVuc2UgYWdhaW5zdCBkYXRhIGxlYWtzIQoKRmluYWxseSwgSSBoYXZlIHRvIGVuc3VyZSB0aGUgY2hhbmdlcyBhcmUgcmVsZXZhbnQgdG8gZnV6emluZy4gR2l2ZW4gdGhhdCB0aGlzIGlzIHRoZSBUSVBDIG5ldHdvcmsgcHJvdG9jb2wgc3RhY2ssIEkmIzM5O20gY29uZmlkZW50IHRoYXQgaXQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIEdDRSwgbWFraW5nIGl0IGFwcHJvcHJpYXRlIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgYHN0cmNweWAgYW5kIGBtZW1jcHlgIGNoYW5nZXMsIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCkFscmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gQWxsIHRoZSBiYXNlcyBhcmUgY292ZXJlZCwgYW5kIHRoZSByZWFzb25pbmcgaXMgc291bmQuIE5vdyBpdCYjMzk7cyB0aW1lIHRvIGluZm9ybSB0aGUgdGVhbSBieSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX2xpbmtfY3JlYXRlJiMzNDssCiAgICAmIzM0O3RpcGNfbGlua19iY19jcmVhdGUmIzM0OywKICAgICYjMzQ7dGlwY19saW5rX2J1aWxkX3Jlc2V0X21zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBUSVBDIGxpbmsgaW5pdGlhbGl6YXRpb24gYW5kIHByb3RvY29sIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljIGluIG5ldC90aXBjL2xpbmsuYyAodXNpbmcgc3Ryc2NweSBhbmQgYm91bmRlZCBtZW1jcHkgaW5zdGVhZCBvZiBzdHJjcHkpLiBUSVBDIGlzIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX2xpbmtfY3JlYXRlJiMzNDssCiAgICAmIzM0O3RpcGNfbGlua19iY19jcmVhdGUmIzM0OywKICAgICYjMzQ7dGlwY19saW5rX2J1aWxkX3Jlc2V0X21zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBUSVBDIGxpbmsgaW5pdGlhbGl6YXRpb24gYW5kIHByb3RvY29sIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljIGluIG5ldC90aXBjL2xpbmsuYyAodXNpbmcgc3Ryc2NweSBhbmQgYm91bmRlZCBtZW1jcHkgaW5zdGVhZCBvZiBzdHJjcHkpLiBUSVBDIGlzIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgdW5zYWZlIGBzdHJjcHlgIGNhbGxzIHdpdGggYHN0cnNjcHlgIGluIGB0aXBjX2xpbmtfY3JlYXRlYCBhbmQgYHRpcGNfbGlua19iY19jcmVhdGVgLCBhbmQgY2hhbmdlcyBgc3RyY3B5YCB0byBgbWVtY3B5KGRhdGEsIGwtXHUwMDNlaWZfbmFtZSwgVElQQ19NQVhfSUZfTkFNRSlgIGluIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYC5cblxuVGhlIGBzdHJ1Y3QgdGlwY19saW5rYCBpbnN0YW5jZSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigqbCwgR0ZQX0FUT01JQylgLCBlbnN1cmluZyB0aGF0IGFsbCBmaWVsZHMgaW5jbHVkaW5nIGBsLVx1MDAzZWlmX25hbWVgIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBDb3B5aW5nIGBUSVBDX01BWF9JRl9OQU1FYCBieXRlcyBmcm9tIGBsLVx1MDAzZWlmX25hbWVgIGludG8gdGhlIHBhY2tldCBwYXlsb2FkIGBkYXRhYCByZWFkcyBvbmx5IGZ1bGx5IGluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBicmFuY2hpbmcsIG9yIHVzZXItc3BhY2UgaW5mbyBsZWFrcy5cblxuU3RhbmRhcmQgS0FTQU4gYW5kIGNvbXBpbGVyIGZvcnRpZmljYXRpb25zIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIG9yIGJ1ZmZlciBvdmVyZmxvdyBidWdzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmExYmZjZTAzZWM4YjU5MzVkMzRhZWI4NDhmNjgxZmZiOWQ1Nzc5YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDEzOjAwOjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbGluay5jIGIvbmV0L3RpcGMvbGluay5jCmluZGV4IDQ5ZGZjMDk4ZDg5YjIuLjY0MjdjNjlmODkyOTQgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2xpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9saW5rLmMKQEAgLTUwNCw3ICYjNDM7NTA0LDcgQEAgYm9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCwKIAlzbnByaW50ZihsLSZndDtuYW1lLCBzaXplb2YobC0mZ3Q7bmFtZSksICYjMzQ7JXM6JXMtJXM6dW5rbm93biYjMzQ7LAogCQkgc2VsZl9zdHIsIGlmX25hbWUsIHBlZXJfc3RyKTsKIAotCXN0cmNweShsLSZndDtpZl9uYW1lLCBpZl9uYW1lKTsKJiM0MzsJc3Ryc2NweShsLSZndDtpZl9uYW1lLCBpZl9uYW1lKTsKIAlsLSZndDthZGRyID0gcGVlcjsKIAlsLSZndDtwZWVyX2NhcHMgPSBwZWVyX2NhcHM7CiAJbC0mZ3Q7bmV0ID0gbmV0OwpAQCAtNTc0LDcgJiM0Mzs1NzQsNyBAQCBib29sIHRpcGNfbGlua19iY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgb3dubm9kZSwgdTMyIHBlZXIsIHU4ICpwZWVyX2lkLAogCQlzbnByaW50ZihsLSZndDtuYW1lLCBzaXplb2YobC0mZ3Q7bmFtZSksICYjMzQ7JXM6JXMmIzM0OywgdGlwY19iY2xpbmtfbmFtZSwKIAkJCSBwZWVyX3N0cik7CiAJfSBlbHNlIHsKLQkJc3RyY3B5KGwtJmd0O25hbWUsIHRpcGNfYmNsaW5rX25hbWUpOwomIzQzOwkJc3Ryc2NweShsLSZndDtuYW1lLCB0aXBjX2JjbGlua19uYW1lKTsKIAl9CiAJdHJhY2VfdGlwY19saW5rX3Jlc2V0KGwsIFRJUENfRFVNUF9BTEwsICYjMzQ7YmNsaW5rIGNyZWF0ZWQhJiMzNDspOwogCXRpcGNfbGlua19yZXNldChsKTsKQEAgLTE4OTgsNyAmIzQzOzE4OTgsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsIGludCBtdHlwLCBib29sIHByb2JlLAogCQkJbXNnX3NldF9kZXN0X3Nlc3Npb24oaGRyLCBsLSZndDtwZWVyX3Nlc3Npb24pOwogCQl9CiAJCW1zZ19zZXRfbWF4X3BrdChoZHIsIGwtJmd0O2FkdmVydGlzZWRfbXR1KTsKLQkJc3RyY3B5KGRhdGEsIGwtJmd0O2lmX25hbWUpOwomIzQzOwkJbWVtY3B5KGRhdGEsIGwtJmd0O2lmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpOwogCQltc2dfc2V0X3NpemUoaGRyLCBJTlRfSF9TSVpFICYjNDM7IFRJUENfTUFYX0lGX05BTUUpOwogCQlza2JfdHJpbShza2IsIElOVF9IX1NJWkUgJiM0MzsgVElQQ19NQVhfSUZfTkFNRSk7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDcyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEp1c3RpZmljYXRpb246IEEgUXVpY2sgQ29kZSBRdWFsaXR5IENoZWNrKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIFRoZSB0YXNrIGlzIHRvIGRlY2lkZSBpZiB0aGlzIGBuZXQvdGlwYy9saW5rLmNgIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgYmV5b25kIHdoYXQgS0FTQU4gYWxyZWFkeSBwcm92aWRlcy4gVGhpcyBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkLCBsb3ctc3Rha2VzIGNvZGUgcXVhbGl0eSBhc3Nlc3NtZW50IOKAkyBwdXJlbHkgZGVmZW5zaXZlLiBNeSBpbml0aWFsIGNsYXNzaWZpY2F0aW9uIGlzICYjMzQ7YmVuaWduJiMzNDsgYW5kICYjMzQ7bm9uZSYjMzQ7IGZvciBzZXZlcml0eTsgaXQmIzM5O3Mgc2FmZSB0byBwcm9jZWVkLgoKRmlyc3QsIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBkaWZmLiBPa2F5LCBzbyB3ZSYjMzk7cmUgcmVwbGFjaW5nIGEgY291cGxlIG9mIGBzdHJjcHlgIGNhbGxzIHdpdGggYHN0cnNjcHlgIGFuZCBhIGBzdHJjcHlgIGluIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYCB3aXRoIGBtZW1jcHlgLiBUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgJiMzNDtidWZmZXIgb3ZlcmZsb3cgcHJldmVudGlvbiwmIzM0OyB3aGljaCBpcyBhIGdvb2QgdGhpbmcuIFRoZSB1c2Ugb2YgYHN0cnNjcHlgIG1ha2VzIG1lIHN1c3BlY3QgdGhhdCB0aGV5IGFyZSBndWFyZGluZyBhZ2FpbnN0IGJ1ZmZlciBvdmVycnVucyB3aGVuIGNvcHlpbmcgdGhlIGludGVyZmFjZSBuYW1lLCBsaWtlbHkgZnJvbSB1c2VyLWNvbnRyb2xsZWQgaW5wdXQuIE1ha2VzIHNlbnNlLiBCdXQgaXMgaXQgKmVub3VnaCo/CgpOb3csIGJlZm9yZSBJIGp1bXAgdG8gYSBjb25jbHVzaW9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLiBMZXQgbWUgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGFyb3VuZCBgdGlwY19saW5rX2NyZWF0ZWAgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHRpcGNfbGlua2AuIEkgbmVlZCB0byBjb25maXJtIHRoZSBzaXplIG9mIGBsLSZndDtpZl9uYW1lYCB0byBiZSBjZXJ0YWluIHRoZSBgc3Ryc2NweWAgY2FsbHMgYXJlIHN1ZmZpY2llbnQuIEFsc28sIG5lZWQgdG8gZW5zdXJlIHRoZSB1c2Ugb2YgYG1lbWNweWAgaW4gYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgIGlzIGNvcnJlY3QsIGFuZCBub3QgdnVsbmVyYWJsZSB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gSSYjMzk7bGwgdXNlIGEgZmlsZSByZWFkZXIgdG8gZG8gc28uIEkmIzM5O2xsIGFsc28gdXNlIGl0IHRvIGNoZWNrIHRoZSBvdGhlciBwbGFjZXMgd2hlcmUgdGhlIHN0cnVjdCBpcyB1c2VkLgoKSSB3aWxsIHVzZSB0aGF0IGluZm9ybWF0aW9uIHRvIGFzc2VzcyB0aGUgcmlza3MgZnJvbSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCB0byBkZWNpZGUgaWYgS01TQU4gaXMgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdGlwY19saW5rIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2xpbmsuYz01MT1zdHJ1Y3QgdGlwY19zdGF0cyB7XG4tLVxubmV0L3RpcGMvbGluay5jLTEzNi0gKi9cbm5ldC90aXBjL2xpbmsuYzoxMzc6c3RydWN0IHRpcGNfbGluayB7XG5uZXQvdGlwYy9saW5rLmMtMTM4LVx0dTMyIGFkZHI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipOYXZpZ2F0aW5nIHRoZSBUSVBDIExpbmsgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBuZXQvdGlwYy9saW5rLmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiBhIGZldyBzcGVjaWZpYyBhcmVhcyB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBhcm91bmQsIHN0YXJ0aW5nIHdpdGggbGluZSAxMzcuIEkgd2FudCB0byBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHRoZSBmdW5kYW1lbnRhbCBzZXR1cCBvciBpbml0aWFsaXphdGlvbiBvZiBhIFRJUEMgbGluay4gVGhlbiwgSSYjMzk7bGwgZ28gZnVydGhlciBkb3duIHRvIGxpbmUgNTA0LiBJJiMzOTttIHN1c3BlY3RpbmcgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBsb2dpYyBmb3IgaGFuZGxpbmcgY29ubmVjdGlvbiBzdGF0ZSwgbWF5YmUgZHVyaW5nIGEgcmV0cmFuc21pdCBvciBzb21lIG90aGVyIGlzc3VlLiBBZnRlciB0aGF0LCBJJiMzOTtsbCBsZWFwIHRvIGxpbmUgNTc0IC0gSSBiZXQgdGhhdCYjMzk7cyB3aGVyZSB0aGV5IG1hbmFnZSB0aGUgbGlmZWN5Y2xlIG9mIGEgbGluayBvciBtYXliZSB0aGUgdGVhcmRvd24gcHJvY2VkdXJlLiBMYXN0bHksIEkmIzM5O2xsIHpvb20gd2F5IGRvd24gdG8gbGluZSAxODk4LiBUaGF0JiMzOTtzIGdldHRpbmcgcHJldHR5IGRlZXAgaW50byB0aGUgY29kZSwgc28gdGhhdCBoYXMgdG8gYmUgZWl0aGVyIGFuIGVycm9yIGhhbmRsaW5nIHByb2NlZHVyZSBvciBzb21lIHJlYWxseSBsb3ctbGV2ZWwgc3R1ZmYgcmVnYXJkaW5nIHRoZSB0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uIG9mIGZyYW1lcy4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZXkgZGVhbCB3aXRoIHRoZSBzcGVjaWZpYyBuaXR0eS1ncml0dHkgb2YgdGhlIGxpbmsgbGF5ZXIuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVzZSBzZWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGlwYy9saW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzNzpcdHN0cnVjdCB0aXBjX2xpbmsge1xuIDEzODpcdFx0dTMyIGFkZHI7XG4gMTM5Olx0XHRjaGFyIG5hbWVbVElQQ19NQVhfTElOS19OQU1FXTtcbiAxNDA6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbiAxNDE6XHRcbiAxNDI6XHRcdC8qIE1hbmFnZW1lbnQgYW5kIGxpbmsgc3VwZXJ2aXNpb24gZGF0YSAqL1xuIDE0MzpcdFx0dTE2IHBlZXJfc2Vzc2lvbjtcbiAxNDQ6XHRcdHUxNiBzZXNzaW9uO1xuIDE0NTpcdFx0dTE2IHNuZF9ueHRfc3RhdGU7XG4gMTQ2Olx0XHR1MTYgcmN2X254dF9zdGF0ZTtcbiAxNDc6XHRcdHUzMiBwZWVyX2JlYXJlcl9pZDtcbiAxNDg6XHRcdHUzMiBiZWFyZXJfaWQ7XG4gMTQ5Olx0XHR1MzIgdG9sZXJhbmNlO1xuIDE1MDpcdFx0dTMyIGFib3J0X2xpbWl0O1xuIDE1MTpcdFx0dTMyIHN0YXRlO1xuIDE1MjpcdFx0dTE2IHBlZXJfY2FwcztcbiAxNTM6XHRcdGJvb2wgaW5fc2Vzc2lvbjtcbiAxNTQ6XHRcdGJvb2wgYWN0aXZlO1xuIDE1NTpcdFx0dTMyIHNpbGVudF9pbnR2X2NudDtcbiAxNTY6XHRcdGNoYXIgaWZfbmFtZVtUSVBDX01BWF9JRl9OQU1FXTtcbiAxNTc6XHRcdHUzMiBwcmlvcml0eTtcbiAxNTg6XHRcdGNoYXIgbmV0X3BsYW5lO1xuIDE1OTpcdFx0c3RydWN0IHRpcGNfbW9uX3N0YXRlIG1vbl9zdGF0ZTtcbiAxNjA6XHRcdHUxNiByc3RfY250O1xuIDE2MTpcdFxuIDE2MjpcdFx0LyogRmFpbG92ZXIvc3luY2ggKi9cbiAxNjM6XHRcdHUxNiBkcm9wX3BvaW50O1xuIDE2NDpcdFx0c3RydWN0IHNrX2J1ZmYgKmZhaWxvdmVyX3JlYXNtX3NrYjtcbiAxNjU6XHRcdHN0cnVjdCBza19idWZmX2hlYWQgZmFpbG92ZXJfZGVmZXJkcTtcbiAxNjY6XHRcbiAxNjc6XHRcdC8qIE1heCBwYWNrZXQgbmVnb3RpYXRpb24gKi9cbiAxNjg6XHRcdHUxNiBtdHU7XG4gMTY5Olx0XHR1MTYgYWR2ZXJ0aXNlZF9tdHU7XG4gMTcwOlx0XG4gMTcxOlx0XHQvKiBTZW5kaW5nICovXG4gMTcyOlx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHRyYW5zbXE7XG4gMTczOlx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGJhY2tsb2dxO1xuIDE3NDpcdFx0c3RydWN0IHtcbiAxNzU6XHRcdFx0dTE2IGxlbjtcbiAxNzY6XHRcdFx0dTE2IGxpbWl0O1xuIDE3NzpcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqdGFyZ2V0X2Jza2I7XG4gMTc4Olx0XHR9IGJhY2tsb2dbNV07XG4gMTc5Olx0XHR1MTYgc25kX254dDtcbiAxODA6XHRcbiAxODE6XHRcdC8qIFJlY2VwdGlvbiAqL1xuIDE4MjpcdFx0dTE2IHJjdl9ueHQ7XG4gMTgzOlx0XHR1MzIgcmN2X3VuYWNrZWQ7XG4gMTg0Olx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGRlZmVyZHE7XG4gMTg1Olx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHE7XG4gMTg2Olx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpuYW1lZHE7XG4gMTg3Olx0XG4gMTg4Olx0XHQvKiBDb25nZXN0aW9uIGhhbmRsaW5nICovXG4gMTg5Olx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHdha2V1cHE7XG4gMTkwOlx0XHR1MTYgd2luZG93O1xuIDE5MTpcdFx0dTE2IG1pbl93aW47XG4gMTkyOlx0XHR1MTYgc3N0aHJlc2g7XG4gMTkzOlx0XHR1MTYgbWF4X3dpbjtcbiAxOTQ6XHRcdHUxNiBjb25nX2Fja3M7XG4gMTk1Olx0XHR1MTYgY2hlY2twb2ludDtcbiAxOTY6XHRcbiAxOTc6XHRcdC8qIEZyYWdtZW50YXRpb24vcmVhc3NlbWJseSAqL1xuIDE5ODpcdFx0c3RydWN0IHNrX2J1ZmYgKnJlYXNtX2J1ZjtcbiAxOTk6XHRcdHN0cnVjdCBza19idWZmICpyZWFzbV90bmxtc2c7XG4gMjAwOlx0XG4gMjAxOlx0XHQvKiBCcm9hZGNhc3QgKi9cbiAyMDI6XHRcdHUxNiBhY2tlcnM7XG4gMjAzOlx0XHR1MTYgYWNrZWQ7XG4gMjA0Olx0XHR1MTYgbGFzdF9nYXA7XG4gMjA1Olx0XHRzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKmxhc3RfZ2E7XG4gMjA2Olx0XHRzdHJ1Y3QgdGlwY19saW5rICpiY19yY3ZsaW5rO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIFRJUEMgTGluayBDcmVhdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IFRJUEMgbGlua3MgYXJlIGVzdGFibGlzaGVkLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRocmVlIGtleSBmdW5jdGlvbnM6IGB0aXBjX2xpbmtfY3JlYXRlYCwgYHRpcGNfbGlua19iY19jcmVhdGVgLCBhbmQgYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgLiBJJiMzOTttIHN0YXJ0aW5nIHRvIHZpc3VhbGl6ZSB0aGUgbGlrZWx5IGZsb3cuIEkgc3VzcGVjdCBgdGlwY19saW5rX2NyZWF0ZWAgaXMgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIGVzdGFibGlzaGluZyBhIGdlbmVyYWwgVElQQyBsaW5rLiBUaGUgJiMzNDtiYyYjMzQ7IGluIGB0aXBjX2xpbmtfYmNfY3JlYXRlYCBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyByZWxhdGVkIHRvIGJyb2FkY2FzdCBvciBwb3RlbnRpYWxseSBzb21lIGZvcm0gb2YgY2xpZW50LXNlcnZlciBhcnJhbmdlbWVudCwgd2hpY2ggSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLiBBbmQgYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgLi4uIHRoYXQgc2NyZWFtcyBwcm90b2NvbCBtZXNzYWdlIGNvbnN0cnVjdGlvbi4gSSBhbnRpY2lwYXRlIHRoaXMgaXMgd2hlcmUgdGhlIGxpbmsmIzM5O3MgY29udHJvbCBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBtYXJzaGFsbGVkIGludG8gdGhlIHNwZWNpZmljIFRJUEMgZm9ybWF0IGZvciB0cmFuc21pc3Npb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCB0aGVzZSBmdW5jdGlvbnMgaW4gb3JkZXIgYW5kIHNlZSBob3cgdGhlIGZ1bmN0aW9ucyBpbnRlcmFjdC4gSSYjMzk7bSBrZWVuIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGxvb2tpbmcgZm9yIG9wdGltaXphdGlvbnMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgbXkgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGlwYy9saW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzA6XHQgKiBAbGluazogcmV0dXJuIHZhbHVlLCBwb2ludGVyIHRvIHB1dCB0aGUgY3JlYXRlZCBsaW5rXG4gNDcxOlx0ICogQHNlbGY6IGxvY2FsIHVuaWNhc3QgbGluayBpZFxuIDQ3MjpcdCAqIEBwZWVyX2lkOiAxMjgtYml0IElEIG9mIHBlZXJcbiA0NzM6XHQgKlxuIDQ3NDpcdCAqIFJldHVybjogdHJ1ZSBpZiBsaW5rIHdhcyBjcmVhdGVkLCBvdGhlcndpc2UgZmFsc2VcbiA0NzU6XHQgKi9cbiA0NzY6XHRib29sIHRpcGNfbGlua19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppZl9uYW1lLCBpbnQgYmVhcmVyX2lkLFxuIDQ3NzpcdFx0XHQgICAgICBpbnQgdG9sZXJhbmNlLCBjaGFyIG5ldF9wbGFuZSwgdTMyIG10dSwgaW50IHByaW9yaXR5LFxuIDQ3ODpcdFx0XHQgICAgICB1MzIgbWluX3dpbiwgdTMyIG1heF93aW4sIHUzMiBzZXNzaW9uLCB1MzIgc2VsZixcbiA0Nzk6XHRcdFx0ICAgICAgdTMyIHBlZXIsIHU4ICpwZWVyX2lkLCB1MTYgcGVlcl9jYXBzLFxuIDQ4MDpcdFx0XHQgICAgICBzdHJ1Y3QgdGlwY19saW5rICpiY19zbmRsaW5rLFxuIDQ4MTpcdFx0XHQgICAgICBzdHJ1Y3QgdGlwY19saW5rICpiY19yY3ZsaW5rLFxuIDQ4MjpcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsXG4gNDgzOlx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcSxcbiA0ODQ6XHRcdFx0ICAgICAgc3RydWN0IHRpcGNfbGluayAqKmxpbmspXG4gNDg1Olx0e1xuIDQ4NjpcdFx0Y2hhciBwZWVyX3N0cltOT0RFX0lEX1NUUl9MRU5dID0gezAsfTtcbiA0ODc6XHRcdGNoYXIgc2VsZl9zdHJbTk9ERV9JRF9TVFJfTEVOXSA9IHswLH07XG4gNDg4Olx0XHRzdHJ1Y3QgdGlwY19saW5rICpsO1xuIDQ4OTpcdFxuIDQ5MDpcdFx0bCA9IGt6YWxsb2Nfb2JqKCpsLCBHRlBfQVRPTUlDKTtcbiA0OTE6XHRcdGlmICghbClcbiA0OTI6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDQ5MzpcdFx0KmxpbmsgPSBsO1xuIDQ5NDpcdFx0bC1cdTAwM2VzZXNzaW9uID0gc2Vzc2lvbjtcbiA0OTU6XHRcbiA0OTY6XHRcdC8qIFNldCBsaW5rIG5hbWUgZm9yIHVuaWNhc3QgbGlua3Mgb25seSAqL1xuIDQ5NzpcdFx0aWYgKHBlZXJfaWQpIHtcbiA0OTg6XHRcdFx0aWYgKHRpcGNfbm9kZWlkMnN0cmluZyhzZWxmX3N0ciwgdGlwY19vd25faWQobmV0KSkgXHUwMDNlIE5PREVfSURfTEVOKVxuIDQ5OTpcdFx0XHRcdHNwcmludGYoc2VsZl9zdHIsIFwmIzM0OyV4XCYjMzQ7LCBzZWxmKTtcbiA1MDA6XHRcdFx0aWYgKHRpcGNfbm9kZWlkMnN0cmluZyhwZWVyX3N0ciwgcGVlcl9pZCkgXHUwMDNlIE5PREVfSURfTEVOKVxuIDUwMTpcdFx0XHRcdHNwcmludGYocGVlcl9zdHIsIFwmIzM0OyV4XCYjMzQ7LCBwZWVyKTtcbiA1MDI6XHRcdH1cbiA1MDM6XHRcdC8qIFBlZXIgaS9mIG5hbWUgd2lsbCBiZSBjb21wbGV0ZWQgYnkgcmVzZXQvYWN0aXZhdGUgbWVzc2FnZSAqL1xuIDUwNDpcdFx0c25wcmludGYobC1cdTAwM2VuYW1lLCBzaXplb2YobC1cdTAwM2VuYW1lKSwgXCYjMzQ7JXM6JXMtJXM6dW5rbm93blwmIzM0OyxcbiA1MDU6XHRcdFx0IHNlbGZfc3RyLCBpZl9uYW1lLCBwZWVyX3N0cik7XG4gNTA2Olx0XG4gNTA3Olx0XHRzdHJzY3B5KGwtXHUwMDNlaWZfbmFtZSwgaWZfbmFtZSk7XG4gNTA4Olx0XHRsLVx1MDAzZWFkZHIgPSBwZWVyO1xuIDUwOTpcdFx0bC1cdTAwM2VwZWVyX2NhcHMgPSBwZWVyX2NhcHM7XG4gNTEwOlx0XHRsLVx1MDAzZW5ldCA9IG5ldDtcbiA1MTE6XHRcdGwtXHUwMDNlaW5fc2Vzc2lvbiA9IGZhbHNlO1xuIDUxMjpcdFx0bC1cdTAwM2ViZWFyZXJfaWQgPSBiZWFyZXJfaWQ7XG4gNTEzOlx0XHRsLVx1MDAzZXRvbGVyYW5jZSA9IHRvbGVyYW5jZTtcbiA1MTQ6XHRcdGlmIChiY19yY3ZsaW5rKVxuIDUxNTpcdFx0XHRiY19yY3ZsaW5rLVx1MDAzZXRvbGVyYW5jZSA9IHRvbGVyYW5jZTtcbiA1MTY6XHRcdGwtXHUwMDNlbmV0X3BsYW5lID0gbmV0X3BsYW5lO1xuIDUxNzpcdFx0bC1cdTAwM2VhZHZlcnRpc2VkX210dSA9IG10dTtcbiA1MTg6XHRcdGwtXHUwMDNlbXR1ID0gbXR1O1xuIDUxOTpcdFx0bC1cdTAwM2Vwcmlvcml0eSA9IHByaW9yaXR5O1xuIDUyMDpcdFx0dGlwY19saW5rX3NldF9xdWV1ZV9saW1pdHMobCwgbWluX3dpbiwgbWF4X3dpbik7XG4gNTIxOlx0XHRsLVx1MDAzZWFja2VycyA9IDE7XG4gNTIyOlx0XHRsLVx1MDAzZWJjX3NuZGxpbmsgPSBiY19zbmRsaW5rO1xuIDUyMzpcdFx0bC1cdTAwM2ViY19yY3ZsaW5rID0gYmNfcmN2bGluaztcbiA1MjQ6XHRcdGwtXHUwMDNlaW5wdXRxID0gaW5wdXRxO1xuIDUyNTpcdFx0bC1cdTAwM2VuYW1lZHEgPSBuYW1lZHE7XG4gNTI2Olx0XHRsLVx1MDAzZXN0YXRlID0gTElOS19SRVNFVFRJTkc7XG4gNTI3Olx0XHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bC1cdTAwM2V0cmFuc21xKTtcbiA1Mjg6XHRcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZsLVx1MDAzZWJhY2tsb2dxKTtcbiA1Mjk6XHRcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZsLVx1MDAzZWRlZmVyZHEpO1xuIDUzMDpcdFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmwtXHUwMDNlZmFpbG92ZXJfZGVmZXJkcSk7XG4gNTMxOlx0XHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmwtXHUwMDNld2FrZXVwcSk7XG4gNTMyOlx0XHRza2JfcXVldWVfaGVhZF9pbml0KGwtXHUwMDNlaW5wdXRxKTtcbiA1MzM6XHRcdHJldHVybiB0cnVlO1xuIDUzNDpcdH1cbiA1MzU6XHRcbiA1MzY6XHQvKipcbiA1Mzc6XHQgKiB0aXBjX2xpbmtfYmNfY3JlYXRlIC0gY3JlYXRlIG5ldyBsaW5rIHRvIGJlIHVzZWQgZm9yIGJyb2FkY2FzdFxuIDUzODpcdCAqIEBuZXQ6IHBvaW50ZXIgdG8gYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxuIDUzOTpcdCAqIEBtdHU6IG10dSB0byBiZSB1c2VkIGluaXRpYWxseSBpZiBubyBwZWVyc1xuIDU0MDpcdCAqIEBtaW5fd2luOiBtaW5pbWFsIHNlbmQgd2luZG93IHRvIGJlIHVzZWQgYnkgbGlua1xuIDU0MTpcdCAqIEBtYXhfd2luOiBtYXhpbWFsIHNlbmQgd2luZG93IHRvIGJlIHVzZWQgYnkgbGlua1xuIDU0MjpcdCAqIEBpbnB1dHE6IHF1ZXVlIHRvIHB1dCBtZXNzYWdlcyByZWFkeSBmb3IgZGVsaXZlcnlcbiA1NDM6XHQgKiBAbmFtZWRxOiBxdWV1ZSB0byBwdXQgYmluZGluZyB0YWJsZSB1cGRhdGUgbWVzc2FnZXMgcmVhZHkgZm9yIGRlbGl2ZXJ5XG4gNTQ0Olx0ICogQGxpbms6IHJldHVybiB2YWx1ZSwgcG9pbnRlciB0byBwdXQgdGhlIGNyZWF0ZWQgbGlua1xuIDU0NTpcdCAqIEBvd25ub2RlOiBpZGVudGl0eSBvZiBvd24gbm9kZVxuIDU0NjpcdCAqIEBwZWVyOiBub2RlIGlkIG9mIHBlZXIgbm9kZVxuIDU0NzpcdCAqIEBwZWVyX2lkOiAxMjgtYml0IElEIG9mIHBlZXJcbiA1NDg6XHQgKiBAcGVlcl9jYXBzOiBiaXRtYXAgZGVzY3JpYmluZyBwZWVyIG5vZGUgY2FwYWJpbGl0aWVzXG4gNTQ5Olx0ICogQGJjX3NuZGxpbms6IHRoZSBuYW1lc3BhY2UgZ2xvYmFsIGxpbmsgdXNlZCBmb3IgYnJvYWRjYXN0IHNlbmRpbmdcbiA1NTA6XHQgKlxuIDU1MTpcdCAqIFJldHVybjogdHJ1ZSBpZiBsaW5rIHdhcyBjcmVhdGVkLCBvdGhlcndpc2UgZmFsc2VcbiA1NTI6XHQgKi9cbiA1NTM6XHRib29sIHRpcGNfbGlua19iY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgb3dubm9kZSwgdTMyIHBlZXIsIHU4ICpwZWVyX2lkLFxuIDU1NDpcdFx0XHRcdCBpbnQgbXR1LCB1MzIgbWluX3dpbiwgdTMyIG1heF93aW4sIHUxNiBwZWVyX2NhcHMsXG4gNTU1Olx0XHRcdFx0IHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcbiA1NTY6XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbmFtZWRxLFxuIDU1NzpcdFx0XHRcdCBzdHJ1Y3QgdGlwY19saW5rICpiY19zbmRsaW5rLFxuIDU1ODpcdFx0XHRcdCBzdHJ1Y3QgdGlwY19saW5rICoqbGluaylcbiA1NTk6XHR7XG4gNTYwOlx0XHRzdHJ1Y3QgdGlwY19saW5rICpsO1xuIDU2MTpcdFxuIDU2MjpcdFx0aWYgKCF0aXBjX2xpbmtfY3JlYXRlKG5ldCwgXCYjMzQ7XCYjMzQ7LCBNQVhfQkVBUkVSUywgMCwgJiMzOTtaJiMzOTssIG10dSwgMCwgbWluX3dpbixcbiA1NjM6XHRcdFx0XHQgICAgICBtYXhfd2luLCAwLCBvd25ub2RlLCBwZWVyLCBOVUxMLCBwZWVyX2NhcHMsXG4gNTY0Olx0XHRcdFx0ICAgICAgYmNfc25kbGluaywgTlVMTCwgaW5wdXRxLCBuYW1lZHEsIGxpbmspKVxuIDU2NTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNTY2Olx0XG4gNTY3Olx0XHRsID0gKmxpbms7XG4gNTY4Olx0XHRpZiAocGVlcl9pZCkge1xuIDU2OTpcdFx0XHRjaGFyIHBlZXJfc3RyW05PREVfSURfU1RSX0xFTl0gPSB7MCx9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDY4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipFeGFtaW5pbmcgTGluZSAxODk4KioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSYjMzk7bSB0YWtpbmcgYSBzdHJhdGVnaWMgbG9vayBhdCB0aGlzIGRvY3VtZW50LCBhbmQgdGhlIGNvbnRleHQgc3VnZ2VzdHMgdGhhdCBkaWdnaW5nIGludG8gdGhlIGNvbnRlbnQgYXJvdW5kIGxpbmUgMTg5OCB3b3VsZCBwcm92aWRlIHNvbWUgY3J1Y2lhbCBpbnNpZ2h0cy4gTXkgbWVudGFsIG1vZGVsIGFudGljaXBhdGVzIHRoYXQgYSBkaXNjdXNzaW9uIG9yIHBpZWNlIG9mIGRhdGEgcHJlc2VudGVkIGFyb3VuZCB0aGlzIGxpbmUgbWF5IGJlIHBpdm90YWwgdG8gdGhlIG92ZXJhbGwgYXJndW1lbnQsIG9yIGl0IG1pZ2h0IGNvbnRhaW4gaW5mb3JtYXRpb24gdGhhdCByZWZ1dGVzIGEgc3BlY2lmaWMgcG9pbnQuIEdpdmVuIG15IGV4cGVydGlzZSwgbXkgaW50dWl0aW9uIGlzIGhvbmVkIHRvIGZsYWcgdGhpcyBhcmVhIGZvciBkZWVwZXIgZXhhbWluYXRpb24uIEkmIzM5O20gYXBwcm9hY2hpbmcgdGhpcyB3aXRoIGEga2VlbiBleHBlY3RhdGlvbiB0aGF0IHRoZSBjb250ZW50IHRoZXJlIG1heSBiZSBlaXRoZXIgYSBjcml0aWNhbCBzdXBwb3J0aW5nIHBpZWNlLCBvciBhIHJlbGV2YW50IG91dGxpZXIgdGhhdCB3YXJyYW50cyBmdXJ0aGVyIHNjcnV0aW55LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL2xpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg4MDpcdFx0XHRpZiAobC1cdTAwM2VwZWVyX2NhcHMgXHUwMDI2IFRJUENfTElOS19QUk9UT19TRVFOTylcbjE4ODE6XHRcdFx0XHRtc2dfc2V0X3NlcW5vKGhkciwgbC1cdTAwM2VzbmRfbnh0X3N0YXRlJiM0MzsmIzQzOyk7XG4xODgyOlx0XHRcdG1zZ19zZXRfc2VxX2dhcChoZHIsIHJjdmdhcCk7XG4xODgzOlx0XHRcdGJjX3JjdmdhcCA9IGxpbmtfYmNfcmN2X2dhcChiY2wpO1xuMTg4NDpcdFx0XHRtc2dfc2V0X2JjX2dhcChoZHIsIGJjX3JjdmdhcCk7XG4xODg1Olx0XHRcdG1zZ19zZXRfcHJvYmUoaGRyLCBwcm9iZSk7XG4xODg2Olx0XHRcdG1zZ19zZXRfaXNfa2VlcGFsaXZlKGhkciwgcHJvYmUgfHwgcHJvYmVfcmVwbHkpO1xuMTg4NzpcdFx0XHRpZiAobC1cdTAwM2VwZWVyX2NhcHMgXHUwMDI2IFRJUENfR0FQX0FDS19CTE9DSylcbjE4ODg6XHRcdFx0XHRnbGVuID0gdGlwY19idWlsZF9nYXBfYWNrX2Jsa3MobCwgaGRyKTtcbjE4ODk6XHRcdFx0dGlwY19tb25fcHJlcChsLVx1MDAzZW5ldCwgZGF0YSAmIzQzOyBnbGVuLCBcdTAwMjZkbGVuLCBtc3RhdGUsIGwtXHUwMDNlYmVhcmVyX2lkKTtcbjE4OTA6XHRcdFx0bXNnX3NldF9zaXplKGhkciwgSU5UX0hfU0laRSAmIzQzOyBnbGVuICYjNDM7IGRsZW4pO1xuMTg5MTpcdFx0XHRza2JfdHJpbShza2IsIElOVF9IX1NJWkUgJiM0MzsgZ2xlbiAmIzQzOyBkbGVuKTtcbjE4OTI6XHRcdFx0bC1cdTAwM2VzdGF0cy5zZW50X3N0YXRlcyYjNDM7JiM0Mzs7XG4xODkzOlx0XHRcdGwtXHUwMDNlcmN2X3VuYWNrZWQgPSAwO1xuMTg5NDpcdFx0fSBlbHNlIHtcbjE4OTU6XHRcdFx0LyogUkVTRVRfTVNHIG9yIEFDVElWQVRFX01TRyAqL1xuMTg5NjpcdFx0XHRpZiAobXR5cCA9PSBBQ1RJVkFURV9NU0cpIHtcbjE4OTc6XHRcdFx0XHRtc2dfc2V0X2Rlc3Rfc2Vzc2lvbl92YWxpZChoZHIsIDEpO1xuMTg5ODpcdFx0XHRcdG1zZ19zZXRfZGVzdF9zZXNzaW9uKGhkciwgbC1cdTAwM2VwZWVyX3Nlc3Npb24pO1xuMTg5OTpcdFx0XHR9XG4xOTAwOlx0XHRcdG1zZ19zZXRfbWF4X3BrdChoZHIsIGwtXHUwMDNlYWR2ZXJ0aXNlZF9tdHUpO1xuMTkwMTpcdFx0XHRtZW1jcHkoZGF0YSwgbC1cdTAwM2VpZl9uYW1lLCBUSVBDX01BWF9JRl9OQU1FKTtcbjE5MDI6XHRcdFx0bXNnX3NldF9zaXplKGhkciwgSU5UX0hfU0laRSAmIzQzOyBUSVBDX01BWF9JRl9OQU1FKTtcbjE5MDM6XHRcdFx0c2tiX3RyaW0oc2tiLCBJTlRfSF9TSVpFICYjNDM7IFRJUENfTUFYX0lGX05BTUUpO1xuMTkwNDpcdFx0fVxuMTkwNTpcdFx0aWYgKHByb2JlKVxuMTkwNjpcdFx0XHRsLVx1MDAzZXN0YXRzLnNlbnRfcHJvYmVzJiM0MzsmIzQzOztcbjE5MDc6XHRcdGlmIChyY3ZnYXApXG4xOTA4Olx0XHRcdGwtXHUwMDNlc3RhdHMuc2VudF9uYWNrcyYjNDM7JiM0Mzs7XG4xOTA5Olx0XHRpZiAoYmNfcmN2Z2FwKVxuMTkxMDpcdFx0XHRiY2wtXHUwMDNlc3RhdHMuc2VudF9uYWNrcyYjNDM7JiM0Mzs7XG4xOTExOlx0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSBUQ19QUklPX0NPTlRST0w7XG4xOTEyOlx0XHRfX3NrYl9xdWV1ZV90YWlsKHhtaXRxLCBza2IpO1xuMTkxMzpcdFx0dHJhY2VfdGlwY19wcm90b19idWlsZChza2IsIGZhbHNlLCBsLVx1MDAzZW5hbWUpO1xuMTkxNDpcdH1cbjE5MTU6XHRcbjE5MTY6XHR2b2lkIHRpcGNfbGlua19jcmVhdGVfZHVtbXlfdG5sX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLFxuMTkxNzpcdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuMTkxODpcdHtcbjE5MTk6XHRcdHUzMiBvbm9kZSA9IHRpcGNfb3duX2FkZHIobC1cdTAwM2VuZXQpO1xuMTkyMDpcdFx0c3RydWN0IHRpcGNfbXNnICpoZHIsICppaGRyO1xuMTkyMTpcdFx0c3RydWN0IHNrX2J1ZmZfaGVhZCB0bmxxO1xuMTkyMjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjE5MjM6XHRcdHUzMiBkbm9kZSA9IGwtXHUwMDNlYWRkcjtcbjE5MjQ6XHRcbjE5MjU6XHRcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZ0bmxxKTtcbjE5MjY6XHRcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShUVU5ORUxfUFJPVE9DT0wsIEZBSUxPVkVSX01TRyxcbjE5Mjc6XHRcdFx0XHQgICAgICBJTlRfSF9TSVpFLCBCQVNJQ19IX1NJWkUsXG4xOTI4Olx0XHRcdFx0ICAgICAgZG5vZGUsIG9ub2RlLCAwLCAwLCAwKTtcbjE5Mjk6XHRcdGlmICghc2tiKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQWRkcmVzc2luZyBQb3RlbnRpYWwgQnVmZmVyIE92ZXJmbG93cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCB0aWdodGVuaW5nIHVwIHN0cmluZyBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHRvIHByZXZlbnQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3MuIExldCYjMzk7cyBzZWUgaWYgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIGNvcnJlY3QuCgpJbiB0aGUgZmlyc3QgY2FzZSwgaW5zaWRlIGB0aXBjX2xpbmtfY3JlYXRlYCwgdGhlIGNvZGUgbm93IHVzZXMgYHN0cnNjcHlgIGFmdGVyIGEgYGt6YWxsb2Nfb2JqYCBhbGxvY2F0aW9uLiBUaGUgYGt6YWxsb2Nfb2JqYCBpcyBjcml0aWNhbCBoZXJlOyBpdCB6ZXJvZXMgdGhlIGVudGlyZSBgc3RydWN0IHRpcGNfbGlua2AsIGluY2x1ZGluZyB0aGUgYGlmX25hbWVgIGZpZWxkLiBUaGlzIGlzIGdvb2QgYmVjYXVzZSBpdCBwcm92aWRlcyBhIGtub3duIHN0YXJ0aW5nIHN0YXRlLiBUaGVuIGBzdHJzY3B5YCBzYWZlbHkgY29waWVzIHRoZSBpbnRlcmZhY2UgbmFtZSBpbnRvIGBsLSZndDtpZl9uYW1lYC4gRXZlbiBpZiBgaWZfbmFtZWAgaXMgbG9uZ2VyIHRoYW4gd2hhdCBgbC0mZ3Q7aWZfbmFtZWAgY2FuIGhvbGQsIGBzdHJzY3B5YCBlbnN1cmVzIHdlIGRvbiYjMzk7dCB3cml0ZSBwYXN0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gVGhlIHplcm9pbmcgZnJvbSBga3phbGxvY19vYmpgIG1lYW5zIHRoYXQgZXZlbiBpZiBgc3Ryc2NweWAgZG9lc24mIzM5O3QgZmlsbCB0aGUgZW50aXJlIGJ1ZmZlciwgdGhlIHJlbWFpbmluZyBwYXJ0IGlzIHBhZGRlZCB3aXRoIHplcm9zLgoKTmV4dCwgaW4gYHRpcGNfbGlua19iY19jcmVhdGVgLCB0aGUgY2hhbmdlIGZyb20gYHN0cmNweWAgdG8gYHN0cnNjcHlgIGlzIHRoZSBzYW1lIHByaW5jaXBsZS4gYHN0cnNjcHlgIGlzIHRoZSBzYWZlciBvcHRpb24uCgpUaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0IGNvbWVzIHdpdGggYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgLiAgSW5pdGlhbGx5LCBpdCBsb29rcyBsaWtlIGBzdHJjcHlgIHdhcyB1c2VkIHRvIGNvcHkgYGwtJmd0O2lmX25hbWVgIGludG8gYGRhdGFgLiBCdXQgaG9sZCBvbi4uLiB0aGUgY29kZSBzZXRzIGEgZml4ZWQgc2l6ZSBmb3IgdGhlIG1lc3NhZ2UgdXNpbmcgYG1zZ19zZXRfc2l6ZWAgYW5kIHRyaW1zIHRoZSBzb2NrZXQgYnVmZmVyIChgc2tiYCkgdG8gdGhhdCBmaXhlZCBzaXplLCBldmVuIHRob3VnaCBgc3RyY3B5YCAqc2hvdWxkKiBoYXZlIHN0b3BwZWQgYXQgdGhlIG51bGwgdGVybWluYXRvciBvZiB0aGUgc3RyaW5nIGluIGBsLSZndDtpZl9uYW1lYC4gVGhhdCYjMzk7cyBhIGJpdCBvZiBhIHJlZCBmbGFnOyBpdCBhcHBlYXJzIHRoYXQgdGhlIGVhcmxpZXIgaW1wbGVtZW50YXRpb24sIGNvdW50ZXJpbnR1aXRpdmVseSwgd2FzIHJlbHlpbmcgb24gdGhlIG51bGwgdGVybWluYXRpb24gb2YgYGwtJmd0O2lmX25hbWVgIHRvIGRlZmluZSB0aGUgY29waWVkIGRhdGEuICAKCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhlIGBza2JgIHdhcyBhbGxvY2F0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgd2hhdCBhc3N1bXB0aW9ucyBhcmUgbWFkZSBhYm91dCBpdHMgc2l6ZS4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaXhlZCBzaXplIHNldHRpbmcgYW5kIHRyaW1taW5nIGluIHRoZSBvcmlnaW5hbCBjb2RlIGNvdWxkIGxlYWQgdG8gdGhlIHNpemUgYmVpbmcgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBzdHJpbmcsIG9yIGlmIHRoZXJlJiMzOTtzIGEgZGlmZmVyZW50IHZ1bG5lcmFiaWxpdHkgdGhhdCB0aGUgY3VycmVudCBwYXRjaCBhZGRyZXNzZXMgdGhhdCBJIGFtIG1pc3NpbmcuIEZ1cnRoZXIgY29kZSBpbnNwZWN0aW9uIGlzIHdhcnJhbnRlZCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBhbGxvY2F0aW9uIGFuZCB1bmRlcnN0YW5kIHRoZSBvcmlnaW5hbCByYXRpb25hbGUgYmVoaW5kIHRoZSBmaXhlZC1zaXplIG1lc3NhZ2UgY29uc3RydWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL2xpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg0NTpcdFx0dm9pZCAqZGF0YTtcbjE4NDY6XHRcbjE4NDc6XHRcdC8qIERvbiYjMzk7dCBzZW5kIHByb3RvY29sIG1lc3NhZ2UgZHVyaW5nIHJlc2V0IG9yIGxpbmsgZmFpbG92ZXIgKi9cbjE4NDg6XHRcdGlmICh0aXBjX2xpbmtfaXNfYmxvY2tlZChsKSlcbjE4NDk6XHRcdFx0cmV0dXJuO1xuMTg1MDpcdFxuMTg1MTpcdFx0aWYgKCF0aXBjX2xpbmtfaXNfdXAobCkgXHUwMDI2XHUwMDI2IChtdHlwID09IFNUQVRFX01TRykpXG4xODUyOlx0XHRcdHJldHVybjtcbjE4NTM6XHRcbjE4NTQ6XHRcdGlmICgocHJvYmUgfHwgcHJvYmVfcmVwbHkpIFx1MDAyNlx1MDAyNiAhc2tiX3F1ZXVlX2VtcHR5KGRmcSkpXG4xODU1Olx0XHRcdHJjdmdhcCA9IGJ1Zl9zZXFubyhza2JfcGVlayhkZnEpKSAtIGwtXHUwMDNlcmN2X254dDtcbjE4NTY6XHRcbjE4NTc6XHRcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShMSU5LX1BST1RPQ09MLCBtdHlwLCBJTlRfSF9TSVpFLFxuMTg1ODpcdFx0XHRcdCAgICAgIHRpcGNfbWF4X2RvbWFpbl9zaXplICYjNDM7IE1BWF9HQVBfQUNLX0JMS1NfU1osXG4xODU5Olx0XHRcdFx0ICAgICAgbC1cdTAwM2VhZGRyLCB0aXBjX293bl9hZGRyKGwtXHUwMDNlbmV0KSwgMCwgMCwgMCk7XG4xODYwOlx0XHRpZiAoIXNrYilcbjE4NjE6XHRcdFx0cmV0dXJuO1xuMTg2MjpcdFxuMTg2MzpcdFx0aGRyID0gYnVmX21zZyhza2IpO1xuMTg2NDpcdFx0ZGF0YSA9IG1zZ19kYXRhKGhkcik7XG4xODY1Olx0XHRtc2dfc2V0X3Nlc3Npb24oaGRyLCBsLVx1MDAzZXNlc3Npb24pO1xuMTg2NjpcdFx0bXNnX3NldF9iZWFyZXJfaWQoaGRyLCBsLVx1MDAzZWJlYXJlcl9pZCk7XG4xODY3Olx0XHRtc2dfc2V0X25ldF9wbGFuZShoZHIsIGwtXHUwMDNlbmV0X3BsYW5lKTtcbjE4Njg6XHRcdG1zZ19zZXRfbmV4dF9zZW50KGhkciwgbC1cdTAwM2VzbmRfbnh0KTtcbjE4Njk6XHRcdG1zZ19zZXRfYWNrKGhkciwgbC1cdTAwM2VyY3Zfbnh0IC0gMSk7XG4xODcwOlx0XHRtc2dfc2V0X2JjYXN0X2FjayhoZHIsIGJjbC1cdTAwM2VyY3Zfbnh0IC0gMSk7XG4xODcxOlx0XHRtc2dfc2V0X2JjX2Fja19pbnZhbGlkKGhkciwgIW5vZGVfdXApO1xuMTg3MjpcdFx0bXNnX3NldF9sYXN0X2JjYXN0KGhkciwgbC1cdTAwM2ViY19zbmRsaW5rLVx1MDAzZXNuZF9ueHQgLSAxKTtcbjE4NzM6XHRcdG1zZ19zZXRfbGlua190b2xlcmFuY2UoaGRyLCB0b2xlcmFuY2UpO1xuMTg3NDpcdFx0bXNnX3NldF9saW5rcHJpbyhoZHIsIHByaW9yaXR5KTtcbjE4NzU6XHRcdG1zZ19zZXRfcmVkdW5kYW50X2xpbmsoaGRyLCBub2RlX3VwKTtcbjE4NzY6XHRcdG1zZ19zZXRfc2VxX2dhcChoZHIsIDApO1xuMTg3NzpcdFx0bXNnX3NldF9zZXFubyhoZHIsIGwtXHUwMDNlc25kX254dCAmIzQzOyBVMTZfTUFYIC8gMik7XG4xODc4Olx0XG4xODc5Olx0XHRpZiAobXR5cCA9PSBTVEFURV9NU0cpIHtcbjE4ODA6XHRcdFx0aWYgKGwtXHUwMDNlcGVlcl9jYXBzIFx1MDAyNiBUSVBDX0xJTktfUFJPVE9fU0VRTk8pXG4xODgxOlx0XHRcdFx0bXNnX3NldF9zZXFubyhoZHIsIGwtXHUwMDNlc25kX254dF9zdGF0ZSYjNDM7JiM0MzspO1xuMTg4MjpcdFx0XHRtc2dfc2V0X3NlcV9nYXAoaGRyLCByY3ZnYXApO1xuMTg4MzpcdFx0XHRiY19yY3ZnYXAgPSBsaW5rX2JjX3Jjdl9nYXAoYmNsKTtcbjE4ODQ6XHRcdFx0bXNnX3NldF9iY19nYXAoaGRyLCBiY19yY3ZnYXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA3NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgYHRpcGNfbXNnX2NyZWF0ZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGlubmVyIHdvcmtpbmdzIG9mIGB0aXBjX21zZ19jcmVhdGVgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGZ1bmN0aW9uLCBzbyBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBiYXNpY3MuIExldCYjMzk7cyBzZWUuLi4gdGhlIHF1aWNrZXN0IHJvdXRlIHRvIHVuZGVyc3RhbmQgaXQgaXMgdG8gdHJhY2UgaXRzIGNhbGxzIGFuZCBzZWUgaG93IGl0IGlzIHVzZWQuIEkmIzM5O2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgaW5zdGFuY2VzIHdoZXJlIGB0aXBjX21zZ19jcmVhdGVgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBpdHMgY29udGV4dCwgd2hhdCBhcmd1bWVudHMgYXJlIHR5cGljYWxseSBwYXNzZWQsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBsYXJnZXIgVElQQyBtZXNzYWdpbmcgYXJjaGl0ZWN0dXJlLiBGcm9tIHRoZXJlLCBJIGNhbiBkaWcgZGVlcGVyIGludG8gdGhlIHNvdXJjZSBjb2RlIG9mIGB0aXBjX21zZ19jcmVhdGVgIGl0c2VsZi4gR290dGEgYmUgZWZmaWNpZW50IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfbXNnX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2dyb3VwLmM9NjY4PXN0YXRpYyB2b2lkIHRpcGNfZ3JvdXBfY3JlYXRlX2V2ZW50KHN0cnVjdCB0aXBjX2dyb3VwICpncnAsXG4tLVxubmV0L3RpcGMvZ3JvdXAuYy02ODYtXG5uZXQvdGlwYy9ncm91cC5jOjY4NzpcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UsIFRJUENfR1JQX01FTUJFUl9FVlQsXG5uZXQvdGlwYy9ncm91cC5jLTY4OC1cdFx0XHQgICAgICBHUk9VUF9IX1NJWkUsIHNpemVvZihldnQpLCBkbm9kZSwgbS1cdTAwM2Vub2RlLFxuLS1cbm5ldC90aXBjL2dyb3VwLmM9NzAzPXN0YXRpYyB2b2lkIHRpcGNfZ3JvdXBfcHJvdG9feG1pdChzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLCBzdHJ1Y3QgdGlwY19tZW1iZXIgKm0sXG4tLVxubmV0L3RpcGMvZ3JvdXAuYy03MDktXG5uZXQvdGlwYy9ncm91cC5jOjcxMDpcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShHUk9VUF9QUk9UT0NPTCwgbXR5cCwgSU5UX0hfU0laRSwgMCxcbm5ldC90aXBjL2dyb3VwLmMtNzExLVx0XHRcdCAgICAgIG0tXHUwMDNlbm9kZSwgdGlwY19vd25fYWRkcihncnAtXHUwMDNlbmV0KSxcbi0tXG5uZXQvdGlwYy9saW5rLmM9ODgxPXN0YXRpYyBpbnQgbGlua19zY2hlZHVsZV91c2VyKHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCB0aXBjX21zZyAqaGRyKVxuLS1cbm5ldC90aXBjL2xpbmsuYy04ODctXHQvKiBDcmVhdGUgYW5kIHNjaGVkdWxlIHdha2V1cCBwc2V1ZG8gbWVzc2FnZSAqL1xubmV0L3RpcGMvbGluay5jOjg4ODpcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShTT0NLX1dBS0VVUCwgMCwgSU5UX0hfU0laRSwgMCxcbm5ldC90aXBjL2xpbmsuYy04ODktXHRcdFx0ICAgICAgZG5vZGUsIGwtXHUwMDNlYWRkciwgZHBvcnQsIDAsIDApO1xuLS1cbm5ldC90aXBjL2xpbmsuYz0xODMyPXN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsXG4tLVxubmV0L3RpcGMvbGluay5jLTE4NTYtXG5uZXQvdGlwYy9saW5rLmM6MTg1NzpcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShMSU5LX1BST1RPQ09MLCBtdHlwLCBJTlRfSF9TSVpFLFxubmV0L3RpcGMvbGluay5jLTE4NTgtXHRcdFx0ICAgICAgdGlwY19tYXhfZG9tYWluX3NpemUgJiM0MzsgTUFYX0dBUF9BQ0tfQkxLU19TWixcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTkxNj12b2lkIHRpcGNfbGlua19jcmVhdGVfZHVtbXlfdG5sX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xOTI1LVx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnRubHEpO1xubmV0L3RpcGMvbGluay5jOjE5MjY6XHRza2IgPSB0aXBjX21zZ19jcmVhdGUoVFVOTkVMX1BST1RPQ09MLCBGQUlMT1ZFUl9NU0csXG5uZXQvdGlwYy9saW5rLmMtMTkyNy1cdFx0XHQgICAgICBJTlRfSF9TSVpFLCBCQVNJQ19IX1NJWkUsXG4tLVxubmV0L3RpcGMvbGluay5jPTE5NDk9dm9pZCB0aXBjX2xpbmtfdG5sX3ByZXBhcmUoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHRpcGNfbGluayAqdG5sLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xOTcwLVx0aWYgKG10eXAgPT0gU1lOQ0hfTVNHIFx1MDAyNlx1MDAyNiAodG5sLVx1MDAzZXBlZXJfY2FwcyBcdTAwMjYgVElQQ19UVU5ORUxfRU5IQU5DRUQpKSB7XG5uZXQvdGlwYy9saW5rLmM6MTk3MTpcdFx0dG5sc2tiID0gdGlwY19tc2dfY3JlYXRlKFRVTk5FTF9QUk9UT0NPTCwgU1lOQ0hfTVNHLFxubmV0L3RpcGMvbGluay5jLTE5NzItXHRcdFx0XHRcdCBJTlRfSF9TSVpFLCAwLCBsLVx1MDAzZWFkZHIsXG4tLVxubmV0L3RpcGMvbGluay5jLTE5OTItXHQvKiBBdCBsZWFzdCBvbmUgcGFja2V0IHJlcXVpcmVkIGZvciBzYWZlIGFsZ29yaXRobSA9XHUwMDNlIGFkZCBkdW1teSAqL1xubmV0L3RpcGMvbGluay5jOjE5OTM6XHRza2IgPSB0aXBjX21zZ19jcmVhdGUoVElQQ19MT1dfSU1QT1JUQU5DRSwgVElQQ19ESVJFQ1RfTVNHLFxubmV0L3RpcGMvbGluay5jLTE5OTQtXHRcdFx0ICAgICAgQkFTSUNfSF9TSVpFLCAwLCBsLVx1MDAzZWFkZHIsIHRpcGNfb3duX2FkZHIobC1cdTAwM2VuZXQpLFxuLS1cbm5ldC90aXBjL2xpbmsuYz0yMzMyPXN0YXRpYyBib29sIHRpcGNfbGlua19idWlsZF9iY19wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgYm9vbCBiY2FzdCxcbi0tXG5uZXQvdGlwYy9saW5rLmMtMjM0MS1cbm5ldC90aXBjL2xpbmsuYzoyMzQyOlx0c2tiID0gdGlwY19tc2dfY3JlYXRlKEJDQVNUX1BST1RPQ09MLCBTVEFURV9NU0csIElOVF9IX1NJWkUsXG5uZXQvdGlwYy9saW5rLmMtMjM0My1cdFx0XHQgICAgICAwLCBsLVx1MDAzZWFkZHIsIHRpcGNfb3duX2FkZHIobC1cdTAwM2VuZXQpLCAwLCAwLCAwKTtcbi0tXG5uZXQvdGlwYy9tc2cuYz04MT12b2lkIHRpcGNfbXNnX2luaXQodTMyIG93bl9ub2RlLCBzdHJ1Y3QgdGlwY19tc2cgKm0sIHUzMiB1c2VyLCB1MzIgdHlwZSxcbi0tXG5uZXQvdGlwYy9tc2cuYy05Ni1cbm5ldC90aXBjL21zZy5jOjk3OnN0cnVjdCBza19idWZmICp0aXBjX21zZ19jcmVhdGUodWludCB1c2VyLCB1aW50IHR5cGUsXG5uZXQvdGlwYy9tc2cuYy05OC1cdFx0XHRcdHVpbnQgaGRyX3N6LCB1aW50IGRhdGFfc3osIHUzMiBkbm9kZSxcbi0tXG5uZXQvdGlwYy9tc2cuaD0xMTYwPXZvaWQgdGlwY19tc2dfaW5pdCh1MzIgb3duX2FkZHIsIHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIHVzZXIsIHUzMiB0eXBlLFxubmV0L3RpcGMvbXNnLmgtMTE2MS1cdFx0ICAgdTMyIGhzaXplLCB1MzIgZGVzdG5vZGUpO1xubmV0L3RpcGMvbXNnLmg6MTE2MjpzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19tc2dfY3JlYXRlKHVpbnQgdXNlciwgdWludCB0eXBlLCB1aW50IGhkcl9zeixcbm5ldC90aXBjL21zZy5oLTExNjMtXHRcdFx0XHR1aW50IGRhdGFfc3osIHUzMiBkbm9kZSwgdTMyIG9ub2RlLFxuLS1cbm5ldC90aXBjL25vZGUuYz0xNTIzPXN0YXRpYyB2b2lkIG5vZGVfbG9zdF9jb250YWN0KHN0cnVjdCB0aXBjX25vZGUgKm4sXG4tLVxubmV0L3RpcGMvbm9kZS5jLTE1NTItXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29ubiwgc2FmZSwgY29ubnMsIGxpc3QpIHtcbm5ldC90aXBjL25vZGUuYzoxNTUzOlx0XHRza2IgPSB0aXBjX21zZ19jcmVhdGUoVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFLCBUSVBDX0NPTk5fTVNHLFxubmV0L3RpcGMvbm9kZS5jLTE1NTQtXHRcdFx0XHQgICAgICBTSE9SVF9IX1NJWkUsIDAsIHRpcGNfb3duX2FkZHIobi1cdTAwM2VuZXQpLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTU1MD1zdGF0aWMgdm9pZCBfX3RpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVycm9yKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTU5Mi1cdFx0fVxubmV0L3RpcGMvc29ja2V0LmM6NTkzOlx0XHRza2IgPSB0aXBjX21zZ19jcmVhdGUoVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFLFxubmV0L3RpcGMvc29ja2V0LmMtNTk0LVx0XHRcdFx0ICAgICAgVElQQ19DT05OX01TRywgU0hPUlRfSF9TSVpFLCAwLCBkbm9kZSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xNzk0PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19za19idWlsZF9hY2soc3RydWN0IHRpcGNfc29jayAqdHNrKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE4MDMtXHRcdHJldHVybiBOVUxMO1xubmV0L3RpcGMvc29ja2V0LmM6MTgwNDpcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShDT05OX01BTkFHRVIsIENPTk5fQUNLLCBJTlRfSF9TSVpFLCAwLFxubmV0L3RpcGMvc29ja2V0LmMtMTgwNS1cdFx0XHQgICAgICBkbm9kZSwgdHNrX293bl9ub2RlKHRzayksIHBlZXJfcG9ydCxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yODMwPXN0YXRpYyB2b2lkIHRpcGNfc2tfY2hlY2tfcHJvYmluZ19zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjg0Ny1cdC8qIFByZXBhcmUgbmV3IHByb2JlICovXG5uZXQvdGlwYy9zb2NrZXQuYzoyODQ4Olx0c2tiID0gdGlwY19tc2dfY3JlYXRlKENPTk5fTUFOQUdFUiwgQ09OTl9QUk9CRSwgSU5UX0hfU0laRSwgMCxcbm5ldC90aXBjL3NvY2tldC5jLTI4NDktXHRcdFx0ICAgICAgcG5vZGUsIHNlbGYsIHBwb3J0LCBvcG9ydCwgVElQQ19PSyk7XG4tLVxubmV0L3RpcGMvdG9wc3J2LmM9NjE0PXN0YXRpYyB2b2lkIHRpcGNfdG9wc3J2X2tlcm5fZXZ0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZXZlbnQgKmV2dClcbi0tXG5uZXQvdGlwYy90b3BzcnYuYy02MjAtXG5uZXQvdGlwYy90b3BzcnYuYzo2MjE6XHRza2IgPSB0aXBjX21zZ19jcmVhdGUoVE9QX1NSViwgMCwgSU5UX0hfU0laRSwgc2l6ZW9mKCpldnQpLFxubmV0L3RpcGMvdG9wc3J2LmMtNjIyLVx0XHRcdCAgICAgIHNlbGYsIHNlbGYsIHBvcnQsIHBvcnQsIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM0NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG5ldC90aXBjL21zZy5jYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIFRJUEMgbWVzc2FnaW5nIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYG5ldC90aXBjL21zZy5jYCBmaWxlLiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZyBpbnRlcmVzdGluZyBvciBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBhcm91bmQgbGluZSA5Ny4gSSYjMzk7bGwgcGlucG9pbnQgdGhpcyBhcmVhIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGVpdGhlciB2YWxpZGF0ZSBteSBoeXBvdGhlc2lzIG9yIHVuY292ZXIgYW4gaW50ZXJlc3RpbmcgZmVhdHVyZS4gRWl0aGVyIHdheSwgSSYjMzk7bSByZWFkeSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3RpcGMvbXNnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDk3Olx0c3RydWN0IHNrX2J1ZmYgKnRpcGNfbXNnX2NyZWF0ZSh1aW50IHVzZXIsIHVpbnQgdHlwZSxcbiAgOTg6XHRcdFx0XHRcdHVpbnQgaGRyX3N6LCB1aW50IGRhdGFfc3osIHUzMiBkbm9kZSxcbiAgOTk6XHRcdFx0XHRcdHUzMiBvbm9kZSwgdTMyIGRwb3J0LCB1MzIgb3BvcnQsIGludCBlcnJjb2RlKVxuIDEwMDpcdHtcbiAxMDE6XHRcdHN0cnVjdCB0aXBjX21zZyAqbXNnO1xuIDEwMjpcdFx0c3RydWN0IHNrX2J1ZmYgKmJ1ZjtcbiAxMDM6XHRcbiAxMDQ6XHRcdGJ1ZiA9IHRpcGNfYnVmX2FjcXVpcmUoaGRyX3N6ICYjNDM7IGRhdGFfc3osIEdGUF9BVE9NSUMpO1xuIDEwNTpcdFx0aWYgKHVubGlrZWx5KCFidWYpKVxuIDEwNjpcdFx0XHRyZXR1cm4gTlVMTDtcbiAxMDc6XHRcbiAxMDg6XHRcdG1zZyA9IGJ1Zl9tc2coYnVmKTtcbiAxMDk6XHRcdHRpcGNfbXNnX2luaXQob25vZGUsIG1zZywgdXNlciwgdHlwZSwgaGRyX3N6LCBkbm9kZSk7XG4gMTEwOlx0XHRtc2dfc2V0X3NpemUobXNnLCBoZHJfc3ogJiM0MzsgZGF0YV9zeik7XG4gMTExOlx0XHRtc2dfc2V0X29yaWdwb3J0KG1zZywgb3BvcnQpO1xuIDExMjpcdFx0bXNnX3NldF9kZXN0cG9ydChtc2csIGRwb3J0KTtcbiAxMTM6XHRcdG1zZ19zZXRfZXJyY29kZShtc2csIGVycmNvZGUpO1xuIDExNDpcdFx0cmV0dXJuIGJ1ZjtcbiAxMTU6XHR9XG4gMTE2Olx0XG4gMTE3Olx0LyogdGlwY19idWZfYXBwZW5kKCk6IEFwcGVuZCBhIGJ1ZmZlciB0byB0aGUgZnJhZ21lbnQgbGlzdCBvZiBhbm90aGVyIGJ1ZmZlclxuIDExODpcdCAqIEAqaGVhZGJ1ZjogaW46ICBOVUxMIGZvciBmaXJzdCBmcmFnLCBvdGhlcndpc2UgdmFsdWUgcmV0dXJuZWQgZnJvbSBwcmV2IGNhbGxcbiAxMTk6XHQgKiAgICAgICAgICAgIG91dDogc2V0IHdoZW4gc3VjY2Vzc2Z1bCBub24tY29tcGxldGUgcmVhc3NlbWJseSwgb3RoZXJ3aXNlIE5VTExcbiAxMjA6XHQgKiBAKmJ1ZjogICAgIGluOiAgdGhlIGJ1ZmZlciB0byBhcHBlbmQuIEFsd2F5cyBkZWZpbmVkXG4gMTIxOlx0ICogICAgICAgICAgICBvdXQ6IGhlYWQgYnVmIGFmdGVyIHN1Y2Nlc3NmdWwgY29tcGxldGUgcmVhc3NlbWJseSwgb3RoZXJ3aXNlIE5VTExcbiAxMjI6XHQgKiBSZXR1cm5zIDEgd2hlbiByZWFzc2VtYmx5IGNvbXBsZXRlLCBvdGhlcndpc2UgMFxuIDEyMzpcdCAqL1xuIDEyNDpcdGludCB0aXBjX2J1Zl9hcHBlbmQoc3RydWN0IHNrX2J1ZmYgKipoZWFkYnVmLCBzdHJ1Y3Qgc2tfYnVmZiAqKmJ1ZilcbiAxMjU6XHR7XG4gMTI2Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqaGVhZCA9ICpoZWFkYnVmO1xuIDEyNzpcdFx0c3RydWN0IHNrX2J1ZmYgKmZyYWcgPSAqYnVmO1xuIDEyODpcdFx0c3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBOVUxMO1xuIDEyOTpcdFx0c3RydWN0IHRpcGNfbXNnICptc2c7XG4gMTMwOlx0XHR1MzIgZnJhZ2lkO1xuIDEzMTpcdFx0aW50IGRlbHRhO1xuIDEzMjpcdFx0Ym9vbCBoZWFkc3RvbGVuO1xuIDEzMzpcdFxuIDEzNDpcdFx0aWYgKCFmcmFnKVxuIDEzNTpcdFx0XHRnb3RvIGVycjtcbiAxMzY6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxOTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHRpcGNfYnVmX2FjcXVpcmVgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byBgdGlwY19idWZfYWNxdWlyZWAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ2V0IGEgYnJvYWRlciB2aWV3LiBMZXQmIzM5O3Mgc2VlIGhvdyB3aWRlc3ByZWFkIGl0cyB1c2FnZSBpcy4gVGltZSB0byBmaXJlIHVwIHRoZSBncmVwcGluZyB0b29scyBhbmQgZmluZCBldmVyeSBpbnN0YW5jZSBvZiBgdGlwY19idWZfYWNxdWlyZWAgaW4gdGhlIGNvZGViYXNlLiBUaGF0JiMzOTtsbCBnaXZlIG1lIGEgZmVlbCBmb3IgaXRzIGNyaXRpY2FsaXR5LCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBhY3Jvc3MgZGlmZmVyZW50IG1vZHVsZXMsIGFuZCBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiBvciBvcHBvcnR1bml0eSBmb3Igb3B0aW1pemF0aW9uLiBFc3NlbnRpYWxseSwgSSB3YW50IHRvIGdldCBhIGNvbnRleHR1YWwgdW5kZXJzdGFuZGluZyBiZWZvcmUgSSBnZXQgdG9vIGRlZXAuIFRoZSBncmVwIHdpbGwgZ2l2ZSBtZSB0aGUgbWFwOyB0aGVuIEkgY2FuIHN0YXJ0IGNoYXJ0aW5nIGEgY291cnNlIGZvciBtb3JlIGZvY3VzZWQgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19idWZfYWNxdWlyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2JjYXN0LmM9MzE3PXN0YXRpYyBpbnQgdGlwY19tY2FzdF9zZW5kX3N5bmMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL2JjYXN0LmMtMzM3LVx0LyogQWxsb2NhdGUgZHVtbXkgbWVzc2FnZSAqL1xubmV0L3RpcGMvYmNhc3QuYzozMzg6XHRfc2tiID0gdGlwY19idWZfYWNxdWlyZShNQ0FTVF9IX1NJWkUsIEdGUF9LRVJORUwpO1xubmV0L3RpcGMvYmNhc3QuYy0zMzktXHRpZiAoIV9za2IpXG4tLVxubmV0L3RpcGMvY3J5cHRvLmM9MjIzOD1zdGF0aWMgaW50IHRpcGNfY3J5cHRvX2tleV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfYWVhZF9rZXkgKnNrZXksXG4tLVxubmV0L3RpcGMvY3J5cHRvLmMtMjI0OC1cdHNpemUgPSB0aXBjX2FlYWRfa2V5X3NpemUoc2tleSk7XG5uZXQvdGlwYy9jcnlwdG8uYzoyMjQ5Olx0c2tiID0gdGlwY19idWZfYWNxdWlyZShJTlRfSF9TSVpFICYjNDM7IHNpemUsIEdGUF9BVE9NSUMpO1xubmV0L3RpcGMvY3J5cHRvLmMtMjI1MC1cdGlmICghc2tiKVxuLS1cbm5ldC90aXBjL2Rpc2NvdmVyLmM9MTA0PXN0YXRpYyB2b2lkIHRpcGNfZGlzY19tc2dfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtdHlwLCB1MzIgZHN0LFxuLS1cbm5ldC90aXBjL2Rpc2NvdmVyLmMtMTExLVxubmV0L3RpcGMvZGlzY292ZXIuYzoxMTI6XHRza2IgPSB0aXBjX2J1Zl9hY3F1aXJlKE1BWF9IX1NJWkUgJiM0MzsgTk9ERV9JRF9MRU4sIEdGUF9BVE9NSUMpO1xubmV0L3RpcGMvZGlzY292ZXIuYy0xMTMtXHRpZiAoIXNrYilcbi0tXG5uZXQvdGlwYy9kaXNjb3Zlci5jPTM1Mj1pbnQgdGlwY19kaXNjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2JlYXJlciAqYixcbi0tXG5uZXQvdGlwYy9kaXNjb3Zlci5jLTM2MC1cdFx0cmV0dXJuIC1FTk9NRU07XG5uZXQvdGlwYy9kaXNjb3Zlci5jOjM2MTpcdGQtXHUwMDNlc2tiID0gdGlwY19idWZfYWNxdWlyZShNQVhfSF9TSVpFICYjNDM7IE5PREVfSURfTEVOLCBHRlBfQVRPTUlDKTtcbm5ldC90aXBjL2Rpc2NvdmVyLmMtMzYyLVx0aWYgKCFkLVx1MDAzZXNrYikge1xuLS1cbm5ldC90aXBjL2xpbmsuYz0xOTQ5PXZvaWQgdGlwY19saW5rX3RubF9wcmVwYXJlKHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCB0aXBjX2xpbmsgKnRubCxcbi0tXG5uZXQvdGlwYy9saW5rLmMtMjA1NC1cdFx0bXNnX3NldF9zaXplKFx1MDAyNnRubGhkciwgcGt0bGVuICYjNDM7IElOVF9IX1NJWkUpO1xubmV0L3RpcGMvbGluay5jOjIwNTU6XHRcdHRubHNrYiA9IHRpcGNfYnVmX2FjcXVpcmUocGt0bGVuICYjNDM7IElOVF9IX1NJWkUsIEdGUF9BVE9NSUMpO1xubmV0L3RpcGMvbGluay5jLTIwNTYtXHRcdGlmICghdG5sc2tiKSB7XG4tLVxubmV0L3RpcGMvbXNnLmM9NTQ9Y29uc3QgaW50IG9uZV9wYWdlX210dSA9IFBBR0VfU0laRSAtIFNLQl9EQVRBX0FMSUdOKEJVRl9PVkVSSEVBRCkgLVxuLS1cbm5ldC90aXBjL21zZy5jLTU3LS8qKlxubmV0L3RpcGMvbXNnLmM6NTg6ICogdGlwY19idWZfYWNxdWlyZSAtIGNyZWF0ZXMgYSBUSVBDIG1lc3NhZ2UgYnVmZmVyXG5uZXQvdGlwYy9tc2cuYy01OS0gKiBAc2l6ZTogbWVzc2FnZSBzaXplIChpbmNsdWRpbmcgVElQQyBoZWFkZXIpXG4tLVxubmV0L3RpcGMvbXNnLmMtNjctICovXG5uZXQvdGlwYy9tc2cuYzo2ODpzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19idWZfYWNxdWlyZSh1MzIgc2l6ZSwgZ2ZwX3QgZ2ZwKVxubmV0L3RpcGMvbXNnLmMtNjkte1xuLS1cbm5ldC90aXBjL21zZy5jPTk3PXN0cnVjdCBza19idWZmICp0aXBjX21zZ19jcmVhdGUodWludCB1c2VyLCB1aW50IHR5cGUsXG4tLVxubmV0L3RpcGMvbXNnLmMtMTAzLVxubmV0L3RpcGMvbXNnLmM6MTA0Olx0YnVmID0gdGlwY19idWZfYWNxdWlyZShoZHJfc3ogJiM0MzsgZGF0YV9zeiwgR0ZQX0FUT01JQyk7XG5uZXQvdGlwYy9tc2cuYy0xMDUtXHRpZiAodW5saWtlbHkoIWJ1ZikpXG4tLVxubmV0L3RpcGMvbXNnLmM9MjE3PWludCB0aXBjX21zZ19hcHBlbmQoc3RydWN0IHRpcGNfbXNnICpfaGRyLCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgZGxlbixcbi0tXG5uZXQvdGlwYy9tc2cuYy0yMzAtXHRcdGlmICghc2tiIHx8IHNrYi1cdTAwM2VsZW4gXHUwMDNlPSBtc3MpIHtcbm5ldC90aXBjL21zZy5jOjIzMTpcdFx0XHRza2IgPSB0aXBjX2J1Zl9hY3F1aXJlKG1zcywgR0ZQX0tFUk5FTCk7XG5uZXQvdGlwYy9tc2cuYy0yMzItXHRcdFx0aWYgKHVubGlrZWx5KCFza2IpKVxuLS1cbm5ldC90aXBjL21zZy5jPTMyMj1pbnQgdGlwY19tc2dfZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRpcGNfbXNnICpoZHIsXG4tLVxubmV0L3RpcGMvbXNnLmMtMzQ2LVx0XHQvKiBBbGxvY2F0ZSBhIG5ldyBmcmFnbWVudCAqL1xubmV0L3RpcGMvbXNnLmM6MzQ3Olx0XHRfc2tiID0gdGlwY19idWZfYWNxdWlyZShJTlRfSF9TSVpFICYjNDM7IGVhdCwgR0ZQX0FUT01JQyk7XG5uZXQvdGlwYy9tc2cuYy0zNDgtXHRcdGlmICghX3NrYilcbi0tXG5uZXQvdGlwYy9tc2cuYz0zODQ9aW50IHRpcGNfbXNnX2J1aWxkKHN0cnVjdCB0aXBjX21zZyAqbWhkciwgc3RydWN0IG1zZ2hkciAqbSwgaW50IG9mZnNldCxcbi0tXG5uZXQvdGlwYy9tc2cuYy00MDEtXHRpZiAobGlrZWx5KG1zeiBcdTAwM2M9IHBrdG1heCkpIHtcbm5ldC90aXBjL21zZy5jOjQwMjpcdFx0c2tiID0gdGlwY19idWZfYWNxdWlyZShtc3osIEdGUF9LRVJORUwpO1xubmV0L3RpcGMvbXNnLmMtNDAzLVxuLS1cbm5ldC90aXBjL21zZy5jLTQzMy1cdC8qIFByZXBhcmUgZmlyc3QgZnJhZ21lbnQgKi9cbm5ldC90aXBjL21zZy5jOjQzNDpcdHNrYiA9IHRpcGNfYnVmX2FjcXVpcmUocGt0bWF4LCBHRlBfS0VSTkVMKTtcbm5ldC90aXBjL21zZy5jLTQzNS1cdGlmICghc2tiKVxuLS1cbm5ldC90aXBjL21zZy5jLTQ2NC1cdFx0XHRwa3RzeiA9IHBrdG1heDtcbm5ldC90aXBjL21zZy5jOjQ2NTpcdFx0c2tiID0gdGlwY19idWZfYWNxdWlyZShwa3RzeiwgR0ZQX0tFUk5FTCk7XG5uZXQvdGlwYy9tc2cuYy00NjYtXHRcdGlmICghc2tiKSB7XG4tLVxubmV0L3RpcGMvbXNnLmM9NTkzPWJvb2wgdGlwY19tc2dfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKmlza2IsIGludCAqcG9zKVxuLS1cbm5ldC90aXBjL21zZy5jLTYxMS1cbm5ldC90aXBjL21zZy5jOjYxMjpcdCppc2tiID0gdGlwY19idWZfYWNxdWlyZShpbXN6LCBHRlBfQVRPTUlDKTtcbm5ldC90aXBjL21zZy5jLTYxMy1cdGlmICghKmlza2IpXG4tLVxubmV0L3RpcGMvbXNnLmM9NjM3PWJvb2wgdGlwY19tc2dfcmV2ZXJzZSh1MzIgb3duX25vZGUsICBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwgaW50IGVycilcbi0tXG5uZXQvdGlwYy9tc2cuYy02NjItXHQvKiBBbGxvY2F0ZSBuZXcgYnVmZmVyIHRvIHJldHVybiAqL1xubmV0L3RpcGMvbXNnLmM6NjYzOlx0KnNrYiA9IHRpcGNfYnVmX2FjcXVpcmUoaGxlbiAmIzQzOyBkbGVuLCBHRlBfQVRPTUlDKTtcbm5ldC90aXBjL21zZy5jLTY2NC1cdGlmICghKnNrYilcbi0tXG5uZXQvdGlwYy9tc2cuaD0xMTUwPXN0YXRpYyBpbmxpbmUgdTggKm1zZ19ub2RlX2lkKHN0cnVjdCB0aXBjX21zZyAqaGRyKVxuLS1cbm5ldC90aXBjL21zZy5oLTExNTQtXG5uZXQvdGlwYy9tc2cuaDoxMTU1OnN0cnVjdCBza19idWZmICp0aXBjX2J1Zl9hY3F1aXJlKHUzMiBzaXplLCBnZnBfdCBnZnApO1xubmV0L3RpcGMvbXNnLmgtMTE1Ni1ib29sIHRpcGNfbXNnX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICoqX3NrYik7XG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jPTY3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmFtZWRfcHJlcGFyZV9idWYoc3RydWN0IG5ldCAqbmV0LCB1MzIgdHlwZSwgdTMyIHNpemUsXG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTY5LXtcbm5ldC90aXBjL25hbWVfZGlzdHIuYzo3MDpcdHN0cnVjdCBza19idWZmICpidWYgPSB0aXBjX2J1Zl9hY3F1aXJlKElOVF9IX1NJWkUgJiM0Mzsgc2l6ZSwgR0ZQX0FUT01JQyk7XG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtNzEtXHR1MzIgc2VsZiA9IHRpcGNfb3duX2FkZHIobmV0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNzAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFRJUEMgQnVmZmVyIEFjcXVpc2l0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVElQQyBoYW5kbGVzIGJ1ZmZlciBhY3F1aXNpdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBgdGlwY19idWZfYWNxdWlyZWAgZnVuY3Rpb24uIEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbHJlYWR5IGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBvdmVyYWxsIFRJUEMgYXJjaGl0ZWN0dXJlLCBidXQgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIHRoZSBgbmV0L3RpcGMvbXNnLmNgIGZpbGUg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24sIGFuZCBob3BlZnVsbHksIHNvbWUgZW5saWdodGVuaW5nIGNvbW1lbnRzIHRvIGd1aWRlIG1lLiBMZXQmIzM5O3Mgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIGNvZGUgaG9sZHMuIEkgYW0gZXhwZWN0aW5nIHRvIGZpbmQgdGhhdCB0aGUgZnVuY3Rpb24gaGFuZGxlcyByZXNvdXJjZSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL21zZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1ODpcdCAqIHRpcGNfYnVmX2FjcXVpcmUgLSBjcmVhdGVzIGEgVElQQyBtZXNzYWdlIGJ1ZmZlclxuICA1OTpcdCAqIEBzaXplOiBtZXNzYWdlIHNpemUgKGluY2x1ZGluZyBUSVBDIGhlYWRlcilcbiAgNjA6XHQgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnc1xuICA2MTpcdCAqXG4gIDYyOlx0ICogUmV0dXJuOiBhIG5ldyBidWZmZXIgd2l0aCBkYXRhIHBvaW50ZXJzIHNldCB0byB0aGUgc3BlY2lmaWVkIHNpemUuXG4gIDYzOlx0ICpcbiAgNjQ6XHQgKiBOT1RFOlxuICA2NTpcdCAqIEhlYWRyb29tIGlzIHJlc2VydmVkIHRvIGFsbG93IHByZXBlbmRpbmcgb2YgYSBkYXRhIGxpbmsgaGVhZGVyLlxuICA2NjpcdCAqIFRoZXJlIG1heSBhbHNvIGJlIHVucmVxdWVzdGVkIHRhaWxyb29tIHByZXNlbnQgYXQgdGhlIGJ1ZmZlciYjMzk7cyBlbmQuXG4gIDY3Olx0ICovXG4gIDY4Olx0c3RydWN0IHNrX2J1ZmYgKnRpcGNfYnVmX2FjcXVpcmUodTMyIHNpemUsIGdmcF90IGdmcClcbiAgNjk6XHR7XG4gIDcwOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuICA3MTpcdFxuICA3MjpcdFx0c2tiID0gYWxsb2Nfc2tiX2ZjbG9uZShCVUZfT1ZFUkhFQUQgJiM0Mzsgc2l6ZSwgZ2ZwKTtcbiAgNzM6XHRcdGlmIChza2IpIHtcbiAgNzQ6XHRcdFx0c2tiX3Jlc2VydmUoc2tiLCBCVUZfSEVBRFJPT00pO1xuICA3NTpcdFx0XHRza2JfcHV0KHNrYiwgc2l6ZSk7XG4gIDc2Olx0XHRcdHNrYi1cdTAwM2VuZXh0ID0gTlVMTDtcbiAgNzc6XHRcdH1cbiAgNzg6XHRcdHJldHVybiBza2I7XG4gIDc5Olx0fVxuICA4MDpcdFxuICA4MTpcdHZvaWQgdGlwY19tc2dfaW5pdCh1MzIgb3duX25vZGUsIHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIHVzZXIsIHUzMiB0eXBlLFxuICA4MjpcdFx0XHQgICB1MzIgaHNpemUsIHUzMiBkbm9kZSlcbiAgODM6XHR7XG4gIDg0Olx0XHRtZW1zZXQobSwgMCwgaHNpemUpO1xuICA4NTpcdFx0bXNnX3NldF92ZXJzaW9uKG0pO1xuICA4NjpcdFx0bXNnX3NldF91c2VyKG0sIHVzZXIpO1xuICA4NzpcdFx0bXNnX3NldF9oZHJfc3oobSwgaHNpemUpO1xuICA4ODpcdFx0bXNnX3NldF9zaXplKG0sIGhzaXplKTtcbiAgODk6XHRcdG1zZ19zZXRfcHJldm5vZGUobSwgb3duX25vZGUpO1xuICA5MDpcdFx0bXNnX3NldF90eXBlKG0sIHR5cGUpO1xuICA5MTpcdFx0aWYgKGhzaXplIFx1MDAzZSBTSE9SVF9IX1NJWkUpIHtcbiAgOTI6XHRcdFx0bXNnX3NldF9vcmlnbm9kZShtLCBvd25fbm9kZSk7XG4gIDkzOlx0XHRcdG1zZ19zZXRfZGVzdG5vZGUobSwgZG5vZGUpO1xuICA5NDpcdFx0fVxuICA5NTpcdH1cbiAgOTY6XHRcbiAgOTc6XHRzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19tc2dfY3JlYXRlKHVpbnQgdXNlciwgdWludCB0eXBlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjE5NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHRpcGNfYnVmX2FjcXVpcmVgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgdGlwY19idWZfYWNxdWlyZWAgYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyBqdW1wcyBvdXQgYXQgbWUuIFdlJiMzOTtyZSB1c2luZyBgYWxsb2Nfc2tiX2ZjbG9uZWAgKG9yIHBvdGVudGlhbGx5IGp1c3QgYGFsbG9jX3NrYmApIHRvIGdyYWIgb3VyIGBza2JgIGRhdGEgYnVmZmVyLCBhbmQgY3JpdGljYWxseSwgdGhpcyBkb2VzbiYjMzk7dCB6ZXJvIHRoZSBwYXlsb2FkLiBUaGVuLCB3ZSBpbml0aWFsaXplIHRoZSBtZXNzYWdlIGhlYWRlciB3aXRoIGB0aXBjX21zZ19pbml0YCwgd2hpY2ggb25seSBkb2VzIGEgYG1lbXNldGAgb24gdGhlICpoZWFkZXIqIChgaHNpemVgKS4gVGhlICpwYXlsb2FkKiBpdHNlbGYsIHN0YXJ0aW5nIGF0IGBkYXRhID0gbXNnX2RhdGEoaGRyKWAsIHJlbWFpbnMgdW5pbml0aWFsaXplZCwgd2hpY2ggaXMgYSBwcm9ibGVtLgoKSSByZW1lbWJlciBwcmV2aW91c2x5LCB0aGUgY29kZSBvbmx5IHVzZWQgYHN0cmNweShkYXRhLCBsLSZndDtpZl9uYW1lKTtgIHRvIHBvcHVsYXRlIHRoZSBwYXlsb2FkLiBUaGlzIHdvdWxkICpvbmx5KiBjb3B5IHRoZSBsZW5ndGggb2YgYGwtJmd0O2lmX25hbWVgIHBsdXMgYSBudWxsIHRlcm1pbmF0b3IgdG8gdGhlIGBza2JgLiBUaGVuLCB0aGUgY29kZSBleHBhbmRzIHRoZSBgc2tiYCB3aXRoIGBtc2dfc2V0X3NpemVgIGFuZCBgc2tiX3RyaW1gLiBTbyBhbnkgYnl0ZXMgYmV0d2VlbiB0aGUgZW5kIG9mIGBsLSZndDtpZl9uYW1lYCBhbmQgdGhlIGFsbG9jYXRlZCBwYXlsb2FkIHNpemUgcmVtYWluZWQgdW5pbml0aWFsaXplZCEgVGhhdCYjMzk7cyBhIGRlZmluaXRlIHZ1bG5lcmFiaWxpdHkuCgpOb3csIHdpdGggdGhlIHBhdGNoLCB0aGluZ3MgYXJlIGNoYW5naW5nLiBgbGAgaXMgbm93IHplcm9lZCB1c2luZyBga3phbGxvY19vYmpgIGR1cmluZyB0aGUgYHRpcGNfbGlua19jcmVhdGVgIGZ1bmN0aW9uLCBzbyBgbC0mZ3Q7aWZfbmFtZWAgaXMgY29tcGxldGVseSB6ZXJvZWQgb3V0ICh1cCB0byB0aGUgc2l6ZSBvZiBgVElQQ19NQVhfSUZfTkFNRWApLiBUaGUgc3Vic2VxdWVudCBgbWVtY3B5KGRhdGEsIGwtJmd0O2lmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpO2AgdGhlbiBjb3BpZXMgdGhlIGVudGlyZSBjb250ZW50cyBvZiBgbC0mZ3Q7aWZfbmFtZWAgKGFsbCAxNiwgb3Igd2hhdGV2ZXIgYFRJUENfTUFYX0lGX05BTUVgIGlzLCBieXRlcykgaW50byB0aGUgYGRhdGFgIGJ1ZmZlci4gVGhpcyBsb29rcyBtdWNoIHNhZmVyLgoKV2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgdGhlIHNpemUgb2YgYFRJUENfTUFYX0lGX05BTUVgLiBJJiMzOTtsbCBkbyBhIHF1aWNrIGdyZXAgZm9yIGBUSVBDX01BWF9JRl9OQU1FYCB0byBjb25maXJtIHRoZSBhY3R1YWwgc2l6ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VElQQ19NQVhfSUZfTkFNRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2JlYXJlci5jPTEzNz1zdGF0aWMgaW50IGJlYXJlcl9uYW1lX3ZhbGlkYXRlKGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubmV0L3RpcGMvYmVhcmVyLmMtMTYwLVx0aWYgKChtZWRpYV9sZW4gXHUwMDNjPSAxKSB8fCAobWVkaWFfbGVuIFx1MDAzZSBUSVBDX01BWF9NRURJQV9OQU1FKSB8fFxubmV0L3RpcGMvYmVhcmVyLmM6MTYxOlx0ICAgIChpZl9sZW4gXHUwMDNjPSAxKSB8fCAoaWZfbGVuIFx1MDAzZSBUSVBDX01BWF9JRl9OQU1FKSlcbm5ldC90aXBjL2JlYXJlci5jLTE2Mi1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L3RpcGMvYmVhcmVyLmMtMTY5LVx0XHRpZiAoc3Ryc2NweShuYW1lX3BhcnRzLVx1MDAzZWlmX25hbWUsIGlmX25hbWUsXG5uZXQvdGlwYy9iZWFyZXIuYzoxNzA6XHRcdFx0ICAgIFRJUENfTUFYX0lGX05BTUUpIFx1MDAzYyAwKVxubmV0L3RpcGMvYmVhcmVyLmMtMTcxLVx0XHRcdHJldHVybiAwO1xuLS1cbm5ldC90aXBjL2JlYXJlci5oPTE3OT1zdHJ1Y3QgdGlwY19iZWFyZXJfbmFtZXMge1xubmV0L3RpcGMvYmVhcmVyLmgtMTgwLVx0Y2hhciBtZWRpYV9uYW1lW1RJUENfTUFYX01FRElBX05BTUVdO1xubmV0L3RpcGMvYmVhcmVyLmg6MTgxOlx0Y2hhciBpZl9uYW1lW1RJUENfTUFYX0lGX05BTUVdO1xubmV0L3RpcGMvYmVhcmVyLmgtMTgyLX07XG4tLVxubmV0L3RpcGMvbGluay5jPTEzNz1zdHJ1Y3QgdGlwY19saW5rIHtcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTU1LVx0dTMyIHNpbGVudF9pbnR2X2NudDtcbm5ldC90aXBjL2xpbmsuYzoxNTY6XHRjaGFyIGlmX25hbWVbVElQQ19NQVhfSUZfTkFNRV07XG5uZXQvdGlwYy9saW5rLmMtMTU3LVx0dTMyIHByaW9yaXR5O1xuLS1cbm5ldC90aXBjL2xpbmsuYz0xODMyPXN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsXG4tLVxubmV0L3RpcGMvbGluay5jLTE5MDAtXHRcdG1zZ19zZXRfbWF4X3BrdChoZHIsIGwtXHUwMDNlYWR2ZXJ0aXNlZF9tdHUpO1xubmV0L3RpcGMvbGluay5jOjE5MDE6XHRcdG1lbWNweShkYXRhLCBsLVx1MDAzZWlmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpO1xubmV0L3RpcGMvbGluay5jOjE5MDI6XHRcdG1zZ19zZXRfc2l6ZShoZHIsIElOVF9IX1NJWkUgJiM0MzsgVElQQ19NQVhfSUZfTkFNRSk7XG5uZXQvdGlwYy9saW5rLmM6MTkwMzpcdFx0c2tiX3RyaW0oc2tiLCBJTlRfSF9TSVpFICYjNDM7IFRJUENfTUFYX0lGX05BTUUpO1xubmV0L3RpcGMvbGluay5jLTE5MDQtXHR9XG4tLVxubmV0L3RpcGMvbGluay5jPTIxNzQ9c3RhdGljIGludCB0aXBjX2xpbmtfcHJvdG9fcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvbGluay5jLTIyMjMtXHRcdGlmX25hbWUgPSAgc3RycmNocihsLVx1MDAzZW5hbWUsICYjMzk7OiYjMzk7KSAmIzQzOyAxO1xubmV0L3RpcGMvbGluay5jOjIyMjQ6XHRcdGlmIChzaXplb2YobC1cdTAwM2VuYW1lKSAtIChpZl9uYW1lIC0gbC1cdTAwM2VuYW1lKSBcdTAwM2M9IFRJUENfTUFYX0lGX05BTUUpXG5uZXQvdGlwYy9saW5rLmMtMjIyNS1cdFx0XHRicmVhaztcbm5ldC90aXBjL2xpbmsuYzoyMjI2Olx0XHRpZiAobXNnX2RhdGFfc3ooaGRyKSBcdTAwM2MgVElQQ19NQVhfSUZfTkFNRSlcbm5ldC90aXBjL2xpbmsuYy0yMjI3LVx0XHRcdGJyZWFrO1xubmV0L3RpcGMvbGluay5jOjIyMjg6XHRcdHN0cnNjcHkoaWZfbmFtZSwgZGF0YSwgVElQQ19NQVhfSUZfTkFNRSk7XG5uZXQvdGlwYy9saW5rLmMtMjIyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5MTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYHN0cnNjcHlgIGluIGB0aXBjX2xpbmtfY3JlYXRlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHN0cnNjcHkobC0mZ3Q7aWZfbmFtZSwgaWZfbmFtZSlgIHdpdGhpbiBgdGlwY19saW5rX2NyZWF0ZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgc3RhbmRhcmQgc3RyaW5nIGNvcHksIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuJiMzNDsgQnV0IHdhaXQsIGxldCYjMzk7cyByZWZyZXNoOiB3aGF0IGRvZXMgYHN0cnNjcHlgICphY3R1YWxseSogZG8/IEFoLCBpdCBjb3BpZXMgYSBDLXN0cmluZyBpbnRvIGEgYnVmZmVyLCBidXQgY3JpdGljYWxseSwgaXQgZW5mb3JjZXMgYSBzaXplIGxpbWl0LiBUcnVuY2F0aW9uIGhhcHBlbnMgaWYgdGhlIHNvdXJjZSBpcyB0b28gYmlnLCBhbmQgaXQgKmFsd2F5cyogTlVMTC10ZXJtaW5hdGVzIHRoZSBkZXN0aW5hdGlvbi4gVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBjb3BpZWQgb3IgYC1FMkJJR2AgaWYgdGhlIGJ1ZmZlciB3YXNuJiMzOTt0IGxhcmdlIGVub3VnaC4KCk5vdywgYSBrZXkgcXVlc3Rpb24gcG9wcyBpbnRvIG15IG1pbmQ6IERvZXMgYHN0cnNjcHlgIHplcm8tcGFkIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgYWZ0ZXIgdGhlIGNvcGllZCBzdHJpbmcgYW5kIHRoZSBOVUxMIHRlcm1pbmF0b3I/IE5vLCBJIHJlYWxpemUgdGhhdCBpdCBkb2VzbiYjMzk7dC4gYHN0cnNjcHlgIHNpbXBseSB3cml0ZXMgdXAgdG8gdGhhdCBOVUxMIGNoYXJhY3Rlci4gYHN0cnNjcHlfcGFkYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSB6ZXJvIHBhZGRpbmcuCgpPa2F5LCB0aGF0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlci4gQnV0IHRoZW4gSSByZWNhbGwgdGhlIGFsbG9jYXRpb246IHdhc24mIzM5O3QgYGxgIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigqbCwgR0ZQX0FUT01JQyk7YD8gVGhhdCBtZWFucyBgbGAgd2FzICp6ZXJvZWQqIGF0IGFsbG9jYXRpb24hIFRoaXMgaW5pdGlhbCB6ZXJvaW5nIGlzIHNpZ25pZmljYW50LgoKSG93ZXZlciwgYSBuYWdnaW5nIGZlZWxpbmcgcmVtYWlucy4gV2hhdCBpZiBgbC0mZ3Q7aWZfbmFtZWAgaXMgKm1vZGlmaWVkKiBsYXRlciBpbiB0aGUgY29kZT8gT3IsIGV2ZW4gd29yc2UsIHdoYXQgaWYgYGxgIGlzIHJldXNlZCBhZnRlciB0aGlzIG9wZXJhdGlvbj8gSSBuZWVkIHRvIG1ldGljdWxvdXNseSBjaGVjayBldmVyeSBzaW5nbGUgaW5zdGFuY2Ugd2hlcmUgYGwtJmd0O2lmX25hbWVgIGlzIGFjY2Vzc2VkIG9yIG1vZGlmaWVkLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBsaWZldGltZSBvZiB0aGlzIGRhdGEgc3RydWN0dXJlIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0IGFuZCB0aGF0IHRoaXMgaXNuJiMzOTt0IGEgcG90ZW50aWFsIHNlY3VyaXR5IGlzc3VlLiBUaW1lIGZvciBhIGNvZGUgZGl2ZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWZfbmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL2xpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9saW5rLmM9NTE9c3RydWN0IHRpcGNfc3RhdHMge1xuLS1cbm5ldC90aXBjL2xpbmsuYy0xMTItICogQGFjdGl2ZTogbGluayBpcyBhY3RpdmVcbm5ldC90aXBjL2xpbmsuYzoxMTM6ICogQGlmX25hbWU6IGFzc29jaWF0ZWQgaW50ZXJmYWNlIG5hbWVcbm5ldC90aXBjL2xpbmsuYy0xMTQtICogQHJzdF9jbnQ6IGxpbmsgcmVzZXQgY291bnRlclxuLS1cbm5ldC90aXBjL2xpbmsuYz0xMzc9c3RydWN0IHRpcGNfbGluayB7XG4tLVxubmV0L3RpcGMvbGluay5jLTE1NS1cdHUzMiBzaWxlbnRfaW50dl9jbnQ7XG5uZXQvdGlwYy9saW5rLmM6MTU2Olx0Y2hhciBpZl9uYW1lW1RJUENfTUFYX0lGX05BTUVdO1xubmV0L3RpcGMvbGluay5jLTE1Ny1cdHUzMiBwcmlvcml0eTtcbi0tXG5uZXQvdGlwYy9saW5rLmM9NDQ3PXUzMiB0aXBjX2xpbmtfc3RhdGUoc3RydWN0IHRpcGNfbGluayAqbClcbi0tXG5uZXQvdGlwYy9saW5rLmMtNDU0LSAqIEBuZXQ6IHBvaW50ZXIgdG8gYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxubmV0L3RpcGMvbGluay5jOjQ1NTogKiBAaWZfbmFtZTogYXNzb2NpYXRlZCBpbnRlcmZhY2UgbmFtZVxubmV0L3RpcGMvbGluay5jLTQ1Ni0gKiBAYmVhcmVyX2lkOiBpZCAoaW5kZXgpIG9mIGFzc29jaWF0ZWQgYmVhcmVyXG4tLVxubmV0L3RpcGMvbGluay5jLTQ3NS0gKi9cbm5ldC90aXBjL2xpbmsuYzo0NzY6Ym9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCxcbm5ldC90aXBjL2xpbmsuYy00NzctXHRcdCAgICAgIGludCB0b2xlcmFuY2UsIGNoYXIgbmV0X3BsYW5lLCB1MzIgbXR1LCBpbnQgcHJpb3JpdHksXG4tLVxubmV0L3RpcGMvbGluay5jLTUwNC1cdHNucHJpbnRmKGwtXHUwMDNlbmFtZSwgc2l6ZW9mKGwtXHUwMDNlbmFtZSksIFwmIzM0OyVzOiVzLSVzOnVua25vd25cJiMzNDssXG5uZXQvdGlwYy9saW5rLmM6NTA1Olx0XHQgc2VsZl9zdHIsIGlmX25hbWUsIHBlZXJfc3RyKTtcbm5ldC90aXBjL2xpbmsuYy01MDYtXG5uZXQvdGlwYy9saW5rLmM6NTA3Olx0c3Ryc2NweShsLVx1MDAzZWlmX25hbWUsIGlmX25hbWUpO1xubmV0L3RpcGMvbGluay5jLTUwOC1cdGwtXHUwMDNlYWRkciA9IHBlZXI7XG4tLVxubmV0L3RpcGMvbGluay5jPTE4MzI9c3RhdGljIHZvaWQgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBpbnQgbXR5cCwgYm9vbCBwcm9iZSxcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTkwMC1cdFx0bXNnX3NldF9tYXhfcGt0KGhkciwgbC1cdTAwM2VhZHZlcnRpc2VkX210dSk7XG5uZXQvdGlwYy9saW5rLmM6MTkwMTpcdFx0bWVtY3B5KGRhdGEsIGwtXHUwMDNlaWZfbmFtZSwgVElQQ19NQVhfSUZfTkFNRSk7XG5uZXQvdGlwYy9saW5rLmMtMTkwMi1cdFx0bXNnX3NldF9zaXplKGhkciwgSU5UX0hfU0laRSAmIzQzOyBUSVBDX01BWF9JRl9OQU1FKTtcbi0tXG5uZXQvdGlwYy9saW5rLmM9MjE3ND1zdGF0aWMgaW50IHRpcGNfbGlua19wcm90b19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9saW5rLmMtMjE4OS1cdGludCByYyA9IDAsIHJlbGVhc2VkO1xubmV0L3RpcGMvbGluay5jOjIxOTA6XHRjaGFyICppZl9uYW1lO1xubmV0L3RpcGMvbGluay5jLTIxOTEtXHR2b2lkICpkYXRhO1xuLS1cbm5ldC90aXBjL2xpbmsuYy0yMjIyLVx0XHQvKiBDb21wbGV0ZSBvd24gbGluayBuYW1lIHdpdGggcGVlciYjMzk7cyBpbnRlcmZhY2UgbmFtZSAqL1xubmV0L3RpcGMvbGluay5jOjIyMjM6XHRcdGlmX25hbWUgPSAgc3RycmNocihsLVx1MDAzZW5hbWUsICYjMzk7OiYjMzk7KSAmIzQzOyAxO1xubmV0L3RpcGMvbGluay5jOjIyMjQ6XHRcdGlmIChzaXplb2YobC1cdTAwM2VuYW1lKSAtIChpZl9uYW1lIC0gbC1cdTAwM2VuYW1lKSBcdTAwM2M9IFRJUENfTUFYX0lGX05BTUUpXG5uZXQvdGlwYy9saW5rLmMtMjIyNS1cdFx0XHRicmVhaztcbi0tXG5uZXQvdGlwYy9saW5rLmMtMjIyNy1cdFx0XHRicmVhaztcbm5ldC90aXBjL2xpbmsuYzoyMjI4Olx0XHRzdHJzY3B5KGlmX25hbWUsIGRhdGEsIFRJUENfTUFYX0lGX05BTUUpO1xubmV0L3RpcGMvbGluay5jLTIyMjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTk2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6ICoqRXhwbG9yaW5nIFBvdGVudGlhbCBTaWRlIEVmZmVjdHMgYW5kIERlcGVuZGVuY2llcyoqCgpJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBsLSZndDtpZl9uYW1lYCBhbmQgYGwtJmd0O25hbWVgIGFyZSB1c2VkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGViYXNlLCBwYXJ0aWN1bGFybHkgd2hlcmUgdGhleSYjMzk7cmUgaW50ZXJhY3Rpbmcgd2l0aCBlYWNoIG90aGVyLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb3IgZGVwZW5kZW5jaWVzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBob3cgdGhlc2UgdmFyaWFibGVzIGFyZSB1dGlsaXplZCwgYmVmb3JlIEkgcHJvY2VlZC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG15IG5leHQgYWN0aW9uIGRvZXMgbm90IGNyZWF0ZSBhbnkgdW5leHBlY3RlZCBjb25zZXF1ZW5jZXMuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYGwtJmd0O25hbWVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsLVx1MDAzZW5hbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy9saW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvbGluay5jPTQ0Mj1jaGFyICp0aXBjX2xpbmtfbmFtZShzdHJ1Y3QgdGlwY19saW5rICpsKVxubmV0L3RpcGMvbGluay5jLTQ0My17XG5uZXQvdGlwYy9saW5rLmM6NDQ0Olx0cmV0dXJuIGwtXHUwMDNlbmFtZTtcbm5ldC90aXBjL2xpbmsuYy00NDUtfVxuLS1cbm5ldC90aXBjL2xpbmsuYz00NzY9Ym9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCxcbi0tXG5uZXQvdGlwYy9saW5rLmMtNTAzLVx0LyogUGVlciBpL2YgbmFtZSB3aWxsIGJlIGNvbXBsZXRlZCBieSByZXNldC9hY3RpdmF0ZSBtZXNzYWdlICovXG5uZXQvdGlwYy9saW5rLmM6NTA0Olx0c25wcmludGYobC1cdTAwM2VuYW1lLCBzaXplb2YobC1cdTAwM2VuYW1lKSwgXCYjMzQ7JXM6JXMtJXM6dW5rbm93blwmIzM0Oyxcbm5ldC90aXBjL2xpbmsuYy01MDUtXHRcdCBzZWxmX3N0ciwgaWZfbmFtZSwgcGVlcl9zdHIpO1xuLS1cbm5ldC90aXBjL2xpbmsuYy01MjQtXHRsLVx1MDAzZWlucHV0cSA9IGlucHV0cTtcbm5ldC90aXBjL2xpbmsuYzo1MjU6XHRsLVx1MDAzZW5hbWVkcSA9IG5hbWVkcTtcbm5ldC90aXBjL2xpbmsuYy01MjYtXHRsLVx1MDAzZXN0YXRlID0gTElOS19SRVNFVFRJTkc7XG4tLVxubmV0L3RpcGMvbGluay5jPTU1Mz1ib29sIHRpcGNfbGlua19iY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgb3dubm9kZSwgdTMyIHBlZXIsIHU4ICpwZWVyX2lkLFxuLS1cbm5ldC90aXBjL2xpbmsuYy01NzMtXHRcdC8qIEJyb2FkY2FzdCByZWNlaXZlciBsaW5rIG5hbWU6IFwmIzM0O2Jyb2FkY2FzdC1saW5rOlx1MDAzY3BlZXJcdTAwM2VcJiMzNDsgKi9cbm5ldC90aXBjL2xpbmsuYzo1NzQ6XHRcdHNucHJpbnRmKGwtXHUwMDNlbmFtZSwgc2l6ZW9mKGwtXHUwMDNlbmFtZSksIFwmIzM0OyVzOiVzXCYjMzQ7LCB0aXBjX2JjbGlua19uYW1lLFxubmV0L3RpcGMvbGluay5jLTU3NS1cdFx0XHQgcGVlcl9zdHIpO1xubmV0L3RpcGMvbGluay5jLTU3Ni1cdH0gZWxzZSB7XG5uZXQvdGlwYy9saW5rLmM6NTc3Olx0XHRzdHJzY3B5KGwtXHUwMDNlbmFtZSwgdGlwY19iY2xpbmtfbmFtZSk7XG5uZXQvdGlwYy9saW5rLmMtNTc4LVx0fVxuLS1cbm5ldC90aXBjL2xpbmsuYz02MDE9aW50IHRpcGNfbGlua19mc21fZXZ0KHN0cnVjdCB0aXBjX2xpbmsgKmwsIGludCBldnQpXG4tLVxubmV0L3RpcGMvbGluay5jLTc0OS1cdGRlZmF1bHQ6XG5uZXQvdGlwYy9saW5rLmM6NzUwOlx0XHRwcl9lcnIoXCYjMzQ7VW5rbm93biBGU00gc3RhdGUgJXggaW4gJXNcXG5cJiMzNDssIGwtXHUwMDNlc3RhdGUsIGwtXHUwMDNlbmFtZSk7XG5uZXQvdGlwYy9saW5rLmMtNzUxLVx0fVxubmV0L3RpcGMvbGluay5jOjc1MjpcdHRyYWNlX3RpcGNfbGlua19mc20obC1cdTAwM2VuYW1lLCBvbGRfc3RhdGUsIGwtXHUwMDNlc3RhdGUsIGV2dCk7XG5uZXQvdGlwYy9saW5rLmMtNzUzLVx0cmV0dXJuIHJjO1xuLS1cbm5ldC90aXBjL2xpbmsuYy03NTUtXHRwcl9lcnIoXCYjMzQ7SWxsZWdhbCBGU00gZXZlbnQgJXggaW4gc3RhdGUgJXggb24gbGluayAlc1xcblwmIzM0Oyxcbm5ldC90aXBjL2xpbmsuYzo3NTY6XHQgICAgICAgZXZ0LCBsLVx1MDAzZXN0YXRlLCBsLVx1MDAzZW5hbWUpO1xubmV0L3RpcGMvbGluay5jOjc1NzpcdHRyYWNlX3RpcGNfbGlua19mc20obC1cdTAwM2VuYW1lLCBvbGRfc3RhdGUsIGwtXHUwMDNlc3RhdGUsIGV2dCk7XG5uZXQvdGlwYy9saW5rLmMtNzU4LVx0cmV0dXJuIHJjO1xuLS1cbm5ldC90aXBjL2xpbmsuYz0xMDExPWludCB0aXBjX2xpbmtfeG1pdChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xMDQ0LVx0XHRpZiAoaW1wID09IFRJUENfU1lTVEVNX0lNUE9SVEFOQ0UpIHtcbm5ldC90aXBjL2xpbmsuYzoxMDQ1Olx0XHRcdHByX3dhcm4oXCYjMzQ7JXNcdTAwM2Mlc1x1MDAzZSwgbGluayBvdmVyZmxvd1wmIzM0OywgbGlua19yc3RfbXNnLCBsLVx1MDAzZW5hbWUpO1xubmV0L3RpcGMvbGluay5jLTEwNDYtXHRcdFx0X19za2JfcXVldWVfcHVyZ2UobGlzdCk7XG4tLVxubmV0L3RpcGMvbGluay5jPTExOTU9c3RhdGljIGJvb2wgbGlua19yZXRyYW5zbWl0X2ZhaWx1cmUoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHRpcGNfbGluayAqcixcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTIxNC1cbm5ldC90aXBjL2xpbmsuYzoxMjE1Olx0cHJfd2FybihcJiMzNDtSZXRyYW5zbWlzc2lvbiBmYWlsdXJlIG9uIGxpbmsgXHUwMDNjJXNcdTAwM2VcXG5cJiMzNDssIGwtXHUwMDNlbmFtZSk7XG5uZXQvdGlwYy9saW5rLmMtMTIxNi1cdGxpbmtfcHJpbnQobCwgXCYjMzQ7U3RhdGUgb2YgbGluayBcJiMzNDspO1xuLS1cbm5ldC90aXBjL2xpbmsuYz0xMjQ0PXN0YXRpYyBib29sIHRpcGNfZGF0YV9pbnB1dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xMjY3LVx0XHRsLVx1MDAzZWJjX3JjdmxpbmstXHUwMDNlc3RhdGUgPSBMSU5LX0VTVEFCTElTSEVEO1xubmV0L3RpcGMvbGluay5jOjEyNjg6XHRcdHNrYl9xdWV1ZV90YWlsKGwtXHUwMDNlbmFtZWRxLCBza2IpO1xubmV0L3RpcGMvbGluay5jLTEyNjktXHRcdHJldHVybiB0cnVlO1xuLS1cbm5ldC90aXBjL2xpbmsuYz0xNDQ1PXN0YXRpYyB1OCBfX3RpcGNfYnVpbGRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqZ2EsXG4tLVxubmV0L3RpcGMvbGluay5jLTE0NjMtXHRcdFx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O0dhY2tzIG9uICVzOiAlZCwgcWw6ICVkIVxcblwmIzM0Oyxcbm5ldC90aXBjL2xpbmsuYzoxNDY0Olx0XHRcdFx0XHRcdCAgICBsLVx1MDAzZW5hbWUsIG4sXG5uZXQvdGlwYy9saW5rLmMtMTQ2NS1cdFx0XHRcdFx0XHQgICAgc2tiX3F1ZXVlX2xlbihcdTAwMjZsLVx1MDAzZWRlZmVyZHEpKTtcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTgzMj1zdGF0aWMgdm9pZCB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsIGludCBtdHlwLCBib29sIHByb2JlLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xOTEyLVx0X19za2JfcXVldWVfdGFpbCh4bWl0cSwgc2tiKTtcbm5ldC90aXBjL2xpbmsuYzoxOTEzOlx0dHJhY2VfdGlwY19wcm90b19idWlsZChza2IsIGZhbHNlLCBsLVx1MDAzZW5hbWUpO1xubmV0L3RpcGMvbGluay5jLTE5MTQtfVxuLS1cbm5ldC90aXBjL2xpbmsuYz0yMTc0PXN0YXRpYyBpbnQgdGlwY19saW5rX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0yMTkyLVxubmV0L3RpcGMvbGluay5jOjIxOTM6XHR0cmFjZV90aXBjX3Byb3RvX3Jjdihza2IsIGZhbHNlLCBsLVx1MDAzZW5hbWUpO1xubmV0L3RpcGMvbGluay5jLTIxOTQtXG4tLVxubmV0L3RpcGMvbGluay5jLTIyMjItXHRcdC8qIENvbXBsZXRlIG93biBsaW5rIG5hbWUgd2l0aCBwZWVyJiMzOTtzIGludGVyZmFjZSBuYW1lICovXG5uZXQvdGlwYy9saW5rLmM6MjIyMzpcdFx0aWZfbmFtZSA9ICBzdHJyY2hyKGwtXHUwMDNlbmFtZSwgJiMzOTs6JiMzOTspICYjNDM7IDE7XG5uZXQvdGlwYy9saW5rLmM6MjIyNDpcdFx0aWYgKHNpemVvZihsLVx1MDAzZW5hbWUpIC0gKGlmX25hbWUgLSBsLVx1MDAzZW5hbWUpIFx1MDAzYz0gVElQQ19NQVhfSUZfTkFNRSlcbm5ldC90aXBjL2xpbmsuYy0yMjI1LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC90aXBjL2xpbmsuYz0yNTUzPXN0YXRpYyB2b2lkIGxpbmtfcHJpbnQoc3RydWN0IHRpcGNfbGluayAqbCwgY29uc3QgY2hhciAqc3RyKVxuLS1cbm5ldC90aXBjL2xpbmsuYy0yNTU4LVxubmV0L3RpcGMvbGluay5jOjI1NTk6XHRwcl9pbmZvKFwmIzM0OyVzIExpbmsgXHUwMDNjJXNcdTAwM2Ugc3RhdGUgJXhcXG5cJiMzNDssIHN0ciwgbC1cdTAwM2VuYW1lLCBsLVx1MDAzZXN0YXRlKTtcbm5ldC90aXBjL2xpbmsuYy0yNTYwLVx0cHJfaW5mbyhcJiMzNDtYTVRROiAldSBbJXUtJXVdLCBCS0xHUTogJXUsIFNORE5YOiAldSwgUkNWTlg6ICV1XFxuXCYjMzQ7LFxuLS1cbm5ldC90aXBjL2xpbmsuYz0yNzg5PWludCB0aXBjX25sX2FkZF9iY19saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbmxfbXNnICptc2csXG4tLVxubmV0L3RpcGMvbGluay5jLTI4MjAtXHRcdGdvdG8gYXR0cl9tc2dfZnVsbDtcbm5ldC90aXBjL2xpbmsuYzoyODIxOlx0aWYgKG5sYV9wdXRfc3RyaW5nKG1zZy1cdTAwM2Vza2IsIFRJUENfTkxBX0xJTktfTkFNRSwgYmNsLVx1MDAzZW5hbWUpKVxubmV0L3RpcGMvbGluay5jLTI4MjItXHRcdGdvdG8gYXR0cl9tc2dfZnVsbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3NTUKCQkJCQkJCW91dHB1dDogMjMzCgkJCQkJCQl0aG91Z2h0czogMTg5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgQ29tbWl0OiBLTVNBTiBOZWVkcyBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb21taXQmIzM5O3MgcHVycG9zZSDigJMgd2hhdCBidWcgaXMgaXQgYWRkcmVzc2luZyBvciB3aGF0IGNoYW5nZSBpcyBpdCBtYWtpbmc/IFRoZSBkaWZmIHNob3dzIGEgZmV3IGtleSBtb2RpZmljYXRpb25zOiBgc3RyY3B5YCBpcyBiZWluZyByZXBsYWNlZCBieSBgc3Ryc2NweWAgYW5kIGBtZW1jcHlgIGluIHNldmVyYWwgcGxhY2VzLCBzcGVjaWZpY2FsbHkgaW52b2x2aW5nIHRoZSBgaWZfbmFtZWAgYW5kIGBuYW1lYCBmaWVsZHMgd2l0aGluIGEgYHRpcGNfbGlua2Agc3RydWN0dXJlLgoKVGhlIGNvcmUgb2YgdGhlIGlzc3VlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHN0ZW1zIGZyb20gaG93IHRoZSBsaW5rIHByb3RvY29sIG1lc3NhZ2UgaXMgY29uc3RydWN0ZWQgYW5kIHRyYW5zbWl0dGVkLiBQcmV2aW91c2x5LCBhIGBzdHJjcHlgIGNhbGwgaW4gYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgIHdhcyB1c2VkIHRvIGNvcHkgYGwtJmd0O2lmX25hbWVgIGludG8gdGhlIG1lc3NhZ2UgcGF5bG9hZC4gSG93ZXZlciwgYHN0cmNweWAgb25seSBjb3BpZXMgdXAgdG8gdGhlIG51bGwgdGVybWluYXRvciwgbGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyIHVuaW5pdGlhbGl6ZWQuIFRoaXMgY291bGQgbGVhZCB0byBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrLCB3aGVyZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgdHJhbnNtaXR0ZWQgb3ZlciB0aGUgbmV0d29yay4gSXQgY291bGQgYWxzbyB0cmlnZ2VyIEtNU0FOLgoKVGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgYSBkaXJlY3QgcmVzcG9uc2UgdG8gdGhpcyB2dWxuZXJhYmlsaXR5LCBhaW1pbmcgdG8gZW5zdXJlIHRoZSBlbnRpcmUgYnVmZmVyIGlzIGluaXRpYWxpemVkLgoKTm93LCBsZXQmIzM5O3MgY2FyZWZ1bGx5IGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBLTVNBTiBzZXNzaW9uLiBUaGUgS01TQU4gZ3VpZGVsaW5lcyBhcmUgcXVpdGUgY2xlYXI6IHdlIG9ubHkgbmVlZCBLTVNBTiBpZiB0aGUgcGF0Y2ggKmludHJvZHVjZXMqIG9yICpleHBvc2VzKiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKEtBU0FOLCBMT0NLREVQLCBldGMuKSB3b3VsZCBtaXNzLiBJIG5lZWQgdG8gaG9saXN0aWNhbGx5IHJldmlldyB0aGUgcGF0Y2ggd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBlbnN1cmUgdGhpcyBwYXRjaCBpcyBub3QgY2hhbmdpbmcgY29udHJvbCBmbG93IG9yIGNhbGN1bGF0aW9ucyBpbiBhIHdheSB0aGF0IGludHJvZHVjZXMgdGhpcyByaXNrLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaW4gYHRpcGNfbGlua19jcmVhdGVgLCB0aGUgYHRpcGNfbGlua2Agc3RydWN0dXJlIChgbGApIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCBpcyBjcml0aWNhbC4gVGhpcyBlbnN1cmVzIHRoYXQgYWxsIG1lbWJlcnMgb2YgdGhlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHRoZSBgaWZfbmFtZWAgZmllbGQsIGFyZSAqemVyby1pbml0aWFsaXplZCogdXBvbiBhbGxvY2F0aW9uLiBUaGUgc3Vic2VxdWVudCB1c2Ugb2YgYHN0cnNjcHlgIG92ZXJ3cml0ZXMgdGhlIGZpcnN0IGZldyBieXRlcyB3aXRoIHRoZSBhY3R1YWwgaW50ZXJmYWNlIG5hbWUuIEltcG9ydGFudGx5LCB0aGUgcmVtYWluaW5nIGJ5dGVzIG9mIGBsLSZndDtpZl9uYW1lYCAqcmVtYWluKiB6ZXJvZWQuIFRoZSB1c2Ugb2YgYG1lbWNweShkYXRhLCBsLSZndDtpZl9uYW1lLCBUSVBDX01BWF9JRl9OQU1FKWAgdGhlbiBjb3BpZXMgdGhlIGVudGlyZSAxNi1ieXRlIGJ1ZmZlciBmcm9tIGBsLSZndDtpZl9uYW1lYCBpbnRvIHRoZSBvdXRnb2luZyBwYWNrZXQuIEJlY2F1c2UgYGwtJmd0O2lmX25hbWVgIGlzIHplcm8taW5pdGlhbGl6ZWQgYW5kIHRoZW4gcG90ZW50aWFsbHkgcGFydGlhbGx5IG92ZXJ3cml0dGVuIGJ5IGEgc3RyaW5nIChudWxsLXRlcm1pbmF0ZWQpLCBhbGwgdGhlIGNvcGllZCBieXRlcyB3aWxsIGJlIGluaXRpYWxpemVkLCBlaXRoZXIgdGhlIGRhdGEgb2YgdGhlIHN0cmluZywgb3IgemVyby4KCkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCAqcmVtb3ZlcyogdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBUaGUgdXNlIG9mIGBremFsbG9jX29iamAsIGBzdHJzY3B5YCwgYW5kIGBtZW1jcHlgIGd1YXJhbnRlZXMgdGhhdCB0aGUgZnVsbCBidWZmZXIgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSB0cmFuc21pc3Npb24uIE5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBUaGUgc3RyaW5nIGNvcHkgYW5kIGJ1ZmZlciBjb3B5IG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQgc2FmZWx5LgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IEtNU0FOIGNvbmNlcm5zLiBTdGFuZGFyZCBLQVNBTiBhbmQgY29tcGlsZXIgY2hlY2tzIGFyZSBzdWZmaWNpZW50LiBObyBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyByZXF1aXJlZC4gVGhlIGBOZWVkc0tNU0FOYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSBzaG91bGQgY2xlYXJseSBhcnRpY3VsYXRlIHRoaXMgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyB1bnNhZmUgYHN0cmNweWAgY2FsbHMgd2l0aCBgc3Ryc2NweWAgaW4gYHRpcGNfbGlua19jcmVhdGVgIGFuZCBgdGlwY19saW5rX2JjX2NyZWF0ZWAsIGFuZCBjaGFuZ2VzIGBzdHJjcHlgIHRvIGBtZW1jcHkoZGF0YSwgbC1cdTAwM2VpZl9uYW1lLCBUSVBDX01BWF9JRl9OQU1FKWAgaW4gYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgLlxuXG5UaGUgYHN0cnVjdCB0aXBjX2xpbmtgIGluc3RhbmNlIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKCpsLCBHRlBfQVRPTUlDKWAsIGVuc3VyaW5nIHRoYXQgYWxsIGZpZWxkcyBpbmNsdWRpbmcgYGwtXHUwMDNlaWZfbmFtZWAgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIENvcHlpbmcgYFRJUENfTUFYX0lGX05BTUVgIGJ5dGVzIGZyb20gYGwtXHUwMDNlaWZfbmFtZWAgaW50byB0aGUgcGFja2V0IHBheWxvYWQgYGRhdGFgIHJlYWRzIG9ubHkgZnVsbHkgaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGluZywgb3IgdXNlci1zcGFjZSBpbmZvIGxlYWtzLlxuXG5TdGFuZGFyZCBLQVNBTiBhbmQgY29tcGlsZXIgZm9ydGlmaWNhdGlvbnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgb3IgYnVmZmVyIG92ZXJmbG93IGJ1Z3MuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgdW5zYWZlIGBzdHJjcHlgIGNhbGxzIHdpdGggYHN0cnNjcHlgIGluIGB0aXBjX2xpbmtfY3JlYXRlYCBhbmQgYHRpcGNfbGlua19iY19jcmVhdGVgLCBhbmQgY2hhbmdlcyBgc3RyY3B5YCB0byBgbWVtY3B5KGRhdGEsIGwtXHUwMDNlaWZfbmFtZSwgVElQQ19NQVhfSUZfTkFNRSlgIGluIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYC5cblxuVGhlIGBzdHJ1Y3QgdGlwY19saW5rYCBpbnN0YW5jZSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigqbCwgR0ZQX0FUT01JQylgLCBlbnN1cmluZyB0aGF0IGFsbCBmaWVsZHMgaW5jbHVkaW5nIGBsLVx1MDAzZWlmX25hbWVgIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBDb3B5aW5nIGBUSVBDX01BWF9JRl9OQU1FYCBieXRlcyBmcm9tIGBsLVx1MDAzZWlmX25hbWVgIGludG8gdGhlIHBhY2tldCBwYXlsb2FkIGBkYXRhYCByZWFkcyBvbmx5IGZ1bGx5IGluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBicmFuY2hpbmcsIG9yIHVzZXItc3BhY2UgaW5mbyBsZWFrcy5cblxuU3RhbmRhcmQgS0FTQU4gYW5kIGNvbXBpbGVyIGZvcnRpZmljYXRpb25zIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIG9yIGJ1ZmZlciBvdmVyZmxvdyBidWdzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDA6NDYuNzI1NjEwNTU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwNzgxNTgzODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX2xpbmtfY3JlYXRlXCIsXG4gICAgXCJ0aXBjX2xpbmtfYmNfY3JlYXRlXCIsXG4gICAgXCJ0aXBjX2xpbmtfYnVpbGRfcmVzZXRfbXNnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyB1bnNhZmUgYHN0cmNweWAgY2FsbHMgd2l0aCBgc3Ryc2NweWAgaW4gYHRpcGNfbGlua19jcmVhdGVgIGFuZCBgdGlwY19saW5rX2JjX2NyZWF0ZWAsIGFuZCBjaGFuZ2VzIGBzdHJjcHlgIHRvIGBtZW1jcHkoZGF0YSwgbC1cXHUwMDNlaWZfbmFtZSwgVElQQ19NQVhfSUZfTkFNRSlgIGluIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYC5cXG5cXG5UaGUgYHN0cnVjdCB0aXBjX2xpbmtgIGluc3RhbmNlIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKCpsLCBHRlBfQVRPTUlDKWAsIGVuc3VyaW5nIHRoYXQgYWxsIGZpZWxkcyBpbmNsdWRpbmcgYGwtXFx1MDAzZWlmX25hbWVgIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBDb3B5aW5nIGBUSVBDX01BWF9JRl9OQU1FYCBieXRlcyBmcm9tIGBsLVxcdTAwM2VpZl9uYW1lYCBpbnRvIHRoZSBwYWNrZXQgcGF5bG9hZCBgZGF0YWAgcmVhZHMgb25seSBmdWxseSBpbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgY29uZGl0aW9uYWwgYnJhbmNoaW5nLCBvciB1c2VyLXNwYWNlIGluZm8gbGVha3MuXFxuXFxuU3RhbmRhcmQgS0FTQU4gYW5kIGNvbXBpbGVyIGZvcnRpZmljYXRpb25zIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIG9yIGJ1ZmZlciBvdmVyZmxvdyBidWdzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUSVBDIGxpbmsgaW5pdGlhbGl6YXRpb24gYW5kIHByb3RvY29sIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljIGluIG5ldC90aXBjL2xpbmsuYyAodXNpbmcgc3Ryc2NweSBhbmQgYm91bmRlZCBtZW1jcHkgaW5zdGVhZCBvZiBzdHJjcHkpLiBUSVBDIGlzIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowMDo0Ni43MjU2MTY3MTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTA2NTIzODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2YTFiZmNlMDNlYzhiNTkzNWQzNGFlYjg0OGY2ODFmZmI5ZDU3NzliXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDI5IDEzOjAwOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuY1xcbmluZGV4IDQ5ZGZjMDk4ZDg5YjIuLjY0MjdjNjlmODkyOTQgMTAwNjQ0XFxuLS0tIGEvbmV0L3RpcGMvbGluay5jXFxuKysrIGIvbmV0L3RpcGMvbGluay5jXFxuQEAgLTUwNCw3ICs1MDQsNyBAQCBib29sIHRpcGNfbGlua19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppZl9uYW1lLCBpbnQgYmVhcmVyX2lkLFxcbiBcXHRzbnByaW50ZihsLVxcdTAwM2VuYW1lLCBzaXplb2YobC1cXHUwMDNlbmFtZSksIFxcXCIlczolcy0lczp1bmtub3duXFxcIixcXG4gXFx0XFx0IHNlbGZfc3RyLCBpZl9uYW1lLCBwZWVyX3N0cik7XFxuIFxcbi1cXHRzdHJjcHkobC1cXHUwMDNlaWZfbmFtZSwgaWZfbmFtZSk7XFxuK1xcdHN0cnNjcHkobC1cXHUwMDNlaWZfbmFtZSwgaWZfbmFtZSk7XFxuIFxcdGwtXFx1MDAzZWFkZHIgPSBwZWVyO1xcbiBcXHRsLVxcdTAwM2VwZWVyX2NhcHMgPSBwZWVyX2NhcHM7XFxuIFxcdGwtXFx1MDAzZW5ldCA9IG5ldDtcXG5AQCAtNTc0LDcgKzU3NCw3IEBAIGJvb2wgdGlwY19saW5rX2JjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBvd25ub2RlLCB1MzIgcGVlciwgdTggKnBlZXJfaWQsXFxuIFxcdFxcdHNucHJpbnRmKGwtXFx1MDAzZW5hbWUsIHNpemVvZihsLVxcdTAwM2VuYW1lKSwgXFxcIiVzOiVzXFxcIiwgdGlwY19iY2xpbmtfbmFtZSxcXG4gXFx0XFx0XFx0IHBlZXJfc3RyKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0c3RyY3B5KGwtXFx1MDAzZW5hbWUsIHRpcGNfYmNsaW5rX25hbWUpO1xcbitcXHRcXHRzdHJzY3B5KGwtXFx1MDAzZW5hbWUsIHRpcGNfYmNsaW5rX25hbWUpO1xcbiBcXHR9XFxuIFxcdHRyYWNlX3RpcGNfbGlua19yZXNldChsLCBUSVBDX0RVTVBfQUxMLCBcXFwiYmNsaW5rIGNyZWF0ZWQhXFxcIik7XFxuIFxcdHRpcGNfbGlua19yZXNldChsKTtcXG5AQCAtMTg5OCw3ICsxODk4LDcgQEAgc3RhdGljIHZvaWQgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBpbnQgbXR5cCwgYm9vbCBwcm9iZSxcXG4gXFx0XFx0XFx0bXNnX3NldF9kZXN0X3Nlc3Npb24oaGRyLCBsLVxcdTAwM2VwZWVyX3Nlc3Npb24pO1xcbiBcXHRcXHR9XFxuIFxcdFxcdG1zZ19zZXRfbWF4X3BrdChoZHIsIGwtXFx1MDAzZWFkdmVydGlzZWRfbXR1KTtcXG4tXFx0XFx0c3RyY3B5KGRhdGEsIGwtXFx1MDAzZWlmX25hbWUpO1xcbitcXHRcXHRtZW1jcHkoZGF0YSwgbC1cXHUwMDNlaWZfbmFtZSwgVElQQ19NQVhfSUZfTkFNRSk7XFxuIFxcdFxcdG1zZ19zZXRfc2l6ZShoZHIsIElOVF9IX1NJWkUgKyBUSVBDX01BWF9JRl9OQU1FKTtcXG4gXFx0XFx0c2tiX3RyaW0oc2tiLCBJTlRfSF9TSVpFICsgVElQQ19NQVhfSUZfTkFNRSk7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDA6NDguMTc2OTExNjMzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4NDUwNzgwMTkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUSVBDXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGlwY19saW5rX2NyZWF0ZVwiLFxuICAgIFwidGlwY19saW5rX2JjX2NyZWF0ZVwiLFxuICAgIFwidGlwY19saW5rX2J1aWxkX3Jlc2V0X21zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFRJUEMgbGluayBpbml0aWFsaXphdGlvbiBhbmQgcHJvdG9jb2wgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gbG9naWMgaW4gbmV0L3RpcGMvbGluay5jICh1c2luZyBzdHJzY3B5IGFuZCBib3VuZGVkIG1lbWNweSBpbnN0ZWFkIG9mIHN0cmNweSkuIFRJUEMgaXMgZnVsbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZhMWJmY2UwM2VjOGI1OTM1ZDM0YWViODQ4ZjY4MWZmYjlkNTc3OWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxMzowMDo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuY1xuaW5kZXggNDlkZmMwOThkODliMi4uNjQyN2M2OWY4OTI5NCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2xpbmsuY1xuKysrIGIvbmV0L3RpcGMvbGluay5jXG5AQCAtNTA0LDcgKzUwNCw3IEBAIGJvb2wgdGlwY19saW5rX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKmlmX25hbWUsIGludCBiZWFyZXJfaWQsXG4gXHRzbnByaW50ZihsLVx1MDAzZW5hbWUsIHNpemVvZihsLVx1MDAzZW5hbWUpLCBcIiVzOiVzLSVzOnVua25vd25cIixcbiBcdFx0IHNlbGZfc3RyLCBpZl9uYW1lLCBwZWVyX3N0cik7XG4gXG4tXHRzdHJjcHkobC1cdTAwM2VpZl9uYW1lLCBpZl9uYW1lKTtcbitcdHN0cnNjcHkobC1cdTAwM2VpZl9uYW1lLCBpZl9uYW1lKTtcbiBcdGwtXHUwMDNlYWRkciA9IHBlZXI7XG4gXHRsLVx1MDAzZXBlZXJfY2FwcyA9IHBlZXJfY2FwcztcbiBcdGwtXHUwMDNlbmV0ID0gbmV0O1xuQEAgLTU3NCw3ICs1NzQsNyBAQCBib29sIHRpcGNfbGlua19iY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgb3dubm9kZSwgdTMyIHBlZXIsIHU4ICpwZWVyX2lkLFxuIFx0XHRzbnByaW50ZihsLVx1MDAzZW5hbWUsIHNpemVvZihsLVx1MDAzZW5hbWUpLCBcIiVzOiVzXCIsIHRpcGNfYmNsaW5rX25hbWUsXG4gXHRcdFx0IHBlZXJfc3RyKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHN0cmNweShsLVx1MDAzZW5hbWUsIHRpcGNfYmNsaW5rX25hbWUpO1xuK1x0XHRzdHJzY3B5KGwtXHUwMDNlbmFtZSwgdGlwY19iY2xpbmtfbmFtZSk7XG4gXHR9XG4gXHR0cmFjZV90aXBjX2xpbmtfcmVzZXQobCwgVElQQ19EVU1QX0FMTCwgXCJiY2xpbmsgY3JlYXRlZCFcIik7XG4gXHR0aXBjX2xpbmtfcmVzZXQobCk7XG5AQCAtMTg5OCw3ICsxODk4LDcgQEAgc3RhdGljIHZvaWQgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBpbnQgbXR5cCwgYm9vbCBwcm9iZSxcbiBcdFx0XHRtc2dfc2V0X2Rlc3Rfc2Vzc2lvbihoZHIsIGwtXHUwMDNlcGVlcl9zZXNzaW9uKTtcbiBcdFx0fVxuIFx0XHRtc2dfc2V0X21heF9wa3QoaGRyLCBsLVx1MDAzZWFkdmVydGlzZWRfbXR1KTtcbi1cdFx0c3RyY3B5KGRhdGEsIGwtXHUwMDNlaWZfbmFtZSk7XG4rXHRcdG1lbWNweShkYXRhLCBsLVx1MDAzZWlmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpO1xuIFx0XHRtc2dfc2V0X3NpemUoaGRyLCBJTlRfSF9TSVpFICsgVElQQ19NQVhfSUZfTkFNRSk7XG4gXHRcdHNrYl90cmltKHNrYiwgSU5UX0hfU0laRSArIFRJUENfTUFYX0lGX05BTUUpO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDA6NDguMTc2OTEyODg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEwMzQ3ODY4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUSVBDIExpbmsgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIHByb3ZpZGVkIHRvb2xzIHN1Z2dlc3QgYSBjb2RlIGluc3BlY3Rpb24gaXMgaW4gb3JkZXIuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHBhdGNoIHRhcmdldGluZyBgbmV0L3RpcGMvbGluay5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgZGlmZiBoaWdobGlnaHRzIHNvbWUgaW50ZXJlc3Rpbmcgc3RyaW5nIGhhbmRsaW5nIGNoYW5nZXMuXG5cblRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgYHN0cmNweWAgd2l0aCBgc3Ryc2NweWAgaW4gYHRpcGNfbGlua19jcmVhdGUoKWAgYW5kIGB0aXBjX2xpbmtfYmNfY3JlYXRlKClgLiBUaGF0J3MgYSBjbGFzc2ljIGJ1ZmZlciBvdmVyZmxvdyBwcmV2ZW50aW9uIG1lYXN1cmUuIFJlcGxhY2luZyBhIHBvdGVudGlhbGx5IHVuYm91bmRlZCBjb3B5IHdpdGggYSBzYWZlLCBib3VuZGVkIGNvcHkgaXMgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSwgZXNwZWNpYWxseSBpbiBhIG5ldHdvcmsgY29udGV4dCB3aGVyZSBtYWxpY2lvdXMgYWN0b3JzIG1pZ2h0IHRyeSB0byBleHBsb2l0IHZ1bG5lcmFiaWxpdGllcyB0aHJvdWdoIGNyYWZ0ZWQgaW5wdXQuIEt1ZG9zIGZvciBzcG90dGluZyBhbmQgYWRkcmVzc2luZyB0aG9zZS5cblxuVGhlIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKClgIGNoYW5nZSwgaG93ZXZlciwgc3dhcHBpbmcgYHN0cmNweWAgd2l0aCBgbWVtY3B5YCB3aXRoIGBUSVBDX01BWF9JRl9OQU1FYCBhcyB0aGUgc2l6ZSBhcmd1bWVudCwgaXMgaW50ZXJlc3RpbmcuIEl0IHN0aWxsIGxvb2tzIGxpa2UgYW4gYXR0ZW1wdCB0byBtYWtlIHRoZSBjb2RlIHNhZmVyIGFuZCBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3MuIEknZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dHMgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgb3JpZ2luYWwgYHN0cmNweWAgdXNhZ2VzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBUSVBDX01BWF9JRl9OQU1FYCBpcyB0aGUgY29ycmVjdCBsaW1pdCBhbmQgaWYgaXQncyBjb25zaXN0ZW50bHkgZW5mb3JjZWQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsYXRlZCBjb2RlIHRvIHNlZSBpZiB0aGVyZSB3ZXJlIGFueSBpc3N1ZXMgcmVwb3J0ZWQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBhcyB3ZWxsLCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWxhdGVkIGNvbmZpZ3VyYWJsZSB2YWx1ZXMuXG5cblRpbWUgdG8gcHVsbCB1cCBgbmV0L3RpcGMvbGluay5jYCBhbmQgc3RhcnQgcmVhZGluZyBhcm91bmQgdGhvc2UgY2FsbCBzaXRlcy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgZWRnZSBjYXNlcywgYW5kLCBvZiBjb3Vyc2UsIHRvIG1ha2Ugc3VyZSB0aGUgcmVwbGFjZW1lbnRzIGFyZSBmdW5jdGlvbmFsbHkgc291bmQgYW5kIGRvbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMuIEl0J3MgdGltZSB0byBjb25maXJtIHRoYXQgdGhlIHBhdGNoIGlzIGluZGVlZCBhIGdvb2QgdGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTAsIk91dHB1dFRva2VucyI6MTAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDA6NTkuMjExNzAxOTEyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjMzNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRJUENfTUFYX0lGX05BTUVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYmVhcmVyLmM9MTM3PXN0YXRpYyBpbnQgYmVhcmVyX25hbWVfdmFsaWRhdGUoY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5jLTE2MC1cXHRpZiAoKG1lZGlhX2xlbiBcXHUwMDNjPSAxKSB8fCAobWVkaWFfbGVuIFxcdTAwM2UgVElQQ19NQVhfTUVESUFfTkFNRSkgfHxcXG5uZXQvdGlwYy9iZWFyZXIuYzoxNjE6XFx0ICAgIChpZl9sZW4gXFx1MDAzYz0gMSkgfHwgKGlmX2xlbiBcXHUwMDNlIFRJUENfTUFYX0lGX05BTUUpKVxcbm5ldC90aXBjL2JlYXJlci5jLTE2Mi1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5jLTE2OS1cXHRcXHRpZiAoc3Ryc2NweShuYW1lX3BhcnRzLVxcdTAwM2VpZl9uYW1lLCBpZl9uYW1lLFxcbm5ldC90aXBjL2JlYXJlci5jOjE3MDpcXHRcXHRcXHQgICAgVElQQ19NQVhfSUZfTkFNRSkgXFx1MDAzYyAwKVxcbm5ldC90aXBjL2JlYXJlci5jLTE3MS1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5oPTE3OT1zdHJ1Y3QgdGlwY19iZWFyZXJfbmFtZXMge1xcbm5ldC90aXBjL2JlYXJlci5oLTE4MC1cXHRjaGFyIG1lZGlhX25hbWVbVElQQ19NQVhfTUVESUFfTkFNRV07XFxubmV0L3RpcGMvYmVhcmVyLmg6MTgxOlxcdGNoYXIgaWZfbmFtZVtUSVBDX01BWF9JRl9OQU1FXTtcXG5uZXQvdGlwYy9iZWFyZXIuaC0xODItfTtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xMzc9c3RydWN0IHRpcGNfbGluayB7XFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTU1LVxcdHUzMiBzaWxlbnRfaW50dl9jbnQ7XFxubmV0L3RpcGMvbGluay5jOjE1NjpcXHRjaGFyIGlmX25hbWVbVElQQ19NQVhfSUZfTkFNRV07XFxubmV0L3RpcGMvbGluay5jLTE1Ny1cXHR1MzIgcHJpb3JpdHk7XFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9MTgzMj1zdGF0aWMgdm9pZCB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsIGludCBtdHlwLCBib29sIHByb2JlLFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTE5MDAtXFx0XFx0bXNnX3NldF9tYXhfcGt0KGhkciwgbC1cXHUwMDNlYWR2ZXJ0aXNlZF9tdHUpO1xcbm5ldC90aXBjL2xpbmsuYzoxOTAxOlxcdFxcdG1lbWNweShkYXRhLCBsLVxcdTAwM2VpZl9uYW1lLCBUSVBDX01BWF9JRl9OQU1FKTtcXG5uZXQvdGlwYy9saW5rLmM6MTkwMjpcXHRcXHRtc2dfc2V0X3NpemUoaGRyLCBJTlRfSF9TSVpFICsgVElQQ19NQVhfSUZfTkFNRSk7XFxubmV0L3RpcGMvbGluay5jOjE5MDM6XFx0XFx0c2tiX3RyaW0oc2tiLCBJTlRfSF9TSVpFICsgVElQQ19NQVhfSUZfTkFNRSk7XFxubmV0L3RpcGMvbGluay5jLTE5MDQtXFx0fVxcbi0tXFxubmV0L3RpcGMvbGluay5jPTIxNzQ9c3RhdGljIGludCB0aXBjX2xpbmtfcHJvdG9fcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMjIyMy1cXHRcXHRpZl9uYW1lID0gIHN0cnJjaHIobC1cXHUwMDNlbmFtZSwgJzonKSArIDE7XFxubmV0L3RpcGMvbGluay5jOjIyMjQ6XFx0XFx0aWYgKHNpemVvZihsLVxcdTAwM2VuYW1lKSAtIChpZl9uYW1lIC0gbC1cXHUwMDNlbmFtZSkgXFx1MDAzYz0gVElQQ19NQVhfSUZfTkFNRSlcXG5uZXQvdGlwYy9saW5rLmMtMjIyNS1cXHRcXHRcXHRicmVhaztcXG5uZXQvdGlwYy9saW5rLmM6MjIyNjpcXHRcXHRpZiAobXNnX2RhdGFfc3ooaGRyKSBcXHUwMDNjIFRJUENfTUFYX0lGX05BTUUpXFxubmV0L3RpcGMvbGluay5jLTIyMjctXFx0XFx0XFx0YnJlYWs7XFxubmV0L3RpcGMvbGluay5jOjIyMjg6XFx0XFx0c3Ryc2NweShpZl9uYW1lLCBkYXRhLCBUSVBDX01BWF9JRl9OQU1FKTtcXG5uZXQvdGlwYy9saW5rLmMtMjIyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDA6NTkuMjU3MzM4NDcyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL2xpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0OTUsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0OTU6XFx0XFxuIDQ5NjpcXHRcXHQvKiBTZXQgbGluayBuYW1lIGZvciB1bmljYXN0IGxpbmtzIG9ubHkgKi9cXG4gNDk3OlxcdFxcdGlmIChwZWVyX2lkKSB7XFxuIDQ5ODpcXHRcXHRcXHRpZiAodGlwY19ub2RlaWQyc3RyaW5nKHNlbGZfc3RyLCB0aXBjX293bl9pZChuZXQpKSBcXHUwMDNlIE5PREVfSURfTEVOKVxcbiA0OTk6XFx0XFx0XFx0XFx0c3ByaW50ZihzZWxmX3N0ciwgXFxcIiV4XFxcIiwgc2VsZik7XFxuIDUwMDpcXHRcXHRcXHRpZiAodGlwY19ub2RlaWQyc3RyaW5nKHBlZXJfc3RyLCBwZWVyX2lkKSBcXHUwMDNlIE5PREVfSURfTEVOKVxcbiA1MDE6XFx0XFx0XFx0XFx0c3ByaW50ZihwZWVyX3N0ciwgXFxcIiV4XFxcIiwgcGVlcik7XFxuIDUwMjpcXHRcXHR9XFxuIDUwMzpcXHRcXHQvKiBQZWVyIGkvZiBuYW1lIHdpbGwgYmUgY29tcGxldGVkIGJ5IHJlc2V0L2FjdGl2YXRlIG1lc3NhZ2UgKi9cXG4gNTA0OlxcdFxcdHNucHJpbnRmKGwtXFx1MDAzZW5hbWUsIHNpemVvZihsLVxcdTAwM2VuYW1lKSwgXFxcIiVzOiVzLSVzOnVua25vd25cXFwiLFxcbiA1MDU6XFx0XFx0XFx0IHNlbGZfc3RyLCBpZl9uYW1lLCBwZWVyX3N0cik7XFxuIDUwNjpcXHRcXG4gNTA3OlxcdFxcdHN0cnNjcHkobC1cXHUwMDNlaWZfbmFtZSwgaWZfbmFtZSk7XFxuIDUwODpcXHRcXHRsLVxcdTAwM2VhZGRyID0gcGVlcjtcXG4gNTA5OlxcdFxcdGwtXFx1MDAzZXBlZXJfY2FwcyA9IHBlZXJfY2FwcztcXG4gNTEwOlxcdFxcdGwtXFx1MDAzZW5ldCA9IG5ldDtcXG4gNTExOlxcdFxcdGwtXFx1MDAzZWluX3Nlc3Npb24gPSBmYWxzZTtcXG4gNTEyOlxcdFxcdGwtXFx1MDAzZWJlYXJlcl9pZCA9IGJlYXJlcl9pZDtcXG4gNTEzOlxcdFxcdGwtXFx1MDAzZXRvbGVyYW5jZSA9IHRvbGVyYW5jZTtcXG4gNTE0OlxcdFxcdGlmIChiY19yY3ZsaW5rKVxcbiA1MTU6XFx0XFx0XFx0YmNfcmN2bGluay1cXHUwMDNldG9sZXJhbmNlID0gdG9sZXJhbmNlO1xcbiA1MTY6XFx0XFx0bC1cXHUwMDNlbmV0X3BsYW5lID0gbmV0X3BsYW5lO1xcbiA1MTc6XFx0XFx0bC1cXHUwMDNlYWR2ZXJ0aXNlZF9tdHUgPSBtdHU7XFxuIDUxODpcXHRcXHRsLVxcdTAwM2VtdHUgPSBtdHU7XFxuIDUxOTpcXHRcXHRsLVxcdTAwM2Vwcmlvcml0eSA9IHByaW9yaXR5O1xcbiA1MjA6XFx0XFx0dGlwY19saW5rX3NldF9xdWV1ZV9saW1pdHMobCwgbWluX3dpbiwgbWF4X3dpbik7XFxuIDUyMTpcXHRcXHRsLVxcdTAwM2VhY2tlcnMgPSAxO1xcbiA1MjI6XFx0XFx0bC1cXHUwMDNlYmNfc25kbGluayA9IGJjX3NuZGxpbms7XFxuIDUyMzpcXHRcXHRsLVxcdTAwM2ViY19yY3ZsaW5rID0gYmNfcmN2bGluaztcXG4gNTI0OlxcdFxcdGwtXFx1MDAzZWlucHV0cSA9IGlucHV0cTtcXG4gNTI1OlxcdFxcdGwtXFx1MDAzZW5hbWVkcSA9IG5hbWVkcTtcXG4gNTI2OlxcdFxcdGwtXFx1MDAzZXN0YXRlID0gTElOS19SRVNFVFRJTkc7XFxuIDUyNzpcXHRcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmwtXFx1MDAzZXRyYW5zbXEpO1xcbiA1Mjg6XFx0XFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZsLVxcdTAwM2ViYWNrbG9ncSk7XFxuIDUyOTpcXHRcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmwtXFx1MDAzZWRlZmVyZHEpO1xcbiA1MzA6XFx0XFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZsLVxcdTAwM2VmYWlsb3Zlcl9kZWZlcmRxKTtcXG4gNTMxOlxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmwtXFx1MDAzZXdha2V1cHEpO1xcbiA1MzI6XFx0XFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChsLVxcdTAwM2VpbnB1dHEpO1xcbiA1MzM6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDUzNDpcXHR9XFxuIDUzNTpcXHRcXG4gNTM2OlxcdC8qKlxcbiA1Mzc6XFx0ICogdGlwY19saW5rX2JjX2NyZWF0ZSAtIGNyZWF0ZSBuZXcgbGluayB0byBiZSB1c2VkIGZvciBicm9hZGNhc3RcXG4gNTM4OlxcdCAqIEBuZXQ6IHBvaW50ZXIgdG8gYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxcbiA1Mzk6XFx0ICogQG10dTogbXR1IHRvIGJlIHVzZWQgaW5pdGlhbGx5IGlmIG5vIHBlZXJzXFxuIDU0MDpcXHQgKiBAbWluX3dpbjogbWluaW1hbCBzZW5kIHdpbmRvdyB0byBiZSB1c2VkIGJ5IGxpbmtcXG4gNTQxOlxcdCAqIEBtYXhfd2luOiBtYXhpbWFsIHNlbmQgd2luZG93IHRvIGJlIHVzZWQgYnkgbGlua1xcbiA1NDI6XFx0ICogQGlucHV0cTogcXVldWUgdG8gcHV0IG1lc3NhZ2VzIHJlYWR5IGZvciBkZWxpdmVyeVxcbiA1NDM6XFx0ICogQG5hbWVkcTogcXVldWUgdG8gcHV0IGJpbmRpbmcgdGFibGUgdXBkYXRlIG1lc3NhZ2VzIHJlYWR5IGZvciBkZWxpdmVyeVxcbiA1NDQ6XFx0ICogQGxpbms6IHJldHVybiB2YWx1ZSwgcG9pbnRlciB0byBwdXQgdGhlIGNyZWF0ZWQgbGlua1xcbiA1NDU6XFx0ICogQG93bm5vZGU6IGlkZW50aXR5IG9mIG93biBub2RlXFxuIDU0NjpcXHQgKiBAcGVlcjogbm9kZSBpZCBvZiBwZWVyIG5vZGVcXG4gNTQ3OlxcdCAqIEBwZWVyX2lkOiAxMjgtYml0IElEIG9mIHBlZXJcXG4gNTQ4OlxcdCAqIEBwZWVyX2NhcHM6IGJpdG1hcCBkZXNjcmliaW5nIHBlZXIgbm9kZSBjYXBhYmlsaXRpZXNcXG4gNTQ5OlxcdCAqIEBiY19zbmRsaW5rOiB0aGUgbmFtZXNwYWNlIGdsb2JhbCBsaW5rIHVzZWQgZm9yIGJyb2FkY2FzdCBzZW5kaW5nXFxuIDU1MDpcXHQgKlxcbiA1NTE6XFx0ICogUmV0dXJuOiB0cnVlIGlmIGxpbmsgd2FzIGNyZWF0ZWQsIG90aGVyd2lzZSBmYWxzZVxcbiA1NTI6XFx0ICovXFxuIDU1MzpcXHRib29sIHRpcGNfbGlua19iY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgb3dubm9kZSwgdTMyIHBlZXIsIHU4ICpwZWVyX2lkLFxcbiA1NTQ6XFx0XFx0XFx0XFx0IGludCBtdHUsIHUzMiBtaW5fd2luLCB1MzIgbWF4X3dpbiwgdTE2IHBlZXJfY2FwcyxcXG4gNTU1OlxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsXFxuIDU1NjpcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbmFtZWRxLFxcbiA1NTc6XFx0XFx0XFx0XFx0IHN0cnVjdCB0aXBjX2xpbmsgKmJjX3NuZGxpbmssXFxuIDU1ODpcXHRcXHRcXHRcXHQgc3RydWN0IHRpcGNfbGluayAqKmxpbmspXFxuIDU1OTpcXHR7XFxuIDU2MDpcXHRcXHRzdHJ1Y3QgdGlwY19saW5rICpsO1xcbiA1NjE6XFx0XFxuIDU2MjpcXHRcXHRpZiAoIXRpcGNfbGlua19jcmVhdGUobmV0LCBcXFwiXFxcIiwgTUFYX0JFQVJFUlMsIDAsICdaJywgbXR1LCAwLCBtaW5fd2luLFxcbiA1NjM6XFx0XFx0XFx0XFx0ICAgICAgbWF4X3dpbiwgMCwgb3dubm9kZSwgcGVlciwgTlVMTCwgcGVlcl9jYXBzLFxcbiA1NjQ6XFx0XFx0XFx0XFx0ICAgICAgYmNfc25kbGluaywgTlVMTCwgaW5wdXRxLCBuYW1lZHEsIGxpbmspKVxcbiA1NjU6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA1NjY6XFx0XFxuIDU2NzpcXHRcXHRsID0gKmxpbms7XFxuIDU2ODpcXHRcXHRpZiAocGVlcl9pZCkge1xcbiA1Njk6XFx0XFx0XFx0Y2hhciBwZWVyX3N0cltOT0RFX0lEX1NUUl9MRU5dID0gezAsfTtcXG4gNTcwOlxcdFxcbiA1NzE6XFx0XFx0XFx0aWYgKHRpcGNfbm9kZWlkMnN0cmluZyhwZWVyX3N0ciwgcGVlcl9pZCkgXFx1MDAzZSBOT0RFX0lEX0xFTilcXG4gNTcyOlxcdFxcdFxcdFxcdHNwcmludGYocGVlcl9zdHIsIFxcXCIleFxcXCIsIHBlZXIpO1xcbiA1NzM6XFx0XFx0XFx0LyogQnJvYWRjYXN0IHJlY2VpdmVyIGxpbmsgbmFtZTogXFxcImJyb2FkY2FzdC1saW5rOlxcdTAwM2NwZWVyXFx1MDAzZVxcXCIgKi9cXG4gNTc0OlxcdFxcdFxcdHNucHJpbnRmKGwtXFx1MDAzZW5hbWUsIHNpemVvZihsLVxcdTAwM2VuYW1lKSwgXFxcIiVzOiVzXFxcIiwgdGlwY19iY2xpbmtfbmFtZSxcXG4gNTc1OlxcdFxcdFxcdFxcdCBwZWVyX3N0cik7XFxuIDU3NjpcXHRcXHR9IGVsc2Uge1xcbiA1Nzc6XFx0XFx0XFx0c3Ryc2NweShsLVxcdTAwM2VuYW1lLCB0aXBjX2JjbGlua19uYW1lKTtcXG4gNTc4OlxcdFxcdH1cXG4gNTc5OlxcdFxcdHRyYWNlX3RpcGNfbGlua19yZXNldChsLCBUSVBDX0RVTVBfQUxMLCBcXFwiYmNsaW5rIGNyZWF0ZWQhXFxcIik7XFxuIDU4MDpcXHRcXHR0aXBjX2xpbmtfcmVzZXQobCk7XFxuIDU4MTpcXHRcXHRsLVxcdTAwM2VzdGF0ZSA9IExJTktfUkVTRVQ7XFxuIDU4MjpcXHRcXHRsLVxcdTAwM2VhY2tlcnMgPSAwO1xcbiA1ODM6XFx0XFx0bC1cXHUwMDNlYmNfcmN2bGluayA9IGw7XFxuIDU4NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDA6NTkuMjU3NTAyODkyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3RpcGMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBUSVBDIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBUSVBDXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhlIFRJUEMgUHJvdG9jb2xcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgVGhlIFRyYW5zcGFyZW50IEludGVyIFByb2Nlc3MgQ29tbXVuaWNhdGlvbiAoVElQQykgcHJvdG9jb2wgaXNcXG4gIDExOlxcdFxcdCAgc3BlY2lhbGx5IGRlc2lnbmVkIGZvciBpbnRyYSBjbHVzdGVyIGNvbW11bmljYXRpb24uIFRoaXMgcHJvdG9jb2xcXG4gIDEyOlxcdFxcdCAgb3JpZ2luYXRlcyBmcm9tIEVyaWNzc29uIHdoZXJlIGl0IGhhcyBiZWVuIHVzZWQgaW4gY2FycmllciBncmFkZVxcbiAgMTM6XFx0XFx0ICBjbHVzdGVyIGFwcGxpY2F0aW9ucyBmb3IgbWFueSB5ZWFycy5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBUSVBDLCBzZWUgaHR0cDovL3RpcGMuc291cmNlZm9yZ2UubmV0LlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIFRoaXMgcHJvdG9jb2wgc3VwcG9ydCBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSAoID0gY29kZSB3aGljaFxcbiAgMTg6XFx0XFx0ICBjYW4gYmUgaW5zZXJ0ZWQgaW4gYW5kIHJlbW92ZWQgZnJvbSB0aGUgcnVubmluZyBrZXJuZWwgd2hlbmV2ZXIgeW91XFxuICAxOTpcXHRcXHQgIHdhbnQpLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRpcGMuIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXRcXG4gIDIwOlxcdFxcdCAgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmUgYW5kIHJlYWQgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy5yc3RcXHUwMDNlLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHQgIElmIGluIGRvdWJ0LCBzYXkgTi5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0Y29uZmlnIFRJUENfTUVESUFfSUJcXG4gIDI1OlxcdFxcdGJvb2wgXFxcIkluZmluaUJhbmQgbWVkaWEgdHlwZSBzdXBwb3J0XFxcIlxcbiAgMjY6XFx0XFx0ZGVwZW5kcyBvbiBUSVBDIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkRfSVBPSUJcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGVuYWJsZSBzdXBwb3J0IGZvciBydW5uaW5nIFRJUEMgb25cXG4gIDI5OlxcdFxcdCAgSVAtb3Zlci1JbmZpbmlCYW5kIGRldmljZXMuXFxuICAzMDpcXHRjb25maWcgVElQQ19NRURJQV9VRFBcXG4gIDMxOlxcdFxcdGJvb2wgXFxcIklQL1VEUCBtZWRpYSB0eXBlIHN1cHBvcnRcXFwiXFxuICAzMjpcXHRcXHRkZXBlbmRzIG9uIFRJUENcXG4gIDMzOlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAgMzQ6XFx0XFx0ZGVmYXVsdCB5XFxuICAzNTpcXHRcXHRoZWxwXFxuICAzNjpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBlbmFibGUgc3VwcG9ydCBmb3IgcnVubmluZyBUSVBDIG92ZXIgSVAvVURQXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBUSVBDX0NSWVBUT1xcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiVElQQyBlbmNyeXB0aW9uIHN1cHBvcnRcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIFRJUENcXG4gIDQxOlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDQyOlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICA0MzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgNDQ6XFx0XFx0ZGVmYXVsdCB5XFxuICA0NTpcXHRcXHRoZWxwXFxuICA0NjpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBlbmFibGUgc3VwcG9ydCBmb3IgVElQQyBlbmNyeXB0aW9uLlxcbiAgNDc6XFx0XFx0ICBBbGwgVElQQyBtZXNzYWdlcyB3aWxsIGJlIGVuY3J5cHRlZC9kZWNyeXB0ZWQgYnkgdXNpbmcgdGhlIGN1cnJlbnRseSBtb3N0XFxuICA0ODpcXHRcXHQgIGFkdmFuY2VkIGFsZ29yaXRobTogQUVBRCBBRVMtR0NNIChsaWtlIElQU2VjIG9yIFRMUykgYmVmb3JlIGxlYXZpbmcvXFxuICA0OTpcXHRcXHQgIGVudGVyaW5nIHRoZSBUSVBDIHN0YWNrLlxcbiAgNTA6XFx0XFx0ICBLZXkgc2V0dGluZyBmcm9tIHVzZXItc3BhY2UgaXMgcGVyZm9ybWVkIHZpYSBuZXRsaW5rIGJ5IGEgdXNlciBwcm9ncmFtXFxuICA1MTpcXHRcXHQgIChlLmcuIHRoZSBpcHJvdXRlMiAndGlwYycgdG9vbCkuXFxuICA1MjpcXHRcXG4gIDUzOlxcdGNvbmZpZyBUSVBDX0RJQUdcXG4gIDU0OlxcdFxcdHRyaXN0YXRlIFxcXCJUSVBDOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuICA1NTpcXHRcXHRkZXBlbmRzIG9uIFRJUENcXG4gIDU2OlxcdFxcdGRlZmF1bHQgeVxcbiAgNTc6XFx0XFx0aGVscFxcbiAgNTg6XFx0XFx0U3VwcG9ydCBmb3IgVElQQyBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSBzcyB0b29sLlxcbiAgNTk6XFx0XFx0SWYgdW5zdXJlLCBzYXkgWS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDA6NTkuMjU3NTY1MTAyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc1NDA5MTk3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gYnVpbGRzIHRoZSBwcm90b2NvbCBtZXNzYWdlLCBzbyBsZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYC4gSSdsbCBqdW1wIHJpZ2h0IGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgbGluZXMgMTg4MCB0byAxOTIwIG9mIGBuZXQvdGlwYy9saW5rLmNgLiBUaGF0IGNodW5rIHNob3VsZCBnaXZlIG1lIGEgc29saWQgdmlldyBvZiB0aGUgY29yZSBsb2dpYyBpbnZvbHZlZCBpbiBjb25zdHJ1Y3RpbmcgdGhlIG1lc3NhZ2UuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLi4uIEknbSBsb29raW5nIGZvciB0aGUgbWVhdCBvZiB0aGUgbWVzc2FnZSBhc3NlbWJseSBwcm9jZXNzLCB0aGUgY3JpdGljYWwgc3RlcHMgaXQgdGFrZXMuIEknbSBleHBlY3RpbmcgdG8gc2VlIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbnMsIHBvdGVudGlhbGx5IGJ1ZmZlciBoYW5kbGluZywgYW5kIGRlZmluaXRlbHkgc29tZSBjcnVjaWFsIGFzc2lnbm1lbnRzIHJlbGF0ZWQgdG8gbWVzc2FnZSBmaWVsZHMuIEhvcGVmdWxseSB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowMToxNi43OTg0ODY3ODJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3RpcGMvbGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4ODA6XFx0XFx0XFx0aWYgKGwtXFx1MDAzZXBlZXJfY2FwcyBcXHUwMDI2IFRJUENfTElOS19QUk9UT19TRVFOTylcXG4xODgxOlxcdFxcdFxcdFxcdG1zZ19zZXRfc2Vxbm8oaGRyLCBsLVxcdTAwM2VzbmRfbnh0X3N0YXRlKyspO1xcbjE4ODI6XFx0XFx0XFx0bXNnX3NldF9zZXFfZ2FwKGhkciwgcmN2Z2FwKTtcXG4xODgzOlxcdFxcdFxcdGJjX3JjdmdhcCA9IGxpbmtfYmNfcmN2X2dhcChiY2wpO1xcbjE4ODQ6XFx0XFx0XFx0bXNnX3NldF9iY19nYXAoaGRyLCBiY19yY3ZnYXApO1xcbjE4ODU6XFx0XFx0XFx0bXNnX3NldF9wcm9iZShoZHIsIHByb2JlKTtcXG4xODg2OlxcdFxcdFxcdG1zZ19zZXRfaXNfa2VlcGFsaXZlKGhkciwgcHJvYmUgfHwgcHJvYmVfcmVwbHkpO1xcbjE4ODc6XFx0XFx0XFx0aWYgKGwtXFx1MDAzZXBlZXJfY2FwcyBcXHUwMDI2IFRJUENfR0FQX0FDS19CTE9DSylcXG4xODg4OlxcdFxcdFxcdFxcdGdsZW4gPSB0aXBjX2J1aWxkX2dhcF9hY2tfYmxrcyhsLCBoZHIpO1xcbjE4ODk6XFx0XFx0XFx0dGlwY19tb25fcHJlcChsLVxcdTAwM2VuZXQsIGRhdGEgKyBnbGVuLCBcXHUwMDI2ZGxlbiwgbXN0YXRlLCBsLVxcdTAwM2ViZWFyZXJfaWQpO1xcbjE4OTA6XFx0XFx0XFx0bXNnX3NldF9zaXplKGhkciwgSU5UX0hfU0laRSArIGdsZW4gKyBkbGVuKTtcXG4xODkxOlxcdFxcdFxcdHNrYl90cmltKHNrYiwgSU5UX0hfU0laRSArIGdsZW4gKyBkbGVuKTtcXG4xODkyOlxcdFxcdFxcdGwtXFx1MDAzZXN0YXRzLnNlbnRfc3RhdGVzKys7XFxuMTg5MzpcXHRcXHRcXHRsLVxcdTAwM2VyY3ZfdW5hY2tlZCA9IDA7XFxuMTg5NDpcXHRcXHR9IGVsc2Uge1xcbjE4OTU6XFx0XFx0XFx0LyogUkVTRVRfTVNHIG9yIEFDVElWQVRFX01TRyAqL1xcbjE4OTY6XFx0XFx0XFx0aWYgKG10eXAgPT0gQUNUSVZBVEVfTVNHKSB7XFxuMTg5NzpcXHRcXHRcXHRcXHRtc2dfc2V0X2Rlc3Rfc2Vzc2lvbl92YWxpZChoZHIsIDEpO1xcbjE4OTg6XFx0XFx0XFx0XFx0bXNnX3NldF9kZXN0X3Nlc3Npb24oaGRyLCBsLVxcdTAwM2VwZWVyX3Nlc3Npb24pO1xcbjE4OTk6XFx0XFx0XFx0fVxcbjE5MDA6XFx0XFx0XFx0bXNnX3NldF9tYXhfcGt0KGhkciwgbC1cXHUwMDNlYWR2ZXJ0aXNlZF9tdHUpO1xcbjE5MDE6XFx0XFx0XFx0bWVtY3B5KGRhdGEsIGwtXFx1MDAzZWlmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpO1xcbjE5MDI6XFx0XFx0XFx0bXNnX3NldF9zaXplKGhkciwgSU5UX0hfU0laRSArIFRJUENfTUFYX0lGX05BTUUpO1xcbjE5MDM6XFx0XFx0XFx0c2tiX3RyaW0oc2tiLCBJTlRfSF9TSVpFICsgVElQQ19NQVhfSUZfTkFNRSk7XFxuMTkwNDpcXHRcXHR9XFxuMTkwNTpcXHRcXHRpZiAocHJvYmUpXFxuMTkwNjpcXHRcXHRcXHRsLVxcdTAwM2VzdGF0cy5zZW50X3Byb2JlcysrO1xcbjE5MDc6XFx0XFx0aWYgKHJjdmdhcClcXG4xOTA4OlxcdFxcdFxcdGwtXFx1MDAzZXN0YXRzLnNlbnRfbmFja3MrKztcXG4xOTA5OlxcdFxcdGlmIChiY19yY3ZnYXApXFxuMTkxMDpcXHRcXHRcXHRiY2wtXFx1MDAzZXN0YXRzLnNlbnRfbmFja3MrKztcXG4xOTExOlxcdFxcdHNrYi1cXHUwMDNlcHJpb3JpdHkgPSBUQ19QUklPX0NPTlRST0w7XFxuMTkxMjpcXHRcXHRfX3NrYl9xdWV1ZV90YWlsKHhtaXRxLCBza2IpO1xcbjE5MTM6XFx0XFx0dHJhY2VfdGlwY19wcm90b19idWlsZChza2IsIGZhbHNlLCBsLVxcdTAwM2VuYW1lKTtcXG4xOTE0OlxcdH1cXG4xOTE1OlxcdFxcbjE5MTY6XFx0dm9pZCB0aXBjX2xpbmtfY3JlYXRlX2R1bW15X3RubF9tc2coc3RydWN0IHRpcGNfbGluayAqbCxcXG4xOTE3OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSlcXG4xOTE4OlxcdHtcXG4xOTE5OlxcdFxcdHUzMiBvbm9kZSA9IHRpcGNfb3duX2FkZHIobC1cXHUwMDNlbmV0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDE6MTYuNzk4NzA5MzMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg3MDM5ODY3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUSVBDIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWsgd2l0aGluIHRoZSBUSVBDIHByb3RvY29sLiBQcmV2aW91c2x5LCBgc3RyY3B5YCB3YXMgdXNlZCB0byBjb3B5IHRoZSBpbnRlcmZhY2UgbmFtZSAoYGwtXHUwMDNlaWZfbmFtZWApIGludG8gYSBtZXNzYWdlIGJ1ZmZlci4gVGhlIHByb2JsZW0gd2FzIHRoYXQgaWYgdGhlIGludGVyZmFjZSBuYW1lIHdhcyBzaG9ydGVyIHRoYW4gYFRJUENfTUFYX0lGX05BTUVgLCBgc3RyY3B5YCB3b3VsZG4ndCB6ZXJvLW91dCB0aGUgcmVtYWluaW5nIGJ5dGVzLCBwb3RlbnRpYWxseSBsZWF2aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBtZXNzYWdlLiBUaGUgcGF0Y2ggbm93IHJlcGxhY2VzIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIGluIGB0aXBjX2xpbmtfY3JlYXRlYCBhbmQgYHRpcGNfbGlua19iY19jcmVhdGVgLiBTaW5jZSBgbC1cdTAwM2VpZl9uYW1lYCBpcyAqZWl0aGVyKiB6ZXJvIGluaXRpYWxpemVkIGJ5IGBrY2FsbG9jYC9ga3phbGxvY2AgKm9yKiBwYWRkZWQgdG8gMCBieSBzdHJzY3B5LCB0aGUgc3Vic2VxdWVudCBgbWVtY3B5YCBjb3BpZXMgYSBmdWxseSB6ZXJvLXBhZGRlZCBuYW1lLCBtaXRpZ2F0aW5nIHRoZSBsZWFrLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBhbmQsIHRoZXJlZm9yZSwgd29ydGggZnV6emluZz8gQmFzZWQgb24gbXkgcHJpb3IgZXhwZXJpZW5jZSwgVElQQyBpcyBhIGdvb2QgdGFyZ2V0LiBJdCdzIGEgbmV0d29ya2luZyBwcm90b2NvbCBpbiBgbmV0L3RpcGMvYCwgYW5kLCB5ZXMsIGl0ICpjYW4qIGJlIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkndmUgc2VlbiBTeXprYWxsZXIgdGFyZ2V0IFRJUEMgZnJlcXVlbnRseSB3aXRoIGBzeXpfdGlwY18qYCBjYWxscywgYWxvbmcgd2l0aCB0aGUgc3RhbmRhcmQgc29ja2V0IGFuZCBuZXRsaW5rIG1ldGhvZHMuIEkga25vdyBpdCB3b3JrcyBvdmVyIGxvb3BiYWNrLCBVRFAsIGFuZCBFdGhlcm5ldC4gU28sIGFjY2Vzc2liaWxpdHkgaXNuJ3QgYSBwcm9ibGVtLlxuXG5MZXQgbWUgcXVpY2tseSByZS1yZWFkIHRoZSBpbnN0cnVjdGlvbnMuLi4gT2theSwgY2hlY2tpbmc6IElzIHRoaXMgYSBkb2N1bWVudGF0aW9uIGNoYW5nZT8gTm8uIElzIGl0IGRlY29yYXRpdmUgbGlrZSBsb2dnaW5nIG9yIHRyYWNlcG9pbnRzPyBOby4gQ29uc3RhbnRzIHRoYXQgZG9uJ3QgYWx0ZXIgZXhlY3V0aW9uPyBOb3BlLiBJbXBvc3NpYmxlIGNvZGUgcGF0aHM/IE5vLCB0aGlzIGlzIGtlcm5lbCBjb2RlLiBWZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmU/IE5vcGUuIFRlYXJkb3duIGNhbGxiYWNrcyBvbmx5PyBOby5cblxuVGhpcyBwYXRjaCBtb2RpZmllcyBjb3JlIFRJUEMgbGluayBjcmVhdGlvbiwgc3BlY2lmaWNhbGx5IGB0aXBjX2xpbmtfY3JlYXRlYCwgYHRpcGNfbGlua19iY19jcmVhdGVgLCBhbmQgYWxzbyB0aGUgbWVzc2FnZSBidWlsZGluZyBmdW5jdGlvbi4gTXkgdW5kZXJzdGFuZGluZywgZnJvbSBleHBlcmllbmNlLCBpcyB0aGF0IGB0aXBjX2xpbmtfY3JlYXRlYCBpcyBhbiBBUEkgZW50cnlwb2ludCBvciBoYXMgZXhwb3J0ZWQvY2FsbGVyIGZ1bmN0aW9ucywgYW5kIHRoZSBzYW1lIGlzIHRydWUgZm9yIGB0aXBjX2xpbmtfYmNfY3JlYXRlYCBhbmQgYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgLCB0aGF0IEkgc2hvdWxkIGludmVzdGlnYXRlIHdpdGggbXkgY29kZSBzZWFyY2ggdG9vbHMuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHRvdWNoZXMgcmVhY2hhYmxlLCBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHksIEkgdGhpbmsgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0OTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowMTozNS41MDI2OTkyMjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDU3MDk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX2xpbmtfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2xpbmsuYz00NDc9dTMyIHRpcGNfbGlua19zdGF0ZShzdHJ1Y3QgdGlwY19saW5rICpsKVxcbi0tXFxubmV0L3RpcGMvbGluay5jLTQ1Mi0vKipcXG5uZXQvdGlwYy9saW5rLmM6NDUzOiAqIHRpcGNfbGlua19jcmVhdGUgLSBjcmVhdGUgYSBuZXcgbGlua1xcbm5ldC90aXBjL2xpbmsuYy00NTQtICogQG5ldDogcG9pbnRlciB0byBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtNDc1LSAqL1xcbm5ldC90aXBjL2xpbmsuYzo0NzY6Ym9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCxcXG5uZXQvdGlwYy9saW5rLmMtNDc3LVxcdFxcdCAgICAgIGludCB0b2xlcmFuY2UsIGNoYXIgbmV0X3BsYW5lLCB1MzIgbXR1LCBpbnQgcHJpb3JpdHksXFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9NTUzPWJvb2wgdGlwY19saW5rX2JjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBvd25ub2RlLCB1MzIgcGVlciwgdTggKnBlZXJfaWQsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtNTYxLVxcbm5ldC90aXBjL2xpbmsuYzo1NjI6XFx0aWYgKCF0aXBjX2xpbmtfY3JlYXRlKG5ldCwgXFxcIlxcXCIsIE1BWF9CRUFSRVJTLCAwLCAnWicsIG10dSwgMCwgbWluX3dpbixcXG5uZXQvdGlwYy9saW5rLmMtNTYzLVxcdFxcdFxcdCAgICAgIG1heF93aW4sIDAsIG93bm5vZGUsIHBlZXIsIE5VTEwsIHBlZXJfY2FwcyxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xODMyPXN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTkxNS1cXG5uZXQvdGlwYy9saW5rLmM6MTkxNjp2b2lkIHRpcGNfbGlua19jcmVhdGVfZHVtbXlfdG5sX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLFxcbm5ldC90aXBjL2xpbmsuYy0xOTE3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSlcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0yMTA0PXZvaWQgdGlwY19saW5rX2ZhaWxvdmVyX3ByZXBhcmUoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHRpcGNfbGluayAqdG5sLFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTIxMDgtXFxubmV0L3RpcGMvbGluay5jOjIxMDk6XFx0dGlwY19saW5rX2NyZWF0ZV9kdW1teV90bmxfbXNnKHRubCwgeG1pdHEpO1xcbm5ldC90aXBjL2xpbmsuYy0yMTEwLVxcbi0tXFxubmV0L3RpcGMvbGluay5oPTYzPWVudW0ge1xcbi0tXFxubmV0L3RpcGMvbGluay5oLTczLVxcbm5ldC90aXBjL2xpbmsuaDo3NDpib29sIHRpcGNfbGlua19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppZl9uYW1lLCBpbnQgYmVhcmVyX2lkLFxcbm5ldC90aXBjL2xpbmsuaC03NS1cXHRcXHQgICAgICBpbnQgdG9sZXJhbmNlLCBjaGFyIG5ldF9wbGFuZSwgdTMyIG10dSwgaW50IHByaW9yaXR5LFxcbi0tXFxubmV0L3RpcGMvbGluay5oPTg5PXZvaWQgdGlwY19saW5rX3RubF9wcmVwYXJlKHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCB0aXBjX2xpbmsgKnRubCxcXG5uZXQvdGlwYy9saW5rLmgtOTAtXFx0XFx0XFx0ICAgaW50IG10eXAsIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcXG5uZXQvdGlwYy9saW5rLmg6OTE6dm9pZCB0aXBjX2xpbmtfY3JlYXRlX2R1bW15X3RubF9tc2coc3RydWN0IHRpcGNfbGluayAqdG5sLFxcbm5ldC90aXBjL2xpbmsuaC05Mi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpO1xcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTExNzM9dm9pZCB0aXBjX25vZGVfY2hlY2tfZGVzdChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyLFxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTEyODMtXFx0XFx0c2Vzc2lvbiA9IGdldF9yYW5kb21fdTE2KCk7XFxubmV0L3RpcGMvbm9kZS5jOjEyODQ6XFx0XFx0aWYgKCF0aXBjX2xpbmtfY3JlYXRlKG5ldCwgaWZfbmFtZSwgYi1cXHUwMDNlaWRlbnRpdHksIGItXFx1MDAzZXRvbGVyYW5jZSxcXG5uZXQvdGlwYy9ub2RlLmMtMTI4NS1cXHRcXHRcXHRcXHQgICAgICBiLVxcdTAwM2VuZXRfcGxhbmUsIGItXFx1MDAzZW10dSwgYi1cXHUwMDNlcHJpb3JpdHksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAxOjM1LjY3MzI3NDk5M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzI4NTM4MzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYHRpcGNfbGlua19iY19jcmVhdGVgIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgZmlndXJlIG91dCB3aG8ncyBjYWxsaW5nIGB0aXBjX2xpbmtfYmNfY3JlYXRlYC5cIiBUaGF0IGZ1bmN0aW9uIGlzIGtleSB0byBob3cgdGhpcyBwYXJ0IG9mIHRoZSBzeXN0ZW0gd29ya3MsIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyB1c2FnZSBpcyBjcml0aWNhbCBmb3IgYW55IGRlYnVnZ2luZywgb3B0aW1pemF0aW9uLCBvciBpbXBhY3QgYXNzZXNzbWVudCBJIG1pZ2h0IG5lZWQgdG8gZG8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHRzLiBBIGRlZXAgZGl2ZSBpcyB0aGUgb25seSB3YXkgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg3NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAxOjQwLjAwMTgxNTYzMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExODI5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19saW5rX2JjX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9iY2FzdC5jPTY5NT1pbnQgdGlwY19iY2FzdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC90aXBjL2JjYXN0LmMtNzA2LVxcbm5ldC90aXBjL2JjYXN0LmM6NzA3OlxcdGlmICghdGlwY19saW5rX2JjX2NyZWF0ZShuZXQsIDAsIDAsIE5VTEwsXFxubmV0L3RpcGMvYmNhc3QuYy03MDgtXFx0XFx0XFx0XFx0IG9uZV9wYWdlX210dSxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz00NzY9Ym9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy01MzYtLyoqXFxubmV0L3RpcGMvbGluay5jOjUzNzogKiB0aXBjX2xpbmtfYmNfY3JlYXRlIC0gY3JlYXRlIG5ldyBsaW5rIHRvIGJlIHVzZWQgZm9yIGJyb2FkY2FzdFxcbm5ldC90aXBjL2xpbmsuYy01MzgtICogQG5ldDogcG9pbnRlciB0byBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtNTUyLSAqL1xcbm5ldC90aXBjL2xpbmsuYzo1NTM6Ym9vbCB0aXBjX2xpbmtfYmNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG93bm5vZGUsIHUzMiBwZWVyLCB1OCAqcGVlcl9pZCxcXG5uZXQvdGlwYy9saW5rLmMtNTU0LVxcdFxcdFxcdCBpbnQgbXR1LCB1MzIgbWluX3dpbiwgdTMyIG1heF93aW4sIHUxNiBwZWVyX2NhcHMsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmg9NzQ9Ym9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCxcXG4tLVxcbm5ldC90aXBjL2xpbmsuaC04Mi1cXHRcXHQgICAgICBzdHJ1Y3QgdGlwY19saW5rICoqbGluayk7XFxubmV0L3RpcGMvbGluay5oOjgzOmJvb2wgdGlwY19saW5rX2JjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBvd25ub2RlLCB1MzIgcGVlciwgdTggKnBlZXJfaWQsXFxubmV0L3RpcGMvbGluay5oLTg0LVxcdFxcdFxcdCBpbnQgbXR1LCB1MzIgbWluX3dpbiwgdTMyIG1heF93aW4sIHUxNiBwZWVyX2NhcHMsXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9NDY4PXN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkciwgdTggKnBlZXJfaWQsXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtNDg4LVxcdFxcdHRpcGNfbm9kZV93cml0ZV9sb2NrKG4pO1xcbm5ldC90aXBjL25vZGUuYzo0ODk6XFx0XFx0aWYgKCF0aXBjX2xpbmtfYmNfY3JlYXRlKG5ldCwgdGlwY19vd25fYWRkcihuZXQpLCBhZGRyLCBwZWVyX2lkLCBVMTZfTUFYLFxcbm5ldC90aXBjL25vZGUuYy00OTAtXFx0XFx0XFx0XFx0XFx0IHRpcGNfbGlua19taW5fd2luKHNuZF9sKSwgdGlwY19saW5rX21heF93aW4oc25kX2wpLFxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTU3OC1cXHRpZiAoIXByZWxpbWluYXJ5IFxcdTAwMjZcXHUwMDI2XFxubmV0L3RpcGMvbm9kZS5jOjU3OTpcXHQgICAgIXRpcGNfbGlua19iY19jcmVhdGUobmV0LCB0aXBjX293bl9hZGRyKG5ldCksIGFkZHIsIHBlZXJfaWQsIFUxNl9NQVgsXFxubmV0L3RpcGMvbm9kZS5jLTU4MC1cXHRcXHRcXHRcXHQgdGlwY19saW5rX21pbl93aW4oc25kX2wpLCB0aXBjX2xpbmtfbWF4X3dpbihzbmRfbCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAxOjQwLjA1MzAwNDY0MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDA5MDgxOTM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYCBDYWxsZXJzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZ2AgZnVuY3Rpb24gY2FsbHMuIEl0J3MgdGltZSB0byBmaWd1cmUgb3V0IHdoYXQncyB1c2luZyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gd2l0aGluIHRoZSBsYXJnZXIgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXItUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBmcmFtZXdvcmsuIFRoZSBzcGVjaWZpY3Mgd2lsbCBkZXBlbmQgb24gdGhlIGxhcmdlciBjb250ZXh0IG9mIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBkb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gY3JlYXRpbmcgb3IgY29uc3RydWN0aW5nIHByb3RvY29sIG1lc3NhZ2VzIGZvciBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gd2l0aGluIHRoZSBjbHVzdGVyLiBGcm9tIHRoYXQgcG9pbnQgSSBjYW4gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGFuZCBwb3NzaWJsZSBlZmZlY3RzIGZvciBhbnkgY2hhbmdlcyBJIHdvdWxkIG1ha2UuIERlcGVuZGluZyBvbiB3aGF0IEkgbGVhcm4sIEkgbWF5IGFsc28gZGVjaWRlIHRvIHJlc2VhcmNoIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uIE5vdywgbGV0J3MgZ2V0IGRvd24gdG8gaXQsIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgxNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAxOjU0LjE0MzgyNjQ5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU1MzEyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19saW5rX2J1aWxkX3Byb3RvX21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9saW5rLmM9MjQ0PXN0YXRpYyBpbnQgdGlwY19saW5rX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC90aXBjL2xpbmsuYy0yNDUtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcXG5uZXQvdGlwYy9saW5rLmM6MjQ2OnN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsXFxubmV0L3RpcGMvbGluay5jLTI0Ny1cXHRcXHRcXHRcXHQgICAgICBib29sIHByb2JlX3JlcGx5LCB1MTYgcmN2Z2FwLFxcbi0tXFxubmV0L3RpcGMvbGluay5jPTgxNj1pbnQgdGlwY19saW5rX3RpbWVvdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtODY5LVxcdGlmIChzdGF0ZSB8fCBwcm9iZSB8fCBzZXR1cClcXG5uZXQvdGlwYy9saW5rLmM6ODcwOlxcdFxcdHRpcGNfbGlua19idWlsZF9wcm90b19tc2cobCwgbXR5cCwgcHJvYmUsIDAsIDAsIDAsIDAsIHhtaXRxKTtcXG5uZXQvdGlwYy9saW5rLmMtODcxLVxcbi0tXFxubmV0L3RpcGMvbGluay5jPTE2ODg9aW50IHRpcGNfbGlua19idWlsZF9zdGF0ZV9tc2coc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTcwNS1cXHRsLVxcdTAwM2VzdGF0cy5zZW50X2Fja3MrKztcXG5uZXQvdGlwYy9saW5rLmM6MTcwNjpcXHR0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKGwsIFNUQVRFX01TRywgMCwgMCwgMCwgMCwgMCwgeG1pdHEpO1xcbm5ldC90aXBjL2xpbmsuYy0xNzA3LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTE3MTI9dm9pZCB0aXBjX2xpbmtfYnVpbGRfcmVzZXRfbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxcbi0tXFxubmV0L3RpcGMvbGluay5jLTE3MTktXFxubmV0L3RpcGMvbGluay5jOjE3MjA6XFx0dGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhsLCBtdHlwLCAwLCAwLCAwLCAwLCAwLCB4bWl0cSk7XFxubmV0L3RpcGMvbGluay5jLTE3MjEtXFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9MTczMj1zdGF0aWMgaW50IHRpcGNfbGlua19idWlsZF9uYWNrX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTE3NTAtXFxubmV0L3RpcGMvbGluay5jOjE3NTE6XFx0XFx0dGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhsLCBTVEFURV9NU0csIDAsIDAsXFxubmV0L3RpcGMvbGluay5jLTE3NTItXFx0XFx0XFx0XFx0XFx0ICByY3ZnYXAsIDAsIDAsIHhtaXRxKTtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xNzYyPWludCB0aXBjX2xpbmtfcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTgzMS1cXG5uZXQvdGlwYy9saW5rLmM6MTgzMjpzdGF0aWMgdm9pZCB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsIGludCBtdHlwLCBib29sIHByb2JlLFxcbm5ldC90aXBjL2xpbmsuYy0xODMzLVxcdFxcdFxcdFxcdCAgICAgIGJvb2wgcHJvYmVfcmVwbHksIHUxNiByY3ZnYXAsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9MjE3ND1zdGF0aWMgaW50IHRpcGNfbGlua19wcm90b19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0yMzEwLVxcdFxcdGlmIChyY3ZnYXAgfHwgcmVwbHkpXFxubmV0L3RpcGMvbGluay5jOjIzMTE6XFx0XFx0XFx0dGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhsLCBTVEFURV9NU0csIDAsIHJlcGx5LFxcbm5ldC90aXBjL2xpbmsuYy0yMzEyLVxcdFxcdFxcdFxcdFxcdFxcdCAgcmN2Z2FwLCAwLCAwLCB4bWl0cSk7XFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9Mjg2Mj12b2lkIHRpcGNfbGlua19zZXRfdG9sZXJhbmNlKHN0cnVjdCB0aXBjX2xpbmsgKmwsIHUzMiB0b2wsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMjg2OC1cXHRpZiAodGlwY19saW5rX2lzX3VwKGwpKVxcbm5ldC90aXBjL2xpbmsuYzoyODY5OlxcdFxcdHRpcGNfbGlua19idWlsZF9wcm90b19tc2cobCwgU1RBVEVfTVNHLCAwLCAwLCAwLCB0b2wsIDAsIHhtaXRxKTtcXG5uZXQvdGlwYy9saW5rLmMtMjg3MC19XFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9Mjg3Mj12b2lkIHRpcGNfbGlua19zZXRfcHJpbyhzdHJ1Y3QgdGlwY19saW5rICpsLCB1MzIgcHJpbyxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0yODc1LVxcdGwtXFx1MDAzZXByaW9yaXR5ID0gcHJpbztcXG5uZXQvdGlwYy9saW5rLmM6Mjg3NjpcXHR0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKGwsIFNUQVRFX01TRywgMCwgMCwgMCwgMCwgcHJpbywgeG1pdHEpO1xcbm5ldC90aXBjL2xpbmsuYy0yODc3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDE6NTQuMjA5MzYwMzk2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3OTk0NTkyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVElQQyBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiBjb25maWd1cmluZyBUSVBDLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBjb25zdWx0IHRoZSBLY29uZmlnIGZpbGVzLCBzbyBJJ20gaGVhZGluZyBzdHJhaWdodCB0byBgbmV0L3RpcGMvS2NvbmZpZ2AuIFJpZ2h0LCBoZXJlIHdlIHNlZSBgVElQQ2AgaXMgZGVwZW5kZW50IG9uIGBJTkVUYC4gT2theSwgdGhhdCdzIG5vdCB1bmV4cGVjdGVkLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyBUSVBDIGlzIGFjdHVhbGx5ICpidWlsdCogd2l0aGluIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byBjaGVjayBlaXRoZXIgdGhlIG1haW4gYG5ldC9LY29uZmlnYCBmaWxlLCBvciBwZXJoYXBzIHRoZSBgbmV0L3RpcGMvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGFueSBwb3RlbnRpYWwgYnVpbGQgZmxhZ3Mgb3IgbW9kdWxlcyB0aGF0IGNvbWUgaW50byBwbGF5LiBVbmRlcnN0YW5kaW5nIHRob3NlIGRldGFpbHMgd2lsbCBlbnN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gaXMgY29tcGxldGUgYW5kIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjY1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDI6MDAuMDA4ODIyNTQzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IFRJUEMgbGF5ZXJcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX1RJUEMpIDo9IHRpcGMub1xcbiAgIDc6XFx0XFxuICAgODpcXHR0aXBjLXlcXHQrPSBhZGRyLm8gYmNhc3QubyBiZWFyZXIubyBcXFxcXFxuICAgOTpcXHRcXHQgICBjb3JlLm8gbGluay5vIGRpc2NvdmVyLm8gbXNnLm8gIFxcXFxcXG4gIDEwOlxcdFxcdCAgIG5hbWVfZGlzdHIubyAgc3Vic2NyLm8gbW9uaXRvci5vIG5hbWVfdGFibGUubyBuZXQubyAgXFxcXFxcbiAgMTE6XFx0XFx0ICAgbmV0bGluay5vIG5ldGxpbmtfY29tcGF0Lm8gbm9kZS5vIHNvY2tldC5vIGV0aF9tZWRpYS5vIFxcXFxcXG4gIDEyOlxcdFxcdCAgIHRvcHNydi5vIGdyb3VwLm8gdHJhY2Uub1xcbiAgMTM6XFx0XFxuICAxNDpcXHRDRkxBR1NfdHJhY2UubyArPSAtSSQoc3JjKVxcbiAgMTU6XFx0XFxuICAxNjpcXHR0aXBjLSQoQ09ORklHX1RJUENfTUVESUFfVURQKVxcdCs9IHVkcF9tZWRpYS5vXFxuICAxNzpcXHR0aXBjLSQoQ09ORklHX1RJUENfTUVESUFfSUIpXFx0Kz0gaWJfbWVkaWEub1xcbiAgMTg6XFx0dGlwYy0kKENPTkZJR19TWVNDVEwpXFx0XFx0Kz0gc3lzY3RsLm9cXG4gIDE5OlxcdHRpcGMtJChDT05GSUdfVElQQ19DUllQVE8pXFx0Kz0gY3J5cHRvLm9cXG4gIDIwOlxcdFxcbiAgMjE6XFx0b2JqLSQoQ09ORklHX1RJUENfRElBRylcXHQrPSB0aXBjX2RpYWcub1xcbiAgMjI6XFx0dGlwY19kaWFnLXlcXHQrPSBkaWFnLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDI6MDAuMDA4ODgxNTMzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNTk4NzA2ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRJUEMgTGluayBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUga2V5IGZ1bmN0aW9uIHN5bWJvbHMgYWZmZWN0ZWQuIEkndmUgbm90ZWQgYSBmZXcgbm9uLXN0YXRpYyBvbmVzIHJlbGF0ZWQgdG8gbGluayBjcmVhdGlvbiBhbmQgbWVzc2FnaW5nOiBgdGlwY19saW5rX2NyZWF0ZWAsIGB0aXBjX2xpbmtfYmNfY3JlYXRlYCwgYHRpcGNfbGlua19idWlsZF9yZXNldF9tc2dgLCBhbmQgYHRpcGNfbGlua190aW1lb3V0YC4gVGhlbiB0aGVyZSdzIGB0aXBjX2xpbmtfcHJvdG9fcmN2YCB3aGljaCBpcyBzdGF0aWMsIGJ1dCBjbG9zZWx5IGxpbmtlZCB0byB0aGUgbm9uLXN0YXRpYyBgdGlwY19saW5rX3JjdmAsIHNvIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aGF0LiBBZnRlciB0aGF0IEkgaGF2ZSB0byBjb25maXJtIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGxpbmsgY3JlYXRpb24vbWVzc2FnZSBmdW5jdGlvbnM6IGB0aXBjX25vZGVfY2hlY2tfZGVzdGAsIGB0aXBjX2xpbmtfcmN2YC4gVGhpcyBsb29rcyBwcmV0dHkgY29tcHJlaGVuc2l2ZSBpbiB0ZXJtcyBvZiB0aGUgYXJlYXMgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5UaGUgbWFpbiBzeW1ib2xzIEkgbmVlZCB0byBwcmlvcml0aXplIGFyZTogYHRpcGNfbGlua19jcmVhdGVgLCBgdGlwY19saW5rX2JjX2NyZWF0ZWAsIGFuZCBgdGlwY19saW5rX2J1aWxkX3Jlc2V0X21zZ2AuIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIHNjcnV0aW5pemUgdGhlaXIgaW50ZXJhY3Rpb25zIGNhcmVmdWxseS5cblxuTmV4dCwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBUSVBDYCBpcyB0aGUgcHJpbWFyeSBmZWF0dXJlIG9mIGludGVyZXN0LCBhbmQgb2YgY291cnNlLCBpdCBkZXBlbmRzIG9uIGBJTkVUYC4gSSdsbCBhbHNvIGdsYW5jZSB0aHJvdWdoIGBuZXQvdGlwYy9LY29uZmlnYCBhbmQgYG5ldC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50OyBJIHNhdyB0aGF0IGBJTkVUYCBpcyBzdGFuZGFyZCBpbiBgbmV0L2lwdjRgLCBhbmQgYFRJUENgIGlzIHRyaXN0YXRlIGFuZCBkZXBlbmRzIG9uIGBJTkVUYC5cblxuTm93LCBsZXQncyByZS1leGFtaW5lIHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzLiBJIHNlZSB0aGV5J3ZlIHJlcGxhY2VkIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHdoZW4gY29weWluZyBpbnRlcmZhY2UvbGluayBuYW1lcyDigJMgYSBnb29kIG1vdmUgZm9yIGJ1ZmZlciBvdmVyZmxvdyBwcmV2ZW50aW9uLiBBbHNvLCBgc3RyY3B5YCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBtZW1jcHlgIHdoZW4gY29uc3RydWN0aW5nIHByb3RvY29sIG1lc3NhZ2VzLCBzcGVjaWZpY2FsbHkgdG8gYWRkcmVzcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciBsZWFrcyBvZiB1bmluaXRpYWxpemVkIGRhdGEgd2l0aGluIHRoZSBgc2tiYC4gVGhhdCdzIGEgc29saWQgZGVmZW5zZSBhZ2FpbnN0IGRhdGEgbGVha3MhXG5cbkZpbmFsbHksIEkgaGF2ZSB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIHJlbGV2YW50IHRvIGZ1enppbmcuIEdpdmVuIHRoYXQgdGhpcyBpcyB0aGUgVElQQyBuZXR3b3JrIHByb3RvY29sIHN0YWNrLCBJJ20gY29uZmlkZW50IHRoYXQgaXQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIEdDRSwgbWFraW5nIGl0IGFwcHJvcHJpYXRlIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgYHN0cmNweWAgYW5kIGBtZW1jcHlgIGNoYW5nZXMsIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5BbHJpZ2h0LCBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIEFsbCB0aGUgYmFzZXMgYXJlIGNvdmVyZWQsIGFuZCB0aGUgcmVhc29uaW5nIGlzIHNvdW5kLiBOb3cgaXQncyB0aW1lIHRvIGluZm9ybSB0aGUgdGVhbSBieSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODg0LCJPdXRwdXRUb2tlbnMiOjExNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAyOjEyLjYwNzU5NDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzExNjQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfbGlua19jcmVhdGVcIixcbiAgICBcInRpcGNfbGlua19iY19jcmVhdGVcIixcbiAgICBcInRpcGNfbGlua19idWlsZF9yZXNldF9tc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUSVBDIGxpbmsgaW5pdGlhbGl6YXRpb24gYW5kIHByb3RvY29sIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljIGluIG5ldC90aXBjL2xpbmsuYyAodXNpbmcgc3Ryc2NweSBhbmQgYm91bmRlZCBtZW1jcHkgaW5zdGVhZCBvZiBzdHJjcHkpLiBUSVBDIGlzIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX2xpbmtfY3JlYXRlXCIsXG4gICAgXCJ0aXBjX2xpbmtfYmNfY3JlYXRlXCIsXG4gICAgXCJ0aXBjX2xpbmtfYnVpbGRfcmVzZXRfbXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgVElQQyBsaW5rIGluaXRpYWxpemF0aW9uIGFuZCBwcm90b2NvbCBtZXNzYWdlIGNvbnN0cnVjdGlvbiBsb2dpYyBpbiBuZXQvdGlwYy9saW5rLmMgKHVzaW5nIHN0cnNjcHkgYW5kIGJvdW5kZWQgbWVtY3B5IGluc3RlYWQgb2Ygc3RyY3B5KS4gVElQQyBpcyBmdWxseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDI6MTIuNjg0NzE3NzFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDgyMjQ2NzgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAyOjEyLjY4NTE3NTk3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk0ODIyMDA0MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyB1bnNhZmUgYHN0cmNweWAgY2FsbHMgd2l0aCBgc3Ryc2NweWAgaW4gYHRpcGNfbGlua19jcmVhdGVgIGFuZCBgdGlwY19saW5rX2JjX2NyZWF0ZWAsIGFuZCBjaGFuZ2VzIGBzdHJjcHlgIHRvIGBtZW1jcHkoZGF0YSwgbC1cXHUwMDNlaWZfbmFtZSwgVElQQ19NQVhfSUZfTkFNRSlgIGluIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYC5cXG5cXG5UaGUgYHN0cnVjdCB0aXBjX2xpbmtgIGluc3RhbmNlIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKCpsLCBHRlBfQVRPTUlDKWAsIGVuc3VyaW5nIHRoYXQgYWxsIGZpZWxkcyBpbmNsdWRpbmcgYGwtXFx1MDAzZWlmX25hbWVgIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBDb3B5aW5nIGBUSVBDX01BWF9JRl9OQU1FYCBieXRlcyBmcm9tIGBsLVxcdTAwM2VpZl9uYW1lYCBpbnRvIHRoZSBwYWNrZXQgcGF5bG9hZCBgZGF0YWAgcmVhZHMgb25seSBmdWxseSBpbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgY29uZGl0aW9uYWwgYnJhbmNoaW5nLCBvciB1c2VyLXNwYWNlIGluZm8gbGVha3MuXFxuXFxuU3RhbmRhcmQgS0FTQU4gYW5kIGNvbXBpbGVyIGZvcnRpZmljYXRpb25zIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIG9yIGJ1ZmZlciBvdmVyZmxvdyBidWdzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YTFiZmNlMDNlYzhiNTkzNWQzNGFlYjg0OGY2ODFmZmI5ZDU3NzliXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTM6MDA6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmMgYi9uZXQvdGlwYy9saW5rLmNcbmluZGV4IDQ5ZGZjMDk4ZDg5YjIuLjY0MjdjNjlmODkyOTQgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9saW5rLmNcbisrKyBiL25ldC90aXBjL2xpbmsuY1xuQEAgLTUwNCw3ICs1MDQsNyBAQCBib29sIHRpcGNfbGlua19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppZl9uYW1lLCBpbnQgYmVhcmVyX2lkLFxuIFx0c25wcmludGYobC1cdTAwM2VuYW1lLCBzaXplb2YobC1cdTAwM2VuYW1lKSwgXCIlczolcy0lczp1bmtub3duXCIsXG4gXHRcdCBzZWxmX3N0ciwgaWZfbmFtZSwgcGVlcl9zdHIpO1xuIFxuLVx0c3RyY3B5KGwtXHUwMDNlaWZfbmFtZSwgaWZfbmFtZSk7XG4rXHRzdHJzY3B5KGwtXHUwMDNlaWZfbmFtZSwgaWZfbmFtZSk7XG4gXHRsLVx1MDAzZWFkZHIgPSBwZWVyO1xuIFx0bC1cdTAwM2VwZWVyX2NhcHMgPSBwZWVyX2NhcHM7XG4gXHRsLVx1MDAzZW5ldCA9IG5ldDtcbkBAIC01NzQsNyArNTc0LDcgQEAgYm9vbCB0aXBjX2xpbmtfYmNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG93bm5vZGUsIHUzMiBwZWVyLCB1OCAqcGVlcl9pZCxcbiBcdFx0c25wcmludGYobC1cdTAwM2VuYW1lLCBzaXplb2YobC1cdTAwM2VuYW1lKSwgXCIlczolc1wiLCB0aXBjX2JjbGlua19uYW1lLFxuIFx0XHRcdCBwZWVyX3N0cik7XG4gXHR9IGVsc2Uge1xuLVx0XHRzdHJjcHkobC1cdTAwM2VuYW1lLCB0aXBjX2JjbGlua19uYW1lKTtcbitcdFx0c3Ryc2NweShsLVx1MDAzZW5hbWUsIHRpcGNfYmNsaW5rX25hbWUpO1xuIFx0fVxuIFx0dHJhY2VfdGlwY19saW5rX3Jlc2V0KGwsIFRJUENfRFVNUF9BTEwsIFwiYmNsaW5rIGNyZWF0ZWQhXCIpO1xuIFx0dGlwY19saW5rX3Jlc2V0KGwpO1xuQEAgLTE4OTgsNyArMTg5OCw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsXG4gXHRcdFx0bXNnX3NldF9kZXN0X3Nlc3Npb24oaGRyLCBsLVx1MDAzZXBlZXJfc2Vzc2lvbik7XG4gXHRcdH1cbiBcdFx0bXNnX3NldF9tYXhfcGt0KGhkciwgbC1cdTAwM2VhZHZlcnRpc2VkX210dSk7XG4tXHRcdHN0cmNweShkYXRhLCBsLVx1MDAzZWlmX25hbWUpO1xuK1x0XHRtZW1jcHkoZGF0YSwgbC1cdTAwM2VpZl9uYW1lLCBUSVBDX01BWF9JRl9OQU1FKTtcbiBcdFx0bXNnX3NldF9zaXplKGhkciwgSU5UX0hfU0laRSArIFRJUENfTUFYX0lGX05BTUUpO1xuIFx0XHRza2JfdHJpbShza2IsIElOVF9IX1NJWkUgKyBUSVBDX01BWF9JRl9OQU1FKTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAyOjEyLjY4NTE3Njg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1Njc2NzkwMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgSnVzdGlmaWNhdGlvbjogQSBRdWljayBDb2RlIFF1YWxpdHkgQ2hlY2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIFRoZSB0YXNrIGlzIHRvIGRlY2lkZSBpZiB0aGlzIGBuZXQvdGlwYy9saW5rLmNgIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgYmV5b25kIHdoYXQgS0FTQU4gYWxyZWFkeSBwcm92aWRlcy4gVGhpcyBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkLCBsb3ctc3Rha2VzIGNvZGUgcXVhbGl0eSBhc3Nlc3NtZW50IOKAkyBwdXJlbHkgZGVmZW5zaXZlLiBNeSBpbml0aWFsIGNsYXNzaWZpY2F0aW9uIGlzIFwiYmVuaWduXCIgYW5kIFwibm9uZVwiIGZvciBzZXZlcml0eTsgaXQncyBzYWZlIHRvIHByb2NlZWQuXG5cbkZpcnN0LCBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBkaWZmLiBPa2F5LCBzbyB3ZSdyZSByZXBsYWNpbmcgYSBjb3VwbGUgb2YgYHN0cmNweWAgY2FsbHMgd2l0aCBgc3Ryc2NweWAgYW5kIGEgYHN0cmNweWAgaW4gYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgIHdpdGggYG1lbWNweWAuIFRoaXMgaW1tZWRpYXRlbHkgc2NyZWFtcyBcImJ1ZmZlciBvdmVyZmxvdyBwcmV2ZW50aW9uLFwiIHdoaWNoIGlzIGEgZ29vZCB0aGluZy4gVGhlIHVzZSBvZiBgc3Ryc2NweWAgbWFrZXMgbWUgc3VzcGVjdCB0aGF0IHRoZXkgYXJlIGd1YXJkaW5nIGFnYWluc3QgYnVmZmVyIG92ZXJydW5zIHdoZW4gY29weWluZyB0aGUgaW50ZXJmYWNlIG5hbWUsIGxpa2VseSBmcm9tIHVzZXItY29udHJvbGxlZCBpbnB1dC4gTWFrZXMgc2Vuc2UuIEJ1dCBpcyBpdCAqZW5vdWdoKj9cblxuTm93LCBiZWZvcmUgSSBqdW1wIHRvIGEgY29uY2x1c2lvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gTGV0IG1lIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBhcm91bmQgYHRpcGNfbGlua19jcmVhdGVgIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB0aXBjX2xpbmtgLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgc2l6ZSBvZiBgbC1cdTAwM2VpZl9uYW1lYCB0byBiZSBjZXJ0YWluIHRoZSBgc3Ryc2NweWAgY2FsbHMgYXJlIHN1ZmZpY2llbnQuIEFsc28sIG5lZWQgdG8gZW5zdXJlIHRoZSB1c2Ugb2YgYG1lbWNweWAgaW4gYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgIGlzIGNvcnJlY3QsIGFuZCBub3QgdnVsbmVyYWJsZSB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gSSdsbCB1c2UgYSBmaWxlIHJlYWRlciB0byBkbyBzby4gSSdsbCBhbHNvIHVzZSBpdCB0byBjaGVjayB0aGUgb3RoZXIgcGxhY2VzIHdoZXJlIHRoZSBzdHJ1Y3QgaXMgdXNlZC5cblxuSSB3aWxsIHVzZSB0aGF0IGluZm9ybWF0aW9uIHRvIGFzc2VzcyB0aGUgcmlza3MgZnJvbSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCB0byBkZWNpZGUgaWYgS01TQU4gaXMgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDI6NDguMzYxOTcxMTE3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc0NTEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGlwY19saW5rIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2xpbmsuYz01MT1zdHJ1Y3QgdGlwY19zdGF0cyB7XFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTM2LSAqL1xcbm5ldC90aXBjL2xpbmsuYzoxMzc6c3RydWN0IHRpcGNfbGluayB7XFxubmV0L3RpcGMvbGluay5jLTEzOC1cXHR1MzIgYWRkcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDI6NDguNDEyNzIzMDc2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MTQ4NzkyNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBUSVBDIExpbmsgQ29kZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBgbmV0L3RpcGMvbGluay5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gYSBmZXcgc3BlY2lmaWMgYXJlYXMgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nLiBJJ20gZ29pbmcgdG8ganVtcCBhcm91bmQsIHN0YXJ0aW5nIHdpdGggbGluZSAxMzcuIEkgd2FudCB0byBzZWUgaG93IHRoZXkncmUgaGFuZGxpbmcgdGhlIGZ1bmRhbWVudGFsIHNldHVwIG9yIGluaXRpYWxpemF0aW9uIG9mIGEgVElQQyBsaW5rLiBUaGVuLCBJJ2xsIGdvIGZ1cnRoZXIgZG93biB0byBsaW5lIDUwNC4gSSdtIHN1c3BlY3RpbmcgdGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgbG9naWMgZm9yIGhhbmRsaW5nIGNvbm5lY3Rpb24gc3RhdGUsIG1heWJlIGR1cmluZyBhIHJldHJhbnNtaXQgb3Igc29tZSBvdGhlciBpc3N1ZS4gQWZ0ZXIgdGhhdCwgSSdsbCBsZWFwIHRvIGxpbmUgNTc0IC0gSSBiZXQgdGhhdCdzIHdoZXJlIHRoZXkgbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgYSBsaW5rIG9yIG1heWJlIHRoZSB0ZWFyZG93biBwcm9jZWR1cmUuIExhc3RseSwgSSdsbCB6b29tIHdheSBkb3duIHRvIGxpbmUgMTg5OC4gVGhhdCdzIGdldHRpbmcgcHJldHR5IGRlZXAgaW50byB0aGUgY29kZSwgc28gdGhhdCBoYXMgdG8gYmUgZWl0aGVyIGFuIGVycm9yIGhhbmRsaW5nIHByb2NlZHVyZSBvciBzb21lIHJlYWxseSBsb3ctbGV2ZWwgc3R1ZmYgcmVnYXJkaW5nIHRoZSB0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uIG9mIGZyYW1lcy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhleSBkZWFsIHdpdGggdGhlIHNwZWNpZmljIG5pdHR5LWdyaXR0eSBvZiB0aGUgbGluayBsYXllci4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVzZSBzZWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAzOjEzLjU2MTUxODY2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGlwYy9saW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM3LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTM3OlxcdHN0cnVjdCB0aXBjX2xpbmsge1xcbiAxMzg6XFx0XFx0dTMyIGFkZHI7XFxuIDEzOTpcXHRcXHRjaGFyIG5hbWVbVElQQ19NQVhfTElOS19OQU1FXTtcXG4gMTQwOlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0LyogTWFuYWdlbWVudCBhbmQgbGluayBzdXBlcnZpc2lvbiBkYXRhICovXFxuIDE0MzpcXHRcXHR1MTYgcGVlcl9zZXNzaW9uO1xcbiAxNDQ6XFx0XFx0dTE2IHNlc3Npb247XFxuIDE0NTpcXHRcXHR1MTYgc25kX254dF9zdGF0ZTtcXG4gMTQ2OlxcdFxcdHUxNiByY3Zfbnh0X3N0YXRlO1xcbiAxNDc6XFx0XFx0dTMyIHBlZXJfYmVhcmVyX2lkO1xcbiAxNDg6XFx0XFx0dTMyIGJlYXJlcl9pZDtcXG4gMTQ5OlxcdFxcdHUzMiB0b2xlcmFuY2U7XFxuIDE1MDpcXHRcXHR1MzIgYWJvcnRfbGltaXQ7XFxuIDE1MTpcXHRcXHR1MzIgc3RhdGU7XFxuIDE1MjpcXHRcXHR1MTYgcGVlcl9jYXBzO1xcbiAxNTM6XFx0XFx0Ym9vbCBpbl9zZXNzaW9uO1xcbiAxNTQ6XFx0XFx0Ym9vbCBhY3RpdmU7XFxuIDE1NTpcXHRcXHR1MzIgc2lsZW50X2ludHZfY250O1xcbiAxNTY6XFx0XFx0Y2hhciBpZl9uYW1lW1RJUENfTUFYX0lGX05BTUVdO1xcbiAxNTc6XFx0XFx0dTMyIHByaW9yaXR5O1xcbiAxNTg6XFx0XFx0Y2hhciBuZXRfcGxhbmU7XFxuIDE1OTpcXHRcXHRzdHJ1Y3QgdGlwY19tb25fc3RhdGUgbW9uX3N0YXRlO1xcbiAxNjA6XFx0XFx0dTE2IHJzdF9jbnQ7XFxuIDE2MTpcXHRcXG4gMTYyOlxcdFxcdC8qIEZhaWxvdmVyL3N5bmNoICovXFxuIDE2MzpcXHRcXHR1MTYgZHJvcF9wb2ludDtcXG4gMTY0OlxcdFxcdHN0cnVjdCBza19idWZmICpmYWlsb3Zlcl9yZWFzbV9za2I7XFxuIDE2NTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGZhaWxvdmVyX2RlZmVyZHE7XFxuIDE2NjpcXHRcXG4gMTY3OlxcdFxcdC8qIE1heCBwYWNrZXQgbmVnb3RpYXRpb24gKi9cXG4gMTY4OlxcdFxcdHUxNiBtdHU7XFxuIDE2OTpcXHRcXHR1MTYgYWR2ZXJ0aXNlZF9tdHU7XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdC8qIFNlbmRpbmcgKi9cXG4gMTcyOlxcdFxcdHN0cnVjdCBza19idWZmX2hlYWQgdHJhbnNtcTtcXG4gMTczOlxcdFxcdHN0cnVjdCBza19idWZmX2hlYWQgYmFja2xvZ3E7XFxuIDE3NDpcXHRcXHRzdHJ1Y3Qge1xcbiAxNzU6XFx0XFx0XFx0dTE2IGxlbjtcXG4gMTc2OlxcdFxcdFxcdHUxNiBsaW1pdDtcXG4gMTc3OlxcdFxcdFxcdHN0cnVjdCBza19idWZmICp0YXJnZXRfYnNrYjtcXG4gMTc4OlxcdFxcdH0gYmFja2xvZ1s1XTtcXG4gMTc5OlxcdFxcdHUxNiBzbmRfbnh0O1xcbiAxODA6XFx0XFxuIDE4MTpcXHRcXHQvKiBSZWNlcHRpb24gKi9cXG4gMTgyOlxcdFxcdHUxNiByY3Zfbnh0O1xcbiAxODM6XFx0XFx0dTMyIHJjdl91bmFja2VkO1xcbiAxODQ6XFx0XFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBkZWZlcmRxO1xcbiAxODU6XFx0XFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxO1xcbiAxODY6XFx0XFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqbmFtZWRxO1xcbiAxODc6XFx0XFxuIDE4ODpcXHRcXHQvKiBDb25nZXN0aW9uIGhhbmRsaW5nICovXFxuIDE4OTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHdha2V1cHE7XFxuIDE5MDpcXHRcXHR1MTYgd2luZG93O1xcbiAxOTE6XFx0XFx0dTE2IG1pbl93aW47XFxuIDE5MjpcXHRcXHR1MTYgc3N0aHJlc2g7XFxuIDE5MzpcXHRcXHR1MTYgbWF4X3dpbjtcXG4gMTk0OlxcdFxcdHUxNiBjb25nX2Fja3M7XFxuIDE5NTpcXHRcXHR1MTYgY2hlY2twb2ludDtcXG4gMTk2OlxcdFxcbiAxOTc6XFx0XFx0LyogRnJhZ21lbnRhdGlvbi9yZWFzc2VtYmx5ICovXFxuIDE5ODpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVhc21fYnVmO1xcbiAxOTk6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnJlYXNtX3RubG1zZztcXG4gMjAwOlxcdFxcbiAyMDE6XFx0XFx0LyogQnJvYWRjYXN0ICovXFxuIDIwMjpcXHRcXHR1MTYgYWNrZXJzO1xcbiAyMDM6XFx0XFx0dTE2IGFja2VkO1xcbiAyMDQ6XFx0XFx0dTE2IGxhc3RfZ2FwO1xcbiAyMDU6XFx0XFx0c3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICpsYXN0X2dhO1xcbiAyMDY6XFx0XFx0c3RydWN0IHRpcGNfbGluayAqYmNfcmN2bGluaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDM6MTMuNTYxNjQ5NloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTEzOTY4MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgVElQQyBMaW5rIENyZWF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBUSVBDIGxpbmtzIGFyZSBlc3RhYmxpc2hlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aHJlZSBrZXkgZnVuY3Rpb25zOiBgdGlwY19saW5rX2NyZWF0ZWAsIGB0aXBjX2xpbmtfYmNfY3JlYXRlYCwgYW5kIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYC4gSSdtIHN0YXJ0aW5nIHRvIHZpc3VhbGl6ZSB0aGUgbGlrZWx5IGZsb3cuIEkgc3VzcGVjdCBgdGlwY19saW5rX2NyZWF0ZWAgaXMgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIGVzdGFibGlzaGluZyBhIGdlbmVyYWwgVElQQyBsaW5rLiBUaGUgXCJiY1wiIGluIGB0aXBjX2xpbmtfYmNfY3JlYXRlYCBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIHJlbGF0ZWQgdG8gYnJvYWRjYXN0IG9yIHBvdGVudGlhbGx5IHNvbWUgZm9ybSBvZiBjbGllbnQtc2VydmVyIGFycmFuZ2VtZW50LCB3aGljaCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBiZXR0ZXIuIEFuZCBgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZ2AuLi4gdGhhdCBzY3JlYW1zIHByb3RvY29sIG1lc3NhZ2UgY29uc3RydWN0aW9uLiBJIGFudGljaXBhdGUgdGhpcyBpcyB3aGVyZSB0aGUgbGluaydzIGNvbnRyb2wgYW5kIGRhdGEgc3RydWN0dXJlcyBhcmUgbWFyc2hhbGxlZCBpbnRvIHRoZSBzcGVjaWZpYyBUSVBDIGZvcm1hdCBmb3IgdHJhbnNtaXNzaW9uLiBJJ2xsIG5lZWQgdG8gZGlzc2VjdCB0aGVzZSBmdW5jdGlvbnMgaW4gb3JkZXIgYW5kIHNlZSBob3cgdGhlIGZ1bmN0aW9ucyBpbnRlcmFjdC4gSSdtIGtlZW4gdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgbG9va2luZyBmb3Igb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBteSB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTQyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowMzoyMC4wNzU2MjA2OTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL2xpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzAsXG4gIFwiTGluZUNvdW50XCI6IDExNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDcwOlxcdCAqIEBsaW5rOiByZXR1cm4gdmFsdWUsIHBvaW50ZXIgdG8gcHV0IHRoZSBjcmVhdGVkIGxpbmtcXG4gNDcxOlxcdCAqIEBzZWxmOiBsb2NhbCB1bmljYXN0IGxpbmsgaWRcXG4gNDcyOlxcdCAqIEBwZWVyX2lkOiAxMjgtYml0IElEIG9mIHBlZXJcXG4gNDczOlxcdCAqXFxuIDQ3NDpcXHQgKiBSZXR1cm46IHRydWUgaWYgbGluayB3YXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGZhbHNlXFxuIDQ3NTpcXHQgKi9cXG4gNDc2OlxcdGJvb2wgdGlwY19saW5rX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKmlmX25hbWUsIGludCBiZWFyZXJfaWQsXFxuIDQ3NzpcXHRcXHRcXHQgICAgICBpbnQgdG9sZXJhbmNlLCBjaGFyIG5ldF9wbGFuZSwgdTMyIG10dSwgaW50IHByaW9yaXR5LFxcbiA0Nzg6XFx0XFx0XFx0ICAgICAgdTMyIG1pbl93aW4sIHUzMiBtYXhfd2luLCB1MzIgc2Vzc2lvbiwgdTMyIHNlbGYsXFxuIDQ3OTpcXHRcXHRcXHQgICAgICB1MzIgcGVlciwgdTggKnBlZXJfaWQsIHUxNiBwZWVyX2NhcHMsXFxuIDQ4MDpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGlwY19saW5rICpiY19zbmRsaW5rLFxcbiA0ODE6XFx0XFx0XFx0ICAgICAgc3RydWN0IHRpcGNfbGluayAqYmNfcmN2bGluayxcXG4gNDgyOlxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcXG4gNDgzOlxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcSxcXG4gNDg0OlxcdFxcdFxcdCAgICAgIHN0cnVjdCB0aXBjX2xpbmsgKipsaW5rKVxcbiA0ODU6XFx0e1xcbiA0ODY6XFx0XFx0Y2hhciBwZWVyX3N0cltOT0RFX0lEX1NUUl9MRU5dID0gezAsfTtcXG4gNDg3OlxcdFxcdGNoYXIgc2VsZl9zdHJbTk9ERV9JRF9TVFJfTEVOXSA9IHswLH07XFxuIDQ4ODpcXHRcXHRzdHJ1Y3QgdGlwY19saW5rICpsO1xcbiA0ODk6XFx0XFxuIDQ5MDpcXHRcXHRsID0ga3phbGxvY19vYmooKmwsIEdGUF9BVE9NSUMpO1xcbiA0OTE6XFx0XFx0aWYgKCFsKVxcbiA0OTI6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA0OTM6XFx0XFx0KmxpbmsgPSBsO1xcbiA0OTQ6XFx0XFx0bC1cXHUwMDNlc2Vzc2lvbiA9IHNlc3Npb247XFxuIDQ5NTpcXHRcXG4gNDk2OlxcdFxcdC8qIFNldCBsaW5rIG5hbWUgZm9yIHVuaWNhc3QgbGlua3Mgb25seSAqL1xcbiA0OTc6XFx0XFx0aWYgKHBlZXJfaWQpIHtcXG4gNDk4OlxcdFxcdFxcdGlmICh0aXBjX25vZGVpZDJzdHJpbmcoc2VsZl9zdHIsIHRpcGNfb3duX2lkKG5ldCkpIFxcdTAwM2UgTk9ERV9JRF9MRU4pXFxuIDQ5OTpcXHRcXHRcXHRcXHRzcHJpbnRmKHNlbGZfc3RyLCBcXFwiJXhcXFwiLCBzZWxmKTtcXG4gNTAwOlxcdFxcdFxcdGlmICh0aXBjX25vZGVpZDJzdHJpbmcocGVlcl9zdHIsIHBlZXJfaWQpIFxcdTAwM2UgTk9ERV9JRF9MRU4pXFxuIDUwMTpcXHRcXHRcXHRcXHRzcHJpbnRmKHBlZXJfc3RyLCBcXFwiJXhcXFwiLCBwZWVyKTtcXG4gNTAyOlxcdFxcdH1cXG4gNTAzOlxcdFxcdC8qIFBlZXIgaS9mIG5hbWUgd2lsbCBiZSBjb21wbGV0ZWQgYnkgcmVzZXQvYWN0aXZhdGUgbWVzc2FnZSAqL1xcbiA1MDQ6XFx0XFx0c25wcmludGYobC1cXHUwMDNlbmFtZSwgc2l6ZW9mKGwtXFx1MDAzZW5hbWUpLCBcXFwiJXM6JXMtJXM6dW5rbm93blxcXCIsXFxuIDUwNTpcXHRcXHRcXHQgc2VsZl9zdHIsIGlmX25hbWUsIHBlZXJfc3RyKTtcXG4gNTA2OlxcdFxcbiA1MDc6XFx0XFx0c3Ryc2NweShsLVxcdTAwM2VpZl9uYW1lLCBpZl9uYW1lKTtcXG4gNTA4OlxcdFxcdGwtXFx1MDAzZWFkZHIgPSBwZWVyO1xcbiA1MDk6XFx0XFx0bC1cXHUwMDNlcGVlcl9jYXBzID0gcGVlcl9jYXBzO1xcbiA1MTA6XFx0XFx0bC1cXHUwMDNlbmV0ID0gbmV0O1xcbiA1MTE6XFx0XFx0bC1cXHUwMDNlaW5fc2Vzc2lvbiA9IGZhbHNlO1xcbiA1MTI6XFx0XFx0bC1cXHUwMDNlYmVhcmVyX2lkID0gYmVhcmVyX2lkO1xcbiA1MTM6XFx0XFx0bC1cXHUwMDNldG9sZXJhbmNlID0gdG9sZXJhbmNlO1xcbiA1MTQ6XFx0XFx0aWYgKGJjX3JjdmxpbmspXFxuIDUxNTpcXHRcXHRcXHRiY19yY3ZsaW5rLVxcdTAwM2V0b2xlcmFuY2UgPSB0b2xlcmFuY2U7XFxuIDUxNjpcXHRcXHRsLVxcdTAwM2VuZXRfcGxhbmUgPSBuZXRfcGxhbmU7XFxuIDUxNzpcXHRcXHRsLVxcdTAwM2VhZHZlcnRpc2VkX210dSA9IG10dTtcXG4gNTE4OlxcdFxcdGwtXFx1MDAzZW10dSA9IG10dTtcXG4gNTE5OlxcdFxcdGwtXFx1MDAzZXByaW9yaXR5ID0gcHJpb3JpdHk7XFxuIDUyMDpcXHRcXHR0aXBjX2xpbmtfc2V0X3F1ZXVlX2xpbWl0cyhsLCBtaW5fd2luLCBtYXhfd2luKTtcXG4gNTIxOlxcdFxcdGwtXFx1MDAzZWFja2VycyA9IDE7XFxuIDUyMjpcXHRcXHRsLVxcdTAwM2ViY19zbmRsaW5rID0gYmNfc25kbGluaztcXG4gNTIzOlxcdFxcdGwtXFx1MDAzZWJjX3JjdmxpbmsgPSBiY19yY3ZsaW5rO1xcbiA1MjQ6XFx0XFx0bC1cXHUwMDNlaW5wdXRxID0gaW5wdXRxO1xcbiA1MjU6XFx0XFx0bC1cXHUwMDNlbmFtZWRxID0gbmFtZWRxO1xcbiA1MjY6XFx0XFx0bC1cXHUwMDNlc3RhdGUgPSBMSU5LX1JFU0VUVElORztcXG4gNTI3OlxcdFxcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2bC1cXHUwMDNldHJhbnNtcSk7XFxuIDUyODpcXHRcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmwtXFx1MDAzZWJhY2tsb2dxKTtcXG4gNTI5OlxcdFxcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2bC1cXHUwMDNlZGVmZXJkcSk7XFxuIDUzMDpcXHRcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmwtXFx1MDAzZWZhaWxvdmVyX2RlZmVyZHEpO1xcbiA1MzE6XFx0XFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2bC1cXHUwMDNld2FrZXVwcSk7XFxuIDUzMjpcXHRcXHRza2JfcXVldWVfaGVhZF9pbml0KGwtXFx1MDAzZWlucHV0cSk7XFxuIDUzMzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gNTM0OlxcdH1cXG4gNTM1OlxcdFxcbiA1MzY6XFx0LyoqXFxuIDUzNzpcXHQgKiB0aXBjX2xpbmtfYmNfY3JlYXRlIC0gY3JlYXRlIG5ldyBsaW5rIHRvIGJlIHVzZWQgZm9yIGJyb2FkY2FzdFxcbiA1Mzg6XFx0ICogQG5ldDogcG9pbnRlciB0byBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXFxuIDUzOTpcXHQgKiBAbXR1OiBtdHUgdG8gYmUgdXNlZCBpbml0aWFsbHkgaWYgbm8gcGVlcnNcXG4gNTQwOlxcdCAqIEBtaW5fd2luOiBtaW5pbWFsIHNlbmQgd2luZG93IHRvIGJlIHVzZWQgYnkgbGlua1xcbiA1NDE6XFx0ICogQG1heF93aW46IG1heGltYWwgc2VuZCB3aW5kb3cgdG8gYmUgdXNlZCBieSBsaW5rXFxuIDU0MjpcXHQgKiBAaW5wdXRxOiBxdWV1ZSB0byBwdXQgbWVzc2FnZXMgcmVhZHkgZm9yIGRlbGl2ZXJ5XFxuIDU0MzpcXHQgKiBAbmFtZWRxOiBxdWV1ZSB0byBwdXQgYmluZGluZyB0YWJsZSB1cGRhdGUgbWVzc2FnZXMgcmVhZHkgZm9yIGRlbGl2ZXJ5XFxuIDU0NDpcXHQgKiBAbGluazogcmV0dXJuIHZhbHVlLCBwb2ludGVyIHRvIHB1dCB0aGUgY3JlYXRlZCBsaW5rXFxuIDU0NTpcXHQgKiBAb3dubm9kZTogaWRlbnRpdHkgb2Ygb3duIG5vZGVcXG4gNTQ2OlxcdCAqIEBwZWVyOiBub2RlIGlkIG9mIHBlZXIgbm9kZVxcbiA1NDc6XFx0ICogQHBlZXJfaWQ6IDEyOC1iaXQgSUQgb2YgcGVlclxcbiA1NDg6XFx0ICogQHBlZXJfY2FwczogYml0bWFwIGRlc2NyaWJpbmcgcGVlciBub2RlIGNhcGFiaWxpdGllc1xcbiA1NDk6XFx0ICogQGJjX3NuZGxpbms6IHRoZSBuYW1lc3BhY2UgZ2xvYmFsIGxpbmsgdXNlZCBmb3IgYnJvYWRjYXN0IHNlbmRpbmdcXG4gNTUwOlxcdCAqXFxuIDU1MTpcXHQgKiBSZXR1cm46IHRydWUgaWYgbGluayB3YXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGZhbHNlXFxuIDU1MjpcXHQgKi9cXG4gNTUzOlxcdGJvb2wgdGlwY19saW5rX2JjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBvd25ub2RlLCB1MzIgcGVlciwgdTggKnBlZXJfaWQsXFxuIDU1NDpcXHRcXHRcXHRcXHQgaW50IG10dSwgdTMyIG1pbl93aW4sIHUzMiBtYXhfd2luLCB1MTYgcGVlcl9jYXBzLFxcbiA1NTU6XFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcXG4gNTU2OlxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpuYW1lZHEsXFxuIDU1NzpcXHRcXHRcXHRcXHQgc3RydWN0IHRpcGNfbGluayAqYmNfc25kbGluayxcXG4gNTU4OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGlwY19saW5rICoqbGluaylcXG4gNTU5OlxcdHtcXG4gNTYwOlxcdFxcdHN0cnVjdCB0aXBjX2xpbmsgKmw7XFxuIDU2MTpcXHRcXG4gNTYyOlxcdFxcdGlmICghdGlwY19saW5rX2NyZWF0ZShuZXQsIFxcXCJcXFwiLCBNQVhfQkVBUkVSUywgMCwgJ1onLCBtdHUsIDAsIG1pbl93aW4sXFxuIDU2MzpcXHRcXHRcXHRcXHQgICAgICBtYXhfd2luLCAwLCBvd25ub2RlLCBwZWVyLCBOVUxMLCBwZWVyX2NhcHMsXFxuIDU2NDpcXHRcXHRcXHRcXHQgICAgICBiY19zbmRsaW5rLCBOVUxMLCBpbnB1dHEsIG5hbWVkcSwgbGluaykpXFxuIDU2NTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdGwgPSAqbGluaztcXG4gNTY4OlxcdFxcdGlmIChwZWVyX2lkKSB7XFxuIDU2OTpcXHRcXHRcXHRjaGFyIHBlZXJfc3RyW05PREVfSURfU1RSX0xFTl0gPSB7MCx9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowMzoyMC4wNzU3NTgzNjJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIwMjAwOTM0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRXhhbWluaW5nIExpbmUgMTg5OCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBJJ20gdGFraW5nIGEgc3RyYXRlZ2ljIGxvb2sgYXQgdGhpcyBkb2N1bWVudCwgYW5kIHRoZSBjb250ZXh0IHN1Z2dlc3RzIHRoYXQgZGlnZ2luZyBpbnRvIHRoZSBjb250ZW50IGFyb3VuZCBsaW5lIDE4OTggd291bGQgcHJvdmlkZSBzb21lIGNydWNpYWwgaW5zaWdodHMuIE15IG1lbnRhbCBtb2RlbCBhbnRpY2lwYXRlcyB0aGF0IGEgZGlzY3Vzc2lvbiBvciBwaWVjZSBvZiBkYXRhIHByZXNlbnRlZCBhcm91bmQgdGhpcyBsaW5lIG1heSBiZSBwaXZvdGFsIHRvIHRoZSBvdmVyYWxsIGFyZ3VtZW50LCBvciBpdCBtaWdodCBjb250YWluIGluZm9ybWF0aW9uIHRoYXQgcmVmdXRlcyBhIHNwZWNpZmljIHBvaW50LiBHaXZlbiBteSBleHBlcnRpc2UsIG15IGludHVpdGlvbiBpcyBob25lZCB0byBmbGFnIHRoaXMgYXJlYSBmb3IgZGVlcGVyIGV4YW1pbmF0aW9uLiBJJ20gYXBwcm9hY2hpbmcgdGhpcyB3aXRoIGEga2VlbiBleHBlY3RhdGlvbiB0aGF0IHRoZSBjb250ZW50IHRoZXJlIG1heSBiZSBlaXRoZXIgYSBjcml0aWNhbCBzdXBwb3J0aW5nIHBpZWNlLCBvciBhIHJlbGV2YW50IG91dGxpZXIgdGhhdCB3YXJyYW50cyBmdXJ0aGVyIHNjcnV0aW55LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDY4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowMzozMi4wOTU4NTQzMjRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL2xpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODgwOlxcdFxcdFxcdGlmIChsLVxcdTAwM2VwZWVyX2NhcHMgXFx1MDAyNiBUSVBDX0xJTktfUFJPVE9fU0VRTk8pXFxuMTg4MTpcXHRcXHRcXHRcXHRtc2dfc2V0X3NlcW5vKGhkciwgbC1cXHUwMDNlc25kX254dF9zdGF0ZSsrKTtcXG4xODgyOlxcdFxcdFxcdG1zZ19zZXRfc2VxX2dhcChoZHIsIHJjdmdhcCk7XFxuMTg4MzpcXHRcXHRcXHRiY19yY3ZnYXAgPSBsaW5rX2JjX3Jjdl9nYXAoYmNsKTtcXG4xODg0OlxcdFxcdFxcdG1zZ19zZXRfYmNfZ2FwKGhkciwgYmNfcmN2Z2FwKTtcXG4xODg1OlxcdFxcdFxcdG1zZ19zZXRfcHJvYmUoaGRyLCBwcm9iZSk7XFxuMTg4NjpcXHRcXHRcXHRtc2dfc2V0X2lzX2tlZXBhbGl2ZShoZHIsIHByb2JlIHx8IHByb2JlX3JlcGx5KTtcXG4xODg3OlxcdFxcdFxcdGlmIChsLVxcdTAwM2VwZWVyX2NhcHMgXFx1MDAyNiBUSVBDX0dBUF9BQ0tfQkxPQ0spXFxuMTg4ODpcXHRcXHRcXHRcXHRnbGVuID0gdGlwY19idWlsZF9nYXBfYWNrX2Jsa3MobCwgaGRyKTtcXG4xODg5OlxcdFxcdFxcdHRpcGNfbW9uX3ByZXAobC1cXHUwMDNlbmV0LCBkYXRhICsgZ2xlbiwgXFx1MDAyNmRsZW4sIG1zdGF0ZSwgbC1cXHUwMDNlYmVhcmVyX2lkKTtcXG4xODkwOlxcdFxcdFxcdG1zZ19zZXRfc2l6ZShoZHIsIElOVF9IX1NJWkUgKyBnbGVuICsgZGxlbik7XFxuMTg5MTpcXHRcXHRcXHRza2JfdHJpbShza2IsIElOVF9IX1NJWkUgKyBnbGVuICsgZGxlbik7XFxuMTg5MjpcXHRcXHRcXHRsLVxcdTAwM2VzdGF0cy5zZW50X3N0YXRlcysrO1xcbjE4OTM6XFx0XFx0XFx0bC1cXHUwMDNlcmN2X3VuYWNrZWQgPSAwO1xcbjE4OTQ6XFx0XFx0fSBlbHNlIHtcXG4xODk1OlxcdFxcdFxcdC8qIFJFU0VUX01TRyBvciBBQ1RJVkFURV9NU0cgKi9cXG4xODk2OlxcdFxcdFxcdGlmIChtdHlwID09IEFDVElWQVRFX01TRykge1xcbjE4OTc6XFx0XFx0XFx0XFx0bXNnX3NldF9kZXN0X3Nlc3Npb25fdmFsaWQoaGRyLCAxKTtcXG4xODk4OlxcdFxcdFxcdFxcdG1zZ19zZXRfZGVzdF9zZXNzaW9uKGhkciwgbC1cXHUwMDNlcGVlcl9zZXNzaW9uKTtcXG4xODk5OlxcdFxcdFxcdH1cXG4xOTAwOlxcdFxcdFxcdG1zZ19zZXRfbWF4X3BrdChoZHIsIGwtXFx1MDAzZWFkdmVydGlzZWRfbXR1KTtcXG4xOTAxOlxcdFxcdFxcdG1lbWNweShkYXRhLCBsLVxcdTAwM2VpZl9uYW1lLCBUSVBDX01BWF9JRl9OQU1FKTtcXG4xOTAyOlxcdFxcdFxcdG1zZ19zZXRfc2l6ZShoZHIsIElOVF9IX1NJWkUgKyBUSVBDX01BWF9JRl9OQU1FKTtcXG4xOTAzOlxcdFxcdFxcdHNrYl90cmltKHNrYiwgSU5UX0hfU0laRSArIFRJUENfTUFYX0lGX05BTUUpO1xcbjE5MDQ6XFx0XFx0fVxcbjE5MDU6XFx0XFx0aWYgKHByb2JlKVxcbjE5MDY6XFx0XFx0XFx0bC1cXHUwMDNlc3RhdHMuc2VudF9wcm9iZXMrKztcXG4xOTA3OlxcdFxcdGlmIChyY3ZnYXApXFxuMTkwODpcXHRcXHRcXHRsLVxcdTAwM2VzdGF0cy5zZW50X25hY2tzKys7XFxuMTkwOTpcXHRcXHRpZiAoYmNfcmN2Z2FwKVxcbjE5MTA6XFx0XFx0XFx0YmNsLVxcdTAwM2VzdGF0cy5zZW50X25hY2tzKys7XFxuMTkxMTpcXHRcXHRza2ItXFx1MDAzZXByaW9yaXR5ID0gVENfUFJJT19DT05UUk9MO1xcbjE5MTI6XFx0XFx0X19za2JfcXVldWVfdGFpbCh4bWl0cSwgc2tiKTtcXG4xOTEzOlxcdFxcdHRyYWNlX3RpcGNfcHJvdG9fYnVpbGQoc2tiLCBmYWxzZSwgbC1cXHUwMDNlbmFtZSk7XFxuMTkxNDpcXHR9XFxuMTkxNTpcXHRcXG4xOTE2OlxcdHZvaWQgdGlwY19saW5rX2NyZWF0ZV9kdW1teV90bmxfbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsXFxuMTkxNzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuMTkxODpcXHR7XFxuMTkxOTpcXHRcXHR1MzIgb25vZGUgPSB0aXBjX293bl9hZGRyKGwtXFx1MDAzZW5ldCk7XFxuMTkyMDpcXHRcXHRzdHJ1Y3QgdGlwY19tc2cgKmhkciwgKmloZHI7XFxuMTkyMTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHRubHE7XFxuMTkyMjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbjE5MjM6XFx0XFx0dTMyIGRub2RlID0gbC1cXHUwMDNlYWRkcjtcXG4xOTI0OlxcdFxcbjE5MjU6XFx0XFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZ0bmxxKTtcXG4xOTI2OlxcdFxcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShUVU5ORUxfUFJPVE9DT0wsIEZBSUxPVkVSX01TRyxcXG4xOTI3OlxcdFxcdFxcdFxcdCAgICAgIElOVF9IX1NJWkUsIEJBU0lDX0hfU0laRSxcXG4xOTI4OlxcdFxcdFxcdFxcdCAgICAgIGRub2RlLCBvbm9kZSwgMCwgMCwgMCk7XFxuMTkyOTpcXHRcXHRpZiAoIXNrYikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowMzozMi4wOTU5OTIzNDRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTU2OTE5ODQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBBZGRyZXNzaW5nIFBvdGVudGlhbCBCdWZmZXIgT3ZlcmZsb3dzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCB0aWdodGVuaW5nIHVwIHN0cmluZyBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHRvIHByZXZlbnQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3MuIExldCdzIHNlZSBpZiBteSBpbml0aWFsIHRob3VnaHQgaXMgY29ycmVjdC5cblxuSW4gdGhlIGZpcnN0IGNhc2UsIGluc2lkZSBgdGlwY19saW5rX2NyZWF0ZWAsIHRoZSBjb2RlIG5vdyB1c2VzIGBzdHJzY3B5YCBhZnRlciBhIGBremFsbG9jX29iamAgYWxsb2NhdGlvbi4gVGhlIGBremFsbG9jX29iamAgaXMgY3JpdGljYWwgaGVyZTsgaXQgemVyb2VzIHRoZSBlbnRpcmUgYHN0cnVjdCB0aXBjX2xpbmtgLCBpbmNsdWRpbmcgdGhlIGBpZl9uYW1lYCBmaWVsZC4gVGhpcyBpcyBnb29kIGJlY2F1c2UgaXQgcHJvdmlkZXMgYSBrbm93biBzdGFydGluZyBzdGF0ZS4gVGhlbiBgc3Ryc2NweWAgc2FmZWx5IGNvcGllcyB0aGUgaW50ZXJmYWNlIG5hbWUgaW50byBgbC1cdTAwM2VpZl9uYW1lYC4gRXZlbiBpZiBgaWZfbmFtZWAgaXMgbG9uZ2VyIHRoYW4gd2hhdCBgbC1cdTAwM2VpZl9uYW1lYCBjYW4gaG9sZCwgYHN0cnNjcHlgIGVuc3VyZXMgd2UgZG9uJ3Qgd3JpdGUgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIFRoZSB6ZXJvaW5nIGZyb20gYGt6YWxsb2Nfb2JqYCBtZWFucyB0aGF0IGV2ZW4gaWYgYHN0cnNjcHlgIGRvZXNuJ3QgZmlsbCB0aGUgZW50aXJlIGJ1ZmZlciwgdGhlIHJlbWFpbmluZyBwYXJ0IGlzIHBhZGRlZCB3aXRoIHplcm9zLlxuXG5OZXh0LCBpbiBgdGlwY19saW5rX2JjX2NyZWF0ZWAsIHRoZSBjaGFuZ2UgZnJvbSBgc3RyY3B5YCB0byBgc3Ryc2NweWAgaXMgdGhlIHNhbWUgcHJpbmNpcGxlLiBgc3Ryc2NweWAgaXMgdGhlIHNhZmVyIG9wdGlvbi5cblxuVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydCBjb21lcyB3aXRoIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYC4gIEluaXRpYWxseSwgaXQgbG9va3MgbGlrZSBgc3RyY3B5YCB3YXMgdXNlZCB0byBjb3B5IGBsLVx1MDAzZWlmX25hbWVgIGludG8gYGRhdGFgLiBCdXQgaG9sZCBvbi4uLiB0aGUgY29kZSBzZXRzIGEgZml4ZWQgc2l6ZSBmb3IgdGhlIG1lc3NhZ2UgdXNpbmcgYG1zZ19zZXRfc2l6ZWAgYW5kIHRyaW1zIHRoZSBzb2NrZXQgYnVmZmVyIChgc2tiYCkgdG8gdGhhdCBmaXhlZCBzaXplLCBldmVuIHRob3VnaCBgc3RyY3B5YCAqc2hvdWxkKiBoYXZlIHN0b3BwZWQgYXQgdGhlIG51bGwgdGVybWluYXRvciBvZiB0aGUgc3RyaW5nIGluIGBsLVx1MDAzZWlmX25hbWVgLiBUaGF0J3MgYSBiaXQgb2YgYSByZWQgZmxhZzsgaXQgYXBwZWFycyB0aGF0IHRoZSBlYXJsaWVyIGltcGxlbWVudGF0aW9uLCBjb3VudGVyaW50dWl0aXZlbHksIHdhcyByZWx5aW5nIG9uIHRoZSBudWxsIHRlcm1pbmF0aW9uIG9mIGBsLVx1MDAzZWlmX25hbWVgIHRvIGRlZmluZSB0aGUgY29waWVkIGRhdGEuICBcblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiB0aGUgYHNrYmAgd2FzIGFsbG9jYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCB3aGF0IGFzc3VtcHRpb25zIGFyZSBtYWRlIGFib3V0IGl0cyBzaXplLiBUaGlzIGlzIGltcG9ydGFudCB0byBkZXRlcm1pbmUgaWYgdGhlIGZpeGVkIHNpemUgc2V0dGluZyBhbmQgdHJpbW1pbmcgaW4gdGhlIG9yaWdpbmFsIGNvZGUgY291bGQgbGVhZCB0byB0aGUgc2l6ZSBiZWluZyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIHN0cmluZywgb3IgaWYgdGhlcmUncyBhIGRpZmZlcmVudCB2dWxuZXJhYmlsaXR5IHRoYXQgdGhlIGN1cnJlbnQgcGF0Y2ggYWRkcmVzc2VzIHRoYXQgSSBhbSBtaXNzaW5nLiBGdXJ0aGVyIGNvZGUgaW5zcGVjdGlvbiBpcyB3YXJyYW50ZWQsIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgYWxsb2NhdGlvbiBhbmQgdW5kZXJzdGFuZCB0aGUgb3JpZ2luYWwgcmF0aW9uYWxlIGJlaGluZCB0aGUgZml4ZWQtc2l6ZSBtZXNzYWdlIGNvbnN0cnVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI2NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAzOjQxLjY2NTE5MjkwN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3RpcGMvbGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NDU6XFx0XFx0dm9pZCAqZGF0YTtcXG4xODQ2OlxcdFxcbjE4NDc6XFx0XFx0LyogRG9uJ3Qgc2VuZCBwcm90b2NvbCBtZXNzYWdlIGR1cmluZyByZXNldCBvciBsaW5rIGZhaWxvdmVyICovXFxuMTg0ODpcXHRcXHRpZiAodGlwY19saW5rX2lzX2Jsb2NrZWQobCkpXFxuMTg0OTpcXHRcXHRcXHRyZXR1cm47XFxuMTg1MDpcXHRcXG4xODUxOlxcdFxcdGlmICghdGlwY19saW5rX2lzX3VwKGwpIFxcdTAwMjZcXHUwMDI2IChtdHlwID09IFNUQVRFX01TRykpXFxuMTg1MjpcXHRcXHRcXHRyZXR1cm47XFxuMTg1MzpcXHRcXG4xODU0OlxcdFxcdGlmICgocHJvYmUgfHwgcHJvYmVfcmVwbHkpIFxcdTAwMjZcXHUwMDI2ICFza2JfcXVldWVfZW1wdHkoZGZxKSlcXG4xODU1OlxcdFxcdFxcdHJjdmdhcCA9IGJ1Zl9zZXFubyhza2JfcGVlayhkZnEpKSAtIGwtXFx1MDAzZXJjdl9ueHQ7XFxuMTg1NjpcXHRcXG4xODU3OlxcdFxcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShMSU5LX1BST1RPQ09MLCBtdHlwLCBJTlRfSF9TSVpFLFxcbjE4NTg6XFx0XFx0XFx0XFx0ICAgICAgdGlwY19tYXhfZG9tYWluX3NpemUgKyBNQVhfR0FQX0FDS19CTEtTX1NaLFxcbjE4NTk6XFx0XFx0XFx0XFx0ICAgICAgbC1cXHUwMDNlYWRkciwgdGlwY19vd25fYWRkcihsLVxcdTAwM2VuZXQpLCAwLCAwLCAwKTtcXG4xODYwOlxcdFxcdGlmICghc2tiKVxcbjE4NjE6XFx0XFx0XFx0cmV0dXJuO1xcbjE4NjI6XFx0XFxuMTg2MzpcXHRcXHRoZHIgPSBidWZfbXNnKHNrYik7XFxuMTg2NDpcXHRcXHRkYXRhID0gbXNnX2RhdGEoaGRyKTtcXG4xODY1OlxcdFxcdG1zZ19zZXRfc2Vzc2lvbihoZHIsIGwtXFx1MDAzZXNlc3Npb24pO1xcbjE4NjY6XFx0XFx0bXNnX3NldF9iZWFyZXJfaWQoaGRyLCBsLVxcdTAwM2ViZWFyZXJfaWQpO1xcbjE4Njc6XFx0XFx0bXNnX3NldF9uZXRfcGxhbmUoaGRyLCBsLVxcdTAwM2VuZXRfcGxhbmUpO1xcbjE4Njg6XFx0XFx0bXNnX3NldF9uZXh0X3NlbnQoaGRyLCBsLVxcdTAwM2VzbmRfbnh0KTtcXG4xODY5OlxcdFxcdG1zZ19zZXRfYWNrKGhkciwgbC1cXHUwMDNlcmN2X254dCAtIDEpO1xcbjE4NzA6XFx0XFx0bXNnX3NldF9iY2FzdF9hY2soaGRyLCBiY2wtXFx1MDAzZXJjdl9ueHQgLSAxKTtcXG4xODcxOlxcdFxcdG1zZ19zZXRfYmNfYWNrX2ludmFsaWQoaGRyLCAhbm9kZV91cCk7XFxuMTg3MjpcXHRcXHRtc2dfc2V0X2xhc3RfYmNhc3QoaGRyLCBsLVxcdTAwM2ViY19zbmRsaW5rLVxcdTAwM2VzbmRfbnh0IC0gMSk7XFxuMTg3MzpcXHRcXHRtc2dfc2V0X2xpbmtfdG9sZXJhbmNlKGhkciwgdG9sZXJhbmNlKTtcXG4xODc0OlxcdFxcdG1zZ19zZXRfbGlua3ByaW8oaGRyLCBwcmlvcml0eSk7XFxuMTg3NTpcXHRcXHRtc2dfc2V0X3JlZHVuZGFudF9saW5rKGhkciwgbm9kZV91cCk7XFxuMTg3NjpcXHRcXHRtc2dfc2V0X3NlcV9nYXAoaGRyLCAwKTtcXG4xODc3OlxcdFxcdG1zZ19zZXRfc2Vxbm8oaGRyLCBsLVxcdTAwM2VzbmRfbnh0ICsgVTE2X01BWCAvIDIpO1xcbjE4Nzg6XFx0XFxuMTg3OTpcXHRcXHRpZiAobXR5cCA9PSBTVEFURV9NU0cpIHtcXG4xODgwOlxcdFxcdFxcdGlmIChsLVxcdTAwM2VwZWVyX2NhcHMgXFx1MDAyNiBUSVBDX0xJTktfUFJPVE9fU0VRTk8pXFxuMTg4MTpcXHRcXHRcXHRcXHRtc2dfc2V0X3NlcW5vKGhkciwgbC1cXHUwMDNlc25kX254dF9zdGF0ZSsrKTtcXG4xODgyOlxcdFxcdFxcdG1zZ19zZXRfc2VxX2dhcChoZHIsIHJjdmdhcCk7XFxuMTg4MzpcXHRcXHRcXHRiY19yY3ZnYXAgPSBsaW5rX2JjX3Jjdl9nYXAoYmNsKTtcXG4xODg0OlxcdFxcdFxcdG1zZ19zZXRfYmNfZ2FwKGhkciwgYmNfcmN2Z2FwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDM6NDEuNjY1MzI0Mzc3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzOTA5MDU0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgYHRpcGNfbXNnX2NyZWF0ZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgYHRpcGNfbXNnX2NyZWF0ZWAuIEl0J3MgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbiwgc28gSSdsbCBzdGFydCB3aXRoIHRoZSBiYXNpY3MuIExldCdzIHNlZS4uLiB0aGUgcXVpY2tlc3Qgcm91dGUgdG8gdW5kZXJzdGFuZCBpdCBpcyB0byB0cmFjZSBpdHMgY2FsbHMgYW5kIHNlZSBob3cgaXQgaXMgdXNlZC4gSSdsbCB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIGluc3RhbmNlcyB3aGVyZSBgdGlwY19tc2dfY3JlYXRlYCBpcyBjYWxsZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaXRzIGNvbnRleHQsIHdoYXQgYXJndW1lbnRzIGFyZSB0eXBpY2FsbHkgcGFzc2VkLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgbGFyZ2VyIFRJUEMgbWVzc2FnaW5nIGFyY2hpdGVjdHVyZS4gRnJvbSB0aGVyZSwgSSBjYW4gZGlnIGRlZXBlciBpbnRvIHRoZSBzb3VyY2UgY29kZSBvZiBgdGlwY19tc2dfY3JlYXRlYCBpdHNlbGYuIEdvdHRhIGJlIGVmZmljaWVudCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA3NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDM6NDYuMDU2MjMxODk0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU1NjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX21zZ19jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvZ3JvdXAuYz02Njg9c3RhdGljIHZvaWQgdGlwY19ncm91cF9jcmVhdGVfZXZlbnQoc3RydWN0IHRpcGNfZ3JvdXAgKmdycCxcXG4tLVxcbm5ldC90aXBjL2dyb3VwLmMtNjg2LVxcbm5ldC90aXBjL2dyb3VwLmM6Njg3OlxcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UsIFRJUENfR1JQX01FTUJFUl9FVlQsXFxubmV0L3RpcGMvZ3JvdXAuYy02ODgtXFx0XFx0XFx0ICAgICAgR1JPVVBfSF9TSVpFLCBzaXplb2YoZXZ0KSwgZG5vZGUsIG0tXFx1MDAzZW5vZGUsXFxuLS1cXG5uZXQvdGlwYy9ncm91cC5jPTcwMz1zdGF0aWMgdm9pZCB0aXBjX2dyb3VwX3Byb3RvX3htaXQoc3RydWN0IHRpcGNfZ3JvdXAgKmdycCwgc3RydWN0IHRpcGNfbWVtYmVyICptLFxcbi0tXFxubmV0L3RpcGMvZ3JvdXAuYy03MDktXFxubmV0L3RpcGMvZ3JvdXAuYzo3MTA6XFx0c2tiID0gdGlwY19tc2dfY3JlYXRlKEdST1VQX1BST1RPQ09MLCBtdHlwLCBJTlRfSF9TSVpFLCAwLFxcbm5ldC90aXBjL2dyb3VwLmMtNzExLVxcdFxcdFxcdCAgICAgIG0tXFx1MDAzZW5vZGUsIHRpcGNfb3duX2FkZHIoZ3JwLVxcdTAwM2VuZXQpLFxcbi0tXFxubmV0L3RpcGMvbGluay5jPTg4MT1zdGF0aWMgaW50IGxpbmtfc2NoZWR1bGVfdXNlcihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3QgdGlwY19tc2cgKmhkcilcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy04ODctXFx0LyogQ3JlYXRlIGFuZCBzY2hlZHVsZSB3YWtldXAgcHNldWRvIG1lc3NhZ2UgKi9cXG5uZXQvdGlwYy9saW5rLmM6ODg4OlxcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShTT0NLX1dBS0VVUCwgMCwgSU5UX0hfU0laRSwgMCxcXG5uZXQvdGlwYy9saW5rLmMtODg5LVxcdFxcdFxcdCAgICAgIGRub2RlLCBsLVxcdTAwM2VhZGRyLCBkcG9ydCwgMCwgMCk7XFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9MTgzMj1zdGF0aWMgdm9pZCB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsIGludCBtdHlwLCBib29sIHByb2JlLFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTE4NTYtXFxubmV0L3RpcGMvbGluay5jOjE4NTc6XFx0c2tiID0gdGlwY19tc2dfY3JlYXRlKExJTktfUFJPVE9DT0wsIG10eXAsIElOVF9IX1NJWkUsXFxubmV0L3RpcGMvbGluay5jLTE4NTgtXFx0XFx0XFx0ICAgICAgdGlwY19tYXhfZG9tYWluX3NpemUgKyBNQVhfR0FQX0FDS19CTEtTX1NaLFxcbi0tXFxubmV0L3RpcGMvbGluay5jPTE5MTY9dm9pZCB0aXBjX2xpbmtfY3JlYXRlX2R1bW15X3RubF9tc2coc3RydWN0IHRpcGNfbGluayAqbCxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xOTI1LVxcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2dG5scSk7XFxubmV0L3RpcGMvbGluay5jOjE5MjY6XFx0c2tiID0gdGlwY19tc2dfY3JlYXRlKFRVTk5FTF9QUk9UT0NPTCwgRkFJTE9WRVJfTVNHLFxcbm5ldC90aXBjL2xpbmsuYy0xOTI3LVxcdFxcdFxcdCAgICAgIElOVF9IX1NJWkUsIEJBU0lDX0hfU0laRSxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xOTQ5PXZvaWQgdGlwY19saW5rX3RubF9wcmVwYXJlKHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCB0aXBjX2xpbmsgKnRubCxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xOTcwLVxcdGlmIChtdHlwID09IFNZTkNIX01TRyBcXHUwMDI2XFx1MDAyNiAodG5sLVxcdTAwM2VwZWVyX2NhcHMgXFx1MDAyNiBUSVBDX1RVTk5FTF9FTkhBTkNFRCkpIHtcXG5uZXQvdGlwYy9saW5rLmM6MTk3MTpcXHRcXHR0bmxza2IgPSB0aXBjX21zZ19jcmVhdGUoVFVOTkVMX1BST1RPQ09MLCBTWU5DSF9NU0csXFxubmV0L3RpcGMvbGluay5jLTE5NzItXFx0XFx0XFx0XFx0XFx0IElOVF9IX1NJWkUsIDAsIGwtXFx1MDAzZWFkZHIsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTk5Mi1cXHQvKiBBdCBsZWFzdCBvbmUgcGFja2V0IHJlcXVpcmVkIGZvciBzYWZlIGFsZ29yaXRobSA9XFx1MDAzZSBhZGQgZHVtbXkgKi9cXG5uZXQvdGlwYy9saW5rLmM6MTk5MzpcXHRza2IgPSB0aXBjX21zZ19jcmVhdGUoVElQQ19MT1dfSU1QT1JUQU5DRSwgVElQQ19ESVJFQ1RfTVNHLFxcbm5ldC90aXBjL2xpbmsuYy0xOTk0LVxcdFxcdFxcdCAgICAgIEJBU0lDX0hfU0laRSwgMCwgbC1cXHUwMDNlYWRkciwgdGlwY19vd25fYWRkcihsLVxcdTAwM2VuZXQpLFxcbi0tXFxubmV0L3RpcGMvbGluay5jPTIzMzI9c3RhdGljIGJvb2wgdGlwY19saW5rX2J1aWxkX2JjX3Byb3RvX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBib29sIGJjYXN0LFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTIzNDEtXFxubmV0L3RpcGMvbGluay5jOjIzNDI6XFx0c2tiID0gdGlwY19tc2dfY3JlYXRlKEJDQVNUX1BST1RPQ09MLCBTVEFURV9NU0csIElOVF9IX1NJWkUsXFxubmV0L3RpcGMvbGluay5jLTIzNDMtXFx0XFx0XFx0ICAgICAgMCwgbC1cXHUwMDNlYWRkciwgdGlwY19vd25fYWRkcihsLVxcdTAwM2VuZXQpLCAwLCAwLCAwKTtcXG4tLVxcbm5ldC90aXBjL21zZy5jPTgxPXZvaWQgdGlwY19tc2dfaW5pdCh1MzIgb3duX25vZGUsIHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIHVzZXIsIHUzMiB0eXBlLFxcbi0tXFxubmV0L3RpcGMvbXNnLmMtOTYtXFxubmV0L3RpcGMvbXNnLmM6OTc6c3RydWN0IHNrX2J1ZmYgKnRpcGNfbXNnX2NyZWF0ZSh1aW50IHVzZXIsIHVpbnQgdHlwZSxcXG5uZXQvdGlwYy9tc2cuYy05OC1cXHRcXHRcXHRcXHR1aW50IGhkcl9zeiwgdWludCBkYXRhX3N6LCB1MzIgZG5vZGUsXFxuLS1cXG5uZXQvdGlwYy9tc2cuaD0xMTYwPXZvaWQgdGlwY19tc2dfaW5pdCh1MzIgb3duX2FkZHIsIHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIHVzZXIsIHUzMiB0eXBlLFxcbm5ldC90aXBjL21zZy5oLTExNjEtXFx0XFx0ICAgdTMyIGhzaXplLCB1MzIgZGVzdG5vZGUpO1xcbm5ldC90aXBjL21zZy5oOjExNjI6c3RydWN0IHNrX2J1ZmYgKnRpcGNfbXNnX2NyZWF0ZSh1aW50IHVzZXIsIHVpbnQgdHlwZSwgdWludCBoZHJfc3osXFxubmV0L3RpcGMvbXNnLmgtMTE2My1cXHRcXHRcXHRcXHR1aW50IGRhdGFfc3osIHUzMiBkbm9kZSwgdTMyIG9ub2RlLFxcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTE1MjM9c3RhdGljIHZvaWQgbm9kZV9sb3N0X2NvbnRhY3Qoc3RydWN0IHRpcGNfbm9kZSAqbixcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0xNTUyLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb25uLCBzYWZlLCBjb25ucywgbGlzdCkge1xcbm5ldC90aXBjL25vZGUuYzoxNTUzOlxcdFxcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UsIFRJUENfQ09OTl9NU0csXFxubmV0L3RpcGMvbm9kZS5jLTE1NTQtXFx0XFx0XFx0XFx0ICAgICAgU0hPUlRfSF9TSVpFLCAwLCB0aXBjX293bl9hZGRyKG4tXFx1MDAzZW5ldCksXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz01NTA9c3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTU5Mi1cXHRcXHR9XFxubmV0L3RpcGMvc29ja2V0LmM6NTkzOlxcdFxcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UsXFxubmV0L3RpcGMvc29ja2V0LmMtNTk0LVxcdFxcdFxcdFxcdCAgICAgIFRJUENfQ09OTl9NU0csIFNIT1JUX0hfU0laRSwgMCwgZG5vZGUsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xNzk0PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19za19idWlsZF9hY2soc3RydWN0IHRpcGNfc29jayAqdHNrKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTgwMy1cXHRcXHRyZXR1cm4gTlVMTDtcXG5uZXQvdGlwYy9zb2NrZXQuYzoxODA0OlxcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShDT05OX01BTkFHRVIsIENPTk5fQUNLLCBJTlRfSF9TSVpFLCAwLFxcbm5ldC90aXBjL3NvY2tldC5jLTE4MDUtXFx0XFx0XFx0ICAgICAgZG5vZGUsIHRza19vd25fbm9kZSh0c2spLCBwZWVyX3BvcnQsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yODMwPXN0YXRpYyB2b2lkIHRpcGNfc2tfY2hlY2tfcHJvYmluZ19zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yODQ3LVxcdC8qIFByZXBhcmUgbmV3IHByb2JlICovXFxubmV0L3RpcGMvc29ja2V0LmM6Mjg0ODpcXHRza2IgPSB0aXBjX21zZ19jcmVhdGUoQ09OTl9NQU5BR0VSLCBDT05OX1BST0JFLCBJTlRfSF9TSVpFLCAwLFxcbm5ldC90aXBjL3NvY2tldC5jLTI4NDktXFx0XFx0XFx0ICAgICAgcG5vZGUsIHNlbGYsIHBwb3J0LCBvcG9ydCwgVElQQ19PSyk7XFxuLS1cXG5uZXQvdGlwYy90b3BzcnYuYz02MTQ9c3RhdGljIHZvaWQgdGlwY190b3BzcnZfa2Vybl9ldnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ldmVudCAqZXZ0KVxcbi0tXFxubmV0L3RpcGMvdG9wc3J2LmMtNjIwLVxcbm5ldC90aXBjL3RvcHNydi5jOjYyMTpcXHRza2IgPSB0aXBjX21zZ19jcmVhdGUoVE9QX1NSViwgMCwgSU5UX0hfU0laRSwgc2l6ZW9mKCpldnQpLFxcbm5ldC90aXBjL3RvcHNydi5jLTYyMi1cXHRcXHRcXHQgICAgICBzZWxmLCBzZWxmLCBwb3J0LCBwb3J0LCAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDM6NDYuMTAyNzkwMzg0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNjA1NTU0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG5ldC90aXBjL21zZy5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBUSVBDIG1lc3NhZ2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvdGlwYy9tc2cuY2AgZmlsZS4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgaW50ZXJlc3Rpbmcgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYXJvdW5kIGxpbmUgOTcuIEknbGwgcGlucG9pbnQgdGhpcyBhcmVhIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEknbSBleHBlY3RpbmcgdG8gZWl0aGVyIHZhbGlkYXRlIG15IGh5cG90aGVzaXMgb3IgdW5jb3ZlciBhbiBpbnRlcmVzdGluZyBmZWF0dXJlLiBFaXRoZXIgd2F5LCBJJ20gcmVhZHkgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM0NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAzOjUyLjM2MzM0Nzg1OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGlwYy9tc2cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NyxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5NzpcXHRzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19tc2dfY3JlYXRlKHVpbnQgdXNlciwgdWludCB0eXBlLFxcbiAgOTg6XFx0XFx0XFx0XFx0XFx0dWludCBoZHJfc3osIHVpbnQgZGF0YV9zeiwgdTMyIGRub2RlLFxcbiAgOTk6XFx0XFx0XFx0XFx0XFx0dTMyIG9ub2RlLCB1MzIgZHBvcnQsIHUzMiBvcG9ydCwgaW50IGVycmNvZGUpXFxuIDEwMDpcXHR7XFxuIDEwMTpcXHRcXHRzdHJ1Y3QgdGlwY19tc2cgKm1zZztcXG4gMTAyOlxcdFxcdHN0cnVjdCBza19idWZmICpidWY7XFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdGJ1ZiA9IHRpcGNfYnVmX2FjcXVpcmUoaGRyX3N6ICsgZGF0YV9zeiwgR0ZQX0FUT01JQyk7XFxuIDEwNTpcXHRcXHRpZiAodW5saWtlbHkoIWJ1ZikpXFxuIDEwNjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTA3OlxcdFxcbiAxMDg6XFx0XFx0bXNnID0gYnVmX21zZyhidWYpO1xcbiAxMDk6XFx0XFx0dGlwY19tc2dfaW5pdChvbm9kZSwgbXNnLCB1c2VyLCB0eXBlLCBoZHJfc3osIGRub2RlKTtcXG4gMTEwOlxcdFxcdG1zZ19zZXRfc2l6ZShtc2csIGhkcl9zeiArIGRhdGFfc3opO1xcbiAxMTE6XFx0XFx0bXNnX3NldF9vcmlncG9ydChtc2csIG9wb3J0KTtcXG4gMTEyOlxcdFxcdG1zZ19zZXRfZGVzdHBvcnQobXNnLCBkcG9ydCk7XFxuIDExMzpcXHRcXHRtc2dfc2V0X2VycmNvZGUobXNnLCBlcnJjb2RlKTtcXG4gMTE0OlxcdFxcdHJldHVybiBidWY7XFxuIDExNTpcXHR9XFxuIDExNjpcXHRcXG4gMTE3OlxcdC8qIHRpcGNfYnVmX2FwcGVuZCgpOiBBcHBlbmQgYSBidWZmZXIgdG8gdGhlIGZyYWdtZW50IGxpc3Qgb2YgYW5vdGhlciBidWZmZXJcXG4gMTE4OlxcdCAqIEAqaGVhZGJ1ZjogaW46ICBOVUxMIGZvciBmaXJzdCBmcmFnLCBvdGhlcndpc2UgdmFsdWUgcmV0dXJuZWQgZnJvbSBwcmV2IGNhbGxcXG4gMTE5OlxcdCAqICAgICAgICAgICAgb3V0OiBzZXQgd2hlbiBzdWNjZXNzZnVsIG5vbi1jb21wbGV0ZSByZWFzc2VtYmx5LCBvdGhlcndpc2UgTlVMTFxcbiAxMjA6XFx0ICogQCpidWY6ICAgICBpbjogIHRoZSBidWZmZXIgdG8gYXBwZW5kLiBBbHdheXMgZGVmaW5lZFxcbiAxMjE6XFx0ICogICAgICAgICAgICBvdXQ6IGhlYWQgYnVmIGFmdGVyIHN1Y2Nlc3NmdWwgY29tcGxldGUgcmVhc3NlbWJseSwgb3RoZXJ3aXNlIE5VTExcXG4gMTIyOlxcdCAqIFJldHVybnMgMSB3aGVuIHJlYXNzZW1ibHkgY29tcGxldGUsIG90aGVyd2lzZSAwXFxuIDEyMzpcXHQgKi9cXG4gMTI0OlxcdGludCB0aXBjX2J1Zl9hcHBlbmQoc3RydWN0IHNrX2J1ZmYgKipoZWFkYnVmLCBzdHJ1Y3Qgc2tfYnVmZiAqKmJ1ZilcXG4gMTI1OlxcdHtcXG4gMTI2OlxcdFxcdHN0cnVjdCBza19idWZmICpoZWFkID0gKmhlYWRidWY7XFxuIDEyNzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqZnJhZyA9ICpidWY7XFxuIDEyODpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7XFxuIDEyOTpcXHRcXHRzdHJ1Y3QgdGlwY19tc2cgKm1zZztcXG4gMTMwOlxcdFxcdHUzMiBmcmFnaWQ7XFxuIDEzMTpcXHRcXHRpbnQgZGVsdGE7XFxuIDEzMjpcXHRcXHRib29sIGhlYWRzdG9sZW47XFxuIDEzMzpcXHRcXG4gMTM0OlxcdFxcdGlmICghZnJhZylcXG4gMTM1OlxcdFxcdFxcdGdvdG8gZXJyO1xcbiAxMzY6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAzOjUyLjM2MzQzNDYxOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjM1MDIyMjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHRpcGNfYnVmX2FjcXVpcmVgKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gYHRpcGNfYnVmX2FjcXVpcmVgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdldCBhIGJyb2FkZXIgdmlldy4gTGV0J3Mgc2VlIGhvdyB3aWRlc3ByZWFkIGl0cyB1c2FnZSBpcy4gVGltZSB0byBmaXJlIHVwIHRoZSBncmVwcGluZyB0b29scyBhbmQgZmluZCBldmVyeSBpbnN0YW5jZSBvZiBgdGlwY19idWZfYWNxdWlyZWAgaW4gdGhlIGNvZGViYXNlLiBUaGF0J2xsIGdpdmUgbWUgYSBmZWVsIGZvciBpdHMgY3JpdGljYWxpdHksIGhvdyBpdCdzIGJlaW5nIHVzZWQgYWNyb3NzIGRpZmZlcmVudCBtb2R1bGVzLCBhbmQgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4gb3Igb3Bwb3J0dW5pdHkgZm9yIG9wdGltaXphdGlvbi4gRXNzZW50aWFsbHksIEkgd2FudCB0byBnZXQgYSBjb250ZXh0dWFsIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwLiBUaGUgZ3JlcCB3aWxsIGdpdmUgbWUgdGhlIG1hcDsgdGhlbiBJIGNhbiBzdGFydCBjaGFydGluZyBhIGNvdXJzZSBmb3IgbW9yZSBmb2N1c2VkIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTkzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowMzo1Ni45OTg0NTg3ODNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDQ3MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfYnVmX2FjcXVpcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYmNhc3QuYz0zMTc9c3RhdGljIGludCB0aXBjX21jYXN0X3NlbmRfc3luYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9iY2FzdC5jLTMzNy1cXHQvKiBBbGxvY2F0ZSBkdW1teSBtZXNzYWdlICovXFxubmV0L3RpcGMvYmNhc3QuYzozMzg6XFx0X3NrYiA9IHRpcGNfYnVmX2FjcXVpcmUoTUNBU1RfSF9TSVpFLCBHRlBfS0VSTkVMKTtcXG5uZXQvdGlwYy9iY2FzdC5jLTMzOS1cXHRpZiAoIV9za2IpXFxuLS1cXG5uZXQvdGlwYy9jcnlwdG8uYz0yMjM4PXN0YXRpYyBpbnQgdGlwY19jcnlwdG9fa2V5X3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19hZWFkX2tleSAqc2tleSxcXG4tLVxcbm5ldC90aXBjL2NyeXB0by5jLTIyNDgtXFx0c2l6ZSA9IHRpcGNfYWVhZF9rZXlfc2l6ZShza2V5KTtcXG5uZXQvdGlwYy9jcnlwdG8uYzoyMjQ5OlxcdHNrYiA9IHRpcGNfYnVmX2FjcXVpcmUoSU5UX0hfU0laRSArIHNpemUsIEdGUF9BVE9NSUMpO1xcbm5ldC90aXBjL2NyeXB0by5jLTIyNTAtXFx0aWYgKCFza2IpXFxuLS1cXG5uZXQvdGlwYy9kaXNjb3Zlci5jPTEwND1zdGF0aWMgdm9pZCB0aXBjX2Rpc2NfbXNnX3htaXQoc3RydWN0IG5ldCAqbmV0LCB1MzIgbXR5cCwgdTMyIGRzdCxcXG4tLVxcbm5ldC90aXBjL2Rpc2NvdmVyLmMtMTExLVxcbm5ldC90aXBjL2Rpc2NvdmVyLmM6MTEyOlxcdHNrYiA9IHRpcGNfYnVmX2FjcXVpcmUoTUFYX0hfU0laRSArIE5PREVfSURfTEVOLCBHRlBfQVRPTUlDKTtcXG5uZXQvdGlwYy9kaXNjb3Zlci5jLTExMy1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC90aXBjL2Rpc2NvdmVyLmM9MzUyPWludCB0aXBjX2Rpc2NfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfYmVhcmVyICpiLFxcbi0tXFxubmV0L3RpcGMvZGlzY292ZXIuYy0zNjAtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubmV0L3RpcGMvZGlzY292ZXIuYzozNjE6XFx0ZC1cXHUwMDNlc2tiID0gdGlwY19idWZfYWNxdWlyZShNQVhfSF9TSVpFICsgTk9ERV9JRF9MRU4sIEdGUF9BVE9NSUMpO1xcbm5ldC90aXBjL2Rpc2NvdmVyLmMtMzYyLVxcdGlmICghZC1cXHUwMDNlc2tiKSB7XFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9MTk0OT12b2lkIHRpcGNfbGlua190bmxfcHJlcGFyZShzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3QgdGlwY19saW5rICp0bmwsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMjA1NC1cXHRcXHRtc2dfc2V0X3NpemUoXFx1MDAyNnRubGhkciwgcGt0bGVuICsgSU5UX0hfU0laRSk7XFxubmV0L3RpcGMvbGluay5jOjIwNTU6XFx0XFx0dG5sc2tiID0gdGlwY19idWZfYWNxdWlyZShwa3RsZW4gKyBJTlRfSF9TSVpFLCBHRlBfQVRPTUlDKTtcXG5uZXQvdGlwYy9saW5rLmMtMjA1Ni1cXHRcXHRpZiAoIXRubHNrYikge1xcbi0tXFxubmV0L3RpcGMvbXNnLmM9NTQ9Y29uc3QgaW50IG9uZV9wYWdlX210dSA9IFBBR0VfU0laRSAtIFNLQl9EQVRBX0FMSUdOKEJVRl9PVkVSSEVBRCkgLVxcbi0tXFxubmV0L3RpcGMvbXNnLmMtNTctLyoqXFxubmV0L3RpcGMvbXNnLmM6NTg6ICogdGlwY19idWZfYWNxdWlyZSAtIGNyZWF0ZXMgYSBUSVBDIG1lc3NhZ2UgYnVmZmVyXFxubmV0L3RpcGMvbXNnLmMtNTktICogQHNpemU6IG1lc3NhZ2Ugc2l6ZSAoaW5jbHVkaW5nIFRJUEMgaGVhZGVyKVxcbi0tXFxubmV0L3RpcGMvbXNnLmMtNjctICovXFxubmV0L3RpcGMvbXNnLmM6Njg6c3RydWN0IHNrX2J1ZmYgKnRpcGNfYnVmX2FjcXVpcmUodTMyIHNpemUsIGdmcF90IGdmcClcXG5uZXQvdGlwYy9tc2cuYy02OS17XFxuLS1cXG5uZXQvdGlwYy9tc2cuYz05Nz1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19tc2dfY3JlYXRlKHVpbnQgdXNlciwgdWludCB0eXBlLFxcbi0tXFxubmV0L3RpcGMvbXNnLmMtMTAzLVxcbm5ldC90aXBjL21zZy5jOjEwNDpcXHRidWYgPSB0aXBjX2J1Zl9hY3F1aXJlKGhkcl9zeiArIGRhdGFfc3osIEdGUF9BVE9NSUMpO1xcbm5ldC90aXBjL21zZy5jLTEwNS1cXHRpZiAodW5saWtlbHkoIWJ1ZikpXFxuLS1cXG5uZXQvdGlwYy9tc2cuYz0yMTc9aW50IHRpcGNfbXNnX2FwcGVuZChzdHJ1Y3QgdGlwY19tc2cgKl9oZHIsIHN0cnVjdCBtc2doZHIgKm0sIGludCBkbGVuLFxcbi0tXFxubmV0L3RpcGMvbXNnLmMtMjMwLVxcdFxcdGlmICghc2tiIHx8IHNrYi1cXHUwMDNlbGVuIFxcdTAwM2U9IG1zcykge1xcbm5ldC90aXBjL21zZy5jOjIzMTpcXHRcXHRcXHRza2IgPSB0aXBjX2J1Zl9hY3F1aXJlKG1zcywgR0ZQX0tFUk5FTCk7XFxubmV0L3RpcGMvbXNnLmMtMjMyLVxcdFxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4tLVxcbm5ldC90aXBjL21zZy5jPTMyMj1pbnQgdGlwY19tc2dfZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRpcGNfbXNnICpoZHIsXFxuLS1cXG5uZXQvdGlwYy9tc2cuYy0zNDYtXFx0XFx0LyogQWxsb2NhdGUgYSBuZXcgZnJhZ21lbnQgKi9cXG5uZXQvdGlwYy9tc2cuYzozNDc6XFx0XFx0X3NrYiA9IHRpcGNfYnVmX2FjcXVpcmUoSU5UX0hfU0laRSArIGVhdCwgR0ZQX0FUT01JQyk7XFxubmV0L3RpcGMvbXNnLmMtMzQ4LVxcdFxcdGlmICghX3NrYilcXG4tLVxcbm5ldC90aXBjL21zZy5jPTM4ND1pbnQgdGlwY19tc2dfYnVpbGQoc3RydWN0IHRpcGNfbXNnICptaGRyLCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgb2Zmc2V0LFxcbi0tXFxubmV0L3RpcGMvbXNnLmMtNDAxLVxcdGlmIChsaWtlbHkobXN6IFxcdTAwM2M9IHBrdG1heCkpIHtcXG5uZXQvdGlwYy9tc2cuYzo0MDI6XFx0XFx0c2tiID0gdGlwY19idWZfYWNxdWlyZShtc3osIEdGUF9LRVJORUwpO1xcbm5ldC90aXBjL21zZy5jLTQwMy1cXG4tLVxcbm5ldC90aXBjL21zZy5jLTQzMy1cXHQvKiBQcmVwYXJlIGZpcnN0IGZyYWdtZW50ICovXFxubmV0L3RpcGMvbXNnLmM6NDM0OlxcdHNrYiA9IHRpcGNfYnVmX2FjcXVpcmUocGt0bWF4LCBHRlBfS0VSTkVMKTtcXG5uZXQvdGlwYy9tc2cuYy00MzUtXFx0aWYgKCFza2IpXFxuLS1cXG5uZXQvdGlwYy9tc2cuYy00NjQtXFx0XFx0XFx0cGt0c3ogPSBwa3RtYXg7XFxubmV0L3RpcGMvbXNnLmM6NDY1OlxcdFxcdHNrYiA9IHRpcGNfYnVmX2FjcXVpcmUocGt0c3osIEdGUF9LRVJORUwpO1xcbm5ldC90aXBjL21zZy5jLTQ2Ni1cXHRcXHRpZiAoIXNrYikge1xcbi0tXFxubmV0L3RpcGMvbXNnLmM9NTkzPWJvb2wgdGlwY19tc2dfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKmlza2IsIGludCAqcG9zKVxcbi0tXFxubmV0L3RpcGMvbXNnLmMtNjExLVxcbm5ldC90aXBjL21zZy5jOjYxMjpcXHQqaXNrYiA9IHRpcGNfYnVmX2FjcXVpcmUoaW1zeiwgR0ZQX0FUT01JQyk7XFxubmV0L3RpcGMvbXNnLmMtNjEzLVxcdGlmICghKmlza2IpXFxuLS1cXG5uZXQvdGlwYy9tc2cuYz02Mzc9Ym9vbCB0aXBjX21zZ19yZXZlcnNlKHUzMiBvd25fbm9kZSwgIHN0cnVjdCBza19idWZmICoqc2tiLCBpbnQgZXJyKVxcbi0tXFxubmV0L3RpcGMvbXNnLmMtNjYyLVxcdC8qIEFsbG9jYXRlIG5ldyBidWZmZXIgdG8gcmV0dXJuICovXFxubmV0L3RpcGMvbXNnLmM6NjYzOlxcdCpza2IgPSB0aXBjX2J1Zl9hY3F1aXJlKGhsZW4gKyBkbGVuLCBHRlBfQVRPTUlDKTtcXG5uZXQvdGlwYy9tc2cuYy02NjQtXFx0aWYgKCEqc2tiKVxcbi0tXFxubmV0L3RpcGMvbXNnLmg9MTE1MD1zdGF0aWMgaW5saW5lIHU4ICptc2dfbm9kZV9pZChzdHJ1Y3QgdGlwY19tc2cgKmhkcilcXG4tLVxcbm5ldC90aXBjL21zZy5oLTExNTQtXFxubmV0L3RpcGMvbXNnLmg6MTE1NTpzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19idWZfYWNxdWlyZSh1MzIgc2l6ZSwgZ2ZwX3QgZ2ZwKTtcXG5uZXQvdGlwYy9tc2cuaC0xMTU2LWJvb2wgdGlwY19tc2dfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKipfc2tiKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYz02Nz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5hbWVkX3ByZXBhcmVfYnVmKHN0cnVjdCBuZXQgKm5ldCwgdTMyIHR5cGUsIHUzMiBzaXplLFxcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTY5LXtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6NzA6XFx0c3RydWN0IHNrX2J1ZmYgKmJ1ZiA9IHRpcGNfYnVmX2FjcXVpcmUoSU5UX0hfU0laRSArIHNpemUsIEdGUF9BVE9NSUMpO1xcbm5ldC90aXBjL25hbWVfZGlzdHIuYy03MS1cXHR1MzIgc2VsZiA9IHRpcGNfb3duX2FkZHIobmV0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDM6NTcuMDQ0NTE0ODEzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY3MjY5NzY5NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgVElQQyBCdWZmZXIgQWNxdWlzaXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IFRJUEMgaGFuZGxlcyBidWZmZXIgYWNxdWlzaXRpb24sIHNwZWNpZmljYWxseSB0aGUgYHRpcGNfYnVmX2FjcXVpcmVgIGZ1bmN0aW9uLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBoYXZlIGEgZ29vZCBncmFzcCBvZiB0aGUgb3ZlcmFsbCBUSVBDIGFyY2hpdGVjdHVyZSwgYnV0IEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIHRoZSBgbmV0L3RpcGMvbXNnLmNgIGZpbGUg4oCTIHRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBpbXBsZW1lbnRhdGlvbiwgYW5kIGhvcGVmdWxseSwgc29tZSBlbmxpZ2h0ZW5pbmcgY29tbWVudHMgdG8gZ3VpZGUgbWUuIExldCdzIHNlZSB3aGF0IHNlY3JldHMgdGhpcyBjb2RlIGhvbGRzLiBJIGFtIGV4cGVjdGluZyB0byBmaW5kIHRoYXQgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgcmVzb3VyY2UgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowNDowMy43NzE0OTUwNzNaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3RpcGMvbXNnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTgsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTg6XFx0ICogdGlwY19idWZfYWNxdWlyZSAtIGNyZWF0ZXMgYSBUSVBDIG1lc3NhZ2UgYnVmZmVyXFxuICA1OTpcXHQgKiBAc2l6ZTogbWVzc2FnZSBzaXplIChpbmNsdWRpbmcgVElQQyBoZWFkZXIpXFxuICA2MDpcXHQgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnc1xcbiAgNjE6XFx0ICpcXG4gIDYyOlxcdCAqIFJldHVybjogYSBuZXcgYnVmZmVyIHdpdGggZGF0YSBwb2ludGVycyBzZXQgdG8gdGhlIHNwZWNpZmllZCBzaXplLlxcbiAgNjM6XFx0ICpcXG4gIDY0OlxcdCAqIE5PVEU6XFxuICA2NTpcXHQgKiBIZWFkcm9vbSBpcyByZXNlcnZlZCB0byBhbGxvdyBwcmVwZW5kaW5nIG9mIGEgZGF0YSBsaW5rIGhlYWRlci5cXG4gIDY2OlxcdCAqIFRoZXJlIG1heSBhbHNvIGJlIHVucmVxdWVzdGVkIHRhaWxyb29tIHByZXNlbnQgYXQgdGhlIGJ1ZmZlcidzIGVuZC5cXG4gIDY3OlxcdCAqL1xcbiAgNjg6XFx0c3RydWN0IHNrX2J1ZmYgKnRpcGNfYnVmX2FjcXVpcmUodTMyIHNpemUsIGdmcF90IGdmcClcXG4gIDY5OlxcdHtcXG4gIDcwOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdHNrYiA9IGFsbG9jX3NrYl9mY2xvbmUoQlVGX09WRVJIRUFEICsgc2l6ZSwgZ2ZwKTtcXG4gIDczOlxcdFxcdGlmIChza2IpIHtcXG4gIDc0OlxcdFxcdFxcdHNrYl9yZXNlcnZlKHNrYiwgQlVGX0hFQURST09NKTtcXG4gIDc1OlxcdFxcdFxcdHNrYl9wdXQoc2tiLCBzaXplKTtcXG4gIDc2OlxcdFxcdFxcdHNrYi1cXHUwMDNlbmV4dCA9IE5VTEw7XFxuICA3NzpcXHRcXHR9XFxuICA3ODpcXHRcXHRyZXR1cm4gc2tiO1xcbiAgNzk6XFx0fVxcbiAgODA6XFx0XFxuICA4MTpcXHR2b2lkIHRpcGNfbXNnX2luaXQodTMyIG93bl9ub2RlLCBzdHJ1Y3QgdGlwY19tc2cgKm0sIHUzMiB1c2VyLCB1MzIgdHlwZSxcXG4gIDgyOlxcdFxcdFxcdCAgIHUzMiBoc2l6ZSwgdTMyIGRub2RlKVxcbiAgODM6XFx0e1xcbiAgODQ6XFx0XFx0bWVtc2V0KG0sIDAsIGhzaXplKTtcXG4gIDg1OlxcdFxcdG1zZ19zZXRfdmVyc2lvbihtKTtcXG4gIDg2OlxcdFxcdG1zZ19zZXRfdXNlcihtLCB1c2VyKTtcXG4gIDg3OlxcdFxcdG1zZ19zZXRfaGRyX3N6KG0sIGhzaXplKTtcXG4gIDg4OlxcdFxcdG1zZ19zZXRfc2l6ZShtLCBoc2l6ZSk7XFxuICA4OTpcXHRcXHRtc2dfc2V0X3ByZXZub2RlKG0sIG93bl9ub2RlKTtcXG4gIDkwOlxcdFxcdG1zZ19zZXRfdHlwZShtLCB0eXBlKTtcXG4gIDkxOlxcdFxcdGlmIChoc2l6ZSBcXHUwMDNlIFNIT1JUX0hfU0laRSkge1xcbiAgOTI6XFx0XFx0XFx0bXNnX3NldF9vcmlnbm9kZShtLCBvd25fbm9kZSk7XFxuICA5MzpcXHRcXHRcXHRtc2dfc2V0X2Rlc3Rub2RlKG0sIGRub2RlKTtcXG4gIDk0OlxcdFxcdH1cXG4gIDk1OlxcdH1cXG4gIDk2OlxcdFxcbiAgOTc6XFx0c3RydWN0IHNrX2J1ZmYgKnRpcGNfbXNnX2NyZWF0ZSh1aW50IHVzZXIsIHVpbnQgdHlwZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDQ6MDMuNzcxNTgyNzczWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3Mzc3OTU2MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgdGlwY19idWZfYWNxdWlyZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdGlwY19idWZfYWNxdWlyZWAgYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyBqdW1wcyBvdXQgYXQgbWUuIFdlJ3JlIHVzaW5nIGBhbGxvY19za2JfZmNsb25lYCAob3IgcG90ZW50aWFsbHkganVzdCBgYWxsb2Nfc2tiYCkgdG8gZ3JhYiBvdXIgYHNrYmAgZGF0YSBidWZmZXIsIGFuZCBjcml0aWNhbGx5LCB0aGlzIGRvZXNuJ3QgemVybyB0aGUgcGF5bG9hZC4gVGhlbiwgd2UgaW5pdGlhbGl6ZSB0aGUgbWVzc2FnZSBoZWFkZXIgd2l0aCBgdGlwY19tc2dfaW5pdGAsIHdoaWNoIG9ubHkgZG9lcyBhIGBtZW1zZXRgIG9uIHRoZSAqaGVhZGVyKiAoYGhzaXplYCkuIFRoZSAqcGF5bG9hZCogaXRzZWxmLCBzdGFydGluZyBhdCBgZGF0YSA9IG1zZ19kYXRhKGhkcilgLCByZW1haW5zIHVuaW5pdGlhbGl6ZWQsIHdoaWNoIGlzIGEgcHJvYmxlbS5cblxuSSByZW1lbWJlciBwcmV2aW91c2x5LCB0aGUgY29kZSBvbmx5IHVzZWQgYHN0cmNweShkYXRhLCBsLVx1MDAzZWlmX25hbWUpO2AgdG8gcG9wdWxhdGUgdGhlIHBheWxvYWQuIFRoaXMgd291bGQgKm9ubHkqIGNvcHkgdGhlIGxlbmd0aCBvZiBgbC1cdTAwM2VpZl9uYW1lYCBwbHVzIGEgbnVsbCB0ZXJtaW5hdG9yIHRvIHRoZSBgc2tiYC4gVGhlbiwgdGhlIGNvZGUgZXhwYW5kcyB0aGUgYHNrYmAgd2l0aCBgbXNnX3NldF9zaXplYCBhbmQgYHNrYl90cmltYC4gU28gYW55IGJ5dGVzIGJldHdlZW4gdGhlIGVuZCBvZiBgbC1cdTAwM2VpZl9uYW1lYCBhbmQgdGhlIGFsbG9jYXRlZCBwYXlsb2FkIHNpemUgcmVtYWluZWQgdW5pbml0aWFsaXplZCEgVGhhdCdzIGEgZGVmaW5pdGUgdnVsbmVyYWJpbGl0eS5cblxuTm93LCB3aXRoIHRoZSBwYXRjaCwgdGhpbmdzIGFyZSBjaGFuZ2luZy4gYGxgIGlzIG5vdyB6ZXJvZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCBkdXJpbmcgdGhlIGB0aXBjX2xpbmtfY3JlYXRlYCBmdW5jdGlvbiwgc28gYGwtXHUwMDNlaWZfbmFtZWAgaXMgY29tcGxldGVseSB6ZXJvZWQgb3V0ICh1cCB0byB0aGUgc2l6ZSBvZiBgVElQQ19NQVhfSUZfTkFNRWApLiBUaGUgc3Vic2VxdWVudCBgbWVtY3B5KGRhdGEsIGwtXHUwMDNlaWZfbmFtZSwgVElQQ19NQVhfSUZfTkFNRSk7YCB0aGVuIGNvcGllcyB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIGBsLVx1MDAzZWlmX25hbWVgIChhbGwgMTYsIG9yIHdoYXRldmVyIGBUSVBDX01BWF9JRl9OQU1FYCBpcywgYnl0ZXMpIGludG8gdGhlIGBkYXRhYCBidWZmZXIuIFRoaXMgbG9va3MgbXVjaCBzYWZlci5cblxuV2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgdGhlIHNpemUgb2YgYFRJUENfTUFYX0lGX05BTUVgLiBJJ2xsIGRvIGEgcXVpY2sgZ3JlcCBmb3IgYFRJUENfTUFYX0lGX05BTUVgIHRvIGNvbmZpcm0gdGhlIGFjdHVhbCBzaXplLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE5NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjA0OjUxLjE0OTU0MjkwNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMjY3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVElQQ19NQVhfSUZfTkFNRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9iZWFyZXIuYz0xMzc9c3RhdGljIGludCBiZWFyZXJfbmFtZV92YWxpZGF0ZShjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmMtMTYwLVxcdGlmICgobWVkaWFfbGVuIFxcdTAwM2M9IDEpIHx8IChtZWRpYV9sZW4gXFx1MDAzZSBUSVBDX01BWF9NRURJQV9OQU1FKSB8fFxcbm5ldC90aXBjL2JlYXJlci5jOjE2MTpcXHQgICAgKGlmX2xlbiBcXHUwMDNjPSAxKSB8fCAoaWZfbGVuIFxcdTAwM2UgVElQQ19NQVhfSUZfTkFNRSkpXFxubmV0L3RpcGMvYmVhcmVyLmMtMTYyLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmMtMTY5LVxcdFxcdGlmIChzdHJzY3B5KG5hbWVfcGFydHMtXFx1MDAzZWlmX25hbWUsIGlmX25hbWUsXFxubmV0L3RpcGMvYmVhcmVyLmM6MTcwOlxcdFxcdFxcdCAgICBUSVBDX01BWF9JRl9OQU1FKSBcXHUwMDNjIDApXFxubmV0L3RpcGMvYmVhcmVyLmMtMTcxLVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmg9MTc5PXN0cnVjdCB0aXBjX2JlYXJlcl9uYW1lcyB7XFxubmV0L3RpcGMvYmVhcmVyLmgtMTgwLVxcdGNoYXIgbWVkaWFfbmFtZVtUSVBDX01BWF9NRURJQV9OQU1FXTtcXG5uZXQvdGlwYy9iZWFyZXIuaDoxODE6XFx0Y2hhciBpZl9uYW1lW1RJUENfTUFYX0lGX05BTUVdO1xcbm5ldC90aXBjL2JlYXJlci5oLTE4Mi19O1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTEzNz1zdHJ1Y3QgdGlwY19saW5rIHtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xNTUtXFx0dTMyIHNpbGVudF9pbnR2X2NudDtcXG5uZXQvdGlwYy9saW5rLmM6MTU2OlxcdGNoYXIgaWZfbmFtZVtUSVBDX01BWF9JRl9OQU1FXTtcXG5uZXQvdGlwYy9saW5rLmMtMTU3LVxcdHUzMiBwcmlvcml0eTtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xODMyPXN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTkwMC1cXHRcXHRtc2dfc2V0X21heF9wa3QoaGRyLCBsLVxcdTAwM2VhZHZlcnRpc2VkX210dSk7XFxubmV0L3RpcGMvbGluay5jOjE5MDE6XFx0XFx0bWVtY3B5KGRhdGEsIGwtXFx1MDAzZWlmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpO1xcbm5ldC90aXBjL2xpbmsuYzoxOTAyOlxcdFxcdG1zZ19zZXRfc2l6ZShoZHIsIElOVF9IX1NJWkUgKyBUSVBDX01BWF9JRl9OQU1FKTtcXG5uZXQvdGlwYy9saW5rLmM6MTkwMzpcXHRcXHRza2JfdHJpbShza2IsIElOVF9IX1NJWkUgKyBUSVBDX01BWF9JRl9OQU1FKTtcXG5uZXQvdGlwYy9saW5rLmMtMTkwNC1cXHR9XFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9MjE3ND1zdGF0aWMgaW50IHRpcGNfbGlua19wcm90b19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0yMjIzLVxcdFxcdGlmX25hbWUgPSAgc3RycmNocihsLVxcdTAwM2VuYW1lLCAnOicpICsgMTtcXG5uZXQvdGlwYy9saW5rLmM6MjIyNDpcXHRcXHRpZiAoc2l6ZW9mKGwtXFx1MDAzZW5hbWUpIC0gKGlmX25hbWUgLSBsLVxcdTAwM2VuYW1lKSBcXHUwMDNjPSBUSVBDX01BWF9JRl9OQU1FKVxcbm5ldC90aXBjL2xpbmsuYy0yMjI1LVxcdFxcdFxcdGJyZWFrO1xcbm5ldC90aXBjL2xpbmsuYzoyMjI2OlxcdFxcdGlmIChtc2dfZGF0YV9zeihoZHIpIFxcdTAwM2MgVElQQ19NQVhfSUZfTkFNRSlcXG5uZXQvdGlwYy9saW5rLmMtMjIyNy1cXHRcXHRcXHRicmVhaztcXG5uZXQvdGlwYy9saW5rLmM6MjIyODpcXHRcXHRzdHJzY3B5KGlmX25hbWUsIGRhdGEsIFRJUENfTUFYX0lGX05BTUUpO1xcbm5ldC90aXBjL2xpbmsuYy0yMjI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowNDo1MS4xOTQ2NzM0MzRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM2MTYzOTY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgc3Ryc2NweWAgaW4gYHRpcGNfbGlua19jcmVhdGVgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHN0cnNjcHkobC1cdTAwM2VpZl9uYW1lLCBpZl9uYW1lKWAgd2l0aGluIGB0aXBjX2xpbmtfY3JlYXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBzdGFuZGFyZCBzdHJpbmcgY29weSwgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZC5cIiBCdXQgd2FpdCwgbGV0J3MgcmVmcmVzaDogd2hhdCBkb2VzIGBzdHJzY3B5YCAqYWN0dWFsbHkqIGRvPyBBaCwgaXQgY29waWVzIGEgQy1zdHJpbmcgaW50byBhIGJ1ZmZlciwgYnV0IGNyaXRpY2FsbHksIGl0IGVuZm9yY2VzIGEgc2l6ZSBsaW1pdC4gVHJ1bmNhdGlvbiBoYXBwZW5zIGlmIHRoZSBzb3VyY2UgaXMgdG9vIGJpZywgYW5kIGl0ICphbHdheXMqIE5VTEwtdGVybWluYXRlcyB0aGUgZGVzdGluYXRpb24uIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlciB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgY29waWVkIG9yIGAtRTJCSUdgIGlmIHRoZSBidWZmZXIgd2Fzbid0IGxhcmdlIGVub3VnaC5cblxuTm93LCBhIGtleSBxdWVzdGlvbiBwb3BzIGludG8gbXkgbWluZDogRG9lcyBgc3Ryc2NweWAgemVyby1wYWQgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBhZnRlciB0aGUgY29waWVkIHN0cmluZyBhbmQgdGhlIE5VTEwgdGVybWluYXRvcj8gTm8sIEkgcmVhbGl6ZSB0aGF0IGl0IGRvZXNuJ3QuIGBzdHJzY3B5YCBzaW1wbHkgd3JpdGVzIHVwIHRvIHRoYXQgTlVMTCBjaGFyYWN0ZXIuIGBzdHJzY3B5X3BhZGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgemVybyBwYWRkaW5nLlxuXG5Pa2F5LCB0aGF0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBCdXQgdGhlbiBJIHJlY2FsbCB0aGUgYWxsb2NhdGlvbjogd2Fzbid0IGBsYCBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmooKmwsIEdGUF9BVE9NSUMpO2A/IFRoYXQgbWVhbnMgYGxgIHdhcyAqemVyb2VkKiBhdCBhbGxvY2F0aW9uISBUaGlzIGluaXRpYWwgemVyb2luZyBpcyBzaWduaWZpY2FudC5cblxuSG93ZXZlciwgYSBuYWdnaW5nIGZlZWxpbmcgcmVtYWlucy4gV2hhdCBpZiBgbC1cdTAwM2VpZl9uYW1lYCBpcyAqbW9kaWZpZWQqIGxhdGVyIGluIHRoZSBjb2RlPyBPciwgZXZlbiB3b3JzZSwgd2hhdCBpZiBgbGAgaXMgcmV1c2VkIGFmdGVyIHRoaXMgb3BlcmF0aW9uPyBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IGNoZWNrIGV2ZXJ5IHNpbmdsZSBpbnN0YW5jZSB3aGVyZSBgbC1cdTAwM2VpZl9uYW1lYCBpcyBhY2Nlc3NlZCBvciBtb2RpZmllZC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBsaWZldGltZSBvZiB0aGlzIGRhdGEgc3RydWN0dXJlIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0IGFuZCB0aGF0IHRoaXMgaXNuJ3QgYSBwb3RlbnRpYWwgc2VjdXJpdHkgaXNzdWUuIFRpbWUgZm9yIGEgY29kZSBkaXZlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzkxOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowNDo1NS41NTYzMTU3NDFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwOTEwNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmX25hbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvbGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2xpbmsuYz01MT1zdHJ1Y3QgdGlwY19zdGF0cyB7XFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTEyLSAqIEBhY3RpdmU6IGxpbmsgaXMgYWN0aXZlXFxubmV0L3RpcGMvbGluay5jOjExMzogKiBAaWZfbmFtZTogYXNzb2NpYXRlZCBpbnRlcmZhY2UgbmFtZVxcbm5ldC90aXBjL2xpbmsuYy0xMTQtICogQHJzdF9jbnQ6IGxpbmsgcmVzZXQgY291bnRlclxcbi0tXFxubmV0L3RpcGMvbGluay5jPTEzNz1zdHJ1Y3QgdGlwY19saW5rIHtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xNTUtXFx0dTMyIHNpbGVudF9pbnR2X2NudDtcXG5uZXQvdGlwYy9saW5rLmM6MTU2OlxcdGNoYXIgaWZfbmFtZVtUSVBDX01BWF9JRl9OQU1FXTtcXG5uZXQvdGlwYy9saW5rLmMtMTU3LVxcdHUzMiBwcmlvcml0eTtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz00NDc9dTMyIHRpcGNfbGlua19zdGF0ZShzdHJ1Y3QgdGlwY19saW5rICpsKVxcbi0tXFxubmV0L3RpcGMvbGluay5jLTQ1NC0gKiBAbmV0OiBwb2ludGVyIHRvIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcXG5uZXQvdGlwYy9saW5rLmM6NDU1OiAqIEBpZl9uYW1lOiBhc3NvY2lhdGVkIGludGVyZmFjZSBuYW1lXFxubmV0L3RpcGMvbGluay5jLTQ1Ni0gKiBAYmVhcmVyX2lkOiBpZCAoaW5kZXgpIG9mIGFzc29jaWF0ZWQgYmVhcmVyXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtNDc1LSAqL1xcbm5ldC90aXBjL2xpbmsuYzo0NzY6Ym9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCxcXG5uZXQvdGlwYy9saW5rLmMtNDc3LVxcdFxcdCAgICAgIGludCB0b2xlcmFuY2UsIGNoYXIgbmV0X3BsYW5lLCB1MzIgbXR1LCBpbnQgcHJpb3JpdHksXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtNTA0LVxcdHNucHJpbnRmKGwtXFx1MDAzZW5hbWUsIHNpemVvZihsLVxcdTAwM2VuYW1lKSwgXFxcIiVzOiVzLSVzOnVua25vd25cXFwiLFxcbm5ldC90aXBjL2xpbmsuYzo1MDU6XFx0XFx0IHNlbGZfc3RyLCBpZl9uYW1lLCBwZWVyX3N0cik7XFxubmV0L3RpcGMvbGluay5jLTUwNi1cXG5uZXQvdGlwYy9saW5rLmM6NTA3OlxcdHN0cnNjcHkobC1cXHUwMDNlaWZfbmFtZSwgaWZfbmFtZSk7XFxubmV0L3RpcGMvbGluay5jLTUwOC1cXHRsLVxcdTAwM2VhZGRyID0gcGVlcjtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xODMyPXN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTkwMC1cXHRcXHRtc2dfc2V0X21heF9wa3QoaGRyLCBsLVxcdTAwM2VhZHZlcnRpc2VkX210dSk7XFxubmV0L3RpcGMvbGluay5jOjE5MDE6XFx0XFx0bWVtY3B5KGRhdGEsIGwtXFx1MDAzZWlmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpO1xcbm5ldC90aXBjL2xpbmsuYy0xOTAyLVxcdFxcdG1zZ19zZXRfc2l6ZShoZHIsIElOVF9IX1NJWkUgKyBUSVBDX01BWF9JRl9OQU1FKTtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0yMTc0PXN0YXRpYyBpbnQgdGlwY19saW5rX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTIxODktXFx0aW50IHJjID0gMCwgcmVsZWFzZWQ7XFxubmV0L3RpcGMvbGluay5jOjIxOTA6XFx0Y2hhciAqaWZfbmFtZTtcXG5uZXQvdGlwYy9saW5rLmMtMjE5MS1cXHR2b2lkICpkYXRhO1xcbi0tXFxubmV0L3RpcGMvbGluay5jLTIyMjItXFx0XFx0LyogQ29tcGxldGUgb3duIGxpbmsgbmFtZSB3aXRoIHBlZXIncyBpbnRlcmZhY2UgbmFtZSAqL1xcbm5ldC90aXBjL2xpbmsuYzoyMjIzOlxcdFxcdGlmX25hbWUgPSAgc3RycmNocihsLVxcdTAwM2VuYW1lLCAnOicpICsgMTtcXG5uZXQvdGlwYy9saW5rLmM6MjIyNDpcXHRcXHRpZiAoc2l6ZW9mKGwtXFx1MDAzZW5hbWUpIC0gKGlmX25hbWUgLSBsLVxcdTAwM2VuYW1lKSBcXHUwMDNjPSBUSVBDX01BWF9JRl9OQU1FKVxcbm5ldC90aXBjL2xpbmsuYy0yMjI1LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L3RpcGMvbGluay5jLTIyMjctXFx0XFx0XFx0YnJlYWs7XFxubmV0L3RpcGMvbGluay5jOjIyMjg6XFx0XFx0c3Ryc2NweShpZl9uYW1lLCBkYXRhLCBUSVBDX01BWF9JRl9OQU1FKTtcXG5uZXQvdGlwYy9saW5rLmMtMjIyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDQ6NTUuNjM3MjMwMDkxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MjgzMDEyODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6ICoqRXhwbG9yaW5nIFBvdGVudGlhbCBTaWRlIEVmZmVjdHMgYW5kIERlcGVuZGVuY2llcyoqXG5cbkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYGwtXHUwMDNlaWZfbmFtZWAgYW5kIGBsLVx1MDAzZW5hbWVgIGFyZSB1c2VkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGViYXNlLCBwYXJ0aWN1bGFybHkgd2hlcmUgdGhleSdyZSBpbnRlcmFjdGluZyB3aXRoIGVhY2ggb3RoZXIuIEknbSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9yIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgaG93IHRoZXNlIHZhcmlhYmxlcyBhcmUgdXRpbGl6ZWQsIGJlZm9yZSBJIHByb2NlZWQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBteSBuZXh0IGFjdGlvbiBkb2VzIG5vdCBjcmVhdGUgYW55IHVuZXhwZWN0ZWQgY29uc2VxdWVuY2VzLiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYGwtXHUwMDNlbmFtZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTk2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDU6MTQuOTIwMjQ1MDk4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYzMjc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsLVxcdTAwM2VuYW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL2xpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9saW5rLmM9NDQyPWNoYXIgKnRpcGNfbGlua19uYW1lKHN0cnVjdCB0aXBjX2xpbmsgKmwpXFxubmV0L3RpcGMvbGluay5jLTQ0My17XFxubmV0L3RpcGMvbGluay5jOjQ0NDpcXHRyZXR1cm4gbC1cXHUwMDNlbmFtZTtcXG5uZXQvdGlwYy9saW5rLmMtNDQ1LX1cXG4tLVxcbm5ldC90aXBjL2xpbmsuYz00NzY9Ym9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy01MDMtXFx0LyogUGVlciBpL2YgbmFtZSB3aWxsIGJlIGNvbXBsZXRlZCBieSByZXNldC9hY3RpdmF0ZSBtZXNzYWdlICovXFxubmV0L3RpcGMvbGluay5jOjUwNDpcXHRzbnByaW50ZihsLVxcdTAwM2VuYW1lLCBzaXplb2YobC1cXHUwMDNlbmFtZSksIFxcXCIlczolcy0lczp1bmtub3duXFxcIixcXG5uZXQvdGlwYy9saW5rLmMtNTA1LVxcdFxcdCBzZWxmX3N0ciwgaWZfbmFtZSwgcGVlcl9zdHIpO1xcbi0tXFxubmV0L3RpcGMvbGluay5jLTUyNC1cXHRsLVxcdTAwM2VpbnB1dHEgPSBpbnB1dHE7XFxubmV0L3RpcGMvbGluay5jOjUyNTpcXHRsLVxcdTAwM2VuYW1lZHEgPSBuYW1lZHE7XFxubmV0L3RpcGMvbGluay5jLTUyNi1cXHRsLVxcdTAwM2VzdGF0ZSA9IExJTktfUkVTRVRUSU5HO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTU1Mz1ib29sIHRpcGNfbGlua19iY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgb3dubm9kZSwgdTMyIHBlZXIsIHU4ICpwZWVyX2lkLFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTU3My1cXHRcXHQvKiBCcm9hZGNhc3QgcmVjZWl2ZXIgbGluayBuYW1lOiBcXFwiYnJvYWRjYXN0LWxpbms6XFx1MDAzY3BlZXJcXHUwMDNlXFxcIiAqL1xcbm5ldC90aXBjL2xpbmsuYzo1NzQ6XFx0XFx0c25wcmludGYobC1cXHUwMDNlbmFtZSwgc2l6ZW9mKGwtXFx1MDAzZW5hbWUpLCBcXFwiJXM6JXNcXFwiLCB0aXBjX2JjbGlua19uYW1lLFxcbm5ldC90aXBjL2xpbmsuYy01NzUtXFx0XFx0XFx0IHBlZXJfc3RyKTtcXG5uZXQvdGlwYy9saW5rLmMtNTc2LVxcdH0gZWxzZSB7XFxubmV0L3RpcGMvbGluay5jOjU3NzpcXHRcXHRzdHJzY3B5KGwtXFx1MDAzZW5hbWUsIHRpcGNfYmNsaW5rX25hbWUpO1xcbm5ldC90aXBjL2xpbmsuYy01NzgtXFx0fVxcbi0tXFxubmV0L3RpcGMvbGluay5jPTYwMT1pbnQgdGlwY19saW5rX2ZzbV9ldnQoc3RydWN0IHRpcGNfbGluayAqbCwgaW50IGV2dClcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy03NDktXFx0ZGVmYXVsdDpcXG5uZXQvdGlwYy9saW5rLmM6NzUwOlxcdFxcdHByX2VycihcXFwiVW5rbm93biBGU00gc3RhdGUgJXggaW4gJXNcXFxcblxcXCIsIGwtXFx1MDAzZXN0YXRlLCBsLVxcdTAwM2VuYW1lKTtcXG5uZXQvdGlwYy9saW5rLmMtNzUxLVxcdH1cXG5uZXQvdGlwYy9saW5rLmM6NzUyOlxcdHRyYWNlX3RpcGNfbGlua19mc20obC1cXHUwMDNlbmFtZSwgb2xkX3N0YXRlLCBsLVxcdTAwM2VzdGF0ZSwgZXZ0KTtcXG5uZXQvdGlwYy9saW5rLmMtNzUzLVxcdHJldHVybiByYztcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy03NTUtXFx0cHJfZXJyKFxcXCJJbGxlZ2FsIEZTTSBldmVudCAleCBpbiBzdGF0ZSAleCBvbiBsaW5rICVzXFxcXG5cXFwiLFxcbm5ldC90aXBjL2xpbmsuYzo3NTY6XFx0ICAgICAgIGV2dCwgbC1cXHUwMDNlc3RhdGUsIGwtXFx1MDAzZW5hbWUpO1xcbm5ldC90aXBjL2xpbmsuYzo3NTc6XFx0dHJhY2VfdGlwY19saW5rX2ZzbShsLVxcdTAwM2VuYW1lLCBvbGRfc3RhdGUsIGwtXFx1MDAzZXN0YXRlLCBldnQpO1xcbm5ldC90aXBjL2xpbmsuYy03NTgtXFx0cmV0dXJuIHJjO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTEwMTE9aW50IHRpcGNfbGlua194bWl0KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTA0NC1cXHRcXHRpZiAoaW1wID09IFRJUENfU1lTVEVNX0lNUE9SVEFOQ0UpIHtcXG5uZXQvdGlwYy9saW5rLmM6MTA0NTpcXHRcXHRcXHRwcl93YXJuKFxcXCIlc1xcdTAwM2Mlc1xcdTAwM2UsIGxpbmsgb3ZlcmZsb3dcXFwiLCBsaW5rX3JzdF9tc2csIGwtXFx1MDAzZW5hbWUpO1xcbm5ldC90aXBjL2xpbmsuYy0xMDQ2LVxcdFxcdFxcdF9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTExOTU9c3RhdGljIGJvb2wgbGlua19yZXRyYW5zbWl0X2ZhaWx1cmUoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHRpcGNfbGluayAqcixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xMjE0LVxcbm5ldC90aXBjL2xpbmsuYzoxMjE1OlxcdHByX3dhcm4oXFxcIlJldHJhbnNtaXNzaW9uIGZhaWx1cmUgb24gbGluayBcXHUwMDNjJXNcXHUwMDNlXFxcXG5cXFwiLCBsLVxcdTAwM2VuYW1lKTtcXG5uZXQvdGlwYy9saW5rLmMtMTIxNi1cXHRsaW5rX3ByaW50KGwsIFxcXCJTdGF0ZSBvZiBsaW5rIFxcXCIpO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTEyNDQ9c3RhdGljIGJvb2wgdGlwY19kYXRhX2lucHV0KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTI2Ny1cXHRcXHRsLVxcdTAwM2ViY19yY3ZsaW5rLVxcdTAwM2VzdGF0ZSA9IExJTktfRVNUQUJMSVNIRUQ7XFxubmV0L3RpcGMvbGluay5jOjEyNjg6XFx0XFx0c2tiX3F1ZXVlX3RhaWwobC1cXHUwMDNlbmFtZWRxLCBza2IpO1xcbm5ldC90aXBjL2xpbmsuYy0xMjY5LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTE0NDU9c3RhdGljIHU4IF9fdGlwY19idWlsZF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICpnYSxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xNDYzLVxcdFxcdFxcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcIkdhY2tzIG9uICVzOiAlZCwgcWw6ICVkIVxcXFxuXFxcIixcXG5uZXQvdGlwYy9saW5rLmM6MTQ2NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgbC1cXHUwMDNlbmFtZSwgbixcXG5uZXQvdGlwYy9saW5rLmMtMTQ2NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiX3F1ZXVlX2xlbihcXHUwMDI2bC1cXHUwMDNlZGVmZXJkcSkpO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTE4MzI9c3RhdGljIHZvaWQgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBpbnQgbXR5cCwgYm9vbCBwcm9iZSxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xOTEyLVxcdF9fc2tiX3F1ZXVlX3RhaWwoeG1pdHEsIHNrYik7XFxubmV0L3RpcGMvbGluay5jOjE5MTM6XFx0dHJhY2VfdGlwY19wcm90b19idWlsZChza2IsIGZhbHNlLCBsLVxcdTAwM2VuYW1lKTtcXG5uZXQvdGlwYy9saW5rLmMtMTkxNC19XFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9MjE3ND1zdGF0aWMgaW50IHRpcGNfbGlua19wcm90b19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0yMTkyLVxcbm5ldC90aXBjL2xpbmsuYzoyMTkzOlxcdHRyYWNlX3RpcGNfcHJvdG9fcmN2KHNrYiwgZmFsc2UsIGwtXFx1MDAzZW5hbWUpO1xcbm5ldC90aXBjL2xpbmsuYy0yMTk0LVxcbi0tXFxubmV0L3RpcGMvbGluay5jLTIyMjItXFx0XFx0LyogQ29tcGxldGUgb3duIGxpbmsgbmFtZSB3aXRoIHBlZXIncyBpbnRlcmZhY2UgbmFtZSAqL1xcbm5ldC90aXBjL2xpbmsuYzoyMjIzOlxcdFxcdGlmX25hbWUgPSAgc3RycmNocihsLVxcdTAwM2VuYW1lLCAnOicpICsgMTtcXG5uZXQvdGlwYy9saW5rLmM6MjIyNDpcXHRcXHRpZiAoc2l6ZW9mKGwtXFx1MDAzZW5hbWUpIC0gKGlmX25hbWUgLSBsLVxcdTAwM2VuYW1lKSBcXHUwMDNjPSBUSVBDX01BWF9JRl9OQU1FKVxcbm5ldC90aXBjL2xpbmsuYy0yMjI1LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTI1NTM9c3RhdGljIHZvaWQgbGlua19wcmludChzdHJ1Y3QgdGlwY19saW5rICpsLCBjb25zdCBjaGFyICpzdHIpXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMjU1OC1cXG5uZXQvdGlwYy9saW5rLmM6MjU1OTpcXHRwcl9pbmZvKFxcXCIlcyBMaW5rIFxcdTAwM2Mlc1xcdTAwM2Ugc3RhdGUgJXhcXFxcblxcXCIsIHN0ciwgbC1cXHUwMDNlbmFtZSwgbC1cXHUwMDNlc3RhdGUpO1xcbm5ldC90aXBjL2xpbmsuYy0yNTYwLVxcdHByX2luZm8oXFxcIlhNVFE6ICV1IFsldS0ldV0sIEJLTEdROiAldSwgU05ETlg6ICV1LCBSQ1ZOWDogJXVcXFxcblxcXCIsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9Mjc4OT1pbnQgdGlwY19ubF9hZGRfYmNfbGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTI4MjAtXFx0XFx0Z290byBhdHRyX21zZ19mdWxsO1xcbm5ldC90aXBjL2xpbmsuYzoyODIxOlxcdGlmIChubGFfcHV0X3N0cmluZyhtc2ctXFx1MDAzZXNrYiwgVElQQ19OTEFfTElOS19OQU1FLCBiY2wtXFx1MDAzZW5hbWUpKVxcbm5ldC90aXBjL2xpbmsuYy0yODIyLVxcdFxcdGdvdG8gYXR0cl9tc2dfZnVsbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDU6MTQuOTY1ODgwNTM4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNTQxMjgwMzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBDb21taXQ6IEtNU0FOIE5lZWRzIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb21taXQncyBwdXJwb3NlIOKAkyB3aGF0IGJ1ZyBpcyBpdCBhZGRyZXNzaW5nIG9yIHdoYXQgY2hhbmdlIGlzIGl0IG1ha2luZz8gVGhlIGRpZmYgc2hvd3MgYSBmZXcga2V5IG1vZGlmaWNhdGlvbnM6IGBzdHJjcHlgIGlzIGJlaW5nIHJlcGxhY2VkIGJ5IGBzdHJzY3B5YCBhbmQgYG1lbWNweWAgaW4gc2V2ZXJhbCBwbGFjZXMsIHNwZWNpZmljYWxseSBpbnZvbHZpbmcgdGhlIGBpZl9uYW1lYCBhbmQgYG5hbWVgIGZpZWxkcyB3aXRoaW4gYSBgdGlwY19saW5rYCBzdHJ1Y3R1cmUuXG5cblRoZSBjb3JlIG9mIHRoZSBpc3N1ZSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBzdGVtcyBmcm9tIGhvdyB0aGUgbGluayBwcm90b2NvbCBtZXNzYWdlIGlzIGNvbnN0cnVjdGVkIGFuZCB0cmFuc21pdHRlZC4gUHJldmlvdXNseSwgYSBgc3RyY3B5YCBjYWxsIGluIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYCB3YXMgdXNlZCB0byBjb3B5IGBsLVx1MDAzZWlmX25hbWVgIGludG8gdGhlIG1lc3NhZ2UgcGF5bG9hZC4gSG93ZXZlciwgYHN0cmNweWAgb25seSBjb3BpZXMgdXAgdG8gdGhlIG51bGwgdGVybWluYXRvciwgbGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyIHVuaW5pdGlhbGl6ZWQuIFRoaXMgY291bGQgbGVhZCB0byBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrLCB3aGVyZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgdHJhbnNtaXR0ZWQgb3ZlciB0aGUgbmV0d29yay4gSXQgY291bGQgYWxzbyB0cmlnZ2VyIEtNU0FOLlxuXG5UaGUgcGF0Y2ggYXBwZWFycyB0byBiZSBhIGRpcmVjdCByZXNwb25zZSB0byB0aGlzIHZ1bG5lcmFiaWxpdHksIGFpbWluZyB0byBlbnN1cmUgdGhlIGVudGlyZSBidWZmZXIgaXMgaW5pdGlhbGl6ZWQuXG5cbk5vdywgbGV0J3MgY2FyZWZ1bGx5IGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBLTVNBTiBzZXNzaW9uLiBUaGUgS01TQU4gZ3VpZGVsaW5lcyBhcmUgcXVpdGUgY2xlYXI6IHdlIG9ubHkgbmVlZCBLTVNBTiBpZiB0aGUgcGF0Y2ggKmludHJvZHVjZXMqIG9yICpleHBvc2VzKiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKEtBU0FOLCBMT0NLREVQLCBldGMuKSB3b3VsZCBtaXNzLiBJIG5lZWQgdG8gaG9saXN0aWNhbGx5IHJldmlldyB0aGUgcGF0Y2ggd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBlbnN1cmUgdGhpcyBwYXRjaCBpcyBub3QgY2hhbmdpbmcgY29udHJvbCBmbG93IG9yIGNhbGN1bGF0aW9ucyBpbiBhIHdheSB0aGF0IGludHJvZHVjZXMgdGhpcyByaXNrLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpbiBgdGlwY19saW5rX2NyZWF0ZWAsIHRoZSBgdGlwY19saW5rYCBzdHJ1Y3R1cmUgKGBsYCkgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGlzIGNyaXRpY2FsLiBUaGlzIGVuc3VyZXMgdGhhdCBhbGwgbWVtYmVycyBvZiB0aGUgc3RydWN0dXJlLCBpbmNsdWRpbmcgdGhlIGBpZl9uYW1lYCBmaWVsZCwgYXJlICp6ZXJvLWluaXRpYWxpemVkKiB1cG9uIGFsbG9jYXRpb24uIFRoZSBzdWJzZXF1ZW50IHVzZSBvZiBgc3Ryc2NweWAgb3ZlcndyaXRlcyB0aGUgZmlyc3QgZmV3IGJ5dGVzIHdpdGggdGhlIGFjdHVhbCBpbnRlcmZhY2UgbmFtZS4gSW1wb3J0YW50bHksIHRoZSByZW1haW5pbmcgYnl0ZXMgb2YgYGwtXHUwMDNlaWZfbmFtZWAgKnJlbWFpbiogemVyb2VkLiBUaGUgdXNlIG9mIGBtZW1jcHkoZGF0YSwgbC1cdTAwM2VpZl9uYW1lLCBUSVBDX01BWF9JRl9OQU1FKWAgdGhlbiBjb3BpZXMgdGhlIGVudGlyZSAxNi1ieXRlIGJ1ZmZlciBmcm9tIGBsLVx1MDAzZWlmX25hbWVgIGludG8gdGhlIG91dGdvaW5nIHBhY2tldC4gQmVjYXVzZSBgbC1cdTAwM2VpZl9uYW1lYCBpcyB6ZXJvLWluaXRpYWxpemVkIGFuZCB0aGVuIHBvdGVudGlhbGx5IHBhcnRpYWxseSBvdmVyd3JpdHRlbiBieSBhIHN0cmluZyAobnVsbC10ZXJtaW5hdGVkKSwgYWxsIHRoZSBjb3BpZWQgYnl0ZXMgd2lsbCBiZSBpbml0aWFsaXplZCwgZWl0aGVyIHRoZSBkYXRhIG9mIHRoZSBzdHJpbmcsIG9yIHplcm8uXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoICpyZW1vdmVzKiB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSB1c2Ugb2YgYGt6YWxsb2Nfb2JqYCwgYHN0cnNjcHlgLCBhbmQgYG1lbWNweWAgZ3VhcmFudGVlcyB0aGF0IHRoZSBmdWxsIGJ1ZmZlciBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHRyYW5zbWlzc2lvbi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZSBzdHJpbmcgY29weSBhbmQgYnVmZmVyIGNvcHkgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBzYWZlbHkuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IEtNU0FOIGNvbmNlcm5zLiBTdGFuZGFyZCBLQVNBTiBhbmQgY29tcGlsZXIgY2hlY2tzIGFyZSBzdWZmaWNpZW50LiBObyBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyByZXF1aXJlZC4gVGhlIGBOZWVkc0tNU0FOYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSBzaG91bGQgY2xlYXJseSBhcnRpY3VsYXRlIHRoaXMgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc1NSwiT3V0cHV0VG9rZW5zIjoyMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjA1OjI3LjUwNzE2MjkyNVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgdW5zYWZlIGBzdHJjcHlgIGNhbGxzIHdpdGggYHN0cnNjcHlgIGluIGB0aXBjX2xpbmtfY3JlYXRlYCBhbmQgYHRpcGNfbGlua19iY19jcmVhdGVgLCBhbmQgY2hhbmdlcyBgc3RyY3B5YCB0byBgbWVtY3B5KGRhdGEsIGwtXFx1MDAzZWlmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpYCBpbiBgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZ2AuXFxuXFxuVGhlIGBzdHJ1Y3QgdGlwY19saW5rYCBpbnN0YW5jZSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigqbCwgR0ZQX0FUT01JQylgLCBlbnN1cmluZyB0aGF0IGFsbCBmaWVsZHMgaW5jbHVkaW5nIGBsLVxcdTAwM2VpZl9uYW1lYCBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZC4gQ29weWluZyBgVElQQ19NQVhfSUZfTkFNRWAgYnl0ZXMgZnJvbSBgbC1cXHUwMDNlaWZfbmFtZWAgaW50byB0aGUgcGFja2V0IHBheWxvYWQgYGRhdGFgIHJlYWRzIG9ubHkgZnVsbHkgaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGluZywgb3IgdXNlci1zcGFjZSBpbmZvIGxlYWtzLlxcblxcblN0YW5kYXJkIEtBU0FOIGFuZCBjb21waWxlciBmb3J0aWZpY2F0aW9ucyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyBvciBidWZmZXIgb3ZlcmZsb3cgYnVncy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgdW5zYWZlIGBzdHJjcHlgIGNhbGxzIHdpdGggYHN0cnNjcHlgIGluIGB0aXBjX2xpbmtfY3JlYXRlYCBhbmQgYHRpcGNfbGlua19iY19jcmVhdGVgLCBhbmQgY2hhbmdlcyBgc3RyY3B5YCB0byBgbWVtY3B5KGRhdGEsIGwtXFx1MDAzZWlmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpYCBpbiBgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZ2AuXFxuXFxuVGhlIGBzdHJ1Y3QgdGlwY19saW5rYCBpbnN0YW5jZSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigqbCwgR0ZQX0FUT01JQylgLCBlbnN1cmluZyB0aGF0IGFsbCBmaWVsZHMgaW5jbHVkaW5nIGBsLVxcdTAwM2VpZl9uYW1lYCBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZC4gQ29weWluZyBgVElQQ19NQVhfSUZfTkFNRWAgYnl0ZXMgZnJvbSBgbC1cXHUwMDNlaWZfbmFtZWAgaW50byB0aGUgcGFja2V0IHBheWxvYWQgYGRhdGFgIHJlYWRzIG9ubHkgZnVsbHkgaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGluZywgb3IgdXNlci1zcGFjZSBpbmZvIGxlYWtzLlxcblxcblN0YW5kYXJkIEtBU0FOIGFuZCBjb21waWxlciBmb3J0aWZpY2F0aW9ucyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyBvciBidWZmZXIgb3ZlcmZsb3cgYnVncy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrwhm6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 12:06:10 +0000 UTC FinishedAt: 2026-08-29 13:05:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC", "INET" ], "series_id": "5e027c65-0e45-47fb-9868-b1b6ea4851fd" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tipc_link_create", "tipc_link_bc_create", "tipc_link_build_reset_msg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfbGlua19jcmVhdGUmIzM0OywKICAgICYjMzQ7dGlwY19saW5rX2JjX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt0aXBjX2xpbmtfYnVpbGRfcmVzZXRfbXNnJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgdW5zYWZlIGBzdHJjcHlgIGNhbGxzIHdpdGggYHN0cnNjcHlgIGluIGB0aXBjX2xpbmtfY3JlYXRlYCBhbmQgYHRpcGNfbGlua19iY19jcmVhdGVgLCBhbmQgY2hhbmdlcyBgc3RyY3B5YCB0byBgbWVtY3B5KGRhdGEsIGwtXHUwMDNlaWZfbmFtZSwgVElQQ19NQVhfSUZfTkFNRSlgIGluIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYC5cblxuVGhlIGBzdHJ1Y3QgdGlwY19saW5rYCBpbnN0YW5jZSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigqbCwgR0ZQX0FUT01JQylgLCBlbnN1cmluZyB0aGF0IGFsbCBmaWVsZHMgaW5jbHVkaW5nIGBsLVx1MDAzZWlmX25hbWVgIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBDb3B5aW5nIGBUSVBDX01BWF9JRl9OQU1FYCBieXRlcyBmcm9tIGBsLVx1MDAzZWlmX25hbWVgIGludG8gdGhlIHBhY2tldCBwYXlsb2FkIGBkYXRhYCByZWFkcyBvbmx5IGZ1bGx5IGluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBicmFuY2hpbmcsIG9yIHVzZXItc3BhY2UgaW5mbyBsZWFrcy5cblxuU3RhbmRhcmQgS0FTQU4gYW5kIGNvbXBpbGVyIGZvcnRpZmljYXRpb25zIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIG9yIGJ1ZmZlciBvdmVyZmxvdyBidWdzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgVElQQyBsaW5rIGluaXRpYWxpemF0aW9uIGFuZCBwcm90b2NvbCBtZXNzYWdlIGNvbnN0cnVjdGlvbiBsb2dpYyBpbiBuZXQvdGlwYy9saW5rLmMgKHVzaW5nIHN0cnNjcHkgYW5kIGJvdW5kZWQgbWVtY3B5IGluc3RlYWQgb2Ygc3RyY3B5KS4gVElQQyBpcyBmdWxseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZhMWJmY2UwM2VjOGI1OTM1ZDM0YWViODQ4ZjY4MWZmYjlkNTc3OWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxMzowMDo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmMgYi9uZXQvdGlwYy9saW5rLmNcbmluZGV4IDQ5ZGZjMDk4ZDg5YjIuLjY0MjdjNjlmODkyOTQgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9saW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL2xpbmsuY1xuQEAgLTUwNCw3ICYjNDM7NTA0LDcgQEAgYm9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCxcbiBcdHNucHJpbnRmKGwtXHUwMDNlbmFtZSwgc2l6ZW9mKGwtXHUwMDNlbmFtZSksIFwmIzM0OyVzOiVzLSVzOnVua25vd25cJiMzNDssXG4gXHRcdCBzZWxmX3N0ciwgaWZfbmFtZSwgcGVlcl9zdHIpO1xuIFxuLVx0c3RyY3B5KGwtXHUwMDNlaWZfbmFtZSwgaWZfbmFtZSk7XG4mIzQzO1x0c3Ryc2NweShsLVx1MDAzZWlmX25hbWUsIGlmX25hbWUpO1xuIFx0bC1cdTAwM2VhZGRyID0gcGVlcjtcbiBcdGwtXHUwMDNlcGVlcl9jYXBzID0gcGVlcl9jYXBzO1xuIFx0bC1cdTAwM2VuZXQgPSBuZXQ7XG5AQCAtNTc0LDcgJiM0Mzs1NzQsNyBAQCBib29sIHRpcGNfbGlua19iY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgb3dubm9kZSwgdTMyIHBlZXIsIHU4ICpwZWVyX2lkLFxuIFx0XHRzbnByaW50ZihsLVx1MDAzZW5hbWUsIHNpemVvZihsLVx1MDAzZW5hbWUpLCBcJiMzNDslczolc1wmIzM0OywgdGlwY19iY2xpbmtfbmFtZSxcbiBcdFx0XHQgcGVlcl9zdHIpO1xuIFx0fSBlbHNlIHtcbi1cdFx0c3RyY3B5KGwtXHUwMDNlbmFtZSwgdGlwY19iY2xpbmtfbmFtZSk7XG4mIzQzO1x0XHRzdHJzY3B5KGwtXHUwMDNlbmFtZSwgdGlwY19iY2xpbmtfbmFtZSk7XG4gXHR9XG4gXHR0cmFjZV90aXBjX2xpbmtfcmVzZXQobCwgVElQQ19EVU1QX0FMTCwgXCYjMzQ7YmNsaW5rIGNyZWF0ZWQhXCYjMzQ7KTtcbiBcdHRpcGNfbGlua19yZXNldChsKTtcbkBAIC0xODk4LDcgJiM0MzsxODk4LDcgQEAgc3RhdGljIHZvaWQgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBpbnQgbXR5cCwgYm9vbCBwcm9iZSxcbiBcdFx0XHRtc2dfc2V0X2Rlc3Rfc2Vzc2lvbihoZHIsIGwtXHUwMDNlcGVlcl9zZXNzaW9uKTtcbiBcdFx0fVxuIFx0XHRtc2dfc2V0X21heF9wa3QoaGRyLCBsLVx1MDAzZWFkdmVydGlzZWRfbXR1KTtcbi1cdFx0c3RyY3B5KGRhdGEsIGwtXHUwMDNlaWZfbmFtZSk7XG4mIzQzO1x0XHRtZW1jcHkoZGF0YSwgbC1cdTAwM2VpZl9uYW1lLCBUSVBDX01BWF9JRl9OQU1FKTtcbiBcdFx0bXNnX3NldF9zaXplKGhkciwgSU5UX0hfU0laRSAmIzQzOyBUSVBDX01BWF9JRl9OQU1FKTtcbiBcdFx0c2tiX3RyaW0oc2tiLCBJTlRfSF9TSVpFICYjNDM7IFRJUENfTUFYX0lGX05BTUUpO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfbGlua19jcmVhdGUmIzM0OywKICAgICYjMzQ7dGlwY19saW5rX2JjX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt0aXBjX2xpbmtfYnVpbGRfcmVzZXRfbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFRJUEMgbGluayBpbml0aWFsaXphdGlvbiBhbmQgcHJvdG9jb2wgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gbG9naWMgaW4gbmV0L3RpcGMvbGluay5jICh1c2luZyBzdHJzY3B5IGFuZCBib3VuZGVkIG1lbWNweSBpbnN0ZWFkIG9mIHN0cmNweSkuIFRJUEMgaXMgZnVsbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YTFiZmNlMDNlYzhiNTkzNWQzNGFlYjg0OGY2ODFmZmI5ZDU3NzliCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMTM6MDA6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmMgYi9uZXQvdGlwYy9saW5rLmMKaW5kZXggNDlkZmMwOThkODliMi4uNjQyN2M2OWY4OTI5NCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL2xpbmsuYwpAQCAtNTA0LDcgJiM0Mzs1MDQsNyBAQCBib29sIHRpcGNfbGlua19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppZl9uYW1lLCBpbnQgYmVhcmVyX2lkLAogCXNucHJpbnRmKGwtJmd0O25hbWUsIHNpemVvZihsLSZndDtuYW1lKSwgJiMzNDslczolcy0lczp1bmtub3duJiMzNDssCiAJCSBzZWxmX3N0ciwgaWZfbmFtZSwgcGVlcl9zdHIpOwogCi0Jc3RyY3B5KGwtJmd0O2lmX25hbWUsIGlmX25hbWUpOwomIzQzOwlzdHJzY3B5KGwtJmd0O2lmX25hbWUsIGlmX25hbWUpOwogCWwtJmd0O2FkZHIgPSBwZWVyOwogCWwtJmd0O3BlZXJfY2FwcyA9IHBlZXJfY2FwczsKIAlsLSZndDtuZXQgPSBuZXQ7CkBAIC01NzQsNyAmIzQzOzU3NCw3IEBAIGJvb2wgdGlwY19saW5rX2JjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBvd25ub2RlLCB1MzIgcGVlciwgdTggKnBlZXJfaWQsCiAJCXNucHJpbnRmKGwtJmd0O25hbWUsIHNpemVvZihsLSZndDtuYW1lKSwgJiMzNDslczolcyYjMzQ7LCB0aXBjX2JjbGlua19uYW1lLAogCQkJIHBlZXJfc3RyKTsKIAl9IGVsc2UgewotCQlzdHJjcHkobC0mZ3Q7bmFtZSwgdGlwY19iY2xpbmtfbmFtZSk7CiYjNDM7CQlzdHJzY3B5KGwtJmd0O25hbWUsIHRpcGNfYmNsaW5rX25hbWUpOwogCX0KIAl0cmFjZV90aXBjX2xpbmtfcmVzZXQobCwgVElQQ19EVU1QX0FMTCwgJiMzNDtiY2xpbmsgY3JlYXRlZCEmIzM0Oyk7CiAJdGlwY19saW5rX3Jlc2V0KGwpOwpAQCAtMTg5OCw3ICYjNDM7MTg5OCw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsCiAJCQltc2dfc2V0X2Rlc3Rfc2Vzc2lvbihoZHIsIGwtJmd0O3BlZXJfc2Vzc2lvbik7CiAJCX0KIAkJbXNnX3NldF9tYXhfcGt0KGhkciwgbC0mZ3Q7YWR2ZXJ0aXNlZF9tdHUpOwotCQlzdHJjcHkoZGF0YSwgbC0mZ3Q7aWZfbmFtZSk7CiYjNDM7CQltZW1jcHkoZGF0YSwgbC0mZ3Q7aWZfbmFtZSwgVElQQ19NQVhfSUZfTkFNRSk7CiAJCW1zZ19zZXRfc2l6ZShoZHIsIElOVF9IX1NJWkUgJiM0MzsgVElQQ19NQVhfSUZfTkFNRSk7CiAJCXNrYl90cmltKHNrYiwgSU5UX0hfU0laRSAmIzQzOyBUSVBDX01BWF9JRl9OQU1FKTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTAKCQkJCQkJCW91dHB1dDogMTAxCgkJCQkJCQl0aG91Z2h0czogMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVElQQyBMaW5rIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIHByb3ZpZGVkIHRvb2xzIHN1Z2dlc3QgYSBjb2RlIGluc3BlY3Rpb24gaXMgaW4gb3JkZXIuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHBhdGNoIHRhcmdldGluZyBgbmV0L3RpcGMvbGluay5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgZGlmZiBoaWdobGlnaHRzIHNvbWUgaW50ZXJlc3Rpbmcgc3RyaW5nIGhhbmRsaW5nIGNoYW5nZXMuCgpUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhlIHJlcGxhY2VtZW50IG9mIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIGluIGB0aXBjX2xpbmtfY3JlYXRlKClgIGFuZCBgdGlwY19saW5rX2JjX2NyZWF0ZSgpYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93IHByZXZlbnRpb24gbWVhc3VyZS4gUmVwbGFjaW5nIGEgcG90ZW50aWFsbHkgdW5ib3VuZGVkIGNvcHkgd2l0aCBhIHNhZmUsIGJvdW5kZWQgY29weSBpcyBhbHdheXMgYSBnb29kIHByYWN0aWNlLCBlc3BlY2lhbGx5IGluIGEgbmV0d29yayBjb250ZXh0IHdoZXJlIG1hbGljaW91cyBhY3RvcnMgbWlnaHQgdHJ5IHRvIGV4cGxvaXQgdnVsbmVyYWJpbGl0aWVzIHRocm91Z2ggY3JhZnRlZCBpbnB1dC4gS3Vkb3MgZm9yIHNwb3R0aW5nIGFuZCBhZGRyZXNzaW5nIHRob3NlLgoKVGhlIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKClgIGNoYW5nZSwgaG93ZXZlciwgc3dhcHBpbmcgYHN0cmNweWAgd2l0aCBgbWVtY3B5YCB3aXRoIGBUSVBDX01BWF9JRl9OQU1FYCBhcyB0aGUgc2l6ZSBhcmd1bWVudCwgaXMgaW50ZXJlc3RpbmcuIEl0IHN0aWxsIGxvb2tzIGxpa2UgYW4gYXR0ZW1wdCB0byBtYWtlIHRoZSBjb2RlIHNhZmVyIGFuZCBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3MuIEkmIzM5O2QgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbnRleHRzIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIG9yaWdpbmFsIGBzdHJjcHlgIHVzYWdlcy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYFRJUENfTUFYX0lGX05BTUVgIGlzIHRoZSBjb3JyZWN0IGxpbWl0IGFuZCBpZiBpdCYjMzk7cyBjb25zaXN0ZW50bHkgZW5mb3JjZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGF0ZWQgY29kZSB0byBzZWUgaWYgdGhlcmUgd2VyZSBhbnkgaXNzdWVzIHJlcG9ydGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGFzIHdlbGwsIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgY29uZmlndXJhYmxlIHZhbHVlcy4KClRpbWUgdG8gcHVsbCB1cCBgbmV0L3RpcGMvbGluay5jYCBhbmQgc3RhcnQgcmVhZGluZyBhcm91bmQgdGhvc2UgY2FsbCBzaXRlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGVkZ2UgY2FzZXMsIGFuZCwgb2YgY291cnNlLCB0byBtYWtlIHN1cmUgdGhlIHJlcGxhY2VtZW50cyBhcmUgZnVuY3Rpb25hbGx5IHNvdW5kIGFuZCBkb24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy4gSXQmIzM5O3MgdGltZSB0byBjb25maXJtIHRoYXQgdGhlIHBhdGNoIGlzIGluZGVlZCBhIGdvb2QgdGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VElQQ19NQVhfSUZfTkFNRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2JlYXJlci5jPTEzNz1zdGF0aWMgaW50IGJlYXJlcl9uYW1lX3ZhbGlkYXRlKGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubmV0L3RpcGMvYmVhcmVyLmMtMTYwLVx0aWYgKChtZWRpYV9sZW4gXHUwMDNjPSAxKSB8fCAobWVkaWFfbGVuIFx1MDAzZSBUSVBDX01BWF9NRURJQV9OQU1FKSB8fFxubmV0L3RpcGMvYmVhcmVyLmM6MTYxOlx0ICAgIChpZl9sZW4gXHUwMDNjPSAxKSB8fCAoaWZfbGVuIFx1MDAzZSBUSVBDX01BWF9JRl9OQU1FKSlcbm5ldC90aXBjL2JlYXJlci5jLTE2Mi1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L3RpcGMvYmVhcmVyLmMtMTY5LVx0XHRpZiAoc3Ryc2NweShuYW1lX3BhcnRzLVx1MDAzZWlmX25hbWUsIGlmX25hbWUsXG5uZXQvdGlwYy9iZWFyZXIuYzoxNzA6XHRcdFx0ICAgIFRJUENfTUFYX0lGX05BTUUpIFx1MDAzYyAwKVxubmV0L3RpcGMvYmVhcmVyLmMtMTcxLVx0XHRcdHJldHVybiAwO1xuLS1cbm5ldC90aXBjL2JlYXJlci5oPTE3OT1zdHJ1Y3QgdGlwY19iZWFyZXJfbmFtZXMge1xubmV0L3RpcGMvYmVhcmVyLmgtMTgwLVx0Y2hhciBtZWRpYV9uYW1lW1RJUENfTUFYX01FRElBX05BTUVdO1xubmV0L3RpcGMvYmVhcmVyLmg6MTgxOlx0Y2hhciBpZl9uYW1lW1RJUENfTUFYX0lGX05BTUVdO1xubmV0L3RpcGMvYmVhcmVyLmgtMTgyLX07XG4tLVxubmV0L3RpcGMvbGluay5jPTEzNz1zdHJ1Y3QgdGlwY19saW5rIHtcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTU1LVx0dTMyIHNpbGVudF9pbnR2X2NudDtcbm5ldC90aXBjL2xpbmsuYzoxNTY6XHRjaGFyIGlmX25hbWVbVElQQ19NQVhfSUZfTkFNRV07XG5uZXQvdGlwYy9saW5rLmMtMTU3LVx0dTMyIHByaW9yaXR5O1xuLS1cbm5ldC90aXBjL2xpbmsuYz0xODMyPXN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsXG4tLVxubmV0L3RpcGMvbGluay5jLTE5MDAtXHRcdG1zZ19zZXRfbWF4X3BrdChoZHIsIGwtXHUwMDNlYWR2ZXJ0aXNlZF9tdHUpO1xubmV0L3RpcGMvbGluay5jOjE5MDE6XHRcdG1lbWNweShkYXRhLCBsLVx1MDAzZWlmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpO1xubmV0L3RpcGMvbGluay5jOjE5MDI6XHRcdG1zZ19zZXRfc2l6ZShoZHIsIElOVF9IX1NJWkUgJiM0MzsgVElQQ19NQVhfSUZfTkFNRSk7XG5uZXQvdGlwYy9saW5rLmM6MTkwMzpcdFx0c2tiX3RyaW0oc2tiLCBJTlRfSF9TSVpFICYjNDM7IFRJUENfTUFYX0lGX05BTUUpO1xubmV0L3RpcGMvbGluay5jLTE5MDQtXHR9XG4tLVxubmV0L3RpcGMvbGluay5jPTIxNzQ9c3RhdGljIGludCB0aXBjX2xpbmtfcHJvdG9fcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvbGluay5jLTIyMjMtXHRcdGlmX25hbWUgPSAgc3RycmNocihsLVx1MDAzZW5hbWUsICYjMzk7OiYjMzk7KSAmIzQzOyAxO1xubmV0L3RpcGMvbGluay5jOjIyMjQ6XHRcdGlmIChzaXplb2YobC1cdTAwM2VuYW1lKSAtIChpZl9uYW1lIC0gbC1cdTAwM2VuYW1lKSBcdTAwM2M9IFRJUENfTUFYX0lGX05BTUUpXG5uZXQvdGlwYy9saW5rLmMtMjIyNS1cdFx0XHRicmVhaztcbm5ldC90aXBjL2xpbmsuYzoyMjI2Olx0XHRpZiAobXNnX2RhdGFfc3ooaGRyKSBcdTAwM2MgVElQQ19NQVhfSUZfTkFNRSlcbm5ldC90aXBjL2xpbmsuYy0yMjI3LVx0XHRcdGJyZWFrO1xubmV0L3RpcGMvbGluay5jOjIyMjg6XHRcdHN0cnNjcHkoaWZfbmFtZSwgZGF0YSwgVElQQ19NQVhfSUZfTkFNRSk7XG5uZXQvdGlwYy9saW5rLmMtMjIyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL2xpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDk1Olx0XG4gNDk2Olx0XHQvKiBTZXQgbGluayBuYW1lIGZvciB1bmljYXN0IGxpbmtzIG9ubHkgKi9cbiA0OTc6XHRcdGlmIChwZWVyX2lkKSB7XG4gNDk4Olx0XHRcdGlmICh0aXBjX25vZGVpZDJzdHJpbmcoc2VsZl9zdHIsIHRpcGNfb3duX2lkKG5ldCkpIFx1MDAzZSBOT0RFX0lEX0xFTilcbiA0OTk6XHRcdFx0XHRzcHJpbnRmKHNlbGZfc3RyLCBcJiMzNDsleFwmIzM0Oywgc2VsZik7XG4gNTAwOlx0XHRcdGlmICh0aXBjX25vZGVpZDJzdHJpbmcocGVlcl9zdHIsIHBlZXJfaWQpIFx1MDAzZSBOT0RFX0lEX0xFTilcbiA1MDE6XHRcdFx0XHRzcHJpbnRmKHBlZXJfc3RyLCBcJiMzNDsleFwmIzM0OywgcGVlcik7XG4gNTAyOlx0XHR9XG4gNTAzOlx0XHQvKiBQZWVyIGkvZiBuYW1lIHdpbGwgYmUgY29tcGxldGVkIGJ5IHJlc2V0L2FjdGl2YXRlIG1lc3NhZ2UgKi9cbiA1MDQ6XHRcdHNucHJpbnRmKGwtXHUwMDNlbmFtZSwgc2l6ZW9mKGwtXHUwMDNlbmFtZSksIFwmIzM0OyVzOiVzLSVzOnVua25vd25cJiMzNDssXG4gNTA1Olx0XHRcdCBzZWxmX3N0ciwgaWZfbmFtZSwgcGVlcl9zdHIpO1xuIDUwNjpcdFxuIDUwNzpcdFx0c3Ryc2NweShsLVx1MDAzZWlmX25hbWUsIGlmX25hbWUpO1xuIDUwODpcdFx0bC1cdTAwM2VhZGRyID0gcGVlcjtcbiA1MDk6XHRcdGwtXHUwMDNlcGVlcl9jYXBzID0gcGVlcl9jYXBzO1xuIDUxMDpcdFx0bC1cdTAwM2VuZXQgPSBuZXQ7XG4gNTExOlx0XHRsLVx1MDAzZWluX3Nlc3Npb24gPSBmYWxzZTtcbiA1MTI6XHRcdGwtXHUwMDNlYmVhcmVyX2lkID0gYmVhcmVyX2lkO1xuIDUxMzpcdFx0bC1cdTAwM2V0b2xlcmFuY2UgPSB0b2xlcmFuY2U7XG4gNTE0Olx0XHRpZiAoYmNfcmN2bGluaylcbiA1MTU6XHRcdFx0YmNfcmN2bGluay1cdTAwM2V0b2xlcmFuY2UgPSB0b2xlcmFuY2U7XG4gNTE2Olx0XHRsLVx1MDAzZW5ldF9wbGFuZSA9IG5ldF9wbGFuZTtcbiA1MTc6XHRcdGwtXHUwMDNlYWR2ZXJ0aXNlZF9tdHUgPSBtdHU7XG4gNTE4Olx0XHRsLVx1MDAzZW10dSA9IG10dTtcbiA1MTk6XHRcdGwtXHUwMDNlcHJpb3JpdHkgPSBwcmlvcml0eTtcbiA1MjA6XHRcdHRpcGNfbGlua19zZXRfcXVldWVfbGltaXRzKGwsIG1pbl93aW4sIG1heF93aW4pO1xuIDUyMTpcdFx0bC1cdTAwM2VhY2tlcnMgPSAxO1xuIDUyMjpcdFx0bC1cdTAwM2ViY19zbmRsaW5rID0gYmNfc25kbGluaztcbiA1MjM6XHRcdGwtXHUwMDNlYmNfcmN2bGluayA9IGJjX3Jjdmxpbms7XG4gNTI0Olx0XHRsLVx1MDAzZWlucHV0cSA9IGlucHV0cTtcbiA1MjU6XHRcdGwtXHUwMDNlbmFtZWRxID0gbmFtZWRxO1xuIDUyNjpcdFx0bC1cdTAwM2VzdGF0ZSA9IExJTktfUkVTRVRUSU5HO1xuIDUyNzpcdFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmwtXHUwMDNldHJhbnNtcSk7XG4gNTI4Olx0XHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bC1cdTAwM2ViYWNrbG9ncSk7XG4gNTI5Olx0XHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bC1cdTAwM2VkZWZlcmRxKTtcbiA1MzA6XHRcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZsLVx1MDAzZWZhaWxvdmVyX2RlZmVyZHEpO1xuIDUzMTpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZsLVx1MDAzZXdha2V1cHEpO1xuIDUzMjpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChsLVx1MDAzZWlucHV0cSk7XG4gNTMzOlx0XHRyZXR1cm4gdHJ1ZTtcbiA1MzQ6XHR9XG4gNTM1Olx0XG4gNTM2Olx0LyoqXG4gNTM3Olx0ICogdGlwY19saW5rX2JjX2NyZWF0ZSAtIGNyZWF0ZSBuZXcgbGluayB0byBiZSB1c2VkIGZvciBicm9hZGNhc3RcbiA1Mzg6XHQgKiBAbmV0OiBwb2ludGVyIHRvIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcbiA1Mzk6XHQgKiBAbXR1OiBtdHUgdG8gYmUgdXNlZCBpbml0aWFsbHkgaWYgbm8gcGVlcnNcbiA1NDA6XHQgKiBAbWluX3dpbjogbWluaW1hbCBzZW5kIHdpbmRvdyB0byBiZSB1c2VkIGJ5IGxpbmtcbiA1NDE6XHQgKiBAbWF4X3dpbjogbWF4aW1hbCBzZW5kIHdpbmRvdyB0byBiZSB1c2VkIGJ5IGxpbmtcbiA1NDI6XHQgKiBAaW5wdXRxOiBxdWV1ZSB0byBwdXQgbWVzc2FnZXMgcmVhZHkgZm9yIGRlbGl2ZXJ5XG4gNTQzOlx0ICogQG5hbWVkcTogcXVldWUgdG8gcHV0IGJpbmRpbmcgdGFibGUgdXBkYXRlIG1lc3NhZ2VzIHJlYWR5IGZvciBkZWxpdmVyeVxuIDU0NDpcdCAqIEBsaW5rOiByZXR1cm4gdmFsdWUsIHBvaW50ZXIgdG8gcHV0IHRoZSBjcmVhdGVkIGxpbmtcbiA1NDU6XHQgKiBAb3dubm9kZTogaWRlbnRpdHkgb2Ygb3duIG5vZGVcbiA1NDY6XHQgKiBAcGVlcjogbm9kZSBpZCBvZiBwZWVyIG5vZGVcbiA1NDc6XHQgKiBAcGVlcl9pZDogMTI4LWJpdCBJRCBvZiBwZWVyXG4gNTQ4Olx0ICogQHBlZXJfY2FwczogYml0bWFwIGRlc2NyaWJpbmcgcGVlciBub2RlIGNhcGFiaWxpdGllc1xuIDU0OTpcdCAqIEBiY19zbmRsaW5rOiB0aGUgbmFtZXNwYWNlIGdsb2JhbCBsaW5rIHVzZWQgZm9yIGJyb2FkY2FzdCBzZW5kaW5nXG4gNTUwOlx0ICpcbiA1NTE6XHQgKiBSZXR1cm46IHRydWUgaWYgbGluayB3YXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGZhbHNlXG4gNTUyOlx0ICovXG4gNTUzOlx0Ym9vbCB0aXBjX2xpbmtfYmNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG93bm5vZGUsIHUzMiBwZWVyLCB1OCAqcGVlcl9pZCxcbiA1NTQ6XHRcdFx0XHQgaW50IG10dSwgdTMyIG1pbl93aW4sIHUzMiBtYXhfd2luLCB1MTYgcGVlcl9jYXBzLFxuIDU1NTpcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsXG4gNTU2Olx0XHRcdFx0IHN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcSxcbiA1NTc6XHRcdFx0XHQgc3RydWN0IHRpcGNfbGluayAqYmNfc25kbGluayxcbiA1NTg6XHRcdFx0XHQgc3RydWN0IHRpcGNfbGluayAqKmxpbmspXG4gNTU5Olx0e1xuIDU2MDpcdFx0c3RydWN0IHRpcGNfbGluayAqbDtcbiA1NjE6XHRcbiA1NjI6XHRcdGlmICghdGlwY19saW5rX2NyZWF0ZShuZXQsIFwmIzM0O1wmIzM0OywgTUFYX0JFQVJFUlMsIDAsICYjMzk7WiYjMzk7LCBtdHUsIDAsIG1pbl93aW4sXG4gNTYzOlx0XHRcdFx0ICAgICAgbWF4X3dpbiwgMCwgb3dubm9kZSwgcGVlciwgTlVMTCwgcGVlcl9jYXBzLFxuIDU2NDpcdFx0XHRcdCAgICAgIGJjX3NuZGxpbmssIE5VTEwsIGlucHV0cSwgbmFtZWRxLCBsaW5rKSlcbiA1NjU6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDU2NjpcdFxuIDU2NzpcdFx0bCA9ICpsaW5rO1xuIDU2ODpcdFx0aWYgKHBlZXJfaWQpIHtcbiA1Njk6XHRcdFx0Y2hhciBwZWVyX3N0cltOT0RFX0lEX1NUUl9MRU5dID0gezAsfTtcbiA1NzA6XHRcbiA1NzE6XHRcdFx0aWYgKHRpcGNfbm9kZWlkMnN0cmluZyhwZWVyX3N0ciwgcGVlcl9pZCkgXHUwMDNlIE5PREVfSURfTEVOKVxuIDU3MjpcdFx0XHRcdHNwcmludGYocGVlcl9zdHIsIFwmIzM0OyV4XCYjMzQ7LCBwZWVyKTtcbiA1NzM6XHRcdFx0LyogQnJvYWRjYXN0IHJlY2VpdmVyIGxpbmsgbmFtZTogXCYjMzQ7YnJvYWRjYXN0LWxpbms6XHUwMDNjcGVlclx1MDAzZVwmIzM0OyAqL1xuIDU3NDpcdFx0XHRzbnByaW50ZihsLVx1MDAzZW5hbWUsIHNpemVvZihsLVx1MDAzZW5hbWUpLCBcJiMzNDslczolc1wmIzM0OywgdGlwY19iY2xpbmtfbmFtZSxcbiA1NzU6XHRcdFx0XHQgcGVlcl9zdHIpO1xuIDU3NjpcdFx0fSBlbHNlIHtcbiA1Nzc6XHRcdFx0c3Ryc2NweShsLVx1MDAzZW5hbWUsIHRpcGNfYmNsaW5rX25hbWUpO1xuIDU3ODpcdFx0fVxuIDU3OTpcdFx0dHJhY2VfdGlwY19saW5rX3Jlc2V0KGwsIFRJUENfRFVNUF9BTEwsIFwmIzM0O2JjbGluayBjcmVhdGVkIVwmIzM0Oyk7XG4gNTgwOlx0XHR0aXBjX2xpbmtfcmVzZXQobCk7XG4gNTgxOlx0XHRsLVx1MDAzZXN0YXRlID0gTElOS19SRVNFVDtcbiA1ODI6XHRcdGwtXHUwMDNlYWNrZXJzID0gMDtcbiA1ODM6XHRcdGwtXHUwMDNlYmNfcmN2bGluayA9IGw7XG4gNTg0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGlwYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVElQQyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgVElQQ1xuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIFRJUEMgUHJvdG9jb2xcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBUaGUgVHJhbnNwYXJlbnQgSW50ZXIgUHJvY2VzcyBDb21tdW5pY2F0aW9uIChUSVBDKSBwcm90b2NvbCBpc1xuICAxMTpcdFx0ICBzcGVjaWFsbHkgZGVzaWduZWQgZm9yIGludHJhIGNsdXN0ZXIgY29tbXVuaWNhdGlvbi4gVGhpcyBwcm90b2NvbFxuICAxMjpcdFx0ICBvcmlnaW5hdGVzIGZyb20gRXJpY3Nzb24gd2hlcmUgaXQgaGFzIGJlZW4gdXNlZCBpbiBjYXJyaWVyIGdyYWRlXG4gIDEzOlx0XHQgIGNsdXN0ZXIgYXBwbGljYXRpb25zIGZvciBtYW55IHllYXJzLlxuICAxNDpcdFxuICAxNTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBUSVBDLCBzZWUgaHR0cDovL3RpcGMuc291cmNlZm9yZ2UubmV0LlxuICAxNjpcdFxuICAxNzpcdFx0ICBUaGlzIHByb3RvY29sIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUgKCA9IGNvZGUgd2hpY2hcbiAgMTg6XHRcdCAgY2FuIGJlIGluc2VydGVkIGluIGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsIHdoZW5ldmVyIHlvdVxuICAxOTpcdFx0ICB3YW50KS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0aXBjLiBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0XG4gIDIwOlx0XHQgIGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlIGFuZCByZWFkIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy5yc3RcdTAwM2UuXG4gIDIxOlx0XG4gIDIyOlx0XHQgIElmIGluIGRvdWJ0LCBzYXkgTi5cbiAgMjM6XHRcbiAgMjQ6XHRjb25maWcgVElQQ19NRURJQV9JQlxuICAyNTpcdFx0Ym9vbCBcJiMzNDtJbmZpbmlCYW5kIG1lZGlhIHR5cGUgc3VwcG9ydFwmIzM0O1xuICAyNjpcdFx0ZGVwZW5kcyBvbiBUSVBDIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EX0lQT0lCXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIFNheWluZyBZIGhlcmUgd2lsbCBlbmFibGUgc3VwcG9ydCBmb3IgcnVubmluZyBUSVBDIG9uXG4gIDI5Olx0XHQgIElQLW92ZXItSW5maW5pQmFuZCBkZXZpY2VzLlxuICAzMDpcdGNvbmZpZyBUSVBDX01FRElBX1VEUFxuICAzMTpcdFx0Ym9vbCBcJiMzNDtJUC9VRFAgbWVkaWEgdHlwZSBzdXBwb3J0XCYjMzQ7XG4gIDMyOlx0XHRkZXBlbmRzIG9uIFRJUENcbiAgMzM6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICAzNDpcdFx0ZGVmYXVsdCB5XG4gIDM1Olx0XHRoZWxwXG4gIDM2Olx0XHQgIFNheWluZyBZIGhlcmUgd2lsbCBlbmFibGUgc3VwcG9ydCBmb3IgcnVubmluZyBUSVBDIG92ZXIgSVAvVURQXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIFRJUENfQ1JZUFRPXG4gIDM5Olx0XHRib29sIFwmIzM0O1RJUEMgZW5jcnlwdGlvbiBzdXBwb3J0XCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIFRJUENcbiAgNDE6XHRcdHNlbGVjdCBDUllQVE9cbiAgNDI6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gIDQzOlx0XHRzZWxlY3QgQ1JZUFRPX0dDTVxuICA0NDpcdFx0ZGVmYXVsdCB5XG4gIDQ1Olx0XHRoZWxwXG4gIDQ2Olx0XHQgIFNheWluZyBZIGhlcmUgd2lsbCBlbmFibGUgc3VwcG9ydCBmb3IgVElQQyBlbmNyeXB0aW9uLlxuICA0NzpcdFx0ICBBbGwgVElQQyBtZXNzYWdlcyB3aWxsIGJlIGVuY3J5cHRlZC9kZWNyeXB0ZWQgYnkgdXNpbmcgdGhlIGN1cnJlbnRseSBtb3N0XG4gIDQ4Olx0XHQgIGFkdmFuY2VkIGFsZ29yaXRobTogQUVBRCBBRVMtR0NNIChsaWtlIElQU2VjIG9yIFRMUykgYmVmb3JlIGxlYXZpbmcvXG4gIDQ5Olx0XHQgIGVudGVyaW5nIHRoZSBUSVBDIHN0YWNrLlxuICA1MDpcdFx0ICBLZXkgc2V0dGluZyBmcm9tIHVzZXItc3BhY2UgaXMgcGVyZm9ybWVkIHZpYSBuZXRsaW5rIGJ5IGEgdXNlciBwcm9ncmFtXG4gIDUxOlx0XHQgIChlLmcuIHRoZSBpcHJvdXRlMiAmIzM5O3RpcGMmIzM5OyB0b29sKS5cbiAgNTI6XHRcbiAgNTM6XHRjb25maWcgVElQQ19ESUFHXG4gIDU0Olx0XHR0cmlzdGF0ZSBcJiMzNDtUSVBDOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgNTU6XHRcdGRlcGVuZHMgb24gVElQQ1xuICA1NjpcdFx0ZGVmYXVsdCB5XG4gIDU3Olx0XHRoZWxwXG4gIDU4Olx0XHRTdXBwb3J0IGZvciBUSVBDIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHNzIHRvb2wuXG4gIDU5Olx0XHRJZiB1bnN1cmUsIHNheSBZLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MjEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZ2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBidWlsZHMgdGhlIHByb3RvY29sIG1lc3NhZ2UsIHNvIGxldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYC4gSSYjMzk7bGwganVtcCByaWdodCBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGxpbmVzIDE4ODAgdG8gMTkyMCBvZiBgbmV0L3RpcGMvbGluay5jYC4gVGhhdCBjaHVuayBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHZpZXcgb2YgdGhlIGNvcmUgbG9naWMgaW52b2x2ZWQgaW4gY29uc3RydWN0aW5nIHRoZSBtZXNzYWdlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLi4uIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG1lYXQgb2YgdGhlIG1lc3NhZ2UgYXNzZW1ibHkgcHJvY2VzcywgdGhlIGNyaXRpY2FsIHN0ZXBzIGl0IHRha2VzLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGF0YSBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9ucywgcG90ZW50aWFsbHkgYnVmZmVyIGhhbmRsaW5nLCBhbmQgZGVmaW5pdGVseSBzb21lIGNydWNpYWwgYXNzaWdubWVudHMgcmVsYXRlZCB0byBtZXNzYWdlIGZpZWxkcy4gSG9wZWZ1bGx5IHRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL2xpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg4MDpcdFx0XHRpZiAobC1cdTAwM2VwZWVyX2NhcHMgXHUwMDI2IFRJUENfTElOS19QUk9UT19TRVFOTylcbjE4ODE6XHRcdFx0XHRtc2dfc2V0X3NlcW5vKGhkciwgbC1cdTAwM2VzbmRfbnh0X3N0YXRlJiM0MzsmIzQzOyk7XG4xODgyOlx0XHRcdG1zZ19zZXRfc2VxX2dhcChoZHIsIHJjdmdhcCk7XG4xODgzOlx0XHRcdGJjX3JjdmdhcCA9IGxpbmtfYmNfcmN2X2dhcChiY2wpO1xuMTg4NDpcdFx0XHRtc2dfc2V0X2JjX2dhcChoZHIsIGJjX3JjdmdhcCk7XG4xODg1Olx0XHRcdG1zZ19zZXRfcHJvYmUoaGRyLCBwcm9iZSk7XG4xODg2Olx0XHRcdG1zZ19zZXRfaXNfa2VlcGFsaXZlKGhkciwgcHJvYmUgfHwgcHJvYmVfcmVwbHkpO1xuMTg4NzpcdFx0XHRpZiAobC1cdTAwM2VwZWVyX2NhcHMgXHUwMDI2IFRJUENfR0FQX0FDS19CTE9DSylcbjE4ODg6XHRcdFx0XHRnbGVuID0gdGlwY19idWlsZF9nYXBfYWNrX2Jsa3MobCwgaGRyKTtcbjE4ODk6XHRcdFx0dGlwY19tb25fcHJlcChsLVx1MDAzZW5ldCwgZGF0YSAmIzQzOyBnbGVuLCBcdTAwMjZkbGVuLCBtc3RhdGUsIGwtXHUwMDNlYmVhcmVyX2lkKTtcbjE4OTA6XHRcdFx0bXNnX3NldF9zaXplKGhkciwgSU5UX0hfU0laRSAmIzQzOyBnbGVuICYjNDM7IGRsZW4pO1xuMTg5MTpcdFx0XHRza2JfdHJpbShza2IsIElOVF9IX1NJWkUgJiM0MzsgZ2xlbiAmIzQzOyBkbGVuKTtcbjE4OTI6XHRcdFx0bC1cdTAwM2VzdGF0cy5zZW50X3N0YXRlcyYjNDM7JiM0Mzs7XG4xODkzOlx0XHRcdGwtXHUwMDNlcmN2X3VuYWNrZWQgPSAwO1xuMTg5NDpcdFx0fSBlbHNlIHtcbjE4OTU6XHRcdFx0LyogUkVTRVRfTVNHIG9yIEFDVElWQVRFX01TRyAqL1xuMTg5NjpcdFx0XHRpZiAobXR5cCA9PSBBQ1RJVkFURV9NU0cpIHtcbjE4OTc6XHRcdFx0XHRtc2dfc2V0X2Rlc3Rfc2Vzc2lvbl92YWxpZChoZHIsIDEpO1xuMTg5ODpcdFx0XHRcdG1zZ19zZXRfZGVzdF9zZXNzaW9uKGhkciwgbC1cdTAwM2VwZWVyX3Nlc3Npb24pO1xuMTg5OTpcdFx0XHR9XG4xOTAwOlx0XHRcdG1zZ19zZXRfbWF4X3BrdChoZHIsIGwtXHUwMDNlYWR2ZXJ0aXNlZF9tdHUpO1xuMTkwMTpcdFx0XHRtZW1jcHkoZGF0YSwgbC1cdTAwM2VpZl9uYW1lLCBUSVBDX01BWF9JRl9OQU1FKTtcbjE5MDI6XHRcdFx0bXNnX3NldF9zaXplKGhkciwgSU5UX0hfU0laRSAmIzQzOyBUSVBDX01BWF9JRl9OQU1FKTtcbjE5MDM6XHRcdFx0c2tiX3RyaW0oc2tiLCBJTlRfSF9TSVpFICYjNDM7IFRJUENfTUFYX0lGX05BTUUpO1xuMTkwNDpcdFx0fVxuMTkwNTpcdFx0aWYgKHByb2JlKVxuMTkwNjpcdFx0XHRsLVx1MDAzZXN0YXRzLnNlbnRfcHJvYmVzJiM0MzsmIzQzOztcbjE5MDc6XHRcdGlmIChyY3ZnYXApXG4xOTA4Olx0XHRcdGwtXHUwMDNlc3RhdHMuc2VudF9uYWNrcyYjNDM7JiM0Mzs7XG4xOTA5Olx0XHRpZiAoYmNfcmN2Z2FwKVxuMTkxMDpcdFx0XHRiY2wtXHUwMDNlc3RhdHMuc2VudF9uYWNrcyYjNDM7JiM0Mzs7XG4xOTExOlx0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSBUQ19QUklPX0NPTlRST0w7XG4xOTEyOlx0XHRfX3NrYl9xdWV1ZV90YWlsKHhtaXRxLCBza2IpO1xuMTkxMzpcdFx0dHJhY2VfdGlwY19wcm90b19idWlsZChza2IsIGZhbHNlLCBsLVx1MDAzZW5hbWUpO1xuMTkxNDpcdH1cbjE5MTU6XHRcbjE5MTY6XHR2b2lkIHRpcGNfbGlua19jcmVhdGVfZHVtbXlfdG5sX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLFxuMTkxNzpcdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuMTkxODpcdHtcbjE5MTk6XHRcdHUzMiBvbm9kZSA9IHRpcGNfb3duX2FkZHIobC1cdTAwM2VuZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0OTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA4NzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUSVBDIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGNoYW5naW5nLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWsgd2l0aGluIHRoZSBUSVBDIHByb3RvY29sLiBQcmV2aW91c2x5LCBgc3RyY3B5YCB3YXMgdXNlZCB0byBjb3B5IHRoZSBpbnRlcmZhY2UgbmFtZSAoYGwtJmd0O2lmX25hbWVgKSBpbnRvIGEgbWVzc2FnZSBidWZmZXIuIFRoZSBwcm9ibGVtIHdhcyB0aGF0IGlmIHRoZSBpbnRlcmZhY2UgbmFtZSB3YXMgc2hvcnRlciB0aGFuIGBUSVBDX01BWF9JRl9OQU1FYCwgYHN0cmNweWAgd291bGRuJiMzOTt0IHplcm8tb3V0IHRoZSByZW1haW5pbmcgYnl0ZXMsIHBvdGVudGlhbGx5IGxlYXZpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIG1lc3NhZ2UuIFRoZSBwYXRjaCBub3cgcmVwbGFjZXMgYHN0cmNweWAgd2l0aCBgc3Ryc2NweWAgaW4gYHRpcGNfbGlua19jcmVhdGVgIGFuZCBgdGlwY19saW5rX2JjX2NyZWF0ZWAuIFNpbmNlIGBsLSZndDtpZl9uYW1lYCBpcyAqZWl0aGVyKiB6ZXJvIGluaXRpYWxpemVkIGJ5IGBrY2FsbG9jYC9ga3phbGxvY2AgKm9yKiBwYWRkZWQgdG8gMCBieSBzdHJzY3B5LCB0aGUgc3Vic2VxdWVudCBgbWVtY3B5YCBjb3BpZXMgYSBmdWxseSB6ZXJvLXBhZGRlZCBuYW1lLCBtaXRpZ2F0aW5nIHRoZSBsZWFrLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgYW5kLCB0aGVyZWZvcmUsIHdvcnRoIGZ1enppbmc/IEJhc2VkIG9uIG15IHByaW9yIGV4cGVyaWVuY2UsIFRJUEMgaXMgYSBnb29kIHRhcmdldC4gSXQmIzM5O3MgYSBuZXR3b3JraW5nIHByb3RvY29sIGluIGBuZXQvdGlwYy9gLCBhbmQsIHllcywgaXQgKmNhbiogYmUgZnV6emVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSYjMzk7dmUgc2VlbiBTeXprYWxsZXIgdGFyZ2V0IFRJUEMgZnJlcXVlbnRseSB3aXRoIGBzeXpfdGlwY18qYCBjYWxscywgYWxvbmcgd2l0aCB0aGUgc3RhbmRhcmQgc29ja2V0IGFuZCBuZXRsaW5rIG1ldGhvZHMuIEkga25vdyBpdCB3b3JrcyBvdmVyIGxvb3BiYWNrLCBVRFAsIGFuZCBFdGhlcm5ldC4gU28sIGFjY2Vzc2liaWxpdHkgaXNuJiMzOTt0IGEgcHJvYmxlbS4KCkxldCBtZSBxdWlja2x5IHJlLXJlYWQgdGhlIGluc3RydWN0aW9ucy4uLiBPa2F5LCBjaGVja2luZzogSXMgdGhpcyBhIGRvY3VtZW50YXRpb24gY2hhbmdlPyBOby4gSXMgaXQgZGVjb3JhdGl2ZSBsaWtlIGxvZ2dpbmcgb3IgdHJhY2Vwb2ludHM/IE5vLiBDb25zdGFudHMgdGhhdCBkb24mIzM5O3QgYWx0ZXIgZXhlY3V0aW9uPyBOb3BlLiBJbXBvc3NpYmxlIGNvZGUgcGF0aHM/IE5vLCB0aGlzIGlzIGtlcm5lbCBjb2RlLiBWZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmU/IE5vcGUuIFRlYXJkb3duIGNhbGxiYWNrcyBvbmx5PyBOby4KClRoaXMgcGF0Y2ggbW9kaWZpZXMgY29yZSBUSVBDIGxpbmsgY3JlYXRpb24sIHNwZWNpZmljYWxseSBgdGlwY19saW5rX2NyZWF0ZWAsIGB0aXBjX2xpbmtfYmNfY3JlYXRlYCwgYW5kIGFsc28gdGhlIG1lc3NhZ2UgYnVpbGRpbmcgZnVuY3Rpb24uIE15IHVuZGVyc3RhbmRpbmcsIGZyb20gZXhwZXJpZW5jZSwgaXMgdGhhdCBgdGlwY19saW5rX2NyZWF0ZWAgaXMgYW4gQVBJIGVudHJ5cG9pbnQgb3IgaGFzIGV4cG9ydGVkL2NhbGxlciBmdW5jdGlvbnMsIGFuZCB0aGUgc2FtZSBpcyB0cnVlIGZvciBgdGlwY19saW5rX2JjX2NyZWF0ZWAgYW5kIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYCwgdGhhdCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB3aXRoIG15IGNvZGUgc2VhcmNoIHRvb2xzLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgdG91Y2hlcyByZWFjaGFibGUsIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgSSB0aGluayB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19saW5rX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2xpbmsuYz00NDc9dTMyIHRpcGNfbGlua19zdGF0ZShzdHJ1Y3QgdGlwY19saW5rICpsKVxuLS1cbm5ldC90aXBjL2xpbmsuYy00NTItLyoqXG5uZXQvdGlwYy9saW5rLmM6NDUzOiAqIHRpcGNfbGlua19jcmVhdGUgLSBjcmVhdGUgYSBuZXcgbGlua1xubmV0L3RpcGMvbGluay5jLTQ1NC0gKiBAbmV0OiBwb2ludGVyIHRvIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2Vcbi0tXG5uZXQvdGlwYy9saW5rLmMtNDc1LSAqL1xubmV0L3RpcGMvbGluay5jOjQ3Njpib29sIHRpcGNfbGlua19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppZl9uYW1lLCBpbnQgYmVhcmVyX2lkLFxubmV0L3RpcGMvbGluay5jLTQ3Ny1cdFx0ICAgICAgaW50IHRvbGVyYW5jZSwgY2hhciBuZXRfcGxhbmUsIHUzMiBtdHUsIGludCBwcmlvcml0eSxcbi0tXG5uZXQvdGlwYy9saW5rLmM9NTUzPWJvb2wgdGlwY19saW5rX2JjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBvd25ub2RlLCB1MzIgcGVlciwgdTggKnBlZXJfaWQsXG4tLVxubmV0L3RpcGMvbGluay5jLTU2MS1cbm5ldC90aXBjL2xpbmsuYzo1NjI6XHRpZiAoIXRpcGNfbGlua19jcmVhdGUobmV0LCBcJiMzNDtcJiMzNDssIE1BWF9CRUFSRVJTLCAwLCAmIzM5O1omIzM5OywgbXR1LCAwLCBtaW5fd2luLFxubmV0L3RpcGMvbGluay5jLTU2My1cdFx0XHQgICAgICBtYXhfd2luLCAwLCBvd25ub2RlLCBwZWVyLCBOVUxMLCBwZWVyX2NhcHMsXG4tLVxubmV0L3RpcGMvbGluay5jPTE4MzI9c3RhdGljIHZvaWQgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBpbnQgbXR5cCwgYm9vbCBwcm9iZSxcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTkxNS1cbm5ldC90aXBjL2xpbmsuYzoxOTE2OnZvaWQgdGlwY19saW5rX2NyZWF0ZV9kdW1teV90bmxfbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsXG5uZXQvdGlwYy9saW5rLmMtMTkxNy1cdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSlcbi0tXG5uZXQvdGlwYy9saW5rLmM9MjEwND12b2lkIHRpcGNfbGlua19mYWlsb3Zlcl9wcmVwYXJlKHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCB0aXBjX2xpbmsgKnRubCxcbi0tXG5uZXQvdGlwYy9saW5rLmMtMjEwOC1cbm5ldC90aXBjL2xpbmsuYzoyMTA5Olx0dGlwY19saW5rX2NyZWF0ZV9kdW1teV90bmxfbXNnKHRubCwgeG1pdHEpO1xubmV0L3RpcGMvbGluay5jLTIxMTAtXG4tLVxubmV0L3RpcGMvbGluay5oPTYzPWVudW0ge1xuLS1cbm5ldC90aXBjL2xpbmsuaC03My1cbm5ldC90aXBjL2xpbmsuaDo3NDpib29sIHRpcGNfbGlua19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppZl9uYW1lLCBpbnQgYmVhcmVyX2lkLFxubmV0L3RpcGMvbGluay5oLTc1LVx0XHQgICAgICBpbnQgdG9sZXJhbmNlLCBjaGFyIG5ldF9wbGFuZSwgdTMyIG10dSwgaW50IHByaW9yaXR5LFxuLS1cbm5ldC90aXBjL2xpbmsuaD04OT12b2lkIHRpcGNfbGlua190bmxfcHJlcGFyZShzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3QgdGlwY19saW5rICp0bmwsXG5uZXQvdGlwYy9saW5rLmgtOTAtXHRcdFx0ICAgaW50IG10eXAsIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcbm5ldC90aXBjL2xpbmsuaDo5MTp2b2lkIHRpcGNfbGlua19jcmVhdGVfZHVtbXlfdG5sX21zZyhzdHJ1Y3QgdGlwY19saW5rICp0bmwsXG5uZXQvdGlwYy9saW5rLmgtOTItXHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpO1xuLS1cbm5ldC90aXBjL25vZGUuYz0xMTczPXZvaWQgdGlwY19ub2RlX2NoZWNrX2Rlc3Qoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcixcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTI4My1cdFx0c2Vzc2lvbiA9IGdldF9yYW5kb21fdTE2KCk7XG5uZXQvdGlwYy9ub2RlLmM6MTI4NDpcdFx0aWYgKCF0aXBjX2xpbmtfY3JlYXRlKG5ldCwgaWZfbmFtZSwgYi1cdTAwM2VpZGVudGl0eSwgYi1cdTAwM2V0b2xlcmFuY2UsXG5uZXQvdGlwYy9ub2RlLmMtMTI4NS1cdFx0XHRcdCAgICAgIGItXHUwMDNlbmV0X3BsYW5lLCBiLVx1MDAzZW10dSwgYi1cdTAwM2Vwcmlvcml0eSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg3NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGB0aXBjX2xpbmtfYmNfY3JlYXRlYCBDYWxsZXJzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgZmlndXJlIG91dCB3aG8mIzM5O3MgY2FsbGluZyBgdGlwY19saW5rX2JjX2NyZWF0ZWAuJiMzNDsgVGhhdCBmdW5jdGlvbiBpcyBrZXkgdG8gaG93IHRoaXMgcGFydCBvZiB0aGUgc3lzdGVtIHdvcmtzLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgaXMgY3JpdGljYWwgZm9yIGFueSBkZWJ1Z2dpbmcsIG9wdGltaXphdGlvbiwgb3IgaW1wYWN0IGFzc2Vzc21lbnQgSSBtaWdodCBuZWVkIHRvIGRvLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0cy4gQSBkZWVwIGRpdmUgaXMgdGhlIG9ubHkgd2F5IGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfbGlua19iY19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9iY2FzdC5jPTY5NT1pbnQgdGlwY19iY2FzdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdGlwYy9iY2FzdC5jLTcwNi1cbm5ldC90aXBjL2JjYXN0LmM6NzA3Olx0aWYgKCF0aXBjX2xpbmtfYmNfY3JlYXRlKG5ldCwgMCwgMCwgTlVMTCxcbm5ldC90aXBjL2JjYXN0LmMtNzA4LVx0XHRcdFx0IG9uZV9wYWdlX210dSxcbi0tXG5uZXQvdGlwYy9saW5rLmM9NDc2PWJvb2wgdGlwY19saW5rX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKmlmX25hbWUsIGludCBiZWFyZXJfaWQsXG4tLVxubmV0L3RpcGMvbGluay5jLTUzNi0vKipcbm5ldC90aXBjL2xpbmsuYzo1Mzc6ICogdGlwY19saW5rX2JjX2NyZWF0ZSAtIGNyZWF0ZSBuZXcgbGluayB0byBiZSB1c2VkIGZvciBicm9hZGNhc3Rcbm5ldC90aXBjL2xpbmsuYy01MzgtICogQG5ldDogcG9pbnRlciB0byBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXG4tLVxubmV0L3RpcGMvbGluay5jLTU1Mi0gKi9cbm5ldC90aXBjL2xpbmsuYzo1NTM6Ym9vbCB0aXBjX2xpbmtfYmNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG93bm5vZGUsIHUzMiBwZWVyLCB1OCAqcGVlcl9pZCxcbm5ldC90aXBjL2xpbmsuYy01NTQtXHRcdFx0IGludCBtdHUsIHUzMiBtaW5fd2luLCB1MzIgbWF4X3dpbiwgdTE2IHBlZXJfY2Fwcyxcbi0tXG5uZXQvdGlwYy9saW5rLmg9NzQ9Ym9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCxcbi0tXG5uZXQvdGlwYy9saW5rLmgtODItXHRcdCAgICAgIHN0cnVjdCB0aXBjX2xpbmsgKipsaW5rKTtcbm5ldC90aXBjL2xpbmsuaDo4Mzpib29sIHRpcGNfbGlua19iY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgb3dubm9kZSwgdTMyIHBlZXIsIHU4ICpwZWVyX2lkLFxubmV0L3RpcGMvbGluay5oLTg0LVx0XHRcdCBpbnQgbXR1LCB1MzIgbWluX3dpbiwgdTMyIG1heF93aW4sIHUxNiBwZWVyX2NhcHMsXG4tLVxubmV0L3RpcGMvbm9kZS5jPTQ2OD1zdHJ1Y3QgdGlwY19ub2RlICp0aXBjX25vZGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIsIHU4ICpwZWVyX2lkLFxuLS1cbm5ldC90aXBjL25vZGUuYy00ODgtXHRcdHRpcGNfbm9kZV93cml0ZV9sb2NrKG4pO1xubmV0L3RpcGMvbm9kZS5jOjQ4OTpcdFx0aWYgKCF0aXBjX2xpbmtfYmNfY3JlYXRlKG5ldCwgdGlwY19vd25fYWRkcihuZXQpLCBhZGRyLCBwZWVyX2lkLCBVMTZfTUFYLFxubmV0L3RpcGMvbm9kZS5jLTQ5MC1cdFx0XHRcdFx0IHRpcGNfbGlua19taW5fd2luKHNuZF9sKSwgdGlwY19saW5rX21heF93aW4oc25kX2wpLFxuLS1cbm5ldC90aXBjL25vZGUuYy01NzgtXHRpZiAoIXByZWxpbWluYXJ5IFx1MDAyNlx1MDAyNlxubmV0L3RpcGMvbm9kZS5jOjU3OTpcdCAgICAhdGlwY19saW5rX2JjX2NyZWF0ZShuZXQsIHRpcGNfb3duX2FkZHIobmV0KSwgYWRkciwgcGVlcl9pZCwgVTE2X01BWCxcbm5ldC90aXBjL25vZGUuYy01ODAtXHRcdFx0XHQgdGlwY19saW5rX21pbl93aW4oc25kX2wpLCB0aXBjX2xpbmtfbWF4X3dpbihzbmRfbCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODE2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYCBDYWxsZXJzKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgIGZ1bmN0aW9uIGNhbGxzLiBJdCYjMzk7cyB0aW1lIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyB1c2luZyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gd2l0aGluIHRoZSBsYXJnZXIgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXItUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBmcmFtZXdvcmsuIFRoZSBzcGVjaWZpY3Mgd2lsbCBkZXBlbmQgb24gdGhlIGxhcmdlciBjb250ZXh0IG9mIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBkb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gY3JlYXRpbmcgb3IgY29uc3RydWN0aW5nIHByb3RvY29sIG1lc3NhZ2VzIGZvciBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gd2l0aGluIHRoZSBjbHVzdGVyLiBGcm9tIHRoYXQgcG9pbnQgSSBjYW4gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGFuZCBwb3NzaWJsZSBlZmZlY3RzIGZvciBhbnkgY2hhbmdlcyBJIHdvdWxkIG1ha2UuIERlcGVuZGluZyBvbiB3aGF0IEkgbGVhcm4sIEkgbWF5IGFsc28gZGVjaWRlIHRvIHJlc2VhcmNoIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uIE5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LCBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2xpbmsuYz0yNDQ9c3RhdGljIGludCB0aXBjX2xpbmtfcHJvdG9fcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvdGlwYy9saW5rLmMtMjQ1LVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7XG5uZXQvdGlwYy9saW5rLmM6MjQ2OnN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsXG5uZXQvdGlwYy9saW5rLmMtMjQ3LVx0XHRcdFx0ICAgICAgYm9vbCBwcm9iZV9yZXBseSwgdTE2IHJjdmdhcCxcbi0tXG5uZXQvdGlwYy9saW5rLmM9ODE2PWludCB0aXBjX2xpbmtfdGltZW91dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSlcbi0tXG5uZXQvdGlwYy9saW5rLmMtODY5LVx0aWYgKHN0YXRlIHx8IHByb2JlIHx8IHNldHVwKVxubmV0L3RpcGMvbGluay5jOjg3MDpcdFx0dGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhsLCBtdHlwLCBwcm9iZSwgMCwgMCwgMCwgMCwgeG1pdHEpO1xubmV0L3RpcGMvbGluay5jLTg3MS1cbi0tXG5uZXQvdGlwYy9saW5rLmM9MTY4OD1pbnQgdGlwY19saW5rX2J1aWxkX3N0YXRlX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSlcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTcwNS1cdGwtXHUwMDNlc3RhdHMuc2VudF9hY2tzJiM0MzsmIzQzOztcbm5ldC90aXBjL2xpbmsuYzoxNzA2Olx0dGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhsLCBTVEFURV9NU0csIDAsIDAsIDAsIDAsIDAsIHhtaXRxKTtcbm5ldC90aXBjL2xpbmsuYy0xNzA3LVx0cmV0dXJuIDA7XG4tLVxubmV0L3RpcGMvbGluay5jPTE3MTI9dm9pZCB0aXBjX2xpbmtfYnVpbGRfcmVzZXRfbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuLS1cbm5ldC90aXBjL2xpbmsuYy0xNzE5LVxubmV0L3RpcGMvbGluay5jOjE3MjA6XHR0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKGwsIG10eXAsIDAsIDAsIDAsIDAsIDAsIHhtaXRxKTtcbm5ldC90aXBjL2xpbmsuYy0xNzIxLVxuLS1cbm5ldC90aXBjL2xpbmsuYz0xNzMyPXN0YXRpYyBpbnQgdGlwY19saW5rX2J1aWxkX25hY2tfbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsXG4tLVxubmV0L3RpcGMvbGluay5jLTE3NTAtXG5uZXQvdGlwYy9saW5rLmM6MTc1MTpcdFx0dGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhsLCBTVEFURV9NU0csIDAsIDAsXG5uZXQvdGlwYy9saW5rLmMtMTc1Mi1cdFx0XHRcdFx0ICByY3ZnYXAsIDAsIDAsIHhtaXRxKTtcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTc2Mj1pbnQgdGlwY19saW5rX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xODMxLVxubmV0L3RpcGMvbGluay5jOjE4MzI6c3RhdGljIHZvaWQgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBpbnQgbXR5cCwgYm9vbCBwcm9iZSxcbm5ldC90aXBjL2xpbmsuYy0xODMzLVx0XHRcdFx0ICAgICAgYm9vbCBwcm9iZV9yZXBseSwgdTE2IHJjdmdhcCxcbi0tXG5uZXQvdGlwYy9saW5rLmM9MjE3ND1zdGF0aWMgaW50IHRpcGNfbGlua19wcm90b19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9saW5rLmMtMjMxMC1cdFx0aWYgKHJjdmdhcCB8fCByZXBseSlcbm5ldC90aXBjL2xpbmsuYzoyMzExOlx0XHRcdHRpcGNfbGlua19idWlsZF9wcm90b19tc2cobCwgU1RBVEVfTVNHLCAwLCByZXBseSxcbm5ldC90aXBjL2xpbmsuYy0yMzEyLVx0XHRcdFx0XHRcdCAgcmN2Z2FwLCAwLCAwLCB4bWl0cSk7XG4tLVxubmV0L3RpcGMvbGluay5jPTI4NjI9dm9pZCB0aXBjX2xpbmtfc2V0X3RvbGVyYW5jZShzdHJ1Y3QgdGlwY19saW5rICpsLCB1MzIgdG9sLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0yODY4LVx0aWYgKHRpcGNfbGlua19pc191cChsKSlcbm5ldC90aXBjL2xpbmsuYzoyODY5Olx0XHR0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKGwsIFNUQVRFX01TRywgMCwgMCwgMCwgdG9sLCAwLCB4bWl0cSk7XG5uZXQvdGlwYy9saW5rLmMtMjg3MC19XG4tLVxubmV0L3RpcGMvbGluay5jPTI4NzI9dm9pZCB0aXBjX2xpbmtfc2V0X3ByaW8oc3RydWN0IHRpcGNfbGluayAqbCwgdTMyIHByaW8sXG4tLVxubmV0L3RpcGMvbGluay5jLTI4NzUtXHRsLVx1MDAzZXByaW9yaXR5ID0gcHJpbztcbm5ldC90aXBjL2xpbmsuYzoyODc2Olx0dGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhsLCBTVEFURV9NU0csIDAsIDAsIDAsIDAsIHByaW8sIHhtaXRxKTtcbm5ldC90aXBjL2xpbmsuYy0yODc3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUSVBDIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgY29uZmlndXJpbmcgVElQQy4gTXkgZmlyc3QgbW92ZSBpcyBhbHdheXMgdG8gY29uc3VsdCB0aGUgS2NvbmZpZyBmaWxlcywgc28gSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IHRvIGBuZXQvdGlwYy9LY29uZmlnYC4gUmlnaHQsIGhlcmUgd2Ugc2VlIGBUSVBDYCBpcyBkZXBlbmRlbnQgb24gYElORVRgLiBPa2F5LCB0aGF0JiMzOTtzIG5vdCB1bmV4cGVjdGVkLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyBUSVBDIGlzIGFjdHVhbGx5ICpidWlsdCogd2l0aGluIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgZWl0aGVyIHRoZSBtYWluIGBuZXQvS2NvbmZpZ2AgZmlsZSwgb3IgcGVyaGFwcyB0aGUgYG5ldC90aXBjL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBhbnkgcG90ZW50aWFsIGJ1aWxkIGZsYWdzIG9yIG1vZHVsZXMgdGhhdCBjb21lIGludG8gcGxheS4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXRhaWxzIHdpbGwgZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIGlzIGNvbXBsZXRlIGFuZCBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggVElQQyBsYXllclxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfVElQQykgOj0gdGlwYy5vXG4gICA3Olx0XG4gICA4Olx0dGlwYy15XHQmIzQzOz0gYWRkci5vIGJjYXN0Lm8gYmVhcmVyLm8gXFxcbiAgIDk6XHRcdCAgIGNvcmUubyBsaW5rLm8gZGlzY292ZXIubyBtc2cubyAgXFxcbiAgMTA6XHRcdCAgIG5hbWVfZGlzdHIubyAgc3Vic2NyLm8gbW9uaXRvci5vIG5hbWVfdGFibGUubyBuZXQubyAgXFxcbiAgMTE6XHRcdCAgIG5ldGxpbmsubyBuZXRsaW5rX2NvbXBhdC5vIG5vZGUubyBzb2NrZXQubyBldGhfbWVkaWEubyBcXFxuICAxMjpcdFx0ICAgdG9wc3J2Lm8gZ3JvdXAubyB0cmFjZS5vXG4gIDEzOlx0XG4gIDE0Olx0Q0ZMQUdTX3RyYWNlLm8gJiM0Mzs9IC1JJChzcmMpXG4gIDE1Olx0XG4gIDE2Olx0dGlwYy0kKENPTkZJR19USVBDX01FRElBX1VEUClcdCYjNDM7PSB1ZHBfbWVkaWEub1xuICAxNzpcdHRpcGMtJChDT05GSUdfVElQQ19NRURJQV9JQilcdCYjNDM7PSBpYl9tZWRpYS5vXG4gIDE4Olx0dGlwYy0kKENPTkZJR19TWVNDVEwpXHRcdCYjNDM7PSBzeXNjdGwub1xuICAxOTpcdHRpcGMtJChDT05GSUdfVElQQ19DUllQVE8pXHQmIzQzOz0gY3J5cHRvLm9cbiAgMjA6XHRcbiAgMjE6XHRvYmotJChDT05GSUdfVElQQ19ESUFHKVx0JiM0Mzs9IHRpcGNfZGlhZy5vXG4gIDIyOlx0dGlwY19kaWFnLXlcdCYjNDM7PSBkaWFnLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4ODQKCQkJCQkJCW91dHB1dDogMTE3CgkJCQkJCQl0aG91Z2h0czogNDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRJUEMgTGluayBDb2RlIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBrZXkgZnVuY3Rpb24gc3ltYm9scyBhZmZlY3RlZC4gSSYjMzk7dmUgbm90ZWQgYSBmZXcgbm9uLXN0YXRpYyBvbmVzIHJlbGF0ZWQgdG8gbGluayBjcmVhdGlvbiBhbmQgbWVzc2FnaW5nOiBgdGlwY19saW5rX2NyZWF0ZWAsIGB0aXBjX2xpbmtfYmNfY3JlYXRlYCwgYHRpcGNfbGlua19idWlsZF9yZXNldF9tc2dgLCBhbmQgYHRpcGNfbGlua190aW1lb3V0YC4gVGhlbiB0aGVyZSYjMzk7cyBgdGlwY19saW5rX3Byb3RvX3JjdmAgd2hpY2ggaXMgc3RhdGljLCBidXQgY2xvc2VseSBsaW5rZWQgdG8gdGhlIG5vbi1zdGF0aWMgYHRpcGNfbGlua19yY3ZgLCBzbyBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gdGhhdC4gQWZ0ZXIgdGhhdCBJIGhhdmUgdG8gY29uZmlybSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBsaW5rIGNyZWF0aW9uL21lc3NhZ2UgZnVuY3Rpb25zOiBgdGlwY19ub2RlX2NoZWNrX2Rlc3RgLCBgdGlwY19saW5rX3JjdmAuIFRoaXMgbG9va3MgcHJldHR5IGNvbXByZWhlbnNpdmUgaW4gdGVybXMgb2YgdGhlIGFyZWFzIEkgbmVlZCB0byBmb2N1cyBvbi4KClRoZSBtYWluIHN5bWJvbHMgSSBuZWVkIHRvIHByaW9yaXRpemUgYXJlOiBgdGlwY19saW5rX2NyZWF0ZWAsIGB0aXBjX2xpbmtfYmNfY3JlYXRlYCwgYW5kIGB0aXBjX2xpbmtfYnVpbGRfcmVzZXRfbXNnYC4gSSYjMzk7bGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIHNjcnV0aW5pemUgdGhlaXIgaW50ZXJhY3Rpb25zIGNhcmVmdWxseS4KCk5leHQsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYFRJUENgIGlzIHRoZSBwcmltYXJ5IGZlYXR1cmUgb2YgaW50ZXJlc3QsIGFuZCBvZiBjb3Vyc2UsIGl0IGRlcGVuZHMgb24gYElORVRgLiBJJiMzOTtsbCBhbHNvIGdsYW5jZSB0aHJvdWdoIGBuZXQvdGlwYy9LY29uZmlnYCBhbmQgYG5ldC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50OyBJIHNhdyB0aGF0IGBJTkVUYCBpcyBzdGFuZGFyZCBpbiBgbmV0L2lwdjRgLCBhbmQgYFRJUENgIGlzIHRyaXN0YXRlIGFuZCBkZXBlbmRzIG9uIGBJTkVUYC4KCk5vdywgbGV0JiMzOTtzIHJlLWV4YW1pbmUgdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMuIEkgc2VlIHRoZXkmIzM5O3ZlIHJlcGxhY2VkIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHdoZW4gY29weWluZyBpbnRlcmZhY2UvbGluayBuYW1lcyDigJMgYSBnb29kIG1vdmUgZm9yIGJ1ZmZlciBvdmVyZmxvdyBwcmV2ZW50aW9uLiBBbHNvLCBgc3RyY3B5YCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBtZW1jcHlgIHdoZW4gY29uc3RydWN0aW5nIHByb3RvY29sIG1lc3NhZ2VzLCBzcGVjaWZpY2FsbHkgdG8gYWRkcmVzcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciBsZWFrcyBvZiB1bmluaXRpYWxpemVkIGRhdGEgd2l0aGluIHRoZSBgc2tiYC4gVGhhdCYjMzk7cyBhIHNvbGlkIGRlZmVuc2UgYWdhaW5zdCBkYXRhIGxlYWtzIQoKRmluYWxseSwgSSBoYXZlIHRvIGVuc3VyZSB0aGUgY2hhbmdlcyBhcmUgcmVsZXZhbnQgdG8gZnV6emluZy4gR2l2ZW4gdGhhdCB0aGlzIGlzIHRoZSBUSVBDIG5ldHdvcmsgcHJvdG9jb2wgc3RhY2ssIEkmIzM5O20gY29uZmlkZW50IHRoYXQgaXQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIEdDRSwgbWFraW5nIGl0IGFwcHJvcHJpYXRlIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgYHN0cmNweWAgYW5kIGBtZW1jcHlgIGNoYW5nZXMsIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCkFscmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gQWxsIHRoZSBiYXNlcyBhcmUgY292ZXJlZCwgYW5kIHRoZSByZWFzb25pbmcgaXMgc291bmQuIE5vdyBpdCYjMzk7cyB0aW1lIHRvIGluZm9ybSB0aGUgdGVhbSBieSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX2xpbmtfY3JlYXRlJiMzNDssCiAgICAmIzM0O3RpcGNfbGlua19iY19jcmVhdGUmIzM0OywKICAgICYjMzQ7dGlwY19saW5rX2J1aWxkX3Jlc2V0X21zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBUSVBDIGxpbmsgaW5pdGlhbGl6YXRpb24gYW5kIHByb3RvY29sIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljIGluIG5ldC90aXBjL2xpbmsuYyAodXNpbmcgc3Ryc2NweSBhbmQgYm91bmRlZCBtZW1jcHkgaW5zdGVhZCBvZiBzdHJjcHkpLiBUSVBDIGlzIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX2xpbmtfY3JlYXRlJiMzNDssCiAgICAmIzM0O3RpcGNfbGlua19iY19jcmVhdGUmIzM0OywKICAgICYjMzQ7dGlwY19saW5rX2J1aWxkX3Jlc2V0X21zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBUSVBDIGxpbmsgaW5pdGlhbGl6YXRpb24gYW5kIHByb3RvY29sIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljIGluIG5ldC90aXBjL2xpbmsuYyAodXNpbmcgc3Ryc2NweSBhbmQgYm91bmRlZCBtZW1jcHkgaW5zdGVhZCBvZiBzdHJjcHkpLiBUSVBDIGlzIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgdW5zYWZlIGBzdHJjcHlgIGNhbGxzIHdpdGggYHN0cnNjcHlgIGluIGB0aXBjX2xpbmtfY3JlYXRlYCBhbmQgYHRpcGNfbGlua19iY19jcmVhdGVgLCBhbmQgY2hhbmdlcyBgc3RyY3B5YCB0byBgbWVtY3B5KGRhdGEsIGwtXHUwMDNlaWZfbmFtZSwgVElQQ19NQVhfSUZfTkFNRSlgIGluIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYC5cblxuVGhlIGBzdHJ1Y3QgdGlwY19saW5rYCBpbnN0YW5jZSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigqbCwgR0ZQX0FUT01JQylgLCBlbnN1cmluZyB0aGF0IGFsbCBmaWVsZHMgaW5jbHVkaW5nIGBsLVx1MDAzZWlmX25hbWVgIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBDb3B5aW5nIGBUSVBDX01BWF9JRl9OQU1FYCBieXRlcyBmcm9tIGBsLVx1MDAzZWlmX25hbWVgIGludG8gdGhlIHBhY2tldCBwYXlsb2FkIGBkYXRhYCByZWFkcyBvbmx5IGZ1bGx5IGluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBicmFuY2hpbmcsIG9yIHVzZXItc3BhY2UgaW5mbyBsZWFrcy5cblxuU3RhbmRhcmQgS0FTQU4gYW5kIGNvbXBpbGVyIGZvcnRpZmljYXRpb25zIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIG9yIGJ1ZmZlciBvdmVyZmxvdyBidWdzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmExYmZjZTAzZWM4YjU5MzVkMzRhZWI4NDhmNjgxZmZiOWQ1Nzc5YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDEzOjAwOjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbGluay5jIGIvbmV0L3RpcGMvbGluay5jCmluZGV4IDQ5ZGZjMDk4ZDg5YjIuLjY0MjdjNjlmODkyOTQgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2xpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9saW5rLmMKQEAgLTUwNCw3ICYjNDM7NTA0LDcgQEAgYm9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCwKIAlzbnByaW50ZihsLSZndDtuYW1lLCBzaXplb2YobC0mZ3Q7bmFtZSksICYjMzQ7JXM6JXMtJXM6dW5rbm93biYjMzQ7LAogCQkgc2VsZl9zdHIsIGlmX25hbWUsIHBlZXJfc3RyKTsKIAotCXN0cmNweShsLSZndDtpZl9uYW1lLCBpZl9uYW1lKTsKJiM0MzsJc3Ryc2NweShsLSZndDtpZl9uYW1lLCBpZl9uYW1lKTsKIAlsLSZndDthZGRyID0gcGVlcjsKIAlsLSZndDtwZWVyX2NhcHMgPSBwZWVyX2NhcHM7CiAJbC0mZ3Q7bmV0ID0gbmV0OwpAQCAtNTc0LDcgJiM0Mzs1NzQsNyBAQCBib29sIHRpcGNfbGlua19iY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgb3dubm9kZSwgdTMyIHBlZXIsIHU4ICpwZWVyX2lkLAogCQlzbnByaW50ZihsLSZndDtuYW1lLCBzaXplb2YobC0mZ3Q7bmFtZSksICYjMzQ7JXM6JXMmIzM0OywgdGlwY19iY2xpbmtfbmFtZSwKIAkJCSBwZWVyX3N0cik7CiAJfSBlbHNlIHsKLQkJc3RyY3B5KGwtJmd0O25hbWUsIHRpcGNfYmNsaW5rX25hbWUpOwomIzQzOwkJc3Ryc2NweShsLSZndDtuYW1lLCB0aXBjX2JjbGlua19uYW1lKTsKIAl9CiAJdHJhY2VfdGlwY19saW5rX3Jlc2V0KGwsIFRJUENfRFVNUF9BTEwsICYjMzQ7YmNsaW5rIGNyZWF0ZWQhJiMzNDspOwogCXRpcGNfbGlua19yZXNldChsKTsKQEAgLTE4OTgsNyAmIzQzOzE4OTgsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsIGludCBtdHlwLCBib29sIHByb2JlLAogCQkJbXNnX3NldF9kZXN0X3Nlc3Npb24oaGRyLCBsLSZndDtwZWVyX3Nlc3Npb24pOwogCQl9CiAJCW1zZ19zZXRfbWF4X3BrdChoZHIsIGwtJmd0O2FkdmVydGlzZWRfbXR1KTsKLQkJc3RyY3B5KGRhdGEsIGwtJmd0O2lmX25hbWUpOwomIzQzOwkJbWVtY3B5KGRhdGEsIGwtJmd0O2lmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpOwogCQltc2dfc2V0X3NpemUoaGRyLCBJTlRfSF9TSVpFICYjNDM7IFRJUENfTUFYX0lGX05BTUUpOwogCQlza2JfdHJpbShza2IsIElOVF9IX1NJWkUgJiM0MzsgVElQQ19NQVhfSUZfTkFNRSk7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDcyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEp1c3RpZmljYXRpb246IEEgUXVpY2sgQ29kZSBRdWFsaXR5IENoZWNrKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIFRoZSB0YXNrIGlzIHRvIGRlY2lkZSBpZiB0aGlzIGBuZXQvdGlwYy9saW5rLmNgIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgYmV5b25kIHdoYXQgS0FTQU4gYWxyZWFkeSBwcm92aWRlcy4gVGhpcyBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkLCBsb3ctc3Rha2VzIGNvZGUgcXVhbGl0eSBhc3Nlc3NtZW50IOKAkyBwdXJlbHkgZGVmZW5zaXZlLiBNeSBpbml0aWFsIGNsYXNzaWZpY2F0aW9uIGlzICYjMzQ7YmVuaWduJiMzNDsgYW5kICYjMzQ7bm9uZSYjMzQ7IGZvciBzZXZlcml0eTsgaXQmIzM5O3Mgc2FmZSB0byBwcm9jZWVkLgoKRmlyc3QsIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBkaWZmLiBPa2F5LCBzbyB3ZSYjMzk7cmUgcmVwbGFjaW5nIGEgY291cGxlIG9mIGBzdHJjcHlgIGNhbGxzIHdpdGggYHN0cnNjcHlgIGFuZCBhIGBzdHJjcHlgIGluIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYCB3aXRoIGBtZW1jcHlgLiBUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgJiMzNDtidWZmZXIgb3ZlcmZsb3cgcHJldmVudGlvbiwmIzM0OyB3aGljaCBpcyBhIGdvb2QgdGhpbmcuIFRoZSB1c2Ugb2YgYHN0cnNjcHlgIG1ha2VzIG1lIHN1c3BlY3QgdGhhdCB0aGV5IGFyZSBndWFyZGluZyBhZ2FpbnN0IGJ1ZmZlciBvdmVycnVucyB3aGVuIGNvcHlpbmcgdGhlIGludGVyZmFjZSBuYW1lLCBsaWtlbHkgZnJvbSB1c2VyLWNvbnRyb2xsZWQgaW5wdXQuIE1ha2VzIHNlbnNlLiBCdXQgaXMgaXQgKmVub3VnaCo/CgpOb3csIGJlZm9yZSBJIGp1bXAgdG8gYSBjb25jbHVzaW9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLiBMZXQgbWUgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGFyb3VuZCBgdGlwY19saW5rX2NyZWF0ZWAgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHRpcGNfbGlua2AuIEkgbmVlZCB0byBjb25maXJtIHRoZSBzaXplIG9mIGBsLSZndDtpZl9uYW1lYCB0byBiZSBjZXJ0YWluIHRoZSBgc3Ryc2NweWAgY2FsbHMgYXJlIHN1ZmZpY2llbnQuIEFsc28sIG5lZWQgdG8gZW5zdXJlIHRoZSB1c2Ugb2YgYG1lbWNweWAgaW4gYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgIGlzIGNvcnJlY3QsIGFuZCBub3QgdnVsbmVyYWJsZSB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gSSYjMzk7bGwgdXNlIGEgZmlsZSByZWFkZXIgdG8gZG8gc28uIEkmIzM5O2xsIGFsc28gdXNlIGl0IHRvIGNoZWNrIHRoZSBvdGhlciBwbGFjZXMgd2hlcmUgdGhlIHN0cnVjdCBpcyB1c2VkLgoKSSB3aWxsIHVzZSB0aGF0IGluZm9ybWF0aW9uIHRvIGFzc2VzcyB0aGUgcmlza3MgZnJvbSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCB0byBkZWNpZGUgaWYgS01TQU4gaXMgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdGlwY19saW5rIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2xpbmsuYz01MT1zdHJ1Y3QgdGlwY19zdGF0cyB7XG4tLVxubmV0L3RpcGMvbGluay5jLTEzNi0gKi9cbm5ldC90aXBjL2xpbmsuYzoxMzc6c3RydWN0IHRpcGNfbGluayB7XG5uZXQvdGlwYy9saW5rLmMtMTM4LVx0dTMyIGFkZHI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipOYXZpZ2F0aW5nIHRoZSBUSVBDIExpbmsgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBuZXQvdGlwYy9saW5rLmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiBhIGZldyBzcGVjaWZpYyBhcmVhcyB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBhcm91bmQsIHN0YXJ0aW5nIHdpdGggbGluZSAxMzcuIEkgd2FudCB0byBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHRoZSBmdW5kYW1lbnRhbCBzZXR1cCBvciBpbml0aWFsaXphdGlvbiBvZiBhIFRJUEMgbGluay4gVGhlbiwgSSYjMzk7bGwgZ28gZnVydGhlciBkb3duIHRvIGxpbmUgNTA0LiBJJiMzOTttIHN1c3BlY3RpbmcgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBsb2dpYyBmb3IgaGFuZGxpbmcgY29ubmVjdGlvbiBzdGF0ZSwgbWF5YmUgZHVyaW5nIGEgcmV0cmFuc21pdCBvciBzb21lIG90aGVyIGlzc3VlLiBBZnRlciB0aGF0LCBJJiMzOTtsbCBsZWFwIHRvIGxpbmUgNTc0IC0gSSBiZXQgdGhhdCYjMzk7cyB3aGVyZSB0aGV5IG1hbmFnZSB0aGUgbGlmZWN5Y2xlIG9mIGEgbGluayBvciBtYXliZSB0aGUgdGVhcmRvd24gcHJvY2VkdXJlLiBMYXN0bHksIEkmIzM5O2xsIHpvb20gd2F5IGRvd24gdG8gbGluZSAxODk4LiBUaGF0JiMzOTtzIGdldHRpbmcgcHJldHR5IGRlZXAgaW50byB0aGUgY29kZSwgc28gdGhhdCBoYXMgdG8gYmUgZWl0aGVyIGFuIGVycm9yIGhhbmRsaW5nIHByb2NlZHVyZSBvciBzb21lIHJlYWxseSBsb3ctbGV2ZWwgc3R1ZmYgcmVnYXJkaW5nIHRoZSB0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uIG9mIGZyYW1lcy4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZXkgZGVhbCB3aXRoIHRoZSBzcGVjaWZpYyBuaXR0eS1ncml0dHkgb2YgdGhlIGxpbmsgbGF5ZXIuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVzZSBzZWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGlwYy9saW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzNzpcdHN0cnVjdCB0aXBjX2xpbmsge1xuIDEzODpcdFx0dTMyIGFkZHI7XG4gMTM5Olx0XHRjaGFyIG5hbWVbVElQQ19NQVhfTElOS19OQU1FXTtcbiAxNDA6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbiAxNDE6XHRcbiAxNDI6XHRcdC8qIE1hbmFnZW1lbnQgYW5kIGxpbmsgc3VwZXJ2aXNpb24gZGF0YSAqL1xuIDE0MzpcdFx0dTE2IHBlZXJfc2Vzc2lvbjtcbiAxNDQ6XHRcdHUxNiBzZXNzaW9uO1xuIDE0NTpcdFx0dTE2IHNuZF9ueHRfc3RhdGU7XG4gMTQ2Olx0XHR1MTYgcmN2X254dF9zdGF0ZTtcbiAxNDc6XHRcdHUzMiBwZWVyX2JlYXJlcl9pZDtcbiAxNDg6XHRcdHUzMiBiZWFyZXJfaWQ7XG4gMTQ5Olx0XHR1MzIgdG9sZXJhbmNlO1xuIDE1MDpcdFx0dTMyIGFib3J0X2xpbWl0O1xuIDE1MTpcdFx0dTMyIHN0YXRlO1xuIDE1MjpcdFx0dTE2IHBlZXJfY2FwcztcbiAxNTM6XHRcdGJvb2wgaW5fc2Vzc2lvbjtcbiAxNTQ6XHRcdGJvb2wgYWN0aXZlO1xuIDE1NTpcdFx0dTMyIHNpbGVudF9pbnR2X2NudDtcbiAxNTY6XHRcdGNoYXIgaWZfbmFtZVtUSVBDX01BWF9JRl9OQU1FXTtcbiAxNTc6XHRcdHUzMiBwcmlvcml0eTtcbiAxNTg6XHRcdGNoYXIgbmV0X3BsYW5lO1xuIDE1OTpcdFx0c3RydWN0IHRpcGNfbW9uX3N0YXRlIG1vbl9zdGF0ZTtcbiAxNjA6XHRcdHUxNiByc3RfY250O1xuIDE2MTpcdFxuIDE2MjpcdFx0LyogRmFpbG92ZXIvc3luY2ggKi9cbiAxNjM6XHRcdHUxNiBkcm9wX3BvaW50O1xuIDE2NDpcdFx0c3RydWN0IHNrX2J1ZmYgKmZhaWxvdmVyX3JlYXNtX3NrYjtcbiAxNjU6XHRcdHN0cnVjdCBza19idWZmX2hlYWQgZmFpbG92ZXJfZGVmZXJkcTtcbiAxNjY6XHRcbiAxNjc6XHRcdC8qIE1heCBwYWNrZXQgbmVnb3RpYXRpb24gKi9cbiAxNjg6XHRcdHUxNiBtdHU7XG4gMTY5Olx0XHR1MTYgYWR2ZXJ0aXNlZF9tdHU7XG4gMTcwOlx0XG4gMTcxOlx0XHQvKiBTZW5kaW5nICovXG4gMTcyOlx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHRyYW5zbXE7XG4gMTczOlx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGJhY2tsb2dxO1xuIDE3NDpcdFx0c3RydWN0IHtcbiAxNzU6XHRcdFx0dTE2IGxlbjtcbiAxNzY6XHRcdFx0dTE2IGxpbWl0O1xuIDE3NzpcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqdGFyZ2V0X2Jza2I7XG4gMTc4Olx0XHR9IGJhY2tsb2dbNV07XG4gMTc5Olx0XHR1MTYgc25kX254dDtcbiAxODA6XHRcbiAxODE6XHRcdC8qIFJlY2VwdGlvbiAqL1xuIDE4MjpcdFx0dTE2IHJjdl9ueHQ7XG4gMTgzOlx0XHR1MzIgcmN2X3VuYWNrZWQ7XG4gMTg0Olx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGRlZmVyZHE7XG4gMTg1Olx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHE7XG4gMTg2Olx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpuYW1lZHE7XG4gMTg3Olx0XG4gMTg4Olx0XHQvKiBDb25nZXN0aW9uIGhhbmRsaW5nICovXG4gMTg5Olx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHdha2V1cHE7XG4gMTkwOlx0XHR1MTYgd2luZG93O1xuIDE5MTpcdFx0dTE2IG1pbl93aW47XG4gMTkyOlx0XHR1MTYgc3N0aHJlc2g7XG4gMTkzOlx0XHR1MTYgbWF4X3dpbjtcbiAxOTQ6XHRcdHUxNiBjb25nX2Fja3M7XG4gMTk1Olx0XHR1MTYgY2hlY2twb2ludDtcbiAxOTY6XHRcbiAxOTc6XHRcdC8qIEZyYWdtZW50YXRpb24vcmVhc3NlbWJseSAqL1xuIDE5ODpcdFx0c3RydWN0IHNrX2J1ZmYgKnJlYXNtX2J1ZjtcbiAxOTk6XHRcdHN0cnVjdCBza19idWZmICpyZWFzbV90bmxtc2c7XG4gMjAwOlx0XG4gMjAxOlx0XHQvKiBCcm9hZGNhc3QgKi9cbiAyMDI6XHRcdHUxNiBhY2tlcnM7XG4gMjAzOlx0XHR1MTYgYWNrZWQ7XG4gMjA0Olx0XHR1MTYgbGFzdF9nYXA7XG4gMjA1Olx0XHRzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKmxhc3RfZ2E7XG4gMjA2Olx0XHRzdHJ1Y3QgdGlwY19saW5rICpiY19yY3ZsaW5rO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIFRJUEMgTGluayBDcmVhdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IFRJUEMgbGlua3MgYXJlIGVzdGFibGlzaGVkLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRocmVlIGtleSBmdW5jdGlvbnM6IGB0aXBjX2xpbmtfY3JlYXRlYCwgYHRpcGNfbGlua19iY19jcmVhdGVgLCBhbmQgYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgLiBJJiMzOTttIHN0YXJ0aW5nIHRvIHZpc3VhbGl6ZSB0aGUgbGlrZWx5IGZsb3cuIEkgc3VzcGVjdCBgdGlwY19saW5rX2NyZWF0ZWAgaXMgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIGVzdGFibGlzaGluZyBhIGdlbmVyYWwgVElQQyBsaW5rLiBUaGUgJiMzNDtiYyYjMzQ7IGluIGB0aXBjX2xpbmtfYmNfY3JlYXRlYCBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyByZWxhdGVkIHRvIGJyb2FkY2FzdCBvciBwb3RlbnRpYWxseSBzb21lIGZvcm0gb2YgY2xpZW50LXNlcnZlciBhcnJhbmdlbWVudCwgd2hpY2ggSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLiBBbmQgYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgLi4uIHRoYXQgc2NyZWFtcyBwcm90b2NvbCBtZXNzYWdlIGNvbnN0cnVjdGlvbi4gSSBhbnRpY2lwYXRlIHRoaXMgaXMgd2hlcmUgdGhlIGxpbmsmIzM5O3MgY29udHJvbCBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBtYXJzaGFsbGVkIGludG8gdGhlIHNwZWNpZmljIFRJUEMgZm9ybWF0IGZvciB0cmFuc21pc3Npb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCB0aGVzZSBmdW5jdGlvbnMgaW4gb3JkZXIgYW5kIHNlZSBob3cgdGhlIGZ1bmN0aW9ucyBpbnRlcmFjdC4gSSYjMzk7bSBrZWVuIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGxvb2tpbmcgZm9yIG9wdGltaXphdGlvbnMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgbXkgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGlwYy9saW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzA6XHQgKiBAbGluazogcmV0dXJuIHZhbHVlLCBwb2ludGVyIHRvIHB1dCB0aGUgY3JlYXRlZCBsaW5rXG4gNDcxOlx0ICogQHNlbGY6IGxvY2FsIHVuaWNhc3QgbGluayBpZFxuIDQ3MjpcdCAqIEBwZWVyX2lkOiAxMjgtYml0IElEIG9mIHBlZXJcbiA0NzM6XHQgKlxuIDQ3NDpcdCAqIFJldHVybjogdHJ1ZSBpZiBsaW5rIHdhcyBjcmVhdGVkLCBvdGhlcndpc2UgZmFsc2VcbiA0NzU6XHQgKi9cbiA0NzY6XHRib29sIHRpcGNfbGlua19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppZl9uYW1lLCBpbnQgYmVhcmVyX2lkLFxuIDQ3NzpcdFx0XHQgICAgICBpbnQgdG9sZXJhbmNlLCBjaGFyIG5ldF9wbGFuZSwgdTMyIG10dSwgaW50IHByaW9yaXR5LFxuIDQ3ODpcdFx0XHQgICAgICB1MzIgbWluX3dpbiwgdTMyIG1heF93aW4sIHUzMiBzZXNzaW9uLCB1MzIgc2VsZixcbiA0Nzk6XHRcdFx0ICAgICAgdTMyIHBlZXIsIHU4ICpwZWVyX2lkLCB1MTYgcGVlcl9jYXBzLFxuIDQ4MDpcdFx0XHQgICAgICBzdHJ1Y3QgdGlwY19saW5rICpiY19zbmRsaW5rLFxuIDQ4MTpcdFx0XHQgICAgICBzdHJ1Y3QgdGlwY19saW5rICpiY19yY3ZsaW5rLFxuIDQ4MjpcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsXG4gNDgzOlx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcSxcbiA0ODQ6XHRcdFx0ICAgICAgc3RydWN0IHRpcGNfbGluayAqKmxpbmspXG4gNDg1Olx0e1xuIDQ4NjpcdFx0Y2hhciBwZWVyX3N0cltOT0RFX0lEX1NUUl9MRU5dID0gezAsfTtcbiA0ODc6XHRcdGNoYXIgc2VsZl9zdHJbTk9ERV9JRF9TVFJfTEVOXSA9IHswLH07XG4gNDg4Olx0XHRzdHJ1Y3QgdGlwY19saW5rICpsO1xuIDQ4OTpcdFxuIDQ5MDpcdFx0bCA9IGt6YWxsb2Nfb2JqKCpsLCBHRlBfQVRPTUlDKTtcbiA0OTE6XHRcdGlmICghbClcbiA0OTI6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDQ5MzpcdFx0KmxpbmsgPSBsO1xuIDQ5NDpcdFx0bC1cdTAwM2VzZXNzaW9uID0gc2Vzc2lvbjtcbiA0OTU6XHRcbiA0OTY6XHRcdC8qIFNldCBsaW5rIG5hbWUgZm9yIHVuaWNhc3QgbGlua3Mgb25seSAqL1xuIDQ5NzpcdFx0aWYgKHBlZXJfaWQpIHtcbiA0OTg6XHRcdFx0aWYgKHRpcGNfbm9kZWlkMnN0cmluZyhzZWxmX3N0ciwgdGlwY19vd25faWQobmV0KSkgXHUwMDNlIE5PREVfSURfTEVOKVxuIDQ5OTpcdFx0XHRcdHNwcmludGYoc2VsZl9zdHIsIFwmIzM0OyV4XCYjMzQ7LCBzZWxmKTtcbiA1MDA6XHRcdFx0aWYgKHRpcGNfbm9kZWlkMnN0cmluZyhwZWVyX3N0ciwgcGVlcl9pZCkgXHUwMDNlIE5PREVfSURfTEVOKVxuIDUwMTpcdFx0XHRcdHNwcmludGYocGVlcl9zdHIsIFwmIzM0OyV4XCYjMzQ7LCBwZWVyKTtcbiA1MDI6XHRcdH1cbiA1MDM6XHRcdC8qIFBlZXIgaS9mIG5hbWUgd2lsbCBiZSBjb21wbGV0ZWQgYnkgcmVzZXQvYWN0aXZhdGUgbWVzc2FnZSAqL1xuIDUwNDpcdFx0c25wcmludGYobC1cdTAwM2VuYW1lLCBzaXplb2YobC1cdTAwM2VuYW1lKSwgXCYjMzQ7JXM6JXMtJXM6dW5rbm93blwmIzM0OyxcbiA1MDU6XHRcdFx0IHNlbGZfc3RyLCBpZl9uYW1lLCBwZWVyX3N0cik7XG4gNTA2Olx0XG4gNTA3Olx0XHRzdHJzY3B5KGwtXHUwMDNlaWZfbmFtZSwgaWZfbmFtZSk7XG4gNTA4Olx0XHRsLVx1MDAzZWFkZHIgPSBwZWVyO1xuIDUwOTpcdFx0bC1cdTAwM2VwZWVyX2NhcHMgPSBwZWVyX2NhcHM7XG4gNTEwOlx0XHRsLVx1MDAzZW5ldCA9IG5ldDtcbiA1MTE6XHRcdGwtXHUwMDNlaW5fc2Vzc2lvbiA9IGZhbHNlO1xuIDUxMjpcdFx0bC1cdTAwM2ViZWFyZXJfaWQgPSBiZWFyZXJfaWQ7XG4gNTEzOlx0XHRsLVx1MDAzZXRvbGVyYW5jZSA9IHRvbGVyYW5jZTtcbiA1MTQ6XHRcdGlmIChiY19yY3ZsaW5rKVxuIDUxNTpcdFx0XHRiY19yY3ZsaW5rLVx1MDAzZXRvbGVyYW5jZSA9IHRvbGVyYW5jZTtcbiA1MTY6XHRcdGwtXHUwMDNlbmV0X3BsYW5lID0gbmV0X3BsYW5lO1xuIDUxNzpcdFx0bC1cdTAwM2VhZHZlcnRpc2VkX210dSA9IG10dTtcbiA1MTg6XHRcdGwtXHUwMDNlbXR1ID0gbXR1O1xuIDUxOTpcdFx0bC1cdTAwM2Vwcmlvcml0eSA9IHByaW9yaXR5O1xuIDUyMDpcdFx0dGlwY19saW5rX3NldF9xdWV1ZV9saW1pdHMobCwgbWluX3dpbiwgbWF4X3dpbik7XG4gNTIxOlx0XHRsLVx1MDAzZWFja2VycyA9IDE7XG4gNTIyOlx0XHRsLVx1MDAzZWJjX3NuZGxpbmsgPSBiY19zbmRsaW5rO1xuIDUyMzpcdFx0bC1cdTAwM2ViY19yY3ZsaW5rID0gYmNfcmN2bGluaztcbiA1MjQ6XHRcdGwtXHUwMDNlaW5wdXRxID0gaW5wdXRxO1xuIDUyNTpcdFx0bC1cdTAwM2VuYW1lZHEgPSBuYW1lZHE7XG4gNTI2Olx0XHRsLVx1MDAzZXN0YXRlID0gTElOS19SRVNFVFRJTkc7XG4gNTI3Olx0XHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bC1cdTAwM2V0cmFuc21xKTtcbiA1Mjg6XHRcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZsLVx1MDAzZWJhY2tsb2dxKTtcbiA1Mjk6XHRcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZsLVx1MDAzZWRlZmVyZHEpO1xuIDUzMDpcdFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmwtXHUwMDNlZmFpbG92ZXJfZGVmZXJkcSk7XG4gNTMxOlx0XHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmwtXHUwMDNld2FrZXVwcSk7XG4gNTMyOlx0XHRza2JfcXVldWVfaGVhZF9pbml0KGwtXHUwMDNlaW5wdXRxKTtcbiA1MzM6XHRcdHJldHVybiB0cnVlO1xuIDUzNDpcdH1cbiA1MzU6XHRcbiA1MzY6XHQvKipcbiA1Mzc6XHQgKiB0aXBjX2xpbmtfYmNfY3JlYXRlIC0gY3JlYXRlIG5ldyBsaW5rIHRvIGJlIHVzZWQgZm9yIGJyb2FkY2FzdFxuIDUzODpcdCAqIEBuZXQ6IHBvaW50ZXIgdG8gYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxuIDUzOTpcdCAqIEBtdHU6IG10dSB0byBiZSB1c2VkIGluaXRpYWxseSBpZiBubyBwZWVyc1xuIDU0MDpcdCAqIEBtaW5fd2luOiBtaW5pbWFsIHNlbmQgd2luZG93IHRvIGJlIHVzZWQgYnkgbGlua1xuIDU0MTpcdCAqIEBtYXhfd2luOiBtYXhpbWFsIHNlbmQgd2luZG93IHRvIGJlIHVzZWQgYnkgbGlua1xuIDU0MjpcdCAqIEBpbnB1dHE6IHF1ZXVlIHRvIHB1dCBtZXNzYWdlcyByZWFkeSBmb3IgZGVsaXZlcnlcbiA1NDM6XHQgKiBAbmFtZWRxOiBxdWV1ZSB0byBwdXQgYmluZGluZyB0YWJsZSB1cGRhdGUgbWVzc2FnZXMgcmVhZHkgZm9yIGRlbGl2ZXJ5XG4gNTQ0Olx0ICogQGxpbms6IHJldHVybiB2YWx1ZSwgcG9pbnRlciB0byBwdXQgdGhlIGNyZWF0ZWQgbGlua1xuIDU0NTpcdCAqIEBvd25ub2RlOiBpZGVudGl0eSBvZiBvd24gbm9kZVxuIDU0NjpcdCAqIEBwZWVyOiBub2RlIGlkIG9mIHBlZXIgbm9kZVxuIDU0NzpcdCAqIEBwZWVyX2lkOiAxMjgtYml0IElEIG9mIHBlZXJcbiA1NDg6XHQgKiBAcGVlcl9jYXBzOiBiaXRtYXAgZGVzY3JpYmluZyBwZWVyIG5vZGUgY2FwYWJpbGl0aWVzXG4gNTQ5Olx0ICogQGJjX3NuZGxpbms6IHRoZSBuYW1lc3BhY2UgZ2xvYmFsIGxpbmsgdXNlZCBmb3IgYnJvYWRjYXN0IHNlbmRpbmdcbiA1NTA6XHQgKlxuIDU1MTpcdCAqIFJldHVybjogdHJ1ZSBpZiBsaW5rIHdhcyBjcmVhdGVkLCBvdGhlcndpc2UgZmFsc2VcbiA1NTI6XHQgKi9cbiA1NTM6XHRib29sIHRpcGNfbGlua19iY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgb3dubm9kZSwgdTMyIHBlZXIsIHU4ICpwZWVyX2lkLFxuIDU1NDpcdFx0XHRcdCBpbnQgbXR1LCB1MzIgbWluX3dpbiwgdTMyIG1heF93aW4sIHUxNiBwZWVyX2NhcHMsXG4gNTU1Olx0XHRcdFx0IHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcbiA1NTY6XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbmFtZWRxLFxuIDU1NzpcdFx0XHRcdCBzdHJ1Y3QgdGlwY19saW5rICpiY19zbmRsaW5rLFxuIDU1ODpcdFx0XHRcdCBzdHJ1Y3QgdGlwY19saW5rICoqbGluaylcbiA1NTk6XHR7XG4gNTYwOlx0XHRzdHJ1Y3QgdGlwY19saW5rICpsO1xuIDU2MTpcdFxuIDU2MjpcdFx0aWYgKCF0aXBjX2xpbmtfY3JlYXRlKG5ldCwgXCYjMzQ7XCYjMzQ7LCBNQVhfQkVBUkVSUywgMCwgJiMzOTtaJiMzOTssIG10dSwgMCwgbWluX3dpbixcbiA1NjM6XHRcdFx0XHQgICAgICBtYXhfd2luLCAwLCBvd25ub2RlLCBwZWVyLCBOVUxMLCBwZWVyX2NhcHMsXG4gNTY0Olx0XHRcdFx0ICAgICAgYmNfc25kbGluaywgTlVMTCwgaW5wdXRxLCBuYW1lZHEsIGxpbmspKVxuIDU2NTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNTY2Olx0XG4gNTY3Olx0XHRsID0gKmxpbms7XG4gNTY4Olx0XHRpZiAocGVlcl9pZCkge1xuIDU2OTpcdFx0XHRjaGFyIHBlZXJfc3RyW05PREVfSURfU1RSX0xFTl0gPSB7MCx9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDY4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipFeGFtaW5pbmcgTGluZSAxODk4KioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSYjMzk7bSB0YWtpbmcgYSBzdHJhdGVnaWMgbG9vayBhdCB0aGlzIGRvY3VtZW50LCBhbmQgdGhlIGNvbnRleHQgc3VnZ2VzdHMgdGhhdCBkaWdnaW5nIGludG8gdGhlIGNvbnRlbnQgYXJvdW5kIGxpbmUgMTg5OCB3b3VsZCBwcm92aWRlIHNvbWUgY3J1Y2lhbCBpbnNpZ2h0cy4gTXkgbWVudGFsIG1vZGVsIGFudGljaXBhdGVzIHRoYXQgYSBkaXNjdXNzaW9uIG9yIHBpZWNlIG9mIGRhdGEgcHJlc2VudGVkIGFyb3VuZCB0aGlzIGxpbmUgbWF5IGJlIHBpdm90YWwgdG8gdGhlIG92ZXJhbGwgYXJndW1lbnQsIG9yIGl0IG1pZ2h0IGNvbnRhaW4gaW5mb3JtYXRpb24gdGhhdCByZWZ1dGVzIGEgc3BlY2lmaWMgcG9pbnQuIEdpdmVuIG15IGV4cGVydGlzZSwgbXkgaW50dWl0aW9uIGlzIGhvbmVkIHRvIGZsYWcgdGhpcyBhcmVhIGZvciBkZWVwZXIgZXhhbWluYXRpb24uIEkmIzM5O20gYXBwcm9hY2hpbmcgdGhpcyB3aXRoIGEga2VlbiBleHBlY3RhdGlvbiB0aGF0IHRoZSBjb250ZW50IHRoZXJlIG1heSBiZSBlaXRoZXIgYSBjcml0aWNhbCBzdXBwb3J0aW5nIHBpZWNlLCBvciBhIHJlbGV2YW50IG91dGxpZXIgdGhhdCB3YXJyYW50cyBmdXJ0aGVyIHNjcnV0aW55LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL2xpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg4MDpcdFx0XHRpZiAobC1cdTAwM2VwZWVyX2NhcHMgXHUwMDI2IFRJUENfTElOS19QUk9UT19TRVFOTylcbjE4ODE6XHRcdFx0XHRtc2dfc2V0X3NlcW5vKGhkciwgbC1cdTAwM2VzbmRfbnh0X3N0YXRlJiM0MzsmIzQzOyk7XG4xODgyOlx0XHRcdG1zZ19zZXRfc2VxX2dhcChoZHIsIHJjdmdhcCk7XG4xODgzOlx0XHRcdGJjX3JjdmdhcCA9IGxpbmtfYmNfcmN2X2dhcChiY2wpO1xuMTg4NDpcdFx0XHRtc2dfc2V0X2JjX2dhcChoZHIsIGJjX3JjdmdhcCk7XG4xODg1Olx0XHRcdG1zZ19zZXRfcHJvYmUoaGRyLCBwcm9iZSk7XG4xODg2Olx0XHRcdG1zZ19zZXRfaXNfa2VlcGFsaXZlKGhkciwgcHJvYmUgfHwgcHJvYmVfcmVwbHkpO1xuMTg4NzpcdFx0XHRpZiAobC1cdTAwM2VwZWVyX2NhcHMgXHUwMDI2IFRJUENfR0FQX0FDS19CTE9DSylcbjE4ODg6XHRcdFx0XHRnbGVuID0gdGlwY19idWlsZF9nYXBfYWNrX2Jsa3MobCwgaGRyKTtcbjE4ODk6XHRcdFx0dGlwY19tb25fcHJlcChsLVx1MDAzZW5ldCwgZGF0YSAmIzQzOyBnbGVuLCBcdTAwMjZkbGVuLCBtc3RhdGUsIGwtXHUwMDNlYmVhcmVyX2lkKTtcbjE4OTA6XHRcdFx0bXNnX3NldF9zaXplKGhkciwgSU5UX0hfU0laRSAmIzQzOyBnbGVuICYjNDM7IGRsZW4pO1xuMTg5MTpcdFx0XHRza2JfdHJpbShza2IsIElOVF9IX1NJWkUgJiM0MzsgZ2xlbiAmIzQzOyBkbGVuKTtcbjE4OTI6XHRcdFx0bC1cdTAwM2VzdGF0cy5zZW50X3N0YXRlcyYjNDM7JiM0Mzs7XG4xODkzOlx0XHRcdGwtXHUwMDNlcmN2X3VuYWNrZWQgPSAwO1xuMTg5NDpcdFx0fSBlbHNlIHtcbjE4OTU6XHRcdFx0LyogUkVTRVRfTVNHIG9yIEFDVElWQVRFX01TRyAqL1xuMTg5NjpcdFx0XHRpZiAobXR5cCA9PSBBQ1RJVkFURV9NU0cpIHtcbjE4OTc6XHRcdFx0XHRtc2dfc2V0X2Rlc3Rfc2Vzc2lvbl92YWxpZChoZHIsIDEpO1xuMTg5ODpcdFx0XHRcdG1zZ19zZXRfZGVzdF9zZXNzaW9uKGhkciwgbC1cdTAwM2VwZWVyX3Nlc3Npb24pO1xuMTg5OTpcdFx0XHR9XG4xOTAwOlx0XHRcdG1zZ19zZXRfbWF4X3BrdChoZHIsIGwtXHUwMDNlYWR2ZXJ0aXNlZF9tdHUpO1xuMTkwMTpcdFx0XHRtZW1jcHkoZGF0YSwgbC1cdTAwM2VpZl9uYW1lLCBUSVBDX01BWF9JRl9OQU1FKTtcbjE5MDI6XHRcdFx0bXNnX3NldF9zaXplKGhkciwgSU5UX0hfU0laRSAmIzQzOyBUSVBDX01BWF9JRl9OQU1FKTtcbjE5MDM6XHRcdFx0c2tiX3RyaW0oc2tiLCBJTlRfSF9TSVpFICYjNDM7IFRJUENfTUFYX0lGX05BTUUpO1xuMTkwNDpcdFx0fVxuMTkwNTpcdFx0aWYgKHByb2JlKVxuMTkwNjpcdFx0XHRsLVx1MDAzZXN0YXRzLnNlbnRfcHJvYmVzJiM0MzsmIzQzOztcbjE5MDc6XHRcdGlmIChyY3ZnYXApXG4xOTA4Olx0XHRcdGwtXHUwMDNlc3RhdHMuc2VudF9uYWNrcyYjNDM7JiM0Mzs7XG4xOTA5Olx0XHRpZiAoYmNfcmN2Z2FwKVxuMTkxMDpcdFx0XHRiY2wtXHUwMDNlc3RhdHMuc2VudF9uYWNrcyYjNDM7JiM0Mzs7XG4xOTExOlx0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSBUQ19QUklPX0NPTlRST0w7XG4xOTEyOlx0XHRfX3NrYl9xdWV1ZV90YWlsKHhtaXRxLCBza2IpO1xuMTkxMzpcdFx0dHJhY2VfdGlwY19wcm90b19idWlsZChza2IsIGZhbHNlLCBsLVx1MDAzZW5hbWUpO1xuMTkxNDpcdH1cbjE5MTU6XHRcbjE5MTY6XHR2b2lkIHRpcGNfbGlua19jcmVhdGVfZHVtbXlfdG5sX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLFxuMTkxNzpcdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuMTkxODpcdHtcbjE5MTk6XHRcdHUzMiBvbm9kZSA9IHRpcGNfb3duX2FkZHIobC1cdTAwM2VuZXQpO1xuMTkyMDpcdFx0c3RydWN0IHRpcGNfbXNnICpoZHIsICppaGRyO1xuMTkyMTpcdFx0c3RydWN0IHNrX2J1ZmZfaGVhZCB0bmxxO1xuMTkyMjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjE5MjM6XHRcdHUzMiBkbm9kZSA9IGwtXHUwMDNlYWRkcjtcbjE5MjQ6XHRcbjE5MjU6XHRcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZ0bmxxKTtcbjE5MjY6XHRcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShUVU5ORUxfUFJPVE9DT0wsIEZBSUxPVkVSX01TRyxcbjE5Mjc6XHRcdFx0XHQgICAgICBJTlRfSF9TSVpFLCBCQVNJQ19IX1NJWkUsXG4xOTI4Olx0XHRcdFx0ICAgICAgZG5vZGUsIG9ub2RlLCAwLCAwLCAwKTtcbjE5Mjk6XHRcdGlmICghc2tiKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQWRkcmVzc2luZyBQb3RlbnRpYWwgQnVmZmVyIE92ZXJmbG93cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCB0aWdodGVuaW5nIHVwIHN0cmluZyBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHRvIHByZXZlbnQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3MuIExldCYjMzk7cyBzZWUgaWYgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIGNvcnJlY3QuCgpJbiB0aGUgZmlyc3QgY2FzZSwgaW5zaWRlIGB0aXBjX2xpbmtfY3JlYXRlYCwgdGhlIGNvZGUgbm93IHVzZXMgYHN0cnNjcHlgIGFmdGVyIGEgYGt6YWxsb2Nfb2JqYCBhbGxvY2F0aW9uLiBUaGUgYGt6YWxsb2Nfb2JqYCBpcyBjcml0aWNhbCBoZXJlOyBpdCB6ZXJvZXMgdGhlIGVudGlyZSBgc3RydWN0IHRpcGNfbGlua2AsIGluY2x1ZGluZyB0aGUgYGlmX25hbWVgIGZpZWxkLiBUaGlzIGlzIGdvb2QgYmVjYXVzZSBpdCBwcm92aWRlcyBhIGtub3duIHN0YXJ0aW5nIHN0YXRlLiBUaGVuIGBzdHJzY3B5YCBzYWZlbHkgY29waWVzIHRoZSBpbnRlcmZhY2UgbmFtZSBpbnRvIGBsLSZndDtpZl9uYW1lYC4gRXZlbiBpZiBgaWZfbmFtZWAgaXMgbG9uZ2VyIHRoYW4gd2hhdCBgbC0mZ3Q7aWZfbmFtZWAgY2FuIGhvbGQsIGBzdHJzY3B5YCBlbnN1cmVzIHdlIGRvbiYjMzk7dCB3cml0ZSBwYXN0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gVGhlIHplcm9pbmcgZnJvbSBga3phbGxvY19vYmpgIG1lYW5zIHRoYXQgZXZlbiBpZiBgc3Ryc2NweWAgZG9lc24mIzM5O3QgZmlsbCB0aGUgZW50aXJlIGJ1ZmZlciwgdGhlIHJlbWFpbmluZyBwYXJ0IGlzIHBhZGRlZCB3aXRoIHplcm9zLgoKTmV4dCwgaW4gYHRpcGNfbGlua19iY19jcmVhdGVgLCB0aGUgY2hhbmdlIGZyb20gYHN0cmNweWAgdG8gYHN0cnNjcHlgIGlzIHRoZSBzYW1lIHByaW5jaXBsZS4gYHN0cnNjcHlgIGlzIHRoZSBzYWZlciBvcHRpb24uCgpUaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0IGNvbWVzIHdpdGggYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgLiAgSW5pdGlhbGx5LCBpdCBsb29rcyBsaWtlIGBzdHJjcHlgIHdhcyB1c2VkIHRvIGNvcHkgYGwtJmd0O2lmX25hbWVgIGludG8gYGRhdGFgLiBCdXQgaG9sZCBvbi4uLiB0aGUgY29kZSBzZXRzIGEgZml4ZWQgc2l6ZSBmb3IgdGhlIG1lc3NhZ2UgdXNpbmcgYG1zZ19zZXRfc2l6ZWAgYW5kIHRyaW1zIHRoZSBzb2NrZXQgYnVmZmVyIChgc2tiYCkgdG8gdGhhdCBmaXhlZCBzaXplLCBldmVuIHRob3VnaCBgc3RyY3B5YCAqc2hvdWxkKiBoYXZlIHN0b3BwZWQgYXQgdGhlIG51bGwgdGVybWluYXRvciBvZiB0aGUgc3RyaW5nIGluIGBsLSZndDtpZl9uYW1lYC4gVGhhdCYjMzk7cyBhIGJpdCBvZiBhIHJlZCBmbGFnOyBpdCBhcHBlYXJzIHRoYXQgdGhlIGVhcmxpZXIgaW1wbGVtZW50YXRpb24sIGNvdW50ZXJpbnR1aXRpdmVseSwgd2FzIHJlbHlpbmcgb24gdGhlIG51bGwgdGVybWluYXRpb24gb2YgYGwtJmd0O2lmX25hbWVgIHRvIGRlZmluZSB0aGUgY29waWVkIGRhdGEuICAKCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhlIGBza2JgIHdhcyBhbGxvY2F0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgd2hhdCBhc3N1bXB0aW9ucyBhcmUgbWFkZSBhYm91dCBpdHMgc2l6ZS4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaXhlZCBzaXplIHNldHRpbmcgYW5kIHRyaW1taW5nIGluIHRoZSBvcmlnaW5hbCBjb2RlIGNvdWxkIGxlYWQgdG8gdGhlIHNpemUgYmVpbmcgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBzdHJpbmcsIG9yIGlmIHRoZXJlJiMzOTtzIGEgZGlmZmVyZW50IHZ1bG5lcmFiaWxpdHkgdGhhdCB0aGUgY3VycmVudCBwYXRjaCBhZGRyZXNzZXMgdGhhdCBJIGFtIG1pc3NpbmcuIEZ1cnRoZXIgY29kZSBpbnNwZWN0aW9uIGlzIHdhcnJhbnRlZCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBhbGxvY2F0aW9uIGFuZCB1bmRlcnN0YW5kIHRoZSBvcmlnaW5hbCByYXRpb25hbGUgYmVoaW5kIHRoZSBmaXhlZC1zaXplIG1lc3NhZ2UgY29uc3RydWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL2xpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg0NTpcdFx0dm9pZCAqZGF0YTtcbjE4NDY6XHRcbjE4NDc6XHRcdC8qIERvbiYjMzk7dCBzZW5kIHByb3RvY29sIG1lc3NhZ2UgZHVyaW5nIHJlc2V0IG9yIGxpbmsgZmFpbG92ZXIgKi9cbjE4NDg6XHRcdGlmICh0aXBjX2xpbmtfaXNfYmxvY2tlZChsKSlcbjE4NDk6XHRcdFx0cmV0dXJuO1xuMTg1MDpcdFxuMTg1MTpcdFx0aWYgKCF0aXBjX2xpbmtfaXNfdXAobCkgXHUwMDI2XHUwMDI2IChtdHlwID09IFNUQVRFX01TRykpXG4xODUyOlx0XHRcdHJldHVybjtcbjE4NTM6XHRcbjE4NTQ6XHRcdGlmICgocHJvYmUgfHwgcHJvYmVfcmVwbHkpIFx1MDAyNlx1MDAyNiAhc2tiX3F1ZXVlX2VtcHR5KGRmcSkpXG4xODU1Olx0XHRcdHJjdmdhcCA9IGJ1Zl9zZXFubyhza2JfcGVlayhkZnEpKSAtIGwtXHUwMDNlcmN2X254dDtcbjE4NTY6XHRcbjE4NTc6XHRcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShMSU5LX1BST1RPQ09MLCBtdHlwLCBJTlRfSF9TSVpFLFxuMTg1ODpcdFx0XHRcdCAgICAgIHRpcGNfbWF4X2RvbWFpbl9zaXplICYjNDM7IE1BWF9HQVBfQUNLX0JMS1NfU1osXG4xODU5Olx0XHRcdFx0ICAgICAgbC1cdTAwM2VhZGRyLCB0aXBjX293bl9hZGRyKGwtXHUwMDNlbmV0KSwgMCwgMCwgMCk7XG4xODYwOlx0XHRpZiAoIXNrYilcbjE4NjE6XHRcdFx0cmV0dXJuO1xuMTg2MjpcdFxuMTg2MzpcdFx0aGRyID0gYnVmX21zZyhza2IpO1xuMTg2NDpcdFx0ZGF0YSA9IG1zZ19kYXRhKGhkcik7XG4xODY1Olx0XHRtc2dfc2V0X3Nlc3Npb24oaGRyLCBsLVx1MDAzZXNlc3Npb24pO1xuMTg2NjpcdFx0bXNnX3NldF9iZWFyZXJfaWQoaGRyLCBsLVx1MDAzZWJlYXJlcl9pZCk7XG4xODY3Olx0XHRtc2dfc2V0X25ldF9wbGFuZShoZHIsIGwtXHUwMDNlbmV0X3BsYW5lKTtcbjE4Njg6XHRcdG1zZ19zZXRfbmV4dF9zZW50KGhkciwgbC1cdTAwM2VzbmRfbnh0KTtcbjE4Njk6XHRcdG1zZ19zZXRfYWNrKGhkciwgbC1cdTAwM2VyY3Zfbnh0IC0gMSk7XG4xODcwOlx0XHRtc2dfc2V0X2JjYXN0X2FjayhoZHIsIGJjbC1cdTAwM2VyY3Zfbnh0IC0gMSk7XG4xODcxOlx0XHRtc2dfc2V0X2JjX2Fja19pbnZhbGlkKGhkciwgIW5vZGVfdXApO1xuMTg3MjpcdFx0bXNnX3NldF9sYXN0X2JjYXN0KGhkciwgbC1cdTAwM2ViY19zbmRsaW5rLVx1MDAzZXNuZF9ueHQgLSAxKTtcbjE4NzM6XHRcdG1zZ19zZXRfbGlua190b2xlcmFuY2UoaGRyLCB0b2xlcmFuY2UpO1xuMTg3NDpcdFx0bXNnX3NldF9saW5rcHJpbyhoZHIsIHByaW9yaXR5KTtcbjE4NzU6XHRcdG1zZ19zZXRfcmVkdW5kYW50X2xpbmsoaGRyLCBub2RlX3VwKTtcbjE4NzY6XHRcdG1zZ19zZXRfc2VxX2dhcChoZHIsIDApO1xuMTg3NzpcdFx0bXNnX3NldF9zZXFubyhoZHIsIGwtXHUwMDNlc25kX254dCAmIzQzOyBVMTZfTUFYIC8gMik7XG4xODc4Olx0XG4xODc5Olx0XHRpZiAobXR5cCA9PSBTVEFURV9NU0cpIHtcbjE4ODA6XHRcdFx0aWYgKGwtXHUwMDNlcGVlcl9jYXBzIFx1MDAyNiBUSVBDX0xJTktfUFJPVE9fU0VRTk8pXG4xODgxOlx0XHRcdFx0bXNnX3NldF9zZXFubyhoZHIsIGwtXHUwMDNlc25kX254dF9zdGF0ZSYjNDM7JiM0MzspO1xuMTg4MjpcdFx0XHRtc2dfc2V0X3NlcV9nYXAoaGRyLCByY3ZnYXApO1xuMTg4MzpcdFx0XHRiY19yY3ZnYXAgPSBsaW5rX2JjX3Jjdl9nYXAoYmNsKTtcbjE4ODQ6XHRcdFx0bXNnX3NldF9iY19nYXAoaGRyLCBiY19yY3ZnYXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA3NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgYHRpcGNfbXNnX2NyZWF0ZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGlubmVyIHdvcmtpbmdzIG9mIGB0aXBjX21zZ19jcmVhdGVgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGZ1bmN0aW9uLCBzbyBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBiYXNpY3MuIExldCYjMzk7cyBzZWUuLi4gdGhlIHF1aWNrZXN0IHJvdXRlIHRvIHVuZGVyc3RhbmQgaXQgaXMgdG8gdHJhY2UgaXRzIGNhbGxzIGFuZCBzZWUgaG93IGl0IGlzIHVzZWQuIEkmIzM5O2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgaW5zdGFuY2VzIHdoZXJlIGB0aXBjX21zZ19jcmVhdGVgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBpdHMgY29udGV4dCwgd2hhdCBhcmd1bWVudHMgYXJlIHR5cGljYWxseSBwYXNzZWQsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBsYXJnZXIgVElQQyBtZXNzYWdpbmcgYXJjaGl0ZWN0dXJlLiBGcm9tIHRoZXJlLCBJIGNhbiBkaWcgZGVlcGVyIGludG8gdGhlIHNvdXJjZSBjb2RlIG9mIGB0aXBjX21zZ19jcmVhdGVgIGl0c2VsZi4gR290dGEgYmUgZWZmaWNpZW50IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfbXNnX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2dyb3VwLmM9NjY4PXN0YXRpYyB2b2lkIHRpcGNfZ3JvdXBfY3JlYXRlX2V2ZW50KHN0cnVjdCB0aXBjX2dyb3VwICpncnAsXG4tLVxubmV0L3RpcGMvZ3JvdXAuYy02ODYtXG5uZXQvdGlwYy9ncm91cC5jOjY4NzpcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UsIFRJUENfR1JQX01FTUJFUl9FVlQsXG5uZXQvdGlwYy9ncm91cC5jLTY4OC1cdFx0XHQgICAgICBHUk9VUF9IX1NJWkUsIHNpemVvZihldnQpLCBkbm9kZSwgbS1cdTAwM2Vub2RlLFxuLS1cbm5ldC90aXBjL2dyb3VwLmM9NzAzPXN0YXRpYyB2b2lkIHRpcGNfZ3JvdXBfcHJvdG9feG1pdChzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLCBzdHJ1Y3QgdGlwY19tZW1iZXIgKm0sXG4tLVxubmV0L3RpcGMvZ3JvdXAuYy03MDktXG5uZXQvdGlwYy9ncm91cC5jOjcxMDpcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShHUk9VUF9QUk9UT0NPTCwgbXR5cCwgSU5UX0hfU0laRSwgMCxcbm5ldC90aXBjL2dyb3VwLmMtNzExLVx0XHRcdCAgICAgIG0tXHUwMDNlbm9kZSwgdGlwY19vd25fYWRkcihncnAtXHUwMDNlbmV0KSxcbi0tXG5uZXQvdGlwYy9saW5rLmM9ODgxPXN0YXRpYyBpbnQgbGlua19zY2hlZHVsZV91c2VyKHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCB0aXBjX21zZyAqaGRyKVxuLS1cbm5ldC90aXBjL2xpbmsuYy04ODctXHQvKiBDcmVhdGUgYW5kIHNjaGVkdWxlIHdha2V1cCBwc2V1ZG8gbWVzc2FnZSAqL1xubmV0L3RpcGMvbGluay5jOjg4ODpcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShTT0NLX1dBS0VVUCwgMCwgSU5UX0hfU0laRSwgMCxcbm5ldC90aXBjL2xpbmsuYy04ODktXHRcdFx0ICAgICAgZG5vZGUsIGwtXHUwMDNlYWRkciwgZHBvcnQsIDAsIDApO1xuLS1cbm5ldC90aXBjL2xpbmsuYz0xODMyPXN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsXG4tLVxubmV0L3RpcGMvbGluay5jLTE4NTYtXG5uZXQvdGlwYy9saW5rLmM6MTg1NzpcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShMSU5LX1BST1RPQ09MLCBtdHlwLCBJTlRfSF9TSVpFLFxubmV0L3RpcGMvbGluay5jLTE4NTgtXHRcdFx0ICAgICAgdGlwY19tYXhfZG9tYWluX3NpemUgJiM0MzsgTUFYX0dBUF9BQ0tfQkxLU19TWixcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTkxNj12b2lkIHRpcGNfbGlua19jcmVhdGVfZHVtbXlfdG5sX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xOTI1LVx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnRubHEpO1xubmV0L3RpcGMvbGluay5jOjE5MjY6XHRza2IgPSB0aXBjX21zZ19jcmVhdGUoVFVOTkVMX1BST1RPQ09MLCBGQUlMT1ZFUl9NU0csXG5uZXQvdGlwYy9saW5rLmMtMTkyNy1cdFx0XHQgICAgICBJTlRfSF9TSVpFLCBCQVNJQ19IX1NJWkUsXG4tLVxubmV0L3RpcGMvbGluay5jPTE5NDk9dm9pZCB0aXBjX2xpbmtfdG5sX3ByZXBhcmUoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHRpcGNfbGluayAqdG5sLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xOTcwLVx0aWYgKG10eXAgPT0gU1lOQ0hfTVNHIFx1MDAyNlx1MDAyNiAodG5sLVx1MDAzZXBlZXJfY2FwcyBcdTAwMjYgVElQQ19UVU5ORUxfRU5IQU5DRUQpKSB7XG5uZXQvdGlwYy9saW5rLmM6MTk3MTpcdFx0dG5sc2tiID0gdGlwY19tc2dfY3JlYXRlKFRVTk5FTF9QUk9UT0NPTCwgU1lOQ0hfTVNHLFxubmV0L3RpcGMvbGluay5jLTE5NzItXHRcdFx0XHRcdCBJTlRfSF9TSVpFLCAwLCBsLVx1MDAzZWFkZHIsXG4tLVxubmV0L3RpcGMvbGluay5jLTE5OTItXHQvKiBBdCBsZWFzdCBvbmUgcGFja2V0IHJlcXVpcmVkIGZvciBzYWZlIGFsZ29yaXRobSA9XHUwMDNlIGFkZCBkdW1teSAqL1xubmV0L3RpcGMvbGluay5jOjE5OTM6XHRza2IgPSB0aXBjX21zZ19jcmVhdGUoVElQQ19MT1dfSU1QT1JUQU5DRSwgVElQQ19ESVJFQ1RfTVNHLFxubmV0L3RpcGMvbGluay5jLTE5OTQtXHRcdFx0ICAgICAgQkFTSUNfSF9TSVpFLCAwLCBsLVx1MDAzZWFkZHIsIHRpcGNfb3duX2FkZHIobC1cdTAwM2VuZXQpLFxuLS1cbm5ldC90aXBjL2xpbmsuYz0yMzMyPXN0YXRpYyBib29sIHRpcGNfbGlua19idWlsZF9iY19wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgYm9vbCBiY2FzdCxcbi0tXG5uZXQvdGlwYy9saW5rLmMtMjM0MS1cbm5ldC90aXBjL2xpbmsuYzoyMzQyOlx0c2tiID0gdGlwY19tc2dfY3JlYXRlKEJDQVNUX1BST1RPQ09MLCBTVEFURV9NU0csIElOVF9IX1NJWkUsXG5uZXQvdGlwYy9saW5rLmMtMjM0My1cdFx0XHQgICAgICAwLCBsLVx1MDAzZWFkZHIsIHRpcGNfb3duX2FkZHIobC1cdTAwM2VuZXQpLCAwLCAwLCAwKTtcbi0tXG5uZXQvdGlwYy9tc2cuYz04MT12b2lkIHRpcGNfbXNnX2luaXQodTMyIG93bl9ub2RlLCBzdHJ1Y3QgdGlwY19tc2cgKm0sIHUzMiB1c2VyLCB1MzIgdHlwZSxcbi0tXG5uZXQvdGlwYy9tc2cuYy05Ni1cbm5ldC90aXBjL21zZy5jOjk3OnN0cnVjdCBza19idWZmICp0aXBjX21zZ19jcmVhdGUodWludCB1c2VyLCB1aW50IHR5cGUsXG5uZXQvdGlwYy9tc2cuYy05OC1cdFx0XHRcdHVpbnQgaGRyX3N6LCB1aW50IGRhdGFfc3osIHUzMiBkbm9kZSxcbi0tXG5uZXQvdGlwYy9tc2cuaD0xMTYwPXZvaWQgdGlwY19tc2dfaW5pdCh1MzIgb3duX2FkZHIsIHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIHVzZXIsIHUzMiB0eXBlLFxubmV0L3RpcGMvbXNnLmgtMTE2MS1cdFx0ICAgdTMyIGhzaXplLCB1MzIgZGVzdG5vZGUpO1xubmV0L3RpcGMvbXNnLmg6MTE2MjpzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19tc2dfY3JlYXRlKHVpbnQgdXNlciwgdWludCB0eXBlLCB1aW50IGhkcl9zeixcbm5ldC90aXBjL21zZy5oLTExNjMtXHRcdFx0XHR1aW50IGRhdGFfc3osIHUzMiBkbm9kZSwgdTMyIG9ub2RlLFxuLS1cbm5ldC90aXBjL25vZGUuYz0xNTIzPXN0YXRpYyB2b2lkIG5vZGVfbG9zdF9jb250YWN0KHN0cnVjdCB0aXBjX25vZGUgKm4sXG4tLVxubmV0L3RpcGMvbm9kZS5jLTE1NTItXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29ubiwgc2FmZSwgY29ubnMsIGxpc3QpIHtcbm5ldC90aXBjL25vZGUuYzoxNTUzOlx0XHRza2IgPSB0aXBjX21zZ19jcmVhdGUoVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFLCBUSVBDX0NPTk5fTVNHLFxubmV0L3RpcGMvbm9kZS5jLTE1NTQtXHRcdFx0XHQgICAgICBTSE9SVF9IX1NJWkUsIDAsIHRpcGNfb3duX2FkZHIobi1cdTAwM2VuZXQpLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTU1MD1zdGF0aWMgdm9pZCBfX3RpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVycm9yKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTU5Mi1cdFx0fVxubmV0L3RpcGMvc29ja2V0LmM6NTkzOlx0XHRza2IgPSB0aXBjX21zZ19jcmVhdGUoVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFLFxubmV0L3RpcGMvc29ja2V0LmMtNTk0LVx0XHRcdFx0ICAgICAgVElQQ19DT05OX01TRywgU0hPUlRfSF9TSVpFLCAwLCBkbm9kZSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xNzk0PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19za19idWlsZF9hY2soc3RydWN0IHRpcGNfc29jayAqdHNrKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE4MDMtXHRcdHJldHVybiBOVUxMO1xubmV0L3RpcGMvc29ja2V0LmM6MTgwNDpcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShDT05OX01BTkFHRVIsIENPTk5fQUNLLCBJTlRfSF9TSVpFLCAwLFxubmV0L3RpcGMvc29ja2V0LmMtMTgwNS1cdFx0XHQgICAgICBkbm9kZSwgdHNrX293bl9ub2RlKHRzayksIHBlZXJfcG9ydCxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yODMwPXN0YXRpYyB2b2lkIHRpcGNfc2tfY2hlY2tfcHJvYmluZ19zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjg0Ny1cdC8qIFByZXBhcmUgbmV3IHByb2JlICovXG5uZXQvdGlwYy9zb2NrZXQuYzoyODQ4Olx0c2tiID0gdGlwY19tc2dfY3JlYXRlKENPTk5fTUFOQUdFUiwgQ09OTl9QUk9CRSwgSU5UX0hfU0laRSwgMCxcbm5ldC90aXBjL3NvY2tldC5jLTI4NDktXHRcdFx0ICAgICAgcG5vZGUsIHNlbGYsIHBwb3J0LCBvcG9ydCwgVElQQ19PSyk7XG4tLVxubmV0L3RpcGMvdG9wc3J2LmM9NjE0PXN0YXRpYyB2b2lkIHRpcGNfdG9wc3J2X2tlcm5fZXZ0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZXZlbnQgKmV2dClcbi0tXG5uZXQvdGlwYy90b3BzcnYuYy02MjAtXG5uZXQvdGlwYy90b3BzcnYuYzo2MjE6XHRza2IgPSB0aXBjX21zZ19jcmVhdGUoVE9QX1NSViwgMCwgSU5UX0hfU0laRSwgc2l6ZW9mKCpldnQpLFxubmV0L3RpcGMvdG9wc3J2LmMtNjIyLVx0XHRcdCAgICAgIHNlbGYsIHNlbGYsIHBvcnQsIHBvcnQsIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM0NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG5ldC90aXBjL21zZy5jYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIFRJUEMgbWVzc2FnaW5nIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYG5ldC90aXBjL21zZy5jYCBmaWxlLiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZyBpbnRlcmVzdGluZyBvciBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBhcm91bmQgbGluZSA5Ny4gSSYjMzk7bGwgcGlucG9pbnQgdGhpcyBhcmVhIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGVpdGhlciB2YWxpZGF0ZSBteSBoeXBvdGhlc2lzIG9yIHVuY292ZXIgYW4gaW50ZXJlc3RpbmcgZmVhdHVyZS4gRWl0aGVyIHdheSwgSSYjMzk7bSByZWFkeSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3RpcGMvbXNnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDk3Olx0c3RydWN0IHNrX2J1ZmYgKnRpcGNfbXNnX2NyZWF0ZSh1aW50IHVzZXIsIHVpbnQgdHlwZSxcbiAgOTg6XHRcdFx0XHRcdHVpbnQgaGRyX3N6LCB1aW50IGRhdGFfc3osIHUzMiBkbm9kZSxcbiAgOTk6XHRcdFx0XHRcdHUzMiBvbm9kZSwgdTMyIGRwb3J0LCB1MzIgb3BvcnQsIGludCBlcnJjb2RlKVxuIDEwMDpcdHtcbiAxMDE6XHRcdHN0cnVjdCB0aXBjX21zZyAqbXNnO1xuIDEwMjpcdFx0c3RydWN0IHNrX2J1ZmYgKmJ1ZjtcbiAxMDM6XHRcbiAxMDQ6XHRcdGJ1ZiA9IHRpcGNfYnVmX2FjcXVpcmUoaGRyX3N6ICYjNDM7IGRhdGFfc3osIEdGUF9BVE9NSUMpO1xuIDEwNTpcdFx0aWYgKHVubGlrZWx5KCFidWYpKVxuIDEwNjpcdFx0XHRyZXR1cm4gTlVMTDtcbiAxMDc6XHRcbiAxMDg6XHRcdG1zZyA9IGJ1Zl9tc2coYnVmKTtcbiAxMDk6XHRcdHRpcGNfbXNnX2luaXQob25vZGUsIG1zZywgdXNlciwgdHlwZSwgaGRyX3N6LCBkbm9kZSk7XG4gMTEwOlx0XHRtc2dfc2V0X3NpemUobXNnLCBoZHJfc3ogJiM0MzsgZGF0YV9zeik7XG4gMTExOlx0XHRtc2dfc2V0X29yaWdwb3J0KG1zZywgb3BvcnQpO1xuIDExMjpcdFx0bXNnX3NldF9kZXN0cG9ydChtc2csIGRwb3J0KTtcbiAxMTM6XHRcdG1zZ19zZXRfZXJyY29kZShtc2csIGVycmNvZGUpO1xuIDExNDpcdFx0cmV0dXJuIGJ1ZjtcbiAxMTU6XHR9XG4gMTE2Olx0XG4gMTE3Olx0LyogdGlwY19idWZfYXBwZW5kKCk6IEFwcGVuZCBhIGJ1ZmZlciB0byB0aGUgZnJhZ21lbnQgbGlzdCBvZiBhbm90aGVyIGJ1ZmZlclxuIDExODpcdCAqIEAqaGVhZGJ1ZjogaW46ICBOVUxMIGZvciBmaXJzdCBmcmFnLCBvdGhlcndpc2UgdmFsdWUgcmV0dXJuZWQgZnJvbSBwcmV2IGNhbGxcbiAxMTk6XHQgKiAgICAgICAgICAgIG91dDogc2V0IHdoZW4gc3VjY2Vzc2Z1bCBub24tY29tcGxldGUgcmVhc3NlbWJseSwgb3RoZXJ3aXNlIE5VTExcbiAxMjA6XHQgKiBAKmJ1ZjogICAgIGluOiAgdGhlIGJ1ZmZlciB0byBhcHBlbmQuIEFsd2F5cyBkZWZpbmVkXG4gMTIxOlx0ICogICAgICAgICAgICBvdXQ6IGhlYWQgYnVmIGFmdGVyIHN1Y2Nlc3NmdWwgY29tcGxldGUgcmVhc3NlbWJseSwgb3RoZXJ3aXNlIE5VTExcbiAxMjI6XHQgKiBSZXR1cm5zIDEgd2hlbiByZWFzc2VtYmx5IGNvbXBsZXRlLCBvdGhlcndpc2UgMFxuIDEyMzpcdCAqL1xuIDEyNDpcdGludCB0aXBjX2J1Zl9hcHBlbmQoc3RydWN0IHNrX2J1ZmYgKipoZWFkYnVmLCBzdHJ1Y3Qgc2tfYnVmZiAqKmJ1ZilcbiAxMjU6XHR7XG4gMTI2Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqaGVhZCA9ICpoZWFkYnVmO1xuIDEyNzpcdFx0c3RydWN0IHNrX2J1ZmYgKmZyYWcgPSAqYnVmO1xuIDEyODpcdFx0c3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBOVUxMO1xuIDEyOTpcdFx0c3RydWN0IHRpcGNfbXNnICptc2c7XG4gMTMwOlx0XHR1MzIgZnJhZ2lkO1xuIDEzMTpcdFx0aW50IGRlbHRhO1xuIDEzMjpcdFx0Ym9vbCBoZWFkc3RvbGVuO1xuIDEzMzpcdFxuIDEzNDpcdFx0aWYgKCFmcmFnKVxuIDEzNTpcdFx0XHRnb3RvIGVycjtcbiAxMzY6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxOTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHRpcGNfYnVmX2FjcXVpcmVgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byBgdGlwY19idWZfYWNxdWlyZWAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ2V0IGEgYnJvYWRlciB2aWV3LiBMZXQmIzM5O3Mgc2VlIGhvdyB3aWRlc3ByZWFkIGl0cyB1c2FnZSBpcy4gVGltZSB0byBmaXJlIHVwIHRoZSBncmVwcGluZyB0b29scyBhbmQgZmluZCBldmVyeSBpbnN0YW5jZSBvZiBgdGlwY19idWZfYWNxdWlyZWAgaW4gdGhlIGNvZGViYXNlLiBUaGF0JiMzOTtsbCBnaXZlIG1lIGEgZmVlbCBmb3IgaXRzIGNyaXRpY2FsaXR5LCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBhY3Jvc3MgZGlmZmVyZW50IG1vZHVsZXMsIGFuZCBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiBvciBvcHBvcnR1bml0eSBmb3Igb3B0aW1pemF0aW9uLiBFc3NlbnRpYWxseSwgSSB3YW50IHRvIGdldCBhIGNvbnRleHR1YWwgdW5kZXJzdGFuZGluZyBiZWZvcmUgSSBnZXQgdG9vIGRlZXAuIFRoZSBncmVwIHdpbGwgZ2l2ZSBtZSB0aGUgbWFwOyB0aGVuIEkgY2FuIHN0YXJ0IGNoYXJ0aW5nIGEgY291cnNlIGZvciBtb3JlIGZvY3VzZWQgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19idWZfYWNxdWlyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2JjYXN0LmM9MzE3PXN0YXRpYyBpbnQgdGlwY19tY2FzdF9zZW5kX3N5bmMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL2JjYXN0LmMtMzM3LVx0LyogQWxsb2NhdGUgZHVtbXkgbWVzc2FnZSAqL1xubmV0L3RpcGMvYmNhc3QuYzozMzg6XHRfc2tiID0gdGlwY19idWZfYWNxdWlyZShNQ0FTVF9IX1NJWkUsIEdGUF9LRVJORUwpO1xubmV0L3RpcGMvYmNhc3QuYy0zMzktXHRpZiAoIV9za2IpXG4tLVxubmV0L3RpcGMvY3J5cHRvLmM9MjIzOD1zdGF0aWMgaW50IHRpcGNfY3J5cHRvX2tleV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfYWVhZF9rZXkgKnNrZXksXG4tLVxubmV0L3RpcGMvY3J5cHRvLmMtMjI0OC1cdHNpemUgPSB0aXBjX2FlYWRfa2V5X3NpemUoc2tleSk7XG5uZXQvdGlwYy9jcnlwdG8uYzoyMjQ5Olx0c2tiID0gdGlwY19idWZfYWNxdWlyZShJTlRfSF9TSVpFICYjNDM7IHNpemUsIEdGUF9BVE9NSUMpO1xubmV0L3RpcGMvY3J5cHRvLmMtMjI1MC1cdGlmICghc2tiKVxuLS1cbm5ldC90aXBjL2Rpc2NvdmVyLmM9MTA0PXN0YXRpYyB2b2lkIHRpcGNfZGlzY19tc2dfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtdHlwLCB1MzIgZHN0LFxuLS1cbm5ldC90aXBjL2Rpc2NvdmVyLmMtMTExLVxubmV0L3RpcGMvZGlzY292ZXIuYzoxMTI6XHRza2IgPSB0aXBjX2J1Zl9hY3F1aXJlKE1BWF9IX1NJWkUgJiM0MzsgTk9ERV9JRF9MRU4sIEdGUF9BVE9NSUMpO1xubmV0L3RpcGMvZGlzY292ZXIuYy0xMTMtXHRpZiAoIXNrYilcbi0tXG5uZXQvdGlwYy9kaXNjb3Zlci5jPTM1Mj1pbnQgdGlwY19kaXNjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2JlYXJlciAqYixcbi0tXG5uZXQvdGlwYy9kaXNjb3Zlci5jLTM2MC1cdFx0cmV0dXJuIC1FTk9NRU07XG5uZXQvdGlwYy9kaXNjb3Zlci5jOjM2MTpcdGQtXHUwMDNlc2tiID0gdGlwY19idWZfYWNxdWlyZShNQVhfSF9TSVpFICYjNDM7IE5PREVfSURfTEVOLCBHRlBfQVRPTUlDKTtcbm5ldC90aXBjL2Rpc2NvdmVyLmMtMzYyLVx0aWYgKCFkLVx1MDAzZXNrYikge1xuLS1cbm5ldC90aXBjL2xpbmsuYz0xOTQ5PXZvaWQgdGlwY19saW5rX3RubF9wcmVwYXJlKHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCB0aXBjX2xpbmsgKnRubCxcbi0tXG5uZXQvdGlwYy9saW5rLmMtMjA1NC1cdFx0bXNnX3NldF9zaXplKFx1MDAyNnRubGhkciwgcGt0bGVuICYjNDM7IElOVF9IX1NJWkUpO1xubmV0L3RpcGMvbGluay5jOjIwNTU6XHRcdHRubHNrYiA9IHRpcGNfYnVmX2FjcXVpcmUocGt0bGVuICYjNDM7IElOVF9IX1NJWkUsIEdGUF9BVE9NSUMpO1xubmV0L3RpcGMvbGluay5jLTIwNTYtXHRcdGlmICghdG5sc2tiKSB7XG4tLVxubmV0L3RpcGMvbXNnLmM9NTQ9Y29uc3QgaW50IG9uZV9wYWdlX210dSA9IFBBR0VfU0laRSAtIFNLQl9EQVRBX0FMSUdOKEJVRl9PVkVSSEVBRCkgLVxuLS1cbm5ldC90aXBjL21zZy5jLTU3LS8qKlxubmV0L3RpcGMvbXNnLmM6NTg6ICogdGlwY19idWZfYWNxdWlyZSAtIGNyZWF0ZXMgYSBUSVBDIG1lc3NhZ2UgYnVmZmVyXG5uZXQvdGlwYy9tc2cuYy01OS0gKiBAc2l6ZTogbWVzc2FnZSBzaXplIChpbmNsdWRpbmcgVElQQyBoZWFkZXIpXG4tLVxubmV0L3RpcGMvbXNnLmMtNjctICovXG5uZXQvdGlwYy9tc2cuYzo2ODpzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19idWZfYWNxdWlyZSh1MzIgc2l6ZSwgZ2ZwX3QgZ2ZwKVxubmV0L3RpcGMvbXNnLmMtNjkte1xuLS1cbm5ldC90aXBjL21zZy5jPTk3PXN0cnVjdCBza19idWZmICp0aXBjX21zZ19jcmVhdGUodWludCB1c2VyLCB1aW50IHR5cGUsXG4tLVxubmV0L3RpcGMvbXNnLmMtMTAzLVxubmV0L3RpcGMvbXNnLmM6MTA0Olx0YnVmID0gdGlwY19idWZfYWNxdWlyZShoZHJfc3ogJiM0MzsgZGF0YV9zeiwgR0ZQX0FUT01JQyk7XG5uZXQvdGlwYy9tc2cuYy0xMDUtXHRpZiAodW5saWtlbHkoIWJ1ZikpXG4tLVxubmV0L3RpcGMvbXNnLmM9MjE3PWludCB0aXBjX21zZ19hcHBlbmQoc3RydWN0IHRpcGNfbXNnICpfaGRyLCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgZGxlbixcbi0tXG5uZXQvdGlwYy9tc2cuYy0yMzAtXHRcdGlmICghc2tiIHx8IHNrYi1cdTAwM2VsZW4gXHUwMDNlPSBtc3MpIHtcbm5ldC90aXBjL21zZy5jOjIzMTpcdFx0XHRza2IgPSB0aXBjX2J1Zl9hY3F1aXJlKG1zcywgR0ZQX0tFUk5FTCk7XG5uZXQvdGlwYy9tc2cuYy0yMzItXHRcdFx0aWYgKHVubGlrZWx5KCFza2IpKVxuLS1cbm5ldC90aXBjL21zZy5jPTMyMj1pbnQgdGlwY19tc2dfZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRpcGNfbXNnICpoZHIsXG4tLVxubmV0L3RpcGMvbXNnLmMtMzQ2LVx0XHQvKiBBbGxvY2F0ZSBhIG5ldyBmcmFnbWVudCAqL1xubmV0L3RpcGMvbXNnLmM6MzQ3Olx0XHRfc2tiID0gdGlwY19idWZfYWNxdWlyZShJTlRfSF9TSVpFICYjNDM7IGVhdCwgR0ZQX0FUT01JQyk7XG5uZXQvdGlwYy9tc2cuYy0zNDgtXHRcdGlmICghX3NrYilcbi0tXG5uZXQvdGlwYy9tc2cuYz0zODQ9aW50IHRpcGNfbXNnX2J1aWxkKHN0cnVjdCB0aXBjX21zZyAqbWhkciwgc3RydWN0IG1zZ2hkciAqbSwgaW50IG9mZnNldCxcbi0tXG5uZXQvdGlwYy9tc2cuYy00MDEtXHRpZiAobGlrZWx5KG1zeiBcdTAwM2M9IHBrdG1heCkpIHtcbm5ldC90aXBjL21zZy5jOjQwMjpcdFx0c2tiID0gdGlwY19idWZfYWNxdWlyZShtc3osIEdGUF9LRVJORUwpO1xubmV0L3RpcGMvbXNnLmMtNDAzLVxuLS1cbm5ldC90aXBjL21zZy5jLTQzMy1cdC8qIFByZXBhcmUgZmlyc3QgZnJhZ21lbnQgKi9cbm5ldC90aXBjL21zZy5jOjQzNDpcdHNrYiA9IHRpcGNfYnVmX2FjcXVpcmUocGt0bWF4LCBHRlBfS0VSTkVMKTtcbm5ldC90aXBjL21zZy5jLTQzNS1cdGlmICghc2tiKVxuLS1cbm5ldC90aXBjL21zZy5jLTQ2NC1cdFx0XHRwa3RzeiA9IHBrdG1heDtcbm5ldC90aXBjL21zZy5jOjQ2NTpcdFx0c2tiID0gdGlwY19idWZfYWNxdWlyZShwa3RzeiwgR0ZQX0tFUk5FTCk7XG5uZXQvdGlwYy9tc2cuYy00NjYtXHRcdGlmICghc2tiKSB7XG4tLVxubmV0L3RpcGMvbXNnLmM9NTkzPWJvb2wgdGlwY19tc2dfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKmlza2IsIGludCAqcG9zKVxuLS1cbm5ldC90aXBjL21zZy5jLTYxMS1cbm5ldC90aXBjL21zZy5jOjYxMjpcdCppc2tiID0gdGlwY19idWZfYWNxdWlyZShpbXN6LCBHRlBfQVRPTUlDKTtcbm5ldC90aXBjL21zZy5jLTYxMy1cdGlmICghKmlza2IpXG4tLVxubmV0L3RpcGMvbXNnLmM9NjM3PWJvb2wgdGlwY19tc2dfcmV2ZXJzZSh1MzIgb3duX25vZGUsICBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwgaW50IGVycilcbi0tXG5uZXQvdGlwYy9tc2cuYy02NjItXHQvKiBBbGxvY2F0ZSBuZXcgYnVmZmVyIHRvIHJldHVybiAqL1xubmV0L3RpcGMvbXNnLmM6NjYzOlx0KnNrYiA9IHRpcGNfYnVmX2FjcXVpcmUoaGxlbiAmIzQzOyBkbGVuLCBHRlBfQVRPTUlDKTtcbm5ldC90aXBjL21zZy5jLTY2NC1cdGlmICghKnNrYilcbi0tXG5uZXQvdGlwYy9tc2cuaD0xMTUwPXN0YXRpYyBpbmxpbmUgdTggKm1zZ19ub2RlX2lkKHN0cnVjdCB0aXBjX21zZyAqaGRyKVxuLS1cbm5ldC90aXBjL21zZy5oLTExNTQtXG5uZXQvdGlwYy9tc2cuaDoxMTU1OnN0cnVjdCBza19idWZmICp0aXBjX2J1Zl9hY3F1aXJlKHUzMiBzaXplLCBnZnBfdCBnZnApO1xubmV0L3RpcGMvbXNnLmgtMTE1Ni1ib29sIHRpcGNfbXNnX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICoqX3NrYik7XG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jPTY3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmFtZWRfcHJlcGFyZV9idWYoc3RydWN0IG5ldCAqbmV0LCB1MzIgdHlwZSwgdTMyIHNpemUsXG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTY5LXtcbm5ldC90aXBjL25hbWVfZGlzdHIuYzo3MDpcdHN0cnVjdCBza19idWZmICpidWYgPSB0aXBjX2J1Zl9hY3F1aXJlKElOVF9IX1NJWkUgJiM0Mzsgc2l6ZSwgR0ZQX0FUT01JQyk7XG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtNzEtXHR1MzIgc2VsZiA9IHRpcGNfb3duX2FkZHIobmV0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNzAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFRJUEMgQnVmZmVyIEFjcXVpc2l0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVElQQyBoYW5kbGVzIGJ1ZmZlciBhY3F1aXNpdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBgdGlwY19idWZfYWNxdWlyZWAgZnVuY3Rpb24uIEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbHJlYWR5IGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBvdmVyYWxsIFRJUEMgYXJjaGl0ZWN0dXJlLCBidXQgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIHRoZSBgbmV0L3RpcGMvbXNnLmNgIGZpbGUg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24sIGFuZCBob3BlZnVsbHksIHNvbWUgZW5saWdodGVuaW5nIGNvbW1lbnRzIHRvIGd1aWRlIG1lLiBMZXQmIzM5O3Mgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIGNvZGUgaG9sZHMuIEkgYW0gZXhwZWN0aW5nIHRvIGZpbmQgdGhhdCB0aGUgZnVuY3Rpb24gaGFuZGxlcyByZXNvdXJjZSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL21zZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1ODpcdCAqIHRpcGNfYnVmX2FjcXVpcmUgLSBjcmVhdGVzIGEgVElQQyBtZXNzYWdlIGJ1ZmZlclxuICA1OTpcdCAqIEBzaXplOiBtZXNzYWdlIHNpemUgKGluY2x1ZGluZyBUSVBDIGhlYWRlcilcbiAgNjA6XHQgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnc1xuICA2MTpcdCAqXG4gIDYyOlx0ICogUmV0dXJuOiBhIG5ldyBidWZmZXIgd2l0aCBkYXRhIHBvaW50ZXJzIHNldCB0byB0aGUgc3BlY2lmaWVkIHNpemUuXG4gIDYzOlx0ICpcbiAgNjQ6XHQgKiBOT1RFOlxuICA2NTpcdCAqIEhlYWRyb29tIGlzIHJlc2VydmVkIHRvIGFsbG93IHByZXBlbmRpbmcgb2YgYSBkYXRhIGxpbmsgaGVhZGVyLlxuICA2NjpcdCAqIFRoZXJlIG1heSBhbHNvIGJlIHVucmVxdWVzdGVkIHRhaWxyb29tIHByZXNlbnQgYXQgdGhlIGJ1ZmZlciYjMzk7cyBlbmQuXG4gIDY3Olx0ICovXG4gIDY4Olx0c3RydWN0IHNrX2J1ZmYgKnRpcGNfYnVmX2FjcXVpcmUodTMyIHNpemUsIGdmcF90IGdmcClcbiAgNjk6XHR7XG4gIDcwOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuICA3MTpcdFxuICA3MjpcdFx0c2tiID0gYWxsb2Nfc2tiX2ZjbG9uZShCVUZfT1ZFUkhFQUQgJiM0Mzsgc2l6ZSwgZ2ZwKTtcbiAgNzM6XHRcdGlmIChza2IpIHtcbiAgNzQ6XHRcdFx0c2tiX3Jlc2VydmUoc2tiLCBCVUZfSEVBRFJPT00pO1xuICA3NTpcdFx0XHRza2JfcHV0KHNrYiwgc2l6ZSk7XG4gIDc2Olx0XHRcdHNrYi1cdTAwM2VuZXh0ID0gTlVMTDtcbiAgNzc6XHRcdH1cbiAgNzg6XHRcdHJldHVybiBza2I7XG4gIDc5Olx0fVxuICA4MDpcdFxuICA4MTpcdHZvaWQgdGlwY19tc2dfaW5pdCh1MzIgb3duX25vZGUsIHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIHVzZXIsIHUzMiB0eXBlLFxuICA4MjpcdFx0XHQgICB1MzIgaHNpemUsIHUzMiBkbm9kZSlcbiAgODM6XHR7XG4gIDg0Olx0XHRtZW1zZXQobSwgMCwgaHNpemUpO1xuICA4NTpcdFx0bXNnX3NldF92ZXJzaW9uKG0pO1xuICA4NjpcdFx0bXNnX3NldF91c2VyKG0sIHVzZXIpO1xuICA4NzpcdFx0bXNnX3NldF9oZHJfc3oobSwgaHNpemUpO1xuICA4ODpcdFx0bXNnX3NldF9zaXplKG0sIGhzaXplKTtcbiAgODk6XHRcdG1zZ19zZXRfcHJldm5vZGUobSwgb3duX25vZGUpO1xuICA5MDpcdFx0bXNnX3NldF90eXBlKG0sIHR5cGUpO1xuICA5MTpcdFx0aWYgKGhzaXplIFx1MDAzZSBTSE9SVF9IX1NJWkUpIHtcbiAgOTI6XHRcdFx0bXNnX3NldF9vcmlnbm9kZShtLCBvd25fbm9kZSk7XG4gIDkzOlx0XHRcdG1zZ19zZXRfZGVzdG5vZGUobSwgZG5vZGUpO1xuICA5NDpcdFx0fVxuICA5NTpcdH1cbiAgOTY6XHRcbiAgOTc6XHRzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19tc2dfY3JlYXRlKHVpbnQgdXNlciwgdWludCB0eXBlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjE5NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHRpcGNfYnVmX2FjcXVpcmVgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgdGlwY19idWZfYWNxdWlyZWAgYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyBqdW1wcyBvdXQgYXQgbWUuIFdlJiMzOTtyZSB1c2luZyBgYWxsb2Nfc2tiX2ZjbG9uZWAgKG9yIHBvdGVudGlhbGx5IGp1c3QgYGFsbG9jX3NrYmApIHRvIGdyYWIgb3VyIGBza2JgIGRhdGEgYnVmZmVyLCBhbmQgY3JpdGljYWxseSwgdGhpcyBkb2VzbiYjMzk7dCB6ZXJvIHRoZSBwYXlsb2FkLiBUaGVuLCB3ZSBpbml0aWFsaXplIHRoZSBtZXNzYWdlIGhlYWRlciB3aXRoIGB0aXBjX21zZ19pbml0YCwgd2hpY2ggb25seSBkb2VzIGEgYG1lbXNldGAgb24gdGhlICpoZWFkZXIqIChgaHNpemVgKS4gVGhlICpwYXlsb2FkKiBpdHNlbGYsIHN0YXJ0aW5nIGF0IGBkYXRhID0gbXNnX2RhdGEoaGRyKWAsIHJlbWFpbnMgdW5pbml0aWFsaXplZCwgd2hpY2ggaXMgYSBwcm9ibGVtLgoKSSByZW1lbWJlciBwcmV2aW91c2x5LCB0aGUgY29kZSBvbmx5IHVzZWQgYHN0cmNweShkYXRhLCBsLSZndDtpZl9uYW1lKTtgIHRvIHBvcHVsYXRlIHRoZSBwYXlsb2FkLiBUaGlzIHdvdWxkICpvbmx5KiBjb3B5IHRoZSBsZW5ndGggb2YgYGwtJmd0O2lmX25hbWVgIHBsdXMgYSBudWxsIHRlcm1pbmF0b3IgdG8gdGhlIGBza2JgLiBUaGVuLCB0aGUgY29kZSBleHBhbmRzIHRoZSBgc2tiYCB3aXRoIGBtc2dfc2V0X3NpemVgIGFuZCBgc2tiX3RyaW1gLiBTbyBhbnkgYnl0ZXMgYmV0d2VlbiB0aGUgZW5kIG9mIGBsLSZndDtpZl9uYW1lYCBhbmQgdGhlIGFsbG9jYXRlZCBwYXlsb2FkIHNpemUgcmVtYWluZWQgdW5pbml0aWFsaXplZCEgVGhhdCYjMzk7cyBhIGRlZmluaXRlIHZ1bG5lcmFiaWxpdHkuCgpOb3csIHdpdGggdGhlIHBhdGNoLCB0aGluZ3MgYXJlIGNoYW5naW5nLiBgbGAgaXMgbm93IHplcm9lZCB1c2luZyBga3phbGxvY19vYmpgIGR1cmluZyB0aGUgYHRpcGNfbGlua19jcmVhdGVgIGZ1bmN0aW9uLCBzbyBgbC0mZ3Q7aWZfbmFtZWAgaXMgY29tcGxldGVseSB6ZXJvZWQgb3V0ICh1cCB0byB0aGUgc2l6ZSBvZiBgVElQQ19NQVhfSUZfTkFNRWApLiBUaGUgc3Vic2VxdWVudCBgbWVtY3B5KGRhdGEsIGwtJmd0O2lmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpO2AgdGhlbiBjb3BpZXMgdGhlIGVudGlyZSBjb250ZW50cyBvZiBgbC0mZ3Q7aWZfbmFtZWAgKGFsbCAxNiwgb3Igd2hhdGV2ZXIgYFRJUENfTUFYX0lGX05BTUVgIGlzLCBieXRlcykgaW50byB0aGUgYGRhdGFgIGJ1ZmZlci4gVGhpcyBsb29rcyBtdWNoIHNhZmVyLgoKV2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgdGhlIHNpemUgb2YgYFRJUENfTUFYX0lGX05BTUVgLiBJJiMzOTtsbCBkbyBhIHF1aWNrIGdyZXAgZm9yIGBUSVBDX01BWF9JRl9OQU1FYCB0byBjb25maXJtIHRoZSBhY3R1YWwgc2l6ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VElQQ19NQVhfSUZfTkFNRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2JlYXJlci5jPTEzNz1zdGF0aWMgaW50IGJlYXJlcl9uYW1lX3ZhbGlkYXRlKGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubmV0L3RpcGMvYmVhcmVyLmMtMTYwLVx0aWYgKChtZWRpYV9sZW4gXHUwMDNjPSAxKSB8fCAobWVkaWFfbGVuIFx1MDAzZSBUSVBDX01BWF9NRURJQV9OQU1FKSB8fFxubmV0L3RpcGMvYmVhcmVyLmM6MTYxOlx0ICAgIChpZl9sZW4gXHUwMDNjPSAxKSB8fCAoaWZfbGVuIFx1MDAzZSBUSVBDX01BWF9JRl9OQU1FKSlcbm5ldC90aXBjL2JlYXJlci5jLTE2Mi1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L3RpcGMvYmVhcmVyLmMtMTY5LVx0XHRpZiAoc3Ryc2NweShuYW1lX3BhcnRzLVx1MDAzZWlmX25hbWUsIGlmX25hbWUsXG5uZXQvdGlwYy9iZWFyZXIuYzoxNzA6XHRcdFx0ICAgIFRJUENfTUFYX0lGX05BTUUpIFx1MDAzYyAwKVxubmV0L3RpcGMvYmVhcmVyLmMtMTcxLVx0XHRcdHJldHVybiAwO1xuLS1cbm5ldC90aXBjL2JlYXJlci5oPTE3OT1zdHJ1Y3QgdGlwY19iZWFyZXJfbmFtZXMge1xubmV0L3RpcGMvYmVhcmVyLmgtMTgwLVx0Y2hhciBtZWRpYV9uYW1lW1RJUENfTUFYX01FRElBX05BTUVdO1xubmV0L3RpcGMvYmVhcmVyLmg6MTgxOlx0Y2hhciBpZl9uYW1lW1RJUENfTUFYX0lGX05BTUVdO1xubmV0L3RpcGMvYmVhcmVyLmgtMTgyLX07XG4tLVxubmV0L3RpcGMvbGluay5jPTEzNz1zdHJ1Y3QgdGlwY19saW5rIHtcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTU1LVx0dTMyIHNpbGVudF9pbnR2X2NudDtcbm5ldC90aXBjL2xpbmsuYzoxNTY6XHRjaGFyIGlmX25hbWVbVElQQ19NQVhfSUZfTkFNRV07XG5uZXQvdGlwYy9saW5rLmMtMTU3LVx0dTMyIHByaW9yaXR5O1xuLS1cbm5ldC90aXBjL2xpbmsuYz0xODMyPXN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsXG4tLVxubmV0L3RpcGMvbGluay5jLTE5MDAtXHRcdG1zZ19zZXRfbWF4X3BrdChoZHIsIGwtXHUwMDNlYWR2ZXJ0aXNlZF9tdHUpO1xubmV0L3RpcGMvbGluay5jOjE5MDE6XHRcdG1lbWNweShkYXRhLCBsLVx1MDAzZWlmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpO1xubmV0L3RpcGMvbGluay5jOjE5MDI6XHRcdG1zZ19zZXRfc2l6ZShoZHIsIElOVF9IX1NJWkUgJiM0MzsgVElQQ19NQVhfSUZfTkFNRSk7XG5uZXQvdGlwYy9saW5rLmM6MTkwMzpcdFx0c2tiX3RyaW0oc2tiLCBJTlRfSF9TSVpFICYjNDM7IFRJUENfTUFYX0lGX05BTUUpO1xubmV0L3RpcGMvbGluay5jLTE5MDQtXHR9XG4tLVxubmV0L3RpcGMvbGluay5jPTIxNzQ9c3RhdGljIGludCB0aXBjX2xpbmtfcHJvdG9fcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvbGluay5jLTIyMjMtXHRcdGlmX25hbWUgPSAgc3RycmNocihsLVx1MDAzZW5hbWUsICYjMzk7OiYjMzk7KSAmIzQzOyAxO1xubmV0L3RpcGMvbGluay5jOjIyMjQ6XHRcdGlmIChzaXplb2YobC1cdTAwM2VuYW1lKSAtIChpZl9uYW1lIC0gbC1cdTAwM2VuYW1lKSBcdTAwM2M9IFRJUENfTUFYX0lGX05BTUUpXG5uZXQvdGlwYy9saW5rLmMtMjIyNS1cdFx0XHRicmVhaztcbm5ldC90aXBjL2xpbmsuYzoyMjI2Olx0XHRpZiAobXNnX2RhdGFfc3ooaGRyKSBcdTAwM2MgVElQQ19NQVhfSUZfTkFNRSlcbm5ldC90aXBjL2xpbmsuYy0yMjI3LVx0XHRcdGJyZWFrO1xubmV0L3RpcGMvbGluay5jOjIyMjg6XHRcdHN0cnNjcHkoaWZfbmFtZSwgZGF0YSwgVElQQ19NQVhfSUZfTkFNRSk7XG5uZXQvdGlwYy9saW5rLmMtMjIyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5MTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYHN0cnNjcHlgIGluIGB0aXBjX2xpbmtfY3JlYXRlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHN0cnNjcHkobC0mZ3Q7aWZfbmFtZSwgaWZfbmFtZSlgIHdpdGhpbiBgdGlwY19saW5rX2NyZWF0ZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgc3RhbmRhcmQgc3RyaW5nIGNvcHksIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuJiMzNDsgQnV0IHdhaXQsIGxldCYjMzk7cyByZWZyZXNoOiB3aGF0IGRvZXMgYHN0cnNjcHlgICphY3R1YWxseSogZG8/IEFoLCBpdCBjb3BpZXMgYSBDLXN0cmluZyBpbnRvIGEgYnVmZmVyLCBidXQgY3JpdGljYWxseSwgaXQgZW5mb3JjZXMgYSBzaXplIGxpbWl0LiBUcnVuY2F0aW9uIGhhcHBlbnMgaWYgdGhlIHNvdXJjZSBpcyB0b28gYmlnLCBhbmQgaXQgKmFsd2F5cyogTlVMTC10ZXJtaW5hdGVzIHRoZSBkZXN0aW5hdGlvbi4gVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBjb3BpZWQgb3IgYC1FMkJJR2AgaWYgdGhlIGJ1ZmZlciB3YXNuJiMzOTt0IGxhcmdlIGVub3VnaC4KCk5vdywgYSBrZXkgcXVlc3Rpb24gcG9wcyBpbnRvIG15IG1pbmQ6IERvZXMgYHN0cnNjcHlgIHplcm8tcGFkIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgYWZ0ZXIgdGhlIGNvcGllZCBzdHJpbmcgYW5kIHRoZSBOVUxMIHRlcm1pbmF0b3I/IE5vLCBJIHJlYWxpemUgdGhhdCBpdCBkb2VzbiYjMzk7dC4gYHN0cnNjcHlgIHNpbXBseSB3cml0ZXMgdXAgdG8gdGhhdCBOVUxMIGNoYXJhY3Rlci4gYHN0cnNjcHlfcGFkYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSB6ZXJvIHBhZGRpbmcuCgpPa2F5LCB0aGF0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlci4gQnV0IHRoZW4gSSByZWNhbGwgdGhlIGFsbG9jYXRpb246IHdhc24mIzM5O3QgYGxgIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigqbCwgR0ZQX0FUT01JQyk7YD8gVGhhdCBtZWFucyBgbGAgd2FzICp6ZXJvZWQqIGF0IGFsbG9jYXRpb24hIFRoaXMgaW5pdGlhbCB6ZXJvaW5nIGlzIHNpZ25pZmljYW50LgoKSG93ZXZlciwgYSBuYWdnaW5nIGZlZWxpbmcgcmVtYWlucy4gV2hhdCBpZiBgbC0mZ3Q7aWZfbmFtZWAgaXMgKm1vZGlmaWVkKiBsYXRlciBpbiB0aGUgY29kZT8gT3IsIGV2ZW4gd29yc2UsIHdoYXQgaWYgYGxgIGlzIHJldXNlZCBhZnRlciB0aGlzIG9wZXJhdGlvbj8gSSBuZWVkIHRvIG1ldGljdWxvdXNseSBjaGVjayBldmVyeSBzaW5nbGUgaW5zdGFuY2Ugd2hlcmUgYGwtJmd0O2lmX25hbWVgIGlzIGFjY2Vzc2VkIG9yIG1vZGlmaWVkLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBsaWZldGltZSBvZiB0aGlzIGRhdGEgc3RydWN0dXJlIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0IGFuZCB0aGF0IHRoaXMgaXNuJiMzOTt0IGEgcG90ZW50aWFsIHNlY3VyaXR5IGlzc3VlLiBUaW1lIGZvciBhIGNvZGUgZGl2ZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWZfbmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL2xpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9saW5rLmM9NTE9c3RydWN0IHRpcGNfc3RhdHMge1xuLS1cbm5ldC90aXBjL2xpbmsuYy0xMTItICogQGFjdGl2ZTogbGluayBpcyBhY3RpdmVcbm5ldC90aXBjL2xpbmsuYzoxMTM6ICogQGlmX25hbWU6IGFzc29jaWF0ZWQgaW50ZXJmYWNlIG5hbWVcbm5ldC90aXBjL2xpbmsuYy0xMTQtICogQHJzdF9jbnQ6IGxpbmsgcmVzZXQgY291bnRlclxuLS1cbm5ldC90aXBjL2xpbmsuYz0xMzc9c3RydWN0IHRpcGNfbGluayB7XG4tLVxubmV0L3RpcGMvbGluay5jLTE1NS1cdHUzMiBzaWxlbnRfaW50dl9jbnQ7XG5uZXQvdGlwYy9saW5rLmM6MTU2Olx0Y2hhciBpZl9uYW1lW1RJUENfTUFYX0lGX05BTUVdO1xubmV0L3RpcGMvbGluay5jLTE1Ny1cdHUzMiBwcmlvcml0eTtcbi0tXG5uZXQvdGlwYy9saW5rLmM9NDQ3PXUzMiB0aXBjX2xpbmtfc3RhdGUoc3RydWN0IHRpcGNfbGluayAqbClcbi0tXG5uZXQvdGlwYy9saW5rLmMtNDU0LSAqIEBuZXQ6IHBvaW50ZXIgdG8gYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxubmV0L3RpcGMvbGluay5jOjQ1NTogKiBAaWZfbmFtZTogYXNzb2NpYXRlZCBpbnRlcmZhY2UgbmFtZVxubmV0L3RpcGMvbGluay5jLTQ1Ni0gKiBAYmVhcmVyX2lkOiBpZCAoaW5kZXgpIG9mIGFzc29jaWF0ZWQgYmVhcmVyXG4tLVxubmV0L3RpcGMvbGluay5jLTQ3NS0gKi9cbm5ldC90aXBjL2xpbmsuYzo0NzY6Ym9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCxcbm5ldC90aXBjL2xpbmsuYy00NzctXHRcdCAgICAgIGludCB0b2xlcmFuY2UsIGNoYXIgbmV0X3BsYW5lLCB1MzIgbXR1LCBpbnQgcHJpb3JpdHksXG4tLVxubmV0L3RpcGMvbGluay5jLTUwNC1cdHNucHJpbnRmKGwtXHUwMDNlbmFtZSwgc2l6ZW9mKGwtXHUwMDNlbmFtZSksIFwmIzM0OyVzOiVzLSVzOnVua25vd25cJiMzNDssXG5uZXQvdGlwYy9saW5rLmM6NTA1Olx0XHQgc2VsZl9zdHIsIGlmX25hbWUsIHBlZXJfc3RyKTtcbm5ldC90aXBjL2xpbmsuYy01MDYtXG5uZXQvdGlwYy9saW5rLmM6NTA3Olx0c3Ryc2NweShsLVx1MDAzZWlmX25hbWUsIGlmX25hbWUpO1xubmV0L3RpcGMvbGluay5jLTUwOC1cdGwtXHUwMDNlYWRkciA9IHBlZXI7XG4tLVxubmV0L3RpcGMvbGluay5jPTE4MzI9c3RhdGljIHZvaWQgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBpbnQgbXR5cCwgYm9vbCBwcm9iZSxcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTkwMC1cdFx0bXNnX3NldF9tYXhfcGt0KGhkciwgbC1cdTAwM2VhZHZlcnRpc2VkX210dSk7XG5uZXQvdGlwYy9saW5rLmM6MTkwMTpcdFx0bWVtY3B5KGRhdGEsIGwtXHUwMDNlaWZfbmFtZSwgVElQQ19NQVhfSUZfTkFNRSk7XG5uZXQvdGlwYy9saW5rLmMtMTkwMi1cdFx0bXNnX3NldF9zaXplKGhkciwgSU5UX0hfU0laRSAmIzQzOyBUSVBDX01BWF9JRl9OQU1FKTtcbi0tXG5uZXQvdGlwYy9saW5rLmM9MjE3ND1zdGF0aWMgaW50IHRpcGNfbGlua19wcm90b19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9saW5rLmMtMjE4OS1cdGludCByYyA9IDAsIHJlbGVhc2VkO1xubmV0L3RpcGMvbGluay5jOjIxOTA6XHRjaGFyICppZl9uYW1lO1xubmV0L3RpcGMvbGluay5jLTIxOTEtXHR2b2lkICpkYXRhO1xuLS1cbm5ldC90aXBjL2xpbmsuYy0yMjIyLVx0XHQvKiBDb21wbGV0ZSBvd24gbGluayBuYW1lIHdpdGggcGVlciYjMzk7cyBpbnRlcmZhY2UgbmFtZSAqL1xubmV0L3RpcGMvbGluay5jOjIyMjM6XHRcdGlmX25hbWUgPSAgc3RycmNocihsLVx1MDAzZW5hbWUsICYjMzk7OiYjMzk7KSAmIzQzOyAxO1xubmV0L3RpcGMvbGluay5jOjIyMjQ6XHRcdGlmIChzaXplb2YobC1cdTAwM2VuYW1lKSAtIChpZl9uYW1lIC0gbC1cdTAwM2VuYW1lKSBcdTAwM2M9IFRJUENfTUFYX0lGX05BTUUpXG5uZXQvdGlwYy9saW5rLmMtMjIyNS1cdFx0XHRicmVhaztcbi0tXG5uZXQvdGlwYy9saW5rLmMtMjIyNy1cdFx0XHRicmVhaztcbm5ldC90aXBjL2xpbmsuYzoyMjI4Olx0XHRzdHJzY3B5KGlmX25hbWUsIGRhdGEsIFRJUENfTUFYX0lGX05BTUUpO1xubmV0L3RpcGMvbGluay5jLTIyMjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTk2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6ICoqRXhwbG9yaW5nIFBvdGVudGlhbCBTaWRlIEVmZmVjdHMgYW5kIERlcGVuZGVuY2llcyoqCgpJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBsLSZndDtpZl9uYW1lYCBhbmQgYGwtJmd0O25hbWVgIGFyZSB1c2VkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGViYXNlLCBwYXJ0aWN1bGFybHkgd2hlcmUgdGhleSYjMzk7cmUgaW50ZXJhY3Rpbmcgd2l0aCBlYWNoIG90aGVyLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb3IgZGVwZW5kZW5jaWVzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBob3cgdGhlc2UgdmFyaWFibGVzIGFyZSB1dGlsaXplZCwgYmVmb3JlIEkgcHJvY2VlZC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG15IG5leHQgYWN0aW9uIGRvZXMgbm90IGNyZWF0ZSBhbnkgdW5leHBlY3RlZCBjb25zZXF1ZW5jZXMuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYGwtJmd0O25hbWVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsLVx1MDAzZW5hbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy9saW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvbGluay5jPTQ0Mj1jaGFyICp0aXBjX2xpbmtfbmFtZShzdHJ1Y3QgdGlwY19saW5rICpsKVxubmV0L3RpcGMvbGluay5jLTQ0My17XG5uZXQvdGlwYy9saW5rLmM6NDQ0Olx0cmV0dXJuIGwtXHUwMDNlbmFtZTtcbm5ldC90aXBjL2xpbmsuYy00NDUtfVxuLS1cbm5ldC90aXBjL2xpbmsuYz00NzY9Ym9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCxcbi0tXG5uZXQvdGlwYy9saW5rLmMtNTAzLVx0LyogUGVlciBpL2YgbmFtZSB3aWxsIGJlIGNvbXBsZXRlZCBieSByZXNldC9hY3RpdmF0ZSBtZXNzYWdlICovXG5uZXQvdGlwYy9saW5rLmM6NTA0Olx0c25wcmludGYobC1cdTAwM2VuYW1lLCBzaXplb2YobC1cdTAwM2VuYW1lKSwgXCYjMzQ7JXM6JXMtJXM6dW5rbm93blwmIzM0Oyxcbm5ldC90aXBjL2xpbmsuYy01MDUtXHRcdCBzZWxmX3N0ciwgaWZfbmFtZSwgcGVlcl9zdHIpO1xuLS1cbm5ldC90aXBjL2xpbmsuYy01MjQtXHRsLVx1MDAzZWlucHV0cSA9IGlucHV0cTtcbm5ldC90aXBjL2xpbmsuYzo1MjU6XHRsLVx1MDAzZW5hbWVkcSA9IG5hbWVkcTtcbm5ldC90aXBjL2xpbmsuYy01MjYtXHRsLVx1MDAzZXN0YXRlID0gTElOS19SRVNFVFRJTkc7XG4tLVxubmV0L3RpcGMvbGluay5jPTU1Mz1ib29sIHRpcGNfbGlua19iY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgb3dubm9kZSwgdTMyIHBlZXIsIHU4ICpwZWVyX2lkLFxuLS1cbm5ldC90aXBjL2xpbmsuYy01NzMtXHRcdC8qIEJyb2FkY2FzdCByZWNlaXZlciBsaW5rIG5hbWU6IFwmIzM0O2Jyb2FkY2FzdC1saW5rOlx1MDAzY3BlZXJcdTAwM2VcJiMzNDsgKi9cbm5ldC90aXBjL2xpbmsuYzo1NzQ6XHRcdHNucHJpbnRmKGwtXHUwMDNlbmFtZSwgc2l6ZW9mKGwtXHUwMDNlbmFtZSksIFwmIzM0OyVzOiVzXCYjMzQ7LCB0aXBjX2JjbGlua19uYW1lLFxubmV0L3RpcGMvbGluay5jLTU3NS1cdFx0XHQgcGVlcl9zdHIpO1xubmV0L3RpcGMvbGluay5jLTU3Ni1cdH0gZWxzZSB7XG5uZXQvdGlwYy9saW5rLmM6NTc3Olx0XHRzdHJzY3B5KGwtXHUwMDNlbmFtZSwgdGlwY19iY2xpbmtfbmFtZSk7XG5uZXQvdGlwYy9saW5rLmMtNTc4LVx0fVxuLS1cbm5ldC90aXBjL2xpbmsuYz02MDE9aW50IHRpcGNfbGlua19mc21fZXZ0KHN0cnVjdCB0aXBjX2xpbmsgKmwsIGludCBldnQpXG4tLVxubmV0L3RpcGMvbGluay5jLTc0OS1cdGRlZmF1bHQ6XG5uZXQvdGlwYy9saW5rLmM6NzUwOlx0XHRwcl9lcnIoXCYjMzQ7VW5rbm93biBGU00gc3RhdGUgJXggaW4gJXNcXG5cJiMzNDssIGwtXHUwMDNlc3RhdGUsIGwtXHUwMDNlbmFtZSk7XG5uZXQvdGlwYy9saW5rLmMtNzUxLVx0fVxubmV0L3RpcGMvbGluay5jOjc1MjpcdHRyYWNlX3RpcGNfbGlua19mc20obC1cdTAwM2VuYW1lLCBvbGRfc3RhdGUsIGwtXHUwMDNlc3RhdGUsIGV2dCk7XG5uZXQvdGlwYy9saW5rLmMtNzUzLVx0cmV0dXJuIHJjO1xuLS1cbm5ldC90aXBjL2xpbmsuYy03NTUtXHRwcl9lcnIoXCYjMzQ7SWxsZWdhbCBGU00gZXZlbnQgJXggaW4gc3RhdGUgJXggb24gbGluayAlc1xcblwmIzM0Oyxcbm5ldC90aXBjL2xpbmsuYzo3NTY6XHQgICAgICAgZXZ0LCBsLVx1MDAzZXN0YXRlLCBsLVx1MDAzZW5hbWUpO1xubmV0L3RpcGMvbGluay5jOjc1NzpcdHRyYWNlX3RpcGNfbGlua19mc20obC1cdTAwM2VuYW1lLCBvbGRfc3RhdGUsIGwtXHUwMDNlc3RhdGUsIGV2dCk7XG5uZXQvdGlwYy9saW5rLmMtNzU4LVx0cmV0dXJuIHJjO1xuLS1cbm5ldC90aXBjL2xpbmsuYz0xMDExPWludCB0aXBjX2xpbmtfeG1pdChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xMDQ0LVx0XHRpZiAoaW1wID09IFRJUENfU1lTVEVNX0lNUE9SVEFOQ0UpIHtcbm5ldC90aXBjL2xpbmsuYzoxMDQ1Olx0XHRcdHByX3dhcm4oXCYjMzQ7JXNcdTAwM2Mlc1x1MDAzZSwgbGluayBvdmVyZmxvd1wmIzM0OywgbGlua19yc3RfbXNnLCBsLVx1MDAzZW5hbWUpO1xubmV0L3RpcGMvbGluay5jLTEwNDYtXHRcdFx0X19za2JfcXVldWVfcHVyZ2UobGlzdCk7XG4tLVxubmV0L3RpcGMvbGluay5jPTExOTU9c3RhdGljIGJvb2wgbGlua19yZXRyYW5zbWl0X2ZhaWx1cmUoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHRpcGNfbGluayAqcixcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTIxNC1cbm5ldC90aXBjL2xpbmsuYzoxMjE1Olx0cHJfd2FybihcJiMzNDtSZXRyYW5zbWlzc2lvbiBmYWlsdXJlIG9uIGxpbmsgXHUwMDNjJXNcdTAwM2VcXG5cJiMzNDssIGwtXHUwMDNlbmFtZSk7XG5uZXQvdGlwYy9saW5rLmMtMTIxNi1cdGxpbmtfcHJpbnQobCwgXCYjMzQ7U3RhdGUgb2YgbGluayBcJiMzNDspO1xuLS1cbm5ldC90aXBjL2xpbmsuYz0xMjQ0PXN0YXRpYyBib29sIHRpcGNfZGF0YV9pbnB1dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xMjY3LVx0XHRsLVx1MDAzZWJjX3JjdmxpbmstXHUwMDNlc3RhdGUgPSBMSU5LX0VTVEFCTElTSEVEO1xubmV0L3RpcGMvbGluay5jOjEyNjg6XHRcdHNrYl9xdWV1ZV90YWlsKGwtXHUwMDNlbmFtZWRxLCBza2IpO1xubmV0L3RpcGMvbGluay5jLTEyNjktXHRcdHJldHVybiB0cnVlO1xuLS1cbm5ldC90aXBjL2xpbmsuYz0xNDQ1PXN0YXRpYyB1OCBfX3RpcGNfYnVpbGRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqZ2EsXG4tLVxubmV0L3RpcGMvbGluay5jLTE0NjMtXHRcdFx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O0dhY2tzIG9uICVzOiAlZCwgcWw6ICVkIVxcblwmIzM0Oyxcbm5ldC90aXBjL2xpbmsuYzoxNDY0Olx0XHRcdFx0XHRcdCAgICBsLVx1MDAzZW5hbWUsIG4sXG5uZXQvdGlwYy9saW5rLmMtMTQ2NS1cdFx0XHRcdFx0XHQgICAgc2tiX3F1ZXVlX2xlbihcdTAwMjZsLVx1MDAzZWRlZmVyZHEpKTtcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTgzMj1zdGF0aWMgdm9pZCB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsIGludCBtdHlwLCBib29sIHByb2JlLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xOTEyLVx0X19za2JfcXVldWVfdGFpbCh4bWl0cSwgc2tiKTtcbm5ldC90aXBjL2xpbmsuYzoxOTEzOlx0dHJhY2VfdGlwY19wcm90b19idWlsZChza2IsIGZhbHNlLCBsLVx1MDAzZW5hbWUpO1xubmV0L3RpcGMvbGluay5jLTE5MTQtfVxuLS1cbm5ldC90aXBjL2xpbmsuYz0yMTc0PXN0YXRpYyBpbnQgdGlwY19saW5rX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0yMTkyLVxubmV0L3RpcGMvbGluay5jOjIxOTM6XHR0cmFjZV90aXBjX3Byb3RvX3Jjdihza2IsIGZhbHNlLCBsLVx1MDAzZW5hbWUpO1xubmV0L3RpcGMvbGluay5jLTIxOTQtXG4tLVxubmV0L3RpcGMvbGluay5jLTIyMjItXHRcdC8qIENvbXBsZXRlIG93biBsaW5rIG5hbWUgd2l0aCBwZWVyJiMzOTtzIGludGVyZmFjZSBuYW1lICovXG5uZXQvdGlwYy9saW5rLmM6MjIyMzpcdFx0aWZfbmFtZSA9ICBzdHJyY2hyKGwtXHUwMDNlbmFtZSwgJiMzOTs6JiMzOTspICYjNDM7IDE7XG5uZXQvdGlwYy9saW5rLmM6MjIyNDpcdFx0aWYgKHNpemVvZihsLVx1MDAzZW5hbWUpIC0gKGlmX25hbWUgLSBsLVx1MDAzZW5hbWUpIFx1MDAzYz0gVElQQ19NQVhfSUZfTkFNRSlcbm5ldC90aXBjL2xpbmsuYy0yMjI1LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC90aXBjL2xpbmsuYz0yNTUzPXN0YXRpYyB2b2lkIGxpbmtfcHJpbnQoc3RydWN0IHRpcGNfbGluayAqbCwgY29uc3QgY2hhciAqc3RyKVxuLS1cbm5ldC90aXBjL2xpbmsuYy0yNTU4LVxubmV0L3RpcGMvbGluay5jOjI1NTk6XHRwcl9pbmZvKFwmIzM0OyVzIExpbmsgXHUwMDNjJXNcdTAwM2Ugc3RhdGUgJXhcXG5cJiMzNDssIHN0ciwgbC1cdTAwM2VuYW1lLCBsLVx1MDAzZXN0YXRlKTtcbm5ldC90aXBjL2xpbmsuYy0yNTYwLVx0cHJfaW5mbyhcJiMzNDtYTVRROiAldSBbJXUtJXVdLCBCS0xHUTogJXUsIFNORE5YOiAldSwgUkNWTlg6ICV1XFxuXCYjMzQ7LFxuLS1cbm5ldC90aXBjL2xpbmsuYz0yNzg5PWludCB0aXBjX25sX2FkZF9iY19saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbmxfbXNnICptc2csXG4tLVxubmV0L3RpcGMvbGluay5jLTI4MjAtXHRcdGdvdG8gYXR0cl9tc2dfZnVsbDtcbm5ldC90aXBjL2xpbmsuYzoyODIxOlx0aWYgKG5sYV9wdXRfc3RyaW5nKG1zZy1cdTAwM2Vza2IsIFRJUENfTkxBX0xJTktfTkFNRSwgYmNsLVx1MDAzZW5hbWUpKVxubmV0L3RpcGMvbGluay5jLTI4MjItXHRcdGdvdG8gYXR0cl9tc2dfZnVsbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3NTUKCQkJCQkJCW91dHB1dDogMjMzCgkJCQkJCQl0aG91Z2h0czogMTg5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgQ29tbWl0OiBLTVNBTiBOZWVkcyBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb21taXQmIzM5O3MgcHVycG9zZSDigJMgd2hhdCBidWcgaXMgaXQgYWRkcmVzc2luZyBvciB3aGF0IGNoYW5nZSBpcyBpdCBtYWtpbmc/IFRoZSBkaWZmIHNob3dzIGEgZmV3IGtleSBtb2RpZmljYXRpb25zOiBgc3RyY3B5YCBpcyBiZWluZyByZXBsYWNlZCBieSBgc3Ryc2NweWAgYW5kIGBtZW1jcHlgIGluIHNldmVyYWwgcGxhY2VzLCBzcGVjaWZpY2FsbHkgaW52b2x2aW5nIHRoZSBgaWZfbmFtZWAgYW5kIGBuYW1lYCBmaWVsZHMgd2l0aGluIGEgYHRpcGNfbGlua2Agc3RydWN0dXJlLgoKVGhlIGNvcmUgb2YgdGhlIGlzc3VlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHN0ZW1zIGZyb20gaG93IHRoZSBsaW5rIHByb3RvY29sIG1lc3NhZ2UgaXMgY29uc3RydWN0ZWQgYW5kIHRyYW5zbWl0dGVkLiBQcmV2aW91c2x5LCBhIGBzdHJjcHlgIGNhbGwgaW4gYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgIHdhcyB1c2VkIHRvIGNvcHkgYGwtJmd0O2lmX25hbWVgIGludG8gdGhlIG1lc3NhZ2UgcGF5bG9hZC4gSG93ZXZlciwgYHN0cmNweWAgb25seSBjb3BpZXMgdXAgdG8gdGhlIG51bGwgdGVybWluYXRvciwgbGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyIHVuaW5pdGlhbGl6ZWQuIFRoaXMgY291bGQgbGVhZCB0byBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrLCB3aGVyZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgdHJhbnNtaXR0ZWQgb3ZlciB0aGUgbmV0d29yay4gSXQgY291bGQgYWxzbyB0cmlnZ2VyIEtNU0FOLgoKVGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgYSBkaXJlY3QgcmVzcG9uc2UgdG8gdGhpcyB2dWxuZXJhYmlsaXR5LCBhaW1pbmcgdG8gZW5zdXJlIHRoZSBlbnRpcmUgYnVmZmVyIGlzIGluaXRpYWxpemVkLgoKTm93LCBsZXQmIzM5O3MgY2FyZWZ1bGx5IGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBLTVNBTiBzZXNzaW9uLiBUaGUgS01TQU4gZ3VpZGVsaW5lcyBhcmUgcXVpdGUgY2xlYXI6IHdlIG9ubHkgbmVlZCBLTVNBTiBpZiB0aGUgcGF0Y2ggKmludHJvZHVjZXMqIG9yICpleHBvc2VzKiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKEtBU0FOLCBMT0NLREVQLCBldGMuKSB3b3VsZCBtaXNzLiBJIG5lZWQgdG8gaG9saXN0aWNhbGx5IHJldmlldyB0aGUgcGF0Y2ggd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBlbnN1cmUgdGhpcyBwYXRjaCBpcyBub3QgY2hhbmdpbmcgY29udHJvbCBmbG93IG9yIGNhbGN1bGF0aW9ucyBpbiBhIHdheSB0aGF0IGludHJvZHVjZXMgdGhpcyByaXNrLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaW4gYHRpcGNfbGlua19jcmVhdGVgLCB0aGUgYHRpcGNfbGlua2Agc3RydWN0dXJlIChgbGApIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCBpcyBjcml0aWNhbC4gVGhpcyBlbnN1cmVzIHRoYXQgYWxsIG1lbWJlcnMgb2YgdGhlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHRoZSBgaWZfbmFtZWAgZmllbGQsIGFyZSAqemVyby1pbml0aWFsaXplZCogdXBvbiBhbGxvY2F0aW9uLiBUaGUgc3Vic2VxdWVudCB1c2Ugb2YgYHN0cnNjcHlgIG92ZXJ3cml0ZXMgdGhlIGZpcnN0IGZldyBieXRlcyB3aXRoIHRoZSBhY3R1YWwgaW50ZXJmYWNlIG5hbWUuIEltcG9ydGFudGx5LCB0aGUgcmVtYWluaW5nIGJ5dGVzIG9mIGBsLSZndDtpZl9uYW1lYCAqcmVtYWluKiB6ZXJvZWQuIFRoZSB1c2Ugb2YgYG1lbWNweShkYXRhLCBsLSZndDtpZl9uYW1lLCBUSVBDX01BWF9JRl9OQU1FKWAgdGhlbiBjb3BpZXMgdGhlIGVudGlyZSAxNi1ieXRlIGJ1ZmZlciBmcm9tIGBsLSZndDtpZl9uYW1lYCBpbnRvIHRoZSBvdXRnb2luZyBwYWNrZXQuIEJlY2F1c2UgYGwtJmd0O2lmX25hbWVgIGlzIHplcm8taW5pdGlhbGl6ZWQgYW5kIHRoZW4gcG90ZW50aWFsbHkgcGFydGlhbGx5IG92ZXJ3cml0dGVuIGJ5IGEgc3RyaW5nIChudWxsLXRlcm1pbmF0ZWQpLCBhbGwgdGhlIGNvcGllZCBieXRlcyB3aWxsIGJlIGluaXRpYWxpemVkLCBlaXRoZXIgdGhlIGRhdGEgb2YgdGhlIHN0cmluZywgb3IgemVyby4KCkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCAqcmVtb3ZlcyogdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBUaGUgdXNlIG9mIGBremFsbG9jX29iamAsIGBzdHJzY3B5YCwgYW5kIGBtZW1jcHlgIGd1YXJhbnRlZXMgdGhhdCB0aGUgZnVsbCBidWZmZXIgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSB0cmFuc21pc3Npb24uIE5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBUaGUgc3RyaW5nIGNvcHkgYW5kIGJ1ZmZlciBjb3B5IG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQgc2FmZWx5LgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IEtNU0FOIGNvbmNlcm5zLiBTdGFuZGFyZCBLQVNBTiBhbmQgY29tcGlsZXIgY2hlY2tzIGFyZSBzdWZmaWNpZW50LiBObyBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyByZXF1aXJlZC4gVGhlIGBOZWVkc0tNU0FOYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSBzaG91bGQgY2xlYXJseSBhcnRpY3VsYXRlIHRoaXMgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyB1bnNhZmUgYHN0cmNweWAgY2FsbHMgd2l0aCBgc3Ryc2NweWAgaW4gYHRpcGNfbGlua19jcmVhdGVgIGFuZCBgdGlwY19saW5rX2JjX2NyZWF0ZWAsIGFuZCBjaGFuZ2VzIGBzdHJjcHlgIHRvIGBtZW1jcHkoZGF0YSwgbC1cdTAwM2VpZl9uYW1lLCBUSVBDX01BWF9JRl9OQU1FKWAgaW4gYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgLlxuXG5UaGUgYHN0cnVjdCB0aXBjX2xpbmtgIGluc3RhbmNlIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKCpsLCBHRlBfQVRPTUlDKWAsIGVuc3VyaW5nIHRoYXQgYWxsIGZpZWxkcyBpbmNsdWRpbmcgYGwtXHUwMDNlaWZfbmFtZWAgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIENvcHlpbmcgYFRJUENfTUFYX0lGX05BTUVgIGJ5dGVzIGZyb20gYGwtXHUwMDNlaWZfbmFtZWAgaW50byB0aGUgcGFja2V0IHBheWxvYWQgYGRhdGFgIHJlYWRzIG9ubHkgZnVsbHkgaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGluZywgb3IgdXNlci1zcGFjZSBpbmZvIGxlYWtzLlxuXG5TdGFuZGFyZCBLQVNBTiBhbmQgY29tcGlsZXIgZm9ydGlmaWNhdGlvbnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgb3IgYnVmZmVyIG92ZXJmbG93IGJ1Z3MuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgdW5zYWZlIGBzdHJjcHlgIGNhbGxzIHdpdGggYHN0cnNjcHlgIGluIGB0aXBjX2xpbmtfY3JlYXRlYCBhbmQgYHRpcGNfbGlua19iY19jcmVhdGVgLCBhbmQgY2hhbmdlcyBgc3RyY3B5YCB0byBgbWVtY3B5KGRhdGEsIGwtXHUwMDNlaWZfbmFtZSwgVElQQ19NQVhfSUZfTkFNRSlgIGluIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYC5cblxuVGhlIGBzdHJ1Y3QgdGlwY19saW5rYCBpbnN0YW5jZSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigqbCwgR0ZQX0FUT01JQylgLCBlbnN1cmluZyB0aGF0IGFsbCBmaWVsZHMgaW5jbHVkaW5nIGBsLVx1MDAzZWlmX25hbWVgIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBDb3B5aW5nIGBUSVBDX01BWF9JRl9OQU1FYCBieXRlcyBmcm9tIGBsLVx1MDAzZWlmX25hbWVgIGludG8gdGhlIHBhY2tldCBwYXlsb2FkIGBkYXRhYCByZWFkcyBvbmx5IGZ1bGx5IGluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBicmFuY2hpbmcsIG9yIHVzZXItc3BhY2UgaW5mbyBsZWFrcy5cblxuU3RhbmRhcmQgS0FTQU4gYW5kIGNvbXBpbGVyIGZvcnRpZmljYXRpb25zIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIG9yIGJ1ZmZlciBvdmVyZmxvdyBidWdzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDA6NDYuNzI1NjEwNTU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwNzgxNTgzODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX2xpbmtfY3JlYXRlXCIsXG4gICAgXCJ0aXBjX2xpbmtfYmNfY3JlYXRlXCIsXG4gICAgXCJ0aXBjX2xpbmtfYnVpbGRfcmVzZXRfbXNnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyB1bnNhZmUgYHN0cmNweWAgY2FsbHMgd2l0aCBgc3Ryc2NweWAgaW4gYHRpcGNfbGlua19jcmVhdGVgIGFuZCBgdGlwY19saW5rX2JjX2NyZWF0ZWAsIGFuZCBjaGFuZ2VzIGBzdHJjcHlgIHRvIGBtZW1jcHkoZGF0YSwgbC1cXHUwMDNlaWZfbmFtZSwgVElQQ19NQVhfSUZfTkFNRSlgIGluIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYC5cXG5cXG5UaGUgYHN0cnVjdCB0aXBjX2xpbmtgIGluc3RhbmNlIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKCpsLCBHRlBfQVRPTUlDKWAsIGVuc3VyaW5nIHRoYXQgYWxsIGZpZWxkcyBpbmNsdWRpbmcgYGwtXFx1MDAzZWlmX25hbWVgIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBDb3B5aW5nIGBUSVBDX01BWF9JRl9OQU1FYCBieXRlcyBmcm9tIGBsLVxcdTAwM2VpZl9uYW1lYCBpbnRvIHRoZSBwYWNrZXQgcGF5bG9hZCBgZGF0YWAgcmVhZHMgb25seSBmdWxseSBpbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgY29uZGl0aW9uYWwgYnJhbmNoaW5nLCBvciB1c2VyLXNwYWNlIGluZm8gbGVha3MuXFxuXFxuU3RhbmRhcmQgS0FTQU4gYW5kIGNvbXBpbGVyIGZvcnRpZmljYXRpb25zIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIG9yIGJ1ZmZlciBvdmVyZmxvdyBidWdzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUSVBDIGxpbmsgaW5pdGlhbGl6YXRpb24gYW5kIHByb3RvY29sIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljIGluIG5ldC90aXBjL2xpbmsuYyAodXNpbmcgc3Ryc2NweSBhbmQgYm91bmRlZCBtZW1jcHkgaW5zdGVhZCBvZiBzdHJjcHkpLiBUSVBDIGlzIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowMDo0Ni43MjU2MTY3MTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTA2NTIzODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2YTFiZmNlMDNlYzhiNTkzNWQzNGFlYjg0OGY2ODFmZmI5ZDU3NzliXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDI5IDEzOjAwOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuY1xcbmluZGV4IDQ5ZGZjMDk4ZDg5YjIuLjY0MjdjNjlmODkyOTQgMTAwNjQ0XFxuLS0tIGEvbmV0L3RpcGMvbGluay5jXFxuKysrIGIvbmV0L3RpcGMvbGluay5jXFxuQEAgLTUwNCw3ICs1MDQsNyBAQCBib29sIHRpcGNfbGlua19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppZl9uYW1lLCBpbnQgYmVhcmVyX2lkLFxcbiBcXHRzbnByaW50ZihsLVxcdTAwM2VuYW1lLCBzaXplb2YobC1cXHUwMDNlbmFtZSksIFxcXCIlczolcy0lczp1bmtub3duXFxcIixcXG4gXFx0XFx0IHNlbGZfc3RyLCBpZl9uYW1lLCBwZWVyX3N0cik7XFxuIFxcbi1cXHRzdHJjcHkobC1cXHUwMDNlaWZfbmFtZSwgaWZfbmFtZSk7XFxuK1xcdHN0cnNjcHkobC1cXHUwMDNlaWZfbmFtZSwgaWZfbmFtZSk7XFxuIFxcdGwtXFx1MDAzZWFkZHIgPSBwZWVyO1xcbiBcXHRsLVxcdTAwM2VwZWVyX2NhcHMgPSBwZWVyX2NhcHM7XFxuIFxcdGwtXFx1MDAzZW5ldCA9IG5ldDtcXG5AQCAtNTc0LDcgKzU3NCw3IEBAIGJvb2wgdGlwY19saW5rX2JjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBvd25ub2RlLCB1MzIgcGVlciwgdTggKnBlZXJfaWQsXFxuIFxcdFxcdHNucHJpbnRmKGwtXFx1MDAzZW5hbWUsIHNpemVvZihsLVxcdTAwM2VuYW1lKSwgXFxcIiVzOiVzXFxcIiwgdGlwY19iY2xpbmtfbmFtZSxcXG4gXFx0XFx0XFx0IHBlZXJfc3RyKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0c3RyY3B5KGwtXFx1MDAzZW5hbWUsIHRpcGNfYmNsaW5rX25hbWUpO1xcbitcXHRcXHRzdHJzY3B5KGwtXFx1MDAzZW5hbWUsIHRpcGNfYmNsaW5rX25hbWUpO1xcbiBcXHR9XFxuIFxcdHRyYWNlX3RpcGNfbGlua19yZXNldChsLCBUSVBDX0RVTVBfQUxMLCBcXFwiYmNsaW5rIGNyZWF0ZWQhXFxcIik7XFxuIFxcdHRpcGNfbGlua19yZXNldChsKTtcXG5AQCAtMTg5OCw3ICsxODk4LDcgQEAgc3RhdGljIHZvaWQgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBpbnQgbXR5cCwgYm9vbCBwcm9iZSxcXG4gXFx0XFx0XFx0bXNnX3NldF9kZXN0X3Nlc3Npb24oaGRyLCBsLVxcdTAwM2VwZWVyX3Nlc3Npb24pO1xcbiBcXHRcXHR9XFxuIFxcdFxcdG1zZ19zZXRfbWF4X3BrdChoZHIsIGwtXFx1MDAzZWFkdmVydGlzZWRfbXR1KTtcXG4tXFx0XFx0c3RyY3B5KGRhdGEsIGwtXFx1MDAzZWlmX25hbWUpO1xcbitcXHRcXHRtZW1jcHkoZGF0YSwgbC1cXHUwMDNlaWZfbmFtZSwgVElQQ19NQVhfSUZfTkFNRSk7XFxuIFxcdFxcdG1zZ19zZXRfc2l6ZShoZHIsIElOVF9IX1NJWkUgKyBUSVBDX01BWF9JRl9OQU1FKTtcXG4gXFx0XFx0c2tiX3RyaW0oc2tiLCBJTlRfSF9TSVpFICsgVElQQ19NQVhfSUZfTkFNRSk7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDA6NDguMTc2OTExNjMzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4NDUwNzgwMTkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUSVBDXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGlwY19saW5rX2NyZWF0ZVwiLFxuICAgIFwidGlwY19saW5rX2JjX2NyZWF0ZVwiLFxuICAgIFwidGlwY19saW5rX2J1aWxkX3Jlc2V0X21zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFRJUEMgbGluayBpbml0aWFsaXphdGlvbiBhbmQgcHJvdG9jb2wgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gbG9naWMgaW4gbmV0L3RpcGMvbGluay5jICh1c2luZyBzdHJzY3B5IGFuZCBib3VuZGVkIG1lbWNweSBpbnN0ZWFkIG9mIHN0cmNweSkuIFRJUEMgaXMgZnVsbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZhMWJmY2UwM2VjOGI1OTM1ZDM0YWViODQ4ZjY4MWZmYjlkNTc3OWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxMzowMDo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuY1xuaW5kZXggNDlkZmMwOThkODliMi4uNjQyN2M2OWY4OTI5NCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2xpbmsuY1xuKysrIGIvbmV0L3RpcGMvbGluay5jXG5AQCAtNTA0LDcgKzUwNCw3IEBAIGJvb2wgdGlwY19saW5rX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKmlmX25hbWUsIGludCBiZWFyZXJfaWQsXG4gXHRzbnByaW50ZihsLVx1MDAzZW5hbWUsIHNpemVvZihsLVx1MDAzZW5hbWUpLCBcIiVzOiVzLSVzOnVua25vd25cIixcbiBcdFx0IHNlbGZfc3RyLCBpZl9uYW1lLCBwZWVyX3N0cik7XG4gXG4tXHRzdHJjcHkobC1cdTAwM2VpZl9uYW1lLCBpZl9uYW1lKTtcbitcdHN0cnNjcHkobC1cdTAwM2VpZl9uYW1lLCBpZl9uYW1lKTtcbiBcdGwtXHUwMDNlYWRkciA9IHBlZXI7XG4gXHRsLVx1MDAzZXBlZXJfY2FwcyA9IHBlZXJfY2FwcztcbiBcdGwtXHUwMDNlbmV0ID0gbmV0O1xuQEAgLTU3NCw3ICs1NzQsNyBAQCBib29sIHRpcGNfbGlua19iY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgb3dubm9kZSwgdTMyIHBlZXIsIHU4ICpwZWVyX2lkLFxuIFx0XHRzbnByaW50ZihsLVx1MDAzZW5hbWUsIHNpemVvZihsLVx1MDAzZW5hbWUpLCBcIiVzOiVzXCIsIHRpcGNfYmNsaW5rX25hbWUsXG4gXHRcdFx0IHBlZXJfc3RyKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHN0cmNweShsLVx1MDAzZW5hbWUsIHRpcGNfYmNsaW5rX25hbWUpO1xuK1x0XHRzdHJzY3B5KGwtXHUwMDNlbmFtZSwgdGlwY19iY2xpbmtfbmFtZSk7XG4gXHR9XG4gXHR0cmFjZV90aXBjX2xpbmtfcmVzZXQobCwgVElQQ19EVU1QX0FMTCwgXCJiY2xpbmsgY3JlYXRlZCFcIik7XG4gXHR0aXBjX2xpbmtfcmVzZXQobCk7XG5AQCAtMTg5OCw3ICsxODk4LDcgQEAgc3RhdGljIHZvaWQgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBpbnQgbXR5cCwgYm9vbCBwcm9iZSxcbiBcdFx0XHRtc2dfc2V0X2Rlc3Rfc2Vzc2lvbihoZHIsIGwtXHUwMDNlcGVlcl9zZXNzaW9uKTtcbiBcdFx0fVxuIFx0XHRtc2dfc2V0X21heF9wa3QoaGRyLCBsLVx1MDAzZWFkdmVydGlzZWRfbXR1KTtcbi1cdFx0c3RyY3B5KGRhdGEsIGwtXHUwMDNlaWZfbmFtZSk7XG4rXHRcdG1lbWNweShkYXRhLCBsLVx1MDAzZWlmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpO1xuIFx0XHRtc2dfc2V0X3NpemUoaGRyLCBJTlRfSF9TSVpFICsgVElQQ19NQVhfSUZfTkFNRSk7XG4gXHRcdHNrYl90cmltKHNrYiwgSU5UX0hfU0laRSArIFRJUENfTUFYX0lGX05BTUUpO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDA6NDguMTc2OTEyODg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEwMzQ3ODY4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUSVBDIExpbmsgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIHByb3ZpZGVkIHRvb2xzIHN1Z2dlc3QgYSBjb2RlIGluc3BlY3Rpb24gaXMgaW4gb3JkZXIuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHBhdGNoIHRhcmdldGluZyBgbmV0L3RpcGMvbGluay5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgZGlmZiBoaWdobGlnaHRzIHNvbWUgaW50ZXJlc3Rpbmcgc3RyaW5nIGhhbmRsaW5nIGNoYW5nZXMuXG5cblRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgYHN0cmNweWAgd2l0aCBgc3Ryc2NweWAgaW4gYHRpcGNfbGlua19jcmVhdGUoKWAgYW5kIGB0aXBjX2xpbmtfYmNfY3JlYXRlKClgLiBUaGF0J3MgYSBjbGFzc2ljIGJ1ZmZlciBvdmVyZmxvdyBwcmV2ZW50aW9uIG1lYXN1cmUuIFJlcGxhY2luZyBhIHBvdGVudGlhbGx5IHVuYm91bmRlZCBjb3B5IHdpdGggYSBzYWZlLCBib3VuZGVkIGNvcHkgaXMgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSwgZXNwZWNpYWxseSBpbiBhIG5ldHdvcmsgY29udGV4dCB3aGVyZSBtYWxpY2lvdXMgYWN0b3JzIG1pZ2h0IHRyeSB0byBleHBsb2l0IHZ1bG5lcmFiaWxpdGllcyB0aHJvdWdoIGNyYWZ0ZWQgaW5wdXQuIEt1ZG9zIGZvciBzcG90dGluZyBhbmQgYWRkcmVzc2luZyB0aG9zZS5cblxuVGhlIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKClgIGNoYW5nZSwgaG93ZXZlciwgc3dhcHBpbmcgYHN0cmNweWAgd2l0aCBgbWVtY3B5YCB3aXRoIGBUSVBDX01BWF9JRl9OQU1FYCBhcyB0aGUgc2l6ZSBhcmd1bWVudCwgaXMgaW50ZXJlc3RpbmcuIEl0IHN0aWxsIGxvb2tzIGxpa2UgYW4gYXR0ZW1wdCB0byBtYWtlIHRoZSBjb2RlIHNhZmVyIGFuZCBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3MuIEknZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dHMgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgb3JpZ2luYWwgYHN0cmNweWAgdXNhZ2VzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBUSVBDX01BWF9JRl9OQU1FYCBpcyB0aGUgY29ycmVjdCBsaW1pdCBhbmQgaWYgaXQncyBjb25zaXN0ZW50bHkgZW5mb3JjZWQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsYXRlZCBjb2RlIHRvIHNlZSBpZiB0aGVyZSB3ZXJlIGFueSBpc3N1ZXMgcmVwb3J0ZWQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBhcyB3ZWxsLCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWxhdGVkIGNvbmZpZ3VyYWJsZSB2YWx1ZXMuXG5cblRpbWUgdG8gcHVsbCB1cCBgbmV0L3RpcGMvbGluay5jYCBhbmQgc3RhcnQgcmVhZGluZyBhcm91bmQgdGhvc2UgY2FsbCBzaXRlcy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgZWRnZSBjYXNlcywgYW5kLCBvZiBjb3Vyc2UsIHRvIG1ha2Ugc3VyZSB0aGUgcmVwbGFjZW1lbnRzIGFyZSBmdW5jdGlvbmFsbHkgc291bmQgYW5kIGRvbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMuIEl0J3MgdGltZSB0byBjb25maXJtIHRoYXQgdGhlIHBhdGNoIGlzIGluZGVlZCBhIGdvb2QgdGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTAsIk91dHB1dFRva2VucyI6MTAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDA6NTkuMjExNzAxOTEyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjMzNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRJUENfTUFYX0lGX05BTUVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYmVhcmVyLmM9MTM3PXN0YXRpYyBpbnQgYmVhcmVyX25hbWVfdmFsaWRhdGUoY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5jLTE2MC1cXHRpZiAoKG1lZGlhX2xlbiBcXHUwMDNjPSAxKSB8fCAobWVkaWFfbGVuIFxcdTAwM2UgVElQQ19NQVhfTUVESUFfTkFNRSkgfHxcXG5uZXQvdGlwYy9iZWFyZXIuYzoxNjE6XFx0ICAgIChpZl9sZW4gXFx1MDAzYz0gMSkgfHwgKGlmX2xlbiBcXHUwMDNlIFRJUENfTUFYX0lGX05BTUUpKVxcbm5ldC90aXBjL2JlYXJlci5jLTE2Mi1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5jLTE2OS1cXHRcXHRpZiAoc3Ryc2NweShuYW1lX3BhcnRzLVxcdTAwM2VpZl9uYW1lLCBpZl9uYW1lLFxcbm5ldC90aXBjL2JlYXJlci5jOjE3MDpcXHRcXHRcXHQgICAgVElQQ19NQVhfSUZfTkFNRSkgXFx1MDAzYyAwKVxcbm5ldC90aXBjL2JlYXJlci5jLTE3MS1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5oPTE3OT1zdHJ1Y3QgdGlwY19iZWFyZXJfbmFtZXMge1xcbm5ldC90aXBjL2JlYXJlci5oLTE4MC1cXHRjaGFyIG1lZGlhX25hbWVbVElQQ19NQVhfTUVESUFfTkFNRV07XFxubmV0L3RpcGMvYmVhcmVyLmg6MTgxOlxcdGNoYXIgaWZfbmFtZVtUSVBDX01BWF9JRl9OQU1FXTtcXG5uZXQvdGlwYy9iZWFyZXIuaC0xODItfTtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xMzc9c3RydWN0IHRpcGNfbGluayB7XFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTU1LVxcdHUzMiBzaWxlbnRfaW50dl9jbnQ7XFxubmV0L3RpcGMvbGluay5jOjE1NjpcXHRjaGFyIGlmX25hbWVbVElQQ19NQVhfSUZfTkFNRV07XFxubmV0L3RpcGMvbGluay5jLTE1Ny1cXHR1MzIgcHJpb3JpdHk7XFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9MTgzMj1zdGF0aWMgdm9pZCB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsIGludCBtdHlwLCBib29sIHByb2JlLFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTE5MDAtXFx0XFx0bXNnX3NldF9tYXhfcGt0KGhkciwgbC1cXHUwMDNlYWR2ZXJ0aXNlZF9tdHUpO1xcbm5ldC90aXBjL2xpbmsuYzoxOTAxOlxcdFxcdG1lbWNweShkYXRhLCBsLVxcdTAwM2VpZl9uYW1lLCBUSVBDX01BWF9JRl9OQU1FKTtcXG5uZXQvdGlwYy9saW5rLmM6MTkwMjpcXHRcXHRtc2dfc2V0X3NpemUoaGRyLCBJTlRfSF9TSVpFICsgVElQQ19NQVhfSUZfTkFNRSk7XFxubmV0L3RpcGMvbGluay5jOjE5MDM6XFx0XFx0c2tiX3RyaW0oc2tiLCBJTlRfSF9TSVpFICsgVElQQ19NQVhfSUZfTkFNRSk7XFxubmV0L3RpcGMvbGluay5jLTE5MDQtXFx0fVxcbi0tXFxubmV0L3RpcGMvbGluay5jPTIxNzQ9c3RhdGljIGludCB0aXBjX2xpbmtfcHJvdG9fcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMjIyMy1cXHRcXHRpZl9uYW1lID0gIHN0cnJjaHIobC1cXHUwMDNlbmFtZSwgJzonKSArIDE7XFxubmV0L3RpcGMvbGluay5jOjIyMjQ6XFx0XFx0aWYgKHNpemVvZihsLVxcdTAwM2VuYW1lKSAtIChpZl9uYW1lIC0gbC1cXHUwMDNlbmFtZSkgXFx1MDAzYz0gVElQQ19NQVhfSUZfTkFNRSlcXG5uZXQvdGlwYy9saW5rLmMtMjIyNS1cXHRcXHRcXHRicmVhaztcXG5uZXQvdGlwYy9saW5rLmM6MjIyNjpcXHRcXHRpZiAobXNnX2RhdGFfc3ooaGRyKSBcXHUwMDNjIFRJUENfTUFYX0lGX05BTUUpXFxubmV0L3RpcGMvbGluay5jLTIyMjctXFx0XFx0XFx0YnJlYWs7XFxubmV0L3RpcGMvbGluay5jOjIyMjg6XFx0XFx0c3Ryc2NweShpZl9uYW1lLCBkYXRhLCBUSVBDX01BWF9JRl9OQU1FKTtcXG5uZXQvdGlwYy9saW5rLmMtMjIyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDA6NTkuMjU3MzM4NDcyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL2xpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0OTUsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0OTU6XFx0XFxuIDQ5NjpcXHRcXHQvKiBTZXQgbGluayBuYW1lIGZvciB1bmljYXN0IGxpbmtzIG9ubHkgKi9cXG4gNDk3OlxcdFxcdGlmIChwZWVyX2lkKSB7XFxuIDQ5ODpcXHRcXHRcXHRpZiAodGlwY19ub2RlaWQyc3RyaW5nKHNlbGZfc3RyLCB0aXBjX293bl9pZChuZXQpKSBcXHUwMDNlIE5PREVfSURfTEVOKVxcbiA0OTk6XFx0XFx0XFx0XFx0c3ByaW50ZihzZWxmX3N0ciwgXFxcIiV4XFxcIiwgc2VsZik7XFxuIDUwMDpcXHRcXHRcXHRpZiAodGlwY19ub2RlaWQyc3RyaW5nKHBlZXJfc3RyLCBwZWVyX2lkKSBcXHUwMDNlIE5PREVfSURfTEVOKVxcbiA1MDE6XFx0XFx0XFx0XFx0c3ByaW50ZihwZWVyX3N0ciwgXFxcIiV4XFxcIiwgcGVlcik7XFxuIDUwMjpcXHRcXHR9XFxuIDUwMzpcXHRcXHQvKiBQZWVyIGkvZiBuYW1lIHdpbGwgYmUgY29tcGxldGVkIGJ5IHJlc2V0L2FjdGl2YXRlIG1lc3NhZ2UgKi9cXG4gNTA0OlxcdFxcdHNucHJpbnRmKGwtXFx1MDAzZW5hbWUsIHNpemVvZihsLVxcdTAwM2VuYW1lKSwgXFxcIiVzOiVzLSVzOnVua25vd25cXFwiLFxcbiA1MDU6XFx0XFx0XFx0IHNlbGZfc3RyLCBpZl9uYW1lLCBwZWVyX3N0cik7XFxuIDUwNjpcXHRcXG4gNTA3OlxcdFxcdHN0cnNjcHkobC1cXHUwMDNlaWZfbmFtZSwgaWZfbmFtZSk7XFxuIDUwODpcXHRcXHRsLVxcdTAwM2VhZGRyID0gcGVlcjtcXG4gNTA5OlxcdFxcdGwtXFx1MDAzZXBlZXJfY2FwcyA9IHBlZXJfY2FwcztcXG4gNTEwOlxcdFxcdGwtXFx1MDAzZW5ldCA9IG5ldDtcXG4gNTExOlxcdFxcdGwtXFx1MDAzZWluX3Nlc3Npb24gPSBmYWxzZTtcXG4gNTEyOlxcdFxcdGwtXFx1MDAzZWJlYXJlcl9pZCA9IGJlYXJlcl9pZDtcXG4gNTEzOlxcdFxcdGwtXFx1MDAzZXRvbGVyYW5jZSA9IHRvbGVyYW5jZTtcXG4gNTE0OlxcdFxcdGlmIChiY19yY3ZsaW5rKVxcbiA1MTU6XFx0XFx0XFx0YmNfcmN2bGluay1cXHUwMDNldG9sZXJhbmNlID0gdG9sZXJhbmNlO1xcbiA1MTY6XFx0XFx0bC1cXHUwMDNlbmV0X3BsYW5lID0gbmV0X3BsYW5lO1xcbiA1MTc6XFx0XFx0bC1cXHUwMDNlYWR2ZXJ0aXNlZF9tdHUgPSBtdHU7XFxuIDUxODpcXHRcXHRsLVxcdTAwM2VtdHUgPSBtdHU7XFxuIDUxOTpcXHRcXHRsLVxcdTAwM2Vwcmlvcml0eSA9IHByaW9yaXR5O1xcbiA1MjA6XFx0XFx0dGlwY19saW5rX3NldF9xdWV1ZV9saW1pdHMobCwgbWluX3dpbiwgbWF4X3dpbik7XFxuIDUyMTpcXHRcXHRsLVxcdTAwM2VhY2tlcnMgPSAxO1xcbiA1MjI6XFx0XFx0bC1cXHUwMDNlYmNfc25kbGluayA9IGJjX3NuZGxpbms7XFxuIDUyMzpcXHRcXHRsLVxcdTAwM2ViY19yY3ZsaW5rID0gYmNfcmN2bGluaztcXG4gNTI0OlxcdFxcdGwtXFx1MDAzZWlucHV0cSA9IGlucHV0cTtcXG4gNTI1OlxcdFxcdGwtXFx1MDAzZW5hbWVkcSA9IG5hbWVkcTtcXG4gNTI2OlxcdFxcdGwtXFx1MDAzZXN0YXRlID0gTElOS19SRVNFVFRJTkc7XFxuIDUyNzpcXHRcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmwtXFx1MDAzZXRyYW5zbXEpO1xcbiA1Mjg6XFx0XFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZsLVxcdTAwM2ViYWNrbG9ncSk7XFxuIDUyOTpcXHRcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmwtXFx1MDAzZWRlZmVyZHEpO1xcbiA1MzA6XFx0XFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZsLVxcdTAwM2VmYWlsb3Zlcl9kZWZlcmRxKTtcXG4gNTMxOlxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmwtXFx1MDAzZXdha2V1cHEpO1xcbiA1MzI6XFx0XFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChsLVxcdTAwM2VpbnB1dHEpO1xcbiA1MzM6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDUzNDpcXHR9XFxuIDUzNTpcXHRcXG4gNTM2OlxcdC8qKlxcbiA1Mzc6XFx0ICogdGlwY19saW5rX2JjX2NyZWF0ZSAtIGNyZWF0ZSBuZXcgbGluayB0byBiZSB1c2VkIGZvciBicm9hZGNhc3RcXG4gNTM4OlxcdCAqIEBuZXQ6IHBvaW50ZXIgdG8gYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxcbiA1Mzk6XFx0ICogQG10dTogbXR1IHRvIGJlIHVzZWQgaW5pdGlhbGx5IGlmIG5vIHBlZXJzXFxuIDU0MDpcXHQgKiBAbWluX3dpbjogbWluaW1hbCBzZW5kIHdpbmRvdyB0byBiZSB1c2VkIGJ5IGxpbmtcXG4gNTQxOlxcdCAqIEBtYXhfd2luOiBtYXhpbWFsIHNlbmQgd2luZG93IHRvIGJlIHVzZWQgYnkgbGlua1xcbiA1NDI6XFx0ICogQGlucHV0cTogcXVldWUgdG8gcHV0IG1lc3NhZ2VzIHJlYWR5IGZvciBkZWxpdmVyeVxcbiA1NDM6XFx0ICogQG5hbWVkcTogcXVldWUgdG8gcHV0IGJpbmRpbmcgdGFibGUgdXBkYXRlIG1lc3NhZ2VzIHJlYWR5IGZvciBkZWxpdmVyeVxcbiA1NDQ6XFx0ICogQGxpbms6IHJldHVybiB2YWx1ZSwgcG9pbnRlciB0byBwdXQgdGhlIGNyZWF0ZWQgbGlua1xcbiA1NDU6XFx0ICogQG93bm5vZGU6IGlkZW50aXR5IG9mIG93biBub2RlXFxuIDU0NjpcXHQgKiBAcGVlcjogbm9kZSBpZCBvZiBwZWVyIG5vZGVcXG4gNTQ3OlxcdCAqIEBwZWVyX2lkOiAxMjgtYml0IElEIG9mIHBlZXJcXG4gNTQ4OlxcdCAqIEBwZWVyX2NhcHM6IGJpdG1hcCBkZXNjcmliaW5nIHBlZXIgbm9kZSBjYXBhYmlsaXRpZXNcXG4gNTQ5OlxcdCAqIEBiY19zbmRsaW5rOiB0aGUgbmFtZXNwYWNlIGdsb2JhbCBsaW5rIHVzZWQgZm9yIGJyb2FkY2FzdCBzZW5kaW5nXFxuIDU1MDpcXHQgKlxcbiA1NTE6XFx0ICogUmV0dXJuOiB0cnVlIGlmIGxpbmsgd2FzIGNyZWF0ZWQsIG90aGVyd2lzZSBmYWxzZVxcbiA1NTI6XFx0ICovXFxuIDU1MzpcXHRib29sIHRpcGNfbGlua19iY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgb3dubm9kZSwgdTMyIHBlZXIsIHU4ICpwZWVyX2lkLFxcbiA1NTQ6XFx0XFx0XFx0XFx0IGludCBtdHUsIHUzMiBtaW5fd2luLCB1MzIgbWF4X3dpbiwgdTE2IHBlZXJfY2FwcyxcXG4gNTU1OlxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsXFxuIDU1NjpcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbmFtZWRxLFxcbiA1NTc6XFx0XFx0XFx0XFx0IHN0cnVjdCB0aXBjX2xpbmsgKmJjX3NuZGxpbmssXFxuIDU1ODpcXHRcXHRcXHRcXHQgc3RydWN0IHRpcGNfbGluayAqKmxpbmspXFxuIDU1OTpcXHR7XFxuIDU2MDpcXHRcXHRzdHJ1Y3QgdGlwY19saW5rICpsO1xcbiA1NjE6XFx0XFxuIDU2MjpcXHRcXHRpZiAoIXRpcGNfbGlua19jcmVhdGUobmV0LCBcXFwiXFxcIiwgTUFYX0JFQVJFUlMsIDAsICdaJywgbXR1LCAwLCBtaW5fd2luLFxcbiA1NjM6XFx0XFx0XFx0XFx0ICAgICAgbWF4X3dpbiwgMCwgb3dubm9kZSwgcGVlciwgTlVMTCwgcGVlcl9jYXBzLFxcbiA1NjQ6XFx0XFx0XFx0XFx0ICAgICAgYmNfc25kbGluaywgTlVMTCwgaW5wdXRxLCBuYW1lZHEsIGxpbmspKVxcbiA1NjU6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA1NjY6XFx0XFxuIDU2NzpcXHRcXHRsID0gKmxpbms7XFxuIDU2ODpcXHRcXHRpZiAocGVlcl9pZCkge1xcbiA1Njk6XFx0XFx0XFx0Y2hhciBwZWVyX3N0cltOT0RFX0lEX1NUUl9MRU5dID0gezAsfTtcXG4gNTcwOlxcdFxcbiA1NzE6XFx0XFx0XFx0aWYgKHRpcGNfbm9kZWlkMnN0cmluZyhwZWVyX3N0ciwgcGVlcl9pZCkgXFx1MDAzZSBOT0RFX0lEX0xFTilcXG4gNTcyOlxcdFxcdFxcdFxcdHNwcmludGYocGVlcl9zdHIsIFxcXCIleFxcXCIsIHBlZXIpO1xcbiA1NzM6XFx0XFx0XFx0LyogQnJvYWRjYXN0IHJlY2VpdmVyIGxpbmsgbmFtZTogXFxcImJyb2FkY2FzdC1saW5rOlxcdTAwM2NwZWVyXFx1MDAzZVxcXCIgKi9cXG4gNTc0OlxcdFxcdFxcdHNucHJpbnRmKGwtXFx1MDAzZW5hbWUsIHNpemVvZihsLVxcdTAwM2VuYW1lKSwgXFxcIiVzOiVzXFxcIiwgdGlwY19iY2xpbmtfbmFtZSxcXG4gNTc1OlxcdFxcdFxcdFxcdCBwZWVyX3N0cik7XFxuIDU3NjpcXHRcXHR9IGVsc2Uge1xcbiA1Nzc6XFx0XFx0XFx0c3Ryc2NweShsLVxcdTAwM2VuYW1lLCB0aXBjX2JjbGlua19uYW1lKTtcXG4gNTc4OlxcdFxcdH1cXG4gNTc5OlxcdFxcdHRyYWNlX3RpcGNfbGlua19yZXNldChsLCBUSVBDX0RVTVBfQUxMLCBcXFwiYmNsaW5rIGNyZWF0ZWQhXFxcIik7XFxuIDU4MDpcXHRcXHR0aXBjX2xpbmtfcmVzZXQobCk7XFxuIDU4MTpcXHRcXHRsLVxcdTAwM2VzdGF0ZSA9IExJTktfUkVTRVQ7XFxuIDU4MjpcXHRcXHRsLVxcdTAwM2VhY2tlcnMgPSAwO1xcbiA1ODM6XFx0XFx0bC1cXHUwMDNlYmNfcmN2bGluayA9IGw7XFxuIDU4NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDA6NTkuMjU3NTAyODkyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3RpcGMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBUSVBDIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBUSVBDXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhlIFRJUEMgUHJvdG9jb2xcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgVGhlIFRyYW5zcGFyZW50IEludGVyIFByb2Nlc3MgQ29tbXVuaWNhdGlvbiAoVElQQykgcHJvdG9jb2wgaXNcXG4gIDExOlxcdFxcdCAgc3BlY2lhbGx5IGRlc2lnbmVkIGZvciBpbnRyYSBjbHVzdGVyIGNvbW11bmljYXRpb24uIFRoaXMgcHJvdG9jb2xcXG4gIDEyOlxcdFxcdCAgb3JpZ2luYXRlcyBmcm9tIEVyaWNzc29uIHdoZXJlIGl0IGhhcyBiZWVuIHVzZWQgaW4gY2FycmllciBncmFkZVxcbiAgMTM6XFx0XFx0ICBjbHVzdGVyIGFwcGxpY2F0aW9ucyBmb3IgbWFueSB5ZWFycy5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBUSVBDLCBzZWUgaHR0cDovL3RpcGMuc291cmNlZm9yZ2UubmV0LlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIFRoaXMgcHJvdG9jb2wgc3VwcG9ydCBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSAoID0gY29kZSB3aGljaFxcbiAgMTg6XFx0XFx0ICBjYW4gYmUgaW5zZXJ0ZWQgaW4gYW5kIHJlbW92ZWQgZnJvbSB0aGUgcnVubmluZyBrZXJuZWwgd2hlbmV2ZXIgeW91XFxuICAxOTpcXHRcXHQgIHdhbnQpLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRpcGMuIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXRcXG4gIDIwOlxcdFxcdCAgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmUgYW5kIHJlYWQgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy5yc3RcXHUwMDNlLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHQgIElmIGluIGRvdWJ0LCBzYXkgTi5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0Y29uZmlnIFRJUENfTUVESUFfSUJcXG4gIDI1OlxcdFxcdGJvb2wgXFxcIkluZmluaUJhbmQgbWVkaWEgdHlwZSBzdXBwb3J0XFxcIlxcbiAgMjY6XFx0XFx0ZGVwZW5kcyBvbiBUSVBDIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkRfSVBPSUJcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGVuYWJsZSBzdXBwb3J0IGZvciBydW5uaW5nIFRJUEMgb25cXG4gIDI5OlxcdFxcdCAgSVAtb3Zlci1JbmZpbmlCYW5kIGRldmljZXMuXFxuICAzMDpcXHRjb25maWcgVElQQ19NRURJQV9VRFBcXG4gIDMxOlxcdFxcdGJvb2wgXFxcIklQL1VEUCBtZWRpYSB0eXBlIHN1cHBvcnRcXFwiXFxuICAzMjpcXHRcXHRkZXBlbmRzIG9uIFRJUENcXG4gIDMzOlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAgMzQ6XFx0XFx0ZGVmYXVsdCB5XFxuICAzNTpcXHRcXHRoZWxwXFxuICAzNjpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBlbmFibGUgc3VwcG9ydCBmb3IgcnVubmluZyBUSVBDIG92ZXIgSVAvVURQXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBUSVBDX0NSWVBUT1xcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiVElQQyBlbmNyeXB0aW9uIHN1cHBvcnRcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIFRJUENcXG4gIDQxOlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDQyOlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICA0MzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgNDQ6XFx0XFx0ZGVmYXVsdCB5XFxuICA0NTpcXHRcXHRoZWxwXFxuICA0NjpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBlbmFibGUgc3VwcG9ydCBmb3IgVElQQyBlbmNyeXB0aW9uLlxcbiAgNDc6XFx0XFx0ICBBbGwgVElQQyBtZXNzYWdlcyB3aWxsIGJlIGVuY3J5cHRlZC9kZWNyeXB0ZWQgYnkgdXNpbmcgdGhlIGN1cnJlbnRseSBtb3N0XFxuICA0ODpcXHRcXHQgIGFkdmFuY2VkIGFsZ29yaXRobTogQUVBRCBBRVMtR0NNIChsaWtlIElQU2VjIG9yIFRMUykgYmVmb3JlIGxlYXZpbmcvXFxuICA0OTpcXHRcXHQgIGVudGVyaW5nIHRoZSBUSVBDIHN0YWNrLlxcbiAgNTA6XFx0XFx0ICBLZXkgc2V0dGluZyBmcm9tIHVzZXItc3BhY2UgaXMgcGVyZm9ybWVkIHZpYSBuZXRsaW5rIGJ5IGEgdXNlciBwcm9ncmFtXFxuICA1MTpcXHRcXHQgIChlLmcuIHRoZSBpcHJvdXRlMiAndGlwYycgdG9vbCkuXFxuICA1MjpcXHRcXG4gIDUzOlxcdGNvbmZpZyBUSVBDX0RJQUdcXG4gIDU0OlxcdFxcdHRyaXN0YXRlIFxcXCJUSVBDOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuICA1NTpcXHRcXHRkZXBlbmRzIG9uIFRJUENcXG4gIDU2OlxcdFxcdGRlZmF1bHQgeVxcbiAgNTc6XFx0XFx0aGVscFxcbiAgNTg6XFx0XFx0U3VwcG9ydCBmb3IgVElQQyBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSBzcyB0b29sLlxcbiAgNTk6XFx0XFx0SWYgdW5zdXJlLCBzYXkgWS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDA6NTkuMjU3NTY1MTAyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc1NDA5MTk3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gYnVpbGRzIHRoZSBwcm90b2NvbCBtZXNzYWdlLCBzbyBsZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYC4gSSdsbCBqdW1wIHJpZ2h0IGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgbGluZXMgMTg4MCB0byAxOTIwIG9mIGBuZXQvdGlwYy9saW5rLmNgLiBUaGF0IGNodW5rIHNob3VsZCBnaXZlIG1lIGEgc29saWQgdmlldyBvZiB0aGUgY29yZSBsb2dpYyBpbnZvbHZlZCBpbiBjb25zdHJ1Y3RpbmcgdGhlIG1lc3NhZ2UuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLi4uIEknbSBsb29raW5nIGZvciB0aGUgbWVhdCBvZiB0aGUgbWVzc2FnZSBhc3NlbWJseSBwcm9jZXNzLCB0aGUgY3JpdGljYWwgc3RlcHMgaXQgdGFrZXMuIEknbSBleHBlY3RpbmcgdG8gc2VlIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbnMsIHBvdGVudGlhbGx5IGJ1ZmZlciBoYW5kbGluZywgYW5kIGRlZmluaXRlbHkgc29tZSBjcnVjaWFsIGFzc2lnbm1lbnRzIHJlbGF0ZWQgdG8gbWVzc2FnZSBmaWVsZHMuIEhvcGVmdWxseSB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowMToxNi43OTg0ODY3ODJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3RpcGMvbGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4ODA6XFx0XFx0XFx0aWYgKGwtXFx1MDAzZXBlZXJfY2FwcyBcXHUwMDI2IFRJUENfTElOS19QUk9UT19TRVFOTylcXG4xODgxOlxcdFxcdFxcdFxcdG1zZ19zZXRfc2Vxbm8oaGRyLCBsLVxcdTAwM2VzbmRfbnh0X3N0YXRlKyspO1xcbjE4ODI6XFx0XFx0XFx0bXNnX3NldF9zZXFfZ2FwKGhkciwgcmN2Z2FwKTtcXG4xODgzOlxcdFxcdFxcdGJjX3JjdmdhcCA9IGxpbmtfYmNfcmN2X2dhcChiY2wpO1xcbjE4ODQ6XFx0XFx0XFx0bXNnX3NldF9iY19nYXAoaGRyLCBiY19yY3ZnYXApO1xcbjE4ODU6XFx0XFx0XFx0bXNnX3NldF9wcm9iZShoZHIsIHByb2JlKTtcXG4xODg2OlxcdFxcdFxcdG1zZ19zZXRfaXNfa2VlcGFsaXZlKGhkciwgcHJvYmUgfHwgcHJvYmVfcmVwbHkpO1xcbjE4ODc6XFx0XFx0XFx0aWYgKGwtXFx1MDAzZXBlZXJfY2FwcyBcXHUwMDI2IFRJUENfR0FQX0FDS19CTE9DSylcXG4xODg4OlxcdFxcdFxcdFxcdGdsZW4gPSB0aXBjX2J1aWxkX2dhcF9hY2tfYmxrcyhsLCBoZHIpO1xcbjE4ODk6XFx0XFx0XFx0dGlwY19tb25fcHJlcChsLVxcdTAwM2VuZXQsIGRhdGEgKyBnbGVuLCBcXHUwMDI2ZGxlbiwgbXN0YXRlLCBsLVxcdTAwM2ViZWFyZXJfaWQpO1xcbjE4OTA6XFx0XFx0XFx0bXNnX3NldF9zaXplKGhkciwgSU5UX0hfU0laRSArIGdsZW4gKyBkbGVuKTtcXG4xODkxOlxcdFxcdFxcdHNrYl90cmltKHNrYiwgSU5UX0hfU0laRSArIGdsZW4gKyBkbGVuKTtcXG4xODkyOlxcdFxcdFxcdGwtXFx1MDAzZXN0YXRzLnNlbnRfc3RhdGVzKys7XFxuMTg5MzpcXHRcXHRcXHRsLVxcdTAwM2VyY3ZfdW5hY2tlZCA9IDA7XFxuMTg5NDpcXHRcXHR9IGVsc2Uge1xcbjE4OTU6XFx0XFx0XFx0LyogUkVTRVRfTVNHIG9yIEFDVElWQVRFX01TRyAqL1xcbjE4OTY6XFx0XFx0XFx0aWYgKG10eXAgPT0gQUNUSVZBVEVfTVNHKSB7XFxuMTg5NzpcXHRcXHRcXHRcXHRtc2dfc2V0X2Rlc3Rfc2Vzc2lvbl92YWxpZChoZHIsIDEpO1xcbjE4OTg6XFx0XFx0XFx0XFx0bXNnX3NldF9kZXN0X3Nlc3Npb24oaGRyLCBsLVxcdTAwM2VwZWVyX3Nlc3Npb24pO1xcbjE4OTk6XFx0XFx0XFx0fVxcbjE5MDA6XFx0XFx0XFx0bXNnX3NldF9tYXhfcGt0KGhkciwgbC1cXHUwMDNlYWR2ZXJ0aXNlZF9tdHUpO1xcbjE5MDE6XFx0XFx0XFx0bWVtY3B5KGRhdGEsIGwtXFx1MDAzZWlmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpO1xcbjE5MDI6XFx0XFx0XFx0bXNnX3NldF9zaXplKGhkciwgSU5UX0hfU0laRSArIFRJUENfTUFYX0lGX05BTUUpO1xcbjE5MDM6XFx0XFx0XFx0c2tiX3RyaW0oc2tiLCBJTlRfSF9TSVpFICsgVElQQ19NQVhfSUZfTkFNRSk7XFxuMTkwNDpcXHRcXHR9XFxuMTkwNTpcXHRcXHRpZiAocHJvYmUpXFxuMTkwNjpcXHRcXHRcXHRsLVxcdTAwM2VzdGF0cy5zZW50X3Byb2JlcysrO1xcbjE5MDc6XFx0XFx0aWYgKHJjdmdhcClcXG4xOTA4OlxcdFxcdFxcdGwtXFx1MDAzZXN0YXRzLnNlbnRfbmFja3MrKztcXG4xOTA5OlxcdFxcdGlmIChiY19yY3ZnYXApXFxuMTkxMDpcXHRcXHRcXHRiY2wtXFx1MDAzZXN0YXRzLnNlbnRfbmFja3MrKztcXG4xOTExOlxcdFxcdHNrYi1cXHUwMDNlcHJpb3JpdHkgPSBUQ19QUklPX0NPTlRST0w7XFxuMTkxMjpcXHRcXHRfX3NrYl9xdWV1ZV90YWlsKHhtaXRxLCBza2IpO1xcbjE5MTM6XFx0XFx0dHJhY2VfdGlwY19wcm90b19idWlsZChza2IsIGZhbHNlLCBsLVxcdTAwM2VuYW1lKTtcXG4xOTE0OlxcdH1cXG4xOTE1OlxcdFxcbjE5MTY6XFx0dm9pZCB0aXBjX2xpbmtfY3JlYXRlX2R1bW15X3RubF9tc2coc3RydWN0IHRpcGNfbGluayAqbCxcXG4xOTE3OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSlcXG4xOTE4OlxcdHtcXG4xOTE5OlxcdFxcdHUzMiBvbm9kZSA9IHRpcGNfb3duX2FkZHIobC1cXHUwMDNlbmV0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDE6MTYuNzk4NzA5MzMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg3MDM5ODY3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUSVBDIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWsgd2l0aGluIHRoZSBUSVBDIHByb3RvY29sLiBQcmV2aW91c2x5LCBgc3RyY3B5YCB3YXMgdXNlZCB0byBjb3B5IHRoZSBpbnRlcmZhY2UgbmFtZSAoYGwtXHUwMDNlaWZfbmFtZWApIGludG8gYSBtZXNzYWdlIGJ1ZmZlci4gVGhlIHByb2JsZW0gd2FzIHRoYXQgaWYgdGhlIGludGVyZmFjZSBuYW1lIHdhcyBzaG9ydGVyIHRoYW4gYFRJUENfTUFYX0lGX05BTUVgLCBgc3RyY3B5YCB3b3VsZG4ndCB6ZXJvLW91dCB0aGUgcmVtYWluaW5nIGJ5dGVzLCBwb3RlbnRpYWxseSBsZWF2aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBtZXNzYWdlLiBUaGUgcGF0Y2ggbm93IHJlcGxhY2VzIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIGluIGB0aXBjX2xpbmtfY3JlYXRlYCBhbmQgYHRpcGNfbGlua19iY19jcmVhdGVgLiBTaW5jZSBgbC1cdTAwM2VpZl9uYW1lYCBpcyAqZWl0aGVyKiB6ZXJvIGluaXRpYWxpemVkIGJ5IGBrY2FsbG9jYC9ga3phbGxvY2AgKm9yKiBwYWRkZWQgdG8gMCBieSBzdHJzY3B5LCB0aGUgc3Vic2VxdWVudCBgbWVtY3B5YCBjb3BpZXMgYSBmdWxseSB6ZXJvLXBhZGRlZCBuYW1lLCBtaXRpZ2F0aW5nIHRoZSBsZWFrLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBhbmQsIHRoZXJlZm9yZSwgd29ydGggZnV6emluZz8gQmFzZWQgb24gbXkgcHJpb3IgZXhwZXJpZW5jZSwgVElQQyBpcyBhIGdvb2QgdGFyZ2V0LiBJdCdzIGEgbmV0d29ya2luZyBwcm90b2NvbCBpbiBgbmV0L3RpcGMvYCwgYW5kLCB5ZXMsIGl0ICpjYW4qIGJlIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkndmUgc2VlbiBTeXprYWxsZXIgdGFyZ2V0IFRJUEMgZnJlcXVlbnRseSB3aXRoIGBzeXpfdGlwY18qYCBjYWxscywgYWxvbmcgd2l0aCB0aGUgc3RhbmRhcmQgc29ja2V0IGFuZCBuZXRsaW5rIG1ldGhvZHMuIEkga25vdyBpdCB3b3JrcyBvdmVyIGxvb3BiYWNrLCBVRFAsIGFuZCBFdGhlcm5ldC4gU28sIGFjY2Vzc2liaWxpdHkgaXNuJ3QgYSBwcm9ibGVtLlxuXG5MZXQgbWUgcXVpY2tseSByZS1yZWFkIHRoZSBpbnN0cnVjdGlvbnMuLi4gT2theSwgY2hlY2tpbmc6IElzIHRoaXMgYSBkb2N1bWVudGF0aW9uIGNoYW5nZT8gTm8uIElzIGl0IGRlY29yYXRpdmUgbGlrZSBsb2dnaW5nIG9yIHRyYWNlcG9pbnRzPyBOby4gQ29uc3RhbnRzIHRoYXQgZG9uJ3QgYWx0ZXIgZXhlY3V0aW9uPyBOb3BlLiBJbXBvc3NpYmxlIGNvZGUgcGF0aHM/IE5vLCB0aGlzIGlzIGtlcm5lbCBjb2RlLiBWZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmU/IE5vcGUuIFRlYXJkb3duIGNhbGxiYWNrcyBvbmx5PyBOby5cblxuVGhpcyBwYXRjaCBtb2RpZmllcyBjb3JlIFRJUEMgbGluayBjcmVhdGlvbiwgc3BlY2lmaWNhbGx5IGB0aXBjX2xpbmtfY3JlYXRlYCwgYHRpcGNfbGlua19iY19jcmVhdGVgLCBhbmQgYWxzbyB0aGUgbWVzc2FnZSBidWlsZGluZyBmdW5jdGlvbi4gTXkgdW5kZXJzdGFuZGluZywgZnJvbSBleHBlcmllbmNlLCBpcyB0aGF0IGB0aXBjX2xpbmtfY3JlYXRlYCBpcyBhbiBBUEkgZW50cnlwb2ludCBvciBoYXMgZXhwb3J0ZWQvY2FsbGVyIGZ1bmN0aW9ucywgYW5kIHRoZSBzYW1lIGlzIHRydWUgZm9yIGB0aXBjX2xpbmtfYmNfY3JlYXRlYCBhbmQgYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgLCB0aGF0IEkgc2hvdWxkIGludmVzdGlnYXRlIHdpdGggbXkgY29kZSBzZWFyY2ggdG9vbHMuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHRvdWNoZXMgcmVhY2hhYmxlLCBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHksIEkgdGhpbmsgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0OTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowMTozNS41MDI2OTkyMjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDU3MDk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX2xpbmtfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2xpbmsuYz00NDc9dTMyIHRpcGNfbGlua19zdGF0ZShzdHJ1Y3QgdGlwY19saW5rICpsKVxcbi0tXFxubmV0L3RpcGMvbGluay5jLTQ1Mi0vKipcXG5uZXQvdGlwYy9saW5rLmM6NDUzOiAqIHRpcGNfbGlua19jcmVhdGUgLSBjcmVhdGUgYSBuZXcgbGlua1xcbm5ldC90aXBjL2xpbmsuYy00NTQtICogQG5ldDogcG9pbnRlciB0byBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtNDc1LSAqL1xcbm5ldC90aXBjL2xpbmsuYzo0NzY6Ym9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCxcXG5uZXQvdGlwYy9saW5rLmMtNDc3LVxcdFxcdCAgICAgIGludCB0b2xlcmFuY2UsIGNoYXIgbmV0X3BsYW5lLCB1MzIgbXR1LCBpbnQgcHJpb3JpdHksXFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9NTUzPWJvb2wgdGlwY19saW5rX2JjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBvd25ub2RlLCB1MzIgcGVlciwgdTggKnBlZXJfaWQsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtNTYxLVxcbm5ldC90aXBjL2xpbmsuYzo1NjI6XFx0aWYgKCF0aXBjX2xpbmtfY3JlYXRlKG5ldCwgXFxcIlxcXCIsIE1BWF9CRUFSRVJTLCAwLCAnWicsIG10dSwgMCwgbWluX3dpbixcXG5uZXQvdGlwYy9saW5rLmMtNTYzLVxcdFxcdFxcdCAgICAgIG1heF93aW4sIDAsIG93bm5vZGUsIHBlZXIsIE5VTEwsIHBlZXJfY2FwcyxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xODMyPXN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTkxNS1cXG5uZXQvdGlwYy9saW5rLmM6MTkxNjp2b2lkIHRpcGNfbGlua19jcmVhdGVfZHVtbXlfdG5sX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLFxcbm5ldC90aXBjL2xpbmsuYy0xOTE3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSlcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0yMTA0PXZvaWQgdGlwY19saW5rX2ZhaWxvdmVyX3ByZXBhcmUoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHRpcGNfbGluayAqdG5sLFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTIxMDgtXFxubmV0L3RpcGMvbGluay5jOjIxMDk6XFx0dGlwY19saW5rX2NyZWF0ZV9kdW1teV90bmxfbXNnKHRubCwgeG1pdHEpO1xcbm5ldC90aXBjL2xpbmsuYy0yMTEwLVxcbi0tXFxubmV0L3RpcGMvbGluay5oPTYzPWVudW0ge1xcbi0tXFxubmV0L3RpcGMvbGluay5oLTczLVxcbm5ldC90aXBjL2xpbmsuaDo3NDpib29sIHRpcGNfbGlua19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppZl9uYW1lLCBpbnQgYmVhcmVyX2lkLFxcbm5ldC90aXBjL2xpbmsuaC03NS1cXHRcXHQgICAgICBpbnQgdG9sZXJhbmNlLCBjaGFyIG5ldF9wbGFuZSwgdTMyIG10dSwgaW50IHByaW9yaXR5LFxcbi0tXFxubmV0L3RpcGMvbGluay5oPTg5PXZvaWQgdGlwY19saW5rX3RubF9wcmVwYXJlKHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCB0aXBjX2xpbmsgKnRubCxcXG5uZXQvdGlwYy9saW5rLmgtOTAtXFx0XFx0XFx0ICAgaW50IG10eXAsIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcXG5uZXQvdGlwYy9saW5rLmg6OTE6dm9pZCB0aXBjX2xpbmtfY3JlYXRlX2R1bW15X3RubF9tc2coc3RydWN0IHRpcGNfbGluayAqdG5sLFxcbm5ldC90aXBjL2xpbmsuaC05Mi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpO1xcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTExNzM9dm9pZCB0aXBjX25vZGVfY2hlY2tfZGVzdChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyLFxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTEyODMtXFx0XFx0c2Vzc2lvbiA9IGdldF9yYW5kb21fdTE2KCk7XFxubmV0L3RpcGMvbm9kZS5jOjEyODQ6XFx0XFx0aWYgKCF0aXBjX2xpbmtfY3JlYXRlKG5ldCwgaWZfbmFtZSwgYi1cXHUwMDNlaWRlbnRpdHksIGItXFx1MDAzZXRvbGVyYW5jZSxcXG5uZXQvdGlwYy9ub2RlLmMtMTI4NS1cXHRcXHRcXHRcXHQgICAgICBiLVxcdTAwM2VuZXRfcGxhbmUsIGItXFx1MDAzZW10dSwgYi1cXHUwMDNlcHJpb3JpdHksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAxOjM1LjY3MzI3NDk5M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzI4NTM4MzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYHRpcGNfbGlua19iY19jcmVhdGVgIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgZmlndXJlIG91dCB3aG8ncyBjYWxsaW5nIGB0aXBjX2xpbmtfYmNfY3JlYXRlYC5cIiBUaGF0IGZ1bmN0aW9uIGlzIGtleSB0byBob3cgdGhpcyBwYXJ0IG9mIHRoZSBzeXN0ZW0gd29ya3MsIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyB1c2FnZSBpcyBjcml0aWNhbCBmb3IgYW55IGRlYnVnZ2luZywgb3B0aW1pemF0aW9uLCBvciBpbXBhY3QgYXNzZXNzbWVudCBJIG1pZ2h0IG5lZWQgdG8gZG8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHRzLiBBIGRlZXAgZGl2ZSBpcyB0aGUgb25seSB3YXkgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg3NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAxOjQwLjAwMTgxNTYzMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExODI5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19saW5rX2JjX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9iY2FzdC5jPTY5NT1pbnQgdGlwY19iY2FzdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC90aXBjL2JjYXN0LmMtNzA2LVxcbm5ldC90aXBjL2JjYXN0LmM6NzA3OlxcdGlmICghdGlwY19saW5rX2JjX2NyZWF0ZShuZXQsIDAsIDAsIE5VTEwsXFxubmV0L3RpcGMvYmNhc3QuYy03MDgtXFx0XFx0XFx0XFx0IG9uZV9wYWdlX210dSxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz00NzY9Ym9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy01MzYtLyoqXFxubmV0L3RpcGMvbGluay5jOjUzNzogKiB0aXBjX2xpbmtfYmNfY3JlYXRlIC0gY3JlYXRlIG5ldyBsaW5rIHRvIGJlIHVzZWQgZm9yIGJyb2FkY2FzdFxcbm5ldC90aXBjL2xpbmsuYy01MzgtICogQG5ldDogcG9pbnRlciB0byBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtNTUyLSAqL1xcbm5ldC90aXBjL2xpbmsuYzo1NTM6Ym9vbCB0aXBjX2xpbmtfYmNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG93bm5vZGUsIHUzMiBwZWVyLCB1OCAqcGVlcl9pZCxcXG5uZXQvdGlwYy9saW5rLmMtNTU0LVxcdFxcdFxcdCBpbnQgbXR1LCB1MzIgbWluX3dpbiwgdTMyIG1heF93aW4sIHUxNiBwZWVyX2NhcHMsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmg9NzQ9Ym9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCxcXG4tLVxcbm5ldC90aXBjL2xpbmsuaC04Mi1cXHRcXHQgICAgICBzdHJ1Y3QgdGlwY19saW5rICoqbGluayk7XFxubmV0L3RpcGMvbGluay5oOjgzOmJvb2wgdGlwY19saW5rX2JjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBvd25ub2RlLCB1MzIgcGVlciwgdTggKnBlZXJfaWQsXFxubmV0L3RpcGMvbGluay5oLTg0LVxcdFxcdFxcdCBpbnQgbXR1LCB1MzIgbWluX3dpbiwgdTMyIG1heF93aW4sIHUxNiBwZWVyX2NhcHMsXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9NDY4PXN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkciwgdTggKnBlZXJfaWQsXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtNDg4LVxcdFxcdHRpcGNfbm9kZV93cml0ZV9sb2NrKG4pO1xcbm5ldC90aXBjL25vZGUuYzo0ODk6XFx0XFx0aWYgKCF0aXBjX2xpbmtfYmNfY3JlYXRlKG5ldCwgdGlwY19vd25fYWRkcihuZXQpLCBhZGRyLCBwZWVyX2lkLCBVMTZfTUFYLFxcbm5ldC90aXBjL25vZGUuYy00OTAtXFx0XFx0XFx0XFx0XFx0IHRpcGNfbGlua19taW5fd2luKHNuZF9sKSwgdGlwY19saW5rX21heF93aW4oc25kX2wpLFxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTU3OC1cXHRpZiAoIXByZWxpbWluYXJ5IFxcdTAwMjZcXHUwMDI2XFxubmV0L3RpcGMvbm9kZS5jOjU3OTpcXHQgICAgIXRpcGNfbGlua19iY19jcmVhdGUobmV0LCB0aXBjX293bl9hZGRyKG5ldCksIGFkZHIsIHBlZXJfaWQsIFUxNl9NQVgsXFxubmV0L3RpcGMvbm9kZS5jLTU4MC1cXHRcXHRcXHRcXHQgdGlwY19saW5rX21pbl93aW4oc25kX2wpLCB0aXBjX2xpbmtfbWF4X3dpbihzbmRfbCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAxOjQwLjA1MzAwNDY0MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDA5MDgxOTM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYCBDYWxsZXJzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZ2AgZnVuY3Rpb24gY2FsbHMuIEl0J3MgdGltZSB0byBmaWd1cmUgb3V0IHdoYXQncyB1c2luZyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gd2l0aGluIHRoZSBsYXJnZXIgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXItUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBmcmFtZXdvcmsuIFRoZSBzcGVjaWZpY3Mgd2lsbCBkZXBlbmQgb24gdGhlIGxhcmdlciBjb250ZXh0IG9mIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBkb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gY3JlYXRpbmcgb3IgY29uc3RydWN0aW5nIHByb3RvY29sIG1lc3NhZ2VzIGZvciBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gd2l0aGluIHRoZSBjbHVzdGVyLiBGcm9tIHRoYXQgcG9pbnQgSSBjYW4gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGFuZCBwb3NzaWJsZSBlZmZlY3RzIGZvciBhbnkgY2hhbmdlcyBJIHdvdWxkIG1ha2UuIERlcGVuZGluZyBvbiB3aGF0IEkgbGVhcm4sIEkgbWF5IGFsc28gZGVjaWRlIHRvIHJlc2VhcmNoIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uIE5vdywgbGV0J3MgZ2V0IGRvd24gdG8gaXQsIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgxNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAxOjU0LjE0MzgyNjQ5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU1MzEyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19saW5rX2J1aWxkX3Byb3RvX21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9saW5rLmM9MjQ0PXN0YXRpYyBpbnQgdGlwY19saW5rX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC90aXBjL2xpbmsuYy0yNDUtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcXG5uZXQvdGlwYy9saW5rLmM6MjQ2OnN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsXFxubmV0L3RpcGMvbGluay5jLTI0Ny1cXHRcXHRcXHRcXHQgICAgICBib29sIHByb2JlX3JlcGx5LCB1MTYgcmN2Z2FwLFxcbi0tXFxubmV0L3RpcGMvbGluay5jPTgxNj1pbnQgdGlwY19saW5rX3RpbWVvdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtODY5LVxcdGlmIChzdGF0ZSB8fCBwcm9iZSB8fCBzZXR1cClcXG5uZXQvdGlwYy9saW5rLmM6ODcwOlxcdFxcdHRpcGNfbGlua19idWlsZF9wcm90b19tc2cobCwgbXR5cCwgcHJvYmUsIDAsIDAsIDAsIDAsIHhtaXRxKTtcXG5uZXQvdGlwYy9saW5rLmMtODcxLVxcbi0tXFxubmV0L3RpcGMvbGluay5jPTE2ODg9aW50IHRpcGNfbGlua19idWlsZF9zdGF0ZV9tc2coc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTcwNS1cXHRsLVxcdTAwM2VzdGF0cy5zZW50X2Fja3MrKztcXG5uZXQvdGlwYy9saW5rLmM6MTcwNjpcXHR0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKGwsIFNUQVRFX01TRywgMCwgMCwgMCwgMCwgMCwgeG1pdHEpO1xcbm5ldC90aXBjL2xpbmsuYy0xNzA3LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTE3MTI9dm9pZCB0aXBjX2xpbmtfYnVpbGRfcmVzZXRfbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxcbi0tXFxubmV0L3RpcGMvbGluay5jLTE3MTktXFxubmV0L3RpcGMvbGluay5jOjE3MjA6XFx0dGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhsLCBtdHlwLCAwLCAwLCAwLCAwLCAwLCB4bWl0cSk7XFxubmV0L3RpcGMvbGluay5jLTE3MjEtXFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9MTczMj1zdGF0aWMgaW50IHRpcGNfbGlua19idWlsZF9uYWNrX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTE3NTAtXFxubmV0L3RpcGMvbGluay5jOjE3NTE6XFx0XFx0dGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhsLCBTVEFURV9NU0csIDAsIDAsXFxubmV0L3RpcGMvbGluay5jLTE3NTItXFx0XFx0XFx0XFx0XFx0ICByY3ZnYXAsIDAsIDAsIHhtaXRxKTtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xNzYyPWludCB0aXBjX2xpbmtfcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTgzMS1cXG5uZXQvdGlwYy9saW5rLmM6MTgzMjpzdGF0aWMgdm9pZCB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsIGludCBtdHlwLCBib29sIHByb2JlLFxcbm5ldC90aXBjL2xpbmsuYy0xODMzLVxcdFxcdFxcdFxcdCAgICAgIGJvb2wgcHJvYmVfcmVwbHksIHUxNiByY3ZnYXAsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9MjE3ND1zdGF0aWMgaW50IHRpcGNfbGlua19wcm90b19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0yMzEwLVxcdFxcdGlmIChyY3ZnYXAgfHwgcmVwbHkpXFxubmV0L3RpcGMvbGluay5jOjIzMTE6XFx0XFx0XFx0dGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhsLCBTVEFURV9NU0csIDAsIHJlcGx5LFxcbm5ldC90aXBjL2xpbmsuYy0yMzEyLVxcdFxcdFxcdFxcdFxcdFxcdCAgcmN2Z2FwLCAwLCAwLCB4bWl0cSk7XFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9Mjg2Mj12b2lkIHRpcGNfbGlua19zZXRfdG9sZXJhbmNlKHN0cnVjdCB0aXBjX2xpbmsgKmwsIHUzMiB0b2wsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMjg2OC1cXHRpZiAodGlwY19saW5rX2lzX3VwKGwpKVxcbm5ldC90aXBjL2xpbmsuYzoyODY5OlxcdFxcdHRpcGNfbGlua19idWlsZF9wcm90b19tc2cobCwgU1RBVEVfTVNHLCAwLCAwLCAwLCB0b2wsIDAsIHhtaXRxKTtcXG5uZXQvdGlwYy9saW5rLmMtMjg3MC19XFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9Mjg3Mj12b2lkIHRpcGNfbGlua19zZXRfcHJpbyhzdHJ1Y3QgdGlwY19saW5rICpsLCB1MzIgcHJpbyxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0yODc1LVxcdGwtXFx1MDAzZXByaW9yaXR5ID0gcHJpbztcXG5uZXQvdGlwYy9saW5rLmM6Mjg3NjpcXHR0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKGwsIFNUQVRFX01TRywgMCwgMCwgMCwgMCwgcHJpbywgeG1pdHEpO1xcbm5ldC90aXBjL2xpbmsuYy0yODc3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDE6NTQuMjA5MzYwMzk2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3OTk0NTkyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVElQQyBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiBjb25maWd1cmluZyBUSVBDLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBjb25zdWx0IHRoZSBLY29uZmlnIGZpbGVzLCBzbyBJJ20gaGVhZGluZyBzdHJhaWdodCB0byBgbmV0L3RpcGMvS2NvbmZpZ2AuIFJpZ2h0LCBoZXJlIHdlIHNlZSBgVElQQ2AgaXMgZGVwZW5kZW50IG9uIGBJTkVUYC4gT2theSwgdGhhdCdzIG5vdCB1bmV4cGVjdGVkLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyBUSVBDIGlzIGFjdHVhbGx5ICpidWlsdCogd2l0aGluIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byBjaGVjayBlaXRoZXIgdGhlIG1haW4gYG5ldC9LY29uZmlnYCBmaWxlLCBvciBwZXJoYXBzIHRoZSBgbmV0L3RpcGMvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGFueSBwb3RlbnRpYWwgYnVpbGQgZmxhZ3Mgb3IgbW9kdWxlcyB0aGF0IGNvbWUgaW50byBwbGF5LiBVbmRlcnN0YW5kaW5nIHRob3NlIGRldGFpbHMgd2lsbCBlbnN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gaXMgY29tcGxldGUgYW5kIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjY1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDI6MDAuMDA4ODIyNTQzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IFRJUEMgbGF5ZXJcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX1RJUEMpIDo9IHRpcGMub1xcbiAgIDc6XFx0XFxuICAgODpcXHR0aXBjLXlcXHQrPSBhZGRyLm8gYmNhc3QubyBiZWFyZXIubyBcXFxcXFxuICAgOTpcXHRcXHQgICBjb3JlLm8gbGluay5vIGRpc2NvdmVyLm8gbXNnLm8gIFxcXFxcXG4gIDEwOlxcdFxcdCAgIG5hbWVfZGlzdHIubyAgc3Vic2NyLm8gbW9uaXRvci5vIG5hbWVfdGFibGUubyBuZXQubyAgXFxcXFxcbiAgMTE6XFx0XFx0ICAgbmV0bGluay5vIG5ldGxpbmtfY29tcGF0Lm8gbm9kZS5vIHNvY2tldC5vIGV0aF9tZWRpYS5vIFxcXFxcXG4gIDEyOlxcdFxcdCAgIHRvcHNydi5vIGdyb3VwLm8gdHJhY2Uub1xcbiAgMTM6XFx0XFxuICAxNDpcXHRDRkxBR1NfdHJhY2UubyArPSAtSSQoc3JjKVxcbiAgMTU6XFx0XFxuICAxNjpcXHR0aXBjLSQoQ09ORklHX1RJUENfTUVESUFfVURQKVxcdCs9IHVkcF9tZWRpYS5vXFxuICAxNzpcXHR0aXBjLSQoQ09ORklHX1RJUENfTUVESUFfSUIpXFx0Kz0gaWJfbWVkaWEub1xcbiAgMTg6XFx0dGlwYy0kKENPTkZJR19TWVNDVEwpXFx0XFx0Kz0gc3lzY3RsLm9cXG4gIDE5OlxcdHRpcGMtJChDT05GSUdfVElQQ19DUllQVE8pXFx0Kz0gY3J5cHRvLm9cXG4gIDIwOlxcdFxcbiAgMjE6XFx0b2JqLSQoQ09ORklHX1RJUENfRElBRylcXHQrPSB0aXBjX2RpYWcub1xcbiAgMjI6XFx0dGlwY19kaWFnLXlcXHQrPSBkaWFnLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDI6MDAuMDA4ODgxNTMzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNTk4NzA2ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRJUEMgTGluayBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUga2V5IGZ1bmN0aW9uIHN5bWJvbHMgYWZmZWN0ZWQuIEkndmUgbm90ZWQgYSBmZXcgbm9uLXN0YXRpYyBvbmVzIHJlbGF0ZWQgdG8gbGluayBjcmVhdGlvbiBhbmQgbWVzc2FnaW5nOiBgdGlwY19saW5rX2NyZWF0ZWAsIGB0aXBjX2xpbmtfYmNfY3JlYXRlYCwgYHRpcGNfbGlua19idWlsZF9yZXNldF9tc2dgLCBhbmQgYHRpcGNfbGlua190aW1lb3V0YC4gVGhlbiB0aGVyZSdzIGB0aXBjX2xpbmtfcHJvdG9fcmN2YCB3aGljaCBpcyBzdGF0aWMsIGJ1dCBjbG9zZWx5IGxpbmtlZCB0byB0aGUgbm9uLXN0YXRpYyBgdGlwY19saW5rX3JjdmAsIHNvIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aGF0LiBBZnRlciB0aGF0IEkgaGF2ZSB0byBjb25maXJtIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGxpbmsgY3JlYXRpb24vbWVzc2FnZSBmdW5jdGlvbnM6IGB0aXBjX25vZGVfY2hlY2tfZGVzdGAsIGB0aXBjX2xpbmtfcmN2YC4gVGhpcyBsb29rcyBwcmV0dHkgY29tcHJlaGVuc2l2ZSBpbiB0ZXJtcyBvZiB0aGUgYXJlYXMgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5UaGUgbWFpbiBzeW1ib2xzIEkgbmVlZCB0byBwcmlvcml0aXplIGFyZTogYHRpcGNfbGlua19jcmVhdGVgLCBgdGlwY19saW5rX2JjX2NyZWF0ZWAsIGFuZCBgdGlwY19saW5rX2J1aWxkX3Jlc2V0X21zZ2AuIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIHNjcnV0aW5pemUgdGhlaXIgaW50ZXJhY3Rpb25zIGNhcmVmdWxseS5cblxuTmV4dCwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBUSVBDYCBpcyB0aGUgcHJpbWFyeSBmZWF0dXJlIG9mIGludGVyZXN0LCBhbmQgb2YgY291cnNlLCBpdCBkZXBlbmRzIG9uIGBJTkVUYC4gSSdsbCBhbHNvIGdsYW5jZSB0aHJvdWdoIGBuZXQvdGlwYy9LY29uZmlnYCBhbmQgYG5ldC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50OyBJIHNhdyB0aGF0IGBJTkVUYCBpcyBzdGFuZGFyZCBpbiBgbmV0L2lwdjRgLCBhbmQgYFRJUENgIGlzIHRyaXN0YXRlIGFuZCBkZXBlbmRzIG9uIGBJTkVUYC5cblxuTm93LCBsZXQncyByZS1leGFtaW5lIHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzLiBJIHNlZSB0aGV5J3ZlIHJlcGxhY2VkIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHdoZW4gY29weWluZyBpbnRlcmZhY2UvbGluayBuYW1lcyDigJMgYSBnb29kIG1vdmUgZm9yIGJ1ZmZlciBvdmVyZmxvdyBwcmV2ZW50aW9uLiBBbHNvLCBgc3RyY3B5YCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBtZW1jcHlgIHdoZW4gY29uc3RydWN0aW5nIHByb3RvY29sIG1lc3NhZ2VzLCBzcGVjaWZpY2FsbHkgdG8gYWRkcmVzcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciBsZWFrcyBvZiB1bmluaXRpYWxpemVkIGRhdGEgd2l0aGluIHRoZSBgc2tiYC4gVGhhdCdzIGEgc29saWQgZGVmZW5zZSBhZ2FpbnN0IGRhdGEgbGVha3MhXG5cbkZpbmFsbHksIEkgaGF2ZSB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIHJlbGV2YW50IHRvIGZ1enppbmcuIEdpdmVuIHRoYXQgdGhpcyBpcyB0aGUgVElQQyBuZXR3b3JrIHByb3RvY29sIHN0YWNrLCBJJ20gY29uZmlkZW50IHRoYXQgaXQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIEdDRSwgbWFraW5nIGl0IGFwcHJvcHJpYXRlIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgYHN0cmNweWAgYW5kIGBtZW1jcHlgIGNoYW5nZXMsIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5BbHJpZ2h0LCBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIEFsbCB0aGUgYmFzZXMgYXJlIGNvdmVyZWQsIGFuZCB0aGUgcmVhc29uaW5nIGlzIHNvdW5kLiBOb3cgaXQncyB0aW1lIHRvIGluZm9ybSB0aGUgdGVhbSBieSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODg0LCJPdXRwdXRUb2tlbnMiOjExNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAyOjEyLjYwNzU5NDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzExNjQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfbGlua19jcmVhdGVcIixcbiAgICBcInRpcGNfbGlua19iY19jcmVhdGVcIixcbiAgICBcInRpcGNfbGlua19idWlsZF9yZXNldF9tc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUSVBDIGxpbmsgaW5pdGlhbGl6YXRpb24gYW5kIHByb3RvY29sIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljIGluIG5ldC90aXBjL2xpbmsuYyAodXNpbmcgc3Ryc2NweSBhbmQgYm91bmRlZCBtZW1jcHkgaW5zdGVhZCBvZiBzdHJjcHkpLiBUSVBDIGlzIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX2xpbmtfY3JlYXRlXCIsXG4gICAgXCJ0aXBjX2xpbmtfYmNfY3JlYXRlXCIsXG4gICAgXCJ0aXBjX2xpbmtfYnVpbGRfcmVzZXRfbXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgVElQQyBsaW5rIGluaXRpYWxpemF0aW9uIGFuZCBwcm90b2NvbCBtZXNzYWdlIGNvbnN0cnVjdGlvbiBsb2dpYyBpbiBuZXQvdGlwYy9saW5rLmMgKHVzaW5nIHN0cnNjcHkgYW5kIGJvdW5kZWQgbWVtY3B5IGluc3RlYWQgb2Ygc3RyY3B5KS4gVElQQyBpcyBmdWxseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDI6MTIuNjg0NzE3NzFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDgyMjQ2NzgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAyOjEyLjY4NTE3NTk3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk0ODIyMDA0MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyB1bnNhZmUgYHN0cmNweWAgY2FsbHMgd2l0aCBgc3Ryc2NweWAgaW4gYHRpcGNfbGlua19jcmVhdGVgIGFuZCBgdGlwY19saW5rX2JjX2NyZWF0ZWAsIGFuZCBjaGFuZ2VzIGBzdHJjcHlgIHRvIGBtZW1jcHkoZGF0YSwgbC1cXHUwMDNlaWZfbmFtZSwgVElQQ19NQVhfSUZfTkFNRSlgIGluIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYC5cXG5cXG5UaGUgYHN0cnVjdCB0aXBjX2xpbmtgIGluc3RhbmNlIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKCpsLCBHRlBfQVRPTUlDKWAsIGVuc3VyaW5nIHRoYXQgYWxsIGZpZWxkcyBpbmNsdWRpbmcgYGwtXFx1MDAzZWlmX25hbWVgIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBDb3B5aW5nIGBUSVBDX01BWF9JRl9OQU1FYCBieXRlcyBmcm9tIGBsLVxcdTAwM2VpZl9uYW1lYCBpbnRvIHRoZSBwYWNrZXQgcGF5bG9hZCBgZGF0YWAgcmVhZHMgb25seSBmdWxseSBpbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgY29uZGl0aW9uYWwgYnJhbmNoaW5nLCBvciB1c2VyLXNwYWNlIGluZm8gbGVha3MuXFxuXFxuU3RhbmRhcmQgS0FTQU4gYW5kIGNvbXBpbGVyIGZvcnRpZmljYXRpb25zIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIG9yIGJ1ZmZlciBvdmVyZmxvdyBidWdzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YTFiZmNlMDNlYzhiNTkzNWQzNGFlYjg0OGY2ODFmZmI5ZDU3NzliXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTM6MDA6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmMgYi9uZXQvdGlwYy9saW5rLmNcbmluZGV4IDQ5ZGZjMDk4ZDg5YjIuLjY0MjdjNjlmODkyOTQgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9saW5rLmNcbisrKyBiL25ldC90aXBjL2xpbmsuY1xuQEAgLTUwNCw3ICs1MDQsNyBAQCBib29sIHRpcGNfbGlua19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppZl9uYW1lLCBpbnQgYmVhcmVyX2lkLFxuIFx0c25wcmludGYobC1cdTAwM2VuYW1lLCBzaXplb2YobC1cdTAwM2VuYW1lKSwgXCIlczolcy0lczp1bmtub3duXCIsXG4gXHRcdCBzZWxmX3N0ciwgaWZfbmFtZSwgcGVlcl9zdHIpO1xuIFxuLVx0c3RyY3B5KGwtXHUwMDNlaWZfbmFtZSwgaWZfbmFtZSk7XG4rXHRzdHJzY3B5KGwtXHUwMDNlaWZfbmFtZSwgaWZfbmFtZSk7XG4gXHRsLVx1MDAzZWFkZHIgPSBwZWVyO1xuIFx0bC1cdTAwM2VwZWVyX2NhcHMgPSBwZWVyX2NhcHM7XG4gXHRsLVx1MDAzZW5ldCA9IG5ldDtcbkBAIC01NzQsNyArNTc0LDcgQEAgYm9vbCB0aXBjX2xpbmtfYmNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG93bm5vZGUsIHUzMiBwZWVyLCB1OCAqcGVlcl9pZCxcbiBcdFx0c25wcmludGYobC1cdTAwM2VuYW1lLCBzaXplb2YobC1cdTAwM2VuYW1lKSwgXCIlczolc1wiLCB0aXBjX2JjbGlua19uYW1lLFxuIFx0XHRcdCBwZWVyX3N0cik7XG4gXHR9IGVsc2Uge1xuLVx0XHRzdHJjcHkobC1cdTAwM2VuYW1lLCB0aXBjX2JjbGlua19uYW1lKTtcbitcdFx0c3Ryc2NweShsLVx1MDAzZW5hbWUsIHRpcGNfYmNsaW5rX25hbWUpO1xuIFx0fVxuIFx0dHJhY2VfdGlwY19saW5rX3Jlc2V0KGwsIFRJUENfRFVNUF9BTEwsIFwiYmNsaW5rIGNyZWF0ZWQhXCIpO1xuIFx0dGlwY19saW5rX3Jlc2V0KGwpO1xuQEAgLTE4OTgsNyArMTg5OCw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsXG4gXHRcdFx0bXNnX3NldF9kZXN0X3Nlc3Npb24oaGRyLCBsLVx1MDAzZXBlZXJfc2Vzc2lvbik7XG4gXHRcdH1cbiBcdFx0bXNnX3NldF9tYXhfcGt0KGhkciwgbC1cdTAwM2VhZHZlcnRpc2VkX210dSk7XG4tXHRcdHN0cmNweShkYXRhLCBsLVx1MDAzZWlmX25hbWUpO1xuK1x0XHRtZW1jcHkoZGF0YSwgbC1cdTAwM2VpZl9uYW1lLCBUSVBDX01BWF9JRl9OQU1FKTtcbiBcdFx0bXNnX3NldF9zaXplKGhkciwgSU5UX0hfU0laRSArIFRJUENfTUFYX0lGX05BTUUpO1xuIFx0XHRza2JfdHJpbShza2IsIElOVF9IX1NJWkUgKyBUSVBDX01BWF9JRl9OQU1FKTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAyOjEyLjY4NTE3Njg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1Njc2NzkwMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgSnVzdGlmaWNhdGlvbjogQSBRdWljayBDb2RlIFF1YWxpdHkgQ2hlY2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIFRoZSB0YXNrIGlzIHRvIGRlY2lkZSBpZiB0aGlzIGBuZXQvdGlwYy9saW5rLmNgIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgYmV5b25kIHdoYXQgS0FTQU4gYWxyZWFkeSBwcm92aWRlcy4gVGhpcyBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkLCBsb3ctc3Rha2VzIGNvZGUgcXVhbGl0eSBhc3Nlc3NtZW50IOKAkyBwdXJlbHkgZGVmZW5zaXZlLiBNeSBpbml0aWFsIGNsYXNzaWZpY2F0aW9uIGlzIFwiYmVuaWduXCIgYW5kIFwibm9uZVwiIGZvciBzZXZlcml0eTsgaXQncyBzYWZlIHRvIHByb2NlZWQuXG5cbkZpcnN0LCBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBkaWZmLiBPa2F5LCBzbyB3ZSdyZSByZXBsYWNpbmcgYSBjb3VwbGUgb2YgYHN0cmNweWAgY2FsbHMgd2l0aCBgc3Ryc2NweWAgYW5kIGEgYHN0cmNweWAgaW4gYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgIHdpdGggYG1lbWNweWAuIFRoaXMgaW1tZWRpYXRlbHkgc2NyZWFtcyBcImJ1ZmZlciBvdmVyZmxvdyBwcmV2ZW50aW9uLFwiIHdoaWNoIGlzIGEgZ29vZCB0aGluZy4gVGhlIHVzZSBvZiBgc3Ryc2NweWAgbWFrZXMgbWUgc3VzcGVjdCB0aGF0IHRoZXkgYXJlIGd1YXJkaW5nIGFnYWluc3QgYnVmZmVyIG92ZXJydW5zIHdoZW4gY29weWluZyB0aGUgaW50ZXJmYWNlIG5hbWUsIGxpa2VseSBmcm9tIHVzZXItY29udHJvbGxlZCBpbnB1dC4gTWFrZXMgc2Vuc2UuIEJ1dCBpcyBpdCAqZW5vdWdoKj9cblxuTm93LCBiZWZvcmUgSSBqdW1wIHRvIGEgY29uY2x1c2lvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gTGV0IG1lIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBhcm91bmQgYHRpcGNfbGlua19jcmVhdGVgIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB0aXBjX2xpbmtgLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgc2l6ZSBvZiBgbC1cdTAwM2VpZl9uYW1lYCB0byBiZSBjZXJ0YWluIHRoZSBgc3Ryc2NweWAgY2FsbHMgYXJlIHN1ZmZpY2llbnQuIEFsc28sIG5lZWQgdG8gZW5zdXJlIHRoZSB1c2Ugb2YgYG1lbWNweWAgaW4gYHRpcGNfbGlua19idWlsZF9wcm90b19tc2dgIGlzIGNvcnJlY3QsIGFuZCBub3QgdnVsbmVyYWJsZSB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gSSdsbCB1c2UgYSBmaWxlIHJlYWRlciB0byBkbyBzby4gSSdsbCBhbHNvIHVzZSBpdCB0byBjaGVjayB0aGUgb3RoZXIgcGxhY2VzIHdoZXJlIHRoZSBzdHJ1Y3QgaXMgdXNlZC5cblxuSSB3aWxsIHVzZSB0aGF0IGluZm9ybWF0aW9uIHRvIGFzc2VzcyB0aGUgcmlza3MgZnJvbSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCB0byBkZWNpZGUgaWYgS01TQU4gaXMgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDI6NDguMzYxOTcxMTE3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc0NTEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGlwY19saW5rIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2xpbmsuYz01MT1zdHJ1Y3QgdGlwY19zdGF0cyB7XFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTM2LSAqL1xcbm5ldC90aXBjL2xpbmsuYzoxMzc6c3RydWN0IHRpcGNfbGluayB7XFxubmV0L3RpcGMvbGluay5jLTEzOC1cXHR1MzIgYWRkcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDI6NDguNDEyNzIzMDc2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MTQ4NzkyNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBUSVBDIExpbmsgQ29kZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBgbmV0L3RpcGMvbGluay5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gYSBmZXcgc3BlY2lmaWMgYXJlYXMgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nLiBJJ20gZ29pbmcgdG8ganVtcCBhcm91bmQsIHN0YXJ0aW5nIHdpdGggbGluZSAxMzcuIEkgd2FudCB0byBzZWUgaG93IHRoZXkncmUgaGFuZGxpbmcgdGhlIGZ1bmRhbWVudGFsIHNldHVwIG9yIGluaXRpYWxpemF0aW9uIG9mIGEgVElQQyBsaW5rLiBUaGVuLCBJJ2xsIGdvIGZ1cnRoZXIgZG93biB0byBsaW5lIDUwNC4gSSdtIHN1c3BlY3RpbmcgdGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgbG9naWMgZm9yIGhhbmRsaW5nIGNvbm5lY3Rpb24gc3RhdGUsIG1heWJlIGR1cmluZyBhIHJldHJhbnNtaXQgb3Igc29tZSBvdGhlciBpc3N1ZS4gQWZ0ZXIgdGhhdCwgSSdsbCBsZWFwIHRvIGxpbmUgNTc0IC0gSSBiZXQgdGhhdCdzIHdoZXJlIHRoZXkgbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgYSBsaW5rIG9yIG1heWJlIHRoZSB0ZWFyZG93biBwcm9jZWR1cmUuIExhc3RseSwgSSdsbCB6b29tIHdheSBkb3duIHRvIGxpbmUgMTg5OC4gVGhhdCdzIGdldHRpbmcgcHJldHR5IGRlZXAgaW50byB0aGUgY29kZSwgc28gdGhhdCBoYXMgdG8gYmUgZWl0aGVyIGFuIGVycm9yIGhhbmRsaW5nIHByb2NlZHVyZSBvciBzb21lIHJlYWxseSBsb3ctbGV2ZWwgc3R1ZmYgcmVnYXJkaW5nIHRoZSB0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uIG9mIGZyYW1lcy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhleSBkZWFsIHdpdGggdGhlIHNwZWNpZmljIG5pdHR5LWdyaXR0eSBvZiB0aGUgbGluayBsYXllci4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVzZSBzZWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAzOjEzLjU2MTUxODY2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGlwYy9saW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM3LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTM3OlxcdHN0cnVjdCB0aXBjX2xpbmsge1xcbiAxMzg6XFx0XFx0dTMyIGFkZHI7XFxuIDEzOTpcXHRcXHRjaGFyIG5hbWVbVElQQ19NQVhfTElOS19OQU1FXTtcXG4gMTQwOlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0LyogTWFuYWdlbWVudCBhbmQgbGluayBzdXBlcnZpc2lvbiBkYXRhICovXFxuIDE0MzpcXHRcXHR1MTYgcGVlcl9zZXNzaW9uO1xcbiAxNDQ6XFx0XFx0dTE2IHNlc3Npb247XFxuIDE0NTpcXHRcXHR1MTYgc25kX254dF9zdGF0ZTtcXG4gMTQ2OlxcdFxcdHUxNiByY3Zfbnh0X3N0YXRlO1xcbiAxNDc6XFx0XFx0dTMyIHBlZXJfYmVhcmVyX2lkO1xcbiAxNDg6XFx0XFx0dTMyIGJlYXJlcl9pZDtcXG4gMTQ5OlxcdFxcdHUzMiB0b2xlcmFuY2U7XFxuIDE1MDpcXHRcXHR1MzIgYWJvcnRfbGltaXQ7XFxuIDE1MTpcXHRcXHR1MzIgc3RhdGU7XFxuIDE1MjpcXHRcXHR1MTYgcGVlcl9jYXBzO1xcbiAxNTM6XFx0XFx0Ym9vbCBpbl9zZXNzaW9uO1xcbiAxNTQ6XFx0XFx0Ym9vbCBhY3RpdmU7XFxuIDE1NTpcXHRcXHR1MzIgc2lsZW50X2ludHZfY250O1xcbiAxNTY6XFx0XFx0Y2hhciBpZl9uYW1lW1RJUENfTUFYX0lGX05BTUVdO1xcbiAxNTc6XFx0XFx0dTMyIHByaW9yaXR5O1xcbiAxNTg6XFx0XFx0Y2hhciBuZXRfcGxhbmU7XFxuIDE1OTpcXHRcXHRzdHJ1Y3QgdGlwY19tb25fc3RhdGUgbW9uX3N0YXRlO1xcbiAxNjA6XFx0XFx0dTE2IHJzdF9jbnQ7XFxuIDE2MTpcXHRcXG4gMTYyOlxcdFxcdC8qIEZhaWxvdmVyL3N5bmNoICovXFxuIDE2MzpcXHRcXHR1MTYgZHJvcF9wb2ludDtcXG4gMTY0OlxcdFxcdHN0cnVjdCBza19idWZmICpmYWlsb3Zlcl9yZWFzbV9za2I7XFxuIDE2NTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGZhaWxvdmVyX2RlZmVyZHE7XFxuIDE2NjpcXHRcXG4gMTY3OlxcdFxcdC8qIE1heCBwYWNrZXQgbmVnb3RpYXRpb24gKi9cXG4gMTY4OlxcdFxcdHUxNiBtdHU7XFxuIDE2OTpcXHRcXHR1MTYgYWR2ZXJ0aXNlZF9tdHU7XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdC8qIFNlbmRpbmcgKi9cXG4gMTcyOlxcdFxcdHN0cnVjdCBza19idWZmX2hlYWQgdHJhbnNtcTtcXG4gMTczOlxcdFxcdHN0cnVjdCBza19idWZmX2hlYWQgYmFja2xvZ3E7XFxuIDE3NDpcXHRcXHRzdHJ1Y3Qge1xcbiAxNzU6XFx0XFx0XFx0dTE2IGxlbjtcXG4gMTc2OlxcdFxcdFxcdHUxNiBsaW1pdDtcXG4gMTc3OlxcdFxcdFxcdHN0cnVjdCBza19idWZmICp0YXJnZXRfYnNrYjtcXG4gMTc4OlxcdFxcdH0gYmFja2xvZ1s1XTtcXG4gMTc5OlxcdFxcdHUxNiBzbmRfbnh0O1xcbiAxODA6XFx0XFxuIDE4MTpcXHRcXHQvKiBSZWNlcHRpb24gKi9cXG4gMTgyOlxcdFxcdHUxNiByY3Zfbnh0O1xcbiAxODM6XFx0XFx0dTMyIHJjdl91bmFja2VkO1xcbiAxODQ6XFx0XFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBkZWZlcmRxO1xcbiAxODU6XFx0XFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxO1xcbiAxODY6XFx0XFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqbmFtZWRxO1xcbiAxODc6XFx0XFxuIDE4ODpcXHRcXHQvKiBDb25nZXN0aW9uIGhhbmRsaW5nICovXFxuIDE4OTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHdha2V1cHE7XFxuIDE5MDpcXHRcXHR1MTYgd2luZG93O1xcbiAxOTE6XFx0XFx0dTE2IG1pbl93aW47XFxuIDE5MjpcXHRcXHR1MTYgc3N0aHJlc2g7XFxuIDE5MzpcXHRcXHR1MTYgbWF4X3dpbjtcXG4gMTk0OlxcdFxcdHUxNiBjb25nX2Fja3M7XFxuIDE5NTpcXHRcXHR1MTYgY2hlY2twb2ludDtcXG4gMTk2OlxcdFxcbiAxOTc6XFx0XFx0LyogRnJhZ21lbnRhdGlvbi9yZWFzc2VtYmx5ICovXFxuIDE5ODpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVhc21fYnVmO1xcbiAxOTk6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnJlYXNtX3RubG1zZztcXG4gMjAwOlxcdFxcbiAyMDE6XFx0XFx0LyogQnJvYWRjYXN0ICovXFxuIDIwMjpcXHRcXHR1MTYgYWNrZXJzO1xcbiAyMDM6XFx0XFx0dTE2IGFja2VkO1xcbiAyMDQ6XFx0XFx0dTE2IGxhc3RfZ2FwO1xcbiAyMDU6XFx0XFx0c3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICpsYXN0X2dhO1xcbiAyMDY6XFx0XFx0c3RydWN0IHRpcGNfbGluayAqYmNfcmN2bGluaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDM6MTMuNTYxNjQ5NloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTEzOTY4MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgVElQQyBMaW5rIENyZWF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBUSVBDIGxpbmtzIGFyZSBlc3RhYmxpc2hlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aHJlZSBrZXkgZnVuY3Rpb25zOiBgdGlwY19saW5rX2NyZWF0ZWAsIGB0aXBjX2xpbmtfYmNfY3JlYXRlYCwgYW5kIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYC4gSSdtIHN0YXJ0aW5nIHRvIHZpc3VhbGl6ZSB0aGUgbGlrZWx5IGZsb3cuIEkgc3VzcGVjdCBgdGlwY19saW5rX2NyZWF0ZWAgaXMgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIGVzdGFibGlzaGluZyBhIGdlbmVyYWwgVElQQyBsaW5rLiBUaGUgXCJiY1wiIGluIGB0aXBjX2xpbmtfYmNfY3JlYXRlYCBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIHJlbGF0ZWQgdG8gYnJvYWRjYXN0IG9yIHBvdGVudGlhbGx5IHNvbWUgZm9ybSBvZiBjbGllbnQtc2VydmVyIGFycmFuZ2VtZW50LCB3aGljaCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBiZXR0ZXIuIEFuZCBgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZ2AuLi4gdGhhdCBzY3JlYW1zIHByb3RvY29sIG1lc3NhZ2UgY29uc3RydWN0aW9uLiBJIGFudGljaXBhdGUgdGhpcyBpcyB3aGVyZSB0aGUgbGluaydzIGNvbnRyb2wgYW5kIGRhdGEgc3RydWN0dXJlcyBhcmUgbWFyc2hhbGxlZCBpbnRvIHRoZSBzcGVjaWZpYyBUSVBDIGZvcm1hdCBmb3IgdHJhbnNtaXNzaW9uLiBJJ2xsIG5lZWQgdG8gZGlzc2VjdCB0aGVzZSBmdW5jdGlvbnMgaW4gb3JkZXIgYW5kIHNlZSBob3cgdGhlIGZ1bmN0aW9ucyBpbnRlcmFjdC4gSSdtIGtlZW4gdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgbG9va2luZyBmb3Igb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBteSB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTQyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowMzoyMC4wNzU2MjA2OTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL2xpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzAsXG4gIFwiTGluZUNvdW50XCI6IDExNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDcwOlxcdCAqIEBsaW5rOiByZXR1cm4gdmFsdWUsIHBvaW50ZXIgdG8gcHV0IHRoZSBjcmVhdGVkIGxpbmtcXG4gNDcxOlxcdCAqIEBzZWxmOiBsb2NhbCB1bmljYXN0IGxpbmsgaWRcXG4gNDcyOlxcdCAqIEBwZWVyX2lkOiAxMjgtYml0IElEIG9mIHBlZXJcXG4gNDczOlxcdCAqXFxuIDQ3NDpcXHQgKiBSZXR1cm46IHRydWUgaWYgbGluayB3YXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGZhbHNlXFxuIDQ3NTpcXHQgKi9cXG4gNDc2OlxcdGJvb2wgdGlwY19saW5rX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKmlmX25hbWUsIGludCBiZWFyZXJfaWQsXFxuIDQ3NzpcXHRcXHRcXHQgICAgICBpbnQgdG9sZXJhbmNlLCBjaGFyIG5ldF9wbGFuZSwgdTMyIG10dSwgaW50IHByaW9yaXR5LFxcbiA0Nzg6XFx0XFx0XFx0ICAgICAgdTMyIG1pbl93aW4sIHUzMiBtYXhfd2luLCB1MzIgc2Vzc2lvbiwgdTMyIHNlbGYsXFxuIDQ3OTpcXHRcXHRcXHQgICAgICB1MzIgcGVlciwgdTggKnBlZXJfaWQsIHUxNiBwZWVyX2NhcHMsXFxuIDQ4MDpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGlwY19saW5rICpiY19zbmRsaW5rLFxcbiA0ODE6XFx0XFx0XFx0ICAgICAgc3RydWN0IHRpcGNfbGluayAqYmNfcmN2bGluayxcXG4gNDgyOlxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcXG4gNDgzOlxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcSxcXG4gNDg0OlxcdFxcdFxcdCAgICAgIHN0cnVjdCB0aXBjX2xpbmsgKipsaW5rKVxcbiA0ODU6XFx0e1xcbiA0ODY6XFx0XFx0Y2hhciBwZWVyX3N0cltOT0RFX0lEX1NUUl9MRU5dID0gezAsfTtcXG4gNDg3OlxcdFxcdGNoYXIgc2VsZl9zdHJbTk9ERV9JRF9TVFJfTEVOXSA9IHswLH07XFxuIDQ4ODpcXHRcXHRzdHJ1Y3QgdGlwY19saW5rICpsO1xcbiA0ODk6XFx0XFxuIDQ5MDpcXHRcXHRsID0ga3phbGxvY19vYmooKmwsIEdGUF9BVE9NSUMpO1xcbiA0OTE6XFx0XFx0aWYgKCFsKVxcbiA0OTI6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA0OTM6XFx0XFx0KmxpbmsgPSBsO1xcbiA0OTQ6XFx0XFx0bC1cXHUwMDNlc2Vzc2lvbiA9IHNlc3Npb247XFxuIDQ5NTpcXHRcXG4gNDk2OlxcdFxcdC8qIFNldCBsaW5rIG5hbWUgZm9yIHVuaWNhc3QgbGlua3Mgb25seSAqL1xcbiA0OTc6XFx0XFx0aWYgKHBlZXJfaWQpIHtcXG4gNDk4OlxcdFxcdFxcdGlmICh0aXBjX25vZGVpZDJzdHJpbmcoc2VsZl9zdHIsIHRpcGNfb3duX2lkKG5ldCkpIFxcdTAwM2UgTk9ERV9JRF9MRU4pXFxuIDQ5OTpcXHRcXHRcXHRcXHRzcHJpbnRmKHNlbGZfc3RyLCBcXFwiJXhcXFwiLCBzZWxmKTtcXG4gNTAwOlxcdFxcdFxcdGlmICh0aXBjX25vZGVpZDJzdHJpbmcocGVlcl9zdHIsIHBlZXJfaWQpIFxcdTAwM2UgTk9ERV9JRF9MRU4pXFxuIDUwMTpcXHRcXHRcXHRcXHRzcHJpbnRmKHBlZXJfc3RyLCBcXFwiJXhcXFwiLCBwZWVyKTtcXG4gNTAyOlxcdFxcdH1cXG4gNTAzOlxcdFxcdC8qIFBlZXIgaS9mIG5hbWUgd2lsbCBiZSBjb21wbGV0ZWQgYnkgcmVzZXQvYWN0aXZhdGUgbWVzc2FnZSAqL1xcbiA1MDQ6XFx0XFx0c25wcmludGYobC1cXHUwMDNlbmFtZSwgc2l6ZW9mKGwtXFx1MDAzZW5hbWUpLCBcXFwiJXM6JXMtJXM6dW5rbm93blxcXCIsXFxuIDUwNTpcXHRcXHRcXHQgc2VsZl9zdHIsIGlmX25hbWUsIHBlZXJfc3RyKTtcXG4gNTA2OlxcdFxcbiA1MDc6XFx0XFx0c3Ryc2NweShsLVxcdTAwM2VpZl9uYW1lLCBpZl9uYW1lKTtcXG4gNTA4OlxcdFxcdGwtXFx1MDAzZWFkZHIgPSBwZWVyO1xcbiA1MDk6XFx0XFx0bC1cXHUwMDNlcGVlcl9jYXBzID0gcGVlcl9jYXBzO1xcbiA1MTA6XFx0XFx0bC1cXHUwMDNlbmV0ID0gbmV0O1xcbiA1MTE6XFx0XFx0bC1cXHUwMDNlaW5fc2Vzc2lvbiA9IGZhbHNlO1xcbiA1MTI6XFx0XFx0bC1cXHUwMDNlYmVhcmVyX2lkID0gYmVhcmVyX2lkO1xcbiA1MTM6XFx0XFx0bC1cXHUwMDNldG9sZXJhbmNlID0gdG9sZXJhbmNlO1xcbiA1MTQ6XFx0XFx0aWYgKGJjX3JjdmxpbmspXFxuIDUxNTpcXHRcXHRcXHRiY19yY3ZsaW5rLVxcdTAwM2V0b2xlcmFuY2UgPSB0b2xlcmFuY2U7XFxuIDUxNjpcXHRcXHRsLVxcdTAwM2VuZXRfcGxhbmUgPSBuZXRfcGxhbmU7XFxuIDUxNzpcXHRcXHRsLVxcdTAwM2VhZHZlcnRpc2VkX210dSA9IG10dTtcXG4gNTE4OlxcdFxcdGwtXFx1MDAzZW10dSA9IG10dTtcXG4gNTE5OlxcdFxcdGwtXFx1MDAzZXByaW9yaXR5ID0gcHJpb3JpdHk7XFxuIDUyMDpcXHRcXHR0aXBjX2xpbmtfc2V0X3F1ZXVlX2xpbWl0cyhsLCBtaW5fd2luLCBtYXhfd2luKTtcXG4gNTIxOlxcdFxcdGwtXFx1MDAzZWFja2VycyA9IDE7XFxuIDUyMjpcXHRcXHRsLVxcdTAwM2ViY19zbmRsaW5rID0gYmNfc25kbGluaztcXG4gNTIzOlxcdFxcdGwtXFx1MDAzZWJjX3JjdmxpbmsgPSBiY19yY3ZsaW5rO1xcbiA1MjQ6XFx0XFx0bC1cXHUwMDNlaW5wdXRxID0gaW5wdXRxO1xcbiA1MjU6XFx0XFx0bC1cXHUwMDNlbmFtZWRxID0gbmFtZWRxO1xcbiA1MjY6XFx0XFx0bC1cXHUwMDNlc3RhdGUgPSBMSU5LX1JFU0VUVElORztcXG4gNTI3OlxcdFxcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2bC1cXHUwMDNldHJhbnNtcSk7XFxuIDUyODpcXHRcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmwtXFx1MDAzZWJhY2tsb2dxKTtcXG4gNTI5OlxcdFxcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2bC1cXHUwMDNlZGVmZXJkcSk7XFxuIDUzMDpcXHRcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmwtXFx1MDAzZWZhaWxvdmVyX2RlZmVyZHEpO1xcbiA1MzE6XFx0XFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2bC1cXHUwMDNld2FrZXVwcSk7XFxuIDUzMjpcXHRcXHRza2JfcXVldWVfaGVhZF9pbml0KGwtXFx1MDAzZWlucHV0cSk7XFxuIDUzMzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gNTM0OlxcdH1cXG4gNTM1OlxcdFxcbiA1MzY6XFx0LyoqXFxuIDUzNzpcXHQgKiB0aXBjX2xpbmtfYmNfY3JlYXRlIC0gY3JlYXRlIG5ldyBsaW5rIHRvIGJlIHVzZWQgZm9yIGJyb2FkY2FzdFxcbiA1Mzg6XFx0ICogQG5ldDogcG9pbnRlciB0byBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXFxuIDUzOTpcXHQgKiBAbXR1OiBtdHUgdG8gYmUgdXNlZCBpbml0aWFsbHkgaWYgbm8gcGVlcnNcXG4gNTQwOlxcdCAqIEBtaW5fd2luOiBtaW5pbWFsIHNlbmQgd2luZG93IHRvIGJlIHVzZWQgYnkgbGlua1xcbiA1NDE6XFx0ICogQG1heF93aW46IG1heGltYWwgc2VuZCB3aW5kb3cgdG8gYmUgdXNlZCBieSBsaW5rXFxuIDU0MjpcXHQgKiBAaW5wdXRxOiBxdWV1ZSB0byBwdXQgbWVzc2FnZXMgcmVhZHkgZm9yIGRlbGl2ZXJ5XFxuIDU0MzpcXHQgKiBAbmFtZWRxOiBxdWV1ZSB0byBwdXQgYmluZGluZyB0YWJsZSB1cGRhdGUgbWVzc2FnZXMgcmVhZHkgZm9yIGRlbGl2ZXJ5XFxuIDU0NDpcXHQgKiBAbGluazogcmV0dXJuIHZhbHVlLCBwb2ludGVyIHRvIHB1dCB0aGUgY3JlYXRlZCBsaW5rXFxuIDU0NTpcXHQgKiBAb3dubm9kZTogaWRlbnRpdHkgb2Ygb3duIG5vZGVcXG4gNTQ2OlxcdCAqIEBwZWVyOiBub2RlIGlkIG9mIHBlZXIgbm9kZVxcbiA1NDc6XFx0ICogQHBlZXJfaWQ6IDEyOC1iaXQgSUQgb2YgcGVlclxcbiA1NDg6XFx0ICogQHBlZXJfY2FwczogYml0bWFwIGRlc2NyaWJpbmcgcGVlciBub2RlIGNhcGFiaWxpdGllc1xcbiA1NDk6XFx0ICogQGJjX3NuZGxpbms6IHRoZSBuYW1lc3BhY2UgZ2xvYmFsIGxpbmsgdXNlZCBmb3IgYnJvYWRjYXN0IHNlbmRpbmdcXG4gNTUwOlxcdCAqXFxuIDU1MTpcXHQgKiBSZXR1cm46IHRydWUgaWYgbGluayB3YXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGZhbHNlXFxuIDU1MjpcXHQgKi9cXG4gNTUzOlxcdGJvb2wgdGlwY19saW5rX2JjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBvd25ub2RlLCB1MzIgcGVlciwgdTggKnBlZXJfaWQsXFxuIDU1NDpcXHRcXHRcXHRcXHQgaW50IG10dSwgdTMyIG1pbl93aW4sIHUzMiBtYXhfd2luLCB1MTYgcGVlcl9jYXBzLFxcbiA1NTU6XFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcXG4gNTU2OlxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpuYW1lZHEsXFxuIDU1NzpcXHRcXHRcXHRcXHQgc3RydWN0IHRpcGNfbGluayAqYmNfc25kbGluayxcXG4gNTU4OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGlwY19saW5rICoqbGluaylcXG4gNTU5OlxcdHtcXG4gNTYwOlxcdFxcdHN0cnVjdCB0aXBjX2xpbmsgKmw7XFxuIDU2MTpcXHRcXG4gNTYyOlxcdFxcdGlmICghdGlwY19saW5rX2NyZWF0ZShuZXQsIFxcXCJcXFwiLCBNQVhfQkVBUkVSUywgMCwgJ1onLCBtdHUsIDAsIG1pbl93aW4sXFxuIDU2MzpcXHRcXHRcXHRcXHQgICAgICBtYXhfd2luLCAwLCBvd25ub2RlLCBwZWVyLCBOVUxMLCBwZWVyX2NhcHMsXFxuIDU2NDpcXHRcXHRcXHRcXHQgICAgICBiY19zbmRsaW5rLCBOVUxMLCBpbnB1dHEsIG5hbWVkcSwgbGluaykpXFxuIDU2NTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdGwgPSAqbGluaztcXG4gNTY4OlxcdFxcdGlmIChwZWVyX2lkKSB7XFxuIDU2OTpcXHRcXHRcXHRjaGFyIHBlZXJfc3RyW05PREVfSURfU1RSX0xFTl0gPSB7MCx9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowMzoyMC4wNzU3NTgzNjJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIwMjAwOTM0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRXhhbWluaW5nIExpbmUgMTg5OCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBJJ20gdGFraW5nIGEgc3RyYXRlZ2ljIGxvb2sgYXQgdGhpcyBkb2N1bWVudCwgYW5kIHRoZSBjb250ZXh0IHN1Z2dlc3RzIHRoYXQgZGlnZ2luZyBpbnRvIHRoZSBjb250ZW50IGFyb3VuZCBsaW5lIDE4OTggd291bGQgcHJvdmlkZSBzb21lIGNydWNpYWwgaW5zaWdodHMuIE15IG1lbnRhbCBtb2RlbCBhbnRpY2lwYXRlcyB0aGF0IGEgZGlzY3Vzc2lvbiBvciBwaWVjZSBvZiBkYXRhIHByZXNlbnRlZCBhcm91bmQgdGhpcyBsaW5lIG1heSBiZSBwaXZvdGFsIHRvIHRoZSBvdmVyYWxsIGFyZ3VtZW50LCBvciBpdCBtaWdodCBjb250YWluIGluZm9ybWF0aW9uIHRoYXQgcmVmdXRlcyBhIHNwZWNpZmljIHBvaW50LiBHaXZlbiBteSBleHBlcnRpc2UsIG15IGludHVpdGlvbiBpcyBob25lZCB0byBmbGFnIHRoaXMgYXJlYSBmb3IgZGVlcGVyIGV4YW1pbmF0aW9uLiBJJ20gYXBwcm9hY2hpbmcgdGhpcyB3aXRoIGEga2VlbiBleHBlY3RhdGlvbiB0aGF0IHRoZSBjb250ZW50IHRoZXJlIG1heSBiZSBlaXRoZXIgYSBjcml0aWNhbCBzdXBwb3J0aW5nIHBpZWNlLCBvciBhIHJlbGV2YW50IG91dGxpZXIgdGhhdCB3YXJyYW50cyBmdXJ0aGVyIHNjcnV0aW55LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDY4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowMzozMi4wOTU4NTQzMjRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL2xpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODgwOlxcdFxcdFxcdGlmIChsLVxcdTAwM2VwZWVyX2NhcHMgXFx1MDAyNiBUSVBDX0xJTktfUFJPVE9fU0VRTk8pXFxuMTg4MTpcXHRcXHRcXHRcXHRtc2dfc2V0X3NlcW5vKGhkciwgbC1cXHUwMDNlc25kX254dF9zdGF0ZSsrKTtcXG4xODgyOlxcdFxcdFxcdG1zZ19zZXRfc2VxX2dhcChoZHIsIHJjdmdhcCk7XFxuMTg4MzpcXHRcXHRcXHRiY19yY3ZnYXAgPSBsaW5rX2JjX3Jjdl9nYXAoYmNsKTtcXG4xODg0OlxcdFxcdFxcdG1zZ19zZXRfYmNfZ2FwKGhkciwgYmNfcmN2Z2FwKTtcXG4xODg1OlxcdFxcdFxcdG1zZ19zZXRfcHJvYmUoaGRyLCBwcm9iZSk7XFxuMTg4NjpcXHRcXHRcXHRtc2dfc2V0X2lzX2tlZXBhbGl2ZShoZHIsIHByb2JlIHx8IHByb2JlX3JlcGx5KTtcXG4xODg3OlxcdFxcdFxcdGlmIChsLVxcdTAwM2VwZWVyX2NhcHMgXFx1MDAyNiBUSVBDX0dBUF9BQ0tfQkxPQ0spXFxuMTg4ODpcXHRcXHRcXHRcXHRnbGVuID0gdGlwY19idWlsZF9nYXBfYWNrX2Jsa3MobCwgaGRyKTtcXG4xODg5OlxcdFxcdFxcdHRpcGNfbW9uX3ByZXAobC1cXHUwMDNlbmV0LCBkYXRhICsgZ2xlbiwgXFx1MDAyNmRsZW4sIG1zdGF0ZSwgbC1cXHUwMDNlYmVhcmVyX2lkKTtcXG4xODkwOlxcdFxcdFxcdG1zZ19zZXRfc2l6ZShoZHIsIElOVF9IX1NJWkUgKyBnbGVuICsgZGxlbik7XFxuMTg5MTpcXHRcXHRcXHRza2JfdHJpbShza2IsIElOVF9IX1NJWkUgKyBnbGVuICsgZGxlbik7XFxuMTg5MjpcXHRcXHRcXHRsLVxcdTAwM2VzdGF0cy5zZW50X3N0YXRlcysrO1xcbjE4OTM6XFx0XFx0XFx0bC1cXHUwMDNlcmN2X3VuYWNrZWQgPSAwO1xcbjE4OTQ6XFx0XFx0fSBlbHNlIHtcXG4xODk1OlxcdFxcdFxcdC8qIFJFU0VUX01TRyBvciBBQ1RJVkFURV9NU0cgKi9cXG4xODk2OlxcdFxcdFxcdGlmIChtdHlwID09IEFDVElWQVRFX01TRykge1xcbjE4OTc6XFx0XFx0XFx0XFx0bXNnX3NldF9kZXN0X3Nlc3Npb25fdmFsaWQoaGRyLCAxKTtcXG4xODk4OlxcdFxcdFxcdFxcdG1zZ19zZXRfZGVzdF9zZXNzaW9uKGhkciwgbC1cXHUwMDNlcGVlcl9zZXNzaW9uKTtcXG4xODk5OlxcdFxcdFxcdH1cXG4xOTAwOlxcdFxcdFxcdG1zZ19zZXRfbWF4X3BrdChoZHIsIGwtXFx1MDAzZWFkdmVydGlzZWRfbXR1KTtcXG4xOTAxOlxcdFxcdFxcdG1lbWNweShkYXRhLCBsLVxcdTAwM2VpZl9uYW1lLCBUSVBDX01BWF9JRl9OQU1FKTtcXG4xOTAyOlxcdFxcdFxcdG1zZ19zZXRfc2l6ZShoZHIsIElOVF9IX1NJWkUgKyBUSVBDX01BWF9JRl9OQU1FKTtcXG4xOTAzOlxcdFxcdFxcdHNrYl90cmltKHNrYiwgSU5UX0hfU0laRSArIFRJUENfTUFYX0lGX05BTUUpO1xcbjE5MDQ6XFx0XFx0fVxcbjE5MDU6XFx0XFx0aWYgKHByb2JlKVxcbjE5MDY6XFx0XFx0XFx0bC1cXHUwMDNlc3RhdHMuc2VudF9wcm9iZXMrKztcXG4xOTA3OlxcdFxcdGlmIChyY3ZnYXApXFxuMTkwODpcXHRcXHRcXHRsLVxcdTAwM2VzdGF0cy5zZW50X25hY2tzKys7XFxuMTkwOTpcXHRcXHRpZiAoYmNfcmN2Z2FwKVxcbjE5MTA6XFx0XFx0XFx0YmNsLVxcdTAwM2VzdGF0cy5zZW50X25hY2tzKys7XFxuMTkxMTpcXHRcXHRza2ItXFx1MDAzZXByaW9yaXR5ID0gVENfUFJJT19DT05UUk9MO1xcbjE5MTI6XFx0XFx0X19za2JfcXVldWVfdGFpbCh4bWl0cSwgc2tiKTtcXG4xOTEzOlxcdFxcdHRyYWNlX3RpcGNfcHJvdG9fYnVpbGQoc2tiLCBmYWxzZSwgbC1cXHUwMDNlbmFtZSk7XFxuMTkxNDpcXHR9XFxuMTkxNTpcXHRcXG4xOTE2OlxcdHZvaWQgdGlwY19saW5rX2NyZWF0ZV9kdW1teV90bmxfbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsXFxuMTkxNzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuMTkxODpcXHR7XFxuMTkxOTpcXHRcXHR1MzIgb25vZGUgPSB0aXBjX293bl9hZGRyKGwtXFx1MDAzZW5ldCk7XFxuMTkyMDpcXHRcXHRzdHJ1Y3QgdGlwY19tc2cgKmhkciwgKmloZHI7XFxuMTkyMTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHRubHE7XFxuMTkyMjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbjE5MjM6XFx0XFx0dTMyIGRub2RlID0gbC1cXHUwMDNlYWRkcjtcXG4xOTI0OlxcdFxcbjE5MjU6XFx0XFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZ0bmxxKTtcXG4xOTI2OlxcdFxcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShUVU5ORUxfUFJPVE9DT0wsIEZBSUxPVkVSX01TRyxcXG4xOTI3OlxcdFxcdFxcdFxcdCAgICAgIElOVF9IX1NJWkUsIEJBU0lDX0hfU0laRSxcXG4xOTI4OlxcdFxcdFxcdFxcdCAgICAgIGRub2RlLCBvbm9kZSwgMCwgMCwgMCk7XFxuMTkyOTpcXHRcXHRpZiAoIXNrYikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowMzozMi4wOTU5OTIzNDRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTU2OTE5ODQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBBZGRyZXNzaW5nIFBvdGVudGlhbCBCdWZmZXIgT3ZlcmZsb3dzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCB0aWdodGVuaW5nIHVwIHN0cmluZyBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHRvIHByZXZlbnQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3MuIExldCdzIHNlZSBpZiBteSBpbml0aWFsIHRob3VnaHQgaXMgY29ycmVjdC5cblxuSW4gdGhlIGZpcnN0IGNhc2UsIGluc2lkZSBgdGlwY19saW5rX2NyZWF0ZWAsIHRoZSBjb2RlIG5vdyB1c2VzIGBzdHJzY3B5YCBhZnRlciBhIGBremFsbG9jX29iamAgYWxsb2NhdGlvbi4gVGhlIGBremFsbG9jX29iamAgaXMgY3JpdGljYWwgaGVyZTsgaXQgemVyb2VzIHRoZSBlbnRpcmUgYHN0cnVjdCB0aXBjX2xpbmtgLCBpbmNsdWRpbmcgdGhlIGBpZl9uYW1lYCBmaWVsZC4gVGhpcyBpcyBnb29kIGJlY2F1c2UgaXQgcHJvdmlkZXMgYSBrbm93biBzdGFydGluZyBzdGF0ZS4gVGhlbiBgc3Ryc2NweWAgc2FmZWx5IGNvcGllcyB0aGUgaW50ZXJmYWNlIG5hbWUgaW50byBgbC1cdTAwM2VpZl9uYW1lYC4gRXZlbiBpZiBgaWZfbmFtZWAgaXMgbG9uZ2VyIHRoYW4gd2hhdCBgbC1cdTAwM2VpZl9uYW1lYCBjYW4gaG9sZCwgYHN0cnNjcHlgIGVuc3VyZXMgd2UgZG9uJ3Qgd3JpdGUgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIFRoZSB6ZXJvaW5nIGZyb20gYGt6YWxsb2Nfb2JqYCBtZWFucyB0aGF0IGV2ZW4gaWYgYHN0cnNjcHlgIGRvZXNuJ3QgZmlsbCB0aGUgZW50aXJlIGJ1ZmZlciwgdGhlIHJlbWFpbmluZyBwYXJ0IGlzIHBhZGRlZCB3aXRoIHplcm9zLlxuXG5OZXh0LCBpbiBgdGlwY19saW5rX2JjX2NyZWF0ZWAsIHRoZSBjaGFuZ2UgZnJvbSBgc3RyY3B5YCB0byBgc3Ryc2NweWAgaXMgdGhlIHNhbWUgcHJpbmNpcGxlLiBgc3Ryc2NweWAgaXMgdGhlIHNhZmVyIG9wdGlvbi5cblxuVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydCBjb21lcyB3aXRoIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYC4gIEluaXRpYWxseSwgaXQgbG9va3MgbGlrZSBgc3RyY3B5YCB3YXMgdXNlZCB0byBjb3B5IGBsLVx1MDAzZWlmX25hbWVgIGludG8gYGRhdGFgLiBCdXQgaG9sZCBvbi4uLiB0aGUgY29kZSBzZXRzIGEgZml4ZWQgc2l6ZSBmb3IgdGhlIG1lc3NhZ2UgdXNpbmcgYG1zZ19zZXRfc2l6ZWAgYW5kIHRyaW1zIHRoZSBzb2NrZXQgYnVmZmVyIChgc2tiYCkgdG8gdGhhdCBmaXhlZCBzaXplLCBldmVuIHRob3VnaCBgc3RyY3B5YCAqc2hvdWxkKiBoYXZlIHN0b3BwZWQgYXQgdGhlIG51bGwgdGVybWluYXRvciBvZiB0aGUgc3RyaW5nIGluIGBsLVx1MDAzZWlmX25hbWVgLiBUaGF0J3MgYSBiaXQgb2YgYSByZWQgZmxhZzsgaXQgYXBwZWFycyB0aGF0IHRoZSBlYXJsaWVyIGltcGxlbWVudGF0aW9uLCBjb3VudGVyaW50dWl0aXZlbHksIHdhcyByZWx5aW5nIG9uIHRoZSBudWxsIHRlcm1pbmF0aW9uIG9mIGBsLVx1MDAzZWlmX25hbWVgIHRvIGRlZmluZSB0aGUgY29waWVkIGRhdGEuICBcblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiB0aGUgYHNrYmAgd2FzIGFsbG9jYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCB3aGF0IGFzc3VtcHRpb25zIGFyZSBtYWRlIGFib3V0IGl0cyBzaXplLiBUaGlzIGlzIGltcG9ydGFudCB0byBkZXRlcm1pbmUgaWYgdGhlIGZpeGVkIHNpemUgc2V0dGluZyBhbmQgdHJpbW1pbmcgaW4gdGhlIG9yaWdpbmFsIGNvZGUgY291bGQgbGVhZCB0byB0aGUgc2l6ZSBiZWluZyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIHN0cmluZywgb3IgaWYgdGhlcmUncyBhIGRpZmZlcmVudCB2dWxuZXJhYmlsaXR5IHRoYXQgdGhlIGN1cnJlbnQgcGF0Y2ggYWRkcmVzc2VzIHRoYXQgSSBhbSBtaXNzaW5nLiBGdXJ0aGVyIGNvZGUgaW5zcGVjdGlvbiBpcyB3YXJyYW50ZWQsIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgYWxsb2NhdGlvbiBhbmQgdW5kZXJzdGFuZCB0aGUgb3JpZ2luYWwgcmF0aW9uYWxlIGJlaGluZCB0aGUgZml4ZWQtc2l6ZSBtZXNzYWdlIGNvbnN0cnVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI2NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAzOjQxLjY2NTE5MjkwN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3RpcGMvbGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NDU6XFx0XFx0dm9pZCAqZGF0YTtcXG4xODQ2OlxcdFxcbjE4NDc6XFx0XFx0LyogRG9uJ3Qgc2VuZCBwcm90b2NvbCBtZXNzYWdlIGR1cmluZyByZXNldCBvciBsaW5rIGZhaWxvdmVyICovXFxuMTg0ODpcXHRcXHRpZiAodGlwY19saW5rX2lzX2Jsb2NrZWQobCkpXFxuMTg0OTpcXHRcXHRcXHRyZXR1cm47XFxuMTg1MDpcXHRcXG4xODUxOlxcdFxcdGlmICghdGlwY19saW5rX2lzX3VwKGwpIFxcdTAwMjZcXHUwMDI2IChtdHlwID09IFNUQVRFX01TRykpXFxuMTg1MjpcXHRcXHRcXHRyZXR1cm47XFxuMTg1MzpcXHRcXG4xODU0OlxcdFxcdGlmICgocHJvYmUgfHwgcHJvYmVfcmVwbHkpIFxcdTAwMjZcXHUwMDI2ICFza2JfcXVldWVfZW1wdHkoZGZxKSlcXG4xODU1OlxcdFxcdFxcdHJjdmdhcCA9IGJ1Zl9zZXFubyhza2JfcGVlayhkZnEpKSAtIGwtXFx1MDAzZXJjdl9ueHQ7XFxuMTg1NjpcXHRcXG4xODU3OlxcdFxcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShMSU5LX1BST1RPQ09MLCBtdHlwLCBJTlRfSF9TSVpFLFxcbjE4NTg6XFx0XFx0XFx0XFx0ICAgICAgdGlwY19tYXhfZG9tYWluX3NpemUgKyBNQVhfR0FQX0FDS19CTEtTX1NaLFxcbjE4NTk6XFx0XFx0XFx0XFx0ICAgICAgbC1cXHUwMDNlYWRkciwgdGlwY19vd25fYWRkcihsLVxcdTAwM2VuZXQpLCAwLCAwLCAwKTtcXG4xODYwOlxcdFxcdGlmICghc2tiKVxcbjE4NjE6XFx0XFx0XFx0cmV0dXJuO1xcbjE4NjI6XFx0XFxuMTg2MzpcXHRcXHRoZHIgPSBidWZfbXNnKHNrYik7XFxuMTg2NDpcXHRcXHRkYXRhID0gbXNnX2RhdGEoaGRyKTtcXG4xODY1OlxcdFxcdG1zZ19zZXRfc2Vzc2lvbihoZHIsIGwtXFx1MDAzZXNlc3Npb24pO1xcbjE4NjY6XFx0XFx0bXNnX3NldF9iZWFyZXJfaWQoaGRyLCBsLVxcdTAwM2ViZWFyZXJfaWQpO1xcbjE4Njc6XFx0XFx0bXNnX3NldF9uZXRfcGxhbmUoaGRyLCBsLVxcdTAwM2VuZXRfcGxhbmUpO1xcbjE4Njg6XFx0XFx0bXNnX3NldF9uZXh0X3NlbnQoaGRyLCBsLVxcdTAwM2VzbmRfbnh0KTtcXG4xODY5OlxcdFxcdG1zZ19zZXRfYWNrKGhkciwgbC1cXHUwMDNlcmN2X254dCAtIDEpO1xcbjE4NzA6XFx0XFx0bXNnX3NldF9iY2FzdF9hY2soaGRyLCBiY2wtXFx1MDAzZXJjdl9ueHQgLSAxKTtcXG4xODcxOlxcdFxcdG1zZ19zZXRfYmNfYWNrX2ludmFsaWQoaGRyLCAhbm9kZV91cCk7XFxuMTg3MjpcXHRcXHRtc2dfc2V0X2xhc3RfYmNhc3QoaGRyLCBsLVxcdTAwM2ViY19zbmRsaW5rLVxcdTAwM2VzbmRfbnh0IC0gMSk7XFxuMTg3MzpcXHRcXHRtc2dfc2V0X2xpbmtfdG9sZXJhbmNlKGhkciwgdG9sZXJhbmNlKTtcXG4xODc0OlxcdFxcdG1zZ19zZXRfbGlua3ByaW8oaGRyLCBwcmlvcml0eSk7XFxuMTg3NTpcXHRcXHRtc2dfc2V0X3JlZHVuZGFudF9saW5rKGhkciwgbm9kZV91cCk7XFxuMTg3NjpcXHRcXHRtc2dfc2V0X3NlcV9nYXAoaGRyLCAwKTtcXG4xODc3OlxcdFxcdG1zZ19zZXRfc2Vxbm8oaGRyLCBsLVxcdTAwM2VzbmRfbnh0ICsgVTE2X01BWCAvIDIpO1xcbjE4Nzg6XFx0XFxuMTg3OTpcXHRcXHRpZiAobXR5cCA9PSBTVEFURV9NU0cpIHtcXG4xODgwOlxcdFxcdFxcdGlmIChsLVxcdTAwM2VwZWVyX2NhcHMgXFx1MDAyNiBUSVBDX0xJTktfUFJPVE9fU0VRTk8pXFxuMTg4MTpcXHRcXHRcXHRcXHRtc2dfc2V0X3NlcW5vKGhkciwgbC1cXHUwMDNlc25kX254dF9zdGF0ZSsrKTtcXG4xODgyOlxcdFxcdFxcdG1zZ19zZXRfc2VxX2dhcChoZHIsIHJjdmdhcCk7XFxuMTg4MzpcXHRcXHRcXHRiY19yY3ZnYXAgPSBsaW5rX2JjX3Jjdl9nYXAoYmNsKTtcXG4xODg0OlxcdFxcdFxcdG1zZ19zZXRfYmNfZ2FwKGhkciwgYmNfcmN2Z2FwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDM6NDEuNjY1MzI0Mzc3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzOTA5MDU0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgYHRpcGNfbXNnX2NyZWF0ZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgYHRpcGNfbXNnX2NyZWF0ZWAuIEl0J3MgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbiwgc28gSSdsbCBzdGFydCB3aXRoIHRoZSBiYXNpY3MuIExldCdzIHNlZS4uLiB0aGUgcXVpY2tlc3Qgcm91dGUgdG8gdW5kZXJzdGFuZCBpdCBpcyB0byB0cmFjZSBpdHMgY2FsbHMgYW5kIHNlZSBob3cgaXQgaXMgdXNlZC4gSSdsbCB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIGluc3RhbmNlcyB3aGVyZSBgdGlwY19tc2dfY3JlYXRlYCBpcyBjYWxsZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaXRzIGNvbnRleHQsIHdoYXQgYXJndW1lbnRzIGFyZSB0eXBpY2FsbHkgcGFzc2VkLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgbGFyZ2VyIFRJUEMgbWVzc2FnaW5nIGFyY2hpdGVjdHVyZS4gRnJvbSB0aGVyZSwgSSBjYW4gZGlnIGRlZXBlciBpbnRvIHRoZSBzb3VyY2UgY29kZSBvZiBgdGlwY19tc2dfY3JlYXRlYCBpdHNlbGYuIEdvdHRhIGJlIGVmZmljaWVudCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA3NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDM6NDYuMDU2MjMxODk0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU1NjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX21zZ19jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvZ3JvdXAuYz02Njg9c3RhdGljIHZvaWQgdGlwY19ncm91cF9jcmVhdGVfZXZlbnQoc3RydWN0IHRpcGNfZ3JvdXAgKmdycCxcXG4tLVxcbm5ldC90aXBjL2dyb3VwLmMtNjg2LVxcbm5ldC90aXBjL2dyb3VwLmM6Njg3OlxcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UsIFRJUENfR1JQX01FTUJFUl9FVlQsXFxubmV0L3RpcGMvZ3JvdXAuYy02ODgtXFx0XFx0XFx0ICAgICAgR1JPVVBfSF9TSVpFLCBzaXplb2YoZXZ0KSwgZG5vZGUsIG0tXFx1MDAzZW5vZGUsXFxuLS1cXG5uZXQvdGlwYy9ncm91cC5jPTcwMz1zdGF0aWMgdm9pZCB0aXBjX2dyb3VwX3Byb3RvX3htaXQoc3RydWN0IHRpcGNfZ3JvdXAgKmdycCwgc3RydWN0IHRpcGNfbWVtYmVyICptLFxcbi0tXFxubmV0L3RpcGMvZ3JvdXAuYy03MDktXFxubmV0L3RpcGMvZ3JvdXAuYzo3MTA6XFx0c2tiID0gdGlwY19tc2dfY3JlYXRlKEdST1VQX1BST1RPQ09MLCBtdHlwLCBJTlRfSF9TSVpFLCAwLFxcbm5ldC90aXBjL2dyb3VwLmMtNzExLVxcdFxcdFxcdCAgICAgIG0tXFx1MDAzZW5vZGUsIHRpcGNfb3duX2FkZHIoZ3JwLVxcdTAwM2VuZXQpLFxcbi0tXFxubmV0L3RpcGMvbGluay5jPTg4MT1zdGF0aWMgaW50IGxpbmtfc2NoZWR1bGVfdXNlcihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3QgdGlwY19tc2cgKmhkcilcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy04ODctXFx0LyogQ3JlYXRlIGFuZCBzY2hlZHVsZSB3YWtldXAgcHNldWRvIG1lc3NhZ2UgKi9cXG5uZXQvdGlwYy9saW5rLmM6ODg4OlxcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShTT0NLX1dBS0VVUCwgMCwgSU5UX0hfU0laRSwgMCxcXG5uZXQvdGlwYy9saW5rLmMtODg5LVxcdFxcdFxcdCAgICAgIGRub2RlLCBsLVxcdTAwM2VhZGRyLCBkcG9ydCwgMCwgMCk7XFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9MTgzMj1zdGF0aWMgdm9pZCB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnKHN0cnVjdCB0aXBjX2xpbmsgKmwsIGludCBtdHlwLCBib29sIHByb2JlLFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTE4NTYtXFxubmV0L3RpcGMvbGluay5jOjE4NTc6XFx0c2tiID0gdGlwY19tc2dfY3JlYXRlKExJTktfUFJPVE9DT0wsIG10eXAsIElOVF9IX1NJWkUsXFxubmV0L3RpcGMvbGluay5jLTE4NTgtXFx0XFx0XFx0ICAgICAgdGlwY19tYXhfZG9tYWluX3NpemUgKyBNQVhfR0FQX0FDS19CTEtTX1NaLFxcbi0tXFxubmV0L3RpcGMvbGluay5jPTE5MTY9dm9pZCB0aXBjX2xpbmtfY3JlYXRlX2R1bW15X3RubF9tc2coc3RydWN0IHRpcGNfbGluayAqbCxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xOTI1LVxcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2dG5scSk7XFxubmV0L3RpcGMvbGluay5jOjE5MjY6XFx0c2tiID0gdGlwY19tc2dfY3JlYXRlKFRVTk5FTF9QUk9UT0NPTCwgRkFJTE9WRVJfTVNHLFxcbm5ldC90aXBjL2xpbmsuYy0xOTI3LVxcdFxcdFxcdCAgICAgIElOVF9IX1NJWkUsIEJBU0lDX0hfU0laRSxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xOTQ5PXZvaWQgdGlwY19saW5rX3RubF9wcmVwYXJlKHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCB0aXBjX2xpbmsgKnRubCxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xOTcwLVxcdGlmIChtdHlwID09IFNZTkNIX01TRyBcXHUwMDI2XFx1MDAyNiAodG5sLVxcdTAwM2VwZWVyX2NhcHMgXFx1MDAyNiBUSVBDX1RVTk5FTF9FTkhBTkNFRCkpIHtcXG5uZXQvdGlwYy9saW5rLmM6MTk3MTpcXHRcXHR0bmxza2IgPSB0aXBjX21zZ19jcmVhdGUoVFVOTkVMX1BST1RPQ09MLCBTWU5DSF9NU0csXFxubmV0L3RpcGMvbGluay5jLTE5NzItXFx0XFx0XFx0XFx0XFx0IElOVF9IX1NJWkUsIDAsIGwtXFx1MDAzZWFkZHIsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTk5Mi1cXHQvKiBBdCBsZWFzdCBvbmUgcGFja2V0IHJlcXVpcmVkIGZvciBzYWZlIGFsZ29yaXRobSA9XFx1MDAzZSBhZGQgZHVtbXkgKi9cXG5uZXQvdGlwYy9saW5rLmM6MTk5MzpcXHRza2IgPSB0aXBjX21zZ19jcmVhdGUoVElQQ19MT1dfSU1QT1JUQU5DRSwgVElQQ19ESVJFQ1RfTVNHLFxcbm5ldC90aXBjL2xpbmsuYy0xOTk0LVxcdFxcdFxcdCAgICAgIEJBU0lDX0hfU0laRSwgMCwgbC1cXHUwMDNlYWRkciwgdGlwY19vd25fYWRkcihsLVxcdTAwM2VuZXQpLFxcbi0tXFxubmV0L3RpcGMvbGluay5jPTIzMzI9c3RhdGljIGJvb2wgdGlwY19saW5rX2J1aWxkX2JjX3Byb3RvX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBib29sIGJjYXN0LFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTIzNDEtXFxubmV0L3RpcGMvbGluay5jOjIzNDI6XFx0c2tiID0gdGlwY19tc2dfY3JlYXRlKEJDQVNUX1BST1RPQ09MLCBTVEFURV9NU0csIElOVF9IX1NJWkUsXFxubmV0L3RpcGMvbGluay5jLTIzNDMtXFx0XFx0XFx0ICAgICAgMCwgbC1cXHUwMDNlYWRkciwgdGlwY19vd25fYWRkcihsLVxcdTAwM2VuZXQpLCAwLCAwLCAwKTtcXG4tLVxcbm5ldC90aXBjL21zZy5jPTgxPXZvaWQgdGlwY19tc2dfaW5pdCh1MzIgb3duX25vZGUsIHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIHVzZXIsIHUzMiB0eXBlLFxcbi0tXFxubmV0L3RpcGMvbXNnLmMtOTYtXFxubmV0L3RpcGMvbXNnLmM6OTc6c3RydWN0IHNrX2J1ZmYgKnRpcGNfbXNnX2NyZWF0ZSh1aW50IHVzZXIsIHVpbnQgdHlwZSxcXG5uZXQvdGlwYy9tc2cuYy05OC1cXHRcXHRcXHRcXHR1aW50IGhkcl9zeiwgdWludCBkYXRhX3N6LCB1MzIgZG5vZGUsXFxuLS1cXG5uZXQvdGlwYy9tc2cuaD0xMTYwPXZvaWQgdGlwY19tc2dfaW5pdCh1MzIgb3duX2FkZHIsIHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIHVzZXIsIHUzMiB0eXBlLFxcbm5ldC90aXBjL21zZy5oLTExNjEtXFx0XFx0ICAgdTMyIGhzaXplLCB1MzIgZGVzdG5vZGUpO1xcbm5ldC90aXBjL21zZy5oOjExNjI6c3RydWN0IHNrX2J1ZmYgKnRpcGNfbXNnX2NyZWF0ZSh1aW50IHVzZXIsIHVpbnQgdHlwZSwgdWludCBoZHJfc3osXFxubmV0L3RpcGMvbXNnLmgtMTE2My1cXHRcXHRcXHRcXHR1aW50IGRhdGFfc3osIHUzMiBkbm9kZSwgdTMyIG9ub2RlLFxcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTE1MjM9c3RhdGljIHZvaWQgbm9kZV9sb3N0X2NvbnRhY3Qoc3RydWN0IHRpcGNfbm9kZSAqbixcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0xNTUyLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb25uLCBzYWZlLCBjb25ucywgbGlzdCkge1xcbm5ldC90aXBjL25vZGUuYzoxNTUzOlxcdFxcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UsIFRJUENfQ09OTl9NU0csXFxubmV0L3RpcGMvbm9kZS5jLTE1NTQtXFx0XFx0XFx0XFx0ICAgICAgU0hPUlRfSF9TSVpFLCAwLCB0aXBjX293bl9hZGRyKG4tXFx1MDAzZW5ldCksXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz01NTA9c3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTU5Mi1cXHRcXHR9XFxubmV0L3RpcGMvc29ja2V0LmM6NTkzOlxcdFxcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UsXFxubmV0L3RpcGMvc29ja2V0LmMtNTk0LVxcdFxcdFxcdFxcdCAgICAgIFRJUENfQ09OTl9NU0csIFNIT1JUX0hfU0laRSwgMCwgZG5vZGUsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xNzk0PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19za19idWlsZF9hY2soc3RydWN0IHRpcGNfc29jayAqdHNrKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTgwMy1cXHRcXHRyZXR1cm4gTlVMTDtcXG5uZXQvdGlwYy9zb2NrZXQuYzoxODA0OlxcdHNrYiA9IHRpcGNfbXNnX2NyZWF0ZShDT05OX01BTkFHRVIsIENPTk5fQUNLLCBJTlRfSF9TSVpFLCAwLFxcbm5ldC90aXBjL3NvY2tldC5jLTE4MDUtXFx0XFx0XFx0ICAgICAgZG5vZGUsIHRza19vd25fbm9kZSh0c2spLCBwZWVyX3BvcnQsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yODMwPXN0YXRpYyB2b2lkIHRpcGNfc2tfY2hlY2tfcHJvYmluZ19zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yODQ3LVxcdC8qIFByZXBhcmUgbmV3IHByb2JlICovXFxubmV0L3RpcGMvc29ja2V0LmM6Mjg0ODpcXHRza2IgPSB0aXBjX21zZ19jcmVhdGUoQ09OTl9NQU5BR0VSLCBDT05OX1BST0JFLCBJTlRfSF9TSVpFLCAwLFxcbm5ldC90aXBjL3NvY2tldC5jLTI4NDktXFx0XFx0XFx0ICAgICAgcG5vZGUsIHNlbGYsIHBwb3J0LCBvcG9ydCwgVElQQ19PSyk7XFxuLS1cXG5uZXQvdGlwYy90b3BzcnYuYz02MTQ9c3RhdGljIHZvaWQgdGlwY190b3BzcnZfa2Vybl9ldnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ldmVudCAqZXZ0KVxcbi0tXFxubmV0L3RpcGMvdG9wc3J2LmMtNjIwLVxcbm5ldC90aXBjL3RvcHNydi5jOjYyMTpcXHRza2IgPSB0aXBjX21zZ19jcmVhdGUoVE9QX1NSViwgMCwgSU5UX0hfU0laRSwgc2l6ZW9mKCpldnQpLFxcbm5ldC90aXBjL3RvcHNydi5jLTYyMi1cXHRcXHRcXHQgICAgICBzZWxmLCBzZWxmLCBwb3J0LCBwb3J0LCAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDM6NDYuMTAyNzkwMzg0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNjA1NTU0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG5ldC90aXBjL21zZy5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBUSVBDIG1lc3NhZ2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvdGlwYy9tc2cuY2AgZmlsZS4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgaW50ZXJlc3Rpbmcgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYXJvdW5kIGxpbmUgOTcuIEknbGwgcGlucG9pbnQgdGhpcyBhcmVhIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEknbSBleHBlY3RpbmcgdG8gZWl0aGVyIHZhbGlkYXRlIG15IGh5cG90aGVzaXMgb3IgdW5jb3ZlciBhbiBpbnRlcmVzdGluZyBmZWF0dXJlLiBFaXRoZXIgd2F5LCBJJ20gcmVhZHkgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM0NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAzOjUyLjM2MzM0Nzg1OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGlwYy9tc2cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NyxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5NzpcXHRzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19tc2dfY3JlYXRlKHVpbnQgdXNlciwgdWludCB0eXBlLFxcbiAgOTg6XFx0XFx0XFx0XFx0XFx0dWludCBoZHJfc3osIHVpbnQgZGF0YV9zeiwgdTMyIGRub2RlLFxcbiAgOTk6XFx0XFx0XFx0XFx0XFx0dTMyIG9ub2RlLCB1MzIgZHBvcnQsIHUzMiBvcG9ydCwgaW50IGVycmNvZGUpXFxuIDEwMDpcXHR7XFxuIDEwMTpcXHRcXHRzdHJ1Y3QgdGlwY19tc2cgKm1zZztcXG4gMTAyOlxcdFxcdHN0cnVjdCBza19idWZmICpidWY7XFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdGJ1ZiA9IHRpcGNfYnVmX2FjcXVpcmUoaGRyX3N6ICsgZGF0YV9zeiwgR0ZQX0FUT01JQyk7XFxuIDEwNTpcXHRcXHRpZiAodW5saWtlbHkoIWJ1ZikpXFxuIDEwNjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTA3OlxcdFxcbiAxMDg6XFx0XFx0bXNnID0gYnVmX21zZyhidWYpO1xcbiAxMDk6XFx0XFx0dGlwY19tc2dfaW5pdChvbm9kZSwgbXNnLCB1c2VyLCB0eXBlLCBoZHJfc3osIGRub2RlKTtcXG4gMTEwOlxcdFxcdG1zZ19zZXRfc2l6ZShtc2csIGhkcl9zeiArIGRhdGFfc3opO1xcbiAxMTE6XFx0XFx0bXNnX3NldF9vcmlncG9ydChtc2csIG9wb3J0KTtcXG4gMTEyOlxcdFxcdG1zZ19zZXRfZGVzdHBvcnQobXNnLCBkcG9ydCk7XFxuIDExMzpcXHRcXHRtc2dfc2V0X2VycmNvZGUobXNnLCBlcnJjb2RlKTtcXG4gMTE0OlxcdFxcdHJldHVybiBidWY7XFxuIDExNTpcXHR9XFxuIDExNjpcXHRcXG4gMTE3OlxcdC8qIHRpcGNfYnVmX2FwcGVuZCgpOiBBcHBlbmQgYSBidWZmZXIgdG8gdGhlIGZyYWdtZW50IGxpc3Qgb2YgYW5vdGhlciBidWZmZXJcXG4gMTE4OlxcdCAqIEAqaGVhZGJ1ZjogaW46ICBOVUxMIGZvciBmaXJzdCBmcmFnLCBvdGhlcndpc2UgdmFsdWUgcmV0dXJuZWQgZnJvbSBwcmV2IGNhbGxcXG4gMTE5OlxcdCAqICAgICAgICAgICAgb3V0OiBzZXQgd2hlbiBzdWNjZXNzZnVsIG5vbi1jb21wbGV0ZSByZWFzc2VtYmx5LCBvdGhlcndpc2UgTlVMTFxcbiAxMjA6XFx0ICogQCpidWY6ICAgICBpbjogIHRoZSBidWZmZXIgdG8gYXBwZW5kLiBBbHdheXMgZGVmaW5lZFxcbiAxMjE6XFx0ICogICAgICAgICAgICBvdXQ6IGhlYWQgYnVmIGFmdGVyIHN1Y2Nlc3NmdWwgY29tcGxldGUgcmVhc3NlbWJseSwgb3RoZXJ3aXNlIE5VTExcXG4gMTIyOlxcdCAqIFJldHVybnMgMSB3aGVuIHJlYXNzZW1ibHkgY29tcGxldGUsIG90aGVyd2lzZSAwXFxuIDEyMzpcXHQgKi9cXG4gMTI0OlxcdGludCB0aXBjX2J1Zl9hcHBlbmQoc3RydWN0IHNrX2J1ZmYgKipoZWFkYnVmLCBzdHJ1Y3Qgc2tfYnVmZiAqKmJ1ZilcXG4gMTI1OlxcdHtcXG4gMTI2OlxcdFxcdHN0cnVjdCBza19idWZmICpoZWFkID0gKmhlYWRidWY7XFxuIDEyNzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqZnJhZyA9ICpidWY7XFxuIDEyODpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7XFxuIDEyOTpcXHRcXHRzdHJ1Y3QgdGlwY19tc2cgKm1zZztcXG4gMTMwOlxcdFxcdHUzMiBmcmFnaWQ7XFxuIDEzMTpcXHRcXHRpbnQgZGVsdGE7XFxuIDEzMjpcXHRcXHRib29sIGhlYWRzdG9sZW47XFxuIDEzMzpcXHRcXG4gMTM0OlxcdFxcdGlmICghZnJhZylcXG4gMTM1OlxcdFxcdFxcdGdvdG8gZXJyO1xcbiAxMzY6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjAzOjUyLjM2MzQzNDYxOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjM1MDIyMjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHRpcGNfYnVmX2FjcXVpcmVgKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gYHRpcGNfYnVmX2FjcXVpcmVgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdldCBhIGJyb2FkZXIgdmlldy4gTGV0J3Mgc2VlIGhvdyB3aWRlc3ByZWFkIGl0cyB1c2FnZSBpcy4gVGltZSB0byBmaXJlIHVwIHRoZSBncmVwcGluZyB0b29scyBhbmQgZmluZCBldmVyeSBpbnN0YW5jZSBvZiBgdGlwY19idWZfYWNxdWlyZWAgaW4gdGhlIGNvZGViYXNlLiBUaGF0J2xsIGdpdmUgbWUgYSBmZWVsIGZvciBpdHMgY3JpdGljYWxpdHksIGhvdyBpdCdzIGJlaW5nIHVzZWQgYWNyb3NzIGRpZmZlcmVudCBtb2R1bGVzLCBhbmQgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4gb3Igb3Bwb3J0dW5pdHkgZm9yIG9wdGltaXphdGlvbi4gRXNzZW50aWFsbHksIEkgd2FudCB0byBnZXQgYSBjb250ZXh0dWFsIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwLiBUaGUgZ3JlcCB3aWxsIGdpdmUgbWUgdGhlIG1hcDsgdGhlbiBJIGNhbiBzdGFydCBjaGFydGluZyBhIGNvdXJzZSBmb3IgbW9yZSBmb2N1c2VkIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTkzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowMzo1Ni45OTg0NTg3ODNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDQ3MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfYnVmX2FjcXVpcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYmNhc3QuYz0zMTc9c3RhdGljIGludCB0aXBjX21jYXN0X3NlbmRfc3luYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9iY2FzdC5jLTMzNy1cXHQvKiBBbGxvY2F0ZSBkdW1teSBtZXNzYWdlICovXFxubmV0L3RpcGMvYmNhc3QuYzozMzg6XFx0X3NrYiA9IHRpcGNfYnVmX2FjcXVpcmUoTUNBU1RfSF9TSVpFLCBHRlBfS0VSTkVMKTtcXG5uZXQvdGlwYy9iY2FzdC5jLTMzOS1cXHRpZiAoIV9za2IpXFxuLS1cXG5uZXQvdGlwYy9jcnlwdG8uYz0yMjM4PXN0YXRpYyBpbnQgdGlwY19jcnlwdG9fa2V5X3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19hZWFkX2tleSAqc2tleSxcXG4tLVxcbm5ldC90aXBjL2NyeXB0by5jLTIyNDgtXFx0c2l6ZSA9IHRpcGNfYWVhZF9rZXlfc2l6ZShza2V5KTtcXG5uZXQvdGlwYy9jcnlwdG8uYzoyMjQ5OlxcdHNrYiA9IHRpcGNfYnVmX2FjcXVpcmUoSU5UX0hfU0laRSArIHNpemUsIEdGUF9BVE9NSUMpO1xcbm5ldC90aXBjL2NyeXB0by5jLTIyNTAtXFx0aWYgKCFza2IpXFxuLS1cXG5uZXQvdGlwYy9kaXNjb3Zlci5jPTEwND1zdGF0aWMgdm9pZCB0aXBjX2Rpc2NfbXNnX3htaXQoc3RydWN0IG5ldCAqbmV0LCB1MzIgbXR5cCwgdTMyIGRzdCxcXG4tLVxcbm5ldC90aXBjL2Rpc2NvdmVyLmMtMTExLVxcbm5ldC90aXBjL2Rpc2NvdmVyLmM6MTEyOlxcdHNrYiA9IHRpcGNfYnVmX2FjcXVpcmUoTUFYX0hfU0laRSArIE5PREVfSURfTEVOLCBHRlBfQVRPTUlDKTtcXG5uZXQvdGlwYy9kaXNjb3Zlci5jLTExMy1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC90aXBjL2Rpc2NvdmVyLmM9MzUyPWludCB0aXBjX2Rpc2NfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfYmVhcmVyICpiLFxcbi0tXFxubmV0L3RpcGMvZGlzY292ZXIuYy0zNjAtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubmV0L3RpcGMvZGlzY292ZXIuYzozNjE6XFx0ZC1cXHUwMDNlc2tiID0gdGlwY19idWZfYWNxdWlyZShNQVhfSF9TSVpFICsgTk9ERV9JRF9MRU4sIEdGUF9BVE9NSUMpO1xcbm5ldC90aXBjL2Rpc2NvdmVyLmMtMzYyLVxcdGlmICghZC1cXHUwMDNlc2tiKSB7XFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9MTk0OT12b2lkIHRpcGNfbGlua190bmxfcHJlcGFyZShzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3QgdGlwY19saW5rICp0bmwsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMjA1NC1cXHRcXHRtc2dfc2V0X3NpemUoXFx1MDAyNnRubGhkciwgcGt0bGVuICsgSU5UX0hfU0laRSk7XFxubmV0L3RpcGMvbGluay5jOjIwNTU6XFx0XFx0dG5sc2tiID0gdGlwY19idWZfYWNxdWlyZShwa3RsZW4gKyBJTlRfSF9TSVpFLCBHRlBfQVRPTUlDKTtcXG5uZXQvdGlwYy9saW5rLmMtMjA1Ni1cXHRcXHRpZiAoIXRubHNrYikge1xcbi0tXFxubmV0L3RpcGMvbXNnLmM9NTQ9Y29uc3QgaW50IG9uZV9wYWdlX210dSA9IFBBR0VfU0laRSAtIFNLQl9EQVRBX0FMSUdOKEJVRl9PVkVSSEVBRCkgLVxcbi0tXFxubmV0L3RpcGMvbXNnLmMtNTctLyoqXFxubmV0L3RpcGMvbXNnLmM6NTg6ICogdGlwY19idWZfYWNxdWlyZSAtIGNyZWF0ZXMgYSBUSVBDIG1lc3NhZ2UgYnVmZmVyXFxubmV0L3RpcGMvbXNnLmMtNTktICogQHNpemU6IG1lc3NhZ2Ugc2l6ZSAoaW5jbHVkaW5nIFRJUEMgaGVhZGVyKVxcbi0tXFxubmV0L3RpcGMvbXNnLmMtNjctICovXFxubmV0L3RpcGMvbXNnLmM6Njg6c3RydWN0IHNrX2J1ZmYgKnRpcGNfYnVmX2FjcXVpcmUodTMyIHNpemUsIGdmcF90IGdmcClcXG5uZXQvdGlwYy9tc2cuYy02OS17XFxuLS1cXG5uZXQvdGlwYy9tc2cuYz05Nz1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19tc2dfY3JlYXRlKHVpbnQgdXNlciwgdWludCB0eXBlLFxcbi0tXFxubmV0L3RpcGMvbXNnLmMtMTAzLVxcbm5ldC90aXBjL21zZy5jOjEwNDpcXHRidWYgPSB0aXBjX2J1Zl9hY3F1aXJlKGhkcl9zeiArIGRhdGFfc3osIEdGUF9BVE9NSUMpO1xcbm5ldC90aXBjL21zZy5jLTEwNS1cXHRpZiAodW5saWtlbHkoIWJ1ZikpXFxuLS1cXG5uZXQvdGlwYy9tc2cuYz0yMTc9aW50IHRpcGNfbXNnX2FwcGVuZChzdHJ1Y3QgdGlwY19tc2cgKl9oZHIsIHN0cnVjdCBtc2doZHIgKm0sIGludCBkbGVuLFxcbi0tXFxubmV0L3RpcGMvbXNnLmMtMjMwLVxcdFxcdGlmICghc2tiIHx8IHNrYi1cXHUwMDNlbGVuIFxcdTAwM2U9IG1zcykge1xcbm5ldC90aXBjL21zZy5jOjIzMTpcXHRcXHRcXHRza2IgPSB0aXBjX2J1Zl9hY3F1aXJlKG1zcywgR0ZQX0tFUk5FTCk7XFxubmV0L3RpcGMvbXNnLmMtMjMyLVxcdFxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4tLVxcbm5ldC90aXBjL21zZy5jPTMyMj1pbnQgdGlwY19tc2dfZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRpcGNfbXNnICpoZHIsXFxuLS1cXG5uZXQvdGlwYy9tc2cuYy0zNDYtXFx0XFx0LyogQWxsb2NhdGUgYSBuZXcgZnJhZ21lbnQgKi9cXG5uZXQvdGlwYy9tc2cuYzozNDc6XFx0XFx0X3NrYiA9IHRpcGNfYnVmX2FjcXVpcmUoSU5UX0hfU0laRSArIGVhdCwgR0ZQX0FUT01JQyk7XFxubmV0L3RpcGMvbXNnLmMtMzQ4LVxcdFxcdGlmICghX3NrYilcXG4tLVxcbm5ldC90aXBjL21zZy5jPTM4ND1pbnQgdGlwY19tc2dfYnVpbGQoc3RydWN0IHRpcGNfbXNnICptaGRyLCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgb2Zmc2V0LFxcbi0tXFxubmV0L3RpcGMvbXNnLmMtNDAxLVxcdGlmIChsaWtlbHkobXN6IFxcdTAwM2M9IHBrdG1heCkpIHtcXG5uZXQvdGlwYy9tc2cuYzo0MDI6XFx0XFx0c2tiID0gdGlwY19idWZfYWNxdWlyZShtc3osIEdGUF9LRVJORUwpO1xcbm5ldC90aXBjL21zZy5jLTQwMy1cXG4tLVxcbm5ldC90aXBjL21zZy5jLTQzMy1cXHQvKiBQcmVwYXJlIGZpcnN0IGZyYWdtZW50ICovXFxubmV0L3RpcGMvbXNnLmM6NDM0OlxcdHNrYiA9IHRpcGNfYnVmX2FjcXVpcmUocGt0bWF4LCBHRlBfS0VSTkVMKTtcXG5uZXQvdGlwYy9tc2cuYy00MzUtXFx0aWYgKCFza2IpXFxuLS1cXG5uZXQvdGlwYy9tc2cuYy00NjQtXFx0XFx0XFx0cGt0c3ogPSBwa3RtYXg7XFxubmV0L3RpcGMvbXNnLmM6NDY1OlxcdFxcdHNrYiA9IHRpcGNfYnVmX2FjcXVpcmUocGt0c3osIEdGUF9LRVJORUwpO1xcbm5ldC90aXBjL21zZy5jLTQ2Ni1cXHRcXHRpZiAoIXNrYikge1xcbi0tXFxubmV0L3RpcGMvbXNnLmM9NTkzPWJvb2wgdGlwY19tc2dfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKmlza2IsIGludCAqcG9zKVxcbi0tXFxubmV0L3RpcGMvbXNnLmMtNjExLVxcbm5ldC90aXBjL21zZy5jOjYxMjpcXHQqaXNrYiA9IHRpcGNfYnVmX2FjcXVpcmUoaW1zeiwgR0ZQX0FUT01JQyk7XFxubmV0L3RpcGMvbXNnLmMtNjEzLVxcdGlmICghKmlza2IpXFxuLS1cXG5uZXQvdGlwYy9tc2cuYz02Mzc9Ym9vbCB0aXBjX21zZ19yZXZlcnNlKHUzMiBvd25fbm9kZSwgIHN0cnVjdCBza19idWZmICoqc2tiLCBpbnQgZXJyKVxcbi0tXFxubmV0L3RpcGMvbXNnLmMtNjYyLVxcdC8qIEFsbG9jYXRlIG5ldyBidWZmZXIgdG8gcmV0dXJuICovXFxubmV0L3RpcGMvbXNnLmM6NjYzOlxcdCpza2IgPSB0aXBjX2J1Zl9hY3F1aXJlKGhsZW4gKyBkbGVuLCBHRlBfQVRPTUlDKTtcXG5uZXQvdGlwYy9tc2cuYy02NjQtXFx0aWYgKCEqc2tiKVxcbi0tXFxubmV0L3RpcGMvbXNnLmg9MTE1MD1zdGF0aWMgaW5saW5lIHU4ICptc2dfbm9kZV9pZChzdHJ1Y3QgdGlwY19tc2cgKmhkcilcXG4tLVxcbm5ldC90aXBjL21zZy5oLTExNTQtXFxubmV0L3RpcGMvbXNnLmg6MTE1NTpzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19idWZfYWNxdWlyZSh1MzIgc2l6ZSwgZ2ZwX3QgZ2ZwKTtcXG5uZXQvdGlwYy9tc2cuaC0xMTU2LWJvb2wgdGlwY19tc2dfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKipfc2tiKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYz02Nz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5hbWVkX3ByZXBhcmVfYnVmKHN0cnVjdCBuZXQgKm5ldCwgdTMyIHR5cGUsIHUzMiBzaXplLFxcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTY5LXtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6NzA6XFx0c3RydWN0IHNrX2J1ZmYgKmJ1ZiA9IHRpcGNfYnVmX2FjcXVpcmUoSU5UX0hfU0laRSArIHNpemUsIEdGUF9BVE9NSUMpO1xcbm5ldC90aXBjL25hbWVfZGlzdHIuYy03MS1cXHR1MzIgc2VsZiA9IHRpcGNfb3duX2FkZHIobmV0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDM6NTcuMDQ0NTE0ODEzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY3MjY5NzY5NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgVElQQyBCdWZmZXIgQWNxdWlzaXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IFRJUEMgaGFuZGxlcyBidWZmZXIgYWNxdWlzaXRpb24sIHNwZWNpZmljYWxseSB0aGUgYHRpcGNfYnVmX2FjcXVpcmVgIGZ1bmN0aW9uLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBoYXZlIGEgZ29vZCBncmFzcCBvZiB0aGUgb3ZlcmFsbCBUSVBDIGFyY2hpdGVjdHVyZSwgYnV0IEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIHRoZSBgbmV0L3RpcGMvbXNnLmNgIGZpbGUg4oCTIHRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBpbXBsZW1lbnRhdGlvbiwgYW5kIGhvcGVmdWxseSwgc29tZSBlbmxpZ2h0ZW5pbmcgY29tbWVudHMgdG8gZ3VpZGUgbWUuIExldCdzIHNlZSB3aGF0IHNlY3JldHMgdGhpcyBjb2RlIGhvbGRzLiBJIGFtIGV4cGVjdGluZyB0byBmaW5kIHRoYXQgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgcmVzb3VyY2UgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowNDowMy43NzE0OTUwNzNaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3RpcGMvbXNnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTgsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTg6XFx0ICogdGlwY19idWZfYWNxdWlyZSAtIGNyZWF0ZXMgYSBUSVBDIG1lc3NhZ2UgYnVmZmVyXFxuICA1OTpcXHQgKiBAc2l6ZTogbWVzc2FnZSBzaXplIChpbmNsdWRpbmcgVElQQyBoZWFkZXIpXFxuICA2MDpcXHQgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnc1xcbiAgNjE6XFx0ICpcXG4gIDYyOlxcdCAqIFJldHVybjogYSBuZXcgYnVmZmVyIHdpdGggZGF0YSBwb2ludGVycyBzZXQgdG8gdGhlIHNwZWNpZmllZCBzaXplLlxcbiAgNjM6XFx0ICpcXG4gIDY0OlxcdCAqIE5PVEU6XFxuICA2NTpcXHQgKiBIZWFkcm9vbSBpcyByZXNlcnZlZCB0byBhbGxvdyBwcmVwZW5kaW5nIG9mIGEgZGF0YSBsaW5rIGhlYWRlci5cXG4gIDY2OlxcdCAqIFRoZXJlIG1heSBhbHNvIGJlIHVucmVxdWVzdGVkIHRhaWxyb29tIHByZXNlbnQgYXQgdGhlIGJ1ZmZlcidzIGVuZC5cXG4gIDY3OlxcdCAqL1xcbiAgNjg6XFx0c3RydWN0IHNrX2J1ZmYgKnRpcGNfYnVmX2FjcXVpcmUodTMyIHNpemUsIGdmcF90IGdmcClcXG4gIDY5OlxcdHtcXG4gIDcwOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdHNrYiA9IGFsbG9jX3NrYl9mY2xvbmUoQlVGX09WRVJIRUFEICsgc2l6ZSwgZ2ZwKTtcXG4gIDczOlxcdFxcdGlmIChza2IpIHtcXG4gIDc0OlxcdFxcdFxcdHNrYl9yZXNlcnZlKHNrYiwgQlVGX0hFQURST09NKTtcXG4gIDc1OlxcdFxcdFxcdHNrYl9wdXQoc2tiLCBzaXplKTtcXG4gIDc2OlxcdFxcdFxcdHNrYi1cXHUwMDNlbmV4dCA9IE5VTEw7XFxuICA3NzpcXHRcXHR9XFxuICA3ODpcXHRcXHRyZXR1cm4gc2tiO1xcbiAgNzk6XFx0fVxcbiAgODA6XFx0XFxuICA4MTpcXHR2b2lkIHRpcGNfbXNnX2luaXQodTMyIG93bl9ub2RlLCBzdHJ1Y3QgdGlwY19tc2cgKm0sIHUzMiB1c2VyLCB1MzIgdHlwZSxcXG4gIDgyOlxcdFxcdFxcdCAgIHUzMiBoc2l6ZSwgdTMyIGRub2RlKVxcbiAgODM6XFx0e1xcbiAgODQ6XFx0XFx0bWVtc2V0KG0sIDAsIGhzaXplKTtcXG4gIDg1OlxcdFxcdG1zZ19zZXRfdmVyc2lvbihtKTtcXG4gIDg2OlxcdFxcdG1zZ19zZXRfdXNlcihtLCB1c2VyKTtcXG4gIDg3OlxcdFxcdG1zZ19zZXRfaGRyX3N6KG0sIGhzaXplKTtcXG4gIDg4OlxcdFxcdG1zZ19zZXRfc2l6ZShtLCBoc2l6ZSk7XFxuICA4OTpcXHRcXHRtc2dfc2V0X3ByZXZub2RlKG0sIG93bl9ub2RlKTtcXG4gIDkwOlxcdFxcdG1zZ19zZXRfdHlwZShtLCB0eXBlKTtcXG4gIDkxOlxcdFxcdGlmIChoc2l6ZSBcXHUwMDNlIFNIT1JUX0hfU0laRSkge1xcbiAgOTI6XFx0XFx0XFx0bXNnX3NldF9vcmlnbm9kZShtLCBvd25fbm9kZSk7XFxuICA5MzpcXHRcXHRcXHRtc2dfc2V0X2Rlc3Rub2RlKG0sIGRub2RlKTtcXG4gIDk0OlxcdFxcdH1cXG4gIDk1OlxcdH1cXG4gIDk2OlxcdFxcbiAgOTc6XFx0c3RydWN0IHNrX2J1ZmYgKnRpcGNfbXNnX2NyZWF0ZSh1aW50IHVzZXIsIHVpbnQgdHlwZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDQ6MDMuNzcxNTgyNzczWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3Mzc3OTU2MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgdGlwY19idWZfYWNxdWlyZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdGlwY19idWZfYWNxdWlyZWAgYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyBqdW1wcyBvdXQgYXQgbWUuIFdlJ3JlIHVzaW5nIGBhbGxvY19za2JfZmNsb25lYCAob3IgcG90ZW50aWFsbHkganVzdCBgYWxsb2Nfc2tiYCkgdG8gZ3JhYiBvdXIgYHNrYmAgZGF0YSBidWZmZXIsIGFuZCBjcml0aWNhbGx5LCB0aGlzIGRvZXNuJ3QgemVybyB0aGUgcGF5bG9hZC4gVGhlbiwgd2UgaW5pdGlhbGl6ZSB0aGUgbWVzc2FnZSBoZWFkZXIgd2l0aCBgdGlwY19tc2dfaW5pdGAsIHdoaWNoIG9ubHkgZG9lcyBhIGBtZW1zZXRgIG9uIHRoZSAqaGVhZGVyKiAoYGhzaXplYCkuIFRoZSAqcGF5bG9hZCogaXRzZWxmLCBzdGFydGluZyBhdCBgZGF0YSA9IG1zZ19kYXRhKGhkcilgLCByZW1haW5zIHVuaW5pdGlhbGl6ZWQsIHdoaWNoIGlzIGEgcHJvYmxlbS5cblxuSSByZW1lbWJlciBwcmV2aW91c2x5LCB0aGUgY29kZSBvbmx5IHVzZWQgYHN0cmNweShkYXRhLCBsLVx1MDAzZWlmX25hbWUpO2AgdG8gcG9wdWxhdGUgdGhlIHBheWxvYWQuIFRoaXMgd291bGQgKm9ubHkqIGNvcHkgdGhlIGxlbmd0aCBvZiBgbC1cdTAwM2VpZl9uYW1lYCBwbHVzIGEgbnVsbCB0ZXJtaW5hdG9yIHRvIHRoZSBgc2tiYC4gVGhlbiwgdGhlIGNvZGUgZXhwYW5kcyB0aGUgYHNrYmAgd2l0aCBgbXNnX3NldF9zaXplYCBhbmQgYHNrYl90cmltYC4gU28gYW55IGJ5dGVzIGJldHdlZW4gdGhlIGVuZCBvZiBgbC1cdTAwM2VpZl9uYW1lYCBhbmQgdGhlIGFsbG9jYXRlZCBwYXlsb2FkIHNpemUgcmVtYWluZWQgdW5pbml0aWFsaXplZCEgVGhhdCdzIGEgZGVmaW5pdGUgdnVsbmVyYWJpbGl0eS5cblxuTm93LCB3aXRoIHRoZSBwYXRjaCwgdGhpbmdzIGFyZSBjaGFuZ2luZy4gYGxgIGlzIG5vdyB6ZXJvZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCBkdXJpbmcgdGhlIGB0aXBjX2xpbmtfY3JlYXRlYCBmdW5jdGlvbiwgc28gYGwtXHUwMDNlaWZfbmFtZWAgaXMgY29tcGxldGVseSB6ZXJvZWQgb3V0ICh1cCB0byB0aGUgc2l6ZSBvZiBgVElQQ19NQVhfSUZfTkFNRWApLiBUaGUgc3Vic2VxdWVudCBgbWVtY3B5KGRhdGEsIGwtXHUwMDNlaWZfbmFtZSwgVElQQ19NQVhfSUZfTkFNRSk7YCB0aGVuIGNvcGllcyB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIGBsLVx1MDAzZWlmX25hbWVgIChhbGwgMTYsIG9yIHdoYXRldmVyIGBUSVBDX01BWF9JRl9OQU1FYCBpcywgYnl0ZXMpIGludG8gdGhlIGBkYXRhYCBidWZmZXIuIFRoaXMgbG9va3MgbXVjaCBzYWZlci5cblxuV2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgdGhlIHNpemUgb2YgYFRJUENfTUFYX0lGX05BTUVgLiBJJ2xsIGRvIGEgcXVpY2sgZ3JlcCBmb3IgYFRJUENfTUFYX0lGX05BTUVgIHRvIGNvbmZpcm0gdGhlIGFjdHVhbCBzaXplLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE5NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjA0OjUxLjE0OTU0MjkwNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMjY3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVElQQ19NQVhfSUZfTkFNRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9iZWFyZXIuYz0xMzc9c3RhdGljIGludCBiZWFyZXJfbmFtZV92YWxpZGF0ZShjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmMtMTYwLVxcdGlmICgobWVkaWFfbGVuIFxcdTAwM2M9IDEpIHx8IChtZWRpYV9sZW4gXFx1MDAzZSBUSVBDX01BWF9NRURJQV9OQU1FKSB8fFxcbm5ldC90aXBjL2JlYXJlci5jOjE2MTpcXHQgICAgKGlmX2xlbiBcXHUwMDNjPSAxKSB8fCAoaWZfbGVuIFxcdTAwM2UgVElQQ19NQVhfSUZfTkFNRSkpXFxubmV0L3RpcGMvYmVhcmVyLmMtMTYyLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmMtMTY5LVxcdFxcdGlmIChzdHJzY3B5KG5hbWVfcGFydHMtXFx1MDAzZWlmX25hbWUsIGlmX25hbWUsXFxubmV0L3RpcGMvYmVhcmVyLmM6MTcwOlxcdFxcdFxcdCAgICBUSVBDX01BWF9JRl9OQU1FKSBcXHUwMDNjIDApXFxubmV0L3RpcGMvYmVhcmVyLmMtMTcxLVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmg9MTc5PXN0cnVjdCB0aXBjX2JlYXJlcl9uYW1lcyB7XFxubmV0L3RpcGMvYmVhcmVyLmgtMTgwLVxcdGNoYXIgbWVkaWFfbmFtZVtUSVBDX01BWF9NRURJQV9OQU1FXTtcXG5uZXQvdGlwYy9iZWFyZXIuaDoxODE6XFx0Y2hhciBpZl9uYW1lW1RJUENfTUFYX0lGX05BTUVdO1xcbm5ldC90aXBjL2JlYXJlci5oLTE4Mi19O1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTEzNz1zdHJ1Y3QgdGlwY19saW5rIHtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xNTUtXFx0dTMyIHNpbGVudF9pbnR2X2NudDtcXG5uZXQvdGlwYy9saW5rLmM6MTU2OlxcdGNoYXIgaWZfbmFtZVtUSVBDX01BWF9JRl9OQU1FXTtcXG5uZXQvdGlwYy9saW5rLmMtMTU3LVxcdHUzMiBwcmlvcml0eTtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xODMyPXN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTkwMC1cXHRcXHRtc2dfc2V0X21heF9wa3QoaGRyLCBsLVxcdTAwM2VhZHZlcnRpc2VkX210dSk7XFxubmV0L3RpcGMvbGluay5jOjE5MDE6XFx0XFx0bWVtY3B5KGRhdGEsIGwtXFx1MDAzZWlmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpO1xcbm5ldC90aXBjL2xpbmsuYzoxOTAyOlxcdFxcdG1zZ19zZXRfc2l6ZShoZHIsIElOVF9IX1NJWkUgKyBUSVBDX01BWF9JRl9OQU1FKTtcXG5uZXQvdGlwYy9saW5rLmM6MTkwMzpcXHRcXHRza2JfdHJpbShza2IsIElOVF9IX1NJWkUgKyBUSVBDX01BWF9JRl9OQU1FKTtcXG5uZXQvdGlwYy9saW5rLmMtMTkwNC1cXHR9XFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9MjE3ND1zdGF0aWMgaW50IHRpcGNfbGlua19wcm90b19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0yMjIzLVxcdFxcdGlmX25hbWUgPSAgc3RycmNocihsLVxcdTAwM2VuYW1lLCAnOicpICsgMTtcXG5uZXQvdGlwYy9saW5rLmM6MjIyNDpcXHRcXHRpZiAoc2l6ZW9mKGwtXFx1MDAzZW5hbWUpIC0gKGlmX25hbWUgLSBsLVxcdTAwM2VuYW1lKSBcXHUwMDNjPSBUSVBDX01BWF9JRl9OQU1FKVxcbm5ldC90aXBjL2xpbmsuYy0yMjI1LVxcdFxcdFxcdGJyZWFrO1xcbm5ldC90aXBjL2xpbmsuYzoyMjI2OlxcdFxcdGlmIChtc2dfZGF0YV9zeihoZHIpIFxcdTAwM2MgVElQQ19NQVhfSUZfTkFNRSlcXG5uZXQvdGlwYy9saW5rLmMtMjIyNy1cXHRcXHRcXHRicmVhaztcXG5uZXQvdGlwYy9saW5rLmM6MjIyODpcXHRcXHRzdHJzY3B5KGlmX25hbWUsIGRhdGEsIFRJUENfTUFYX0lGX05BTUUpO1xcbm5ldC90aXBjL2xpbmsuYy0yMjI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowNDo1MS4xOTQ2NzM0MzRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM2MTYzOTY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgc3Ryc2NweWAgaW4gYHRpcGNfbGlua19jcmVhdGVgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHN0cnNjcHkobC1cdTAwM2VpZl9uYW1lLCBpZl9uYW1lKWAgd2l0aGluIGB0aXBjX2xpbmtfY3JlYXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBzdGFuZGFyZCBzdHJpbmcgY29weSwgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZC5cIiBCdXQgd2FpdCwgbGV0J3MgcmVmcmVzaDogd2hhdCBkb2VzIGBzdHJzY3B5YCAqYWN0dWFsbHkqIGRvPyBBaCwgaXQgY29waWVzIGEgQy1zdHJpbmcgaW50byBhIGJ1ZmZlciwgYnV0IGNyaXRpY2FsbHksIGl0IGVuZm9yY2VzIGEgc2l6ZSBsaW1pdC4gVHJ1bmNhdGlvbiBoYXBwZW5zIGlmIHRoZSBzb3VyY2UgaXMgdG9vIGJpZywgYW5kIGl0ICphbHdheXMqIE5VTEwtdGVybWluYXRlcyB0aGUgZGVzdGluYXRpb24uIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlciB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgY29waWVkIG9yIGAtRTJCSUdgIGlmIHRoZSBidWZmZXIgd2Fzbid0IGxhcmdlIGVub3VnaC5cblxuTm93LCBhIGtleSBxdWVzdGlvbiBwb3BzIGludG8gbXkgbWluZDogRG9lcyBgc3Ryc2NweWAgemVyby1wYWQgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBhZnRlciB0aGUgY29waWVkIHN0cmluZyBhbmQgdGhlIE5VTEwgdGVybWluYXRvcj8gTm8sIEkgcmVhbGl6ZSB0aGF0IGl0IGRvZXNuJ3QuIGBzdHJzY3B5YCBzaW1wbHkgd3JpdGVzIHVwIHRvIHRoYXQgTlVMTCBjaGFyYWN0ZXIuIGBzdHJzY3B5X3BhZGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgemVybyBwYWRkaW5nLlxuXG5Pa2F5LCB0aGF0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBCdXQgdGhlbiBJIHJlY2FsbCB0aGUgYWxsb2NhdGlvbjogd2Fzbid0IGBsYCBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmooKmwsIEdGUF9BVE9NSUMpO2A/IFRoYXQgbWVhbnMgYGxgIHdhcyAqemVyb2VkKiBhdCBhbGxvY2F0aW9uISBUaGlzIGluaXRpYWwgemVyb2luZyBpcyBzaWduaWZpY2FudC5cblxuSG93ZXZlciwgYSBuYWdnaW5nIGZlZWxpbmcgcmVtYWlucy4gV2hhdCBpZiBgbC1cdTAwM2VpZl9uYW1lYCBpcyAqbW9kaWZpZWQqIGxhdGVyIGluIHRoZSBjb2RlPyBPciwgZXZlbiB3b3JzZSwgd2hhdCBpZiBgbGAgaXMgcmV1c2VkIGFmdGVyIHRoaXMgb3BlcmF0aW9uPyBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IGNoZWNrIGV2ZXJ5IHNpbmdsZSBpbnN0YW5jZSB3aGVyZSBgbC1cdTAwM2VpZl9uYW1lYCBpcyBhY2Nlc3NlZCBvciBtb2RpZmllZC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBsaWZldGltZSBvZiB0aGlzIGRhdGEgc3RydWN0dXJlIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0IGFuZCB0aGF0IHRoaXMgaXNuJ3QgYSBwb3RlbnRpYWwgc2VjdXJpdHkgaXNzdWUuIFRpbWUgZm9yIGEgY29kZSBkaXZlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzkxOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzowNDo1NS41NTYzMTU3NDFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwOTEwNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmX25hbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvbGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2xpbmsuYz01MT1zdHJ1Y3QgdGlwY19zdGF0cyB7XFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTEyLSAqIEBhY3RpdmU6IGxpbmsgaXMgYWN0aXZlXFxubmV0L3RpcGMvbGluay5jOjExMzogKiBAaWZfbmFtZTogYXNzb2NpYXRlZCBpbnRlcmZhY2UgbmFtZVxcbm5ldC90aXBjL2xpbmsuYy0xMTQtICogQHJzdF9jbnQ6IGxpbmsgcmVzZXQgY291bnRlclxcbi0tXFxubmV0L3RpcGMvbGluay5jPTEzNz1zdHJ1Y3QgdGlwY19saW5rIHtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xNTUtXFx0dTMyIHNpbGVudF9pbnR2X2NudDtcXG5uZXQvdGlwYy9saW5rLmM6MTU2OlxcdGNoYXIgaWZfbmFtZVtUSVBDX01BWF9JRl9OQU1FXTtcXG5uZXQvdGlwYy9saW5rLmMtMTU3LVxcdHUzMiBwcmlvcml0eTtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz00NDc9dTMyIHRpcGNfbGlua19zdGF0ZShzdHJ1Y3QgdGlwY19saW5rICpsKVxcbi0tXFxubmV0L3RpcGMvbGluay5jLTQ1NC0gKiBAbmV0OiBwb2ludGVyIHRvIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcXG5uZXQvdGlwYy9saW5rLmM6NDU1OiAqIEBpZl9uYW1lOiBhc3NvY2lhdGVkIGludGVyZmFjZSBuYW1lXFxubmV0L3RpcGMvbGluay5jLTQ1Ni0gKiBAYmVhcmVyX2lkOiBpZCAoaW5kZXgpIG9mIGFzc29jaWF0ZWQgYmVhcmVyXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtNDc1LSAqL1xcbm5ldC90aXBjL2xpbmsuYzo0NzY6Ym9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCxcXG5uZXQvdGlwYy9saW5rLmMtNDc3LVxcdFxcdCAgICAgIGludCB0b2xlcmFuY2UsIGNoYXIgbmV0X3BsYW5lLCB1MzIgbXR1LCBpbnQgcHJpb3JpdHksXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtNTA0LVxcdHNucHJpbnRmKGwtXFx1MDAzZW5hbWUsIHNpemVvZihsLVxcdTAwM2VuYW1lKSwgXFxcIiVzOiVzLSVzOnVua25vd25cXFwiLFxcbm5ldC90aXBjL2xpbmsuYzo1MDU6XFx0XFx0IHNlbGZfc3RyLCBpZl9uYW1lLCBwZWVyX3N0cik7XFxubmV0L3RpcGMvbGluay5jLTUwNi1cXG5uZXQvdGlwYy9saW5rLmM6NTA3OlxcdHN0cnNjcHkobC1cXHUwMDNlaWZfbmFtZSwgaWZfbmFtZSk7XFxubmV0L3RpcGMvbGluay5jLTUwOC1cXHRsLVxcdTAwM2VhZGRyID0gcGVlcjtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xODMyPXN0YXRpYyB2b2lkIHRpcGNfbGlua19idWlsZF9wcm90b19tc2coc3RydWN0IHRpcGNfbGluayAqbCwgaW50IG10eXAsIGJvb2wgcHJvYmUsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTkwMC1cXHRcXHRtc2dfc2V0X21heF9wa3QoaGRyLCBsLVxcdTAwM2VhZHZlcnRpc2VkX210dSk7XFxubmV0L3RpcGMvbGluay5jOjE5MDE6XFx0XFx0bWVtY3B5KGRhdGEsIGwtXFx1MDAzZWlmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpO1xcbm5ldC90aXBjL2xpbmsuYy0xOTAyLVxcdFxcdG1zZ19zZXRfc2l6ZShoZHIsIElOVF9IX1NJWkUgKyBUSVBDX01BWF9JRl9OQU1FKTtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0yMTc0PXN0YXRpYyBpbnQgdGlwY19saW5rX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTIxODktXFx0aW50IHJjID0gMCwgcmVsZWFzZWQ7XFxubmV0L3RpcGMvbGluay5jOjIxOTA6XFx0Y2hhciAqaWZfbmFtZTtcXG5uZXQvdGlwYy9saW5rLmMtMjE5MS1cXHR2b2lkICpkYXRhO1xcbi0tXFxubmV0L3RpcGMvbGluay5jLTIyMjItXFx0XFx0LyogQ29tcGxldGUgb3duIGxpbmsgbmFtZSB3aXRoIHBlZXIncyBpbnRlcmZhY2UgbmFtZSAqL1xcbm5ldC90aXBjL2xpbmsuYzoyMjIzOlxcdFxcdGlmX25hbWUgPSAgc3RycmNocihsLVxcdTAwM2VuYW1lLCAnOicpICsgMTtcXG5uZXQvdGlwYy9saW5rLmM6MjIyNDpcXHRcXHRpZiAoc2l6ZW9mKGwtXFx1MDAzZW5hbWUpIC0gKGlmX25hbWUgLSBsLVxcdTAwM2VuYW1lKSBcXHUwMDNjPSBUSVBDX01BWF9JRl9OQU1FKVxcbm5ldC90aXBjL2xpbmsuYy0yMjI1LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L3RpcGMvbGluay5jLTIyMjctXFx0XFx0XFx0YnJlYWs7XFxubmV0L3RpcGMvbGluay5jOjIyMjg6XFx0XFx0c3Ryc2NweShpZl9uYW1lLCBkYXRhLCBUSVBDX01BWF9JRl9OQU1FKTtcXG5uZXQvdGlwYy9saW5rLmMtMjIyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDQ6NTUuNjM3MjMwMDkxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MjgzMDEyODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6ICoqRXhwbG9yaW5nIFBvdGVudGlhbCBTaWRlIEVmZmVjdHMgYW5kIERlcGVuZGVuY2llcyoqXG5cbkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYGwtXHUwMDNlaWZfbmFtZWAgYW5kIGBsLVx1MDAzZW5hbWVgIGFyZSB1c2VkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGViYXNlLCBwYXJ0aWN1bGFybHkgd2hlcmUgdGhleSdyZSBpbnRlcmFjdGluZyB3aXRoIGVhY2ggb3RoZXIuIEknbSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9yIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgaG93IHRoZXNlIHZhcmlhYmxlcyBhcmUgdXRpbGl6ZWQsIGJlZm9yZSBJIHByb2NlZWQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBteSBuZXh0IGFjdGlvbiBkb2VzIG5vdCBjcmVhdGUgYW55IHVuZXhwZWN0ZWQgY29uc2VxdWVuY2VzLiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYGwtXHUwMDNlbmFtZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTk2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDU6MTQuOTIwMjQ1MDk4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYzMjc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsLVxcdTAwM2VuYW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL2xpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9saW5rLmM9NDQyPWNoYXIgKnRpcGNfbGlua19uYW1lKHN0cnVjdCB0aXBjX2xpbmsgKmwpXFxubmV0L3RpcGMvbGluay5jLTQ0My17XFxubmV0L3RpcGMvbGluay5jOjQ0NDpcXHRyZXR1cm4gbC1cXHUwMDNlbmFtZTtcXG5uZXQvdGlwYy9saW5rLmMtNDQ1LX1cXG4tLVxcbm5ldC90aXBjL2xpbmsuYz00NzY9Ym9vbCB0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWZfbmFtZSwgaW50IGJlYXJlcl9pZCxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy01MDMtXFx0LyogUGVlciBpL2YgbmFtZSB3aWxsIGJlIGNvbXBsZXRlZCBieSByZXNldC9hY3RpdmF0ZSBtZXNzYWdlICovXFxubmV0L3RpcGMvbGluay5jOjUwNDpcXHRzbnByaW50ZihsLVxcdTAwM2VuYW1lLCBzaXplb2YobC1cXHUwMDNlbmFtZSksIFxcXCIlczolcy0lczp1bmtub3duXFxcIixcXG5uZXQvdGlwYy9saW5rLmMtNTA1LVxcdFxcdCBzZWxmX3N0ciwgaWZfbmFtZSwgcGVlcl9zdHIpO1xcbi0tXFxubmV0L3RpcGMvbGluay5jLTUyNC1cXHRsLVxcdTAwM2VpbnB1dHEgPSBpbnB1dHE7XFxubmV0L3RpcGMvbGluay5jOjUyNTpcXHRsLVxcdTAwM2VuYW1lZHEgPSBuYW1lZHE7XFxubmV0L3RpcGMvbGluay5jLTUyNi1cXHRsLVxcdTAwM2VzdGF0ZSA9IExJTktfUkVTRVRUSU5HO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTU1Mz1ib29sIHRpcGNfbGlua19iY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgb3dubm9kZSwgdTMyIHBlZXIsIHU4ICpwZWVyX2lkLFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTU3My1cXHRcXHQvKiBCcm9hZGNhc3QgcmVjZWl2ZXIgbGluayBuYW1lOiBcXFwiYnJvYWRjYXN0LWxpbms6XFx1MDAzY3BlZXJcXHUwMDNlXFxcIiAqL1xcbm5ldC90aXBjL2xpbmsuYzo1NzQ6XFx0XFx0c25wcmludGYobC1cXHUwMDNlbmFtZSwgc2l6ZW9mKGwtXFx1MDAzZW5hbWUpLCBcXFwiJXM6JXNcXFwiLCB0aXBjX2JjbGlua19uYW1lLFxcbm5ldC90aXBjL2xpbmsuYy01NzUtXFx0XFx0XFx0IHBlZXJfc3RyKTtcXG5uZXQvdGlwYy9saW5rLmMtNTc2LVxcdH0gZWxzZSB7XFxubmV0L3RpcGMvbGluay5jOjU3NzpcXHRcXHRzdHJzY3B5KGwtXFx1MDAzZW5hbWUsIHRpcGNfYmNsaW5rX25hbWUpO1xcbm5ldC90aXBjL2xpbmsuYy01NzgtXFx0fVxcbi0tXFxubmV0L3RpcGMvbGluay5jPTYwMT1pbnQgdGlwY19saW5rX2ZzbV9ldnQoc3RydWN0IHRpcGNfbGluayAqbCwgaW50IGV2dClcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy03NDktXFx0ZGVmYXVsdDpcXG5uZXQvdGlwYy9saW5rLmM6NzUwOlxcdFxcdHByX2VycihcXFwiVW5rbm93biBGU00gc3RhdGUgJXggaW4gJXNcXFxcblxcXCIsIGwtXFx1MDAzZXN0YXRlLCBsLVxcdTAwM2VuYW1lKTtcXG5uZXQvdGlwYy9saW5rLmMtNzUxLVxcdH1cXG5uZXQvdGlwYy9saW5rLmM6NzUyOlxcdHRyYWNlX3RpcGNfbGlua19mc20obC1cXHUwMDNlbmFtZSwgb2xkX3N0YXRlLCBsLVxcdTAwM2VzdGF0ZSwgZXZ0KTtcXG5uZXQvdGlwYy9saW5rLmMtNzUzLVxcdHJldHVybiByYztcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy03NTUtXFx0cHJfZXJyKFxcXCJJbGxlZ2FsIEZTTSBldmVudCAleCBpbiBzdGF0ZSAleCBvbiBsaW5rICVzXFxcXG5cXFwiLFxcbm5ldC90aXBjL2xpbmsuYzo3NTY6XFx0ICAgICAgIGV2dCwgbC1cXHUwMDNlc3RhdGUsIGwtXFx1MDAzZW5hbWUpO1xcbm5ldC90aXBjL2xpbmsuYzo3NTc6XFx0dHJhY2VfdGlwY19saW5rX2ZzbShsLVxcdTAwM2VuYW1lLCBvbGRfc3RhdGUsIGwtXFx1MDAzZXN0YXRlLCBldnQpO1xcbm5ldC90aXBjL2xpbmsuYy03NTgtXFx0cmV0dXJuIHJjO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTEwMTE9aW50IHRpcGNfbGlua194bWl0KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTA0NC1cXHRcXHRpZiAoaW1wID09IFRJUENfU1lTVEVNX0lNUE9SVEFOQ0UpIHtcXG5uZXQvdGlwYy9saW5rLmM6MTA0NTpcXHRcXHRcXHRwcl93YXJuKFxcXCIlc1xcdTAwM2Mlc1xcdTAwM2UsIGxpbmsgb3ZlcmZsb3dcXFwiLCBsaW5rX3JzdF9tc2csIGwtXFx1MDAzZW5hbWUpO1xcbm5ldC90aXBjL2xpbmsuYy0xMDQ2LVxcdFxcdFxcdF9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTExOTU9c3RhdGljIGJvb2wgbGlua19yZXRyYW5zbWl0X2ZhaWx1cmUoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHRpcGNfbGluayAqcixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xMjE0LVxcbm5ldC90aXBjL2xpbmsuYzoxMjE1OlxcdHByX3dhcm4oXFxcIlJldHJhbnNtaXNzaW9uIGZhaWx1cmUgb24gbGluayBcXHUwMDNjJXNcXHUwMDNlXFxcXG5cXFwiLCBsLVxcdTAwM2VuYW1lKTtcXG5uZXQvdGlwYy9saW5rLmMtMTIxNi1cXHRsaW5rX3ByaW50KGwsIFxcXCJTdGF0ZSBvZiBsaW5rIFxcXCIpO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTEyNDQ9c3RhdGljIGJvb2wgdGlwY19kYXRhX2lucHV0KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTI2Ny1cXHRcXHRsLVxcdTAwM2ViY19yY3ZsaW5rLVxcdTAwM2VzdGF0ZSA9IExJTktfRVNUQUJMSVNIRUQ7XFxubmV0L3RpcGMvbGluay5jOjEyNjg6XFx0XFx0c2tiX3F1ZXVlX3RhaWwobC1cXHUwMDNlbmFtZWRxLCBza2IpO1xcbm5ldC90aXBjL2xpbmsuYy0xMjY5LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTE0NDU9c3RhdGljIHU4IF9fdGlwY19idWlsZF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICpnYSxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xNDYzLVxcdFxcdFxcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcIkdhY2tzIG9uICVzOiAlZCwgcWw6ICVkIVxcXFxuXFxcIixcXG5uZXQvdGlwYy9saW5rLmM6MTQ2NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgbC1cXHUwMDNlbmFtZSwgbixcXG5uZXQvdGlwYy9saW5rLmMtMTQ2NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiX3F1ZXVlX2xlbihcXHUwMDI2bC1cXHUwMDNlZGVmZXJkcSkpO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTE4MzI9c3RhdGljIHZvaWQgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBpbnQgbXR5cCwgYm9vbCBwcm9iZSxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xOTEyLVxcdF9fc2tiX3F1ZXVlX3RhaWwoeG1pdHEsIHNrYik7XFxubmV0L3RpcGMvbGluay5jOjE5MTM6XFx0dHJhY2VfdGlwY19wcm90b19idWlsZChza2IsIGZhbHNlLCBsLVxcdTAwM2VuYW1lKTtcXG5uZXQvdGlwYy9saW5rLmMtMTkxNC19XFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9MjE3ND1zdGF0aWMgaW50IHRpcGNfbGlua19wcm90b19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0yMTkyLVxcbm5ldC90aXBjL2xpbmsuYzoyMTkzOlxcdHRyYWNlX3RpcGNfcHJvdG9fcmN2KHNrYiwgZmFsc2UsIGwtXFx1MDAzZW5hbWUpO1xcbm5ldC90aXBjL2xpbmsuYy0yMTk0LVxcbi0tXFxubmV0L3RpcGMvbGluay5jLTIyMjItXFx0XFx0LyogQ29tcGxldGUgb3duIGxpbmsgbmFtZSB3aXRoIHBlZXIncyBpbnRlcmZhY2UgbmFtZSAqL1xcbm5ldC90aXBjL2xpbmsuYzoyMjIzOlxcdFxcdGlmX25hbWUgPSAgc3RycmNocihsLVxcdTAwM2VuYW1lLCAnOicpICsgMTtcXG5uZXQvdGlwYy9saW5rLmM6MjIyNDpcXHRcXHRpZiAoc2l6ZW9mKGwtXFx1MDAzZW5hbWUpIC0gKGlmX25hbWUgLSBsLVxcdTAwM2VuYW1lKSBcXHUwMDNjPSBUSVBDX01BWF9JRl9OQU1FKVxcbm5ldC90aXBjL2xpbmsuYy0yMjI1LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTI1NTM9c3RhdGljIHZvaWQgbGlua19wcmludChzdHJ1Y3QgdGlwY19saW5rICpsLCBjb25zdCBjaGFyICpzdHIpXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMjU1OC1cXG5uZXQvdGlwYy9saW5rLmM6MjU1OTpcXHRwcl9pbmZvKFxcXCIlcyBMaW5rIFxcdTAwM2Mlc1xcdTAwM2Ugc3RhdGUgJXhcXFxcblxcXCIsIHN0ciwgbC1cXHUwMDNlbmFtZSwgbC1cXHUwMDNlc3RhdGUpO1xcbm5ldC90aXBjL2xpbmsuYy0yNTYwLVxcdHByX2luZm8oXFxcIlhNVFE6ICV1IFsldS0ldV0sIEJLTEdROiAldSwgU05ETlg6ICV1LCBSQ1ZOWDogJXVcXFxcblxcXCIsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9Mjc4OT1pbnQgdGlwY19ubF9hZGRfYmNfbGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTI4MjAtXFx0XFx0Z290byBhdHRyX21zZ19mdWxsO1xcbm5ldC90aXBjL2xpbmsuYzoyODIxOlxcdGlmIChubGFfcHV0X3N0cmluZyhtc2ctXFx1MDAzZXNrYiwgVElQQ19OTEFfTElOS19OQU1FLCBiY2wtXFx1MDAzZW5hbWUpKVxcbm5ldC90aXBjL2xpbmsuYy0yODIyLVxcdFxcdGdvdG8gYXR0cl9tc2dfZnVsbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MDU6MTQuOTY1ODgwNTM4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNTQxMjgwMzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBDb21taXQ6IEtNU0FOIE5lZWRzIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb21taXQncyBwdXJwb3NlIOKAkyB3aGF0IGJ1ZyBpcyBpdCBhZGRyZXNzaW5nIG9yIHdoYXQgY2hhbmdlIGlzIGl0IG1ha2luZz8gVGhlIGRpZmYgc2hvd3MgYSBmZXcga2V5IG1vZGlmaWNhdGlvbnM6IGBzdHJjcHlgIGlzIGJlaW5nIHJlcGxhY2VkIGJ5IGBzdHJzY3B5YCBhbmQgYG1lbWNweWAgaW4gc2V2ZXJhbCBwbGFjZXMsIHNwZWNpZmljYWxseSBpbnZvbHZpbmcgdGhlIGBpZl9uYW1lYCBhbmQgYG5hbWVgIGZpZWxkcyB3aXRoaW4gYSBgdGlwY19saW5rYCBzdHJ1Y3R1cmUuXG5cblRoZSBjb3JlIG9mIHRoZSBpc3N1ZSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBzdGVtcyBmcm9tIGhvdyB0aGUgbGluayBwcm90b2NvbCBtZXNzYWdlIGlzIGNvbnN0cnVjdGVkIGFuZCB0cmFuc21pdHRlZC4gUHJldmlvdXNseSwgYSBgc3RyY3B5YCBjYWxsIGluIGB0aXBjX2xpbmtfYnVpbGRfcHJvdG9fbXNnYCB3YXMgdXNlZCB0byBjb3B5IGBsLVx1MDAzZWlmX25hbWVgIGludG8gdGhlIG1lc3NhZ2UgcGF5bG9hZC4gSG93ZXZlciwgYHN0cmNweWAgb25seSBjb3BpZXMgdXAgdG8gdGhlIG51bGwgdGVybWluYXRvciwgbGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyIHVuaW5pdGlhbGl6ZWQuIFRoaXMgY291bGQgbGVhZCB0byBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrLCB3aGVyZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgdHJhbnNtaXR0ZWQgb3ZlciB0aGUgbmV0d29yay4gSXQgY291bGQgYWxzbyB0cmlnZ2VyIEtNU0FOLlxuXG5UaGUgcGF0Y2ggYXBwZWFycyB0byBiZSBhIGRpcmVjdCByZXNwb25zZSB0byB0aGlzIHZ1bG5lcmFiaWxpdHksIGFpbWluZyB0byBlbnN1cmUgdGhlIGVudGlyZSBidWZmZXIgaXMgaW5pdGlhbGl6ZWQuXG5cbk5vdywgbGV0J3MgY2FyZWZ1bGx5IGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBLTVNBTiBzZXNzaW9uLiBUaGUgS01TQU4gZ3VpZGVsaW5lcyBhcmUgcXVpdGUgY2xlYXI6IHdlIG9ubHkgbmVlZCBLTVNBTiBpZiB0aGUgcGF0Y2ggKmludHJvZHVjZXMqIG9yICpleHBvc2VzKiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKEtBU0FOLCBMT0NLREVQLCBldGMuKSB3b3VsZCBtaXNzLiBJIG5lZWQgdG8gaG9saXN0aWNhbGx5IHJldmlldyB0aGUgcGF0Y2ggd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBlbnN1cmUgdGhpcyBwYXRjaCBpcyBub3QgY2hhbmdpbmcgY29udHJvbCBmbG93IG9yIGNhbGN1bGF0aW9ucyBpbiBhIHdheSB0aGF0IGludHJvZHVjZXMgdGhpcyByaXNrLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpbiBgdGlwY19saW5rX2NyZWF0ZWAsIHRoZSBgdGlwY19saW5rYCBzdHJ1Y3R1cmUgKGBsYCkgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGlzIGNyaXRpY2FsLiBUaGlzIGVuc3VyZXMgdGhhdCBhbGwgbWVtYmVycyBvZiB0aGUgc3RydWN0dXJlLCBpbmNsdWRpbmcgdGhlIGBpZl9uYW1lYCBmaWVsZCwgYXJlICp6ZXJvLWluaXRpYWxpemVkKiB1cG9uIGFsbG9jYXRpb24uIFRoZSBzdWJzZXF1ZW50IHVzZSBvZiBgc3Ryc2NweWAgb3ZlcndyaXRlcyB0aGUgZmlyc3QgZmV3IGJ5dGVzIHdpdGggdGhlIGFjdHVhbCBpbnRlcmZhY2UgbmFtZS4gSW1wb3J0YW50bHksIHRoZSByZW1haW5pbmcgYnl0ZXMgb2YgYGwtXHUwMDNlaWZfbmFtZWAgKnJlbWFpbiogemVyb2VkLiBUaGUgdXNlIG9mIGBtZW1jcHkoZGF0YSwgbC1cdTAwM2VpZl9uYW1lLCBUSVBDX01BWF9JRl9OQU1FKWAgdGhlbiBjb3BpZXMgdGhlIGVudGlyZSAxNi1ieXRlIGJ1ZmZlciBmcm9tIGBsLVx1MDAzZWlmX25hbWVgIGludG8gdGhlIG91dGdvaW5nIHBhY2tldC4gQmVjYXVzZSBgbC1cdTAwM2VpZl9uYW1lYCBpcyB6ZXJvLWluaXRpYWxpemVkIGFuZCB0aGVuIHBvdGVudGlhbGx5IHBhcnRpYWxseSBvdmVyd3JpdHRlbiBieSBhIHN0cmluZyAobnVsbC10ZXJtaW5hdGVkKSwgYWxsIHRoZSBjb3BpZWQgYnl0ZXMgd2lsbCBiZSBpbml0aWFsaXplZCwgZWl0aGVyIHRoZSBkYXRhIG9mIHRoZSBzdHJpbmcsIG9yIHplcm8uXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoICpyZW1vdmVzKiB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSB1c2Ugb2YgYGt6YWxsb2Nfb2JqYCwgYHN0cnNjcHlgLCBhbmQgYG1lbWNweWAgZ3VhcmFudGVlcyB0aGF0IHRoZSBmdWxsIGJ1ZmZlciBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHRyYW5zbWlzc2lvbi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZSBzdHJpbmcgY29weSBhbmQgYnVmZmVyIGNvcHkgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBzYWZlbHkuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IEtNU0FOIGNvbmNlcm5zLiBTdGFuZGFyZCBLQVNBTiBhbmQgY29tcGlsZXIgY2hlY2tzIGFyZSBzdWZmaWNpZW50LiBObyBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyByZXF1aXJlZC4gVGhlIGBOZWVkc0tNU0FOYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSBzaG91bGQgY2xlYXJseSBhcnRpY3VsYXRlIHRoaXMgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc1NSwiT3V0cHV0VG9rZW5zIjoyMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjA1OjI3LjUwNzE2MjkyNVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgdW5zYWZlIGBzdHJjcHlgIGNhbGxzIHdpdGggYHN0cnNjcHlgIGluIGB0aXBjX2xpbmtfY3JlYXRlYCBhbmQgYHRpcGNfbGlua19iY19jcmVhdGVgLCBhbmQgY2hhbmdlcyBgc3RyY3B5YCB0byBgbWVtY3B5KGRhdGEsIGwtXFx1MDAzZWlmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpYCBpbiBgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZ2AuXFxuXFxuVGhlIGBzdHJ1Y3QgdGlwY19saW5rYCBpbnN0YW5jZSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigqbCwgR0ZQX0FUT01JQylgLCBlbnN1cmluZyB0aGF0IGFsbCBmaWVsZHMgaW5jbHVkaW5nIGBsLVxcdTAwM2VpZl9uYW1lYCBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZC4gQ29weWluZyBgVElQQ19NQVhfSUZfTkFNRWAgYnl0ZXMgZnJvbSBgbC1cXHUwMDNlaWZfbmFtZWAgaW50byB0aGUgcGFja2V0IHBheWxvYWQgYGRhdGFgIHJlYWRzIG9ubHkgZnVsbHkgaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGluZywgb3IgdXNlci1zcGFjZSBpbmZvIGxlYWtzLlxcblxcblN0YW5kYXJkIEtBU0FOIGFuZCBjb21waWxlciBmb3J0aWZpY2F0aW9ucyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyBvciBidWZmZXIgb3ZlcmZsb3cgYnVncy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgdW5zYWZlIGBzdHJjcHlgIGNhbGxzIHdpdGggYHN0cnNjcHlgIGluIGB0aXBjX2xpbmtfY3JlYXRlYCBhbmQgYHRpcGNfbGlua19iY19jcmVhdGVgLCBhbmQgY2hhbmdlcyBgc3RyY3B5YCB0byBgbWVtY3B5KGRhdGEsIGwtXFx1MDAzZWlmX25hbWUsIFRJUENfTUFYX0lGX05BTUUpYCBpbiBgdGlwY19saW5rX2J1aWxkX3Byb3RvX21zZ2AuXFxuXFxuVGhlIGBzdHJ1Y3QgdGlwY19saW5rYCBpbnN0YW5jZSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigqbCwgR0ZQX0FUT01JQylgLCBlbnN1cmluZyB0aGF0IGFsbCBmaWVsZHMgaW5jbHVkaW5nIGBsLVxcdTAwM2VpZl9uYW1lYCBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZC4gQ29weWluZyBgVElQQ19NQVhfSUZfTkFNRWAgYnl0ZXMgZnJvbSBgbC1cXHUwMDNlaWZfbmFtZWAgaW50byB0aGUgcGFja2V0IHBheWxvYWQgYGRhdGFgIHJlYWRzIG9ubHkgZnVsbHkgaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGluZywgb3IgdXNlci1zcGFjZSBpbmZvIGxlYWtzLlxcblxcblN0YW5kYXJkIEtBU0FOIGFuZCBjb21waWxlciBmb3J0aWZpY2F0aW9ucyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyBvciBidWZmZXIgb3ZlcmZsb3cgYnVncy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrwhm6[1] Phase: Succeeded StartedAt: 2026-08-29 13:05:38 +0000 UTC FinishedAt: 2026-08-29 13:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 13:05:38 +0000 UTC FinishedAt: 2026-08-29 13:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2] Phase: Succeeded StartedAt: 2026-08-29 13:05:38 +0000 UTC FinishedAt: 2026-08-29 16:43:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-29 13:05:38 +0000 UTC FinishedAt: 2026-08-29 16:43:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-29 13:05:38 +0000 UTC FinishedAt: 2026-08-29 13:05:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-29 13:05:38 +0000 UTC FinishedAt: 2026-08-29 13:05:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowrwhm6/series-workflowrwhm6-convert-artifact-2938191701/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-29 13:05:48 +0000 UTC FinishedAt: 2026-08-29 13:21:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-29 13:05:48 +0000 UTC FinishedAt: 2026-08-29 13:21:44 +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:*6c355f0e-bb8c-47a2-ad79-5b63aa570dfb,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-workflowrwhm6/series-workflowrwhm6-convert-artifact-2938191701/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "e5f730c5-95b0-4fab-aec2-fe351041fc6e", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrwhm6/series-workflowrwhm6-build-action-2031937979/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-29 13:05:48 +0000 UTC FinishedAt: 2026-08-29 13:21:34 +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:*6c355f0e-bb8c-47a2-ad79-5b63aa570dfb,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-workflowrwhm6/series-workflowrwhm6-convert-artifact-2938191701/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "e5f730c5-95b0-4fab-aec2-fe351041fc6e", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrwhm6/series-workflowrwhm6-build-action-2031937979/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-29 13:21:44 +0000 UTC FinishedAt: 2026-08-29 13:21:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-29 13:21:44 +0000 UTC FinishedAt: 2026-08-29 13:21:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-29 13:21:44 +0000 UTC FinishedAt: 2026-08-29 13:21:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-29 13:21:44 +0000 UTC FinishedAt: 2026-08-29 13:21:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowrwhm6/series-workflowrwhm6-convert-artifact-2660454960/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-29 13:21:54 +0000 UTC FinishedAt: 2026-08-29 13:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-29 13:21:54 +0000 UTC FinishedAt: 2026-08-29 13:23:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e5f730c5-95b0-4fab-aec2-fe351041fc6e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrwhm6/series-workflowrwhm6-build-action-2031937979/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-29 13:23:47 +0000 UTC FinishedAt: 2026-08-29 13:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-29 13:23:47 +0000 UTC FinishedAt: 2026-08-29 13:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-29 13:23:47 +0000 UTC FinishedAt: 2026-08-29 13:40:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-29 13:23:47 +0000 UTC FinishedAt: 2026-08-29 13:40:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6c355f0e-bb8c-47a2-ad79-5b63aa570dfb,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-workflowrwhm6/series-workflowrwhm6-convert-artifact-2660454960/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "b413dfda-c576-4446-a9b7-555ee503e605", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrwhm6/series-workflowrwhm6-build-action-3925421100/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-29 13:23:47 +0000 UTC FinishedAt: 2026-08-29 13:40:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6c355f0e-bb8c-47a2-ad79-5b63aa570dfb,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-workflowrwhm6/series-workflowrwhm6-convert-artifact-2660454960/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "b413dfda-c576-4446-a9b7-555ee503e605", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrwhm6/series-workflowrwhm6-build-action-3925421100/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-29 13:40:11 +0000 UTC FinishedAt: 2026-08-29 13:40:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-29 13:40:11 +0000 UTC FinishedAt: 2026-08-29 13:40:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-29 13:40:11 +0000 UTC FinishedAt: 2026-08-29 13:42:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-29 13:40:11 +0000 UTC FinishedAt: 2026-08-29 13:42:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b413dfda-c576-4446-a9b7-555ee503e605,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrwhm6/series-workflowrwhm6-build-action-3925421100/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-29 13:42:10 +0000 UTC FinishedAt: 2026-08-29 16:43:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-29 13:42:10 +0000 UTC FinishedAt: 2026-08-29 16:43:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*e5f730c5-95b0-4fab-aec2-fe351041fc6e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b413dfda-c576-4446-a9b7-555ee503e605,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrwhm6/series-workflowrwhm6-build-action-2031937979/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrwhm6/series-workflowrwhm6-build-action-3925421100/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-29 13:42:10 +0000 UTC FinishedAt: 2026-08-29 13:42:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-29 13:42:10 +0000 UTC FinishedAt: 2026-08-29 13:42:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrwhm6/series-workflowrwhm6-convert-artifact-39816617/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-29 13:42:10 +0000 UTC FinishedAt: 2026-08-29 13:42:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-29 13:42:10 +0000 UTC FinishedAt: 2026-08-29 13:42:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-29 13:42:10 +0000 UTC FinishedAt: 2026-08-29 13:42:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-29 13:42:20 +0000 UTC FinishedAt: 2026-08-29 16:43:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwhm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_create","tipc_link_bc_create","tipc_link_build_reset_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"5e027c65-0e45-47fb-9868-b1b6ea4851fd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-29 13:42:20 +0000 UTC FinishedAt: 2026-08-29 16:43:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e5f730c5-95b0-4fab-aec2-fe351041fc6e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b413dfda-c576-4446-a9b7-555ee503e605,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrwhm6/series-workflowrwhm6-build-action-2031937979/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrwhm6/series-workflowrwhm6-build-action-3925421100/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrwhm6/series-workflowrwhm6-convert-artifact-39816617/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,}