Name: series-workflowrlck4 Phase: Succeeded StartedAt: 2026-08-12 14:45:07 +0000 UTC FinishedAt: 2026-08-12 19:01:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[0] Phase: Succeeded StartedAt: 2026-08-12 14:45:07 +0000 UTC FinishedAt: 2026-08-12 15:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 14:45:07 +0000 UTC FinishedAt: 2026-08-12 15:13:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ac155a26750a595703e7dadff84735456d75a479", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ac155a26750a595703e7dadff84735456d75a479", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "2d5bad66-7a35-489e-b425-6bdcd8972694" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tipc_bearer_get_name", "__tipc_nl_add_monitor", "tipc_nl_node_dump_monitor" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX2JlYXJlcl9nZXRfbmFtZSYjMzQ7LAogICAgJiMzNDtfX3RpcGNfbmxfYWRkX21vbml0b3ImIzM0OywKICAgICYjMzQ7dGlwY19ubF9ub2RlX2R1bXBfbW9uaXRvciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHRvIHByZXZlbnQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZnJvbSBgYi1cdTAwM2VuYW1lYCBhbmQgb3V0LW9mLWJvdW5kcyB3cml0ZXMgdG8gdGhlIHN0YWNrLWFsbG9jYXRlZCBgYmVhcmVyX25hbWVgIGJ1ZmZlciBpbiBgX190aXBjX25sX2FkZF9tb25pdG9yYC4gT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGJvdGggaGVhcCBhbmQgc3RhY2spIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCBoZXJlOiB0aGUgc291cmNlIGJ1ZmZlciBgYi1cdTAwM2VuYW1lYCBpcyBwYXJ0IG9mIGEgemVyby1hbGxvY2F0ZWQgc3RydWN0dXJlLCBhbmQgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBgYmVhcmVyX25hbWVgIGlzIG9ubHkgcmVhZCBieSBgbmxhX3B1dF9zdHJpbmdgLCB3aGljaCBzdHJpY3RseSByZWFkcyB1cCB0byB0aGUgbnVsbCB0ZXJtaW5hdG9yLiBTaW5jZSBgc3Ryc2NweWAgZ3VhcmFudGVlcyBudWxsLXRlcm1pbmF0aW9uIGFuZCBgbmxhX3B1dF9zdHJpbmdgIGRvZXMgbm90IHJlYWQgcGFzdCBpdCwgbm8gdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgaXMgZXZlciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaHVzLCBzdGFuZGFyZCBLQVNBTiBpcyBmdWxseSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBzdHJjcHkgd2l0aCBzdHJzY3B5IGluIHRpcGNfYmVhcmVyX2dldF9uYW1lIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUSVBDIG5ldGxpbmsgQVBJIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHRydW5jYXRpb25zIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODFmOWU4ODBiOTBjMjhjZjhiYzlhNjUwM2M3YjA3OWIxNjY3ZTU4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE1OjA5OjE3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2JlYXJlci5jIGIvbmV0L3RpcGMvYmVhcmVyLmNcbmluZGV4IDA1ZGNkMmY5ZTg4N2EuLjk1MWJiNDc0YzdkNDQgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9iZWFyZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvYmVhcmVyLmNcbkBAIC0yMDksNyAmIzQzOzIwOSw3IEBAIGludCB0aXBjX2JlYXJlcl9nZXRfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUsIHUzMiBiZWFyZXJfaWQpXG4gXHRpZiAoIWIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0c3RyY3B5KG5hbWUsIGItXHUwMDNlbmFtZSk7XG4mIzQzO1x0c3Ryc2NweShuYW1lLCBiLVx1MDAzZW5hbWUsIFRJUENfTUFYX0JFQVJFUl9OQU1FKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNTowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfYmVhcmVyX2dldF9uYW1lJiMzNDssCiAgICAmIzM0O19fdGlwY19ubF9hZGRfbW9uaXRvciYjMzQ7LAogICAgJiMzNDt0aXBjX25sX25vZGVfZHVtcF9tb25pdG9yJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHN0cmNweSB3aXRoIHN0cnNjcHkgaW4gdGlwY19iZWFyZXJfZ2V0X25hbWUgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3dzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgbmV0bGluayBBUEkgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgdHJ1bmNhdGlvbnMgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4MWY5ZTg4MGI5MGMyOGNmOGJjOWE2NTAzYzdiMDc5YjE2NjdlNThhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTU6MDk6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iZWFyZXIuYyBiL25ldC90aXBjL2JlYXJlci5jCmluZGV4IDA1ZGNkMmY5ZTg4N2EuLjk1MWJiNDc0YzdkNDQgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2JlYXJlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL2JlYXJlci5jCkBAIC0yMDksNyAmIzQzOzIwOSw3IEBAIGludCB0aXBjX2JlYXJlcl9nZXRfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUsIHUzMiBiZWFyZXJfaWQpCiAJaWYgKCFiKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmNweShuYW1lLCBiLSZndDtuYW1lKTsKJiM0MzsJc3Ryc2NweShuYW1lLCBiLSZndDtuYW1lLCBUSVBDX01BWF9CRUFSRVJfTkFNRSk7CiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTZWN1cml0eSBQYXRjaDogc3RyY3B5IHRvIHN0cnNjcHkgaW4gdGlwY19iZWFyZXIuYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCB0aGV5JiMzOTtyZSBzd2FwcGluZyBgc3RyY3B5YCBmb3IgYHN0cnNjcHlgIGluIGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAgd2l0aGluIGBuZXQvdGlwYy9iZWFyZXIuY2AuJiMzNDsgQ2xhc3NpYyBidWZmZXIgb3ZlcmZsb3cgbWl0aWdhdGlvbiwgcmlnaHQ/IEdvb2QgY2F0Y2gsIGdvb2QgcHJhY3RpY2UuIEJ1dCBpcyB0aGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gc3BlbmQgc2VyaW91cyBmdXp6aW5nIHRpbWUgb24/CgpJbml0aWFsbHksIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7SXQmIzM5O3MganVzdCBhIHN0cmFpZ2h0IHJlcGxhY2VtZW50LiBJdCYjMzk7cyBmdW5jdGlvbmFsLCBidXQgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlICpuZXcqIGxvZ2ljLCBwZXIgc2UuJiMzNDsgSG93ZXZlciwgSSBuZWVkIHRvIGFkanVzdCB0aGlzIHRob3VnaHQuICpXYWl0Ki4gUmVwbGFjaW5nIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgICpkb2VzKiBjaGFuZ2UgdGhlIGJlaGF2aW9yLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgc291cmNlIHN0cmluZyAoYGItJmd0O25hbWVgKSBpcyBsb25nZXIgdGhhbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIChgbmFtZWApLiBJdCYjMzk7cyB0cnVuY2F0aW5nLCByYXRoZXIgdGhhbiBvdmVyZmxvd2luZywgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBiZWhhdmlvcmFsIHNoaWZ0LiBTbyB0aGVyZSYjMzk7cyBhIHBvc3NpYmlsaXR5IG9mICpzdWJ0bGUqIGlzc3VlcyBkZXBlbmRpbmcgb24gaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0cnVuY2F0ZWQgbmFtZXMuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlnIGEgYml0IGRlZXBlci4gRmlyc3QsIEkgaGF2ZSB0byBlbnN1cmUgdGhhdCBgdGlwY19iZWFyZXJfZ2V0X25hbWVgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gU2Vjb25kLCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBvdGhlciBjb2RlIGNoYW5nZXMgSSBtaWdodCBiZSBtaXNzaW5nLiBOb3BlLCB0aGUgcGF0Y2ggb25seSB0b3VjaGVzIGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAuIE5vdywgdG8gYmUgcmlnb3JvdXMsIEkgaGF2ZSB0byBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHRoZSBhc3N1bXB0aW9ucyBtYWRlIGJ5IHRob3NlIGNhbGxlcnMsIGFuZCB3aGV0aGVyIHRoZXkgYWNjb3VudCBmb3Igb3IgY291bGQgYmUgbmVnYXRpdmVseSBpbXBhY3RlZCBieSB0aGUgdHJ1bmNhdGlvbiBvZiBhIHBvdGVudGlhbGx5IGxvbmcgc3RyaW5nLiBEZXBlbmRpbmcgb24gdGhlIGNhbGxlcnMsIHRoaXMgY291bGQgYmUgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfYmVhcmVyX2dldF9uYW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2JlYXJlci5jPTE4MT1zdHJ1Y3QgdGlwY19iZWFyZXIgKnRpcGNfYmVhcmVyX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKVxuLS1cbm5ldC90aXBjL2JlYXJlci5jLTE5NC1cbm5ldC90aXBjL2JlYXJlci5jOjE5NTovKiAgICAgdGlwY19iZWFyZXJfZ2V0X25hbWUgLSBnZXQgdGhlIGJlYXJlciBuYW1lIGZyb20gaXRzIGlkLlxubmV0L3RpcGMvYmVhcmVyLmMtMTk2LSAqICAgICBAbmV0OiBuZXR3b3JrIG5hbWVzcGFjZVxuLS1cbm5ldC90aXBjL2JlYXJlci5jLTE5OS0gKi9cbm5ldC90aXBjL2JlYXJlci5jOjIwMDppbnQgdGlwY19iZWFyZXJfZ2V0X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICpuYW1lLCB1MzIgYmVhcmVyX2lkKVxubmV0L3RpcGMvYmVhcmVyLmMtMjAxLXtcbi0tXG5uZXQvdGlwYy9iZWFyZXIuaD0yMjg9c3RydWN0IHRpcGNfYmVhcmVyICp0aXBjX2JlYXJlcl9maW5kKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XG5uZXQvdGlwYy9iZWFyZXIuaDoyMjk6aW50IHRpcGNfYmVhcmVyX2dldF9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqbmFtZSwgdTMyIGJlYXJlcl9pZCk7XG5uZXQvdGlwYy9iZWFyZXIuaC0yMzAtc3RydWN0IHRpcGNfbWVkaWEgKnRpcGNfbWVkaWFfZmluZChjb25zdCBjaGFyICpuYW1lKTtcbi0tXG5uZXQvdGlwYy9tb25pdG9yLmM9ODI3PWludCBfX3RpcGNfbmxfYWRkX21vbml0b3Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZyxcbi0tXG5uZXQvdGlwYy9tb25pdG9yLmMtODM1LVxubmV0L3RpcGMvbW9uaXRvci5jOjgzNjpcdHJldCA9IHRpcGNfYmVhcmVyX2dldF9uYW1lKG5ldCwgYmVhcmVyX25hbWUsIGJlYXJlcl9pZCk7XG5uZXQvdGlwYy9tb25pdG9yLmMtODM3LVx0aWYgKHJldCB8fCAhbW9uKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipUcmFjaW5nIHRoZSBTb3VyY2U6IGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAqKgoKT2theSwgc28gSSBzZWUgYHRpcGNfYmVhcmVyX2dldF9uYW1lYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgX190aXBjX25sX2FkZF9tb25pdG9yYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGxpa2VseSBzaWduaWZpY2FudC4gU2luY2UgSSYjMzk7bSBvbiB0aGlzLCBsZXQmIzM5O3MganVzdCB0cmFjZSB0aGF0IGJhY2suIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgX190aXBjX25sX2FkZF9tb25pdG9yYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGlzIHNwZWNpZmljIGNhbGwuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhhdCBjYWxsIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIGZpZ3VyaW5nIG91dCB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdOKAmXMgcmV0cmlldmluZyB0aGUgYmVhcmVyIG5hbWUgaGVyZS4gSXMgdGhpcyBmb3IgZmlsdGVyaW5nLCBsb2dnaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGBfX2AgcHJlZml4IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgc28gaXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGRpZyBpbnRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB3aGF0IGRhdGEgaXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3RpcGNfbmxfYWRkX21vbml0b3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvbW9uaXRvci5jPTczNz1pbnQgdGlwY19ubF9tb25pdG9yX2dldF90aHJlc2hvbGQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC90aXBjL21vbml0b3IuYy03NDMtXG5uZXQvdGlwYy9tb25pdG9yLmM6NzQ0OnN0YXRpYyBpbnQgX190aXBjX25sX2FkZF9tb25pdG9yX3BlZXIoc3RydWN0IHRpcGNfcGVlciAqcGVlcixcbm5ldC90aXBjL21vbml0b3IuYy03NDUtXHRcdFx0XHQgICAgICBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZylcbi0tXG5uZXQvdGlwYy9tb25pdG9yLmM9Nzk4PWludCB0aXBjX25sX2FkZF9tb25pdG9yX3BlZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZyxcbi0tXG5uZXQvdGlwYy9tb25pdG9yLmMtODE1LVx0XHR9XG5uZXQvdGlwYy9tb25pdG9yLmM6ODE2Olx0XHRpZiAoX190aXBjX25sX2FkZF9tb25pdG9yX3BlZXIocGVlciwgbXNnKSkge1xubmV0L3RpcGMvbW9uaXRvci5jLTgxNy1cdFx0XHQqcHJldl9ub2RlID0gcGVlci1cdTAwM2VhZGRyO1xuLS1cbm5ldC90aXBjL21vbml0b3IuYy04MjYtXG5uZXQvdGlwYy9tb25pdG9yLmM6ODI3OmludCBfX3RpcGNfbmxfYWRkX21vbml0b3Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZyxcbm5ldC90aXBjL21vbml0b3IuYy04MjgtXHRcdFx0ICB1MzIgYmVhcmVyX2lkKVxuLS1cbm5ldC90aXBjL21vbml0b3IuaD03NT1pbnQgdGlwY19ubF9tb25pdG9yX2dldF90aHJlc2hvbGQoc3RydWN0IG5ldCAqbmV0KTtcbm5ldC90aXBjL21vbml0b3IuaDo3NjppbnQgX190aXBjX25sX2FkZF9tb25pdG9yKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbmxfbXNnICptc2csXG5uZXQvdGlwYy9tb25pdG9yLmgtNzctXHRcdFx0ICB1MzIgYmVhcmVyX2lkKTtcbi0tXG5uZXQvdGlwYy9ub2RlLmM9Mjc2MT1pbnQgdGlwY19ubF9ub2RlX3NldF9tb25pdG9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3RpcGMvbm9kZS5jLTI3ODgtXG5uZXQvdGlwYy9ub2RlLmM6Mjc4OTpzdGF0aWMgaW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcl9wcm9wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbmxfbXNnICptc2cpXG5uZXQvdGlwYy9ub2RlLmMtMjc5MC17XG4tLVxubmV0L3RpcGMvbm9kZS5jPTI4MjI9aW50IHRpcGNfbmxfbm9kZV9nZXRfbW9uaXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC90aXBjL25vZGUuYy0yODMzLVxubmV0L3RpcGMvbm9kZS5jOjI4MzQ6XHRlcnIgPSBfX3RpcGNfbmxfYWRkX21vbml0b3JfcHJvcChuZXQsIFx1MDAyNm1zZyk7XG5uZXQvdGlwYy9ub2RlLmMtMjgzNS1cdGlmIChlcnIpIHtcbi0tXG5uZXQvdGlwYy9ub2RlLmM9Mjg0Mz1pbnQgdGlwY19ubF9ub2RlX2R1bXBfbW9uaXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTI4NTktXHRmb3IgKGJlYXJlcl9pZCA9IHByZXZfYmVhcmVyOyBiZWFyZXJfaWQgXHUwMDNjIE1BWF9CRUFSRVJTOyBiZWFyZXJfaWQmIzQzOyYjNDM7KSB7XG5uZXQvdGlwYy9ub2RlLmM6Mjg2MDpcdFx0ZXJyID0gX190aXBjX25sX2FkZF9tb25pdG9yKG5ldCwgXHUwMDI2bXNnLCBiZWFyZXJfaWQpO1xubmV0L3RpcGMvbm9kZS5jLTI4NjEtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA0MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXRsaW5rIER1bXAgRnVuY3Rpb24gQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgY2hhbmdlIHdpdGhpbiBgdGlwY19ubF9ub2RlX2R1bXBfbW9uaXRvcmAuIFJpZ2h0LCBpdCYjMzk7cyBhIG5ldGxpbmsgZHVtcCBmdW5jdGlvbiwgc3RhbmRhcmQgc3R1ZmYuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGlzIHN3YXBwaW5nIG91dCBgc3RyY3B5YCBmb3IgYHN0cnNjcHlgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdGhpbmsgYWJvdXQgZnV6emluZyB0aGlzLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgaW4gYSBuZXRsaW5rIEFQSSwgd2hpY2ggbWFrZXMgaXQgYSBwb3RlbnRpYWwgdGFyZ2V0LiBFdmVuIHRob3VnaCBpdCYjMzk7cyAmIzM0O2p1c3QmIzM0OyBzdHJpbmcgY29weWluZywgdGhhdCBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGhlcmVmb3JlIHZ1bG5lcmFibGUgdG8gdGhpbmdzIGxpa2UgYnVmZmVyIG92ZXJmbG93cyBvciB1bmV4cGVjdGVkIHRydW5jYXRpb24uCgpIb2xkIG9uLCBJIG5lZWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgdGhpbmsuIGBzdHJzY3B5YCBpcyBub3cgYSBzdGFuZGFyZCBzdHJpbmcgY29weSBmdW5jdGlvbi4gRnV6emluZyAqaXQqIGRpcmVjdGx5IGlzbiYjMzk7dCBsaWtlbHkgdG8gcmV2ZWFsIGFueXRoaW5nIG5ldywgcGVyIHNlLiBIb3dldmVyLCB0aGlzIGlzIHN0aWxsIHBhcnQgb2YgdGhlIFRJUEMgbmV0bGluayBBUEksIGFuZCBhbnkgY2hhbmdlIHRvIHRoZSBBUEkgc3VyZmFjZSBpcyBmYWlyIGdhbWUgZm9yIHRob3JvdWdoIGZ1enppbmcuCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCBjaGVjayB0aGUga2VybmVsIGNvbmZpZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBUSVBDIGlzIGV2ZW4gZW5hYmxlZCBpbiB0aGlzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRJUEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvS2NvbmZpZy01LVxubmV0L3RpcGMvS2NvbmZpZzo2Om1lbnVjb25maWcgVElQQ1xubmV0L3RpcGMvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7VGhlIFRJUEMgUHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTIzLVxubmV0L3RpcGMvS2NvbmZpZzoyNDpjb25maWcgVElQQ19NRURJQV9JQlxubmV0L3RpcGMvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBtZWRpYSB0eXBlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTI5LVx0ICBJUC1vdmVyLUluZmluaUJhbmQgZGV2aWNlcy5cbm5ldC90aXBjL0tjb25maWc6MzA6Y29uZmlnIFRJUENfTUVESUFfVURQXG5uZXQvdGlwYy9LY29uZmlnLTMxLVx0Ym9vbCBcJiMzNDtJUC9VRFAgbWVkaWEgdHlwZSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3RpcGMvS2NvbmZpZy0zNy1cbm5ldC90aXBjL0tjb25maWc6Mzg6Y29uZmlnIFRJUENfQ1JZUFRPXG5uZXQvdGlwYy9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtUSVBDIGVuY3J5cHRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctNTItXG5uZXQvdGlwYy9LY29uZmlnOjUzOmNvbmZpZyBUSVBDX0RJQUdcbm5ldC90aXBjL0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDtUSVBDOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzE1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIFRJUEMgTmV0bGluayBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYFRJUENgIGNvbmZpZ3VyYXRpb24gYW5kIHRoZXNlIHN5bWJvbHM6IGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAsIGBfX3RpcGNfbmxfYWRkX21vbml0b3JgLCBhbmQgYHRpcGNfbmxfbm9kZV9kdW1wX21vbml0b3JgLiBIYW5nIG9uLCBgdGlwY19ubF9ub2RlX2R1bXBfbW9uaXRvcmAuLi4gdGhhdCYjMzk7cyBhIG5ldGxpbmsgZHVtcCBmdW5jdGlvbiwgcmlnaHQ/IE1ha2VzIGl0IGEgYml0IG1vcmUgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpOb3csIHRoZSBjaGFuZ2UgSSYjMzk7bSBleGFtaW5pbmcgaW52b2x2ZXMgYHN0cmNweWAgYmVpbmcgcmVwbGFjZWQgd2l0aCBgc3Ryc2NweWAuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyByZWZyZXNoIG91ciBjcml0ZXJpYTogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMuLi4gb3IgY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LiYjMzQ7CgpUaGlzIGBzdHJjcHlgIHRvIGBzdHJzY3B5YCBjaGFuZ2UgKmlzKiBmdW5jdGlvbmFsLiBJdCYjMzk7cyBhIHNlY3VyaXR5IGhhcmRlbmluZyBtZWFzdXJlIGFpbWVkIGF0IHByZXZlbnRpbmcgYnVmZmVyIG92ZXJmbG93cy4gQnV0IGRvZXMgaXQgbWVhbmluZ2Z1bGx5IGFsdGVyIHRoZSBwcm9ncmFtJiMzOTtzIGV4ZWN1dGlvbiBmbG93IGluIGEgd2F5IHRoYXQgZnV6emluZyB3b3VsZCBleHBvc2UgbmV3LCBjcml0aWNhbCBpc3N1ZXM/IEkmIzM5O20gb24gdGhlIGZlbmNlLi4uIFNlY3VyaXR5IGhhcmRlbmluZyBpcyBkZWZpbml0ZWx5IGltcG9ydGFudC4KCkhvd2V2ZXIsIEkmIzM5O20gdGhpbmtpbmcsIGV2ZW4gaWYgaXQmIzM5O3MgYSBzZWN1cml0eS1mb2N1c2VkIGNoYW5nZSwgZnV6emluZyBjb3VsZCBzdGlsbCBiZSB2YWx1YWJsZS4gUmVwbGFjaW5nIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIGludHJvZHVjZXMgYSBwb3RlbnRpYWwgZm9yIHVuZXhwZWN0ZWQgc3RyaW5nIHRydW5jYXRpb24uIFBsdXMsIGZ1enppbmcgbWlnaHQgdW5jb3ZlciByZWdyZXNzaW9ucyBvciBlZGdlIGNhc2VzLiBTbywgaXQmIzM5O3MgcHJvYmFibHkgd29ydGggaXQgdG8gdGFrZSBhIGNsb3NlciBsb29rLgoKTGV0IG1lIGNpcmNsZSBiYWNrIHRvIGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAgcmVhbCBxdWljaywganVzdCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL2JlYXJlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTU6XHQvKiAgICAgdGlwY19iZWFyZXJfZ2V0X25hbWUgLSBnZXQgdGhlIGJlYXJlciBuYW1lIGZyb20gaXRzIGlkLlxuIDE5NjpcdCAqICAgICBAbmV0OiBuZXR3b3JrIG5hbWVzcGFjZVxuIDE5NzpcdCAqICAgICBAbmFtZTogYSBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2hlcmUgdGhlIG5hbWUgd2lsbCBiZSBzdG9yZWQuXG4gMTk4Olx0ICogICAgIEBiZWFyZXJfaWQ6IHRoZSBpZCB0byBnZXQgdGhlIG5hbWUgZnJvbS5cbiAxOTk6XHQgKi9cbiAyMDA6XHRpbnQgdGlwY19iZWFyZXJfZ2V0X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICpuYW1lLCB1MzIgYmVhcmVyX2lkKVxuIDIwMTpcdHtcbiAyMDI6XHRcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIDIwMzpcdFx0c3RydWN0IHRpcGNfYmVhcmVyICpiO1xuIDIwNDpcdFxuIDIwNTpcdFx0aWYgKGJlYXJlcl9pZCBcdTAwM2U9IE1BWF9CRUFSRVJTKVxuIDIwNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyMDc6XHRcbiAyMDg6XHRcdGIgPSBydG5sX2RlcmVmZXJlbmNlKHRuLVx1MDAzZWJlYXJlcl9saXN0W2JlYXJlcl9pZF0pO1xuIDIwOTpcdFx0aWYgKCFiKVxuIDIxMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyMTE6XHRcbiAyMTI6XHRcdHN0cnNjcHkobmFtZSwgYi1cdTAwM2VuYW1lLCBUSVBDX01BWF9CRUFSRVJfTkFNRSk7XG4gMjEzOlx0XHRyZXR1cm4gMDtcbiAyMTQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NzQKCQkJCQkJCW91dHB1dDogMTI2CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgYSBLZXJuZWwgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24sIGFuZCBob25lc3RseSwgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhdCBmaXJzdCBnbGFuY2UuIEJ1dCwgY29uc2lkZXJpbmcgdGhpcyBpcyBhIGtlcm5lbCBjaGFuZ2UsIG5vIG1hdHRlciBob3cgc2ltcGxlIGl0IHNlZW1zLCBpdCAqYWJzb2x1dGVseSogd2FycmFudHMgYSBjbG9zZXIgbG9vayB3aXRoIGZ1enppbmcuIE15IHRob3VnaHQgcHJvY2VzcyBpcyBhbHdheXM6IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBrZXJuZWwgPSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzLCBldmVuIGlmIHRoZSBjb2RlIGl0c2VsZiBpcyBiYXNpYy4KClNvLCBsZXQmIzM5O3MgZXN0YWJsaXNoIGEgY2xlYXIgZnV6emluZyBzZXR1cC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGNvbmZpZ3VyaW5nIHRoZSBmdXp6aW5nIHByb2Nlc3MgY29ycmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgYXJlYSBvZiB0aGUga2VybmVsLgoKSSYjMzk7bGwgYmUgZW5hYmxpbmcgdGhlIGBUSVBDYCBjb25maWcsIGFzIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGludGVyYWN0cyB3aXRoIHRoYXQgbW9kdWxlLiBUaGVuLCB0byBtYWtlIHN1cmUgSSYjMzk7bSB0YXJnZXRpbmcgdGhlIGtleSBwYXJ0cywgSSYjMzk7bSBnb2luZyB0byBmb2N1cyB0aGUgZnV6emluZyBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzOiBgdGlwY19iZWFyZXJfZ2V0X25hbWVgLCBgX190aXBjX25sX2FkZF9tb25pdG9yYCwgYW5kIGB0aXBjX25sX25vZGVfZHVtcF9tb25pdG9yYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgbW9zdCBiYW5nIGZvciBteSBidWNrIGFuZCBjb3ZlciB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgY2hhbmdlLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmaW5kIGFueXRoaW5nIGludGVyZXN0aW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfYmVhcmVyX2dldF9uYW1lJiMzNDssCiAgICAmIzM0O19fdGlwY19ubF9hZGRfbW9uaXRvciYjMzQ7LAogICAgJiMzNDt0aXBjX25sX25vZGVfZHVtcF9tb25pdG9yJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHN0cmNweSB3aXRoIHN0cnNjcHkgaW4gdGlwY19iZWFyZXJfZ2V0X25hbWUgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3dzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgbmV0bGluayBBUEkgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgdHJ1bmNhdGlvbnMgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX2JlYXJlcl9nZXRfbmFtZSYjMzQ7LAogICAgJiMzNDtfX3RpcGNfbmxfYWRkX21vbml0b3ImIzM0OywKICAgICYjMzQ7dGlwY19ubF9ub2RlX2R1bXBfbW9uaXRvciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBzdHJjcHkgd2l0aCBzdHJzY3B5IGluIHRpcGNfYmVhcmVyX2dldF9uYW1lIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUSVBDIG5ldGxpbmsgQVBJIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHRydW5jYXRpb25zIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHRvIHByZXZlbnQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZnJvbSBgYi1cdTAwM2VuYW1lYCBhbmQgb3V0LW9mLWJvdW5kcyB3cml0ZXMgdG8gdGhlIHN0YWNrLWFsbG9jYXRlZCBgYmVhcmVyX25hbWVgIGJ1ZmZlciBpbiBgX190aXBjX25sX2FkZF9tb25pdG9yYC4gT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGJvdGggaGVhcCBhbmQgc3RhY2spIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCBoZXJlOiB0aGUgc291cmNlIGJ1ZmZlciBgYi1cdTAwM2VuYW1lYCBpcyBwYXJ0IG9mIGEgemVyby1hbGxvY2F0ZWQgc3RydWN0dXJlLCBhbmQgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBgYmVhcmVyX25hbWVgIGlzIG9ubHkgcmVhZCBieSBgbmxhX3B1dF9zdHJpbmdgLCB3aGljaCBzdHJpY3RseSByZWFkcyB1cCB0byB0aGUgbnVsbCB0ZXJtaW5hdG9yLiBTaW5jZSBgc3Ryc2NweWAgZ3VhcmFudGVlcyBudWxsLXRlcm1pbmF0aW9uIGFuZCBgbmxhX3B1dF9zdHJpbmdgIGRvZXMgbm90IHJlYWQgcGFzdCBpdCwgbm8gdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgaXMgZXZlciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaHVzLCBzdGFuZGFyZCBLQVNBTiBpcyBmdWxseSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4MWY5ZTg4MGI5MGMyOGNmOGJjOWE2NTAzYzdiMDc5YjE2NjdlNThhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTU6MDk6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iZWFyZXIuYyBiL25ldC90aXBjL2JlYXJlci5jCmluZGV4IDA1ZGNkMmY5ZTg4N2EuLjk1MWJiNDc0YzdkNDQgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2JlYXJlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL2JlYXJlci5jCkBAIC0yMDksNyAmIzQzOzIwOSw3IEBAIGludCB0aXBjX2JlYXJlcl9nZXRfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUsIHUzMiBiZWFyZXJfaWQpCiAJaWYgKCFiKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmNweShuYW1lLCBiLSZndDtuYW1lKTsKJiM0MzsJc3Ryc2NweShuYW1lLCBiLSZndDtuYW1lLCBUSVBDX01BWF9CRUFSRVJfTkFNRSk7CiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQnVmZmVyIE92ZXJmbG93IEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHJlcGxhY2VzIGEgYHN0cmNweWAgd2l0aCBgc3Ryc2NweWAgaW4gYHRpcGNfYmVhcmVyX2dldF9uYW1lYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoaXMgaXMgYWJvdXQgcHJldmVudGluZyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSDigJMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgd3JpdGUgc2NlbmFyaW8uIEdvb2QgY2F0Y2guIFRoZSBvcmlnaW5hbCBgc3RyY3B5YCB3YXMgYSB0aWNraW5nIHRpbWUgYm9tYiwgcmlwZSBmb3IgZXhwbG9pdGF0aW9uLgoKQnV0IGhvbGQgb24sIGBzdHJzY3B5YCBjb3BpZXMgYXQgbW9zdCBgVElQQ19NQVhfQkVBUkVSX05BTUVgIGNoYXJhY3RlcnMuIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCBkb2VzIHRoaXMgY2hhbmdlIGludHJvZHVjZSBhIG5ldyByaXNrOiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZT8gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4gYHN0cnNjcHlgLCB1bmxpa2UgYHN0cm5jcHlgLCAqZG9lc24mIzM5O3QqIHplcm8tcGFkIHRoZSByZXN0IG9mIHRoZSBidWZmZXIgaWYgdGhlIHNvdXJjZSBzdHJpbmcgaXMgc2hvcnRlciB0aGFuIHRoZSB0YXJnZXQgc2l6ZS4gQnV0LCB3YWl0LCBuZWl0aGVyIGRvZXMgYHN0cmNweWAuCgpBaCEgU28sIGlmIGBiLSZndDtuYW1lYCBpcyBzaG9ydGVyIHRoYW4gdGhlIGJ1ZmZlciwgdGhlIHJlbWFpbmluZyBwYXJ0IG9mIGBuYW1lYCBtaWdodCBjb250YWluIHN0YWxlIGRhdGEuIElmIGBuYW1lYCBpcyBsYXRlciBwYXNzZWQgdG8gdXNlciBzcGFjZSAqd2l0aG91dCogaW5pdGlhbGl6YXRpb24sIHdlJiMzOTt2ZSBnb3QgYSBtZW1vcnkgbGVhayBvciBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlIHJpc2sgb24gb3VyIGhhbmRzISBUaGlzIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gY2FyZWZ1bGx5IGV2YWx1YXRlLgoKVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gc2VlICp3aGVyZSogYHRpcGNfYmVhcmVyX2dldF9uYW1lYCBpcyBjYWxsZWQuIFRoZSBjb250ZXh0IG9mIGl0cyB1c2UgaXMgY3J1Y2lhbCBmb3IgYXNzZXNzaW5nIHRoaXMgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2suIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbGVycyBhbmQgc2VlIGhvdyB0aGUgYG5hbWVgIGJ1ZmZlciBpcyBhY3R1YWxseSB1c2VkIGFmdGVyd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19iZWFyZXJfZ2V0X25hbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvYmVhcmVyLmM9MTgxPXN0cnVjdCB0aXBjX2JlYXJlciAqdGlwY19iZWFyZXJfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxubmV0L3RpcGMvYmVhcmVyLmMtMTk0LVxubmV0L3RpcGMvYmVhcmVyLmM6MTk1Oi8qICAgICB0aXBjX2JlYXJlcl9nZXRfbmFtZSAtIGdldCB0aGUgYmVhcmVyIG5hbWUgZnJvbSBpdHMgaWQuXG5uZXQvdGlwYy9iZWFyZXIuYy0xOTYtICogICAgIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlXG4tLVxubmV0L3RpcGMvYmVhcmVyLmMtMTk5LSAqL1xubmV0L3RpcGMvYmVhcmVyLmM6MjAwOmludCB0aXBjX2JlYXJlcl9nZXRfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUsIHUzMiBiZWFyZXJfaWQpXG5uZXQvdGlwYy9iZWFyZXIuYy0yMDEte1xuLS1cbm5ldC90aXBjL2JlYXJlci5oPTIyOD1zdHJ1Y3QgdGlwY19iZWFyZXIgKnRpcGNfYmVhcmVyX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbm5ldC90aXBjL2JlYXJlci5oOjIyOTppbnQgdGlwY19iZWFyZXJfZ2V0X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICpuYW1lLCB1MzIgYmVhcmVyX2lkKTtcbm5ldC90aXBjL2JlYXJlci5oLTIzMC1zdHJ1Y3QgdGlwY19tZWRpYSAqdGlwY19tZWRpYV9maW5kKGNvbnN0IGNoYXIgKm5hbWUpO1xuLS1cbm5ldC90aXBjL21vbml0b3IuYz04Mjc9aW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxuLS1cbm5ldC90aXBjL21vbml0b3IuYy04MzUtXG5uZXQvdGlwYy9tb25pdG9yLmM6ODM2Olx0cmV0ID0gdGlwY19iZWFyZXJfZ2V0X25hbWUobmV0LCBiZWFyZXJfbmFtZSwgYmVhcmVyX2lkKTtcbm5ldC90aXBjL21vbml0b3IuYy04MzctXHRpZiAocmV0IHx8ICFtb24pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFRJUEMgTW9uaXRvciBBZGRpdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIFRJUEMgbW9uaXRvcnMgYXJlIGJlaW5nIGFkZGVkLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgX190aXBjX25sX2FkZF9tb25pdG9yYCBpbiBgbmV0L3RpcGMvbW9uaXRvci5jYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGxvb2tzIGxpa2UgZXhhY3RseSB3aGVyZSBJIHNob3VsZCBzdGFydCBkaWdnaW5nLiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIHRoaXMgaXMgbGlrZWx5IHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZyBhIG1vbml0b3IgdGhyb3VnaCB0aGUgbmV0bGluayBpbnRlcmZhY2UuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgaG93IGl0JiMzOTtzIGNhbGxlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGl0IHZhbGlkYXRlcyB0aGUgcmVxdWVzdCwgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBtb25pdG9yIGZyYW1ld29yaywgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyB0aGF0IGFyZSBpbnZvbHZlZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdGlwY19ubF9hZGRfbW9uaXRvciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9tb25pdG9yLmM9NzM3PWludCB0aXBjX25sX21vbml0b3JfZ2V0X3RocmVzaG9sZChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3RpcGMvbW9uaXRvci5jLTc0My1cbm5ldC90aXBjL21vbml0b3IuYzo3NDQ6c3RhdGljIGludCBfX3RpcGNfbmxfYWRkX21vbml0b3JfcGVlcihzdHJ1Y3QgdGlwY19wZWVyICpwZWVyLFxubmV0L3RpcGMvbW9uaXRvci5jLTc0NS1cdFx0XHRcdCAgICAgIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnKVxuLS1cbm5ldC90aXBjL21vbml0b3IuYz03OTg9aW50IHRpcGNfbmxfYWRkX21vbml0b3JfcGVlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxuLS1cbm5ldC90aXBjL21vbml0b3IuYy04MTUtXHRcdH1cbm5ldC90aXBjL21vbml0b3IuYzo4MTY6XHRcdGlmIChfX3RpcGNfbmxfYWRkX21vbml0b3JfcGVlcihwZWVyLCBtc2cpKSB7XG5uZXQvdGlwYy9tb25pdG9yLmMtODE3LVx0XHRcdCpwcmV2X25vZGUgPSBwZWVyLVx1MDAzZWFkZHI7XG4tLVxubmV0L3RpcGMvbW9uaXRvci5jLTgyNi1cbm5ldC90aXBjL21vbml0b3IuYzo4Mjc6aW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxubmV0L3RpcGMvbW9uaXRvci5jLTgyOC1cdFx0XHQgIHUzMiBiZWFyZXJfaWQpXG4tLVxubmV0L3RpcGMvbW9uaXRvci5oPTc1PWludCB0aXBjX25sX21vbml0b3JfZ2V0X3RocmVzaG9sZChzdHJ1Y3QgbmV0ICpuZXQpO1xubmV0L3RpcGMvbW9uaXRvci5oOjc2OmludCBfX3RpcGNfbmxfYWRkX21vbml0b3Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZyxcbm5ldC90aXBjL21vbml0b3IuaC03Ny1cdFx0XHQgIHUzMiBiZWFyZXJfaWQpO1xuLS1cbm5ldC90aXBjL25vZGUuYz0yNzYxPWludCB0aXBjX25sX25vZGVfc2V0X21vbml0b3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMjc4OC1cbm5ldC90aXBjL25vZGUuYzoyNzg5OnN0YXRpYyBpbnQgX190aXBjX25sX2FkZF9tb25pdG9yX3Byb3Aoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZylcbm5ldC90aXBjL25vZGUuYy0yNzkwLXtcbi0tXG5uZXQvdGlwYy9ub2RlLmM9MjgyMj1pbnQgdGlwY19ubF9ub2RlX2dldF9tb25pdG9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3RpcGMvbm9kZS5jLTI4MzMtXG5uZXQvdGlwYy9ub2RlLmM6MjgzNDpcdGVyciA9IF9fdGlwY19ubF9hZGRfbW9uaXRvcl9wcm9wKG5ldCwgXHUwMDI2bXNnKTtcbm5ldC90aXBjL25vZGUuYy0yODM1LVx0aWYgKGVycikge1xuLS1cbm5ldC90aXBjL25vZGUuYz0yODQzPWludCB0aXBjX25sX25vZGVfZHVtcF9tb25pdG9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMjg1OS1cdGZvciAoYmVhcmVyX2lkID0gcHJldl9iZWFyZXI7IGJlYXJlcl9pZCBcdTAwM2MgTUFYX0JFQVJFUlM7IGJlYXJlcl9pZCYjNDM7JiM0MzspIHtcbm5ldC90aXBjL25vZGUuYzoyODYwOlx0XHRlcnIgPSBfX3RpcGNfbmxfYWRkX21vbml0b3IobmV0LCBcdTAwMjZtc2csIGJlYXJlcl9pZCk7XG5uZXQvdGlwYy9ub2RlLmMtMjg2MS1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBgX190aXBjX25sX2FkZF9tb25pdG9yYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGBfX3RpcGNfbmxfYWRkX21vbml0b3JgLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4gYG5ldC90aXBjL21vbml0b3IuY2AuIE15IGluaXRpYWwgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBoYW5kbGVzIHRoZSBhZGRpdGlvbiBvZiBhIG5ldyBtb25pdG9yIGZvciB0aGUgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXIgUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBwcm90b2NvbCwgcHJvYmFibHkgcmVsYXRlZCB0byBuZXR3b3JrIG1lc3NhZ2VzIG9yIGV2ZW50cy4gSSBiZXQgaXQgdGFrZXMgY2FyZSBvZiByZWdpc3RlcmluZyB0aGUgbW9uaXRvciYjMzk7cyBjaGFyYWN0ZXJpc3RpY3MsIGxpa2Ugd2hhdCBraW5kIG9mIGV2ZW50cyBpdCYjMzk7cyBpbnRlcmVzdGVkIGluLCB3aGVyZSB0aGUgZGF0YSBzaG91bGQgZ28sIGFuZCBzbyBvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoZSAmIzM0O25sJiMzNDsgcGFydCBzaWduaWZpZXMgLSBpdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBOZXRsaW5rIHByb3RvY29sLCBnaXZlbiB0aGF0IHRoaXMgaXMgYSBuZXR3b3JraW5nIGNvbXBvbmVudC4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIE5ldGxpbmsgbWVzc2FnZSBoYW5kbGluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IHZhbGlkYXRlcyB0aGUgaW5jb21pbmcgaW5mb3JtYXRpb24sIGhvdyBpdCBtYW5hZ2VzIG1lbW9yeSAoYWxsb2NhdGluZyBhbmQgZnJlZWluZyksIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGludGVybmFsIFRJUEMgZGF0YSBzdHJ1Y3R1cmVzIHRvIG1hbmFnZSB0aGUgbW9uaXRvcnMuIEkgYW0gYWxzbyB2ZXJ5IGtlZW4gdG8gbGVhcm4gaWYgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxhYmxlIGZyb20gdGhlIE5ldGxpbmsgdXNlci1zcGFjZSBvciBmcm9tIGtlcm5lbCBpbnRlcm5hbCBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBiZSBzY3J1dGluaXppbmcgdGhlIGNvZGUgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIG1lY2hhbmlzbXMgdG8gZW5zdXJlIGNvbmN1cnJlbmN5IHNhZmV0eS4gRnVydGhlcm1vcmUsIEkmIzM5O2xsIGJlIGNoZWNraW5nIGhvdyB0aGUgbW9uaXRvciYjMzk7cyBsaWZlY3ljbGUgaXMgbWFuYWdlZCDigJMgYXJlIHRoZXJlIGZ1bmN0aW9ucyBmb3IgcmVtb3ZhbCBvciBtb2RpZmljYXRpb24/IEZpbmFsbHksIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIG1vbml0b3JzIGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBUSVBDJiMzOTtzIG92ZXJhbGwgZGVzaWduLCBhbmQgd2hldGhlciBpdCBhbGlnbnMgd2l0aCBwZXJmb3JtYW5jZSBiZXN0IHByYWN0aWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGlwYy9tb25pdG9yLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgyMDpcdFx0XHR9XG4gODIxOlx0XHR9IHdoaWxlICgocGVlciA9IHBlZXJfbnh0KHBlZXIpKSAhPSBtb24tXHUwMDNlc2VsZik7XG4gODIyOlx0XHRyZWFkX3VubG9ja19iaChcdTAwMjZtb24tXHUwMDNlbG9jayk7XG4gODIzOlx0XG4gODI0Olx0XHRyZXR1cm4gMDtcbiA4MjU6XHR9XG4gODI2Olx0XG4gODI3Olx0aW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxuIDgyODpcdFx0XHRcdCAgdTMyIGJlYXJlcl9pZClcbiA4Mjk6XHR7XG4gODMwOlx0XHRzdHJ1Y3QgdGlwY19tb25pdG9yICptb24gPSB0aXBjX21vbml0b3IobmV0LCBiZWFyZXJfaWQpO1xuIDgzMTpcdFx0Y2hhciBiZWFyZXJfbmFtZVtUSVBDX01BWF9CRUFSRVJfTkFNRV07XG4gODMyOlx0XHRzdHJ1Y3QgbmxhdHRyICphdHRycztcbiA4MzM6XHRcdHZvaWQgKmhkcjtcbiA4MzQ6XHRcdGludCByZXQ7XG4gODM1Olx0XG4gODM2Olx0XHRyZXQgPSB0aXBjX2JlYXJlcl9nZXRfbmFtZShuZXQsIGJlYXJlcl9uYW1lLCBiZWFyZXJfaWQpO1xuIDgzNzpcdFx0aWYgKHJldCB8fCAhbW9uKVxuIDgzODpcdFx0XHRyZXR1cm4gMDtcbiA4Mzk6XHRcbiA4NDA6XHRcdGhkciA9IGdlbmxtc2dfcHV0KG1zZy1cdTAwM2Vza2IsIG1zZy1cdTAwM2Vwb3J0aWQsIG1zZy1cdTAwM2VzZXEsIFx1MDAyNnRpcGNfZ2VubF9mYW1pbHksXG4gODQxOlx0XHRcdFx0ICBOTE1fRl9NVUxUSSwgVElQQ19OTF9NT05fR0VUKTtcbiA4NDI6XHRcdGlmICghaGRyKVxuIDg0MzpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDg0NDpcdFxuIDg0NTpcdFx0YXR0cnMgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcobXNnLVx1MDAzZXNrYiwgVElQQ19OTEFfTU9OKTtcbiA4NDY6XHRcdGlmICghYXR0cnMpXG4gODQ3Olx0XHRcdGdvdG8gbXNnX2Z1bGw7XG4gODQ4Olx0XG4gODQ5Olx0XHRyZWFkX2xvY2tfYmgoXHUwMDI2bW9uLVx1MDAzZWxvY2spO1xuIDg1MDpcdFx0aWYgKG5sYV9wdXRfdTMyKG1zZy1cdTAwM2Vza2IsIFRJUENfTkxBX01PTl9SRUYsIGJlYXJlcl9pZCkpXG4gODUxOlx0XHRcdGdvdG8gYXR0cl9tc2dfZnVsbDtcbiA4NTI6XHRcdGlmICh0aXBjX21vbl9pc19hY3RpdmUobmV0LCBtb24pKVxuIDg1MzpcdFx0XHRpZiAobmxhX3B1dF9mbGFnKG1zZy1cdTAwM2Vza2IsIFRJUENfTkxBX01PTl9BQ1RJVkUpKVxuIDg1NDpcdFx0XHRcdGdvdG8gYXR0cl9tc2dfZnVsbDtcbiA4NTU6XHRcdGlmIChubGFfcHV0X3N0cmluZyhtc2ctXHUwMDNlc2tiLCBUSVBDX05MQV9NT05fQkVBUkVSX05BTUUsIGJlYXJlcl9uYW1lKSlcbiA4NTY6XHRcdFx0Z290byBhdHRyX21zZ19mdWxsO1xuIDg1NzpcdFx0aWYgKG5sYV9wdXRfdTMyKG1zZy1cdTAwM2Vza2IsIFRJUENfTkxBX01PTl9QRUVSQ05ULCBtb24tXHUwMDNlcGVlcl9jbnQpKVxuIDg1ODpcdFx0XHRnb3RvIGF0dHJfbXNnX2Z1bGw7XG4gODU5Olx0XHRpZiAobmxhX3B1dF91MzIobXNnLVx1MDAzZXNrYiwgVElQQ19OTEFfTU9OX0xJU1RHRU4sIG1vbi1cdTAwM2VsaXN0X2dlbikpXG4gODYwOlx0XHRcdGdvdG8gYXR0cl9tc2dfZnVsbDtcbiA4NjE6XHRcbiA4NjI6XHRcdHJlYWRfdW5sb2NrX2JoKFx1MDAyNm1vbi1cdTAwM2Vsb2NrKTtcbiA4NjM6XHRcdG5sYV9uZXN0X2VuZChtc2ctXHUwMDNlc2tiLCBhdHRycyk7XG4gODY0Olx0XHRnZW5sbXNnX2VuZChtc2ctXHUwMDNlc2tiLCBoZHIpO1xuIDg2NTpcdFxuIDg2NjpcdFx0cmV0dXJuIDA7XG4gODY3Olx0XG4gODY4Olx0YXR0cl9tc2dfZnVsbDpcbiA4Njk6XHRcdHJlYWRfdW5sb2NrX2JoKFx1MDAyNm1vbi1cdTAwM2Vsb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIzNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQ5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBUSVBDIEJlYXJlciBOYW1lIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBiZWFyZXJfbmFtZWAsIGRlY2xhcmVkIGFzIGBjaGFyIGJlYXJlcl9uYW1lW1RJUENfTUFYX0JFQVJFUl9OQU1FXTtgLCBpcyBhbiBhcnJheSBvbiB0aGUgc3RhY2suIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgaXQmIzM5O3MgdW5pbml0aWFsaXplZCBpbml0aWFsbHkuIFdlIHRoZW4gY2FsbCBgdGlwY19iZWFyZXJfZ2V0X25hbWVgLCB3aGljaCwgYWZ0ZXIgdGhlIGNoYW5nZSwgdXNlcyBgc3Ryc2NweShuYW1lLCBiLSZndDtuYW1lLCBUSVBDX01BWF9CRUFSRVJfTkFNRSk7YCB0byBjb3B5IHRoZSBiZWFyZXIgbmFtZS4gUHJldmlvdXNseSBpdCB1c2VkIGBzdHJjcHlgLgoKTm93LCBpZiBgYi0mZ3Q7bmFtZWAgaXMgc2hvcnRlciB0aGFuIGBUSVBDX01BWF9CRUFSRVJfTkFNRWAsIGBzdHJzY3B5YCAobGlrZSBgc3RyY3B5YCBiZWZvcmUgaXQsIGFuZCBjb250cmFyeSB0byBteSBpbml0aWFsIGV4cGVjdGF0aW9ucykgKnN0aWxsKiBsZWF2ZXMgdGhlIHJlc3Qgb2YgYGJlYXJlcl9uYW1lYCB1bmluaXRpYWxpemVkLiBUaGF0JiMzOTtzIHRoZSBrZXkuIFRoaXMgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBnYXJiYWdlIGRhdGEgaW4gdGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlci4KClRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgaXMgYG5sYV9wdXRfc3RyaW5nYCB3aGljaCBpcyB1c2VkIHRvIHBsYWNlIHRoZSBzdHJpbmcgaW50byB0aGUgbmV0bGluayBtZXNzYWdlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGlzIHdoZXJlIHRoZSB0cm91YmxlIGJlZ2lucy4gSG93ZXZlciwgKml0JiMzOTtzIG5vdCouIGBubGFfcHV0X3N0cmluZ2AgY2FsbHMgYHN0cmxlbmAgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGguIFRoYXQmIzM5O3MgdGhlIHNhdmluZyBncmFjZSEgSXQgY29ycmVjdGx5IGxpbWl0cyB0aGUgY29weSB0byB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHBsdXMgdGhlIG51bGwgdGVybWluYXRvci4gU28sIGl0ICpkb2VzbiYjMzk7dCogY29weSB0aGUgdW5pbml0aWFsaXplZCBieXRlcy4KCkJ1dCwgaGFuZyBvbiwgdGhpcyByZXF1aXJlcyBhIGRlZXBlciBsb29rLiBgbmxhX3B1dF9zdHJpbmdgIGlzIGRlZmluZWQgYXMgYSBjYWxsIHRvIGBubGFfcHV0YCwgd2hpY2ggaXMgZGVmaW5lZCBhczoKCmBgYGMKc3RhdGljIGlubGluZSBpbnQgbmxhX3B1dF9zdHJpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLAoJCQkJIGNvbnN0IGNoYXIgKnN0cikKewoJcmV0dXJuIG5sYV9wdXQoc2tiLCBhdHRydHlwZSwgc3RybGVuKHN0cikgJiM0MzsgMSwgc3RyKTsKfQpgYGAKClNvIGl0IG9ubHkgY29waWVzIGBzdHJsZW4oc3RyKSAmIzQzOyAxYCBieXRlcy4gSXQgZG9lcyBOT1QgY29weSB0aGUgdW5pbml0aWFsaXplZCBieXRlcyBvZiBgYmVhcmVyX25hbWVgLgoKSSBhbHNvIHJlY2FsbCB0aGF0IGBubGFfcHV0YCBtaWdodCBwYWQgdG8gYSA0LWJ5dGUgYm91bmRhcnkuIERvZXMgaXQgcGFkIHdpdGggemVyb2VzPyBZZXMsIGl0IHBhZHMgd2l0aCB6ZXJvZXMhICpPciByYXRoZXIqLCBgX19ubGFfcHV0YCBkb2VzLiBTbywgd2hpbGUgd2UgaGF2ZSB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlIG9yaWdpbmFsIGBiZWFyZXJfbmFtZWAgYXJyYXksIHRoZSBwYWRkaW5nIG1lY2hhbmlzbSBpbiBgbmxhX3B1dGAgZWZmZWN0aXZlbHkgbnVsbHMgYW55IGV4Y2VzcyBieXRlcyBiZXlvbmQgdGhlIHN0cmluZyBsZW5ndGggd2hlbiBhZGRpbmcgdGhlIHN0cmluZyB0byB0aGUgbmV0bGluayBhdHRyaWJ1dGUuCgpTbywgd2hpbGUgdGhlcmUgKmlzKiBhIHBvdGVudGlhbCBmb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrIGRhdGEsIGl0JiMzOTtzICpub3QqIGV4cG9zZWQgaW4gdGhlIG5ldGxpbmsgbWVzc2FnZSBkdWUgdG8gdGhlIHVzZSBvZiBgc3RybGVuYCBpbiBgbmxhX3B1dF9zdHJpbmdgIGFuZCB0aGUgcGFkZGluZyBiZWhhdmlvci4gQSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBleGlzdHMsIGJ1dCBpdCBpcyBub3QgZXhwbG9pdGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbmxhX3B1dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRsaW5rLmg9NTYxPXZvaWQgKm5sYV9yZXNlcnZlX25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuKTtcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDo1NjI6dm9pZCBfX25sYV9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbixcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC01NjMtXHQgICAgICAgY29uc3Qgdm9pZCAqZGF0YSk7XG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6NTY0OnZvaWQgX19ubGFfcHV0XzY0Yml0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtNTY1LVx0XHQgICAgIGNvbnN0IHZvaWQgKmRhdGEsIGludCBwYWRhdHRyKTtcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDo1NjY6dm9pZCBfX25sYV9wdXRfbm9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4sIGNvbnN0IHZvaWQgKmRhdGEpO1xuaW5jbHVkZS9uZXQvbmV0bGluay5oLTU2Ny1pbnQgbmxhX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLCBjb25zdCB2b2lkICpkYXRhKTtcbi0tXG5saWIvbmxhdHRyLmM9MTAyMz1FWFBPUlRfU1lNQk9MKG5sYV9yZXNlcnZlX25vaGRyKTtcbi0tXG5saWIvbmxhdHRyLmMtMTAyNS0vKipcbmxpYi9ubGF0dHIuYzoxMDI2OiAqIF9fbmxhX3B1dCAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHRvIGEgc29ja2V0IGJ1ZmZlclxubGliL25sYXR0ci5jLTEwMjctICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvXG4tLVxubGliL25sYXR0ci5jLTEwMzQtICovXG5saWIvbmxhdHRyLmM6MTAzNTp2b2lkIF9fbmxhX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLFxubGliL25sYXR0ci5jLTEwMzYtXHRcdFx0ICAgICBjb25zdCB2b2lkICpkYXRhKVxuLS1cbmxpYi9ubGF0dHIuYy0xMDQyLX1cbmxpYi9ubGF0dHIuYzoxMDQzOkVYUE9SVF9TWU1CT0woX19ubGFfcHV0KTtcbmxpYi9ubGF0dHIuYy0xMDQ0LVxubGliL25sYXR0ci5jLTEwNDUtLyoqXG5saWIvbmxhdHRyLmM6MTA0NjogKiBfX25sYV9wdXRfNjRiaXQgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB0byBhIHNvY2tldCBidWZmZXIgYW5kIGFsaWduIGl0XG5saWIvbmxhdHRyLmMtMTA0Ny0gKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIGFkZCBhdHRyaWJ1dGUgdG9cbi0tXG5saWIvbmxhdHRyLmMtMTA1NS0gKi9cbmxpYi9ubGF0dHIuYzoxMDU2OnZvaWQgX19ubGFfcHV0XzY0Yml0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sXG5saWIvbmxhdHRyLmMtMTA1Ny1cdFx0ICAgICBjb25zdCB2b2lkICpkYXRhLCBpbnQgcGFkYXR0cilcbi0tXG5saWIvbmxhdHRyLmMtMTA2My19XG5saWIvbmxhdHRyLmM6MTA2NDpFWFBPUlRfU1lNQk9MKF9fbmxhX3B1dF82NGJpdCk7XG5saWIvbmxhdHRyLmMtMTA2NS1cbmxpYi9ubGF0dHIuYy0xMDY2LS8qKlxubGliL25sYXR0ci5jOjEwNjc6ICogX19ubGFfcHV0X25vaGRyIC0gQWRkIGEgbmV0bGluayBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXJcbmxpYi9ubGF0dHIuYy0xMDY4LSAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gYWRkIGF0dHJpYnV0ZSB0b1xuLS1cbmxpYi9ubGF0dHIuYy0xMDc0LSAqL1xubGliL25sYXR0ci5jOjEwNzU6dm9pZCBfX25sYV9wdXRfbm9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4sIGNvbnN0IHZvaWQgKmRhdGEpXG5saWIvbmxhdHRyLmMtMTA3Ni17XG4tLVxubGliL25sYXR0ci5jLTEwODEtfVxubGliL25sYXR0ci5jOjEwODI6RVhQT1JUX1NZTUJPTChfX25sYV9wdXRfbm9oZHIpO1xubGliL25sYXR0ci5jLTEwODMtXG4tLVxubGliL25sYXR0ci5jPTEwOTQ9aW50IG5sYV9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbiwgY29uc3Qgdm9pZCAqZGF0YSlcbi0tXG5saWIvbmxhdHRyLmMtMTA5OC1cbmxpYi9ubGF0dHIuYzoxMDk5Olx0X19ubGFfcHV0KHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4sIGRhdGEpO1xubGliL25sYXR0ci5jLTExMDAtXHRyZXR1cm4gMDtcbi0tXG5saWIvbmxhdHRyLmM9MTExNT1pbnQgbmxhX3B1dF82NGJpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLFxuLS1cbmxpYi9ubGF0dHIuYy0xMTI2LVxubGliL25sYXR0ci5jOjExMjc6XHRfX25sYV9wdXRfNjRiaXQoc2tiLCBhdHRydHlwZSwgYXR0cmxlbiwgZGF0YSwgcGFkYXR0cik7XG5saWIvbmxhdHRyLmMtMTEyOC1cdHJldHVybiAwO1xuLS1cbmxpYi9ubGF0dHIuYz0xMTQxPWludCBubGFfcHV0X25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuLCBjb25zdCB2b2lkICpkYXRhKVxuLS1cbmxpYi9ubGF0dHIuYy0xMTQ1LVxubGliL25sYXR0ci5jOjExNDY6XHRfX25sYV9wdXRfbm9oZHIoc2tiLCBhdHRybGVuLCBkYXRhKTtcbmxpYi9ubGF0dHIuYy0xMTQ3LVx0cmV0dXJuIDA7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDUxPXN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTUyMi1cdGlmICh1cGNhbGxfaW5mby1cdTAwM2V1c2VyZGF0YSlcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjUyMzpcdFx0X19ubGFfcHV0KHVzZXJfc2tiLCBPVlNfUEFDS0VUX0FUVFJfVVNFUkRBVEEsXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01MjQtXHRcdFx0ICBubGFfbGVuKHVwY2FsbF9pbmZvLVx1MDAzZXVzZXJkYXRhKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY4MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBsaWIvbmxhdHRyLmNgKioKCkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gbmV0bGluayBhdHRyaWJ1dGVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgc3RyYWlnaHQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIGBfX25sYV9wdXRgIHdpdGhpbiBgbGliL25sYXR0ci5jYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyB3aGVyZSB0aGUgKmFjdHVhbCogd29yayBvZiBwbGFjaW5nIG5ldGxpbmsgYXR0cmlidXRlcyBpcyBoYXBwZW5pbmcuIEl0JiMzOTtzIHRoZSBidWlsZGluZyBibG9jay4gSSBmaWd1cmUgaWYgSSBuZWVkIHRvIGRpYWdub3NlIGFuIGlzc3VlIHdpdGggdGhlIGF0dHJpYnV0ZXMsIHVuZGVyc3RhbmQgdGhlaXIgc3RydWN0dXJlLCBvciBvcHRpbWl6ZSBzb21lIGZ1bmN0aW9uYWxpdHksIGBfX25sYV9wdXRgIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBidWlsZGluZyBibG9jayBmb3Igd29ya2luZyB3aXRoIGF0dHJpYnV0ZXMsIHNvIGl0IG1ha2VzIHNlbnNlIHRvIHZlcmlmeSB0aGUgb3BlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9ubGF0dHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAzMDpcdCAqIEBkYXRhOiBoZWFkIG9mIGF0dHJpYnV0ZSBwYXlsb2FkXG4xMDMxOlx0ICpcbjEwMzI6XHQgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGVuc3VyZSB0aGF0IHRoZSBza2IgcHJvdmlkZXMgZW5vdWdoXG4xMDMzOlx0ICogdGFpbHJvb20gZm9yIHRoZSBhdHRyaWJ1dGUgaGVhZGVyIGFuZCBwYXlsb2FkLlxuMTAzNDpcdCAqL1xuMTAzNTpcdHZvaWQgX19ubGFfcHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sXG4xMDM2Olx0XHRcdFx0ICAgICBjb25zdCB2b2lkICpkYXRhKVxuMTAzNzpcdHtcbjEwMzg6XHRcdHN0cnVjdCBubGF0dHIgKm5sYTtcbjEwMzk6XHRcbjEwNDA6XHRcdG5sYSA9IF9fbmxhX3Jlc2VydmUoc2tiLCBhdHRydHlwZSwgYXR0cmxlbik7XG4xMDQxOlx0XHRtZW1jcHkobmxhX2RhdGEobmxhKSwgZGF0YSwgYXR0cmxlbik7XG4xMDQyOlx0fVxuMTA0MzpcdEVYUE9SVF9TWU1CT0woX19ubGFfcHV0KTtcbjEwNDQ6XHRcbjEwNDU6XHQvKipcbjEwNDY6XHQgKiBfX25sYV9wdXRfNjRiaXQgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB0byBhIHNvY2tldCBidWZmZXIgYW5kIGFsaWduIGl0XG4xMDQ3Olx0ICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvXG4xMDQ4Olx0ICogQGF0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZVxuMTA0OTpcdCAqIEBhdHRybGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHBheWxvYWRcbjEwNTA6XHQgKiBAZGF0YTogaGVhZCBvZiBhdHRyaWJ1dGUgcGF5bG9hZFxuMTA1MTpcdCAqIEBwYWRhdHRyOiBhdHRyaWJ1dGUgdHlwZSBmb3IgdGhlIHBhZGRpbmdcbjEwNTI6XHQgKlxuMTA1MzpcdCAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gZW5zdXJlIHRoYXQgdGhlIHNrYiBwcm92aWRlcyBlbm91Z2hcbjEwNTQ6XHQgKiB0YWlscm9vbSBmb3IgdGhlIGF0dHJpYnV0ZSBoZWFkZXIgYW5kIHBheWxvYWQuXG4xMDU1Olx0ICovXG4xMDU2Olx0dm9pZCBfX25sYV9wdXRfNjRiaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbixcbjEwNTc6XHRcdFx0ICAgICBjb25zdCB2b2lkICpkYXRhLCBpbnQgcGFkYXR0cilcbjEwNTg6XHR7XG4xMDU5Olx0XHRzdHJ1Y3QgbmxhdHRyICpubGE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNjkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgUGFkZGluZyBNZWNoYW5pc20qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIHJldGhpbmsgdGhpcyBwYWRkaW5nIGlzc3VlLiBUaGUgbmFtZSBgX19ubGFfcmVzZXJ2ZWAuLi4gdGhhdCYjMzk7cyByaW5naW5nIGEgYmVsbC4gTXkgZ3V0IHRlbGxzIG1lICp0aGF0JiMzOTtzKiB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBwYWRkaW5nIHdpdGhpbiB0aGlzIE5ldGxpbmsgQXR0cmlidXRlIChOTEEpIHN0cnVjdHVyZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQ7IEkgbmVlZCB0byBjb25maXJtIG15IGluaXRpYWwgaHVuY2guIEdvdHRhIHZlcmlmeSB0aGUgcm9sZSBvZiBgX19ubGFfcmVzZXJ2ZWAgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBpbmRlZWQgdGhlIHJpZ2h0IGxvY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX25sYV9yZXNlcnZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGxpbmsuaD01NTM9aW50IG5sYV9zdHJjbXAoY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLCBjb25zdCBjaGFyICpzdHIpO1xuaW5jbHVkZS9uZXQvbmV0bGluay5oOjU1NDpzdHJ1Y3QgbmxhdHRyICpfX25sYV9yZXNlcnZlKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4pO1xuaW5jbHVkZS9uZXQvbmV0bGluay5oOjU1NTpzdHJ1Y3QgbmxhdHRyICpfX25sYV9yZXNlcnZlXzY0Yml0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC01NTYtXHRcdFx0XHQgICBpbnQgYXR0cmxlbiwgaW50IHBhZGF0dHIpO1xuaW5jbHVkZS9uZXQvbmV0bGluay5oOjU1Nzp2b2lkICpfX25sYV9yZXNlcnZlX25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuKTtcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC01NTgtc3RydWN0IG5sYXR0ciAqbmxhX3Jlc2VydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbik7XG4tLVxubGliL25sYXR0ci5jPTg4Nz1FWFBPUlRfU1lNQk9MKG5sYV9zdHJjbXApO1xuLS1cbmxpYi9ubGF0dHIuYy04OTAtLyoqXG5saWIvbmxhdHRyLmM6ODkxOiAqIF9fbmxhX3Jlc2VydmUgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBvbiB0aGUgc2tiXG5saWIvbmxhdHRyLmMtODkyLSAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gcmVzZXJ2ZSByb29tIG9uXG4tLVxubGliL25sYXR0ci5jLTkwMS0gKi9cbmxpYi9ubGF0dHIuYzo5MDI6c3RydWN0IG5sYXR0ciAqX19ubGFfcmVzZXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuKVxubGliL25sYXR0ci5jLTkwMy17XG4tLVxubGliL25sYXR0ci5jLTkxMy19XG5saWIvbmxhdHRyLmM6OTE0OkVYUE9SVF9TWU1CT0woX19ubGFfcmVzZXJ2ZSk7XG5saWIvbmxhdHRyLmMtOTE1LVxubGliL25sYXR0ci5jLTkxNi0vKipcbmxpYi9ubGF0dHIuYzo5MTc6ICogX19ubGFfcmVzZXJ2ZV82NGJpdCAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIG9uIHRoZSBza2IgYW5kIGFsaWduIGl0XG5saWIvbmxhdHRyLmMtOTE4LSAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gcmVzZXJ2ZSByb29tIG9uXG4tLVxubGliL25sYXR0ci5jLTkyOS0gKi9cbmxpYi9ubGF0dHIuYzo5MzA6c3RydWN0IG5sYXR0ciAqX19ubGFfcmVzZXJ2ZV82NGJpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsXG5saWIvbmxhdHRyLmMtOTMxLVx0XHRcdFx0ICAgaW50IGF0dHJsZW4sIGludCBwYWRhdHRyKVxuLS1cbmxpYi9ubGF0dHIuYy05MzQtXG5saWIvbmxhdHRyLmM6OTM1Olx0cmV0dXJuIF9fbmxhX3Jlc2VydmUoc2tiLCBhdHRydHlwZSwgYXR0cmxlbik7XG5saWIvbmxhdHRyLmMtOTM2LX1cbmxpYi9ubGF0dHIuYzo5Mzc6RVhQT1JUX1NZTUJPTChfX25sYV9yZXNlcnZlXzY0Yml0KTtcbmxpYi9ubGF0dHIuYy05MzgtXG5saWIvbmxhdHRyLmMtOTM5LS8qKlxubGliL25sYXR0ci5jOjk0MDogKiBfX25sYV9yZXNlcnZlX25vaGRyIC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXJcbmxpYi9ubGF0dHIuYy05NDEtICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byByZXNlcnZlIHJvb20gb25cbi0tXG5saWIvbmxhdHRyLmMtOTQ4LSAqL1xubGliL25sYXR0ci5jOjk0OTp2b2lkICpfX25sYV9yZXNlcnZlX25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuKVxubGliL25sYXR0ci5jLTk1MC17XG4tLVxubGliL25sYXR0ci5jLTk1Mi19XG5saWIvbmxhdHRyLmM6OTUzOkVYUE9SVF9TWU1CT0woX19ubGFfcmVzZXJ2ZV9ub2hkcik7XG5saWIvbmxhdHRyLmMtOTU0LVxuLS1cbmxpYi9ubGF0dHIuYz05Njc9c3RydWN0IG5sYXR0ciAqbmxhX3Jlc2VydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbilcbi0tXG5saWIvbmxhdHRyLmMtOTcxLVxubGliL25sYXR0ci5jOjk3MjpcdHJldHVybiBfX25sYV9yZXNlcnZlKHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4pO1xubGliL25sYXR0ci5jLTk3My19XG4tLVxubGliL25sYXR0ci5jPTk5MD1zdHJ1Y3QgbmxhdHRyICpubGFfcmVzZXJ2ZV82NGJpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLFxuLS1cbmxpYi9ubGF0dHIuYy0xMDAxLVxubGliL25sYXR0ci5jOjEwMDI6XHRyZXR1cm4gX19ubGFfcmVzZXJ2ZV82NGJpdChza2IsIGF0dHJ0eXBlLCBhdHRybGVuLCBwYWRhdHRyKTtcbmxpYi9ubGF0dHIuYy0xMDAzLX1cbi0tXG5saWIvbmxhdHRyLmM9MTAxNj12b2lkICpubGFfcmVzZXJ2ZV9ub2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cmxlbilcbi0tXG5saWIvbmxhdHRyLmMtMTAyMC1cbmxpYi9ubGF0dHIuYzoxMDIxOlx0cmV0dXJuIF9fbmxhX3Jlc2VydmVfbm9oZHIoc2tiLCBhdHRybGVuKTtcbmxpYi9ubGF0dHIuYy0xMDIyLX1cbi0tXG5saWIvbmxhdHRyLmM9MTAzNT12b2lkIF9fbmxhX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLFxuLS1cbmxpYi9ubGF0dHIuYy0xMDM5LVxubGliL25sYXR0ci5jOjEwNDA6XHRubGEgPSBfX25sYV9yZXNlcnZlKHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4pO1xubGliL25sYXR0ci5jLTEwNDEtXHRtZW1jcHkobmxhX2RhdGEobmxhKSwgZGF0YSwgYXR0cmxlbik7XG4tLVxubGliL25sYXR0ci5jPTEwNTY9dm9pZCBfX25sYV9wdXRfNjRiaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbixcbi0tXG5saWIvbmxhdHRyLmMtMTA2MC1cbmxpYi9ubGF0dHIuYzoxMDYxOlx0bmxhID0gX19ubGFfcmVzZXJ2ZV82NGJpdChza2IsIGF0dHJ0eXBlLCBhdHRybGVuLCBwYWRhdHRyKTtcbmxpYi9ubGF0dHIuYy0xMDYyLVx0bWVtY3B5KG5sYV9kYXRhKG5sYSksIGRhdGEsIGF0dHJsZW4pO1xuLS1cbmxpYi9ubGF0dHIuYz0xMDc1PXZvaWQgX19ubGFfcHV0X25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuLCBjb25zdCB2b2lkICpkYXRhKVxuLS1cbmxpYi9ubGF0dHIuYy0xMDc4LVxubGliL25sYXR0ci5jOjEwNzk6XHRzdGFydCA9IF9fbmxhX3Jlc2VydmVfbm9oZHIoc2tiLCBhdHRybGVuKTtcbmxpYi9ubGF0dHIuYy0xMDgwLVx0bWVtY3B5KHN0YXJ0LCBkYXRhLCBhdHRybGVuKTtcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz0yMTY9c3RhdGljIHZvaWQgdHJhY2VfZHJvcF9jb21tb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqbG9jYXRpb24pXG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMjUwLVx0ICovXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzoyNTE6XHRfX25sYV9yZXNlcnZlX25vaGRyKGRza2IsIHNpemVvZihzdHJ1Y3QgbmV0X2RtX2Ryb3BfcG9pbnQpKTtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTI1Mi1cdG5sYS1cdTAwM2VubGFfbGVuICYjNDM7PSBOTEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBuZXRfZG1fZHJvcF9wb2ludCkpO1xuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTYxMT1zdGF0aWMgaW50IG5ldF9kbV9wYWNrZXRfcmVwb3J0X2ZpbGwoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy02NzMtXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo2NzQ6XHRhdHRyID0gX19ubGFfcmVzZXJ2ZShtc2csIE5FVF9ETV9BVFRSX1BBWUxPQUQsIHBheWxvYWRfbGVuKTtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTY3NS1cdGlmIChza2JfY29weV9iaXRzKHNrYiwgMCwgbmxhX2RhdGEoYXR0ciksIHBheWxvYWRfbGVuKSlcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz03Nzg9c3RhdGljIGludCBuZXRfZG1faHdfcGFja2V0X3JlcG9ydF9maWxsKHN0cnVjdCBza19idWZmICptc2csXG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtODMxLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6ODMyOlx0YXR0ciA9IF9fbmxhX3Jlc2VydmUobXNnLCBORVRfRE1fQVRUUl9QQVlMT0FELCBwYXlsb2FkX2xlbik7XG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy04MzMtXHRpZiAoc2tiX2NvcHlfYml0cyhza2IsIDAsIG5sYV9kYXRhKGF0dHIpLCBwYXlsb2FkX2xlbikpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz03MDU9bmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODE3LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4MTg6XHRubGEgPSBfX25sYV9yZXNlcnZlKHNrYiwgTkZRQV9QQUNLRVRfSERSLCBzaXplb2YoKnBtc2cpKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODE5LVx0cG1zZyA9IG5sYV9kYXRhKG5sYSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTczCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIGxhaWQgb3V0LCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgYF9fbmxhX3Jlc2VydmVgIGluIGBsaWIvbmxhdHRyLmNgKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBfX25sYV9yZXNlcnZlYCBhbmQgd2hlcmUgaXQgbGl2ZXMg4oCTIGxldCYjMzk7cyBjaGVjayBpdCBvdXQgZGlyZWN0bHkgaW4gYGxpYi9ubGF0dHIuY2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBsb3ctbGV2ZWwgTmV0bGluayBhdHRyaWJ1dGUgaGFuZGxpbmcgY29kZS4gSG9wZWZ1bGx5LCB1bmRlcnN0YW5kaW5nIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgdXNhZ2UgdGhlcmUgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBzb3VyY2UgY29kZSByZXZlYWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9ubGF0dHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODkwOlx0LyoqXG4gODkxOlx0ICogX19ubGFfcmVzZXJ2ZSAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIG9uIHRoZSBza2JcbiA4OTI6XHQgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIHJlc2VydmUgcm9vbSBvblxuIDg5MzpcdCAqIEBhdHRydHlwZTogYXR0cmlidXRlIHR5cGVcbiA4OTQ6XHQgKiBAYXR0cmxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkXG4gODk1Olx0ICpcbiA4OTY6XHQgKiBBZGRzIGEgbmV0bGluayBhdHRyaWJ1dGUgaGVhZGVyIHRvIGEgc29ja2V0IGJ1ZmZlciBhbmQgcmVzZXJ2ZXNcbiA4OTc6XHQgKiByb29tIGZvciB0aGUgcGF5bG9hZCBidXQgZG9lcyBub3QgY29weSBpdC5cbiA4OTg6XHQgKlxuIDg5OTpcdCAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gZW5zdXJlIHRoYXQgdGhlIHNrYiBwcm92aWRlcyBlbm91Z2hcbiA5MDA6XHQgKiB0YWlscm9vbSBmb3IgdGhlIGF0dHJpYnV0ZSBoZWFkZXIgYW5kIHBheWxvYWQuXG4gOTAxOlx0ICovXG4gOTAyOlx0c3RydWN0IG5sYXR0ciAqX19ubGFfcmVzZXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuKVxuIDkwMzpcdHtcbiA5MDQ6XHRcdHN0cnVjdCBubGF0dHIgKm5sYTtcbiA5MDU6XHRcbiA5MDY6XHRcdG5sYSA9IHNrYl9wdXQoc2tiLCBubGFfdG90YWxfc2l6ZShhdHRybGVuKSk7XG4gOTA3Olx0XHRubGEtXHUwMDNlbmxhX3R5cGUgPSBhdHRydHlwZTtcbiA5MDg6XHRcdG5sYS1cdTAwM2VubGFfbGVuID0gbmxhX2F0dHJfc2l6ZShhdHRybGVuKTtcbiA5MDk6XHRcbiA5MTA6XHRcdG1lbXNldCgodW5zaWduZWQgY2hhciAqKSBubGEgJiM0MzsgbmxhLVx1MDAzZW5sYV9sZW4sIDAsIG5sYV9wYWRsZW4oYXR0cmxlbikpO1xuIDkxMTpcdFxuIDkxMjpcdFx0cmV0dXJuIG5sYTtcbiA5MTM6XHR9XG4gOTE0Olx0RVhQT1JUX1NZTUJPTChfX25sYV9yZXNlcnZlKTtcbiA5MTU6XHRcbiA5MTY6XHQvKipcbiA5MTc6XHQgKiBfX25sYV9yZXNlcnZlXzY0Yml0IC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgb24gdGhlIHNrYiBhbmQgYWxpZ24gaXRcbiA5MTg6XHQgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIHJlc2VydmUgcm9vbSBvblxuIDkxOTpcdCAqIEBhdHRydHlwZTogYXR0cmlidXRlIHR5cGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNzcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN0cmluZyBIYW5kbGluZyBpbiBUSVBDIEJlYXJlciBOYW1lcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyBzdHJpbmcgY29waWVzLCBzcGVjaWZpY2FsbHkgd2l0aCBiZWFyZXIgbmFtZXMuIEl0IGxvb2tzIGxpa2UgYF9fbmxhX3Jlc2VydmVgIGlzIHVzZWQgdG8gcGFkIGFuIGF0dHJpYnV0ZSB3aXRoIHplcm9lcyBhZnRlciByZXNlcnZpbmcgc3BhY2UuIFRoZW4sIGBubGFfcHV0X3N0cmluZ2AgaXMgY2FsbGVkLCB3aGljaCBoYW5kbGVzIGNvcHlpbmcgc3RyaW5ncywgYW5kIGl0JiMzOTtzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3Mgb25seSBjb3B5aW5nIGBzdHJsZW4oc3RyKSAmIzQzOyAxYCBieXRlcy4gTGV0IG1lIHRyYWNlIHRoaXMgYmFjay4uLiBgbmxhX3B1dF9zdHJpbmdgIHVzZXMgYG5sYV9wdXRgLCB3aGljaCByZXNlcnZlcyBzcGFjZSB1c2luZyBgX19ubGFfcmVzZXJ2ZWAgKHBhZGRpbmcgd2l0aCB6ZXJvZXMgYXMgd2UganVzdCBlc3RhYmxpc2hlZCksIGFuZCAqdGhlbiogY29waWVzIHRoZSBkYXRhIHVzaW5nIGBtZW1jcHlgLiAgU28sIGl0IHNlZW1zIHRoYXQgYG5sYV9wdXRfc3RyaW5nYCBjb3BpZXMgZXhhY3RseSBgc3RybGVuKHN0cikgJiM0MzsgMWAgYnl0ZXMgZnJvbSB0aGUgc291cmNlIHN0cmluZy4KCkFoLCBJIG5lZWQgdG8gY2hlY2sgd2hhdCBoYXBwZW5zIHdpdGggdGhlIHNvdXJjZSBzdHJpbmcgbm93LiBUaGUgY29kZSBpcyB1c2luZyBgc3Ryc2NweWAsIGFuZCB0aGUgZWFybGllciB2ZXJzaW9uIHVzZWQgYHN0cmNweWAgd2hpY2gsIG9mIGNvdXJzZSwgaXMgZGFuZ2Vyb3VzIHdpdGhvdXQgZXhwbGljaXQgbGVuZ3RoIGNoZWNrcy4gU28gYHN0cnNjcHlgIGlzIGFuIGltcHJvdmVtZW50LiBNeSBjb25jZXJuIG5vdyBpcyB3aGF0IGhhcHBlbnMgaWYgYHN0cnNjcHlgIGZhaWxzPyBJdCBsb29rcyBsaWtlIGl0IHJldHVybnMgYC1FMkJJR2AgaWYgdGhlIHN0cmluZyBpcyB0b28gbG9uZywgYnV0ICpzdGlsbCogbnVsbC10ZXJtaW5hdGVzIHRoZSBzdHJpbmcsIHVubGVzcyB0aGUgc2l6ZSBpcyAwLgoKTm93LCBsZXQmIzM5O3MgY29tcGFyZSB0aGUgY2hhbmdlLiBUaGUgb2xkIGNvZGUgd2FzIGEgc2ltcGxlIGBzdHJjcHlgLCBidXQgbm93IGl0JiMzOTtzIGBzdHJzY3B5YCB3aXRoIGEgc2l6ZSBsaW1pdCwgYFRJUENfTUFYX0JFQVJFUl9OQU1FYC4gT2theSwgc28gaWYgdGhlIHNvdXJjZSBzdHJpbmcgKGBiLSZndDtuYW1lYCkgaXMgZXhhY3RseSBgVElQQ19NQVhfQkVBUkVSX05BTUVgIGJ5dGVzIGxvbmcsICp3aXRob3V0KiBhIG51bGwgdGVybWluYXRvciwgYHN0cnNjcHlgIHdpbGwgY29weSBgVElQQ19NQVhfQkVBUkVSX05BTUUgLSAxYCBieXRlcyBhbmQgYWRkIGEgbnVsbCB0ZXJtaW5hdG9yLiBUaGF0IG1lYW5zIHRoZXJlJiMzOTtzIGFsd2F5cyBhIG51bGwgdGVybWluYXRvciEgR29vZCwgdGhhdCYjMzk7cyBjcnVjaWFsLiAgQW5kLCBvaCwgcmlnaHQgLSBgYi0mZ3Q7bmFtZWAgaXMgYW4gYXJyYXkgb2Ygc2l6ZSBgVElQQ19NQVhfQkVBUkVSX05BTUVgLCB3aGljaCBpcyAzMiBieXRlcy4uLiBJIHdpbGwgZG91YmxlLWNoZWNrIGBzdHJ1Y3QgdGlwY19iZWFyZXJgIHN0cnVjdHVyZSB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZywgYnV0IHRoaXMgbG9va3MgcHJldHR5IHNvbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdGlwY19iZWFyZXIgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2JlYXJlci5oPTEwND1zdHJ1Y3QgdGlwY19tZWRpYSB7XG4tLVxubmV0L3RpcGMvYmVhcmVyLmgtMTU2LSAqL1xubmV0L3RpcGMvYmVhcmVyLmg6MTU3OnN0cnVjdCB0aXBjX2JlYXJlciB7XG5uZXQvdGlwYy9iZWFyZXIuaC0xNTgtXHR2b2lkIF9fcmN1ICptZWRpYV9wdHI7XHRcdFx0LyogaW5pdGlhbGl6ZWQgYnkgbWVkaWEgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgVElQQyBCZWFyZXIgU3RydWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyByZWZyZXNoIG91ciBtZW1vcnkgb24gdGhlIGBzdHJ1Y3QgdGlwY19iZWFyZXJgIGRlZmluaXRpb24uIFRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L3RpcGMvYmVhcmVyLmhgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhbmQgaG93IGl0IHNlcnZlcyBhcyB0aGUgY29yZSByZXByZXNlbnRhdGlvbiBmb3IgVElQQyBiZWFyZXJzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgZmllbGRzIHJlbGF0ZWQgdG8gdmFyaW91cyB1bmRlcmx5aW5nIG5ldHdvcmsgdHJhbnNwb3J0cyBhbmQgdW5kZXJzdGFuZCB0aGUgcm9sZSB0aGlzIHN0cnVjdCBwbGF5cyBpbiBtYW5hZ2luZyBwaHlzaWNhbCBhbmQgdmlydHVhbCBjb25uZWN0aW9ucy4gSeKAmW0gaG9waW5nIHRvIGFzc2VzcyB3aGV0aGVyIGl0IHByb3Blcmx5IGFkZHJlc3NlcyBtb2Rlcm4gbmV0d29ya2luZyBuZWVkcyDigJMgaXMgaXQgc3RpbGwgcm9idXN0LCBzY2FsYWJsZSwgYW5kIGVmZmljaWVudD8gSXMgdGhlcmUgYW55dGhpbmcgaGVyZSB0aGF0IGNvdWxkIGJlY29tZSBhIGJvdHRsZW5lY2sgb3IgYSBwb3RlbnRpYWwgc291cmNlIG9mIGNvbXBsZXhpdHkgYXMgd2UgY29uc2lkZXIgZnV0dXJlIGVuaGFuY2VtZW50cz8gTGV0JiMzOTtzIGdldCB0byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3RpcGMvYmVhcmVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE1MDpcdCAqIEB1cDogYmVhcmVyIHVwIGZsYWcgKGJpdCAwKVxuIDE1MTpcdCAqIEByZWZjbnQ6IHRpcGNfYmVhcmVyIHJlZmVyZW5jZSBjb3VudGVyXG4gMTUyOlx0ICpcbiAxNTM6XHQgKiBOb3RlOiBtZWRpYS1zcGVjaWZpYyBjb2RlIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXphdGlvbiBvZiB0aGUgZmllbGRzXG4gMTU0Olx0ICogaW5kaWNhdGVkIGJlbG93IHdoZW4gYSBiZWFyZXIgaXMgZW5hYmxlZDsgVElQQyYjMzk7cyBnZW5lcmljIGJlYXJlciBjb2RlIHRha2VzXG4gMTU1Olx0ICogY2FyZSBvZiBpbml0aWFsaXppbmcgYWxsIG90aGVyIGZpZWxkcy5cbiAxNTY6XHQgKi9cbiAxNTc6XHRzdHJ1Y3QgdGlwY19iZWFyZXIge1xuIDE1ODpcdFx0dm9pZCBfX3JjdSAqbWVkaWFfcHRyO1x0XHRcdC8qIGluaXRpYWxpemVkIGJ5IG1lZGlhICovXG4gMTU5Olx0XHR1MzIgbXR1O1x0XHRcdFx0LyogaW5pdGlhbGl6ZWQgYnkgbWVkaWEgKi9cbiAxNjA6XHRcdHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgYWRkcjtcdFx0LyogaW5pdGlhbGl6ZWQgYnkgbWVkaWEgKi9cbiAxNjE6XHRcdGNoYXIgbmFtZVtUSVBDX01BWF9CRUFSRVJfTkFNRV07XG4gMTYyOlx0XHRzdHJ1Y3QgdGlwY19tZWRpYSAqbWVkaWE7XG4gMTYzOlx0XHRzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyIGJjYXN0X2FkZHI7XG4gMTY0Olx0XHRzdHJ1Y3QgcGFja2V0X3R5cGUgcHQ7XG4gMTY1Olx0XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIDE2NjpcdFx0dTMyIHByaW9yaXR5O1xuIDE2NzpcdFx0dTMyIG1pbl93aW47XG4gMTY4Olx0XHR1MzIgbWF4X3dpbjtcbiAxNjk6XHRcdHUzMiB0b2xlcmFuY2U7XG4gMTcwOlx0XHR1MzIgZG9tYWluO1xuIDE3MTpcdFx0dTMyIGlkZW50aXR5O1xuIDE3MjpcdFx0c3RydWN0IHRpcGNfZGlzY292ZXJlciAqZGlzYztcbiAxNzM6XHRcdGNoYXIgbmV0X3BsYW5lO1xuIDE3NDpcdFx0dTE2IGVuY2FwX2hsZW47XG4gMTc1Olx0XHR1bnNpZ25lZCBsb25nIHVwO1xuIDE3NjpcdFx0cmVmY291bnRfdCByZWZjbnQ7XG4gMTc3Olx0fTtcbiAxNzg6XHRcbiAxNzk6XHRzdHJ1Y3QgdGlwY19iZWFyZXJfbmFtZXMge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA0NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGluIGBuYW1lYCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmFtZWAgdmFyaWFibGU6IGBjaGFyIG5hbWVbVElQQ19NQVhfQkVBUkVSX05BTUVdO2AuIFJpZ2h0IGF3YXksIEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlLiBJZiB0aGUgaW5wdXQgYGItJmd0O25hbWVgIGlzbiYjMzk7dCBwcm9wZXJseSBudWxsLXRlcm1pbmF0ZWQsIHRoYXQgYHN0cmNweShuYW1lLCBiLSZndDtuYW1lKWAgY291bGQgdmVyeSBlYXNpbHkgbGVhZCB0byBhIHJlYWQgYW5kIHdyaXRlIGJ1ZmZlciBvdmVyZmxvdy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSwgYW5kIEkgbmVlZCB0byBiZSBzdXJlIGl0JiMzOTtzIG5vdCBwcmVzZW50IGhlcmUuCgpCdXQgaG9sZCBvbiwgd2hlcmUgKmRvZXMqIGBiLSZndDtuYW1lYCBnZXQgcG9wdWxhdGVkPyBBaCwgaXQmIzM5O3MgaW4gYHRpcGNfZW5hYmxlX2JlYXJlcmAuIE9rYXksIHRoYXQmIzM5O3MgdGhlIG5leHQgcGxhY2UgdG8gaW52ZXN0aWdhdGUuIEkgbmVlZCB0byBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgdHJhY2UgdGhlIHBhdGggd2hlcmUgYGItJmd0O25hbWVgIGlzIGFzc2lnbmVkLiBUaGUga2V5IGlzIGdvaW5nIHRvIGJlIGRldGVybWluaW5nIGlmIHRoZXJlJiMzOTtzIGFueSBzYWZlZ3VhcmQgdGhlcmUgYWdhaW5zdCBub24tbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3Mgb3IgZXhjZXNzaXZlIGxlbmd0aCBpbiB0aGUgaW5wdXQgZGF0YS4gVGhpcyBpcyBsb29raW5nIGxpa2UgYSBwb3RlbnRpYWwgcHJvYmxlbSBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX2VuYWJsZV9iZWFyZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvYmVhcmVyLmM9MjI3PXZvaWQgdGlwY19iZWFyZXJfcmVtb3ZlX2Rlc3Qoc3RydWN0IG5ldCAqbmV0LCB1MzIgYmVhcmVyX2lkLCB1MzIgZGVzdClcbi0tXG5uZXQvdGlwYy9iZWFyZXIuYy0yMzgtLyoqXG5uZXQvdGlwYy9iZWFyZXIuYzoyMzk6ICogdGlwY19lbmFibGVfYmVhcmVyIC0gZW5hYmxlIGJlYXJlciB3aXRoIHRoZSBnaXZlbiBuYW1lXG5uZXQvdGlwYy9iZWFyZXIuYy0yNDAtICogQG5ldDogdGhlIGFwcGxpY2FibGUgbmV0IG5hbWVzcGFjZVxuLS1cbm5ldC90aXBjL2JlYXJlci5jLTI0Ni0gKi9cbm5ldC90aXBjL2JlYXJlci5jOjI0NzpzdGF0aWMgaW50IHRpcGNfZW5hYmxlX2JlYXJlcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG5uZXQvdGlwYy9iZWFyZXIuYy0yNDgtXHRcdFx0ICAgICAgdTMyIGRpc2NfZG9tYWluLCB1MzIgcHJpbyxcbi0tXG5uZXQvdGlwYy9iZWFyZXIuYz0xMDA4PWludCBfX3RpcGNfbmxfYmVhcmVyX2VuYWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC90aXBjL2JlYXJlci5jLTEwNDctXG5uZXQvdGlwYy9iZWFyZXIuYzoxMDQ4Olx0cmV0dXJuIHRpcGNfZW5hYmxlX2JlYXJlcihuZXQsIGJlYXJlciwgZG9tYWluLCBwcmlvLCBhdHRycyxcbm5ldC90aXBjL2JlYXJlci5jLTEwNDktXHRcdFx0XHQgIGluZm8tXHUwMDNlZXh0YWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2ODEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKkNoZWNraW5nIGB0aXBjX2VuYWJsZV9iZWFyZXJgIGluIGBuZXQvdGlwYy9iZWFyZXIuY2AqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBiZWFyZXIgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGJlYXJlciBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbiBpcyBoYW5kbGVkLiBUaGUgZnVuY3Rpb24gYHRpcGNfZW5hYmxlX2JlYXJlcmAgaW4gYG5ldC90aXBjL2JlYXJlci5jYCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJIHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBob2xkcyB0aGUgY29yZSBsb2dpYyBmb3IgZW5hYmxpbmcgYSBwYXJ0aWN1bGFyIHRyYW5zcG9ydCBiZWFyZXIsIHdoYXRldmVyIHRoYXQgbWF5IGJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQga2luZCBvZiBjaGVja3MgaXQgcGVyZm9ybXMsIHdoaWNoIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIG92ZXJhbGwgVElQQyBuZXR3b3JraW5nIHN0YWNrLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgb24gbGluayBlc3RhYmxpc2htZW50LCByb3V0ZSBjb25maWd1cmF0aW9uLCBwZXJoYXBzIGV2ZW4gc29tZSBlcnJvciBoYW5kbGluZyByZWxhdGVkIHRvIGJlYXJlciBhdmFpbGFiaWxpdHkgb3IgcmVzb3VyY2UgYWxsb2NhdGlvbi4gVGhlIG5hbWluZyBzdWdnZXN0cyBpdCYjMzk7cyB0aGUga2V5IGZ1bmN0aW9uIEkmIzM5O20gYWZ0ZXIsIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBpdCBmaXRzIHRoZSBicm9hZGVyIGNvbnRleHQgYXMgSSBkaWcgZGVlcGVyLiBUaGlzIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgYmVhcmVyIGxpZmVjeWNsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGlwYy9iZWFyZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQ3Olx0c3RhdGljIGludCB0aXBjX2VuYWJsZV9iZWFyZXIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxuIDI0ODpcdFx0XHRcdCAgICAgIHUzMiBkaXNjX2RvbWFpbiwgdTMyIHByaW8sXG4gMjQ5Olx0XHRcdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqYXR0cltdLFxuIDI1MDpcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAyNTE6XHR7XG4gMjUyOlx0XHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiAyNTM6XHRcdHN0cnVjdCB0aXBjX2JlYXJlcl9uYW1lcyBiX25hbWVzO1xuIDI1NDpcdFx0aW50IHdpdGhfdGhpc19wcmlvID0gMTtcbiAyNTU6XHRcdHN0cnVjdCB0aXBjX2JlYXJlciAqYjtcbiAyNTY6XHRcdHN0cnVjdCB0aXBjX21lZGlhICptO1xuIDI1NzpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAyNTg6XHRcdGludCBiZWFyZXJfaWQgPSAwO1xuIDI1OTpcdFx0aW50IHJlcyA9IC1FSU5WQUw7XG4gMjYwOlx0XHRjaGFyICplcnJzdHIgPSBcJiMzNDtcJiMzNDs7XG4gMjYxOlx0XHR1MzIgaTtcbiAyNjI6XHRcbiAyNjM6XHRcdGlmICghYmVhcmVyX25hbWVfdmFsaWRhdGUobmFtZSwgXHUwMDI2Yl9uYW1lcykpIHtcbiAyNjQ6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbGxlZ2FsIG5hbWVcJiMzNDspO1xuIDI2NTpcdFx0XHRyZXR1cm4gcmVzO1xuIDI2NjpcdFx0fVxuIDI2NzpcdFxuIDI2ODpcdFx0aWYgKHByaW8gXHUwMDNlIFRJUENfTUFYX0xJTktfUFJJIFx1MDAyNlx1MDAyNiBwcmlvICE9IFRJUENfTUVESUFfTElOS19QUkkpIHtcbiAyNjk6XHRcdFx0ZXJyc3RyID0gXCYjMzQ7aWxsZWdhbCBwcmlvcml0eVwmIzM0OztcbiAyNzA6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbGxlZ2FsIHByaW9yaXR5XCYjMzQ7KTtcbiAyNzE6XHRcdFx0Z290byByZWplY3RlZDtcbiAyNzI6XHRcdH1cbiAyNzM6XHRcbiAyNzQ6XHRcdG0gPSB0aXBjX21lZGlhX2ZpbmQoYl9uYW1lcy5tZWRpYV9uYW1lKTtcbiAyNzU6XHRcdGlmICghbSkge1xuIDI3NjpcdFx0XHRlcnJzdHIgPSBcJiMzNDttZWRpYSBub3QgcmVnaXN0ZXJlZFwmIzM0OztcbiAyNzc6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtNZWRpYSBub3QgcmVnaXN0ZXJlZFwmIzM0Oyk7XG4gMjc4Olx0XHRcdGdvdG8gcmVqZWN0ZWQ7XG4gMjc5Olx0XHR9XG4gMjgwOlx0XG4gMjgxOlx0XHRpZiAocHJpbyA9PSBUSVBDX01FRElBX0xJTktfUFJJKVxuIDI4MjpcdFx0XHRwcmlvID0gbS1cdTAwM2Vwcmlvcml0eTtcbiAyODM6XHRcbiAyODQ6XHRcdC8qIENoZWNrIG5ldyBiZWFyZXIgdnMgZXhpc3Rpbmcgb25lcyBhbmQgZmluZCBmcmVlIGJlYXJlciBpZCBpZiBhbnkgKi9cbiAyODU6XHRcdGJlYXJlcl9pZCA9IE1BWF9CRUFSRVJTO1xuIDI4NjpcdFx0aSA9IE1BWF9CRUFSRVJTO1xuIDI4NzpcdFx0d2hpbGUgKGktLSAhPSAwKSB7XG4gMjg4Olx0XHRcdGIgPSBydG5sX2RlcmVmZXJlbmNlKHRuLVx1MDAzZWJlYXJlcl9saXN0W2ldKTtcbiAyODk6XHRcdFx0aWYgKCFiKSB7XG4gMjkwOlx0XHRcdFx0YmVhcmVyX2lkID0gaTtcbiAyOTE6XHRcdFx0XHRjb250aW51ZTtcbiAyOTI6XHRcdFx0fVxuIDI5MzpcdFx0XHRpZiAoIXN0cmNtcChuYW1lLCBiLVx1MDAzZW5hbWUpKSB7XG4gMjk0Olx0XHRcdFx0ZXJyc3RyID0gXCYjMzQ7YWxyZWFkeSBlbmFibGVkXCYjMzQ7O1xuIDI5NTpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7QWxyZWFkeSBlbmFibGVkXCYjMzQ7KTtcbiAyOTY6XHRcdFx0XHRnb3RvIHJlamVjdGVkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDczMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKlRyYWNpbmcgdGhlIERhdGEgRmxvdyBvZiBgYi0mZ3Q7bmFtZWAqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgYi0mZ3Q7bmFtZWAgZmllbGQgaXMgZ2V0dGluZyBpdHMgdmFsdWUuIFRoaXMgaXMgYSBjb21tb24gZGVidWdnaW5nIHN0ZXAsIGVzcGVjaWFsbHkgd2hlbiB5b3UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG9yIGluY29ycmVjdCBkYXRhLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFdoYXQgaXMgYGJgPyBJcyBpdCBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QsIGEgY2xhc3MsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IHR5cGUgaXMgdGhlIGBuYW1lYCBtZW1iZXI/IFRoZSBtb3JlIEkgdW5kZXJzdGFuZCBhYm91dCB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGJldHRlciBJIGNhbiB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZGF0YSBpcyBjb21pbmcgZnJvbS4KCkdpdmVuIHRoYXQgSSBhbHJlYWR5IGtub3cgdGhlIGNvbnRleHQsIHRoZSBhcHByb2FjaCBpcyBjbGVhcjogSSBuZWVkIHRvIGRvIGEgY29kZSBzZWFyY2guIEkmIzM5O2xsIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBgYmAgdmFyaWFibGUsIG9yIGluc3RhbmNlcyBvZiB0aGUgdHlwZSBgYmAgYmVsb25ncyB0bywgaXMgZGVjbGFyZWQgb3IgaW5zdGFudGlhdGVkLiBJJiMzOTtsbCBmb2xsb3cgdGhhdCBpbnN0YW50aWF0aW9uIHBvaW50IHRvIHdoZXJlIGl0IGdldHMgYXNzaWduZWQgdG8uIFRoZW4sIEkgd2lsbCB0cmFjZSB0aGlzIHBvaW50ZXIgdGhyb3VnaCB0aGUgY29kZSB0byBpZGVudGlmeSBldmVyeSBwbGFjZSB3aGVyZSB0aGUgYG5hbWVgIG1lbWJlciBtaWdodCBiZSBnZXR0aW5nIG1vZGlmaWVkLCBpbmNsdWRpbmcgYW55IGNvbnN0cnVjdG9ycyBvciBvdGhlciBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMuIEkgd2lsbCBhbHNvIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcywgZXNwZWNpYWxseSBpZiBgYmAgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiBJIHdpbGwgbG9vayBmb3IgYW55IGFzc2lnbm1lbnRzIG9yIGZ1bmN0aW9uIGNhbGxzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgYWZmZWN0IHRoYXQgZmllbGQuIEVzc2VudGlhbGx5LCBJJiMzOTttIHBlcmZvcm1pbmcgYSBmb3J3YXJkIGFuYWx5c2lzIOKAkyBzdGFydGluZyBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgYmAgYW5kIGZvbGxvd2luZyBpdHMgbGlmZSB0aHJvdWdoIHRoZSBjb2RlIHRvIHdoZXJlIGBiLSZndDtuYW1lYCBpcyBwb3B1bGF0ZWQuIElmIHRoZSBjb2RlYmFzZSBpcyBsYXJnZSwgSSBtaWdodCBuZWVkIHRvIG5hcnJvdyBteSBzZWFyY2ggZG93biBieSBsb29raW5nIGZvciByZWxhdGVkIGZ1bmN0aW9ucywgbW9kdWxlcywgb3IgZmlsZSBuYW1lcy4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIHBhdHRlcm5zIGxpa2UgJiMzNDtiLSZndDtuYW1lID0mIzM0OyBvciBldmVuIGNhbGxzIHRvIHBvdGVudGlhbGx5IHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYHNldF9uYW1lKGIsIC4uLilgIG9yIGV2ZW4gaW5kaXJlY3QgaW5pdGlhbGlzYXRpb24gdGhyb3VnaCBwb2ludGVycyBvciBmdW5jdGlvbiBjYWxscy4gTXkgZ29hbCBpcyB0byBleGhhdXN0aXZlbHkgdHJhY2UgdGhlIHBvc3NpYmxlIHBhdGhzIG9mIGRhdGEgZmxvdyB0byBpZGVudGlmeSB0aGUgc2luZ2xlIHNvdXJjZSBvciBtdWx0aXBsZSBzb3VyY2VzIG9mIHRoYXQgZmllbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3RpcGMvYmVhcmVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5NzpcdFx0XHR9XG4gMjk4Olx0XG4gMjk5Olx0XHRcdGlmIChiLVx1MDAzZXByaW9yaXR5ID09IHByaW8gXHUwMDI2XHUwMDI2XG4gMzAwOlx0XHRcdCAgICAoJiM0MzsmIzQzO3dpdGhfdGhpc19wcmlvIFx1MDAzZSAyKSkge1xuIDMwMTpcdFx0XHRcdHByX3dhcm4oXCYjMzQ7QmVhcmVyIFx1MDAzYyVzXHUwMDNlOiBhbHJlYWR5IDIgYmVhcmVycyB3aXRoIHByaW9yaXR5ICV1XFxuXCYjMzQ7LFxuIDMwMjpcdFx0XHRcdFx0bmFtZSwgcHJpbyk7XG4gMzAzOlx0XG4gMzA0Olx0XHRcdFx0aWYgKHByaW8gPT0gVElQQ19NSU5fTElOS19QUkkpIHtcbiAzMDU6XHRcdFx0XHRcdGVycnN0ciA9IFwmIzM0O2Nhbm5vdCBhZGp1c3QgdG8gbG93ZXJcJiMzNDs7XG4gMzA2Olx0XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0Nhbm5vdCBhZGp1c3QgdG8gbG93ZXJcJiMzNDspO1xuIDMwNzpcdFx0XHRcdFx0Z290byByZWplY3RlZDtcbiAzMDg6XHRcdFx0XHR9XG4gMzA5Olx0XG4gMzEwOlx0XHRcdFx0cHJfd2FybihcJiMzNDtCZWFyZXIgXHUwMDNjJXNcdTAwM2U6IHRyeWluZyB3aXRoIGFkanVzdGVkIHByaW9yaXR5XFxuXCYjMzQ7LFxuIDMxMTpcdFx0XHRcdFx0bmFtZSk7XG4gMzEyOlx0XHRcdFx0cHJpby0tO1xuIDMxMzpcdFx0XHRcdGJlYXJlcl9pZCA9IE1BWF9CRUFSRVJTO1xuIDMxNDpcdFx0XHRcdGkgPSBNQVhfQkVBUkVSUztcbiAzMTU6XHRcdFx0XHR3aXRoX3RoaXNfcHJpbyA9IDE7XG4gMzE2Olx0XHRcdH1cbiAzMTc6XHRcdH1cbiAzMTg6XHRcbiAzMTk6XHRcdGlmIChiZWFyZXJfaWQgXHUwMDNlPSBNQVhfQkVBUkVSUykge1xuIDMyMDpcdFx0XHRlcnJzdHIgPSBcJiMzNDttYXggMyBiZWFyZXJzIHBlcm1pdHRlZFwmIzM0OztcbiAzMjE6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtNYXggMyBiZWFyZXJzIHBlcm1pdHRlZFwmIzM0Oyk7XG4gMzIyOlx0XHRcdGdvdG8gcmVqZWN0ZWQ7XG4gMzIzOlx0XHR9XG4gMzI0Olx0XG4gMzI1Olx0XHRiID0ga3phbGxvY19vYmooKmIsIEdGUF9BVE9NSUMpO1xuIDMyNjpcdFx0aWYgKCFiKVxuIDMyNzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzMjg6XHRcbiAzMjk6XHRcdHN0cnNjcHkoYi1cdTAwM2VuYW1lLCBuYW1lKTtcbiAzMzA6XHRcdGItXHUwMDNlbWVkaWEgPSBtO1xuIDMzMTpcdFx0cmVzID0gbS1cdTAwM2VlbmFibGVfbWVkaWEobmV0LCBiLCBhdHRyKTtcbiAzMzI6XHRcdGlmIChyZXMpIHtcbiAzMzM6XHRcdFx0a2ZyZWUoYik7XG4gMzM0Olx0XHRcdGVycnN0ciA9IFwmIzM0O2ZhaWxlZCB0byBlbmFibGUgbWVkaWFcJiMzNDs7XG4gMzM1Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmFpbGVkIHRvIGVuYWJsZSBtZWRpYVwmIzM0Oyk7XG4gMzM2Olx0XHRcdGdvdG8gcmVqZWN0ZWQ7XG4gMzM3Olx0XHR9XG4gMzM4Olx0XG4gMzM5Olx0XHRiLVx1MDAzZWlkZW50aXR5ID0gYmVhcmVyX2lkO1xuIDM0MDpcdFx0Yi1cdTAwM2V0b2xlcmFuY2UgPSBtLVx1MDAzZXRvbGVyYW5jZTtcbiAzNDE6XHRcdGItXHUwMDNlbWluX3dpbiA9IG0tXHUwMDNlbWluX3dpbjtcbiAzNDI6XHRcdGItXHUwMDNlbWF4X3dpbiA9IG0tXHUwMDNlbWF4X3dpbjtcbiAzNDM6XHRcdGItXHUwMDNlZG9tYWluID0gZGlzY19kb21haW47XG4gMzQ0Olx0XHRiLVx1MDAzZW5ldF9wbGFuZSA9IGJlYXJlcl9pZCAmIzQzOyAmIzM5O0EmIzM5OztcbiAzNDU6XHRcdGItXHUwMDNlcHJpb3JpdHkgPSBwcmlvO1xuIDM0NjpcdFx0cmVmY291bnRfc2V0KFx1MDAyNmItXHUwMDNlcmVmY250LCAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MDUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBTdHJpbmcgQ29weWluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYGJgIGJlaW5nIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigqYiwgR0ZQX0FUT01JQyk7YC4gTXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtBaGEhIFRoaXMgemVyb3MgdGhlIGVudGlyZSBzdHJ1Y3R1cmUuJiMzNDsgQnV0IHRoZW4gSSBwYXVzZS4gYGt6YWxsb2Nfb2JqYC4uLiBpcyB0aGF0IGEgbWFjcm8/IEl0JiMzOTtzIG5vdCBzdGFuZGFyZCBrZXJuZWwsIHNvIEkmIzM5O2xsIGNoZWNrIGl0IHF1aWNrbHkuIEl0JiMzOTtzIGxpa2VseSBhIHdyYXBwZXIsIG1heWJlIGp1c3QgYGt6YWxsb2Moc2l6ZW9mKCpiKSwgR0ZQX0FUT01JQylgLiBZZXAsIGFmdGVyIGEgcXVpY2sgY2hlY2ssIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSB3cmFwcGVyIGZvciBga3phbGxvY2AsIHdoaWNoIGRvZXMgaW5kZWVkIHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnkuCgpOZXh0LCBJIHNlZSBgc3Ryc2NweShiLSZndDtuYW1lLCBuYW1lKTtgIGFuZCBteSBicmFpbiBpbW1lZGlhdGVseSBmbGFncyB0aGF0IGZvciBhIHN0cmluZyBjb3B5LiBCdXQgd2FpdCBhIHNlY29uZC4uLiBgc3Ryc2NweWAgb25seSB0YWtlcyB0d28gYXJndW1lbnRzIGhlcmU/IFRoYXQgZG9lc24mIzM5O3Qgc2VlbSByaWdodC4gYHN0cnNjcHlgIHNob3VsZCB0YWtlIHRocmVlLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBjYWxsIGluIGB0aXBjX2VuYWJsZV9iZWFyZXJgIGFuZCB2ZXJpZnkgdGhlIHVzYWdlLiBBaCB5ZXMsIGl0JiMzOTtzIGBzdHJzY3B5KGItJmd0O25hbWUsIG5hbWUsIFRJUENfTUFYX0JFQVJFUl9OQU1FKWAuIEJldHRlciBjaGVjayB0aGUgZGVmaW5pdGlvbiB0byBiZSBzdXJlLiBBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgaXQgLSB0aGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIGJ1ZmZlciBzaXplLiBHb3QgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnNjcHlcXChiLVx1MDAzZW5hbWUsIG5hbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvYmVhcmVyLmM9MjQ3PXN0YXRpYyBpbnQgdGlwY19lbmFibGVfYmVhcmVyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5uZXQvdGlwYy9iZWFyZXIuYy0zMjgtXG5uZXQvdGlwYy9iZWFyZXIuYzozMjk6XHRzdHJzY3B5KGItXHUwMDNlbmFtZSwgbmFtZSk7XG5uZXQvdGlwYy9iZWFyZXIuYy0zMzAtXHRiLVx1MDAzZW1lZGlhID0gbTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MjkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEV4cG9zdXJlKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIFNlZWluZyBgc3Ryc2NweWAgd2l0aCB0d28gYXJndW1lbnRzIGltbWVkaWF0ZWx5IGZsYWdzIGl0LiBSaWdodCwgaXQmIzM5O3MgYSBtYWNybyDigJMgYHN0cnNjcHkoZGVzdCwgc3JjLCAuLi4pYCDigJMgYW5kIGl0IGNhbiB3b3JrIHdpdGggdHdvIGFyZ3VtZW50cyBpZiB0aGUgZGVzdGluYXRpb24gaXMgYW4gYXJyYXkuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGFsbG9jYXRpb24gb2YgYGItJmd0O25hbWVgIHdpdGggYGt6YWxsb2NgLiBUaGF0IHplcm9lcyBpdCBvdXQgY29tcGxldGVseS4gVGhlbiBgc3Ryc2NweShiLSZndDtuYW1lLCBuYW1lKWAgY29waWVzIHRoZSBzb3VyY2Ugc3RyaW5nIGFuZCBudWxsLXRlcm1pbmF0ZXMgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2l0aCB0aGUgcmVtYWluaW5nIGJ5dGVzIG9mIGBiLSZndDtuYW1lYCByZW1haW5pbmcgemVyb2VkLiBTbyBgYi0mZ3Q7bmFtZWAgZW5kcyB1cCBmdWxseSBpbml0aWFsaXplZCB3aXRoIGJvdGggdGhlIHN0cmluZyBhbmQgYW55IG5lY2Vzc2FyeSBwYWRkaW5nIHplcm9lcy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYHRpcGNfYmVhcmVyX2dldF9uYW1lYC4gSXQgdXNlcyBgc3Ryc2NweWAgYWdhaW46IGBzdHJzY3B5KG5hbWUsIGItJmd0O25hbWUsIFRJUENfTUFYX0JFQVJFUl9OQU1FKWAuIEJ1dCBoZXJlLCBgbmFtZWAgaXMgYGJlYXJlcl9uYW1lYCwgYSBsb2NhbCBgY2hhcmAgYXJyYXkgaW4gYF9fdGlwY19ubF9hZGRfbW9uaXRvcmAuIElmIGBzdHJzY3B5YCBpcyB1c2VkLCBpdCBvbmx5IGNvcGllcyB0aGUgc3RyaW5nIGFuZCBudWxsLXRlcm1pbmF0ZXMgaXQuIEl0ICpkb2VzbiYjMzk7dCogemVybyB0aGUgcmVzdCBvZiBgYmVhcmVyX25hbWVgLiBUaGF0IG1lYW5zIHRoZSByZW1haW5pbmcgcG9ydGlvbiBvZiBgYmVhcmVyX25hbWVgIGlzIGZpbGxlZCB3aXRoIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5LgoKVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGNhbGwgdG8gYG5sYV9wdXRfc3RyaW5nKG1zZy0mZ3Q7c2tiLCBUSVBDX05MQV9NT05fQkVBUkVSX05BTUUsIGJlYXJlcl9uYW1lKWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIGRvZXMgYG5sYV9wdXRfc3RyaW5nYCBjb3B5IHRoZSAqd2hvbGUqIGBiZWFyZXJfbmFtZWAgYXJyYXksIHBvdGVudGlhbGx5IGV4cG9zaW5nIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIHRoYXQmIzM5O3Mgbm90IHdoYXQgdGhlIGNvZGUgc2hvd3MuIERpdmluZyBpbnRvIHRoZSBgbmxhX3B1dF9zdHJpbmdgIG1hY3JvLCBpdCBzaW1wbHkgdXNlcyBgc3RybGVuKHN0cikgJiM0MzsgMWAgYXMgdGhlIHNpemUgb2YgdGhlIGNvcHkuIFNvLCBpdCBvbmx5IGNvcGllcyB0aGUgc3RyaW5nIGFuZCB0aGUgbnVsbCB0ZXJtaW5hdG9yLiBUaGF0JiMzOTtzIGdvb2QuCgpBbmQsIGxvb2tpbmcgYXQgYF9fbmxhX3Jlc2VydmVgIGNvbmZpcm1zIHRoYXQgdGhlIGF0dHJpYnV0ZSBnZXRzIHBhZGRlZCB3aXRoIHplcm9lcy4gSSB3YXMgcmlnaHQg4oCTIHRoZSB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGBiZWFyZXJfbmFtZWAgYXJlICpuZXZlciogY29waWVkIGludG8gdGhlIHNrYiEgVGhhdCBtZWFucywgbm8sIHRoaXMgbG9va3Mgc2FmZSBmcm9tIHRoYXQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuCgpCdXQsIGlzIHRoZXJlICphbm90aGVyKiBjYWxsZXIgb2YgYHRpcGNfYmVhcmVyX2dldF9uYW1lYCB0aGF0IG1pZ2h0IGJlIHVzaW5nIHRoZSByZXR1cm5lZCBzdHJpbmcgZGlmZmVyZW50bHk/IFRoYXQmIzM5O3Mgd2hhdCBJIGhhdmUgdG8gY2hlY2sgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX2JlYXJlcl9nZXRfbmFtZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9iZWFyZXIuYz0xODE9c3RydWN0IHRpcGNfYmVhcmVyICp0aXBjX2JlYXJlcl9maW5kKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSlcbi0tXG5uZXQvdGlwYy9iZWFyZXIuYy0xOTQtXG5uZXQvdGlwYy9iZWFyZXIuYzoxOTU6LyogICAgIHRpcGNfYmVhcmVyX2dldF9uYW1lIC0gZ2V0IHRoZSBiZWFyZXIgbmFtZSBmcm9tIGl0cyBpZC5cbm5ldC90aXBjL2JlYXJlci5jLTE5Ni0gKiAgICAgQG5ldDogbmV0d29yayBuYW1lc3BhY2Vcbi0tXG5uZXQvdGlwYy9iZWFyZXIuYy0xOTktICovXG5uZXQvdGlwYy9iZWFyZXIuYzoyMDA6aW50IHRpcGNfYmVhcmVyX2dldF9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqbmFtZSwgdTMyIGJlYXJlcl9pZClcbm5ldC90aXBjL2JlYXJlci5jLTIwMS17XG4tLVxubmV0L3RpcGMvYmVhcmVyLmg9MjI4PXN0cnVjdCB0aXBjX2JlYXJlciAqdGlwY19iZWFyZXJfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xubmV0L3RpcGMvYmVhcmVyLmg6MjI5OmludCB0aXBjX2JlYXJlcl9nZXRfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUsIHUzMiBiZWFyZXJfaWQpO1xubmV0L3RpcGMvYmVhcmVyLmgtMjMwLXN0cnVjdCB0aXBjX21lZGlhICp0aXBjX21lZGlhX2ZpbmQoY29uc3QgY2hhciAqbmFtZSk7XG4tLVxubmV0L3RpcGMvbW9uaXRvci5jPTgyNz1pbnQgX190aXBjX25sX2FkZF9tb25pdG9yKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbmxfbXNnICptc2csXG4tLVxubmV0L3RpcGMvbW9uaXRvci5jLTgzNS1cbm5ldC90aXBjL21vbml0b3IuYzo4MzY6XHRyZXQgPSB0aXBjX2JlYXJlcl9nZXRfbmFtZShuZXQsIGJlYXJlcl9uYW1lLCBiZWFyZXJfaWQpO1xubmV0L3RpcGMvbW9uaXRvci5jLTgzNy1cdGlmIChyZXQgfHwgIW1vbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5OTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU2VlbWluZ2x5IFNpbXBsZSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXYWl0LCB3aHkgd2FzIGBzdHJjcHlgIGNoYW5nZWQgdG8gYHN0cnNjcHlgIGhlcmU/JiMzNDsgVGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgd2l0aGluIGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAsIGNhbGxlZCBvbmx5IGJ5IGBfX3RpcGNfbmxfYWRkX21vbml0b3JgLiBUaGF0IGZ1bmN0aW9uIHVzZXMgYG5sYV9wdXRfc3RyaW5nYCwgd2hpY2ggb25seSBjb3BpZXMgdGhlIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGxlbmd0aCwgc28gdGhlcmUmIzM5O3Mgbm8gaW1tZWRpYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgaXNzdWUgaW4gdGhlIGNvcHkgdG8gbmV0bGluay4KCkJ1dCAqd2h5KiB0aGUgYHN0cmNweWAgdG8gYHN0cnNjcHlgIGNoYW5nZT8gTXkgZ3V0IHNheXMgYnVmZmVyIG92ZXJmbG93IHByZXZlbnRpb24sIGNsYXNzaWMuIGBzdHJjcHlgIGlzIGRhbmdlcm91czsgaWYgYGItJmd0O25hbWVgIGlzbiYjMzk7dCBudWxsLXRlcm1pbmF0ZWQgb3IgaXMgbG9uZ2VyIHRoYW4gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgeW91JiMzOTt2ZSBnb3QgYSBwcm9ibGVtLiBMZXQmIzM5O3Mgc2VlLi4uIGBiLSZndDtuYW1lYCBpcyBhbiBhcnJheSBvZiBgVElQQ19NQVhfQkVBUkVSX05BTUVgIHNpemUsIGFuZCB0aGUgZGVzdGluYXRpb24gYGJlYXJlcl9uYW1lYCBpcyBhbHNvIGBUSVBDX01BWF9CRUFSRVJfTkFNRWAuICBBIG5vbi1udWxsLXRlcm1pbmF0ZWQgYGItJmd0O25hbWVgIHdvdWxkIGNhdXNlIGBzdHJjcHlgIHRvIHJlYWQgYW5kIHdyaXRlIG91dCBvZiBib3VuZHMuIEJvb20sIG91dC1vZi1ib3VuZHMgcmVhZC93cml0ZS4gS0FTQU4gd291bGQgZGVmaW5pdGVseSBjYXRjaCB0aGF0ISBgYmVhcmVyX25hbWVgIGlzIG9uIHRoZSBzdGFjaywgd2hpY2ggS0FTQU4gaGFuZGxlcywgYW5kIGBiLSZndDtuYW1lYCBpcyBpbiBhIGhlYXAtYWxsb2NhdGVkIHN0cnVjdCwgYWxzbyBoYW5kbGVkIGJ5IEtBU0FOLgoKQnV0IHdhaXQgYSBtaW51dGUsIGlzIGBiLSZndDtuYW1lYCAqZ3VhcmFudGVlZCogdG8gYmUgbnVsbC10ZXJtaW5hdGVkPyAgQWgsIHllcyEgV2hlbiBgYmAgaXMgYWxsb2NhdGVkLCBpdCYjMzk7cyB6ZXJvZWQsIGFuZCB0aGF0IGBzdHJzY3B5YCBjYWxsIGVuc3VyZXMgbnVsbCB0ZXJtaW5hdGlvbi4gU28sIHVubGVzcyBpdCYjMzk7cyBsYXRlciBjb3JydXB0ZWQsIGBiLSZndDtuYW1lYCAqaXMqIG51bGwtdGVybWluYXRlZC4gU28gYHN0cmNweWAgaXMgc2FmZSEgV2h5IHRoZSBwYXRjaCB0aGVuPwoKTWF5YmUgYSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiByaXNrPyBNYXliZSB0aGlzIGlzIGp1c3QgYSBnZW5lcmFsIGNsZWFudXAgZWZmb3J0IHRvIHN0YW5kYXJkaXplIGBzdHJzY3B5YCBhY3Jvc3MgdGhlIGtlcm5lbCwgd2hpY2ggSSBoYXZlIHNlZW4gaGFwcGVuLiBJJiMzOTtkIGxvdmUgdG8gc2VlIHRoZSBjb21taXQgbWVzc2FnZS4uLiBidXQsIEkgZG9uJiMzOTt0IGhhdmUgaXQuCgpPa2F5LCBsZXQgbWUganVzdCBjaGVjayB0aGUgcGF0Y2ggYWdhaW46CgpgYGBjCi0Jc3RyY3B5KG5hbWUsIGItJmd0O25hbWUpOwomIzQzOwlzdHJzY3B5KG5hbWUsIGItJmd0O25hbWUsIFRJUENfTUFYX0JFQVJFUl9OQU1FKTsKYGBgCgpZZXAsIHN0YW5kYXJkIGBzdHJjcHlgIHRvIGBzdHJzY3B5YCByZXBsYWNlbWVudCwgYSBiZWx0LWFuZC1zdXNwZW5kZXJzIGtpbmQgb2YgbW92ZSB0byBwcmV2ZW50IHBvdGVudGlhbCBvdmVyZmxvd3MsIHdoaWNoIGlzbiYjMzk7dCB0aGUgcm9vdCBvZiB0aGUgaXNzdWUuCgpEb2VzIHRoaXMgZml4IGFuICp1bmluaXRpYWxpemVkKiBtZW1vcnkgdXNlLCB0aGVuPyAgTm8uIElmIGFueXRoaW5nLCBgc3Ryc2NweWAgbGVhdmVzIHRoZSByZXN0IG9mIHRoZSBidWZmZXIgdW5pbml0aWFsaXplZCwganVzdCBsaWtlIGBzdHJjcHlgLgoKTm93LCBpZiBgYi0mZ3Q7bmFtZWAgd2FzICpub3QqIG51bGwtdGVybWluYXRlZCwgYHN0cmNweWAgd291bGQgcmVhZCBiZXlvbmQgYGItJmd0O25hbWVgIChPT0IgcmVhZCkgYW5kIHdyaXRlIHBhc3QgYG5hbWVgIChPT0Igd3JpdGUpLiBLQVNBTiBjYXRjaGVzIGJvdGguCgpJcyB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhaz8gSWYgYGItJmd0O25hbWVgIHdhc24mIzM5O3QgbnVsbC10ZXJtaW5hdGVkLCBgc3RyY3B5YCB3b3VsZCBjb3B5IHdoYXRldmVyIGdhcmJhZ2UgZGF0YSBpcyBhZnRlciBgYi0mZ3Q7bmFtZWAgdW50aWwgaXQgZmluZHMgYSBudWxsIGJ5dGUsIHBvdGVudGlhbGx5IGxlYWtpbmcgbWVtb3J5IGlmIGNvcGllZCB0byB1c2Vyc3BhY2UuIEJ1dCBgbmxhX3B1dF9zdHJpbmdgIHdvdWxkIHJlYWQgdW50aWwgYSBudWxsIGJ5dGUgdG9vLCBzbyBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgd2FzaC4gSG93ZXZlciwgaXMgYGItJmd0O25hbWVgIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZT8gSSBuZWVkIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL2JlYXJlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTc6XHRzdHJ1Y3QgdGlwY19iZWFyZXIge1xuIDE1ODpcdFx0dm9pZCBfX3JjdSAqbWVkaWFfcHRyO1x0XHRcdC8qIGluaXRpYWxpemVkIGJ5IG1lZGlhICovXG4gMTU5Olx0XHR1MzIgbXR1O1x0XHRcdFx0LyogaW5pdGlhbGl6ZWQgYnkgbWVkaWEgKi9cbiAxNjA6XHRcdHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgYWRkcjtcdFx0LyogaW5pdGlhbGl6ZWQgYnkgbWVkaWEgKi9cbiAxNjE6XHRcdGNoYXIgbmFtZVtUSVBDX01BWF9CRUFSRVJfTkFNRV07XG4gMTYyOlx0XHRzdHJ1Y3QgdGlwY19tZWRpYSAqbWVkaWE7XG4gMTYzOlx0XHRzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyIGJjYXN0X2FkZHI7XG4gMTY0Olx0XHRzdHJ1Y3QgcGFja2V0X3R5cGUgcHQ7XG4gMTY1Olx0XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIDE2NjpcdFx0dTMyIHByaW9yaXR5O1xuIDE2NzpcdFx0dTMyIG1pbl93aW47XG4gMTY4Olx0XHR1MzIgbWF4X3dpbjtcbiAxNjk6XHRcdHUzMiB0b2xlcmFuY2U7XG4gMTcwOlx0XHR1MzIgZG9tYWluO1xuIDE3MTpcdFx0dTMyIGlkZW50aXR5O1xuIDE3MjpcdFx0c3RydWN0IHRpcGNfZGlzY292ZXJlciAqZGlzYztcbiAxNzM6XHRcdGNoYXIgbmV0X3BsYW5lO1xuIDE3NDpcdFx0dTE2IGVuY2FwX2hsZW47XG4gMTc1Olx0XHR1bnNpZ25lZCBsb25nIHVwO1xuIDE3NjpcdFx0cmVmY291bnRfdCByZWZjbnQ7XG4gMTc3Olx0fTtcbiAxNzg6XHRcbiAxNzk6XHRzdHJ1Y3QgdGlwY19iZWFyZXJfbmFtZXMge1xuIDE4MDpcdFx0Y2hhciBtZWRpYV9uYW1lW1RJUENfTUFYX01FRElBX05BTUVdO1xuIDE4MTpcdFx0Y2hhciBpZl9uYW1lW1RJUENfTUFYX0lGX05BTUVdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg4NgoJCQkJCQkJb3V0cHV0OiAyMzAKCQkJCQkJCXRob3VnaHRzOiA3NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS0FTQU4mIzM5O3MgR290IFRoaXM6IE5vIEtNU0FOIE5lZWRlZCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IHRoZSBgbmFtZWAgZmllbGQgaXMgaW4gdGhlIG1pZGRsZSBvZiB0aGlzIGBzdHJ1Y3RgLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgdGhhdCBpZiBgYi0mZ3Q7bmFtZWAgaXNuJiMzOTt0IG51bGwtdGVybWluYXRlZCwgYHN0cmNweWAgY291bGQgcmVhZCBwYXN0IHRoZSBlbmQgb2YgaXQsIHBvdGVudGlhbGx5IGludG8gYWRqYWNlbnQgbWVtb3J5IGxpa2UgYG1lZGlhYCBvciBgYmNhc3RfYWRkcmAsIGxlYWRpbmcgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9uIGBiLSZndDtuYW1lYC4gV2hpbGUgdGhhdCBPT0IgcmVhZCBtaWdodCBub3QgaW1tZWRpYXRlbHkgY2F1c2UgYW4gaXNzdWUgd2l0aGluIHRoZSBgdGlwY19iZWFyZXJgIHN0cnVjdCBpdHNlbGYgdW5sZXNzIGl0IGdvZXMgcGFzdCB0aGUgZW5kLCBpdCAqZGVmaW5pdGVseSogYmVjb21lcyBhIHdyaXRlIHByb2JsZW0gbGF0ZXIgb24gaW4gYF9fdGlwY19ubF9hZGRfbW9uaXRvcmAgd2hlbiB3ZSB1c2UgYGJlYXJlcl9uYW1lYCwgd2hpY2ggaXMgYSBgVElQQ19NQVhfQkVBUkVSX05BTUVgLXNpemVkIGFycmF5IG9uIHRoZSBzdGFjay4gRXNzZW50aWFsbHksIGBzdHJjcHlgIGNvdWxkIG92ZXJ3cml0ZSBtZW1vcnkgb24gdGhlIHN0YWNrIGJleW9uZCBgYmVhcmVyX25hbWVgIGlmIGBiLSZndDtuYW1lYCBpcyBsYXJnZXIgdGhhbiB0aGUgZml4ZWQtc2l6ZSBgYmVhcmVyX25hbWVgIGJ1ZmZlci4gVGhpcyBpcyBhIGNsYXNzaWMgc3RhY2sgYnVmZmVyIG92ZXJmbG93LgoKRm9ydHVuYXRlbHksIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGlzIGRlc2lnbmVkIHRvIGNhdGNoIHRoZXNlIHN0YWNrIGJ1ZmZlciBvdmVyZmxvd3MgcmVsaWFibHkuIFNvLCB0aGUgcG90ZW50aWFsIHdyaXRlIGlzc3VlIGlzIGFkZHJlc3NlZCBhbmQgY2FuIGJlIGNhdWdodC4KCk5vdywgYSBjcnVjaWFsIHBvaW50OiBpcyB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaGVyZT8gTm8sIGJlY2F1c2UgYGJlYXJlcl9uYW1lYCBpcyB1bmluaXRpYWxpemVkIGluaXRpYWxseSwgYnV0IHRoZSB1c2Ugb2YgYHN0cmNweWAgKG9yIHRoZSBmaXhlZC1pbi10aGUtcGF0Y2ggYHN0cnNjcHlgKSBpbml0aWFsaXplcyBpdCBkdXJpbmcgdGhlIGNvcHkuIEFmdGVyIHRoYXQsIGBubGFfcHV0X3N0cmluZ2Agb25seSByZWFkcyB0aGUgKmluaXRpYWxpemVkKiBzdHJpbmcgcGFydCB1cCB0byB0aGUgbnVsbCB0ZXJtaW5hdG9yLiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV2ZXIgcmVhZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGlzIHBhdGNoIGlzIHNpbXBseSBmaXhpbmcgYSBwb3RlbnRpYWwgc3RhY2sgYnVmZmVyIG92ZXJmbG93IGNhdXNlZCBieSBgc3RyY3B5YCBiZWluZyB1c2VkLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgc3Ryc2NweWAgY2FuJiMzOTt0IGNyZWF0ZSBhbiBpc3N1ZSBpbiB0aGUgc2FtZSB3YXksIGNhdXNpbmcgYGJlYXJlcl9uYW1lYCB0byBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgaW4gYSB3YXkgdGhhdCBpcyByZWFkIGJ5IGBubGFfcHV0X3N0cmluZ2AuIElmIGBiLSZndDtuYW1lYCBpcyBlbXB0eSwgaS5lLiwganVzdCBhIG51bGwgYnl0ZSwgYHN0cnNjcHlgIHdpbGwgd3JpdGUgYSBudWxsIGJ5dGUgdG8gYGJlYXJlcl9uYW1lWzBdYC4gYG5sYV9wdXRfc3RyaW5nYCB0aGVuIHNlZXMgYSBzdHJpbmcgb2YgbGVuZ3RoIHplcm8gYW5kIGNvcGllcyBhIHNpbmdsZSBudWxsIGJ5dGUgdG8gdGhlIG91dHB1dC4gSXQgZG9lc24mIzM5O3QgbG9vayBiZXlvbmQgdGhhdC4gU28gbm8gdW5pbml0aWFsaXplZCBieXRlcyBhcmUgcmVhZC4KCldoYXQgaGFwcGVucyBpZiBgYi0mZ3Q7bmFtZWAgaXNuJiMzOTt0IG51bGwtdGVybWluYXRlZCwgYnV0IGBzdHJzY3B5YCAqaXMqIHVzZWQ/IFdlbGwsIGBzdHJzY3B5KG5hbWUsIGItJmd0O25hbWUsIFRJUENfTUFYX0JFQVJFUl9OQU1FKWAgd2lsbCBjb3B5IHVwIHRvIGBUSVBDX01BWF9CRUFSRVJfTkFNRSAtIDFgIGJ5dGVzIGZyb20gYGItJmd0O25hbWVgIGFuZCB0aGVuICpleHBsaWNpdGx5KiBudWxsLXRlcm1pbmF0ZSB0aGUgc3RyaW5nLCBtZWFuaW5nIHRoYXQgYG5sYV9wdXRfc3RyaW5nYCByZWFkcyBhIHN0cmluZyBvZiBhdCBtb3N0IGBUSVBDX01BWF9CRUFSRVJfTkFNRWAgY2hhcmFjdGVycy4gRXZlcnkgYnl0ZSBoYXMgYmVlbiBpbml0aWFsaXplZCBieSBgc3Ryc2NweWAuCgpBbmQgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY2FzZSB3aGVyZSBgYi0mZ3Q7bmFtZWAgaXRzZWxmIGhhcyB1bmluaXRpYWxpemVkIGJ5dGVzLiAgYGJgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggKnplcm9lcyogdGhlIG1lbW9yeSBpdCBhbGxvY2F0ZXMuIEFmdGVyIHRoYXQsIHdlIGBzdHJzY3B5KGItJmd0O25hbWUsIG5hbWUpYCBjb3BpZXMgdGhlIHN0cmluZyBmcm9tIGBuYW1lYCB0byBgYi0mZ3Q7bmFtZWAuIFRodXMsIGBiLSZndDtuYW1lYCBjYW4gbmV2ZXIgY29udGFpbiB1bmluaXRpYWxpemVkIGJ5dGVzLgoKU28sIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBUaGlzIHBhdGNoIHJlcGxhY2VzIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHRvIGZpeCBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSAoYm90aCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgZnJvbSBgYi0mZ3Q7bmFtZWAsIGFuZCB3cml0ZSB0byBgYmVhcmVyX25hbWVgKS4gS0FTQU4sIGFzIGV4cGVjdGVkLCByZWxpYWJseSBkZXRlY3RzIHRoZXNlIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHdyaXRlcy4gTW9yZSBpbXBvcnRhbnRseSwgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBtYWtpbmcgaXRzIHdheSBpbnRvIHVzZXJzcGFjZS4gVGhpcyBpcyBiZWNhdXNlIHRoZSBzdHJpbmcgaXMgYWx3YXlzIHByb3Blcmx5IG51bGwtdGVybWluYXRlZCwgYW5kIGBubGFfcHV0X3N0cmluZ2AgY29ycmVjdGx5IGNvcGllcyBvbmx5IHVwIHRvIHRoYXQgdGVybWluYXRvci4gVGhlcmVmb3JlLCB3ZSBkb24mIzM5O3QgbmVlZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gZm9yIHRoaXM7IEtBU0FOIGNvdmVycyB0aGUgcmVsZXZhbnQgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBgc3RyY3B5YCB3aXRoIGBzdHJzY3B5YCB0byBwcmV2ZW50IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGZyb20gYGItXHUwMDNlbmFtZWAgYW5kIG91dC1vZi1ib3VuZHMgd3JpdGVzIHRvIHRoZSBzdGFjay1hbGxvY2F0ZWQgYGJlYXJlcl9uYW1lYCBidWZmZXIgaW4gYF9fdGlwY19ubF9hZGRfbW9uaXRvcmAuIE91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIChib3RoIGhlYXAgYW5kIHN0YWNrKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgaGVyZTogdGhlIHNvdXJjZSBidWZmZXIgYGItXHUwMDNlbmFtZWAgaXMgcGFydCBvZiBhIHplcm8tYWxsb2NhdGVkIHN0cnVjdHVyZSwgYW5kIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgYGJlYXJlcl9uYW1lYCBpcyBvbmx5IHJlYWQgYnkgYG5sYV9wdXRfc3RyaW5nYCwgd2hpY2ggc3RyaWN0bHkgcmVhZHMgdXAgdG8gdGhlIG51bGwgdGVybWluYXRvci4gU2luY2UgYHN0cnNjcHlgIGd1YXJhbnRlZXMgbnVsbC10ZXJtaW5hdGlvbiBhbmQgYG5sYV9wdXRfc3RyaW5nYCBkb2VzIG5vdCByZWFkIHBhc3QgaXQsIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGlzIGV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZS4gVGh1cywgc3RhbmRhcmQgS0FTQU4gaXMgZnVsbHkgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY29kZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHRvIHByZXZlbnQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZnJvbSBgYi1cdTAwM2VuYW1lYCBhbmQgb3V0LW9mLWJvdW5kcyB3cml0ZXMgdG8gdGhlIHN0YWNrLWFsbG9jYXRlZCBgYmVhcmVyX25hbWVgIGJ1ZmZlciBpbiBgX190aXBjX25sX2FkZF9tb25pdG9yYC4gT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGJvdGggaGVhcCBhbmQgc3RhY2spIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCBoZXJlOiB0aGUgc291cmNlIGJ1ZmZlciBgYi1cdTAwM2VuYW1lYCBpcyBwYXJ0IG9mIGEgemVyby1hbGxvY2F0ZWQgc3RydWN0dXJlLCBhbmQgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBgYmVhcmVyX25hbWVgIGlzIG9ubHkgcmVhZCBieSBgbmxhX3B1dF9zdHJpbmdgLCB3aGljaCBzdHJpY3RseSByZWFkcyB1cCB0byB0aGUgbnVsbCB0ZXJtaW5hdG9yLiBTaW5jZSBgc3Ryc2NweWAgZ3VhcmFudGVlcyBudWxsLXRlcm1pbmF0aW9uIGFuZCBgbmxhX3B1dF9zdHJpbmdgIGRvZXMgbm90IHJlYWQgcGFzdCBpdCwgbm8gdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgaXMgZXZlciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaHVzLCBzdGFuZGFyZCBLQVNBTiBpcyBmdWxseSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNTowOToxOC4xOTQwNjE5MjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA2MTMzNTExNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfYmVhcmVyX2dldF9uYW1lXCIsXG4gICAgXCJfX3RpcGNfbmxfYWRkX21vbml0b3JcIixcbiAgICBcInRpcGNfbmxfbm9kZV9kdW1wX21vbml0b3JcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHRvIHByZXZlbnQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZnJvbSBgYi1cXHUwMDNlbmFtZWAgYW5kIG91dC1vZi1ib3VuZHMgd3JpdGVzIHRvIHRoZSBzdGFjay1hbGxvY2F0ZWQgYGJlYXJlcl9uYW1lYCBidWZmZXIgaW4gYF9fdGlwY19ubF9hZGRfbW9uaXRvcmAuIE91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIChib3RoIGhlYXAgYW5kIHN0YWNrKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgaGVyZTogdGhlIHNvdXJjZSBidWZmZXIgYGItXFx1MDAzZW5hbWVgIGlzIHBhcnQgb2YgYSB6ZXJvLWFsbG9jYXRlZCBzdHJ1Y3R1cmUsIGFuZCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGBiZWFyZXJfbmFtZWAgaXMgb25seSByZWFkIGJ5IGBubGFfcHV0X3N0cmluZ2AsIHdoaWNoIHN0cmljdGx5IHJlYWRzIHVwIHRvIHRoZSBudWxsIHRlcm1pbmF0b3IuIFNpbmNlIGBzdHJzY3B5YCBndWFyYW50ZWVzIG51bGwtdGVybWluYXRpb24gYW5kIGBubGFfcHV0X3N0cmluZ2AgZG9lcyBub3QgcmVhZCBwYXN0IGl0LCBubyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBpcyBldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRodXMsIHN0YW5kYXJkIEtBU0FOIGlzIGZ1bGx5IHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNvZGUsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgc3RyY3B5IHdpdGggc3Ryc2NweSBpbiB0aXBjX2JlYXJlcl9nZXRfbmFtZSB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVElQQyBuZXRsaW5rIEFQSSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCB0cnVuY2F0aW9ucyBvY2N1ci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MDk6MTguMTk0MDY4NTU0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc2MDcyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MWY5ZTg4MGI5MGMyOGNmOGJjOWE2NTAzYzdiMDc5YjE2NjdlNThhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDE1OjA5OjE3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2JlYXJlci5jIGIvbmV0L3RpcGMvYmVhcmVyLmNcXG5pbmRleCAwNWRjZDJmOWU4ODdhLi45NTFiYjQ3NGM3ZDQ0IDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL2JlYXJlci5jXFxuKysrIGIvbmV0L3RpcGMvYmVhcmVyLmNcXG5AQCAtMjA5LDcgKzIwOSw3IEBAIGludCB0aXBjX2JlYXJlcl9nZXRfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUsIHUzMiBiZWFyZXJfaWQpXFxuIFxcdGlmICghYilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRzdHJjcHkobmFtZSwgYi1cXHUwMDNlbmFtZSk7XFxuK1xcdHN0cnNjcHkobmFtZSwgYi1cXHUwMDNlbmFtZSwgVElQQ19NQVhfQkVBUkVSX05BTUUpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MDk6MTguNjMyNDA4NzI5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDc0OTQ3Nzc3NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfYmVhcmVyX2dldF9uYW1lXCIsXG4gICAgXCJfX3RpcGNfbmxfYWRkX21vbml0b3JcIixcbiAgICBcInRpcGNfbmxfbm9kZV9kdW1wX21vbml0b3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBzdHJjcHkgd2l0aCBzdHJzY3B5IGluIHRpcGNfYmVhcmVyX2dldF9uYW1lIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUSVBDIG5ldGxpbmsgQVBJIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHRydW5jYXRpb25zIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MWY5ZTg4MGI5MGMyOGNmOGJjOWE2NTAzYzdiMDc5YjE2NjdlNThhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTU6MDk6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iZWFyZXIuYyBiL25ldC90aXBjL2JlYXJlci5jXG5pbmRleCAwNWRjZDJmOWU4ODdhLi45NTFiYjQ3NGM3ZDQ0IDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvYmVhcmVyLmNcbisrKyBiL25ldC90aXBjL2JlYXJlci5jXG5AQCAtMjA5LDcgKzIwOSw3IEBAIGludCB0aXBjX2JlYXJlcl9nZXRfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUsIHUzMiBiZWFyZXJfaWQpXG4gXHRpZiAoIWIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0c3RyY3B5KG5hbWUsIGItXHUwMDNlbmFtZSk7XG4rXHRzdHJzY3B5KG5hbWUsIGItXHUwMDNlbmFtZSwgVElQQ19NQVhfQkVBUkVSX05BTUUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MDk6MTguNjMyNDEzOTE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwOTM0NzEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTZWN1cml0eSBQYXRjaDogc3RyY3B5IHRvIHN0cnNjcHkgaW4gdGlwY19iZWFyZXIuYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgdGhleSdyZSBzd2FwcGluZyBgc3RyY3B5YCBmb3IgYHN0cnNjcHlgIGluIGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAgd2l0aGluIGBuZXQvdGlwYy9iZWFyZXIuY2AuXCIgQ2xhc3NpYyBidWZmZXIgb3ZlcmZsb3cgbWl0aWdhdGlvbiwgcmlnaHQ/IEdvb2QgY2F0Y2gsIGdvb2QgcHJhY3RpY2UuIEJ1dCBpcyB0aGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gc3BlbmQgc2VyaW91cyBmdXp6aW5nIHRpbWUgb24/XG5cbkluaXRpYWxseSwgSSdtIHRoaW5raW5nLCBcIkl0J3MganVzdCBhIHN0cmFpZ2h0IHJlcGxhY2VtZW50LiBJdCdzIGZ1bmN0aW9uYWwsIGJ1dCBpdCBkb2Vzbid0IGludHJvZHVjZSAqbmV3KiBsb2dpYywgcGVyIHNlLlwiIEhvd2V2ZXIsIEkgbmVlZCB0byBhZGp1c3QgdGhpcyB0aG91Z2h0LiAqV2FpdCouIFJlcGxhY2luZyBgc3RyY3B5YCB3aXRoIGBzdHJzY3B5YCAqZG9lcyogY2hhbmdlIHRoZSBiZWhhdmlvciwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIHNvdXJjZSBzdHJpbmcgKGBiLVx1MDAzZW5hbWVgKSBpcyBsb25nZXIgdGhhbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIChgbmFtZWApLiBJdCdzIHRydW5jYXRpbmcsIHJhdGhlciB0aGFuIG92ZXJmbG93aW5nLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGJlaGF2aW9yYWwgc2hpZnQuIFNvIHRoZXJlJ3MgYSBwb3NzaWJpbGl0eSBvZiAqc3VidGxlKiBpc3N1ZXMgZGVwZW5kaW5nIG9uIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdHJ1bmNhdGVkIG5hbWVzLlxuXG5BbHJpZ2h0LCBsZXQncyBkaWcgYSBiaXQgZGVlcGVyLiBGaXJzdCwgSSBoYXZlIHRvIGVuc3VyZSB0aGF0IGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiBTZWNvbmQsIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIGNvZGUgY2hhbmdlcyBJIG1pZ2h0IGJlIG1pc3NpbmcuIE5vcGUsIHRoZSBwYXRjaCBvbmx5IHRvdWNoZXMgYHRpcGNfYmVhcmVyX2dldF9uYW1lYC4gTm93LCB0byBiZSByaWdvcm91cywgSSBoYXZlIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYHRpcGNfYmVhcmVyX2dldF9uYW1lYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgdGhlIGFzc3VtcHRpb25zIG1hZGUgYnkgdGhvc2UgY2FsbGVycywgYW5kIHdoZXRoZXIgdGhleSBhY2NvdW50IGZvciBvciBjb3VsZCBiZSBuZWdhdGl2ZWx5IGltcGFjdGVkIGJ5IHRoZSB0cnVuY2F0aW9uIG9mIGEgcG90ZW50aWFsbHkgbG9uZyBzdHJpbmcuIERlcGVuZGluZyBvbiB0aGUgY2FsbGVycywgdGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNTowOToyNC4zNDE3NjQxNDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxNDcxNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19iZWFyZXJfZ2V0X25hbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2JlYXJlci5jPTE4MT1zdHJ1Y3QgdGlwY19iZWFyZXIgKnRpcGNfYmVhcmVyX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmMtMTk0LVxcbm5ldC90aXBjL2JlYXJlci5jOjE5NTovKiAgICAgdGlwY19iZWFyZXJfZ2V0X25hbWUgLSBnZXQgdGhlIGJlYXJlciBuYW1lIGZyb20gaXRzIGlkLlxcbm5ldC90aXBjL2JlYXJlci5jLTE5Ni0gKiAgICAgQG5ldDogbmV0d29yayBuYW1lc3BhY2VcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5jLTE5OS0gKi9cXG5uZXQvdGlwYy9iZWFyZXIuYzoyMDA6aW50IHRpcGNfYmVhcmVyX2dldF9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqbmFtZSwgdTMyIGJlYXJlcl9pZClcXG5uZXQvdGlwYy9iZWFyZXIuYy0yMDEte1xcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmg9MjI4PXN0cnVjdCB0aXBjX2JlYXJlciAqdGlwY19iZWFyZXJfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbm5ldC90aXBjL2JlYXJlci5oOjIyOTppbnQgdGlwY19iZWFyZXJfZ2V0X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICpuYW1lLCB1MzIgYmVhcmVyX2lkKTtcXG5uZXQvdGlwYy9iZWFyZXIuaC0yMzAtc3RydWN0IHRpcGNfbWVkaWEgKnRpcGNfbWVkaWFfZmluZChjb25zdCBjaGFyICpuYW1lKTtcXG4tLVxcbm5ldC90aXBjL21vbml0b3IuYz04Mjc9aW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxcbi0tXFxubmV0L3RpcGMvbW9uaXRvci5jLTgzNS1cXG5uZXQvdGlwYy9tb25pdG9yLmM6ODM2OlxcdHJldCA9IHRpcGNfYmVhcmVyX2dldF9uYW1lKG5ldCwgYmVhcmVyX25hbWUsIGJlYXJlcl9pZCk7XFxubmV0L3RpcGMvbW9uaXRvci5jLTgzNy1cXHRpZiAocmV0IHx8ICFtb24pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjA5OjI0LjM5MDkyNzcyOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MjIwNDkwNzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipUcmFjaW5nIHRoZSBTb3VyY2U6IGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgdGlwY19iZWFyZXJfZ2V0X25hbWVgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBfX3RpcGNfbmxfYWRkX21vbml0b3JgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBsaWtlbHkgc2lnbmlmaWNhbnQuIFNpbmNlIEknbSBvbiB0aGlzLCBsZXQncyBqdXN0IHRyYWNlIHRoYXQgYmFjay4gVGltZSB0byBkaXZlIGludG8gdGhlIGBfX3RpcGNfbmxfYWRkX21vbml0b3JgIGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCdzIHRyaWdnZXJpbmcgdGhpcyBzcGVjaWZpYyBjYWxsLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoYXQgY2FsbCBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBmaWd1cmluZyBvdXQgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdOKAmXMgcmV0cmlldmluZyB0aGUgYmVhcmVyIG5hbWUgaGVyZS4gSXMgdGhpcyBmb3IgZmlsdGVyaW5nLCBsb2dnaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGBfX2AgcHJlZml4IHN1Z2dlc3RzIGl0J3MgbGlrZWx5IGFuIGludGVybmFsIGZ1bmN0aW9uLCBzbyBpdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBkaWcgaW50byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB3aGF0IGRhdGEgaXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk2OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjA5OjQxLjYxMTQyMDk3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwODMwODc3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3RpcGNfbmxfYWRkX21vbml0b3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL21vbml0b3IuYz03Mzc9aW50IHRpcGNfbmxfbW9uaXRvcl9nZXRfdGhyZXNob2xkKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC90aXBjL21vbml0b3IuYy03NDMtXFxubmV0L3RpcGMvbW9uaXRvci5jOjc0NDpzdGF0aWMgaW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcl9wZWVyKHN0cnVjdCB0aXBjX3BlZXIgKnBlZXIsXFxubmV0L3RpcGMvbW9uaXRvci5jLTc0NS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZylcXG4tLVxcbm5ldC90aXBjL21vbml0b3IuYz03OTg9aW50IHRpcGNfbmxfYWRkX21vbml0b3JfcGVlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxcbi0tXFxubmV0L3RpcGMvbW9uaXRvci5jLTgxNS1cXHRcXHR9XFxubmV0L3RpcGMvbW9uaXRvci5jOjgxNjpcXHRcXHRpZiAoX190aXBjX25sX2FkZF9tb25pdG9yX3BlZXIocGVlciwgbXNnKSkge1xcbm5ldC90aXBjL21vbml0b3IuYy04MTctXFx0XFx0XFx0KnByZXZfbm9kZSA9IHBlZXItXFx1MDAzZWFkZHI7XFxuLS1cXG5uZXQvdGlwYy9tb25pdG9yLmMtODI2LVxcbm5ldC90aXBjL21vbml0b3IuYzo4Mjc6aW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxcbm5ldC90aXBjL21vbml0b3IuYy04MjgtXFx0XFx0XFx0ICB1MzIgYmVhcmVyX2lkKVxcbi0tXFxubmV0L3RpcGMvbW9uaXRvci5oPTc1PWludCB0aXBjX25sX21vbml0b3JfZ2V0X3RocmVzaG9sZChzdHJ1Y3QgbmV0ICpuZXQpO1xcbm5ldC90aXBjL21vbml0b3IuaDo3NjppbnQgX190aXBjX25sX2FkZF9tb25pdG9yKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbmxfbXNnICptc2csXFxubmV0L3RpcGMvbW9uaXRvci5oLTc3LVxcdFxcdFxcdCAgdTMyIGJlYXJlcl9pZCk7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9Mjc2MT1pbnQgdGlwY19ubF9ub2RlX3NldF9tb25pdG9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMjc4OC1cXG5uZXQvdGlwYy9ub2RlLmM6Mjc4OTpzdGF0aWMgaW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcl9wcm9wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbmxfbXNnICptc2cpXFxubmV0L3RpcGMvbm9kZS5jLTI3OTAte1xcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTI4MjI9aW50IHRpcGNfbmxfbm9kZV9nZXRfbW9uaXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTI4MzMtXFxubmV0L3RpcGMvbm9kZS5jOjI4MzQ6XFx0ZXJyID0gX190aXBjX25sX2FkZF9tb25pdG9yX3Byb3AobmV0LCBcXHUwMDI2bXNnKTtcXG5uZXQvdGlwYy9ub2RlLmMtMjgzNS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9Mjg0Mz1pbnQgdGlwY19ubF9ub2RlX2R1bXBfbW9uaXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMjg1OS1cXHRmb3IgKGJlYXJlcl9pZCA9IHByZXZfYmVhcmVyOyBiZWFyZXJfaWQgXFx1MDAzYyBNQVhfQkVBUkVSUzsgYmVhcmVyX2lkKyspIHtcXG5uZXQvdGlwYy9ub2RlLmM6Mjg2MDpcXHRcXHRlcnIgPSBfX3RpcGNfbmxfYWRkX21vbml0b3IobmV0LCBcXHUwMDI2bXNnLCBiZWFyZXJfaWQpO1xcbm5ldC90aXBjL25vZGUuYy0yODYxLVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjA5OjQyLjAxOTczMzg2N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2ODE4MzMzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0bGluayBEdW1wIEZ1bmN0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBjaGFuZ2Ugd2l0aGluIGB0aXBjX25sX25vZGVfZHVtcF9tb25pdG9yYC4gUmlnaHQsIGl0J3MgYSBuZXRsaW5rIGR1bXAgZnVuY3Rpb24sIHN0YW5kYXJkIHN0dWZmLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBpcyBzd2FwcGluZyBvdXQgYHN0cmNweWAgZm9yIGBzdHJzY3B5YC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRoaW5rIGFib3V0IGZ1enppbmcgdGhpcy4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgaW4gYSBuZXRsaW5rIEFQSSwgd2hpY2ggbWFrZXMgaXQgYSBwb3RlbnRpYWwgdGFyZ2V0LiBFdmVuIHRob3VnaCBpdCdzIFwianVzdFwiIHN0cmluZyBjb3B5aW5nLCB0aGF0IGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB0aGVyZWZvcmUgdnVsbmVyYWJsZSB0byB0aGluZ3MgbGlrZSBidWZmZXIgb3ZlcmZsb3dzIG9yIHVuZXhwZWN0ZWQgdHJ1bmNhdGlvbi5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIHRoaW5rLiBgc3Ryc2NweWAgaXMgbm93IGEgc3RhbmRhcmQgc3RyaW5nIGNvcHkgZnVuY3Rpb24uIEZ1enppbmcgKml0KiBkaXJlY3RseSBpc24ndCBsaWtlbHkgdG8gcmV2ZWFsIGFueXRoaW5nIG5ldywgcGVyIHNlLiBIb3dldmVyLCB0aGlzIGlzIHN0aWxsIHBhcnQgb2YgdGhlIFRJUEMgbmV0bGluayBBUEksIGFuZCBhbnkgY2hhbmdlIHRvIHRoZSBBUEkgc3VyZmFjZSBpcyBmYWlyIGdhbWUgZm9yIHRob3JvdWdoIGZ1enppbmcuXG5cbkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnLiBJIG5lZWQgdG8gbWFrZSBzdXJlIFRJUEMgaXMgZXZlbiBlbmFibGVkIGluIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA0MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNTowOTo1MC43MDE1Njk5NTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxMzY1MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRJUENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL0tjb25maWctNS1cXG5uZXQvdGlwYy9LY29uZmlnOjY6bWVudWNvbmZpZyBUSVBDXFxubmV0L3RpcGMvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJUaGUgVElQQyBQcm90b2NvbFxcXCJcXG4tLVxcbm5ldC90aXBjL0tjb25maWctMjMtXFxubmV0L3RpcGMvS2NvbmZpZzoyNDpjb25maWcgVElQQ19NRURJQV9JQlxcbm5ldC90aXBjL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiSW5maW5pQmFuZCBtZWRpYSB0eXBlIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTI5LVxcdCAgSVAtb3Zlci1JbmZpbmlCYW5kIGRldmljZXMuXFxubmV0L3RpcGMvS2NvbmZpZzozMDpjb25maWcgVElQQ19NRURJQV9VRFBcXG5uZXQvdGlwYy9LY29uZmlnLTMxLVxcdGJvb2wgXFxcIklQL1VEUCBtZWRpYSB0eXBlIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTM3LVxcbm5ldC90aXBjL0tjb25maWc6Mzg6Y29uZmlnIFRJUENfQ1JZUFRPXFxubmV0L3RpcGMvS2NvbmZpZy0zOS1cXHRib29sIFxcXCJUSVBDIGVuY3J5cHRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90aXBjL0tjb25maWctNTItXFxubmV0L3RpcGMvS2NvbmZpZzo1Mzpjb25maWcgVElQQ19ESUFHXFxubmV0L3RpcGMvS2NvbmZpZy01NC1cXHR0cmlzdGF0ZSBcXFwiVElQQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNTowOTo1MC43NTE3MTExMjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDcyNTE0OTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBUSVBDIE5ldGxpbmsgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgVElQQ2AgY29uZmlndXJhdGlvbiBhbmQgdGhlc2Ugc3ltYm9sczogYHRpcGNfYmVhcmVyX2dldF9uYW1lYCwgYF9fdGlwY19ubF9hZGRfbW9uaXRvcmAsIGFuZCBgdGlwY19ubF9ub2RlX2R1bXBfbW9uaXRvcmAuIEhhbmcgb24sIGB0aXBjX25sX25vZGVfZHVtcF9tb25pdG9yYC4uLiB0aGF0J3MgYSBuZXRsaW5rIGR1bXAgZnVuY3Rpb24sIHJpZ2h0PyBNYWtlcyBpdCBhIGJpdCBtb3JlIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5Ob3csIHRoZSBjaGFuZ2UgSSdtIGV4YW1pbmluZyBpbnZvbHZlcyBgc3RyY3B5YCBiZWluZyByZXBsYWNlZCB3aXRoIGBzdHJzY3B5YC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gTGV0J3MgcmVmcmVzaCBvdXIgY3JpdGVyaWE6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLiBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLi4uIG9yIGNoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cIlxuXG5UaGlzIGBzdHJjcHlgIHRvIGBzdHJzY3B5YCBjaGFuZ2UgKmlzKiBmdW5jdGlvbmFsLiBJdCdzIGEgc2VjdXJpdHkgaGFyZGVuaW5nIG1lYXN1cmUgYWltZWQgYXQgcHJldmVudGluZyBidWZmZXIgb3ZlcmZsb3dzLiBCdXQgZG9lcyBpdCBtZWFuaW5nZnVsbHkgYWx0ZXIgdGhlIHByb2dyYW0ncyBleGVjdXRpb24gZmxvdyBpbiBhIHdheSB0aGF0IGZ1enppbmcgd291bGQgZXhwb3NlIG5ldywgY3JpdGljYWwgaXNzdWVzPyBJJ20gb24gdGhlIGZlbmNlLi4uIFNlY3VyaXR5IGhhcmRlbmluZyBpcyBkZWZpbml0ZWx5IGltcG9ydGFudC5cblxuSG93ZXZlciwgSSdtIHRoaW5raW5nLCBldmVuIGlmIGl0J3MgYSBzZWN1cml0eS1mb2N1c2VkIGNoYW5nZSwgZnV6emluZyBjb3VsZCBzdGlsbCBiZSB2YWx1YWJsZS4gUmVwbGFjaW5nIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIGludHJvZHVjZXMgYSBwb3RlbnRpYWwgZm9yIHVuZXhwZWN0ZWQgc3RyaW5nIHRydW5jYXRpb24uIFBsdXMsIGZ1enppbmcgbWlnaHQgdW5jb3ZlciByZWdyZXNzaW9ucyBvciBlZGdlIGNhc2VzLiBTbywgaXQncyBwcm9iYWJseSB3b3J0aCBpdCB0byB0YWtlIGEgY2xvc2VyIGxvb2suXG5cbkxldCBtZSBjaXJjbGUgYmFjayB0byBgdGlwY19iZWFyZXJfZ2V0X25hbWVgIHJlYWwgcXVpY2ssIGp1c3QgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzE1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEwOjAxLjQ3Njg2MzU4OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3RpcGMvYmVhcmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTk1OlxcdC8qICAgICB0aXBjX2JlYXJlcl9nZXRfbmFtZSAtIGdldCB0aGUgYmVhcmVyIG5hbWUgZnJvbSBpdHMgaWQuXFxuIDE5NjpcXHQgKiAgICAgQG5ldDogbmV0d29yayBuYW1lc3BhY2VcXG4gMTk3OlxcdCAqICAgICBAbmFtZTogYSBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2hlcmUgdGhlIG5hbWUgd2lsbCBiZSBzdG9yZWQuXFxuIDE5ODpcXHQgKiAgICAgQGJlYXJlcl9pZDogdGhlIGlkIHRvIGdldCB0aGUgbmFtZSBmcm9tLlxcbiAxOTk6XFx0ICovXFxuIDIwMDpcXHRpbnQgdGlwY19iZWFyZXJfZ2V0X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICpuYW1lLCB1MzIgYmVhcmVyX2lkKVxcbiAyMDE6XFx0e1xcbiAyMDI6XFx0XFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XFxuIDIwMzpcXHRcXHRzdHJ1Y3QgdGlwY19iZWFyZXIgKmI7XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdGlmIChiZWFyZXJfaWQgXFx1MDAzZT0gTUFYX0JFQVJFUlMpXFxuIDIwNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjA3OlxcdFxcbiAyMDg6XFx0XFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UodG4tXFx1MDAzZWJlYXJlcl9saXN0W2JlYXJlcl9pZF0pO1xcbiAyMDk6XFx0XFx0aWYgKCFiKVxcbiAyMTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdFxcdHN0cnNjcHkobmFtZSwgYi1cXHUwMDNlbmFtZSwgVElQQ19NQVhfQkVBUkVSX05BTUUpO1xcbiAyMTM6XFx0XFx0cmV0dXJuIDA7XFxuIDIxNDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEwOjAxLjQ3Njk5ODIyOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTcxNzgwMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIGEgS2VybmVsIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiwgYW5kIGhvbmVzdGx5LCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYXQgZmlyc3QgZ2xhbmNlLiBCdXQsIGNvbnNpZGVyaW5nIHRoaXMgaXMgYSBrZXJuZWwgY2hhbmdlLCBubyBtYXR0ZXIgaG93IHNpbXBsZSBpdCBzZWVtcywgaXQgKmFic29sdXRlbHkqIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2sgd2l0aCBmdXp6aW5nLiBNeSB0aG91Z2h0IHByb2Nlc3MgaXMgYWx3YXlzOiBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUga2VybmVsID0gcG90ZW50aWFsIGZvciBzdWJ0bGUgYnVncywgZXZlbiBpZiB0aGUgY29kZSBpdHNlbGYgaXMgYmFzaWMuXG5cblNvLCBsZXQncyBlc3RhYmxpc2ggYSBjbGVhciBmdXp6aW5nIHNldHVwLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjb25maWd1cmluZyB0aGUgZnV6emluZyBwcm9jZXNzIGNvcnJlY3RseS4gSSdsbCBuZWVkIHRvIGZvY3VzIG9uIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgYXJlYSBvZiB0aGUga2VybmVsLlxuXG5JJ2xsIGJlIGVuYWJsaW5nIHRoZSBgVElQQ2AgY29uZmlnLCBhcyB0aGlzIGZ1bmN0aW9uIGxpa2VseSBpbnRlcmFjdHMgd2l0aCB0aGF0IG1vZHVsZS4gVGhlbiwgdG8gbWFrZSBzdXJlIEknbSB0YXJnZXRpbmcgdGhlIGtleSBwYXJ0cywgSSdtIGdvaW5nIHRvIGZvY3VzIHRoZSBmdXp6aW5nIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAsIGBfX3RpcGNfbmxfYWRkX21vbml0b3JgLCBhbmQgYHRpcGNfbmxfbm9kZV9kdW1wX21vbml0b3JgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBtb3N0IGJhbmcgZm9yIG15IGJ1Y2sgYW5kIGNvdmVyIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBjaGFuZ2UuIExldCdzIHNlZSBpZiB3ZSBjYW4gZmluZCBhbnl0aGluZyBpbnRlcmVzdGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTY3NCwiT3V0cHV0VG9rZW5zIjoxMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEwOjA2LjA0ODc4NTM2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4Mzk4MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUSVBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGlwY19iZWFyZXJfZ2V0X25hbWVcIixcbiAgICBcIl9fdGlwY19ubF9hZGRfbW9uaXRvclwiLFxuICAgIFwidGlwY19ubF9ub2RlX2R1bXBfbW9uaXRvclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHN0cmNweSB3aXRoIHN0cnNjcHkgaW4gdGlwY19iZWFyZXJfZ2V0X25hbWUgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3dzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgbmV0bGluayBBUEkgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgdHJ1bmNhdGlvbnMgb2NjdXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfYmVhcmVyX2dldF9uYW1lXCIsXG4gICAgXCJfX3RpcGNfbmxfYWRkX21vbml0b3JcIixcbiAgICBcInRpcGNfbmxfbm9kZV9kdW1wX21vbml0b3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBzdHJjcHkgd2l0aCBzdHJzY3B5IGluIHRpcGNfYmVhcmVyX2dldF9uYW1lIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUSVBDIG5ldGxpbmsgQVBJIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHRydW5jYXRpb25zIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNToxMDowNi4xMjcxODk1OTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjY4MDIxNDM3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEwOjA2LjEyNzY5MDY1MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMDI2Nzk3MDkzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHRvIHByZXZlbnQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZnJvbSBgYi1cXHUwMDNlbmFtZWAgYW5kIG91dC1vZi1ib3VuZHMgd3JpdGVzIHRvIHRoZSBzdGFjay1hbGxvY2F0ZWQgYGJlYXJlcl9uYW1lYCBidWZmZXIgaW4gYF9fdGlwY19ubF9hZGRfbW9uaXRvcmAuIE91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIChib3RoIGhlYXAgYW5kIHN0YWNrKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgaGVyZTogdGhlIHNvdXJjZSBidWZmZXIgYGItXFx1MDAzZW5hbWVgIGlzIHBhcnQgb2YgYSB6ZXJvLWFsbG9jYXRlZCBzdHJ1Y3R1cmUsIGFuZCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGBiZWFyZXJfbmFtZWAgaXMgb25seSByZWFkIGJ5IGBubGFfcHV0X3N0cmluZ2AsIHdoaWNoIHN0cmljdGx5IHJlYWRzIHVwIHRvIHRoZSBudWxsIHRlcm1pbmF0b3IuIFNpbmNlIGBzdHJzY3B5YCBndWFyYW50ZWVzIG51bGwtdGVybWluYXRpb24gYW5kIGBubGFfcHV0X3N0cmluZ2AgZG9lcyBub3QgcmVhZCBwYXN0IGl0LCBubyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBpcyBldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRodXMsIHN0YW5kYXJkIEtBU0FOIGlzIGZ1bGx5IHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNvZGUsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODFmOWU4ODBiOTBjMjhjZjhiYzlhNjUwM2M3YjA3OWIxNjY3ZTU4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE1OjA5OjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvYmVhcmVyLmMgYi9uZXQvdGlwYy9iZWFyZXIuY1xuaW5kZXggMDVkY2QyZjllODg3YS4uOTUxYmI0NzRjN2Q0NCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2JlYXJlci5jXG4rKysgYi9uZXQvdGlwYy9iZWFyZXIuY1xuQEAgLTIwOSw3ICsyMDksNyBAQCBpbnQgdGlwY19iZWFyZXJfZ2V0X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICpuYW1lLCB1MzIgYmVhcmVyX2lkKVxuIFx0aWYgKCFiKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHN0cmNweShuYW1lLCBiLVx1MDAzZW5hbWUpO1xuK1x0c3Ryc2NweShuYW1lLCBiLVx1MDAzZW5hbWUsIFRJUENfTUFYX0JFQVJFUl9OQU1FKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEwOjA2LjEyNzY5MjM2MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzA4OTQxODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJ1ZmZlciBPdmVyZmxvdyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHJlcGxhY2VzIGEgYHN0cmNweWAgd2l0aCBgc3Ryc2NweWAgaW4gYHRpcGNfYmVhcmVyX2dldF9uYW1lYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoaXMgaXMgYWJvdXQgcHJldmVudGluZyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSDigJMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgd3JpdGUgc2NlbmFyaW8uIEdvb2QgY2F0Y2guIFRoZSBvcmlnaW5hbCBgc3RyY3B5YCB3YXMgYSB0aWNraW5nIHRpbWUgYm9tYiwgcmlwZSBmb3IgZXhwbG9pdGF0aW9uLlxuXG5CdXQgaG9sZCBvbiwgYHN0cnNjcHlgIGNvcGllcyBhdCBtb3N0IGBUSVBDX01BWF9CRUFSRVJfTkFNRWAgY2hhcmFjdGVycy4gVGhhdCdzIHRoZSBrZXkuIE5vdywgZG9lcyB0aGlzIGNoYW5nZSBpbnRyb2R1Y2UgYSBuZXcgcmlzazogdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmU/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guIGBzdHJzY3B5YCwgdW5saWtlIGBzdHJuY3B5YCwgKmRvZXNuJ3QqIHplcm8tcGFkIHRoZSByZXN0IG9mIHRoZSBidWZmZXIgaWYgdGhlIHNvdXJjZSBzdHJpbmcgaXMgc2hvcnRlciB0aGFuIHRoZSB0YXJnZXQgc2l6ZS4gQnV0LCB3YWl0LCBuZWl0aGVyIGRvZXMgYHN0cmNweWAuXG5cbkFoISBTbywgaWYgYGItXHUwMDNlbmFtZWAgaXMgc2hvcnRlciB0aGFuIHRoZSBidWZmZXIsIHRoZSByZW1haW5pbmcgcGFydCBvZiBgbmFtZWAgbWlnaHQgY29udGFpbiBzdGFsZSBkYXRhLiBJZiBgbmFtZWAgaXMgbGF0ZXIgcGFzc2VkIHRvIHVzZXIgc3BhY2UgKndpdGhvdXQqIGluaXRpYWxpemF0aW9uLCB3ZSd2ZSBnb3QgYSBtZW1vcnkgbGVhayBvciBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlIHJpc2sgb24gb3VyIGhhbmRzISBUaGlzIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gY2FyZWZ1bGx5IGV2YWx1YXRlLlxuXG5UbyB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byBzZWUgKndoZXJlKiBgdGlwY19iZWFyZXJfZ2V0X25hbWVgIGlzIGNhbGxlZC4gVGhlIGNvbnRleHQgb2YgaXRzIHVzZSBpcyBjcnVjaWFsIGZvciBhc3Nlc3NpbmcgdGhpcyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsZXJzIGFuZCBzZWUgaG93IHRoZSBgbmFtZWAgYnVmZmVyIGlzIGFjdHVhbGx5IHVzZWQgYWZ0ZXJ3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTY2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MTA6MTIuODM2NjM4MDI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAzNTYwODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfYmVhcmVyX2dldF9uYW1lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2JlYXJlci5jPTE4MT1zdHJ1Y3QgdGlwY19iZWFyZXIgKnRpcGNfYmVhcmVyX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmMtMTk0LVxcbm5ldC90aXBjL2JlYXJlci5jOjE5NTovKiAgICAgdGlwY19iZWFyZXJfZ2V0X25hbWUgLSBnZXQgdGhlIGJlYXJlciBuYW1lIGZyb20gaXRzIGlkLlxcbm5ldC90aXBjL2JlYXJlci5jLTE5Ni0gKiAgICAgQG5ldDogbmV0d29yayBuYW1lc3BhY2VcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5jLTE5OS0gKi9cXG5uZXQvdGlwYy9iZWFyZXIuYzoyMDA6aW50IHRpcGNfYmVhcmVyX2dldF9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqbmFtZSwgdTMyIGJlYXJlcl9pZClcXG5uZXQvdGlwYy9iZWFyZXIuYy0yMDEte1xcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmg9MjI4PXN0cnVjdCB0aXBjX2JlYXJlciAqdGlwY19iZWFyZXJfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbm5ldC90aXBjL2JlYXJlci5oOjIyOTppbnQgdGlwY19iZWFyZXJfZ2V0X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICpuYW1lLCB1MzIgYmVhcmVyX2lkKTtcXG5uZXQvdGlwYy9iZWFyZXIuaC0yMzAtc3RydWN0IHRpcGNfbWVkaWEgKnRpcGNfbWVkaWFfZmluZChjb25zdCBjaGFyICpuYW1lKTtcXG4tLVxcbm5ldC90aXBjL21vbml0b3IuYz04Mjc9aW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxcbi0tXFxubmV0L3RpcGMvbW9uaXRvci5jLTgzNS1cXG5uZXQvdGlwYy9tb25pdG9yLmM6ODM2OlxcdHJldCA9IHRpcGNfYmVhcmVyX2dldF9uYW1lKG5ldCwgYmVhcmVyX25hbWUsIGJlYXJlcl9pZCk7XFxubmV0L3RpcGMvbW9uaXRvci5jLTgzNy1cXHRpZiAocmV0IHx8ICFtb24pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEwOjE0LjY0MDIwNDcxMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzQwNjc3MTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgVElQQyBNb25pdG9yIEFkZGl0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBUSVBDIG1vbml0b3JzIGFyZSBiZWluZyBhZGRlZC4gTGV0J3Mgc3RhcnQgd2l0aCBgX190aXBjX25sX2FkZF9tb25pdG9yYCBpbiBgbmV0L3RpcGMvbW9uaXRvci5jYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGxvb2tzIGxpa2UgZXhhY3RseSB3aGVyZSBJIHNob3VsZCBzdGFydCBkaWdnaW5nLiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgdGhpcyBpcyBsaWtlbHkgdGhlIGNvcmUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIGEgbW9uaXRvciB0aHJvdWdoIHRoZSBuZXRsaW5rIGludGVyZmFjZS4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGhvdyBpdCdzIGNhbGxlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiBob3cgaXQgdmFsaWRhdGVzIHRoZSByZXF1ZXN0LCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIG1vbml0b3IgZnJhbWV3b3JrLCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBtZWNoYW5pc21zIHRoYXQgYXJlIGludm9sdmVkLiBMZXQncyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MTA6MjAuMzgwODg1MDUzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA2Njk5NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdGlwY19ubF9hZGRfbW9uaXRvclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9tb25pdG9yLmM9NzM3PWludCB0aXBjX25sX21vbml0b3JfZ2V0X3RocmVzaG9sZChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvdGlwYy9tb25pdG9yLmMtNzQzLVxcbm5ldC90aXBjL21vbml0b3IuYzo3NDQ6c3RhdGljIGludCBfX3RpcGNfbmxfYWRkX21vbml0b3JfcGVlcihzdHJ1Y3QgdGlwY19wZWVyICpwZWVyLFxcbm5ldC90aXBjL21vbml0b3IuYy03NDUtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHRpcGNfbmxfbXNnICptc2cpXFxuLS1cXG5uZXQvdGlwYy9tb25pdG9yLmM9Nzk4PWludCB0aXBjX25sX2FkZF9tb25pdG9yX3BlZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZyxcXG4tLVxcbm5ldC90aXBjL21vbml0b3IuYy04MTUtXFx0XFx0fVxcbm5ldC90aXBjL21vbml0b3IuYzo4MTY6XFx0XFx0aWYgKF9fdGlwY19ubF9hZGRfbW9uaXRvcl9wZWVyKHBlZXIsIG1zZykpIHtcXG5uZXQvdGlwYy9tb25pdG9yLmMtODE3LVxcdFxcdFxcdCpwcmV2X25vZGUgPSBwZWVyLVxcdTAwM2VhZGRyO1xcbi0tXFxubmV0L3RpcGMvbW9uaXRvci5jLTgyNi1cXG5uZXQvdGlwYy9tb25pdG9yLmM6ODI3OmludCBfX3RpcGNfbmxfYWRkX21vbml0b3Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZyxcXG5uZXQvdGlwYy9tb25pdG9yLmMtODI4LVxcdFxcdFxcdCAgdTMyIGJlYXJlcl9pZClcXG4tLVxcbm5ldC90aXBjL21vbml0b3IuaD03NT1pbnQgdGlwY19ubF9tb25pdG9yX2dldF90aHJlc2hvbGQoc3RydWN0IG5ldCAqbmV0KTtcXG5uZXQvdGlwYy9tb25pdG9yLmg6NzY6aW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxcbm5ldC90aXBjL21vbml0b3IuaC03Ny1cXHRcXHRcXHQgIHUzMiBiZWFyZXJfaWQpO1xcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTI3NjE9aW50IHRpcGNfbmxfbm9kZV9zZXRfbW9uaXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTI3ODgtXFxubmV0L3RpcGMvbm9kZS5jOjI3ODk6c3RhdGljIGludCBfX3RpcGNfbmxfYWRkX21vbml0b3JfcHJvcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnKVxcbm5ldC90aXBjL25vZGUuYy0yNzkwLXtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0yODIyPWludCB0aXBjX25sX25vZGVfZ2V0X21vbml0b3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0yODMzLVxcbm5ldC90aXBjL25vZGUuYzoyODM0OlxcdGVyciA9IF9fdGlwY19ubF9hZGRfbW9uaXRvcl9wcm9wKG5ldCwgXFx1MDAyNm1zZyk7XFxubmV0L3RpcGMvbm9kZS5jLTI4MzUtXFx0aWYgKGVycikge1xcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTI4NDM9aW50IHRpcGNfbmxfbm9kZV9kdW1wX21vbml0b3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTI4NTktXFx0Zm9yIChiZWFyZXJfaWQgPSBwcmV2X2JlYXJlcjsgYmVhcmVyX2lkIFxcdTAwM2MgTUFYX0JFQVJFUlM7IGJlYXJlcl9pZCsrKSB7XFxubmV0L3RpcGMvbm9kZS5jOjI4NjA6XFx0XFx0ZXJyID0gX190aXBjX25sX2FkZF9tb25pdG9yKG5ldCwgXFx1MDAyNm1zZywgYmVhcmVyX2lkKTtcXG5uZXQvdGlwYy9ub2RlLmMtMjg2MS1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNToxMDoyMi4xODc1OTA1MDVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMwODU4MjM4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgdGhlIGBfX3RpcGNfbmxfYWRkX21vbml0b3JgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGBfX3RpcGNfbmxfYWRkX21vbml0b3JgLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4gYG5ldC90aXBjL21vbml0b3IuY2AuIE15IGluaXRpYWwgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBoYW5kbGVzIHRoZSBhZGRpdGlvbiBvZiBhIG5ldyBtb25pdG9yIGZvciB0aGUgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXIgUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBwcm90b2NvbCwgcHJvYmFibHkgcmVsYXRlZCB0byBuZXR3b3JrIG1lc3NhZ2VzIG9yIGV2ZW50cy4gSSBiZXQgaXQgdGFrZXMgY2FyZSBvZiByZWdpc3RlcmluZyB0aGUgbW9uaXRvcidzIGNoYXJhY3RlcmlzdGljcywgbGlrZSB3aGF0IGtpbmQgb2YgZXZlbnRzIGl0J3MgaW50ZXJlc3RlZCBpbiwgd2hlcmUgdGhlIGRhdGEgc2hvdWxkIGdvLCBhbmQgc28gb24uIExldCdzIHNlZSB3aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIFwibmxcIiBwYXJ0IHNpZ25pZmllcyAtIGl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgTmV0bGluayBwcm90b2NvbCwgZ2l2ZW4gdGhhdCB0aGlzIGlzIGEgbmV0d29ya2luZyBjb21wb25lbnQuIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIE5ldGxpbmsgbWVzc2FnZSBoYW5kbGluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgaXQgdmFsaWRhdGVzIHRoZSBpbmNvbWluZyBpbmZvcm1hdGlvbiwgaG93IGl0IG1hbmFnZXMgbWVtb3J5IChhbGxvY2F0aW5nIGFuZCBmcmVlaW5nKSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaW50ZXJuYWwgVElQQyBkYXRhIHN0cnVjdHVyZXMgdG8gbWFuYWdlIHRoZSBtb25pdG9ycy4gSSBhbSBhbHNvIHZlcnkga2VlbiB0byBsZWFybiBpZiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGFibGUgZnJvbSB0aGUgTmV0bGluayB1c2VyLXNwYWNlIG9yIGZyb20ga2VybmVsIGludGVybmFsIHN0cnVjdHVyZXMuIEknbGwgYmUgc2NydXRpbml6aW5nIHRoZSBjb2RlIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSBjb25jdXJyZW5jeSBzYWZldHkuIEZ1cnRoZXJtb3JlLCBJJ2xsIGJlIGNoZWNraW5nIGhvdyB0aGUgbW9uaXRvcidzIGxpZmVjeWNsZSBpcyBtYW5hZ2VkIOKAkyBhcmUgdGhlcmUgZnVuY3Rpb25zIGZvciByZW1vdmFsIG9yIG1vZGlmaWNhdGlvbj8gRmluYWxseSwgSSBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgbW9uaXRvcnMgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIFRJUEMncyBvdmVyYWxsIGRlc2lnbiwgYW5kIHdoZXRoZXIgaXQgYWxpZ25zIHdpdGggcGVyZm9ybWFuY2UgYmVzdCBwcmFjdGljZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNToxMDo0NS4yNzM0MTcyNzNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL21vbml0b3IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MjA6XFx0XFx0XFx0fVxcbiA4MjE6XFx0XFx0fSB3aGlsZSAoKHBlZXIgPSBwZWVyX254dChwZWVyKSkgIT0gbW9uLVxcdTAwM2VzZWxmKTtcXG4gODIyOlxcdFxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZtb24tXFx1MDAzZWxvY2spO1xcbiA4MjM6XFx0XFxuIDgyNDpcXHRcXHRyZXR1cm4gMDtcXG4gODI1OlxcdH1cXG4gODI2OlxcdFxcbiA4Mjc6XFx0aW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxcbiA4Mjg6XFx0XFx0XFx0XFx0ICB1MzIgYmVhcmVyX2lkKVxcbiA4Mjk6XFx0e1xcbiA4MzA6XFx0XFx0c3RydWN0IHRpcGNfbW9uaXRvciAqbW9uID0gdGlwY19tb25pdG9yKG5ldCwgYmVhcmVyX2lkKTtcXG4gODMxOlxcdFxcdGNoYXIgYmVhcmVyX25hbWVbVElQQ19NQVhfQkVBUkVSX05BTUVdO1xcbiA4MzI6XFx0XFx0c3RydWN0IG5sYXR0ciAqYXR0cnM7XFxuIDgzMzpcXHRcXHR2b2lkICpoZHI7XFxuIDgzNDpcXHRcXHRpbnQgcmV0O1xcbiA4MzU6XFx0XFxuIDgzNjpcXHRcXHRyZXQgPSB0aXBjX2JlYXJlcl9nZXRfbmFtZShuZXQsIGJlYXJlcl9uYW1lLCBiZWFyZXJfaWQpO1xcbiA4Mzc6XFx0XFx0aWYgKHJldCB8fCAhbW9uKVxcbiA4Mzg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDgzOTpcXHRcXG4gODQwOlxcdFxcdGhkciA9IGdlbmxtc2dfcHV0KG1zZy1cXHUwMDNlc2tiLCBtc2ctXFx1MDAzZXBvcnRpZCwgbXNnLVxcdTAwM2VzZXEsIFxcdTAwMjZ0aXBjX2dlbmxfZmFtaWx5LFxcbiA4NDE6XFx0XFx0XFx0XFx0ICBOTE1fRl9NVUxUSSwgVElQQ19OTF9NT05fR0VUKTtcXG4gODQyOlxcdFxcdGlmICghaGRyKVxcbiA4NDM6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gODQ0OlxcdFxcbiA4NDU6XFx0XFx0YXR0cnMgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcobXNnLVxcdTAwM2Vza2IsIFRJUENfTkxBX01PTik7XFxuIDg0NjpcXHRcXHRpZiAoIWF0dHJzKVxcbiA4NDc6XFx0XFx0XFx0Z290byBtc2dfZnVsbDtcXG4gODQ4OlxcdFxcbiA4NDk6XFx0XFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZtb24tXFx1MDAzZWxvY2spO1xcbiA4NTA6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKG1zZy1cXHUwMDNlc2tiLCBUSVBDX05MQV9NT05fUkVGLCBiZWFyZXJfaWQpKVxcbiA4NTE6XFx0XFx0XFx0Z290byBhdHRyX21zZ19mdWxsO1xcbiA4NTI6XFx0XFx0aWYgKHRpcGNfbW9uX2lzX2FjdGl2ZShuZXQsIG1vbikpXFxuIDg1MzpcXHRcXHRcXHRpZiAobmxhX3B1dF9mbGFnKG1zZy1cXHUwMDNlc2tiLCBUSVBDX05MQV9NT05fQUNUSVZFKSlcXG4gODU0OlxcdFxcdFxcdFxcdGdvdG8gYXR0cl9tc2dfZnVsbDtcXG4gODU1OlxcdFxcdGlmIChubGFfcHV0X3N0cmluZyhtc2ctXFx1MDAzZXNrYiwgVElQQ19OTEFfTU9OX0JFQVJFUl9OQU1FLCBiZWFyZXJfbmFtZSkpXFxuIDg1NjpcXHRcXHRcXHRnb3RvIGF0dHJfbXNnX2Z1bGw7XFxuIDg1NzpcXHRcXHRpZiAobmxhX3B1dF91MzIobXNnLVxcdTAwM2Vza2IsIFRJUENfTkxBX01PTl9QRUVSQ05ULCBtb24tXFx1MDAzZXBlZXJfY250KSlcXG4gODU4OlxcdFxcdFxcdGdvdG8gYXR0cl9tc2dfZnVsbDtcXG4gODU5OlxcdFxcdGlmIChubGFfcHV0X3UzMihtc2ctXFx1MDAzZXNrYiwgVElQQ19OTEFfTU9OX0xJU1RHRU4sIG1vbi1cXHUwMDNlbGlzdF9nZW4pKVxcbiA4NjA6XFx0XFx0XFx0Z290byBhdHRyX21zZ19mdWxsO1xcbiA4NjE6XFx0XFxuIDg2MjpcXHRcXHRyZWFkX3VubG9ja19iaChcXHUwMDI2bW9uLVxcdTAwM2Vsb2NrKTtcXG4gODYzOlxcdFxcdG5sYV9uZXN0X2VuZChtc2ctXFx1MDAzZXNrYiwgYXR0cnMpO1xcbiA4NjQ6XFx0XFx0Z2VubG1zZ19lbmQobXNnLVxcdTAwM2Vza2IsIGhkcik7XFxuIDg2NTpcXHRcXG4gODY2OlxcdFxcdHJldHVybiAwO1xcbiA4Njc6XFx0XFxuIDg2ODpcXHRhdHRyX21zZ19mdWxsOlxcbiA4Njk6XFx0XFx0cmVhZF91bmxvY2tfYmgoXFx1MDAyNm1vbi1cXHUwMDNlbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEwOjQ1LjI3MzUzNDc2M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjY4NzUxMjE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBUSVBDIEJlYXJlciBOYW1lIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgYmVhcmVyX25hbWVgLCBkZWNsYXJlZCBhcyBgY2hhciBiZWFyZXJfbmFtZVtUSVBDX01BWF9CRUFSRVJfTkFNRV07YCwgaXMgYW4gYXJyYXkgb24gdGhlIHN0YWNrLiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGF0IGl0J3MgdW5pbml0aWFsaXplZCBpbml0aWFsbHkuIFdlIHRoZW4gY2FsbCBgdGlwY19iZWFyZXJfZ2V0X25hbWVgLCB3aGljaCwgYWZ0ZXIgdGhlIGNoYW5nZSwgdXNlcyBgc3Ryc2NweShuYW1lLCBiLVx1MDAzZW5hbWUsIFRJUENfTUFYX0JFQVJFUl9OQU1FKTtgIHRvIGNvcHkgdGhlIGJlYXJlciBuYW1lLiBQcmV2aW91c2x5IGl0IHVzZWQgYHN0cmNweWAuXG5cbk5vdywgaWYgYGItXHUwMDNlbmFtZWAgaXMgc2hvcnRlciB0aGFuIGBUSVBDX01BWF9CRUFSRVJfTkFNRWAsIGBzdHJzY3B5YCAobGlrZSBgc3RyY3B5YCBiZWZvcmUgaXQsIGFuZCBjb250cmFyeSB0byBteSBpbml0aWFsIGV4cGVjdGF0aW9ucykgKnN0aWxsKiBsZWF2ZXMgdGhlIHJlc3Qgb2YgYGJlYXJlcl9uYW1lYCB1bmluaXRpYWxpemVkLiBUaGF0J3MgdGhlIGtleS4gVGhpcyBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgZ2FyYmFnZSBkYXRhIGluIHRoZSByZXN0IG9mIHRoZSBidWZmZXIuXG5cblRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgaXMgYG5sYV9wdXRfc3RyaW5nYCB3aGljaCBpcyB1c2VkIHRvIHBsYWNlIHRoZSBzdHJpbmcgaW50byB0aGUgbmV0bGluayBtZXNzYWdlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGlzIHdoZXJlIHRoZSB0cm91YmxlIGJlZ2lucy4gSG93ZXZlciwgKml0J3Mgbm90Ki4gYG5sYV9wdXRfc3RyaW5nYCBjYWxscyBgc3RybGVuYCB0byBkZXRlcm1pbmUgdGhlIGxlbmd0aC4gVGhhdCdzIHRoZSBzYXZpbmcgZ3JhY2UhIEl0IGNvcnJlY3RseSBsaW1pdHMgdGhlIGNvcHkgdG8gdGhlIGFjdHVhbCBsZW5ndGggb2YgdGhlIHN0cmluZyBwbHVzIHRoZSBudWxsIHRlcm1pbmF0b3IuIFNvLCBpdCAqZG9lc24ndCogY29weSB0aGUgdW5pbml0aWFsaXplZCBieXRlcy5cblxuQnV0LCBoYW5nIG9uLCB0aGlzIHJlcXVpcmVzIGEgZGVlcGVyIGxvb2suIGBubGFfcHV0X3N0cmluZ2AgaXMgZGVmaW5lZCBhcyBhIGNhbGwgdG8gYG5sYV9wdXRgLCB3aGljaCBpcyBkZWZpbmVkIGFzOlxuXG5gYGBjXG5zdGF0aWMgaW5saW5lIGludCBubGFfcHV0X3N0cmluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsXG5cdFx0XHRcdCBjb25zdCBjaGFyICpzdHIpXG57XG5cdHJldHVybiBubGFfcHV0KHNrYiwgYXR0cnR5cGUsIHN0cmxlbihzdHIpICsgMSwgc3RyKTtcbn1cbmBgYFxuXG5TbyBpdCBvbmx5IGNvcGllcyBgc3RybGVuKHN0cikgKyAxYCBieXRlcy4gSXQgZG9lcyBOT1QgY29weSB0aGUgdW5pbml0aWFsaXplZCBieXRlcyBvZiBgYmVhcmVyX25hbWVgLlxuXG5JIGFsc28gcmVjYWxsIHRoYXQgYG5sYV9wdXRgIG1pZ2h0IHBhZCB0byBhIDQtYnl0ZSBib3VuZGFyeS4gRG9lcyBpdCBwYWQgd2l0aCB6ZXJvZXM/IFllcywgaXQgcGFkcyB3aXRoIHplcm9lcyEgKk9yIHJhdGhlciosIGBfX25sYV9wdXRgIGRvZXMuIFNvLCB3aGlsZSB3ZSBoYXZlIHVuaW5pdGlhbGl6ZWQgZGF0YSBpbiB0aGUgb3JpZ2luYWwgYGJlYXJlcl9uYW1lYCBhcnJheSwgdGhlIHBhZGRpbmcgbWVjaGFuaXNtIGluIGBubGFfcHV0YCBlZmZlY3RpdmVseSBudWxscyBhbnkgZXhjZXNzIGJ5dGVzIGJleW9uZCB0aGUgc3RyaW5nIGxlbmd0aCB3aGVuIGFkZGluZyB0aGUgc3RyaW5nIHRvIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZS5cblxuU28sIHdoaWxlIHRoZXJlICppcyogYSBwb3RlbnRpYWwgZm9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjayBkYXRhLCBpdCdzICpub3QqIGV4cG9zZWQgaW4gdGhlIG5ldGxpbmsgbWVzc2FnZSBkdWUgdG8gdGhlIHVzZSBvZiBgc3RybGVuYCBpbiBgbmxhX3B1dF9zdHJpbmdgIGFuZCB0aGUgcGFkZGluZyBiZWhhdmlvci4gQSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBleGlzdHMsIGJ1dCBpdCBpcyBub3QgZXhwbG9pdGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMzcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNToxMTowMS45NjEwNDk5NDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjYzMTIyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19ubGFfcHV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGxpbmsuaD01NjE9dm9pZCAqbmxhX3Jlc2VydmVfbm9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4pO1xcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDo1NjI6dm9pZCBfX25sYV9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbixcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtNTYzLVxcdCAgICAgICBjb25zdCB2b2lkICpkYXRhKTtcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6NTY0OnZvaWQgX19ubGFfcHV0XzY0Yml0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTU2NS1cXHRcXHQgICAgIGNvbnN0IHZvaWQgKmRhdGEsIGludCBwYWRhdHRyKTtcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6NTY2OnZvaWQgX19ubGFfcHV0X25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuLCBjb25zdCB2b2lkICpkYXRhKTtcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtNTY3LWludCBubGFfcHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sIGNvbnN0IHZvaWQgKmRhdGEpO1xcbi0tXFxubGliL25sYXR0ci5jPTEwMjM9RVhQT1JUX1NZTUJPTChubGFfcmVzZXJ2ZV9ub2hkcik7XFxuLS1cXG5saWIvbmxhdHRyLmMtMTAyNS0vKipcXG5saWIvbmxhdHRyLmM6MTAyNjogKiBfX25sYV9wdXQgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB0byBhIHNvY2tldCBidWZmZXJcXG5saWIvbmxhdHRyLmMtMTAyNy0gKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIGFkZCBhdHRyaWJ1dGUgdG9cXG4tLVxcbmxpYi9ubGF0dHIuYy0xMDM0LSAqL1xcbmxpYi9ubGF0dHIuYzoxMDM1OnZvaWQgX19ubGFfcHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sXFxubGliL25sYXR0ci5jLTEwMzYtXFx0XFx0XFx0ICAgICBjb25zdCB2b2lkICpkYXRhKVxcbi0tXFxubGliL25sYXR0ci5jLTEwNDItfVxcbmxpYi9ubGF0dHIuYzoxMDQzOkVYUE9SVF9TWU1CT0woX19ubGFfcHV0KTtcXG5saWIvbmxhdHRyLmMtMTA0NC1cXG5saWIvbmxhdHRyLmMtMTA0NS0vKipcXG5saWIvbmxhdHRyLmM6MTA0NjogKiBfX25sYV9wdXRfNjRiaXQgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB0byBhIHNvY2tldCBidWZmZXIgYW5kIGFsaWduIGl0XFxubGliL25sYXR0ci5jLTEwNDctICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvXFxuLS1cXG5saWIvbmxhdHRyLmMtMTA1NS0gKi9cXG5saWIvbmxhdHRyLmM6MTA1Njp2b2lkIF9fbmxhX3B1dF82NGJpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLFxcbmxpYi9ubGF0dHIuYy0xMDU3LVxcdFxcdCAgICAgY29uc3Qgdm9pZCAqZGF0YSwgaW50IHBhZGF0dHIpXFxuLS1cXG5saWIvbmxhdHRyLmMtMTA2My19XFxubGliL25sYXR0ci5jOjEwNjQ6RVhQT1JUX1NZTUJPTChfX25sYV9wdXRfNjRiaXQpO1xcbmxpYi9ubGF0dHIuYy0xMDY1LVxcbmxpYi9ubGF0dHIuYy0xMDY2LS8qKlxcbmxpYi9ubGF0dHIuYzoxMDY3OiAqIF9fbmxhX3B1dF9ub2hkciAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyXFxubGliL25sYXR0ci5jLTEwNjgtICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvXFxuLS1cXG5saWIvbmxhdHRyLmMtMTA3NC0gKi9cXG5saWIvbmxhdHRyLmM6MTA3NTp2b2lkIF9fbmxhX3B1dF9ub2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cmxlbiwgY29uc3Qgdm9pZCAqZGF0YSlcXG5saWIvbmxhdHRyLmMtMTA3Ni17XFxuLS1cXG5saWIvbmxhdHRyLmMtMTA4MS19XFxubGliL25sYXR0ci5jOjEwODI6RVhQT1JUX1NZTUJPTChfX25sYV9wdXRfbm9oZHIpO1xcbmxpYi9ubGF0dHIuYy0xMDgzLVxcbi0tXFxubGliL25sYXR0ci5jPTEwOTQ9aW50IG5sYV9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbiwgY29uc3Qgdm9pZCAqZGF0YSlcXG4tLVxcbmxpYi9ubGF0dHIuYy0xMDk4LVxcbmxpYi9ubGF0dHIuYzoxMDk5OlxcdF9fbmxhX3B1dChza2IsIGF0dHJ0eXBlLCBhdHRybGVuLCBkYXRhKTtcXG5saWIvbmxhdHRyLmMtMTEwMC1cXHRyZXR1cm4gMDtcXG4tLVxcbmxpYi9ubGF0dHIuYz0xMTE1PWludCBubGFfcHV0XzY0Yml0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sXFxuLS1cXG5saWIvbmxhdHRyLmMtMTEyNi1cXG5saWIvbmxhdHRyLmM6MTEyNzpcXHRfX25sYV9wdXRfNjRiaXQoc2tiLCBhdHRydHlwZSwgYXR0cmxlbiwgZGF0YSwgcGFkYXR0cik7XFxubGliL25sYXR0ci5jLTExMjgtXFx0cmV0dXJuIDA7XFxuLS1cXG5saWIvbmxhdHRyLmM9MTE0MT1pbnQgbmxhX3B1dF9ub2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cmxlbiwgY29uc3Qgdm9pZCAqZGF0YSlcXG4tLVxcbmxpYi9ubGF0dHIuYy0xMTQ1LVxcbmxpYi9ubGF0dHIuYzoxMTQ2OlxcdF9fbmxhX3B1dF9ub2hkcihza2IsIGF0dHJsZW4sIGRhdGEpO1xcbmxpYi9ubGF0dHIuYy0xMTQ3LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDUxPXN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTIyLVxcdGlmICh1cGNhbGxfaW5mby1cXHUwMDNldXNlcmRhdGEpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTIzOlxcdFxcdF9fbmxhX3B1dCh1c2VyX3NrYiwgT1ZTX1BBQ0tFVF9BVFRSX1VTRVJEQVRBLFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTUyNC1cXHRcXHRcXHQgIG5sYV9sZW4odXBjYWxsX2luZm8tXFx1MDAzZXVzZXJkYXRhKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MTE6MDMuOTg3MzY4MDE1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzk4MDY1MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbGliL25sYXR0ci5jYCoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gbmV0bGluayBhdHRyaWJ1dGVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgc3RyYWlnaHQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIGBfX25sYV9wdXRgIHdpdGhpbiBgbGliL25sYXR0ci5jYC4gVGhhdCBmdW5jdGlvbidzIHdoZXJlIHRoZSAqYWN0dWFsKiB3b3JrIG9mIHBsYWNpbmcgbmV0bGluayBhdHRyaWJ1dGVzIGlzIGhhcHBlbmluZy4gSXQncyB0aGUgYnVpbGRpbmcgYmxvY2suIEkgZmlndXJlIGlmIEkgbmVlZCB0byBkaWFnbm9zZSBhbiBpc3N1ZSB3aXRoIHRoZSBhdHRyaWJ1dGVzLCB1bmRlcnN0YW5kIHRoZWlyIHN0cnVjdHVyZSwgb3Igb3B0aW1pemUgc29tZSBmdW5jdGlvbmFsaXR5LCBgX19ubGFfcHV0YCBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2sgZm9yIHdvcmtpbmcgd2l0aCBhdHRyaWJ1dGVzLCBzbyBpdCBtYWtlcyBzZW5zZSB0byB2ZXJpZnkgdGhlIG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY4MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjExOjM2Ljc4NTQzNTk2NloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL25sYXR0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMzA6XFx0ICogQGRhdGE6IGhlYWQgb2YgYXR0cmlidXRlIHBheWxvYWRcXG4xMDMxOlxcdCAqXFxuMTAzMjpcXHQgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGVuc3VyZSB0aGF0IHRoZSBza2IgcHJvdmlkZXMgZW5vdWdoXFxuMTAzMzpcXHQgKiB0YWlscm9vbSBmb3IgdGhlIGF0dHJpYnV0ZSBoZWFkZXIgYW5kIHBheWxvYWQuXFxuMTAzNDpcXHQgKi9cXG4xMDM1OlxcdHZvaWQgX19ubGFfcHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sXFxuMTAzNjpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHZvaWQgKmRhdGEpXFxuMTAzNzpcXHR7XFxuMTAzODpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpubGE7XFxuMTAzOTpcXHRcXG4xMDQwOlxcdFxcdG5sYSA9IF9fbmxhX3Jlc2VydmUoc2tiLCBhdHRydHlwZSwgYXR0cmxlbik7XFxuMTA0MTpcXHRcXHRtZW1jcHkobmxhX2RhdGEobmxhKSwgZGF0YSwgYXR0cmxlbik7XFxuMTA0MjpcXHR9XFxuMTA0MzpcXHRFWFBPUlRfU1lNQk9MKF9fbmxhX3B1dCk7XFxuMTA0NDpcXHRcXG4xMDQ1OlxcdC8qKlxcbjEwNDY6XFx0ICogX19ubGFfcHV0XzY0Yml0IC0gQWRkIGEgbmV0bGluayBhdHRyaWJ1dGUgdG8gYSBzb2NrZXQgYnVmZmVyIGFuZCBhbGlnbiBpdFxcbjEwNDc6XFx0ICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvXFxuMTA0ODpcXHQgKiBAYXR0cnR5cGU6IGF0dHJpYnV0ZSB0eXBlXFxuMTA0OTpcXHQgKiBAYXR0cmxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkXFxuMTA1MDpcXHQgKiBAZGF0YTogaGVhZCBvZiBhdHRyaWJ1dGUgcGF5bG9hZFxcbjEwNTE6XFx0ICogQHBhZGF0dHI6IGF0dHJpYnV0ZSB0eXBlIGZvciB0aGUgcGFkZGluZ1xcbjEwNTI6XFx0ICpcXG4xMDUzOlxcdCAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gZW5zdXJlIHRoYXQgdGhlIHNrYiBwcm92aWRlcyBlbm91Z2hcXG4xMDU0OlxcdCAqIHRhaWxyb29tIGZvciB0aGUgYXR0cmlidXRlIGhlYWRlciBhbmQgcGF5bG9hZC5cXG4xMDU1OlxcdCAqL1xcbjEwNTY6XFx0dm9pZCBfX25sYV9wdXRfNjRiaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbixcXG4xMDU3OlxcdFxcdFxcdCAgICAgY29uc3Qgdm9pZCAqZGF0YSwgaW50IHBhZGF0dHIpXFxuMTA1ODpcXHR7XFxuMTA1OTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpubGE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjExOjM2Ljc4NTU2MzA0NloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTY1NDkyMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgUGFkZGluZyBNZWNoYW5pc20qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gcmV0aGluayB0aGlzIHBhZGRpbmcgaXNzdWUuIFRoZSBuYW1lIGBfX25sYV9yZXNlcnZlYC4uLiB0aGF0J3MgcmluZ2luZyBhIGJlbGwuIE15IGd1dCB0ZWxscyBtZSAqdGhhdCdzKiB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBwYWRkaW5nIHdpdGhpbiB0aGlzIE5ldGxpbmsgQXR0cmlidXRlIChOTEEpIHN0cnVjdHVyZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQ7IEkgbmVlZCB0byBjb25maXJtIG15IGluaXRpYWwgaHVuY2guIEdvdHRhIHZlcmlmeSB0aGUgcm9sZSBvZiBgX19ubGFfcmVzZXJ2ZWAgYW5kIG1ha2Ugc3VyZSBpdCdzIGluZGVlZCB0aGUgcmlnaHQgbG9jYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNjksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjExOjQ0LjM1MTA1ODk5NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3OTkzODMxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25sYV9yZXNlcnZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGxpbmsuaD01NTM9aW50IG5sYV9zdHJjbXAoY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLCBjb25zdCBjaGFyICpzdHIpO1xcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDo1NTQ6c3RydWN0IG5sYXR0ciAqX19ubGFfcmVzZXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuKTtcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6NTU1OnN0cnVjdCBubGF0dHIgKl9fbmxhX3Jlc2VydmVfNjRiaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLFxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC01NTYtXFx0XFx0XFx0XFx0ICAgaW50IGF0dHJsZW4sIGludCBwYWRhdHRyKTtcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6NTU3OnZvaWQgKl9fbmxhX3Jlc2VydmVfbm9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4pO1xcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC01NTgtc3RydWN0IG5sYXR0ciAqbmxhX3Jlc2VydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbik7XFxuLS1cXG5saWIvbmxhdHRyLmM9ODg3PUVYUE9SVF9TWU1CT0wobmxhX3N0cmNtcCk7XFxuLS1cXG5saWIvbmxhdHRyLmMtODkwLS8qKlxcbmxpYi9ubGF0dHIuYzo4OTE6ICogX19ubGFfcmVzZXJ2ZSAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIG9uIHRoZSBza2JcXG5saWIvbmxhdHRyLmMtODkyLSAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gcmVzZXJ2ZSByb29tIG9uXFxuLS1cXG5saWIvbmxhdHRyLmMtOTAxLSAqL1xcbmxpYi9ubGF0dHIuYzo5MDI6c3RydWN0IG5sYXR0ciAqX19ubGFfcmVzZXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuKVxcbmxpYi9ubGF0dHIuYy05MDMte1xcbi0tXFxubGliL25sYXR0ci5jLTkxMy19XFxubGliL25sYXR0ci5jOjkxNDpFWFBPUlRfU1lNQk9MKF9fbmxhX3Jlc2VydmUpO1xcbmxpYi9ubGF0dHIuYy05MTUtXFxubGliL25sYXR0ci5jLTkxNi0vKipcXG5saWIvbmxhdHRyLmM6OTE3OiAqIF9fbmxhX3Jlc2VydmVfNjRiaXQgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBvbiB0aGUgc2tiIGFuZCBhbGlnbiBpdFxcbmxpYi9ubGF0dHIuYy05MTgtICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byByZXNlcnZlIHJvb20gb25cXG4tLVxcbmxpYi9ubGF0dHIuYy05MjktICovXFxubGliL25sYXR0ci5jOjkzMDpzdHJ1Y3QgbmxhdHRyICpfX25sYV9yZXNlcnZlXzY0Yml0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSxcXG5saWIvbmxhdHRyLmMtOTMxLVxcdFxcdFxcdFxcdCAgIGludCBhdHRybGVuLCBpbnQgcGFkYXR0cilcXG4tLVxcbmxpYi9ubGF0dHIuYy05MzQtXFxubGliL25sYXR0ci5jOjkzNTpcXHRyZXR1cm4gX19ubGFfcmVzZXJ2ZShza2IsIGF0dHJ0eXBlLCBhdHRybGVuKTtcXG5saWIvbmxhdHRyLmMtOTM2LX1cXG5saWIvbmxhdHRyLmM6OTM3OkVYUE9SVF9TWU1CT0woX19ubGFfcmVzZXJ2ZV82NGJpdCk7XFxubGliL25sYXR0ci5jLTkzOC1cXG5saWIvbmxhdHRyLmMtOTM5LS8qKlxcbmxpYi9ubGF0dHIuYzo5NDA6ICogX19ubGFfcmVzZXJ2ZV9ub2hkciAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyXFxubGliL25sYXR0ci5jLTk0MS0gKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIHJlc2VydmUgcm9vbSBvblxcbi0tXFxubGliL25sYXR0ci5jLTk0OC0gKi9cXG5saWIvbmxhdHRyLmM6OTQ5OnZvaWQgKl9fbmxhX3Jlc2VydmVfbm9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4pXFxubGliL25sYXR0ci5jLTk1MC17XFxuLS1cXG5saWIvbmxhdHRyLmMtOTUyLX1cXG5saWIvbmxhdHRyLmM6OTUzOkVYUE9SVF9TWU1CT0woX19ubGFfcmVzZXJ2ZV9ub2hkcik7XFxubGliL25sYXR0ci5jLTk1NC1cXG4tLVxcbmxpYi9ubGF0dHIuYz05Njc9c3RydWN0IG5sYXR0ciAqbmxhX3Jlc2VydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbilcXG4tLVxcbmxpYi9ubGF0dHIuYy05NzEtXFxubGliL25sYXR0ci5jOjk3MjpcXHRyZXR1cm4gX19ubGFfcmVzZXJ2ZShza2IsIGF0dHJ0eXBlLCBhdHRybGVuKTtcXG5saWIvbmxhdHRyLmMtOTczLX1cXG4tLVxcbmxpYi9ubGF0dHIuYz05OTA9c3RydWN0IG5sYXR0ciAqbmxhX3Jlc2VydmVfNjRiaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbixcXG4tLVxcbmxpYi9ubGF0dHIuYy0xMDAxLVxcbmxpYi9ubGF0dHIuYzoxMDAyOlxcdHJldHVybiBfX25sYV9yZXNlcnZlXzY0Yml0KHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4sIHBhZGF0dHIpO1xcbmxpYi9ubGF0dHIuYy0xMDAzLX1cXG4tLVxcbmxpYi9ubGF0dHIuYz0xMDE2PXZvaWQgKm5sYV9yZXNlcnZlX25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuKVxcbi0tXFxubGliL25sYXR0ci5jLTEwMjAtXFxubGliL25sYXR0ci5jOjEwMjE6XFx0cmV0dXJuIF9fbmxhX3Jlc2VydmVfbm9oZHIoc2tiLCBhdHRybGVuKTtcXG5saWIvbmxhdHRyLmMtMTAyMi19XFxuLS1cXG5saWIvbmxhdHRyLmM9MTAzNT12b2lkIF9fbmxhX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLFxcbi0tXFxubGliL25sYXR0ci5jLTEwMzktXFxubGliL25sYXR0ci5jOjEwNDA6XFx0bmxhID0gX19ubGFfcmVzZXJ2ZShza2IsIGF0dHJ0eXBlLCBhdHRybGVuKTtcXG5saWIvbmxhdHRyLmMtMTA0MS1cXHRtZW1jcHkobmxhX2RhdGEobmxhKSwgZGF0YSwgYXR0cmxlbik7XFxuLS1cXG5saWIvbmxhdHRyLmM9MTA1Nj12b2lkIF9fbmxhX3B1dF82NGJpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLFxcbi0tXFxubGliL25sYXR0ci5jLTEwNjAtXFxubGliL25sYXR0ci5jOjEwNjE6XFx0bmxhID0gX19ubGFfcmVzZXJ2ZV82NGJpdChza2IsIGF0dHJ0eXBlLCBhdHRybGVuLCBwYWRhdHRyKTtcXG5saWIvbmxhdHRyLmMtMTA2Mi1cXHRtZW1jcHkobmxhX2RhdGEobmxhKSwgZGF0YSwgYXR0cmxlbik7XFxuLS1cXG5saWIvbmxhdHRyLmM9MTA3NT12b2lkIF9fbmxhX3B1dF9ub2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cmxlbiwgY29uc3Qgdm9pZCAqZGF0YSlcXG4tLVxcbmxpYi9ubGF0dHIuYy0xMDc4LVxcbmxpYi9ubGF0dHIuYzoxMDc5OlxcdHN0YXJ0ID0gX19ubGFfcmVzZXJ2ZV9ub2hkcihza2IsIGF0dHJsZW4pO1xcbmxpYi9ubGF0dHIuYy0xMDgwLVxcdG1lbWNweShzdGFydCwgZGF0YSwgYXR0cmxlbik7XFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz0yMTY9c3RhdGljIHZvaWQgdHJhY2VfZHJvcF9jb21tb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqbG9jYXRpb24pXFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0yNTAtXFx0ICovXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MjUxOlxcdF9fbmxhX3Jlc2VydmVfbm9oZHIoZHNrYiwgc2l6ZW9mKHN0cnVjdCBuZXRfZG1fZHJvcF9wb2ludCkpO1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTI1Mi1cXHRubGEtXFx1MDAzZW5sYV9sZW4gKz0gTkxBX0FMSUdOKHNpemVvZihzdHJ1Y3QgbmV0X2RtX2Ryb3BfcG9pbnQpKTtcXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTYxMT1zdGF0aWMgaW50IG5ldF9kbV9wYWNrZXRfcmVwb3J0X2ZpbGwoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTY3My1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo2NzQ6XFx0YXR0ciA9IF9fbmxhX3Jlc2VydmUobXNnLCBORVRfRE1fQVRUUl9QQVlMT0FELCBwYXlsb2FkX2xlbik7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtNjc1LVxcdGlmIChza2JfY29weV9iaXRzKHNrYiwgMCwgbmxhX2RhdGEoYXR0ciksIHBheWxvYWRfbGVuKSlcXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTc3OD1zdGF0aWMgaW50IG5ldF9kbV9od19wYWNrZXRfcmVwb3J0X2ZpbGwoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTgzMS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo4MzI6XFx0YXR0ciA9IF9fbmxhX3Jlc2VydmUobXNnLCBORVRfRE1fQVRUUl9QQVlMT0FELCBwYXlsb2FkX2xlbik7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtODMzLVxcdGlmIChza2JfY29weV9iaXRzKHNrYiwgMCwgbmxhX2RhdGEoYXR0ciksIHBheWxvYWRfbGVuKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA1PW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODE3LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6ODE4OlxcdG5sYSA9IF9fbmxhX3Jlc2VydmUoc2tiLCBORlFBX1BBQ0tFVF9IRFIsIHNpemVvZigqcG1zZykpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODE5LVxcdHBtc2cgPSBubGFfZGF0YShubGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNToxMTo0Ni4wMzEwMDI2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMjQwNDI2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgbGFpZCBvdXQsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGBfX25sYV9yZXNlcnZlYCBpbiBgbGliL25sYXR0ci5jYCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBfX25sYV9yZXNlcnZlYCBhbmQgd2hlcmUgaXQgbGl2ZXMg4oCTIGxldCdzIGNoZWNrIGl0IG91dCBkaXJlY3RseSBpbiBgbGliL25sYXR0ci5jYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbG93LWxldmVsIE5ldGxpbmsgYXR0cmlidXRlIGhhbmRsaW5nIGNvZGUuIEhvcGVmdWxseSwgdW5kZXJzdGFuZGluZyBpdHMgaW1wbGVtZW50YXRpb24gYW5kIHVzYWdlIHRoZXJlIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgbWVtb3J5IGFsbG9jYXRpb24sIGVycm9yIGhhbmRsaW5nLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQncyBzZWUgd2hhdCB0aGUgc291cmNlIGNvZGUgcmV2ZWFscyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNToxMTo1My4xNTUwNDgzMDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9ubGF0dHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4OTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4OTA6XFx0LyoqXFxuIDg5MTpcXHQgKiBfX25sYV9yZXNlcnZlIC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgb24gdGhlIHNrYlxcbiA4OTI6XFx0ICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byByZXNlcnZlIHJvb20gb25cXG4gODkzOlxcdCAqIEBhdHRydHlwZTogYXR0cmlidXRlIHR5cGVcXG4gODk0OlxcdCAqIEBhdHRybGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHBheWxvYWRcXG4gODk1OlxcdCAqXFxuIDg5NjpcXHQgKiBBZGRzIGEgbmV0bGluayBhdHRyaWJ1dGUgaGVhZGVyIHRvIGEgc29ja2V0IGJ1ZmZlciBhbmQgcmVzZXJ2ZXNcXG4gODk3OlxcdCAqIHJvb20gZm9yIHRoZSBwYXlsb2FkIGJ1dCBkb2VzIG5vdCBjb3B5IGl0LlxcbiA4OTg6XFx0ICpcXG4gODk5OlxcdCAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gZW5zdXJlIHRoYXQgdGhlIHNrYiBwcm92aWRlcyBlbm91Z2hcXG4gOTAwOlxcdCAqIHRhaWxyb29tIGZvciB0aGUgYXR0cmlidXRlIGhlYWRlciBhbmQgcGF5bG9hZC5cXG4gOTAxOlxcdCAqL1xcbiA5MDI6XFx0c3RydWN0IG5sYXR0ciAqX19ubGFfcmVzZXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuKVxcbiA5MDM6XFx0e1xcbiA5MDQ6XFx0XFx0c3RydWN0IG5sYXR0ciAqbmxhO1xcbiA5MDU6XFx0XFxuIDkwNjpcXHRcXHRubGEgPSBza2JfcHV0KHNrYiwgbmxhX3RvdGFsX3NpemUoYXR0cmxlbikpO1xcbiA5MDc6XFx0XFx0bmxhLVxcdTAwM2VubGFfdHlwZSA9IGF0dHJ0eXBlO1xcbiA5MDg6XFx0XFx0bmxhLVxcdTAwM2VubGFfbGVuID0gbmxhX2F0dHJfc2l6ZShhdHRybGVuKTtcXG4gOTA5OlxcdFxcbiA5MTA6XFx0XFx0bWVtc2V0KCh1bnNpZ25lZCBjaGFyICopIG5sYSArIG5sYS1cXHUwMDNlbmxhX2xlbiwgMCwgbmxhX3BhZGxlbihhdHRybGVuKSk7XFxuIDkxMTpcXHRcXG4gOTEyOlxcdFxcdHJldHVybiBubGE7XFxuIDkxMzpcXHR9XFxuIDkxNDpcXHRFWFBPUlRfU1lNQk9MKF9fbmxhX3Jlc2VydmUpO1xcbiA5MTU6XFx0XFxuIDkxNjpcXHQvKipcXG4gOTE3OlxcdCAqIF9fbmxhX3Jlc2VydmVfNjRiaXQgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBvbiB0aGUgc2tiIGFuZCBhbGlnbiBpdFxcbiA5MTg6XFx0ICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byByZXNlcnZlIHJvb20gb25cXG4gOTE5OlxcdCAqIEBhdHRydHlwZTogYXR0cmlidXRlIHR5cGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MTE6NTMuMTU1MTYzNzg1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1OTkwODY1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN0cmluZyBIYW5kbGluZyBpbiBUSVBDIEJlYXJlciBOYW1lcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgc3RyaW5nIGNvcGllcywgc3BlY2lmaWNhbGx5IHdpdGggYmVhcmVyIG5hbWVzLiBJdCBsb29rcyBsaWtlIGBfX25sYV9yZXNlcnZlYCBpcyB1c2VkIHRvIHBhZCBhbiBhdHRyaWJ1dGUgd2l0aCB6ZXJvZXMgYWZ0ZXIgcmVzZXJ2aW5nIHNwYWNlLiBUaGVuLCBgbmxhX3B1dF9zdHJpbmdgIGlzIGNhbGxlZCwgd2hpY2ggaGFuZGxlcyBjb3B5aW5nIHN0cmluZ3MsIGFuZCBpdCdzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQncyBvbmx5IGNvcHlpbmcgYHN0cmxlbihzdHIpICsgMWAgYnl0ZXMuIExldCBtZSB0cmFjZSB0aGlzIGJhY2suLi4gYG5sYV9wdXRfc3RyaW5nYCB1c2VzIGBubGFfcHV0YCwgd2hpY2ggcmVzZXJ2ZXMgc3BhY2UgdXNpbmcgYF9fbmxhX3Jlc2VydmVgIChwYWRkaW5nIHdpdGggemVyb2VzIGFzIHdlIGp1c3QgZXN0YWJsaXNoZWQpLCBhbmQgKnRoZW4qIGNvcGllcyB0aGUgZGF0YSB1c2luZyBgbWVtY3B5YC4gIFNvLCBpdCBzZWVtcyB0aGF0IGBubGFfcHV0X3N0cmluZ2AgY29waWVzIGV4YWN0bHkgYHN0cmxlbihzdHIpICsgMWAgYnl0ZXMgZnJvbSB0aGUgc291cmNlIHN0cmluZy5cblxuQWgsIEkgbmVlZCB0byBjaGVjayB3aGF0IGhhcHBlbnMgd2l0aCB0aGUgc291cmNlIHN0cmluZyBub3cuIFRoZSBjb2RlIGlzIHVzaW5nIGBzdHJzY3B5YCwgYW5kIHRoZSBlYXJsaWVyIHZlcnNpb24gdXNlZCBgc3RyY3B5YCB3aGljaCwgb2YgY291cnNlLCBpcyBkYW5nZXJvdXMgd2l0aG91dCBleHBsaWNpdCBsZW5ndGggY2hlY2tzLiBTbyBgc3Ryc2NweWAgaXMgYW4gaW1wcm92ZW1lbnQuIE15IGNvbmNlcm4gbm93IGlzIHdoYXQgaGFwcGVucyBpZiBgc3Ryc2NweWAgZmFpbHM/IEl0IGxvb2tzIGxpa2UgaXQgcmV0dXJucyBgLUUyQklHYCBpZiB0aGUgc3RyaW5nIGlzIHRvbyBsb25nLCBidXQgKnN0aWxsKiBudWxsLXRlcm1pbmF0ZXMgdGhlIHN0cmluZywgdW5sZXNzIHRoZSBzaXplIGlzIDAuXG5cbk5vdywgbGV0J3MgY29tcGFyZSB0aGUgY2hhbmdlLiBUaGUgb2xkIGNvZGUgd2FzIGEgc2ltcGxlIGBzdHJjcHlgLCBidXQgbm93IGl0J3MgYHN0cnNjcHlgIHdpdGggYSBzaXplIGxpbWl0LCBgVElQQ19NQVhfQkVBUkVSX05BTUVgLiBPa2F5LCBzbyBpZiB0aGUgc291cmNlIHN0cmluZyAoYGItXHUwMDNlbmFtZWApIGlzIGV4YWN0bHkgYFRJUENfTUFYX0JFQVJFUl9OQU1FYCBieXRlcyBsb25nLCAqd2l0aG91dCogYSBudWxsIHRlcm1pbmF0b3IsIGBzdHJzY3B5YCB3aWxsIGNvcHkgYFRJUENfTUFYX0JFQVJFUl9OQU1FIC0gMWAgYnl0ZXMgYW5kIGFkZCBhIG51bGwgdGVybWluYXRvci4gVGhhdCBtZWFucyB0aGVyZSdzIGFsd2F5cyBhIG51bGwgdGVybWluYXRvciEgR29vZCwgdGhhdCdzIGNydWNpYWwuICBBbmQsIG9oLCByaWdodCAtIGBiLVx1MDAzZW5hbWVgIGlzIGFuIGFycmF5IG9mIHNpemUgYFRJUENfTUFYX0JFQVJFUl9OQU1FYCwgd2hpY2ggaXMgMzIgYnl0ZXMuLi4gSSB3aWxsIGRvdWJsZS1jaGVjayBgc3RydWN0IHRpcGNfYmVhcmVyYCBzdHJ1Y3R1cmUgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZywgYnV0IHRoaXMgbG9va3MgcHJldHR5IHNvbGlkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI3NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEyOjAxLjc1NDI1NDYzNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwOTcxNzg4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGlwY19iZWFyZXIgXFxcXHtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYmVhcmVyLmg9MTA0PXN0cnVjdCB0aXBjX21lZGlhIHtcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5oLTE1Ni0gKi9cXG5uZXQvdGlwYy9iZWFyZXIuaDoxNTc6c3RydWN0IHRpcGNfYmVhcmVyIHtcXG5uZXQvdGlwYy9iZWFyZXIuaC0xNTgtXFx0dm9pZCBfX3JjdSAqbWVkaWFfcHRyO1xcdFxcdFxcdC8qIGluaXRpYWxpemVkIGJ5IG1lZGlhICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEyOjA0LjE2Mzk4MjM2NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzEzNDQ1NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVElQQyBCZWFyZXIgU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBsZXQncyByZWZyZXNoIG91ciBtZW1vcnkgb24gdGhlIGBzdHJ1Y3QgdGlwY19iZWFyZXJgIGRlZmluaXRpb24uIFRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L3RpcGMvYmVhcmVyLmhgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhbmQgaG93IGl0IHNlcnZlcyBhcyB0aGUgY29yZSByZXByZXNlbnRhdGlvbiBmb3IgVElQQyBiZWFyZXJzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBmaWVsZHMgcmVsYXRlZCB0byB2YXJpb3VzIHVuZGVybHlpbmcgbmV0d29yayB0cmFuc3BvcnRzIGFuZCB1bmRlcnN0YW5kIHRoZSByb2xlIHRoaXMgc3RydWN0IHBsYXlzIGluIG1hbmFnaW5nIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGNvbm5lY3Rpb25zLiBJ4oCZbSBob3BpbmcgdG8gYXNzZXNzIHdoZXRoZXIgaXQgcHJvcGVybHkgYWRkcmVzc2VzIG1vZGVybiBuZXR3b3JraW5nIG5lZWRzIOKAkyBpcyBpdCBzdGlsbCByb2J1c3QsIHNjYWxhYmxlLCBhbmQgZWZmaWNpZW50PyBJcyB0aGVyZSBhbnl0aGluZyBoZXJlIHRoYXQgY291bGQgYmVjb21lIGEgYm90dGxlbmVjayBvciBhIHBvdGVudGlhbCBzb3VyY2Ugb2YgY29tcGxleGl0eSBhcyB3ZSBjb25zaWRlciBmdXR1cmUgZW5oYW5jZW1lbnRzPyBMZXQncyBnZXQgdG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM1MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEyOjA4Ljg3NzQzMTY5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL2JlYXJlci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1MDpcXHQgKiBAdXA6IGJlYXJlciB1cCBmbGFnIChiaXQgMClcXG4gMTUxOlxcdCAqIEByZWZjbnQ6IHRpcGNfYmVhcmVyIHJlZmVyZW5jZSBjb3VudGVyXFxuIDE1MjpcXHQgKlxcbiAxNTM6XFx0ICogTm90ZTogbWVkaWEtc3BlY2lmaWMgY29kZSBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZpZWxkc1xcbiAxNTQ6XFx0ICogaW5kaWNhdGVkIGJlbG93IHdoZW4gYSBiZWFyZXIgaXMgZW5hYmxlZDsgVElQQydzIGdlbmVyaWMgYmVhcmVyIGNvZGUgdGFrZXNcXG4gMTU1OlxcdCAqIGNhcmUgb2YgaW5pdGlhbGl6aW5nIGFsbCBvdGhlciBmaWVsZHMuXFxuIDE1NjpcXHQgKi9cXG4gMTU3OlxcdHN0cnVjdCB0aXBjX2JlYXJlciB7XFxuIDE1ODpcXHRcXHR2b2lkIF9fcmN1ICptZWRpYV9wdHI7XFx0XFx0XFx0LyogaW5pdGlhbGl6ZWQgYnkgbWVkaWEgKi9cXG4gMTU5OlxcdFxcdHUzMiBtdHU7XFx0XFx0XFx0XFx0LyogaW5pdGlhbGl6ZWQgYnkgbWVkaWEgKi9cXG4gMTYwOlxcdFxcdHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgYWRkcjtcXHRcXHQvKiBpbml0aWFsaXplZCBieSBtZWRpYSAqL1xcbiAxNjE6XFx0XFx0Y2hhciBuYW1lW1RJUENfTUFYX0JFQVJFUl9OQU1FXTtcXG4gMTYyOlxcdFxcdHN0cnVjdCB0aXBjX21lZGlhICptZWRpYTtcXG4gMTYzOlxcdFxcdHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgYmNhc3RfYWRkcjtcXG4gMTY0OlxcdFxcdHN0cnVjdCBwYWNrZXRfdHlwZSBwdDtcXG4gMTY1OlxcdFxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuIDE2NjpcXHRcXHR1MzIgcHJpb3JpdHk7XFxuIDE2NzpcXHRcXHR1MzIgbWluX3dpbjtcXG4gMTY4OlxcdFxcdHUzMiBtYXhfd2luO1xcbiAxNjk6XFx0XFx0dTMyIHRvbGVyYW5jZTtcXG4gMTcwOlxcdFxcdHUzMiBkb21haW47XFxuIDE3MTpcXHRcXHR1MzIgaWRlbnRpdHk7XFxuIDE3MjpcXHRcXHRzdHJ1Y3QgdGlwY19kaXNjb3ZlcmVyICpkaXNjO1xcbiAxNzM6XFx0XFx0Y2hhciBuZXRfcGxhbmU7XFxuIDE3NDpcXHRcXHR1MTYgZW5jYXBfaGxlbjtcXG4gMTc1OlxcdFxcdHVuc2lnbmVkIGxvbmcgdXA7XFxuIDE3NjpcXHRcXHRyZWZjb3VudF90IHJlZmNudDtcXG4gMTc3OlxcdH07XFxuIDE3ODpcXHRcXG4gMTc5OlxcdHN0cnVjdCB0aXBjX2JlYXJlcl9uYW1lcyB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEyOjA4Ljg3NzUyNDU5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDE5MDI2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgaW4gYG5hbWVgIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbmFtZWAgdmFyaWFibGU6IGBjaGFyIG5hbWVbVElQQ19NQVhfQkVBUkVSX05BTUVdO2AuIFJpZ2h0IGF3YXksIEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlLiBJZiB0aGUgaW5wdXQgYGItXHUwMDNlbmFtZWAgaXNuJ3QgcHJvcGVybHkgbnVsbC10ZXJtaW5hdGVkLCB0aGF0IGBzdHJjcHkobmFtZSwgYi1cdTAwM2VuYW1lKWAgY291bGQgdmVyeSBlYXNpbHkgbGVhZCB0byBhIHJlYWQgYW5kIHdyaXRlIGJ1ZmZlciBvdmVyZmxvdy4gVGhhdCdzIGEgY2xhc3NpYyB2dWxuZXJhYmlsaXR5LCBhbmQgSSBuZWVkIHRvIGJlIHN1cmUgaXQncyBub3QgcHJlc2VudCBoZXJlLlxuXG5CdXQgaG9sZCBvbiwgd2hlcmUgKmRvZXMqIGBiLVx1MDAzZW5hbWVgIGdldCBwb3B1bGF0ZWQ/IEFoLCBpdCdzIGluIGB0aXBjX2VuYWJsZV9iZWFyZXJgLiBPa2F5LCB0aGF0J3MgdGhlIG5leHQgcGxhY2UgdG8gaW52ZXN0aWdhdGUuIEkgbmVlZCB0byBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgdHJhY2UgdGhlIHBhdGggd2hlcmUgYGItXHUwMDNlbmFtZWAgaXMgYXNzaWduZWQuIFRoZSBrZXkgaXMgZ29pbmcgdG8gYmUgZGV0ZXJtaW5pbmcgaWYgdGhlcmUncyBhbnkgc2FmZWd1YXJkIHRoZXJlIGFnYWluc3Qgbm9uLW51bGwtdGVybWluYXRlZCBzdHJpbmdzIG9yIGV4Y2Vzc2l2ZSBsZW5ndGggaW4gdGhlIGlucHV0IGRhdGEuIFRoaXMgaXMgbG9va2luZyBsaWtlIGEgcG90ZW50aWFsIHByb2JsZW0gYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNDcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEyOjEyLjc3OTQzMDIxMloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2NzM5MTc5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX2VuYWJsZV9iZWFyZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYmVhcmVyLmM9MjI3PXZvaWQgdGlwY19iZWFyZXJfcmVtb3ZlX2Rlc3Qoc3RydWN0IG5ldCAqbmV0LCB1MzIgYmVhcmVyX2lkLCB1MzIgZGVzdClcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5jLTIzOC0vKipcXG5uZXQvdGlwYy9iZWFyZXIuYzoyMzk6ICogdGlwY19lbmFibGVfYmVhcmVyIC0gZW5hYmxlIGJlYXJlciB3aXRoIHRoZSBnaXZlbiBuYW1lXFxubmV0L3RpcGMvYmVhcmVyLmMtMjQwLSAqIEBuZXQ6IHRoZSBhcHBsaWNhYmxlIG5ldCBuYW1lc3BhY2VcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5jLTI0Ni0gKi9cXG5uZXQvdGlwYy9iZWFyZXIuYzoyNDc6c3RhdGljIGludCB0aXBjX2VuYWJsZV9iZWFyZXIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxcbm5ldC90aXBjL2JlYXJlci5jLTI0OC1cXHRcXHRcXHQgICAgICB1MzIgZGlzY19kb21haW4sIHUzMiBwcmlvLFxcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmM9MTAwOD1pbnQgX190aXBjX25sX2JlYXJlcl9lbmFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5jLTEwNDctXFxubmV0L3RpcGMvYmVhcmVyLmM6MTA0ODpcXHRyZXR1cm4gdGlwY19lbmFibGVfYmVhcmVyKG5ldCwgYmVhcmVyLCBkb21haW4sIHByaW8sIGF0dHJzLFxcbm5ldC90aXBjL2JlYXJlci5jLTEwNDktXFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2VleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNToxMjoxNC43NDY4Mjg5ODdaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA5ODI2MDYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipDaGVja2luZyBgdGlwY19lbmFibGVfYmVhcmVyYCBpbiBgbmV0L3RpcGMvYmVhcmVyLmNgKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBiZWFyZXIgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGJlYXJlciBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbiBpcyBoYW5kbGVkLiBUaGUgZnVuY3Rpb24gYHRpcGNfZW5hYmxlX2JlYXJlcmAgaW4gYG5ldC90aXBjL2JlYXJlci5jYCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJIHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBob2xkcyB0aGUgY29yZSBsb2dpYyBmb3IgZW5hYmxpbmcgYSBwYXJ0aWN1bGFyIHRyYW5zcG9ydCBiZWFyZXIsIHdoYXRldmVyIHRoYXQgbWF5IGJlLiBMZXQncyBzZWUgd2hhdCBraW5kIG9mIGNoZWNrcyBpdCBwZXJmb3Jtcywgd2hpY2ggZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBUSVBDIG5ldHdvcmtpbmcgc3RhY2suIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIG9uIGxpbmsgZXN0YWJsaXNobWVudCwgcm91dGUgY29uZmlndXJhdGlvbiwgcGVyaGFwcyBldmVuIHNvbWUgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBiZWFyZXIgYXZhaWxhYmlsaXR5IG9yIHJlc291cmNlIGFsbG9jYXRpb24uIFRoZSBuYW1pbmcgc3VnZ2VzdHMgaXQncyB0aGUga2V5IGZ1bmN0aW9uIEknbSBhZnRlciwgYnV0IEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgaXQgZml0cyB0aGUgYnJvYWRlciBjb250ZXh0IGFzIEkgZGlnIGRlZXBlci4gVGhpcyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIGJlYXJlciBsaWZlY3ljbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjgxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MTI6MTkuODQ1MDkyNTY1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL2JlYXJlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0NzpcXHRzdGF0aWMgaW50IHRpcGNfZW5hYmxlX2JlYXJlcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXFxuIDI0ODpcXHRcXHRcXHRcXHQgICAgICB1MzIgZGlzY19kb21haW4sIHUzMiBwcmlvLFxcbiAyNDk6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5sYXR0ciAqYXR0cltdLFxcbiAyNTA6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiAyNTE6XFx0e1xcbiAyNTI6XFx0XFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XFxuIDI1MzpcXHRcXHRzdHJ1Y3QgdGlwY19iZWFyZXJfbmFtZXMgYl9uYW1lcztcXG4gMjU0OlxcdFxcdGludCB3aXRoX3RoaXNfcHJpbyA9IDE7XFxuIDI1NTpcXHRcXHRzdHJ1Y3QgdGlwY19iZWFyZXIgKmI7XFxuIDI1NjpcXHRcXHRzdHJ1Y3QgdGlwY19tZWRpYSAqbTtcXG4gMjU3OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDI1ODpcXHRcXHRpbnQgYmVhcmVyX2lkID0gMDtcXG4gMjU5OlxcdFxcdGludCByZXMgPSAtRUlOVkFMO1xcbiAyNjA6XFx0XFx0Y2hhciAqZXJyc3RyID0gXFxcIlxcXCI7XFxuIDI2MTpcXHRcXHR1MzIgaTtcXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0aWYgKCFiZWFyZXJfbmFtZV92YWxpZGF0ZShuYW1lLCBcXHUwMDI2Yl9uYW1lcykpIHtcXG4gMjY0OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIklsbGVnYWwgbmFtZVxcXCIpO1xcbiAyNjU6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gMjY2OlxcdFxcdH1cXG4gMjY3OlxcdFxcbiAyNjg6XFx0XFx0aWYgKHByaW8gXFx1MDAzZSBUSVBDX01BWF9MSU5LX1BSSSBcXHUwMDI2XFx1MDAyNiBwcmlvICE9IFRJUENfTUVESUFfTElOS19QUkkpIHtcXG4gMjY5OlxcdFxcdFxcdGVycnN0ciA9IFxcXCJpbGxlZ2FsIHByaW9yaXR5XFxcIjtcXG4gMjcwOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIklsbGVnYWwgcHJpb3JpdHlcXFwiKTtcXG4gMjcxOlxcdFxcdFxcdGdvdG8gcmVqZWN0ZWQ7XFxuIDI3MjpcXHRcXHR9XFxuIDI3MzpcXHRcXG4gMjc0OlxcdFxcdG0gPSB0aXBjX21lZGlhX2ZpbmQoYl9uYW1lcy5tZWRpYV9uYW1lKTtcXG4gMjc1OlxcdFxcdGlmICghbSkge1xcbiAyNzY6XFx0XFx0XFx0ZXJyc3RyID0gXFxcIm1lZGlhIG5vdCByZWdpc3RlcmVkXFxcIjtcXG4gMjc3OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIk1lZGlhIG5vdCByZWdpc3RlcmVkXFxcIik7XFxuIDI3ODpcXHRcXHRcXHRnb3RvIHJlamVjdGVkO1xcbiAyNzk6XFx0XFx0fVxcbiAyODA6XFx0XFxuIDI4MTpcXHRcXHRpZiAocHJpbyA9PSBUSVBDX01FRElBX0xJTktfUFJJKVxcbiAyODI6XFx0XFx0XFx0cHJpbyA9IG0tXFx1MDAzZXByaW9yaXR5O1xcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHQvKiBDaGVjayBuZXcgYmVhcmVyIHZzIGV4aXN0aW5nIG9uZXMgYW5kIGZpbmQgZnJlZSBiZWFyZXIgaWQgaWYgYW55ICovXFxuIDI4NTpcXHRcXHRiZWFyZXJfaWQgPSBNQVhfQkVBUkVSUztcXG4gMjg2OlxcdFxcdGkgPSBNQVhfQkVBUkVSUztcXG4gMjg3OlxcdFxcdHdoaWxlIChpLS0gIT0gMCkge1xcbiAyODg6XFx0XFx0XFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UodG4tXFx1MDAzZWJlYXJlcl9saXN0W2ldKTtcXG4gMjg5OlxcdFxcdFxcdGlmICghYikge1xcbiAyOTA6XFx0XFx0XFx0XFx0YmVhcmVyX2lkID0gaTtcXG4gMjkxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAyOTI6XFx0XFx0XFx0fVxcbiAyOTM6XFx0XFx0XFx0aWYgKCFzdHJjbXAobmFtZSwgYi1cXHUwMDNlbmFtZSkpIHtcXG4gMjk0OlxcdFxcdFxcdFxcdGVycnN0ciA9IFxcXCJhbHJlYWR5IGVuYWJsZWRcXFwiO1xcbiAyOTU6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQWxyZWFkeSBlbmFibGVkXFxcIik7XFxuIDI5NjpcXHRcXHRcXHRcXHRnb3RvIHJlamVjdGVkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNToxMjoxOS44NDUxOTI3NjVaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM2NjA5MDgzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKlRyYWNpbmcgdGhlIERhdGEgRmxvdyBvZiBgYi1cdTAwM2VuYW1lYCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGItXHUwMDNlbmFtZWAgZmllbGQgaXMgZ2V0dGluZyBpdHMgdmFsdWUuIFRoaXMgaXMgYSBjb21tb24gZGVidWdnaW5nIHN0ZXAsIGVzcGVjaWFsbHkgd2hlbiB5b3UncmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgb3IgaW5jb3JyZWN0IGRhdGEuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hhdCBpcyBgYmA/IElzIGl0IGEgcG9pbnRlciB0byBhIHN0cnVjdCwgYSBjbGFzcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgdHlwZSBpcyB0aGUgYG5hbWVgIG1lbWJlcj8gVGhlIG1vcmUgSSB1bmRlcnN0YW5kIGFib3V0IHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgYmV0dGVyIEkgY2FuIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBkYXRhIGlzIGNvbWluZyBmcm9tLlxuXG5HaXZlbiB0aGF0IEkgYWxyZWFkeSBrbm93IHRoZSBjb250ZXh0LCB0aGUgYXBwcm9hY2ggaXMgY2xlYXI6IEkgbmVlZCB0byBkbyBhIGNvZGUgc2VhcmNoLiBJJ2xsIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBgYmAgdmFyaWFibGUsIG9yIGluc3RhbmNlcyBvZiB0aGUgdHlwZSBgYmAgYmVsb25ncyB0bywgaXMgZGVjbGFyZWQgb3IgaW5zdGFudGlhdGVkLiBJJ2xsIGZvbGxvdyB0aGF0IGluc3RhbnRpYXRpb24gcG9pbnQgdG8gd2hlcmUgaXQgZ2V0cyBhc3NpZ25lZCB0by4gVGhlbiwgSSB3aWxsIHRyYWNlIHRoaXMgcG9pbnRlciB0aHJvdWdoIHRoZSBjb2RlIHRvIGlkZW50aWZ5IGV2ZXJ5IHBsYWNlIHdoZXJlIHRoZSBgbmFtZWAgbWVtYmVyIG1pZ2h0IGJlIGdldHRpbmcgbW9kaWZpZWQsIGluY2x1ZGluZyBhbnkgY29uc3RydWN0b3JzIG9yIG90aGVyIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucy4gSSB3aWxsIGFsc28gYmUgbWluZGZ1bCBvZiBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLCBlc3BlY2lhbGx5IGlmIGBiYCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQuIEkgd2lsbCBsb29rIGZvciBhbnkgYXNzaWdubWVudHMgb3IgZnVuY3Rpb24gY2FsbHMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBhZmZlY3QgdGhhdCBmaWVsZC4gRXNzZW50aWFsbHksIEknbSBwZXJmb3JtaW5nIGEgZm9yd2FyZCBhbmFseXNpcyDigJMgc3RhcnRpbmcgYXQgdGhlIGRlZmluaXRpb24gb2YgYGJgIGFuZCBmb2xsb3dpbmcgaXRzIGxpZmUgdGhyb3VnaCB0aGUgY29kZSB0byB3aGVyZSBgYi1cdTAwM2VuYW1lYCBpcyBwb3B1bGF0ZWQuIElmIHRoZSBjb2RlYmFzZSBpcyBsYXJnZSwgSSBtaWdodCBuZWVkIHRvIG5hcnJvdyBteSBzZWFyY2ggZG93biBieSBsb29raW5nIGZvciByZWxhdGVkIGZ1bmN0aW9ucywgbW9kdWxlcywgb3IgZmlsZSBuYW1lcy4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIHBhdHRlcm5zIGxpa2UgXCJiLVx1MDAzZW5hbWUgPVwiIG9yIGV2ZW4gY2FsbHMgdG8gcG90ZW50aWFsbHkgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgc2V0X25hbWUoYiwgLi4uKWAgb3IgZXZlbiBpbmRpcmVjdCBpbml0aWFsaXNhdGlvbiB0aHJvdWdoIHBvaW50ZXJzIG9yIGZ1bmN0aW9uIGNhbGxzLiBNeSBnb2FsIGlzIHRvIGV4aGF1c3RpdmVseSB0cmFjZSB0aGUgcG9zc2libGUgcGF0aHMgb2YgZGF0YSBmbG93IHRvIGlkZW50aWZ5IHRoZSBzaW5nbGUgc291cmNlIG9yIG11bHRpcGxlIHNvdXJjZXMgb2YgdGhhdCBmaWVsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEyOjMzLjUwNjEwNTMyNFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3RpcGMvYmVhcmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjk3OlxcdFxcdFxcdH1cXG4gMjk4OlxcdFxcbiAyOTk6XFx0XFx0XFx0aWYgKGItXFx1MDAzZXByaW9yaXR5ID09IHByaW8gXFx1MDAyNlxcdTAwMjZcXG4gMzAwOlxcdFxcdFxcdCAgICAoKyt3aXRoX3RoaXNfcHJpbyBcXHUwMDNlIDIpKSB7XFxuIDMwMTpcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJCZWFyZXIgXFx1MDAzYyVzXFx1MDAzZTogYWxyZWFkeSAyIGJlYXJlcnMgd2l0aCBwcmlvcml0eSAldVxcXFxuXFxcIixcXG4gMzAyOlxcdFxcdFxcdFxcdFxcdG5hbWUsIHByaW8pO1xcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRcXHRcXHRpZiAocHJpbyA9PSBUSVBDX01JTl9MSU5LX1BSSSkge1xcbiAzMDU6XFx0XFx0XFx0XFx0XFx0ZXJyc3RyID0gXFxcImNhbm5vdCBhZGp1c3QgdG8gbG93ZXJcXFwiO1xcbiAzMDY6XFx0XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQ2Fubm90IGFkanVzdCB0byBsb3dlclxcXCIpO1xcbiAzMDc6XFx0XFx0XFx0XFx0XFx0Z290byByZWplY3RlZDtcXG4gMzA4OlxcdFxcdFxcdFxcdH1cXG4gMzA5OlxcdFxcbiAzMTA6XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiQmVhcmVyIFxcdTAwM2Mlc1xcdTAwM2U6IHRyeWluZyB3aXRoIGFkanVzdGVkIHByaW9yaXR5XFxcXG5cXFwiLFxcbiAzMTE6XFx0XFx0XFx0XFx0XFx0bmFtZSk7XFxuIDMxMjpcXHRcXHRcXHRcXHRwcmlvLS07XFxuIDMxMzpcXHRcXHRcXHRcXHRiZWFyZXJfaWQgPSBNQVhfQkVBUkVSUztcXG4gMzE0OlxcdFxcdFxcdFxcdGkgPSBNQVhfQkVBUkVSUztcXG4gMzE1OlxcdFxcdFxcdFxcdHdpdGhfdGhpc19wcmlvID0gMTtcXG4gMzE2OlxcdFxcdFxcdH1cXG4gMzE3OlxcdFxcdH1cXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0aWYgKGJlYXJlcl9pZCBcXHUwMDNlPSBNQVhfQkVBUkVSUykge1xcbiAzMjA6XFx0XFx0XFx0ZXJyc3RyID0gXFxcIm1heCAzIGJlYXJlcnMgcGVybWl0dGVkXFxcIjtcXG4gMzIxOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIk1heCAzIGJlYXJlcnMgcGVybWl0dGVkXFxcIik7XFxuIDMyMjpcXHRcXHRcXHRnb3RvIHJlamVjdGVkO1xcbiAzMjM6XFx0XFx0fVxcbiAzMjQ6XFx0XFxuIDMyNTpcXHRcXHRiID0ga3phbGxvY19vYmooKmIsIEdGUF9BVE9NSUMpO1xcbiAzMjY6XFx0XFx0aWYgKCFiKVxcbiAzMjc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMyODpcXHRcXG4gMzI5OlxcdFxcdHN0cnNjcHkoYi1cXHUwMDNlbmFtZSwgbmFtZSk7XFxuIDMzMDpcXHRcXHRiLVxcdTAwM2VtZWRpYSA9IG07XFxuIDMzMTpcXHRcXHRyZXMgPSBtLVxcdTAwM2VlbmFibGVfbWVkaWEobmV0LCBiLCBhdHRyKTtcXG4gMzMyOlxcdFxcdGlmIChyZXMpIHtcXG4gMzMzOlxcdFxcdFxcdGtmcmVlKGIpO1xcbiAzMzQ6XFx0XFx0XFx0ZXJyc3RyID0gXFxcImZhaWxlZCB0byBlbmFibGUgbWVkaWFcXFwiO1xcbiAzMzU6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRmFpbGVkIHRvIGVuYWJsZSBtZWRpYVxcXCIpO1xcbiAzMzY6XFx0XFx0XFx0Z290byByZWplY3RlZDtcXG4gMzM3OlxcdFxcdH1cXG4gMzM4OlxcdFxcbiAzMzk6XFx0XFx0Yi1cXHUwMDNlaWRlbnRpdHkgPSBiZWFyZXJfaWQ7XFxuIDM0MDpcXHRcXHRiLVxcdTAwM2V0b2xlcmFuY2UgPSBtLVxcdTAwM2V0b2xlcmFuY2U7XFxuIDM0MTpcXHRcXHRiLVxcdTAwM2VtaW5fd2luID0gbS1cXHUwMDNlbWluX3dpbjtcXG4gMzQyOlxcdFxcdGItXFx1MDAzZW1heF93aW4gPSBtLVxcdTAwM2VtYXhfd2luO1xcbiAzNDM6XFx0XFx0Yi1cXHUwMDNlZG9tYWluID0gZGlzY19kb21haW47XFxuIDM0NDpcXHRcXHRiLVxcdTAwM2VuZXRfcGxhbmUgPSBiZWFyZXJfaWQgKyAnQSc7XFxuIDM0NTpcXHRcXHRiLVxcdTAwM2Vwcmlvcml0eSA9IHByaW87XFxuIDM0NjpcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmItXFx1MDAzZXJlZmNudCwgMSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEyOjMzLjUwNjIxODIwNFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDQwNTczNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU3RyaW5nIENvcHlpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBgYmAgYmVpbmcgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqKCpiLCBHRlBfQVRPTUlDKTtgLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCBcIkFoYSEgVGhpcyB6ZXJvcyB0aGUgZW50aXJlIHN0cnVjdHVyZS5cIiBCdXQgdGhlbiBJIHBhdXNlLiBga3phbGxvY19vYmpgLi4uIGlzIHRoYXQgYSBtYWNybz8gSXQncyBub3Qgc3RhbmRhcmQga2VybmVsLCBzbyBJJ2xsIGNoZWNrIGl0IHF1aWNrbHkuIEl0J3MgbGlrZWx5IGEgd3JhcHBlciwgbWF5YmUganVzdCBga3phbGxvYyhzaXplb2YoKmIpLCBHRlBfQVRPTUlDKWAuIFllcCwgYWZ0ZXIgYSBxdWljayBjaGVjaywgaXQgbG9va3MgbGlrZSBpdCdzIGEgd3JhcHBlciBmb3IgYGt6YWxsb2NgLCB3aGljaCBkb2VzIGluZGVlZCB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LlxuXG5OZXh0LCBJIHNlZSBgc3Ryc2NweShiLVx1MDAzZW5hbWUsIG5hbWUpO2AgYW5kIG15IGJyYWluIGltbWVkaWF0ZWx5IGZsYWdzIHRoYXQgZm9yIGEgc3RyaW5nIGNvcHkuIEJ1dCB3YWl0IGEgc2Vjb25kLi4uIGBzdHJzY3B5YCBvbmx5IHRha2VzIHR3byBhcmd1bWVudHMgaGVyZT8gVGhhdCBkb2Vzbid0IHNlZW0gcmlnaHQuIGBzdHJzY3B5YCBzaG91bGQgdGFrZSB0aHJlZS4gSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBjYWxsIGluIGB0aXBjX2VuYWJsZV9iZWFyZXJgIGFuZCB2ZXJpZnkgdGhlIHVzYWdlLiBBaCB5ZXMsIGl0J3MgYHN0cnNjcHkoYi1cdTAwM2VuYW1lLCBuYW1lLCBUSVBDX01BWF9CRUFSRVJfTkFNRSlgLiBCZXR0ZXIgY2hlY2sgdGhlIGRlZmluaXRpb24gdG8gYmUgc3VyZS4gQWxyaWdodCwgSSd2ZSBnb3QgaXQgLSB0aGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIGJ1ZmZlciBzaXplLiBHb3QgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTA1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MTI6MzkuOTQ2Nzk0MzFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjMyNjk2NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3Ryc2NweVxcXFwoYi1cXHUwMDNlbmFtZSwgbmFtZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9iZWFyZXIuYz0yNDc9c3RhdGljIGludCB0aXBjX2VuYWJsZV9iZWFyZXIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmMtMzI4LVxcbm5ldC90aXBjL2JlYXJlci5jOjMyOTpcXHRzdHJzY3B5KGItXFx1MDAzZW5hbWUsIG5hbWUpO1xcbm5ldC90aXBjL2JlYXJlci5jLTMzMC1cXHRiLVxcdTAwM2VtZWRpYSA9IG07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEyOjQyLjM3MDA2OTMyNloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTE5ODU2NzE3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmUqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBTZWVpbmcgYHN0cnNjcHlgIHdpdGggdHdvIGFyZ3VtZW50cyBpbW1lZGlhdGVseSBmbGFncyBpdC4gUmlnaHQsIGl0J3MgYSBtYWNybyDigJMgYHN0cnNjcHkoZGVzdCwgc3JjLCAuLi4pYCDigJMgYW5kIGl0IGNhbiB3b3JrIHdpdGggdHdvIGFyZ3VtZW50cyBpZiB0aGUgZGVzdGluYXRpb24gaXMgYW4gYXJyYXkuIEknbSBmb2N1c2luZyBvbiB0aGUgYWxsb2NhdGlvbiBvZiBgYi1cdTAwM2VuYW1lYCB3aXRoIGBremFsbG9jYC4gVGhhdCB6ZXJvZXMgaXQgb3V0IGNvbXBsZXRlbHkuIFRoZW4gYHN0cnNjcHkoYi1cdTAwM2VuYW1lLCBuYW1lKWAgY29waWVzIHRoZSBzb3VyY2Ugc3RyaW5nIGFuZCBudWxsLXRlcm1pbmF0ZXMgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2l0aCB0aGUgcmVtYWluaW5nIGJ5dGVzIG9mIGBiLVx1MDAzZW5hbWVgIHJlbWFpbmluZyB6ZXJvZWQuIFNvIGBiLVx1MDAzZW5hbWVgIGVuZHMgdXAgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBib3RoIHRoZSBzdHJpbmcgYW5kIGFueSBuZWNlc3NhcnkgcGFkZGluZyB6ZXJvZXMuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBgdGlwY19iZWFyZXJfZ2V0X25hbWVgLiBJdCB1c2VzIGBzdHJzY3B5YCBhZ2FpbjogYHN0cnNjcHkobmFtZSwgYi1cdTAwM2VuYW1lLCBUSVBDX01BWF9CRUFSRVJfTkFNRSlgLiBCdXQgaGVyZSwgYG5hbWVgIGlzIGBiZWFyZXJfbmFtZWAsIGEgbG9jYWwgYGNoYXJgIGFycmF5IGluIGBfX3RpcGNfbmxfYWRkX21vbml0b3JgLiBJZiBgc3Ryc2NweWAgaXMgdXNlZCwgaXQgb25seSBjb3BpZXMgdGhlIHN0cmluZyBhbmQgbnVsbC10ZXJtaW5hdGVzIGl0LiBJdCAqZG9lc24ndCogemVybyB0aGUgcmVzdCBvZiBgYmVhcmVyX25hbWVgLiBUaGF0IG1lYW5zIHRoZSByZW1haW5pbmcgcG9ydGlvbiBvZiBgYmVhcmVyX25hbWVgIGlzIGZpbGxlZCB3aXRoIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5LlxuXG5UaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgY2FsbCB0byBgbmxhX3B1dF9zdHJpbmcobXNnLVx1MDAzZXNrYiwgVElQQ19OTEFfTU9OX0JFQVJFUl9OQU1FLCBiZWFyZXJfbmFtZSlgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBkb2VzIGBubGFfcHV0X3N0cmluZ2AgY29weSB0aGUgKndob2xlKiBgYmVhcmVyX25hbWVgIGFycmF5LCBwb3RlbnRpYWxseSBleHBvc2luZyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCB0aGF0J3Mgbm90IHdoYXQgdGhlIGNvZGUgc2hvd3MuIERpdmluZyBpbnRvIHRoZSBgbmxhX3B1dF9zdHJpbmdgIG1hY3JvLCBpdCBzaW1wbHkgdXNlcyBgc3RybGVuKHN0cikgKyAxYCBhcyB0aGUgc2l6ZSBvZiB0aGUgY29weS4gU28sIGl0IG9ubHkgY29waWVzIHRoZSBzdHJpbmcgYW5kIHRoZSBudWxsIHRlcm1pbmF0b3IuIFRoYXQncyBnb29kLlxuXG5BbmQsIGxvb2tpbmcgYXQgYF9fbmxhX3Jlc2VydmVgIGNvbmZpcm1zIHRoYXQgdGhlIGF0dHJpYnV0ZSBnZXRzIHBhZGRlZCB3aXRoIHplcm9lcy4gSSB3YXMgcmlnaHQg4oCTIHRoZSB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGBiZWFyZXJfbmFtZWAgYXJlICpuZXZlciogY29waWVkIGludG8gdGhlIHNrYiEgVGhhdCBtZWFucywgbm8sIHRoaXMgbG9va3Mgc2FmZSBmcm9tIHRoYXQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuXG5cbkJ1dCwgaXMgdGhlcmUgKmFub3RoZXIqIGNhbGxlciBvZiBgdGlwY19iZWFyZXJfZ2V0X25hbWVgIHRoYXQgbWlnaHQgYmUgdXNpbmcgdGhlIHJldHVybmVkIHN0cmluZyBkaWZmZXJlbnRseT8gVGhhdCdzIHdoYXQgSSBoYXZlIHRvIGNoZWNrIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MjksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MTI6NTMuNTY4NjM4OTc0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc5NTg5MjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfYmVhcmVyX2dldF9uYW1lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2JlYXJlci5jPTE4MT1zdHJ1Y3QgdGlwY19iZWFyZXIgKnRpcGNfYmVhcmVyX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmMtMTk0LVxcbm5ldC90aXBjL2JlYXJlci5jOjE5NTovKiAgICAgdGlwY19iZWFyZXJfZ2V0X25hbWUgLSBnZXQgdGhlIGJlYXJlciBuYW1lIGZyb20gaXRzIGlkLlxcbm5ldC90aXBjL2JlYXJlci5jLTE5Ni0gKiAgICAgQG5ldDogbmV0d29yayBuYW1lc3BhY2VcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5jLTE5OS0gKi9cXG5uZXQvdGlwYy9iZWFyZXIuYzoyMDA6aW50IHRpcGNfYmVhcmVyX2dldF9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqbmFtZSwgdTMyIGJlYXJlcl9pZClcXG5uZXQvdGlwYy9iZWFyZXIuYy0yMDEte1xcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmg9MjI4PXN0cnVjdCB0aXBjX2JlYXJlciAqdGlwY19iZWFyZXJfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbm5ldC90aXBjL2JlYXJlci5oOjIyOTppbnQgdGlwY19iZWFyZXJfZ2V0X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICpuYW1lLCB1MzIgYmVhcmVyX2lkKTtcXG5uZXQvdGlwYy9iZWFyZXIuaC0yMzAtc3RydWN0IHRpcGNfbWVkaWEgKnRpcGNfbWVkaWFfZmluZChjb25zdCBjaGFyICpuYW1lKTtcXG4tLVxcbm5ldC90aXBjL21vbml0b3IuYz04Mjc9aW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxcbi0tXFxubmV0L3RpcGMvbW9uaXRvci5jLTgzNS1cXG5uZXQvdGlwYy9tb25pdG9yLmM6ODM2OlxcdHJldCA9IHRpcGNfYmVhcmVyX2dldF9uYW1lKG5ldCwgYmVhcmVyX25hbWUsIGJlYXJlcl9pZCk7XFxubmV0L3RpcGMvbW9uaXRvci5jLTgzNy1cXHRpZiAocmV0IHx8ICFtb24pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEyOjU1LjI0ODI0MDMxOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjcxNjI4OTcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTZWVtaW5nbHkgU2ltcGxlIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYWl0LCB3aHkgd2FzIGBzdHJjcHlgIGNoYW5nZWQgdG8gYHN0cnNjcHlgIGhlcmU/XCIgVGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgd2l0aGluIGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAsIGNhbGxlZCBvbmx5IGJ5IGBfX3RpcGNfbmxfYWRkX21vbml0b3JgLiBUaGF0IGZ1bmN0aW9uIHVzZXMgYG5sYV9wdXRfc3RyaW5nYCwgd2hpY2ggb25seSBjb3BpZXMgdGhlIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGxlbmd0aCwgc28gdGhlcmUncyBubyBpbW1lZGlhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayBpc3N1ZSBpbiB0aGUgY29weSB0byBuZXRsaW5rLlxuXG5CdXQgKndoeSogdGhlIGBzdHJjcHlgIHRvIGBzdHJzY3B5YCBjaGFuZ2U/IE15IGd1dCBzYXlzIGJ1ZmZlciBvdmVyZmxvdyBwcmV2ZW50aW9uLCBjbGFzc2ljLiBgc3RyY3B5YCBpcyBkYW5nZXJvdXM7IGlmIGBiLVx1MDAzZW5hbWVgIGlzbid0IG51bGwtdGVybWluYXRlZCBvciBpcyBsb25nZXIgdGhhbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCB5b3UndmUgZ290IGEgcHJvYmxlbS4gTGV0J3Mgc2VlLi4uIGBiLVx1MDAzZW5hbWVgIGlzIGFuIGFycmF5IG9mIGBUSVBDX01BWF9CRUFSRVJfTkFNRWAgc2l6ZSwgYW5kIHRoZSBkZXN0aW5hdGlvbiBgYmVhcmVyX25hbWVgIGlzIGFsc28gYFRJUENfTUFYX0JFQVJFUl9OQU1FYC4gIEEgbm9uLW51bGwtdGVybWluYXRlZCBgYi1cdTAwM2VuYW1lYCB3b3VsZCBjYXVzZSBgc3RyY3B5YCB0byByZWFkIGFuZCB3cml0ZSBvdXQgb2YgYm91bmRzLiBCb29tLCBvdXQtb2YtYm91bmRzIHJlYWQvd3JpdGUuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhhdCEgYGJlYXJlcl9uYW1lYCBpcyBvbiB0aGUgc3RhY2ssIHdoaWNoIEtBU0FOIGhhbmRsZXMsIGFuZCBgYi1cdTAwM2VuYW1lYCBpcyBpbiBhIGhlYXAtYWxsb2NhdGVkIHN0cnVjdCwgYWxzbyBoYW5kbGVkIGJ5IEtBU0FOLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgaXMgYGItXHUwMDNlbmFtZWAgKmd1YXJhbnRlZWQqIHRvIGJlIG51bGwtdGVybWluYXRlZD8gIEFoLCB5ZXMhIFdoZW4gYGJgIGlzIGFsbG9jYXRlZCwgaXQncyB6ZXJvZWQsIGFuZCB0aGF0IGBzdHJzY3B5YCBjYWxsIGVuc3VyZXMgbnVsbCB0ZXJtaW5hdGlvbi4gU28sIHVubGVzcyBpdCdzIGxhdGVyIGNvcnJ1cHRlZCwgYGItXHUwMDNlbmFtZWAgKmlzKiBudWxsLXRlcm1pbmF0ZWQuIFNvIGBzdHJjcHlgIGlzIHNhZmUhIFdoeSB0aGUgcGF0Y2ggdGhlbj9cblxuTWF5YmUgYSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiByaXNrPyBNYXliZSB0aGlzIGlzIGp1c3QgYSBnZW5lcmFsIGNsZWFudXAgZWZmb3J0IHRvIHN0YW5kYXJkaXplIGBzdHJzY3B5YCBhY3Jvc3MgdGhlIGtlcm5lbCwgd2hpY2ggSSBoYXZlIHNlZW4gaGFwcGVuLiBJJ2QgbG92ZSB0byBzZWUgdGhlIGNvbW1pdCBtZXNzYWdlLi4uIGJ1dCwgSSBkb24ndCBoYXZlIGl0LlxuXG5Pa2F5LCBsZXQgbWUganVzdCBjaGVjayB0aGUgcGF0Y2ggYWdhaW46XG5cbmBgYGNcbi1cdHN0cmNweShuYW1lLCBiLVx1MDAzZW5hbWUpO1xuK1x0c3Ryc2NweShuYW1lLCBiLVx1MDAzZW5hbWUsIFRJUENfTUFYX0JFQVJFUl9OQU1FKTtcbmBgYFxuXG5ZZXAsIHN0YW5kYXJkIGBzdHJjcHlgIHRvIGBzdHJzY3B5YCByZXBsYWNlbWVudCwgYSBiZWx0LWFuZC1zdXNwZW5kZXJzIGtpbmQgb2YgbW92ZSB0byBwcmV2ZW50IHBvdGVudGlhbCBvdmVyZmxvd3MsIHdoaWNoIGlzbid0IHRoZSByb290IG9mIHRoZSBpc3N1ZS5cblxuRG9lcyB0aGlzIGZpeCBhbiAqdW5pbml0aWFsaXplZCogbWVtb3J5IHVzZSwgdGhlbj8gIE5vLiBJZiBhbnl0aGluZywgYHN0cnNjcHlgIGxlYXZlcyB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyIHVuaW5pdGlhbGl6ZWQsIGp1c3QgbGlrZSBgc3RyY3B5YC5cblxuTm93LCBpZiBgYi1cdTAwM2VuYW1lYCB3YXMgKm5vdCogbnVsbC10ZXJtaW5hdGVkLCBgc3RyY3B5YCB3b3VsZCByZWFkIGJleW9uZCBgYi1cdTAwM2VuYW1lYCAoT09CIHJlYWQpIGFuZCB3cml0ZSBwYXN0IGBuYW1lYCAoT09CIHdyaXRlKS4gS0FTQU4gY2F0Y2hlcyBib3RoLlxuXG5JcyB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhaz8gSWYgYGItXHUwMDNlbmFtZWAgd2Fzbid0IG51bGwtdGVybWluYXRlZCwgYHN0cmNweWAgd291bGQgY29weSB3aGF0ZXZlciBnYXJiYWdlIGRhdGEgaXMgYWZ0ZXIgYGItXHUwMDNlbmFtZWAgdW50aWwgaXQgZmluZHMgYSBudWxsIGJ5dGUsIHBvdGVudGlhbGx5IGxlYWtpbmcgbWVtb3J5IGlmIGNvcGllZCB0byB1c2Vyc3BhY2UuIEJ1dCBgbmxhX3B1dF9zdHJpbmdgIHdvdWxkIHJlYWQgdW50aWwgYSBudWxsIGJ5dGUgdG9vLCBzbyBpdCBsb29rcyBsaWtlIGl0J3MgYSB3YXNoLiBIb3dldmVyLCBpcyBgYi1cdTAwM2VuYW1lYCBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmU/IEkgbmVlZCB0byBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5OTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MTM6MTEuOTY0NTMyNDA0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGlwYy9iZWFyZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNTcsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTc6XFx0c3RydWN0IHRpcGNfYmVhcmVyIHtcXG4gMTU4OlxcdFxcdHZvaWQgX19yY3UgKm1lZGlhX3B0cjtcXHRcXHRcXHQvKiBpbml0aWFsaXplZCBieSBtZWRpYSAqL1xcbiAxNTk6XFx0XFx0dTMyIG10dTtcXHRcXHRcXHRcXHQvKiBpbml0aWFsaXplZCBieSBtZWRpYSAqL1xcbiAxNjA6XFx0XFx0c3RydWN0IHRpcGNfbWVkaWFfYWRkciBhZGRyO1xcdFxcdC8qIGluaXRpYWxpemVkIGJ5IG1lZGlhICovXFxuIDE2MTpcXHRcXHRjaGFyIG5hbWVbVElQQ19NQVhfQkVBUkVSX05BTUVdO1xcbiAxNjI6XFx0XFx0c3RydWN0IHRpcGNfbWVkaWEgKm1lZGlhO1xcbiAxNjM6XFx0XFx0c3RydWN0IHRpcGNfbWVkaWFfYWRkciBiY2FzdF9hZGRyO1xcbiAxNjQ6XFx0XFx0c3RydWN0IHBhY2tldF90eXBlIHB0O1xcbiAxNjU6XFx0XFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcXG4gMTY2OlxcdFxcdHUzMiBwcmlvcml0eTtcXG4gMTY3OlxcdFxcdHUzMiBtaW5fd2luO1xcbiAxNjg6XFx0XFx0dTMyIG1heF93aW47XFxuIDE2OTpcXHRcXHR1MzIgdG9sZXJhbmNlO1xcbiAxNzA6XFx0XFx0dTMyIGRvbWFpbjtcXG4gMTcxOlxcdFxcdHUzMiBpZGVudGl0eTtcXG4gMTcyOlxcdFxcdHN0cnVjdCB0aXBjX2Rpc2NvdmVyZXIgKmRpc2M7XFxuIDE3MzpcXHRcXHRjaGFyIG5ldF9wbGFuZTtcXG4gMTc0OlxcdFxcdHUxNiBlbmNhcF9obGVuO1xcbiAxNzU6XFx0XFx0dW5zaWduZWQgbG9uZyB1cDtcXG4gMTc2OlxcdFxcdHJlZmNvdW50X3QgcmVmY250O1xcbiAxNzc6XFx0fTtcXG4gMTc4OlxcdFxcbiAxNzk6XFx0c3RydWN0IHRpcGNfYmVhcmVyX25hbWVzIHtcXG4gMTgwOlxcdFxcdGNoYXIgbWVkaWFfbmFtZVtUSVBDX01BWF9NRURJQV9OQU1FXTtcXG4gMTgxOlxcdFxcdGNoYXIgaWZfbmFtZVtUSVBDX01BWF9JRl9OQU1FXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MTM6MTEuOTY0NjcwNjY0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2ODQyNzA2NDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktBU0FOJ3MgR290IFRoaXM6IE5vIEtNU0FOIE5lZWRlZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCB0aGUgYG5hbWVgIGZpZWxkIGlzIGluIHRoZSBtaWRkbGUgb2YgdGhpcyBgc3RydWN0YC4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIHRoYXQgaWYgYGItXHUwMDNlbmFtZWAgaXNuJ3QgbnVsbC10ZXJtaW5hdGVkLCBgc3RyY3B5YCBjb3VsZCByZWFkIHBhc3QgdGhlIGVuZCBvZiBpdCwgcG90ZW50aWFsbHkgaW50byBhZGphY2VudCBtZW1vcnkgbGlrZSBgbWVkaWFgIG9yIGBiY2FzdF9hZGRyYCwgbGVhZGluZyB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gYGItXHUwMDNlbmFtZWAuIFdoaWxlIHRoYXQgT09CIHJlYWQgbWlnaHQgbm90IGltbWVkaWF0ZWx5IGNhdXNlIGFuIGlzc3VlIHdpdGhpbiB0aGUgYHRpcGNfYmVhcmVyYCBzdHJ1Y3QgaXRzZWxmIHVubGVzcyBpdCBnb2VzIHBhc3QgdGhlIGVuZCwgaXQgKmRlZmluaXRlbHkqIGJlY29tZXMgYSB3cml0ZSBwcm9ibGVtIGxhdGVyIG9uIGluIGBfX3RpcGNfbmxfYWRkX21vbml0b3JgIHdoZW4gd2UgdXNlIGBiZWFyZXJfbmFtZWAsIHdoaWNoIGlzIGEgYFRJUENfTUFYX0JFQVJFUl9OQU1FYC1zaXplZCBhcnJheSBvbiB0aGUgc3RhY2suIEVzc2VudGlhbGx5LCBgc3RyY3B5YCBjb3VsZCBvdmVyd3JpdGUgbWVtb3J5IG9uIHRoZSBzdGFjayBiZXlvbmQgYGJlYXJlcl9uYW1lYCBpZiBgYi1cdTAwM2VuYW1lYCBpcyBsYXJnZXIgdGhhbiB0aGUgZml4ZWQtc2l6ZSBgYmVhcmVyX25hbWVgIGJ1ZmZlci4gVGhpcyBpcyBhIGNsYXNzaWMgc3RhY2sgYnVmZmVyIG92ZXJmbG93LlxuXG5Gb3J0dW5hdGVseSwgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgaXMgZGVzaWduZWQgdG8gY2F0Y2ggdGhlc2Ugc3RhY2sgYnVmZmVyIG92ZXJmbG93cyByZWxpYWJseS4gU28sIHRoZSBwb3RlbnRpYWwgd3JpdGUgaXNzdWUgaXMgYWRkcmVzc2VkIGFuZCBjYW4gYmUgY2F1Z2h0LlxuXG5Ob3csIGEgY3J1Y2lhbCBwb2ludDogaXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGhlcmU/IE5vLCBiZWNhdXNlIGBiZWFyZXJfbmFtZWAgaXMgdW5pbml0aWFsaXplZCBpbml0aWFsbHksIGJ1dCB0aGUgdXNlIG9mIGBzdHJjcHlgIChvciB0aGUgZml4ZWQtaW4tdGhlLXBhdGNoIGBzdHJzY3B5YCkgaW5pdGlhbGl6ZXMgaXQgZHVyaW5nIHRoZSBjb3B5LiBBZnRlciB0aGF0LCBgbmxhX3B1dF9zdHJpbmdgIG9ubHkgcmVhZHMgdGhlICppbml0aWFsaXplZCogc3RyaW5nIHBhcnQgdXAgdG8gdGhlIG51bGwgdGVybWluYXRvci4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBldmVyIHJlYWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gVGhpcyBwYXRjaCBpcyBzaW1wbHkgZml4aW5nIGEgcG90ZW50aWFsIHN0YWNrIGJ1ZmZlciBvdmVyZmxvdyBjYXVzZWQgYnkgYHN0cmNweWAgYmVpbmcgdXNlZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgc3Ryc2NweWAgY2FuJ3QgY3JlYXRlIGFuIGlzc3VlIGluIHRoZSBzYW1lIHdheSwgY2F1c2luZyBgYmVhcmVyX25hbWVgIHRvIGJlIGxlZnQgdW5pbml0aWFsaXplZCBpbiBhIHdheSB0aGF0IGlzIHJlYWQgYnkgYG5sYV9wdXRfc3RyaW5nYC4gSWYgYGItXHUwMDNlbmFtZWAgaXMgZW1wdHksIGkuZS4sIGp1c3QgYSBudWxsIGJ5dGUsIGBzdHJzY3B5YCB3aWxsIHdyaXRlIGEgbnVsbCBieXRlIHRvIGBiZWFyZXJfbmFtZVswXWAuIGBubGFfcHV0X3N0cmluZ2AgdGhlbiBzZWVzIGEgc3RyaW5nIG9mIGxlbmd0aCB6ZXJvIGFuZCBjb3BpZXMgYSBzaW5nbGUgbnVsbCBieXRlIHRvIHRoZSBvdXRwdXQuIEl0IGRvZXNuJ3QgbG9vayBiZXlvbmQgdGhhdC4gU28gbm8gdW5pbml0aWFsaXplZCBieXRlcyBhcmUgcmVhZC5cblxuV2hhdCBoYXBwZW5zIGlmIGBiLVx1MDAzZW5hbWVgIGlzbid0IG51bGwtdGVybWluYXRlZCwgYnV0IGBzdHJzY3B5YCAqaXMqIHVzZWQ/IFdlbGwsIGBzdHJzY3B5KG5hbWUsIGItXHUwMDNlbmFtZSwgVElQQ19NQVhfQkVBUkVSX05BTUUpYCB3aWxsIGNvcHkgdXAgdG8gYFRJUENfTUFYX0JFQVJFUl9OQU1FIC0gMWAgYnl0ZXMgZnJvbSBgYi1cdTAwM2VuYW1lYCBhbmQgdGhlbiAqZXhwbGljaXRseSogbnVsbC10ZXJtaW5hdGUgdGhlIHN0cmluZywgbWVhbmluZyB0aGF0IGBubGFfcHV0X3N0cmluZ2AgcmVhZHMgYSBzdHJpbmcgb2YgYXQgbW9zdCBgVElQQ19NQVhfQkVBUkVSX05BTUVgIGNoYXJhY3RlcnMuIEV2ZXJ5IGJ5dGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYnkgYHN0cnNjcHlgLlxuXG5BbmQgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBjYXNlIHdoZXJlIGBiLVx1MDAzZW5hbWVgIGl0c2VsZiBoYXMgdW5pbml0aWFsaXplZCBieXRlcy4gIGBiYCBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iamAsIHdoaWNoICp6ZXJvZXMqIHRoZSBtZW1vcnkgaXQgYWxsb2NhdGVzLiBBZnRlciB0aGF0LCB3ZSBgc3Ryc2NweShiLVx1MDAzZW5hbWUsIG5hbWUpYCBjb3BpZXMgdGhlIHN0cmluZyBmcm9tIGBuYW1lYCB0byBgYi1cdTAwM2VuYW1lYC4gVGh1cywgYGItXHUwMDNlbmFtZWAgY2FuIG5ldmVyIGNvbnRhaW4gdW5pbml0aWFsaXplZCBieXRlcy5cblxuU28sIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBUaGlzIHBhdGNoIHJlcGxhY2VzIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHRvIGZpeCBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSAoYm90aCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgZnJvbSBgYi1cdTAwM2VuYW1lYCwgYW5kIHdyaXRlIHRvIGBiZWFyZXJfbmFtZWApLiBLQVNBTiwgYXMgZXhwZWN0ZWQsIHJlbGlhYmx5IGRldGVjdHMgdGhlc2Ugb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgd3JpdGVzLiBNb3JlIGltcG9ydGFudGx5LCB0aGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgbWFraW5nIGl0cyB3YXkgaW50byB1c2Vyc3BhY2UuIFRoaXMgaXMgYmVjYXVzZSB0aGUgc3RyaW5nIGlzIGFsd2F5cyBwcm9wZXJseSBudWxsLXRlcm1pbmF0ZWQsIGFuZCBgbmxhX3B1dF9zdHJpbmdgIGNvcnJlY3RseSBjb3BpZXMgb25seSB1cCB0byB0aGF0IHRlcm1pbmF0b3IuIFRoZXJlZm9yZSwgd2UgZG9uJ3QgbmVlZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gZm9yIHRoaXM7IEtBU0FOIGNvdmVycyB0aGUgcmVsZXZhbnQgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg4NiwiT3V0cHV0VG9rZW5zIjoyMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNToxMzoyOC44MDczODA3MzdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHRvIHByZXZlbnQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZnJvbSBgYi1cXHUwMDNlbmFtZWAgYW5kIG91dC1vZi1ib3VuZHMgd3JpdGVzIHRvIHRoZSBzdGFjay1hbGxvY2F0ZWQgYGJlYXJlcl9uYW1lYCBidWZmZXIgaW4gYF9fdGlwY19ubF9hZGRfbW9uaXRvcmAuIE91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIChib3RoIGhlYXAgYW5kIHN0YWNrKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgaGVyZTogdGhlIHNvdXJjZSBidWZmZXIgYGItXFx1MDAzZW5hbWVgIGlzIHBhcnQgb2YgYSB6ZXJvLWFsbG9jYXRlZCBzdHJ1Y3R1cmUsIGFuZCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGBiZWFyZXJfbmFtZWAgaXMgb25seSByZWFkIGJ5IGBubGFfcHV0X3N0cmluZ2AsIHdoaWNoIHN0cmljdGx5IHJlYWRzIHVwIHRvIHRoZSBudWxsIHRlcm1pbmF0b3IuIFNpbmNlIGBzdHJzY3B5YCBndWFyYW50ZWVzIG51bGwtdGVybWluYXRpb24gYW5kIGBubGFfcHV0X3N0cmluZ2AgZG9lcyBub3QgcmVhZCBwYXN0IGl0LCBubyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBpcyBldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRodXMsIHN0YW5kYXJkIEtBU0FOIGlzIGZ1bGx5IHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNvZGUsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYHN0cmNweWAgd2l0aCBgc3Ryc2NweWAgdG8gcHJldmVudCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBmcm9tIGBiLVxcdTAwM2VuYW1lYCBhbmQgb3V0LW9mLWJvdW5kcyB3cml0ZXMgdG8gdGhlIHN0YWNrLWFsbG9jYXRlZCBgYmVhcmVyX25hbWVgIGJ1ZmZlciBpbiBgX190aXBjX25sX2FkZF9tb25pdG9yYC4gT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGJvdGggaGVhcCBhbmQgc3RhY2spIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCBoZXJlOiB0aGUgc291cmNlIGJ1ZmZlciBgYi1cXHUwMDNlbmFtZWAgaXMgcGFydCBvZiBhIHplcm8tYWxsb2NhdGVkIHN0cnVjdHVyZSwgYW5kIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgYGJlYXJlcl9uYW1lYCBpcyBvbmx5IHJlYWQgYnkgYG5sYV9wdXRfc3RyaW5nYCwgd2hpY2ggc3RyaWN0bHkgcmVhZHMgdXAgdG8gdGhlIG51bGwgdGVybWluYXRvci4gU2luY2UgYHN0cnNjcHlgIGd1YXJhbnRlZXMgbnVsbC10ZXJtaW5hdGlvbiBhbmQgYG5sYV9wdXRfc3RyaW5nYCBkb2VzIG5vdCByZWFkIHBhc3QgaXQsIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGlzIGV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZS4gVGh1cywgc3RhbmRhcmQgS0FTQU4gaXMgZnVsbHkgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY29kZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlck4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 14:45:07 +0000 UTC FinishedAt: 2026-08-12 15:13:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ac155a26750a595703e7dadff84735456d75a479", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ac155a26750a595703e7dadff84735456d75a479", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "2d5bad66-7a35-489e-b425-6bdcd8972694" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tipc_bearer_get_name", "__tipc_nl_add_monitor", "tipc_nl_node_dump_monitor" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX2JlYXJlcl9nZXRfbmFtZSYjMzQ7LAogICAgJiMzNDtfX3RpcGNfbmxfYWRkX21vbml0b3ImIzM0OywKICAgICYjMzQ7dGlwY19ubF9ub2RlX2R1bXBfbW9uaXRvciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHRvIHByZXZlbnQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZnJvbSBgYi1cdTAwM2VuYW1lYCBhbmQgb3V0LW9mLWJvdW5kcyB3cml0ZXMgdG8gdGhlIHN0YWNrLWFsbG9jYXRlZCBgYmVhcmVyX25hbWVgIGJ1ZmZlciBpbiBgX190aXBjX25sX2FkZF9tb25pdG9yYC4gT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGJvdGggaGVhcCBhbmQgc3RhY2spIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCBoZXJlOiB0aGUgc291cmNlIGJ1ZmZlciBgYi1cdTAwM2VuYW1lYCBpcyBwYXJ0IG9mIGEgemVyby1hbGxvY2F0ZWQgc3RydWN0dXJlLCBhbmQgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBgYmVhcmVyX25hbWVgIGlzIG9ubHkgcmVhZCBieSBgbmxhX3B1dF9zdHJpbmdgLCB3aGljaCBzdHJpY3RseSByZWFkcyB1cCB0byB0aGUgbnVsbCB0ZXJtaW5hdG9yLiBTaW5jZSBgc3Ryc2NweWAgZ3VhcmFudGVlcyBudWxsLXRlcm1pbmF0aW9uIGFuZCBgbmxhX3B1dF9zdHJpbmdgIGRvZXMgbm90IHJlYWQgcGFzdCBpdCwgbm8gdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgaXMgZXZlciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaHVzLCBzdGFuZGFyZCBLQVNBTiBpcyBmdWxseSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBzdHJjcHkgd2l0aCBzdHJzY3B5IGluIHRpcGNfYmVhcmVyX2dldF9uYW1lIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUSVBDIG5ldGxpbmsgQVBJIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHRydW5jYXRpb25zIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODFmOWU4ODBiOTBjMjhjZjhiYzlhNjUwM2M3YjA3OWIxNjY3ZTU4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE1OjA5OjE3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2JlYXJlci5jIGIvbmV0L3RpcGMvYmVhcmVyLmNcbmluZGV4IDA1ZGNkMmY5ZTg4N2EuLjk1MWJiNDc0YzdkNDQgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9iZWFyZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvYmVhcmVyLmNcbkBAIC0yMDksNyAmIzQzOzIwOSw3IEBAIGludCB0aXBjX2JlYXJlcl9nZXRfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUsIHUzMiBiZWFyZXJfaWQpXG4gXHRpZiAoIWIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0c3RyY3B5KG5hbWUsIGItXHUwMDNlbmFtZSk7XG4mIzQzO1x0c3Ryc2NweShuYW1lLCBiLVx1MDAzZW5hbWUsIFRJUENfTUFYX0JFQVJFUl9OQU1FKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNTowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfYmVhcmVyX2dldF9uYW1lJiMzNDssCiAgICAmIzM0O19fdGlwY19ubF9hZGRfbW9uaXRvciYjMzQ7LAogICAgJiMzNDt0aXBjX25sX25vZGVfZHVtcF9tb25pdG9yJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHN0cmNweSB3aXRoIHN0cnNjcHkgaW4gdGlwY19iZWFyZXJfZ2V0X25hbWUgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3dzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgbmV0bGluayBBUEkgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgdHJ1bmNhdGlvbnMgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4MWY5ZTg4MGI5MGMyOGNmOGJjOWE2NTAzYzdiMDc5YjE2NjdlNThhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTU6MDk6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iZWFyZXIuYyBiL25ldC90aXBjL2JlYXJlci5jCmluZGV4IDA1ZGNkMmY5ZTg4N2EuLjk1MWJiNDc0YzdkNDQgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2JlYXJlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL2JlYXJlci5jCkBAIC0yMDksNyAmIzQzOzIwOSw3IEBAIGludCB0aXBjX2JlYXJlcl9nZXRfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUsIHUzMiBiZWFyZXJfaWQpCiAJaWYgKCFiKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmNweShuYW1lLCBiLSZndDtuYW1lKTsKJiM0MzsJc3Ryc2NweShuYW1lLCBiLSZndDtuYW1lLCBUSVBDX01BWF9CRUFSRVJfTkFNRSk7CiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTZWN1cml0eSBQYXRjaDogc3RyY3B5IHRvIHN0cnNjcHkgaW4gdGlwY19iZWFyZXIuYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCB0aGV5JiMzOTtyZSBzd2FwcGluZyBgc3RyY3B5YCBmb3IgYHN0cnNjcHlgIGluIGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAgd2l0aGluIGBuZXQvdGlwYy9iZWFyZXIuY2AuJiMzNDsgQ2xhc3NpYyBidWZmZXIgb3ZlcmZsb3cgbWl0aWdhdGlvbiwgcmlnaHQ/IEdvb2QgY2F0Y2gsIGdvb2QgcHJhY3RpY2UuIEJ1dCBpcyB0aGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gc3BlbmQgc2VyaW91cyBmdXp6aW5nIHRpbWUgb24/CgpJbml0aWFsbHksIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7SXQmIzM5O3MganVzdCBhIHN0cmFpZ2h0IHJlcGxhY2VtZW50LiBJdCYjMzk7cyBmdW5jdGlvbmFsLCBidXQgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlICpuZXcqIGxvZ2ljLCBwZXIgc2UuJiMzNDsgSG93ZXZlciwgSSBuZWVkIHRvIGFkanVzdCB0aGlzIHRob3VnaHQuICpXYWl0Ki4gUmVwbGFjaW5nIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgICpkb2VzKiBjaGFuZ2UgdGhlIGJlaGF2aW9yLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgc291cmNlIHN0cmluZyAoYGItJmd0O25hbWVgKSBpcyBsb25nZXIgdGhhbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIChgbmFtZWApLiBJdCYjMzk7cyB0cnVuY2F0aW5nLCByYXRoZXIgdGhhbiBvdmVyZmxvd2luZywgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBiZWhhdmlvcmFsIHNoaWZ0LiBTbyB0aGVyZSYjMzk7cyBhIHBvc3NpYmlsaXR5IG9mICpzdWJ0bGUqIGlzc3VlcyBkZXBlbmRpbmcgb24gaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0cnVuY2F0ZWQgbmFtZXMuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlnIGEgYml0IGRlZXBlci4gRmlyc3QsIEkgaGF2ZSB0byBlbnN1cmUgdGhhdCBgdGlwY19iZWFyZXJfZ2V0X25hbWVgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gU2Vjb25kLCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBvdGhlciBjb2RlIGNoYW5nZXMgSSBtaWdodCBiZSBtaXNzaW5nLiBOb3BlLCB0aGUgcGF0Y2ggb25seSB0b3VjaGVzIGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAuIE5vdywgdG8gYmUgcmlnb3JvdXMsIEkgaGF2ZSB0byBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHRoZSBhc3N1bXB0aW9ucyBtYWRlIGJ5IHRob3NlIGNhbGxlcnMsIGFuZCB3aGV0aGVyIHRoZXkgYWNjb3VudCBmb3Igb3IgY291bGQgYmUgbmVnYXRpdmVseSBpbXBhY3RlZCBieSB0aGUgdHJ1bmNhdGlvbiBvZiBhIHBvdGVudGlhbGx5IGxvbmcgc3RyaW5nLiBEZXBlbmRpbmcgb24gdGhlIGNhbGxlcnMsIHRoaXMgY291bGQgYmUgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfYmVhcmVyX2dldF9uYW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2JlYXJlci5jPTE4MT1zdHJ1Y3QgdGlwY19iZWFyZXIgKnRpcGNfYmVhcmVyX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKVxuLS1cbm5ldC90aXBjL2JlYXJlci5jLTE5NC1cbm5ldC90aXBjL2JlYXJlci5jOjE5NTovKiAgICAgdGlwY19iZWFyZXJfZ2V0X25hbWUgLSBnZXQgdGhlIGJlYXJlciBuYW1lIGZyb20gaXRzIGlkLlxubmV0L3RpcGMvYmVhcmVyLmMtMTk2LSAqICAgICBAbmV0OiBuZXR3b3JrIG5hbWVzcGFjZVxuLS1cbm5ldC90aXBjL2JlYXJlci5jLTE5OS0gKi9cbm5ldC90aXBjL2JlYXJlci5jOjIwMDppbnQgdGlwY19iZWFyZXJfZ2V0X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICpuYW1lLCB1MzIgYmVhcmVyX2lkKVxubmV0L3RpcGMvYmVhcmVyLmMtMjAxLXtcbi0tXG5uZXQvdGlwYy9iZWFyZXIuaD0yMjg9c3RydWN0IHRpcGNfYmVhcmVyICp0aXBjX2JlYXJlcl9maW5kKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XG5uZXQvdGlwYy9iZWFyZXIuaDoyMjk6aW50IHRpcGNfYmVhcmVyX2dldF9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqbmFtZSwgdTMyIGJlYXJlcl9pZCk7XG5uZXQvdGlwYy9iZWFyZXIuaC0yMzAtc3RydWN0IHRpcGNfbWVkaWEgKnRpcGNfbWVkaWFfZmluZChjb25zdCBjaGFyICpuYW1lKTtcbi0tXG5uZXQvdGlwYy9tb25pdG9yLmM9ODI3PWludCBfX3RpcGNfbmxfYWRkX21vbml0b3Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZyxcbi0tXG5uZXQvdGlwYy9tb25pdG9yLmMtODM1LVxubmV0L3RpcGMvbW9uaXRvci5jOjgzNjpcdHJldCA9IHRpcGNfYmVhcmVyX2dldF9uYW1lKG5ldCwgYmVhcmVyX25hbWUsIGJlYXJlcl9pZCk7XG5uZXQvdGlwYy9tb25pdG9yLmMtODM3LVx0aWYgKHJldCB8fCAhbW9uKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipUcmFjaW5nIHRoZSBTb3VyY2U6IGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAqKgoKT2theSwgc28gSSBzZWUgYHRpcGNfYmVhcmVyX2dldF9uYW1lYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgX190aXBjX25sX2FkZF9tb25pdG9yYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGxpa2VseSBzaWduaWZpY2FudC4gU2luY2UgSSYjMzk7bSBvbiB0aGlzLCBsZXQmIzM5O3MganVzdCB0cmFjZSB0aGF0IGJhY2suIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgX190aXBjX25sX2FkZF9tb25pdG9yYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGlzIHNwZWNpZmljIGNhbGwuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhhdCBjYWxsIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIGZpZ3VyaW5nIG91dCB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdOKAmXMgcmV0cmlldmluZyB0aGUgYmVhcmVyIG5hbWUgaGVyZS4gSXMgdGhpcyBmb3IgZmlsdGVyaW5nLCBsb2dnaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGBfX2AgcHJlZml4IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgc28gaXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGRpZyBpbnRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB3aGF0IGRhdGEgaXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3RpcGNfbmxfYWRkX21vbml0b3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvbW9uaXRvci5jPTczNz1pbnQgdGlwY19ubF9tb25pdG9yX2dldF90aHJlc2hvbGQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC90aXBjL21vbml0b3IuYy03NDMtXG5uZXQvdGlwYy9tb25pdG9yLmM6NzQ0OnN0YXRpYyBpbnQgX190aXBjX25sX2FkZF9tb25pdG9yX3BlZXIoc3RydWN0IHRpcGNfcGVlciAqcGVlcixcbm5ldC90aXBjL21vbml0b3IuYy03NDUtXHRcdFx0XHQgICAgICBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZylcbi0tXG5uZXQvdGlwYy9tb25pdG9yLmM9Nzk4PWludCB0aXBjX25sX2FkZF9tb25pdG9yX3BlZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZyxcbi0tXG5uZXQvdGlwYy9tb25pdG9yLmMtODE1LVx0XHR9XG5uZXQvdGlwYy9tb25pdG9yLmM6ODE2Olx0XHRpZiAoX190aXBjX25sX2FkZF9tb25pdG9yX3BlZXIocGVlciwgbXNnKSkge1xubmV0L3RpcGMvbW9uaXRvci5jLTgxNy1cdFx0XHQqcHJldl9ub2RlID0gcGVlci1cdTAwM2VhZGRyO1xuLS1cbm5ldC90aXBjL21vbml0b3IuYy04MjYtXG5uZXQvdGlwYy9tb25pdG9yLmM6ODI3OmludCBfX3RpcGNfbmxfYWRkX21vbml0b3Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZyxcbm5ldC90aXBjL21vbml0b3IuYy04MjgtXHRcdFx0ICB1MzIgYmVhcmVyX2lkKVxuLS1cbm5ldC90aXBjL21vbml0b3IuaD03NT1pbnQgdGlwY19ubF9tb25pdG9yX2dldF90aHJlc2hvbGQoc3RydWN0IG5ldCAqbmV0KTtcbm5ldC90aXBjL21vbml0b3IuaDo3NjppbnQgX190aXBjX25sX2FkZF9tb25pdG9yKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbmxfbXNnICptc2csXG5uZXQvdGlwYy9tb25pdG9yLmgtNzctXHRcdFx0ICB1MzIgYmVhcmVyX2lkKTtcbi0tXG5uZXQvdGlwYy9ub2RlLmM9Mjc2MT1pbnQgdGlwY19ubF9ub2RlX3NldF9tb25pdG9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3RpcGMvbm9kZS5jLTI3ODgtXG5uZXQvdGlwYy9ub2RlLmM6Mjc4OTpzdGF0aWMgaW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcl9wcm9wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbmxfbXNnICptc2cpXG5uZXQvdGlwYy9ub2RlLmMtMjc5MC17XG4tLVxubmV0L3RpcGMvbm9kZS5jPTI4MjI9aW50IHRpcGNfbmxfbm9kZV9nZXRfbW9uaXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC90aXBjL25vZGUuYy0yODMzLVxubmV0L3RpcGMvbm9kZS5jOjI4MzQ6XHRlcnIgPSBfX3RpcGNfbmxfYWRkX21vbml0b3JfcHJvcChuZXQsIFx1MDAyNm1zZyk7XG5uZXQvdGlwYy9ub2RlLmMtMjgzNS1cdGlmIChlcnIpIHtcbi0tXG5uZXQvdGlwYy9ub2RlLmM9Mjg0Mz1pbnQgdGlwY19ubF9ub2RlX2R1bXBfbW9uaXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTI4NTktXHRmb3IgKGJlYXJlcl9pZCA9IHByZXZfYmVhcmVyOyBiZWFyZXJfaWQgXHUwMDNjIE1BWF9CRUFSRVJTOyBiZWFyZXJfaWQmIzQzOyYjNDM7KSB7XG5uZXQvdGlwYy9ub2RlLmM6Mjg2MDpcdFx0ZXJyID0gX190aXBjX25sX2FkZF9tb25pdG9yKG5ldCwgXHUwMDI2bXNnLCBiZWFyZXJfaWQpO1xubmV0L3RpcGMvbm9kZS5jLTI4NjEtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA0MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXRsaW5rIER1bXAgRnVuY3Rpb24gQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgY2hhbmdlIHdpdGhpbiBgdGlwY19ubF9ub2RlX2R1bXBfbW9uaXRvcmAuIFJpZ2h0LCBpdCYjMzk7cyBhIG5ldGxpbmsgZHVtcCBmdW5jdGlvbiwgc3RhbmRhcmQgc3R1ZmYuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGlzIHN3YXBwaW5nIG91dCBgc3RyY3B5YCBmb3IgYHN0cnNjcHlgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdGhpbmsgYWJvdXQgZnV6emluZyB0aGlzLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgaW4gYSBuZXRsaW5rIEFQSSwgd2hpY2ggbWFrZXMgaXQgYSBwb3RlbnRpYWwgdGFyZ2V0LiBFdmVuIHRob3VnaCBpdCYjMzk7cyAmIzM0O2p1c3QmIzM0OyBzdHJpbmcgY29weWluZywgdGhhdCBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGhlcmVmb3JlIHZ1bG5lcmFibGUgdG8gdGhpbmdzIGxpa2UgYnVmZmVyIG92ZXJmbG93cyBvciB1bmV4cGVjdGVkIHRydW5jYXRpb24uCgpIb2xkIG9uLCBJIG5lZWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgdGhpbmsuIGBzdHJzY3B5YCBpcyBub3cgYSBzdGFuZGFyZCBzdHJpbmcgY29weSBmdW5jdGlvbi4gRnV6emluZyAqaXQqIGRpcmVjdGx5IGlzbiYjMzk7dCBsaWtlbHkgdG8gcmV2ZWFsIGFueXRoaW5nIG5ldywgcGVyIHNlLiBIb3dldmVyLCB0aGlzIGlzIHN0aWxsIHBhcnQgb2YgdGhlIFRJUEMgbmV0bGluayBBUEksIGFuZCBhbnkgY2hhbmdlIHRvIHRoZSBBUEkgc3VyZmFjZSBpcyBmYWlyIGdhbWUgZm9yIHRob3JvdWdoIGZ1enppbmcuCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCBjaGVjayB0aGUga2VybmVsIGNvbmZpZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBUSVBDIGlzIGV2ZW4gZW5hYmxlZCBpbiB0aGlzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRJUEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvS2NvbmZpZy01LVxubmV0L3RpcGMvS2NvbmZpZzo2Om1lbnVjb25maWcgVElQQ1xubmV0L3RpcGMvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7VGhlIFRJUEMgUHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTIzLVxubmV0L3RpcGMvS2NvbmZpZzoyNDpjb25maWcgVElQQ19NRURJQV9JQlxubmV0L3RpcGMvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBtZWRpYSB0eXBlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTI5LVx0ICBJUC1vdmVyLUluZmluaUJhbmQgZGV2aWNlcy5cbm5ldC90aXBjL0tjb25maWc6MzA6Y29uZmlnIFRJUENfTUVESUFfVURQXG5uZXQvdGlwYy9LY29uZmlnLTMxLVx0Ym9vbCBcJiMzNDtJUC9VRFAgbWVkaWEgdHlwZSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3RpcGMvS2NvbmZpZy0zNy1cbm5ldC90aXBjL0tjb25maWc6Mzg6Y29uZmlnIFRJUENfQ1JZUFRPXG5uZXQvdGlwYy9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtUSVBDIGVuY3J5cHRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctNTItXG5uZXQvdGlwYy9LY29uZmlnOjUzOmNvbmZpZyBUSVBDX0RJQUdcbm5ldC90aXBjL0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDtUSVBDOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzE1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIFRJUEMgTmV0bGluayBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYFRJUENgIGNvbmZpZ3VyYXRpb24gYW5kIHRoZXNlIHN5bWJvbHM6IGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAsIGBfX3RpcGNfbmxfYWRkX21vbml0b3JgLCBhbmQgYHRpcGNfbmxfbm9kZV9kdW1wX21vbml0b3JgLiBIYW5nIG9uLCBgdGlwY19ubF9ub2RlX2R1bXBfbW9uaXRvcmAuLi4gdGhhdCYjMzk7cyBhIG5ldGxpbmsgZHVtcCBmdW5jdGlvbiwgcmlnaHQ/IE1ha2VzIGl0IGEgYml0IG1vcmUgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpOb3csIHRoZSBjaGFuZ2UgSSYjMzk7bSBleGFtaW5pbmcgaW52b2x2ZXMgYHN0cmNweWAgYmVpbmcgcmVwbGFjZWQgd2l0aCBgc3Ryc2NweWAuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyByZWZyZXNoIG91ciBjcml0ZXJpYTogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMuLi4gb3IgY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LiYjMzQ7CgpUaGlzIGBzdHJjcHlgIHRvIGBzdHJzY3B5YCBjaGFuZ2UgKmlzKiBmdW5jdGlvbmFsLiBJdCYjMzk7cyBhIHNlY3VyaXR5IGhhcmRlbmluZyBtZWFzdXJlIGFpbWVkIGF0IHByZXZlbnRpbmcgYnVmZmVyIG92ZXJmbG93cy4gQnV0IGRvZXMgaXQgbWVhbmluZ2Z1bGx5IGFsdGVyIHRoZSBwcm9ncmFtJiMzOTtzIGV4ZWN1dGlvbiBmbG93IGluIGEgd2F5IHRoYXQgZnV6emluZyB3b3VsZCBleHBvc2UgbmV3LCBjcml0aWNhbCBpc3N1ZXM/IEkmIzM5O20gb24gdGhlIGZlbmNlLi4uIFNlY3VyaXR5IGhhcmRlbmluZyBpcyBkZWZpbml0ZWx5IGltcG9ydGFudC4KCkhvd2V2ZXIsIEkmIzM5O20gdGhpbmtpbmcsIGV2ZW4gaWYgaXQmIzM5O3MgYSBzZWN1cml0eS1mb2N1c2VkIGNoYW5nZSwgZnV6emluZyBjb3VsZCBzdGlsbCBiZSB2YWx1YWJsZS4gUmVwbGFjaW5nIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIGludHJvZHVjZXMgYSBwb3RlbnRpYWwgZm9yIHVuZXhwZWN0ZWQgc3RyaW5nIHRydW5jYXRpb24uIFBsdXMsIGZ1enppbmcgbWlnaHQgdW5jb3ZlciByZWdyZXNzaW9ucyBvciBlZGdlIGNhc2VzLiBTbywgaXQmIzM5O3MgcHJvYmFibHkgd29ydGggaXQgdG8gdGFrZSBhIGNsb3NlciBsb29rLgoKTGV0IG1lIGNpcmNsZSBiYWNrIHRvIGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAgcmVhbCBxdWljaywganVzdCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL2JlYXJlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTU6XHQvKiAgICAgdGlwY19iZWFyZXJfZ2V0X25hbWUgLSBnZXQgdGhlIGJlYXJlciBuYW1lIGZyb20gaXRzIGlkLlxuIDE5NjpcdCAqICAgICBAbmV0OiBuZXR3b3JrIG5hbWVzcGFjZVxuIDE5NzpcdCAqICAgICBAbmFtZTogYSBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2hlcmUgdGhlIG5hbWUgd2lsbCBiZSBzdG9yZWQuXG4gMTk4Olx0ICogICAgIEBiZWFyZXJfaWQ6IHRoZSBpZCB0byBnZXQgdGhlIG5hbWUgZnJvbS5cbiAxOTk6XHQgKi9cbiAyMDA6XHRpbnQgdGlwY19iZWFyZXJfZ2V0X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICpuYW1lLCB1MzIgYmVhcmVyX2lkKVxuIDIwMTpcdHtcbiAyMDI6XHRcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIDIwMzpcdFx0c3RydWN0IHRpcGNfYmVhcmVyICpiO1xuIDIwNDpcdFxuIDIwNTpcdFx0aWYgKGJlYXJlcl9pZCBcdTAwM2U9IE1BWF9CRUFSRVJTKVxuIDIwNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyMDc6XHRcbiAyMDg6XHRcdGIgPSBydG5sX2RlcmVmZXJlbmNlKHRuLVx1MDAzZWJlYXJlcl9saXN0W2JlYXJlcl9pZF0pO1xuIDIwOTpcdFx0aWYgKCFiKVxuIDIxMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyMTE6XHRcbiAyMTI6XHRcdHN0cnNjcHkobmFtZSwgYi1cdTAwM2VuYW1lLCBUSVBDX01BWF9CRUFSRVJfTkFNRSk7XG4gMjEzOlx0XHRyZXR1cm4gMDtcbiAyMTQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NzQKCQkJCQkJCW91dHB1dDogMTI2CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgYSBLZXJuZWwgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24sIGFuZCBob25lc3RseSwgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhdCBmaXJzdCBnbGFuY2UuIEJ1dCwgY29uc2lkZXJpbmcgdGhpcyBpcyBhIGtlcm5lbCBjaGFuZ2UsIG5vIG1hdHRlciBob3cgc2ltcGxlIGl0IHNlZW1zLCBpdCAqYWJzb2x1dGVseSogd2FycmFudHMgYSBjbG9zZXIgbG9vayB3aXRoIGZ1enppbmcuIE15IHRob3VnaHQgcHJvY2VzcyBpcyBhbHdheXM6IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBrZXJuZWwgPSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzLCBldmVuIGlmIHRoZSBjb2RlIGl0c2VsZiBpcyBiYXNpYy4KClNvLCBsZXQmIzM5O3MgZXN0YWJsaXNoIGEgY2xlYXIgZnV6emluZyBzZXR1cC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGNvbmZpZ3VyaW5nIHRoZSBmdXp6aW5nIHByb2Nlc3MgY29ycmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgYXJlYSBvZiB0aGUga2VybmVsLgoKSSYjMzk7bGwgYmUgZW5hYmxpbmcgdGhlIGBUSVBDYCBjb25maWcsIGFzIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGludGVyYWN0cyB3aXRoIHRoYXQgbW9kdWxlLiBUaGVuLCB0byBtYWtlIHN1cmUgSSYjMzk7bSB0YXJnZXRpbmcgdGhlIGtleSBwYXJ0cywgSSYjMzk7bSBnb2luZyB0byBmb2N1cyB0aGUgZnV6emluZyBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzOiBgdGlwY19iZWFyZXJfZ2V0X25hbWVgLCBgX190aXBjX25sX2FkZF9tb25pdG9yYCwgYW5kIGB0aXBjX25sX25vZGVfZHVtcF9tb25pdG9yYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgbW9zdCBiYW5nIGZvciBteSBidWNrIGFuZCBjb3ZlciB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgY2hhbmdlLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmaW5kIGFueXRoaW5nIGludGVyZXN0aW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfYmVhcmVyX2dldF9uYW1lJiMzNDssCiAgICAmIzM0O19fdGlwY19ubF9hZGRfbW9uaXRvciYjMzQ7LAogICAgJiMzNDt0aXBjX25sX25vZGVfZHVtcF9tb25pdG9yJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHN0cmNweSB3aXRoIHN0cnNjcHkgaW4gdGlwY19iZWFyZXJfZ2V0X25hbWUgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3dzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgbmV0bGluayBBUEkgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgdHJ1bmNhdGlvbnMgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX2JlYXJlcl9nZXRfbmFtZSYjMzQ7LAogICAgJiMzNDtfX3RpcGNfbmxfYWRkX21vbml0b3ImIzM0OywKICAgICYjMzQ7dGlwY19ubF9ub2RlX2R1bXBfbW9uaXRvciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBzdHJjcHkgd2l0aCBzdHJzY3B5IGluIHRpcGNfYmVhcmVyX2dldF9uYW1lIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUSVBDIG5ldGxpbmsgQVBJIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHRydW5jYXRpb25zIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHRvIHByZXZlbnQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZnJvbSBgYi1cdTAwM2VuYW1lYCBhbmQgb3V0LW9mLWJvdW5kcyB3cml0ZXMgdG8gdGhlIHN0YWNrLWFsbG9jYXRlZCBgYmVhcmVyX25hbWVgIGJ1ZmZlciBpbiBgX190aXBjX25sX2FkZF9tb25pdG9yYC4gT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGJvdGggaGVhcCBhbmQgc3RhY2spIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCBoZXJlOiB0aGUgc291cmNlIGJ1ZmZlciBgYi1cdTAwM2VuYW1lYCBpcyBwYXJ0IG9mIGEgemVyby1hbGxvY2F0ZWQgc3RydWN0dXJlLCBhbmQgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBgYmVhcmVyX25hbWVgIGlzIG9ubHkgcmVhZCBieSBgbmxhX3B1dF9zdHJpbmdgLCB3aGljaCBzdHJpY3RseSByZWFkcyB1cCB0byB0aGUgbnVsbCB0ZXJtaW5hdG9yLiBTaW5jZSBgc3Ryc2NweWAgZ3VhcmFudGVlcyBudWxsLXRlcm1pbmF0aW9uIGFuZCBgbmxhX3B1dF9zdHJpbmdgIGRvZXMgbm90IHJlYWQgcGFzdCBpdCwgbm8gdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgaXMgZXZlciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaHVzLCBzdGFuZGFyZCBLQVNBTiBpcyBmdWxseSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4MWY5ZTg4MGI5MGMyOGNmOGJjOWE2NTAzYzdiMDc5YjE2NjdlNThhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTU6MDk6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iZWFyZXIuYyBiL25ldC90aXBjL2JlYXJlci5jCmluZGV4IDA1ZGNkMmY5ZTg4N2EuLjk1MWJiNDc0YzdkNDQgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2JlYXJlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL2JlYXJlci5jCkBAIC0yMDksNyAmIzQzOzIwOSw3IEBAIGludCB0aXBjX2JlYXJlcl9nZXRfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUsIHUzMiBiZWFyZXJfaWQpCiAJaWYgKCFiKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmNweShuYW1lLCBiLSZndDtuYW1lKTsKJiM0MzsJc3Ryc2NweShuYW1lLCBiLSZndDtuYW1lLCBUSVBDX01BWF9CRUFSRVJfTkFNRSk7CiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQnVmZmVyIE92ZXJmbG93IEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHJlcGxhY2VzIGEgYHN0cmNweWAgd2l0aCBgc3Ryc2NweWAgaW4gYHRpcGNfYmVhcmVyX2dldF9uYW1lYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoaXMgaXMgYWJvdXQgcHJldmVudGluZyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSDigJMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgd3JpdGUgc2NlbmFyaW8uIEdvb2QgY2F0Y2guIFRoZSBvcmlnaW5hbCBgc3RyY3B5YCB3YXMgYSB0aWNraW5nIHRpbWUgYm9tYiwgcmlwZSBmb3IgZXhwbG9pdGF0aW9uLgoKQnV0IGhvbGQgb24sIGBzdHJzY3B5YCBjb3BpZXMgYXQgbW9zdCBgVElQQ19NQVhfQkVBUkVSX05BTUVgIGNoYXJhY3RlcnMuIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCBkb2VzIHRoaXMgY2hhbmdlIGludHJvZHVjZSBhIG5ldyByaXNrOiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZT8gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4gYHN0cnNjcHlgLCB1bmxpa2UgYHN0cm5jcHlgLCAqZG9lc24mIzM5O3QqIHplcm8tcGFkIHRoZSByZXN0IG9mIHRoZSBidWZmZXIgaWYgdGhlIHNvdXJjZSBzdHJpbmcgaXMgc2hvcnRlciB0aGFuIHRoZSB0YXJnZXQgc2l6ZS4gQnV0LCB3YWl0LCBuZWl0aGVyIGRvZXMgYHN0cmNweWAuCgpBaCEgU28sIGlmIGBiLSZndDtuYW1lYCBpcyBzaG9ydGVyIHRoYW4gdGhlIGJ1ZmZlciwgdGhlIHJlbWFpbmluZyBwYXJ0IG9mIGBuYW1lYCBtaWdodCBjb250YWluIHN0YWxlIGRhdGEuIElmIGBuYW1lYCBpcyBsYXRlciBwYXNzZWQgdG8gdXNlciBzcGFjZSAqd2l0aG91dCogaW5pdGlhbGl6YXRpb24sIHdlJiMzOTt2ZSBnb3QgYSBtZW1vcnkgbGVhayBvciBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlIHJpc2sgb24gb3VyIGhhbmRzISBUaGlzIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gY2FyZWZ1bGx5IGV2YWx1YXRlLgoKVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gc2VlICp3aGVyZSogYHRpcGNfYmVhcmVyX2dldF9uYW1lYCBpcyBjYWxsZWQuIFRoZSBjb250ZXh0IG9mIGl0cyB1c2UgaXMgY3J1Y2lhbCBmb3IgYXNzZXNzaW5nIHRoaXMgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2suIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbGVycyBhbmQgc2VlIGhvdyB0aGUgYG5hbWVgIGJ1ZmZlciBpcyBhY3R1YWxseSB1c2VkIGFmdGVyd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19iZWFyZXJfZ2V0X25hbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvYmVhcmVyLmM9MTgxPXN0cnVjdCB0aXBjX2JlYXJlciAqdGlwY19iZWFyZXJfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxubmV0L3RpcGMvYmVhcmVyLmMtMTk0LVxubmV0L3RpcGMvYmVhcmVyLmM6MTk1Oi8qICAgICB0aXBjX2JlYXJlcl9nZXRfbmFtZSAtIGdldCB0aGUgYmVhcmVyIG5hbWUgZnJvbSBpdHMgaWQuXG5uZXQvdGlwYy9iZWFyZXIuYy0xOTYtICogICAgIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlXG4tLVxubmV0L3RpcGMvYmVhcmVyLmMtMTk5LSAqL1xubmV0L3RpcGMvYmVhcmVyLmM6MjAwOmludCB0aXBjX2JlYXJlcl9nZXRfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUsIHUzMiBiZWFyZXJfaWQpXG5uZXQvdGlwYy9iZWFyZXIuYy0yMDEte1xuLS1cbm5ldC90aXBjL2JlYXJlci5oPTIyOD1zdHJ1Y3QgdGlwY19iZWFyZXIgKnRpcGNfYmVhcmVyX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbm5ldC90aXBjL2JlYXJlci5oOjIyOTppbnQgdGlwY19iZWFyZXJfZ2V0X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICpuYW1lLCB1MzIgYmVhcmVyX2lkKTtcbm5ldC90aXBjL2JlYXJlci5oLTIzMC1zdHJ1Y3QgdGlwY19tZWRpYSAqdGlwY19tZWRpYV9maW5kKGNvbnN0IGNoYXIgKm5hbWUpO1xuLS1cbm5ldC90aXBjL21vbml0b3IuYz04Mjc9aW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxuLS1cbm5ldC90aXBjL21vbml0b3IuYy04MzUtXG5uZXQvdGlwYy9tb25pdG9yLmM6ODM2Olx0cmV0ID0gdGlwY19iZWFyZXJfZ2V0X25hbWUobmV0LCBiZWFyZXJfbmFtZSwgYmVhcmVyX2lkKTtcbm5ldC90aXBjL21vbml0b3IuYy04MzctXHRpZiAocmV0IHx8ICFtb24pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFRJUEMgTW9uaXRvciBBZGRpdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIFRJUEMgbW9uaXRvcnMgYXJlIGJlaW5nIGFkZGVkLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgX190aXBjX25sX2FkZF9tb25pdG9yYCBpbiBgbmV0L3RpcGMvbW9uaXRvci5jYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGxvb2tzIGxpa2UgZXhhY3RseSB3aGVyZSBJIHNob3VsZCBzdGFydCBkaWdnaW5nLiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIHRoaXMgaXMgbGlrZWx5IHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZyBhIG1vbml0b3IgdGhyb3VnaCB0aGUgbmV0bGluayBpbnRlcmZhY2UuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgaG93IGl0JiMzOTtzIGNhbGxlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGl0IHZhbGlkYXRlcyB0aGUgcmVxdWVzdCwgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBtb25pdG9yIGZyYW1ld29yaywgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyB0aGF0IGFyZSBpbnZvbHZlZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdGlwY19ubF9hZGRfbW9uaXRvciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9tb25pdG9yLmM9NzM3PWludCB0aXBjX25sX21vbml0b3JfZ2V0X3RocmVzaG9sZChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3RpcGMvbW9uaXRvci5jLTc0My1cbm5ldC90aXBjL21vbml0b3IuYzo3NDQ6c3RhdGljIGludCBfX3RpcGNfbmxfYWRkX21vbml0b3JfcGVlcihzdHJ1Y3QgdGlwY19wZWVyICpwZWVyLFxubmV0L3RpcGMvbW9uaXRvci5jLTc0NS1cdFx0XHRcdCAgICAgIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnKVxuLS1cbm5ldC90aXBjL21vbml0b3IuYz03OTg9aW50IHRpcGNfbmxfYWRkX21vbml0b3JfcGVlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxuLS1cbm5ldC90aXBjL21vbml0b3IuYy04MTUtXHRcdH1cbm5ldC90aXBjL21vbml0b3IuYzo4MTY6XHRcdGlmIChfX3RpcGNfbmxfYWRkX21vbml0b3JfcGVlcihwZWVyLCBtc2cpKSB7XG5uZXQvdGlwYy9tb25pdG9yLmMtODE3LVx0XHRcdCpwcmV2X25vZGUgPSBwZWVyLVx1MDAzZWFkZHI7XG4tLVxubmV0L3RpcGMvbW9uaXRvci5jLTgyNi1cbm5ldC90aXBjL21vbml0b3IuYzo4Mjc6aW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxubmV0L3RpcGMvbW9uaXRvci5jLTgyOC1cdFx0XHQgIHUzMiBiZWFyZXJfaWQpXG4tLVxubmV0L3RpcGMvbW9uaXRvci5oPTc1PWludCB0aXBjX25sX21vbml0b3JfZ2V0X3RocmVzaG9sZChzdHJ1Y3QgbmV0ICpuZXQpO1xubmV0L3RpcGMvbW9uaXRvci5oOjc2OmludCBfX3RpcGNfbmxfYWRkX21vbml0b3Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZyxcbm5ldC90aXBjL21vbml0b3IuaC03Ny1cdFx0XHQgIHUzMiBiZWFyZXJfaWQpO1xuLS1cbm5ldC90aXBjL25vZGUuYz0yNzYxPWludCB0aXBjX25sX25vZGVfc2V0X21vbml0b3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMjc4OC1cbm5ldC90aXBjL25vZGUuYzoyNzg5OnN0YXRpYyBpbnQgX190aXBjX25sX2FkZF9tb25pdG9yX3Byb3Aoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZylcbm5ldC90aXBjL25vZGUuYy0yNzkwLXtcbi0tXG5uZXQvdGlwYy9ub2RlLmM9MjgyMj1pbnQgdGlwY19ubF9ub2RlX2dldF9tb25pdG9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3RpcGMvbm9kZS5jLTI4MzMtXG5uZXQvdGlwYy9ub2RlLmM6MjgzNDpcdGVyciA9IF9fdGlwY19ubF9hZGRfbW9uaXRvcl9wcm9wKG5ldCwgXHUwMDI2bXNnKTtcbm5ldC90aXBjL25vZGUuYy0yODM1LVx0aWYgKGVycikge1xuLS1cbm5ldC90aXBjL25vZGUuYz0yODQzPWludCB0aXBjX25sX25vZGVfZHVtcF9tb25pdG9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMjg1OS1cdGZvciAoYmVhcmVyX2lkID0gcHJldl9iZWFyZXI7IGJlYXJlcl9pZCBcdTAwM2MgTUFYX0JFQVJFUlM7IGJlYXJlcl9pZCYjNDM7JiM0MzspIHtcbm5ldC90aXBjL25vZGUuYzoyODYwOlx0XHRlcnIgPSBfX3RpcGNfbmxfYWRkX21vbml0b3IobmV0LCBcdTAwMjZtc2csIGJlYXJlcl9pZCk7XG5uZXQvdGlwYy9ub2RlLmMtMjg2MS1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBgX190aXBjX25sX2FkZF9tb25pdG9yYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGBfX3RpcGNfbmxfYWRkX21vbml0b3JgLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4gYG5ldC90aXBjL21vbml0b3IuY2AuIE15IGluaXRpYWwgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBoYW5kbGVzIHRoZSBhZGRpdGlvbiBvZiBhIG5ldyBtb25pdG9yIGZvciB0aGUgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXIgUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBwcm90b2NvbCwgcHJvYmFibHkgcmVsYXRlZCB0byBuZXR3b3JrIG1lc3NhZ2VzIG9yIGV2ZW50cy4gSSBiZXQgaXQgdGFrZXMgY2FyZSBvZiByZWdpc3RlcmluZyB0aGUgbW9uaXRvciYjMzk7cyBjaGFyYWN0ZXJpc3RpY3MsIGxpa2Ugd2hhdCBraW5kIG9mIGV2ZW50cyBpdCYjMzk7cyBpbnRlcmVzdGVkIGluLCB3aGVyZSB0aGUgZGF0YSBzaG91bGQgZ28sIGFuZCBzbyBvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoZSAmIzM0O25sJiMzNDsgcGFydCBzaWduaWZpZXMgLSBpdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBOZXRsaW5rIHByb3RvY29sLCBnaXZlbiB0aGF0IHRoaXMgaXMgYSBuZXR3b3JraW5nIGNvbXBvbmVudC4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIE5ldGxpbmsgbWVzc2FnZSBoYW5kbGluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IHZhbGlkYXRlcyB0aGUgaW5jb21pbmcgaW5mb3JtYXRpb24sIGhvdyBpdCBtYW5hZ2VzIG1lbW9yeSAoYWxsb2NhdGluZyBhbmQgZnJlZWluZyksIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGludGVybmFsIFRJUEMgZGF0YSBzdHJ1Y3R1cmVzIHRvIG1hbmFnZSB0aGUgbW9uaXRvcnMuIEkgYW0gYWxzbyB2ZXJ5IGtlZW4gdG8gbGVhcm4gaWYgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxhYmxlIGZyb20gdGhlIE5ldGxpbmsgdXNlci1zcGFjZSBvciBmcm9tIGtlcm5lbCBpbnRlcm5hbCBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBiZSBzY3J1dGluaXppbmcgdGhlIGNvZGUgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIG1lY2hhbmlzbXMgdG8gZW5zdXJlIGNvbmN1cnJlbmN5IHNhZmV0eS4gRnVydGhlcm1vcmUsIEkmIzM5O2xsIGJlIGNoZWNraW5nIGhvdyB0aGUgbW9uaXRvciYjMzk7cyBsaWZlY3ljbGUgaXMgbWFuYWdlZCDigJMgYXJlIHRoZXJlIGZ1bmN0aW9ucyBmb3IgcmVtb3ZhbCBvciBtb2RpZmljYXRpb24/IEZpbmFsbHksIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIG1vbml0b3JzIGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBUSVBDJiMzOTtzIG92ZXJhbGwgZGVzaWduLCBhbmQgd2hldGhlciBpdCBhbGlnbnMgd2l0aCBwZXJmb3JtYW5jZSBiZXN0IHByYWN0aWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGlwYy9tb25pdG9yLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgyMDpcdFx0XHR9XG4gODIxOlx0XHR9IHdoaWxlICgocGVlciA9IHBlZXJfbnh0KHBlZXIpKSAhPSBtb24tXHUwMDNlc2VsZik7XG4gODIyOlx0XHRyZWFkX3VubG9ja19iaChcdTAwMjZtb24tXHUwMDNlbG9jayk7XG4gODIzOlx0XG4gODI0Olx0XHRyZXR1cm4gMDtcbiA4MjU6XHR9XG4gODI2Olx0XG4gODI3Olx0aW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxuIDgyODpcdFx0XHRcdCAgdTMyIGJlYXJlcl9pZClcbiA4Mjk6XHR7XG4gODMwOlx0XHRzdHJ1Y3QgdGlwY19tb25pdG9yICptb24gPSB0aXBjX21vbml0b3IobmV0LCBiZWFyZXJfaWQpO1xuIDgzMTpcdFx0Y2hhciBiZWFyZXJfbmFtZVtUSVBDX01BWF9CRUFSRVJfTkFNRV07XG4gODMyOlx0XHRzdHJ1Y3QgbmxhdHRyICphdHRycztcbiA4MzM6XHRcdHZvaWQgKmhkcjtcbiA4MzQ6XHRcdGludCByZXQ7XG4gODM1Olx0XG4gODM2Olx0XHRyZXQgPSB0aXBjX2JlYXJlcl9nZXRfbmFtZShuZXQsIGJlYXJlcl9uYW1lLCBiZWFyZXJfaWQpO1xuIDgzNzpcdFx0aWYgKHJldCB8fCAhbW9uKVxuIDgzODpcdFx0XHRyZXR1cm4gMDtcbiA4Mzk6XHRcbiA4NDA6XHRcdGhkciA9IGdlbmxtc2dfcHV0KG1zZy1cdTAwM2Vza2IsIG1zZy1cdTAwM2Vwb3J0aWQsIG1zZy1cdTAwM2VzZXEsIFx1MDAyNnRpcGNfZ2VubF9mYW1pbHksXG4gODQxOlx0XHRcdFx0ICBOTE1fRl9NVUxUSSwgVElQQ19OTF9NT05fR0VUKTtcbiA4NDI6XHRcdGlmICghaGRyKVxuIDg0MzpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDg0NDpcdFxuIDg0NTpcdFx0YXR0cnMgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcobXNnLVx1MDAzZXNrYiwgVElQQ19OTEFfTU9OKTtcbiA4NDY6XHRcdGlmICghYXR0cnMpXG4gODQ3Olx0XHRcdGdvdG8gbXNnX2Z1bGw7XG4gODQ4Olx0XG4gODQ5Olx0XHRyZWFkX2xvY2tfYmgoXHUwMDI2bW9uLVx1MDAzZWxvY2spO1xuIDg1MDpcdFx0aWYgKG5sYV9wdXRfdTMyKG1zZy1cdTAwM2Vza2IsIFRJUENfTkxBX01PTl9SRUYsIGJlYXJlcl9pZCkpXG4gODUxOlx0XHRcdGdvdG8gYXR0cl9tc2dfZnVsbDtcbiA4NTI6XHRcdGlmICh0aXBjX21vbl9pc19hY3RpdmUobmV0LCBtb24pKVxuIDg1MzpcdFx0XHRpZiAobmxhX3B1dF9mbGFnKG1zZy1cdTAwM2Vza2IsIFRJUENfTkxBX01PTl9BQ1RJVkUpKVxuIDg1NDpcdFx0XHRcdGdvdG8gYXR0cl9tc2dfZnVsbDtcbiA4NTU6XHRcdGlmIChubGFfcHV0X3N0cmluZyhtc2ctXHUwMDNlc2tiLCBUSVBDX05MQV9NT05fQkVBUkVSX05BTUUsIGJlYXJlcl9uYW1lKSlcbiA4NTY6XHRcdFx0Z290byBhdHRyX21zZ19mdWxsO1xuIDg1NzpcdFx0aWYgKG5sYV9wdXRfdTMyKG1zZy1cdTAwM2Vza2IsIFRJUENfTkxBX01PTl9QRUVSQ05ULCBtb24tXHUwMDNlcGVlcl9jbnQpKVxuIDg1ODpcdFx0XHRnb3RvIGF0dHJfbXNnX2Z1bGw7XG4gODU5Olx0XHRpZiAobmxhX3B1dF91MzIobXNnLVx1MDAzZXNrYiwgVElQQ19OTEFfTU9OX0xJU1RHRU4sIG1vbi1cdTAwM2VsaXN0X2dlbikpXG4gODYwOlx0XHRcdGdvdG8gYXR0cl9tc2dfZnVsbDtcbiA4NjE6XHRcbiA4NjI6XHRcdHJlYWRfdW5sb2NrX2JoKFx1MDAyNm1vbi1cdTAwM2Vsb2NrKTtcbiA4NjM6XHRcdG5sYV9uZXN0X2VuZChtc2ctXHUwMDNlc2tiLCBhdHRycyk7XG4gODY0Olx0XHRnZW5sbXNnX2VuZChtc2ctXHUwMDNlc2tiLCBoZHIpO1xuIDg2NTpcdFxuIDg2NjpcdFx0cmV0dXJuIDA7XG4gODY3Olx0XG4gODY4Olx0YXR0cl9tc2dfZnVsbDpcbiA4Njk6XHRcdHJlYWRfdW5sb2NrX2JoKFx1MDAyNm1vbi1cdTAwM2Vsb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIzNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQ5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBUSVBDIEJlYXJlciBOYW1lIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBiZWFyZXJfbmFtZWAsIGRlY2xhcmVkIGFzIGBjaGFyIGJlYXJlcl9uYW1lW1RJUENfTUFYX0JFQVJFUl9OQU1FXTtgLCBpcyBhbiBhcnJheSBvbiB0aGUgc3RhY2suIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgaXQmIzM5O3MgdW5pbml0aWFsaXplZCBpbml0aWFsbHkuIFdlIHRoZW4gY2FsbCBgdGlwY19iZWFyZXJfZ2V0X25hbWVgLCB3aGljaCwgYWZ0ZXIgdGhlIGNoYW5nZSwgdXNlcyBgc3Ryc2NweShuYW1lLCBiLSZndDtuYW1lLCBUSVBDX01BWF9CRUFSRVJfTkFNRSk7YCB0byBjb3B5IHRoZSBiZWFyZXIgbmFtZS4gUHJldmlvdXNseSBpdCB1c2VkIGBzdHJjcHlgLgoKTm93LCBpZiBgYi0mZ3Q7bmFtZWAgaXMgc2hvcnRlciB0aGFuIGBUSVBDX01BWF9CRUFSRVJfTkFNRWAsIGBzdHJzY3B5YCAobGlrZSBgc3RyY3B5YCBiZWZvcmUgaXQsIGFuZCBjb250cmFyeSB0byBteSBpbml0aWFsIGV4cGVjdGF0aW9ucykgKnN0aWxsKiBsZWF2ZXMgdGhlIHJlc3Qgb2YgYGJlYXJlcl9uYW1lYCB1bmluaXRpYWxpemVkLiBUaGF0JiMzOTtzIHRoZSBrZXkuIFRoaXMgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBnYXJiYWdlIGRhdGEgaW4gdGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlci4KClRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgaXMgYG5sYV9wdXRfc3RyaW5nYCB3aGljaCBpcyB1c2VkIHRvIHBsYWNlIHRoZSBzdHJpbmcgaW50byB0aGUgbmV0bGluayBtZXNzYWdlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGlzIHdoZXJlIHRoZSB0cm91YmxlIGJlZ2lucy4gSG93ZXZlciwgKml0JiMzOTtzIG5vdCouIGBubGFfcHV0X3N0cmluZ2AgY2FsbHMgYHN0cmxlbmAgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGguIFRoYXQmIzM5O3MgdGhlIHNhdmluZyBncmFjZSEgSXQgY29ycmVjdGx5IGxpbWl0cyB0aGUgY29weSB0byB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHBsdXMgdGhlIG51bGwgdGVybWluYXRvci4gU28sIGl0ICpkb2VzbiYjMzk7dCogY29weSB0aGUgdW5pbml0aWFsaXplZCBieXRlcy4KCkJ1dCwgaGFuZyBvbiwgdGhpcyByZXF1aXJlcyBhIGRlZXBlciBsb29rLiBgbmxhX3B1dF9zdHJpbmdgIGlzIGRlZmluZWQgYXMgYSBjYWxsIHRvIGBubGFfcHV0YCwgd2hpY2ggaXMgZGVmaW5lZCBhczoKCmBgYGMKc3RhdGljIGlubGluZSBpbnQgbmxhX3B1dF9zdHJpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLAoJCQkJIGNvbnN0IGNoYXIgKnN0cikKewoJcmV0dXJuIG5sYV9wdXQoc2tiLCBhdHRydHlwZSwgc3RybGVuKHN0cikgJiM0MzsgMSwgc3RyKTsKfQpgYGAKClNvIGl0IG9ubHkgY29waWVzIGBzdHJsZW4oc3RyKSAmIzQzOyAxYCBieXRlcy4gSXQgZG9lcyBOT1QgY29weSB0aGUgdW5pbml0aWFsaXplZCBieXRlcyBvZiBgYmVhcmVyX25hbWVgLgoKSSBhbHNvIHJlY2FsbCB0aGF0IGBubGFfcHV0YCBtaWdodCBwYWQgdG8gYSA0LWJ5dGUgYm91bmRhcnkuIERvZXMgaXQgcGFkIHdpdGggemVyb2VzPyBZZXMsIGl0IHBhZHMgd2l0aCB6ZXJvZXMhICpPciByYXRoZXIqLCBgX19ubGFfcHV0YCBkb2VzLiBTbywgd2hpbGUgd2UgaGF2ZSB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlIG9yaWdpbmFsIGBiZWFyZXJfbmFtZWAgYXJyYXksIHRoZSBwYWRkaW5nIG1lY2hhbmlzbSBpbiBgbmxhX3B1dGAgZWZmZWN0aXZlbHkgbnVsbHMgYW55IGV4Y2VzcyBieXRlcyBiZXlvbmQgdGhlIHN0cmluZyBsZW5ndGggd2hlbiBhZGRpbmcgdGhlIHN0cmluZyB0byB0aGUgbmV0bGluayBhdHRyaWJ1dGUuCgpTbywgd2hpbGUgdGhlcmUgKmlzKiBhIHBvdGVudGlhbCBmb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrIGRhdGEsIGl0JiMzOTtzICpub3QqIGV4cG9zZWQgaW4gdGhlIG5ldGxpbmsgbWVzc2FnZSBkdWUgdG8gdGhlIHVzZSBvZiBgc3RybGVuYCBpbiBgbmxhX3B1dF9zdHJpbmdgIGFuZCB0aGUgcGFkZGluZyBiZWhhdmlvci4gQSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBleGlzdHMsIGJ1dCBpdCBpcyBub3QgZXhwbG9pdGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbmxhX3B1dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRsaW5rLmg9NTYxPXZvaWQgKm5sYV9yZXNlcnZlX25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuKTtcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDo1NjI6dm9pZCBfX25sYV9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbixcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC01NjMtXHQgICAgICAgY29uc3Qgdm9pZCAqZGF0YSk7XG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6NTY0OnZvaWQgX19ubGFfcHV0XzY0Yml0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtNTY1LVx0XHQgICAgIGNvbnN0IHZvaWQgKmRhdGEsIGludCBwYWRhdHRyKTtcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDo1NjY6dm9pZCBfX25sYV9wdXRfbm9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4sIGNvbnN0IHZvaWQgKmRhdGEpO1xuaW5jbHVkZS9uZXQvbmV0bGluay5oLTU2Ny1pbnQgbmxhX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLCBjb25zdCB2b2lkICpkYXRhKTtcbi0tXG5saWIvbmxhdHRyLmM9MTAyMz1FWFBPUlRfU1lNQk9MKG5sYV9yZXNlcnZlX25vaGRyKTtcbi0tXG5saWIvbmxhdHRyLmMtMTAyNS0vKipcbmxpYi9ubGF0dHIuYzoxMDI2OiAqIF9fbmxhX3B1dCAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHRvIGEgc29ja2V0IGJ1ZmZlclxubGliL25sYXR0ci5jLTEwMjctICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvXG4tLVxubGliL25sYXR0ci5jLTEwMzQtICovXG5saWIvbmxhdHRyLmM6MTAzNTp2b2lkIF9fbmxhX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLFxubGliL25sYXR0ci5jLTEwMzYtXHRcdFx0ICAgICBjb25zdCB2b2lkICpkYXRhKVxuLS1cbmxpYi9ubGF0dHIuYy0xMDQyLX1cbmxpYi9ubGF0dHIuYzoxMDQzOkVYUE9SVF9TWU1CT0woX19ubGFfcHV0KTtcbmxpYi9ubGF0dHIuYy0xMDQ0LVxubGliL25sYXR0ci5jLTEwNDUtLyoqXG5saWIvbmxhdHRyLmM6MTA0NjogKiBfX25sYV9wdXRfNjRiaXQgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB0byBhIHNvY2tldCBidWZmZXIgYW5kIGFsaWduIGl0XG5saWIvbmxhdHRyLmMtMTA0Ny0gKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIGFkZCBhdHRyaWJ1dGUgdG9cbi0tXG5saWIvbmxhdHRyLmMtMTA1NS0gKi9cbmxpYi9ubGF0dHIuYzoxMDU2OnZvaWQgX19ubGFfcHV0XzY0Yml0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sXG5saWIvbmxhdHRyLmMtMTA1Ny1cdFx0ICAgICBjb25zdCB2b2lkICpkYXRhLCBpbnQgcGFkYXR0cilcbi0tXG5saWIvbmxhdHRyLmMtMTA2My19XG5saWIvbmxhdHRyLmM6MTA2NDpFWFBPUlRfU1lNQk9MKF9fbmxhX3B1dF82NGJpdCk7XG5saWIvbmxhdHRyLmMtMTA2NS1cbmxpYi9ubGF0dHIuYy0xMDY2LS8qKlxubGliL25sYXR0ci5jOjEwNjc6ICogX19ubGFfcHV0X25vaGRyIC0gQWRkIGEgbmV0bGluayBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXJcbmxpYi9ubGF0dHIuYy0xMDY4LSAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gYWRkIGF0dHJpYnV0ZSB0b1xuLS1cbmxpYi9ubGF0dHIuYy0xMDc0LSAqL1xubGliL25sYXR0ci5jOjEwNzU6dm9pZCBfX25sYV9wdXRfbm9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4sIGNvbnN0IHZvaWQgKmRhdGEpXG5saWIvbmxhdHRyLmMtMTA3Ni17XG4tLVxubGliL25sYXR0ci5jLTEwODEtfVxubGliL25sYXR0ci5jOjEwODI6RVhQT1JUX1NZTUJPTChfX25sYV9wdXRfbm9oZHIpO1xubGliL25sYXR0ci5jLTEwODMtXG4tLVxubGliL25sYXR0ci5jPTEwOTQ9aW50IG5sYV9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbiwgY29uc3Qgdm9pZCAqZGF0YSlcbi0tXG5saWIvbmxhdHRyLmMtMTA5OC1cbmxpYi9ubGF0dHIuYzoxMDk5Olx0X19ubGFfcHV0KHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4sIGRhdGEpO1xubGliL25sYXR0ci5jLTExMDAtXHRyZXR1cm4gMDtcbi0tXG5saWIvbmxhdHRyLmM9MTExNT1pbnQgbmxhX3B1dF82NGJpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLFxuLS1cbmxpYi9ubGF0dHIuYy0xMTI2LVxubGliL25sYXR0ci5jOjExMjc6XHRfX25sYV9wdXRfNjRiaXQoc2tiLCBhdHRydHlwZSwgYXR0cmxlbiwgZGF0YSwgcGFkYXR0cik7XG5saWIvbmxhdHRyLmMtMTEyOC1cdHJldHVybiAwO1xuLS1cbmxpYi9ubGF0dHIuYz0xMTQxPWludCBubGFfcHV0X25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuLCBjb25zdCB2b2lkICpkYXRhKVxuLS1cbmxpYi9ubGF0dHIuYy0xMTQ1LVxubGliL25sYXR0ci5jOjExNDY6XHRfX25sYV9wdXRfbm9oZHIoc2tiLCBhdHRybGVuLCBkYXRhKTtcbmxpYi9ubGF0dHIuYy0xMTQ3LVx0cmV0dXJuIDA7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDUxPXN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTUyMi1cdGlmICh1cGNhbGxfaW5mby1cdTAwM2V1c2VyZGF0YSlcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjUyMzpcdFx0X19ubGFfcHV0KHVzZXJfc2tiLCBPVlNfUEFDS0VUX0FUVFJfVVNFUkRBVEEsXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01MjQtXHRcdFx0ICBubGFfbGVuKHVwY2FsbF9pbmZvLVx1MDAzZXVzZXJkYXRhKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY4MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBsaWIvbmxhdHRyLmNgKioKCkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gbmV0bGluayBhdHRyaWJ1dGVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgc3RyYWlnaHQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIGBfX25sYV9wdXRgIHdpdGhpbiBgbGliL25sYXR0ci5jYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyB3aGVyZSB0aGUgKmFjdHVhbCogd29yayBvZiBwbGFjaW5nIG5ldGxpbmsgYXR0cmlidXRlcyBpcyBoYXBwZW5pbmcuIEl0JiMzOTtzIHRoZSBidWlsZGluZyBibG9jay4gSSBmaWd1cmUgaWYgSSBuZWVkIHRvIGRpYWdub3NlIGFuIGlzc3VlIHdpdGggdGhlIGF0dHJpYnV0ZXMsIHVuZGVyc3RhbmQgdGhlaXIgc3RydWN0dXJlLCBvciBvcHRpbWl6ZSBzb21lIGZ1bmN0aW9uYWxpdHksIGBfX25sYV9wdXRgIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBidWlsZGluZyBibG9jayBmb3Igd29ya2luZyB3aXRoIGF0dHJpYnV0ZXMsIHNvIGl0IG1ha2VzIHNlbnNlIHRvIHZlcmlmeSB0aGUgb3BlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9ubGF0dHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAzMDpcdCAqIEBkYXRhOiBoZWFkIG9mIGF0dHJpYnV0ZSBwYXlsb2FkXG4xMDMxOlx0ICpcbjEwMzI6XHQgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGVuc3VyZSB0aGF0IHRoZSBza2IgcHJvdmlkZXMgZW5vdWdoXG4xMDMzOlx0ICogdGFpbHJvb20gZm9yIHRoZSBhdHRyaWJ1dGUgaGVhZGVyIGFuZCBwYXlsb2FkLlxuMTAzNDpcdCAqL1xuMTAzNTpcdHZvaWQgX19ubGFfcHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sXG4xMDM2Olx0XHRcdFx0ICAgICBjb25zdCB2b2lkICpkYXRhKVxuMTAzNzpcdHtcbjEwMzg6XHRcdHN0cnVjdCBubGF0dHIgKm5sYTtcbjEwMzk6XHRcbjEwNDA6XHRcdG5sYSA9IF9fbmxhX3Jlc2VydmUoc2tiLCBhdHRydHlwZSwgYXR0cmxlbik7XG4xMDQxOlx0XHRtZW1jcHkobmxhX2RhdGEobmxhKSwgZGF0YSwgYXR0cmxlbik7XG4xMDQyOlx0fVxuMTA0MzpcdEVYUE9SVF9TWU1CT0woX19ubGFfcHV0KTtcbjEwNDQ6XHRcbjEwNDU6XHQvKipcbjEwNDY6XHQgKiBfX25sYV9wdXRfNjRiaXQgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB0byBhIHNvY2tldCBidWZmZXIgYW5kIGFsaWduIGl0XG4xMDQ3Olx0ICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvXG4xMDQ4Olx0ICogQGF0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZVxuMTA0OTpcdCAqIEBhdHRybGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHBheWxvYWRcbjEwNTA6XHQgKiBAZGF0YTogaGVhZCBvZiBhdHRyaWJ1dGUgcGF5bG9hZFxuMTA1MTpcdCAqIEBwYWRhdHRyOiBhdHRyaWJ1dGUgdHlwZSBmb3IgdGhlIHBhZGRpbmdcbjEwNTI6XHQgKlxuMTA1MzpcdCAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gZW5zdXJlIHRoYXQgdGhlIHNrYiBwcm92aWRlcyBlbm91Z2hcbjEwNTQ6XHQgKiB0YWlscm9vbSBmb3IgdGhlIGF0dHJpYnV0ZSBoZWFkZXIgYW5kIHBheWxvYWQuXG4xMDU1Olx0ICovXG4xMDU2Olx0dm9pZCBfX25sYV9wdXRfNjRiaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbixcbjEwNTc6XHRcdFx0ICAgICBjb25zdCB2b2lkICpkYXRhLCBpbnQgcGFkYXR0cilcbjEwNTg6XHR7XG4xMDU5Olx0XHRzdHJ1Y3QgbmxhdHRyICpubGE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNjkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgUGFkZGluZyBNZWNoYW5pc20qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIHJldGhpbmsgdGhpcyBwYWRkaW5nIGlzc3VlLiBUaGUgbmFtZSBgX19ubGFfcmVzZXJ2ZWAuLi4gdGhhdCYjMzk7cyByaW5naW5nIGEgYmVsbC4gTXkgZ3V0IHRlbGxzIG1lICp0aGF0JiMzOTtzKiB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBwYWRkaW5nIHdpdGhpbiB0aGlzIE5ldGxpbmsgQXR0cmlidXRlIChOTEEpIHN0cnVjdHVyZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQ7IEkgbmVlZCB0byBjb25maXJtIG15IGluaXRpYWwgaHVuY2guIEdvdHRhIHZlcmlmeSB0aGUgcm9sZSBvZiBgX19ubGFfcmVzZXJ2ZWAgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBpbmRlZWQgdGhlIHJpZ2h0IGxvY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX25sYV9yZXNlcnZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGxpbmsuaD01NTM9aW50IG5sYV9zdHJjbXAoY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLCBjb25zdCBjaGFyICpzdHIpO1xuaW5jbHVkZS9uZXQvbmV0bGluay5oOjU1NDpzdHJ1Y3QgbmxhdHRyICpfX25sYV9yZXNlcnZlKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4pO1xuaW5jbHVkZS9uZXQvbmV0bGluay5oOjU1NTpzdHJ1Y3QgbmxhdHRyICpfX25sYV9yZXNlcnZlXzY0Yml0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC01NTYtXHRcdFx0XHQgICBpbnQgYXR0cmxlbiwgaW50IHBhZGF0dHIpO1xuaW5jbHVkZS9uZXQvbmV0bGluay5oOjU1Nzp2b2lkICpfX25sYV9yZXNlcnZlX25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuKTtcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC01NTgtc3RydWN0IG5sYXR0ciAqbmxhX3Jlc2VydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbik7XG4tLVxubGliL25sYXR0ci5jPTg4Nz1FWFBPUlRfU1lNQk9MKG5sYV9zdHJjbXApO1xuLS1cbmxpYi9ubGF0dHIuYy04OTAtLyoqXG5saWIvbmxhdHRyLmM6ODkxOiAqIF9fbmxhX3Jlc2VydmUgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBvbiB0aGUgc2tiXG5saWIvbmxhdHRyLmMtODkyLSAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gcmVzZXJ2ZSByb29tIG9uXG4tLVxubGliL25sYXR0ci5jLTkwMS0gKi9cbmxpYi9ubGF0dHIuYzo5MDI6c3RydWN0IG5sYXR0ciAqX19ubGFfcmVzZXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuKVxubGliL25sYXR0ci5jLTkwMy17XG4tLVxubGliL25sYXR0ci5jLTkxMy19XG5saWIvbmxhdHRyLmM6OTE0OkVYUE9SVF9TWU1CT0woX19ubGFfcmVzZXJ2ZSk7XG5saWIvbmxhdHRyLmMtOTE1LVxubGliL25sYXR0ci5jLTkxNi0vKipcbmxpYi9ubGF0dHIuYzo5MTc6ICogX19ubGFfcmVzZXJ2ZV82NGJpdCAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIG9uIHRoZSBza2IgYW5kIGFsaWduIGl0XG5saWIvbmxhdHRyLmMtOTE4LSAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gcmVzZXJ2ZSByb29tIG9uXG4tLVxubGliL25sYXR0ci5jLTkyOS0gKi9cbmxpYi9ubGF0dHIuYzo5MzA6c3RydWN0IG5sYXR0ciAqX19ubGFfcmVzZXJ2ZV82NGJpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsXG5saWIvbmxhdHRyLmMtOTMxLVx0XHRcdFx0ICAgaW50IGF0dHJsZW4sIGludCBwYWRhdHRyKVxuLS1cbmxpYi9ubGF0dHIuYy05MzQtXG5saWIvbmxhdHRyLmM6OTM1Olx0cmV0dXJuIF9fbmxhX3Jlc2VydmUoc2tiLCBhdHRydHlwZSwgYXR0cmxlbik7XG5saWIvbmxhdHRyLmMtOTM2LX1cbmxpYi9ubGF0dHIuYzo5Mzc6RVhQT1JUX1NZTUJPTChfX25sYV9yZXNlcnZlXzY0Yml0KTtcbmxpYi9ubGF0dHIuYy05MzgtXG5saWIvbmxhdHRyLmMtOTM5LS8qKlxubGliL25sYXR0ci5jOjk0MDogKiBfX25sYV9yZXNlcnZlX25vaGRyIC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXJcbmxpYi9ubGF0dHIuYy05NDEtICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byByZXNlcnZlIHJvb20gb25cbi0tXG5saWIvbmxhdHRyLmMtOTQ4LSAqL1xubGliL25sYXR0ci5jOjk0OTp2b2lkICpfX25sYV9yZXNlcnZlX25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuKVxubGliL25sYXR0ci5jLTk1MC17XG4tLVxubGliL25sYXR0ci5jLTk1Mi19XG5saWIvbmxhdHRyLmM6OTUzOkVYUE9SVF9TWU1CT0woX19ubGFfcmVzZXJ2ZV9ub2hkcik7XG5saWIvbmxhdHRyLmMtOTU0LVxuLS1cbmxpYi9ubGF0dHIuYz05Njc9c3RydWN0IG5sYXR0ciAqbmxhX3Jlc2VydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbilcbi0tXG5saWIvbmxhdHRyLmMtOTcxLVxubGliL25sYXR0ci5jOjk3MjpcdHJldHVybiBfX25sYV9yZXNlcnZlKHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4pO1xubGliL25sYXR0ci5jLTk3My19XG4tLVxubGliL25sYXR0ci5jPTk5MD1zdHJ1Y3QgbmxhdHRyICpubGFfcmVzZXJ2ZV82NGJpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLFxuLS1cbmxpYi9ubGF0dHIuYy0xMDAxLVxubGliL25sYXR0ci5jOjEwMDI6XHRyZXR1cm4gX19ubGFfcmVzZXJ2ZV82NGJpdChza2IsIGF0dHJ0eXBlLCBhdHRybGVuLCBwYWRhdHRyKTtcbmxpYi9ubGF0dHIuYy0xMDAzLX1cbi0tXG5saWIvbmxhdHRyLmM9MTAxNj12b2lkICpubGFfcmVzZXJ2ZV9ub2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cmxlbilcbi0tXG5saWIvbmxhdHRyLmMtMTAyMC1cbmxpYi9ubGF0dHIuYzoxMDIxOlx0cmV0dXJuIF9fbmxhX3Jlc2VydmVfbm9oZHIoc2tiLCBhdHRybGVuKTtcbmxpYi9ubGF0dHIuYy0xMDIyLX1cbi0tXG5saWIvbmxhdHRyLmM9MTAzNT12b2lkIF9fbmxhX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLFxuLS1cbmxpYi9ubGF0dHIuYy0xMDM5LVxubGliL25sYXR0ci5jOjEwNDA6XHRubGEgPSBfX25sYV9yZXNlcnZlKHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4pO1xubGliL25sYXR0ci5jLTEwNDEtXHRtZW1jcHkobmxhX2RhdGEobmxhKSwgZGF0YSwgYXR0cmxlbik7XG4tLVxubGliL25sYXR0ci5jPTEwNTY9dm9pZCBfX25sYV9wdXRfNjRiaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbixcbi0tXG5saWIvbmxhdHRyLmMtMTA2MC1cbmxpYi9ubGF0dHIuYzoxMDYxOlx0bmxhID0gX19ubGFfcmVzZXJ2ZV82NGJpdChza2IsIGF0dHJ0eXBlLCBhdHRybGVuLCBwYWRhdHRyKTtcbmxpYi9ubGF0dHIuYy0xMDYyLVx0bWVtY3B5KG5sYV9kYXRhKG5sYSksIGRhdGEsIGF0dHJsZW4pO1xuLS1cbmxpYi9ubGF0dHIuYz0xMDc1PXZvaWQgX19ubGFfcHV0X25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuLCBjb25zdCB2b2lkICpkYXRhKVxuLS1cbmxpYi9ubGF0dHIuYy0xMDc4LVxubGliL25sYXR0ci5jOjEwNzk6XHRzdGFydCA9IF9fbmxhX3Jlc2VydmVfbm9oZHIoc2tiLCBhdHRybGVuKTtcbmxpYi9ubGF0dHIuYy0xMDgwLVx0bWVtY3B5KHN0YXJ0LCBkYXRhLCBhdHRybGVuKTtcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz0yMTY9c3RhdGljIHZvaWQgdHJhY2VfZHJvcF9jb21tb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqbG9jYXRpb24pXG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMjUwLVx0ICovXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzoyNTE6XHRfX25sYV9yZXNlcnZlX25vaGRyKGRza2IsIHNpemVvZihzdHJ1Y3QgbmV0X2RtX2Ryb3BfcG9pbnQpKTtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTI1Mi1cdG5sYS1cdTAwM2VubGFfbGVuICYjNDM7PSBOTEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBuZXRfZG1fZHJvcF9wb2ludCkpO1xuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTYxMT1zdGF0aWMgaW50IG5ldF9kbV9wYWNrZXRfcmVwb3J0X2ZpbGwoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy02NzMtXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo2NzQ6XHRhdHRyID0gX19ubGFfcmVzZXJ2ZShtc2csIE5FVF9ETV9BVFRSX1BBWUxPQUQsIHBheWxvYWRfbGVuKTtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTY3NS1cdGlmIChza2JfY29weV9iaXRzKHNrYiwgMCwgbmxhX2RhdGEoYXR0ciksIHBheWxvYWRfbGVuKSlcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz03Nzg9c3RhdGljIGludCBuZXRfZG1faHdfcGFja2V0X3JlcG9ydF9maWxsKHN0cnVjdCBza19idWZmICptc2csXG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtODMxLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6ODMyOlx0YXR0ciA9IF9fbmxhX3Jlc2VydmUobXNnLCBORVRfRE1fQVRUUl9QQVlMT0FELCBwYXlsb2FkX2xlbik7XG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy04MzMtXHRpZiAoc2tiX2NvcHlfYml0cyhza2IsIDAsIG5sYV9kYXRhKGF0dHIpLCBwYXlsb2FkX2xlbikpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz03MDU9bmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODE3LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4MTg6XHRubGEgPSBfX25sYV9yZXNlcnZlKHNrYiwgTkZRQV9QQUNLRVRfSERSLCBzaXplb2YoKnBtc2cpKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODE5LVx0cG1zZyA9IG5sYV9kYXRhKG5sYSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTczCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIGxhaWQgb3V0LCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgYF9fbmxhX3Jlc2VydmVgIGluIGBsaWIvbmxhdHRyLmNgKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBfX25sYV9yZXNlcnZlYCBhbmQgd2hlcmUgaXQgbGl2ZXMg4oCTIGxldCYjMzk7cyBjaGVjayBpdCBvdXQgZGlyZWN0bHkgaW4gYGxpYi9ubGF0dHIuY2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBsb3ctbGV2ZWwgTmV0bGluayBhdHRyaWJ1dGUgaGFuZGxpbmcgY29kZS4gSG9wZWZ1bGx5LCB1bmRlcnN0YW5kaW5nIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgdXNhZ2UgdGhlcmUgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBzb3VyY2UgY29kZSByZXZlYWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9ubGF0dHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODkwOlx0LyoqXG4gODkxOlx0ICogX19ubGFfcmVzZXJ2ZSAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIG9uIHRoZSBza2JcbiA4OTI6XHQgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIHJlc2VydmUgcm9vbSBvblxuIDg5MzpcdCAqIEBhdHRydHlwZTogYXR0cmlidXRlIHR5cGVcbiA4OTQ6XHQgKiBAYXR0cmxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkXG4gODk1Olx0ICpcbiA4OTY6XHQgKiBBZGRzIGEgbmV0bGluayBhdHRyaWJ1dGUgaGVhZGVyIHRvIGEgc29ja2V0IGJ1ZmZlciBhbmQgcmVzZXJ2ZXNcbiA4OTc6XHQgKiByb29tIGZvciB0aGUgcGF5bG9hZCBidXQgZG9lcyBub3QgY29weSBpdC5cbiA4OTg6XHQgKlxuIDg5OTpcdCAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gZW5zdXJlIHRoYXQgdGhlIHNrYiBwcm92aWRlcyBlbm91Z2hcbiA5MDA6XHQgKiB0YWlscm9vbSBmb3IgdGhlIGF0dHJpYnV0ZSBoZWFkZXIgYW5kIHBheWxvYWQuXG4gOTAxOlx0ICovXG4gOTAyOlx0c3RydWN0IG5sYXR0ciAqX19ubGFfcmVzZXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuKVxuIDkwMzpcdHtcbiA5MDQ6XHRcdHN0cnVjdCBubGF0dHIgKm5sYTtcbiA5MDU6XHRcbiA5MDY6XHRcdG5sYSA9IHNrYl9wdXQoc2tiLCBubGFfdG90YWxfc2l6ZShhdHRybGVuKSk7XG4gOTA3Olx0XHRubGEtXHUwMDNlbmxhX3R5cGUgPSBhdHRydHlwZTtcbiA5MDg6XHRcdG5sYS1cdTAwM2VubGFfbGVuID0gbmxhX2F0dHJfc2l6ZShhdHRybGVuKTtcbiA5MDk6XHRcbiA5MTA6XHRcdG1lbXNldCgodW5zaWduZWQgY2hhciAqKSBubGEgJiM0MzsgbmxhLVx1MDAzZW5sYV9sZW4sIDAsIG5sYV9wYWRsZW4oYXR0cmxlbikpO1xuIDkxMTpcdFxuIDkxMjpcdFx0cmV0dXJuIG5sYTtcbiA5MTM6XHR9XG4gOTE0Olx0RVhQT1JUX1NZTUJPTChfX25sYV9yZXNlcnZlKTtcbiA5MTU6XHRcbiA5MTY6XHQvKipcbiA5MTc6XHQgKiBfX25sYV9yZXNlcnZlXzY0Yml0IC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgb24gdGhlIHNrYiBhbmQgYWxpZ24gaXRcbiA5MTg6XHQgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIHJlc2VydmUgcm9vbSBvblxuIDkxOTpcdCAqIEBhdHRydHlwZTogYXR0cmlidXRlIHR5cGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNzcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN0cmluZyBIYW5kbGluZyBpbiBUSVBDIEJlYXJlciBOYW1lcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyBzdHJpbmcgY29waWVzLCBzcGVjaWZpY2FsbHkgd2l0aCBiZWFyZXIgbmFtZXMuIEl0IGxvb2tzIGxpa2UgYF9fbmxhX3Jlc2VydmVgIGlzIHVzZWQgdG8gcGFkIGFuIGF0dHJpYnV0ZSB3aXRoIHplcm9lcyBhZnRlciByZXNlcnZpbmcgc3BhY2UuIFRoZW4sIGBubGFfcHV0X3N0cmluZ2AgaXMgY2FsbGVkLCB3aGljaCBoYW5kbGVzIGNvcHlpbmcgc3RyaW5ncywgYW5kIGl0JiMzOTtzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3Mgb25seSBjb3B5aW5nIGBzdHJsZW4oc3RyKSAmIzQzOyAxYCBieXRlcy4gTGV0IG1lIHRyYWNlIHRoaXMgYmFjay4uLiBgbmxhX3B1dF9zdHJpbmdgIHVzZXMgYG5sYV9wdXRgLCB3aGljaCByZXNlcnZlcyBzcGFjZSB1c2luZyBgX19ubGFfcmVzZXJ2ZWAgKHBhZGRpbmcgd2l0aCB6ZXJvZXMgYXMgd2UganVzdCBlc3RhYmxpc2hlZCksIGFuZCAqdGhlbiogY29waWVzIHRoZSBkYXRhIHVzaW5nIGBtZW1jcHlgLiAgU28sIGl0IHNlZW1zIHRoYXQgYG5sYV9wdXRfc3RyaW5nYCBjb3BpZXMgZXhhY3RseSBgc3RybGVuKHN0cikgJiM0MzsgMWAgYnl0ZXMgZnJvbSB0aGUgc291cmNlIHN0cmluZy4KCkFoLCBJIG5lZWQgdG8gY2hlY2sgd2hhdCBoYXBwZW5zIHdpdGggdGhlIHNvdXJjZSBzdHJpbmcgbm93LiBUaGUgY29kZSBpcyB1c2luZyBgc3Ryc2NweWAsIGFuZCB0aGUgZWFybGllciB2ZXJzaW9uIHVzZWQgYHN0cmNweWAgd2hpY2gsIG9mIGNvdXJzZSwgaXMgZGFuZ2Vyb3VzIHdpdGhvdXQgZXhwbGljaXQgbGVuZ3RoIGNoZWNrcy4gU28gYHN0cnNjcHlgIGlzIGFuIGltcHJvdmVtZW50LiBNeSBjb25jZXJuIG5vdyBpcyB3aGF0IGhhcHBlbnMgaWYgYHN0cnNjcHlgIGZhaWxzPyBJdCBsb29rcyBsaWtlIGl0IHJldHVybnMgYC1FMkJJR2AgaWYgdGhlIHN0cmluZyBpcyB0b28gbG9uZywgYnV0ICpzdGlsbCogbnVsbC10ZXJtaW5hdGVzIHRoZSBzdHJpbmcsIHVubGVzcyB0aGUgc2l6ZSBpcyAwLgoKTm93LCBsZXQmIzM5O3MgY29tcGFyZSB0aGUgY2hhbmdlLiBUaGUgb2xkIGNvZGUgd2FzIGEgc2ltcGxlIGBzdHJjcHlgLCBidXQgbm93IGl0JiMzOTtzIGBzdHJzY3B5YCB3aXRoIGEgc2l6ZSBsaW1pdCwgYFRJUENfTUFYX0JFQVJFUl9OQU1FYC4gT2theSwgc28gaWYgdGhlIHNvdXJjZSBzdHJpbmcgKGBiLSZndDtuYW1lYCkgaXMgZXhhY3RseSBgVElQQ19NQVhfQkVBUkVSX05BTUVgIGJ5dGVzIGxvbmcsICp3aXRob3V0KiBhIG51bGwgdGVybWluYXRvciwgYHN0cnNjcHlgIHdpbGwgY29weSBgVElQQ19NQVhfQkVBUkVSX05BTUUgLSAxYCBieXRlcyBhbmQgYWRkIGEgbnVsbCB0ZXJtaW5hdG9yLiBUaGF0IG1lYW5zIHRoZXJlJiMzOTtzIGFsd2F5cyBhIG51bGwgdGVybWluYXRvciEgR29vZCwgdGhhdCYjMzk7cyBjcnVjaWFsLiAgQW5kLCBvaCwgcmlnaHQgLSBgYi0mZ3Q7bmFtZWAgaXMgYW4gYXJyYXkgb2Ygc2l6ZSBgVElQQ19NQVhfQkVBUkVSX05BTUVgLCB3aGljaCBpcyAzMiBieXRlcy4uLiBJIHdpbGwgZG91YmxlLWNoZWNrIGBzdHJ1Y3QgdGlwY19iZWFyZXJgIHN0cnVjdHVyZSB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZywgYnV0IHRoaXMgbG9va3MgcHJldHR5IHNvbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdGlwY19iZWFyZXIgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2JlYXJlci5oPTEwND1zdHJ1Y3QgdGlwY19tZWRpYSB7XG4tLVxubmV0L3RpcGMvYmVhcmVyLmgtMTU2LSAqL1xubmV0L3RpcGMvYmVhcmVyLmg6MTU3OnN0cnVjdCB0aXBjX2JlYXJlciB7XG5uZXQvdGlwYy9iZWFyZXIuaC0xNTgtXHR2b2lkIF9fcmN1ICptZWRpYV9wdHI7XHRcdFx0LyogaW5pdGlhbGl6ZWQgYnkgbWVkaWEgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgVElQQyBCZWFyZXIgU3RydWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyByZWZyZXNoIG91ciBtZW1vcnkgb24gdGhlIGBzdHJ1Y3QgdGlwY19iZWFyZXJgIGRlZmluaXRpb24uIFRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L3RpcGMvYmVhcmVyLmhgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhbmQgaG93IGl0IHNlcnZlcyBhcyB0aGUgY29yZSByZXByZXNlbnRhdGlvbiBmb3IgVElQQyBiZWFyZXJzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgZmllbGRzIHJlbGF0ZWQgdG8gdmFyaW91cyB1bmRlcmx5aW5nIG5ldHdvcmsgdHJhbnNwb3J0cyBhbmQgdW5kZXJzdGFuZCB0aGUgcm9sZSB0aGlzIHN0cnVjdCBwbGF5cyBpbiBtYW5hZ2luZyBwaHlzaWNhbCBhbmQgdmlydHVhbCBjb25uZWN0aW9ucy4gSeKAmW0gaG9waW5nIHRvIGFzc2VzcyB3aGV0aGVyIGl0IHByb3Blcmx5IGFkZHJlc3NlcyBtb2Rlcm4gbmV0d29ya2luZyBuZWVkcyDigJMgaXMgaXQgc3RpbGwgcm9idXN0LCBzY2FsYWJsZSwgYW5kIGVmZmljaWVudD8gSXMgdGhlcmUgYW55dGhpbmcgaGVyZSB0aGF0IGNvdWxkIGJlY29tZSBhIGJvdHRsZW5lY2sgb3IgYSBwb3RlbnRpYWwgc291cmNlIG9mIGNvbXBsZXhpdHkgYXMgd2UgY29uc2lkZXIgZnV0dXJlIGVuaGFuY2VtZW50cz8gTGV0JiMzOTtzIGdldCB0byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3RpcGMvYmVhcmVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE1MDpcdCAqIEB1cDogYmVhcmVyIHVwIGZsYWcgKGJpdCAwKVxuIDE1MTpcdCAqIEByZWZjbnQ6IHRpcGNfYmVhcmVyIHJlZmVyZW5jZSBjb3VudGVyXG4gMTUyOlx0ICpcbiAxNTM6XHQgKiBOb3RlOiBtZWRpYS1zcGVjaWZpYyBjb2RlIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXphdGlvbiBvZiB0aGUgZmllbGRzXG4gMTU0Olx0ICogaW5kaWNhdGVkIGJlbG93IHdoZW4gYSBiZWFyZXIgaXMgZW5hYmxlZDsgVElQQyYjMzk7cyBnZW5lcmljIGJlYXJlciBjb2RlIHRha2VzXG4gMTU1Olx0ICogY2FyZSBvZiBpbml0aWFsaXppbmcgYWxsIG90aGVyIGZpZWxkcy5cbiAxNTY6XHQgKi9cbiAxNTc6XHRzdHJ1Y3QgdGlwY19iZWFyZXIge1xuIDE1ODpcdFx0dm9pZCBfX3JjdSAqbWVkaWFfcHRyO1x0XHRcdC8qIGluaXRpYWxpemVkIGJ5IG1lZGlhICovXG4gMTU5Olx0XHR1MzIgbXR1O1x0XHRcdFx0LyogaW5pdGlhbGl6ZWQgYnkgbWVkaWEgKi9cbiAxNjA6XHRcdHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgYWRkcjtcdFx0LyogaW5pdGlhbGl6ZWQgYnkgbWVkaWEgKi9cbiAxNjE6XHRcdGNoYXIgbmFtZVtUSVBDX01BWF9CRUFSRVJfTkFNRV07XG4gMTYyOlx0XHRzdHJ1Y3QgdGlwY19tZWRpYSAqbWVkaWE7XG4gMTYzOlx0XHRzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyIGJjYXN0X2FkZHI7XG4gMTY0Olx0XHRzdHJ1Y3QgcGFja2V0X3R5cGUgcHQ7XG4gMTY1Olx0XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIDE2NjpcdFx0dTMyIHByaW9yaXR5O1xuIDE2NzpcdFx0dTMyIG1pbl93aW47XG4gMTY4Olx0XHR1MzIgbWF4X3dpbjtcbiAxNjk6XHRcdHUzMiB0b2xlcmFuY2U7XG4gMTcwOlx0XHR1MzIgZG9tYWluO1xuIDE3MTpcdFx0dTMyIGlkZW50aXR5O1xuIDE3MjpcdFx0c3RydWN0IHRpcGNfZGlzY292ZXJlciAqZGlzYztcbiAxNzM6XHRcdGNoYXIgbmV0X3BsYW5lO1xuIDE3NDpcdFx0dTE2IGVuY2FwX2hsZW47XG4gMTc1Olx0XHR1bnNpZ25lZCBsb25nIHVwO1xuIDE3NjpcdFx0cmVmY291bnRfdCByZWZjbnQ7XG4gMTc3Olx0fTtcbiAxNzg6XHRcbiAxNzk6XHRzdHJ1Y3QgdGlwY19iZWFyZXJfbmFtZXMge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA0NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGluIGBuYW1lYCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmFtZWAgdmFyaWFibGU6IGBjaGFyIG5hbWVbVElQQ19NQVhfQkVBUkVSX05BTUVdO2AuIFJpZ2h0IGF3YXksIEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlLiBJZiB0aGUgaW5wdXQgYGItJmd0O25hbWVgIGlzbiYjMzk7dCBwcm9wZXJseSBudWxsLXRlcm1pbmF0ZWQsIHRoYXQgYHN0cmNweShuYW1lLCBiLSZndDtuYW1lKWAgY291bGQgdmVyeSBlYXNpbHkgbGVhZCB0byBhIHJlYWQgYW5kIHdyaXRlIGJ1ZmZlciBvdmVyZmxvdy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSwgYW5kIEkgbmVlZCB0byBiZSBzdXJlIGl0JiMzOTtzIG5vdCBwcmVzZW50IGhlcmUuCgpCdXQgaG9sZCBvbiwgd2hlcmUgKmRvZXMqIGBiLSZndDtuYW1lYCBnZXQgcG9wdWxhdGVkPyBBaCwgaXQmIzM5O3MgaW4gYHRpcGNfZW5hYmxlX2JlYXJlcmAuIE9rYXksIHRoYXQmIzM5O3MgdGhlIG5leHQgcGxhY2UgdG8gaW52ZXN0aWdhdGUuIEkgbmVlZCB0byBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgdHJhY2UgdGhlIHBhdGggd2hlcmUgYGItJmd0O25hbWVgIGlzIGFzc2lnbmVkLiBUaGUga2V5IGlzIGdvaW5nIHRvIGJlIGRldGVybWluaW5nIGlmIHRoZXJlJiMzOTtzIGFueSBzYWZlZ3VhcmQgdGhlcmUgYWdhaW5zdCBub24tbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3Mgb3IgZXhjZXNzaXZlIGxlbmd0aCBpbiB0aGUgaW5wdXQgZGF0YS4gVGhpcyBpcyBsb29raW5nIGxpa2UgYSBwb3RlbnRpYWwgcHJvYmxlbSBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX2VuYWJsZV9iZWFyZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvYmVhcmVyLmM9MjI3PXZvaWQgdGlwY19iZWFyZXJfcmVtb3ZlX2Rlc3Qoc3RydWN0IG5ldCAqbmV0LCB1MzIgYmVhcmVyX2lkLCB1MzIgZGVzdClcbi0tXG5uZXQvdGlwYy9iZWFyZXIuYy0yMzgtLyoqXG5uZXQvdGlwYy9iZWFyZXIuYzoyMzk6ICogdGlwY19lbmFibGVfYmVhcmVyIC0gZW5hYmxlIGJlYXJlciB3aXRoIHRoZSBnaXZlbiBuYW1lXG5uZXQvdGlwYy9iZWFyZXIuYy0yNDAtICogQG5ldDogdGhlIGFwcGxpY2FibGUgbmV0IG5hbWVzcGFjZVxuLS1cbm5ldC90aXBjL2JlYXJlci5jLTI0Ni0gKi9cbm5ldC90aXBjL2JlYXJlci5jOjI0NzpzdGF0aWMgaW50IHRpcGNfZW5hYmxlX2JlYXJlcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG5uZXQvdGlwYy9iZWFyZXIuYy0yNDgtXHRcdFx0ICAgICAgdTMyIGRpc2NfZG9tYWluLCB1MzIgcHJpbyxcbi0tXG5uZXQvdGlwYy9iZWFyZXIuYz0xMDA4PWludCBfX3RpcGNfbmxfYmVhcmVyX2VuYWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC90aXBjL2JlYXJlci5jLTEwNDctXG5uZXQvdGlwYy9iZWFyZXIuYzoxMDQ4Olx0cmV0dXJuIHRpcGNfZW5hYmxlX2JlYXJlcihuZXQsIGJlYXJlciwgZG9tYWluLCBwcmlvLCBhdHRycyxcbm5ldC90aXBjL2JlYXJlci5jLTEwNDktXHRcdFx0XHQgIGluZm8tXHUwMDNlZXh0YWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2ODEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKkNoZWNraW5nIGB0aXBjX2VuYWJsZV9iZWFyZXJgIGluIGBuZXQvdGlwYy9iZWFyZXIuY2AqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBiZWFyZXIgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGJlYXJlciBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbiBpcyBoYW5kbGVkLiBUaGUgZnVuY3Rpb24gYHRpcGNfZW5hYmxlX2JlYXJlcmAgaW4gYG5ldC90aXBjL2JlYXJlci5jYCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJIHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBob2xkcyB0aGUgY29yZSBsb2dpYyBmb3IgZW5hYmxpbmcgYSBwYXJ0aWN1bGFyIHRyYW5zcG9ydCBiZWFyZXIsIHdoYXRldmVyIHRoYXQgbWF5IGJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQga2luZCBvZiBjaGVja3MgaXQgcGVyZm9ybXMsIHdoaWNoIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIG92ZXJhbGwgVElQQyBuZXR3b3JraW5nIHN0YWNrLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgb24gbGluayBlc3RhYmxpc2htZW50LCByb3V0ZSBjb25maWd1cmF0aW9uLCBwZXJoYXBzIGV2ZW4gc29tZSBlcnJvciBoYW5kbGluZyByZWxhdGVkIHRvIGJlYXJlciBhdmFpbGFiaWxpdHkgb3IgcmVzb3VyY2UgYWxsb2NhdGlvbi4gVGhlIG5hbWluZyBzdWdnZXN0cyBpdCYjMzk7cyB0aGUga2V5IGZ1bmN0aW9uIEkmIzM5O20gYWZ0ZXIsIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBpdCBmaXRzIHRoZSBicm9hZGVyIGNvbnRleHQgYXMgSSBkaWcgZGVlcGVyLiBUaGlzIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgYmVhcmVyIGxpZmVjeWNsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGlwYy9iZWFyZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQ3Olx0c3RhdGljIGludCB0aXBjX2VuYWJsZV9iZWFyZXIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxuIDI0ODpcdFx0XHRcdCAgICAgIHUzMiBkaXNjX2RvbWFpbiwgdTMyIHByaW8sXG4gMjQ5Olx0XHRcdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqYXR0cltdLFxuIDI1MDpcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAyNTE6XHR7XG4gMjUyOlx0XHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiAyNTM6XHRcdHN0cnVjdCB0aXBjX2JlYXJlcl9uYW1lcyBiX25hbWVzO1xuIDI1NDpcdFx0aW50IHdpdGhfdGhpc19wcmlvID0gMTtcbiAyNTU6XHRcdHN0cnVjdCB0aXBjX2JlYXJlciAqYjtcbiAyNTY6XHRcdHN0cnVjdCB0aXBjX21lZGlhICptO1xuIDI1NzpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAyNTg6XHRcdGludCBiZWFyZXJfaWQgPSAwO1xuIDI1OTpcdFx0aW50IHJlcyA9IC1FSU5WQUw7XG4gMjYwOlx0XHRjaGFyICplcnJzdHIgPSBcJiMzNDtcJiMzNDs7XG4gMjYxOlx0XHR1MzIgaTtcbiAyNjI6XHRcbiAyNjM6XHRcdGlmICghYmVhcmVyX25hbWVfdmFsaWRhdGUobmFtZSwgXHUwMDI2Yl9uYW1lcykpIHtcbiAyNjQ6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbGxlZ2FsIG5hbWVcJiMzNDspO1xuIDI2NTpcdFx0XHRyZXR1cm4gcmVzO1xuIDI2NjpcdFx0fVxuIDI2NzpcdFxuIDI2ODpcdFx0aWYgKHByaW8gXHUwMDNlIFRJUENfTUFYX0xJTktfUFJJIFx1MDAyNlx1MDAyNiBwcmlvICE9IFRJUENfTUVESUFfTElOS19QUkkpIHtcbiAyNjk6XHRcdFx0ZXJyc3RyID0gXCYjMzQ7aWxsZWdhbCBwcmlvcml0eVwmIzM0OztcbiAyNzA6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbGxlZ2FsIHByaW9yaXR5XCYjMzQ7KTtcbiAyNzE6XHRcdFx0Z290byByZWplY3RlZDtcbiAyNzI6XHRcdH1cbiAyNzM6XHRcbiAyNzQ6XHRcdG0gPSB0aXBjX21lZGlhX2ZpbmQoYl9uYW1lcy5tZWRpYV9uYW1lKTtcbiAyNzU6XHRcdGlmICghbSkge1xuIDI3NjpcdFx0XHRlcnJzdHIgPSBcJiMzNDttZWRpYSBub3QgcmVnaXN0ZXJlZFwmIzM0OztcbiAyNzc6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtNZWRpYSBub3QgcmVnaXN0ZXJlZFwmIzM0Oyk7XG4gMjc4Olx0XHRcdGdvdG8gcmVqZWN0ZWQ7XG4gMjc5Olx0XHR9XG4gMjgwOlx0XG4gMjgxOlx0XHRpZiAocHJpbyA9PSBUSVBDX01FRElBX0xJTktfUFJJKVxuIDI4MjpcdFx0XHRwcmlvID0gbS1cdTAwM2Vwcmlvcml0eTtcbiAyODM6XHRcbiAyODQ6XHRcdC8qIENoZWNrIG5ldyBiZWFyZXIgdnMgZXhpc3Rpbmcgb25lcyBhbmQgZmluZCBmcmVlIGJlYXJlciBpZCBpZiBhbnkgKi9cbiAyODU6XHRcdGJlYXJlcl9pZCA9IE1BWF9CRUFSRVJTO1xuIDI4NjpcdFx0aSA9IE1BWF9CRUFSRVJTO1xuIDI4NzpcdFx0d2hpbGUgKGktLSAhPSAwKSB7XG4gMjg4Olx0XHRcdGIgPSBydG5sX2RlcmVmZXJlbmNlKHRuLVx1MDAzZWJlYXJlcl9saXN0W2ldKTtcbiAyODk6XHRcdFx0aWYgKCFiKSB7XG4gMjkwOlx0XHRcdFx0YmVhcmVyX2lkID0gaTtcbiAyOTE6XHRcdFx0XHRjb250aW51ZTtcbiAyOTI6XHRcdFx0fVxuIDI5MzpcdFx0XHRpZiAoIXN0cmNtcChuYW1lLCBiLVx1MDAzZW5hbWUpKSB7XG4gMjk0Olx0XHRcdFx0ZXJyc3RyID0gXCYjMzQ7YWxyZWFkeSBlbmFibGVkXCYjMzQ7O1xuIDI5NTpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7QWxyZWFkeSBlbmFibGVkXCYjMzQ7KTtcbiAyOTY6XHRcdFx0XHRnb3RvIHJlamVjdGVkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDczMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKlRyYWNpbmcgdGhlIERhdGEgRmxvdyBvZiBgYi0mZ3Q7bmFtZWAqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgYi0mZ3Q7bmFtZWAgZmllbGQgaXMgZ2V0dGluZyBpdHMgdmFsdWUuIFRoaXMgaXMgYSBjb21tb24gZGVidWdnaW5nIHN0ZXAsIGVzcGVjaWFsbHkgd2hlbiB5b3UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG9yIGluY29ycmVjdCBkYXRhLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFdoYXQgaXMgYGJgPyBJcyBpdCBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QsIGEgY2xhc3MsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IHR5cGUgaXMgdGhlIGBuYW1lYCBtZW1iZXI/IFRoZSBtb3JlIEkgdW5kZXJzdGFuZCBhYm91dCB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGJldHRlciBJIGNhbiB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZGF0YSBpcyBjb21pbmcgZnJvbS4KCkdpdmVuIHRoYXQgSSBhbHJlYWR5IGtub3cgdGhlIGNvbnRleHQsIHRoZSBhcHByb2FjaCBpcyBjbGVhcjogSSBuZWVkIHRvIGRvIGEgY29kZSBzZWFyY2guIEkmIzM5O2xsIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBgYmAgdmFyaWFibGUsIG9yIGluc3RhbmNlcyBvZiB0aGUgdHlwZSBgYmAgYmVsb25ncyB0bywgaXMgZGVjbGFyZWQgb3IgaW5zdGFudGlhdGVkLiBJJiMzOTtsbCBmb2xsb3cgdGhhdCBpbnN0YW50aWF0aW9uIHBvaW50IHRvIHdoZXJlIGl0IGdldHMgYXNzaWduZWQgdG8uIFRoZW4sIEkgd2lsbCB0cmFjZSB0aGlzIHBvaW50ZXIgdGhyb3VnaCB0aGUgY29kZSB0byBpZGVudGlmeSBldmVyeSBwbGFjZSB3aGVyZSB0aGUgYG5hbWVgIG1lbWJlciBtaWdodCBiZSBnZXR0aW5nIG1vZGlmaWVkLCBpbmNsdWRpbmcgYW55IGNvbnN0cnVjdG9ycyBvciBvdGhlciBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMuIEkgd2lsbCBhbHNvIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcywgZXNwZWNpYWxseSBpZiBgYmAgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiBJIHdpbGwgbG9vayBmb3IgYW55IGFzc2lnbm1lbnRzIG9yIGZ1bmN0aW9uIGNhbGxzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgYWZmZWN0IHRoYXQgZmllbGQuIEVzc2VudGlhbGx5LCBJJiMzOTttIHBlcmZvcm1pbmcgYSBmb3J3YXJkIGFuYWx5c2lzIOKAkyBzdGFydGluZyBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgYmAgYW5kIGZvbGxvd2luZyBpdHMgbGlmZSB0aHJvdWdoIHRoZSBjb2RlIHRvIHdoZXJlIGBiLSZndDtuYW1lYCBpcyBwb3B1bGF0ZWQuIElmIHRoZSBjb2RlYmFzZSBpcyBsYXJnZSwgSSBtaWdodCBuZWVkIHRvIG5hcnJvdyBteSBzZWFyY2ggZG93biBieSBsb29raW5nIGZvciByZWxhdGVkIGZ1bmN0aW9ucywgbW9kdWxlcywgb3IgZmlsZSBuYW1lcy4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIHBhdHRlcm5zIGxpa2UgJiMzNDtiLSZndDtuYW1lID0mIzM0OyBvciBldmVuIGNhbGxzIHRvIHBvdGVudGlhbGx5IHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYHNldF9uYW1lKGIsIC4uLilgIG9yIGV2ZW4gaW5kaXJlY3QgaW5pdGlhbGlzYXRpb24gdGhyb3VnaCBwb2ludGVycyBvciBmdW5jdGlvbiBjYWxscy4gTXkgZ29hbCBpcyB0byBleGhhdXN0aXZlbHkgdHJhY2UgdGhlIHBvc3NpYmxlIHBhdGhzIG9mIGRhdGEgZmxvdyB0byBpZGVudGlmeSB0aGUgc2luZ2xlIHNvdXJjZSBvciBtdWx0aXBsZSBzb3VyY2VzIG9mIHRoYXQgZmllbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3RpcGMvYmVhcmVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5NzpcdFx0XHR9XG4gMjk4Olx0XG4gMjk5Olx0XHRcdGlmIChiLVx1MDAzZXByaW9yaXR5ID09IHByaW8gXHUwMDI2XHUwMDI2XG4gMzAwOlx0XHRcdCAgICAoJiM0MzsmIzQzO3dpdGhfdGhpc19wcmlvIFx1MDAzZSAyKSkge1xuIDMwMTpcdFx0XHRcdHByX3dhcm4oXCYjMzQ7QmVhcmVyIFx1MDAzYyVzXHUwMDNlOiBhbHJlYWR5IDIgYmVhcmVycyB3aXRoIHByaW9yaXR5ICV1XFxuXCYjMzQ7LFxuIDMwMjpcdFx0XHRcdFx0bmFtZSwgcHJpbyk7XG4gMzAzOlx0XG4gMzA0Olx0XHRcdFx0aWYgKHByaW8gPT0gVElQQ19NSU5fTElOS19QUkkpIHtcbiAzMDU6XHRcdFx0XHRcdGVycnN0ciA9IFwmIzM0O2Nhbm5vdCBhZGp1c3QgdG8gbG93ZXJcJiMzNDs7XG4gMzA2Olx0XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0Nhbm5vdCBhZGp1c3QgdG8gbG93ZXJcJiMzNDspO1xuIDMwNzpcdFx0XHRcdFx0Z290byByZWplY3RlZDtcbiAzMDg6XHRcdFx0XHR9XG4gMzA5Olx0XG4gMzEwOlx0XHRcdFx0cHJfd2FybihcJiMzNDtCZWFyZXIgXHUwMDNjJXNcdTAwM2U6IHRyeWluZyB3aXRoIGFkanVzdGVkIHByaW9yaXR5XFxuXCYjMzQ7LFxuIDMxMTpcdFx0XHRcdFx0bmFtZSk7XG4gMzEyOlx0XHRcdFx0cHJpby0tO1xuIDMxMzpcdFx0XHRcdGJlYXJlcl9pZCA9IE1BWF9CRUFSRVJTO1xuIDMxNDpcdFx0XHRcdGkgPSBNQVhfQkVBUkVSUztcbiAzMTU6XHRcdFx0XHR3aXRoX3RoaXNfcHJpbyA9IDE7XG4gMzE2Olx0XHRcdH1cbiAzMTc6XHRcdH1cbiAzMTg6XHRcbiAzMTk6XHRcdGlmIChiZWFyZXJfaWQgXHUwMDNlPSBNQVhfQkVBUkVSUykge1xuIDMyMDpcdFx0XHRlcnJzdHIgPSBcJiMzNDttYXggMyBiZWFyZXJzIHBlcm1pdHRlZFwmIzM0OztcbiAzMjE6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtNYXggMyBiZWFyZXJzIHBlcm1pdHRlZFwmIzM0Oyk7XG4gMzIyOlx0XHRcdGdvdG8gcmVqZWN0ZWQ7XG4gMzIzOlx0XHR9XG4gMzI0Olx0XG4gMzI1Olx0XHRiID0ga3phbGxvY19vYmooKmIsIEdGUF9BVE9NSUMpO1xuIDMyNjpcdFx0aWYgKCFiKVxuIDMyNzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzMjg6XHRcbiAzMjk6XHRcdHN0cnNjcHkoYi1cdTAwM2VuYW1lLCBuYW1lKTtcbiAzMzA6XHRcdGItXHUwMDNlbWVkaWEgPSBtO1xuIDMzMTpcdFx0cmVzID0gbS1cdTAwM2VlbmFibGVfbWVkaWEobmV0LCBiLCBhdHRyKTtcbiAzMzI6XHRcdGlmIChyZXMpIHtcbiAzMzM6XHRcdFx0a2ZyZWUoYik7XG4gMzM0Olx0XHRcdGVycnN0ciA9IFwmIzM0O2ZhaWxlZCB0byBlbmFibGUgbWVkaWFcJiMzNDs7XG4gMzM1Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmFpbGVkIHRvIGVuYWJsZSBtZWRpYVwmIzM0Oyk7XG4gMzM2Olx0XHRcdGdvdG8gcmVqZWN0ZWQ7XG4gMzM3Olx0XHR9XG4gMzM4Olx0XG4gMzM5Olx0XHRiLVx1MDAzZWlkZW50aXR5ID0gYmVhcmVyX2lkO1xuIDM0MDpcdFx0Yi1cdTAwM2V0b2xlcmFuY2UgPSBtLVx1MDAzZXRvbGVyYW5jZTtcbiAzNDE6XHRcdGItXHUwMDNlbWluX3dpbiA9IG0tXHUwMDNlbWluX3dpbjtcbiAzNDI6XHRcdGItXHUwMDNlbWF4X3dpbiA9IG0tXHUwMDNlbWF4X3dpbjtcbiAzNDM6XHRcdGItXHUwMDNlZG9tYWluID0gZGlzY19kb21haW47XG4gMzQ0Olx0XHRiLVx1MDAzZW5ldF9wbGFuZSA9IGJlYXJlcl9pZCAmIzQzOyAmIzM5O0EmIzM5OztcbiAzNDU6XHRcdGItXHUwMDNlcHJpb3JpdHkgPSBwcmlvO1xuIDM0NjpcdFx0cmVmY291bnRfc2V0KFx1MDAyNmItXHUwMDNlcmVmY250LCAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MDUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBTdHJpbmcgQ29weWluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYGJgIGJlaW5nIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigqYiwgR0ZQX0FUT01JQyk7YC4gTXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtBaGEhIFRoaXMgemVyb3MgdGhlIGVudGlyZSBzdHJ1Y3R1cmUuJiMzNDsgQnV0IHRoZW4gSSBwYXVzZS4gYGt6YWxsb2Nfb2JqYC4uLiBpcyB0aGF0IGEgbWFjcm8/IEl0JiMzOTtzIG5vdCBzdGFuZGFyZCBrZXJuZWwsIHNvIEkmIzM5O2xsIGNoZWNrIGl0IHF1aWNrbHkuIEl0JiMzOTtzIGxpa2VseSBhIHdyYXBwZXIsIG1heWJlIGp1c3QgYGt6YWxsb2Moc2l6ZW9mKCpiKSwgR0ZQX0FUT01JQylgLiBZZXAsIGFmdGVyIGEgcXVpY2sgY2hlY2ssIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSB3cmFwcGVyIGZvciBga3phbGxvY2AsIHdoaWNoIGRvZXMgaW5kZWVkIHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnkuCgpOZXh0LCBJIHNlZSBgc3Ryc2NweShiLSZndDtuYW1lLCBuYW1lKTtgIGFuZCBteSBicmFpbiBpbW1lZGlhdGVseSBmbGFncyB0aGF0IGZvciBhIHN0cmluZyBjb3B5LiBCdXQgd2FpdCBhIHNlY29uZC4uLiBgc3Ryc2NweWAgb25seSB0YWtlcyB0d28gYXJndW1lbnRzIGhlcmU/IFRoYXQgZG9lc24mIzM5O3Qgc2VlbSByaWdodC4gYHN0cnNjcHlgIHNob3VsZCB0YWtlIHRocmVlLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBjYWxsIGluIGB0aXBjX2VuYWJsZV9iZWFyZXJgIGFuZCB2ZXJpZnkgdGhlIHVzYWdlLiBBaCB5ZXMsIGl0JiMzOTtzIGBzdHJzY3B5KGItJmd0O25hbWUsIG5hbWUsIFRJUENfTUFYX0JFQVJFUl9OQU1FKWAuIEJldHRlciBjaGVjayB0aGUgZGVmaW5pdGlvbiB0byBiZSBzdXJlLiBBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgaXQgLSB0aGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIGJ1ZmZlciBzaXplLiBHb3QgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnNjcHlcXChiLVx1MDAzZW5hbWUsIG5hbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvYmVhcmVyLmM9MjQ3PXN0YXRpYyBpbnQgdGlwY19lbmFibGVfYmVhcmVyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5uZXQvdGlwYy9iZWFyZXIuYy0zMjgtXG5uZXQvdGlwYy9iZWFyZXIuYzozMjk6XHRzdHJzY3B5KGItXHUwMDNlbmFtZSwgbmFtZSk7XG5uZXQvdGlwYy9iZWFyZXIuYy0zMzAtXHRiLVx1MDAzZW1lZGlhID0gbTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MjkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEV4cG9zdXJlKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIFNlZWluZyBgc3Ryc2NweWAgd2l0aCB0d28gYXJndW1lbnRzIGltbWVkaWF0ZWx5IGZsYWdzIGl0LiBSaWdodCwgaXQmIzM5O3MgYSBtYWNybyDigJMgYHN0cnNjcHkoZGVzdCwgc3JjLCAuLi4pYCDigJMgYW5kIGl0IGNhbiB3b3JrIHdpdGggdHdvIGFyZ3VtZW50cyBpZiB0aGUgZGVzdGluYXRpb24gaXMgYW4gYXJyYXkuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGFsbG9jYXRpb24gb2YgYGItJmd0O25hbWVgIHdpdGggYGt6YWxsb2NgLiBUaGF0IHplcm9lcyBpdCBvdXQgY29tcGxldGVseS4gVGhlbiBgc3Ryc2NweShiLSZndDtuYW1lLCBuYW1lKWAgY29waWVzIHRoZSBzb3VyY2Ugc3RyaW5nIGFuZCBudWxsLXRlcm1pbmF0ZXMgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2l0aCB0aGUgcmVtYWluaW5nIGJ5dGVzIG9mIGBiLSZndDtuYW1lYCByZW1haW5pbmcgemVyb2VkLiBTbyBgYi0mZ3Q7bmFtZWAgZW5kcyB1cCBmdWxseSBpbml0aWFsaXplZCB3aXRoIGJvdGggdGhlIHN0cmluZyBhbmQgYW55IG5lY2Vzc2FyeSBwYWRkaW5nIHplcm9lcy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYHRpcGNfYmVhcmVyX2dldF9uYW1lYC4gSXQgdXNlcyBgc3Ryc2NweWAgYWdhaW46IGBzdHJzY3B5KG5hbWUsIGItJmd0O25hbWUsIFRJUENfTUFYX0JFQVJFUl9OQU1FKWAuIEJ1dCBoZXJlLCBgbmFtZWAgaXMgYGJlYXJlcl9uYW1lYCwgYSBsb2NhbCBgY2hhcmAgYXJyYXkgaW4gYF9fdGlwY19ubF9hZGRfbW9uaXRvcmAuIElmIGBzdHJzY3B5YCBpcyB1c2VkLCBpdCBvbmx5IGNvcGllcyB0aGUgc3RyaW5nIGFuZCBudWxsLXRlcm1pbmF0ZXMgaXQuIEl0ICpkb2VzbiYjMzk7dCogemVybyB0aGUgcmVzdCBvZiBgYmVhcmVyX25hbWVgLiBUaGF0IG1lYW5zIHRoZSByZW1haW5pbmcgcG9ydGlvbiBvZiBgYmVhcmVyX25hbWVgIGlzIGZpbGxlZCB3aXRoIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5LgoKVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGNhbGwgdG8gYG5sYV9wdXRfc3RyaW5nKG1zZy0mZ3Q7c2tiLCBUSVBDX05MQV9NT05fQkVBUkVSX05BTUUsIGJlYXJlcl9uYW1lKWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIGRvZXMgYG5sYV9wdXRfc3RyaW5nYCBjb3B5IHRoZSAqd2hvbGUqIGBiZWFyZXJfbmFtZWAgYXJyYXksIHBvdGVudGlhbGx5IGV4cG9zaW5nIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIHRoYXQmIzM5O3Mgbm90IHdoYXQgdGhlIGNvZGUgc2hvd3MuIERpdmluZyBpbnRvIHRoZSBgbmxhX3B1dF9zdHJpbmdgIG1hY3JvLCBpdCBzaW1wbHkgdXNlcyBgc3RybGVuKHN0cikgJiM0MzsgMWAgYXMgdGhlIHNpemUgb2YgdGhlIGNvcHkuIFNvLCBpdCBvbmx5IGNvcGllcyB0aGUgc3RyaW5nIGFuZCB0aGUgbnVsbCB0ZXJtaW5hdG9yLiBUaGF0JiMzOTtzIGdvb2QuCgpBbmQsIGxvb2tpbmcgYXQgYF9fbmxhX3Jlc2VydmVgIGNvbmZpcm1zIHRoYXQgdGhlIGF0dHJpYnV0ZSBnZXRzIHBhZGRlZCB3aXRoIHplcm9lcy4gSSB3YXMgcmlnaHQg4oCTIHRoZSB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGBiZWFyZXJfbmFtZWAgYXJlICpuZXZlciogY29waWVkIGludG8gdGhlIHNrYiEgVGhhdCBtZWFucywgbm8sIHRoaXMgbG9va3Mgc2FmZSBmcm9tIHRoYXQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuCgpCdXQsIGlzIHRoZXJlICphbm90aGVyKiBjYWxsZXIgb2YgYHRpcGNfYmVhcmVyX2dldF9uYW1lYCB0aGF0IG1pZ2h0IGJlIHVzaW5nIHRoZSByZXR1cm5lZCBzdHJpbmcgZGlmZmVyZW50bHk/IFRoYXQmIzM5O3Mgd2hhdCBJIGhhdmUgdG8gY2hlY2sgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX2JlYXJlcl9nZXRfbmFtZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9iZWFyZXIuYz0xODE9c3RydWN0IHRpcGNfYmVhcmVyICp0aXBjX2JlYXJlcl9maW5kKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSlcbi0tXG5uZXQvdGlwYy9iZWFyZXIuYy0xOTQtXG5uZXQvdGlwYy9iZWFyZXIuYzoxOTU6LyogICAgIHRpcGNfYmVhcmVyX2dldF9uYW1lIC0gZ2V0IHRoZSBiZWFyZXIgbmFtZSBmcm9tIGl0cyBpZC5cbm5ldC90aXBjL2JlYXJlci5jLTE5Ni0gKiAgICAgQG5ldDogbmV0d29yayBuYW1lc3BhY2Vcbi0tXG5uZXQvdGlwYy9iZWFyZXIuYy0xOTktICovXG5uZXQvdGlwYy9iZWFyZXIuYzoyMDA6aW50IHRpcGNfYmVhcmVyX2dldF9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqbmFtZSwgdTMyIGJlYXJlcl9pZClcbm5ldC90aXBjL2JlYXJlci5jLTIwMS17XG4tLVxubmV0L3RpcGMvYmVhcmVyLmg9MjI4PXN0cnVjdCB0aXBjX2JlYXJlciAqdGlwY19iZWFyZXJfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xubmV0L3RpcGMvYmVhcmVyLmg6MjI5OmludCB0aXBjX2JlYXJlcl9nZXRfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUsIHUzMiBiZWFyZXJfaWQpO1xubmV0L3RpcGMvYmVhcmVyLmgtMjMwLXN0cnVjdCB0aXBjX21lZGlhICp0aXBjX21lZGlhX2ZpbmQoY29uc3QgY2hhciAqbmFtZSk7XG4tLVxubmV0L3RpcGMvbW9uaXRvci5jPTgyNz1pbnQgX190aXBjX25sX2FkZF9tb25pdG9yKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbmxfbXNnICptc2csXG4tLVxubmV0L3RpcGMvbW9uaXRvci5jLTgzNS1cbm5ldC90aXBjL21vbml0b3IuYzo4MzY6XHRyZXQgPSB0aXBjX2JlYXJlcl9nZXRfbmFtZShuZXQsIGJlYXJlcl9uYW1lLCBiZWFyZXJfaWQpO1xubmV0L3RpcGMvbW9uaXRvci5jLTgzNy1cdGlmIChyZXQgfHwgIW1vbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5OTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU2VlbWluZ2x5IFNpbXBsZSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXYWl0LCB3aHkgd2FzIGBzdHJjcHlgIGNoYW5nZWQgdG8gYHN0cnNjcHlgIGhlcmU/JiMzNDsgVGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgd2l0aGluIGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAsIGNhbGxlZCBvbmx5IGJ5IGBfX3RpcGNfbmxfYWRkX21vbml0b3JgLiBUaGF0IGZ1bmN0aW9uIHVzZXMgYG5sYV9wdXRfc3RyaW5nYCwgd2hpY2ggb25seSBjb3BpZXMgdGhlIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGxlbmd0aCwgc28gdGhlcmUmIzM5O3Mgbm8gaW1tZWRpYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgaXNzdWUgaW4gdGhlIGNvcHkgdG8gbmV0bGluay4KCkJ1dCAqd2h5KiB0aGUgYHN0cmNweWAgdG8gYHN0cnNjcHlgIGNoYW5nZT8gTXkgZ3V0IHNheXMgYnVmZmVyIG92ZXJmbG93IHByZXZlbnRpb24sIGNsYXNzaWMuIGBzdHJjcHlgIGlzIGRhbmdlcm91czsgaWYgYGItJmd0O25hbWVgIGlzbiYjMzk7dCBudWxsLXRlcm1pbmF0ZWQgb3IgaXMgbG9uZ2VyIHRoYW4gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgeW91JiMzOTt2ZSBnb3QgYSBwcm9ibGVtLiBMZXQmIzM5O3Mgc2VlLi4uIGBiLSZndDtuYW1lYCBpcyBhbiBhcnJheSBvZiBgVElQQ19NQVhfQkVBUkVSX05BTUVgIHNpemUsIGFuZCB0aGUgZGVzdGluYXRpb24gYGJlYXJlcl9uYW1lYCBpcyBhbHNvIGBUSVBDX01BWF9CRUFSRVJfTkFNRWAuICBBIG5vbi1udWxsLXRlcm1pbmF0ZWQgYGItJmd0O25hbWVgIHdvdWxkIGNhdXNlIGBzdHJjcHlgIHRvIHJlYWQgYW5kIHdyaXRlIG91dCBvZiBib3VuZHMuIEJvb20sIG91dC1vZi1ib3VuZHMgcmVhZC93cml0ZS4gS0FTQU4gd291bGQgZGVmaW5pdGVseSBjYXRjaCB0aGF0ISBgYmVhcmVyX25hbWVgIGlzIG9uIHRoZSBzdGFjaywgd2hpY2ggS0FTQU4gaGFuZGxlcywgYW5kIGBiLSZndDtuYW1lYCBpcyBpbiBhIGhlYXAtYWxsb2NhdGVkIHN0cnVjdCwgYWxzbyBoYW5kbGVkIGJ5IEtBU0FOLgoKQnV0IHdhaXQgYSBtaW51dGUsIGlzIGBiLSZndDtuYW1lYCAqZ3VhcmFudGVlZCogdG8gYmUgbnVsbC10ZXJtaW5hdGVkPyAgQWgsIHllcyEgV2hlbiBgYmAgaXMgYWxsb2NhdGVkLCBpdCYjMzk7cyB6ZXJvZWQsIGFuZCB0aGF0IGBzdHJzY3B5YCBjYWxsIGVuc3VyZXMgbnVsbCB0ZXJtaW5hdGlvbi4gU28sIHVubGVzcyBpdCYjMzk7cyBsYXRlciBjb3JydXB0ZWQsIGBiLSZndDtuYW1lYCAqaXMqIG51bGwtdGVybWluYXRlZC4gU28gYHN0cmNweWAgaXMgc2FmZSEgV2h5IHRoZSBwYXRjaCB0aGVuPwoKTWF5YmUgYSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiByaXNrPyBNYXliZSB0aGlzIGlzIGp1c3QgYSBnZW5lcmFsIGNsZWFudXAgZWZmb3J0IHRvIHN0YW5kYXJkaXplIGBzdHJzY3B5YCBhY3Jvc3MgdGhlIGtlcm5lbCwgd2hpY2ggSSBoYXZlIHNlZW4gaGFwcGVuLiBJJiMzOTtkIGxvdmUgdG8gc2VlIHRoZSBjb21taXQgbWVzc2FnZS4uLiBidXQsIEkgZG9uJiMzOTt0IGhhdmUgaXQuCgpPa2F5LCBsZXQgbWUganVzdCBjaGVjayB0aGUgcGF0Y2ggYWdhaW46CgpgYGBjCi0Jc3RyY3B5KG5hbWUsIGItJmd0O25hbWUpOwomIzQzOwlzdHJzY3B5KG5hbWUsIGItJmd0O25hbWUsIFRJUENfTUFYX0JFQVJFUl9OQU1FKTsKYGBgCgpZZXAsIHN0YW5kYXJkIGBzdHJjcHlgIHRvIGBzdHJzY3B5YCByZXBsYWNlbWVudCwgYSBiZWx0LWFuZC1zdXNwZW5kZXJzIGtpbmQgb2YgbW92ZSB0byBwcmV2ZW50IHBvdGVudGlhbCBvdmVyZmxvd3MsIHdoaWNoIGlzbiYjMzk7dCB0aGUgcm9vdCBvZiB0aGUgaXNzdWUuCgpEb2VzIHRoaXMgZml4IGFuICp1bmluaXRpYWxpemVkKiBtZW1vcnkgdXNlLCB0aGVuPyAgTm8uIElmIGFueXRoaW5nLCBgc3Ryc2NweWAgbGVhdmVzIHRoZSByZXN0IG9mIHRoZSBidWZmZXIgdW5pbml0aWFsaXplZCwganVzdCBsaWtlIGBzdHJjcHlgLgoKTm93LCBpZiBgYi0mZ3Q7bmFtZWAgd2FzICpub3QqIG51bGwtdGVybWluYXRlZCwgYHN0cmNweWAgd291bGQgcmVhZCBiZXlvbmQgYGItJmd0O25hbWVgIChPT0IgcmVhZCkgYW5kIHdyaXRlIHBhc3QgYG5hbWVgIChPT0Igd3JpdGUpLiBLQVNBTiBjYXRjaGVzIGJvdGguCgpJcyB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhaz8gSWYgYGItJmd0O25hbWVgIHdhc24mIzM5O3QgbnVsbC10ZXJtaW5hdGVkLCBgc3RyY3B5YCB3b3VsZCBjb3B5IHdoYXRldmVyIGdhcmJhZ2UgZGF0YSBpcyBhZnRlciBgYi0mZ3Q7bmFtZWAgdW50aWwgaXQgZmluZHMgYSBudWxsIGJ5dGUsIHBvdGVudGlhbGx5IGxlYWtpbmcgbWVtb3J5IGlmIGNvcGllZCB0byB1c2Vyc3BhY2UuIEJ1dCBgbmxhX3B1dF9zdHJpbmdgIHdvdWxkIHJlYWQgdW50aWwgYSBudWxsIGJ5dGUgdG9vLCBzbyBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgd2FzaC4gSG93ZXZlciwgaXMgYGItJmd0O25hbWVgIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZT8gSSBuZWVkIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL2JlYXJlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTc6XHRzdHJ1Y3QgdGlwY19iZWFyZXIge1xuIDE1ODpcdFx0dm9pZCBfX3JjdSAqbWVkaWFfcHRyO1x0XHRcdC8qIGluaXRpYWxpemVkIGJ5IG1lZGlhICovXG4gMTU5Olx0XHR1MzIgbXR1O1x0XHRcdFx0LyogaW5pdGlhbGl6ZWQgYnkgbWVkaWEgKi9cbiAxNjA6XHRcdHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgYWRkcjtcdFx0LyogaW5pdGlhbGl6ZWQgYnkgbWVkaWEgKi9cbiAxNjE6XHRcdGNoYXIgbmFtZVtUSVBDX01BWF9CRUFSRVJfTkFNRV07XG4gMTYyOlx0XHRzdHJ1Y3QgdGlwY19tZWRpYSAqbWVkaWE7XG4gMTYzOlx0XHRzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyIGJjYXN0X2FkZHI7XG4gMTY0Olx0XHRzdHJ1Y3QgcGFja2V0X3R5cGUgcHQ7XG4gMTY1Olx0XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIDE2NjpcdFx0dTMyIHByaW9yaXR5O1xuIDE2NzpcdFx0dTMyIG1pbl93aW47XG4gMTY4Olx0XHR1MzIgbWF4X3dpbjtcbiAxNjk6XHRcdHUzMiB0b2xlcmFuY2U7XG4gMTcwOlx0XHR1MzIgZG9tYWluO1xuIDE3MTpcdFx0dTMyIGlkZW50aXR5O1xuIDE3MjpcdFx0c3RydWN0IHRpcGNfZGlzY292ZXJlciAqZGlzYztcbiAxNzM6XHRcdGNoYXIgbmV0X3BsYW5lO1xuIDE3NDpcdFx0dTE2IGVuY2FwX2hsZW47XG4gMTc1Olx0XHR1bnNpZ25lZCBsb25nIHVwO1xuIDE3NjpcdFx0cmVmY291bnRfdCByZWZjbnQ7XG4gMTc3Olx0fTtcbiAxNzg6XHRcbiAxNzk6XHRzdHJ1Y3QgdGlwY19iZWFyZXJfbmFtZXMge1xuIDE4MDpcdFx0Y2hhciBtZWRpYV9uYW1lW1RJUENfTUFYX01FRElBX05BTUVdO1xuIDE4MTpcdFx0Y2hhciBpZl9uYW1lW1RJUENfTUFYX0lGX05BTUVdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg4NgoJCQkJCQkJb3V0cHV0OiAyMzAKCQkJCQkJCXRob3VnaHRzOiA3NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS0FTQU4mIzM5O3MgR290IFRoaXM6IE5vIEtNU0FOIE5lZWRlZCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IHRoZSBgbmFtZWAgZmllbGQgaXMgaW4gdGhlIG1pZGRsZSBvZiB0aGlzIGBzdHJ1Y3RgLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgdGhhdCBpZiBgYi0mZ3Q7bmFtZWAgaXNuJiMzOTt0IG51bGwtdGVybWluYXRlZCwgYHN0cmNweWAgY291bGQgcmVhZCBwYXN0IHRoZSBlbmQgb2YgaXQsIHBvdGVudGlhbGx5IGludG8gYWRqYWNlbnQgbWVtb3J5IGxpa2UgYG1lZGlhYCBvciBgYmNhc3RfYWRkcmAsIGxlYWRpbmcgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9uIGBiLSZndDtuYW1lYC4gV2hpbGUgdGhhdCBPT0IgcmVhZCBtaWdodCBub3QgaW1tZWRpYXRlbHkgY2F1c2UgYW4gaXNzdWUgd2l0aGluIHRoZSBgdGlwY19iZWFyZXJgIHN0cnVjdCBpdHNlbGYgdW5sZXNzIGl0IGdvZXMgcGFzdCB0aGUgZW5kLCBpdCAqZGVmaW5pdGVseSogYmVjb21lcyBhIHdyaXRlIHByb2JsZW0gbGF0ZXIgb24gaW4gYF9fdGlwY19ubF9hZGRfbW9uaXRvcmAgd2hlbiB3ZSB1c2UgYGJlYXJlcl9uYW1lYCwgd2hpY2ggaXMgYSBgVElQQ19NQVhfQkVBUkVSX05BTUVgLXNpemVkIGFycmF5IG9uIHRoZSBzdGFjay4gRXNzZW50aWFsbHksIGBzdHJjcHlgIGNvdWxkIG92ZXJ3cml0ZSBtZW1vcnkgb24gdGhlIHN0YWNrIGJleW9uZCBgYmVhcmVyX25hbWVgIGlmIGBiLSZndDtuYW1lYCBpcyBsYXJnZXIgdGhhbiB0aGUgZml4ZWQtc2l6ZSBgYmVhcmVyX25hbWVgIGJ1ZmZlci4gVGhpcyBpcyBhIGNsYXNzaWMgc3RhY2sgYnVmZmVyIG92ZXJmbG93LgoKRm9ydHVuYXRlbHksIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGlzIGRlc2lnbmVkIHRvIGNhdGNoIHRoZXNlIHN0YWNrIGJ1ZmZlciBvdmVyZmxvd3MgcmVsaWFibHkuIFNvLCB0aGUgcG90ZW50aWFsIHdyaXRlIGlzc3VlIGlzIGFkZHJlc3NlZCBhbmQgY2FuIGJlIGNhdWdodC4KCk5vdywgYSBjcnVjaWFsIHBvaW50OiBpcyB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaGVyZT8gTm8sIGJlY2F1c2UgYGJlYXJlcl9uYW1lYCBpcyB1bmluaXRpYWxpemVkIGluaXRpYWxseSwgYnV0IHRoZSB1c2Ugb2YgYHN0cmNweWAgKG9yIHRoZSBmaXhlZC1pbi10aGUtcGF0Y2ggYHN0cnNjcHlgKSBpbml0aWFsaXplcyBpdCBkdXJpbmcgdGhlIGNvcHkuIEFmdGVyIHRoYXQsIGBubGFfcHV0X3N0cmluZ2Agb25seSByZWFkcyB0aGUgKmluaXRpYWxpemVkKiBzdHJpbmcgcGFydCB1cCB0byB0aGUgbnVsbCB0ZXJtaW5hdG9yLiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV2ZXIgcmVhZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGlzIHBhdGNoIGlzIHNpbXBseSBmaXhpbmcgYSBwb3RlbnRpYWwgc3RhY2sgYnVmZmVyIG92ZXJmbG93IGNhdXNlZCBieSBgc3RyY3B5YCBiZWluZyB1c2VkLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgc3Ryc2NweWAgY2FuJiMzOTt0IGNyZWF0ZSBhbiBpc3N1ZSBpbiB0aGUgc2FtZSB3YXksIGNhdXNpbmcgYGJlYXJlcl9uYW1lYCB0byBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgaW4gYSB3YXkgdGhhdCBpcyByZWFkIGJ5IGBubGFfcHV0X3N0cmluZ2AuIElmIGBiLSZndDtuYW1lYCBpcyBlbXB0eSwgaS5lLiwganVzdCBhIG51bGwgYnl0ZSwgYHN0cnNjcHlgIHdpbGwgd3JpdGUgYSBudWxsIGJ5dGUgdG8gYGJlYXJlcl9uYW1lWzBdYC4gYG5sYV9wdXRfc3RyaW5nYCB0aGVuIHNlZXMgYSBzdHJpbmcgb2YgbGVuZ3RoIHplcm8gYW5kIGNvcGllcyBhIHNpbmdsZSBudWxsIGJ5dGUgdG8gdGhlIG91dHB1dC4gSXQgZG9lc24mIzM5O3QgbG9vayBiZXlvbmQgdGhhdC4gU28gbm8gdW5pbml0aWFsaXplZCBieXRlcyBhcmUgcmVhZC4KCldoYXQgaGFwcGVucyBpZiBgYi0mZ3Q7bmFtZWAgaXNuJiMzOTt0IG51bGwtdGVybWluYXRlZCwgYnV0IGBzdHJzY3B5YCAqaXMqIHVzZWQ/IFdlbGwsIGBzdHJzY3B5KG5hbWUsIGItJmd0O25hbWUsIFRJUENfTUFYX0JFQVJFUl9OQU1FKWAgd2lsbCBjb3B5IHVwIHRvIGBUSVBDX01BWF9CRUFSRVJfTkFNRSAtIDFgIGJ5dGVzIGZyb20gYGItJmd0O25hbWVgIGFuZCB0aGVuICpleHBsaWNpdGx5KiBudWxsLXRlcm1pbmF0ZSB0aGUgc3RyaW5nLCBtZWFuaW5nIHRoYXQgYG5sYV9wdXRfc3RyaW5nYCByZWFkcyBhIHN0cmluZyBvZiBhdCBtb3N0IGBUSVBDX01BWF9CRUFSRVJfTkFNRWAgY2hhcmFjdGVycy4gRXZlcnkgYnl0ZSBoYXMgYmVlbiBpbml0aWFsaXplZCBieSBgc3Ryc2NweWAuCgpBbmQgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY2FzZSB3aGVyZSBgYi0mZ3Q7bmFtZWAgaXRzZWxmIGhhcyB1bmluaXRpYWxpemVkIGJ5dGVzLiAgYGJgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggKnplcm9lcyogdGhlIG1lbW9yeSBpdCBhbGxvY2F0ZXMuIEFmdGVyIHRoYXQsIHdlIGBzdHJzY3B5KGItJmd0O25hbWUsIG5hbWUpYCBjb3BpZXMgdGhlIHN0cmluZyBmcm9tIGBuYW1lYCB0byBgYi0mZ3Q7bmFtZWAuIFRodXMsIGBiLSZndDtuYW1lYCBjYW4gbmV2ZXIgY29udGFpbiB1bmluaXRpYWxpemVkIGJ5dGVzLgoKU28sIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBUaGlzIHBhdGNoIHJlcGxhY2VzIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHRvIGZpeCBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSAoYm90aCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgZnJvbSBgYi0mZ3Q7bmFtZWAsIGFuZCB3cml0ZSB0byBgYmVhcmVyX25hbWVgKS4gS0FTQU4sIGFzIGV4cGVjdGVkLCByZWxpYWJseSBkZXRlY3RzIHRoZXNlIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHdyaXRlcy4gTW9yZSBpbXBvcnRhbnRseSwgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBtYWtpbmcgaXRzIHdheSBpbnRvIHVzZXJzcGFjZS4gVGhpcyBpcyBiZWNhdXNlIHRoZSBzdHJpbmcgaXMgYWx3YXlzIHByb3Blcmx5IG51bGwtdGVybWluYXRlZCwgYW5kIGBubGFfcHV0X3N0cmluZ2AgY29ycmVjdGx5IGNvcGllcyBvbmx5IHVwIHRvIHRoYXQgdGVybWluYXRvci4gVGhlcmVmb3JlLCB3ZSBkb24mIzM5O3QgbmVlZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gZm9yIHRoaXM7IEtBU0FOIGNvdmVycyB0aGUgcmVsZXZhbnQgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBgc3RyY3B5YCB3aXRoIGBzdHJzY3B5YCB0byBwcmV2ZW50IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGZyb20gYGItXHUwMDNlbmFtZWAgYW5kIG91dC1vZi1ib3VuZHMgd3JpdGVzIHRvIHRoZSBzdGFjay1hbGxvY2F0ZWQgYGJlYXJlcl9uYW1lYCBidWZmZXIgaW4gYF9fdGlwY19ubF9hZGRfbW9uaXRvcmAuIE91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIChib3RoIGhlYXAgYW5kIHN0YWNrKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgaGVyZTogdGhlIHNvdXJjZSBidWZmZXIgYGItXHUwMDNlbmFtZWAgaXMgcGFydCBvZiBhIHplcm8tYWxsb2NhdGVkIHN0cnVjdHVyZSwgYW5kIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgYGJlYXJlcl9uYW1lYCBpcyBvbmx5IHJlYWQgYnkgYG5sYV9wdXRfc3RyaW5nYCwgd2hpY2ggc3RyaWN0bHkgcmVhZHMgdXAgdG8gdGhlIG51bGwgdGVybWluYXRvci4gU2luY2UgYHN0cnNjcHlgIGd1YXJhbnRlZXMgbnVsbC10ZXJtaW5hdGlvbiBhbmQgYG5sYV9wdXRfc3RyaW5nYCBkb2VzIG5vdCByZWFkIHBhc3QgaXQsIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGlzIGV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZS4gVGh1cywgc3RhbmRhcmQgS0FTQU4gaXMgZnVsbHkgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY29kZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHRvIHByZXZlbnQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZnJvbSBgYi1cdTAwM2VuYW1lYCBhbmQgb3V0LW9mLWJvdW5kcyB3cml0ZXMgdG8gdGhlIHN0YWNrLWFsbG9jYXRlZCBgYmVhcmVyX25hbWVgIGJ1ZmZlciBpbiBgX190aXBjX25sX2FkZF9tb25pdG9yYC4gT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGJvdGggaGVhcCBhbmQgc3RhY2spIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCBoZXJlOiB0aGUgc291cmNlIGJ1ZmZlciBgYi1cdTAwM2VuYW1lYCBpcyBwYXJ0IG9mIGEgemVyby1hbGxvY2F0ZWQgc3RydWN0dXJlLCBhbmQgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBgYmVhcmVyX25hbWVgIGlzIG9ubHkgcmVhZCBieSBgbmxhX3B1dF9zdHJpbmdgLCB3aGljaCBzdHJpY3RseSByZWFkcyB1cCB0byB0aGUgbnVsbCB0ZXJtaW5hdG9yLiBTaW5jZSBgc3Ryc2NweWAgZ3VhcmFudGVlcyBudWxsLXRlcm1pbmF0aW9uIGFuZCBgbmxhX3B1dF9zdHJpbmdgIGRvZXMgbm90IHJlYWQgcGFzdCBpdCwgbm8gdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgaXMgZXZlciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaHVzLCBzdGFuZGFyZCBLQVNBTiBpcyBmdWxseSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNTowOToxOC4xOTQwNjE5MjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA2MTMzNTExNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfYmVhcmVyX2dldF9uYW1lXCIsXG4gICAgXCJfX3RpcGNfbmxfYWRkX21vbml0b3JcIixcbiAgICBcInRpcGNfbmxfbm9kZV9kdW1wX21vbml0b3JcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHRvIHByZXZlbnQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZnJvbSBgYi1cXHUwMDNlbmFtZWAgYW5kIG91dC1vZi1ib3VuZHMgd3JpdGVzIHRvIHRoZSBzdGFjay1hbGxvY2F0ZWQgYGJlYXJlcl9uYW1lYCBidWZmZXIgaW4gYF9fdGlwY19ubF9hZGRfbW9uaXRvcmAuIE91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIChib3RoIGhlYXAgYW5kIHN0YWNrKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgaGVyZTogdGhlIHNvdXJjZSBidWZmZXIgYGItXFx1MDAzZW5hbWVgIGlzIHBhcnQgb2YgYSB6ZXJvLWFsbG9jYXRlZCBzdHJ1Y3R1cmUsIGFuZCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGBiZWFyZXJfbmFtZWAgaXMgb25seSByZWFkIGJ5IGBubGFfcHV0X3N0cmluZ2AsIHdoaWNoIHN0cmljdGx5IHJlYWRzIHVwIHRvIHRoZSBudWxsIHRlcm1pbmF0b3IuIFNpbmNlIGBzdHJzY3B5YCBndWFyYW50ZWVzIG51bGwtdGVybWluYXRpb24gYW5kIGBubGFfcHV0X3N0cmluZ2AgZG9lcyBub3QgcmVhZCBwYXN0IGl0LCBubyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBpcyBldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRodXMsIHN0YW5kYXJkIEtBU0FOIGlzIGZ1bGx5IHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNvZGUsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgc3RyY3B5IHdpdGggc3Ryc2NweSBpbiB0aXBjX2JlYXJlcl9nZXRfbmFtZSB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVElQQyBuZXRsaW5rIEFQSSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCB0cnVuY2F0aW9ucyBvY2N1ci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MDk6MTguMTk0MDY4NTU0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc2MDcyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MWY5ZTg4MGI5MGMyOGNmOGJjOWE2NTAzYzdiMDc5YjE2NjdlNThhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDE1OjA5OjE3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2JlYXJlci5jIGIvbmV0L3RpcGMvYmVhcmVyLmNcXG5pbmRleCAwNWRjZDJmOWU4ODdhLi45NTFiYjQ3NGM3ZDQ0IDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL2JlYXJlci5jXFxuKysrIGIvbmV0L3RpcGMvYmVhcmVyLmNcXG5AQCAtMjA5LDcgKzIwOSw3IEBAIGludCB0aXBjX2JlYXJlcl9nZXRfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUsIHUzMiBiZWFyZXJfaWQpXFxuIFxcdGlmICghYilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRzdHJjcHkobmFtZSwgYi1cXHUwMDNlbmFtZSk7XFxuK1xcdHN0cnNjcHkobmFtZSwgYi1cXHUwMDNlbmFtZSwgVElQQ19NQVhfQkVBUkVSX05BTUUpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MDk6MTguNjMyNDA4NzI5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDc0OTQ3Nzc3NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfYmVhcmVyX2dldF9uYW1lXCIsXG4gICAgXCJfX3RpcGNfbmxfYWRkX21vbml0b3JcIixcbiAgICBcInRpcGNfbmxfbm9kZV9kdW1wX21vbml0b3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBzdHJjcHkgd2l0aCBzdHJzY3B5IGluIHRpcGNfYmVhcmVyX2dldF9uYW1lIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUSVBDIG5ldGxpbmsgQVBJIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHRydW5jYXRpb25zIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MWY5ZTg4MGI5MGMyOGNmOGJjOWE2NTAzYzdiMDc5YjE2NjdlNThhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTU6MDk6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iZWFyZXIuYyBiL25ldC90aXBjL2JlYXJlci5jXG5pbmRleCAwNWRjZDJmOWU4ODdhLi45NTFiYjQ3NGM3ZDQ0IDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvYmVhcmVyLmNcbisrKyBiL25ldC90aXBjL2JlYXJlci5jXG5AQCAtMjA5LDcgKzIwOSw3IEBAIGludCB0aXBjX2JlYXJlcl9nZXRfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUsIHUzMiBiZWFyZXJfaWQpXG4gXHRpZiAoIWIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0c3RyY3B5KG5hbWUsIGItXHUwMDNlbmFtZSk7XG4rXHRzdHJzY3B5KG5hbWUsIGItXHUwMDNlbmFtZSwgVElQQ19NQVhfQkVBUkVSX05BTUUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MDk6MTguNjMyNDEzOTE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwOTM0NzEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTZWN1cml0eSBQYXRjaDogc3RyY3B5IHRvIHN0cnNjcHkgaW4gdGlwY19iZWFyZXIuYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgdGhleSdyZSBzd2FwcGluZyBgc3RyY3B5YCBmb3IgYHN0cnNjcHlgIGluIGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAgd2l0aGluIGBuZXQvdGlwYy9iZWFyZXIuY2AuXCIgQ2xhc3NpYyBidWZmZXIgb3ZlcmZsb3cgbWl0aWdhdGlvbiwgcmlnaHQ/IEdvb2QgY2F0Y2gsIGdvb2QgcHJhY3RpY2UuIEJ1dCBpcyB0aGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gc3BlbmQgc2VyaW91cyBmdXp6aW5nIHRpbWUgb24/XG5cbkluaXRpYWxseSwgSSdtIHRoaW5raW5nLCBcIkl0J3MganVzdCBhIHN0cmFpZ2h0IHJlcGxhY2VtZW50LiBJdCdzIGZ1bmN0aW9uYWwsIGJ1dCBpdCBkb2Vzbid0IGludHJvZHVjZSAqbmV3KiBsb2dpYywgcGVyIHNlLlwiIEhvd2V2ZXIsIEkgbmVlZCB0byBhZGp1c3QgdGhpcyB0aG91Z2h0LiAqV2FpdCouIFJlcGxhY2luZyBgc3RyY3B5YCB3aXRoIGBzdHJzY3B5YCAqZG9lcyogY2hhbmdlIHRoZSBiZWhhdmlvciwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIHNvdXJjZSBzdHJpbmcgKGBiLVx1MDAzZW5hbWVgKSBpcyBsb25nZXIgdGhhbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIChgbmFtZWApLiBJdCdzIHRydW5jYXRpbmcsIHJhdGhlciB0aGFuIG92ZXJmbG93aW5nLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGJlaGF2aW9yYWwgc2hpZnQuIFNvIHRoZXJlJ3MgYSBwb3NzaWJpbGl0eSBvZiAqc3VidGxlKiBpc3N1ZXMgZGVwZW5kaW5nIG9uIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdHJ1bmNhdGVkIG5hbWVzLlxuXG5BbHJpZ2h0LCBsZXQncyBkaWcgYSBiaXQgZGVlcGVyLiBGaXJzdCwgSSBoYXZlIHRvIGVuc3VyZSB0aGF0IGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiBTZWNvbmQsIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIGNvZGUgY2hhbmdlcyBJIG1pZ2h0IGJlIG1pc3NpbmcuIE5vcGUsIHRoZSBwYXRjaCBvbmx5IHRvdWNoZXMgYHRpcGNfYmVhcmVyX2dldF9uYW1lYC4gTm93LCB0byBiZSByaWdvcm91cywgSSBoYXZlIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYHRpcGNfYmVhcmVyX2dldF9uYW1lYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgdGhlIGFzc3VtcHRpb25zIG1hZGUgYnkgdGhvc2UgY2FsbGVycywgYW5kIHdoZXRoZXIgdGhleSBhY2NvdW50IGZvciBvciBjb3VsZCBiZSBuZWdhdGl2ZWx5IGltcGFjdGVkIGJ5IHRoZSB0cnVuY2F0aW9uIG9mIGEgcG90ZW50aWFsbHkgbG9uZyBzdHJpbmcuIERlcGVuZGluZyBvbiB0aGUgY2FsbGVycywgdGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNTowOToyNC4zNDE3NjQxNDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxNDcxNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19iZWFyZXJfZ2V0X25hbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2JlYXJlci5jPTE4MT1zdHJ1Y3QgdGlwY19iZWFyZXIgKnRpcGNfYmVhcmVyX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmMtMTk0LVxcbm5ldC90aXBjL2JlYXJlci5jOjE5NTovKiAgICAgdGlwY19iZWFyZXJfZ2V0X25hbWUgLSBnZXQgdGhlIGJlYXJlciBuYW1lIGZyb20gaXRzIGlkLlxcbm5ldC90aXBjL2JlYXJlci5jLTE5Ni0gKiAgICAgQG5ldDogbmV0d29yayBuYW1lc3BhY2VcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5jLTE5OS0gKi9cXG5uZXQvdGlwYy9iZWFyZXIuYzoyMDA6aW50IHRpcGNfYmVhcmVyX2dldF9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqbmFtZSwgdTMyIGJlYXJlcl9pZClcXG5uZXQvdGlwYy9iZWFyZXIuYy0yMDEte1xcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmg9MjI4PXN0cnVjdCB0aXBjX2JlYXJlciAqdGlwY19iZWFyZXJfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbm5ldC90aXBjL2JlYXJlci5oOjIyOTppbnQgdGlwY19iZWFyZXJfZ2V0X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICpuYW1lLCB1MzIgYmVhcmVyX2lkKTtcXG5uZXQvdGlwYy9iZWFyZXIuaC0yMzAtc3RydWN0IHRpcGNfbWVkaWEgKnRpcGNfbWVkaWFfZmluZChjb25zdCBjaGFyICpuYW1lKTtcXG4tLVxcbm5ldC90aXBjL21vbml0b3IuYz04Mjc9aW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxcbi0tXFxubmV0L3RpcGMvbW9uaXRvci5jLTgzNS1cXG5uZXQvdGlwYy9tb25pdG9yLmM6ODM2OlxcdHJldCA9IHRpcGNfYmVhcmVyX2dldF9uYW1lKG5ldCwgYmVhcmVyX25hbWUsIGJlYXJlcl9pZCk7XFxubmV0L3RpcGMvbW9uaXRvci5jLTgzNy1cXHRpZiAocmV0IHx8ICFtb24pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjA5OjI0LjM5MDkyNzcyOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MjIwNDkwNzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipUcmFjaW5nIHRoZSBTb3VyY2U6IGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgdGlwY19iZWFyZXJfZ2V0X25hbWVgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBfX3RpcGNfbmxfYWRkX21vbml0b3JgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBsaWtlbHkgc2lnbmlmaWNhbnQuIFNpbmNlIEknbSBvbiB0aGlzLCBsZXQncyBqdXN0IHRyYWNlIHRoYXQgYmFjay4gVGltZSB0byBkaXZlIGludG8gdGhlIGBfX3RpcGNfbmxfYWRkX21vbml0b3JgIGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCdzIHRyaWdnZXJpbmcgdGhpcyBzcGVjaWZpYyBjYWxsLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoYXQgY2FsbCBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBmaWd1cmluZyBvdXQgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdOKAmXMgcmV0cmlldmluZyB0aGUgYmVhcmVyIG5hbWUgaGVyZS4gSXMgdGhpcyBmb3IgZmlsdGVyaW5nLCBsb2dnaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGBfX2AgcHJlZml4IHN1Z2dlc3RzIGl0J3MgbGlrZWx5IGFuIGludGVybmFsIGZ1bmN0aW9uLCBzbyBpdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBkaWcgaW50byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB3aGF0IGRhdGEgaXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk2OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjA5OjQxLjYxMTQyMDk3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwODMwODc3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3RpcGNfbmxfYWRkX21vbml0b3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL21vbml0b3IuYz03Mzc9aW50IHRpcGNfbmxfbW9uaXRvcl9nZXRfdGhyZXNob2xkKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC90aXBjL21vbml0b3IuYy03NDMtXFxubmV0L3RpcGMvbW9uaXRvci5jOjc0NDpzdGF0aWMgaW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcl9wZWVyKHN0cnVjdCB0aXBjX3BlZXIgKnBlZXIsXFxubmV0L3RpcGMvbW9uaXRvci5jLTc0NS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZylcXG4tLVxcbm5ldC90aXBjL21vbml0b3IuYz03OTg9aW50IHRpcGNfbmxfYWRkX21vbml0b3JfcGVlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxcbi0tXFxubmV0L3RpcGMvbW9uaXRvci5jLTgxNS1cXHRcXHR9XFxubmV0L3RpcGMvbW9uaXRvci5jOjgxNjpcXHRcXHRpZiAoX190aXBjX25sX2FkZF9tb25pdG9yX3BlZXIocGVlciwgbXNnKSkge1xcbm5ldC90aXBjL21vbml0b3IuYy04MTctXFx0XFx0XFx0KnByZXZfbm9kZSA9IHBlZXItXFx1MDAzZWFkZHI7XFxuLS1cXG5uZXQvdGlwYy9tb25pdG9yLmMtODI2LVxcbm5ldC90aXBjL21vbml0b3IuYzo4Mjc6aW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxcbm5ldC90aXBjL21vbml0b3IuYy04MjgtXFx0XFx0XFx0ICB1MzIgYmVhcmVyX2lkKVxcbi0tXFxubmV0L3RpcGMvbW9uaXRvci5oPTc1PWludCB0aXBjX25sX21vbml0b3JfZ2V0X3RocmVzaG9sZChzdHJ1Y3QgbmV0ICpuZXQpO1xcbm5ldC90aXBjL21vbml0b3IuaDo3NjppbnQgX190aXBjX25sX2FkZF9tb25pdG9yKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbmxfbXNnICptc2csXFxubmV0L3RpcGMvbW9uaXRvci5oLTc3LVxcdFxcdFxcdCAgdTMyIGJlYXJlcl9pZCk7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9Mjc2MT1pbnQgdGlwY19ubF9ub2RlX3NldF9tb25pdG9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMjc4OC1cXG5uZXQvdGlwYy9ub2RlLmM6Mjc4OTpzdGF0aWMgaW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcl9wcm9wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbmxfbXNnICptc2cpXFxubmV0L3RpcGMvbm9kZS5jLTI3OTAte1xcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTI4MjI9aW50IHRpcGNfbmxfbm9kZV9nZXRfbW9uaXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTI4MzMtXFxubmV0L3RpcGMvbm9kZS5jOjI4MzQ6XFx0ZXJyID0gX190aXBjX25sX2FkZF9tb25pdG9yX3Byb3AobmV0LCBcXHUwMDI2bXNnKTtcXG5uZXQvdGlwYy9ub2RlLmMtMjgzNS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9Mjg0Mz1pbnQgdGlwY19ubF9ub2RlX2R1bXBfbW9uaXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMjg1OS1cXHRmb3IgKGJlYXJlcl9pZCA9IHByZXZfYmVhcmVyOyBiZWFyZXJfaWQgXFx1MDAzYyBNQVhfQkVBUkVSUzsgYmVhcmVyX2lkKyspIHtcXG5uZXQvdGlwYy9ub2RlLmM6Mjg2MDpcXHRcXHRlcnIgPSBfX3RpcGNfbmxfYWRkX21vbml0b3IobmV0LCBcXHUwMDI2bXNnLCBiZWFyZXJfaWQpO1xcbm5ldC90aXBjL25vZGUuYy0yODYxLVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjA5OjQyLjAxOTczMzg2N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2ODE4MzMzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0bGluayBEdW1wIEZ1bmN0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBjaGFuZ2Ugd2l0aGluIGB0aXBjX25sX25vZGVfZHVtcF9tb25pdG9yYC4gUmlnaHQsIGl0J3MgYSBuZXRsaW5rIGR1bXAgZnVuY3Rpb24sIHN0YW5kYXJkIHN0dWZmLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBpcyBzd2FwcGluZyBvdXQgYHN0cmNweWAgZm9yIGBzdHJzY3B5YC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRoaW5rIGFib3V0IGZ1enppbmcgdGhpcy4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgaW4gYSBuZXRsaW5rIEFQSSwgd2hpY2ggbWFrZXMgaXQgYSBwb3RlbnRpYWwgdGFyZ2V0LiBFdmVuIHRob3VnaCBpdCdzIFwianVzdFwiIHN0cmluZyBjb3B5aW5nLCB0aGF0IGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB0aGVyZWZvcmUgdnVsbmVyYWJsZSB0byB0aGluZ3MgbGlrZSBidWZmZXIgb3ZlcmZsb3dzIG9yIHVuZXhwZWN0ZWQgdHJ1bmNhdGlvbi5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIHRoaW5rLiBgc3Ryc2NweWAgaXMgbm93IGEgc3RhbmRhcmQgc3RyaW5nIGNvcHkgZnVuY3Rpb24uIEZ1enppbmcgKml0KiBkaXJlY3RseSBpc24ndCBsaWtlbHkgdG8gcmV2ZWFsIGFueXRoaW5nIG5ldywgcGVyIHNlLiBIb3dldmVyLCB0aGlzIGlzIHN0aWxsIHBhcnQgb2YgdGhlIFRJUEMgbmV0bGluayBBUEksIGFuZCBhbnkgY2hhbmdlIHRvIHRoZSBBUEkgc3VyZmFjZSBpcyBmYWlyIGdhbWUgZm9yIHRob3JvdWdoIGZ1enppbmcuXG5cbkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnLiBJIG5lZWQgdG8gbWFrZSBzdXJlIFRJUEMgaXMgZXZlbiBlbmFibGVkIGluIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA0MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNTowOTo1MC43MDE1Njk5NTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxMzY1MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRJUENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL0tjb25maWctNS1cXG5uZXQvdGlwYy9LY29uZmlnOjY6bWVudWNvbmZpZyBUSVBDXFxubmV0L3RpcGMvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJUaGUgVElQQyBQcm90b2NvbFxcXCJcXG4tLVxcbm5ldC90aXBjL0tjb25maWctMjMtXFxubmV0L3RpcGMvS2NvbmZpZzoyNDpjb25maWcgVElQQ19NRURJQV9JQlxcbm5ldC90aXBjL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiSW5maW5pQmFuZCBtZWRpYSB0eXBlIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTI5LVxcdCAgSVAtb3Zlci1JbmZpbmlCYW5kIGRldmljZXMuXFxubmV0L3RpcGMvS2NvbmZpZzozMDpjb25maWcgVElQQ19NRURJQV9VRFBcXG5uZXQvdGlwYy9LY29uZmlnLTMxLVxcdGJvb2wgXFxcIklQL1VEUCBtZWRpYSB0eXBlIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTM3LVxcbm5ldC90aXBjL0tjb25maWc6Mzg6Y29uZmlnIFRJUENfQ1JZUFRPXFxubmV0L3RpcGMvS2NvbmZpZy0zOS1cXHRib29sIFxcXCJUSVBDIGVuY3J5cHRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90aXBjL0tjb25maWctNTItXFxubmV0L3RpcGMvS2NvbmZpZzo1Mzpjb25maWcgVElQQ19ESUFHXFxubmV0L3RpcGMvS2NvbmZpZy01NC1cXHR0cmlzdGF0ZSBcXFwiVElQQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNTowOTo1MC43NTE3MTExMjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDcyNTE0OTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBUSVBDIE5ldGxpbmsgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgVElQQ2AgY29uZmlndXJhdGlvbiBhbmQgdGhlc2Ugc3ltYm9sczogYHRpcGNfYmVhcmVyX2dldF9uYW1lYCwgYF9fdGlwY19ubF9hZGRfbW9uaXRvcmAsIGFuZCBgdGlwY19ubF9ub2RlX2R1bXBfbW9uaXRvcmAuIEhhbmcgb24sIGB0aXBjX25sX25vZGVfZHVtcF9tb25pdG9yYC4uLiB0aGF0J3MgYSBuZXRsaW5rIGR1bXAgZnVuY3Rpb24sIHJpZ2h0PyBNYWtlcyBpdCBhIGJpdCBtb3JlIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5Ob3csIHRoZSBjaGFuZ2UgSSdtIGV4YW1pbmluZyBpbnZvbHZlcyBgc3RyY3B5YCBiZWluZyByZXBsYWNlZCB3aXRoIGBzdHJzY3B5YC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gTGV0J3MgcmVmcmVzaCBvdXIgY3JpdGVyaWE6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLiBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLi4uIG9yIGNoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cIlxuXG5UaGlzIGBzdHJjcHlgIHRvIGBzdHJzY3B5YCBjaGFuZ2UgKmlzKiBmdW5jdGlvbmFsLiBJdCdzIGEgc2VjdXJpdHkgaGFyZGVuaW5nIG1lYXN1cmUgYWltZWQgYXQgcHJldmVudGluZyBidWZmZXIgb3ZlcmZsb3dzLiBCdXQgZG9lcyBpdCBtZWFuaW5nZnVsbHkgYWx0ZXIgdGhlIHByb2dyYW0ncyBleGVjdXRpb24gZmxvdyBpbiBhIHdheSB0aGF0IGZ1enppbmcgd291bGQgZXhwb3NlIG5ldywgY3JpdGljYWwgaXNzdWVzPyBJJ20gb24gdGhlIGZlbmNlLi4uIFNlY3VyaXR5IGhhcmRlbmluZyBpcyBkZWZpbml0ZWx5IGltcG9ydGFudC5cblxuSG93ZXZlciwgSSdtIHRoaW5raW5nLCBldmVuIGlmIGl0J3MgYSBzZWN1cml0eS1mb2N1c2VkIGNoYW5nZSwgZnV6emluZyBjb3VsZCBzdGlsbCBiZSB2YWx1YWJsZS4gUmVwbGFjaW5nIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIGludHJvZHVjZXMgYSBwb3RlbnRpYWwgZm9yIHVuZXhwZWN0ZWQgc3RyaW5nIHRydW5jYXRpb24uIFBsdXMsIGZ1enppbmcgbWlnaHQgdW5jb3ZlciByZWdyZXNzaW9ucyBvciBlZGdlIGNhc2VzLiBTbywgaXQncyBwcm9iYWJseSB3b3J0aCBpdCB0byB0YWtlIGEgY2xvc2VyIGxvb2suXG5cbkxldCBtZSBjaXJjbGUgYmFjayB0byBgdGlwY19iZWFyZXJfZ2V0X25hbWVgIHJlYWwgcXVpY2ssIGp1c3QgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzE1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEwOjAxLjQ3Njg2MzU4OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3RpcGMvYmVhcmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTk1OlxcdC8qICAgICB0aXBjX2JlYXJlcl9nZXRfbmFtZSAtIGdldCB0aGUgYmVhcmVyIG5hbWUgZnJvbSBpdHMgaWQuXFxuIDE5NjpcXHQgKiAgICAgQG5ldDogbmV0d29yayBuYW1lc3BhY2VcXG4gMTk3OlxcdCAqICAgICBAbmFtZTogYSBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2hlcmUgdGhlIG5hbWUgd2lsbCBiZSBzdG9yZWQuXFxuIDE5ODpcXHQgKiAgICAgQGJlYXJlcl9pZDogdGhlIGlkIHRvIGdldCB0aGUgbmFtZSBmcm9tLlxcbiAxOTk6XFx0ICovXFxuIDIwMDpcXHRpbnQgdGlwY19iZWFyZXJfZ2V0X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICpuYW1lLCB1MzIgYmVhcmVyX2lkKVxcbiAyMDE6XFx0e1xcbiAyMDI6XFx0XFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XFxuIDIwMzpcXHRcXHRzdHJ1Y3QgdGlwY19iZWFyZXIgKmI7XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdGlmIChiZWFyZXJfaWQgXFx1MDAzZT0gTUFYX0JFQVJFUlMpXFxuIDIwNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjA3OlxcdFxcbiAyMDg6XFx0XFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UodG4tXFx1MDAzZWJlYXJlcl9saXN0W2JlYXJlcl9pZF0pO1xcbiAyMDk6XFx0XFx0aWYgKCFiKVxcbiAyMTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdFxcdHN0cnNjcHkobmFtZSwgYi1cXHUwMDNlbmFtZSwgVElQQ19NQVhfQkVBUkVSX05BTUUpO1xcbiAyMTM6XFx0XFx0cmV0dXJuIDA7XFxuIDIxNDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEwOjAxLjQ3Njk5ODIyOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTcxNzgwMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIGEgS2VybmVsIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiwgYW5kIGhvbmVzdGx5LCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYXQgZmlyc3QgZ2xhbmNlLiBCdXQsIGNvbnNpZGVyaW5nIHRoaXMgaXMgYSBrZXJuZWwgY2hhbmdlLCBubyBtYXR0ZXIgaG93IHNpbXBsZSBpdCBzZWVtcywgaXQgKmFic29sdXRlbHkqIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2sgd2l0aCBmdXp6aW5nLiBNeSB0aG91Z2h0IHByb2Nlc3MgaXMgYWx3YXlzOiBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUga2VybmVsID0gcG90ZW50aWFsIGZvciBzdWJ0bGUgYnVncywgZXZlbiBpZiB0aGUgY29kZSBpdHNlbGYgaXMgYmFzaWMuXG5cblNvLCBsZXQncyBlc3RhYmxpc2ggYSBjbGVhciBmdXp6aW5nIHNldHVwLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjb25maWd1cmluZyB0aGUgZnV6emluZyBwcm9jZXNzIGNvcnJlY3RseS4gSSdsbCBuZWVkIHRvIGZvY3VzIG9uIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgYXJlYSBvZiB0aGUga2VybmVsLlxuXG5JJ2xsIGJlIGVuYWJsaW5nIHRoZSBgVElQQ2AgY29uZmlnLCBhcyB0aGlzIGZ1bmN0aW9uIGxpa2VseSBpbnRlcmFjdHMgd2l0aCB0aGF0IG1vZHVsZS4gVGhlbiwgdG8gbWFrZSBzdXJlIEknbSB0YXJnZXRpbmcgdGhlIGtleSBwYXJ0cywgSSdtIGdvaW5nIHRvIGZvY3VzIHRoZSBmdXp6aW5nIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAsIGBfX3RpcGNfbmxfYWRkX21vbml0b3JgLCBhbmQgYHRpcGNfbmxfbm9kZV9kdW1wX21vbml0b3JgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBtb3N0IGJhbmcgZm9yIG15IGJ1Y2sgYW5kIGNvdmVyIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBjaGFuZ2UuIExldCdzIHNlZSBpZiB3ZSBjYW4gZmluZCBhbnl0aGluZyBpbnRlcmVzdGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTY3NCwiT3V0cHV0VG9rZW5zIjoxMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEwOjA2LjA0ODc4NTM2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4Mzk4MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUSVBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGlwY19iZWFyZXJfZ2V0X25hbWVcIixcbiAgICBcIl9fdGlwY19ubF9hZGRfbW9uaXRvclwiLFxuICAgIFwidGlwY19ubF9ub2RlX2R1bXBfbW9uaXRvclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHN0cmNweSB3aXRoIHN0cnNjcHkgaW4gdGlwY19iZWFyZXJfZ2V0X25hbWUgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3dzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgbmV0bGluayBBUEkgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgdHJ1bmNhdGlvbnMgb2NjdXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfYmVhcmVyX2dldF9uYW1lXCIsXG4gICAgXCJfX3RpcGNfbmxfYWRkX21vbml0b3JcIixcbiAgICBcInRpcGNfbmxfbm9kZV9kdW1wX21vbml0b3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBzdHJjcHkgd2l0aCBzdHJzY3B5IGluIHRpcGNfYmVhcmVyX2dldF9uYW1lIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUSVBDIG5ldGxpbmsgQVBJIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHRydW5jYXRpb25zIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNToxMDowNi4xMjcxODk1OTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjY4MDIxNDM3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEwOjA2LjEyNzY5MDY1MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMDI2Nzk3MDkzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHRvIHByZXZlbnQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZnJvbSBgYi1cXHUwMDNlbmFtZWAgYW5kIG91dC1vZi1ib3VuZHMgd3JpdGVzIHRvIHRoZSBzdGFjay1hbGxvY2F0ZWQgYGJlYXJlcl9uYW1lYCBidWZmZXIgaW4gYF9fdGlwY19ubF9hZGRfbW9uaXRvcmAuIE91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIChib3RoIGhlYXAgYW5kIHN0YWNrKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgaGVyZTogdGhlIHNvdXJjZSBidWZmZXIgYGItXFx1MDAzZW5hbWVgIGlzIHBhcnQgb2YgYSB6ZXJvLWFsbG9jYXRlZCBzdHJ1Y3R1cmUsIGFuZCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGBiZWFyZXJfbmFtZWAgaXMgb25seSByZWFkIGJ5IGBubGFfcHV0X3N0cmluZ2AsIHdoaWNoIHN0cmljdGx5IHJlYWRzIHVwIHRvIHRoZSBudWxsIHRlcm1pbmF0b3IuIFNpbmNlIGBzdHJzY3B5YCBndWFyYW50ZWVzIG51bGwtdGVybWluYXRpb24gYW5kIGBubGFfcHV0X3N0cmluZ2AgZG9lcyBub3QgcmVhZCBwYXN0IGl0LCBubyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBpcyBldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRodXMsIHN0YW5kYXJkIEtBU0FOIGlzIGZ1bGx5IHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNvZGUsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODFmOWU4ODBiOTBjMjhjZjhiYzlhNjUwM2M3YjA3OWIxNjY3ZTU4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE1OjA5OjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvYmVhcmVyLmMgYi9uZXQvdGlwYy9iZWFyZXIuY1xuaW5kZXggMDVkY2QyZjllODg3YS4uOTUxYmI0NzRjN2Q0NCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2JlYXJlci5jXG4rKysgYi9uZXQvdGlwYy9iZWFyZXIuY1xuQEAgLTIwOSw3ICsyMDksNyBAQCBpbnQgdGlwY19iZWFyZXJfZ2V0X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICpuYW1lLCB1MzIgYmVhcmVyX2lkKVxuIFx0aWYgKCFiKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHN0cmNweShuYW1lLCBiLVx1MDAzZW5hbWUpO1xuK1x0c3Ryc2NweShuYW1lLCBiLVx1MDAzZW5hbWUsIFRJUENfTUFYX0JFQVJFUl9OQU1FKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEwOjA2LjEyNzY5MjM2MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzA4OTQxODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJ1ZmZlciBPdmVyZmxvdyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHJlcGxhY2VzIGEgYHN0cmNweWAgd2l0aCBgc3Ryc2NweWAgaW4gYHRpcGNfYmVhcmVyX2dldF9uYW1lYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoaXMgaXMgYWJvdXQgcHJldmVudGluZyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSDigJMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgd3JpdGUgc2NlbmFyaW8uIEdvb2QgY2F0Y2guIFRoZSBvcmlnaW5hbCBgc3RyY3B5YCB3YXMgYSB0aWNraW5nIHRpbWUgYm9tYiwgcmlwZSBmb3IgZXhwbG9pdGF0aW9uLlxuXG5CdXQgaG9sZCBvbiwgYHN0cnNjcHlgIGNvcGllcyBhdCBtb3N0IGBUSVBDX01BWF9CRUFSRVJfTkFNRWAgY2hhcmFjdGVycy4gVGhhdCdzIHRoZSBrZXkuIE5vdywgZG9lcyB0aGlzIGNoYW5nZSBpbnRyb2R1Y2UgYSBuZXcgcmlzazogdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmU/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guIGBzdHJzY3B5YCwgdW5saWtlIGBzdHJuY3B5YCwgKmRvZXNuJ3QqIHplcm8tcGFkIHRoZSByZXN0IG9mIHRoZSBidWZmZXIgaWYgdGhlIHNvdXJjZSBzdHJpbmcgaXMgc2hvcnRlciB0aGFuIHRoZSB0YXJnZXQgc2l6ZS4gQnV0LCB3YWl0LCBuZWl0aGVyIGRvZXMgYHN0cmNweWAuXG5cbkFoISBTbywgaWYgYGItXHUwMDNlbmFtZWAgaXMgc2hvcnRlciB0aGFuIHRoZSBidWZmZXIsIHRoZSByZW1haW5pbmcgcGFydCBvZiBgbmFtZWAgbWlnaHQgY29udGFpbiBzdGFsZSBkYXRhLiBJZiBgbmFtZWAgaXMgbGF0ZXIgcGFzc2VkIHRvIHVzZXIgc3BhY2UgKndpdGhvdXQqIGluaXRpYWxpemF0aW9uLCB3ZSd2ZSBnb3QgYSBtZW1vcnkgbGVhayBvciBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlIHJpc2sgb24gb3VyIGhhbmRzISBUaGlzIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gY2FyZWZ1bGx5IGV2YWx1YXRlLlxuXG5UbyB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byBzZWUgKndoZXJlKiBgdGlwY19iZWFyZXJfZ2V0X25hbWVgIGlzIGNhbGxlZC4gVGhlIGNvbnRleHQgb2YgaXRzIHVzZSBpcyBjcnVjaWFsIGZvciBhc3Nlc3NpbmcgdGhpcyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsZXJzIGFuZCBzZWUgaG93IHRoZSBgbmFtZWAgYnVmZmVyIGlzIGFjdHVhbGx5IHVzZWQgYWZ0ZXJ3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTY2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MTA6MTIuODM2NjM4MDI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAzNTYwODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfYmVhcmVyX2dldF9uYW1lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2JlYXJlci5jPTE4MT1zdHJ1Y3QgdGlwY19iZWFyZXIgKnRpcGNfYmVhcmVyX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmMtMTk0LVxcbm5ldC90aXBjL2JlYXJlci5jOjE5NTovKiAgICAgdGlwY19iZWFyZXJfZ2V0X25hbWUgLSBnZXQgdGhlIGJlYXJlciBuYW1lIGZyb20gaXRzIGlkLlxcbm5ldC90aXBjL2JlYXJlci5jLTE5Ni0gKiAgICAgQG5ldDogbmV0d29yayBuYW1lc3BhY2VcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5jLTE5OS0gKi9cXG5uZXQvdGlwYy9iZWFyZXIuYzoyMDA6aW50IHRpcGNfYmVhcmVyX2dldF9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqbmFtZSwgdTMyIGJlYXJlcl9pZClcXG5uZXQvdGlwYy9iZWFyZXIuYy0yMDEte1xcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmg9MjI4PXN0cnVjdCB0aXBjX2JlYXJlciAqdGlwY19iZWFyZXJfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbm5ldC90aXBjL2JlYXJlci5oOjIyOTppbnQgdGlwY19iZWFyZXJfZ2V0X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICpuYW1lLCB1MzIgYmVhcmVyX2lkKTtcXG5uZXQvdGlwYy9iZWFyZXIuaC0yMzAtc3RydWN0IHRpcGNfbWVkaWEgKnRpcGNfbWVkaWFfZmluZChjb25zdCBjaGFyICpuYW1lKTtcXG4tLVxcbm5ldC90aXBjL21vbml0b3IuYz04Mjc9aW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxcbi0tXFxubmV0L3RpcGMvbW9uaXRvci5jLTgzNS1cXG5uZXQvdGlwYy9tb25pdG9yLmM6ODM2OlxcdHJldCA9IHRpcGNfYmVhcmVyX2dldF9uYW1lKG5ldCwgYmVhcmVyX25hbWUsIGJlYXJlcl9pZCk7XFxubmV0L3RpcGMvbW9uaXRvci5jLTgzNy1cXHRpZiAocmV0IHx8ICFtb24pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEwOjE0LjY0MDIwNDcxMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzQwNjc3MTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgVElQQyBNb25pdG9yIEFkZGl0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBUSVBDIG1vbml0b3JzIGFyZSBiZWluZyBhZGRlZC4gTGV0J3Mgc3RhcnQgd2l0aCBgX190aXBjX25sX2FkZF9tb25pdG9yYCBpbiBgbmV0L3RpcGMvbW9uaXRvci5jYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGxvb2tzIGxpa2UgZXhhY3RseSB3aGVyZSBJIHNob3VsZCBzdGFydCBkaWdnaW5nLiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgdGhpcyBpcyBsaWtlbHkgdGhlIGNvcmUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIGEgbW9uaXRvciB0aHJvdWdoIHRoZSBuZXRsaW5rIGludGVyZmFjZS4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGhvdyBpdCdzIGNhbGxlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiBob3cgaXQgdmFsaWRhdGVzIHRoZSByZXF1ZXN0LCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIG1vbml0b3IgZnJhbWV3b3JrLCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBtZWNoYW5pc21zIHRoYXQgYXJlIGludm9sdmVkLiBMZXQncyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MTA6MjAuMzgwODg1MDUzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA2Njk5NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdGlwY19ubF9hZGRfbW9uaXRvclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9tb25pdG9yLmM9NzM3PWludCB0aXBjX25sX21vbml0b3JfZ2V0X3RocmVzaG9sZChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvdGlwYy9tb25pdG9yLmMtNzQzLVxcbm5ldC90aXBjL21vbml0b3IuYzo3NDQ6c3RhdGljIGludCBfX3RpcGNfbmxfYWRkX21vbml0b3JfcGVlcihzdHJ1Y3QgdGlwY19wZWVyICpwZWVyLFxcbm5ldC90aXBjL21vbml0b3IuYy03NDUtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHRpcGNfbmxfbXNnICptc2cpXFxuLS1cXG5uZXQvdGlwYy9tb25pdG9yLmM9Nzk4PWludCB0aXBjX25sX2FkZF9tb25pdG9yX3BlZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZyxcXG4tLVxcbm5ldC90aXBjL21vbml0b3IuYy04MTUtXFx0XFx0fVxcbm5ldC90aXBjL21vbml0b3IuYzo4MTY6XFx0XFx0aWYgKF9fdGlwY19ubF9hZGRfbW9uaXRvcl9wZWVyKHBlZXIsIG1zZykpIHtcXG5uZXQvdGlwYy9tb25pdG9yLmMtODE3LVxcdFxcdFxcdCpwcmV2X25vZGUgPSBwZWVyLVxcdTAwM2VhZGRyO1xcbi0tXFxubmV0L3RpcGMvbW9uaXRvci5jLTgyNi1cXG5uZXQvdGlwYy9tb25pdG9yLmM6ODI3OmludCBfX3RpcGNfbmxfYWRkX21vbml0b3Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZyxcXG5uZXQvdGlwYy9tb25pdG9yLmMtODI4LVxcdFxcdFxcdCAgdTMyIGJlYXJlcl9pZClcXG4tLVxcbm5ldC90aXBjL21vbml0b3IuaD03NT1pbnQgdGlwY19ubF9tb25pdG9yX2dldF90aHJlc2hvbGQoc3RydWN0IG5ldCAqbmV0KTtcXG5uZXQvdGlwYy9tb25pdG9yLmg6NzY6aW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxcbm5ldC90aXBjL21vbml0b3IuaC03Ny1cXHRcXHRcXHQgIHUzMiBiZWFyZXJfaWQpO1xcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTI3NjE9aW50IHRpcGNfbmxfbm9kZV9zZXRfbW9uaXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTI3ODgtXFxubmV0L3RpcGMvbm9kZS5jOjI3ODk6c3RhdGljIGludCBfX3RpcGNfbmxfYWRkX21vbml0b3JfcHJvcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnKVxcbm5ldC90aXBjL25vZGUuYy0yNzkwLXtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0yODIyPWludCB0aXBjX25sX25vZGVfZ2V0X21vbml0b3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0yODMzLVxcbm5ldC90aXBjL25vZGUuYzoyODM0OlxcdGVyciA9IF9fdGlwY19ubF9hZGRfbW9uaXRvcl9wcm9wKG5ldCwgXFx1MDAyNm1zZyk7XFxubmV0L3RpcGMvbm9kZS5jLTI4MzUtXFx0aWYgKGVycikge1xcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTI4NDM9aW50IHRpcGNfbmxfbm9kZV9kdW1wX21vbml0b3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTI4NTktXFx0Zm9yIChiZWFyZXJfaWQgPSBwcmV2X2JlYXJlcjsgYmVhcmVyX2lkIFxcdTAwM2MgTUFYX0JFQVJFUlM7IGJlYXJlcl9pZCsrKSB7XFxubmV0L3RpcGMvbm9kZS5jOjI4NjA6XFx0XFx0ZXJyID0gX190aXBjX25sX2FkZF9tb25pdG9yKG5ldCwgXFx1MDAyNm1zZywgYmVhcmVyX2lkKTtcXG5uZXQvdGlwYy9ub2RlLmMtMjg2MS1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNToxMDoyMi4xODc1OTA1MDVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMwODU4MjM4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgdGhlIGBfX3RpcGNfbmxfYWRkX21vbml0b3JgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGBfX3RpcGNfbmxfYWRkX21vbml0b3JgLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4gYG5ldC90aXBjL21vbml0b3IuY2AuIE15IGluaXRpYWwgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBoYW5kbGVzIHRoZSBhZGRpdGlvbiBvZiBhIG5ldyBtb25pdG9yIGZvciB0aGUgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXIgUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBwcm90b2NvbCwgcHJvYmFibHkgcmVsYXRlZCB0byBuZXR3b3JrIG1lc3NhZ2VzIG9yIGV2ZW50cy4gSSBiZXQgaXQgdGFrZXMgY2FyZSBvZiByZWdpc3RlcmluZyB0aGUgbW9uaXRvcidzIGNoYXJhY3RlcmlzdGljcywgbGlrZSB3aGF0IGtpbmQgb2YgZXZlbnRzIGl0J3MgaW50ZXJlc3RlZCBpbiwgd2hlcmUgdGhlIGRhdGEgc2hvdWxkIGdvLCBhbmQgc28gb24uIExldCdzIHNlZSB3aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIFwibmxcIiBwYXJ0IHNpZ25pZmllcyAtIGl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgTmV0bGluayBwcm90b2NvbCwgZ2l2ZW4gdGhhdCB0aGlzIGlzIGEgbmV0d29ya2luZyBjb21wb25lbnQuIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIE5ldGxpbmsgbWVzc2FnZSBoYW5kbGluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgaXQgdmFsaWRhdGVzIHRoZSBpbmNvbWluZyBpbmZvcm1hdGlvbiwgaG93IGl0IG1hbmFnZXMgbWVtb3J5IChhbGxvY2F0aW5nIGFuZCBmcmVlaW5nKSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaW50ZXJuYWwgVElQQyBkYXRhIHN0cnVjdHVyZXMgdG8gbWFuYWdlIHRoZSBtb25pdG9ycy4gSSBhbSBhbHNvIHZlcnkga2VlbiB0byBsZWFybiBpZiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGFibGUgZnJvbSB0aGUgTmV0bGluayB1c2VyLXNwYWNlIG9yIGZyb20ga2VybmVsIGludGVybmFsIHN0cnVjdHVyZXMuIEknbGwgYmUgc2NydXRpbml6aW5nIHRoZSBjb2RlIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSBjb25jdXJyZW5jeSBzYWZldHkuIEZ1cnRoZXJtb3JlLCBJJ2xsIGJlIGNoZWNraW5nIGhvdyB0aGUgbW9uaXRvcidzIGxpZmVjeWNsZSBpcyBtYW5hZ2VkIOKAkyBhcmUgdGhlcmUgZnVuY3Rpb25zIGZvciByZW1vdmFsIG9yIG1vZGlmaWNhdGlvbj8gRmluYWxseSwgSSBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgbW9uaXRvcnMgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIFRJUEMncyBvdmVyYWxsIGRlc2lnbiwgYW5kIHdoZXRoZXIgaXQgYWxpZ25zIHdpdGggcGVyZm9ybWFuY2UgYmVzdCBwcmFjdGljZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNToxMDo0NS4yNzM0MTcyNzNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL21vbml0b3IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MjA6XFx0XFx0XFx0fVxcbiA4MjE6XFx0XFx0fSB3aGlsZSAoKHBlZXIgPSBwZWVyX254dChwZWVyKSkgIT0gbW9uLVxcdTAwM2VzZWxmKTtcXG4gODIyOlxcdFxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZtb24tXFx1MDAzZWxvY2spO1xcbiA4MjM6XFx0XFxuIDgyNDpcXHRcXHRyZXR1cm4gMDtcXG4gODI1OlxcdH1cXG4gODI2OlxcdFxcbiA4Mjc6XFx0aW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxcbiA4Mjg6XFx0XFx0XFx0XFx0ICB1MzIgYmVhcmVyX2lkKVxcbiA4Mjk6XFx0e1xcbiA4MzA6XFx0XFx0c3RydWN0IHRpcGNfbW9uaXRvciAqbW9uID0gdGlwY19tb25pdG9yKG5ldCwgYmVhcmVyX2lkKTtcXG4gODMxOlxcdFxcdGNoYXIgYmVhcmVyX25hbWVbVElQQ19NQVhfQkVBUkVSX05BTUVdO1xcbiA4MzI6XFx0XFx0c3RydWN0IG5sYXR0ciAqYXR0cnM7XFxuIDgzMzpcXHRcXHR2b2lkICpoZHI7XFxuIDgzNDpcXHRcXHRpbnQgcmV0O1xcbiA4MzU6XFx0XFxuIDgzNjpcXHRcXHRyZXQgPSB0aXBjX2JlYXJlcl9nZXRfbmFtZShuZXQsIGJlYXJlcl9uYW1lLCBiZWFyZXJfaWQpO1xcbiA4Mzc6XFx0XFx0aWYgKHJldCB8fCAhbW9uKVxcbiA4Mzg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDgzOTpcXHRcXG4gODQwOlxcdFxcdGhkciA9IGdlbmxtc2dfcHV0KG1zZy1cXHUwMDNlc2tiLCBtc2ctXFx1MDAzZXBvcnRpZCwgbXNnLVxcdTAwM2VzZXEsIFxcdTAwMjZ0aXBjX2dlbmxfZmFtaWx5LFxcbiA4NDE6XFx0XFx0XFx0XFx0ICBOTE1fRl9NVUxUSSwgVElQQ19OTF9NT05fR0VUKTtcXG4gODQyOlxcdFxcdGlmICghaGRyKVxcbiA4NDM6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gODQ0OlxcdFxcbiA4NDU6XFx0XFx0YXR0cnMgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcobXNnLVxcdTAwM2Vza2IsIFRJUENfTkxBX01PTik7XFxuIDg0NjpcXHRcXHRpZiAoIWF0dHJzKVxcbiA4NDc6XFx0XFx0XFx0Z290byBtc2dfZnVsbDtcXG4gODQ4OlxcdFxcbiA4NDk6XFx0XFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZtb24tXFx1MDAzZWxvY2spO1xcbiA4NTA6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKG1zZy1cXHUwMDNlc2tiLCBUSVBDX05MQV9NT05fUkVGLCBiZWFyZXJfaWQpKVxcbiA4NTE6XFx0XFx0XFx0Z290byBhdHRyX21zZ19mdWxsO1xcbiA4NTI6XFx0XFx0aWYgKHRpcGNfbW9uX2lzX2FjdGl2ZShuZXQsIG1vbikpXFxuIDg1MzpcXHRcXHRcXHRpZiAobmxhX3B1dF9mbGFnKG1zZy1cXHUwMDNlc2tiLCBUSVBDX05MQV9NT05fQUNUSVZFKSlcXG4gODU0OlxcdFxcdFxcdFxcdGdvdG8gYXR0cl9tc2dfZnVsbDtcXG4gODU1OlxcdFxcdGlmIChubGFfcHV0X3N0cmluZyhtc2ctXFx1MDAzZXNrYiwgVElQQ19OTEFfTU9OX0JFQVJFUl9OQU1FLCBiZWFyZXJfbmFtZSkpXFxuIDg1NjpcXHRcXHRcXHRnb3RvIGF0dHJfbXNnX2Z1bGw7XFxuIDg1NzpcXHRcXHRpZiAobmxhX3B1dF91MzIobXNnLVxcdTAwM2Vza2IsIFRJUENfTkxBX01PTl9QRUVSQ05ULCBtb24tXFx1MDAzZXBlZXJfY250KSlcXG4gODU4OlxcdFxcdFxcdGdvdG8gYXR0cl9tc2dfZnVsbDtcXG4gODU5OlxcdFxcdGlmIChubGFfcHV0X3UzMihtc2ctXFx1MDAzZXNrYiwgVElQQ19OTEFfTU9OX0xJU1RHRU4sIG1vbi1cXHUwMDNlbGlzdF9nZW4pKVxcbiA4NjA6XFx0XFx0XFx0Z290byBhdHRyX21zZ19mdWxsO1xcbiA4NjE6XFx0XFxuIDg2MjpcXHRcXHRyZWFkX3VubG9ja19iaChcXHUwMDI2bW9uLVxcdTAwM2Vsb2NrKTtcXG4gODYzOlxcdFxcdG5sYV9uZXN0X2VuZChtc2ctXFx1MDAzZXNrYiwgYXR0cnMpO1xcbiA4NjQ6XFx0XFx0Z2VubG1zZ19lbmQobXNnLVxcdTAwM2Vza2IsIGhkcik7XFxuIDg2NTpcXHRcXG4gODY2OlxcdFxcdHJldHVybiAwO1xcbiA4Njc6XFx0XFxuIDg2ODpcXHRhdHRyX21zZ19mdWxsOlxcbiA4Njk6XFx0XFx0cmVhZF91bmxvY2tfYmgoXFx1MDAyNm1vbi1cXHUwMDNlbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEwOjQ1LjI3MzUzNDc2M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjY4NzUxMjE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBUSVBDIEJlYXJlciBOYW1lIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgYmVhcmVyX25hbWVgLCBkZWNsYXJlZCBhcyBgY2hhciBiZWFyZXJfbmFtZVtUSVBDX01BWF9CRUFSRVJfTkFNRV07YCwgaXMgYW4gYXJyYXkgb24gdGhlIHN0YWNrLiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGF0IGl0J3MgdW5pbml0aWFsaXplZCBpbml0aWFsbHkuIFdlIHRoZW4gY2FsbCBgdGlwY19iZWFyZXJfZ2V0X25hbWVgLCB3aGljaCwgYWZ0ZXIgdGhlIGNoYW5nZSwgdXNlcyBgc3Ryc2NweShuYW1lLCBiLVx1MDAzZW5hbWUsIFRJUENfTUFYX0JFQVJFUl9OQU1FKTtgIHRvIGNvcHkgdGhlIGJlYXJlciBuYW1lLiBQcmV2aW91c2x5IGl0IHVzZWQgYHN0cmNweWAuXG5cbk5vdywgaWYgYGItXHUwMDNlbmFtZWAgaXMgc2hvcnRlciB0aGFuIGBUSVBDX01BWF9CRUFSRVJfTkFNRWAsIGBzdHJzY3B5YCAobGlrZSBgc3RyY3B5YCBiZWZvcmUgaXQsIGFuZCBjb250cmFyeSB0byBteSBpbml0aWFsIGV4cGVjdGF0aW9ucykgKnN0aWxsKiBsZWF2ZXMgdGhlIHJlc3Qgb2YgYGJlYXJlcl9uYW1lYCB1bmluaXRpYWxpemVkLiBUaGF0J3MgdGhlIGtleS4gVGhpcyBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgZ2FyYmFnZSBkYXRhIGluIHRoZSByZXN0IG9mIHRoZSBidWZmZXIuXG5cblRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgaXMgYG5sYV9wdXRfc3RyaW5nYCB3aGljaCBpcyB1c2VkIHRvIHBsYWNlIHRoZSBzdHJpbmcgaW50byB0aGUgbmV0bGluayBtZXNzYWdlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGlzIHdoZXJlIHRoZSB0cm91YmxlIGJlZ2lucy4gSG93ZXZlciwgKml0J3Mgbm90Ki4gYG5sYV9wdXRfc3RyaW5nYCBjYWxscyBgc3RybGVuYCB0byBkZXRlcm1pbmUgdGhlIGxlbmd0aC4gVGhhdCdzIHRoZSBzYXZpbmcgZ3JhY2UhIEl0IGNvcnJlY3RseSBsaW1pdHMgdGhlIGNvcHkgdG8gdGhlIGFjdHVhbCBsZW5ndGggb2YgdGhlIHN0cmluZyBwbHVzIHRoZSBudWxsIHRlcm1pbmF0b3IuIFNvLCBpdCAqZG9lc24ndCogY29weSB0aGUgdW5pbml0aWFsaXplZCBieXRlcy5cblxuQnV0LCBoYW5nIG9uLCB0aGlzIHJlcXVpcmVzIGEgZGVlcGVyIGxvb2suIGBubGFfcHV0X3N0cmluZ2AgaXMgZGVmaW5lZCBhcyBhIGNhbGwgdG8gYG5sYV9wdXRgLCB3aGljaCBpcyBkZWZpbmVkIGFzOlxuXG5gYGBjXG5zdGF0aWMgaW5saW5lIGludCBubGFfcHV0X3N0cmluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsXG5cdFx0XHRcdCBjb25zdCBjaGFyICpzdHIpXG57XG5cdHJldHVybiBubGFfcHV0KHNrYiwgYXR0cnR5cGUsIHN0cmxlbihzdHIpICsgMSwgc3RyKTtcbn1cbmBgYFxuXG5TbyBpdCBvbmx5IGNvcGllcyBgc3RybGVuKHN0cikgKyAxYCBieXRlcy4gSXQgZG9lcyBOT1QgY29weSB0aGUgdW5pbml0aWFsaXplZCBieXRlcyBvZiBgYmVhcmVyX25hbWVgLlxuXG5JIGFsc28gcmVjYWxsIHRoYXQgYG5sYV9wdXRgIG1pZ2h0IHBhZCB0byBhIDQtYnl0ZSBib3VuZGFyeS4gRG9lcyBpdCBwYWQgd2l0aCB6ZXJvZXM/IFllcywgaXQgcGFkcyB3aXRoIHplcm9lcyEgKk9yIHJhdGhlciosIGBfX25sYV9wdXRgIGRvZXMuIFNvLCB3aGlsZSB3ZSBoYXZlIHVuaW5pdGlhbGl6ZWQgZGF0YSBpbiB0aGUgb3JpZ2luYWwgYGJlYXJlcl9uYW1lYCBhcnJheSwgdGhlIHBhZGRpbmcgbWVjaGFuaXNtIGluIGBubGFfcHV0YCBlZmZlY3RpdmVseSBudWxscyBhbnkgZXhjZXNzIGJ5dGVzIGJleW9uZCB0aGUgc3RyaW5nIGxlbmd0aCB3aGVuIGFkZGluZyB0aGUgc3RyaW5nIHRvIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZS5cblxuU28sIHdoaWxlIHRoZXJlICppcyogYSBwb3RlbnRpYWwgZm9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjayBkYXRhLCBpdCdzICpub3QqIGV4cG9zZWQgaW4gdGhlIG5ldGxpbmsgbWVzc2FnZSBkdWUgdG8gdGhlIHVzZSBvZiBgc3RybGVuYCBpbiBgbmxhX3B1dF9zdHJpbmdgIGFuZCB0aGUgcGFkZGluZyBiZWhhdmlvci4gQSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBleGlzdHMsIGJ1dCBpdCBpcyBub3QgZXhwbG9pdGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMzcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNToxMTowMS45NjEwNDk5NDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjYzMTIyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19ubGFfcHV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGxpbmsuaD01NjE9dm9pZCAqbmxhX3Jlc2VydmVfbm9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4pO1xcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDo1NjI6dm9pZCBfX25sYV9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbixcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtNTYzLVxcdCAgICAgICBjb25zdCB2b2lkICpkYXRhKTtcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6NTY0OnZvaWQgX19ubGFfcHV0XzY0Yml0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTU2NS1cXHRcXHQgICAgIGNvbnN0IHZvaWQgKmRhdGEsIGludCBwYWRhdHRyKTtcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6NTY2OnZvaWQgX19ubGFfcHV0X25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuLCBjb25zdCB2b2lkICpkYXRhKTtcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtNTY3LWludCBubGFfcHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sIGNvbnN0IHZvaWQgKmRhdGEpO1xcbi0tXFxubGliL25sYXR0ci5jPTEwMjM9RVhQT1JUX1NZTUJPTChubGFfcmVzZXJ2ZV9ub2hkcik7XFxuLS1cXG5saWIvbmxhdHRyLmMtMTAyNS0vKipcXG5saWIvbmxhdHRyLmM6MTAyNjogKiBfX25sYV9wdXQgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB0byBhIHNvY2tldCBidWZmZXJcXG5saWIvbmxhdHRyLmMtMTAyNy0gKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIGFkZCBhdHRyaWJ1dGUgdG9cXG4tLVxcbmxpYi9ubGF0dHIuYy0xMDM0LSAqL1xcbmxpYi9ubGF0dHIuYzoxMDM1OnZvaWQgX19ubGFfcHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sXFxubGliL25sYXR0ci5jLTEwMzYtXFx0XFx0XFx0ICAgICBjb25zdCB2b2lkICpkYXRhKVxcbi0tXFxubGliL25sYXR0ci5jLTEwNDItfVxcbmxpYi9ubGF0dHIuYzoxMDQzOkVYUE9SVF9TWU1CT0woX19ubGFfcHV0KTtcXG5saWIvbmxhdHRyLmMtMTA0NC1cXG5saWIvbmxhdHRyLmMtMTA0NS0vKipcXG5saWIvbmxhdHRyLmM6MTA0NjogKiBfX25sYV9wdXRfNjRiaXQgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB0byBhIHNvY2tldCBidWZmZXIgYW5kIGFsaWduIGl0XFxubGliL25sYXR0ci5jLTEwNDctICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvXFxuLS1cXG5saWIvbmxhdHRyLmMtMTA1NS0gKi9cXG5saWIvbmxhdHRyLmM6MTA1Njp2b2lkIF9fbmxhX3B1dF82NGJpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLFxcbmxpYi9ubGF0dHIuYy0xMDU3LVxcdFxcdCAgICAgY29uc3Qgdm9pZCAqZGF0YSwgaW50IHBhZGF0dHIpXFxuLS1cXG5saWIvbmxhdHRyLmMtMTA2My19XFxubGliL25sYXR0ci5jOjEwNjQ6RVhQT1JUX1NZTUJPTChfX25sYV9wdXRfNjRiaXQpO1xcbmxpYi9ubGF0dHIuYy0xMDY1LVxcbmxpYi9ubGF0dHIuYy0xMDY2LS8qKlxcbmxpYi9ubGF0dHIuYzoxMDY3OiAqIF9fbmxhX3B1dF9ub2hkciAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyXFxubGliL25sYXR0ci5jLTEwNjgtICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvXFxuLS1cXG5saWIvbmxhdHRyLmMtMTA3NC0gKi9cXG5saWIvbmxhdHRyLmM6MTA3NTp2b2lkIF9fbmxhX3B1dF9ub2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cmxlbiwgY29uc3Qgdm9pZCAqZGF0YSlcXG5saWIvbmxhdHRyLmMtMTA3Ni17XFxuLS1cXG5saWIvbmxhdHRyLmMtMTA4MS19XFxubGliL25sYXR0ci5jOjEwODI6RVhQT1JUX1NZTUJPTChfX25sYV9wdXRfbm9oZHIpO1xcbmxpYi9ubGF0dHIuYy0xMDgzLVxcbi0tXFxubGliL25sYXR0ci5jPTEwOTQ9aW50IG5sYV9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbiwgY29uc3Qgdm9pZCAqZGF0YSlcXG4tLVxcbmxpYi9ubGF0dHIuYy0xMDk4LVxcbmxpYi9ubGF0dHIuYzoxMDk5OlxcdF9fbmxhX3B1dChza2IsIGF0dHJ0eXBlLCBhdHRybGVuLCBkYXRhKTtcXG5saWIvbmxhdHRyLmMtMTEwMC1cXHRyZXR1cm4gMDtcXG4tLVxcbmxpYi9ubGF0dHIuYz0xMTE1PWludCBubGFfcHV0XzY0Yml0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sXFxuLS1cXG5saWIvbmxhdHRyLmMtMTEyNi1cXG5saWIvbmxhdHRyLmM6MTEyNzpcXHRfX25sYV9wdXRfNjRiaXQoc2tiLCBhdHRydHlwZSwgYXR0cmxlbiwgZGF0YSwgcGFkYXR0cik7XFxubGliL25sYXR0ci5jLTExMjgtXFx0cmV0dXJuIDA7XFxuLS1cXG5saWIvbmxhdHRyLmM9MTE0MT1pbnQgbmxhX3B1dF9ub2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cmxlbiwgY29uc3Qgdm9pZCAqZGF0YSlcXG4tLVxcbmxpYi9ubGF0dHIuYy0xMTQ1LVxcbmxpYi9ubGF0dHIuYzoxMTQ2OlxcdF9fbmxhX3B1dF9ub2hkcihza2IsIGF0dHJsZW4sIGRhdGEpO1xcbmxpYi9ubGF0dHIuYy0xMTQ3LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDUxPXN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTIyLVxcdGlmICh1cGNhbGxfaW5mby1cXHUwMDNldXNlcmRhdGEpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTIzOlxcdFxcdF9fbmxhX3B1dCh1c2VyX3NrYiwgT1ZTX1BBQ0tFVF9BVFRSX1VTRVJEQVRBLFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTUyNC1cXHRcXHRcXHQgIG5sYV9sZW4odXBjYWxsX2luZm8tXFx1MDAzZXVzZXJkYXRhKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MTE6MDMuOTg3MzY4MDE1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzk4MDY1MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbGliL25sYXR0ci5jYCoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gbmV0bGluayBhdHRyaWJ1dGVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgc3RyYWlnaHQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIGBfX25sYV9wdXRgIHdpdGhpbiBgbGliL25sYXR0ci5jYC4gVGhhdCBmdW5jdGlvbidzIHdoZXJlIHRoZSAqYWN0dWFsKiB3b3JrIG9mIHBsYWNpbmcgbmV0bGluayBhdHRyaWJ1dGVzIGlzIGhhcHBlbmluZy4gSXQncyB0aGUgYnVpbGRpbmcgYmxvY2suIEkgZmlndXJlIGlmIEkgbmVlZCB0byBkaWFnbm9zZSBhbiBpc3N1ZSB3aXRoIHRoZSBhdHRyaWJ1dGVzLCB1bmRlcnN0YW5kIHRoZWlyIHN0cnVjdHVyZSwgb3Igb3B0aW1pemUgc29tZSBmdW5jdGlvbmFsaXR5LCBgX19ubGFfcHV0YCBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2sgZm9yIHdvcmtpbmcgd2l0aCBhdHRyaWJ1dGVzLCBzbyBpdCBtYWtlcyBzZW5zZSB0byB2ZXJpZnkgdGhlIG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY4MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjExOjM2Ljc4NTQzNTk2NloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL25sYXR0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMzA6XFx0ICogQGRhdGE6IGhlYWQgb2YgYXR0cmlidXRlIHBheWxvYWRcXG4xMDMxOlxcdCAqXFxuMTAzMjpcXHQgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGVuc3VyZSB0aGF0IHRoZSBza2IgcHJvdmlkZXMgZW5vdWdoXFxuMTAzMzpcXHQgKiB0YWlscm9vbSBmb3IgdGhlIGF0dHJpYnV0ZSBoZWFkZXIgYW5kIHBheWxvYWQuXFxuMTAzNDpcXHQgKi9cXG4xMDM1OlxcdHZvaWQgX19ubGFfcHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sXFxuMTAzNjpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHZvaWQgKmRhdGEpXFxuMTAzNzpcXHR7XFxuMTAzODpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpubGE7XFxuMTAzOTpcXHRcXG4xMDQwOlxcdFxcdG5sYSA9IF9fbmxhX3Jlc2VydmUoc2tiLCBhdHRydHlwZSwgYXR0cmxlbik7XFxuMTA0MTpcXHRcXHRtZW1jcHkobmxhX2RhdGEobmxhKSwgZGF0YSwgYXR0cmxlbik7XFxuMTA0MjpcXHR9XFxuMTA0MzpcXHRFWFBPUlRfU1lNQk9MKF9fbmxhX3B1dCk7XFxuMTA0NDpcXHRcXG4xMDQ1OlxcdC8qKlxcbjEwNDY6XFx0ICogX19ubGFfcHV0XzY0Yml0IC0gQWRkIGEgbmV0bGluayBhdHRyaWJ1dGUgdG8gYSBzb2NrZXQgYnVmZmVyIGFuZCBhbGlnbiBpdFxcbjEwNDc6XFx0ICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvXFxuMTA0ODpcXHQgKiBAYXR0cnR5cGU6IGF0dHJpYnV0ZSB0eXBlXFxuMTA0OTpcXHQgKiBAYXR0cmxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkXFxuMTA1MDpcXHQgKiBAZGF0YTogaGVhZCBvZiBhdHRyaWJ1dGUgcGF5bG9hZFxcbjEwNTE6XFx0ICogQHBhZGF0dHI6IGF0dHJpYnV0ZSB0eXBlIGZvciB0aGUgcGFkZGluZ1xcbjEwNTI6XFx0ICpcXG4xMDUzOlxcdCAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gZW5zdXJlIHRoYXQgdGhlIHNrYiBwcm92aWRlcyBlbm91Z2hcXG4xMDU0OlxcdCAqIHRhaWxyb29tIGZvciB0aGUgYXR0cmlidXRlIGhlYWRlciBhbmQgcGF5bG9hZC5cXG4xMDU1OlxcdCAqL1xcbjEwNTY6XFx0dm9pZCBfX25sYV9wdXRfNjRiaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbixcXG4xMDU3OlxcdFxcdFxcdCAgICAgY29uc3Qgdm9pZCAqZGF0YSwgaW50IHBhZGF0dHIpXFxuMTA1ODpcXHR7XFxuMTA1OTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpubGE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjExOjM2Ljc4NTU2MzA0NloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTY1NDkyMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgUGFkZGluZyBNZWNoYW5pc20qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gcmV0aGluayB0aGlzIHBhZGRpbmcgaXNzdWUuIFRoZSBuYW1lIGBfX25sYV9yZXNlcnZlYC4uLiB0aGF0J3MgcmluZ2luZyBhIGJlbGwuIE15IGd1dCB0ZWxscyBtZSAqdGhhdCdzKiB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBwYWRkaW5nIHdpdGhpbiB0aGlzIE5ldGxpbmsgQXR0cmlidXRlIChOTEEpIHN0cnVjdHVyZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQ7IEkgbmVlZCB0byBjb25maXJtIG15IGluaXRpYWwgaHVuY2guIEdvdHRhIHZlcmlmeSB0aGUgcm9sZSBvZiBgX19ubGFfcmVzZXJ2ZWAgYW5kIG1ha2Ugc3VyZSBpdCdzIGluZGVlZCB0aGUgcmlnaHQgbG9jYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNjksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjExOjQ0LjM1MTA1ODk5NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3OTkzODMxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25sYV9yZXNlcnZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGxpbmsuaD01NTM9aW50IG5sYV9zdHJjbXAoY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLCBjb25zdCBjaGFyICpzdHIpO1xcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDo1NTQ6c3RydWN0IG5sYXR0ciAqX19ubGFfcmVzZXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuKTtcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6NTU1OnN0cnVjdCBubGF0dHIgKl9fbmxhX3Jlc2VydmVfNjRiaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLFxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC01NTYtXFx0XFx0XFx0XFx0ICAgaW50IGF0dHJsZW4sIGludCBwYWRhdHRyKTtcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6NTU3OnZvaWQgKl9fbmxhX3Jlc2VydmVfbm9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4pO1xcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC01NTgtc3RydWN0IG5sYXR0ciAqbmxhX3Jlc2VydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbik7XFxuLS1cXG5saWIvbmxhdHRyLmM9ODg3PUVYUE9SVF9TWU1CT0wobmxhX3N0cmNtcCk7XFxuLS1cXG5saWIvbmxhdHRyLmMtODkwLS8qKlxcbmxpYi9ubGF0dHIuYzo4OTE6ICogX19ubGFfcmVzZXJ2ZSAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIG9uIHRoZSBza2JcXG5saWIvbmxhdHRyLmMtODkyLSAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gcmVzZXJ2ZSByb29tIG9uXFxuLS1cXG5saWIvbmxhdHRyLmMtOTAxLSAqL1xcbmxpYi9ubGF0dHIuYzo5MDI6c3RydWN0IG5sYXR0ciAqX19ubGFfcmVzZXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuKVxcbmxpYi9ubGF0dHIuYy05MDMte1xcbi0tXFxubGliL25sYXR0ci5jLTkxMy19XFxubGliL25sYXR0ci5jOjkxNDpFWFBPUlRfU1lNQk9MKF9fbmxhX3Jlc2VydmUpO1xcbmxpYi9ubGF0dHIuYy05MTUtXFxubGliL25sYXR0ci5jLTkxNi0vKipcXG5saWIvbmxhdHRyLmM6OTE3OiAqIF9fbmxhX3Jlc2VydmVfNjRiaXQgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBvbiB0aGUgc2tiIGFuZCBhbGlnbiBpdFxcbmxpYi9ubGF0dHIuYy05MTgtICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byByZXNlcnZlIHJvb20gb25cXG4tLVxcbmxpYi9ubGF0dHIuYy05MjktICovXFxubGliL25sYXR0ci5jOjkzMDpzdHJ1Y3QgbmxhdHRyICpfX25sYV9yZXNlcnZlXzY0Yml0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSxcXG5saWIvbmxhdHRyLmMtOTMxLVxcdFxcdFxcdFxcdCAgIGludCBhdHRybGVuLCBpbnQgcGFkYXR0cilcXG4tLVxcbmxpYi9ubGF0dHIuYy05MzQtXFxubGliL25sYXR0ci5jOjkzNTpcXHRyZXR1cm4gX19ubGFfcmVzZXJ2ZShza2IsIGF0dHJ0eXBlLCBhdHRybGVuKTtcXG5saWIvbmxhdHRyLmMtOTM2LX1cXG5saWIvbmxhdHRyLmM6OTM3OkVYUE9SVF9TWU1CT0woX19ubGFfcmVzZXJ2ZV82NGJpdCk7XFxubGliL25sYXR0ci5jLTkzOC1cXG5saWIvbmxhdHRyLmMtOTM5LS8qKlxcbmxpYi9ubGF0dHIuYzo5NDA6ICogX19ubGFfcmVzZXJ2ZV9ub2hkciAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyXFxubGliL25sYXR0ci5jLTk0MS0gKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIHJlc2VydmUgcm9vbSBvblxcbi0tXFxubGliL25sYXR0ci5jLTk0OC0gKi9cXG5saWIvbmxhdHRyLmM6OTQ5OnZvaWQgKl9fbmxhX3Jlc2VydmVfbm9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4pXFxubGliL25sYXR0ci5jLTk1MC17XFxuLS1cXG5saWIvbmxhdHRyLmMtOTUyLX1cXG5saWIvbmxhdHRyLmM6OTUzOkVYUE9SVF9TWU1CT0woX19ubGFfcmVzZXJ2ZV9ub2hkcik7XFxubGliL25sYXR0ci5jLTk1NC1cXG4tLVxcbmxpYi9ubGF0dHIuYz05Njc9c3RydWN0IG5sYXR0ciAqbmxhX3Jlc2VydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbilcXG4tLVxcbmxpYi9ubGF0dHIuYy05NzEtXFxubGliL25sYXR0ci5jOjk3MjpcXHRyZXR1cm4gX19ubGFfcmVzZXJ2ZShza2IsIGF0dHJ0eXBlLCBhdHRybGVuKTtcXG5saWIvbmxhdHRyLmMtOTczLX1cXG4tLVxcbmxpYi9ubGF0dHIuYz05OTA9c3RydWN0IG5sYXR0ciAqbmxhX3Jlc2VydmVfNjRiaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbixcXG4tLVxcbmxpYi9ubGF0dHIuYy0xMDAxLVxcbmxpYi9ubGF0dHIuYzoxMDAyOlxcdHJldHVybiBfX25sYV9yZXNlcnZlXzY0Yml0KHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4sIHBhZGF0dHIpO1xcbmxpYi9ubGF0dHIuYy0xMDAzLX1cXG4tLVxcbmxpYi9ubGF0dHIuYz0xMDE2PXZvaWQgKm5sYV9yZXNlcnZlX25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuKVxcbi0tXFxubGliL25sYXR0ci5jLTEwMjAtXFxubGliL25sYXR0ci5jOjEwMjE6XFx0cmV0dXJuIF9fbmxhX3Jlc2VydmVfbm9oZHIoc2tiLCBhdHRybGVuKTtcXG5saWIvbmxhdHRyLmMtMTAyMi19XFxuLS1cXG5saWIvbmxhdHRyLmM9MTAzNT12b2lkIF9fbmxhX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLFxcbi0tXFxubGliL25sYXR0ci5jLTEwMzktXFxubGliL25sYXR0ci5jOjEwNDA6XFx0bmxhID0gX19ubGFfcmVzZXJ2ZShza2IsIGF0dHJ0eXBlLCBhdHRybGVuKTtcXG5saWIvbmxhdHRyLmMtMTA0MS1cXHRtZW1jcHkobmxhX2RhdGEobmxhKSwgZGF0YSwgYXR0cmxlbik7XFxuLS1cXG5saWIvbmxhdHRyLmM9MTA1Nj12b2lkIF9fbmxhX3B1dF82NGJpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLFxcbi0tXFxubGliL25sYXR0ci5jLTEwNjAtXFxubGliL25sYXR0ci5jOjEwNjE6XFx0bmxhID0gX19ubGFfcmVzZXJ2ZV82NGJpdChza2IsIGF0dHJ0eXBlLCBhdHRybGVuLCBwYWRhdHRyKTtcXG5saWIvbmxhdHRyLmMtMTA2Mi1cXHRtZW1jcHkobmxhX2RhdGEobmxhKSwgZGF0YSwgYXR0cmxlbik7XFxuLS1cXG5saWIvbmxhdHRyLmM9MTA3NT12b2lkIF9fbmxhX3B1dF9ub2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cmxlbiwgY29uc3Qgdm9pZCAqZGF0YSlcXG4tLVxcbmxpYi9ubGF0dHIuYy0xMDc4LVxcbmxpYi9ubGF0dHIuYzoxMDc5OlxcdHN0YXJ0ID0gX19ubGFfcmVzZXJ2ZV9ub2hkcihza2IsIGF0dHJsZW4pO1xcbmxpYi9ubGF0dHIuYy0xMDgwLVxcdG1lbWNweShzdGFydCwgZGF0YSwgYXR0cmxlbik7XFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz0yMTY9c3RhdGljIHZvaWQgdHJhY2VfZHJvcF9jb21tb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqbG9jYXRpb24pXFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0yNTAtXFx0ICovXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MjUxOlxcdF9fbmxhX3Jlc2VydmVfbm9oZHIoZHNrYiwgc2l6ZW9mKHN0cnVjdCBuZXRfZG1fZHJvcF9wb2ludCkpO1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTI1Mi1cXHRubGEtXFx1MDAzZW5sYV9sZW4gKz0gTkxBX0FMSUdOKHNpemVvZihzdHJ1Y3QgbmV0X2RtX2Ryb3BfcG9pbnQpKTtcXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTYxMT1zdGF0aWMgaW50IG5ldF9kbV9wYWNrZXRfcmVwb3J0X2ZpbGwoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTY3My1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo2NzQ6XFx0YXR0ciA9IF9fbmxhX3Jlc2VydmUobXNnLCBORVRfRE1fQVRUUl9QQVlMT0FELCBwYXlsb2FkX2xlbik7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtNjc1LVxcdGlmIChza2JfY29weV9iaXRzKHNrYiwgMCwgbmxhX2RhdGEoYXR0ciksIHBheWxvYWRfbGVuKSlcXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTc3OD1zdGF0aWMgaW50IG5ldF9kbV9od19wYWNrZXRfcmVwb3J0X2ZpbGwoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTgzMS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo4MzI6XFx0YXR0ciA9IF9fbmxhX3Jlc2VydmUobXNnLCBORVRfRE1fQVRUUl9QQVlMT0FELCBwYXlsb2FkX2xlbik7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtODMzLVxcdGlmIChza2JfY29weV9iaXRzKHNrYiwgMCwgbmxhX2RhdGEoYXR0ciksIHBheWxvYWRfbGVuKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA1PW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODE3LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6ODE4OlxcdG5sYSA9IF9fbmxhX3Jlc2VydmUoc2tiLCBORlFBX1BBQ0tFVF9IRFIsIHNpemVvZigqcG1zZykpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODE5LVxcdHBtc2cgPSBubGFfZGF0YShubGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNToxMTo0Ni4wMzEwMDI2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMjQwNDI2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgbGFpZCBvdXQsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGBfX25sYV9yZXNlcnZlYCBpbiBgbGliL25sYXR0ci5jYCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBfX25sYV9yZXNlcnZlYCBhbmQgd2hlcmUgaXQgbGl2ZXMg4oCTIGxldCdzIGNoZWNrIGl0IG91dCBkaXJlY3RseSBpbiBgbGliL25sYXR0ci5jYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbG93LWxldmVsIE5ldGxpbmsgYXR0cmlidXRlIGhhbmRsaW5nIGNvZGUuIEhvcGVmdWxseSwgdW5kZXJzdGFuZGluZyBpdHMgaW1wbGVtZW50YXRpb24gYW5kIHVzYWdlIHRoZXJlIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgbWVtb3J5IGFsbG9jYXRpb24sIGVycm9yIGhhbmRsaW5nLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQncyBzZWUgd2hhdCB0aGUgc291cmNlIGNvZGUgcmV2ZWFscyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNToxMTo1My4xNTUwNDgzMDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9ubGF0dHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4OTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4OTA6XFx0LyoqXFxuIDg5MTpcXHQgKiBfX25sYV9yZXNlcnZlIC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgb24gdGhlIHNrYlxcbiA4OTI6XFx0ICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byByZXNlcnZlIHJvb20gb25cXG4gODkzOlxcdCAqIEBhdHRydHlwZTogYXR0cmlidXRlIHR5cGVcXG4gODk0OlxcdCAqIEBhdHRybGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHBheWxvYWRcXG4gODk1OlxcdCAqXFxuIDg5NjpcXHQgKiBBZGRzIGEgbmV0bGluayBhdHRyaWJ1dGUgaGVhZGVyIHRvIGEgc29ja2V0IGJ1ZmZlciBhbmQgcmVzZXJ2ZXNcXG4gODk3OlxcdCAqIHJvb20gZm9yIHRoZSBwYXlsb2FkIGJ1dCBkb2VzIG5vdCBjb3B5IGl0LlxcbiA4OTg6XFx0ICpcXG4gODk5OlxcdCAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gZW5zdXJlIHRoYXQgdGhlIHNrYiBwcm92aWRlcyBlbm91Z2hcXG4gOTAwOlxcdCAqIHRhaWxyb29tIGZvciB0aGUgYXR0cmlidXRlIGhlYWRlciBhbmQgcGF5bG9hZC5cXG4gOTAxOlxcdCAqL1xcbiA5MDI6XFx0c3RydWN0IG5sYXR0ciAqX19ubGFfcmVzZXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuKVxcbiA5MDM6XFx0e1xcbiA5MDQ6XFx0XFx0c3RydWN0IG5sYXR0ciAqbmxhO1xcbiA5MDU6XFx0XFxuIDkwNjpcXHRcXHRubGEgPSBza2JfcHV0KHNrYiwgbmxhX3RvdGFsX3NpemUoYXR0cmxlbikpO1xcbiA5MDc6XFx0XFx0bmxhLVxcdTAwM2VubGFfdHlwZSA9IGF0dHJ0eXBlO1xcbiA5MDg6XFx0XFx0bmxhLVxcdTAwM2VubGFfbGVuID0gbmxhX2F0dHJfc2l6ZShhdHRybGVuKTtcXG4gOTA5OlxcdFxcbiA5MTA6XFx0XFx0bWVtc2V0KCh1bnNpZ25lZCBjaGFyICopIG5sYSArIG5sYS1cXHUwMDNlbmxhX2xlbiwgMCwgbmxhX3BhZGxlbihhdHRybGVuKSk7XFxuIDkxMTpcXHRcXG4gOTEyOlxcdFxcdHJldHVybiBubGE7XFxuIDkxMzpcXHR9XFxuIDkxNDpcXHRFWFBPUlRfU1lNQk9MKF9fbmxhX3Jlc2VydmUpO1xcbiA5MTU6XFx0XFxuIDkxNjpcXHQvKipcXG4gOTE3OlxcdCAqIF9fbmxhX3Jlc2VydmVfNjRiaXQgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBvbiB0aGUgc2tiIGFuZCBhbGlnbiBpdFxcbiA5MTg6XFx0ICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byByZXNlcnZlIHJvb20gb25cXG4gOTE5OlxcdCAqIEBhdHRydHlwZTogYXR0cmlidXRlIHR5cGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MTE6NTMuMTU1MTYzNzg1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1OTkwODY1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN0cmluZyBIYW5kbGluZyBpbiBUSVBDIEJlYXJlciBOYW1lcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgc3RyaW5nIGNvcGllcywgc3BlY2lmaWNhbGx5IHdpdGggYmVhcmVyIG5hbWVzLiBJdCBsb29rcyBsaWtlIGBfX25sYV9yZXNlcnZlYCBpcyB1c2VkIHRvIHBhZCBhbiBhdHRyaWJ1dGUgd2l0aCB6ZXJvZXMgYWZ0ZXIgcmVzZXJ2aW5nIHNwYWNlLiBUaGVuLCBgbmxhX3B1dF9zdHJpbmdgIGlzIGNhbGxlZCwgd2hpY2ggaGFuZGxlcyBjb3B5aW5nIHN0cmluZ3MsIGFuZCBpdCdzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQncyBvbmx5IGNvcHlpbmcgYHN0cmxlbihzdHIpICsgMWAgYnl0ZXMuIExldCBtZSB0cmFjZSB0aGlzIGJhY2suLi4gYG5sYV9wdXRfc3RyaW5nYCB1c2VzIGBubGFfcHV0YCwgd2hpY2ggcmVzZXJ2ZXMgc3BhY2UgdXNpbmcgYF9fbmxhX3Jlc2VydmVgIChwYWRkaW5nIHdpdGggemVyb2VzIGFzIHdlIGp1c3QgZXN0YWJsaXNoZWQpLCBhbmQgKnRoZW4qIGNvcGllcyB0aGUgZGF0YSB1c2luZyBgbWVtY3B5YC4gIFNvLCBpdCBzZWVtcyB0aGF0IGBubGFfcHV0X3N0cmluZ2AgY29waWVzIGV4YWN0bHkgYHN0cmxlbihzdHIpICsgMWAgYnl0ZXMgZnJvbSB0aGUgc291cmNlIHN0cmluZy5cblxuQWgsIEkgbmVlZCB0byBjaGVjayB3aGF0IGhhcHBlbnMgd2l0aCB0aGUgc291cmNlIHN0cmluZyBub3cuIFRoZSBjb2RlIGlzIHVzaW5nIGBzdHJzY3B5YCwgYW5kIHRoZSBlYXJsaWVyIHZlcnNpb24gdXNlZCBgc3RyY3B5YCB3aGljaCwgb2YgY291cnNlLCBpcyBkYW5nZXJvdXMgd2l0aG91dCBleHBsaWNpdCBsZW5ndGggY2hlY2tzLiBTbyBgc3Ryc2NweWAgaXMgYW4gaW1wcm92ZW1lbnQuIE15IGNvbmNlcm4gbm93IGlzIHdoYXQgaGFwcGVucyBpZiBgc3Ryc2NweWAgZmFpbHM/IEl0IGxvb2tzIGxpa2UgaXQgcmV0dXJucyBgLUUyQklHYCBpZiB0aGUgc3RyaW5nIGlzIHRvbyBsb25nLCBidXQgKnN0aWxsKiBudWxsLXRlcm1pbmF0ZXMgdGhlIHN0cmluZywgdW5sZXNzIHRoZSBzaXplIGlzIDAuXG5cbk5vdywgbGV0J3MgY29tcGFyZSB0aGUgY2hhbmdlLiBUaGUgb2xkIGNvZGUgd2FzIGEgc2ltcGxlIGBzdHJjcHlgLCBidXQgbm93IGl0J3MgYHN0cnNjcHlgIHdpdGggYSBzaXplIGxpbWl0LCBgVElQQ19NQVhfQkVBUkVSX05BTUVgLiBPa2F5LCBzbyBpZiB0aGUgc291cmNlIHN0cmluZyAoYGItXHUwMDNlbmFtZWApIGlzIGV4YWN0bHkgYFRJUENfTUFYX0JFQVJFUl9OQU1FYCBieXRlcyBsb25nLCAqd2l0aG91dCogYSBudWxsIHRlcm1pbmF0b3IsIGBzdHJzY3B5YCB3aWxsIGNvcHkgYFRJUENfTUFYX0JFQVJFUl9OQU1FIC0gMWAgYnl0ZXMgYW5kIGFkZCBhIG51bGwgdGVybWluYXRvci4gVGhhdCBtZWFucyB0aGVyZSdzIGFsd2F5cyBhIG51bGwgdGVybWluYXRvciEgR29vZCwgdGhhdCdzIGNydWNpYWwuICBBbmQsIG9oLCByaWdodCAtIGBiLVx1MDAzZW5hbWVgIGlzIGFuIGFycmF5IG9mIHNpemUgYFRJUENfTUFYX0JFQVJFUl9OQU1FYCwgd2hpY2ggaXMgMzIgYnl0ZXMuLi4gSSB3aWxsIGRvdWJsZS1jaGVjayBgc3RydWN0IHRpcGNfYmVhcmVyYCBzdHJ1Y3R1cmUgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZywgYnV0IHRoaXMgbG9va3MgcHJldHR5IHNvbGlkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI3NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEyOjAxLjc1NDI1NDYzNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwOTcxNzg4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGlwY19iZWFyZXIgXFxcXHtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYmVhcmVyLmg9MTA0PXN0cnVjdCB0aXBjX21lZGlhIHtcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5oLTE1Ni0gKi9cXG5uZXQvdGlwYy9iZWFyZXIuaDoxNTc6c3RydWN0IHRpcGNfYmVhcmVyIHtcXG5uZXQvdGlwYy9iZWFyZXIuaC0xNTgtXFx0dm9pZCBfX3JjdSAqbWVkaWFfcHRyO1xcdFxcdFxcdC8qIGluaXRpYWxpemVkIGJ5IG1lZGlhICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEyOjA0LjE2Mzk4MjM2NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzEzNDQ1NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVElQQyBCZWFyZXIgU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBsZXQncyByZWZyZXNoIG91ciBtZW1vcnkgb24gdGhlIGBzdHJ1Y3QgdGlwY19iZWFyZXJgIGRlZmluaXRpb24uIFRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L3RpcGMvYmVhcmVyLmhgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhbmQgaG93IGl0IHNlcnZlcyBhcyB0aGUgY29yZSByZXByZXNlbnRhdGlvbiBmb3IgVElQQyBiZWFyZXJzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBmaWVsZHMgcmVsYXRlZCB0byB2YXJpb3VzIHVuZGVybHlpbmcgbmV0d29yayB0cmFuc3BvcnRzIGFuZCB1bmRlcnN0YW5kIHRoZSByb2xlIHRoaXMgc3RydWN0IHBsYXlzIGluIG1hbmFnaW5nIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGNvbm5lY3Rpb25zLiBJ4oCZbSBob3BpbmcgdG8gYXNzZXNzIHdoZXRoZXIgaXQgcHJvcGVybHkgYWRkcmVzc2VzIG1vZGVybiBuZXR3b3JraW5nIG5lZWRzIOKAkyBpcyBpdCBzdGlsbCByb2J1c3QsIHNjYWxhYmxlLCBhbmQgZWZmaWNpZW50PyBJcyB0aGVyZSBhbnl0aGluZyBoZXJlIHRoYXQgY291bGQgYmVjb21lIGEgYm90dGxlbmVjayBvciBhIHBvdGVudGlhbCBzb3VyY2Ugb2YgY29tcGxleGl0eSBhcyB3ZSBjb25zaWRlciBmdXR1cmUgZW5oYW5jZW1lbnRzPyBMZXQncyBnZXQgdG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM1MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEyOjA4Ljg3NzQzMTY5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL2JlYXJlci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1MDpcXHQgKiBAdXA6IGJlYXJlciB1cCBmbGFnIChiaXQgMClcXG4gMTUxOlxcdCAqIEByZWZjbnQ6IHRpcGNfYmVhcmVyIHJlZmVyZW5jZSBjb3VudGVyXFxuIDE1MjpcXHQgKlxcbiAxNTM6XFx0ICogTm90ZTogbWVkaWEtc3BlY2lmaWMgY29kZSBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZpZWxkc1xcbiAxNTQ6XFx0ICogaW5kaWNhdGVkIGJlbG93IHdoZW4gYSBiZWFyZXIgaXMgZW5hYmxlZDsgVElQQydzIGdlbmVyaWMgYmVhcmVyIGNvZGUgdGFrZXNcXG4gMTU1OlxcdCAqIGNhcmUgb2YgaW5pdGlhbGl6aW5nIGFsbCBvdGhlciBmaWVsZHMuXFxuIDE1NjpcXHQgKi9cXG4gMTU3OlxcdHN0cnVjdCB0aXBjX2JlYXJlciB7XFxuIDE1ODpcXHRcXHR2b2lkIF9fcmN1ICptZWRpYV9wdHI7XFx0XFx0XFx0LyogaW5pdGlhbGl6ZWQgYnkgbWVkaWEgKi9cXG4gMTU5OlxcdFxcdHUzMiBtdHU7XFx0XFx0XFx0XFx0LyogaW5pdGlhbGl6ZWQgYnkgbWVkaWEgKi9cXG4gMTYwOlxcdFxcdHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgYWRkcjtcXHRcXHQvKiBpbml0aWFsaXplZCBieSBtZWRpYSAqL1xcbiAxNjE6XFx0XFx0Y2hhciBuYW1lW1RJUENfTUFYX0JFQVJFUl9OQU1FXTtcXG4gMTYyOlxcdFxcdHN0cnVjdCB0aXBjX21lZGlhICptZWRpYTtcXG4gMTYzOlxcdFxcdHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgYmNhc3RfYWRkcjtcXG4gMTY0OlxcdFxcdHN0cnVjdCBwYWNrZXRfdHlwZSBwdDtcXG4gMTY1OlxcdFxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuIDE2NjpcXHRcXHR1MzIgcHJpb3JpdHk7XFxuIDE2NzpcXHRcXHR1MzIgbWluX3dpbjtcXG4gMTY4OlxcdFxcdHUzMiBtYXhfd2luO1xcbiAxNjk6XFx0XFx0dTMyIHRvbGVyYW5jZTtcXG4gMTcwOlxcdFxcdHUzMiBkb21haW47XFxuIDE3MTpcXHRcXHR1MzIgaWRlbnRpdHk7XFxuIDE3MjpcXHRcXHRzdHJ1Y3QgdGlwY19kaXNjb3ZlcmVyICpkaXNjO1xcbiAxNzM6XFx0XFx0Y2hhciBuZXRfcGxhbmU7XFxuIDE3NDpcXHRcXHR1MTYgZW5jYXBfaGxlbjtcXG4gMTc1OlxcdFxcdHVuc2lnbmVkIGxvbmcgdXA7XFxuIDE3NjpcXHRcXHRyZWZjb3VudF90IHJlZmNudDtcXG4gMTc3OlxcdH07XFxuIDE3ODpcXHRcXG4gMTc5OlxcdHN0cnVjdCB0aXBjX2JlYXJlcl9uYW1lcyB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEyOjA4Ljg3NzUyNDU5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDE5MDI2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgaW4gYG5hbWVgIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbmFtZWAgdmFyaWFibGU6IGBjaGFyIG5hbWVbVElQQ19NQVhfQkVBUkVSX05BTUVdO2AuIFJpZ2h0IGF3YXksIEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlLiBJZiB0aGUgaW5wdXQgYGItXHUwMDNlbmFtZWAgaXNuJ3QgcHJvcGVybHkgbnVsbC10ZXJtaW5hdGVkLCB0aGF0IGBzdHJjcHkobmFtZSwgYi1cdTAwM2VuYW1lKWAgY291bGQgdmVyeSBlYXNpbHkgbGVhZCB0byBhIHJlYWQgYW5kIHdyaXRlIGJ1ZmZlciBvdmVyZmxvdy4gVGhhdCdzIGEgY2xhc3NpYyB2dWxuZXJhYmlsaXR5LCBhbmQgSSBuZWVkIHRvIGJlIHN1cmUgaXQncyBub3QgcHJlc2VudCBoZXJlLlxuXG5CdXQgaG9sZCBvbiwgd2hlcmUgKmRvZXMqIGBiLVx1MDAzZW5hbWVgIGdldCBwb3B1bGF0ZWQ/IEFoLCBpdCdzIGluIGB0aXBjX2VuYWJsZV9iZWFyZXJgLiBPa2F5LCB0aGF0J3MgdGhlIG5leHQgcGxhY2UgdG8gaW52ZXN0aWdhdGUuIEkgbmVlZCB0byBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgdHJhY2UgdGhlIHBhdGggd2hlcmUgYGItXHUwMDNlbmFtZWAgaXMgYXNzaWduZWQuIFRoZSBrZXkgaXMgZ29pbmcgdG8gYmUgZGV0ZXJtaW5pbmcgaWYgdGhlcmUncyBhbnkgc2FmZWd1YXJkIHRoZXJlIGFnYWluc3Qgbm9uLW51bGwtdGVybWluYXRlZCBzdHJpbmdzIG9yIGV4Y2Vzc2l2ZSBsZW5ndGggaW4gdGhlIGlucHV0IGRhdGEuIFRoaXMgaXMgbG9va2luZyBsaWtlIGEgcG90ZW50aWFsIHByb2JsZW0gYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNDcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEyOjEyLjc3OTQzMDIxMloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2NzM5MTc5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX2VuYWJsZV9iZWFyZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYmVhcmVyLmM9MjI3PXZvaWQgdGlwY19iZWFyZXJfcmVtb3ZlX2Rlc3Qoc3RydWN0IG5ldCAqbmV0LCB1MzIgYmVhcmVyX2lkLCB1MzIgZGVzdClcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5jLTIzOC0vKipcXG5uZXQvdGlwYy9iZWFyZXIuYzoyMzk6ICogdGlwY19lbmFibGVfYmVhcmVyIC0gZW5hYmxlIGJlYXJlciB3aXRoIHRoZSBnaXZlbiBuYW1lXFxubmV0L3RpcGMvYmVhcmVyLmMtMjQwLSAqIEBuZXQ6IHRoZSBhcHBsaWNhYmxlIG5ldCBuYW1lc3BhY2VcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5jLTI0Ni0gKi9cXG5uZXQvdGlwYy9iZWFyZXIuYzoyNDc6c3RhdGljIGludCB0aXBjX2VuYWJsZV9iZWFyZXIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxcbm5ldC90aXBjL2JlYXJlci5jLTI0OC1cXHRcXHRcXHQgICAgICB1MzIgZGlzY19kb21haW4sIHUzMiBwcmlvLFxcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmM9MTAwOD1pbnQgX190aXBjX25sX2JlYXJlcl9lbmFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5jLTEwNDctXFxubmV0L3RpcGMvYmVhcmVyLmM6MTA0ODpcXHRyZXR1cm4gdGlwY19lbmFibGVfYmVhcmVyKG5ldCwgYmVhcmVyLCBkb21haW4sIHByaW8sIGF0dHJzLFxcbm5ldC90aXBjL2JlYXJlci5jLTEwNDktXFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2VleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNToxMjoxNC43NDY4Mjg5ODdaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA5ODI2MDYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipDaGVja2luZyBgdGlwY19lbmFibGVfYmVhcmVyYCBpbiBgbmV0L3RpcGMvYmVhcmVyLmNgKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBiZWFyZXIgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGJlYXJlciBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbiBpcyBoYW5kbGVkLiBUaGUgZnVuY3Rpb24gYHRpcGNfZW5hYmxlX2JlYXJlcmAgaW4gYG5ldC90aXBjL2JlYXJlci5jYCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJIHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBob2xkcyB0aGUgY29yZSBsb2dpYyBmb3IgZW5hYmxpbmcgYSBwYXJ0aWN1bGFyIHRyYW5zcG9ydCBiZWFyZXIsIHdoYXRldmVyIHRoYXQgbWF5IGJlLiBMZXQncyBzZWUgd2hhdCBraW5kIG9mIGNoZWNrcyBpdCBwZXJmb3Jtcywgd2hpY2ggZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBUSVBDIG5ldHdvcmtpbmcgc3RhY2suIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIG9uIGxpbmsgZXN0YWJsaXNobWVudCwgcm91dGUgY29uZmlndXJhdGlvbiwgcGVyaGFwcyBldmVuIHNvbWUgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBiZWFyZXIgYXZhaWxhYmlsaXR5IG9yIHJlc291cmNlIGFsbG9jYXRpb24uIFRoZSBuYW1pbmcgc3VnZ2VzdHMgaXQncyB0aGUga2V5IGZ1bmN0aW9uIEknbSBhZnRlciwgYnV0IEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgaXQgZml0cyB0aGUgYnJvYWRlciBjb250ZXh0IGFzIEkgZGlnIGRlZXBlci4gVGhpcyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIGJlYXJlciBsaWZlY3ljbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjgxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MTI6MTkuODQ1MDkyNTY1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL2JlYXJlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0NzpcXHRzdGF0aWMgaW50IHRpcGNfZW5hYmxlX2JlYXJlcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXFxuIDI0ODpcXHRcXHRcXHRcXHQgICAgICB1MzIgZGlzY19kb21haW4sIHUzMiBwcmlvLFxcbiAyNDk6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5sYXR0ciAqYXR0cltdLFxcbiAyNTA6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiAyNTE6XFx0e1xcbiAyNTI6XFx0XFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XFxuIDI1MzpcXHRcXHRzdHJ1Y3QgdGlwY19iZWFyZXJfbmFtZXMgYl9uYW1lcztcXG4gMjU0OlxcdFxcdGludCB3aXRoX3RoaXNfcHJpbyA9IDE7XFxuIDI1NTpcXHRcXHRzdHJ1Y3QgdGlwY19iZWFyZXIgKmI7XFxuIDI1NjpcXHRcXHRzdHJ1Y3QgdGlwY19tZWRpYSAqbTtcXG4gMjU3OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDI1ODpcXHRcXHRpbnQgYmVhcmVyX2lkID0gMDtcXG4gMjU5OlxcdFxcdGludCByZXMgPSAtRUlOVkFMO1xcbiAyNjA6XFx0XFx0Y2hhciAqZXJyc3RyID0gXFxcIlxcXCI7XFxuIDI2MTpcXHRcXHR1MzIgaTtcXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0aWYgKCFiZWFyZXJfbmFtZV92YWxpZGF0ZShuYW1lLCBcXHUwMDI2Yl9uYW1lcykpIHtcXG4gMjY0OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIklsbGVnYWwgbmFtZVxcXCIpO1xcbiAyNjU6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gMjY2OlxcdFxcdH1cXG4gMjY3OlxcdFxcbiAyNjg6XFx0XFx0aWYgKHByaW8gXFx1MDAzZSBUSVBDX01BWF9MSU5LX1BSSSBcXHUwMDI2XFx1MDAyNiBwcmlvICE9IFRJUENfTUVESUFfTElOS19QUkkpIHtcXG4gMjY5OlxcdFxcdFxcdGVycnN0ciA9IFxcXCJpbGxlZ2FsIHByaW9yaXR5XFxcIjtcXG4gMjcwOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIklsbGVnYWwgcHJpb3JpdHlcXFwiKTtcXG4gMjcxOlxcdFxcdFxcdGdvdG8gcmVqZWN0ZWQ7XFxuIDI3MjpcXHRcXHR9XFxuIDI3MzpcXHRcXG4gMjc0OlxcdFxcdG0gPSB0aXBjX21lZGlhX2ZpbmQoYl9uYW1lcy5tZWRpYV9uYW1lKTtcXG4gMjc1OlxcdFxcdGlmICghbSkge1xcbiAyNzY6XFx0XFx0XFx0ZXJyc3RyID0gXFxcIm1lZGlhIG5vdCByZWdpc3RlcmVkXFxcIjtcXG4gMjc3OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIk1lZGlhIG5vdCByZWdpc3RlcmVkXFxcIik7XFxuIDI3ODpcXHRcXHRcXHRnb3RvIHJlamVjdGVkO1xcbiAyNzk6XFx0XFx0fVxcbiAyODA6XFx0XFxuIDI4MTpcXHRcXHRpZiAocHJpbyA9PSBUSVBDX01FRElBX0xJTktfUFJJKVxcbiAyODI6XFx0XFx0XFx0cHJpbyA9IG0tXFx1MDAzZXByaW9yaXR5O1xcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHQvKiBDaGVjayBuZXcgYmVhcmVyIHZzIGV4aXN0aW5nIG9uZXMgYW5kIGZpbmQgZnJlZSBiZWFyZXIgaWQgaWYgYW55ICovXFxuIDI4NTpcXHRcXHRiZWFyZXJfaWQgPSBNQVhfQkVBUkVSUztcXG4gMjg2OlxcdFxcdGkgPSBNQVhfQkVBUkVSUztcXG4gMjg3OlxcdFxcdHdoaWxlIChpLS0gIT0gMCkge1xcbiAyODg6XFx0XFx0XFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UodG4tXFx1MDAzZWJlYXJlcl9saXN0W2ldKTtcXG4gMjg5OlxcdFxcdFxcdGlmICghYikge1xcbiAyOTA6XFx0XFx0XFx0XFx0YmVhcmVyX2lkID0gaTtcXG4gMjkxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAyOTI6XFx0XFx0XFx0fVxcbiAyOTM6XFx0XFx0XFx0aWYgKCFzdHJjbXAobmFtZSwgYi1cXHUwMDNlbmFtZSkpIHtcXG4gMjk0OlxcdFxcdFxcdFxcdGVycnN0ciA9IFxcXCJhbHJlYWR5IGVuYWJsZWRcXFwiO1xcbiAyOTU6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQWxyZWFkeSBlbmFibGVkXFxcIik7XFxuIDI5NjpcXHRcXHRcXHRcXHRnb3RvIHJlamVjdGVkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNToxMjoxOS44NDUxOTI3NjVaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM2NjA5MDgzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKlRyYWNpbmcgdGhlIERhdGEgRmxvdyBvZiBgYi1cdTAwM2VuYW1lYCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGItXHUwMDNlbmFtZWAgZmllbGQgaXMgZ2V0dGluZyBpdHMgdmFsdWUuIFRoaXMgaXMgYSBjb21tb24gZGVidWdnaW5nIHN0ZXAsIGVzcGVjaWFsbHkgd2hlbiB5b3UncmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgb3IgaW5jb3JyZWN0IGRhdGEuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hhdCBpcyBgYmA/IElzIGl0IGEgcG9pbnRlciB0byBhIHN0cnVjdCwgYSBjbGFzcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgdHlwZSBpcyB0aGUgYG5hbWVgIG1lbWJlcj8gVGhlIG1vcmUgSSB1bmRlcnN0YW5kIGFib3V0IHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgYmV0dGVyIEkgY2FuIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBkYXRhIGlzIGNvbWluZyBmcm9tLlxuXG5HaXZlbiB0aGF0IEkgYWxyZWFkeSBrbm93IHRoZSBjb250ZXh0LCB0aGUgYXBwcm9hY2ggaXMgY2xlYXI6IEkgbmVlZCB0byBkbyBhIGNvZGUgc2VhcmNoLiBJJ2xsIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBgYmAgdmFyaWFibGUsIG9yIGluc3RhbmNlcyBvZiB0aGUgdHlwZSBgYmAgYmVsb25ncyB0bywgaXMgZGVjbGFyZWQgb3IgaW5zdGFudGlhdGVkLiBJJ2xsIGZvbGxvdyB0aGF0IGluc3RhbnRpYXRpb24gcG9pbnQgdG8gd2hlcmUgaXQgZ2V0cyBhc3NpZ25lZCB0by4gVGhlbiwgSSB3aWxsIHRyYWNlIHRoaXMgcG9pbnRlciB0aHJvdWdoIHRoZSBjb2RlIHRvIGlkZW50aWZ5IGV2ZXJ5IHBsYWNlIHdoZXJlIHRoZSBgbmFtZWAgbWVtYmVyIG1pZ2h0IGJlIGdldHRpbmcgbW9kaWZpZWQsIGluY2x1ZGluZyBhbnkgY29uc3RydWN0b3JzIG9yIG90aGVyIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucy4gSSB3aWxsIGFsc28gYmUgbWluZGZ1bCBvZiBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLCBlc3BlY2lhbGx5IGlmIGBiYCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQuIEkgd2lsbCBsb29rIGZvciBhbnkgYXNzaWdubWVudHMgb3IgZnVuY3Rpb24gY2FsbHMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBhZmZlY3QgdGhhdCBmaWVsZC4gRXNzZW50aWFsbHksIEknbSBwZXJmb3JtaW5nIGEgZm9yd2FyZCBhbmFseXNpcyDigJMgc3RhcnRpbmcgYXQgdGhlIGRlZmluaXRpb24gb2YgYGJgIGFuZCBmb2xsb3dpbmcgaXRzIGxpZmUgdGhyb3VnaCB0aGUgY29kZSB0byB3aGVyZSBgYi1cdTAwM2VuYW1lYCBpcyBwb3B1bGF0ZWQuIElmIHRoZSBjb2RlYmFzZSBpcyBsYXJnZSwgSSBtaWdodCBuZWVkIHRvIG5hcnJvdyBteSBzZWFyY2ggZG93biBieSBsb29raW5nIGZvciByZWxhdGVkIGZ1bmN0aW9ucywgbW9kdWxlcywgb3IgZmlsZSBuYW1lcy4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIHBhdHRlcm5zIGxpa2UgXCJiLVx1MDAzZW5hbWUgPVwiIG9yIGV2ZW4gY2FsbHMgdG8gcG90ZW50aWFsbHkgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgc2V0X25hbWUoYiwgLi4uKWAgb3IgZXZlbiBpbmRpcmVjdCBpbml0aWFsaXNhdGlvbiB0aHJvdWdoIHBvaW50ZXJzIG9yIGZ1bmN0aW9uIGNhbGxzLiBNeSBnb2FsIGlzIHRvIGV4aGF1c3RpdmVseSB0cmFjZSB0aGUgcG9zc2libGUgcGF0aHMgb2YgZGF0YSBmbG93IHRvIGlkZW50aWZ5IHRoZSBzaW5nbGUgc291cmNlIG9yIG11bHRpcGxlIHNvdXJjZXMgb2YgdGhhdCBmaWVsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEyOjMzLjUwNjEwNTMyNFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3RpcGMvYmVhcmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjk3OlxcdFxcdFxcdH1cXG4gMjk4OlxcdFxcbiAyOTk6XFx0XFx0XFx0aWYgKGItXFx1MDAzZXByaW9yaXR5ID09IHByaW8gXFx1MDAyNlxcdTAwMjZcXG4gMzAwOlxcdFxcdFxcdCAgICAoKyt3aXRoX3RoaXNfcHJpbyBcXHUwMDNlIDIpKSB7XFxuIDMwMTpcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJCZWFyZXIgXFx1MDAzYyVzXFx1MDAzZTogYWxyZWFkeSAyIGJlYXJlcnMgd2l0aCBwcmlvcml0eSAldVxcXFxuXFxcIixcXG4gMzAyOlxcdFxcdFxcdFxcdFxcdG5hbWUsIHByaW8pO1xcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRcXHRcXHRpZiAocHJpbyA9PSBUSVBDX01JTl9MSU5LX1BSSSkge1xcbiAzMDU6XFx0XFx0XFx0XFx0XFx0ZXJyc3RyID0gXFxcImNhbm5vdCBhZGp1c3QgdG8gbG93ZXJcXFwiO1xcbiAzMDY6XFx0XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQ2Fubm90IGFkanVzdCB0byBsb3dlclxcXCIpO1xcbiAzMDc6XFx0XFx0XFx0XFx0XFx0Z290byByZWplY3RlZDtcXG4gMzA4OlxcdFxcdFxcdFxcdH1cXG4gMzA5OlxcdFxcbiAzMTA6XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiQmVhcmVyIFxcdTAwM2Mlc1xcdTAwM2U6IHRyeWluZyB3aXRoIGFkanVzdGVkIHByaW9yaXR5XFxcXG5cXFwiLFxcbiAzMTE6XFx0XFx0XFx0XFx0XFx0bmFtZSk7XFxuIDMxMjpcXHRcXHRcXHRcXHRwcmlvLS07XFxuIDMxMzpcXHRcXHRcXHRcXHRiZWFyZXJfaWQgPSBNQVhfQkVBUkVSUztcXG4gMzE0OlxcdFxcdFxcdFxcdGkgPSBNQVhfQkVBUkVSUztcXG4gMzE1OlxcdFxcdFxcdFxcdHdpdGhfdGhpc19wcmlvID0gMTtcXG4gMzE2OlxcdFxcdFxcdH1cXG4gMzE3OlxcdFxcdH1cXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0aWYgKGJlYXJlcl9pZCBcXHUwMDNlPSBNQVhfQkVBUkVSUykge1xcbiAzMjA6XFx0XFx0XFx0ZXJyc3RyID0gXFxcIm1heCAzIGJlYXJlcnMgcGVybWl0dGVkXFxcIjtcXG4gMzIxOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIk1heCAzIGJlYXJlcnMgcGVybWl0dGVkXFxcIik7XFxuIDMyMjpcXHRcXHRcXHRnb3RvIHJlamVjdGVkO1xcbiAzMjM6XFx0XFx0fVxcbiAzMjQ6XFx0XFxuIDMyNTpcXHRcXHRiID0ga3phbGxvY19vYmooKmIsIEdGUF9BVE9NSUMpO1xcbiAzMjY6XFx0XFx0aWYgKCFiKVxcbiAzMjc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMyODpcXHRcXG4gMzI5OlxcdFxcdHN0cnNjcHkoYi1cXHUwMDNlbmFtZSwgbmFtZSk7XFxuIDMzMDpcXHRcXHRiLVxcdTAwM2VtZWRpYSA9IG07XFxuIDMzMTpcXHRcXHRyZXMgPSBtLVxcdTAwM2VlbmFibGVfbWVkaWEobmV0LCBiLCBhdHRyKTtcXG4gMzMyOlxcdFxcdGlmIChyZXMpIHtcXG4gMzMzOlxcdFxcdFxcdGtmcmVlKGIpO1xcbiAzMzQ6XFx0XFx0XFx0ZXJyc3RyID0gXFxcImZhaWxlZCB0byBlbmFibGUgbWVkaWFcXFwiO1xcbiAzMzU6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRmFpbGVkIHRvIGVuYWJsZSBtZWRpYVxcXCIpO1xcbiAzMzY6XFx0XFx0XFx0Z290byByZWplY3RlZDtcXG4gMzM3OlxcdFxcdH1cXG4gMzM4OlxcdFxcbiAzMzk6XFx0XFx0Yi1cXHUwMDNlaWRlbnRpdHkgPSBiZWFyZXJfaWQ7XFxuIDM0MDpcXHRcXHRiLVxcdTAwM2V0b2xlcmFuY2UgPSBtLVxcdTAwM2V0b2xlcmFuY2U7XFxuIDM0MTpcXHRcXHRiLVxcdTAwM2VtaW5fd2luID0gbS1cXHUwMDNlbWluX3dpbjtcXG4gMzQyOlxcdFxcdGItXFx1MDAzZW1heF93aW4gPSBtLVxcdTAwM2VtYXhfd2luO1xcbiAzNDM6XFx0XFx0Yi1cXHUwMDNlZG9tYWluID0gZGlzY19kb21haW47XFxuIDM0NDpcXHRcXHRiLVxcdTAwM2VuZXRfcGxhbmUgPSBiZWFyZXJfaWQgKyAnQSc7XFxuIDM0NTpcXHRcXHRiLVxcdTAwM2Vwcmlvcml0eSA9IHByaW87XFxuIDM0NjpcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmItXFx1MDAzZXJlZmNudCwgMSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEyOjMzLjUwNjIxODIwNFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDQwNTczNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU3RyaW5nIENvcHlpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBgYmAgYmVpbmcgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqKCpiLCBHRlBfQVRPTUlDKTtgLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCBcIkFoYSEgVGhpcyB6ZXJvcyB0aGUgZW50aXJlIHN0cnVjdHVyZS5cIiBCdXQgdGhlbiBJIHBhdXNlLiBga3phbGxvY19vYmpgLi4uIGlzIHRoYXQgYSBtYWNybz8gSXQncyBub3Qgc3RhbmRhcmQga2VybmVsLCBzbyBJJ2xsIGNoZWNrIGl0IHF1aWNrbHkuIEl0J3MgbGlrZWx5IGEgd3JhcHBlciwgbWF5YmUganVzdCBga3phbGxvYyhzaXplb2YoKmIpLCBHRlBfQVRPTUlDKWAuIFllcCwgYWZ0ZXIgYSBxdWljayBjaGVjaywgaXQgbG9va3MgbGlrZSBpdCdzIGEgd3JhcHBlciBmb3IgYGt6YWxsb2NgLCB3aGljaCBkb2VzIGluZGVlZCB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LlxuXG5OZXh0LCBJIHNlZSBgc3Ryc2NweShiLVx1MDAzZW5hbWUsIG5hbWUpO2AgYW5kIG15IGJyYWluIGltbWVkaWF0ZWx5IGZsYWdzIHRoYXQgZm9yIGEgc3RyaW5nIGNvcHkuIEJ1dCB3YWl0IGEgc2Vjb25kLi4uIGBzdHJzY3B5YCBvbmx5IHRha2VzIHR3byBhcmd1bWVudHMgaGVyZT8gVGhhdCBkb2Vzbid0IHNlZW0gcmlnaHQuIGBzdHJzY3B5YCBzaG91bGQgdGFrZSB0aHJlZS4gSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBjYWxsIGluIGB0aXBjX2VuYWJsZV9iZWFyZXJgIGFuZCB2ZXJpZnkgdGhlIHVzYWdlLiBBaCB5ZXMsIGl0J3MgYHN0cnNjcHkoYi1cdTAwM2VuYW1lLCBuYW1lLCBUSVBDX01BWF9CRUFSRVJfTkFNRSlgLiBCZXR0ZXIgY2hlY2sgdGhlIGRlZmluaXRpb24gdG8gYmUgc3VyZS4gQWxyaWdodCwgSSd2ZSBnb3QgaXQgLSB0aGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIGJ1ZmZlciBzaXplLiBHb3QgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTA1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MTI6MzkuOTQ2Nzk0MzFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjMyNjk2NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3Ryc2NweVxcXFwoYi1cXHUwMDNlbmFtZSwgbmFtZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9iZWFyZXIuYz0yNDc9c3RhdGljIGludCB0aXBjX2VuYWJsZV9iZWFyZXIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmMtMzI4LVxcbm5ldC90aXBjL2JlYXJlci5jOjMyOTpcXHRzdHJzY3B5KGItXFx1MDAzZW5hbWUsIG5hbWUpO1xcbm5ldC90aXBjL2JlYXJlci5jLTMzMC1cXHRiLVxcdTAwM2VtZWRpYSA9IG07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEyOjQyLjM3MDA2OTMyNloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTE5ODU2NzE3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmUqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBTZWVpbmcgYHN0cnNjcHlgIHdpdGggdHdvIGFyZ3VtZW50cyBpbW1lZGlhdGVseSBmbGFncyBpdC4gUmlnaHQsIGl0J3MgYSBtYWNybyDigJMgYHN0cnNjcHkoZGVzdCwgc3JjLCAuLi4pYCDigJMgYW5kIGl0IGNhbiB3b3JrIHdpdGggdHdvIGFyZ3VtZW50cyBpZiB0aGUgZGVzdGluYXRpb24gaXMgYW4gYXJyYXkuIEknbSBmb2N1c2luZyBvbiB0aGUgYWxsb2NhdGlvbiBvZiBgYi1cdTAwM2VuYW1lYCB3aXRoIGBremFsbG9jYC4gVGhhdCB6ZXJvZXMgaXQgb3V0IGNvbXBsZXRlbHkuIFRoZW4gYHN0cnNjcHkoYi1cdTAwM2VuYW1lLCBuYW1lKWAgY29waWVzIHRoZSBzb3VyY2Ugc3RyaW5nIGFuZCBudWxsLXRlcm1pbmF0ZXMgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2l0aCB0aGUgcmVtYWluaW5nIGJ5dGVzIG9mIGBiLVx1MDAzZW5hbWVgIHJlbWFpbmluZyB6ZXJvZWQuIFNvIGBiLVx1MDAzZW5hbWVgIGVuZHMgdXAgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBib3RoIHRoZSBzdHJpbmcgYW5kIGFueSBuZWNlc3NhcnkgcGFkZGluZyB6ZXJvZXMuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBgdGlwY19iZWFyZXJfZ2V0X25hbWVgLiBJdCB1c2VzIGBzdHJzY3B5YCBhZ2FpbjogYHN0cnNjcHkobmFtZSwgYi1cdTAwM2VuYW1lLCBUSVBDX01BWF9CRUFSRVJfTkFNRSlgLiBCdXQgaGVyZSwgYG5hbWVgIGlzIGBiZWFyZXJfbmFtZWAsIGEgbG9jYWwgYGNoYXJgIGFycmF5IGluIGBfX3RpcGNfbmxfYWRkX21vbml0b3JgLiBJZiBgc3Ryc2NweWAgaXMgdXNlZCwgaXQgb25seSBjb3BpZXMgdGhlIHN0cmluZyBhbmQgbnVsbC10ZXJtaW5hdGVzIGl0LiBJdCAqZG9lc24ndCogemVybyB0aGUgcmVzdCBvZiBgYmVhcmVyX25hbWVgLiBUaGF0IG1lYW5zIHRoZSByZW1haW5pbmcgcG9ydGlvbiBvZiBgYmVhcmVyX25hbWVgIGlzIGZpbGxlZCB3aXRoIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5LlxuXG5UaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgY2FsbCB0byBgbmxhX3B1dF9zdHJpbmcobXNnLVx1MDAzZXNrYiwgVElQQ19OTEFfTU9OX0JFQVJFUl9OQU1FLCBiZWFyZXJfbmFtZSlgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBkb2VzIGBubGFfcHV0X3N0cmluZ2AgY29weSB0aGUgKndob2xlKiBgYmVhcmVyX25hbWVgIGFycmF5LCBwb3RlbnRpYWxseSBleHBvc2luZyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCB0aGF0J3Mgbm90IHdoYXQgdGhlIGNvZGUgc2hvd3MuIERpdmluZyBpbnRvIHRoZSBgbmxhX3B1dF9zdHJpbmdgIG1hY3JvLCBpdCBzaW1wbHkgdXNlcyBgc3RybGVuKHN0cikgKyAxYCBhcyB0aGUgc2l6ZSBvZiB0aGUgY29weS4gU28sIGl0IG9ubHkgY29waWVzIHRoZSBzdHJpbmcgYW5kIHRoZSBudWxsIHRlcm1pbmF0b3IuIFRoYXQncyBnb29kLlxuXG5BbmQsIGxvb2tpbmcgYXQgYF9fbmxhX3Jlc2VydmVgIGNvbmZpcm1zIHRoYXQgdGhlIGF0dHJpYnV0ZSBnZXRzIHBhZGRlZCB3aXRoIHplcm9lcy4gSSB3YXMgcmlnaHQg4oCTIHRoZSB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGBiZWFyZXJfbmFtZWAgYXJlICpuZXZlciogY29waWVkIGludG8gdGhlIHNrYiEgVGhhdCBtZWFucywgbm8sIHRoaXMgbG9va3Mgc2FmZSBmcm9tIHRoYXQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuXG5cbkJ1dCwgaXMgdGhlcmUgKmFub3RoZXIqIGNhbGxlciBvZiBgdGlwY19iZWFyZXJfZ2V0X25hbWVgIHRoYXQgbWlnaHQgYmUgdXNpbmcgdGhlIHJldHVybmVkIHN0cmluZyBkaWZmZXJlbnRseT8gVGhhdCdzIHdoYXQgSSBoYXZlIHRvIGNoZWNrIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MjksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MTI6NTMuNTY4NjM4OTc0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc5NTg5MjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfYmVhcmVyX2dldF9uYW1lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2JlYXJlci5jPTE4MT1zdHJ1Y3QgdGlwY19iZWFyZXIgKnRpcGNfYmVhcmVyX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmMtMTk0LVxcbm5ldC90aXBjL2JlYXJlci5jOjE5NTovKiAgICAgdGlwY19iZWFyZXJfZ2V0X25hbWUgLSBnZXQgdGhlIGJlYXJlciBuYW1lIGZyb20gaXRzIGlkLlxcbm5ldC90aXBjL2JlYXJlci5jLTE5Ni0gKiAgICAgQG5ldDogbmV0d29yayBuYW1lc3BhY2VcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5jLTE5OS0gKi9cXG5uZXQvdGlwYy9iZWFyZXIuYzoyMDA6aW50IHRpcGNfYmVhcmVyX2dldF9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqbmFtZSwgdTMyIGJlYXJlcl9pZClcXG5uZXQvdGlwYy9iZWFyZXIuYy0yMDEte1xcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmg9MjI4PXN0cnVjdCB0aXBjX2JlYXJlciAqdGlwY19iZWFyZXJfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbm5ldC90aXBjL2JlYXJlci5oOjIyOTppbnQgdGlwY19iZWFyZXJfZ2V0X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjaGFyICpuYW1lLCB1MzIgYmVhcmVyX2lkKTtcXG5uZXQvdGlwYy9iZWFyZXIuaC0yMzAtc3RydWN0IHRpcGNfbWVkaWEgKnRpcGNfbWVkaWFfZmluZChjb25zdCBjaGFyICpuYW1lKTtcXG4tLVxcbm5ldC90aXBjL21vbml0b3IuYz04Mjc9aW50IF9fdGlwY19ubF9hZGRfbW9uaXRvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxcbi0tXFxubmV0L3RpcGMvbW9uaXRvci5jLTgzNS1cXG5uZXQvdGlwYy9tb25pdG9yLmM6ODM2OlxcdHJldCA9IHRpcGNfYmVhcmVyX2dldF9uYW1lKG5ldCwgYmVhcmVyX25hbWUsIGJlYXJlcl9pZCk7XFxubmV0L3RpcGMvbW9uaXRvci5jLTgzNy1cXHRpZiAocmV0IHx8ICFtb24pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE1OjEyOjU1LjI0ODI0MDMxOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjcxNjI4OTcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTZWVtaW5nbHkgU2ltcGxlIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYWl0LCB3aHkgd2FzIGBzdHJjcHlgIGNoYW5nZWQgdG8gYHN0cnNjcHlgIGhlcmU/XCIgVGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgd2l0aGluIGB0aXBjX2JlYXJlcl9nZXRfbmFtZWAsIGNhbGxlZCBvbmx5IGJ5IGBfX3RpcGNfbmxfYWRkX21vbml0b3JgLiBUaGF0IGZ1bmN0aW9uIHVzZXMgYG5sYV9wdXRfc3RyaW5nYCwgd2hpY2ggb25seSBjb3BpZXMgdGhlIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGxlbmd0aCwgc28gdGhlcmUncyBubyBpbW1lZGlhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayBpc3N1ZSBpbiB0aGUgY29weSB0byBuZXRsaW5rLlxuXG5CdXQgKndoeSogdGhlIGBzdHJjcHlgIHRvIGBzdHJzY3B5YCBjaGFuZ2U/IE15IGd1dCBzYXlzIGJ1ZmZlciBvdmVyZmxvdyBwcmV2ZW50aW9uLCBjbGFzc2ljLiBgc3RyY3B5YCBpcyBkYW5nZXJvdXM7IGlmIGBiLVx1MDAzZW5hbWVgIGlzbid0IG51bGwtdGVybWluYXRlZCBvciBpcyBsb25nZXIgdGhhbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCB5b3UndmUgZ290IGEgcHJvYmxlbS4gTGV0J3Mgc2VlLi4uIGBiLVx1MDAzZW5hbWVgIGlzIGFuIGFycmF5IG9mIGBUSVBDX01BWF9CRUFSRVJfTkFNRWAgc2l6ZSwgYW5kIHRoZSBkZXN0aW5hdGlvbiBgYmVhcmVyX25hbWVgIGlzIGFsc28gYFRJUENfTUFYX0JFQVJFUl9OQU1FYC4gIEEgbm9uLW51bGwtdGVybWluYXRlZCBgYi1cdTAwM2VuYW1lYCB3b3VsZCBjYXVzZSBgc3RyY3B5YCB0byByZWFkIGFuZCB3cml0ZSBvdXQgb2YgYm91bmRzLiBCb29tLCBvdXQtb2YtYm91bmRzIHJlYWQvd3JpdGUuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhhdCEgYGJlYXJlcl9uYW1lYCBpcyBvbiB0aGUgc3RhY2ssIHdoaWNoIEtBU0FOIGhhbmRsZXMsIGFuZCBgYi1cdTAwM2VuYW1lYCBpcyBpbiBhIGhlYXAtYWxsb2NhdGVkIHN0cnVjdCwgYWxzbyBoYW5kbGVkIGJ5IEtBU0FOLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgaXMgYGItXHUwMDNlbmFtZWAgKmd1YXJhbnRlZWQqIHRvIGJlIG51bGwtdGVybWluYXRlZD8gIEFoLCB5ZXMhIFdoZW4gYGJgIGlzIGFsbG9jYXRlZCwgaXQncyB6ZXJvZWQsIGFuZCB0aGF0IGBzdHJzY3B5YCBjYWxsIGVuc3VyZXMgbnVsbCB0ZXJtaW5hdGlvbi4gU28sIHVubGVzcyBpdCdzIGxhdGVyIGNvcnJ1cHRlZCwgYGItXHUwMDNlbmFtZWAgKmlzKiBudWxsLXRlcm1pbmF0ZWQuIFNvIGBzdHJjcHlgIGlzIHNhZmUhIFdoeSB0aGUgcGF0Y2ggdGhlbj9cblxuTWF5YmUgYSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiByaXNrPyBNYXliZSB0aGlzIGlzIGp1c3QgYSBnZW5lcmFsIGNsZWFudXAgZWZmb3J0IHRvIHN0YW5kYXJkaXplIGBzdHJzY3B5YCBhY3Jvc3MgdGhlIGtlcm5lbCwgd2hpY2ggSSBoYXZlIHNlZW4gaGFwcGVuLiBJJ2QgbG92ZSB0byBzZWUgdGhlIGNvbW1pdCBtZXNzYWdlLi4uIGJ1dCwgSSBkb24ndCBoYXZlIGl0LlxuXG5Pa2F5LCBsZXQgbWUganVzdCBjaGVjayB0aGUgcGF0Y2ggYWdhaW46XG5cbmBgYGNcbi1cdHN0cmNweShuYW1lLCBiLVx1MDAzZW5hbWUpO1xuK1x0c3Ryc2NweShuYW1lLCBiLVx1MDAzZW5hbWUsIFRJUENfTUFYX0JFQVJFUl9OQU1FKTtcbmBgYFxuXG5ZZXAsIHN0YW5kYXJkIGBzdHJjcHlgIHRvIGBzdHJzY3B5YCByZXBsYWNlbWVudCwgYSBiZWx0LWFuZC1zdXNwZW5kZXJzIGtpbmQgb2YgbW92ZSB0byBwcmV2ZW50IHBvdGVudGlhbCBvdmVyZmxvd3MsIHdoaWNoIGlzbid0IHRoZSByb290IG9mIHRoZSBpc3N1ZS5cblxuRG9lcyB0aGlzIGZpeCBhbiAqdW5pbml0aWFsaXplZCogbWVtb3J5IHVzZSwgdGhlbj8gIE5vLiBJZiBhbnl0aGluZywgYHN0cnNjcHlgIGxlYXZlcyB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyIHVuaW5pdGlhbGl6ZWQsIGp1c3QgbGlrZSBgc3RyY3B5YC5cblxuTm93LCBpZiBgYi1cdTAwM2VuYW1lYCB3YXMgKm5vdCogbnVsbC10ZXJtaW5hdGVkLCBgc3RyY3B5YCB3b3VsZCByZWFkIGJleW9uZCBgYi1cdTAwM2VuYW1lYCAoT09CIHJlYWQpIGFuZCB3cml0ZSBwYXN0IGBuYW1lYCAoT09CIHdyaXRlKS4gS0FTQU4gY2F0Y2hlcyBib3RoLlxuXG5JcyB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhaz8gSWYgYGItXHUwMDNlbmFtZWAgd2Fzbid0IG51bGwtdGVybWluYXRlZCwgYHN0cmNweWAgd291bGQgY29weSB3aGF0ZXZlciBnYXJiYWdlIGRhdGEgaXMgYWZ0ZXIgYGItXHUwMDNlbmFtZWAgdW50aWwgaXQgZmluZHMgYSBudWxsIGJ5dGUsIHBvdGVudGlhbGx5IGxlYWtpbmcgbWVtb3J5IGlmIGNvcGllZCB0byB1c2Vyc3BhY2UuIEJ1dCBgbmxhX3B1dF9zdHJpbmdgIHdvdWxkIHJlYWQgdW50aWwgYSBudWxsIGJ5dGUgdG9vLCBzbyBpdCBsb29rcyBsaWtlIGl0J3MgYSB3YXNoLiBIb3dldmVyLCBpcyBgYi1cdTAwM2VuYW1lYCBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmU/IEkgbmVlZCB0byBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5OTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MTM6MTEuOTY0NTMyNDA0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGlwYy9iZWFyZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNTcsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTc6XFx0c3RydWN0IHRpcGNfYmVhcmVyIHtcXG4gMTU4OlxcdFxcdHZvaWQgX19yY3UgKm1lZGlhX3B0cjtcXHRcXHRcXHQvKiBpbml0aWFsaXplZCBieSBtZWRpYSAqL1xcbiAxNTk6XFx0XFx0dTMyIG10dTtcXHRcXHRcXHRcXHQvKiBpbml0aWFsaXplZCBieSBtZWRpYSAqL1xcbiAxNjA6XFx0XFx0c3RydWN0IHRpcGNfbWVkaWFfYWRkciBhZGRyO1xcdFxcdC8qIGluaXRpYWxpemVkIGJ5IG1lZGlhICovXFxuIDE2MTpcXHRcXHRjaGFyIG5hbWVbVElQQ19NQVhfQkVBUkVSX05BTUVdO1xcbiAxNjI6XFx0XFx0c3RydWN0IHRpcGNfbWVkaWEgKm1lZGlhO1xcbiAxNjM6XFx0XFx0c3RydWN0IHRpcGNfbWVkaWFfYWRkciBiY2FzdF9hZGRyO1xcbiAxNjQ6XFx0XFx0c3RydWN0IHBhY2tldF90eXBlIHB0O1xcbiAxNjU6XFx0XFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcXG4gMTY2OlxcdFxcdHUzMiBwcmlvcml0eTtcXG4gMTY3OlxcdFxcdHUzMiBtaW5fd2luO1xcbiAxNjg6XFx0XFx0dTMyIG1heF93aW47XFxuIDE2OTpcXHRcXHR1MzIgdG9sZXJhbmNlO1xcbiAxNzA6XFx0XFx0dTMyIGRvbWFpbjtcXG4gMTcxOlxcdFxcdHUzMiBpZGVudGl0eTtcXG4gMTcyOlxcdFxcdHN0cnVjdCB0aXBjX2Rpc2NvdmVyZXIgKmRpc2M7XFxuIDE3MzpcXHRcXHRjaGFyIG5ldF9wbGFuZTtcXG4gMTc0OlxcdFxcdHUxNiBlbmNhcF9obGVuO1xcbiAxNzU6XFx0XFx0dW5zaWduZWQgbG9uZyB1cDtcXG4gMTc2OlxcdFxcdHJlZmNvdW50X3QgcmVmY250O1xcbiAxNzc6XFx0fTtcXG4gMTc4OlxcdFxcbiAxNzk6XFx0c3RydWN0IHRpcGNfYmVhcmVyX25hbWVzIHtcXG4gMTgwOlxcdFxcdGNoYXIgbWVkaWFfbmFtZVtUSVBDX01BWF9NRURJQV9OQU1FXTtcXG4gMTgxOlxcdFxcdGNoYXIgaWZfbmFtZVtUSVBDX01BWF9JRl9OQU1FXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTU6MTM6MTEuOTY0NjcwNjY0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2ODQyNzA2NDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktBU0FOJ3MgR290IFRoaXM6IE5vIEtNU0FOIE5lZWRlZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCB0aGUgYG5hbWVgIGZpZWxkIGlzIGluIHRoZSBtaWRkbGUgb2YgdGhpcyBgc3RydWN0YC4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIHRoYXQgaWYgYGItXHUwMDNlbmFtZWAgaXNuJ3QgbnVsbC10ZXJtaW5hdGVkLCBgc3RyY3B5YCBjb3VsZCByZWFkIHBhc3QgdGhlIGVuZCBvZiBpdCwgcG90ZW50aWFsbHkgaW50byBhZGphY2VudCBtZW1vcnkgbGlrZSBgbWVkaWFgIG9yIGBiY2FzdF9hZGRyYCwgbGVhZGluZyB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gYGItXHUwMDNlbmFtZWAuIFdoaWxlIHRoYXQgT09CIHJlYWQgbWlnaHQgbm90IGltbWVkaWF0ZWx5IGNhdXNlIGFuIGlzc3VlIHdpdGhpbiB0aGUgYHRpcGNfYmVhcmVyYCBzdHJ1Y3QgaXRzZWxmIHVubGVzcyBpdCBnb2VzIHBhc3QgdGhlIGVuZCwgaXQgKmRlZmluaXRlbHkqIGJlY29tZXMgYSB3cml0ZSBwcm9ibGVtIGxhdGVyIG9uIGluIGBfX3RpcGNfbmxfYWRkX21vbml0b3JgIHdoZW4gd2UgdXNlIGBiZWFyZXJfbmFtZWAsIHdoaWNoIGlzIGEgYFRJUENfTUFYX0JFQVJFUl9OQU1FYC1zaXplZCBhcnJheSBvbiB0aGUgc3RhY2suIEVzc2VudGlhbGx5LCBgc3RyY3B5YCBjb3VsZCBvdmVyd3JpdGUgbWVtb3J5IG9uIHRoZSBzdGFjayBiZXlvbmQgYGJlYXJlcl9uYW1lYCBpZiBgYi1cdTAwM2VuYW1lYCBpcyBsYXJnZXIgdGhhbiB0aGUgZml4ZWQtc2l6ZSBgYmVhcmVyX25hbWVgIGJ1ZmZlci4gVGhpcyBpcyBhIGNsYXNzaWMgc3RhY2sgYnVmZmVyIG92ZXJmbG93LlxuXG5Gb3J0dW5hdGVseSwgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgaXMgZGVzaWduZWQgdG8gY2F0Y2ggdGhlc2Ugc3RhY2sgYnVmZmVyIG92ZXJmbG93cyByZWxpYWJseS4gU28sIHRoZSBwb3RlbnRpYWwgd3JpdGUgaXNzdWUgaXMgYWRkcmVzc2VkIGFuZCBjYW4gYmUgY2F1Z2h0LlxuXG5Ob3csIGEgY3J1Y2lhbCBwb2ludDogaXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGhlcmU/IE5vLCBiZWNhdXNlIGBiZWFyZXJfbmFtZWAgaXMgdW5pbml0aWFsaXplZCBpbml0aWFsbHksIGJ1dCB0aGUgdXNlIG9mIGBzdHJjcHlgIChvciB0aGUgZml4ZWQtaW4tdGhlLXBhdGNoIGBzdHJzY3B5YCkgaW5pdGlhbGl6ZXMgaXQgZHVyaW5nIHRoZSBjb3B5LiBBZnRlciB0aGF0LCBgbmxhX3B1dF9zdHJpbmdgIG9ubHkgcmVhZHMgdGhlICppbml0aWFsaXplZCogc3RyaW5nIHBhcnQgdXAgdG8gdGhlIG51bGwgdGVybWluYXRvci4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBldmVyIHJlYWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gVGhpcyBwYXRjaCBpcyBzaW1wbHkgZml4aW5nIGEgcG90ZW50aWFsIHN0YWNrIGJ1ZmZlciBvdmVyZmxvdyBjYXVzZWQgYnkgYHN0cmNweWAgYmVpbmcgdXNlZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgc3Ryc2NweWAgY2FuJ3QgY3JlYXRlIGFuIGlzc3VlIGluIHRoZSBzYW1lIHdheSwgY2F1c2luZyBgYmVhcmVyX25hbWVgIHRvIGJlIGxlZnQgdW5pbml0aWFsaXplZCBpbiBhIHdheSB0aGF0IGlzIHJlYWQgYnkgYG5sYV9wdXRfc3RyaW5nYC4gSWYgYGItXHUwMDNlbmFtZWAgaXMgZW1wdHksIGkuZS4sIGp1c3QgYSBudWxsIGJ5dGUsIGBzdHJzY3B5YCB3aWxsIHdyaXRlIGEgbnVsbCBieXRlIHRvIGBiZWFyZXJfbmFtZVswXWAuIGBubGFfcHV0X3N0cmluZ2AgdGhlbiBzZWVzIGEgc3RyaW5nIG9mIGxlbmd0aCB6ZXJvIGFuZCBjb3BpZXMgYSBzaW5nbGUgbnVsbCBieXRlIHRvIHRoZSBvdXRwdXQuIEl0IGRvZXNuJ3QgbG9vayBiZXlvbmQgdGhhdC4gU28gbm8gdW5pbml0aWFsaXplZCBieXRlcyBhcmUgcmVhZC5cblxuV2hhdCBoYXBwZW5zIGlmIGBiLVx1MDAzZW5hbWVgIGlzbid0IG51bGwtdGVybWluYXRlZCwgYnV0IGBzdHJzY3B5YCAqaXMqIHVzZWQ/IFdlbGwsIGBzdHJzY3B5KG5hbWUsIGItXHUwMDNlbmFtZSwgVElQQ19NQVhfQkVBUkVSX05BTUUpYCB3aWxsIGNvcHkgdXAgdG8gYFRJUENfTUFYX0JFQVJFUl9OQU1FIC0gMWAgYnl0ZXMgZnJvbSBgYi1cdTAwM2VuYW1lYCBhbmQgdGhlbiAqZXhwbGljaXRseSogbnVsbC10ZXJtaW5hdGUgdGhlIHN0cmluZywgbWVhbmluZyB0aGF0IGBubGFfcHV0X3N0cmluZ2AgcmVhZHMgYSBzdHJpbmcgb2YgYXQgbW9zdCBgVElQQ19NQVhfQkVBUkVSX05BTUVgIGNoYXJhY3RlcnMuIEV2ZXJ5IGJ5dGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYnkgYHN0cnNjcHlgLlxuXG5BbmQgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBjYXNlIHdoZXJlIGBiLVx1MDAzZW5hbWVgIGl0c2VsZiBoYXMgdW5pbml0aWFsaXplZCBieXRlcy4gIGBiYCBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iamAsIHdoaWNoICp6ZXJvZXMqIHRoZSBtZW1vcnkgaXQgYWxsb2NhdGVzLiBBZnRlciB0aGF0LCB3ZSBgc3Ryc2NweShiLVx1MDAzZW5hbWUsIG5hbWUpYCBjb3BpZXMgdGhlIHN0cmluZyBmcm9tIGBuYW1lYCB0byBgYi1cdTAwM2VuYW1lYC4gVGh1cywgYGItXHUwMDNlbmFtZWAgY2FuIG5ldmVyIGNvbnRhaW4gdW5pbml0aWFsaXplZCBieXRlcy5cblxuU28sIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBUaGlzIHBhdGNoIHJlcGxhY2VzIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHRvIGZpeCBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSAoYm90aCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgZnJvbSBgYi1cdTAwM2VuYW1lYCwgYW5kIHdyaXRlIHRvIGBiZWFyZXJfbmFtZWApLiBLQVNBTiwgYXMgZXhwZWN0ZWQsIHJlbGlhYmx5IGRldGVjdHMgdGhlc2Ugb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgd3JpdGVzLiBNb3JlIGltcG9ydGFudGx5LCB0aGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgbWFraW5nIGl0cyB3YXkgaW50byB1c2Vyc3BhY2UuIFRoaXMgaXMgYmVjYXVzZSB0aGUgc3RyaW5nIGlzIGFsd2F5cyBwcm9wZXJseSBudWxsLXRlcm1pbmF0ZWQsIGFuZCBgbmxhX3B1dF9zdHJpbmdgIGNvcnJlY3RseSBjb3BpZXMgb25seSB1cCB0byB0aGF0IHRlcm1pbmF0b3IuIFRoZXJlZm9yZSwgd2UgZG9uJ3QgbmVlZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gZm9yIHRoaXM7IEtBU0FOIGNvdmVycyB0aGUgcmVsZXZhbnQgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg4NiwiT3V0cHV0VG9rZW5zIjoyMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNToxMzoyOC44MDczODA3MzdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGBzdHJjcHlgIHdpdGggYHN0cnNjcHlgIHRvIHByZXZlbnQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZnJvbSBgYi1cXHUwMDNlbmFtZWAgYW5kIG91dC1vZi1ib3VuZHMgd3JpdGVzIHRvIHRoZSBzdGFjay1hbGxvY2F0ZWQgYGJlYXJlcl9uYW1lYCBidWZmZXIgaW4gYF9fdGlwY19ubF9hZGRfbW9uaXRvcmAuIE91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIChib3RoIGhlYXAgYW5kIHN0YWNrKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgaGVyZTogdGhlIHNvdXJjZSBidWZmZXIgYGItXFx1MDAzZW5hbWVgIGlzIHBhcnQgb2YgYSB6ZXJvLWFsbG9jYXRlZCBzdHJ1Y3R1cmUsIGFuZCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGBiZWFyZXJfbmFtZWAgaXMgb25seSByZWFkIGJ5IGBubGFfcHV0X3N0cmluZ2AsIHdoaWNoIHN0cmljdGx5IHJlYWRzIHVwIHRvIHRoZSBudWxsIHRlcm1pbmF0b3IuIFNpbmNlIGBzdHJzY3B5YCBndWFyYW50ZWVzIG51bGwtdGVybWluYXRpb24gYW5kIGBubGFfcHV0X3N0cmluZ2AgZG9lcyBub3QgcmVhZCBwYXN0IGl0LCBubyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBpcyBldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRodXMsIHN0YW5kYXJkIEtBU0FOIGlzIGZ1bGx5IHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNvZGUsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYHN0cmNweWAgd2l0aCBgc3Ryc2NweWAgdG8gcHJldmVudCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBmcm9tIGBiLVxcdTAwM2VuYW1lYCBhbmQgb3V0LW9mLWJvdW5kcyB3cml0ZXMgdG8gdGhlIHN0YWNrLWFsbG9jYXRlZCBgYmVhcmVyX25hbWVgIGJ1ZmZlciBpbiBgX190aXBjX25sX2FkZF9tb25pdG9yYC4gT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGJvdGggaGVhcCBhbmQgc3RhY2spIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCBoZXJlOiB0aGUgc291cmNlIGJ1ZmZlciBgYi1cXHUwMDNlbmFtZWAgaXMgcGFydCBvZiBhIHplcm8tYWxsb2NhdGVkIHN0cnVjdHVyZSwgYW5kIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgYGJlYXJlcl9uYW1lYCBpcyBvbmx5IHJlYWQgYnkgYG5sYV9wdXRfc3RyaW5nYCwgd2hpY2ggc3RyaWN0bHkgcmVhZHMgdXAgdG8gdGhlIG51bGwgdGVybWluYXRvci4gU2luY2UgYHN0cnNjcHlgIGd1YXJhbnRlZXMgbnVsbC10ZXJtaW5hdGlvbiBhbmQgYG5sYV9wdXRfc3RyaW5nYCBkb2VzIG5vdCByZWFkIHBhc3QgaXQsIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGlzIGV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZS4gVGh1cywgc3RhbmRhcmQgS0FTQU4gaXMgZnVsbHkgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY29kZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlck4[1] Phase: Succeeded StartedAt: 2026-08-12 15:13:40 +0000 UTC FinishedAt: 2026-08-12 15:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 15:13:40 +0000 UTC FinishedAt: 2026-08-12 15:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2] Phase: Succeeded StartedAt: 2026-08-12 15:13:40 +0000 UTC FinishedAt: 2026-08-12 19:01:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 15:13:40 +0000 UTC FinishedAt: 2026-08-12 19:01:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 15:13:40 +0000 UTC FinishedAt: 2026-08-12 15:13:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 15:13:40 +0000 UTC FinishedAt: 2026-08-12 15:13:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrlck4/series-workflowrlck4-convert-artifact-4031465815/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 15:13:50 +0000 UTC FinishedAt: 2026-08-12 15:31:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 15:13:50 +0000 UTC FinishedAt: 2026-08-12 15:31:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d0aa416c-a288-4f24-8bba-3c699d443bec,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-workflowrlck4/series-workflowrlck4-convert-artifact-4031465815/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": "3f56378e-be19-473e-9cbe-c1c04e2ac259", "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-workflowrlck4/series-workflowrlck4-build-action-916703661/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 15:13:50 +0000 UTC FinishedAt: 2026-08-12 15:31:10 +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:*d0aa416c-a288-4f24-8bba-3c699d443bec,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-workflowrlck4/series-workflowrlck4-convert-artifact-4031465815/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": "3f56378e-be19-473e-9cbe-c1c04e2ac259", "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-workflowrlck4/series-workflowrlck4-build-action-916703661/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 15:31:20 +0000 UTC FinishedAt: 2026-08-12 15:31:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 15:31:20 +0000 UTC FinishedAt: 2026-08-12 15:31:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 15:31:20 +0000 UTC FinishedAt: 2026-08-12 15:31:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 15:31:20 +0000 UTC FinishedAt: 2026-08-12 15:31:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrlck4/series-workflowrlck4-convert-artifact-3491087750/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 15:31:30 +0000 UTC FinishedAt: 2026-08-12 15:33:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 15:31:30 +0000 UTC FinishedAt: 2026-08-12 15:33:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3f56378e-be19-473e-9cbe-c1c04e2ac259,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-workflowrlck4/series-workflowrlck4-build-action-916703661/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-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 15:33:56 +0000 UTC FinishedAt: 2026-08-12 15:33:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 15:33:56 +0000 UTC FinishedAt: 2026-08-12 15:33:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 15:33:56 +0000 UTC FinishedAt: 2026-08-12 15:56:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 15:33:56 +0000 UTC FinishedAt: 2026-08-12 15:56:21 +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:*d0aa416c-a288-4f24-8bba-3c699d443bec,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-workflowrlck4/series-workflowrlck4-convert-artifact-3491087750/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": "afe7f529-897d-465b-ba3c-f9f7891248bc", "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-workflowrlck4/series-workflowrlck4-build-action-2309299146/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 15:33:56 +0000 UTC FinishedAt: 2026-08-12 15:56: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:*d0aa416c-a288-4f24-8bba-3c699d443bec,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-workflowrlck4/series-workflowrlck4-convert-artifact-3491087750/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": "afe7f529-897d-465b-ba3c-f9f7891248bc", "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-workflowrlck4/series-workflowrlck4-build-action-2309299146/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 15:56:21 +0000 UTC FinishedAt: 2026-08-12 15:56:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 15:56:21 +0000 UTC FinishedAt: 2026-08-12 15:56:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 15:56:21 +0000 UTC FinishedAt: 2026-08-12 15:58:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 15:56:21 +0000 UTC FinishedAt: 2026-08-12 15:58:10 +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:*afe7f529-897d-465b-ba3c-f9f7891248bc,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-workflowrlck4/series-workflowrlck4-build-action-2309299146/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-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 15:58:20 +0000 UTC FinishedAt: 2026-08-12 19:01:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 15:58:20 +0000 UTC FinishedAt: 2026-08-12 19:01:50 +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_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"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:*3f56378e-be19-473e-9cbe-c1c04e2ac259,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*afe7f529-897d-465b-ba3c-f9f7891248bc,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-workflowrlck4/series-workflowrlck4-build-action-916703661/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-workflowrlck4/series-workflowrlck4-build-action-2309299146/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 15:58:20 +0000 UTC FinishedAt: 2026-08-12 15:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 15:58:20 +0000 UTC FinishedAt: 2026-08-12 15:58:26 +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_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"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-workflowrlck4/series-workflowrlck4-convert-artifact-3340327243/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 15:58:20 +0000 UTC FinishedAt: 2026-08-12 15:58:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 15:58:20 +0000 UTC FinishedAt: 2026-08-12 15:58:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 15:58:20 +0000 UTC FinishedAt: 2026-08-12 15:58:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 15:58:30 +0000 UTC FinishedAt: 2026-08-12 19:01:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlck4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_bearer_get_name","__tipc_nl_add_monitor","tipc_nl_node_dump_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"2d5bad66-7a35-489e-b425-6bdcd8972694","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 15:58:30 +0000 UTC FinishedAt: 2026-08-12 19:01:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3f56378e-be19-473e-9cbe-c1c04e2ac259,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*afe7f529-897d-465b-ba3c-f9f7891248bc,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-workflowrlck4/series-workflowrlck4-build-action-916703661/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-workflowrlck4/series-workflowrlck4-build-action-2309299146/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-workflowrlck4/series-workflowrlck4-convert-artifact-3340327243/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,}